]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-11091: [mod_sndfile] Remove libsndfile from the code base, use pre-compiled binari...
authorAndrey Volk <andywolk@gmail.com>
Wed, 4 Apr 2018 22:56:04 +0000 (01:56 +0300)
committerMuteesa Fred <muteesafred@hotmail.com>
Tue, 24 Jul 2018 07:21:49 +0000 (07:21 +0000)
359 files changed:
Freeswitch.2015.sln
libs/.gitignore
libs/libsndfile/.update [deleted file]
libs/libsndfile/AUTHORS [deleted file]
libs/libsndfile/COPYING [deleted file]
libs/libsndfile/Cfg/.empty [deleted file]
libs/libsndfile/ChangeLog [deleted file]
libs/libsndfile/INSTALL [deleted file]
libs/libsndfile/M4/Makefile.am [deleted file]
libs/libsndfile/M4/add_cflags.m4 [deleted file]
libs/libsndfile/M4/add_cxxflags.m4 [deleted file]
libs/libsndfile/M4/clang.m4 [deleted file]
libs/libsndfile/M4/clip_mode.m4 [deleted file]
libs/libsndfile/M4/endian.m4 [deleted file]
libs/libsndfile/M4/extra_largefile.m4 [deleted file]
libs/libsndfile/M4/extra_pkg.m4 [deleted file]
libs/libsndfile/M4/flexible_array.m4 [deleted file]
libs/libsndfile/M4/gcc_version.m4 [deleted file]
libs/libsndfile/M4/llrint.m4 [deleted file]
libs/libsndfile/M4/lrint.m4 [deleted file]
libs/libsndfile/M4/lrintf.m4 [deleted file]
libs/libsndfile/M4/mkoctfile_version.m4 [deleted file]
libs/libsndfile/M4/octave.m4 [deleted file]
libs/libsndfile/M4/really_gcc.m4 [deleted file]
libs/libsndfile/M4/stack_protect.m4 [deleted file]
libs/libsndfile/Makefile.am [deleted file]
libs/libsndfile/Mingw-make-dist.sh [deleted file]
libs/libsndfile/NEWS [deleted file]
libs/libsndfile/Octave/Makefile.am [deleted file]
libs/libsndfile/Octave/PKG_ADD [deleted file]
libs/libsndfile/Octave/Readme.txt [deleted file]
libs/libsndfile/Octave/format.h [deleted file]
libs/libsndfile/Octave/octave_test.m [deleted file]
libs/libsndfile/Octave/octave_test.sh [deleted file]
libs/libsndfile/Octave/sndfile.cc [deleted file]
libs/libsndfile/Octave/sndfile_load.m [deleted file]
libs/libsndfile/Octave/sndfile_play.m [deleted file]
libs/libsndfile/Octave/sndfile_save.m [deleted file]
libs/libsndfile/README [deleted file]
libs/libsndfile/README.md [deleted file]
libs/libsndfile/Scripts/android-configure.sh [deleted file]
libs/libsndfile/Scripts/build-test-tarball.mk.in [deleted file]
libs/libsndfile/Scripts/clang-sanitize.sh [deleted file]
libs/libsndfile/Scripts/cstyle.py [deleted file]
libs/libsndfile/Scripts/git-pre-commit-hook [deleted file]
libs/libsndfile/Scripts/linux-to-win-cross-configure.sh [deleted file]
libs/libsndfile/TODO [deleted file]
libs/libsndfile/Win32/Makefile.am [deleted file]
libs/libsndfile/Win32/README-precompiled-dll.txt [deleted file]
libs/libsndfile/Win32/testprog.c [deleted file]
libs/libsndfile/acinclude.m4 [deleted file]
libs/libsndfile/autogen.sh [deleted file]
libs/libsndfile/binheader_readf_check.py [deleted file]
libs/libsndfile/configure.ac [deleted file]
libs/libsndfile/configure.gnu [deleted file]
libs/libsndfile/doc/FAQ.html [deleted file]
libs/libsndfile/doc/Makefile.am [deleted file]
libs/libsndfile/doc/api.html [deleted file]
libs/libsndfile/doc/bugs.html [deleted file]
libs/libsndfile/doc/command.html [deleted file]
libs/libsndfile/doc/development.html [deleted file]
libs/libsndfile/doc/dither.html [deleted file]
libs/libsndfile/doc/donate.html [deleted file]
libs/libsndfile/doc/embedded_files.html [deleted file]
libs/libsndfile/doc/index.html [deleted file]
libs/libsndfile/doc/libsndfile.css.in [deleted file]
libs/libsndfile/doc/linux_games_programming.txt [deleted file]
libs/libsndfile/doc/lists.html [deleted file]
libs/libsndfile/doc/new_file_type.HOWTO [deleted file]
libs/libsndfile/doc/octave.html [deleted file]
libs/libsndfile/doc/pkgconfig.html [deleted file]
libs/libsndfile/doc/print.css [deleted file]
libs/libsndfile/doc/sndfile_info.html [deleted file]
libs/libsndfile/doc/tutorial.html [deleted file]
libs/libsndfile/doc/win32.html [deleted file]
libs/libsndfile/echo-install-dirs.in [deleted file]
libs/libsndfile/examples/Makefile.am [deleted file]
libs/libsndfile/examples/cooledit-fixer.c [deleted file]
libs/libsndfile/examples/generate.c [deleted file]
libs/libsndfile/examples/generate.cs [deleted file]
libs/libsndfile/examples/list_formats.c [deleted file]
libs/libsndfile/examples/make_sine.c [deleted file]
libs/libsndfile/examples/sfprocess.c [deleted file]
libs/libsndfile/examples/sndfile-convert.c [deleted file]
libs/libsndfile/examples/sndfile-info.c [deleted file]
libs/libsndfile/examples/sndfile-play-beos.cpp [deleted file]
libs/libsndfile/examples/sndfile-play.c [deleted file]
libs/libsndfile/examples/sndfile-to-text.c [deleted file]
libs/libsndfile/examples/sndfilehandle.cc [deleted file]
libs/libsndfile/libsndfile.spec.in [deleted file]
libs/libsndfile/make_lite.py [deleted file]
libs/libsndfile/man/Makefile.am [deleted file]
libs/libsndfile/man/sndfile-cmp.1 [deleted file]
libs/libsndfile/man/sndfile-concat.1 [deleted file]
libs/libsndfile/man/sndfile-convert.1 [deleted file]
libs/libsndfile/man/sndfile-info.1 [deleted file]
libs/libsndfile/man/sndfile-interleave.1 [deleted file]
libs/libsndfile/man/sndfile-metadata-get.1 [deleted file]
libs/libsndfile/man/sndfile-play.1 [deleted file]
libs/libsndfile/programs/Makefile.am [deleted file]
libs/libsndfile/programs/common.c [deleted file]
libs/libsndfile/programs/common.h [deleted file]
libs/libsndfile/programs/sndfile-cmp.c [deleted file]
libs/libsndfile/programs/sndfile-concat.c [deleted file]
libs/libsndfile/programs/sndfile-convert.c [deleted file]
libs/libsndfile/programs/sndfile-deinterleave.c [deleted file]
libs/libsndfile/programs/sndfile-info.c [deleted file]
libs/libsndfile/programs/sndfile-interleave.c [deleted file]
libs/libsndfile/programs/sndfile-jackplay.c [deleted file]
libs/libsndfile/programs/sndfile-metadata-get.c [deleted file]
libs/libsndfile/programs/sndfile-metadata-set.c [deleted file]
libs/libsndfile/programs/sndfile-play-beos.cpp [deleted file]
libs/libsndfile/programs/sndfile-play.c [deleted file]
libs/libsndfile/programs/sndfile-salvage.c [deleted file]
libs/libsndfile/programs/test-sndfile-metadata-set.py [deleted file]
libs/libsndfile/reconfigure.mk [deleted file]
libs/libsndfile/regtest/Makefile.am [deleted file]
libs/libsndfile/regtest/Readme.txt [deleted file]
libs/libsndfile/regtest/checksum.c [deleted file]
libs/libsndfile/regtest/database.c [deleted file]
libs/libsndfile/regtest/regtest.h [deleted file]
libs/libsndfile/regtest/sndfile-regtest.c [deleted file]
libs/libsndfile/sndfile.pc.in [deleted file]
libs/libsndfile/src/ALAC/ALACAudioTypes.h [deleted file]
libs/libsndfile/src/ALAC/ALACBitUtilities.c [deleted file]
libs/libsndfile/src/ALAC/ALACBitUtilities.h [deleted file]
libs/libsndfile/src/ALAC/ALACDecoder.h [deleted file]
libs/libsndfile/src/ALAC/ALACEncoder.h [deleted file]
libs/libsndfile/src/ALAC/EndianPortable.h [deleted file]
libs/libsndfile/src/ALAC/LICENSE [deleted file]
libs/libsndfile/src/ALAC/ag_dec.c [deleted file]
libs/libsndfile/src/ALAC/ag_enc.c [deleted file]
libs/libsndfile/src/ALAC/aglib.h [deleted file]
libs/libsndfile/src/ALAC/alac_codec.h [deleted file]
libs/libsndfile/src/ALAC/alac_decoder.c [deleted file]
libs/libsndfile/src/ALAC/alac_decoder.h [deleted file]
libs/libsndfile/src/ALAC/alac_encoder.c [deleted file]
libs/libsndfile/src/ALAC/dp_dec.c [deleted file]
libs/libsndfile/src/ALAC/dp_enc.c [deleted file]
libs/libsndfile/src/ALAC/dplib.h [deleted file]
libs/libsndfile/src/ALAC/matrix_dec.c [deleted file]
libs/libsndfile/src/ALAC/matrix_enc.c [deleted file]
libs/libsndfile/src/ALAC/matrixlib.h [deleted file]
libs/libsndfile/src/G72x/ChangeLog [deleted file]
libs/libsndfile/src/G72x/Makefile.am [deleted file]
libs/libsndfile/src/G72x/README [deleted file]
libs/libsndfile/src/G72x/README.original [deleted file]
libs/libsndfile/src/G72x/g721.c [deleted file]
libs/libsndfile/src/G72x/g723_16.c [deleted file]
libs/libsndfile/src/G72x/g723_24.c [deleted file]
libs/libsndfile/src/G72x/g723_40.c [deleted file]
libs/libsndfile/src/G72x/g72x.c [deleted file]
libs/libsndfile/src/G72x/g72x.h [deleted file]
libs/libsndfile/src/G72x/g72x_priv.h [deleted file]
libs/libsndfile/src/G72x/g72x_test.c [deleted file]
libs/libsndfile/src/GSM610/COPYRIGHT [deleted file]
libs/libsndfile/src/GSM610/ChangeLog [deleted file]
libs/libsndfile/src/GSM610/Makefile.am [deleted file]
libs/libsndfile/src/GSM610/README [deleted file]
libs/libsndfile/src/GSM610/add.c [deleted file]
libs/libsndfile/src/GSM610/code.c [deleted file]
libs/libsndfile/src/GSM610/config.h [deleted file]
libs/libsndfile/src/GSM610/decode.c [deleted file]
libs/libsndfile/src/GSM610/gsm.h [deleted file]
libs/libsndfile/src/GSM610/gsm610_priv.h [deleted file]
libs/libsndfile/src/GSM610/gsm_create.c [deleted file]
libs/libsndfile/src/GSM610/gsm_decode.c [deleted file]
libs/libsndfile/src/GSM610/gsm_destroy.c [deleted file]
libs/libsndfile/src/GSM610/gsm_encode.c [deleted file]
libs/libsndfile/src/GSM610/gsm_option.c [deleted file]
libs/libsndfile/src/GSM610/long_term.c [deleted file]
libs/libsndfile/src/GSM610/lpc.c [deleted file]
libs/libsndfile/src/GSM610/preprocess.c [deleted file]
libs/libsndfile/src/GSM610/rpe.c [deleted file]
libs/libsndfile/src/GSM610/short_term.c [deleted file]
libs/libsndfile/src/GSM610/table.c [deleted file]
libs/libsndfile/src/Makefile.am [deleted file]
libs/libsndfile/src/Symbols.darwin [deleted file]
libs/libsndfile/src/Symbols.linux [deleted file]
libs/libsndfile/src/Symbols.os2 [deleted file]
libs/libsndfile/src/aiff.c [deleted file]
libs/libsndfile/src/alac.c [deleted file]
libs/libsndfile/src/alaw.c [deleted file]
libs/libsndfile/src/au.c [deleted file]
libs/libsndfile/src/audio_detect.c [deleted file]
libs/libsndfile/src/avr.c [deleted file]
libs/libsndfile/src/binheader_writef_check.py [deleted file]
libs/libsndfile/src/broadcast.c [deleted file]
libs/libsndfile/src/caf.c [deleted file]
libs/libsndfile/src/cart.c [deleted file]
libs/libsndfile/src/chanmap.c [deleted file]
libs/libsndfile/src/chanmap.h [deleted file]
libs/libsndfile/src/chunk.c [deleted file]
libs/libsndfile/src/command.c [deleted file]
libs/libsndfile/src/common.c [deleted file]
libs/libsndfile/src/common.h [deleted file]
libs/libsndfile/src/create_symbols_file.py [deleted file]
libs/libsndfile/src/cygsndfile.def [deleted file]
libs/libsndfile/src/dither.c [deleted file]
libs/libsndfile/src/double64.c [deleted file]
libs/libsndfile/src/dwd.c [deleted file]
libs/libsndfile/src/dwvw.c [deleted file]
libs/libsndfile/src/file_io.c [deleted file]
libs/libsndfile/src/flac.c [deleted file]
libs/libsndfile/src/float32.c [deleted file]
libs/libsndfile/src/float_cast.h [deleted file]
libs/libsndfile/src/g72x.c [deleted file]
libs/libsndfile/src/gsm610.c [deleted file]
libs/libsndfile/src/htk.c [deleted file]
libs/libsndfile/src/id3.c [deleted file]
libs/libsndfile/src/ima_adpcm.c [deleted file]
libs/libsndfile/src/ima_oki_adpcm.c [deleted file]
libs/libsndfile/src/ima_oki_adpcm.h [deleted file]
libs/libsndfile/src/interleave.c [deleted file]
libs/libsndfile/src/ircam.c [deleted file]
libs/libsndfile/src/libsndfile-1.def [deleted file]
libs/libsndfile/src/libsndfile.def [deleted file]
libs/libsndfile/src/macbinary3.c [deleted file]
libs/libsndfile/src/macos.c [deleted file]
libs/libsndfile/src/make-static-lib-hidden-privates.sh [deleted file]
libs/libsndfile/src/mat4.c [deleted file]
libs/libsndfile/src/mat5.c [deleted file]
libs/libsndfile/src/mpc2k.c [deleted file]
libs/libsndfile/src/ms_adpcm.c [deleted file]
libs/libsndfile/src/new.c [deleted file]
libs/libsndfile/src/nist.c [deleted file]
libs/libsndfile/src/ogg.c [deleted file]
libs/libsndfile/src/ogg.h [deleted file]
libs/libsndfile/src/ogg_opus.c [deleted file]
libs/libsndfile/src/ogg_pcm.c [deleted file]
libs/libsndfile/src/ogg_speex.c [deleted file]
libs/libsndfile/src/ogg_vorbis.c [deleted file]
libs/libsndfile/src/paf.c [deleted file]
libs/libsndfile/src/pcm.c [deleted file]
libs/libsndfile/src/pvf.c [deleted file]
libs/libsndfile/src/raw.c [deleted file]
libs/libsndfile/src/rf64.c [deleted file]
libs/libsndfile/src/rx2.c [deleted file]
libs/libsndfile/src/sd2.c [deleted file]
libs/libsndfile/src/sds.c [deleted file]
libs/libsndfile/src/sf_unistd.h [deleted file]
libs/libsndfile/src/sfconfig.h [deleted file]
libs/libsndfile/src/sfendian.h [deleted file]
libs/libsndfile/src/sndfile.c [deleted file]
libs/libsndfile/src/sndfile.h.in [deleted file]
libs/libsndfile/src/sndfile.hh [deleted file]
libs/libsndfile/src/strings.c [deleted file]
libs/libsndfile/src/svx.c [deleted file]
libs/libsndfile/src/test_audio_detect.c [deleted file]
libs/libsndfile/src/test_broadcast_var.c [deleted file]
libs/libsndfile/src/test_cart_var.c [deleted file]
libs/libsndfile/src/test_conversions.c [deleted file]
libs/libsndfile/src/test_endswap.c [deleted file]
libs/libsndfile/src/test_endswap.def [deleted file]
libs/libsndfile/src/test_endswap.tpl [deleted file]
libs/libsndfile/src/test_file_io.c [deleted file]
libs/libsndfile/src/test_float.c [deleted file]
libs/libsndfile/src/test_ima_oki_adpcm.c [deleted file]
libs/libsndfile/src/test_log_printf.c [deleted file]
libs/libsndfile/src/test_main.c [deleted file]
libs/libsndfile/src/test_main.h [deleted file]
libs/libsndfile/src/test_strncpy_crlf.c [deleted file]
libs/libsndfile/src/txw.c [deleted file]
libs/libsndfile/src/ulaw.c [deleted file]
libs/libsndfile/src/version-metadata.rc.in [deleted file]
libs/libsndfile/src/voc.c [deleted file]
libs/libsndfile/src/vox_adpcm.c [deleted file]
libs/libsndfile/src/w64.c [deleted file]
libs/libsndfile/src/wav.c [deleted file]
libs/libsndfile/src/wav_w64.c [deleted file]
libs/libsndfile/src/wav_w64.h [deleted file]
libs/libsndfile/src/windows.c [deleted file]
libs/libsndfile/src/wve.c [deleted file]
libs/libsndfile/src/xi.c [deleted file]
libs/libsndfile/tests/Makefile.am [deleted file]
libs/libsndfile/tests/aiff_rw_test.c [deleted file]
libs/libsndfile/tests/alaw_test.c [deleted file]
libs/libsndfile/tests/benchmark-0.0.28 [deleted file]
libs/libsndfile/tests/benchmark-1.0.0 [deleted file]
libs/libsndfile/tests/benchmark-1.0.0rc2 [deleted file]
libs/libsndfile/tests/benchmark-1.0.18pre16-hendrix [deleted file]
libs/libsndfile/tests/benchmark-1.0.18pre16-mingus [deleted file]
libs/libsndfile/tests/benchmark-1.0.6pre10-coltrane [deleted file]
libs/libsndfile/tests/benchmark-1.0.6pre10-miles [deleted file]
libs/libsndfile/tests/benchmark-latest-coltrane [deleted file]
libs/libsndfile/tests/benchmark.c [deleted file]
libs/libsndfile/tests/benchmark.def [deleted file]
libs/libsndfile/tests/benchmark.tpl [deleted file]
libs/libsndfile/tests/channel_test.c [deleted file]
libs/libsndfile/tests/checksum_test.c [deleted file]
libs/libsndfile/tests/chunk_test.c [deleted file]
libs/libsndfile/tests/command_test.c [deleted file]
libs/libsndfile/tests/compression_size_test.c [deleted file]
libs/libsndfile/tests/cpp_test.cc [deleted file]
libs/libsndfile/tests/dft_cmp.c [deleted file]
libs/libsndfile/tests/dft_cmp.h [deleted file]
libs/libsndfile/tests/dither_test.c [deleted file]
libs/libsndfile/tests/dwvw_test.c [deleted file]
libs/libsndfile/tests/error_test.c [deleted file]
libs/libsndfile/tests/external_libs_test.c [deleted file]
libs/libsndfile/tests/fix_this.c [deleted file]
libs/libsndfile/tests/floating_point_test.c [deleted file]
libs/libsndfile/tests/floating_point_test.def [deleted file]
libs/libsndfile/tests/floating_point_test.tpl [deleted file]
libs/libsndfile/tests/format_check_test.c [deleted file]
libs/libsndfile/tests/generate.c [deleted file]
libs/libsndfile/tests/generate.h [deleted file]
libs/libsndfile/tests/header_test.c [deleted file]
libs/libsndfile/tests/header_test.def [deleted file]
libs/libsndfile/tests/header_test.tpl [deleted file]
libs/libsndfile/tests/headerless_test.c [deleted file]
libs/libsndfile/tests/largefile_test.c [deleted file]
libs/libsndfile/tests/locale_test.c [deleted file]
libs/libsndfile/tests/lossy_comp_test.c [deleted file]
libs/libsndfile/tests/misc_test.c [deleted file]
libs/libsndfile/tests/multi_file_test.c [deleted file]
libs/libsndfile/tests/ogg_test.c [deleted file]
libs/libsndfile/tests/open_fail_test.c [deleted file]
libs/libsndfile/tests/pcm_test.c [deleted file]
libs/libsndfile/tests/pcm_test.def [deleted file]
libs/libsndfile/tests/pcm_test.tpl [deleted file]
libs/libsndfile/tests/peak_chunk_test.c [deleted file]
libs/libsndfile/tests/pedantic-header-test.sh.in [deleted file]
libs/libsndfile/tests/pipe_test.c [deleted file]
libs/libsndfile/tests/pipe_test.def [deleted file]
libs/libsndfile/tests/pipe_test.tpl [deleted file]
libs/libsndfile/tests/raw_test.c [deleted file]
libs/libsndfile/tests/rdwr_test.def [deleted file]
libs/libsndfile/tests/rdwr_test.tpl [deleted file]
libs/libsndfile/tests/scale_clip_test.c [deleted file]
libs/libsndfile/tests/scale_clip_test.def [deleted file]
libs/libsndfile/tests/scale_clip_test.tpl [deleted file]
libs/libsndfile/tests/sftest.c [deleted file]
libs/libsndfile/tests/sfversion.c [deleted file]
libs/libsndfile/tests/stdin_test.c [deleted file]
libs/libsndfile/tests/stdio_test.c [deleted file]
libs/libsndfile/tests/stdout_test.c [deleted file]
libs/libsndfile/tests/string_test.c [deleted file]
libs/libsndfile/tests/test_wrapper.sh.in [deleted file]
libs/libsndfile/tests/ulaw_test.c [deleted file]
libs/libsndfile/tests/utils.c [deleted file]
libs/libsndfile/tests/utils.def [deleted file]
libs/libsndfile/tests/utils.h [deleted file]
libs/libsndfile/tests/utils.tpl [deleted file]
libs/libsndfile/tests/virtual_io_test.c [deleted file]
libs/libsndfile/tests/vorbis_test.c [deleted file]
libs/libsndfile/tests/win32_ordinal_test.c [deleted file]
libs/libsndfile/tests/win32_test.c [deleted file]
libs/libsndfile/tests/write_read_test.c [deleted file]
libs/libsndfile/tests/write_read_test.def [deleted file]
libs/libsndfile/tests/write_read_test.tpl [deleted file]
libs/win32/libsndfile/cleancount [deleted file]
libs/win32/libsndfile/config.h [deleted file]
libs/win32/libsndfile/libsndfile.2010.vcxproj.filters [deleted file]
libs/win32/libsndfile/libsndfile.2015.vcxproj [deleted file]
libs/win32/libsndfile/sndfile.h [deleted file]
src/mod/formats/mod_sndfile/mod_sndfile.2015.vcxproj
w32/libsndfile-version.props [new file with mode: 0644]
w32/libsndfile.props [new file with mode: 0644]

index 955be84cc8ee5f9dd7a3826a452c0dfef727ba19..f0529beaca3a140a1460f3067fea8a4808aa6aeb 100644 (file)
@@ -232,8 +232,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libaprutil", "libs\win32\ap
 EndProject\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iksemel", "libs\win32\iksemel\iksemel.2015.vcxproj", "{E727E8F6-935D-46FE-8B0E-37834748A0E3}"\r
 EndProject\r
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libsndfile", "libs\win32\libsndfile\libsndfile.2015.vcxproj", "{3D0370CA-BED2-4657-A475-32375CBCB6E4}"\r
-EndProject\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xml", "libs\win32\apr-util\xml.2015.vcxproj", "{155844C3-EC5F-407F-97A4-A2DDADED9B2F}"\r
 EndProject\r
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_sofia", "src\mod\endpoints\mod_sofia\mod_sofia.2015.vcxproj", "{0DF3ABD0-DDC0-4265-B778-07C66780979B}"\r
@@ -956,17 +954,6 @@ Global
                {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|Win32.Build.0 = Release|Win32\r
                {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|x64.ActiveCfg = Release|x64\r
                {E727E8F6-935D-46FE-8B0E-37834748A0E3}.Release|x64.Build.0 = Release|x64\r
-               {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|Win32.ActiveCfg = Release|x64\r
-               {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|x64.ActiveCfg = Release|x64\r
-               {3D0370CA-BED2-4657-A475-32375CBCB6E4}.All|x64.Build.0 = Release|x64\r
-               {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Win32.ActiveCfg = Debug|Win32\r
-               {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|Win32.Build.0 = Debug|Win32\r
-               {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|x64.ActiveCfg = Debug|x64\r
-               {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Debug|x64.Build.0 = Debug|x64\r
-               {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Win32.ActiveCfg = Release|Win32\r
-               {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|Win32.Build.0 = Release|Win32\r
-               {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|x64.ActiveCfg = Release|x64\r
-               {3D0370CA-BED2-4657-A475-32375CBCB6E4}.Release|x64.Build.0 = Release|x64\r
                {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|Win32.ActiveCfg = Debug|x64\r
                {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|x64.ActiveCfg = Debug|x64\r
                {155844C3-EC5F-407F-97A4-A2DDADED9B2F}.All|x64.Build.0 = Debug|x64\r
@@ -3005,7 +2992,6 @@ Global
                {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}\r
                {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}\r
                {E727E8F6-935D-46FE-8B0E-37834748A0E3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}\r
-               {3D0370CA-BED2-4657-A475-32375CBCB6E4} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}\r
                {155844C3-EC5F-407F-97A4-A2DDADED9B2F} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}\r
                {0DF3ABD0-DDC0-4265-B778-07C66780979B} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C}\r
                {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A} = {C120A020-773F-4EA3-923F-B67AF28B750D}\r
index 49d7177e88ffcd4e23fc4268a6e3d220372c6fc6..f66304d9f752e0ec2264e4c6caf16869c2b161f7 100644 (file)
@@ -854,3 +854,5 @@ flite-*/
 flite-*
 pcre-*/
 pcre-*
+libsndfile-*/
+libsndfile-*
diff --git a/libs/libsndfile/.update b/libs/libsndfile/.update
deleted file mode 100644 (file)
index cbf0edf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Fri Feb 28 03:45:32 CDT 2014
diff --git a/libs/libsndfile/AUTHORS b/libs/libsndfile/AUTHORS
deleted file mode 100644 (file)
index b7e2232..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-The main author of libsndfile is Erik de Castro Lopo <erikd@mega-nerd.com>
-apart from code in the following directories:
-
- - src/GSM610 : Written by Jutta Degener <jutta@cs.tu-berlin.de> and Carsten
-   Bormann <cabo@cs.tu-berlin.de>. They should not be contacted in relation to
-   libsndfile or the GSM 6.10 code that is part of libsndfile. Their original
-   code can be found at:
-
-       http://kbs.cs.tu-berlin.de/~jutta/toast.html
-
- - src/G72x : Released by Sun Microsystems, Inc. to the public domain. Minor
-   modifications were required to integrate these files into libsndfile. The
-   changes are listed in src/G72x/ChangeLog.
-
diff --git a/libs/libsndfile/COPYING b/libs/libsndfile/COPYING
deleted file mode 100644 (file)
index c396169..0000000
+++ /dev/null
@@ -1,503 +0,0 @@
-                  GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                            Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-                  GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                            NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                     END OF TERMS AND CONDITIONS
-
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
diff --git a/libs/libsndfile/Cfg/.empty b/libs/libsndfile/Cfg/.empty
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/libs/libsndfile/ChangeLog b/libs/libsndfile/ChangeLog
deleted file mode 100644 (file)
index d22be00..0000000
+++ /dev/null
@@ -1,9764 +0,0 @@
-2013-04-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * Makefile.am
-    Make sure checkprograms are built as part of 'make test-tarball'.
-    Closes: https://github.com/erikd/libsndfile/issues/37
-
-2013-03-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * tests/dft_cmp.c
-    Fix a buffer overflow detected using GCC 4.8's -fsantiize=address runtime
-    error checking functionality. This was a buffer overflow in libsndfile's
-    test suite, not in the actual library code.
-
-2013-03-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * M4/gcc_version.m4
-    Fix to work with OpenBSD's sed.
-
-2013-03-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/ALAC/alac_encoder.c
-    Patch from Michael Pruett (author of libaudiofile) to add correct byte
-    swapping for the mChannelLayoutTag field.
-
-2013-03-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * doc/bugs.html
-    Bugs should bt reported on the github issue tracker.
-
-2013-02-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * configure.ac
-    Improve sanitization of FLAC_CFLAGS value.
-
-2013-02-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/Makefile.am
-    Call python interpreter instead of using '#!' in script. Thanks to Jan
-    Stary for reporting this.
-
-    * doc/index.html doc/FAQ.html
-    Make internal links relative. Patch from Jan Stary.
-
-2013-02-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/test_endswap.def src/test_endswap.tpl
-    Add tests for psf_put_be32() and psf_put_be64().
-
-    * src/sfendian.h src/test_endswap.(def|tpl)
-    Add functions psf_get_be(16|32|64) with tests.
-    These are needed for platforms where un-aligned accesses cause bus faults.
-
-    * src/ALAC/ag_enc.c src/ALAC/alac_decoder.c
-    Replace all un-aligned accesses with safe alternatives.
-    Closes: https://github.com/erikd/libsndfile/issues/19
-
-2013-02-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/sfendian.h
-    Add big endian versions of H2BE_16 and H2BE_32.
-
-2013-02-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/ALAC/
-    Replace Apple endswap routines with ones from libsndfile.
-
-    * merge from libsndfile-cart repo
-    Add ability to set and get a cart chunk with WAV and RF64.
-    Orignal patch by Chris Roberts <c.roberts@csrfm.com> required a number of
-    tweaks.
-
-2013-02-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/common.h
-    Bump SF_HEADER_LEN from 8192 to 12292, the value it was in the 1.0.25
-    release.
-
-2013-02-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/alac.c
-    Fix segfault when encoding 8 channel files.
-    Closes: https://github.com/erikd/libsndfile/issues/30
-
-2013-02-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/ALAC/EndianPortable.c
-    Fall back to compiler's __BYTE_ORDER__ for endian-ness detection.
-
-2013-02-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * configure.ac src/common.h src/ima_adpcm.c src/ms_adpcm.c src/paf.c
-    Drop tests for and #ifdef hackery for C99 struct flexible array feature.
-    libsndfile assumes the compiler supports most of the ISO C99 standard.
-
-    * src/alac.c
-    Fix valgrind invalid realloc. Reported by nu774.
-    Closes: https://github.com/erikd/libsndfile/issues/31
-
-2013-02-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/alac.c
-    The 'pakt' chunk header should now be written correctly.
-    Closes: https://github.com/erikd/libsndfile/issues/24
-
-    * configure.ac Makefile.am
-    Use PKG_INSTALLDIR when it exists. Suggestion from Christoph Thompson.
-    Closes: https://github.com/erikd/libsndfile/pull/28
-
-2013-02-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/common.h src/caf.c
-    Read the ALAC 'pakt' header and stash the values.
-
-    * src/sfendian.h
-    Add functions psf_put_be64() and psf_put_be32().
-
-    * src/alac.c
-    Start work on filling on the 'pakt' chunk header.
-
-2013-02-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * doc/FAQ.html
-    Add missing opening <P> tag.
-
-    * src/alac.c
-    Increase ALAC_BYTE_BUFFER_SIZE to 82000.
-
-2013-01-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * doc/FAQ.html
-    Improve question #8.
-
-2013-01-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/ogg_opus.c
-    Add skeleton implementation so someone else can run with it.
-
-2012-12-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/common.h src/dwd.c src/rx2.c src/txw.c
-    Fix for compiling when configured with --enable-experimental. Thanks to
-    Eric Wong for reporting this.
-
-2012-12-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * configure.ac programs/sndfile-play.c
-    OS X 10.8 uses a different audio API to previous versions.
-    Fix compile failure on by disabling sndfile-play on this version.
-    Someone needs to supply code for the new API.
-
-2012-11-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * Octave/Makefile.am Octave/octave_test.sh
-    Fix 'make distcheck'.
-
-2012-10-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * M4/octave.m4
-    Relax constraints on Octave version.
-
-2012-10-11  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * tests/utils.tpl
-    Improve compare_*_or_die() functions.
-
-    * src/command.c
-    Fix bug reported by Keiler Florian. When reading short or int data from a
-    file containing float data, and setting SFC_SET_SCALE_FLOAT_INT_READ to
-    SF_TRUE would fail 3, 5, 7 and other channels counts. Problem was that
-    psf_calc_signal_max() was not calculating the signal max correctly.
-    Calculation of the signal max was failing because it was trying to read
-    a sample count that was not an integer multiple of the channel count.
-
-    * tests/channel_test.c tests/Makefile.am tests/test_wrapper.sh.in
-    Add test for the above.
-
-2012-09-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/sndfile.hh
-    Added a constructor to allow the use of SF_VIRTUAL_IO. Patch from
-    DannyDaemonic : https://github.com/erikd/libsndfile/pull/20
-
-2012-08-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * doc/octave.html
-    Fix link to octave.sourceforge.net. Thanks to IOhannes m zmoelnig.
-
-    * src/mat5.c
-    Allow reading of mat5 files without a specified sample rate (default to
-    44.1kHz). Thanks to IOhannes m zmoelnig.
-
-2012-08-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/paf.c
-    Error out if channel count is zero. Bug report from William ELla via
-    launchpad:
-    https://bugs.launchpad.net/ubuntu/+source/libsndfile/+bug/1036831
-
-2012-08-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * configure.ac programs/sndfile-play.c
-    Patch from Ricci Adams to use OSX's AudioQueues on OSX 10.7 and greater.
-
-2012-07-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * programs/common.c
-    Accept "ogg" as a file extention for Ogg/Vorbis files.
-
-2012-06-22  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/flac.c
-    Make sure any previously allocated FLAC stream encoder and stream decoder
-    objects are deleted before a new one is allocated.
-
-2012-06-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * tests/utils.tpl
-    Rename gen_lowpass_noise_float() to gen_lowpass_signal_float() and add a
-    sine wave component so that different FLAC compression levels can be
-    tested.
-
-    * src/sndfile.h.in doc/command.html
-    Add SFC_SET_COMPRESSION_LEVEL and document it.
-
-    * src/sndfile.c
-    Catch SFC_SET_VBR_ENCODING_QUALITY command and implement it as the inverse
-    of SFC_SET_COMPRESSION_LEVEL.
-
-    * src/ogg_vorbis.c src/flac.c
-    Implement SFC_SET_COMPRESSION_LEVEL command.
-
-    * tests/test_wrapper.sh.in tests/compression_size_test.c
-    Use the compression_size_test on FLAC as well.
-
-2012-06-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * tests/
-    Rename vorbis_test.c -> compression_size_test.c so it can be extended to
-    test FLAC as well.
-
-2012-06-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/broadcast.c
-    Fix a bug where a file with a 'bext' chunk with a zero length coding
-    history field would get corrupted when the file was closed.
-    Reported by Paul Davis of the Ardour project.
-
-    * src/test_broadcast_var.c
-    Add a test for the above.
-
-2012-05-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/sndfile.c
-    sf_format_check: For SF_FORMAT_AIFF, reject endian-ness setttings for
-    non-PCM formats.
-
-2012-04-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/aiff.c
-    Fix regression in handling of odd length SSND chunks.
-    Thanks Olivier Tristan for the example file.
-
-    * src/aiff.c src/wav.c
-    Exit parser loop when marker == 0.
-
-2012-04-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * doc/FAQ.html
-    Fix text. Thanks to Richard Collins.
-
-2012-03-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/caf.c
-    Exit parse loop if the marker is zero. Pass jump offsets as size_t instead
-    of int.
-
-2012-03-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/alac.c
-    Fix segfault when decoding CAF/ALAC file with more than 4 channels.
-    Fixes github issue #8 reported by Charles Van Winkle.
-
-2012-03-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/common.h
-    Change 'typedef SF_CHUNK_ITERATOR { ... } SF_CHUNK_ITERATOR' into 'struct
-    SF_CHUNK_ITERATOR { ... }' to prevent older compilers from complaining of
-    re-typedef-ing of SF_CHUNK_ITERATOR.
-
-    * configure.ac
-    Fix if test for empty $prefix.
-
-2012-03-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/*.c tests/chunk_test.c
-    Reworking of custom chunk handling code.
-    - Memory for the iterator is now attached to the SF_PRIVATE struct and
-      freed one sf_close().
-    - Rename sf_create_chunk_iterator() ->  sf_get_chunk_iterator().
-    - Each SNDFILE handle never has more than one SF_CHUNK_ITERATOR handle.
-
-    * tests/string_test.c
-    Fix un-initialised char buffer.
-
-2012-03-17  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/*.c tests/chunk_test.c
-    Add improved handling of custom chunk getting and settings. Set of patches
-    from IOhannes m zmoelnig submitted via github pull request #6.
-
-    * src/alac.c
-    Fix calculated frame count for files with zero block length.
-
-2012-03-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/avr.c
-    Remove double assignment to psf->endian. Thanks Kao Dome.
-
-    * src/gsm610.c
-    Fix clearing of buffers. Thanks Kao Dome.
-
-    * src/paf.c
-    Remove duplicate code. Thanks Kao Dome.
-
-    * src/test_strncpy_crlf.c
-    Fix minor error in test. Thanks Kao Dome.
-
-    * src/common.h src/*.c
-    Fix a bunch of valgrind errors.
-
-2012-03-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/sndfile.c
-    Fix typo in error string 'Uknown' -> 'Unknown'.
-
-    * tests/fix_this.c
-    Fix potential int overflow.
-
-2012-03-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/alac.c
-    Fix decoding of last block so that the decode length is not a multiple of
-    the block length. Fixes github issue #4 reported by Charles Van Winkle.
-
-    * src/sfconfig.h src/sfendian.h
-    Fix for MinGW cross compiling. Use '#if (defined __*66__)' instead of
-    '#if __*86__' because the MinGW header use '#ifdef __x86_64__'.
-
-2012-03-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/ALAC/ src/alac.c
-    Unify the interface between libsndfile and Apple ALAC codec. Regardless of
-    file bit width samples are now passed between the two as int32_t that are
-    justified towards the most significant bit. Without this modification, 16
-    conversion functions would have been needed between the libsndfile (short,
-    int, float, double) types and the ALAC types (16, 20, 24 and 32 bit). With
-    this mod, only 4 are needed.
-
-    * tests/floating_point_test.tpl tests/write_read_test.(def|tpl)
-    Add tests for 20 and 24 bit ALAC/CAF files.
-
-    * src/command.c
-    Add ALAC/CAF to the SFC_GET_FORMAT_* commands. Fixes github issue #5.
-
-    * configure.ac
-    Only use automake AM_SLIENT_RULES where supported. Thanks Dave Yeo.
-
-    * tests/pipe_test.tpl
-    Disable tests on OS/2. Thanks Dave Yeo.
-
-2012-03-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * configure.ac src/sfconfig.h src/sfendian.h
-    For GCC, use inline assembler for endian swapping. This should work with
-    older versions of GCC like the one currently used in OS/2.
-
-2012-03-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/alac.c
-    Make sure temp file gets opened in binary mode.
-
-    * src/alac.c src/common.c src/common.h
-    Fix function alac_write16_d().
-
-    * tests/floating_point_test.tpl
-    Add tests for 16 bit ALAC/CAF.
-
-    * src/alac.c src/common.c src/common.h
-    Add support for 32 bit ALAC/CAF files.
-
-    * tests/floating_point_test.tpl tests/write_read_test.tpl
-    Add tests for 32 bit ALAC/CAF files.
-
-2012-03-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/
-    Refactor chunk storage so it work on big as well as little endian CPUs.
-
-    * tests/chunk_test.c
-    Clean up error messages.
-
-    * src/sfendian.h src/*.c
-    Rename endian swapping macros and add ENDSWAP_64 and BE2H_64.
-
-    * configure.ac
-    Detect presence of <x86intrin.h> header file.
-
-    * src/sfendian.h
-    Use <x86intrin.h> intrinsics (ie for MinGW) when <byteswap.h> is not
-    present.
-    Make ENDSWAP_64() work with i686-w64-mingw32 compiler.
-
-    * src/ALAC/EndianPortable.c
-    Add support for __powerpc__.
-
-    * src/sfconfig.h
-    Make sure HAVE_X86INTRIN_H is either 1 or 0.
-
-2012-03-03  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/ALAC/*
-    Big dump of code for Apple's ALAC file format. The copyyright to this code
-    is owned by Apple who have released it under an Apache style license. A few
-    small modifications were made to allow this to be integrated into libsndfile
-    but unfortunately the history of those changes were lost because they were
-    developed in a Bzr tree and during that time libsndfile moved to Git.
-
-    * src/alac.c src/caf.c src/common.[ch] src/Makefile.am src/sndfile.h.in
-        src/sndfile.c
-    Hook new ALAC codec in.
-
-    * programs/sndfile-convert.c
-    Add support for alac codec.
-
-    * tests/write_read_test.tpl
-    Expand tests to cover ALAC.
-
-2012-03-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/aiff.c src/wav.c
-    Fix a couple of regressions from version 1.0.25.
-
-2012-03-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/strings.c
-    Minor refactoring. Make sure that the memory allocation size if always > 0
-    to avoid undefined behaviour.
-
-2012-02-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/chunk.c
-    Fix buffer overrun introduced in recently added chunk logging. This chunk
-    logging has not yet made it to a libsndfile release version. Thanks to
-    Olivier Tristan for providing an example file.
-
-    * src/wav.c
-    Fix handling of odd sized chunks which was causing the parser to lose some
-    chunks. Thanks to Olivier Tristan for providing an example file.
-
-2012-02-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * tests/util.tpl
-    Used gnu_printf format checking with mingw-w64 compiler.
-
-    * tests/header_test.tpl
-    Printf format fixes.
-
-2012-02-25  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * M4/extra_pkg.m4
-    Update PKG_CHECK_MOD_VERSION macro to add an AC_TRY_LINK step. This fix
-    allows the configure process to catch attempts to link incompatible
-    libraries. For example, linking 32 bit version of eg libFLAC to a 64 bit
-    version of libsndfile will now fail. Similarly, when cross compiling
-    libsndfile from Linux to Windows linking the Linux versions of a library
-    to the Windows version of libsndfile will now also fail.
-
-    * src/sndfile.h.in src/sndfile.c src/common.h src/create_symbols_file.py
-    Add API function sf_current_byterate().
-
-    * src/dwvw.c src/flac.c src/ogg_vorbis.c src/sds.c
-    Add codec specific handlers for current byterate.
-
-    * tests/floating_point_test.tpl
-    Add initial test for sf_current_byterate().
-
-2012-02-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/common.[ch]
-    Add function psf_decode_frame_count().
-
-    * src/dwvw.c
-    Fix a termnation bug that caused the decoder to go into an infinite loop.
-
-2012-02-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/wav.c
-    Fix a regression in the WAV header parser. Thanks to Olivier Tristan for
-    bug report and the example file.
-
-2012-02-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/sndfile.c
-    Return error when SF_BROADCAST_INFO struct has bad coding_history_size.
-    Thanks to Alex Weiss for the report.
-
-2012-02-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/au.c src/flac.c src/g72x.c src/ogg_vorbis.c src/wav_w64.c
-    Don't fake psf->bytewidth values.
-
-2012-02-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * tests/string_test.c
-    Fix valgrind warnings.
-
-    * src/common.h src/sndfile.c src/strings.c
-    Make string storage dynamically allocated.
-
-    * src/sndfile.c
-    Add extra validation for custom chunk handling.
-
-2012-02-18  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/wav.c
-    Improve handlling unknown chunk types. Thanks to Olivier Tristan for sending
-    example files.
-
-    * src/utils.tpl
-    Add GCC specific testing for format string parameters for exit_if_true().
-
-    * tests/*.c tests/*.tpl
-    Fix all printf format warnings.
-
-    * programs/sndfile-play.c
-    Remove un-needed OSX include <Carbon.h>. Thanks jamesfmilne for github
-    issue #3.
-
-    * tests/chunk_test.c
-    Extend custom chunk test.
-
-2012-02-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/wav.c
-    Jump over some more chunk types while parsing.
-
-2012-02-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/common.h src/strings.c
-    Change way strings are stored in SF_PRIVATE in preparation for dynamically
-    allocating the storage.
-
-2012-02-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/common.h src*.c
-    Improve encapsulation of string data in SF_PRIVATE.
-
-2012-02-01  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/common.h src*.c
-    Remove the buffer union from SF_PRIVATE. Most uses of this have been
-    replaced with a BUF_UNION that is allocated on the stack.
-
-2012-01-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/common.h src*.c
-    Rename logbuffer field of SF_PRIVATE to parselog and reduce its size.
-    Put the parselog buffer and the index inside a struct within SF_PRIVATE.
-
-2012-01-26  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * configure.ac
-    Fix typo, FLAC_CLFAGS -> FLAC_CFLAGS. Thanks to Jeremy Friesner.
-
-2012-01-21  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/sndfile.c src/ogg.c
-    Fix misleading error message when trying to create an SF_FORMAT_OGG file
-    with anything other than SF_FORMAT_FILE. Thanks to Charles Van Winkle for
-    the bug report. Github issue #1.
-
-2012-01-20  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/sndfile.c src/wav.c
-    Allow files opened in RDWR mode with string data in the tailer to be
-    extended. Thanks to Bodo for the patch.
-
-    * tests/string_test.c
-    Add tests for the above changes (patch from Bodo).
-
-2012-01-09  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/aiff.c
-    Refactor reading of chunk size and use of psf_store_read_chunk().
-
-    * src/(caf|wav).c
-    Correct storing of chunk offset.
-
-2012-01-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/aiff.c src/wav.c src/common.h
-    Refactor common code into src/common.h.
-
-    * src/caf.c
-    Make custom chunks work for CAF files.
-
-    * tests/chunk_test.c tests/test_wrapper.sh.in
-    Test CAF files with custom chunks.
-
-    * src/sndfile.c
-    Prevent psf->codec_close() being called more than once.
-
-2012-01-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * programs/sndfile-cmp.c
-    Catch the case where the second file has more frames than the first.
-
-2012-01-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/create_symbols_file.py
-    Add sf_set_chunk/sf_get_chunk_size/sf_get_chunk_data.
-
-2011-12-31  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * tests/chunk_test.c tests/Makefile.am
-    New test for custom chunks.
-
-    * src/aiff.c src/chunk.c src/common.h src/sndfile.c
-    Make custom chunks work on AIFF files.
-
-    * src/wav.c
-    Make custom chunks work on WAV files (includes refactoring).
-
-2011-11-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/sndfile.h.in src/common.h src/sndfile.c
-    Start working on setting/getting chunks.
-
-2011-11-24  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/binheader_writef_check.py src/create_symbols_file.py
-    Make it work for Python 2 and 3. Thanks Michael.
-
-2011-11-19  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * libsndfile.spec.in
-    Change field name 'URL' to 'Url'.
-
-    * src/sndfile.h.in
-    Add SF_SEEK_SET/CUR/END.
-
-2011-11-05  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/id3.c
-    Fix a stack overflow that can occur when parsing a file with multiple
-    ID3 headers which would cause libsndfile to go into an infinite recursion
-    until it blew the stack. Thanks to Anders Svensson for supplying an example
-    file.
-
-2011-10-30  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/double64.c src/float32.c src/common.h
-    Make (float32|double_64)_(be|le)_read() functions const correct.
-
-2011-10-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/sfendian.h
-    Minor tweaking of types. Cast to ptr to correct final type rather void*.
-
-    * programs/sndfile-play.c tests/utils.tpl
-    Fix compiler warnings with latest MinGW cross compiler.
-
-2011-10-13  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/file_io.c
-    Use the non-deprecated resource fork name on OSX. Thanks to Olivier Tristan.
-
-2011-10-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/wav.c
-    Jump over the 'olym' chunks when parsing.
-
-2011-10-06  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * tests/write_read_test.tpl
-    Remove windows only truncate() implementation.
-
-2011-09-04  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * src/sd2.c src/sndfile.c
-    Make sure 23 bit PCM SD2 files are readable/writeable.
-
-    * tests/write_read_test.tpl
-    Add tests for 32 bit PCM SD2 files.
-
-2011-08-23  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * configure.ac
-    Use AC_SYS_LARGEFILE instead of AC_SYS_EXTRA_LARGEFILE as suggested by
-    Jan Willies.
-
-2011-08-07  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * configure.ac Makefile.am
-    Move ACLOCAL_AMFLAGS setup to Makefile.am.
-
-2011-07-15  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * doc/command.html
-    Merge two separate blocks of SFC_SET_VBR_ENCODING_QUALITY documentation.
-
-    * src/paf.c
-    Replace ppaf24->samplesperblock with a compile time constant.
-
-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.
diff --git a/libs/libsndfile/INSTALL b/libs/libsndfile/INSTALL
deleted file mode 100644 (file)
index b42a17a..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-Basic Installation
-==================
-
-   These are generic installation instructions.
-
-   The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation.  It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions.  Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, a file
-`config.cache' that saves the results of its tests to speed up
-reconfiguring, and a file `config.log' containing compiler output
-(useful mainly for debugging `configure').
-
-   If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If at some point `config.cache'
-contains results you don't want to keep, you may remove or edit it.
-
-   The file `configure.in' is used to create `configure' by a program
-called `autoconf'.  You only need `configure.in' if you want to change
-it or regenerate `configure' using a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
-  1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.  If you're
-     using `csh' on an old version of System V, you might need to type
-     `sh ./configure' instead to prevent `csh' from trying to execute
-     `configure' itself.
-
-     Running `configure' takes awhile.  While running, it prints some
-     messages telling which features it is checking for.
-
-  2. Type `make' to compile the package.
-
-  3. Optionally, type `make check' to run any self-tests that come with
-     the package.
-
-  4. Type `make install' to install the programs and any data files and
-     documentation.
-
-  5. You can remove the program binaries and object files from the
-     source code directory by typing `make clean'.  To also remove the
-     files that `configure' created (so you can compile the package for
-     a different kind of computer), type `make distclean'.  There is
-     also a `make maintainer-clean' target, but that is intended mainly
-     for the package's developers.  If you use it, you may have to get
-     all sorts of other programs in order to regenerate files that came
-     with the distribution.
-
-Compilers and Options
-=====================
-
-   Some systems require unusual options for compilation or linking that
-the `configure' script does not know about.  You can give `configure'
-initial values for variables by setting them in the environment.  Using
-a Bourne-compatible shell, you can do that on the command line like
-this:
-     CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
-
-Or on systems that have the `env' program, you can do it like this:
-     env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
-
-Compiling For Multiple Architectures
-====================================
-
-   You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory.  To do this, you must use a version of `make' that
-supports the `VPATH' variable, such as GNU `make'.  `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.
-
-   If you have to use a `make' that does not supports the `VPATH'
-variable, you have to compile the package for one architecture at a time
-in the source code directory.  After you have installed the package for
-one architecture, use `make distclean' before reconfiguring for another
-architecture.
-
-Installation Names
-==================
-
-   By default, `make install' will install the package's files in
-`/usr/local/bin', `/usr/local/man', etc.  You can specify an
-installation prefix other than `/usr/local' by giving `configure' the
-option `--prefix=PATH'.
-
-   You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files.  If you
-give `configure' the option `--exec-prefix=PATH', the package will use
-PATH as the prefix for installing programs and libraries.
-Documentation and other data files will still use the regular prefix.
-
-   In addition, if you use an unusual directory layout you can give
-options like `--bindir=PATH' to specify different values for particular
-kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.
-
-   If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
-   Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System).  The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
-   For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-Specifying the System Type
-==========================
-
-   There may be some features `configure' can not figure out
-automatically, but needs to determine by the type of host the package
-will run on.  Usually `configure' can figure that out, but if it prints
-a message saying it can not guess the host type, give it the
-`--host=TYPE' option.  TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name with three fields:
-     CPU-COMPANY-SYSTEM
-
-See the file `config.sub' for the possible values of each field.  If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the host type.
-
-   If you are building compiler tools for cross-compiling, you can also
-use the `--target=TYPE' option to select the type of system they will
-produce code for and the `--build=TYPE' option to select the type of
-system on which you are compiling the package.
-
-Sharing Defaults
-================
-
-   If you want to set default values for `configure' scripts to share,
-you can create a site shell script called `config.site' that gives
-default values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists.  Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Operation Controls
-==================
-
-   `configure' recognizes the following options to control how it
-operates.
-
-`--cache-file=FILE'
-     Use and save the results of the tests in FILE instead of
-     `./config.cache'.  Set FILE to `/dev/null' to disable caching, for
-     debugging `configure'.
-
-`--help'
-     Print a summary of the options to `configure', and exit.
-
-`--quiet'
-`--silent'
-`-q'
-     Do not print messages saying which checks are being made.  To
-     suppress all normal output, redirect it to `/dev/null' (any error
-     messages will still be shown).
-
-`--srcdir=DIR'
-     Look for the package's source code in directory DIR.  Usually
-     `configure' can determine that directory automatically.
-
-`--version'
-     Print the version of Autoconf used to generate the `configure'
-     script, and exit.
-
-`configure' also accepts some other, not widely useful, options.
diff --git a/libs/libsndfile/M4/Makefile.am b/libs/libsndfile/M4/Makefile.am
deleted file mode 100644 (file)
index e2d984a..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-EXTRA_DIST = add_cflags.m4 clip_mode.m4 endian.m4 \
-       flexible_array.m4 llrint.m4 lrint.m4 lrintf.m4 octave.m4 extra_pkg.m4
-
diff --git a/libs/libsndfile/M4/add_cflags.m4 b/libs/libsndfile/M4/add_cflags.m4
deleted file mode 100644 (file)
index 55a326c..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-dnl @synopsis MN_ADD_CFLAGS
-dnl
-dnl Add the given option to CFLAGS, if it doesn't break the compiler
-
-AC_DEFUN([MN_ADD_CFLAGS],
-[AC_MSG_CHECKING([if $CC accepts $1])
-       ac_add_cflags__old_cflags="$CFLAGS"
-       CFLAGS="$1"
-       AC_TRY_LINK([
-                       #include <stdio.h>
-                       ],
-               [puts("Hello, World!"); return 0;],
-               AC_MSG_RESULT([yes])
-                       CFLAGS="$ac_add_cflags__old_cflags $1",
-               AC_MSG_RESULT([no])
-                       CFLAGS="$ac_add_cflags__old_cflags"
-               )
-])# MN_ADD_CFLAGS
diff --git a/libs/libsndfile/M4/add_cxxflags.m4 b/libs/libsndfile/M4/add_cxxflags.m4
deleted file mode 100644 (file)
index 1c0a4de..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-dnl @synopsis MN_ADD_CXXFLAGS
-dnl
-dnl Add the given option to CXXFLAGS, if it doesn't break the compiler
-
-AC_DEFUN([MN_ADD_CXXFLAGS],
-[AC_MSG_CHECKING([if $CXX accepts $1])
-       AC_LANG_ASSERT([C++])
-       ac_add_cxxflags__old_cxxflags="$CXXFLAGS"
-       CXXFLAGS="$1"
-       AC_TRY_LINK([
-                       #include <cstdio>
-                       ],
-               [puts("Hello, World!"); return 0;],
-               AC_MSG_RESULT([yes])
-                       CXXFLAGS="$ac_add_cxxflags__old_cxxflags $1",
-               AC_MSG_RESULT([no])
-                       CXXFLAGS="$ac_add_cxxflags__old_cxxflags"
-               )
-])# MN_ADD_CXXFLAGS
diff --git a/libs/libsndfile/M4/clang.m4 b/libs/libsndfile/M4/clang.m4
deleted file mode 100644 (file)
index 4cf3077..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-dnl @synopsis MN_C_COMPILER_IS_CLANG
-dnl
-dnl Find out if a compiler claiming to be gcc really is gcc (fuck you clang).
-dnl @version 1.0       Oct 31 2013
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any
-dnl purpose is hereby granted without fee, provided that the above copyright
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is
-dnl provided "as is" without express or implied warranty.
-dnl
-
-
-AC_DEFUN([MN_C_COMPILER_IS_CLANG],
-[AC_CACHE_CHECK(whether we are using the CLANG C compiler,
-       mn_cv_c_compiler_clang,
-       [       AC_LANG_ASSERT(C)
-               AC_TRY_LINK([
-                       #include <stdio.h>
-                       ],
-                       [
-                       #ifndef __clang__
-                               This is not clang!
-                       #endif
-                       ],
-               mn_cv_c_compiler_clang=yes,
-               mn_cv_c_compiler_clang=no
-               ])
-       )
-])
diff --git a/libs/libsndfile/M4/clip_mode.m4 b/libs/libsndfile/M4/clip_mode.m4
deleted file mode 100644 (file)
index 4556b93..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-dnl @synopsis MN_C_CLIP_MODE
-dnl
-dnl Determine the clipping mode when converting float to int.
-dnl @version 1.0       May 17 2003
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-
-
-
-
-
-
-
-dnl Find the clipping mode in the following way:
-dnl    1) If we are not cross compiling test it.
-dnl    2) IF we are cross compiling, assume that clipping isn't done correctly.
-
-AC_DEFUN([MN_C_CLIP_MODE],
-[AC_CACHE_CHECK(processor clipping capabilities, 
-       ac_cv_c_clip_type,
-
-# Initialize to unknown
-ac_cv_c_clip_positive=unknown
-ac_cv_c_clip_negative=unknown
-
-
-if test $ac_cv_c_clip_positive = unknown ; then
-       AC_TRY_RUN(
-       [[
-       #define _ISOC9X_SOURCE  1
-       #define _ISOC99_SOURCE  1
-       #define __USE_ISOC99    1
-       #define __USE_ISOC9X    1
-       #include <math.h>
-       int main (void)
-       {       double  fval ;
-               int k, ival ;
-
-               fval = 1.0 * 0x7FFFFFFF ;
-               for (k = 0 ; k < 100 ; k++)
-               {       ival = (lrint (fval)) >> 24 ;
-                       if (ival != 127)
-                               return 1 ;
-               
-                       fval *= 1.2499999 ;
-                       } ;
-               
-                       return 0 ;
-               }
-               ]],
-               ac_cv_c_clip_positive=yes,
-               ac_cv_c_clip_positive=no,
-               ac_cv_c_clip_positive=unknown
-               )
-
-       AC_TRY_RUN(
-       [[
-       #define _ISOC9X_SOURCE  1
-       #define _ISOC99_SOURCE  1
-       #define __USE_ISOC99    1
-       #define __USE_ISOC9X    1
-       #include <math.h>
-       int main (void)
-       {       double  fval ;
-               int k, ival ;
-
-               fval = -8.0 * 0x10000000 ;
-               for (k = 0 ; k < 100 ; k++)
-               {       ival = (lrint (fval)) >> 24 ;
-                       if (ival != -128)
-                               return 1 ;
-               
-                       fval *= 1.2499999 ;
-                       } ;
-               
-                       return 0 ;
-               }
-               ]],
-               ac_cv_c_clip_negative=yes,
-               ac_cv_c_clip_negative=no,
-               ac_cv_c_clip_negative=unknown
-               )
-       fi
-
-if test $ac_cv_c_clip_positive = yes ; then
-       ac_cv_c_clip_positive=1
-else
-       ac_cv_c_clip_positive=0
-       fi
-
-if test $ac_cv_c_clip_negative = yes ; then
-       ac_cv_c_clip_negative=1
-else
-       ac_cv_c_clip_negative=0
-       fi
-
-[[
-case "$ac_cv_c_clip_positive$ac_cv_c_clip_negative" in
-       "00")
-               ac_cv_c_clip_type="none"
-               ;;
-       "10")
-               ac_cv_c_clip_type="positive"
-               ;;
-       "01")
-               ac_cv_c_clip_type="negative"
-               ;;
-       "11")
-               ac_cv_c_clip_type="both"
-               ;;
-       esac
-       ]]
-
-)
-]
-
-)# MN_C_CLIP_MODE
-
-
diff --git a/libs/libsndfile/M4/endian.m4 b/libs/libsndfile/M4/endian.m4
deleted file mode 100644 (file)
index 5d766ff..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-dnl @synopsis MN_C_FIND_ENDIAN
-dnl
-dnl Determine endian-ness of target processor.
-dnl @version 1.1       Mar 03 2002
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Majority written from scratch to replace the standard autoconf macro 
-dnl AC_C_BIGENDIAN. Only part remaining from the original it the invocation
-dnl of the AC_TRY_RUN macro.
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-
-dnl Find endian-ness in the following way:
-dnl    1) Look in <endian.h>.
-dnl    2) If 1) fails, look in <sys/types.h> and <sys/param.h>.
-dnl    3) If 1) and 2) fails and not cross compiling run a test program.
-dnl    4) If 1) and 2) fails and cross compiling then guess based on target.
-
-AC_DEFUN([MN_C_FIND_ENDIAN],
-[AC_CACHE_CHECK(processor byte ordering, 
-       ac_cv_c_byte_order,
-
-# Initialize to unknown
-ac_cv_c_byte_order=unknown
-
-if test x$ac_cv_header_endian_h = xyes ; then
-
-       # First try <endian.h> which should set BYTE_ORDER.
-
-       [AC_TRY_LINK([
-               #include <endian.h>
-               #if BYTE_ORDER != LITTLE_ENDIAN
-                       not big endian
-               #endif
-               ], return 0 ;, 
-                       ac_cv_c_byte_order=little
-               )]
-                               
-       [AC_TRY_LINK([
-               #include <endian.h>
-               #if BYTE_ORDER != BIG_ENDIAN
-                       not big endian
-               #endif
-               ], return 0 ;, 
-                       ac_cv_c_byte_order=big
-               )]
-
-       fi
-
-if test $ac_cv_c_byte_order = unknown ; then
-
-       [AC_TRY_LINK([
-               #include <sys/types.h>
-               #include <sys/param.h>
-               #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
-                       bogus endian macros
-               #endif
-               ], return 0 ;, 
-
-               [AC_TRY_LINK([
-                       #include <sys/types.h>
-                       #include <sys/param.h>
-                       #if BYTE_ORDER != LITTLE_ENDIAN
-                               not big endian
-                       #endif
-                       ], return 0 ;, 
-                               ac_cv_c_byte_order=little
-                       )]
-                               
-               [AC_TRY_LINK([
-                       #include <sys/types.h>
-                       #include <sys/param.h>
-                       #if BYTE_ORDER != LITTLE_ENDIAN
-                               not big endian
-                       #endif
-                       ], return 0 ;, 
-                               ac_cv_c_byte_order=little
-                       )]
-
-               )]
-
-       fi
-
-if test $ac_cv_c_byte_order = unknown ; then
-       if test $cross_compiling = yes ; then
-               # This is the last resort. Try to guess the target processor endian-ness
-               # by looking at the target CPU type.    
-               [
-               case "$target_cpu" in
-                       alpha* | i?86* | mipsel* | ia64*)
-                               ac_cv_c_byte_order=little
-                               ;;
-                       
-                       m68* | mips* | powerpc* | hppa* | sparc*)
-                               ac_cv_c_byte_order=big
-                               ;;
-       
-                       esac
-               ]
-       else
-               AC_TRY_RUN(
-               [[
-               int main (void) 
-               {       /* Are we little or big endian?  From Harbison&Steele.  */
-                       union
-                       {       long l ;
-                               char c [sizeof (long)] ;
-                       } u ;
-                       u.l = 1 ;
-                       return (u.c [sizeof (long) - 1] == 1);
-                       }
-                       ]], , ac_cv_c_byte_order=big, 
-                       )
-
-               AC_TRY_RUN(
-               [[int main (void) 
-               {       /* Are we little or big endian?  From Harbison&Steele.  */
-                       union
-                       {       long l ;
-                               char c [sizeof (long)] ;
-                       } u ;
-                       u.l = 1 ;
-                       return (u.c [0] == 1);
-                       }]], , ac_cv_c_byte_order=little, 
-                       )
-               fi      
-       fi
-
-)
-
-if test $ac_cv_c_byte_order = big ; then
-       ac_cv_c_big_endian=1
-       ac_cv_c_little_endian=0
-elif test $ac_cv_c_byte_order = little ; then
-       ac_cv_c_big_endian=0
-       ac_cv_c_little_endian=1
-else
-       ac_cv_c_big_endian=0
-       ac_cv_c_little_endian=0
-
-       AC_MSG_WARN([[*****************************************************************]])
-       AC_MSG_WARN([[*** Not able to determine endian-ness of target processor.       ]])
-       AC_MSG_WARN([[*** The constants CPU_IS_BIG_ENDIAN and CPU_IS_LITTLE_ENDIAN in  ]])
-       AC_MSG_WARN([[*** src/config.h may need to be hand editied.                    ]])
-       AC_MSG_WARN([[*****************************************************************]])
-       fi
-
-]
-)# MN_C_FIND_ENDIAN
-
-
diff --git a/libs/libsndfile/M4/extra_largefile.m4 b/libs/libsndfile/M4/extra_largefile.m4
deleted file mode 100644 (file)
index 3e614c3..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-dnl By default, many hosts won't let programs access large files;
-dnl one must use special compiler options to get large-file access to work.
-dnl For more details about this brain damage please see:
-dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
-
-dnl Written by Paul Eggert <eggert@twinsun.com>.
-
-dnl Internal subroutine of AC_SYS_EXTRA_LARGEFILE.
-dnl MN_SYS_EXTRA_LARGEFILE_FLAGS(FLAGSNAME)
-AC_DEFUN([MN_SYS_EXTRA_LARGEFILE_FLAGS],
-  [AC_CACHE_CHECK([for $1 value to request large file support],
-     ac_cv_sys_largefile_$1,
-     [ac_cv_sys_largefile_$1=`($GETCONF LFS_$1) 2>/dev/null` || {
-       ac_cv_sys_largefile_$1=no
-       ifelse($1, CFLAGS,
-         [case "$host_os" in
-          # IRIX 6.2 and later require cc -n32.
-changequote(, )dnl
-          irix6.[2-9]* | irix6.1[0-9]* | irix[7-9].* | irix[1-9][0-9]*)
-changequote([, ])dnl
-            if test "$GCC" != yes; then
-              ac_cv_sys_largefile_CFLAGS=-n32
-            fi
-            ac_save_CC="$CC"
-            CC="$CC $ac_cv_sys_largefile_CFLAGS"
-            AC_TRY_LINK(, , , ac_cv_sys_largefile_CFLAGS=no)
-            CC="$ac_save_CC"
-          esac])
-      }])])
-
-dnl Internal subroutine of AC_SYS_EXTRA_LARGEFILE.
-dnl AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(VAR, VAL)
-AC_DEFUN([AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND],
-  [case $2 in
-   no) ;;
-   ?*)
-     case "[$]$1" in
-     '') $1=$2 ;;
-     *) $1=[$]$1' '$2 ;;
-     esac ;;
-   esac])
-
-dnl Internal subroutine of AC_SYS_EXTRA_LARGEFILE.
-dnl AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(C-MACRO, CACHE-VAR, COMMENT, CODE-TO-SET-DEFAULT)
-AC_DEFUN([AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE],
-  [AC_CACHE_CHECK([for $1], $2,
-     [$2=no
-changequote(, )dnl
-      $4
-      for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do
-       case "$ac_flag" in
-       -D$1)
-         $2=1 ;;
-       -D$1=*)
-         $2=`expr " $ac_flag" : '[^=]*=\(.*\)'` ;;
-       esac
-      done
-changequote([, ])dnl
-      ])
-   if test "[$]$2" != no; then
-     AC_DEFINE_UNQUOTED([$1], [$]$2, [$3])
-   fi])
-
-AC_DEFUN([AC_SYS_EXTRA_LARGEFILE],
-  [AC_REQUIRE([AC_CANONICAL_HOST])
-   AC_ARG_ENABLE(largefile,
-     [  --disable-largefile     omit support for large files])
-   if test "$enable_largefile" != no; then
-     AC_CHECK_TOOL(GETCONF, getconf)
-     MN_SYS_EXTRA_LARGEFILE_FLAGS(CFLAGS)
-     MN_SYS_EXTRA_LARGEFILE_FLAGS(LDFLAGS)
-     MN_SYS_EXTRA_LARGEFILE_FLAGS(LIBS)
-       
-     for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do
-       case "$ac_flag" in
-       no) ;;
-       -D_FILE_OFFSET_BITS=*) ;;
-       -D_LARGEFILE_SOURCE | -D_LARGEFILE_SOURCE=*) ;;
-       -D_LARGE_FILES | -D_LARGE_FILES=*) ;;
-       -D?* | -I?*)
-        AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(CPPFLAGS, "$ac_flag") ;;
-       *)
-        AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(CFLAGS, "$ac_flag") ;;
-       esac
-     done
-     AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(LDFLAGS, "$ac_cv_sys_largefile_LDFLAGS")
-     AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(LIBS, "$ac_cv_sys_largefile_LIBS")
-     AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS,
-       ac_cv_sys_file_offset_bits,
-       [Number of bits in a file offset, on hosts where this is settable.])
-       [case "$host_os" in
-       # HP-UX 10.20 and later
-       hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
-         ac_cv_sys_file_offset_bits=64 ;;
-       esac]
-     AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(_LARGEFILE_SOURCE,
-       ac_cv_sys_largefile_source,
-       [Define to make fseeko etc. visible, on some hosts.],
-       [case "$host_os" in
-       # HP-UX 10.20 and later
-       hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
-         ac_cv_sys_largefile_source=1 ;;
-       esac])
-     AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(_LARGE_FILES,
-       ac_cv_sys_large_files,
-       [Define for large files, on AIX-style hosts.],
-       [case "$host_os" in
-       # AIX 4.2 and later
-       aix4.[2-9]* | aix4.1[0-9]* | aix[5-9].* | aix[1-9][0-9]*)
-         ac_cv_sys_large_files=1 ;;
-       esac])
-   fi
-  ])
-
diff --git a/libs/libsndfile/M4/extra_pkg.m4 b/libs/libsndfile/M4/extra_pkg.m4
deleted file mode 100644 (file)
index afe474e..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-# extra_pkg.m4 - Macros to locate and utilise pkg-config.   -*- Autoconf -*-
-#
-# Copyright (c) 2008-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-# Copyright (c) 2004 Scott James Remnant <scott@netsplit.com>.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# --------------------------------------------------------------
-# PKG_CHECK_MOD_VERSION(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
-# [ACTION-IF-NOT-FOUND])
-#
-# This is a very slight modification to the macro PKG_CHECK_MODULES that
-# is in the original pkg.m4 file. It prints the versions in the checking
-# message (erikd@mega-nerd.com).
-
-AC_DEFUN([PKG_CHECK_MOD_VERSION],
-[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
-AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
-
-pkg_failed=no
-AC_MSG_CHECKING([for $2 ])
-
-_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
-_PKG_CONFIG([$1][_LIBS], [libs], [$2])
-
-pkg_link_saved_CFLAGS=$CFLAGS
-pkg_link_saved_LIBS=$LIBS
-
-eval "pkg_CFLAGS=\${pkg_cv_[]$1[]_CFLAGS}"
-eval "pkg_LIBS=\${pkg_cv_[]$1[]_LIBS}"
-
-CFLAGS="$CFLAGS $pkg_CFLAGS"
-LIBS="$LIBS $pkg_LIBS"
-
-AC_TRY_LINK([], puts ("");, pkg_link=yes, pkg_link=no)
-
-CFLAGS=$pkg_link_saved_CFLAGS
-LIBS=$pkg_link_saved_LIBS
-
-if test $pkg_link = no ; then
-       $as_echo_n "link failed ... "
-       pkg_failed=yes
-       fi
-
-m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
-and $1[]_LIBS to avoid the need to call pkg-config.
-See the pkg-config man page for more details.])
-
-if test $pkg_failed = yes; then
-        _PKG_SHORT_ERRORS_SUPPORTED
-        if test $_pkg_short_errors_supported = yes; then
-               $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
-        else
-               $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
-        fi
-       # Put the nasty error message in config.log where it belongs
-       echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
-
-       ifelse([$4], , [AC_MSG_ERROR(dnl
-[Package requirements ($2) were not met:
-
-$$1_PKG_ERRORS
-
-Consider adjusting the PKG_CONFIG_PATH environment variable if you
-installed software in a non-standard prefix.
-
-_PKG_TEXT
-])],
-               [AC_MSG_RESULT([no])
-                $4])
-elif test $pkg_failed = untried; then
-       ifelse([$4], , [AC_MSG_FAILURE(dnl
-[The pkg-config script could not be found or is too old.  Make sure it
-is in your PATH or set the PKG_CONFIG environment variable to the full
-path to pkg-config.
-
-_PKG_TEXT
-
-To get pkg-config, see <http://pkg-config.freedesktop.org/>.])],
-               [$4])
-else
-       $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
-       $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
-        AC_MSG_RESULT([yes])
-       ifelse([$3], , :, [$3])
-fi[]dnl
-])# PKG_CHECK_MOD_VERSION
diff --git a/libs/libsndfile/M4/flexible_array.m4 b/libs/libsndfile/M4/flexible_array.m4
deleted file mode 100644 (file)
index 661da17..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-dnl @synopsis MN_C99_FLEXIBLE_ARRAY
-dnl
-dnl Dose the compiler support the 1999 ISO C Standard "stuct hack".
-dnl @version 1.1       Mar 15 2004
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-
-AC_DEFUN([MN_C99_FLEXIBLE_ARRAY],
-[AC_CACHE_CHECK(C99 struct flexible array support, 
-       ac_cv_c99_flexible_array,
-
-# Initialize to unknown
-ac_cv_c99_flexible_array=no
-
-AC_TRY_LINK([[
-       #include <stdlib.h>
-       typedef struct {
-       int k;
-       char buffer [] ;
-       } MY_STRUCT ;
-       ]], 
-       [  MY_STRUCT *p = calloc (1, sizeof (MY_STRUCT) + 42); ],
-       ac_cv_c99_flexible_array=yes,
-       ac_cv_c99_flexible_array=no
-       ))]
-) # MN_C99_FLEXIBLE_ARRAY
-
diff --git a/libs/libsndfile/M4/gcc_version.m4 b/libs/libsndfile/M4/gcc_version.m4
deleted file mode 100644 (file)
index f8c5cbe..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-dnl @synopsis MN_GCC_VERSION
-dnl
-dnl Find the version of gcc.
-dnl @version 1.0       Nov 05 2007
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-dnl
-
-AC_DEFUN([MN_GCC_VERSION],
-[
-if test "x$ac_cv_c_compiler_gnu" = "xyes" ; then
-
-       AC_MSG_CHECKING([for version of $CC])
-       GCC_VERSION=`$CC -dumpversion`
-       AC_MSG_RESULT($GCC_VERSION)
-
-       changequote(,)dnl
-       GCC_MAJOR_VERSION=`echo $GCC_VERSION | sed "s/\..*//"`
-       GCC_MINOR_VERSION=`echo $GCC_VERSION | sed "s/$GCC_MAJOR_VERSION\.//" | sed "s/\..*//"`
-       changequote([,])dnl
-       fi
-
-AC_SUBST(GCC_VERSION)
-AC_SUBST(GCC_MAJOR_VERSION)
-AC_SUBST(GCC_MINOR_VERSION)
-
-])# MN_GCC_VERSION
-
diff --git a/libs/libsndfile/M4/llrint.m4 b/libs/libsndfile/M4/llrint.m4
deleted file mode 100644 (file)
index 66be206..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-dnl @synopsis MN_C99_FUNC_LLRINT
-dnl
-dnl Check whether C99's llrint function is available.
-dnl @version 1.1       Sep 30 2002
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-dnl
-AC_DEFUN([MN_C99_FUNC_LLRINT],
-[AC_CACHE_CHECK(for llrint,
-  ac_cv_c99_llrint,
-[
-llrint_save_CFLAGS=$CFLAGS
-CFLAGS="-lm"
-AC_TRY_LINK([
-#define                _ISOC9X_SOURCE  1
-#define        _ISOC99_SOURCE  1
-#define                __USE_ISOC99    1
-#define        __USE_ISOC9X    1
-
-#include <math.h>
-#include <stdint.h>
-], int64_t     x ; x = llrint(3.14159) ;, ac_cv_c99_llrint=yes, ac_cv_c99_llrint=no)
-
-CFLAGS=$llrint_save_CFLAGS
-
-])
-
-if test "$ac_cv_c99_llrint" = yes; then
-  AC_DEFINE(HAVE_LLRINT, 1,
-            [Define if you have C99's llrint function.])
-fi
-])# MN_C99_FUNC_LLRINT
-
diff --git a/libs/libsndfile/M4/lrint.m4 b/libs/libsndfile/M4/lrint.m4
deleted file mode 100644 (file)
index c2c21d6..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-dnl @synopsis MN_C99_FUNC_LRINT
-dnl
-dnl Check whether C99's lrint function is available.
-dnl @version 1.3       Feb 12 2002
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-dnl
-AC_DEFUN([MN_C99_FUNC_LRINT],
-[AC_CACHE_CHECK(for lrint,
-  ac_cv_c99_lrint,
-[
-lrint_save_CFLAGS=$CFLAGS
-CFLAGS="-lm"
-AC_TRY_LINK([
-#define                _ISOC9X_SOURCE  1
-#define        _ISOC99_SOURCE  1
-#define                __USE_ISOC99    1
-#define        __USE_ISOC9X    1
-
-#include <math.h>
-], if (!lrint(3.14159)) lrint(2.7183);, ac_cv_c99_lrint=yes, ac_cv_c99_lrint=no)
-
-CFLAGS=$lrint_save_CFLAGS
-
-])
-
-if test "$ac_cv_c99_lrint" = yes; then
-  AC_DEFINE(HAVE_LRINT, 1,
-            [Define if you have C99's lrint function.])
-fi
-])# MN_C99_FUNC_LRINT
-
diff --git a/libs/libsndfile/M4/lrintf.m4 b/libs/libsndfile/M4/lrintf.m4
deleted file mode 100644 (file)
index 04f4d66..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-dnl @synopsis MN_C99_FUNC_LRINTF
-dnl
-dnl Check whether C99's lrintf function is available.
-dnl @version 1.3       Feb 12 2002
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-dnl
-AC_DEFUN([MN_C99_FUNC_LRINTF],
-[AC_CACHE_CHECK(for lrintf,
-  ac_cv_c99_lrintf,
-[
-lrintf_save_CFLAGS=$CFLAGS
-CFLAGS="-lm"
-AC_TRY_LINK([
-#define                _ISOC9X_SOURCE  1
-#define        _ISOC99_SOURCE  1
-#define                __USE_ISOC99    1
-#define        __USE_ISOC9X    1
-
-#include <math.h>
-], if (!lrintf(3.14159)) lrintf(2.7183);, ac_cv_c99_lrintf=yes, ac_cv_c99_lrintf=no)
-
-CFLAGS=$lrintf_save_CFLAGS
-
-])
-
-if test "$ac_cv_c99_lrintf" = yes; then
-  AC_DEFINE(HAVE_LRINTF, 1,
-            [Define if you have C99's lrintf function.])
-fi
-])# MN_C99_FUNC_LRINTF
-
diff --git a/libs/libsndfile/M4/mkoctfile_version.m4 b/libs/libsndfile/M4/mkoctfile_version.m4
deleted file mode 100644 (file)
index c17333e..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-dnl @synopsis OCTAVE_MKOCTFILE_VERSION
-dnl
-dnl Find the version of mkoctfile.
-dnl @version 1.0       Aug 23 2007
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-dnl
-
-AC_DEFUN([OCTAVE_MKOCTFILE_VERSION],
-[
-
-
-AC_ARG_WITH(mkoctfile,
-       AC_HELP_STRING([--with-mkoctfile], [choose the mkoctfile version]),
-       [ with_mkoctfile=$withval ])
-
-test -z "$with_mkoctfile" && with_mkoctfile=mkoctfile
-
-AC_CHECK_PROG(HAVE_MKOCTFILE,$with_mkoctfile,yes,no)
-
-if test "x$ac_cv_prog_HAVE_MKOCTFILE" = "xyes" ; then
-       MKOCTFILE=$with_mkoctfile
-
-       AC_MSG_CHECKING([for version of $MKOCTFILE])
-       MKOCTFILE_VERSION=`$with_mkoctfile --version 2>&1 | sed 's/mkoctfile, version //g'`
-       AC_MSG_RESULT($MKOCTFILE_VERSION)
-       fi
-
-AC_SUBST(MKOCTFILE)
-AC_SUBST(MKOCTFILE_VERSION)
-
-])# OCTAVE_MKOCTFILE_VERSION
-
diff --git a/libs/libsndfile/M4/octave.m4 b/libs/libsndfile/M4/octave.m4
deleted file mode 100644 (file)
index 88d5a5b..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-dnl Evaluate an expression in octave
-dnl
-dnl OCTAVE_EVAL(expr,var) -> var=expr
-dnl
-dnl Stolen from octave-forge
-
-AC_DEFUN([OCTAVE_EVAL],
-[
-AC_MSG_CHECKING([for $1 in $OCTAVE])
-$2=`TERM=;$OCTAVE -qfH --eval "disp($1)"`
-AC_MSG_RESULT($$2)
-AC_SUBST($2)
-]) # OCTAVE_EVAL
-
-dnl @synopsis AC_OCTAVE_VERSION
-dnl
-dnl Find the version of Octave.
-dnl @version 1.0       Aug 23 2007
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any
-dnl purpose is hereby granted without fee, provided that the above copyright
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is
-dnl provided "as is" without express or implied warranty.
-dnl
-
-AC_DEFUN([AC_OCTAVE_VERSION],
-[
-
-AC_ARG_WITH(octave,
-       AC_HELP_STRING([--with-octave], [choose the octave version]),
-       [ with_octave=$withval ])
-
-test -z "$with_octave" && with_octave=octave
-
-AC_CHECK_PROG(HAVE_OCTAVE,$with_octave,yes,no)
-
-if test "x$ac_cv_prog_HAVE_OCTAVE" = "xyes" ; then
-       OCTAVE=$with_octave
-       OCTAVE_EVAL(OCTAVE_VERSION,OCTAVE_VERSION)
-       fi
-
-AC_SUBST(OCTAVE)
-AC_SUBST(OCTAVE_VERSION)
-
-])# AC_OCTAVE_VERSION
-
-dnl @synopsis AC_OCTAVE_CONFIG_VERSION
-dnl
-dnl Find the version of Octave.
-dnl @version 1.0       Aug 23 2007
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any
-dnl purpose is hereby granted without fee, provided that the above copyright
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is
-dnl provided "as is" without express or implied warranty.
-dnl
-
-AC_DEFUN([AC_OCTAVE_CONFIG_VERSION],
-[
-
-AC_ARG_WITH(octave-config,
-       AC_HELP_STRING([--with-octave-config], [choose the octave-config version]),
-       [ with_octave_config=$withval ])
-
-test -z "$with_octave_config" && with_octave_config=octave-config
-
-AC_CHECK_PROG(HAVE_OCTAVE_CONFIG,$with_octave_config,yes,no)
-
-if test "x$ac_cv_prog_HAVE_OCTAVE_CONFIG" = "xyes" ; then
-       OCTAVE_CONFIG=$with_octave_config
-       AC_MSG_CHECKING([for version of $OCTAVE_CONFIG])
-       OCTAVE_CONFIG_VERSION=`$OCTAVE_CONFIG --version`
-       AC_MSG_RESULT($OCTAVE_CONFIG_VERSION)
-       fi
-
-AC_SUBST(OCTAVE_CONFIG)
-AC_SUBST(OCTAVE_CONFIG_VERSION)
-
-])# AC_OCTAVE_CONFIG_VERSION
-
-dnl @synopsis AC_OCTAVE_BUILD
-dnl
-dnl Check programs and headers required for building octave plugins.
-dnl @version 1.0       Aug 23 2007
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any
-dnl purpose is hereby granted without fee, provided that the above copyright
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is
-dnl provided "as is" without express or implied warranty.
-
-
-AC_DEFUN([AC_OCTAVE_BUILD],
-[
-
-dnl Default to no.
-OCTAVE_BUILD=no
-
-AC_OCTAVE_VERSION
-OCTAVE_MKOCTFILE_VERSION
-AC_OCTAVE_CONFIG_VERSION
-
-prog_concat="$ac_cv_prog_HAVE_OCTAVE$ac_cv_prog_HAVE_OCTAVE_CONFIG$ac_cv_prog_HAVE_MKOCTFILE"
-
-if test "x$prog_concat" = "xyesyesyes" ; then
-       if test "x$OCTAVE_VERSION" != "x$MKOCTFILE_VERSION" ; then
-               AC_MSG_WARN([** Mismatch between versions of octave and mkoctfile. **])
-               AC_MSG_WARN([** Octave libsndfile modules will not be built.       **])
-       elif test "x$OCTAVE_VERSION" != "x$OCTAVE_CONFIG_VERSION" ; then
-               AC_MSG_WARN([** Mismatch between versions of octave and octave-config. **])
-               AC_MSG_WARN([** Octave libsndfile modules will not be built.           **])
-       else
-               case "$MKOCTFILE_VERSION" in
-                       2.*)
-                               AC_MSG_WARN([Octave version 2.X is not supported.])
-                               ;;
-                       3.*)
-                               OCTAVE_DEST_ODIR=`$OCTAVE_CONFIG --oct-site-dir | sed 's%^/usr%${prefix}%'`
-                               OCTAVE_DEST_MDIR=`$OCTAVE_CONFIG --m-site-dir | sed 's%^/usr%${prefix}%'`
-
-                               OCTAVE_BUILD=yes
-                               ;;
-                       *)
-                               AC_MSG_WARN([Octave version $MKOCTFILE_VERSION is not supported.])
-                               ;;
-                               esac
-               fi
-       AC_MSG_RESULT([building octave libsndfile module... $OCTAVE_BUILD])
-       fi
-
-AC_SUBST(OCTAVE_DEST_ODIR)
-AC_SUBST(OCTAVE_DEST_MDIR)
-
-AC_SUBST(MKOCTFILE)
-
-AM_CONDITIONAL(BUILD_OCTAVE_MOD, test "x$OCTAVE_BUILD" = xyes)
-
-])# AC_OCTAVE_BUILD
diff --git a/libs/libsndfile/M4/really_gcc.m4 b/libs/libsndfile/M4/really_gcc.m4
deleted file mode 100644 (file)
index 67aed78..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-dnl @synopsis MN_GCC_REALLY_IS_GCC
-dnl
-dnl Find out if a compiler claiming to be gcc really is gcc (fuck you clang).
-dnl @version 1.0       Oct 31 2013
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any
-dnl purpose is hereby granted without fee, provided that the above copyright
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is
-dnl provided "as is" without express or implied warranty.
-dnl
-
-# If the configure script has already detected GNU GCC, then make sure it
-# isn't CLANG masquerading as GCC.
-
-AC_DEFUN([MN_GCC_REALLY_IS_GCC],
-[      AC_LANG_ASSERT(C)
-       if test "x$ac_cv_c_compiler_gnu" = "xyes" ; then
-               AC_TRY_LINK([
-                       #include <stdio.h>
-                       ],
-                       [
-                       #ifdef __clang__
-                               This is clang!
-                       #endif
-                       ],
-               ac_cv_c_compiler_gnu=yes,
-               ac_cv_c_compiler_gnu=no
-               )
-               fi
-
-])
diff --git a/libs/libsndfile/M4/stack_protect.m4 b/libs/libsndfile/M4/stack_protect.m4
deleted file mode 100644 (file)
index bf27e6e..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-dnl Copyright (C) 2013  Xiph.org Foundation
-dnl
-dnl Redistribution and use in source and binary forms, with or without
-dnl modification, are permitted provided that the following conditions
-dnl are met:
-dnl
-dnl - Redistributions of source code must retain the above copyright
-dnl notice, this list of conditions and the following disclaimer.
-dnl
-dnl - Redistributions in binary form must reproduce the above copyright
-dnl notice, this list of conditions and the following disclaimer in the
-dnl documentation and/or other materials provided with the distribution.
-dnl
-dnl - Neither the name of the Xiph.org Foundation nor the names of its
-dnl contributors may be used to endorse or promote products derived from
-dnl this software without specific prior written permission.
-dnl
-dnl THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-dnl ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-dnl LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-dnl A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
-dnl CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-dnl EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-dnl PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-dnl PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-dnl LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-dnl NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-dnl SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-dnl Want to know of GCC stack protector works, botfor the C and for the C++
-dnl compiler.
-dnl
-dnl Just checking if the compiler accepts the required CFLAGSs is not enough
-dnl because we have seen at least one instance where this check was
-dnl in-sufficient.
-dnl
-dnl Instead, try to compile and link a test program with the stack protector
-dnl flags. If that works, we use it.
-
-AC_DEFUN([XIPH_GCC_STACK_PROTECTOR],
-[AC_LANG_ASSERT(C)
-       AC_MSG_CHECKING([if $CC supports stack smash protection])
-       xiph_stack_check_old_cflags="$CFLAGS"
-       SSP_FLAGS="-fstack-protector --param ssp-buffer-size=4"
-       CFLAGS=$SSP_FLAGS
-       AC_TRY_LINK([
-                       #include <stdio.h>
-                       ],
-               [puts("Hello, World!"); return 0;],
-               AC_MSG_RESULT([yes])
-                       CFLAGS="$xiph_stack_check_old_cflags $SSP_FLAGS",
-               AC_MSG_RESULT([no])
-                       CFLAGS="$xiph_stack_check_old_cflags"
-               )
-])# XIPH_GCC_STACK_PROTECTOR
-
-AC_DEFUN([XIPH_GXX_STACK_PROTECTOR],
-[AC_LANG_PUSH([C++])
-       AC_MSG_CHECKING([if $CXX supports stack smash protection])
-       xiph_stack_check_old_cflags="$CFLAGS"
-       SSP_FLAGS="-fstack-protector --param ssp-buffer-size=4"
-       CFLAGS=$SSP_FLAGS
-       AC_TRY_LINK([
-                       #include <cstdio>
-                       ],
-               [puts("Hello, World!"); return 0;],
-               AC_MSG_RESULT([yes])
-                       CFLAGS="$xiph_stack_check_old_cflags $SSP_FLAGS",
-               AC_MSG_RESULT([no])
-                       CFLAGS="$xiph_stack_check_old_cflags"
-               )
-       AC_LANG_POP([C++])
-])# XIPH_GXX_STACK_PROTECTOR
diff --git a/libs/libsndfile/Makefile.am b/libs/libsndfile/Makefile.am
deleted file mode 100644 (file)
index a429c5b..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-ACLOCAL_AMFLAGS = -I M4
-
-DISTCHECK_CONFIGURE_FLAGS = --enable-gcc-werror
-
-if BUILD_OCTAVE_MOD
-octave_dir = Octave
-endif
-
-SUBDIRS = M4 Win32 src $(octave_dir) 
-#man doc examples regtest tests programs
-
-DIST_SUBDIRS = M4 man doc Win32 src Octave examples regtest tests programs
-
-EXTRA_DIST = libsndfile.spec.in sndfile.pc.in Scripts/android-configure.sh \
-       Scripts/linux-to-win-cross-configure.sh Scripts/build-test-tarball.mk.in
-
-CLEANFILES = *~
-
-#pkgconfig_DATA = sndfile.pc
-
-m4datadir = $(datadir)/aclocal
-
-#===============================================================================
-
-test: check-recursive
-
-# Target to make autogenerated files.
-genfiles :
-       (cd src ; make genfiles)
-#      (cd tests ; make genfiles)
-
-checkprograms :
-       (cd src ; make libsndfile.la checkprograms)
-#      (cd tests ; make checkprograms)
-
-testprogs :
-       (cd src ; make testprogs)
-#      (cd tests ; make testprogs)
-
-
-test-tarball : Scripts/build-test-tarball.mk
-       (cd src ; make all libsndfile.la checkprograms)
-#      (cd tests ; make all checkprograms)
-#      make -f Scripts/build-test-tarball.mk
diff --git a/libs/libsndfile/Mingw-make-dist.sh b/libs/libsndfile/Mingw-make-dist.sh
deleted file mode 100755 (executable)
index f2a6474..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-#!/bin/sh
-
-# Copyright (C) 2006 Erik de Castro Lopo <erikd@mega-nerd.com>
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-#       notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above copyright
-#       notice, this list of conditions and the following disclaimer in
-#       the documentation and/or other materials provided with the
-#       distribution.
-#     * Neither the author nor the names of any contributors may be used
-#       to endorse or promote products derived from this software without
-#       specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-set -e
-
-function unix_to_dos {
-       sed -e "s/\n/\r\n/" $1 > temp_file
-       mv -f temp_file $1
-}
-
-if [ $# -lt 1 ] || [ $# -gt 2 ]; then
-       echo "Usage : Mingw-make-dist.sh <source tarball>."
-       exit 1
-       fi
-
-TARGZ=$1
-if [ ! -f $TARGZ ]; then
-       echo "Can't find source tarball."
-       fi
-
-TARGZ=$1
-if [ ! -f $TARGZ.asc ]; then
-       echo "Can't find source tarball signature."
-       fi
-
-UNAME=`uname -s`
-if [ x$UNAME != "xMINGW32_NT-5.1" ]; then
-       echo "Not able to build Win32 binaries on this platform."
-       fi
-
-echo "Building MinGW binary/source zip file."
-
-VERSION=`pwd | sed -e "s#.*/##" | sed -e s/libsndfile-//`
-BUILD=`echo $VERSION | sed -e "s/\./_/g"`
-INSTALL="libsndfile-$BUILD"
-ZIPNAME="$INSTALL.zip"
-
-if [ -z "$BUILD" ]; then
-       echo "Bad BUILD variable : '$BUILD'"
-       exit 1
-       fi
-
-if [ ! -d $INSTALL/ ];  then
-       mkdir $INSTALL
-       fi
-
-if [ ! -f config.status ]; then
-       ./configure --prefix=`pwd`/$INSTALL/
-else
-       teststr=`grep "with options" config.status | grep -- --prefix=`
-       if [ -z "$teststr" ]; then
-               # --disable-static doesn't work.
-               ./configure --prefix=`pwd`/$INSTALL/
-               fi
-       fi
-
-if [ ! -f src/.libs/libsndfile-1.dll ]; then
-       make all check
-       fi
-
-if [ ! -f $INSTALL/bin/libsndfile-1.dll ]; then
-       make install
-       rm -f $INSTALL/bin/sndfile-regtest.exe
-       strip $INSTALL/bin/*.*
-       mv $INSTALL/bin/*.* $INSTALL/include/*.* $INSTALL/
-       rmdir $INSTALL/bin
-       rm -rf $INSTALL/lib
-       rmdir $INSTALL/include
-       cp src/libsndfile.def $INSTALL/libsndfile-1.def
-       cp Win32/README-precompiled-dll.txt Win32/testprog.c $INSTALL/
-       unix_to_dos $INSTALL/libsndfile-1.def
-       unix_to_dos $INSTALL/sndfile.h
-       unix_to_dos $INSTALL/README-precompiled-dll.txt
-       unix_to_dos $INSTALL/testprog.c
-       fi
-
-if [ ! -f $INSTALL/libsndfile-$VERSION.tar.gz ]; then
-       cp $TARGZ $INSTALL/
-       if [ -f $TARGZ.asc ]; then
-               cp $TARGZ.asc $INSTALL/
-               fi
-       fi
-
-if [ ! -f $ZIPNAME ]; then
-       zip -r $ZIPNAME $INSTALL/
-       fi
-
diff --git a/libs/libsndfile/NEWS b/libs/libsndfile/NEWS
deleted file mode 100644 (file)
index 9626d45..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-Version 1.0.25 (2011-07-13)
-  * Fix for Secunia Advisory SA45125, heap overflow in PAF file handler.
-  * Accept broken WAV files with blockalign == 0.
-  * Minor bug fixes and improvements.
-
-Version 1.0.24 (2011-03-23)
-  * WAV files now have an 18 byte u-law and A-law fmt chunk.
-  * Document virtual I/O functionality.
-  * Two new methods rawHandle() and takeOwnership() in sndfile.hh.
-  * AIFF fix for non-zero offset value in SSND chunk.
-  * Minor bug fixes and improvements.
-
-Version 1.0.23 (2010-10-10)
-  * Add version metadata to Windows DLL.
-  * Add a missing 'inline' to sndfile.hh.
-  * Update docs.
-  * Minor bug fixes and improvements.
-
-Version 1.0.22 (2010-10-04)
-  * Couple of fixes for SDS file writer.
-  * Fixes arising from static analysis.
-  * Handle FLAC files with ID3 meta data at start of file.
-  * Handle FLAC files which report zero length.
-  * Other minor bug fixes and improvements.
-
-Version 1.0.21 (2009-12-13)
-  * Add a couple of new binary programs to programs/ dir.
-  * Remove sndfile-jackplay (now in sndfile-tools package).
-  * Add windows only function sf_wchar_open().
-  * Bunch of minor bug fixes.
-
-Version 1.0.20 (2009-05-14)
-  * Fix potential heap overflow in VOC file parser (Tobias Klein, http://www.trapkit.de/).
-
-Version 1.0.19 (2009-03-02)
-  * Fix for CVE-2009-0186 (Alin Rad Pop, Secunia Research).
-  * Huge number of minor bug fixes as a result of static analysis.
-
-Version 1.0.18 (2009-02-07)
-  * Add Ogg/Vorbis support (thanks to John ffitch).
-  * Remove captive FLAC library.
-  * Many new features and bug fixes.
-  * Generate Win32 and Win64 pre-compiled binaries.
-
-Version 1.0.17 (2006-08-31)
-  * Add sndfile.hh C++ wrapper.
-  * Update Win32 MinGW build instructions.
-  * Minor bug fixes and cleanups.
-
-Version 1.0.16 (2006-04-30)
-  * Add support for Broadcast (BEXT) chunks in WAV files.
-  * Implement new commands SFC_GET_SIGNAL_MAX and SFC_GET_MAX_ALL_CHANNELS.
-  * Add support for RIFX (big endian WAV variant).
-  * Fix configure script bugs.
-  * Fix bug in INST and MARK chunk writing for AIFF files.
-
-Version 1.0.15 (2006-03-16)
-  * Fix some ia64 issues.
-  * Fix precompiled DLL.
-  * Minor bug fixes.
-
-Version 1.0.14 (2006-02-19)
-  * Really fix MinGW compile problems.
-  * Minor bug fixes.
-
-Version 1.0.13 (2006-01-21)
-  * Fix for MinGW compiler problems.
-  * Allow readin/write of instrument chunks from WAV and AIFF files.
-  * Compile problem fix for Solaris compiler.
-  * Minor cleanups and bug fixes.
-
-Version 1.0.12 (2005-09-30)
-  * Add support for FLAC and Apple's Core Audio Format (CAF).
-  * Add virtual I/O interface (still needs docs).
-  * Cygwin and other Win32 fixes.
-  * Minor bug fixes and cleanups.
-
-Version 1.0.11 (2004-11-15)
-  * Add support for SD2 files.
-  * Add read support for loop info in WAV and AIFF files.
-  * Add more tests.
-  * Improve type safety.
-  * Minor optimisations and bug fixes.
-
-Version 1.0.10 (2004-06-15)
-  * Fix AIFF read/write mode bugs.
-  * Add support for compiling Win32 DLLS using MinGW.
-  * Fix problems resulting in failed compiles with gcc-2.95.
-  * Improve test suite.
-  * Minor bug fixes.
-
-Version 1.0.9 (2004-03-30)
-  * Add handling of AVR (Audio Visual Research) files.
-  * Improve handling of WAVEFORMATEXTENSIBLE WAV files.
-  * Fix for using pipes on Win32.
-
-Version 1.0.8 (2004-03-14)
-  * Correct peak chunk handing for files with > 16 tracks.
-  * Fix for WAV files with huge number of CUE chunks.
-
-Version 1.0.7 (2004-02-25)
-  * Fix clip mode detection on ia64, MIPS and other CPUs.
-  * Fix two MacOSX build problems.
-
-Version 1.0.6 (2004-02-08)
-  * Added support for native Win32 file access API (Ross Bencina).
-  * New mode to add clippling then a converting from float/double to integer
-    would otherwise wrap around.
-  * Fixed a bug in reading/writing files > 2Gig on Linux, Solaris and others.
-  * Many minor bug fixes.
-  * Other random fixes for Win32.
-
-Version 1.0.5 (2003-05-03)
-  * Added support for HTK files.
-  * Added new function sf_open_fd() to allow for secure opening of temporary
-    files as well as reading/writing sound files embedded within larger
-    container files.
-  * Added string support for AIFF files.
-  * Minor bug fixes and code cleanups.
-
-Version 1.0.4 (2003-02-02)
-  * Added suport of PVF and XI files.
-  * Added functionality for setting and retreiving strings from sound files.
-  * Minor code cleanups and bug fixes.
-
-Version 1.0.3 (2002-12-09)
-  * Minor bug fixes.
-
-Version 1.0.2 (2002-11-24)
-  * Added support for VOX ADPCM.
-  * Improved error reporting.
-  * Added version scripting on Linux and Solaris.
-  * Minor bug fixes.
-
-Version 1.0.1 (2002-09-14)
-  * Added MAT and MAT5 file formats.
-  * Minor bug fixes.
-
-Version 1.0.0 (2002-08-16)
-  * Final release for 1.0.0.
-
-Version 1.0.0rc6 (2002-08-14)
-  * Release candidate 6 for the 1.0.0 series.
-  * MacOS9 fixes.
-
-Version 1.0.0rc5 (2002-08-10)
-  * Release candidate 5 for the 1.0.0 series.
-  * Changed the definition of sf_count_t which was causing problems when
-    libsndfile was compiled with other libraries (ie WxWindows).
-  * Minor bug fixes.
-  * Documentation cleanup.
-
-Version 1.0.0rc4 (2002-08-03)
-  * Release candidate 4 for the 1.0.0 series.
-  * Minor bug fixes.
-  * Fix broken Win32 "make check".
-
-Version 1.0.0rc3 (2002-08-02)
-  * Release candidate 3 for the 1.0.0 series.
-  * Fix bug where libsndfile was reading beyond the end of the data chunk.
-  * Added on-the-fly header updates on write.
-  * Fix a couple of documentation issues.
-
-Version 1.0.0rc2 (2002-06-24)
-  * Release candidate 2 for the 1.0.0 series.
-  * Fix compile problem for Win32.
-
-Version 1.0.0rc1 (2002-06-24)
-  * Release candidate 1 for the 1.0.0 series.
-
-Version 0.0.28 (2002-04-27)
-  * Last offical release of 0.0.X series of the library.
-
-Version 0.0.8 (1999-02-16)
-  * First offical release.
diff --git a/libs/libsndfile/Octave/Makefile.am b/libs/libsndfile/Octave/Makefile.am
deleted file mode 100644 (file)
index 3f0078e..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-# Prevent any extension.
-EXEEXT =
-
-CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \
-       $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-
-EXTRA_DIST = sndfile_load.m sndfile_save.m sndfile_play.m \
-       octave_test.m octave_test.sh $(oct_module_srcs) PKG_ADD
-
-octconfigdir = $(exec_prefix)/share/octave/site/m
-octconfig_DATA = sndfile_load.m sndfile_save.m sndfile_play.m
-
-OCTAVE_DEST_MDIR = @OCTAVE_DEST_MDIR@
-OCTAVE_DEST_ODIR = @OCTAVE_DEST_ODIR@/sndfile
-
-OCT_CXXFLAGS = @OCT_CXXFLAGS@
-OCT_LIB_DIR = @OCT_LIB_DIR@
-OCT_LIBS = @OCT_LIBS@
-
-SNDFILEDIR = $(top_builddir)/src
-AM_CPPFLAGS = -I$(SNDFILEDIR)
-
-oct_module_srcs = sndfile.cc
-oct_module_files = sndfile.oct PKG_ADD
-
-# Make these noinst so they can be installed manually.
-noinst_DATA = $(oct_module_files)
-
-
-# Used by shave which cleans up automake generated Makefile output.
-V         = @
-Q         = $(V:1=)
-QUIET_GEN = $(Q:@=@echo '  GEN   '$@;)
-
-
-# Use Octave's mkoctfile to do all the heavy lifting. Unfortunately, its
-# a little dumb so we need to guide it carefully.
-sndfile.oct : sndfile.o
-       $(QUIET_GEN) $(MKOCTFILE) -v $(INCLUDES) $(top_builddir)/Octave/$+ -L$(SNDFILEDIR)/.libs -L$(SNDFILEDIR) -lsndfile -o $(top_builddir)/Octave/$@ > /dev/null
-
-sndfile.o : sndfile.cc
-       $(QUIET_GEN) $(MKOCTFILE) -v $(INCLUDES) -c $+ -o $(top_builddir)/Octave/$@ > /dev/null
-
-# Allow for the test being run in the build dir, but the test script
-# being located in the source dir.
-check :
-       octave_src_dir=$(srcdir) $(srcdir)/octave_test.sh
-
-
-# Since the octave modules are installed in a special location, a custom install
-# and uninstall routine must be specified.
-install-exec-local : $(oct_module_files)
-       @$(NORMAL_INSTALL)
-       test -z "$(OCTAVE_DEST_ODIR)" || $(mkdir_p) "$(DESTDIR)$(OCTAVE_DEST_ODIR)"
-       @list='$(oct_module_files)'; for p in $$list; do \
-         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-         if test -f $$p \
-            || test -f $$p1 \
-         ; then \
-           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
-          echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(INSTALL) '$$p' '$(DESTDIR)$(OCTAVE_DEST_ODIR)/$$f'"; \
-          $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(INSTALL) "$$p" "$(DESTDIR)$(OCTAVE_DEST_ODIR)/$$f" || exit 1; \
-         else :; fi; \
-       done
-
-uninstall-local :
-       @$(NORMAL_UNINSTALL)
-       @list='$(oct_module_files)'; for p in $$list; do \
-         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
-         echo " rm -f '$(DESTDIR)$(OCTAVE_DEST_ODIR)/$$f'"; \
-         rm -f "$(DESTDIR)$(OCTAVE_DEST_ODIR)/$$f"; \
-       done
-
-clean-local :
-       rm -f sndfile.o sndfile.oct
-       @if test $(abs_builddir) != $(abs_srcdir) ; then rm -f PKG_ADD ; fi
diff --git a/libs/libsndfile/Octave/PKG_ADD b/libs/libsndfile/Octave/PKG_ADD
deleted file mode 100644 (file)
index 3efd688..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-autoload ("sfread", "sndfile.oct");
-autoload ("sfversion", "sndfile.oct");
-autoload ("sfwrite", "sndfile.oct");
diff --git a/libs/libsndfile/Octave/Readme.txt b/libs/libsndfile/Octave/Readme.txt
deleted file mode 100644 (file)
index c38605b..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-The libsndfile Modules for GNU Octave
-=====================================
-
-These modules are currently known to work with version 3.0 of GNU Octave on
-Linux. They have not been tested elsewhere.
-
-
-Build Requirements
-------------------
-
-In order to build these libsndfile related modules for GNU Octave on a Debian
-GNU/Linux (or Debian derived) system, you will need (on top of what is normally
-required to build libsndfile) the package:
-
-       octaveX.Y-headers
-
-where X.Y matches the version number of your installation of GNU Octave.
-
-The configure script in the top level libsndfile directory will detect the 
-presence and correct versions of the Octave build tools. The building of these
-modules will only go ahead if everything is correct.
-
-
diff --git a/libs/libsndfile/Octave/format.h b/libs/libsndfile/Octave/format.h
deleted file mode 100644 (file)
index ce769b2..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
-** Copyright (C) 2007-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-int format_of_str (const std::string & fmt) ;
-
-void string_of_format (std::string & fmt, int format) ;
diff --git a/libs/libsndfile/Octave/octave_test.m b/libs/libsndfile/Octave/octave_test.m
deleted file mode 100644 (file)
index 25a922e..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright (C) 2007-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU Lesser General Public License as published by
-# the Free Software Foundation; either version 2.1 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-# These tests are nowhere near comprehensive.
-
-printf ("    Running Octave tests                     : ") ;
-fflush (stdout) ;
-
-filename = "whatever" ;
-srate_out = 32000 ;
-fmt_out = "wav-float" ;
-
-t = (2 * pi / srate_out * (0:srate_out-1))' ;
-data_out = sin (440.0 * t) ;
-
-# Write out a file.
-sfwrite (filename, data_out, srate_out, fmt_out) ;
-
-# Read it back in again.
-[ data_in, srate_in, fmt_in ] = sfread (filename) ;
-
-if (srate_in != srate_out)
-       error ("\n\nSample rate mismatch : %d -> %d.\n\n", srate_out, srate_in) ;
-       endif
-
-# Octave strcmp return 1 for the same.
-if (strcmp (fmt_in, fmt_out) != 1)
-       error ("\n\nFormat error : '%s' -> '%s'.\n\n", fmt_out, fmt_in) ;
-       endif
-
-err = max (abs (data_out - data_in)) ;
-
-if (err > 1e-7)
-       error ("err : %g\n", err) ;
-       endif
-
-printf ("ok") ;
-
-unlink (filename) ;
diff --git a/libs/libsndfile/Octave/octave_test.sh b/libs/libsndfile/Octave/octave_test.sh
deleted file mode 100755 (executable)
index 3c6f36e..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/bin/bash
-
-
-# Check where we're being run from.
-if test -d Octave ; then
-       cd Octave
-       octave_src_dir=$(pwd)
-elif test -z "$octave_src_dir" ; then
-       echo
-       echo "Error : \$octave_src_dir is undefined."
-       echo
-       exit 1
-else
-       octave_src_dir=$(cd $octave_src_dir && pwd)
-       fi
-
-# Find libsndfile shared object.
-libsndfile_lib_location=""
-
-if test -f "../src/.libs/libsndfile.so" ; then
-       libsndfile_lib_location="../src/.libs/"
-elif test -f "../src/libsndfile.so" ; then
-       libsndfile_lib_location="../src/"
-elif test -f "../src/.libs/libsndfile.dylib" ; then
-       libsndfile_lib_location="../src/.libs/"
-elif test -f "../src/libsndfile.dylib" ; then
-       libsndfile_lib_location="../src/"
-else
-       echo
-       echo "Not able to find the libsndfile shared lib we've just built."
-       echo "This may cause the following test to fail."
-       echo
-       fi
-
-libsndfile_lib_location=`(cd $libsndfile_lib_location && pwd)`
-
-
-# Find sndfile.oct
-sndfile_oct_location=""
-
-if test -f .libs/sndfile.oct ; then
-       sndfile_oct_location=".libs"
-elif test -f sndfile.oct ; then
-       sndfile_oct_location="."
-else
-       echo "Not able to find the sndfile.oct binaries we've just built."
-       exit 1
-       fi
-
-case `file -b $sndfile_oct_location/sndfile.oct` in
-       ELF*)
-               ;;
-       Mach*)
-               echo "Tests don't work on this platform."
-               exit 0
-               ;;
-       *)
-               echo "Not able to find the sndfile.oct binary we just built."
-               exit 1
-               ;;
-       esac
-
-
-# Make sure the TERM environment variable doesn't contain anything wrong.
-unset TERM
-# echo "octave_src_dir : $octave_src_dir"
-# echo "libsndfile_lib_location : $libsndfile_lib_location"
-# echo "sndfile_oct_location : $sndfile_oct_location"
-
-if test ! -f PKG_ADD ; then
-       cp $octave_src_dir/PKG_ADD .
-       fi
-
-export LD_LIBRARY_PATH="$libsndfile_lib_location:$LD_LIBRARY_PATH"
-
-octave_script="$octave_src_dir/octave_test.m"
-
-(cd $sndfile_oct_location && octave -qH $octave_script)
-res=$?
-echo
-exit $res
diff --git a/libs/libsndfile/Octave/sndfile.cc b/libs/libsndfile/Octave/sndfile.cc
deleted file mode 100644 (file)
index 6e9cd44..0000000
+++ /dev/null
@@ -1,405 +0,0 @@
-/*
-** Copyright (C) 2007-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <octave/oct.h>
-
-#include "sndfile.h"
-
-#define FOUR_GIG               (0x100000000LL)
-#define        BUFFER_FRAMES   8192
-
-
-static int format_of_str (const std::string & fmt) ;
-static void string_of_format (std::string & fmt, int format) ;
-
-
-DEFUN_DLD (sfversion, args, nargout ,
-"-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{version} =} sfversion ()\n\
-@cindex Reading sound files\n\
-Return a string containing the libsndfile version.\n\
-@seealso{sfread, sfwrite}\n\
-@end deftypefn")
-{      char buffer [256] ;
-       octave_value_list retval ;
-
-       /* Bail out if the input parameters are bad. */
-       if (args.length () != 0 || nargout > 1)
-       {       print_usage () ;
-               return retval ;
-               } ;
-
-       sf_command (NULL, SFC_GET_LIB_VERSION, buffer, sizeof (buffer)) ;
-
-       std::string version (buffer) ;
-
-       retval.append (version) ;
-       return retval ;
-} /* sfversion */
-
-
-DEFUN_DLD (sfread, args, nargout ,
-"-*- texinfo -*-\n\
-@deftypefn {Loadable Function} {@var{data},@var{srate},@var{format} =} sfread (@var{filename})\n\
-@cindex Reading sound files\n\
-Read a sound file from disk using libsndfile.\n\
-@seealso{sfversion, sfwrite}\n\
-@end deftypefn")
-{      SNDFILE * file ;
-       SF_INFO sfinfo ;
-
-       octave_value_list retval ;
-
-       int nargin  = args.length () ;
-
-       /* Bail out if the input parameters are bad. */
-       if ((nargin != 1) || !args (0) .is_string () || nargout < 1 || nargout > 3)
-       {       print_usage () ;
-               return retval ;
-               } ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       std::string filename = args (0).string_value () ;
-
-       if ((file = sf_open (filename.c_str (), SFM_READ, &sfinfo)) == NULL)
-       {       error ("sfread: couldn't open file %s : %s", filename.c_str (), sf_strerror (NULL)) ;
-               return retval ;
-               } ;
-
-       if (sfinfo.frames > FOUR_GIG)
-               printf ("This is a really huge file (%lld frames).\nYou may run out of memory trying to load it.\n", (long long) sfinfo.frames) ;
-
-       dim_vector dim = dim_vector () ;
-       dim.resize (2) ;
-       dim (0) = sfinfo.frames ;
-       dim (1) = sfinfo.channels ;
-
-       /* Should I be using Matrix instead? */
-       NDArray out (dim, 0.0) ;
-
-       float buffer [BUFFER_FRAMES * sfinfo.channels] ;
-       int readcount ;
-       sf_count_t total = 0 ;
-
-       do
-       {       readcount = sf_readf_float (file, buffer, BUFFER_FRAMES) ;
-
-               /* Make sure we don't read more frames than we allocated. */
-               if (total + readcount > sfinfo.frames)
-                       readcount = sfinfo.frames - total ;
-
-               for (int ch = 0 ; ch < sfinfo.channels ; ch++)
-               {       for (int k = 0 ; k < readcount ; k++)
-                               out (total + k, ch) = buffer [k * sfinfo.channels + ch] ;
-                       } ;
-
-               total += readcount ;
-       } while (readcount > 0 && total < sfinfo.frames) ;
-
-       retval.append (out.squeeze ()) ;
-
-       if (nargout >= 2)
-               retval.append ((octave_uint32) sfinfo.samplerate) ;
-
-       if (nargout >= 3)
-       {       std::string fmt ("") ;
-               string_of_format (fmt, sfinfo.format) ;
-               retval.append (fmt) ;
-               } ;
-
-       /* Clean up. */
-       sf_close (file) ;
-
-       return retval ;
-} /* sfread */
-
-DEFUN_DLD (sfwrite, args, nargout ,
-"-*- texinfo -*-\n\
-@deftypefn {Function File} sfwrite (@var{filename},@var{data},@var{srate},@var{format})\n\
-Write a sound file to disk using libsndfile.\n\
-@seealso{sfread, sfversion}\n\
-@end deftypefn\n\
-")
-{      SNDFILE * file ;
-       SF_INFO sfinfo ;
-
-    octave_value_list retval ;
-
-    int nargin  = args.length () ;
-
-    /* Bail out if the input parameters are bad. */
-    if (nargin != 4 || !args (0).is_string () || !args (1).is_real_matrix ()
-                       || !args (2).is_real_scalar () || !args (3).is_string ()
-                       || nargout != 0)
-       {       print_usage () ;
-               return retval ;
-       } ;
-
-    std::string filename = args (0).string_value () ;
-    std::string format = args (3).string_value () ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       sfinfo.format = format_of_str (format) ;
-       if (sfinfo.format == 0)
-       {       error ("Bad format '%s'", format.c_str ()) ;
-               return retval ;
-               } ;
-
-       sfinfo.samplerate = lrint (args (2).scalar_value ()) ;
-       if (sfinfo.samplerate < 1)
-       {       error ("Bad sample rate : %d.\n", sfinfo.samplerate) ;
-               return retval ;
-               } ;
-
-       Matrix data = args (1).matrix_value () ;
-       long rows = args (1).rows () ;
-       long cols = args (1).columns () ;
-
-       if (cols > rows)
-       {       error ("Audio data should have one column per channel, but supplied data "
-                               "has %ld rows and %ld columns.\n", rows, cols) ;
-               return retval ;
-               } ;
-
-       sfinfo.channels = cols ;
-
-    if ((file = sf_open (filename.c_str (), SFM_WRITE, &sfinfo)) == NULL)
-       {       error ("Couldn't open file %s : %s", filename.c_str (), sf_strerror (NULL)) ;
-               return retval ;
-       } ;
-
-       float buffer [BUFFER_FRAMES * sfinfo.channels] ;
-       int writecount ;
-       long total = 0 ;
-
-       do
-       {
-               writecount = BUFFER_FRAMES ;
-
-               /* Make sure we don't read more frames than we allocated. */
-               if (total + writecount > rows)
-                       writecount = rows - total ;
-
-               for (int ch = 0 ; ch < sfinfo.channels ; ch++)
-               {       for (int k = 0 ; k < writecount ; k++)
-                               buffer [k * sfinfo.channels + ch] = data (total + k, ch) ;
-                       } ;
-
-               if (writecount > 0)
-                       sf_writef_float (file, buffer, writecount) ;
-
-               total += writecount ;
-       } while (writecount > 0 && total < rows) ;
-
-    /* Clean up. */
-    sf_close (file) ;
-
-    return retval ;
-} /* sfwrite */
-
-
-static void
-str_split (const std::string & str, const std::string & delim, std::vector <std::string> & output)
-{
-    unsigned int offset = 0 ;
-    size_t delim_index = 0 ;
-
-    delim_index = str.find (delim, offset) ;
-
-    while (delim_index != std::string::npos)
-    {
-        output.push_back (str.substr(offset, delim_index - offset)) ;
-        offset += delim_index - offset + delim.length () ;
-        delim_index = str.find (delim, offset) ;
-    }
-
-    output.push_back (str.substr (offset)) ;
-} /* str_split */
-
-static int
-hash_of_str (const std::string & str)
-{
-       int hash = 0 ;
-
-       for (unsigned k = 0 ; k < str.length () ; k++)
-               hash = (hash * 3) + tolower (str [k]) ;
-
-       return hash ;
-} /* hash_of_str */
-
-static int
-major_format_of_hash (const std::string & str)
-{      int hash ;
-
-       hash = hash_of_str (str) ;
-
-       switch (hash)
-       {
-               case 0x5c8 : /* 'wav' */ return SF_FORMAT_WAV ;
-               case 0xf84 : /* 'aiff' */ return SF_FORMAT_AIFF ;
-               case 0x198 : /* 'au' */ return SF_FORMAT_AU ;
-               case 0x579 : /* 'paf' */ return SF_FORMAT_PAF ;
-               case 0x5e5 : /* 'svx' */ return SF_FORMAT_SVX ;
-               case 0x1118 : /* 'nist' */ return SF_FORMAT_NIST ;
-               case 0x5d6 : /* 'voc' */ return SF_FORMAT_VOC ;
-               case 0x324a : /* 'ircam' */ return SF_FORMAT_IRCAM ;
-               case 0x505 : /* 'w64' */ return SF_FORMAT_W64 ;
-               case 0x1078 : /* 'mat4' */ return SF_FORMAT_MAT4 ;
-               case 0x1079 : /* 'mat5' */ return SF_FORMAT_MAT5 ;
-               case 0x5b8 : /* 'pvf' */ return SF_FORMAT_PVF ;
-               case 0x1d1 : /* 'xi' */ return SF_FORMAT_XI ;
-               case 0x56f : /* 'htk' */ return SF_FORMAT_HTK ;
-               case 0x5aa : /* 'sds' */ return SF_FORMAT_SDS ;
-               case 0x53d : /* 'avr' */ return SF_FORMAT_AVR ;
-               case 0x11d0 : /* 'wavx' */ return SF_FORMAT_WAVEX ;
-               case 0x569 : /* 'sd2' */ return SF_FORMAT_SD2 ;
-               case 0x1014 : /* 'flac' */ return SF_FORMAT_FLAC ;
-               case 0x504 : /* 'caf' */ return SF_FORMAT_CAF ;
-               case 0x5f6 : /* 'wve' */ return SF_FORMAT_WVE ;
-               default : break ;
-               } ;
-
-       printf ("%s : hash '%s' -> 0x%x\n", __func__, str.c_str (), hash) ;
-
-       return 0 ;
-} /* major_format_of_hash */
-
-static int
-minor_format_of_hash (const std::string & str)
-{      int hash ;
-
-       hash = hash_of_str (str) ;
-
-       switch (hash)
-       {
-               case 0x1085 : /* 'int8' */ return SF_FORMAT_PCM_S8 ;
-               case 0x358a : /* 'uint8' */ return SF_FORMAT_PCM_U8 ;
-               case 0x31b0 : /* 'int16' */ return SF_FORMAT_PCM_16 ;
-               case 0x31b1 : /* 'int24' */ return SF_FORMAT_PCM_24 ;
-               case 0x31b2 : /* 'int32' */ return SF_FORMAT_PCM_32 ;
-               case 0x3128 : /* 'float' */ return SF_FORMAT_FLOAT ;
-               case 0x937d : /* 'double' */ return SF_FORMAT_DOUBLE ;
-               case 0x11bd : /* 'ulaw' */ return SF_FORMAT_ULAW ;
-               case 0xfa1 : /* 'alaw' */ return SF_FORMAT_ALAW ;
-               case 0xfc361 : /* 'ima_adpcm' */ return SF_FORMAT_IMA_ADPCM ;
-               case 0x5739a : /* 'ms_adpcm' */ return SF_FORMAT_MS_ADPCM ;
-               case 0x9450 : /* 'gsm610' */ return SF_FORMAT_GSM610 ;
-               case 0x172a3 : /* 'g721_32' */ return SF_FORMAT_G721_32 ;
-               case 0x172d8 : /* 'g723_24' */ return SF_FORMAT_G723_24 ;
-               case 0x172da : /* 'g723_40' */ return SF_FORMAT_G723_40 ;
-               default : break ;
-               } ;
-
-       printf ("%s : hash '%s' -> 0x%x\n", __func__, str.c_str (), hash) ;
-
-       return 0 ;
-} /* minor_format_of_hash */
-
-
-static const char *
-string_of_major_format (int format)
-{
-       switch (format & SF_FORMAT_TYPEMASK)
-       {
-               case SF_FORMAT_WAV : return "wav" ;
-               case SF_FORMAT_AIFF : return "aiff" ;
-               case SF_FORMAT_AU : return "au" ;
-               case SF_FORMAT_PAF : return "paf" ;
-               case SF_FORMAT_SVX : return "svx" ;
-               case SF_FORMAT_NIST : return "nist" ;
-               case SF_FORMAT_VOC : return "voc" ;
-               case SF_FORMAT_IRCAM : return "ircam" ;
-               case SF_FORMAT_W64 : return "w64" ;
-               case SF_FORMAT_MAT4 : return "mat4" ;
-               case SF_FORMAT_MAT5 : return "mat5" ;
-               case SF_FORMAT_PVF : return "pvf" ;
-               case SF_FORMAT_XI : return "xi" ;
-               case SF_FORMAT_HTK : return "htk" ;
-               case SF_FORMAT_SDS : return "sds" ;
-               case SF_FORMAT_AVR : return "avr" ;
-               case SF_FORMAT_WAVEX : return "wavx" ;
-               case SF_FORMAT_SD2 : return "sd2" ;
-               case SF_FORMAT_FLAC : return "flac" ;
-               case SF_FORMAT_CAF : return "caf" ;
-               case SF_FORMAT_WVE : return "wfe" ;
-               default : break ;
-               } ;
-
-       return "unknown" ;
-} /* string_of_major_format */
-
-static const char *
-string_of_minor_format (int format)
-{
-       switch (format & SF_FORMAT_SUBMASK)
-       {
-               case SF_FORMAT_PCM_S8 : return "int8" ;
-               case SF_FORMAT_PCM_U8 : return "uint8" ;
-               case SF_FORMAT_PCM_16 : return "int16" ;
-               case SF_FORMAT_PCM_24 : return "int24" ;
-               case SF_FORMAT_PCM_32 : return "int32" ;
-               case SF_FORMAT_FLOAT : return "float" ;
-               case SF_FORMAT_DOUBLE : return "double" ;
-               case SF_FORMAT_ULAW : return "ulaw" ;
-               case SF_FORMAT_ALAW : return "alaw" ;
-               case SF_FORMAT_IMA_ADPCM : return "ima_adpcm" ;
-               case SF_FORMAT_MS_ADPCM : return "ms_adpcm" ;
-               case SF_FORMAT_GSM610 : return "gsm610" ;
-               case SF_FORMAT_G721_32 : return "g721_32" ;
-               case SF_FORMAT_G723_24 : return "g723_24" ;
-               case SF_FORMAT_G723_40 : return "g723_40" ;
-               default : break ;
-               } ;
-
-       return "unknown" ;
-} /* string_of_minor_format */
-
-static int
-format_of_str (const std::string & fmt)
-{
-       std::vector <std::string> split ;
-
-       str_split (fmt, "-", split) ;
-
-       if (split.size () != 2)
-               return 0 ;
-
-       int major_fmt = major_format_of_hash (split.at (0)) ;
-       if (major_fmt == 0)
-               return 0 ;
-
-       int minor_fmt = minor_format_of_hash (split.at (1)) ;
-       if (minor_fmt == 0)
-               return 0 ;
-
-       return major_fmt | minor_fmt ;
-} /* format_of_str */
-
-static void
-string_of_format (std::string & fmt, int format)
-{
-       char buffer [64] ;
-
-       snprintf (buffer, sizeof (buffer), "%s-%s", string_of_major_format (format), string_of_minor_format (format)) ;
-
-       fmt = buffer ;
-
-       return ;
-} /* string_of_format */
diff --git a/libs/libsndfile/Octave/sndfile_load.m b/libs/libsndfile/Octave/sndfile_load.m
deleted file mode 100644 (file)
index c66198f..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-## Copyright (C) 2002-2011  Erik de Castro Lopo
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2, or (at your option)
-## any later version.
-##
-## This program is distributed in the hope that it will be useful, but
-## WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this file.  If not, write to the Free Software Foundation,
-## 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-## -*- texinfo -*-
-## @deftypefn {Function File} {} sndfile_load (@var{filename})
-## Load data from the file given by @var{filename}.
-## @end deftypefn
-
-## Author: Erik de Castro Lopo <erikd@mega-nerd.com>
-## Description: Load the sound data from the given file name
-
-function [data fs] = sndfile_load (filename)
-
-if (nargin != 1),
-       error ("Need an input filename") ;
-       endif
-
-samplerate = -1 ;
-samplingrate = -1 ;
-wavedata = -1 ;
-
-
-eval (sprintf ('load -f %s', filename)) ;
-
-if (samplerate > 0),
-       fs = samplerate ;
-elseif (samplingrate > 0),
-       fs = samplingrate ;
-else
-       error ("Not able to find sample rate.") ;
-       endif
-
-if (max (size (wavedata)) > 1),
-       data = wavedata ;
-else
-       error ("Not able to find waveform data.") ;
-       endif
-
-endfunction
diff --git a/libs/libsndfile/Octave/sndfile_play.m b/libs/libsndfile/Octave/sndfile_play.m
deleted file mode 100644 (file)
index e8a34a7..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-## Copyright (C) 2002-2011  Erik de Castro Lopo
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2, or (at your option)
-## any later version.
-##
-## This program is distributed in the hope that it will be useful, but
-## WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this file.  If not, write to the Free Software Foundation,
-## 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-## -*- texinfo -*-
-## @deftypefn {Function File} {} sndfile_play (@var{data, fs})
-## Play @var{data} at sample rate @var{fs} using the sndfile-play
-## program.
-## @end deftypefn
-
-## Author: Erik de Castro Lopo <erikd@mega-nerd.com>
-## Description: Play the given data as a sound file
-
-function sndfile_play (data, fs)
-
-if nargin != 2,
-       error ("Need two input arguments: data and fs.") ;
-       endif
-
-if (max (size (fs)) > 1),
-       error ("Second parameter fs must be a single value.") ;
-       endif
-
-[nr nc] = size (data) ;
-
-if (nr > nc),
-       data = data' ;
-       endif
-
-samplerate = fs ;
-wavedata = data ;
-
-filename = tmpnam () ;
-
-cmd = sprintf ("save -mat-binary %s fs data", filename) ;
-
-eval (cmd) ;
-
-cmd = sprintf ("sndfile-play %s", filename) ;
-
-[output, status] = system (cmd) ;
-
-if (status),
-       disp (outout) ;
-       endif
-
-endfunction
diff --git a/libs/libsndfile/Octave/sndfile_save.m b/libs/libsndfile/Octave/sndfile_save.m
deleted file mode 100644 (file)
index 5b7e7c7..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-## Copyright (C) 2002-2011  Erik de Castro Lopo
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2, or (at your option)
-## any later version.
-##
-## This program is distributed in the hope that it will be useful, but
-## WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this file.  If not, write to the Free Software Foundation,
-## 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-## -*- texinfo -*-
-## @deftypefn {Function File} {} sndfile_save (@var{filename, data, fs})
-## Save the given @var{data} as audio data to the given at @var{fs}. Set
-## the sample rate to @var{fs}.
-## @end deftypefn
-
-## Author: Erik de Castro Lopo <erikd@mega-nerd.com>
-## Description: Save data as a sound file
-
-function sndfile_save (filename, data, fs)
-
-if nargin != 3,
-       error ("Need three input arguments: filename, data and fs.") ;
-       endif
-
-if (! isstr (filename)),
-       error ("First parameter 'filename' is must be a string.") ;
-       endif
-
-if (max (size (fs)) > 1),
-       error ("Second parameter 'fs' must be a single value, not an array or matrix.") ;
-       endif
-
-[nr nc] = size (data) ;
-
-if (nr > nc),
-       data = data' ;
-       endif
-
-samplerate = fs ;
-wavedata = data ;
-
-str = sprintf ("save -mat-binary %s samplerate wavedata", filename) ;
-
-eval (str) ;
-
-endfunction
diff --git a/libs/libsndfile/README b/libs/libsndfile/README
deleted file mode 100644 (file)
index 8df79c7..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-This is libsndfile, 1.0.25
-
-libsndfile is a library of C routines for reading and writing
-files containing sampled audio data.
-
-The src/ directory contains the source code for library itself.
-
-The doc/ directory contains the libsndfile documentation.
-
-The examples/ directory contains examples of how to write code using
-libsndfile.
-
-The tests/ directory contains programs which link against libsndfile
-and test its functionality.
-
-The src/GSM610 directory contains code written by Jutta Degener and Carsten
-Bormann. Their original code can be found at :
-    http://kbs.cs.tu-berlin.de/~jutta/toast.html
-
-The src/G72x directory contains code written and released by Sun Microsystems
-under a suitably free license.
-
-The src/ALAC directory contains code written and released by Apple Inc and
-released under the Apache license.
-
-
-LINUX
------
-Whereever possible, you should use the packages supplied by your Linux
-distribution.
-
-If you really do need to compile from source it should be as easy as:
-
-               ./configure
-               make
-               make install
-
-Since libsndfile optionally links against libFLAC, libogg and libvorbis, you
-will need to install appropriate versions of these libraries before running
-configure as above.
-
-
-UNIX
-----
-Compile as for Linux.
-
-
-Win32/Win64
------------
-The default Windows compilers are nowhere near compliant with the 1999 ISO
-C Standard and hence not able to compile libsndfile.
-
-Please use the libsndfile binaries available on the libsndfile web site.
-
-
-MacOSX
-------
-Building on MacOSX should be the same as building it on any other Unix.
-
-
-CONTACTS
---------
-
-libsndfile was written by Erik de Castro Lopo (erikd AT mega-nerd DOT com).
-The libsndfile home page is at :
-
-       http://www.mega-nerd.com/libsndfile/
-
diff --git a/libs/libsndfile/README.md b/libs/libsndfile/README.md
deleted file mode 100644 (file)
index a7fdaea..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-# libsndfile
-
-libsndfile is a C library for reading and writing files containing sampled audio
-data.
-
-## Hacking
-
-The canonical source code repository for libsndfile is at
-[https://github.com/erikd/libsndfile/][github].
-
-You can grab the source code using:
-
-    $ git clone git://github.com/erikd/libsndfile.git
-
-Building on Linux, OSX and Windows (Using GNU GCC) will require a number of GNU
-and other Free and Open Source Software tools including:
-
-* [Autoconf][autoconf]
-* [Autogen][autogen]
-* [Automake][automake]
-* [Libtool][libtool]
-* [Pkgconfig][pkgconfig]
-* [Python][python]
-
-If you are on Linux, its probably best to install these via your Linux
-distribution's package manager.
-
-If you want to compile libsndfile with support for formats like FLAC and
-Ogg/Vorbis you will also need to install the following optional libraries:
-
-* [FLAC][flac]
-* [libogg][libogg]
-* [libvorbis][libvorbis]
-
-Support for these extra libraries is an all or nothing affair. Unless all of
-them are installed none of them will be supported.
-
-    $ ./autogen.sh
-
-Running `autogen.sh` also installs a git pre-commit hook. The pre-commit hook
-is run each time a user tries to commit and checks code about to be committed
-against coding guidelines.
-
-Nest step is to run configure, with the following configure options being
-recommended for anyone contemplating sending libsndfile patches:
-
-    $ ./configure --enable-gcc-werror
-
-Finally libsndfile can be built and tested:
-
-    $ make
-    $ make check
-
-## Submitting Patches.
-
-* Patches should pass all pre-commit hook tests.
-* Patches should always be submitted via a either Github "pull request" or a
-  via emailed patches created using "git format-patch".
-* Patches for new features should include tests and documentation.
-* Patches to fix bugs should either pass all tests, or modify the tests in some
-  sane way.
-* When a new feature is added for a particular file format and that feature
-  makes sense for other formats, then it should also be implemented for one
-  or two of the other formats.
-
-
-
-
-
-[autoconf]: http://www.gnu.org/s/autoconf/
-[autogen]: http://www.gnu.org/s/autogen/
-[automake]: http://www.gnu.org/software/automake/
-[flac]: http://flac.sourceforge.net/
-[github]: https://github.com/erikd/libsndfile/
-[libogg]: http://xiph.org/ogg/
-[libtool]: http://www.gnu.org/software/libtool/
-[libvorbis]: http://www.vorbis.com/
-[pkgconfig]: http://www.freedesktop.org/wiki/Software/pkg-config
-[python]: http://www.python.org/
diff --git a/libs/libsndfile/Scripts/android-configure.sh b/libs/libsndfile/Scripts/android-configure.sh
deleted file mode 100644 (file)
index c981d49..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/bin/bash -e
-
-# Copyright (C) 2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-#       notice, this list of conditions and the following disclaimer.
-#     * Neither the author nor the names of any contributors may be used
-#       to endorse or promote products derived from this software without
-#       specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# Android NDK version number; eg r8e, r9 etc
-ANDROID_NDK_VER=r9
-
-# Android NDK gcc version; eg 4.7, 4.9 etc.
-ANDROID_GCC_VER=4.8
-
-# Android API version; eg 9 (Android 2.3), 14 (Android 4.0) etc.
-ANDROID_API_VER=9
-
-#-------------------------------------------------------------------------------
-# No more user config beyond here.
-
-BUILD_MACHINE=$(uname -s | tr 'A-Z' 'a-z')-$(uname -m)
-
-function die_with {
-       echo $1
-       exit 1
-}
-
-export CROSS_COMPILE=arm-linux-androideabi
-
-# I put all my dev stuff in here
-export DEV_PREFIX=$HOME/Android
-test -d ${DEV_PREFIX} || die_with "Error : DEV_PREFIX '$DEV_PREFIX' does not exist."
-
-# Don't forget to adjust this to your NDK path
-export ANDROID_NDK=${DEV_PREFIX}/android-ndk-${ANDROID_NDK_VER}
-test -d ${ANDROID_NDK} || die_with "Error : ANDROID_NDK '$ANDROID_NDK' does not exist."
-
-export ANDROID_PREFIX=${ANDROID_NDK}/toolchains/arm-linux-androideabi-${ANDROID_GCC_VER}/prebuilt/${BUILD_MACHINE}
-test -d ${ANDROID_PREFIX} || die_with "Error : ANDROID_PREFIX '$ANDROID_PREFIX' does not exist."
-
-export SYSROOT=${ANDROID_NDK}/platforms/android-${ANDROID_API_VER}/arch-arm
-test -d ${SYSROOT} || die_with "Error : SYSROOT '$SYSROOT' does not exist."
-
-export CROSS_PREFIX=${ANDROID_PREFIX}/bin/${CROSS_COMPILE}
-test -f ${CROSS_PREFIX}-gcc || die_with "Error : CROSS_PREFIX compiler '${CROSS_PREFIX}-gcc' does not exist."
-
-
-# Non-exhaustive lists of compiler + binutils
-# Depending on what you compile, you might need more binutils than that
-export CPP=${CROSS_PREFIX}-cpp
-export AR=${CROSS_PREFIX}-ar
-export AS=${CROSS_PREFIX}-as
-export NM=${CROSS_PREFIX}-nm
-export CC=${CROSS_PREFIX}-gcc
-export CXX=${CROSS_PREFIX}-g++
-export LD=${CROSS_PREFIX}-ld
-export RANLIB=${CROSS_PREFIX}-ranlib
-
-# Don't mix up .pc files from your host and build target
-export PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig
-
-# Set up the needed FLAGS.
-export CFLAGS="${CFLAGS} -gstabs --sysroot=${SYSROOT} -I${SYSROOT}/usr/include -I${ANDROID_PREFIX}/include"
-export CXXFLAGS="${CXXFLAGS} -gstabs -fno-exceptions --sysroot=${SYSROOT} -I${SYSROOT}/usr/include -I${ANDROID_PREFIX}/include -I${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_GCC_VER}/include/ -I${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_GCC_VER}/libs/armeabi/include"
-
-export CPPFLAGS="${CFLAGS}"
-export LDFLAGS="${LDFLAGS} -L${SYSROOT}/usr/lib -L${ANDROID_PREFIX}/lib"
-
-# Create a symlink to the gdbclient.
-test -h gdbclient || ln -s ${ANDROID_PREFIX}/bin/arm-linux-androideabi-gdb gdbclient
-
-./configure --host=${CROSS_COMPILE} --with-sysroot=${SYSROOT} "$@"
diff --git a/libs/libsndfile/Scripts/build-test-tarball.mk.in b/libs/libsndfile/Scripts/build-test-tarball.mk.in
deleted file mode 100644 (file)
index 931edb6..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/make -f
-
-# This is probably only going to work with GNU Make.
-# This in a separate file instead of in Makefile.am because Automake complains
-# about the GNU Make-isms.
-
-EXEEXT = @EXEEXT@
-
-PACKAGE_VERSION = @PACKAGE_VERSION@
-
-HOST_TRIPLET = @HOST_TRIPLET@
-
-SRC_BINDIR = @SRC_BINDIR@
-TEST_BINDIR = @TEST_BINDIR@
-
-LIBRARY := $(SRC_BINDIR)libsndfile.so.$(LIB_VERSION)
-
-LIB_VERSION := $(shell echo $(PACKAGE_VERSION) | sed -e 's/[a-z].*//')
-
-TESTNAME = libsndfile-testsuite-$(HOST_TRIPLET)-$(PACKAGE_VERSION)
-
-TARBALL = $(TESTNAME).tar.gz
-
-# Find the test programs by grepping the script for the programs it executes.
-testprogs := $(shell grep '^\./' tests/test_wrapper.sh | sed -e "s|./||" -e "s/ .*//" | sort | uniq)
-# Also add the programs not found by the above.
-testprogs += sfversion@EXEEXT@ stdin_test@EXEEXT@ stdout_test@EXEEXT@ cpp_test@EXEEXT@ win32_test@EXEEXT@
-
-# Find the single test program in src/ .
-srcprogs := $(shell if test -x src/.libs/test_main$(EXEEXT) ; then echo "src/.libs/test_main$(EXEEXT)" ; else echo "src/test_main$(EXEEXT)" ; fi)
-
-libfiles := $(shell if test ! -z $(EXEEXT) ; then echo "src/libsndfile-1.def src/.libs/libsndfile-1.dll" ; elif test -f $(LIBRARY) ; then echo $(LIBRARY) ; fi  ; fi)
-
-testbins := $(addprefix $(TEST_BINDIR),$(subst @EXEEXT@,$(EXEEXT),$(testprogs))) $(libfiles) $(srcprogs)
-
-
-all : $(TARBALL)
-
-clean :
-       rm -rf $(TARBALL) $(TESTNAME)/
-
-check : $(TESTNAME)/test_wrapper.sh
-       (cd ./$(TESTNAME)/ && ./test_wrapper.sh)
-
-$(TARBALL) : $(TESTNAME)/test_wrapper.sh
-       tar zcf $@ $(TESTNAME)
-       rm -rf $(TESTNAME)
-       @echo
-       @echo "Created : $(TARBALL)"
-       @echo
-
-$(TESTNAME)/test_wrapper.sh : $(testbins) tests/test_wrapper.sh tests/pedantic-header-test.sh
-       rm -rf $(TESTNAME)
-       mkdir -p $(TESTNAME)/tests/
-       cp $(testbins) $(TESTNAME)/tests/
-       cp tests/test_wrapper.sh $(TESTNAME)/
-       cp tests/pedantic-header-test.sh $(TESTNAME)/tests/
-       chmod u+x $@
-
-tests/test_wrapper.sh : tests/test_wrapper.sh.in
-       (cd tests/ ; make $@)
diff --git a/libs/libsndfile/Scripts/clang-sanitize.sh b/libs/libsndfile/Scripts/clang-sanitize.sh
deleted file mode 100644 (file)
index 2898883..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/bin/bash
-
-# This is known to work with clang-3.4 from Debian testing/unstable.
-# 2013/07/14
-
-export CC=clang
-export CXX=clang++
-export CFLAGS="-O3 -fsanitize=address,integer,undefined"
-export CXXFLAGS="-O3 -fsanitize=address,integer,undefined"
-
-./configure --enable-gcc-werror
-
-make clean all check
diff --git a/libs/libsndfile/Scripts/cstyle.py b/libs/libsndfile/Scripts/cstyle.py
deleted file mode 100644 (file)
index 94a969c..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-#!/usr/bin/python -tt
-#
-# Copyright (C) 2005-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-#
-# Released under the 2 clause BSD license.
-
-"""
-This program checks C code for compliance to coding standards used in
-libsndfile and other projects I run.
-"""
-
-import re
-import sys
-
-
-class Preprocessor:
-       """
-       Preprocess lines of C code to make it easier for the CStyleChecker class to
-       test for correctness. Preprocessing works on a single line at a time but
-       maintains state between consecutive lines so it can preprocessess multi-line
-       comments.
-       Preprocessing involves:
-         - Strip C++ style comments from a line.
-         - Strip C comments from a series of lines. When a C comment starts and
-           ends on the same line it will be replaced with 'comment'.
-         - Replace arbitrary C strings with the zero length string.
-         - Replace '#define f(x)' with '#define f (c)' (The C #define requires that
-           there be no space between defined macro name and the open paren of the
-           argument list).
-       Used by the CStyleChecker class.
-       """
-       def __init__ (self):
-               self.comment_nest = 0
-               self.leading_space_re = re.compile ('^(\t+| )')
-               self.trailing_space_re = re.compile ('(\t+| )$')
-               self.define_hack_re = re.compile ("(#\s*define\s+[a-zA-Z0-9_]+)\(")
-
-       def comment_nesting (self):
-               """
-               Return the currect comment nesting. At the start and end of the file,
-               this value should be zero. Inside C comments it should be 1 or
-               (possibly) more.
-               """
-               return self.comment_nest
-
-       def __call__ (self, line):
-               """
-               Strip the provided line of C and C++ comments. Stripping of multi-line
-               C comments works as expected.
-               """
-
-               line = self.define_hack_re.sub (r'\1 (', line)
-
-               line = self.process_strings (line)
-
-               # Strip C++ style comments.
-               if self.comment_nest == 0:
-                       line = re.sub ("( |\t*)//.*", '', line)
-
-               # Strip C style comments.
-               open_comment = line.find ('/*')
-               close_comment = line.find ('*/')
-
-               if self.comment_nest > 0 and close_comment < 0:
-                       # Inside a comment block that does not close on this line.
-                       return ""
-
-               if open_comment >= 0 and close_comment < 0:
-                       # A comment begins on this line but doesn't close on this line.
-                       self.comment_nest += 1
-                       return self.trailing_space_re.sub ('', line [:open_comment])
-
-               if open_comment < 0 and close_comment >= 0:
-                       # Currently open comment ends on this line.
-                       self.comment_nest -= 1
-                       return self.trailing_space_re.sub ('', line [close_comment + 2:])
-
-               if open_comment >= 0 and close_comment > 0 and self.comment_nest == 0:
-                       # Comment begins and ends on this line. Replace it with 'comment'
-                       # so we don't need to check whitespace before and after the comment
-                       # we're removing.
-                       newline = line [:open_comment] + "comment" + line [close_comment + 2:]
-                       return self.__call__ (newline)
-
-               return line
-
-       def process_strings (self, line):
-               """
-               Given a line of C code, return a string where all literal C strings have
-               been replaced with the empty string literal "".
-               """
-               for k in range (0, len (line)):
-                       if line [k] == '"':
-                               start = k
-                               for k in range (start + 1, len (line)):
-                                       if line [k] == '"' and line [k - 1] != '\\':
-                                               return line [:start + 1] + '"' + self.process_strings (line [k + 1:])
-               return line
-
-
-class CStyleChecker:
-       """
-       A class for checking the whitespace and layout of a C code.
-       """
-       def __init__ (self, debug):
-               self.debug = debug
-               self.filename = None
-               self.error_count = 0
-               self.line_num = 1
-               self.orig_line = ''
-               self.trailing_newline_re = re.compile ('[\r\n]+$')
-               self.indent_re = re.compile ("^\s*")
-               self.last_line_indent = ""
-               self.last_line_indent_curly = False
-               self.re_checks = \
-                       [ ( re.compile ("  "),          "multiple space instead of tab" )
-                       , ( re.compile ("\t "),         "space after tab" )
-                       , ( re.compile ("[^ ];"),       "missing space before semi-colon" )
-                       , ( re.compile ("{[^\s}]"),     "missing space after open brace" )
-                       , ( re.compile ("[^{\s]}"),     "missing space before close brace" )
-                       , ( re.compile ("[ \t]+$"),     "contains trailing whitespace" )
-
-                       , ( re.compile (",[^\s\n]"),            "missing space after comma" )
-                       , ( re.compile (";[a-zA-Z0-9]"),        "missing space after semi-colon" )
-                       , ( re.compile ("=[^\s\"'=]"),          "missing space after assignment" )
-
-                       # Open and close parenthesis.
-                       , ( re.compile ("[^\s\(\[\*&']\("),                             "missing space before open parenthesis" )
-                       , ( re.compile ("\)(-[^>]|[^,'\s\n\)\]-])"),    "missing space after close parenthesis" )
-                       , ( re.compile ("\s(do|for|if|when)\s.*{$"),    "trailing open parenthesis at end of line" )
-                       , ( re.compile ("\( [^;]"),                                             "space after open parenthesis" )
-                       , ( re.compile ("[^;] \)"),                                             "space before close parenthesis" )
-
-                       # Open and close square brace.
-                       , ( re.compile ("[^\s\(\]]\["),                 "missing space before open square brace" )
-                       , ( re.compile ("\][^,\)\]\[\s\.-]"),   "missing space after close square brace" )
-                       , ( re.compile ("\[ "),                                 "space after open square brace" )
-                       , ( re.compile (" \]"),                                 "space before close square brace" )
-
-                       # Space around operators.
-                       , ( re.compile ("[^\s][\*/%+-][=][^\s]"),               "missing space around opassign" )
-                       , ( re.compile ("[^\s][<>!=^/][=]{1,2}[^\s]"),  "missing space around comparison" )
-
-                       # Parens around single argument to return.
-                       , ( re.compile ("\s+return\s+\([a-zA-Z0-9_]+\)\s+;"),   "parens around return value" )
-                       ]
-
-       def get_error_count (self):
-               """
-               Return the current error count for this CStyleChecker object.
-               """
-               return self.error_count
-
-       def check_files (self, files):
-               """
-               Run the style checker on all the specified files.
-               """
-               for filename in files:
-                       self.check_file (filename)
-
-       def check_file (self, filename):
-               """
-               Run the style checker on the specified file.
-               """
-               self.filename = filename
-               cfile = open (filename, "r")
-
-               self.line_num = 1
-
-               preprocess = Preprocessor ()
-               while 1:
-                       line = cfile.readline ()
-                       if not line:
-                               break
-
-                       line = self.trailing_newline_re.sub ('', line)
-                       self.orig_line = line
-
-                       self.line_checks (preprocess (line))
-
-                       self.line_num += 1
-
-               cfile.close ()
-               self.filename = None
-
-               # Check for errors finding comments.
-               if preprocess.comment_nesting () != 0:
-                       print ("Weird, comments nested incorrectly.")
-                       sys.exit (1)
-
-               return
-
-       def line_checks (self, line):
-               """
-               Run the style checker on provided line of text, but within the context
-               of how the line fits within the file.
-               """
-
-               indent = len (self.indent_re.search (line).group ())
-               if re.search ("^\s+}", line):
-                       if not self.last_line_indent_curly and indent != self.last_line_indent:
-                               None    # self.error ("bad indent on close curly brace")
-                       self.last_line_indent_curly = True
-               else:
-                       self.last_line_indent_curly = False
-
-               # Now all the regex checks.
-               for (check_re, msg) in self.re_checks:
-                       if check_re.search (line):
-                               self.error (msg)
-
-               if re.search ("[a-zA-Z0-9][<>!=^/&\|]{1,2}[a-zA-Z0-9]", line):
-                       if not re.search (".*#include.*[a-zA-Z0-9]/[a-zA-Z]", line):
-                               self.error ("missing space around operator")
-
-               self.last_line_indent = indent
-               return
-
-       def error (self, msg):
-               """
-               Print an error message and increment the error count.
-               """
-               print ("%s (%d) : %s" % (self.filename, self.line_num, msg))
-               if self.debug:
-                       print ("'" + self.orig_line + "'")
-               self.error_count += 1
-
-#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-
-if len (sys.argv) < 1:
-       print ("Usage : yada yada")
-       sys.exit (1)
-
-# Create a new CStyleChecker object
-if sys.argv [1] == '-d' or sys.argv [1] == '--debug':
-       cstyle = CStyleChecker (True)
-       cstyle.check_files (sys.argv [2:])
-else:
-       cstyle = CStyleChecker (False)
-       cstyle.check_files (sys.argv [1:])
-
-
-if cstyle.get_error_count ():
-       sys.exit (1)
-
-sys.exit (0)
diff --git a/libs/libsndfile/Scripts/git-pre-commit-hook b/libs/libsndfile/Scripts/git-pre-commit-hook
deleted file mode 100644 (file)
index 6df1308..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/sh
-#
-
-if git rev-parse --verify HEAD >/dev/null 2>&1 ; then
-       against=HEAD
-else
-       # Initial commit: diff against an empty tree object
-       against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
-       fi
-
-files=$(git diff-index --name-status --cached HEAD | grep -v ^D | sed -r "s/^[A-Z]+[A-Z0-9]*[ \t]+/ /")
-
-# Redirect output to stderr.
-exec 1>&2
-
-#-------------------------------------------------------------------------------
-# Check the copyright notice of all files to be commited.
-
-user=`git config --global user.email`
-year=`date +"%Y"`
-
-missing_copyright_year=""
-if test $user = "erikd@mega-nerd.com" ; then
-       for f in $files ; do
-               if test `head -5 $f | grep -c -i copyright` -gt 0 ; then
-                       user_copyright=`grep -i copyright $f | grep $user | grep -c $year`
-                       if test $user_copyright -lt 1 ; then
-                               missing_copyright_year="$missing_copyright_year $f"
-                               fi
-                       fi
-               done
-       fi
-
-if test -n "$missing_copyright_year" ; then
-       echo "Missing current year in the copyright notice of the following files:"
-       for f in $missing_copyright_year ; do
-               echo "    $f"
-               done
-       echo "Commit aborted."
-       exit 1
-       fi
-
-#-------------------------------------------------------------------------------
-# Check the formatting of all C files.
-
-cfiles=""
-for f in $files ; do
-       if test `dirname $f` = "src/ALAC" ; then
-               echo "Skipping cstyle checking on $f"
-       elif test `echo $f | grep -c "\.[ch]$"` -gt 0 ; then
-               cfiles="$cfiles $f"
-               fi
-       done
-
-if test -n "$cfiles" ; then
-       Scripts/cstyle.py $cfiles
-       if test $? -ne 0 ; then
-               echo
-               echo "Commit aborted. Fix the above error before trying again."
-               exit 1
-               fi
-       fi
-
-#-------------------------------------------------------------------------------
-# Prevent files with non-ascii filenames from being committed.
-
-if test $(git diff --cached --name-only --diff-filter=A -z $against | LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 ; then
-       echo "Error: Attempt to add a non-ascii file name."
-       echo
-       echo "This can cause problems if you want to work"
-       echo "with people on other platforms."
-       echo
-       echo "To be portable it is advisable to rename the file ..."
-       echo
-       echo "Commit aborted."
-       exit 1
-       fi
-
-exit 0
diff --git a/libs/libsndfile/Scripts/linux-to-win-cross-configure.sh b/libs/libsndfile/Scripts/linux-to-win-cross-configure.sh
deleted file mode 100644 (file)
index c1fdc07..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-
-case "$1" in
-       w32)
-               compiler_name=i686-w64-mingw32
-               ;;
-       w64)
-               compiler_name=x86_64-w64-mingw32
-               ;;
-       *)
-               echo "$0 (w32|w64) <other args>"
-               exit 0
-               ;;
-       esac
-
-shift
-
-build_cpu=$(dpkg-architecture -qDEB_BUILD_GNU_CPU)
-build_host=$build_cpu-linux
-
-./configure --host=$compiler_name --target=$compiler_name --build=$build_host \
-               --program-prefix='' --disable-sqlite --disable-static $@
diff --git a/libs/libsndfile/TODO b/libs/libsndfile/TODO
deleted file mode 100644 (file)
index f6da6df..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-Here's a list of what I (erikd AT mega-nerd DOT com) think needs to be 
-done. The list is by no means exhaustive and people are encouraged to 
-email me with suggestions. 
-
-  o Add pipe in/out capabilities. libsndfile should be able to read 
-       its input from a pipe and write its output to a pipe.
-
-  o Add checks of the error state after fseek???? Use ferror ().
-
-  o Modify tests/lossy_comp_test.c to add tests for stereo files.
-
-  o Testing compilation and correctness on more platforms.
-
-  o Improve testing routines. Must test all combinations of inputs
-    and outputs.
-
-  o Test sf_seek function on write???
-
-  o Add more sound file formats. People should contact me with their
-    requirements. 
-
-  o Add support for accessing sound formats with multiple audio
-    data sections (ie samples within tracker files, Soundfont II and 
-    multi-sample sampler formats). 
-
-  o Add an interface to allow reading and writing of sample loop points 
-    and other info within AIFF and other file formats. This must be a 
-    general solution.
-
-  o Improve documentation. Is HTML documentation good enough?
-
-  o Look into the possibility of optional sample rate convert on file 
-    read.
-
-As I am the person who knows libsndfile best, I can probably implement 
-any new features faster than anybody else (and you can spend your time
-writing applications with libsndfile). All I need is some 
-documentation and some sample files. Please contact me before emailing
-me documentation and sample files. I would much rather pull them off
-the web than have them clogging up my email inbox.
-
-
diff --git a/libs/libsndfile/Win32/Makefile.am b/libs/libsndfile/Win32/Makefile.am
deleted file mode 100644 (file)
index 4fe8efa..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-EXTRA_DIST = README-precompiled-dll.txt testprog.c
-
diff --git a/libs/libsndfile/Win32/README-precompiled-dll.txt b/libs/libsndfile/Win32/README-precompiled-dll.txt
deleted file mode 100644 (file)
index bde8124..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-Notes on Using the Pre-compiled libsndfile DLL.
-===============================================
-
-In order to use this pre-compiled DLL with Visual Studio, you will need to
-generate a .LIB file from the DLL.
-
-This can be achieved as follows:
-
-  1) In a CMD window, change to the directory containing this file and
-     run the command:
-
-          lib /machine:i386 /def:libsndfile-1.def
-
-You now have two files:
-
-        libsndfile-1.dll
-        libsndfile-1.lib
-
-to be used with VisualStudio.
-
-If the lib command fails with a command saying "'lib' is not recognized as
-an internal or external command, operable program or batch file", you need
-to find the location of "lib.exe" and add that directory to your PATH
-environment variable. Another alternative is to use the "Visual Studio 2005
-Command Prompt" Start menu item:
-
-   Start ->
-               All Programs ->
-                       Visual Studio 2005 ->
-                               Visual Studio Tools ->
-                                       Visual Studio 2005 Command Prompt
-
-If for some reason these instructions don't work for you or you are still
-not able to use the libsndfile DLL with you project, please do not contact
-the main author of libsndfile. Instead, join the libsndfile-users mailing
-list :
-
-        http://www.mega-nerd.com/libsndfile/lists.html
-
-and ask a question there.
diff --git a/libs/libsndfile/Win32/testprog.c b/libs/libsndfile/Win32/testprog.c
deleted file mode 100644 (file)
index d26d844..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-/*     Simple test program to make sure that Win32 linking to libsndfile is
-**     working.
-*/
-
-#include <stdio.h>
-
-#include "sndfile.h"
-
-int
-main (void)
-{      static char strbuffer [256] ;
-       sf_command (NULL, SFC_GET_LIB_VERSION, strbuffer, sizeof (strbuffer)) ;
-       puts (strbuffer) ;
-       return 0 ;
-}
-
diff --git a/libs/libsndfile/acinclude.m4 b/libs/libsndfile/acinclude.m4
deleted file mode 100644 (file)
index c411ceb..0000000
+++ /dev/null
@@ -1,637 +0,0 @@
-dnl By default, many hosts won't let programs access large files;
-dnl one must use special compiler options to get large-file access to work.
-dnl For more details about this brain damage please see:
-dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html
-
-dnl Written by Paul Eggert <eggert@twinsun.com>.
-
-m4_include([M4/gcc_version.m4])
-m4_include([M4/octave.m4])
-m4_include([M4/mkoctfile_version.m4])
-m4_include([M4/extra_pkg.m4])
-m4_include([M4/lrint.m4])
-m4_include([M4/lrintf.m4])
-m4_include([M4/clang.m4])
-m4_include([M4/really_gcc.m4])
-m4_include([M4/stack_protect.m4])
-m4_include([M4/clip_mode.m4])
-m4_include([M4/add_cflags.m4])
-m4_include([M4/add_cxxflags.m4])
-m4_include([M4/flexible_array.m4])
-m4_include([M4/endian.m4])
-m4_include([M4/extra_largefile.m4])
-
-dnl Internal subroutine of AC_SYS_EXTRA_LARGEFILE.
-dnl AC_SYS_EXTRA_LARGEFILE_FLAGS(FLAGSNAME)
-AC_DEFUN([AC_SYS_EXTRA_LARGEFILE_FLAGS],
-  [AC_CACHE_CHECK([for $1 value to request large file support],
-     ac_cv_sys_largefile_$1,
-     [ac_cv_sys_largefile_$1=`($GETCONF LFS_$1) 2>/dev/null` || {
-       ac_cv_sys_largefile_$1=no
-       ifelse($1, CFLAGS,
-         [case "$host_os" in
-          # IRIX 6.2 and later require cc -n32.
-changequote(, )dnl
-          irix6.[2-9]* | irix6.1[0-9]* | irix[7-9].* | irix[1-9][0-9]*)
-changequote([, ])dnl
-            if test "$GCC" != yes; then
-              ac_cv_sys_largefile_CFLAGS=-n32
-            fi
-            ac_save_CC="$CC"
-            CC="$CC $ac_cv_sys_largefile_CFLAGS"
-            AC_TRY_LINK(, , , ac_cv_sys_largefile_CFLAGS=no)
-            CC="$ac_save_CC"
-          esac])
-      }])])
-
-dnl Internal subroutine of AC_SYS_EXTRA_LARGEFILE.
-dnl AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(VAR, VAL)
-AC_DEFUN([AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND],
-  [case $2 in
-   no) ;;
-   ?*)
-     case "[$]$1" in
-     '') $1=$2 ;;
-     *) $1=[$]$1' '$2 ;;
-     esac ;;
-   esac])
-
-dnl Internal subroutine of AC_SYS_EXTRA_LARGEFILE.
-dnl AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(C-MACRO, CACHE-VAR, COMMENT, CODE-TO-SET-DEFAULT)
-AC_DEFUN([AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE],
-  [AC_CACHE_CHECK([for $1], $2,
-     [$2=no
-changequote(, )dnl
-      $4
-      for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do
-       case "$ac_flag" in
-       -D$1)
-         $2=1 ;;
-       -D$1=*)
-         $2=`expr " $ac_flag" : '[^=]*=\(.*\)'` ;;
-       esac
-      done
-changequote([, ])dnl
-      ])
-   if test "[$]$2" != no; then
-     AC_DEFINE_UNQUOTED([$1], [$]$2, [$3])
-   fi])
-
-AC_DEFUN([AC_SYS_EXTRA_LARGEFILE],
-  [AC_REQUIRE([AC_CANONICAL_HOST])
-   AC_ARG_ENABLE(largefile,
-     [  --disable-largefile     omit support for large files])
-   if test "$enable_largefile" != no; then
-     AC_CHECK_TOOL(GETCONF, getconf)
-     AC_SYS_EXTRA_LARGEFILE_FLAGS(CFLAGS)
-     AC_SYS_EXTRA_LARGEFILE_FLAGS(LDFLAGS)
-     AC_SYS_EXTRA_LARGEFILE_FLAGS(LIBS)
-
-     for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do
-       case "$ac_flag" in
-       no) ;;
-       -D_FILE_OFFSET_BITS=*) ;;
-       -D_LARGEFILE_SOURCE | -D_LARGEFILE_SOURCE=*) ;;
-       -D_LARGE_FILES | -D_LARGE_FILES=*) ;;
-       -D?* | -I?*)
-        AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(CPPFLAGS, "$ac_flag") ;;
-       *)
-        AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(CFLAGS, "$ac_flag") ;;
-       esac
-     done
-     AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(LDFLAGS, "$ac_cv_sys_largefile_LDFLAGS")
-     AC_SYS_EXTRA_LARGEFILE_SPACE_APPEND(LIBS, "$ac_cv_sys_largefile_LIBS")
-     AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS,
-       ac_cv_sys_file_offset_bits,
-       [Number of bits in a file offset, on hosts where this is settable.])
-       [case "$host_os" in
-       # HP-UX 10.20 and later
-       hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
-         ac_cv_sys_file_offset_bits=64 ;;
-       esac]
-     AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(_LARGEFILE_SOURCE,
-       ac_cv_sys_largefile_source,
-       [Define to make fseeko etc. visible, on some hosts.],
-       [case "$host_os" in
-       # HP-UX 10.20 and later
-       hpux10.[2-9][0-9]* | hpux1[1-9]* | hpux[2-9][0-9]*)
-         ac_cv_sys_largefile_source=1 ;;
-       esac])
-     AC_SYS_EXTRA_LARGEFILE_MACRO_VALUE(_LARGE_FILES,
-       ac_cv_sys_large_files,
-       [Define for large files, on AIX-style hosts.],
-       [case "$host_os" in
-       # AIX 4.2 and later
-       aix4.[2-9]* | aix4.1[0-9]* | aix[5-9].* | aix[1-9][0-9]*)
-         ac_cv_sys_large_files=1 ;;
-       esac])
-   fi
-  ])
-
-
-
-
-
-
-dnl @synopsis AC_C_FIND_ENDIAN
-dnl
-dnl Determine endian-ness of target processor.
-dnl @version 1.1       Mar 03 2002
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Majority written from scratch to replace the standard autoconf macro 
-dnl AC_C_BIGENDIAN. Only part remaining from the original it the invocation
-dnl of the AC_TRY_RUN macro.
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-
-dnl Find endian-ness in the following way:
-dnl    1) Look in <endian.h>.
-dnl    2) If 1) fails, look in <sys/types.h> and <sys/param.h>.
-dnl    3) If 1) and 2) fails and not cross compiling run a test program.
-dnl    4) If 1) and 2) fails and cross compiling then guess based on target.
-
-AC_DEFUN([AC_C_FIND_ENDIAN],
-[AC_CACHE_CHECK(processor byte ordering, 
-       ac_cv_c_byte_order,
-
-# Initialize to unknown
-ac_cv_c_byte_order=unknown
-
-if test x$ac_cv_header_endian_h = xyes ; then
-
-       # First try <endian.h> which should set BYTE_ORDER.
-
-       [AC_TRY_LINK([
-               #include <endian.h>
-               #if BYTE_ORDER != LITTLE_ENDIAN
-                       not big endian
-               #endif
-               ], return 0 ;, 
-                       ac_cv_c_byte_order=little
-               )]
-                               
-       [AC_TRY_LINK([
-               #include <endian.h>
-               #if BYTE_ORDER != BIG_ENDIAN
-                       not big endian
-               #endif
-               ], return 0 ;, 
-                       ac_cv_c_byte_order=big
-               )]
-
-       fi
-
-if test $ac_cv_c_byte_order = unknown ; then
-
-       [AC_TRY_LINK([
-               #include <sys/types.h>
-               #include <sys/param.h>
-               #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
-                       bogus endian macros
-               #endif
-               ], return 0 ;, 
-
-               [AC_TRY_LINK([
-                       #include <sys/types.h>
-                       #include <sys/param.h>
-                       #if BYTE_ORDER != LITTLE_ENDIAN
-                               not big endian
-                       #endif
-                       ], return 0 ;, 
-                               ac_cv_c_byte_order=little
-                       )]
-                               
-               [AC_TRY_LINK([
-                       #include <sys/types.h>
-                       #include <sys/param.h>
-                       #if BYTE_ORDER != LITTLE_ENDIAN
-                               not big endian
-                       #endif
-                       ], return 0 ;, 
-                               ac_cv_c_byte_order=little
-                       )]
-
-               )]
-
-       fi
-
-if test $ac_cv_c_byte_order = unknown ; then
-       if test $cross_compiling = yes ; then
-               # This is the last resort. Try to guess the target processor endian-ness
-               # by looking at the target CPU type.    
-               [
-               case "$target_cpu" in
-                       alpha* | i?86* | mipsel* | ia64*)
-                               ac_cv_c_big_endian=0
-                               ac_cv_c_little_endian=1
-                               ;;
-                       
-                       m68* | mips* | powerpc* | hppa* | sparc*)
-                               ac_cv_c_big_endian=1
-                               ac_cv_c_little_endian=0
-                               ;;
-       
-                       esac
-               ]
-       else
-               AC_TRY_RUN(
-               [[
-               int main (void) 
-               {       /* Are we little or big endian?  From Harbison&Steele.  */
-                       union
-                       {       long l ;
-                               char c [sizeof (long)] ;
-                       } u ;
-                       u.l = 1 ;
-                       return (u.c [sizeof (long) - 1] == 1);
-                       }
-                       ]], , ac_cv_c_byte_order=big, 
-                       ac_cv_c_byte_order=unknown
-                       )
-
-               AC_TRY_RUN(
-               [[int main (void) 
-               {       /* Are we little or big endian?  From Harbison&Steele.  */
-                       union
-                       {       long l ;
-                               char c [sizeof (long)] ;
-                       } u ;
-                       u.l = 1 ;
-                       return (u.c [0] == 1);
-                       }]], , ac_cv_c_byte_order=little, 
-                       ac_cv_c_byte_order=unknown
-                       )
-               fi      
-       fi
-
-)
-]
-
-if test $ac_cv_c_byte_order = big ; then
-       ac_cv_c_big_endian=1
-       ac_cv_c_little_endian=0
-elif test $ac_cv_c_byte_order = little ; then
-       ac_cv_c_big_endian=0
-       ac_cv_c_little_endian=1
-else
-       ac_cv_c_big_endian=0
-       ac_cv_c_little_endian=0
-
-       fi
-
-)# AC_C_FIND_ENDIAN
-
-
-
-
-
-dnl @synopsis AC_C99_FLEXIBLE_ARRAY
-dnl
-dnl Dose the compiler support the 1999 ISO C Standard "stuct hack".
-dnl @version 1.1       Mar 15 2004
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-
-AC_DEFUN([AC_C99_FLEXIBLE_ARRAY],
-[AC_CACHE_CHECK(C99 struct flexible array support, 
-       ac_cv_c99_flexible_array,
-
-# Initialize to unknown
-ac_cv_c99_flexible_array=no
-
-AC_TRY_LINK([[
-       #include <stdlib.h>
-       typedef struct {
-       int k;
-       char buffer [] ;
-       } MY_STRUCT ;
-       ]], 
-       [  MY_STRUCT *p = calloc (1, sizeof (MY_STRUCT) + 42); ],
-       ac_cv_c99_flexible_array=yes,
-       ac_cv_c99_flexible_array=no
-       ))]
-) # AC_C99_FLEXIBLE_ARRAY
-
-
-     
-
-
-dnl @synopsis AC_C99_FUNC_LRINT
-dnl
-dnl Check whether C99's lrint function is available.
-dnl @version 1.3       Feb 12 2002
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-dnl
-AC_DEFUN([AC_C99_FUNC_LRINT],
-[AC_CACHE_CHECK(for lrint,
-  ac_cv_c99_lrint,
-[
-lrint_save_CFLAGS=$CFLAGS
-CFLAGS="-lm"
-AC_TRY_LINK([
-#define                _ISOC9X_SOURCE  1
-#define        _ISOC99_SOURCE  1
-#define                __USE_ISOC99    1
-#define        __USE_ISOC9X    1
-
-#include <math.h>
-], if (!lrint(3.14159)) lrint(2.7183);, ac_cv_c99_lrint=yes, ac_cv_c99_lrint=no)
-
-CFLAGS=$lrint_save_CFLAGS
-
-])
-
-if test "$ac_cv_c99_lrint" = yes; then
-  AC_DEFINE(HAVE_LRINT, 1,
-            [Define if you have C99's lrint function.])
-fi
-])# AC_C99_FUNC_LRINT
-dnl @synopsis AC_C99_FUNC_LRINTF
-dnl
-dnl Check whether C99's lrintf function is available.
-dnl @version 1.3       Feb 12 2002
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-dnl
-AC_DEFUN([AC_C99_FUNC_LRINTF],
-[AC_CACHE_CHECK(for lrintf,
-  ac_cv_c99_lrintf,
-[
-AC_TRY_LINK([
-#define                _ISOC9X_SOURCE  1
-#define        _ISOC99_SOURCE  1
-#define                __USE_ISOC99    1
-#define        __USE_ISOC9X    1
-
-#include <math.h>
-], if (!lrintf(3.14159)) lrintf(2.7183);, ac_cv_c99_lrintf=yes, ac_cv_c99_lrintf=no)
-])
-
-if test "$ac_cv_c99_lrintf" = yes; then
-  AC_DEFINE(HAVE_LRINTF, 1,
-            [Define if you have C99's lrintf function.])
-fi
-])# AC_C99_FUNC_LRINTF
-
-
-
-
-dnl @synopsis AC_C99_FUNC_LLRINT
-dnl
-dnl Check whether C99's llrint function is available.
-dnl @version 1.1       Sep 30 2002
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-dnl
-AC_DEFUN([AC_C99_FUNC_LLRINT],
-[AC_CACHE_CHECK(for llrint,
-  ac_cv_c99_llrint,
-[
-AC_TRY_LINK([
-#define                _ISOC9X_SOURCE  1
-#define        _ISOC99_SOURCE  1
-#define                __USE_ISOC99    1
-#define        __USE_ISOC9X    1
-
-#include <math.h>
-#include <stdint.h>
-], int64_t     x ; x = llrint(3.14159) ;, ac_cv_c99_llrint=yes, ac_cv_c99_llrint=no)
-])
-
-if test "$ac_cv_c99_llrint" = yes; then
-  AC_DEFINE(HAVE_LLRINT, 1,
-            [Define if you have C99's llrint function.])
-fi
-])# AC_C99_FUNC_LLRINT
-
-
-
-dnl @synopsis AC_C_CLIP_MODE
-dnl
-dnl Determine the clipping mode when converting float to int.
-dnl @version 1.0       May 17 2003
-dnl @author Erik de Castro Lopo <erikd AT mega-nerd DOT com>
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this file for any 
-dnl purpose is hereby granted without fee, provided that the above copyright 
-dnl and this permission notice appear in all copies.  No representations are
-dnl made about the suitability of this software for any purpose.  It is 
-dnl provided "as is" without express or implied warranty.
-
-
-
-dnl Find the clipping mode in the following way:
-dnl    1) If we are not cross compiling test it.
-dnl    2) IF we are cross compiling, assume that clipping isn't done correctly.
-
-AC_DEFUN([AC_C_CLIP_MODE],
-[AC_CACHE_CHECK(processor clipping capabilities, 
-       ac_cv_c_clip_type,
-
-# Initialize to unknown
-ac_cv_c_clip_positive=unknown
-ac_cv_c_clip_negative=unknown
-
-if test $ac_cv_c_clip_positive = unknown ; then
-       AC_TRY_RUN(
-       [[
-       #define _ISOC9X_SOURCE  1
-       #define _ISOC99_SOURCE  1
-       #define __USE_ISOC99    1
-       #define __USE_ISOC9X    1
-       #include <math.h>
-       int main (void)
-       {       double  fval ;
-               int k, ival ;
-
-               fval = 1.0 * 0x7FFFFFFF ;
-               for (k = 0 ; k < 100 ; k++)
-               {       ival = (lrint (fval)) >> 24 ;
-                       if (ival != 127)
-                               return 1 ;
-               
-                       fval *= 1.2499999 ;
-                       } ;
-               
-                       return 0 ;
-               }
-               ]],
-               ac_cv_c_clip_positive=yes,
-               ac_cv_c_clip_positive=no,
-               ac_cv_c_clip_positive=unknown
-               )
-
-       AC_TRY_RUN(
-       [[
-       #define _ISOC9X_SOURCE  1
-       #define _ISOC99_SOURCE  1
-       #define __USE_ISOC99    1
-       #define __USE_ISOC9X    1
-       #include <math.h>
-       int main (void)
-       {       double  fval ;
-               int k, ival ;
-
-               fval = -8.0 * 0x10000000 ;
-               for (k = 0 ; k < 100 ; k++)
-               {       ival = (lrint (fval)) >> 24 ;
-                       if (ival != -128)
-                               return 1 ;
-               
-                       fval *= 1.2499999 ;
-                       } ;
-               
-                       return 0 ;
-               }
-               ]],
-               ac_cv_c_clip_negative=yes,
-               ac_cv_c_clip_negative=no,
-               ac_cv_c_clip_negative=unknown
-               )
-       fi
-
-if test $ac_cv_c_clip_positive = yes ; then
-       ac_cv_c_clip_positive=1
-else
-       ac_cv_c_clip_positive=0
-       fi
-
-if test $ac_cv_c_clip_negative = yes ; then
-       ac_cv_c_clip_negative=1
-else
-       ac_cv_c_clip_negative=0
-       fi
-
-[[
-case "$ac_cv_c_clip_positive$ac_cv_c_clip_negative" in
-       "00")
-               ac_cv_c_clip_type="none"
-               ;;
-       "10")
-               ac_cv_c_clip_type="positive"
-               ;;
-       "01")
-               ac_cv_c_clip_type="negative"
-               ;;
-       "11")
-               ac_cv_c_clip_type="both"
-               ;;
-       esac
-       ]]
-
-)
-]
-
-)# AC_C_CLIP_MODE
-
-
-dnl @synopsis AC_ADD_CFLAGS
-dnl
-dnl Add the given option to CFLAGS, if it doesn't break the compiler
-
-AC_DEFUN([AC_ADD_CFLAGS],
-[AC_MSG_CHECKING([if $CC accepts $1])
-       ac_add_cflags__old_cflags="$CFLAGS"
-       CFLAGS="$CFLAGS $1"
-       AC_TRY_LINK([#include <stdio.h>],
-               [printf("Hello, World!\n"); return 0;],
-               AC_MSG_RESULT([yes]),
-               AC_MSG_RESULT([no])
-               CFLAGS="$ac_add_cflags__old_cflags")
-])
-
-
-
-dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
-dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
-dnl also defines GSTUFF_PKG_ERRORS on error
-AC_DEFUN([PKG_CHECK_MODULES], [
-  succeeded=no
-
-  if test -z "$PKG_CONFIG"; then
-    AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
-  fi
-
-  if test "$PKG_CONFIG" = "no" ; then
-     echo "*** The pkg-config script could not be found. Make sure it is"
-     echo "*** in your path, or set the PKG_CONFIG environment variable"
-     echo "*** to the full path to pkg-config."
-     echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
-  else
-     PKG_CONFIG_MIN_VERSION=0.9.0
-     if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
-        AC_MSG_CHECKING(for $2)
-
-        if $PKG_CONFIG --exists "$2" ; then
-            AC_MSG_RESULT(yes)
-            succeeded=yes
-
-            AC_MSG_CHECKING($1_CFLAGS)
-            $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
-            AC_MSG_RESULT($$1_CFLAGS)
-
-            AC_MSG_CHECKING($1_LIBS)
-            $1_LIBS=`$PKG_CONFIG --libs "$2"`
-            AC_MSG_RESULT($$1_LIBS)
-        else
-            $1_CFLAGS=""
-            $1_LIBS=""
-            ## If we have a custom action on failure, don't print errors, but 
-            ## do set a variable so people can do so.
-            $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
-            ifelse([$4], ,echo $$1_PKG_ERRORS,)
-        fi
-
-        AC_SUBST($1_CFLAGS)
-        AC_SUBST($1_LIBS)
-     else
-        echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
-        echo "*** See http://www.freedesktop.org/software/pkgconfig"
-     fi
-  fi
-
-  if test $succeeded = yes; then
-     ifelse([$3], , :, [$3])
-  else
-     ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
-  fi
-])
-
-
-
-
-ifelse(dnl     
-
- Do not edit or modify anything in this comment block.
- The arch-tag line is a file identity tag for the GNU Arch 
- revision control system.
-
- arch-tag: bc38294d-bb5c-42ad-90b9-779def5eaab7
-
-)dnl
diff --git a/libs/libsndfile/autogen.sh b/libs/libsndfile/autogen.sh
deleted file mode 100644 (file)
index 5047159..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-#!/bin/sh
-# Run this to set up the build system: configure, makefiles, etc.
-# (based on the version in enlightenment's cvs)
-
-package="libsndfile"
-
-ACLOCAL_FLAGS="-I M4"
-
-olddir=`pwd`
-srcdir=`dirname $0`
-test -z "$srcdir" && srcdir=.
-
-cd "$srcdir"
-DIE=0
-
-printf "checking for autogen ... "
-result="yes"
-(autogen --version) < /dev/null > /dev/null 2>&1 || {
-        echo
-        echo "You must have GNU autogen installed to compile $package."
-        echo "Download the appropriate package for your distribution,"
-        echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
-               result="no"
-        DIE=1
-}
-echo $result
-
-printf "checking for autoconf ... "
-result="yes"
-(autoconf --version) < /dev/null > /dev/null 2>&1 || {
-        echo
-        echo "You must have autoconf installed to compile $package."
-        echo "Download the appropriate package for your distribution,"
-        echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
-               result="no"
-        DIE=1
-}
-echo $result
-
-VERSIONGREP="sed -e s/.*[^0-9\.]\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/"
-VERSIONMKMAJ="sed -e s/\([0-9][0-9]*\)[^0-9].*/\\1/"
-VERSIONMKMIN="sed -e s/.*[0-9][0-9]*\.//"
-
-# do we need automake?
-if test -r Makefile.am; then
-  AM_OPTIONS=`fgrep AUTOMAKE_OPTIONS Makefile.am`
-  AM_NEEDED=`echo $AM_OPTIONS | $VERSIONGREP`
-  if test x"$AM_NEEDED" = "x$AM_OPTIONS"; then
-    AM_NEEDED=""
-  fi
-  if test -z $AM_NEEDED; then
-    printf "checking for automake ... "
-    AUTOMAKE=automake
-    ACLOCAL=aclocal
-    if ($AUTOMAKE --version < /dev/null > /dev/null 2>&1); then
-      echo "yes"
-    else
-      echo "no"
-      AUTOMAKE=
-    fi
-  else
-    printf "checking for automake $AM_NEEDED or later ... "
-    majneeded=`echo $AM_NEEDED | $VERSIONMKMAJ`
-    minneeded=`echo $AM_NEEDED | $VERSIONMKMIN`
-    for am in automake-$AM_NEEDED automake$AM_NEEDED \
-       automake automake-1.7 automake-1.8 automake-1.9 automake-1.10; do
-      ($am --version < /dev/null > /dev/null 2>&1) || continue
-      ver=`$am --version < /dev/null | head -n 1 | $VERSIONGREP`
-      maj=`echo $ver | $VERSIONMKMAJ`
-      min=`echo $ver | $VERSIONMKMIN`
-      if test $maj -eq $majneeded -a $min -ge $minneeded; then
-        AUTOMAKE=$am
-        echo $AUTOMAKE
-        break
-      fi
-    done
-    test -z $AUTOMAKE &&  echo "no"
-    printf "checking for aclocal $AM_NEEDED or later ... "
-    for ac in aclocal-$AM_NEEDED aclocal$AM_NEEDED \
-       aclocal aclocal-1.7 aclocal-1.8 aclocal-1.9 aclocal-1.10; do
-      ($ac --version < /dev/null > /dev/null 2>&1) || continue
-      ver=`$ac --version < /dev/null | head -n 1 | $VERSIONGREP`
-      maj=`echo $ver | $VERSIONMKMAJ`
-      min=`echo $ver | $VERSIONMKMIN`
-      if test $maj -eq $majneeded -a $min -ge $minneeded; then
-        ACLOCAL=$ac
-        echo $ACLOCAL
-        break
-      fi
-    done
-    test -z $ACLOCAL && echo "no"
-  fi
-  test -z $AUTOMAKE || test -z $ACLOCAL && {
-        echo
-        echo "You must have automake installed to compile $package."
-        echo "Download the appropriate package for your distribution,"
-        echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
-        exit 1
-  }
-fi
-
-printf "checking for libtool ... "
-for LIBTOOLIZE in libtoolize glibtoolize nope; do
-  ($LIBTOOLIZE --version) < /dev/null > /dev/null 2>&1 && break
-done
-if test x$LIBTOOLIZE = xnope; then
-  echo "nope."
-  LIBTOOLIZE=libtoolize
-else
-  echo $LIBTOOLIZE
-fi
-($LIBTOOLIZE --version) < /dev/null > /dev/null 2>&1 || {
-       echo
-       echo "You must have libtool installed to compile $package."
-       echo "Download the appropriate package for your system,"
-       echo "or get the source from one of the GNU ftp sites"
-       echo "listed in http://www.gnu.org/order/ftp.html"
-       DIE=1
-}
-
-printf "checking for pkg-config ... "
-result="yes"
-(pkg-config --version) < /dev/null > /dev/null 2>&1 || {
-        echo
-        echo "You must have pkg-config installed to compile $package."
-        echo "Download the appropriate package for your distribution."
-               result="no"
-        DIE=1
-}
-echo $result
-
-
-printf "checking for python ... "
-result="yes"
-(python --version) < /dev/null > /dev/null 2>&1 || {
-        echo
-        echo "You must have Python installed to compile $package."
-        echo "Download the appropriate package for your distribution,"
-        echo "or get the source tarball at http://python.org/"
-               result="no"
-        DIE=1
-}
-echo $result
-
-if test "$DIE" -eq 1; then
-        exit 1
-fi
-
-if test ! -d Cfg ; then
-       echo "Creating 'Cfg' directory."
-       mkdir Cfg
-fi
-
-echo "Generating configuration files for $package, please wait ... "
-
-echo "  $ACLOCAL $ACLOCAL_FLAGS"
-$ACLOCAL $ACLOCAL_FLAGS || exit 1
-echo "  $LIBTOOLIZE --automake --force"
-$LIBTOOLIZE --automake --force || exit 1
-echo "  autoheader"
-autoheader || exit 1
-echo "  $AUTOMAKE --add-missing $AUTOMAKE_FLAGS"
-$AUTOMAKE --add-missing $AUTOMAKE_FLAGS || exit 1
-echo "  autoconf"
-autoconf || exit 1
-
-cd $olddir
-
-fprecommit=.git/hooks/pre-commit
-if test ! -f $fprecommit ; then
-       echo
-       echo "Installing git pre-commit hook for this project."
-       cat > $fprecommit << 'foobar'
-#!/bin/sh
-exec Scripts/git-pre-commit-hook
-foobar
-       chmod u+x $fprecommit
-       echo
-       fi
diff --git a/libs/libsndfile/binheader_readf_check.py b/libs/libsndfile/binheader_readf_check.py
deleted file mode 100644 (file)
index 774abcd..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-g#!/usr/bin/python
-
-import re, string, sys
-
-def trim_function_and_params (section):
-       k = string.find (section, "(") + 1
-       brackets = 1
-       section_len = len (section)
-       while k < section_len:
-               if section [k] == '(':
-                       brackets += 1
-               elif section [k] == ')':
-                       brackets -= 1
-               if brackets < 1:
-                       return section [:k+1]
-               k += 1
-       print "Whoops!!!!"
-       sys.exit (1)
-
-def get_function_calls (filedata):
-       filedata = string.split (filedata, "psf_binheader_readf")
-       filedata = filedata [1:]
-
-       func_calls = []
-       for section in filedata:
-               section = "psf_binheader_readf" + section
-               func_calls.append (trim_function_and_params (section))
-
-       return func_calls
-
-def search_for_problems (filename):
-       filedata = open (filename, "r").read ()
-       
-       if len (filedata) < 1:
-               print "Error : file '%s' contains no data." % filename
-               sys.exit (1) 
-       
-       count = 0
-       
-       calls = get_function_calls (filedata)
-       for call in calls:
-               if string.find (call, "sizeof") > 0:
-                       print "Found : ", call
-                       count += 1
-       
-       if count == 0:
-               print "%-20s : No problems found." % filename
-       else:
-               print "\n%-20s : Found %d errors." % (filename, count)
-               sys.exit (1)
-       return 
-       
-
-#-------------------------------------------------------------------------------
-
-if len (sys.argv) < 2:
-       print "Usage : %s <file>" % sys.argv [0]
-       sys.exit (1) 
-
-for file in sys.argv [1:]:
-       search_for_problems (file)
-
diff --git a/libs/libsndfile/configure.ac b/libs/libsndfile/configure.ac
deleted file mode 100644 (file)
index 5893db2..0000000
+++ /dev/null
@@ -1,697 +0,0 @@
-# Copyright (C) 1999-2013  Erik de Castro Lopo <erikd@mega-nerd.com>.
-
-dnl Require autoconf version
-AC_PREREQ(2.57)
-
-AC_INIT([libsndfile],[1.0.26pre5],[sndfile@mega-nerd.com],
-               [libsndfile],[http://www.mega-nerd.com/libsndfile/])
-
-# Put config stuff in Cfg.
-AC_CONFIG_AUX_DIR(Cfg)
-
-AC_CONFIG_SRCDIR([src/sndfile.c])
-AC_CANONICAL_TARGET([])
-
-AC_CONFIG_MACRO_DIR([M4])
-AC_CONFIG_HEADERS([src/config.h])
-
-CFLAGS="$CFLAGS $CONFIGURE_CFLAGS"
-CXXFLAGS="$CXXFLAGS $CONFIGURE_CXXFLAGS"
-LDFLAGS="$LDFLAGS $CONFIGURE_LDFLAGS"
-
-AM_INIT_AUTOMAKE
-AC_SUBST(ACLOCAL_AMFLAGS, "-I M4")
-m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
-
-AC_LANG([C])
-
-AC_PROG_CC_STDC
-AC_USE_SYSTEM_EXTENSIONS
-AM_PROG_CC_C_O
-AC_PROG_CXX
-
-MN_C_COMPILER_IS_CLANG
-MN_GCC_REALLY_IS_GCC
-
-AC_PROG_SED
-
-# Do not check for F77.
-define([AC_LIBTOOL_LANG_F77_CONFIG], [:])dnl
-
-AM_PROG_LIBTOOL
-LT_PROG_RC
-
-AC_PROG_INSTALL
-AC_PROG_LN_S
-
-AC_CHECK_PROG(HAVE_AUTOGEN, autogen, yes, no)
-AC_CHECK_PROG(HAVE_WINE, wine, yes, no)
-AC_CHECK_PROG(HAVE_XCODE_SELECT, xcode-select, yes, no)
-
-#------------------------------------------------------------------------------------
-# Rules for library version information:
-#
-#  1. Start with version information of `0:0:0' for each libtool library.
-#  2. Update the version information only immediately before a public release of
-#     your software. More frequent updates are unnecessary, and only guarantee
-#     that the current interface number gets larger faster.
-#  3. If the library source code has changed at all since the last update, then
-#     increment revision (`c:r:a' becomes `c:r+1:a').
-#  4. If any interfaces have been added, removed, or changed since the last update,
-#     increment current, and set revision to 0.
-#  5. If any interfaces have been added since the last public release, then increment
-#     age.
-#  6. If any interfaces have been removed since the last public release, then set age
-#     to 0.
-
-CLEAN_VERSION=`echo $PACKAGE_VERSION | $SED "s/p.*//"`
-VERSION_MINOR=`echo $CLEAN_VERSION | $SED "s/.*\.//"`
-
-SHARED_VERSION_INFO="1:$VERSION_MINOR:0"
-
-#------------------------------------------------------------------------------------
-
-AC_HEADER_STDC
-
-AC_CHECK_HEADERS(endian.h)
-AC_CHECK_HEADERS(byteswap.h)
-AC_CHECK_HEADERS(locale.h)
-AC_CHECK_HEADERS(sys/time.h)
-
-AC_HEADER_SYS_WAIT
-
-AC_CHECK_DECLS(S_IRGRP)
-if test x$ac_cv_have_decl_S_IRGRP = xyes ; then
-       AC_DEFINE_UNQUOTED([HAVE_DECL_S_IRGRP],1,[Set to 1 if S_IRGRP is defined.])
-else
-       AC_DEFINE_UNQUOTED([HAVE_DECL_S_IRGRP],0)
-       fi
-
-AM_CONDITIONAL([LINUX_MINGW_CROSS_TEST],
-       [test "$build_os:$target_os:$host_os:$HAVE_WINE" = "linux-gnu:mingw32msvc:mingw32msvc:yes"])
-
-#====================================================================================
-# Couple of initializations here. Fill in real values later.
-
-SHLIB_VERSION_ARG=""
-
-#====================================================================================
-# Finished checking, handle options.
-
-AC_ARG_ENABLE(experimental,
-       AC_HELP_STRING([--enable-experimental], [enable experimental code]))
-
-EXPERIMENTAL_CODE=0
-if test x$enable_experimental = xyes ; then
-       EXPERIMENTAL_CODE=1
-       fi
-AC_DEFINE_UNQUOTED([ENABLE_EXPERIMENTAL_CODE],${EXPERIMENTAL_CODE}, [Set to 1 to enable experimental code.])
-
-AC_ARG_ENABLE(werror,
-       AC_HELP_STRING([--enable-werror], [enable -Werror in all Makefiles]))
-
-AC_ARG_ENABLE(stack-smash-protection,
-       AC_HELP_STRING([--enable-stack-smash-protection], [Enable GNU GCC stack smash protection]))
-
-AC_ARG_ENABLE(gcc-pipe,
-       AC_HELP_STRING([--disable-gcc-pipe], [disable gcc -pipe option]))
-
-AC_ARG_ENABLE(gcc-opt,
-       AC_HELP_STRING([--disable-gcc-opt], [disable gcc optimisations]))
-
-AC_ARG_ENABLE(cpu-clip,
-       AC_HELP_STRING([--disable-cpu-clip], [disable tricky cpu specific clipper]))
-
-AC_ARG_ENABLE(bow-docs,
-       AC_HELP_STRING([--enable-bow-docs], [enable black-on-white html docs]))
-
-AC_ARG_ENABLE(sqlite,
-       AC_HELP_STRING([--disable-sqlite], [disable use of sqlite]))
-
-AC_ARG_ENABLE(alsa,
-       AC_HELP_STRING([--disable-alsa], [disable use of ALSA]))
-
-AC_ARG_ENABLE(external-libs,
-       AC_HELP_STRING([--disable-external-libs], [disable use of FLAC, Ogg and Vorbis [[default=no]]]))
-
-AC_ARG_ENABLE(octave,
-       AC_HELP_STRING([--enable-octave], [disable building of GNU Octave module]))
-
-AC_ARG_ENABLE(test-coverage,
-       AC_HELP_STRING([--enable-test-coverage], [enable test coverage]))
-AM_CONDITIONAL([ENABLE_TEST_COVERAGE], [test "$enable_test_coverage" = yes])
-
-#====================================================================================
-# Check types and their sizes.
-
-AC_CHECK_SIZEOF(wchar_t,4)
-AC_CHECK_SIZEOF(short,2)
-AC_CHECK_SIZEOF(int,4)
-AC_CHECK_SIZEOF(long,4)
-AC_CHECK_SIZEOF(float,4)
-AC_CHECK_SIZEOF(double,4)
-AC_CHECK_SIZEOF(void*,8)
-AC_CHECK_SIZEOF(size_t,4)
-AC_CHECK_SIZEOF(int64_t,8)
-AC_CHECK_SIZEOF(long long,8)
-
-#====================================================================================
-# Find an appropriate type for sf_count_t.
-# On systems supporting files larger than 2 Gig, sf_count_t must be a 64 bit value.
-# Unfortunately there is more than one way of ensuring this so need to do some
-# pretty rigourous testing here.
-
-# Check for common 64 bit file offset types.
-AC_CHECK_SIZEOF(off_t,1)
-AC_CHECK_SIZEOF(loff_t,1)
-AC_CHECK_SIZEOF(off64_t,1)
-
-if test "$enable_largefile:$ac_cv_sizeof_off_t" = "no:8" ; then
-       echo
-       echo "Error : Cannot disable large file support because sizeof (off_t) == 8."
-       echo
-       exit 1
-       fi
-
-
-case "$host_os" in
-       mingw32msvc | mingw32)
-               TYPEOF_SF_COUNT_T="__int64"
-               SF_COUNT_MAX="0x7FFFFFFFFFFFFFFFLL"
-               SIZEOF_SF_COUNT_T=8
-               AC_DEFINE([__USE_MINGW_ANSI_STDIO],1,[Set to 1 to use C99 printf/snprintf in MinGW.])
-               ;;
-       *)
-               SIZEOF_SF_COUNT_T=0
-               if test "x$ac_cv_sizeof_off_t" = "x8" ; then
-                       # If sizeof (off_t) is 8, no further checking is needed.
-                       TYPEOF_SF_COUNT_T="int64_t"
-                       SF_COUNT_MAX="0x7FFFFFFFFFFFFFFFLL"
-                       SIZEOF_SF_COUNT_T=8
-               elif test "x$ac_cv_sizeof_loff_t" = "x8" ; then
-                       TYPEOF_SF_COUNT_T="int64_t"
-                       SF_COUNT_MAX="0x7FFFFFFFFFFFFFFFLL"
-                       SIZEOF_SF_COUNT_T=8
-               elif test "x$ac_cv_sizeof_off64_t" = "x8" ; then
-                       TYPEOF_SF_COUNT_T="int64_t"
-                       SF_COUNT_MAX="0x7FFFFFFFFFFFFFFFLL"
-                       SIZEOF_SF_COUNT_T=8
-               else
-                       # Save the old sizeof (off_t) value  and then unset it to see if it
-                       # changes when Large File Support is enabled.
-                       pre_largefile_sizeof_off_t=$ac_cv_sizeof_off_t
-                       unset ac_cv_sizeof_off_t
-
-                       AC_SYS_LARGEFILE
-
-                       if test "x$ac_cv_sys_largefile_CFLAGS" = "xno" ; then
-                               ac_cv_sys_largefile_CFLAGS=""
-                               fi
-                       if test "x$ac_cv_sys_largefile_LDFLAGS" = "xno" ; then
-                               ac_cv_sys_largefile_LDFLAGS=""
-                               fi
-                       if test "x$ac_cv_sys_largefile_LIBS" = "xno" ; then
-                               ac_cv_sys_largefile_LIBS=""
-                               fi
-
-                       AC_CHECK_SIZEOF(off_t,1)
-
-                       if test "x$ac_cv_sizeof_off_t" = "x8" ; then
-                               TYPEOF_SF_COUNT_T="int64_t"
-                               SF_COUNT_MAX="0x7FFFFFFFFFFFFFFFLL"
-                       elif test "x$TYPEOF_SF_COUNT_T" = "xunknown" ; then
-                               echo
-                               echo "*** The configure process has determined that this system is capable"
-                               echo "*** of Large File Support but has not been able to find a type which"
-                               echo "*** is an unambiguous 64 bit file offset."
-                               echo "*** Please contact the author to help resolve this problem."
-                               echo
-                               AC_MSG_ERROR([[Bad file offset type.]])
-                               fi
-                       fi
-               ;;
-       esac
-
-if test $SIZEOF_SF_COUNT_T = 4 ; then
-       SF_COUNT_MAX="0x7FFFFFFF"
-       fi
-
-AC_DEFINE_UNQUOTED([TYPEOF_SF_COUNT_T],${TYPEOF_SF_COUNT_T}, [Set to long if unknown.])
-AC_SUBST(TYPEOF_SF_COUNT_T)
-
-AC_DEFINE_UNQUOTED([SIZEOF_SF_COUNT_T],${SIZEOF_SF_COUNT_T}, [Set to sizeof (long) if unknown.])
-AC_SUBST(SIZEOF_SF_COUNT_T)
-
-AC_DEFINE_UNQUOTED([SF_COUNT_MAX],${SF_COUNT_MAX}, [Set to maximum allowed value of sf_count_t type.])
-AC_SUBST(SF_COUNT_MAX)
-
-AC_CHECK_TYPES(ssize_t)
-AC_CHECK_SIZEOF(ssize_t,4)
-
-#====================================================================================
-# Determine endian-ness of target processor.
-
-MN_C_FIND_ENDIAN
-
-AC_DEFINE_UNQUOTED(CPU_IS_BIG_ENDIAN, ${ac_cv_c_big_endian},
-       [Target processor is big endian.])
-AC_DEFINE_UNQUOTED(CPU_IS_LITTLE_ENDIAN, ${ac_cv_c_little_endian},
-       [Target processor is little endian.])
-AC_DEFINE_UNQUOTED(WORDS_BIGENDIAN, ${ac_cv_c_big_endian},
-       [Target processor is big endian.])
-
-#====================================================================================
-# Check for functions.
-
-AC_CHECK_FUNCS(malloc calloc realloc free)
-AC_CHECK_FUNCS(open read write lseek lseek64)
-AC_CHECK_FUNCS(fstat fstat64 ftruncate fsync)
-AC_CHECK_FUNCS(snprintf vsnprintf)
-AC_CHECK_FUNCS(gmtime gmtime_r localtime localtime_r gettimeofday)
-AC_CHECK_FUNCS(mmap getpagesize)
-AC_CHECK_FUNCS(setlocale)
-AC_CHECK_FUNCS(pipe waitpid)
-
-AC_CHECK_LIB([m],floor)
-AC_CHECK_FUNCS(floor ceil fmod lround)
-
-MN_C99_FUNC_LRINT
-MN_C99_FUNC_LRINTF
-
-#====================================================================================
-# Check for requirements for building plugins for other languages/enviroments.
-
-dnl Octave maths environment http://www.octave.org/
-if test x$cross_compiling = xno ; then
-       if test x$enable_octave = xno ; then
-               AM_CONDITIONAL(BUILD_OCTAVE_MOD, false)
-       else
-               AC_OCTAVE_BUILD
-               fi
-else
-       AM_CONDITIONAL(BUILD_OCTAVE_MOD, false)
-       fi
-
-#====================================================================================
-# Check for Ogg, Vorbis and FLAC.
-
-HAVE_EXTERNAL_LIBS=0
-EXTERNAL_CFLAGS=""
-EXTERNAL_LIBS=""
-
-# Check for pkg-config outside the if statement.
-#PKG_PROG_PKG_CONFIG
-#m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLDIR], AC_SUBST([pkgconfigdir], ${libdir}/pkgconfig))
-
-#if test -n "$PKG_CONFIG" ; then
-#      if test x$enable_external_libs = xno ; then
-#              AC_MSG_WARN([[*** External libs (FLAC, Ogg, Vorbis) disabled. ***]])
-#      else
-#              PKG_CHECK_MOD_VERSION([FLAC], [flac >= 1.2.1], [ac_cv_flac=yes], [ac_cv_flac=no])
-
-               # Make sure the FLAC_CFLAGS value is sane.
-#              FLAC_CFLAGS=`echo $FLAC_CFLAGS | $SED "s|include/FLAC|include|"`
-
-#              PKG_CHECK_MOD_VERSION([OGG], [ogg >= 1.1.3], [ac_cv_ogg=yes], [ac_cv_ogg=no])
-
-#              if test x$enable_experimental = xyes ; then
-#                      PKG_CHECK_MOD_VERSION([SPEEX], [speex >= 1.2], [ac_cv_speex=yes], [ac_cv_speex=no])
-#              else
-#                      SPEEX_CFLAGS=""
-#                      SPEEX_LIBS=""
-#                      fi
-
-               # Vorbis versions earlier than 1.2.3 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
-#              PKG_CHECK_MOD_VERSION([VORBIS], [vorbis >= 1.2.3], [ac_cv_vorbis=yes], [ac_cv_vorbis=no])
-#              PKG_CHECK_MOD_VERSION([VORBISENC], [vorbisenc >= 1.2.3], [ac_cv_vorbisenc=yes], [ac_cv_vorbisenc=no])
-#              enable_external_libs=yes
-#              fi
-
-#      if test x$ac_cv_flac$ac_cv_ogg$ac_cv_vorbis$ac_cv_vorbisenc = "xyesyesyesyes" ; then
-#              HAVE_EXTERNAL_LIBS=1
-#              enable_external_libs=yes
-
-#              EXTERNAL_CFLAGS="$FLAC_CFLAGS $OGG_CFLAGS $VORBIS_CFLAGS $VORBISENC_CFLAGS $SPEEX_CFLAGS"
-#              EXTERNAL_LIBS="$FLAC_LIBS $OGG_LIBS $VORBIS_LIBS $VORBISENC_LIBS $SPEEX_LIBS "
-#      else
-#              echo
-#              AC_MSG_WARN([[*** One or more of the external libraries (ie libflac, libogg and]])
-#              AC_MSG_WARN([[*** libvorbis) is either missing (possibly only the development]])
-#              AC_MSG_WARN([[*** headers) or is of an unsupported version.]])
-#              AC_MSG_WARN([[***]])
-#              AC_MSG_WARN([[*** Unfortunately, for ease of maintenance, the external libs]])
-#              AC_MSG_WARN([[*** are an all or nothing affair.]])
-#              echo
-#              enable_external_libs=no
-#              fi
-#      fi
-
-AC_DEFINE_UNQUOTED([HAVE_EXTERNAL_LIBS], $HAVE_EXTERNAL_LIBS, [Will be set to 1 if flac, ogg and vorbis are available.])
-
-#====================================================================================
-# Check for libsqlite3 (only used in regtest).
-
-ac_cv_sqlite3=no
-#if test x$enable_sqlite != xno ; then
-#      PKG_CHECK_MOD_VERSION([SQLITE3], [sqlite3 >= 3.2], [ac_cv_sqlite3=yes], [ac_cv_sqlite3=no])
-#      fi
-
-if test x$ac_cv_sqlite3 = "xyes" ; then
-       HAVE_SQLITE3=1
-else
-       HAVE_SQLITE3=0
-       fi
-
-AC_DEFINE_UNQUOTED([HAVE_SQLITE3],$HAVE_SQLITE3,[Set to 1 if you have libsqlite3.])
-
-#====================================================================================
-# Determine if the processor can do clipping on float to int conversions.
-
-if test x$enable_cpu_clip != "xno" ; then
-       MN_C_CLIP_MODE
-else
-       echo "checking processor clipping capabilities... disabled"
-       ac_cv_c_clip_positive=0
-       ac_cv_c_clip_negative=0
-       fi
-
-AC_DEFINE_UNQUOTED(CPU_CLIPS_POSITIVE, ${ac_cv_c_clip_positive},
-       [Target processor clips on positive float to int conversion.])
-AC_DEFINE_UNQUOTED(CPU_CLIPS_NEGATIVE, ${ac_cv_c_clip_negative},
-       [Target processor clips on negative float to int conversion.])
-
-#====================================================================================
-# Target OS specific stuff.
-
-OS_SPECIFIC_CFLAGS=""
-OS_SPECIFIC_LINKS=""
-os_is_win32=0
-use_windows_api=0
-osx_darwin_version=0
-
-case "$host_os" in
-       darwin* | rhapsody*)
-               osx_darwin_version=$(echo "$host_os" | sed 's/\..*//;s/darwin//g')
-               if test x$HAVE_XCODE_SELECT = xyes ; then
-                       developer_path=`xcode-select --print-path`
-               else
-                       developer_path="/Developer"
-                       fi
-               OS_SPECIFIC_CFLAGS="-I${developer_path}/Headers/FlatCarbon"
-               OS_SPECIFIC_LINKS="-framework CoreAudio -framework AudioToolbox -framework CoreFoundation"
-               ;;
-       mingw*)
-               os_is_win32=1
-               use_windows_api=1
-               OS_SPECIFIC_LINKS="-lwinmm"
-               ;;
-       esac
-
-AC_DEFINE_UNQUOTED(OS_IS_WIN32, ${os_is_win32}, [Set to 1 if compiling for Win32])
-AC_DEFINE_UNQUOTED(USE_WINDOWS_API, ${use_windows_api}, [Set to 1 to use the native windows API])
-AC_DEFINE_UNQUOTED(OSX_DARWIN_VERSION, ${osx_darwin_version}, [The darwin version, no-zero is valid])
-AM_CONDITIONAL(USE_WIN_VERSION_FILE, test ${use_windows_api} -eq 1)
-
-#====================================================================================
-# Check for ALSA.
-
-ALSA_LIBS=""
-
-if test x$enable_alsa != xno ; then
-       AC_CHECK_HEADERS(alsa/asoundlib.h)
-       if test x$ac_cv_header_alsa_asoundlib_h = xyes ; then
-               ALSA_LIBS="-lasound"
-               enable_alsa=yes
-               fi
-       fi
-
-#====================================================================================
-# Check for OpenBSD's sndio.
-
-SNDIO_LIBS=""
-AC_CHECK_HEADERS(sndio.h)
-if test x$ac_cv_header_sndio_h = xyes ; then
-       SNDIO_LIBS="-lsndio"
-       fi
-
-#====================================================================================
-# Test for sanity when cross-compiling.
-
-if test $ac_cv_sizeof_short != 2 ; then
-       AC_MSG_WARN([[******************************************************************]])
-       AC_MSG_WARN([[*** sizeof (short) != 2.                                          ]])
-       AC_MSG_WARN([[******************************************************************]])
-       fi
-
-if test $ac_cv_sizeof_int != 4 ; then
-       AC_MSG_WARN([[******************************************************************]])
-       AC_MSG_WARN([[*** sizeof (int) != 4                                             ]])
-       AC_MSG_WARN([[******************************************************************]])
-       fi
-
-if test $ac_cv_sizeof_float != 4 ; then
-       AC_MSG_WARN([[******************************************************************]])
-       AC_MSG_WARN([[*** sizeof (float) != 4.                                          ]])
-       AC_MSG_WARN([[******************************************************************]])
-       fi
-
-if test $ac_cv_sizeof_double != 8 ; then
-       AC_MSG_WARN([[******************************************************************]])
-       AC_MSG_WARN([[*** sizeof (double) != 8.                                         ]])
-       AC_MSG_WARN([[******************************************************************]])
-       fi
-
-if test x"$ac_cv_prog_HAVE_AUTOGEN" = "xno" ; then
-       AC_MSG_WARN([[Touching files in directory tests/.]])
-       touch tests/*.c tests/*.h
-       fi
-
-#====================================================================================
-# Settings for the HTML documentation.
-
-if test x$enable_bow_docs = "xyes" ; then
-       HTML_BGCOLOUR="white"
-       HTML_FGCOLOUR="black"
-else
-       HTML_BGCOLOUR="black"
-       HTML_FGCOLOUR="white"
-       fi
-
-#====================================================================================
-# Now use the information from the checking stage.
-
-win32_target_dll=0
-COMPILER_IS_GCC=0
-
-if test x$ac_cv_c_compiler_gnu = xyes ; then
-       MN_ADD_CFLAGS(-std=gnu99)
-
-       MN_GCC_VERSION
-
-       if test "x$GCC_MAJOR_VERSION$GCC_MINOR_VERSION" = "x42" ; then
-               AC_MSG_WARN([****************************************************************])
-               AC_MSG_WARN([** GCC version 4.2 warns about the inline keyword for no good **])
-               AC_MSG_WARN([** reason but the maintainers do not see it as a bug.         **])
-               AC_MSG_WARN([** See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33995      **])
-               AC_MSG_WARN([** Using -fgnu-inline to avoid this stupidity.                **])
-               AC_MSG_WARN([****************************************************************])
-               MN_ADD_CFLAGS([-fgnu89-inline])
-               fi
-
-       CFLAGS="$CFLAGS -Wall"
-       CXXFLAGS="$CXXFLAGS -Wall"
-
-       MN_ADD_CFLAGS([-Wextra])
-
-       AC_LANG_PUSH([C++])
-       MN_ADD_CXXFLAGS([-Wextra])
-       AC_LANG_POP([C++])
-
-       MN_ADD_CFLAGS([-Wdeclaration-after-statement])
-       MN_ADD_CFLAGS([-Wpointer-arith])
-       MN_ADD_CFLAGS([-funsigned-char])
-
-       MN_ADD_CFLAGS([-D_FORTIFY_SOURCE=2])
-
-       if test x$enable_stack_smash_protection = "xyes" ; then
-               XIPH_GCC_STACK_PROTECTOR
-               XIPH_GXX_STACK_PROTECTOR
-               fi
-
-       if test x$enable_test_coverage = "xyes" ; then
-               # MN_ADD_CFLAGS([-ftest-coverage])
-               MN_ADD_CFLAGS([-coverage])
-               fi
-
-       CFLAGS="$CFLAGS     -Wcast-align -Wcast-qual -Wshadow -Wbad-function-cast -Wwrite-strings -Wundef -Wuninitialized -Winit-self -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Waggregate-return"
-       # -Winline -Wconversion  -Wunreachable-code"
-       CXXFLAGS="$CXXFLAGS -Wcast-align -Wcast-qual -Wshadow -Wwrite-strings -Wctor-dtor-privacy -Wnon-virtual-dtor -Woverloaded-virtual -Wreorder -Wsign-promo -Wundef -Wuninitialized -Winit-self"
-
-       if test "x$enable_gcc_opt" = "xno" ; then
-               temp_CFLAGS=`echo $CFLAGS | $SED "s/O2/O0/"`
-               CFLAGS=$temp_CFLAGS
-               AC_MSG_WARN([[*** Compiler optimisations switched off. ***]])
-               fi
-
-       # OS specific tweaks.
-       case "$host_os" in
-               darwin* | rhapsody*)
-                       # Disable -Wall, -pedantic and -Wshadow for Apple Darwin/Rhapsody.
-                       # System headers on these systems are broken.
-                       temp_CFLAGS=`echo $CFLAGS | $SED "s/-Wall -pedantic//" | $SED "s/-Wshadow//" | $SED "s/-Waggregate-return//"`
-                       CFLAGS=$temp_CFLAGS
-                       SHLIB_VERSION_ARG="-Wl,-exported_symbols_list -Wl,\$(builddir)/Symbols.darwin"
-                       ;;
-               linux*|kfreebsd*-gnu*|gnu*)
-                       SHLIB_VERSION_ARG="-Wl,--version-script=\$(builddir)/Symbols.gnu-binutils"
-                       ;;
-               mingw*)
-                       # Linker flag '-Wl,--out-implib' does not work with mingw cross compiler
-                       # so we don't use it here.
-                       SHLIB_VERSION_ARG="-Wl,\$(builddir)/libsndfile-1.def"
-                       win32_target_dll=1
-                       if test x"$enable_shared" = xno ; then
-                               win32_target_dll=0
-                               fi
-                       ;;
-               os2*)
-                       SHLIB_VERSION_ARG="-Wl,-export-symbols \$(builddir)/Symbols.os2"
-                       ;;
-               *)
-                       ;;
-               esac
-       if test x$enable_gcc_pipe != "xno" ; then
-               CFLAGS="$CFLAGS -pipe"
-               fi
-
-       COMPILER_IS_GCC=1
-       fi
-
-if test x$enable_werror = "xyes" ; then
-       MN_ADD_CFLAGS([-Werror])
-
-       AC_LANG_PUSH([C++])
-       MN_ADD_CXXFLAGS([-Werror])
-       AC_LANG_POP([C++])
-       fi
-
-
-AC_DEFINE_UNQUOTED([WIN32_TARGET_DLL], ${win32_target_dll}, [Set to 1 if windows DLL is being built.])
-AC_DEFINE_UNQUOTED([COMPILER_IS_GCC], ${COMPILER_IS_GCC}, [Set to 1 if the compile is GNU GCC.])
-
-CFLAGS="$CFLAGS $OS_SPECIFIC_CFLAGS"
-
-if test x"$CFLAGS" = x ; then
-       echo "Error in configure script. CFLAGS has been screwed up."
-       exit
-       fi
-
-HOST_TRIPLET="${host_cpu}-${host_vendor}-${host_os}"
-
-AC_DEFINE_UNQUOTED([HOST_TRIPLET], "${HOST_TRIPLET}", [The host triplet of the compiled binary.])
-
-if test "$HOST_TRIPLET" = "x86_64-w64-mingw32" ; then
-       OS_SPECIFIC_LINKS=" -static-libgcc $OS_SPECIFIC_LINKS"
-       fi
-
-WIN_RC_VERSION=`echo $PACKAGE_VERSION | $SED -e "s/p.*//" -e "s/\./,/g"`
-
-
-if test "$enable_static" = no ; then
-       SRC_BINDIR=src/.libs/
-       TEST_BINDIR=tests/.libs/
-else
-       SRC_BINDIR=src/
-       TEST_BINDIR=tests/
-       fi
-
-#-------------------------------------------------------------------------------
-
-AC_SUBST(HOST_TRIPLET)
-
-AC_SUBST(HTML_BGCOLOUR)
-AC_SUBST(HTML_FGCOLOUR)
-
-AC_SUBST(SHLIB_VERSION_ARG)
-AC_SUBST(SHARED_VERSION_INFO)
-AC_SUBST(CLEAN_VERSION)
-AC_SUBST(WIN_RC_VERSION)
-
-AC_SUBST(OS_SPECIFIC_CFLAGS)
-AC_SUBST(OS_SPECIFIC_LINKS)
-AC_SUBST(ALSA_LIBS)
-AC_SUBST(SNDIO_LIBS)
-
-AC_SUBST(EXTERNAL_CFLAGS)
-AC_SUBST(EXTERNAL_LIBS)
-AC_SUBST(SRC_BINDIR)
-AC_SUBST(TEST_BINDIR)
-
-dnl The following line causes the libtool distributed with the source
-dnl to be replaced if the build system has a more recent version.
-AC_SUBST(LIBTOOL_DEPS)
-
-AC_CONFIG_FILES([ \
-       src/Makefile man/Makefile examples/Makefile tests/Makefile regtest/Makefile \
-       M4/Makefile Win32/Makefile Octave/Makefile programs/Makefile \
-       Makefile \
-       src/version-metadata.rc tests/test_wrapper.sh tests/pedantic-header-test.sh \
-       doc/libsndfile.css Scripts/build-test-tarball.mk libsndfile.spec sndfile.pc \
-       src/sndfile.h \
-       echo-install-dirs
-       ])
-AC_OUTPUT
-
-# Make sure these are executable.
-chmod u+x tests/test_wrapper.sh build-test-tarball.mk echo-install-dirs
-
-#====================================================================================
-
-AC_MSG_RESULT([
--=-=-=-=-=-=-=-=-=-= Configuration Complete =-=-=-=-=-=-=-=-=-=-
-
-  Configuration summary :
-
-    libsndfile version : .................. ${VERSION}
-
-    Host CPU : ............................ ${host_cpu}
-    Host Vendor : ......................... ${host_vendor}
-    Host OS : ............................. ${host_os}
-
-    Experimental code : ................... ${enable_experimental:-no}
-    Using ALSA in example programs : ...... ${enable_alsa:-no}
-    External FLAC/Ogg/Vorbis : ............ ${enable_external_libs:-no}
-])
-
-if test -z "$PKG_CONFIG" ; then
-       echo "    *****************************************************************"
-       echo "    ***          The pkg-config program is missing.               ***"
-       echo "    *** External FLAC/Ogg/Vorbis libs cannot be found without it. ***"
-       echo "    ***       http://pkg-config.freedesktop.org/wiki/             ***"
-       echo "    *****************************************************************"
-       echo
-       fi
-
-echo "  Tools :"
-echo
-echo "    Compiler is Clang : ................... ${mn_cv_c_compiler_clang}"
-echo "    Compiler is GCC : ..................... ${ac_cv_c_compiler_gnu}"
-
-if test x$ac_cv_c_compiler_gnu = xyes ; then
-       echo "    GCC version : ......................... ${GCC_VERSION}"
-       if test $GCC_MAJOR_VERSION -lt 3 ; then
-               echo "\n"
-               echo "    ** This compiler version allows applications to write"
-               echo "    ** to static strings within the library."
-               echo "    ** Compile with GCC version 3.X or above to avoid this problem."
-               fi
-       fi
-
-./echo-install-dirs
-
-# Remove symlink created by Scripts/android-configure.sh.
-test -h gdbclient && rm -f gdbclient
-
-(cd src && make genfiles)
diff --git a/libs/libsndfile/configure.gnu b/libs/libsndfile/configure.gnu
deleted file mode 100644 (file)
index 80e107f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-srcpath=$(dirname $0 2>/dev/null )  || srcpath="." 
-$srcpath/configure "$@" --disable-sqlite --disable-shared --with-pic --disable-octave --disable-external-libs
-
diff --git a/libs/libsndfile/doc/FAQ.html b/libs/libsndfile/doc/FAQ.html
deleted file mode 100644 (file)
index 4465b77..0000000
+++ /dev/null
@@ -1,851 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-       <TITLE>
-       libsndfile : Frequently Asked Questions.
-       </TITLE>
-       <META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-       <META NAME="Description" CONTENT="The libsndfile FAQ.">
-       <META NAME="Keywords"    CONTENT="WAV AIFF AU libsndfile sound audio dsp Linux">
-       <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all">
-       <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print">
-</HEAD>
-
-<BODY>
-
-<H1><B>libsndfile : Frequently Asked Questions.</B></H1>
-<P>
-<A HREF="#Q001">Q1 : Do you plan to support XYZ codec in libsndfile?</A><BR/>
-<A HREF="#Q002">Q2 : In version 0 the SF_INFO struct had a pcmbitwidth field
-               but version 1 does not. Why?</A><BR/>
-<A HREF="#Q003">Q3 : Compiling is really slow on MacOS X. Why?</A><BR/>
-<A HREF="#Q004">Q4 : When trying to compile libsndfile on Solaris I get a "bad
-               substitution" error during linking. What can I do to fix this?</A><BR/>
-<A HREF="#Q005">Q5 : Why doesn't libsndfile do interleaving/de-interleaving?</A><BR/>
-<A HREF="#Q006">Q6 : What's the best format for storing temporary files?</A><BR/>
-<A HREF="#Q007">Q7 : On Linux/Unix/MacOS X, what's the best way of detecting the
-       presence of libsndfile?</A><BR/>
-<A HREF="#Q008">Q8 : I have libsndfile installed and now I want to use it. I
-       just want a simple Makefile! What do I do?</A><BR/>
-<A HREF="#Q009">Q9 : How about adding the ability to write/read sound files to/from
-       memory buffers?</A><BR/>
-<A HREF="#Q010">Q10 : Reading a 16 bit PCM file as normalised floats and then
-       writing them back changes some sample values. Why?</A><BR/>
-<A HREF="#Q011">Q11 : I'm having problems with u-law encoded WAV files generated by
-       libsndfile in Winamp. Why?</A><BR/>
-<A HREF="#Q012">Q12 : I'm looking at sf_read*. What are items? What are frames?</A><BR/>
-<A HREF="#Q013">Q13 : Why can't libsndfile open this Sound Designer II (SD2)
-       file?</A><BR/>
-<A HREF="#Q014">Q14 : I'd like to statically link libsndfile to my closed source
-       application. Can I buy a license so that this is possible?</A><BR/>
-<A HREF="#Q015">Q15 : My program is crashing during a call to a function in libsndfile.
-       Is this a bug in libsndfile?</A><BR/>
-<A HREF="#Q016">Q16 : Will you accept a fix for compiling libsndfile with compiler X?
-       </A><BR/>
-<A HREF="#Q017">Q17 : Can libsndfile read/write files from/to UNIX pipes?
-       </A><BR/>
-<A HREF="#Q018">Q18 : Is it possible to build a Universal Binary on Mac OS X?
-       </A><BR/>
-<A HREF="#Q019">Q19 : I have project files for Visual Studio / XCode / Whatever. Why
-       don't you distribute them with libsndfile?
-       </A><BR/>
-<A HREF="#Q020">Q20 : Why doesn't libsndfile support MP3? Lots of other Open Source
-       projects support it!
-       </A><BR/>
-<A HREF="#Q021">Q21 : How do I use libsndfile in a closed source or commercial program
-       and comply with the license?
-       </A><BR/>
-<A HREF="#Q022">Q22 : What versions of windows does libsndfile work on?
-       </A><BR/>
-<A HREF="#Q023">Q23 : I'm cross compiling libsndfile for another platform. How can I
-       run the test suite?
-       </A><BR/>
-<HR>
-
-<!-- ========================================================================= -->
-<A NAME="Q001"></A>
-<H2><BR/><B>Q1 : Do you plan to support XYZ codec in libsndfile?</B></H2>
-<P>
-If source code for XYZ codec is available under a suitable license (LGPL, BSD,
-MIT etc) then yes, I'd like to add it.
-</P>
-<P>
-If suitable documentation is available on how to decode and encode the format
-then maybe, depending on how much work is involved.
-</P>
-<P>
-If XYZ is some proprietary codec where no source code or documentation is
-available then no.
-</P>
-<P>
-So if you want support for XYZ codec, first find existing source code or
-documentation.
-If you can't find either then the answer is no.
-</P>
-<!-- ========================================================================= -->
-<A NAME="Q002"></A>
-<H2><BR/><B>Q2 : In version 0 the SF_INFO struct had a pcmbitwidth field
-               but version 1 does not. Why?</B></H2>
-<P>
-       This was dropped for a number of reasons:
-</P>
-<UL>
-       <LI> pcmbitwidth makes little sense on compressed or floating point formats
-       <LI> with the new API you really don't need to know it
-</UL>
-<P>
-As documented
-    <A HREF="api.html#note1">here</A>
-there is now a well defined behaviour which ensures that no matter what the
-bit width of the source file, the scaling always does something sensible.
-This makes it safe to read 8, 16, 24 and 32 bit PCM files using sf_read_short()
-and always have the optimal behaviour.
-</P>
-
-<!-- ========================================================================= -->
-<A NAME="Q003"></A>
-<H2><BR/><B>Q3 : Compiling is really slow on MacOS X. Why?</B></H2>
-<P>
-When you configure and compile libsndfile, it uses the /bin/sh shell for a number
-of tasks (ie configure script and libtool).
-Older versions of OS X (10.2?) shipped a really crappy Bourne shell as /bin/sh
-which resulted in <b>really</b> slow compiles.
-Newer version of OS X ship GNU Bash as /bin/sh and this answer doesn't apply in that
-case.
-</P>
-<P>
-To fix this I suggest that you install the GNU Bash shell, rename /bin/sh to
-/bin/sh.old and make a symlink from /bin/sh to the bash shell.
-Bash is designed to behave as a Bourne shell when is is called as /bin/sh.
-</P>
-<P>
-When I did this on my iBook running MacOS X, compile times dropped from 13 minutes
-to 3 minutes.
-</P>
-
-<!-- ========================================================================= -->
-<A NAME="Q004"></A>
-<H2><BR/><B>Q4 : When trying to compile libsndfile on Solaris I get a "bad
-               substitution" error on linking. Why?</B></H2>
-<P>
-It seems that the Solaris Bourne shell disagrees with GNU libtool.
-</P>
-<P>
-To fix this I suggest that you install the GNU Bash shell, rename /bin/sh to
-/bin/sh.old and make a symlink from /bin/sh to the bash shell.
-Bash is designed to behave as a Bourne shell when is is called as /bin/sh.
-</P>
-
-<!-- ========================================================================= -->
-<A NAME="Q005"></A>
-<H2><BR/><B>Q5 : Why doesn't libsndfile do interleaving/de-interleaving?</B></H2>
-<P>
-This problem is bigger than it may seem at first.
-</P>
-<P>
-For a stereo file, it is a pretty safe bet that a simple interleaving/de-interleaving
-could satisfy most users.
-However, for files with more than 2 channels this is unlikely to be the case.
-If the user has a 4 channel file and want to play that file on a stereo output
-sound card they either want the first 2 channels or they want some mixed combination
-of the 4 channels.
-</P>
-<P>
-When you add more channels, the combinations grow exponentially and it becomes
-increasingly difficult to cover even a sensible subset of the possible combinations.
-On top of that, coding any one style of interleaver/de-interleaver is trivial, while
-coding one that can cover all combinations is far from trivial.
-This means that this feature will not be added any time soon.
-</P>
-
-<!-- ========================================================================= -->
-<A NAME="Q006"></A>
-<H2><BR/><B>Q6 : What's the best format for storing temporary files?</B></H2>
-
-<P>
-When you want to store temporary data there are a number of requirements;
-</P>
-<UL>
-       <LI> A simple, easy to parse header.
-       <LI> The format must provide the fastest possible read and write rates (ie
-               avoid conversions and encoding/decoding).
-       <LI> The file format must be reasonably common and playable by most players.
-       <LI> Able to store data in either endian-ness.
-</UL>
-<P>
-The format which best meets these requirements is AU, which allows data to be
-stored in any one of short, int, float and double (among others) formats.
-</P>
-<P>
-For instance, if an application uses float data internally, its temporary files
-should use a format of (SF_ENDIAN_CPU | SF_FORMAT_AU | SF_FORMAT_FLOAT) which
-will store big endian float data in big endian CPUs and little endian float data
-on little endian CPUs.
-Reading and writing this format will not require any conversions or byte swapping
-regardless of the host CPU.
-</P>
-
-<!-- ========================================================================= -->
-
-<A NAME="Q007"></A>
-<H2><BR/><B>Q7 : On Linux/Unix/MaxOS X, what's the best way of detecting the presence
-       of libsndfile using autoconf?</B></H2>
-
-<P>
-libsndfile uses the pkg-config (man pkg-config) method of registering itself with the
-host system.
-The best way of detecting its presence is using something like this in configure.ac
-(or configure.in):
-</P>
-<PRE>
-        PKG_CHECK_MODULES(SNDFILE, sndfile >= 1.0.2, ac_cv_sndfile=1, ac_cv_sndfile=0)
-
-        AC_DEFINE_UNQUOTED([HAVE_SNDFILE],${ac_cv_sndfile},
-                       [Set to 1 if you have libsndfile.])
-
-        AC_SUBST(SNDFILE_CFLAGS)
-        AC_SUBST(SNDFILE_LIBS)
-</PRE>
-<P>
-This will automatically set the <B>SNDFILE_CFLAGS</B> and <B>SNDFILE_LIBS</B>
-variables which can be used in Makefile.am like this:
-</P>
-<PRE>
-        SNDFILE_CFLAGS = @SNDFILE_CFLAGS@
-        SNDFILE_LIBS = @SNDFILE_LIBS@
-</PRE>
-<P>
-If you install libsndfile from source, you will probably need to set the
-<B>PKG_CONFIG_PATH</B> environment variable as suggested at the end of the
-libsndfile configure process. For instance on my system I get this:
-</P>
-<PRE>
-        -=-=-=-=-=-=-=-=-=-= Configuration Complete =-=-=-=-=-=-=-=-=-=-
-
-          Configuration summary :
-
-            Version : ..................... 1.0.5
-            Experimental code : ........... no
-
-          Tools :
-
-            Compiler is GCC : ............. yes
-            GCC major version : ........... 3
-
-          Installation directories :
-
-            Library directory : ........... /usr/local/lib
-            Program directory : ........... /usr/local/bin
-            Pkgconfig directory : ......... /usr/local/lib/pkgconfig
-
-        Compiling some other packages against libsndfile may require
-        the addition of "/usr/local/lib/pkgconfig" to the
-        PKG_CONFIG_PATH environment variable.
-</PRE>
-
-<!-- ========================================================================= -->
-
-<A NAME="Q008"></A>
-<H2><BR/><B>Q8 : I have libsndfile installed and now I want to use it. I just want
-               a simple Makefile! What do I do?</B></H2>
-
-<P>
-The <B>pkg-config</B> program makes finding the correct compiler flag values and
-library location far easier.
-During the installation of libsndfile, a file named <B>sndfile.pc</B> is installed
-in the directory <B>${libdir}/pkgconfig</B> (ie if libsndfile is installed in
-<B>/usr/local/lib</B>, <B>sndfile.pc</B> will be installed in
-<B>/usr/local/lib/pkgconfig/</B>).
-</P>
-<P>
-In order for pkg-config to find sndfile.pc it may be necessary to point the
-environment variable <B>PKG_CONFIG_PATH</B> in the right direction.
-</P>
-<PRE>
-        export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
-</PRE>
-
-<P>
-Then, to compile a C file into an object file, the command would be:
-</P>
-<PRE>
-        gcc `pkg-config --cflags sndfile` -c somefile.c
-</PRE>
-<P>
-and to link a number of objects into an executable that links against libsndfile,
-the command would be:
-</P>
-<PRE>
-        gcc `pkg-config --libs sndfile` obj1.o obj2.o -o program
-</PRE>
-
-<!-- ========================================================================= -->
-
-<A NAME="Q009"></A>
-<H2><BR/><B>Q9 : How about adding the ability to write/read sound files to/from
-       memory buffers?</B></H2>
-
-<P>
-This has been added for version 1.0.13.
-</P>
-
-<!-- ========================================================================= -->
-
-<A NAME="Q010"></A>
-<H2><BR/><B>Q10 : Reading a 16 bit PCM file as normalised floats and then
-       writing them back changes some sample values. Why?</B></H2>
-
-<P>
-This is caused by the fact that the conversion from 16 bit short to float is
-done by dividing by 32768 (0x8000 in hexadecimal) while the conversion from
-float to 16 bit short is done by multiplying by 32767 (0x7FFF in hex).
-So for instance, a value in a 16 bit PCM file of 20000 gets read as a floating
-point number of 0.6103515625 (20000.0 / 0x8000).
-Converting that back to a 16 bit short results in a value of 19999.3896484375
-(0.6103515625 * 0x7FFF) which then gets rounded down to 19999.
-</P>
-<P>
-You will notice that for this particular case, the error is 1 in 20000 or
-0.005%.
-Interestingly, for values of less than 16369, dividing by 0x8000 followed
-by multiplying by 0x7FFF and then rounding the result, gives back the
-original value.
-It turns out that as long as the host operating system supplies the 1999 ISO
-C Standard functions <B>lrintf</B> and <B>lrint</B> (or a replacement has
-been supplied) then the maximum possible error is 1 in 16369 or about 0.006%.
-</P>
-<P>
-Regardless of the size of the error, the reason why this is done is rather
-subtle.
-</P>
-<P>
-In a file containing 16 bit PCM samples, the values are restricted to the range
-[-32768, 32767] while we want floating point values in the range [-1.0, 1.0].
-The only way to do this conversion is to do a floating point division by a value
-of 0x8000.
-Converting the other way, the only way to ensure that floating point values in
-the range [-1.0, 1.0] are within the valid range allowed by a 16 bit short is
-to multiply by 0x7FFF.
-</P>
-<P>
-Some people would say that this is a severe short-coming of libsndfile.
-I would counter that anybody who is constantly converting back and forth
-between 16 bit shorts and normalised floats is going to suffer other losses
-in audio quality that they should also be concerned about.
-</P>
-<P>
-Since this problem only occurs when converting between integer data on disk and
-normalized floats in the application, it can be avoided by using something
-other than normalized floats in the application.
-Alternatives to normalized floats are the <b>short</b> and <b>int</b> data
-types (ie using sf_read_short or sf_read_int) or using un-normalized floats
-(see
-       <a href="command.html#SFC_SET_NORM_FLOAT">
-       SFC_SET_NORM_FLOAT</a>).
-</P>
-<P>
-Another way to deal with this problem is to consider 16 bit short data as a
-final destination format only, not as an intermediate storage format.
-All intermediate data (ie which is going to be processed further) should be
-stored in floating point format which is supported by all of the most common
-file formats.
-If floating point files are considered too large (2 times the size of a 16 bit
-PCM file), it would also be possible to use 24 bit PCM as an intermediate
-storage format (and which is also supported by most common file types).
-</P>
-
-<!-- ========================================================================= -->
-
-<A NAME="Q011"></A>
-<H2><BR/><B>Q11 : I'm having problems with u-law encoded WAV files generated by
-       libsndfile in Winamp. Why?
-</B></H2>
-
-<P>
-This is actually a Winamp problem.
-The official Microsoft spec suggests that the 'fmt ' chunk should be 18 bytes.
-Unfortunately at least one of Microsoft's own applications (Sound Recorder on
-Win98 I believe) did not accept 18 bytes 'fmt ' chunks.
-</P>
-<P>
-Michael Lee did some experimenting and found that:
-</P>
-<PRE>
-    I have checked that Windows Media Player 9, QuickTime Player 6.4,
-    RealOne Player 2.0 and GoldWave 5.06 can all play u-law files with
-    16-byte or 18-byte 'fmt ' chunk. Only Winamp (2.91) and foobar2000
-    are unable to play u-law files with 16-byte 'fmt ' chunk.
-</PRE>
-
-<P>
-Even this is a very small sampling of all the players out there.
-For that reason it is probably not a good idea to change this now because there
-is the risk of breaking something that currently works.
-</P>
-
-<!-- ========================================================================= -->
-
-<A NAME="Q012"></A>
-<H2><BR/><B>Q12 : I'm looking at sf_read*. What are items? What are frames?
-</B></H2>
-
-<P>
-An <tt>item</tt> is a single sample of the data type you are reading; ie a
-single <tt>short</tt> value for <tt>sf_read_short</tt> or a single <tt>float</tt>
-for <tt>sf_read_float</tt>.
-</P>
-
-<P>
-For a sound file with only one channel, a frame is the same as a item (ie a
-single sample) while for multi channel sound files, a single frame contains a
-single item for each channel.
-</P>
-
-<P>
-Here are two simple, correct examples, both of which are assumed to be working
-on a stereo file, first using items:
-</P>
-
-<PRE>
-        #define CHANNELS 2
-        short data [CHANNELS * 100] ;
-        sf_count items_read = sf_read_short (file, data, 200) ;
-        assert (items_read == 200) ;
-</PRE>
-
-<P>
-and now readng the exact same amount of data using frames:
-</P>
-
-<PRE>
-        #define CHANNELS 2
-        short data [CHANNELS * 100] ;
-        sf_count frames_read = sf_readf_short (file, data, 100) ;
-        assert (frames_read == 100) ;
-</PRE>
-
-<!-- ========================================================================= -->
-
-<A NAME="Q013"></A>
-<H2><BR/><B>Q13 : Why can't libsndfile open this Sound Designer II (SD2) file?
-</B></H2>
-
-<P>
-This is somewhat complicated.
-First some background.
-</P>
-
-<P>
-SD2 files are native to the Apple Macintosh platform and use features of
-the Mac filesystem (file resource forks) to store the file's sample rate,
-number of channels, sample width and more.
-When you look at a file and its resource fork on Mac OS X it looks like
-this:
-</P>
-
-<PRE>
-        -rw-r--r--  1 erikd erikd   46512 Oct 18 22:57 file.sd2
-        -rw-r--r--  1 erikd erikd     538 Oct 18 22:57 file.sd2/rsrc
-</PRE>
-
-<P>
-Notice how the file itself looks like a directory containing a single file
-named <B>rsrc</B>.
-When libsndfile is compiled for MacOS X, it should open (for write and read)
-SD2 file with resource forks like this without any problems.
-It will also handle files with the resource fork in a separate file as
-described below.
-</P>
-
-<P>
-When SD2 files are moved to other platforms, the resource fork of the file
-can sometimes be dropped altogether.
-All that remains is the raw audio data and no information about the number
-of channels, sample rate or bit width which makes it a little difficult for
-libsndfile to open the file.
-</P>
-
-<P>
-However, it is possible to safely move an SD2 file to a Linux or Windows
-machine.
-For instance, when an SD2 file is copied from inside MacOS X to a windows
-shared directory or a Samba share (ie Linux), MacOS X is clever enough to
-store the resource fork of the file in a separate hidden file in the
-same directory like this:
-</P>
-<PRE>
-        -rw-r--r--  1 erikd erikd     538 Oct 18 22:57 ._file.sd2
-        -rw-r--r--  1 erikd erikd   46512 Oct 18 22:57 file.sd2
-</PRE>
-
-<P>
-Regardless of what platform it is running on, when libsndfile is asked to
-open a file named <B>"foo"</B> and it can't recognize the file type from
-the data in the file, it will attempt to open the resource fork and if
-that fails, it then tries to open a file named <B>"._foo"</B> to see if
-the file has a valid resource fork.
-This is the same regardless of whether the file is being opened for read
-or write.
-</P>
-
-<P>
-In short, libsndfile should open SD2 files with a valid resource fork on
-all of the platforms that libsndfile supports.
-If a file has lost its resource fork, the only option is the open the file
-using the SF_FORMAT_RAW option and guessing its sample rate, channel count
-and bit width.
-</P>
-
-<P>
-Occasionally, when SD2 files are moved to other systems, the file is
-       <A HREF="http://www.macdisk.com/binhexen.php3">BinHexed</A>
-which wraps the resource fork and the data fork together.
-For these files, it would be possible to write a BinHex parser but
-there is not a lot to gain considering how rare these BinHexed SD2
-files are.
-</P>
-
-<!-- ========================================================================= -->
-<A NAME="Q014"></A>
-<H2><BR/><B>Q14 : I'd like to statically link libsndfile to my closed source
-       application. Can I buy a license so that this is possible?
-</B></H2>
-
-<P>
-Unfortunately no.
-libsndfile contains code written by other people who have agreed that their
-code be used under the GNU LGPL but no more.
-Even if they were to agree, there would be significant difficulties in
-dividing up the payments fairly.
-</P>
-
-<P>
-The <B>only</B> way you can legally use libsndfile as a statically linked
-library is if your application is released under the GNU GPL or LGPL.
-</P>
-
-<!-- ========================================================================= -->
-<A NAME="Q015"></A>
-<H2><BR/><B>Q15 : My program is crashing during a call to a function in libsndfile.
-       Is this a bug in libsndfile?
-</B></H2>
-
-<P>
-libsndfile is being used by large numbers of people all over the world
-without any problems like this. That means that it is much more likely
-that your code has a bug than libsndfile. However, it is still possible
-that there is a bug in libsndfile.
-</P>
-<P>
-To figure out whether it is your code or libsndfile you should do the
-following:
-</P>
-       <UL>
-       <LI>Make sure you are compiling your code with warnings switched on and
-               that you fix as many warnings as possible.
-               With the GNU compiler (gcc) I would recommend at least
-               <B>-W -Wall -Werror</B> which will force you to fix all warnings
-               before you can run the code.
-       <LI>Try using a memory debugger.
-               <A HREF="http://valgrind.kde.org/">Valgrind</A> on x86 Linux is excellent.
-               <A HREF="http://www.ibm.com/software/awdtools/purify/">Purify</A> also
-               has a good reputation.
-       <LI>If the code is clean after the above two steps and you still get
-               a crash in libsndfile, then send me a small snippet of code (no
-               more than 30-40 lines) which includes the call to sf_open() and
-               also shows how all variables passed to/returned from sf_open()
-               are defined.
-       </UL>
-
-<!-- ========================================================================= -->
-<A NAME="Q016"></A>
-<H2><BR/><B>Q16 : Will you accept a fix for compiling libsndfile with compiler X?
-</B></H2>
-
-<P>
-If compiler X is a C++ compiler then no.
-C and C++ are different enough to make writing code that compiles as valid C
-and valid C++ too difficult.
-I would rather spend my time fixing bugs and adding features.
-</P>
-
-<P>
-If compiler X is a C compiler then I will do what I can as long as that does
-not hamper the correctness, portability and maintainability of the existing
-code.
-It should be noted however that libsndfile uses features specified by the 1999
-ISO C Standard.
-This can make compiling libsndfile with some older compilers difficult.
-</P>
-
-<!-- ========================================================================= -->
-<A NAME="Q017"></A>
-<H2><BR/><B>Q17 : Can libsndfile read/write files from/to UNIX pipes?
-</B></H2>
-
-<P>
-Yes, libsndfile can read files from pipes.
-Unfortunately, the write case is much more complicated.
-</P>
-
-<P>
-File formats like AIFF and WAV have information at the start of the file (the
-file header) which states the length of the file, the number of sample frames
-etc.
-This information must be filled in correctly when the file header is written,
-but this information is not reliably known until the file is closed.
-This means that libsndfile cannot write AIFF, WAV and many other file types
-to a pipe.
-</P>
-
-<P>
-However, there is at least one file format (AU) which is specifically designed
-to be written to a pipe.
-Like AIFF and WAV, AU has a header with a sample frames field, but it is
-specifically allowable to set that frames field to 0x7FFFFFFF if the file
-length is not known when the header is written.
-The AU file format can also hold data in many of the standard formats (ie
-SF_FORMAT_PCM_16, SF_FORMAT_PCM_24, SF_FORMAT_FLOAT etc) as well as allowing
-data in both big and little endian format.
-</P>
-
-<P>
-See also <A HREF="#Q006">FAQ Q6</A>.
-</P>
-
-<!-- ========================================================================= -->
-<A NAME="Q018"></A>
-<H2><BR/><B>Q18 : Is it possible to build a Universal Binary on Mac OS X?
-</B></H2>
-
-<P>
-Yes, but you must do two separate configure/build/test runs; one on PowerPC
-and one on Intel.
-It is then possible to merge the binaries into a single universal binary using
-one of the programs in the Apple tool chain.
-</P>
-
-<P>
-It is <b>not</b> possible to build a working universal binary via a single
-compile/build run on a single CPU.
-</P>
-
-<P>
-The problem is that the libsndfile build process detects features of the CPU its
-being built for during the configure process and when building a universal binary,
-configure is only run once and that data is then used for both CPUs.
-That configure data will be wrong for one of those CPUs.
-You will still be able to compile libsndfile, and the test suite will pass on
-the machine you compiled it on.
-However, if you take the universal binary test suite programs compiled on one
-CPU and run them on the other, the test suite will fail.
-</P>
-
-<P>
-Part of the problem is the the CPU endian-ness is detected at configure time.
-Yes, I know the Apple compiler defines one of the macros __LITTLE_ENDIAN__
-and __BIG_ENDIAN__, but those macros are not part of the 1999 ISO C Standard
-and they are not portable.
-</P>
-
-<P>
-Endian issues are not the only reason why the cross compiled binary will fail.
-The configure script also detects other CPU specific idiosyncrasies to provide
-more optimized code.
-</P>
-
-<P>
-Finally, the real show stopper problem with universal binaries is the problem
-with the test suite.
-libsndfile contains a huge, comprehensive test suite.
-When you compile a universal binary and run the test suite, you only test the
-native compile.
-The cross compiled binary (the one with the much higher chance of having
-problems) cannot be tested.
-</P>
-
-<P>
-Now, if you have read this far you're probably thinking there must be a way
-to fix this and there probably is.
-The problem is that its a hell of a lot of work and would require significant
-changes to the configure process, the internal code and the test suite.
-In addition, these changes must not break compilation on any of the platforms
-libsndfile is currently working on.
-</p>
-
-
-<!-- ========================================================================= -->
-<A NAME="Q019"></A>
-<H2><BR/><B>Q19 : I have project files for Visual Studio / XCode / Whatever. Why
-       don't you distribute them with libsndfile?
-</B></H2>
-
-<P>
-There's a very good reason for this.
-I will only distribute things that I actually have an ability to test and
-maintain.
-Project files for a bunch of different compilers and Integrated Development
-Environments are simply too difficult to maintain.
-</P>
-
-<P>
-The problem is that every time I add a new file to libsndfile or rename an
-existing file I would have to modify all the project files and then test that
-libsndfile still built with all the different compilers.
-</P>
-
-<P>
-Maintaining these project files is also rather difficult if I don't have access
-to the required compiler/IDE.
-If I just edit the project files without testing them I will almost certainly
-get it wrong.
-If I release a version of libsndfile with broken project files, I'll get a bunch
-of emails from people complaining about it not building and have no way of
-fixing or even testing it.
-</P>
-
-<P>
-I currently release sources that I personally test on Win32, Linux and
-MacOS X (PowerPC) using the compiler I trust (GNU GCC).
-Supporting one compiler on three (actually much more because GCC is available
-almost everywhere) platforms is doable without too much pain.
-I also release binaries for Win32 with instructions on how to use those
-binaries with Visual Studio.
-As a guy who is mainly interested in Linux, I'm not to keen to jump through
-a bunch of hoops to support compilers and operating systems I don't use.
-</P>
-
-<P>
-So, I hear you want to volunteer to maintain the project files for Some Crappy
-Compiler 2007?
-Well sorry, that won't work either.
-I have had numerous people over the years offer to maintaining the project
-files for Microsoft's Visual Studio.
-Every single time that happened, they maintained it for a release or two and
-then disappeared off the face of the earth.
-Hence, I'm not willing to enter into an arrangement like that again.
-</P>
-
-<!-- ========================================================================= -->
-<A NAME="Q020"></A>
-<H2><BR/><B>Q20 : Why doesn't libsndfile support MP3? Lots of other Open Source
-       projects support it!
-</B></H2>
-
-<P>
-MP3 is not supported for one very good reason; doing so requires the payment
-of licensing fees.
-As can be seen from
-       <a href="http://www.mp3licensing.com/royalty/software.html">
-       mp3licensing.com</a>
-the required royalty payments are not cheap.
-</P>
-
-<p>
-Yes, I know other libraries ignore the licensing requirements, but their legal
-status is extremely dubious.
-At any time, the body selling the licenses could go after the authors of those
-libraries.
-Some of those authors may be students and hence wouldn't be worth pursuing.
-</P>
-
-<p>
-However, libsndfile is released under the name of a company, Mega Nerd Pty Ltd;
-a company which has income from from libsamplerate licensing, libsndfile based
-consulting income and other unrelated consulting income.
-Adding MP3 support to libsndfile could place that income under legal threat.
-</p>
-
-<p>
-Fortunately, Ogg Vorbis exists as an alternative to MP3.
-Support for Ogg Vorbis was added to libsndfile (mostly due to the efforts of
-John ffitch of the Csound project) in version 1.0.18.
-</p>
-
-
-<!-- ========================================================================= -->
-<A NAME="Q021"></A>
-<H2><BR/><B>Q21 : How do I use libsndfile in a closed source or commercial program
-       and comply with the license?
-</B></H2>
-
-<p>
-Here is a checklist of things you need to do to make sure your use of libsndfile
-in a closed source or commercial project complies with the license libsndfile is
-released under, the GNU Lesser General Public License (LGPL):
-</p>
-
-<ul>
-<li>Make sure you are linking to libsndfile as a shared library (Linux and Unix
-       systems), Dynamic Link Library (Microsoft Windows) or dynlib (Mac OS X).
-       If you are using some other operating system that doesn't allow dynamically
-       linked libraries, you will not be able to use libsndfile unless you release
-       the source code to your program.
-<li>In the licensing documentation for your program, add a statement that your
-       software depends on libsndfile and that libsndfile is released under the GNU
-       Lesser General Public License, either
-               <a href="http://www.gnu.org/licenses/lgpl-2.1.txt">version 2.1</a>
-       or optionally
-               <a href="http://www.gnu.org/licenses/lgpl.txt">version 3</a>.
-<li>Include the text for both versions of the license, possibly as separate
-       files named libsndfile_lgpl_v2_1.txt and libsndfile_lgpl_v3.txt.
-</ul>
-
-<!-- ========================================================================= -->
-<A NAME="Q022"></A>
-<H2><BR/><B>Q22 : What versions of Windows does libsndfile work on?
-</B></H2>
-
-<p>
-Currently the precompiled windows binaries are thoroughly tested on Windows XP.
-As such, they should also work on Win2k and Windows Vista.
-They may also work on earlier versions of Windows.
-</p>
-
-<p>
-Since version 0.1.18 I have also been releasing precompiled binaries for Win64,
-the 64 bit version of Windows.
-These binaries have received much less testing than the  32 bit versions, but
-should work as expected.
-I'd be very interested in receiving feedback  on these binaries.
-</p>
-
-<!-- ========================================================================= -->
-<A NAME="Q023"></A>
-<H2><BR/><B>Q23 : I'm cross compiling libsndfile for another platform. How can I
-       run the test suite?
-</B></H2>
-
-<p>
-</p>
-
-<p>
-Since version 1.0.21 the top level Makefile has an extra make target,
-'test-tarball'.
-Building this target creates a tarball called called:
-</p>
-
-<center><tt>
-libsndfile-testsuite-${host_triplet}-${version}.tar.gz
-</tt></center>
-
-<p>
-in the top level directory.
-This tarball can then be copied to the target platform.
-Once untarred and test script <tt>test_wrapper.sh</tt> can be run from
-the top level of the extracted tarball.
-</p>
-
-<!-- ========================================================================= -->
-<HR>
-<P>
-       The libsndfile home page is here :
-               <A HREF="http://www.mega-nerd.com/libsndfile/">
-                       http://www.mega-nerd.com/libsndfile/</A>.
-<BR/>
-Version : 1.0.25
-</P>
-
-</BODY>
-</HTML>
diff --git a/libs/libsndfile/doc/Makefile.am b/libs/libsndfile/doc/Makefile.am
deleted file mode 100644 (file)
index b89f145..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-html_DATA = index.html libsndfile.jpg libsndfile.css api.html command.html \
-                       bugs.html sndfile_info.html new_file_type.HOWTO \
-                       win32.html FAQ.html lists.html embedded_files.html octave.html \
-                       dither.html tutorial.html
-
-EXTRA_DIST = $(html_DATA)
-
diff --git a/libs/libsndfile/doc/api.html b/libs/libsndfile/doc/api.html
deleted file mode 100644 (file)
index 33d53dd..0000000
+++ /dev/null
@@ -1,781 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-       <TITLE>
-       The libsndfile API
-       </TITLE>
-       <META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-       <META NAME="Description" CONTENT="The libsndfile API.">
-       <META NAME="Keywords"    CONTENT="WAV AIFF AU libsndfile sound audio dsp Linux">
-       <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all">
-       <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print">
-</HEAD>
-
-<BODY>
-
-<BR>
-<H1><B>libsndfile</B></H1>
-<P>
-       Libsndfile is a library designed to allow the reading and writing of many
-       different sampled sound file formats (such as MS Windows WAV and the Apple/SGI
-       AIFF format) through one standard library interface.
-</P>
-<!-- pepper -->
-<P>
-       During read and write operations, formats are seamlessly converted between the
-       format the application program has requested or supplied and the file's data
-       format. The application programmer can remain blissfully unaware of issues
-       such as file endian-ness and data format. See <A HREF="#note1">Note 1</A> and
-       <A HREF="#note2">Note 2</A>.
-</P>
-<!-- pepper -->
-<P>
-       Every effort is made to keep these documents up-to-date, error free and
-       unambiguous.
-       However, since maintaining the documentation is the least fun part of working
-       on libsndfile, these docs can and do fall behind the behaviour of library.
-       If any errors, omissions or ambiguities are found, please notify me (erikd)
-       at mega-nerd dot com.
-</P>
-<!-- pepper -->
-<P>
-       To supplement this reference documentation, there are simple example programs
-       included in the source code tarball.
-       The test suite which is also part of the source code tarball is also a good
-       place to look for the correct usage of the library functions.
-</P>
-<!-- pepper -->
-<P>
-       <B> Finally, if you think there is some feature missing from libsndfile, check that
-       it isn't already implemented (and documented)
-               <A HREF="command.html">here</A>.
-       </B>
-</P>
-
-<H2><B>Synopsis</B></H2>
-<P>
-The functions of libsndfile are defined as follows:
-</P>
-<!-- pepper -->
-<PRE>
-      #include &lt;stdio.h&gt;
-      #include &lt;sndfile.h&gt;
-
-      SNDFILE*    <A HREF="#open">sf_open</A>          (const char *path, int mode, SF_INFO *sfinfo) ;
-      SNDFILE*    <A HREF="#open_fd">sf_open_fd</A>       (int fd, int mode, SF_INFO *sfinfo, int close_desc) ;
-      SNDFILE*           <A HREF="#open_virtual">sf_open_virtual</A>  (SF_VIRTUAL_IO *sfvirtual, int mode, SF_INFO *sfinfo, void *user_data) ;
-      int         <A HREF="#check">sf_format_check</A>  (const SF_INFO *info) ;
-
-      sf_count_t  <A HREF="#seek">sf_seek</A>          (SNDFILE *sndfile, sf_count_t frames, int whence) ;
-
-      int         <A HREF="command.html">sf_command</A>       (SNDFILE *sndfile, int cmd, void *data, int datasize) ;
-
-      int         <A HREF="#error">sf_error</A>         (SNDFILE *sndfile) ;
-      const char* <A HREF="#error">sf_strerror</A>      (SNDFILE *sndfile) ;
-      const char* <A HREF="#error">sf_error_number</A>  (int errnum) ;
-
-      int         <A HREF="#error">sf_perror</A>        (SNDFILE *sndfile) ;
-      int         <A HREF="#error">sf_error_str</A>     (SNDFILE *sndfile, char* str, size_t len) ;
-
-      int         <A HREF="#close">sf_close</A>         (SNDFILE *sndfile) ;
-      void        <A HREF="#write_sync">sf_write_sync</A>    (SNDFILE *sndfile) ;
-
-      sf_count_t  <A HREF="#read">sf_read_short</A>    (SNDFILE *sndfile, short *ptr, sf_count_t items) ;
-      sf_count_t  <A HREF="#read">sf_read_int</A>      (SNDFILE *sndfile, int *ptr, sf_count_t items) ;
-      sf_count_t  <A HREF="#read">sf_read_float</A>    (SNDFILE *sndfile, float *ptr, sf_count_t items) ;
-      sf_count_t  <A HREF="#read">sf_read_double</A>   (SNDFILE *sndfile, double *ptr, sf_count_t items) ;
-
-      sf_count_t  <A HREF="#readf">sf_readf_short</A>   (SNDFILE *sndfile, short *ptr, sf_count_t frames) ;
-      sf_count_t  <A HREF="#readf">sf_readf_int</A>     (SNDFILE *sndfile, int *ptr, sf_count_t frames) ;
-      sf_count_t  <A HREF="#readf">sf_readf_float</A>   (SNDFILE *sndfile, float *ptr, sf_count_t frames) ;
-      sf_count_t  <A HREF="#readf">sf_readf_double</A>  (SNDFILE *sndfile, double *ptr, sf_count_t frames) ;
-
-      sf_count_t  <A HREF="#write">sf_write_short</A>   (SNDFILE *sndfile, short *ptr, sf_count_t items) ;
-      sf_count_t  <A HREF="#write">sf_write_int</A>     (SNDFILE *sndfile, int *ptr, sf_count_t items) ;
-      sf_count_t  <A HREF="#write">sf_write_float</A>   (SNDFILE *sndfile, float *ptr, sf_count_t items) ;
-      sf_count_t  <A HREF="#write">sf_write_double</A>  (SNDFILE *sndfile, double *ptr, sf_count_t items) ;
-
-      sf_count_t  <A HREF="#writef">sf_writef_short</A>  (SNDFILE *sndfile, short *ptr, sf_count_t frames) ;
-      sf_count_t  <A HREF="#writef">sf_writef_int</A>    (SNDFILE *sndfile, int *ptr, sf_count_t frames) ;
-      sf_count_t  <A HREF="#writef">sf_writef_float</A>  (SNDFILE *sndfile, float *ptr, sf_count_t frames) ;
-      sf_count_t  <A HREF="#writef">sf_writef_double</A> (SNDFILE *sndfile, double *ptr, sf_count_t frames) ;
-
-      sf_count_t  <A HREF="#raw">sf_read_raw</A>      (SNDFILE *sndfile, void *ptr, sf_count_t bytes) ;
-      sf_count_t  <A HREF="#raw">sf_write_raw</A>     (SNDFILE *sndfile, void *ptr, sf_count_t bytes) ;
-
-      const char* <A HREF="#string">sf_get_string</A>    (SNDFILE *sndfile, int str_type) ;
-      int         <A HREF="#string">sf_set_string</A>    (SNDFILE *sndfile, int str_type, const char* str) ;
-
-</PRE>
-<!-- pepper -->
-<P>
-SNDFILE* is an anonymous pointer to data which is private to the library.
-</P>
-
-
-<A NAME="open"></A>
-<H2><B>File Open Function</B></H2>
-
-<PRE>
-      SNDFILE*  sf_open    (const char *path, int mode, SF_INFO *sfinfo) ;
-</PRE>
-
-<P>
-The SF_INFO structure is for passing data between the calling function and the library
-when opening a file for reading or writing. It is defined in sndfile.h as follows:
-</P>
-<!-- pepper -->
-<PRE>
-      typedef struct
-      {    sf_count_t  frames ;     /* Used to be called samples. */
-           int         samplerate ;
-           int         channels ;
-           int         format ;
-           int         sections ;
-           int         seekable ;
-       } SF_INFO ;
-</PRE>
-
-<P>
-The mode parameter for this function can be any one of the following three values:
-</P>
-<!-- pepper -->
-<PRE>
-      SFM_READ    - read only mode
-      SFM_WRITE   - write only mode
-      SFM_RDWR    - read/write mode
-</PRE>
-
-<P>
-When opening a file for read, the <b>format</B> field should be set to zero before
-calling sf_open().
-The only exception to this is the case of RAW files where the caller has to set
-the samplerate, channels and format fields to valid values.
-All other fields of the structure are filled in by the library.
-</P>
-<!-- pepper -->
-<P>
-When opening a file for write, the caller must fill in structure members samplerate,
-channels, and format.
-</P>
-<!-- pepper -->
-<P>
-The format field in the above SF_INFO structure is made up of the bit-wise OR of a
-major format type (values between 0x10000 and 0x08000000), a minor format type
-(with values less than 0x10000) and an optional endian-ness value.
-The currently understood formats are listed in sndfile.h as follows and also include
-bitmasks for separating major and minor file types.
-Not all combinations of endian-ness and major and minor file types are valid.
-</P>
-<!-- pepper -->
-<PRE>
-      enum
-      {   /* Major formats. */
-          SF_FORMAT_WAV          = 0x010000,     /* Microsoft WAV format (little endian). */
-          SF_FORMAT_AIFF         = 0x020000,     /* Apple/SGI AIFF format (big endian). */
-          SF_FORMAT_AU           = 0x030000,     /* Sun/NeXT AU format (big endian). */
-          SF_FORMAT_RAW          = 0x040000,     /* RAW PCM data. */
-          SF_FORMAT_PAF          = 0x050000,     /* Ensoniq PARIS file format. */
-          SF_FORMAT_SVX          = 0x060000,     /* Amiga IFF / SVX8 / SV16 format. */
-          SF_FORMAT_NIST         = 0x070000,     /* Sphere NIST format. */
-          SF_FORMAT_VOC          = 0x080000,     /* VOC files. */
-          SF_FORMAT_IRCAM        = 0x0A0000,     /* Berkeley/IRCAM/CARL */
-          SF_FORMAT_W64          = 0x0B0000,     /* Sonic Foundry's 64 bit RIFF/WAV */
-          SF_FORMAT_MAT4         = 0x0C0000,     /* Matlab (tm) V4.2 / GNU Octave 2.0 */
-          SF_FORMAT_MAT5         = 0x0D0000,     /* Matlab (tm) V5.0 / GNU Octave 2.1 */
-          SF_FORMAT_PVF          = 0x0E0000,     /* Portable Voice Format */
-          SF_FORMAT_XI           = 0x0F0000,     /* Fasttracker 2 Extended Instrument */
-          SF_FORMAT_HTK          = 0x100000,     /* HMM Tool Kit format */
-          SF_FORMAT_SDS          = 0x110000,     /* Midi Sample Dump Standard */
-          SF_FORMAT_AVR          = 0x120000,     /* Audio Visual Research */
-          SF_FORMAT_WAVEX        = 0x130000,     /* MS WAVE with WAVEFORMATEX */
-          SF_FORMAT_SD2          = 0x160000,     /* Sound Designer 2 */
-          SF_FORMAT_FLAC         = 0x170000,     /* FLAC lossless file format */
-          SF_FORMAT_CAF          = 0x180000,     /* Core Audio File format */
-          SF_FORMAT_WVE          = 0x190000,     /* Psion WVE format */
-          SF_FORMAT_OGG          = 0x200000,     /* Xiph OGG container */
-          SF_FORMAT_MPC2K        = 0x210000,     /* Akai MPC 2000 sampler */
-          SF_FORMAT_RF64         = 0x220000,     /* RF64 WAV file */
-
-          /* Subtypes from here on. */
-
-          SF_FORMAT_PCM_S8       = 0x0001,       /* Signed 8 bit data */
-          SF_FORMAT_PCM_16       = 0x0002,       /* Signed 16 bit data */
-          SF_FORMAT_PCM_24       = 0x0003,       /* Signed 24 bit data */
-          SF_FORMAT_PCM_32       = 0x0004,       /* Signed 32 bit data */
-
-          SF_FORMAT_PCM_U8       = 0x0005,       /* Unsigned 8 bit data (WAV and RAW only) */
-
-          SF_FORMAT_FLOAT        = 0x0006,       /* 32 bit float data */
-          SF_FORMAT_DOUBLE       = 0x0007,       /* 64 bit float data */
-
-          SF_FORMAT_ULAW         = 0x0010,       /* U-Law encoded. */
-          SF_FORMAT_ALAW         = 0x0011,       /* A-Law encoded. */
-          SF_FORMAT_IMA_ADPCM    = 0x0012,       /* IMA ADPCM. */
-          SF_FORMAT_MS_ADPCM     = 0x0013,       /* Microsoft ADPCM. */
-
-          SF_FORMAT_GSM610       = 0x0020,       /* GSM 6.10 encoding. */
-          SF_FORMAT_VOX_ADPCM    = 0x0021,       /* Oki Dialogic ADPCM encoding. */
-
-          SF_FORMAT_G721_32      = 0x0030,       /* 32kbs G721 ADPCM encoding. */
-          SF_FORMAT_G723_24      = 0x0031,       /* 24kbs G723 ADPCM encoding. */
-          SF_FORMAT_G723_40      = 0x0032,       /* 40kbs G723 ADPCM encoding. */
-
-          SF_FORMAT_DWVW_12      = 0x0040,       /* 12 bit Delta Width Variable Word encoding. */
-          SF_FORMAT_DWVW_16      = 0x0041,       /* 16 bit Delta Width Variable Word encoding. */
-          SF_FORMAT_DWVW_24      = 0x0042,       /* 24 bit Delta Width Variable Word encoding. */
-          SF_FORMAT_DWVW_N       = 0x0043,       /* N bit Delta Width Variable Word encoding. */
-
-          SF_FORMAT_DPCM_8       = 0x0050,       /* 8 bit differential PCM (XI only) */
-          SF_FORMAT_DPCM_16      = 0x0051,       /* 16 bit differential PCM (XI only) */
-
-          SF_FORMAT_VORBIS       = 0x0060,       /* Xiph Vorbis encoding. */
-
-          /* Endian-ness options. */
-
-          SF_ENDIAN_FILE         = 0x00000000,   /* Default file endian-ness. */
-          SF_ENDIAN_LITTLE       = 0x10000000,   /* Force little endian-ness. */
-          SF_ENDIAN_BIG          = 0x20000000,   /* Force big endian-ness. */
-          SF_ENDIAN_CPU          = 0x30000000,   /* Force CPU endian-ness. */
-
-          SF_FORMAT_SUBMASK      = 0x0000FFFF,
-          SF_FORMAT_TYPEMASK     = 0x0FFF0000,
-          SF_FORMAT_ENDMASK      = 0x30000000
-      } ;
-</PRE>
-<!-- pepper -->
-<P>
-Every call to sf_open() should be matched with a call to sf_close() to free up
-memory allocated during the call to sf_open().
-</P>
-<!-- pepper -->
-<P>
-On success, the sf_open function returns a non-NULL pointer which should be
-passed as the first parameter to all subsequent libsndfile calls dealing with
-that audio file.
-On fail, the sf_open function returns a NULL pointer.
-An explanation of the error can obtained by passing NULL to
-       <A HREF="#error">sf_strerror</A>.
-</P>
-
-<A NAME="open_fd"></A>
-<H3><B>File Descriptor Open</B></H3>
-
-<PRE>
-      SNDFILE*  sf_open_fd (int fd, int mode, SF_INFO *sfinfo, int close_desc) ;
-</PRE>
-
-<P>
-<b>Note:</b> On Microsoft Windows, this function does not work if the
-application and the libsndfile DLL are linked to different versions of the
-Microsoft C runtime DLL.
-</P>
-<P>
-The second open function takes a file descriptor of a file that has already been
-opened.
-Care should be taken to ensure that the mode of the file represented by the
-descriptor matches the mode argument.
-This function is useful in the following circumstances:
-</P>
-
-<UL>
-       <LI>Opening temporary files securely (ie use the tmpfile() to return a
-               FILE* pointer and then using fileno() to retrieve the file descriptor
-               which is then passed to libsndfile).
-       <LI>Opening files with file names using OS specific character encodings
-               and then passing the file descriptor to sf_open_fd().
-       <LI>Opening sound files embedded within larger files.
-                       <A HREF="embedded_files.html">More info</A>.
-</UL>
-
-<P>
-Every call to sf_open_fd() should be matched with a call to sf_close() to free up
-memory allocated during the call to sf_open().
-</P>
-
-<P>
-When sf_close() is called, the file descriptor is only closed if the <B>close_desc</B>
-parameter was TRUE when the sf_open_fd() function was called.
-</P>
-
-<P>
-On success, the sf_open_fd function returns a non-NULL pointer which should be
-passed as the first parameter to all subsequent libsndfile calls dealing with
-that audio file.
-On fail, the sf_open_fd function returns a NULL pointer.
-</P>
-
-<A NAME="open_virtual"></A>
-<h3><b>Virtual File Open Function</b></h3>
-<pre>
-      SNDFILE*         sf_open_virtual (SF_VIRTUAL_IO *sfvirtual, int mode, SF_INFO *sfinfo, void *user_data) ;
-</pre>
-<p>
-       Opens a soundfile from a virtual file I/O context which is provided
-       by the caller. This is usually used to interface libsndfile to a stream or buffer
-       based system. Apart from the sfvirtual and the user_data parameters this function behaves
-       like <a href="#open">sf_open</a>.
-</p>
-
-<pre>
-      typedef struct
-      {    sf_vio_get_filelen  get_filelen ;
-           sf_vio_seek         seek ;
-           sf_vio_read         read ;
-           sf_vio_write        write ;
-           sf_vio_tell         tell ;
-      } SF_VIRTUAL_IO ;
-</pre>
-<p>
-Libsndfile calls the callbacks provided by the SF_VIRTUAL_IO structure when opening, reading
-and writing to the virtual file context. The user_data pointer is a user defined context which
-will be available in the callbacks.
-</p>
-<pre>
-      typedef sf_count_t  (*sf_vio_get_filelen) (void *user_data) ;
-      typedef sf_count_t  (*sf_vio_seek)        (sf_count_t offset, int whence, void *user_data) ;
-      typedef sf_count_t  (*sf_vio_read)        (void *ptr, sf_count_t count, void *user_data) ;
-      typedef sf_count_t  (*sf_vio_write)       (const void *ptr, sf_count_t count, void *user_data) ;
-      typedef sf_count_t  (*sf_vio_tell)        (void *user_data) ;
-</pre>
-<h4>sf_vio_get_filelen</h4>
-<pre>
-      typedef sf_count_t  (*sf_vio_get_filelen) (void *user_data) ;
-</pre>
-<p>
-The virtual file contex must return the length of the virtual file in bytes.<br>
-</p>
-<h4>sf_vio_seek</h4>
-<pre>
-      typedef sf_count_t  (*sf_vio_seek)        (sf_count_t offset, int whence, void *user_data) ;
-</pre>
-<p>
-The virtual file context must seek to offset using the seek mode provided by whence which is one of<br>
-</p>
-<pre>
-      SEEK_CUR
-      SEEK_SET
-      SEEK_END
-</pre>
-<p>
-The return value must contain the new offset in the file.
-</p>
-<h4>sf_vio_read</h4>
-<pre>
-      typedef sf_count_t  (*sf_vio_read)        (void *ptr, sf_count_t count, void *user_data) ;
-</pre>
-<p>
-The virtual file context must copy ("read") "count" bytes into the
-buffer provided by ptr and return the count of actually copied bytes.
-</p>
-<h4>sf_vio_write</h4>
-<pre>
-      typedef sf_count_t  (*sf_vio_write)       (const void *ptr, sf_count_t count, void *user_data) ;
-</pre>
-<p>
-The virtual file context must process "count" bytes stored in the
-buffer passed with ptr and return the count of actually processed bytes.<br>
-</p>
-<h4>sf_vio_tell</h4>
-<pre>
-      typedef sf_count_t  (*sf_vio_tell)        (void *user_data) ;
-</pre>
-<p>
-Return the current position of the virtual file context.<br>
-</p>
-
-
-<A NAME="check"></A>
-<BR><H2><B>Format Check Function</B></H2>
-
-<PRE>
-      int  sf_format_check (const SF_INFO *info) ;
-</PRE>
-<!-- pepper -->
-<P>
-This function allows the caller to check if a set of parameters in the SF_INFO struct
-is valid before calling sf_open (SFM_WRITE).
-</P>
-<P>
-sf_format_check returns TRUE if the parameters are valid and FALSE otherwise.
-</P>
-
-<A NAME="seek"></A>
-<BR><H2><B>File Seek Functions</B></H2>
-
-<PRE>
-      sf_count_t  sf_seek  (SNDFILE *sndfile, sf_count_t frames, int whence) ;
-</PRE>
-
-<P>
-The file seek functions work much like lseek in unistd.h with the exception that
-the non-audio data is ignored and the seek only moves within the audio data section of
-the file.
-In addition, seeks are defined in number of (multichannel) frames.
-Therefore, a seek in a stereo file from the current position forward with an offset
-of 1 would skip forward by one sample of both channels.
-</P>
-
-<P>
-like lseek(), the whence parameter can be any one of the following three values:
-</P>
-
-<PRE>
-      SEEK_SET  - The offset is set to the start of the audio data plus offset (multichannel) frames.
-      SEEK_CUR  - The offset is set to its current location plus offset (multichannel) frames.
-      SEEK_END  - The offset is set to the end of the data plus offset (multichannel) frames.
-</PRE>
-<!-- pepper -->
-<P>
-Internally, libsndfile keeps track of the read and write locations using separate
-read and write pointers.
-If a file has been opened with a mode of SFM_RDWR, bitwise OR-ing the standard whence
-values above with either SFM_READ or SFM_WRITE allows the read and write pointers to
-be modified separately.
-If the SEEK_* values are used on their own, the read and write pointers are
-both modified.
-</P>
-
-<P>
-Note that the frames offset can be negative and in fact should be when SEEK_END is used for the
-whence parameter.
-</P>
-<P>
-sf_seek will return the offset in (multichannel) frames from the start of the audio data
-or -1 if an error occured (ie an attempt is made to seek beyond the start or end of the file).
-</P>
-
-<A NAME="error"></A>
-<H2><BR><B>Error Reporting Functions</B></H2>
-
-
-<PRE>
-      int         sf_error        (SNDFILE *sndfile) ;
-</PRE>
-<P>
-This function returns the current error number for the given SNDFILE.
-The error number may be one of the following:
-</P>
-<PRE>
-        enum
-        {   SF_ERR_NO_ERROR             = 0,
-            SF_ERR_UNRECOGNISED_FORMAT  = 1,
-            SF_ERR_SYSTEM               = 2,
-            SF_ERR_MALFORMED_FILE       = 3,
-            SF_ERR_UNSUPPORTED_ENCODING = 4
-        } ;
-</PRE>
-<!-- pepper -->
-<P>
-or any one of many other internal error values.
-Applications should only test the return value against error values defined in
-&lt;sndfile.h&gt; as the internal error values are subject to change at any
-time.
-For errors not in the above list, the function sf_error_number() can be used to
-convert it to an error string.
-</P>
-
-<PRE>
-      const char* sf_strerror     (SNDFILE *sndfile) ;
-      const char* sf_error_number (int errnum) ;
-</PRE>
-
-<P>
-The error functions sf_strerror() and sf_error_number() convert the library's internal
-error enumerations into text strings.
-</P>
-<PRE>
-      int         sf_perror     (SNDFILE *sndfile) ;
-      int         sf_error_str  (SNDFILE *sndfile, char* str, size_t len) ;
-</PRE>
-
-<P>
-The functions sf_perror() and sf_error_str() are deprecated and will be dropped
-from the library at some later date.
-</P>
-
-<A NAME="close"></A>
-<H2><BR><B>File Close Function</B></H2>
-
-<PRE>
-      int  sf_close  (SNDFILE *sndfile) ;
-</PRE>
-<!-- pepper -->
-<P>
-The close function closes the file, deallocates its internal buffers and returns
-0 on success or an error value otherwise.
-</P>
-<BR>
-
-<A NAME="write_sync"></A>
-<H2><BR><B>Write Sync Function</B></H2>
-
-<PRE>
-      void  sf_write_sync  (SNDFILE *sndfile) ;
-</PRE>
-<!-- pepper -->
-<P>
-If the file is opened SFM_WRITE or SFM_RDWR, call the operating system's function
-to force the writing of all file cache buffers to disk. If the file is opened
-SFM_READ no action is taken.
-</P>
-<BR>
-
-
-<A NAME="read"></A>
-<H2><BR><B>File Read Functions (Items)</B></H2>
-
-<PRE>
-      sf_count_t  sf_read_short   (SNDFILE *sndfile, short *ptr, sf_count_t items) ;
-      sf_count_t  sf_read_int     (SNDFILE *sndfile, int *ptr, sf_count_t items) ;
-      sf_count_t  sf_read_float   (SNDFILE *sndfile, float *ptr, sf_count_t items) ;
-      sf_count_t  sf_read_double  (SNDFILE *sndfile, double *ptr, sf_count_t items) ;
-</PRE>
-
-<P>
-The file read items functions fill the array pointed to by ptr with the requested
-number of items. The items parameter must be an integer product of the number
-of channels or an error will occur.
-</P>
-<!-- pepper -->
-<P>
-It is important to note that the data type used by the calling program and the data
-format of the file do not need to be the same. For instance, it is possible to open
-a 16 bit PCM encoded WAV file and read the data using sf_read_float(). The library
-seamlessly converts between the two formats on-the-fly. See
-<A HREF="#note1">Note 1</A>.
-</P>
-<!-- pepper -->
-<P>
-The sf_read_XXXX functions return the number of items read.
-Unless the end of the file was reached during the read, the return value should
-equal the number of items requested.
-Attempts to read beyond the end of the file will not result in an error but will
-cause the sf_read_XXXX functions to return less than the number of items requested
-or 0 if already at the end of the file.
-</P>
-
-<A NAME="readf"></A>
-<H2><BR><B>File Read Functions (Frames)</B></H2>
-
-<PRE>
-      sf_count_t  sf_readf_short   (SNDFILE *sndfile, short *ptr, sf_count_t frames) ;
-      sf_count_t  sf_readf_int     (SNDFILE *sndfile, int *ptr, sf_count_t frames) ;
-      sf_count_t  sf_readf_float   (SNDFILE *sndfile, float *ptr, sf_count_t frames) ;
-      sf_count_t  sf_readf_double  (SNDFILE *sndfile, double *ptr, sf_count_t frames) ;
-</PRE>
-<!-- pepper -->
-<P>
-The file read frames functions fill the array pointed to by ptr with the requested
-number of frames of data. The array must be large enough to hold the product of
-frames and the number of channels.
-</P>
-
-<P><B>
-Care must be taken to ensure that there is enough space in the array pointed to by
-ptr, to take (frames * channels) number of items (shorts, ints, floats or doubles).
-</B></P>
-
-<P>
-The sf_readf_XXXX functions return the number of frames read.
-Unless the end of the file was reached during the read, the return value should equal
-the number of frames requested.
-Attempts to read beyond the end of the file will not result in an error but will cause
-the sf_readf_XXXX functions to return less than the number of frames requested or 0 if
-already at the end of the file.
-</P>
-
-<A NAME="write"></A>
-<H2><BR><B>File Write Functions (Items)</B></H2>
-
-<PRE>
-      sf_count_t  sf_write_short   (SNDFILE *sndfile, short *ptr, sf_count_t items) ;
-      sf_count_t  sf_write_int     (SNDFILE *sndfile, int *ptr, sf_count_t items) ;
-      sf_count_t  sf_write_float   (SNDFILE *sndfile, float *ptr, sf_count_t items) ;
-      sf_count_t  sf_write_double  (SNDFILE *sndfile, double *ptr, sf_count_t items) ;
-</PRE>
-
-<P>
-The file write items functions write the data in the array pointed to by ptr to the file.
-The items parameter must be an integer product of the number of channels or an error
-will occur.
-</P>
-<!-- pepper -->
-<P>
-It is important to note that the data type used by the calling program and the data
-format of the file do not need to be the same. For instance, it is possible to open
-a 16 bit PCM encoded WAV file and write the data using sf_write_float(). The library
-seamlessly converts between the two formats on-the-fly. See
-<A HREF="#note1">Note 1</A>.
-</P>
-<P>
-The sf_write_XXXX functions return the number of items written (which should be the
-same as the items parameter).
-</P>
-
-<A NAME="writef"></A>
-<H2><BR><B>File Write Functions (Frames)</B></H2>
-
-<PRE>
-      sf_count_t  sf_writef_short  (SNDFILE *sndfile, short *ptr, sf_count_t frames) ;
-      sf_count_t  sf_writef_int    (SNDFILE *sndfile, int *ptr, sf_count_t frames) ;
-      sf_count_t  sf_writef_float  (SNDFILE *sndfile, float *ptr, sf_count_t frames) ;
-      sf_count_t  sf_writef_double (SNDFILE *sndfile, double *ptr, sf_count_t frames) ;
-</PRE>
-
-<P>
-The file write frames functions write the data in the array pointed to by ptr to the file.
-The array must be large enough to hold the product of frames and the number of channels.
-</P>
-<P>
-The sf_writef_XXXX functions return the number of frames written (which should be the
-same as the frames parameter).
-</P>
-
-<A NAME="raw"></A>
-<H2><BR><B>Raw File Read and Write Functions</B></H2>
-<!-- pepper -->
-<PRE>
-      sf_count_t  sf_read_raw     (SNDFILE *sndfile, void *ptr, sf_count_t bytes) ;
-      sf_count_t  sf_write_raw    (SNDFILE *sndfile, void *ptr, sf_count_t bytes) ;
-</PRE>
-
-<P>
-<b>Note:</b> Unless you are writing an external decoder/encode that uses
-libsndfile to handle the file headers, you should not be using these
-functions.
-</P>
-
-<P>
-The raw read and write functions read raw audio data from the audio file (not to be
-confused with reading RAW header-less PCM files). The number of bytes read or written
-must always be an integer multiple of the number of channels multiplied by the number
-of bytes required to represent one sample from one channel.
-</P>
-<!-- pepper -->
-<P>
-The raw read and write functions return the number of bytes read or written (which
-should be the same as the bytes parameter).
-</P>
-
-<P>
-<B>
-Note : The result of using of both regular reads/writes and raw reads/writes on
-compressed file formats other than SF_FORMAT_ALAW and SF_FORMAT_ULAW is undefined.
-</B>
-</P>
-
-<p>
-See also : <a href="command.html#SFC_RAW_NEEDS_ENDSWAP">SFC_RAW_NEEDS_ENDSWAP</a>
-</p>
-
-<A NAME="string"></A>
-<H2><BR><B>Functions for Reading and Writing String Data</B></H2>
-
-
-<PRE>
-      const char* sf_get_string   (SNDFILE *sndfile, int str_type) ;
-      int         sf_set_string   (SNDFILE *sndfile, int str_type, const char* str) ;
-</PRE>
-
-<P>
-These functions allow strings to be set on files opened for write and to be
-retrieved from files opened for read where supported by the given file type.
-The <B>str_type</B> parameter can be any one of the following string types:
-</P>
-
-<PRE>
-          enum
-          {   SF_STR_TITLE,
-              SF_STR_COPYRIGHT,
-              SF_STR_SOFTWARE,
-              SF_STR_ARTIST,
-              SF_STR_COMMENT,
-              SF_STR_DATE,
-              SF_STR_ALBUM,
-              SF_STR_LICENSE,
-              SF_STR_TRACKNUMBER,
-              SF_STR_GENRE
-          } ;
-</PRE>
-
-<P>
-The sf_get_string() function returns the specified string if it exists and a
-NULL pointer otherwise.
-In addition to the string ids above, SF_STR_FIRST (== SF_STR_TITLE) and
-SF_STR_LAST (always the same as the highest numbers string id) are also
-available to allow iteration over all the available string ids.
-</P>
-
-<P>
-The sf_set_string() function sets the string data.
-It returns zero on success and non-zero on error.
-The error code can be converted to a string using sf_error_number().
-</P>
-
-
-<P>
-
-</P>
-
-<HR>
-
-<A NAME="note1"></A>
-<H2><BR><B>Note 1</B></H2>
-<!-- pepper -->
-<P>
-When converting between integer PCM formats of differing size (ie using sf_read_int()
-to read a 16 bit PCM encoded WAV file) libsndfile obeys one simple rule:
-</P>
-
-<P CLASS=indent_block>
-Whenever integer data is moved from one sized container to another sized container,
-the most significant bit in the source container will become the most significant bit
-in the destination container.
-</P>
-
-<P>
-When converting between integer data and floating point data, different rules apply.
-The default behaviour when reading floating point data (sf_read_float() or
-sf_read_double ()) from a file with integer data is normalisation. Regardless of
-whether data in the file is 8, 16, 24 or 32 bit wide, the data will be read as
-floating point data in the range [-1.0, 1.0]. Similarly, data in the range [-1.0, 1.0]
-will be written to an integer PCM file so that a data value of 1.0 will be the largest
-allowable integer for the given bit width. This normalisation can be turned on or off
-using the <A HREF="command.html">sf_command</A> interface.
-</P>
-
-<A NAME="note2"></A>
-<H2><BR><B>Note 2</B></H2>
-
-<P>
-Reading a file containg floating point data (allowable with WAV, AIFF, AU and other
-file formats) using integer read methods (sf_read_short() or sf_read_int()) can
-produce unexpected results.
-For instance the data in the file may have a maximum absolute value &lt; 1.0 which
-would mean that all sample values read from the file will be zero.
-In order to read these files correctly using integer read methods, it is recommended
-that you use the
-     <A HREF="command.html">sf_command</A>
-interface, a command of
-     <A HREF="command.html#SFC_SET_SCALE_FLOAT_INT_READ">SFC_SET_SCALE_FLOAT_INT_READ</A>
-and a parameter of SF_TRUE to force correct scaling.
-</P>
-<!-- pepper -->
-<HR>
-<!-- pepper -->
-<P>
-       The libsndfile home page is
-               <A HREF="http://www.mega-nerd.com/libsndfile/">here</A>.
-</P>
-<P>
-Version : 1.0.25
-</P>
-<!-- pepper -->
-<!-- pepper -->
-<!-- pepper -->
-<!-- pepper -->
-
-</BODY>
-</HTML>
diff --git a/libs/libsndfile/doc/bugs.html b/libs/libsndfile/doc/bugs.html
deleted file mode 100644 (file)
index 3a441fe..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-       <TITLE>
-       Bug Reporting
-       </TITLE>
-       <META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-       <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all">
-       <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print">
-</HEAD>
-
-<BODY>
-
-<CENTER>
-               <H1><B>Reporting Bugs in libsndfile</B></H1>
-</CENTER>
-<P>
-       Before even attempting to report a bug in libsndfile please make sure you have
-       read the
-               <A HREF="FAQ.html">Frequently Asked Questions</A>.
-       If you are having a problem writing code using libsndfile make sure you read
-       the
-               <A HREF="api.html">Application Programming Interface</A>
-       documentation.
-</P>
-<P>
-       That said, I am interested in finding and fixing all genuine bugs in libsndfile.
-       Bugs I want to fix include any of the following problems (and probably others) :
-</P>
-       <UL>
-       <LI>    Compilation problems on new platforms.
-       <LI>    Errors being detected during the `make check' process.
-       <LI>    Segmentation faults occuring inside libsndfile.
-       <LI>    libsndfile hanging when opening a file.
-       <LI>    Supported sound file types being incorrectly read or written.
-       <LI>    Omissions, errors or spelling mistakes in the documentation.
-       </UL>
-
-<P>
-       When submitting a bug report you must include :
-</P>
-       <UL>
-       <LI>    Your system (CPU and memory size should be enough).
-       <LI>    The operating system you are using.
-       <LI>    Whether you are using a package provided by your distribution or you
-                       compiled it youself.
-       <LI>    If you compiled it yourself, the compiler you are using. (Also make
-                       sure to run 'make check'.)
-       <LI>    A description of the problem.
-       <LI>    Information generated by the sndfile-info program (see next paragraph).
-       <LI>    If you are having problems with sndfile-play and ALSA on Linux, I will
-                       need information about your kernel, ALSA version, compiler version,
-                       whether you compiled the kernel/ALSA your self or installed from a
-                       package etc.
-       </UL>
-
-<P>
-       If libsndfile compiles and installs correctly but has difficulty reading a particular
-       file or type of file you should run the <B>sndfile-info</B> program (from the examples
-       directory of the libsndfile distribution) on the file. See
-               <A HREF="sndfile_info.html">here</A>
-       for an example of the use of the <B>sndfile-info</B> program.
-</P>
-<P>
-       Please do not send me a sound file which fails to open under libsndfile unless I
-       specifically ask you to. The above information should usually suffice for most
-       problems.
-</P>
-<P>
-       Once you have the above information you should submit a ticket on the libsnfile
-               <A HREF="https://github.com/erikd/libsndfile/issues">github issue tracker</A>.
-
-</P>
-</BODY>
-</HTML>
diff --git a/libs/libsndfile/doc/command.html b/libs/libsndfile/doc/command.html
deleted file mode 100644 (file)
index f2ed083..0000000
+++ /dev/null
@@ -1,1687 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-       <TITLE>
-       libsndfile : the sf_command function.
-       </TITLE>
-       <META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-       <!-- Another version at the bottom of the page.  -->
-       <META NAME="Description" CONTENT="The libsndfile API.">
-       <META NAME="Keywords"    CONTENT="WAV AIFF AU libsndfile sound audio dsp Linux">
-       <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all">
-       <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print">
-</HEAD>
-
-<BODY>
-
-<H1><B>sf_command</B></H1>
-<PRE>
-
-        int    sf_command (SNDFILE *sndfile, int cmd, void *data, int datasize) ;
-</PRE>
-<P>
-       This function allows the caller to retrieve information from or change aspects of the
-       library behaviour.
-       Examples include retrieving a string containing the library version or changing the
-       scaling applied to floating point sample data during read and write.
-       Most of these operations are performed on a per-file basis.
-</P>
-<P>
-       The cmd parameter is an integer identifier which is defined in &lt;sndfile.h&gt;.
-       All of the valid command identifiers have names beginning with "SFC_".
-       Data is passed to and returned from the library by use of a void pointer.
-       The library will not read or write more than datasize bytes from the void pointer.
-       For some calls no data is required in which case data should be NULL and datasize
-       may be used for some other purpose.
-</P>
-<P>
-       The available commands are as follows:
-</P>
-
-<CENTER>
-<TABLE BORDER="0" WIDTH="90%" CELLPADDING="4">
-<TR>
-       <TD><A HREF="#SFC_GET_LIB_VERSION">SFC_GET_LIB_VERSION</A></TD>
-       <TD>Retrieve the version of the library.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_GET_LOG_INFO">SFC_GET_LOG_INFO</A></TD>
-       <TD>Retrieve the internal per-file operation log.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_CALC_SIGNAL_MAX">SFC_CALC_SIGNAL_MAX</A></TD>
-       <TD>Calculate the measured maximum signal value.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_CALC_NORM_SIGNAL_MAX">SFC_CALC_NORM_SIGNAL_MAX</A></TD>
-       <TD>Calculate the measured normalised maximum signal value.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_CALC_MAX_ALL_CHANNELS">SFC_CALC_MAX_ALL_CHANNELS</A></TD>
-       <TD>Calculate the peak value for each channel.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_CALC_NORM_MAX_ALL_CHANNELS">SFC_CALC_NORM_MAX_ALL_CHANNELS</A></TD>
-       <TD>Calculate the normalised peak for each channel.</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_GET_SIGNAL_MAX">SFC_GET_SIGNAL_MAX</A></TD>
-       <TD>Retrieve the peak value for the file (as stored in the file header).</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_GET_MAX_ALL_CHANNELS">SFC_GET_MAX_ALL_CHANNELS</A></TD>
-       <TD>Retrieve the peak value for each channel  (as stored in the file header).</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_SET_NORM_FLOAT">SFC_SET_NORM_FLOAT</A></TD>
-       <TD>Modify the normalisation behaviour of the floating point reading and writing functions.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_SET_NORM_DOUBLE">SFC_SET_NORM_DOUBLE</A></TD>
-       <TD>Modify the normalisation behaviour of the double precision floating point reading and writing functions.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_GET_NORM_FLOAT">SFC_GET_NORM_FLOAT</A></TD>
-       <TD>Retrieve the current normalisation behaviour of the floating point reading and writing functions.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_GET_NORM_DOUBLE">SFC_GET_NORM_DOUBLE</A></TD>
-       <TD>Retrieve the current normalisation behaviour of the double precision floating point reading and writing functions.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_SET_SCALE_FLOAT_INT_READ">SFC_SET_SCALE_FLOAT_INT_READ</A></TD>
-       <TD>Set/clear the scale factor when integer (short/int) data is read from a file
-       containing floating point data.</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_SET_SCALE_INT_FLOAT_WRITE">SFC_SET_SCALE_INT_FLOAT_WRITE</A></TD>
-       <TD>Set/clear the scale factor when integer (short/int) data is written to a file
-       as floating point data.</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_GET_SIMPLE_FORMAT_COUNT">SFC_GET_SIMPLE_FORMAT_COUNT</A></TD>
-       <TD>Retrieve the number of simple formats supported by libsndfile.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_GET_SIMPLE_FORMAT">SFC_GET_SIMPLE_FORMAT</A></TD>
-       <TD>Retrieve information about a simple format.</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_GET_FORMAT_INFO">SFC_GET_FORMAT_INFO</A></TD>
-       <TD>Retrieve information about a major or subtype format.</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_GET_FORMAT_MAJOR_COUNT">SFC_GET_FORMAT_MAJOR_COUNT</A></TD>
-       <TD>Retrieve the number of major formats.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_GET_FORMAT_MAJOR">SFC_GET_FORMAT_MAJOR</A></TD>
-       <TD>Retrieve information about a major format type.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_GET_FORMAT_SUBTYPE_COUNT">SFC_GET_FORMAT_SUBTYPE_COUNT</A></TD>
-       <TD>Retrieve the number of subformats.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_GET_FORMAT_SUBTYPE">SFC_GET_FORMAT_SUBTYPE</A></TD>
-       <TD>Retrieve information about a subformat.</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_SET_ADD_PEAK_CHUNK">SFC_SET_ADD_PEAK_CHUNK</A></TD>
-       <TD>Switch the code for adding the PEAK chunk to WAV and AIFF files on or off.</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_UPDATE_HEADER_NOW">SFC_UPDATE_HEADER_NOW</A></TD>
-       <TD>Used when a file is open for write, this command will update the file
-               header to reflect the data written so far.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_SET_UPDATE_HEADER_AUTO">SFC_SET_UPDATE_HEADER_AUTO</A></TD>
-       <TD>Used when a file is open for write, this command will cause the file header
-               to be updated after each write to the file.</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_FILE_TRUNCATE">SFC_FILE_TRUNCATE</A></TD>
-       <TD>Truncate a file open for write or for read/write.</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_SET_RAW_START_OFFSET">SFC_SET_RAW_START_OFFSET</A></TD>
-       <TD>Change the data start offset for files opened up as SF_FORMAT_RAW.</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_SET_CLIPPING">SFC_SET_CLIPPING</A></TD>
-       <TD>Turn on/off automatic clipping when doing floating point to integer
-               conversion.</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_GET_CLIPPING">SFC_GET_CLIPPING</A></TD>
-       <TD>Retrieve current clipping setting.</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_GET_EMBED_FILE_INFO">SFC_GET_EMBED_FILE_INFO</A></TD>
-       <TD>Retrieve information about audio files embedded inside other files.</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_WAVEX_GET_AMBISONIC">SFC_GET_AMBISONIC</A></TD>
-       <TD>Test a WAVEX file for Ambisonic format</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_WAVEX_SET_AMBISONIC">SFC_SET_AMBISONIC</A></TD>
-       <TD>Modify a WAVEX header for Ambisonic format</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_SET_VBR_ENCODING_QUALITY">SFC_SET_VBR_ENCODING_QUALITY</A></TD>
-       <TD>Set the Variable Bit Rate encoding quality</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_SET_COMPRESSION_LEVEL">SFC_SET_COMPRESSION_LEVEL</A></TD>
-       <TD>Set the compression level.</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_RAW_NEEDS_ENDSWAP">SFC_RAW_NEEDS_ENDSWAP</a></td>
-       <TD>Determine if raw data needs endswapping</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_GET_BROADCAST_INFO">SFC_GET_BROADCAST_INFO</A></TD>
-       <TD>Retrieve the Broadcast Chunk info</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_SET_BROADCAST_INFO">SFC_SET_BROADCAST_INFO</A></TD>
-       <TD>Set the Broadcast Chunk info</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_SET_CART_INFO">SFC_SET_CART_INFO</A></TD>
-       <TD>Set the Cart Chunk info</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_GET_CART_INFO">SFC_GET_CART_INFO</A></TD>
-       <TD>Retrieve the Cart Chunk info</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_GET_LOOP_INFO">SFC_GET_LOOP_INFO</A></TD>
-       <TD>Get loop info</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_GET_INSTRUMENT">SFC_GET_INSTRUMENT</A></TD>
-       <TD>Get instrument info</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_SET_INSTRUMENT">SFC_SET_INSTRUMENT</A></TD>
-       <TD>Set instrument info</TD>
-</TR>
-
-
-
-<!--
-<TR>
-       <TD><A HREF="#add-dither">add dither</A></TD>
-       <TD>Add dither to output on write.</TD>
-</TR>
--->
-</TABLE>
-</CENTER>
-
-<BR><BR>
-
-<HR>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_LIB_VERSION"></A>
-<H2><BR><B>SFC_GET_LIB_VERSION</B></H2>
-<P>
-Retrieve the version of the library as a string.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : Not used
-        cmd      : SFC_GET_LIB_VERSION
-        data     : A pointer to a char buffer
-        datasize : The size of the the buffer
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        char  buffer [128] ;
-        sf_command (NULL, SFC_GET_LIB_VERSION, buffer, sizeof (buffer)) ;
-</PRE>
-
-<DL>
-<DT>Return value:</DT>
-       <DD><DD>This call will return the length of the retrieved version string.
-</DL>
-<DL>
-<DT>Notes:</DT>
-<DD>
-The string returned in the buffer passed to this function will not overflow
-the buffer and will always be null terminated .
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_LOG_INFO"></A>
-<H2><BR><B>SFC_GET_LOG_INFO</B></H2>
-<P>
-Retrieve the log buffer generated when opening a file as a string. This log
-buffer can often contain a good reason for why libsndfile failed to open a
-particular file.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_GET_LOG_INFO
-        data     : A pointer to a char buffer
-        datasize : The size of the the buffer
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        char  buffer [2048] ;
-        sf_command (sndfile, SFC_GET_LOG_INFO, buffer, sizeof (buffer)) ;
-</PRE>
-
-<DL>
-<DT>Return value:</DT>
-       <DD><DD>This call will return the length of the retrieved version string.
-</DL>
-<DL>
-<DT>Notes:</DT>
-<DD>
-The string returned in the buffer passed to this function will not overflow
-the buffer and will always be null terminated .
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_CALC_SIGNAL_MAX"></A>
-<H2><BR><B>SFC_CALC_SIGNAL_MAX</B></H2>
-<P>
-Retrieve the measured maximum signal value. This involves reading through
-the whole file which can be slow on large files.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_CALC_SIGNAL_MAX
-        data     : A pointer to a double
-        datasize : sizeof (double)
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        double   max_val ;
-        sf_command (sndfile, SFC_CALC_SIGNAL_MAX, &amp;max_val, sizeof (max_val)) ;
-</PRE>
-
-<DL>
-<DT>Return value:</DT>
-       <DD><DD>Zero on success, non-zero otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_CALC_NORM_SIGNAL_MAX"></A>
-<H2><BR><B>SFC_CALC_NORM_SIGNAL_MAX</B></H2>
-<P>
-Retrieve the measured normalised maximum signal value. This involves reading
-through the whole file which can be slow on large files.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_CALC_NORM_SIGNAL_MAX
-        data     : A pointer to a double
-        datasize : sizeof (double)
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        double   max_val ;
-        sf_command (sndfile, SFC_CALC_NORM_SIGNAL_MAX, &amp;max_val, sizeof (max_val)) ;
-</PRE>
-
-<DL>
-<DT>Return value:</DT>
-       <DD><DD>Zero on success, non-zero otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_CALC_MAX_ALL_CHANNELS"></A>
-<H2><BR><B>SFC_CALC_MAX_ALL_CHANNELS</B></H2>
-<P>
-Calculate the peak value (ie a single number) for each channel.
-This involves reading through the whole file which can be slow on large files.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_CALC_MAX_ALL_CHANNELS
-        data     : A pointer to a double
-        datasize : sizeof (double) * number_of_channels
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        double   peaks [number_of_channels] ;
-        sf_command (sndfile, SFC_CALC_MAX_ALL_CHANNELS, peaks, sizeof (peaks)) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-       <DD>Zero if peaks have been calculated successfully and non-zero otherwise.
-</DL>
-
-
-<!-- ========================================================================= -->
-<A NAME="SFC_CALC_NORM_MAX_ALL_CHANNELS"></A>
-<H2><BR><B>SFC_CALC_NORM_MAX_ALL_CHANNELS</B></H2>
-<P>
-Calculate the normalised peak for each channel.
-This involves reading through the whole file which can be slow on large files.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_CALC_NORM_MAX_ALL_CHANNELS
-        data     : A pointer to a double
-        datasize : sizeof (double) * number_of_channels
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        double   peaks [number_of_channels] ;
-        sf_command (sndfile, SFC_CALC_NORM_MAX_ALL_CHANNELS, peaks, sizeof (peaks)) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-       <DD>Zero if peaks have been calculated successfully and non-zero otherwise.
-</DL>
-
-
-
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_SIGNAL_MAX"></A>
-<H2><BR><B>SFC_GET_SIGNAL_MAX</B></H2>
-<P>
-Retrieve the peak value for the file as stored in the file header.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_GET_SIGNAL_MAX
-        data     : A pointer to a double
-        datasize : sizeof (double)
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        double   max_peak ;
-        sf_command (sndfile, SFC_GET_SIGNAL_MAX, &amp;max_peak, sizeof (max_peak)) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-       <DD>SF_TRUE if the file header contained the peak value. SF_FALSE otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_MAX_ALL_CHANNELS"></A>
-<H2><BR><B>SFC_GET_MAX_ALL_CHANNELS</B></H2>
-<P>
-Retrieve the peak value for the file as stored in the file header.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_GET_SIGNAL_MAX
-        data     : A pointer to an array of doubles
-        datasize : sizeof (double) * number_of_channels
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        double   peaks [number_of_channels] ;
-        sf_command (sndfile, SFC_GET_MAX_ALL_CHANNELS, peaks, sizeof (peaks)) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-       <DD>SF_TRUE if the file header contains per channel peak values for the file.
-               SF_FALSE otherwise.
-</DL>
-
-
-<!-- ========================================================================= -->
-<A NAME="SFC_SET_NORM_FLOAT"></A>
-<H2><BR><B>SFC_SET_NORM_FLOAT</B></H2>
-<P>
-This command only affects data read from or written to using the floating point functions:
-</P>
-<PRE>
-       size_t    <A HREF="api.html#read">sf_read_float</A>    (SNDFILE *sndfile, float *ptr, size_t items) ;
-       size_t    <A HREF="api.html#readf">sf_readf_float</A>   (SNDFILE *sndfile, float *ptr, size_t frames) ;
-
-       size_t    <A HREF="api.html#write">sf_write_float</A>   (SNDFILE *sndfile, float *ptr, size_t items) ;
-       size_t    <A HREF="api.html#writef">sf_writef_float</A>  (SNDFILE *sndfile, float *ptr, size_t frames) ;
-</PRE>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_SET_NORM_FLOAT
-        data     : NULL
-        datasize : SF_TRUE or SF_FALSE
-</PRE>
-<P>
-For read operations setting normalisation to SF_TRUE means that the data from all
-subsequent reads will be be normalised to the range [-1.0, 1.0].
-</P>
-<P>
-For write operations, setting normalisation to SF_TRUE means than all data supplied
-to the float write functions should be in the range [-1.0, 1.0] and will be scaled
-for the file format as necessary.
-</P>
-<P>
-For both cases, setting normalisation to SF_FALSE means that no scaling will take place.
-</P>
-<P>
-Example:
-</P>
-<PRE>
-        sf_command (sndfile, SFC_SET_NORM_FLOAT, NULL, SF_TRUE) ;
-
-        sf_command (sndfile, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>Returns the previous float normalisation mode.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_SET_NORM_DOUBLE"></A>
-<H2><BR><B>SFC_SET_NORM_DOUBLE</B></H2>
-<P>
-This command only affects data read from or written to using the double precision
-floating point functions:
-</P>
-<PRE>
-       size_t    <A HREF="api.html#read">sf_read_double</A>    (SNDFILE *sndfile, double *ptr, size_t items) ;
-       size_t    <A HREF="api.html#readf">sf_readf_double</A>   (SNDFILE *sndfile, double *ptr, size_t frames) ;
-
-       size_t    <A HREF="api.html#write">sf_write_double</A>   (SNDFILE *sndfile, double *ptr, size_t items) ;
-       size_t    <A HREF="api.html#writef">sf_writef_double</A>  (SNDFILE *sndfile, double *ptr, size_t frames) ;
-</PRE>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_SET_NORM_DOUBLE
-        data     : NULL
-        datasize : SF_TRUE or SF_FALSE
-</PRE>
-<P>
-For read operations setting normalisation to SF_TRUE means that the data
-from all subsequent reads will be be normalised to the range [-1.0, 1.0].
-</P>
-<P>
-For write operations, setting normalisation to SF_TRUE means than all data supplied
-to the double write functions should be in the range [-1.0, 1.0] and will be scaled
-for the file format as necessary.
-</P>
-<P>
-For both cases, setting normalisation to SF_FALSE means that no scaling will take place.
-</P>
-<P>
-Example:
-</P>
-<PRE>
-        sf_command (sndfile, SFC_SET_NORM_DOUBLE, NULL, SF_TRUE) ;
-
-        sf_command (sndfile, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>Returns the previous double normalisation mode.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_NORM_FLOAT"></A>
-<H2><BR><B>SFC_GET_NORM_FLOAT</B></H2>
-<P>
-Retrieve the current float normalisation mode.
-</P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_GET_NORM_FLOAT
-        data     : NULL
-        datasize : anything
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        normalisation = sf_command (sndfile, SFC_GET_NORM_FLOAT, NULL, 0) ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>Returns TRUE if normalisation is on and FALSE otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_NORM_DOUBLE"></A>
-<H2><BR><B>SFC_GET_NORM_DOUBLE</B></H2>
-<P>
-Retrieve the current float normalisation mode.
-</P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_GET_NORM_DOUBLE
-        data     : NULL
-        datasize : anything
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        normalisation = sf_command (sndfile, SFC_GET_NORM_DOUBLE, NULL, 0) ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>Returns TRUE if normalisation is on and FALSE otherwise.
-</DL>
-
-
-<!-- ========================================================================= -->
-<A NAME="SFC_SET_SCALE_FLOAT_INT_READ"></A>
-<H2><BR><B>SFC_SET_SCALE_FLOAT_INT_READ</B></H2>
-<P>
-Set/clear the scale factor when integer (short/int) data is read from a file
-containing floating point data.
-</P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_SET_SCALE_FLOAT_INT_READ
-        data     : NULL
-        datasize : TRUE or FALSE
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        sf_command (sndfile, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>Returns the previous SFC_SET_SCALE_FLOAT_INT_READ setting for this file.
-</DL>
-
-
-<!-- ========================================================================= -->
-<A NAME="SFC_SET_SCALE_INT_FLOAT_WRITE"></A>
-<H2><BR><B>SFC_SET_SCALE_INT_FLOAT_WRITE</B></H2>
-<P>
-Set/clear the scale factor when integer (short/int) data is written to a file
-as floating point data.
-</P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_SET_SCALE_FLOAT_INT_READ
-        data     : NULL
-        datasize : TRUE or FALSE
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        sf_command (sndfile, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_TRUE) ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>Returns the previous SFC_SET_SCALE_INT_FLOAT_WRITE setting for this file.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_SIMPLE_FORMAT_COUNT"></A>
-<H2><BR><B>SFC_GET_SIMPLE_FORMAT_COUNT</B></H2>
-<P>
-Retrieve the number of simple formats supported by libsndfile.
-</P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : Not used.
-        cmd      : SFC_GET_SIMPLE_FORMAT_COUNT
-        data     : a pointer to an int
-        datasize : sizeof (int)
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        int  count ;
-        sf_command (sndfile, SFC_GET_SIMPLE_FORMAT_COUNT, &amp;count, sizeof (int)) ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>0
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_SIMPLE_FORMAT"></A>
-<H2><BR><B>SFC_GET_SIMPLE_FORMAT</B></H2>
-<P>
-Retrieve information about a simple format.
-</P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : Not used.
-        cmd      : SFC_GET_SIMPLE_FORMAT
-        data     : a pointer to an  SF_FORMAT_INFO struct
-        datasize : sizeof (SF_FORMAT_INFO)
-</PRE>
-<P>
-The SF_FORMAT_INFO struct is defined in &lt;sndfile.h&gt; as:
-</P>
-<PRE>
-        typedef struct
-        {   int         format ;
-            const char  *name ;
-            const char  *extension ;
-        } SF_FORMAT_INFO ;
-</PRE>
-<P>
-When sf_command() is called with SF_GET_SIMPLE_FORMAT, the value of the format
-field should be the format number (ie 0 &lt;= format &lt;= count value obtained using
-SF_GET_SIMPLE_FORMAT_COUNT).
-</P>
-<P>
-Example:
-</P>
-<PRE>
-        SF_FORMAT_INFO format_info ;
-        int             k, count ;
-
-        sf_command (sndfile, SFC_GET_SIMPLE_FORMAT_COUNT, &amp;count, sizeof (int)) ;
-
-        for (k = 0 ; k &lt; count ; k++)
-        {   format_info.format = k ;
-            sf_command (sndfile, SFC_GET_SIMPLE_FORMAT, &amp;format_info, sizeof (format_info)) ;
-            printf ("%08x  %s %s\n", format_info.format, format_info.name, format_info.extension) ;
-            } ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>0 on success and non-zero otherwise.
-       <DD>The value of the format field of the SF_FORMAT_INFO struct will be a value which
-               can be placed in the format field of an SF_INFO struct when a file is to be opened
-               for write.
-       <DD>The name field will contain a char* pointer to the name of the string, eg. "WAV (Microsoft 16 bit PCM)".
-       <DD>The extension field will contain the most commonly used file extension for that file type.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_FORMAT_INFO"></A>
-<H2><BR><B>SFC_GET_FORMAT_INFO</B></H2>
-<P>
-Retrieve information about a major or subtype format.
-</P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : Not used.
-        cmd      : SFC_GET_FORMAT_INFO
-        data     : a pointer to an SF_FORMAT_INFO struct
-        datasize : sizeof (SF_FORMAT_INFO)
-</PRE>
-<P>
-The SF_FORMAT_INFO struct is defined in &lt;sndfile.h&gt; as:
-</P>
-<PRE>
-        typedef struct
-        {   int         format ;
-            const char  *name ;
-            const char  *extension ;
-        } SF_FORMAT_INFO ;
-</PRE>
-<P>
-When sf_command() is called with SF_GET_FORMAT_INFO, the format field is
-examined and if (format &amp; SF_FORMAT_TYPEMASK) is a valid format then the struct
-is filled in with information about the given major type.
-If (format &amp; SF_FORMAT_TYPEMASK) is FALSE and (format &amp; SF_FORMAT_SUBMASK) is a
-valid subtype format then the struct is filled in with information about the given
-subtype.
-</P>
-<P>
-Example:
-</P>
-<PRE>
-        SF_FORMAT_INFO format_info ;
-
-        format_info.format = SF_FORMAT_WAV ;
-        sf_command (sndfile, SFC_GET_FORMAT_INFO, &amp;format_info, sizeof (format_info)) ;
-        printf ("%08x  %s %s\n", format_info.format, format_info.name, format_info.extension) ;
-
-        format_info.format = SF_FORMAT_ULAW ;
-        sf_command (sndfile, SFC_GET_FORMAT_INFO, &amp;format_info, sizeof (format_info)) ;
-        printf ("%08x  %s\n", format_info.format, format_info.name) ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>0 on success and non-zero otherwise.
-</DL>
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_FORMAT_MAJOR_COUNT"></A>
-<H2><BR><B>SFC_GET_FORMAT_MAJOR_COUNT</B></H2>
-<P>
-Retrieve the number of major formats.
-</P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : Not used.
-        cmd      : SFC_GET_FORMAT_MAJOR_COUNT
-        data     : a pointer to an int
-        datasize : sizeof (int)
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        int  count ;
-        sf_command (sndfile, SFC_GET_FORMAT_MAJOR_COUNT, &amp;count, sizeof (int)) ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>0
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_FORMAT_MAJOR"></A>
-<H2><BR><B>SFC_GET_FORMAT_MAJOR</B></H2>
-<P>
-Retrieve information about a major format type.
-</P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : Not used.
-        cmd      : SFC_GET_FORMAT_MAJOR
-        data     : a pointer to an  SF_FORMAT_INFO struct
-        datasize : sizeof (SF_FORMAT_INFO)
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        SF_FORMAT_INFO format_info ;
-        int             k, count ;
-
-        sf_command (sndfile, SFC_GET_FORMAT_MAJOR_COUNT, &amp;count, sizeof (int)) ;
-
-        for (k = 0 ; k &lt; count ; k++)
-        {   format_info.format = k ;
-            sf_command (sndfile, SFC_GET_FORMAT_MAJOR, &amp;format_info, sizeof (format_info)) ;
-            printf ("%08x  %s %s\n", format_info.format, format_info.name, format_info.extension) ;
-            } ;
-</PRE>
-<P>
-For a more comprehensive example, see the program list_formats.c in the examples/
-directory of the libsndfile source code distribution.
-</P>
-<DL>
-<DT>Return value: </DT>
-       <DD>0 on success and non-zero otherwise.
-       <DD>The value of the format field will be one of the major format identifiers such as
-               SF_FORMAT_WAV or SF_FORMAT_AIFF.
-       <DD>The name field will contain a char* pointer to the name of the string, eg. "WAV (Microsoft)".
-       <DD>The extension field will contain the most commonly used file extension for that file type.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_FORMAT_SUBTYPE_COUNT"></A>
-<H2><BR><B>SFC_GET_FORMAT_SUBTYPE_COUNT</B></H2>
-<P>
-Retrieve the number of subformats.
-</P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : Not used.
-        cmd      : SFC_GET_FORMAT_SUBTYPE_COUNT
-        data     : a pointer to an int
-        datasize : sizeof (int)
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        int   count ;
-        sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE_COUNT, &amp;count, sizeof (int)) ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>0
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_FORMAT_SUBTYPE"></A>
-<H2><BR><B>SFC_GET_FORMAT_SUBTYPE</B></H2>
-<P>
-Enumerate the subtypes (this function does not translate a subtype into
-a string describing that subtype).
-A typical use case might be retrieving a string description of all subtypes
-so that a dialog box can be filled in.
-</P>
-<P>
-
-</P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : Not used.
-        cmd      : SFC_GET_FORMAT_SUBTYPE
-        data     : a pointer to an SF_FORMAT_INFO struct
-        datasize : sizeof (SF_FORMAT_INFO)
-</PRE>
-<P>
-Example 1: Retrieve all sybtypes supported by the WAV format.
-</P>
-<PRE>
-        SF_FORMAT_INFO format_info ;
-        int             k, count ;
-
-        sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE_COUNT, &amp;count, sizeof (int)) ;
-
-        for (k = 0 ; k &lt; count ; k++)
-        {   format_info.format = k ;
-            sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE, &amp;format_info, sizeof (format_info)) ;
-            if (! sf_format_check (format_info.format | SF_FORMAT_WAV))
-               continue ;
-            printf ("%08x  %s\n", format_info.format, format_info.name) ;
-            } ;
-</PRE>
-<P>
-Example 2: Print a string describing the SF_FORMAT_PCM_16 subtype.
-</P>
-<PRE>
-        SF_FORMAT_INFO format_info ;
-        int             k, count ;
-
-        sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE_COUNT, &amp;count, sizeof (int)) ;
-
-        for (k = 0 ; k &lt; count ; k++)
-        {   format_info.format = k ;
-            sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE, &amp;format_info, sizeof (format_info)) ;
-            if (format_info.format == SF_FORMAT_PCM_16)
-            {   printf ("%08x  %s\n", format_info.format, format_info.name) ;
-                break ;
-                } ;
-            } ;
-</PRE>
-<P>
-For a more comprehensive example, see the program list_formats.c in the examples/
-directory of the libsndfile source code distribution.
-</P>
-<DL>
-<DT>Return value: </DT>
-       <DD>0 on success and non-zero otherwise.
-       <DD>The value of the format field will be one of the major format identifiers such as
-               SF_FORMAT_WAV or SF_FORMAT_AIFF.
-       <DD>The name field will contain a char* pointer to the name of the string; for instance
-               "WAV (Microsoft)" or "AIFF (Apple/SGI)".
-       <DD>The extension field will be a NULL pointer.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_SET_ADD_PEAK_CHUNK"></A>
-<H2><BR><B>SFC_SET_ADD_PEAK_CHUNK</B></H2>
-<P>
-By default, WAV and AIFF files which contain floating point data (subtype SF_FORMAT_FLOAT
-or SF_FORMAT_DOUBLE) have a PEAK chunk.
-By using this command, the addition of a PEAK chunk can be turned on or off.
-</P>
-<P>
-Note : This call must be made before any data is written to the file.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_SET_ADD_PEAK_CHUNK
-        data     : Not used (should be NULL)
-        datasize : TRUE or FALSE.
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        /* Turn on the PEAK chunk. */
-        sf_command (sndfile, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_TRUE) ;
-
-        /* Turn off the PEAK chunk. */
-        sf_command (sndfile, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-<DD>Returns SF_TRUE if the peak chunk will be written after this call.
-<DD>Returns SF_FALSE if the peak chunk will not be written after this call.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_UPDATE_HEADER_NOW"></A>
-<H2><BR><B>SFC_UPDATE_HEADER_NOW</B></H2>
-<P>
-The header of an audio file is normally written by libsndfile when the file is
-closed using <B>sf_close()</B>.
-</P>
-<P>
-There are however situations where large files are being generated and it would
-be nice to have valid data in the header before the file is complete.
-Using this command will update the file header to reflect the amount of data written
-to the file so far.
-Other programs opening the file for read (before any more data is written) will
-then read a valid sound file header.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_UPDATE_HEADER_NOW
-        data     : Not used (should be NULL)
-        datasize : Not used.
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        /* Update the header now. */
-        sf_command (sndfile, SFC_UPDATE_HEADER_NOW, NULL, 0) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-<DD>0
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_SET_UPDATE_HEADER_AUTO"></A>
-<H2><BR><B>SFC_SET_UPDATE_HEADER_AUTO</B></H2>
-<P>
-Similar to SFC_UPDATE_HEADER_NOW but updates the header at the end of every call
-to the <B>sf_write*</B> functions.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_UPDATE_HEADER_NOW
-        data     : Not used (should be NULL)
-        datasize : SF_TRUE or SF_FALSE
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        /* Turn on auto header update. */
-        sf_command (sndfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
-
-        /* Turn off auto header update. */
-        sf_command (sndfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_FALSE) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-<DD>TRUE if auto update header is now on; FALSE otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_FILE_TRUNCATE"></A>
-<H2><BR><B>SFC_FILE_TRUNCATE</B></H2>
-<P>
-Truncate a file that was opened for write or read/write.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_FILE_TRUNCATE
-        data     : A pointer to an sf_count_t.
-        datasize : sizeof (sf_count_t)
-</PRE>
-
-<P>
-Truncate the file to the number of frames specified by the sf_count_t pointed
-to by data.
-After this command, both the read and the write pointer will be
-at the new end of the file.
-This command will fail (returning non-zero) if the requested truncate position
-is beyond the end of the file.
-</P>
-<P>
-Example:
-</P>
-<PRE>
-        /* Truncate the file to a length of 20 frames. */
-        sf_count_t  frames = 20 ;
-        sf_command (sndfile, SFC_FILE_TRUNCATE, &amp;frames, sizeof (frames)) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-       <DD>Zero on sucess, non-zero otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_SET_RAW_START_OFFSET"></A>
-<H2><BR><B>SFC_SET_RAW_START_OFFSET</B></H2>
-<P>
-Change the data start offset for files opened up as SF_FORMAT_RAW.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_SET_RAW_START_OFFSET
-        data     : A pointer to an sf_count_t.
-        datasize : sizeof (sf_count_t)
-</PRE>
-
-<P>
-For a file opened as format SF_FORMAT_RAW, set the data offset to the value
-given by data.
-</P>
-<P>
-Example:
-</P>
-<PRE>
-        /* Reset the data offset to 5 bytes from the start of the file. */
-        sf_count_t  offset = 5 ;
-        sf_command (sndfile, SFC_SET_RAW_START_OFFSET, &amp;offset, sizeof (offset)) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-       <DD>Zero on success, non-zero otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_SET_CLIPPING"></A>
-<H2><BR><B>SFC_SET_CLIPPING</B></H2>
-<P>
-Turn on/off automatic clipping when doing floating point to integer conversion.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_SET_CLIPPING
-        data     : NULL
-        datasize : SF_TRUE or SF_FALSE.
-</PRE>
-
-<P>
-Turn on (datasize == SF_TRUE) or off (datasize == SF_FALSE) clipping.
-</P>
-<P>
-Example:
-</P>
-<PRE>
-        sf_command (sndfile, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-       <DD>Clipping mode (SF_TRUE or SF_FALSE).
-</DL>
-
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_CLIPPING"></A>
-<H2><BR><B>SFC_GET_CLIPPING</B></H2>
-<P>
-Turn on/off automatic clipping when doing floating point to integer conversion.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_GET_CLIPPING
-        data     : NULL
-        datasize : 0
-</PRE>
-
-<P>
-Retrieve the current cliiping setting.
-</P>
-<P>
-Example:
-</P>
-<PRE>
-        sf_command (sndfile, SFC_GET_CLIPPING, NULL, 0) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-       <DD>Clipping mode (SF_TRUE or SF_FALSE).
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_EMBED_FILE_INFO"></A>
-<H2><BR><B>SFC_GET_EMBED_FILE_INFO</B></H2>
-<P>
-Get the file offset and file length of a file enbedded within another
-larger file.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_GET_CLIPPING
-        data     : a pointer to an  SF_EMBED_FILE_INFO struct
-        datasize : sizeof (SF_EMBED_FILE_INFO)
-</PRE>
-<P>
-The SF_EMBED_FILE_INFO struct is defined in &lt;sndfile.h&gt; as:
-</P>
-<PRE>
-        typedef struct
-        {   sf_count_t offset ;
-            sf_count_t length ;
-        } SF_EMBED_FILE_INFO ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>0 on success and non-zero otherwise.
-       <DD>The value of the offset field of the SF_EMBED_FILE_INFO struct will be
-               the offsets in bytes from the start of the outer file to the start of
-               the audio file.
-       <DD>The value of the offset field of the SF_EMBED_FILE_INFO struct will be
-               the length in bytes of the embedded file.
-</DL>
-
-
-
-<!-- ========================================================================= -->
-<A NAME="SFC_WAVEX_GET_AMBISONIC"></A>
-<H2><BR><B>SFC_WAVEX_GET_AMBISONIC</B></H2>
-<P>
-Test if the current file has the GUID of a WAVEX file for any of the Ambisonic
-formats.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_WAVEX_GET_AMBISONIC
-        data     : NULL
-        datasize : 0
-</PRE>
-<P>
-       The Ambisonic WAVEX formats are defined here :
-               <A HREF="http://dream.cs.bath.ac.uk/researchdev/wave-ex/bformat.html">
-                       http://dream.cs.bath.ac.uk/researchdev/wave-ex/bformat.html</A>.
-</P>
-<DL>
-<DT>Return value: </DT>
-       <DD>SF_AMBISONIC_NONE or SF_AMBISONIC_B_FORMAT or zero if the file format
-               does not support ambisonic formats.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_WAVEX_SET_AMBISONIC"></A>
-<H2><BR><B>SFC_WAVEX_SET_AMBISONIC</B></H2>
-<P>
-Set the GUID of a new WAVEX file to indicate an Ambisonics format.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_WAVEX_SET_AMBISONIC
-        data     : NULL
-        datasize : SF_AMBISONIC_NONE or SF_AMBISONIC_B_FORMAT
-</PRE>
-<P>
-Turn on (SF_AMBISONIC_B_FORMAT) or off (SF_AMBISONIC_NONE) encoding.
-This command is currently only supported for files with SF_FORMAT_WAVEX format.
-</P>
-<P>
-       The Ambisonic WAVEX formats are defined here :
-               <A HREF="http://dream.cs.bath.ac.uk/researchdev/wave-ex/bformat.html">
-                       http://dream.cs.bath.ac.uk/researchdev/wave-ex/bformat.html</A>.
-</P>
-<DL>
-<DT>Return value: </DT>
-       <DD>Return the ambisonic value that has just been set or zero if the file
-               format does not support ambisonic encoding.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_SET_VBR_ENCODING_QUALITY"></A>
-<H2><BR><B>SFC_SET_VBR_ENCODING_QUALITY</B></H2>
-<P>
-Set the Variable Bit Rate encoding quality.
-The encoding quality value should be between 0.0 (lowest quality) and 1.0
-(highest quality).
-Currenly this command is only implemented for FLAC and Ogg/Vorbis files.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_SET_VBR_ENCODING_QUALITY
-        data     : A pointer to a double value
-        datasize : sizeof (double)
-</PRE>
-<P>
-The command must be sent before any audio data is written to the file.
-</P>
-<P>
-</P>
-<DL>
-<DT>Return value:</DT>
-       <dd>SF_TRUE if VBR encoding quality was set.
-    SF_FALSE otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_SET_COMPRESSION_LEVEL"></A>
-<H2><BR><B>SFC_SET_COMPRESSION_LEVEL</B></H2>
-<P>
-Set the compression level.
-The compression level should be between 0.0 (minimum compression level) and 1.0
-(highest compression level).
-Currenly this command is only implemented for FLAC and Ogg/Vorbis files.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_SET_COMPRESSION_LEVEL
-        data     : A pointer to a double value
-        datasize : sizeof (double)
-</PRE>
-<P>
-The command must be sent before any audio data is written to the file.
-</P>
-<P>
-</P>
-<DL>
-<DT>Return value:</DT>
-       <dd>SF_TRUE if compression level was set.
-    SF_FALSE otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_RAW_NEEDS_ENDSWAP"></A>
-<H2><BR><B>SFC_RAW_NEEDS_ENDSWAP</B></H2>
-<P>
-Determine if raw data read using
-       <a href="api.html#raw">
-       sf_read_raw</a>
-needs to be end swapped on the host CPU.
-</P>
-<P>
-For instance, will return SF_TRUE on when reading WAV containing
-SF_FORMAT_PCM_16 data on a big endian machine and SF_FALSE on a little endian
-machine.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_RAW_NEEDS_ENDSWAP
-        data     : NULL
-        datasize : 0
-</PRE>
-
-<DL>
-<DT>Return value: </DT>
-       <DD>SF_TRUE or SF_FALSE
-</DL>
-
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_BROADCAST_INFO"></A>
-<H2><BR><B>SFC_GET_BROADCAST_INFO</B></H2>
-<P>
-Retrieve the Broadcast Extension Chunk from WAV (and related) files.
-</P>
-<p>
-Parameters:
-</p>
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_GET_BROADCAST_INFO
-        data     : a pointer to an SF_BROADCAST_INFO struct
-        datasize : sizeof (SF_BROADCAST_INFO)
-</PRE>
-<P>
-The SF_BROADCAST_INFO struct is defined in &lt;sndfile.h&gt; as:
-</P>
-<PRE>
-    typedef struct
-    {   char            description [256] ;
-        char            originator [32] ;
-        char            originator_reference [32] ;
-        char            origination_date [10] ;
-        char            origination_time [8] ;
-        unsigned int    time_reference_low ;
-        unsigned int    time_reference_high ;
-        short           version ;
-        char            umid [64] ;
-        char            reserved [190] ;
-        unsigned int    coding_history_size ;
-        char            coding_history [256] ;
-    } SF_BROADCAST_INFO ;
-</PRE>
-
-<DL>
-<DT>Return value: </DT>
-       <DD>SF_TRUE if the file contained a Broadcast Extension chunk or SF_FALSE
-       otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_SET_BROADCAST_INFO"></A>
-<H2><BR><B>SFC_SET_BROADCAST_INFO</B></H2>
-<P>
-Set the Broadcast Extension Chunk for WAV (and related) files.
-</P>
-<p>
-Parameters:
-</p>
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_SET_BROADCAST_INFO
-        data     : a pointer to an SF_BROADCAST_INFO struct
-        datasize : sizeof (SF_BROADCAST_INFO)
-</PRE>
-
-<DL>
-<DT>Return value: </DT>
-       <DD>SF_TRUE if setting the Broadcast Extension chunk was successful and SF_FALSE
-       otherwise.
-
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_CART_INFO"></A>
-<H2><BR><B>SFC_GET_CART_INFO</B></H2>
-<P>Retrieve the Cart Chunk from WAV (and related) files.  Based on AES46 standard for CartChunk (see <a href="http://www.cartchunk.org/">CartChunk.org</a> for more information.
-</P>
-<p>
-Parameters:
-</p>
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_GET_CART_INFO
-        data     : a pointer to an SF_CART_INFO struct
-        datasize : sizeof (SF_CART_INFO)
-</PRE>
-<P>
-The SF_CART_INFO struct is defined in &lt;sndfile.h&gt; as:
-</P>
-<PRE>
-#define SF_CART_INFO_VAR(p_tag_text_size) \
-                        struct
-                        {       char            version [4] ;
-                                char            title [64] ;
-                                char            artist [64] ;
-                                char            cut_id [64] ;
-                                char            client_id [64] ;
-                                char            category [64] ;
-                                char            classification [64] ;
-                                char            out_cue [64] ;
-                                char            start_date [10] ;
-                                char            start_time [8] ;
-                                char            end_date [10] ;
-                                char            end_time [8] ;
-                                char            producer_app_id [64] ;
-                                char            producer_app_version [64] ;
-                                char            user_def [64] ;
-                                long    level_reference ;
-                                SF_CART_TIMER   post_timers [8] ;
-                                char            reserved [276] ;
-                                char            url [1024] ;
-                                unsigned int    tag_text_size ;
-                                char            tag_text[p_tag_text_size] ;
-                        }
-</PRE>
-
-<DL>
-<DT>Return value: </DT>
-       <DD>SF_TRUE if the file contained a Cart chunk or SF_FALSE
-       otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_SET_CART_INFO"></A>
-<H2><BR><B>SFC_SET_CART_INFO</B></H2>
-<P>
-Set the Cart Chunk for WAV (and related) files.
-</P>
-<p>
-Parameters:
-</p>
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_SET_CART_INFO
-        data     : a pointer to an SF_CART_INFO struct
-        datasize : sizeof (SF_CART_INFO)
-</PRE>
-
-<DL>
-<DT>Return value: </DT>
-       <DD>SF_TRUE if setting the Cart chunk was successful and SF_FALSE
-       otherwise.
-</DL>
-<!-- ========================================================================= -->
-
-<A NAME="SFC_GET_LOOP_INFO"></A>
-<H2><BR><B>SFC_GET_LOOP_INFO</B></H2>
-<P>
-Retrieve loop information for file including time signature, length in
-beats and original MIDI base note
-</P>
-<p>
-Parameters:
-</p>
-<PRE>
-         sndfile  : A valid SNDFILE* pointer
-         cmd      : SFC_GET_LOOP_INFO
-         data     : a pointer to an SF_LOOP_INFO struct
-         datasize : sizeof (SF_LOOP_INFO)
-</PRE>
-<P>
-The SF_BROADCAST_INFO struct is defined in &lt;sndfile.h&gt; as:
-</P>
-<PRE>
-        typedef struct
-        {   short    time_sig_num ;   /* any positive integer    > 0  */
-            short    time_sig_den ;   /* any positive power of 2 > 0  */
-            int        loop_mode ;    /* see SF_LOOP enum             */
-
-            int        num_beats ;    /* this is NOT the amount of quarter notes !!!*/
-                                      /* a full bar of 4/4 is 4 beats */
-                                      /* a full bar of 7/8 is 7 beats */
-
-            float    bpm ;            /* suggestion, as it can be calculated using other fields:*/
-                                      /* file's lenght, file's sampleRate and our time_sig_den*/
-                                      /* -> bpms are always the amount of _quarter notes_ per minute */
-
-            int    root_key ;         /* MIDI note, or -1 for None */
-            int future [6] ;
-        } SF_LOOP_INFO ;
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-         SF_LOOP_INFO loop;
-         sf_command (sndfile, SFC_GET_LOOP_INFO, &amp;loop, sizeof (loop)) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-       <DD>SF_TRUE if the file header contains loop information for the file.
-    SF_FALSE otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-
-
-<A NAME="SFC_GET_INSTRUMENT"></A>
-<H2><BR><B>SFC_GET_INSTRUMENT</B></H2>
-<P>
-Retrieve instrument information from file including MIDI base note,
-keyboard mapping and looping informations(start/stop and mode).
-</P>
-<p>
-Parameters:
-</p>
-<PRE>
-         sndfile  : A valid SNDFILE* pointer
-         cmd      : SFC_GET_INSTRUMENT
-         data     : a pointer to an SF_INSTRUMENT struct
-         datasize : sizeof (SF_INSTRUMENT)
-</PRE>
-
-<P>
-The SF_INSTRUMENT struct is defined in &lt;sndfile.h&gt; as:
-</P>
-<PRE>
-        enum
-        {    /*
-            **    The loop mode field in SF_INSTRUMENT will be one of the following.
-            */
-            SF_LOOP_NONE = 800,
-            SF_LOOP_FORWARD,
-            SF_LOOP_BACKWARD,
-            SF_LOOP_ALTERNATING
-        } ;
-
-        typedef struct
-        {   int gain ;
-            char basenote, detune ;
-            char velocity_lo, velocity_hi ;
-            char key_lo, key_hi ;
-            int loop_count ;
-
-            struct
-            {   int mode ;
-                unsigned int start ;
-                unsigned int end ;
-                unsigned int count ;
-            } loops [16] ; /* make variable in a sensible way */
-        } SF_INSTRUMENT ;
-</PRE>
-
-<P>
-Example:
-</P>
-<PRE>
-         SF_INSTRUMENT inst ;
-         sf_command (sndfile, SFC_GET_INSTRUMENT, &amp;inst, sizeof (inst)) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-       <dd>SF_TRUE if the file header contains instrument information for the
-    file. SF_FALSE otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-
-
-<A NAME="SFC_SET_INSTRUMENT"></A>
-<H2><BR><B>SFC_SET_INSTRUMENT</B></H2>
-<P>
-Set the instrument information for the file.
-</P>
-<p>
-Parameters:
-</p>
-<PRE>
-         sndfile  : A valid SNDFILE* pointer
-         cmd      : SFC_GET_INSTRUMENT
-         data     : a pointer to an SF_INSTRUMENT struct
-         datasize : sizeof (SF_INSTRUMENT)
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-         SF_INSTRUMENT inst ;
-         sf_command (sndfile, SFC_SET_INSTRUMENT, &amp;inst, sizeof (inst)) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-       <dd>SF_TRUE if the file header contains instrument information for the
-    file. SF_FALSE otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-
-
-<HR>
-<P>
-       The libsndfile home page is here :
-               <A HREF="http://www.mega-nerd.com/libsndfile/">
-                       http://www.mega-nerd.com/libsndfile/</A>.
-<BR>
-Version : 1.0.25
-</P>
-
-</BODY>
-</HTML>
diff --git a/libs/libsndfile/doc/development.html b/libs/libsndfile/doc/development.html
deleted file mode 100644 (file)
index 4236cdb..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-       <TITLE>
-       libsndfile Development
-       </TITLE>
-       <META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-       <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all">
-       <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print">
-</HEAD>
-
-<BODY>
-<!-- pepper -->
-<H1><BR>libsndfile Development</H1>
-<!-- pepper -->
-<P>
-libsndfile is being developed by a small but growing community of users
-and hackers led by Erik de Castro Lopo.
-People interested in helping should join the libsndfile-devel
-       <A HREF="lists.html">mailing list</A>
-where most of the discussion about new features takes place.
-</P>
-<!-- pepper -->
-<P>
-The main repository can be found on Github:
-</P>
-<!-- pepper -->
-<center>
-<A HREF="https://github.com/erikd/libsndfile/">
-                       https://github.com/erikd/libsndfile/</A>
-</center>
-<!-- pepper -->
-<P>
-and includes
-       <a href="https://github.com/erikd/libsndfile/blob/master/README.md">
-       instuctions</a>
-on how to build libsndfilefrom the Git repo.
-</P>
-<!-- pepper -->
-</BODY>
-</HTML>
-
diff --git a/libs/libsndfile/doc/dither.html b/libs/libsndfile/doc/dither.html
deleted file mode 100644 (file)
index 01a416f..0000000
+++ /dev/null
@@ -1,1017 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-       <TITLE>
-       libsndfile : the sf_command function.
-       </TITLE>
-       <META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-       <!-- Another version at the bottom of the page.  -->
-       <META NAME="Description" CONTENT="The libsndfile API.">
-       <META NAME="Keywords"    CONTENT="WAV AIFF AU libsndfile sound audio dsp Linux">
-       <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all">
-       <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print">
-</HEAD>
-
-<BODY>
-
-<H1><B>sf_command</B></H1>
-<PRE>
-
-        int    sf_command (SNDFILE *sndfile, int cmd, void *data, int datasize) ;
-</PRE>
-<P>
-       This function allows the caller to retrieve information from or change aspects of the 
-       library behaviour. 
-       Examples include retrieving a string containing the library version or changing the 
-       scaling applied to floating point sample data during read and write.
-       Most of these operations are performed on a per-file basis.
-</P>
-<P>
-       The cmd parameter is a integer identifier which is defined in &lt;sndfile.h&gt;.
-       All of the valid command identifiers have names begining with "SFC_".
-       Data is passed to and returned from the library by use of a void pointer. 
-       The library will not read or write more than datasize bytes from the void pointer. 
-       For some calls no data is required in which case data should be NULL and datasize 
-       may be used for some other purpose.
-</P>
-<P>
-       The available commands are as follows:
-</P>
-
-<CENTER>
-<TABLE BORDER="0" WIDTH="90%" CELLPADDING="4">
-<TR>
-       <TD><A HREF="#SFC_GET_LIB_VERSION">SFC_GET_LIB_VERSION</A></TD>
-       <TD>Retrieve the version of the library.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_GET_LOG_INFO">SFC_GET_LOG_INFO</A></TD>
-       <TD>Retrieve the internal per-file operation log.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_CALC_SIGNAL_MAX">SFC_CALC_SIGNAL_MAX</A></TD>
-       <TD>Retrieve the measured maximum signal value.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_CALC_NORM_SIGNAL_MAX">SFC_CALC_NORM_SIGNAL_MAX</A></TD>
-       <TD>Retrieve the measured normalised maximum signal value.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_CALC_MAX_ALL_CHANNELS">SFC_CALC_MAX_ALL_CHANNELS</A></TD>
-       <TD>Calculate peaks for all channels.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_CALC_NORM_MAX_ALL_CHANNELS">SFC_CALC_NORM_MAX_ALL_CHANNELS</A></TD>
-       <TD>Calculate normalised peaks for all channels.</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_SET_NORM_FLOAT">SFC_SET_NORM_FLOAT</A></TD>
-       <TD>Modify the normalisation behaviour of the floating point reading and writing functions.</TD>
-</TR>
-<TR>   
-       <TD><A HREF="#SFC_SET_NORM_DOUBLE">SFC_SET_NORM_DOUBLE</A></TD>
-       <TD>Modify the normalisation behaviour of the double precision floating point reading and writing functions.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_GET_NORM_FLOAT">SFC_GET_NORM_FLOAT</A></TD>
-       <TD>Retrieve the current normalisation behaviour of the floating point reading and writing functions.</TD>
-</TR>
-<TR>   
-       <TD><A HREF="#SFC_GET_NORM_DOUBLE">SFC_GET_NORM_DOUBLE</A></TD>
-       <TD>Retrieve the current normalisation behaviour of the double precision floating point reading and writing functions.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_GET_SIMPLE_FORMAT_COUNT">SFC_GET_SIMPLE_FORMAT_COUNT</A></TD>
-       <TD>Retrieve the number of simple formats supported by libsndfile.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_GET_SIMPLE_FORMAT">SFC_GET_SIMPLE_FORMAT</A></TD>
-       <TD>Retrieve information about a simple format.</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_GET_FORMAT_INFO">SFC_GET_FORMAT_INFO</A></TD>
-       <TD>Retrieve information about a major or subtype format.</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_GET_FORMAT_MAJOR_COUNT">SFC_GET_FORMAT_MAJOR_COUNT</A></TD>
-       <TD>Retrieve the number of major formats.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_GET_FORMAT_MAJOR">SFC_GET_FORMAT_MAJOR</A></TD>
-       <TD>Retrieve information about a major format type.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_GET_FORMAT_SUBTYPE_COUNT">SFC_GET_FORMAT_SUBTYPE_COUNT</A></TD>
-       <TD>Retrieve the number of subformats.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_GET_FORMAT_SUBTYPE">SFC_GET_FORMAT_SUBTYPE</A></TD>
-       <TD>Retrieve information about a subformat.</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_SET_ADD_PEAK_CHUNK">SFC_SET_ADD_PEAK_CHUNK</A></TD>
-       <TD>Switch the code for adding the PEAK chunk to WAV and AIFF files on or off.</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_UPDATE_HEADER_NOW">SFC_UPDATE_HEADER_NOW</A></TD>
-       <TD>Used when a file is open for write, this command will update the file
-               header to reflect the data written so far.</TD>
-</TR>
-<TR>
-       <TD><A HREF="#SFC_SET_UPDATE_HEADER_AUTO">SFC_SET_UPDATE_HEADER_AUTO</A></TD>
-       <TD>Used when a file is open for write, this command will cause the file header
-               to be updated after each write to the file.</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_FILE_TRUNCATE">SFC_FILE_TRUNCATE</A></TD>
-       <TD>Truncate a file open for write or for read/write.</TD>
-</TR>
-
-<TR>
-       <TD><A HREF="#SFC_SET_RAW_START_OFFSET">SFC_SET_RAW_START_OFFSET</A></TD>
-       <TD>Change the data start offset for files opened up as SF_FORMAT_RAW.</TD>
-</TR>
-
-
-
-<!--
-<TR>
-       <TD><A HREF="#add-dither">add dither</A></TD>
-       <TD>Add dither to output on write.</TD>
-</TR>
--->
-</TABLE>       
-</CENTER>
-
-<BR><BR>
-
-<HR>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_LIB_VERSION"></A>
-<H2><BR><B>SFC_GET_LIB_VERSION</B></H2>
-<P>
-Retrieve the version of the library as a string.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : Not used
-        cmd      : SFC_GET_LIB_VERSION
-        data     : A pointer to a char buffer
-        datasize : The size of the the buffer
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        char  buffer [128] ;
-        sf_command (NULL, SFC_GET_LIB_VERSION, buffer, sizeof (buffer)) ;
-</PRE>
-
-<DL>
-<DT>Return value:</DT>
-       <DD><DD>This call will return the length of the retrieved version string.
-</DL>
-<DL>
-<DT>Notes:</DT>
-<DD>
-The string returned in the buffer passed to this function will not overflow
-the buffer and will always be null terminated .
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_LOG_INFO"></A>
-<H2><BR><B>SFC_GET_LOG_INFO</B></H2>
-<P>
-Retrieve the log buffer generated when opening a file as a string. This log
-buffer can often contain a good reason for why libsndfile failed to open a
-particular file.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_GET_LOG_INFO
-        data     : A pointer to a char buffer
-        datasize : The size of the the buffer
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        char  buffer [2048] ;
-        sf_command (sndfile, SFC_GET_LOG_INFO, buffer, sizeof (buffer)) ;
-</PRE>
-
-<DL>
-<DT>Return value:</DT>
-       <DD><DD>This call will return the length of the retrieved version string.
-</DL>
-<DL>
-<DT>Notes:</DT>
-<DD>
-The string returned in the buffer passed to this function will not overflow
-the buffer and will always be null terminated .
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_CALC_SIGNAL_MAX"></A>
-<H2><BR><B>SFC_CALC_SIGNAL_MAX</B></H2>
-<P>
-Retrieve the measured maximum signal value. This involves reading through
-the whole file which can be slow on large files.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_CALC_SIGNAL_MAX
-        data     : A pointer to a double
-        datasize : sizeof (double)
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        double   max_val ;
-        sf_command (sndfile, SFC_CALC_SIGNAL_MAX, &amp;max_val, sizeof (max_val)) ;
-</PRE>
-
-<DL>
-<DT>Return value:</DT>
-       <DD><DD>Zero on success, non-zero otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_CALC_NORM_SIGNAL_MAX"></A>
-<H2><BR><B>SFC_CALC_NORM_SIGNAL_MAX</B></H2>
-<P>
-Retrieve the measured normailised maximum signal value. This involves reading 
-through the whole file which can be slow on large files.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_CALC_NORM_SIGNAL_MAX
-        data     : A pointer to a double
-        datasize : sizeof (double)
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        double   max_val ;
-        sf_command (sndfile, SFC_CALC_NORM_SIGNAL_MAX, &amp;max_val, sizeof (max_val)) ;
-</PRE>
-
-<DL>
-<DT>Return value:</DT>
-       <DD><DD>Zero on success, non-zero otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_CALC_MAX_ALL_CHANNELS"></A>
-<H2><BR><B>SFC_CALC_MAX_ALL_CHANNELS</B></H2>
-<P>
-Calculate peaks for all channels. This involves reading through
-the whole file which can be slow on large files.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_CALC_MAX_ALL_CHANNELS
-        data     : A pointer to a double
-        datasize : sizeof (double) * number_of_channels
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        double   peaks [number_of_channels] ;
-        sf_command (sndfile, SFC_CALC_MAX_ALL_CHANNELS, peaks, sizeof (peaks)) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-       <DD>Zero if peaks have been calculated successfully and non-zero otherwise.
-</DL>
-
-
-<!-- ========================================================================= -->
-<A NAME="SFC_CALC_NORM_MAX_ALL_CHANNELS"></A>
-<H2><BR><B>SFC_CALC_NORM_MAX_ALL_CHANNELS</B></H2>
-<P>
-Calculate normalised peaks for all channels. This involves reading through
-the whole file which can be slow on large files.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_CALC_NORM_MAX_ALL_CHANNELS
-        data     : A pointer to a double
-        datasize : sizeof (double) * number_of_channels
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        double   peaks [number_of_channels] ;
-        sf_command (sndfile, SFC_CALC_NORM_MAX_ALL_CHANNELS, peaks, sizeof (peaks)) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-       <DD>Zero if peaks have been calculated successfully and non-zero otherwise.
-</DL>
-
-
-
-
-
-<!-- ========================================================================= -->
-<!--
-<A NAME="read-text"></A>
-<H2><BR><B>Read text</B></H2>
-<P>
-Many sound file formats contain allow the inclusion of a text string describing the nature
-of the file. If a file contains such a string, this functions will return it to the caller.
-</P>
-<P>
-It should be noted that the way the string is added to the file is file format dependant
-but that any string added with <A HREF="#write-text">write text</A> will be returned by 
-<A HREF="#read-text">read text</A>.
-</P>
-<P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : The text string "read text".
-        data     : A pointer to a char buffer.
-        datasize : The size of the the buffer.
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-       char  buffer [128] ;
-        sf_command (sndfile, "read text", buffer, sizeof (buffer)) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-<DD>If a text string is found, this call will return the length of the retrieved text 
-       string.
-       <DD>If no text string is found, zero will be returned and the first element in the 
-       buffer will be set to the null character.
-<DT>Notes:</DT>
-<DD>The string returned in the buffer passed to this function will not overflow
-       the buffer and will be correctly null terminated .
-</DL>
-
-<A NAME="write-text"></A>
-<H2><BR><B>Write text</B></H2>
-<P>
-Add a text string to a file. The text string added can be retrieved when the file is
-read using <A HREF="#read-text">read text</A>. 
-</P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : The text string "write text".
-        data     : A pointer to the string to be added.
-        datasize : Not used.
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-       char  text = "The sound of one hand clapping." ;
-        sf_command (sndfile, "write text", text, strlen (text)) ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>If the current file format allows the addition of text strings, the string will 
-               be added and the length of the string will be returned. 
-       <DD>If the file format does not allow the addition of text strings zero will be returned.
-       <DD>If this function is called after the file is openned but before 
-</DL>
--->
-
-
-<!-- ========================================================================= -->
-<A NAME="SFC_SET_NORM_FLOAT"></A>
-<H2><BR><B>SFC_SET_NORM_FLOAT</B></H2>
-<P>
-This command only affects data read from or written to using the floating point functions:
-</P>
-<PRE>
-       size_t    <A HREF="api.html#read">sf_read_float</A>    (SNDFILE *sndfile, float *ptr, size_t items) ;
-       size_t    <A HREF="api.html#readf">sf_readf_float</A>   (SNDFILE *sndfile, float *ptr, size_t frames) ;
-
-       size_t    <A HREF="api.html#write">sf_write_float</A>   (SNDFILE *sndfile, float *ptr, size_t items) ;
-       size_t    <A HREF="api.html#writef">sf_writef_float</A>  (SNDFILE *sndfile, float *ptr, size_t frames) ;
-</PRE>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_SET_NORM_FLOAT
-        data     : NULL
-        datasize : SF_TRUE or SF_FALSE
-</PRE>
-<P>
-For read operations setting normalisation to SF_TRUE means that the data from all 
-subsequent reads will be be normalised to the range [-1.0, 1.0].
-</P>
-<P>
-For write operations, setting normalisation to SF_TRUE means than all data supplied
-to the float write functions should be in the range [-1.0, 1.0] and will be scaled
-for the file format as necessary.
-</P>
-<P>
-For both cases, setting normalisation to SF_FALSE means that no scaling will take place.
-</P>
-<P>
-Example:
-</P>
-<PRE>
-        sf_command (sndfile, SFC_SET_NORM_FLOAT, NULL, SF_TRUE) ;
-
-        sf_command (sndfile, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>Returns 1 on success or 0 for failure.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_SET_NORM_DOUBLE"></A>
-<H2><BR><B>SFC_SET_NORM_DOUBLE</B></H2>
-<P>
-This command only affects data read from or written to using the double precision 
-floating point functions:
-</P>
-<PRE>
-       size_t    <A HREF="api.html#read">sf_read_double</A>    (SNDFILE *sndfile, double *ptr, size_t items) ;
-       size_t    <A HREF="api.html#readf">sf_readf_double</A>   (SNDFILE *sndfile, double *ptr, size_t frames) ;
-
-       size_t    <A HREF="api.html#write">sf_write_double</A>   (SNDFILE *sndfile, double *ptr, size_t items) ;
-       size_t    <A HREF="api.html#writef">sf_writef_double</A>  (SNDFILE *sndfile, double *ptr, size_t frames) ;
-</PRE>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_SET_NORM_DOUBLE
-        data     : NULL
-        datasize : SF_TRUE or SF_FALSE
-</PRE>
-<P>
-For read operations setting normalisation to SF_TRUE means that the data 
-from all subsequent reads will be be normalised to the range [-1.0, 1.0].
-</P>
-<P>
-For write operations, setting normalisation to SF_TRUE means than all data supplied
-to the double write functions should be in the range [-1.0, 1.0] and will be scaled
-for the file format as necessary.
-</P>
-<P>
-For both cases, setting normalisation to SF_FALSE means that no scaling will take place.
-</P>
-<P>
-Example:
-</P>
-<PRE>
-        sf_command (sndfile, SFC_SET_NORM_DOUBLE, NULL, SF_TRUE) ;
-
-        sf_command (sndfile, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>Returns 1 on success or 0 for failure.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_NORM_FLOAT"></A>
-<H2><BR><B>SFC_GET_NORM_FLOAT</B></H2>
-<P>
-Retrieve the current float normalisation mode.
-</P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_GET_NORM_FLOAT
-        data     : NULL
-        datasize : anything
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        normalisation = sf_command (sndfile, SFC_GET_NORM_FLOAT, NULL, 0) ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>Returns TRUE if normaisation is on and FALSE otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_NORM_DOUBLE"></A>
-<H2><BR><B>SFC_GET_NORM_DOUBLE</B></H2>
-<P>
-Retrieve the current float normalisation mode.
-</P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_GET_NORM_DOUBLE
-        data     : NULL
-        datasize : anything
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        normalisation = sf_command (sndfile, SFC_GET_NORM_DOUBLE, NULL, 0) ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>Returns TRUE if normalisation is on and FALSE otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_SIMPLE_FORMAT_COUNT"></A>
-<H2><BR><B>SFC_GET_SIMPLE_FORMAT_COUNT</B></H2>
-<P>
-Retrieve the number of simple formats supported by libsndfile.
-</P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : Not used.
-        cmd      : SFC_GET_SIMPLE_FORMAT_COUNT
-        data     : a pointer to an int
-        datasize : sizeof (int)
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        int  count ;
-        sf_command (sndfile, SFC_GET_SIMPLE_FORMAT_COUNT, &amp;count, sizeof (int)) ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>0
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_SIMPLE_FORMAT"></A>
-<H2><BR><B>SFC_GET_SIMPLE_FORMAT</B></H2>
-<P>
-Retrieve information about a simple format.
-</P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : Not used.
-        cmd      : SFC_GET_SIMPLE_FORMAT
-        data     : a pointer to an  SF_FORMAT_INFO struct
-        datasize : sizeof (SF_FORMAT_INFO)
-</PRE>
-<P>
-The SF_FORMAT_INFO struct is defined in &lt;sndfile.h&gt; as:
-</P>
-<PRE>
-        typedef struct
-        {   int         format ;
-            const char  *name ;
-            const char  *extension ;
-        } SF_FORMAT_INFO ;
-</PRE>
-<P>
-When sf_command() is called with SF_GET_SIMPLE_FORMAT, the value of the format 
-field should be the format number (ie 0 <= format <= count value obtained using
-SF_GET_SIMPLE_FORMAT_COUNT).
-</P>
-<P>
-Example:
-</P>
-<PRE>
-        SF_FORMAT_INFO format_info ;
-        int             k, count ;
-
-        sf_command (sndfile, SFC_GET_SIMPLE_FORMAT_COUNT, &amp;count, sizeof (int)) ;
-
-        for (k = 0 ; k < count ; k++)
-        {   format_info.format = k ;
-            sf_command (sndfile, SFC_GET_SIMPLE_FORMAT, &amp;format_info, sizeof (format_info)) ;
-            printf ("%08x  %s %s\n", format_info.format, format_info.name, format_info.extension) ;
-            } ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>0 on success and non-zero otherwise.
-       <DD>The value of the format field of the SF_FORMAT_INFO struct will be an value which 
-               can be placed in the format field of an SF_INFO struct when a file is to be opened 
-               for write.
-       <DD>The name field will contain a char* pointer to the name of the string ie "WAV (Microsoft 16 bit PCM)".
-       <DD>The extention field will contain the most commonly used file extension for that file type.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_FORMAT_INFO"></A>
-<H2><BR><B>SFC_GET_FORMAT_INFO</B></H2>
-<P>
-Retrieve information about a major or subtype format.
-</P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : Not used.
-        cmd      : SFC_GET_FORMAT_INFO
-        data     : a pointer to an SF_FORMAT_INFO struct
-        datasize : sizeof (SF_FORMAT_INFO)
-</PRE>
-<P>
-The SF_FORMAT_INFO struct is defined in &lt;sndfile.h&gt; as:
-</P>
-<PRE>
-        typedef struct
-        {   int         format ;
-            const char  *name ;
-            const char  *extension ;
-        } SF_FORMAT_INFO ;
-</PRE>
-<P>
-When sf_command() is called with SF_GET_FORMAT_INFO, the format field is 
-examined and if (format & SF_FORMAT_TYPEMASK) is a valid format then the struct
-is filled in with information about the given major type.
-If (format & SF_FORMAT_TYPEMASK) is FALSE and (format & SF_FORMAT_SUBMASK) is a
-valid subtype format then the struct is filled in with information about the given 
-subtype.
-</P>
-<P>
-Example:
-</P>
-<PRE>
-        SF_FORMAT_INFO format_info ;
-
-        format_info.format = SF_FORMAT_WAV ;
-        sf_command (sndfile, SFC_GET_FORMAT_INFO, &amp;format_info, sizeof (format_info)) ;
-        printf ("%08x  %s %s\n", format_info.format, format_info.name, format_info.extension) ;
-
-        format_info.format = SF_FORMAT_ULAW ;
-        sf_command (sndfile, SFC_GET_FORMAT_INFO, &amp;format_info, sizeof (format_info)) ;
-        printf ("%08x  %s\n", format_info.format, format_info.name) ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>0 on success and non-zero otherwise.
-</DL>
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_FORMAT_MAJOR_COUNT"></A>
-<H2><BR><B>SFC_GET_FORMAT_MAJOR_COUNT</B></H2>
-<P>
-Retrieve the number of major formats.
-</P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : Not used.
-        cmd      : SFC_GET_FORMAT_MAJOR_COUNT
-        data     : a pointer to an int
-        datasize : sizeof (int)
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        int  count ;
-        sf_command (sndfile, SFC_GET_FORMAT_MAJOR_COUNT, &amp;count, sizeof (int)) ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>0
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_FORMAT_MAJOR"></A>
-<H2><BR><B>SFC_GET_FORMAT_MAJOR</B></H2>
-<P>
-Retrieve information about a major format type.
-</P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : Not used.
-        cmd      : SFC_GET_FORMAT_MAJOR
-        data     : a pointer to an  SF_FORMAT_INFO struct
-        datasize : sizeof (SF_FORMAT_INFO)
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        SF_FORMAT_INFO format_info ;
-        int             k, count ;
-
-        sf_command (sndfile, SFC_GET_FORMAT_MAJOR_COUNT, &amp;count, sizeof (int)) ;
-
-        for (k = 0 ; k < count ; k++)
-        {   format_info.format = k ;
-            sf_command (sndfile, SFC_GET_FORMAT_MAJOR, &amp;format_info, sizeof (format_info)) ;
-            printf ("%08x  %s %s\n", format_info.format, format_info.name, format_info.extension) ;
-            } ;
-</PRE>
-<P>
-For a more comprehensive example, see the program list_formats.c in the examples/
-directory of the libsndfile source code distribution.
-</P>
-<DL>
-<DT>Return value: </DT>
-       <DD>0 on success and non-zero otherwise.
-       <DD>The value of the format field will one of the major format identifiers suc as SF_FORMAT_WAV
-               SF_FORMAT_AIFF.
-       <DD>The name field will contain a char* pointer to the name of the string ie "WAV (Microsoft)".
-       <DD>The extention field will contain the most commonly used file extension for that file type.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_FORMAT_SUBTYPE_COUNT"></A>
-<H2><BR><B>SFC_GET_FORMAT_SUBTYPE_COUNT</B></H2>
-<P>
-Retrieve the number of subformats.
-</P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : Not used.
-        cmd      : SFC_GET_FORMAT_SUBTYPE_COUNT
-        data     : a pointer to an int
-        datasize : sizeof (int)
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        int   count ;
-        sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE_COUNT, &amp;count, sizeof (int)) ;
-</PRE>
-<DL>
-<DT>Return value: </DT>
-       <DD>0
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_GET_FORMAT_SUBTYPE"></A>
-<H2><BR><B>SFC_GET_FORMAT_SUBTYPE</B></H2>
-<P>
-Retrieve information about a subformat.
-</P>
-<P>
-Parameters:
-</P>
-<PRE>
-        sndfile  : Not used.
-        cmd      : SFC_GET_FORMAT_SUBTYPE
-        data     : a pointer to an SF_FORMAT_INFO struct
-        datasize : sizeof (SF_FORMAT_INFO)
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        SF_FORMAT_INFO format_info ;
-        int             k, count ;
-
-        sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE_COUNT, &amp;count, sizeof (int)) ;
-
-        /* Retrieve all the subtypes supported by the WAV format. */
-        for (k = 0 ; k < count ; k++)
-        {   format_info.format = k ;
-            sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE, &amp;format_info, sizeof (format_info)) ;
-            if (! sf_format_check (format.info | SF_FORMAT_WAV))
-               continue ;
-            printf ("%08x  %s\n", format_info.format, format_info.name) ;
-            } ;
-</PRE>
-<P>
-For a more comprehensive example, see the program list_formats.c in the examples/
-directory of the libsndfile source code distribution.
-</P>
-<DL>
-<DT>Return value: </DT>
-       <DD>0 on success and non-zero otherwise.
-       <DD>The value of the format field will one of the major format identifiers such as SF_FORMAT_WAV
-               SF_FORMAT_AIFF.
-       <DD>The name field will contain a char* pointer to the name of the string; for instance 
-               "WAV (Microsoft)" or "AIFF (Apple/SGI)".
-       <DD>The extention field will be a NULL pointer.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_SET_ADD_PEAK_CHUNK"></A>
-<H2><BR><B>SFC_SET_ADD_PEAK_CHUNK</B></H2>
-<P>
-By default, WAV and AIFF files which contain floating point data (subtype SF_FORMAT_FLOAT 
-or SF_FORMAT_DOUBLE) have a PEAK chunk.
-By using this command, the addition of a PEAK chunk can be turned on or off.
-</P>
-<P>
-Note : This call must be made before any data is written to the file.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_SET_ADD_PEAK_CHUNK
-        data     : Not used (should be NULL)
-        datasize : TRUE or FALSE.
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        /* Turn on the PEAK chunk. */
-        sf_command (sndfile, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_TRUE) ;
-
-        /* Turn off the PEAK chunk. */
-        sf_command (sndfile, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-<DD>Returns SF_TRUE if the peak chunk will be written after this call.
-<DD>Returns SF_FALSE if the peak chunk will not be written after this call.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_UPDATE_HEADER_NOW"></A>
-<H2><BR><B>SFC_UPDATE_HEADER_NOW</B></H2>
-<P>
-The header of an audio file is normally written by libsndfile when the file is
-closed using <B>sf_close()</B>.
-</P>
-<P>
-There are however situations where large files are being generated and it would
-be nice to have valid data in the header before the file is complete.
-Using this command will update the file header to reflect the amount of data written 
-to the file so far.
-Other programs opening the file for read (before any more data is written) will 
-then read a valid sound file header.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_UPDATE_HEADER_NOW
-        data     : Not used (should be NULL)
-        datasize : Not used.
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        /* Update the header now. */
-        sf_command (sndfile, SFC_UPDATE_HEADER_NOW, NULL, 0) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-<DD>0
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_SET_UPDATE_HEADER_AUTO"></A>
-<H2><BR><B>SFC_SET_UPDATE_HEADER_AUTO</B></H2>
-<P>
-Similar to SFC_UPDATE_HEADER_NOW but updates the header at the end of every call
-to the <B>sf_write*</B> functions.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_UPDATE_HEADER_NOW
-        data     : Not used (should be NULL)
-        datasize : SF_TRUE or SF_FALSE
-</PRE>
-<P>
-Example:
-</P>
-<PRE>
-        /* Turn on auto header update. */
-        sf_command (sndfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
-
-        /* Turn off auto header update. */
-        sf_command (sndfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_FALSE) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-<DD>TRUE if auto update header is now on; FALSE otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_FILE_TRUNCATE"></A>
-<H2><BR><B>SFC_FILE_TRUNCATE</B></H2>
-<P>
-Truncate a file open for write or for read/write.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_FILE_TRUNCATE
-        data     : A pointer to an sf_count_t.
-        datasize : sizeof (sf_count_t)
-</PRE>
-
-<P>
-Truncate the file to the number of frames specified by the sf_count_t pointed
-to by data.
-After this command, both the read and the write pointer will be
-at the new end of the file.
-This command will fail (returning non-zero) if the requested truncate position 
-is beyond the end of the file.
-</P>
-<P>
-Example:
-</P>
-<PRE>
-        /* Truncate the file to a length of 20 frames. */
-        sf_count_t  frames = 20 ;
-        sf_command (sndfile, SFC_FILE_TRUNCATE, &amp;frames, sizeof (frames)) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-       <DD>Zero on sucess, non-zero otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-<A NAME="SFC_SET_RAW_START_OFFSET"></A>
-<H2><BR><B>SFC_SET_RAW_START_OFFSET</B></H2>
-<P>
-Change the data start offset for files opened up as SF_FORMAT_RAW.
-</P>
-<P>
-Parameters:
-<PRE>
-        sndfile  : A valid SNDFILE* pointer
-        cmd      : SFC_SET_RAW_START_OFFSET
-        data     : A pointer to an sf_count_t.
-        datasize : sizeof (sf_count_t)
-</PRE>
-
-<P>
-For a file opened as format SF_FORMAT_RAW, set the data offset to the value
-given by data.
-</P>
-<P>
-Example:
-</P>
-<PRE>
-        /* Reset the data offset to 5 bytes from the start of the file. */
-        sf_count_t  offset = 5 ;
-        sf_command (sndfile, SFC_SET_RAW_START_OFFSET, &amp;offset, sizeof (offset)) ;
-</PRE>
-<DL>
-<DT>Return value:</DT>
-       <DD>Zero on sucess, non-zero otherwise.
-</DL>
-
-<!-- ========================================================================= -->
-
-<HR>
-<P>
-       The libsndfile home page is here : 
-               <A HREF="http://www.mega-nerd.com/libsndfile/">
-                       http://www.mega-nerd.com/libsndfile/</A>.
-<BR>
-Version : 1.0.25
-</P>
-
-</BODY>
-</HTML>
diff --git a/libs/libsndfile/doc/donate.html b/libs/libsndfile/doc/donate.html
deleted file mode 100644 (file)
index c611f47..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-       <TITLE>
-       libsndfile : donate.
-       </TITLE>
-       <META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-       <!-- Another version at the bottom of the page.  -->
-       <META NAME="Description" CONTENT="The libsndfile API.">
-       <META NAME="Keywords"    CONTENT="WAV AIFF AU libsndfile sound audio dsp Linux">
-       <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all">
-       <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print">
-</HEAD>
-
-<BODY>
-
-<br/>
-<!-- pepper -->
-<center>
-       <IMG SRC="libsndfile.jpg" HEIGHT=98 WIDTH=367 ALT="libsndfile.jpg">
-</center>
-<!-- pepper -->
-<br/>
-
-<p>
-Dear libsndfile user,
-</p>
-<!-- pepper -->
-<p>
-This library was developed on Linux for Linux. I am not a Windows user and
-maintaining this library for Windows costs me significant amounts of time above
-and beyond the time taken to make it work on Linux and Unix-like systems.
-</p>
-<!-- pepper -->
-<p>
-I therefore ask Windows users of libsndfile to donate to ensure that libsndfile's
-support for Windows continues. As long as donations continue to flow in at a decent
-rate, I will continue to release precompiled Windows binaries in sync with the
-Linux/Unix version. If donations are poor, support for windows will fall behind.
-</p>
-<!-- pepper -->
-
-<p>
-You are free to donate any amount you chose.
-As a guideline:
-</p>
-<!-- pepper -->
-<ul>
-<li>If you are simply a user of libsndfile that would like to ensure that
-       the development of libsndfile continues, a donation of $10US would be more
-       than adequate.
-       </li>
-<li>If you are shareware author that distributes libsndfile with your app and
-       makes more than $1000 a year from your shareware, a one off donation of $50
-       would be appropriate.
-       </li>
-<li>If your company is a commercial software house that distributes one or more
-       products that ship with libsndfile, a donation of $100 every second or third
-       year would be appropriate.
-       </li>
-</ul>
-
-<!-- pepper -->
-<p>
-Donations can be made in Bitcoin to the Bitcoin address
-       <b>15hVWemFiH6DLJ22SBYPk9b4fgWtxBEvfQ</b>
-
-which can be verified by checking the following GPG signature.
-</p>
-
-<pre>
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA256
-
-libsndfile Bitcoin address : 15hVWemFiH6DLJ22SBYPk9b4fgWtxBEvfQ
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.12 (GNU/Linux)
-
-iQIcBAEBCAAGBQJSK7MUAAoJEEXYQ7zIiotIgXEP/R8hy65tlV7TiPw9bY9BklXS
-/Vl8FU2RhDkBt61ZmxbfDTybyQ5Vce/3wWph15L4RvpoX1OyeintQFmwwuPjOGiq
-eIz0nT9vDorG37Xdo5NZNBu9Tp1Od9MNtxFaAsRWFrDfvKEKljBHrcfM972cYrAp
-DaFd0Ik+bHKom9iQXFB7TFd0w2V4uszVMQDUGqb/vRNeRURZS7ypeMNwc8tZyTKR
-waEGMTa5sxxRjs7MqGRxSovnFT7JV3TNfdkBInUliIR/XvrudFR9J4Fiv+8Dk9P8
-WNjm6uFxvgIqiu1G9bjrwwr+DsBju93ljGNcZoayAKw5vwbX6KTcCbc31k9dP8Hf
-p6YdmPlZVKZmva+P3nLSJBTlxNu24Jm+ha+ZM/svDXTaPFWC8l5FP17kK0Bj8wCq
-N7pDz6RchEn10u+HdhfT1XiUjxj0zNXrr0GGj9apjl0RlT0O49eBttV0oXIdBRLi
-nTEaOWITpCgu7ggw1kWXHIWEncuiaSuJy/iH8PgNepWVj/6PxQRMrTqG4ux2Snk8
-Ua4vO8YHLMZX/XvSUS7eMtgfM7AO6YjJ/ac9bQif9bh6LsYEVVklysMUin6ZRS7Z
-Cms23FnqeQKtJOzdvqSJiV06lK6fP+tYdM4WSYn+AfL4IfYl2v48xXVU8XOOK9BH
-bJPKMDcz1ZvfYtX5mSW1
-=WXGB
------END PGP SIGNATURE-----
-</pre>
-
-<p>
-Thanks and regards,
-<br/>
-Erik de Castro Lopo
-<br/>
-Main libsndfile author and maintainer
-</p>
-
-<!-- pepper -->
-
-       <img src=
-       "/cgi-bin/Count.cgi?ft=6|frgb=55;55;55|tr=0|trgb=0;0;0|wxh=15;20|md=6|dd=B|st=1|sh=1|df=libsndfile-donate.dat"
-       HEIGHT=0 WIDTH=0 ALT="">
-
-
-</BODY>
-</HTML>
diff --git a/libs/libsndfile/doc/embedded_files.html b/libs/libsndfile/doc/embedded_files.html
deleted file mode 100644 (file)
index c73e86a..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-       <TITLE>
-       libsndfile : Embedded Sound Files.
-       </TITLE>
-       <META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-       <META NAME="Description" CONTENT="The libsndfile API.">
-       <META NAME="Keywords"    CONTENT="WAV AIFF AU libsndfile sound audio dsp Linux">
-       <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all">
-       <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print">
-</HEAD>
-<!-- pepper -->
-<BODY>
-<!-- pepper -->
-<H1><B>Embedded Sound Files.</B></H1>
-
-<P>
-By using the open SNDFILE with a file descriptor function:
-</P>
-<!-- pepper -->
-<PRE>
-      SNDFILE*  sf_open_fd (int fd, int mode, SF_INFO *sfinfo, int close_desc) ;
-</PRE>
-<!-- pepper -->
-<P>
-it is possible to open sound files embedded within larger files.
-There are however a couple of caveats:
-<P>
-<!-- pepper -->
-<UL>
-       <LI> Read/Write mode (SFM_RDWR) is not supported.
-       <LI> Writing of embedded files is only supported at the end of the file.
-       <LI> Reading of embedded files is only supported at file offsets greater
-                       than zero.
-       <LI> Not all file formats are supported (currently only WAV, AIFF and AU).
-</UL>
-<!-- pepper -->
-<P>
-The test program <B>multi_file_test.c</B> in the <B>tests/</B> directory of the
-source code tarball shows how this functionality is used to read and write
-embedded files.
-</P>
-<!-- pepper -->
-</BODY>
-</HTML>
diff --git a/libs/libsndfile/doc/index.html b/libs/libsndfile/doc/index.html
deleted file mode 100644 (file)
index bdd25aa..0000000
+++ /dev/null
@@ -1,493 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-       <TITLE>
-       libsndfile
-       </TITLE>
-       <META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-    <META NAME="Version"     CONTENT="libsndfile-1.0.25">
-       <META NAME="Description" CONTENT="The libsndfile Home Page">
-       <META NAME="Keywords"    CONTENT="WAV AIFF AU SVX PAF NIST W64 libsndfile sound audio dsp Linux">
-       <META NAME="ROBOTS"      CONTENT="NOFOLLOW">
-       <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all">
-       <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print">
-</HEAD>
-
-<BODY>
-<!-- pepper -->
-<CENTER>
-       <IMG SRC="libsndfile.jpg" HEIGHT=98 WIDTH=367 ALT="libsndfile.jpg">
-</CENTER>
-<!-- pepper -->
-<CENTER>
-               <A HREF="#History">History</A> -+-
-               <A HREF="#Features">Features</A> -+-
-               <A HREF="#Similar">Similar or Related Projects</A> -+-
-               <A HREF="NEWS">News</A>
-               <br>
-               <A HREF="development.html">Development</A> -+-
-               <A HREF="api.html">Programming Interface</A> -+-
-               <A HREF="bugs.html">Bug Reporting</A> -+-
-               <A HREF="#Download">Download</A>
-               <br>
-               <A HREF="FAQ.html">FAQ</A> -+-
-               <A HREF="lists.html">Mailing Lists</A> -+-
-               <A HREF="ChangeLog">Change Log</A> -+-
-               <A HREF="#Licensing">Licensing Information</A> -+-
-               <A HREF="#SeeAlso">See Also</A>
-</CENTER>
-
-<br><br>
-<P>
-       Libsndfile is a C library for reading and writing files containing sampled sound
-       (such as MS Windows WAV and the Apple/SGI AIFF format) through one standard
-       library interface. It is released in source code format under the
-               <A HREF="http://www.gnu.org/copyleft/lesser.html">Gnu Lesser General Public License</A>.
-</P>
-<!-- pepper -->
-<P>
-       The library was written to compile and run on a Linux system but should compile
-       and run on just about any Unix (including MacOS X).
-       There are also pre-compiled binaries available for 32 and 64 bit windows.
-</P>
-<P>
-       It was designed to handle both little-endian (such as WAV) and big-endian
-       (such as AIFF) data, and to compile and run correctly on little-endian (such as Intel
-       and DEC/Compaq Alpha) processor systems as well as big-endian processor systems such
-       as Motorola 68k, Power PC, MIPS and Sparc.
-       Hopefully the design of the library will also make it easy to extend for reading and
-       writing new sound file formats.
-</P>
-<!-- pepper -->
-<P>
-    It has been compiled and tested (at one time or another) on the following systems:
-</P>
-<!-- pepper -->
-<UL>
-       <LI>Every platform supported by Debian GNU/Linux including x86_64-linux-gnu,
-               i486-linux-gnu, powerpc-linux-gnu, sparc-linux-gnu, alpha-linux-gnu,
-               mips-linux-gnu and armel-linux-gnu.</LI>
-       <LI>powerpc-apple-darwin7.0 (Mac OS X 10.3)</LI>
-       <LI>sparc-sun-solaris2.8 (using gcc)</LI>
-       <LI>mips-sgi-irix5.3 (using gcc)</LI>
-       <LI>QNX 6.0</LI>
-       <LI>i386-unknown-openbsd2.9</LI>
-</UL>
-<!-- pepper -->
-<P>
-       At the moment, each new release is being tested on i386 Linux, x86_64 Linux,
-       PowerPC Linux, Win32 and Win64.
-</P>
-<!-- pepper -->
-
-<A NAME="Capabilities"></A>
-<A NAME="Features"></A>
-<H1><B>Features</B></H1>
-<P>
-       libsndfile has the following main features :
-</P>
-       <UL>
-       <lI> Ability to read and write a large number of file formats.
-       <LI> A simple, elegant and easy to use Applications Programming Interface.
-       <LI> Usable on Unix, Win32, MacOS and others.
-       <LI> On the fly format conversion, including endian-ness swapping, type conversion
-                       and bitwidth scaling.
-       <LI> Optional normalisation when reading floating point data from files containing
-                       integer data.
-       <LI> Ability to open files in read/write mode.
-       <LI> The ability to write the file header without closing the file (only on files
-                       open for write or read/write).
-       <LI> Ability to query the library about all supported formats and retrieve text
-                       strings describing each format.
-       </UL>
-<P>
-       libsndfile has a comprehensive test suite so that each release is as bug free
-       as possible.
-       When new bugs are found, new tests are added to the test suite to ensure that
-       these bugs don't creep back into the code.
-       When new features are added, tests are added to the test suite to make sure that
-       these features continue to work correctly even when they are old features.
- </P>
-<P>
-       The following table lists the file formats and encodings that libsndfile can read
-       and write.
-       The file formats are arranged across the top and encodings along the left
-       edge.
-</P>
-<br>
-
-<TABLE BORDER="1" cellpadding="2">
-       <TR><TD>&nbsp;</TD>
-       <TD ALIGN="center">Micro- soft<br>WAV</TD>
-       <TD ALIGN="center">SGI / Apple<br>AIFF / AIFC</TD>
-       <TD ALIGN="center">Sun / DEC /<br>NeXT<br>AU / SND</TD>
-       <TD ALIGN="center">Header- less<br>RAW</TD>
-       <TD ALIGN="center">Paris Audio<br>File<br>PAF</TD>
-       <TD ALIGN="center">Commo- dore<br>Amiga<br>IFF / SVX</TD>
-       <TD ALIGN="center">Sphere<br>Nist<br>WAV</TD>
-       <TD ALIGN="center">IRCAM<br>SF</TD>
-       <TD ALIGN="center">Creative<br>VOC</TD>
-       <TD ALIGN="center">Sound forge<br>W64</TD>
-       <TD ALIGN="center"><A HREF="octave.html">GNU Octave 2.0</A><br>MAT4</TD>
-       <TD ALIGN="center"><A HREF="octave.html">GNU Octave 2.1</A><br>MAT5</TD>
-       <TD ALIGN="center">Portable Voice Format<br>PVF</TD>
-       <TD ALIGN="center">Fasttracker 2<br>XI</TD>
-       <TD ALIGN="center">HMM Tool Kit<br>HTK</TD>
-       <TD ALIGN="center">Apple<br>CAF</TD>
-       <TD ALIGN="center">Sound<br>Designer II<br>SD2</TD>
-       <TD ALIGN="center">Free Lossless Audio Codec<br>FLAC</TD>
-       </TR>
-<TR><TD>Unsigned 8 bit PCM</TD>
-       <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD>
-       <TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>Signed 8 bit PCM</TD>
-       <TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD>
-       <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD>
-</TR>
-
-<TR><TD>Signed 16 bit PCM</TD>
-       <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD>
-       <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD>
-       <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD>
-       <TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD>
-       <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD>
-</TR>
-
-<TR><TD>Signed 24 bit PCM</TD>
-       <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD>
-       <TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD>
-       <TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD>
-</TR>
-
-<TR><TD>Signed 32 bit PCM</TD>
-       <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD>
-       <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>32 bit float</TD>
-       <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD>
-       <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>64 bit double</TD>
-       <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD>
-       <TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>u-law encoding</TD>
-       <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD>
-       <TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-<TR><TD>A-law encoding</TD>
-       <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD>
-       <TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>IMA ADPCM</TD>
-       <TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>MS ADPCM</TD>
-       <TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>GSM 6.10</TD>
-       <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>G721 ADPCM 32kbps</TD>
-       <TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>G723 ADPCM 24kbps</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>G723 ADPCM 40kbps</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>12 bit DWVW</TD>
-       <TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>16 bit DWVW</TD>
-       <TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-
-<TR><TD>24 bit DWVW</TD>
-       <TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-<TR><TD>Ok Dialogic ADPCM</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-<TR><TD>8 bit DPCM</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-<TR><TD>16 bit DPCM</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-       <TD>&nbsp;</TD><TD ALIGN="center">R/W</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD><TD>&nbsp;</TD>
-</TR>
-</TABLE>
-
-<p>
-From version 1.0.18, libsndfile also reads and writes
-       <a href="http://flac.sourceforge.net/">FLAC</a>
-and
-       <a href="http://www.vorbis.com/">Ogg/Vorbis</a>.
-</p>
-
-<!-- pepper -->
-
-<P>
-       Some of the file formats I am also interested in adding are:
-</P>
-       <UL>
-       <LI> Kurzweil K2000 sampler files.
-       <LI> Ogg Speex.
-       </UL>
-<P>
-       I have decided that I will not be adding support for MPEG Layer 3 (commonly
-       known as MP3) due to the patent issues surrounding this file format.
-       See
-               <a href="FAQ.html#Q020">
-               the FAQ</a>
-       for more.
-</P>
-<P>
-       Other file formats may also be added on request.
-</P>
-
-<!-- pepper -->
-
-<A NAME="History"></A>
-<H1><B>History</B></H1>
-<P>
-       My first attempt at reading and writing WAV files was in 1990 or so under Windows
-       3.1.
-       I started using Linux in early 1995 and contributed some code to the
-               <A HREF="http://www.vaxxine.com/ve3wwg/gnuwave.html">wavplay</A>
-       program.
-       That contributed code would eventually mutate into this library.
-       As one of my interests is Digital Signal Processing (DSP) I decided that as well as
-       reading data from an audio file in the native format (typically 16 bit short integers)
-       it would also be useful to be able to have the library do the conversion to floating
-       point numbers for DSP applications.
-       It then dawned on me that whatever file format (anything from 8 bit unsigned chars,
-       to 32 bit floating point numbers) the library should be able to convert the data to
-       whatever format the library user wishes to use it in.
-       For example, in a sound playback program, the library caller typically wants the sound
-       data in 16 bit short integers to dump into a sound card even though the data in the
-       file may be 32 bit floating point numbers (ie Microsoft's WAVE_FORMAT_IEEE_FLOAT
-       format).
-       Another example would be someone doing speech recognition research who has recorded
-       some speech as a 16 bit WAV file but wants to process it as double precision floating
-       point numbers.
-</P>
-<P>
-    Here is the release history for libsndfile :
-</P>
-       <UL>
-       <LI>Version 0.0.8 (Feb 15 1999) First official release.
-       <LI>Version 0.0.28 (Apr 26 2002) Final release of version 0 of libsndfile.
-       <LI>Version 1.0.0rc1 (Jun 24 2002) Release candidate 1 of version 1 of libsndfile.
-       <LI>Version 1.0.0rc6 (Aug 14 2002) MacOS 9 fixes.
-       <LI>Version 1.0.0 (Aug 16 2002) First 1.0.X release.
-       <LI>Version 1.0.1 (Sep 14 2002) Added MAT4 and MAT5 file formats.
-       <LI>Version 1.0.2 (Nov 24 2002) Added VOX ADPCM format.
-       <LI>Version 1.0.3 (Dec 09 2002) Fixes for Linux on ia64 CPUs.
-       <LI>Version 1.0.4 (Feb 02 2003) New file formats and functionality.
-       <LI>Version 1.0.5 (May 03 2003) One new file format and new functionality.
-       <LI>Version 1.0.6 (Feb 08 2004) Large file fix for Linux/Solaris, new functionality
-               and Win32 improvements.
-       <LI>Version 1.0.7 (Feb 24 2004) Fix build problems on MacOS X and fix ia64/MIPS etc
-               clip mode detction.
-       <LI>Version 1.0.8 (Mar 14 2004) Minor bug fixes.
-       <LI>Version 1.0.9 (Mar 30 2004) Add AVR format. Improve handling of some WAV files.
-       <LI>Version 1.0.10 (Jun 15 2004) Minor bug fixes. Fix support for Win32 MinGW compiler.
-       <LI>Version 1.0.11 (Nov 15 2004) Add SD2 file support, reading of loop data in WAV and AIFF.
-                               Minor bug fixes.
-       <LI>Version 1.0.12 (Sep 30 2005) Add FLAC and CAF file support, virtual I/O interface.
-                               Minor bug fixes and cleanups.
-       <LI>Version 1.0.13 (Jan 21 2006) Add read/write of instrument chunks. Minor bug fixes.
-       <LI>Version 1.0.14 (Feb 19 2006) Minor bug fixes. Start shipping windows binary/source ZIP.
-       <LI>Version 1.0.15 (Mar 16 2006) Minor bug fixes.
-       <LI>Version 1.0.16 (Apr 30 2006) Add support for RIFX. Other minor feature enhancements and
-                               bug fixes.
-       <LI>Version 1.0.17 (Aug 31 2006) Add C++ wrapper sndfile.hh. Minor bug fixes and cleanups.
-       <LI>Version 1.0.18 (Feb 07 2009) Add Ogg/Vorbis suppport, remove captive libraries, many
-                               new features and bug fixes. Generate Win32 and Win64 pre-compiled binaries.
-       <LI>Version 1.0.19 (Mar 02 2009) Fix for CVE-2009-0186. Huge number of minor fixes as a
-                               result of static analysis.
-       <LI>Version 1.0.20 (May 14 2009) Fix for potential heap overflow.
-       <LI>Version 1.0.21 (December 13 2009) Bunch of minor bug fixes.
-       <LI>Version 1.0.22 (October 04 2010) Bunch of minor bug fixes.
-       <LI>Version 1.0.23 (October 10 2010) Minor bug fixes.
-       <LI>Version 1.0.24 (March 23 2011) Minor bug fixes.
-       <LI>Version 1.0.25 (July 13 2011) Fix for Secunia Advisory SA45125. Minor bug fixes and
-                               improvements.
-       </UL>
-
-<A NAME="Similar"></A>
-<H1><B>Similar or Related Projects</B></H1>
-
-       <UL>
-       <LI><A HREF="http://sox.sourceforge.net/">SoX</A> is a program for
-               converting between sound file formats.
-       <LI><A HREF="http://www.hitsquad.com/smm/programs/WavPlay/">Wavplay</A> started out
-               as a minimal WAV file player under Linux and has mutated into Gnuwave, a client/server
-               application for more general multimedia and games sound playback.
-       <LI><A HREF="http://www.68k.org/~michael/audiofile/">Audiofile</A> (libaudiofile) is
-               a library similar to libsndfile but with a different programming interface. The
-               author Michael Pruett has set out to clone (and fix some bugs in) the libaudiofile
-               library which ships with SGI's IRIX OS.
-       <LI><A HREF="ftp://ccrma-ftp.stanford.edu/pub/Lisp/sndlib.tar.gz">sndlib.tar.gz</A> is
-               another library written by Bill Schottstaedt of CCRMA.
-       </UL>
-
-<A NAME="Licensing"></A>
-<H1><B>Licensing</B></H1>
-<P>
-       libsndfile is released under the terms of the GNU Lesser General Public License,
-       of which there are two versions;
-               <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">version 2.1</a>
-       and
-               <a href="http://www.gnu.org/copyleft/lesser.html">version 3</a>.
-       To maximise the compatibility of libsndfile, the user may choose to use libsndfile
-       under either of the above two licenses.
-       You can also read a simple explanation of the ideas behind the GPL and the LGPL
-               <A HREF="http://www.gnu.org/copyleft/copyleft.html">here</A>.
-</P>
-<P>
-       You can use libsndfile with
-               <A HREF="http://www.gnu.org/">Free Software</A>,
-               <A HREF="http://www.opensource.org/">Open Source</A>,
-       proprietary, shareware or other closed source applications as long as libsndfile
-       is used as a dynamically loaded library and you abide by a small number of other
-       conditions (read the LGPL for more info).
-       With applications released under the GNU GPL you can also use libsndfile statically
-       linked to your application.
-</P>
-<P>
-       I would like to see libsndfile used as widely as possible but I would prefer it
-       if you released software that uses libsndfile as
-               <A HREF="http://www.gnu.org/">Free Software</A>
-       or
-               <A HREF="http://www.opensource.org/">Open Source</A>.
-       However, if you put in a great deal of effort building a significant application
-       which simply uses libsndfile for file I/O, then I have no problem with you releasing
-       that as closed source and charging as much money as you want for it as long as you
-       abide by <A HREF="http://www.gnu.org/copyleft/lesser.html">the license</A>.
-</P>
-
-<A NAME="Download"></A>
-<H1><B>Download</B></H1>
-<P>
-       Here is the latest version. It is available in the following formats:
-</P>
-       <UL>
-       <LI>Source code as a .tar.gz :
-                       <A HREF="files/libsndfile-1.0.25.tar.gz">libsndfile-1.0.25.tar.gz</A>
-                       and
-                       <A HREF="files/libsndfile-1.0.25.tar.gz.asc">(GPG signature)</A>.
-       <LI>Win32 installer:
-                       <A HREF="files/libsndfile-1.0.25-w32-setup.exe">
-                       libsndfile-1.0.25-w32-setup.exe</A> (thoroughly tested under
-                       <a href="http://www.winehq.com/">Wine</a> and Windows XP).
-       <LI>Win64 installer:
-                       <A HREF="files/libsndfile-1.0.25-w64-setup.exe">
-                       libsndfile-1.0.25-w64-setup.exe</A>
-                       (thoroughly tested on 64 bit Windows 7).
-       </UL>
-
-<P>
-The Win32 installer was compiled for Windows XP but should also work on Windows
-2000, Vista and Windows 7.
-</p>
-
-<P>
-       Pre-release versions of libsndfile are available
-                       <A HREF="http://www.mega-nerd.com/tmp/">here</A>
-       and are announced on the
-                       <A HREF="lists.html">libsndfile-devel</A>
-       mailing list.
-</P>
-
-<A NAME="SeeAlso"></A>
-<H1><B>See Also</B></H1>
-       <UL>
-       <LI><a href="http://www.mega-nerd.com/libsndfile/tools/">
-               sndfile-tools</a>
-               : a small collection of programs which use libsndfile.
-       </UL>
-
-<br><br>
-
-<hr>
-
-<P>
-       The latest version of this document can be found
-               <A HREF="http://www.mega-nerd.com/libsndfile/">here</A>.
-</P>
-<P>
-Author :
-       <A HREF="m&#97;ilt&#111;:&#101;rikd&#64;&#109;eg&#97;-&#110;erd.&#99;om">
-               Erik de Castro Lopo</a>
-</P>
-<!-- pepper -->
-<P>
-This page has been accessed
-       <IMG SRC=
-       "/cgi-bin/Count.cgi?ft=6|frgb=55;55;55|tr=0|trgb=0;0;0|wxh=15;20|md=7|dd=B|st=1|sh=1|df=libsndfile.dat"
-       HEIGHT=30 WIDTH=100 ALT="counter.gif">
-times.
-</P>
-<!-- pepper -->
-<!-- pepper -->
-<!-- pepper -->
-
-<br><br>
-</BODY>
-</HTML>
diff --git a/libs/libsndfile/doc/libsndfile.css.in b/libs/libsndfile/doc/libsndfile.css.in
deleted file mode 100644 (file)
index 40fca0f..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-body {
-       background : @HTML_BGCOLOUR@ ;
-       color : @HTML_FGCOLOUR@ ;
-       font-family : arial, helvetica, sans-serif ;
-       line-height: 1.5 ;
-}
-td {
-       font-family : arial, helvetica, sans-serif ;
-       background : @HTML_BGCOLOUR@ ;
-       color : @HTML_FGCOLOUR@ ;
-}
-center {
-       font-family : arial, helvetica, sans-serif ;
-}
-p {
-       font-family : arial, helvetica, sans-serif ;
-       text-align : left ;
-       margin-left : 3% ;
-       margin-right : 3% ;
-}
-.indent_block {
-       font-family : arial, helvetica, sans-serif ;
-       text-align : left ;
-       margin-left : 10% ;
-       margin-right : 10% ;
-}
-br {
-       font-family : arial, helvetica, sans-serif ;
-}
-form {
-       font-family : arial, helvetica, sans-serif ;
-}
-ul {
-       font-family : arial, helvetica, sans-serif ;
-       text-align : left ;
-       margin-left : 3% ;
-       margin-right : 6% ;
-}
-ol {
-       font-family : arial, helvetica, sans-serif ;
-       text-align : left ;
-       margin-left : 3% ;
-       margin-right : 6% ;
-}
-dl {
-       font-family : arial, helvetica, sans-serif ;
-       text-align : left ;
-       margin-left : 3% ;
-       margin-right : 3% ;
-}
-h1 {
-       font-size : xx-large ;
-       background : @HTML_BGCOLOUR@ ;
-       color : #5050FF ;
-       text-align : left ;
-       margin-left : 3% ;
-       margin-right : 3% ;
-}
-h2 {
-       font-size : x-large ;
-       background : @HTML_BGCOLOUR@ ;
-       color : #5050FF ;
-       text-align : left ;
-       margin-left : 3% ;
-       margin-right : 3% ;
-}
-h3 {
-       font-size : large ;
-       background : @HTML_BGCOLOUR@ ;
-       color : #5050FF ;
-       text-align : left ;
-       margin-left : 3% ;
-       margin-right : 3% ;
-}
-h4 {
-       font-size : medium ;
-       background : @HTML_BGCOLOUR@ ;
-       color : #5050FF ;
-       text-align : left ;
-       margin-left : 3% ;
-       margin-right : 3% ;
-}
-pre {
-       font-family : courier, monospace ;
-       font-size : medium ;
-       margin-left : 6% ;
-       margin-right : 6% ;
-}
-a:link { color : #9090FF ; }
-a:visited { color : #5050FF ; }
-a:active { color : #FF00FF ; }
-a:hover { background-color : #202080 ; }
diff --git a/libs/libsndfile/doc/linux_games_programming.txt b/libs/libsndfile/doc/linux_games_programming.txt
deleted file mode 100644 (file)
index 747f59d..0000000
+++ /dev/null
@@ -1,434 +0,0 @@
-# Here are some some emails I exchanged with a guy trying to use 
-# libsndfile version 1 with code from the book "Linux Games Programming"
-# by John Hall. The email addresses have been changed to foil the spam
-# bots.
-
-Date: Tue, 20 Jul 2004 22:49:21 +0100
-From: Paul <paul@fake-domain-name.co.uk>
-To: erikd@fake-domain-name.com
-Subject: Can you help with a problem?
-Date: Tue, 20 Jul 2004 22:49:21 +0100
-
-Hi,
-
-I'm trying to get the source examples in the "Programming Linux Games" 
-(NoStarch, Loki Software + John R. Hall) which use sndfile.h/libsndfile.
-
-While I can guess some of the newer versions of function calls and 
-enumerations, there are some which I cannot guess.
-
-Would you be able to translate them to the current version of 
-enumeration and function calls so that I can update the source?
-
-These are the three currently failing me:
-
-    sf_open_read(filename, SF_INFO *sfinfo) (guess: sf_open(filename,SFM_READ, &sfinfo))
-    SF_FORMAT_PCM (guess: either SF_FORMAT_PCM_U8 or _RAW)
-    SF_INFO.pcmbitwidth (guess: no idea!)
-
-There are probably more. I'm happy to send you the source files for 
-sound calls, scan the pages or anything else. Failing that, is there 
-somewhere with the changes listed so I can try and fix the code for myself?
-
-Thanks
-
-TTFN
-
-Paul
-
-================================================================================
-
-Date: Wed, 21 Jul 2004 17:38:08 +1000
-From: Erik de Castro Lopo <erikd@fake-domain-name.com>
-To: Paul <paul@fake-domain-name.co.uk>
-Subject: Re: Can you help with a problem?
-
-On Tue, 20 Jul 2004 22:49:21 +0100
-Paul <paul@fake-domain-name.co.uk> wrote:
-
-> Hi,
-> 
-> I'm trying to get the source examples in the "Programming Linux Games" 
-> (NoStarch, Loki Software + John R. Hall) which use sndfile.h/libsndfile.
-> 
-> While I can guess some of the newer versions of function calls and 
-> enumerations, there are some which I cannot guess.
-> 
-> Would you be able to translate them to the current version of 
-> enumeration and function calls so that I can update the source?
-> 
-> These are the three currently failing me:
-> 
-> sf_open_read(filename, SF_INFO *sfinfo) (guess: sf_open(filename, 
-> SFM_READ, &sfinfo))
-
-yes.
-
-> SF_FORMAT_PCM (guess: either SF_FORMAT_PCM_U8 or _RAW)
-
-Actually this list:
-
-    SF_FORMAT_PCM_U8
-    SF_FORMAT_PCM_S8
-    SF_FORMAT_PCM_16
-    SF_FORMAT_PCM_24
-    SF_FORMAT_PCM_32
-
-> SF_INFO.pcmbitwidth (guess: no idea!)
-
-WIth the above change, pcmbitwidth becomes redundant.
-
-> There are probably more. I'm happy to send you the source files for 
-> sound calls, scan the pages or anything else. Failing that, is there 
-> somewhere with the changes listed so I can try and fix the code for
-> myself?
-
-Version 1.0.0 came out some time ago, but I think this:
-
-    http://www.mega-nerd.com/libsndfile/version-1.html
-
-lists most of the changes. You should also look at the API docs:
-
-    http://www.mega-nerd.com/libsndfile/api.html
-
-HTH,
-Erik
--- 
-+-----------------------------------------------------------+
-  Erik de Castro Lopo      nospam@fake-domain-name.com
-+-----------------------------------------------------------+
-"There is no reason why anyone would want a computer in their home"
-Ken Olson, DEC, 1977
-
-================================================================================
-
-From: PFJ <paul@fake-domain-name.co.uk>
-To: Erik de Castro Lopo <erikd@fake-domain-name.com>
-Subject: Re: Can you help with a problem?
-Date: Wed, 21 Jul 2004 09:07:39 +0100
-
-
-Hi Erik,
-
-Thanks for getting back to me.
-
-> > sf_open_read(filename, SF_INFO *sfinfo) (guess: sf_open(filename, SFM_READ, &sfinfo))
->
-> yes.
-
-Yay!
-
-> > SF_FORMAT_PCM (guess: either SF_FORMAT_PCM_U8 or _RAW)
->
-> Actually this list:
->
->     SF_FORMAT_PCM_U8
->     SF_FORMAT_PCM_S8
->     SF_FORMAT_PCM_16
->     SF_FORMAT_PCM_24
->     SF_FORMAT_PCM_32
-
-I know, but the source code explicitly has SF_FORMAT_PCM which given the
-code afterwards would equate to one of the above, but given that PCM
-files can have a varied bitwidth the author probably wanted to cover all
-bases.
-
-> Version 1.0.0 came out some time ago, but I think this:
->
->     http://www.mega-nerd.com/libsndfile/version-1.html
->
-> lists most of the changes. You should also look at the API docs:
->
->     http://www.mega-nerd.com/libsndfile/api.html
-
-I'll download them and see what I can gleen.
-
-Thanks again for getting back to me
-
-TTFN
-
-Paul
-
-================================================================================
-
-Date: Wed, 21 Jul 2004 18:20:29 +1000
-From: Erik de Castro Lopo <erikd@fake-domain-name.com>
-To: PFJ <paul@fake-domain-name.co.uk>
-Subject: Re: Can you help with a problem?
-
-On Wed, 21 Jul 2004 09:07:39 +0100
-PFJ <paul@fake-domain-name.co.uk> wrote:
-
-> I know, but the source code explicitly has SF_FORMAT_PCM which given the
-> code afterwards would equate to one of the above, but given that PCM
-> files can have a varied bitwidth the author probably wanted to cover all
-> bases.
-
-But surely the existing code does something like:
-
-    sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM;
-    sfinfo.pcmbitwidth = 16;
-
-which can be directly translated to:
-
-    sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16;
-
-and the same for pcmbitwitdhs of 24 and 32. For pcmbitwidth of 8
-you need to know that WAV files use SF_FORMAT_PCM_U8 and AIFF
-files use SF_FORMAT_PCM_S8. Thats all there is to it.
-
-Erik
--- 
-+-----------------------------------------------------------+
-  Erik de Castro Lopo      nospam@fake-domain-name.com
-+-----------------------------------------------------------+
-"Python addresses true pseudocode's two major failings: that it
-isn't standardized, and it isn't executable."
-- Grant R. Griffin  in comp.dsp
-
-================================================================================
-
-Subject: Re: Can you help with a problem?
-From: PFJ <paul@fake-domain-name.co.uk>
-To: Erik de Castro Lopo <erikd@fake-domain-name.com>
-Date: Wed, 21 Jul 2004 09:50:55 +0100
-
-Hi Erik,
-
-> > I know, but the source code explicitly has SF_FORMAT_PCM which given the
-> > code afterwards would equate to one of the above, but given that PCM
-> > files can have a varied bitwidth the author probably wanted to cover all
-> > bases.
->
-> But surely the existing code does something like:
->
->     sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM;
->     sfinfo.pcmbitwidth = 16;
-
-If only!
-
-The actual code is this
-
-int LoadSoundFile(char *filename, sound_p sound)
-{
-    SNDFILE *file;
-    SF_INFO file_info;
-    short *buffer_short = NULL;
-    u_int8_t *buffer_8 = NULL;
-    int16_t *buffer_16 = NULL;
-    unsigned int i;
-
-    /* Open the file and retrieve sample information. */
-    file = sf_open_read(filename, &file_info);
-    // I've sorted this one already - PFJ
-
-    /* Make sure the format is acceptable. */
-    if ((file_info.format & 0x0F) != SF_FORMAT_PCM) {
-               printf("'%s' is not a PCM-based audio file.\n", filename);
-               sf_close(file);
-               return -1;
-    }
-
-    if ((file_info.pcmbitwidth == 8) && (file_info.channels == 1)) {
-               sound->format = AL_FORMAT_MONO8;
-    } else if ((file_info.pcmbitwidth == 8) && (file_info.channels == 2)) {
-               sound->format = AL_FORMAT_STEREO8;
-    } else if ((file_info.pcmbitwidth == 16) && (file_info.channels == 1)) {
-               sound->format = AL_FORMAT_MONO16;
-    } else if ((file_info.pcmbitwidth == 16) && (file_info.channels == 2)) {
-               sound->format = AL_FORMAT_STEREO16;
-    } else {
-               printf("Unknown sample format in %s.\n", filename);
-               sf_close(file);
-               return -1;
-    }
-
-    /* Allocate buffers. */
-    buffer_short = (short *)malloc(file_info.samples * file_info.channels * sizeof (short));
-
-    buffer_8 = (u_int8_t *)malloc(file_info.samples * file_info.channels * file_info.pcmbitwidth / 8);
-
-    buffer_16 = (int16_t *)buffer_8;
-
-    if (buffer_short == NULL || buffer_8 == NULL) {
-               printf("Unable to allocate enough memory for '%s'.\n", filename);
-               goto error_cleanup;
-    }
-
-    /* Read the entire sound file. */
-    if (sf_readf_short(file,buffer_short,file_info.samples) == (size_t)-1) {
-               printf("Error while reading samples from '%s'.\n", filename);
-               goto error_cleanup;
-    }
-
-<minor snip>
-
-    /* Fill in the sound data structure. */
-    sound->freq = file_info.samplerate;
-    sound->size = file_info.samples * file_info.channels * file_info.pcmbitwidth / 8;
-
-    /* Give our sound data to OpenAL. */
-    alGenBuffers(1, &sound->name);
-    if (alGetError() != AL_NO_ERROR) {
-               printf("Error creating an AL buffer name for %s.\n", filename);
-               goto error_cleanup;
-    }
-
-    alBufferData(sound->name, sound->format, buffer_8, sound->size,sound->freq);
-    if (alGetError() != AL_NO_ERROR) {
-               printf("Error sending buffer data to OpenAL for %s.\n", filename);
-               goto error_cleanup;
-    }
-
-    /* Close the file and return success. */
-    sf_close(file);
-    free(buffer_short);
-    free(buffer_8);
-
-    return 0;
-
- error_cleanup:
-    if (file != NULL) fclose(file);
-    free(buffer_short);
-    free(buffer_8);
-    return -1;
-}
-
-As you can see, the PCM material in the listing will not currently
-compile and for the other sndfile material, it probably won't either.
-
-Any help would be appreciated.
-
-TTFN
-
-Paul
-
-================================================================================
-
-From: Erik de Castro Lopo <erikd@fake-domain-name.com>
-To: PFJ <paul@fake-domain-name.co.uk>
-Subject: Re: Can you help with a problem?
-Date: Wed, 21 Jul 2004 19:36:46 +1000
-
-On Wed, 21 Jul 2004 09:50:55 +0100
-PFJ <paul@fake-domain-name.co.uk> wrote:
-
-> Hi Erik,
-> 
-> > > I know, but the source code explicitly has SF_FORMAT_PCM which given the
-> > > code afterwards would equate to one of the above, but given that PCM
-> > > files can have a varied bitwidth the author probably wanted to cover all
-> > > bases.
-> > 
-> > But surely the existing code does something like:
-> > 
-> >     sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM;
-> >     sfinfo.pcmbitwidth = 16;
-> 
-> If only!
-
-No, really.
-
-Drop this completely:
-
->     /* Make sure the format is acceptable. */
->     if ((file_info.format & 0x0F) != SF_FORMAT_PCM) {
->      printf("'%s' is not a PCM-based audio file.\n", filename);
->      sf_close(file);
->      return -1;
->     }
-
-Replace this block:
-
->     if ((file_info.pcmbitwidth == 8) && (file_info.channels == 1)) {
->              sound->format = AL_FORMAT_MONO8;
->     } else if ((file_info.pcmbitwidth == 8) && (file_info.channels == 2)) {
->           sound->format = AL_FORMAT_STEREO8;
->     } else if ((file_info.pcmbitwidth == 16) && (file_info.channels == 1)) {
->           sound->format = AL_FORMAT_MONO16;
->     } else if ((file_info.pcmbitwidth == 16) && (file_info.channels == 2)) {
->           sound->format = AL_FORMAT_STEREO16;
->     } else {
->           printf("Unknown sample format in %s.\n", filename);
->           sf_close(file);
->           return -1;
->     }
-
-with:
-
-    int pcmbitwidth = 0;
-
-    if (file_info.format & SF_FORMAT_SUBMASK != SF_FORMAT_PCM_16)
-    {  printf("'%s' is not a PCM-based audio file.\n", filename);
-        sf_close(file);
-        return -1;
-        }
-
-    if (file_info.channels < 1 || file_info.channels > 2)
-    {  printf("'%s' bad channel count.\n", filename);
-        sf_close(file);
-        return -1;
-        }
-
-    switch (file_info.format & SF_FORMAT_SUBMASK + file_info.channels << 16)
-    {    case (SF_FORMAT_PCM_U8 + 1 << 16):
-             sound->format = AL_FORMAT_MONO8;
-             pcmbitwidth = 8;
-             break;
-         case (SF_FORMAT_PCM_U8 + 2 << 16):
-             sound->format = AL_FORMAT_STEREO8;
-             pcmbitwidth = 8;
-             break;
-         case (SF_FORMAT_PCM_16 + 1 << 16):
-             sound->format = AL_FORMAT_MONO16;
-             pcmbitwidth = 16;
-             break;
-         case (SF_FORMAT_PCM_16 + 2 << 16):
-             sound->format = AL_FORMAT_STEREO16;
-             pcmbitwidth = 16;
-             break;
-         default:
-             printf("Unknown sample format in %s.\n", filename);
-             sf_close(file);
-             return -1;
-         }
-
->     /* Allocate buffers. */
->     buffer_short = (short *)malloc(file_info.samples *
->                                 file_info.channels * 
->                                 sizeof (short));
-> 
->     buffer_8 = (u_int8_t *)malloc(file_info.samples *
->                                file_info.channels *
->                                file_info.pcmbitwidth / 8);
-
-Use pcmbitwidth as calculated above.
-
->     buffer_16 = (int16_t *)buffer_8;
-> 
->     if (buffer_short == NULL || buffer_8 == NULL) {
->      printf("Unable to allocate enough memory for '%s'.\n", filename);
->      goto error_cleanup;
->     }
-> 
->     /* Read the entire sound file. */
->     if (sf_readf_short(file,buffer_short,file_info.samples) == (size_t)- 1) {
-
-Replace "(size_t) - 1" with " < 0".
-
-> As you can see, the PCM material in the listing will not currently
-> compile and for the other sndfile material, it probably won't either.
-
-None of the changes above should have been very difficult to figure
-out.
-
-Erik
--- 
-+-----------------------------------------------------------+
-  Erik de Castro Lopo      nospam@fake-domain-name.com
-+-----------------------------------------------------------+
-Microsoft is finally bringing all of its Windows operating system families
-under one roof. It will combine all of the features of CE, stability and
-support of ME and the speed of NT.
-It will be called Windows CEMENT...
-
diff --git a/libs/libsndfile/doc/lists.html b/libs/libsndfile/doc/lists.html
deleted file mode 100644 (file)
index 7d95170..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-       <TITLE>
-       libsndfile Mailing Lists
-       </TITLE>
-       <META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-       <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all">
-       <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print">
-</HEAD>
-
-<BODY>
-<!-- pepper -->
-<H1><BR>libsndfile Mailing Lists</H1>
-<!-- pepper -->
-<P>
-There are three mailing lists for libsndfile:
-</P>
-<!-- pepper -->
-<UL>
-       <LI> <B>libsndfile-announce&#64;mega-nerd.com</B>&nbsp;&nbsp;<!-- pepper -->
-               <A HREF="m&#97;ilt&#111;:li&#98;sndfile-announce-request@meg&#97;-nerd.&#99;om?subject=subscribe">Subscribe</A>
-               <BR>
-               A list which will announce each new release of libsndfile.
-               Noone can post to this list except the author.
-               <BR><BR>
-
-       <LI> <B>libsndfile-devel&#64;mega-nerd.com</B>&nbsp;&nbsp;<!-- pepper -->
-               <A HREF="m&#97;ilt&#111;:li&#98;sndfile-devel-request@meg&#97;-nerd.&#99;om?subject=subscribe">Subscribe</A>
-               <BR>
-               A list for discussing bugs, porting issues and feature requests.
-               Posting is restricted to subscribers.
-               <BR><BR>
-
-       <LI> <B>libsndfile-users&#64;mega-nerd.com</B>&nbsp;&nbsp;<!-- pepper -->
-               <A HREF="m&#97;ilt&#111;:li&#98;sndfile-users-request@meg&#97;-nerd.&#99;om?subject=subscribe">Subscribe</A>
-               <BR>
-               A list for discussing the use of libsndfile in other programs.
-               Posting is restricted to subscribers.
-               <!-- pepper -->
-               <BR><BR>
-</UL>
-<!-- pepper -->
-<P>
-The libsndfile-devel and libsndfile-users list will automatically receive a 
-copy of all emails to the libsndfile-announce list.
-</P>
-<BR>
-<!-- pepper -->
-</BODY>
-</HTML>
diff --git a/libs/libsndfile/doc/new_file_type.HOWTO b/libs/libsndfile/doc/new_file_type.HOWTO
deleted file mode 100644 (file)
index a6da80a..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-new_file_type.HOWTO
-===================
-
-   Original : Wed May 23 19:05:07 EST 2001
-   Update 1 : Fri Jul 11 22:12:38 EST 2003
-
-This document will attempt to explain as fully as possible how to add code to 
-libsndfile to allow the reading and writing of new file types. By new file
-type I particularly mean a new header type rather than a new encoding method
-for an existing file type.
-
-This HOWTO will take the form of a step by step guide. It will assume that you 
-have all required tools including :
-
-       - gcc
-       - make (should really be the GNU version)
-       - autoconf
-       - automake 
-       - libtool
-       
-These should all be available on the GNU ftp site: ftp://ftp.gnu.org/pub/gnu/.
-
-To help make these steps clearer let's suppose we are adding support for the
-Whacky file format whose files contain 'W','A','C' and 'K' as the first four
-bytes of the file format. Lets also assume that Whacky files contain PCM encoded
-data. 
-
-Step 1
-------
-Create a new .c file in the src/ directory of the libsndfile source tree. The 
-file name should be reasonable descriptive so that is is obvious that files of 
-the new type are handled by this file. In this particular case the file might
-be named 'whacky.c'.
-       
-Step 2
-------
-Add your new source code file to the build process.
-
-Edit the file src/Makefile.am and add the name of your file handler to the 
-FILESPECIFIC list of handlers. This list looks something like this:  
-
-FILESPECIFIC = aiff.c au.c au_g72x.c nist.c paf.c raw.c samplitude.c \
-                               svx.c wav.c wav_float.c wav_gsm610.c wav_ima_adpcm.c \
-                               wav_ms_adpcm.c
-
-Then, run the script named 'reconf' in the libsndfile top level directory,
-which will run autoconf and other associated tools. Finally run "./configure"
-in the top level directory. You may want to use the "--disable-gcc-opt" option
-to disable gcc optimisations and make debugging with gdb/ddd easier.
-
-Step 3
-------
-Add a unique identifier for the new file type.
-
-Edit src/sndfile.h.in and find the enum containing the SF_FORMAT_XXX identifiers.
-Since you will be adding a major file type you should add your identifier to the
-top part of the list where the values are above 0x10000 in value. The easiest
-way to do this is to find the largest value in the list, add 0x10000 to it and
-make that your new identifier value. The identifier should be something like
-SF_FORMAT_WACK.
-
-Step 4
-------
-Add code to the file type recogniser function.
-
-Edit src/sndfile.c and find the function guess_file_type (). This function 
-reads the first 3 ints of the file and from that makes a guess at the file 
-type. In our case we would add:
-
-
-       if (buffer [0] == MAKE_MARKER ('W','A','C','K'))
-               return SF_FORMAT_WACK ;
-               
-The use of the MAKE_MARKER macro should be pretty obvious and it is defined at the 
-top of file should you need to have a look at it.
-
-Step 5
-------
-Add a call to your open function from psf_open_file ().
-
-Edit src/sndfile.c and find the switch statement in psf_open_file (). It starts
-like this:
-
-       switch (filetype)
-       {       case    SF_FORMAT_WAV :
-                               error = wav_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_AIFF :
-                               error = aiff_open (psf) ;
-                               break ;
-
-Towards the bottom of this switch statement your should add one for the new file
-type. Something like:
-
-               case    SF_FORMAT_WACK :
-                               sf_errno = whacky_open (psf) ;
-                               break ;
-
-Setp 6
-------
-Add prototypes for new open read and open write functions.
-
-Edit src/common.h, go to the bottom of the file and add something like
-
-       int             whacky_open       (SF_PRIVATE *psf) ;
-
-Step 7
-------
-
-Implement your open read function. The best way to do this is by coding 
-something much like one of the other file formats. The file src/au.c might be 
-a good place to start.
-
-In src/whacky.c you should now implement the function whacky_open() which 
-was prototyped in src/common.h. This function should return 0 on success and 
-a non-zero number on error. 
-
-Error values are defined in src/common.h in a enum which starts at SFE_NO_ERROR.
-When adding a new error value, you also need to add an error string to the 
-SndfileErrors array in src/sndfile.c.
-
-To parse the header of your new file type you should avoid using standard read/
-write/seek functions (and the fread/fwrite/fseek etc) and instead use 
-psf_binheader_readf () which is implemented and documented in src/common.h.
-
-During the parsing process, you should also print logging information to 
-libsndfile's internal log buffer using the psf_log_printf() function.
-
-At the end of the open read process, you should have set a number of fields in the
-SF_PRIVATE structure pointed to by psf.
-
-
-
-*** THIS FILE IS INCOMPLETE ***
diff --git a/libs/libsndfile/doc/octave.html b/libs/libsndfile/doc/octave.html
deleted file mode 100644 (file)
index b696e6b..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-       <TITLE>
-       libsndfile and GNU Octave
-       </TITLE>
-       <META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-       <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all">
-       <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print">
-</HEAD>
-
-<BODY>
-
-<BR>
-<H1><B>libsndfile and GNU Octave</B></H1>
-<P>
-       <A HREF="http://www.octave.org/">GNU Octave</A> is a high-level interactive
-       language for numerical computations.
-       There are currently two development streams, a stable 2.0.X series and a
-       development 2.1.X series.
-       Octave reads and writes data in binary formats that were originally developed
-       for
-               <A HREF="http://www.mathworks.com/">MATLAB</A>.
-       Version 2.0.X of Octave uses binary data files compatible with MATLAB
-       version 4.2 while Octave 2.1.X uses binary data files compatible
-       with MATLAB version 5.0 as well as being able to read the older MATLAB 4.2
-       format.
-</P>
-<P>
-       From version 1.0.1 of libsndfile onwards, libsndfile has the ability of reading
-       and writing a small subset of the binary data files used by both versions
-       of GNU Octave.
-       This gives people using GNU Octave for audio based work an easy method of
-       moving audio data between GNU Octave and other programs which use libsndfile.
-</P>
-<P>
-       For instance it is now possible to do the following:
-</P>
-
-       <UL>
-       <LI> Load a WAV file into a sound file editor such as
-               <A HREF="http://www.metadecks.org/software/sweep/">Sweep</A>.
-       <LI> Save it as a MAT4 file.
-       <LI> Load the data into Octave for manipulation.
-       <LI> Save the modified data.
-       <LI> Reload it in Sweep.
-       </UL>
-<P>
-       Another example would be using the MAT4 or MAT5 file formats as a format which
-       can be easily loaded into Octave for viewing/analyzing as well as a format
-       which can be played with command line players such as the one included with
-       libsndfile.
-</P>
-
-<H2><B>Details</B></H2>
-<P>
-       Octave, like most programming languages, uses variables to store data, and
-       Octave variables can contain both arrays and matrices.
-       It is also able to store one or more of these variables in a file.
-       When reading Octave files, libsndfile expects a file to contain two
-       variables and their associated data.
-       The first variable should contain a variable holding the file sample rate
-       while the second variable contains the audio data.
-</P>
-<P>
-       For example, to generate a sine wave and store it as a binary file which
-       is compatible with libsndfile, do the following:
-</P>
-<PRE>
-        octave:1 > samplerate = 44100 ;
-        octave:2 > wavedata = sin ((0:1023)*2*pi/1024) ;
-        octave:3 > save sine.mat samplerate wavedata
-</PRE>
-
-<P>
-       The process of reading and writing files compatible with libsndfile can be
-       made easier by use of two Octave script files :
-</P>
-<PRE>
-        octave:4 > [data fs] = sndfile_load ("sine.mat") ;
-        octave:5 > sndfile_save ("sine2.mat", data, fs) ;
-</PRE>
-<P>
-       In addition, libsndfile contains a command line program which which is able
-       to play the correct types of Octave files.
-       Using this command line player <B>sndfile-play</B> and a third Octave script
-       file allows Octave data to be played from within Octave on any of the platforms
-       which <B>sndfile-play</B> supports (at the moment: Linux, MacOS X, Solaris and
-       Win32).
-</P>
-<PRE>
-        octave:6 > sndfile_play (data, fs) ;
-</PRE>
-<P>
-       These three Octave scripts are installed automatically in Octave's site
-       script directory when libsndfile is installed (except on Win32) ie when
-       libsndfile is being installed into /usr/local, the Octave scripts will
-       be installed in /usr/local/share/octave/site/m/.
-</P>
-
-<P>
-       There are some other Octave scripts for audio to be found
-               <A HREF="http://octave.sourceforge.net/audio/index.html">here</A>.
-</P>
-
-<BR>
-<!-- ========================================================================= -->
-
-<HR>
-<P>
-       The libsndfile home page is here :
-               <A HREF="http://www.mega-nerd.com/libsndfile/">
-                       http://www.mega-nerd.com/libsndfile/</A>.
-</P>
-
-</BODY>
-</HTML>
diff --git a/libs/libsndfile/doc/pkgconfig.html b/libs/libsndfile/doc/pkgconfig.html
deleted file mode 100644 (file)
index c89193d..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-       <TITLE>
-       libsndfile : pkg-config
-       </TITLE>
-       <META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-       <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all">
-       <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print">
-</HEAD>
-
-<BODY>
-
-<BR>
-<H1>libsndfile and pkg-config</H1>
-
-<P>
-       From version 1.0.0 libsndfile has had the ability to read and write files of
-       greater than 2 Gig in size on most OSes even if sizeof (long) == 4. 
-       OSes which support this feature include Linux (2.4 kernel, glibc6) on x86, PPC and
-       probably others, Win32, MacOS X, *BSD, Solaris and probably others.
-       OSes on 64 bit processors where the default compile environment is LP64 (longs and 
-       pointers are 64 bit ie Linux on DEC/Compaq/HP Alpha processors) automatically 
-       support large file access.
-</P>
-<P>
-       Other OSes including Linux on 32 bit processors, 32 bit Solaris and others require 
-       special compiler flags to add large file support. 
-       This applies to both the compilation of the library itself and the compilation of 
-       programs which link to the library.
-</P>
-<P>
-       Note : People using Win32, MacOS (both OS X and pre-OS X) or *BSD can disregard the 
-       rest of this document as it does not apply to either of these OSes.     
-</P>
-<P>
-       The <B>pkg-config</B> program makes finding the correct compiler flag values and 
-       library location far easier.
-       During the installation of libsndfile, a file named <B>sndfile.pc</B> is installed
-       in the directory <B>${libdir}/pkgconfig</B> (ie if libsndfile is installed in 
-       <B>/usr/local/lib</B>, <B>sndfile.pc</B> will be installed in 
-       <B>/usr/local/lib/pkgconfig/</B>).
-</P>
-<P>
-       In order for pkg-config to find sndfile.pc it may be necessary to point the 
-       environment variable <B>PKG_CONFIG_PATH</B> in the right direction.
-</P>
-       <PRE>
-        export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
-       </PRE>
-       
-<P>
-       Then, to compile a C file into an object file, the command would be:
-</P>
-       <PRE>
-        gcc `pkg-config --cflags sndfile` -c somefile.c
-       </PRE>
-<P>
-       and to link a number of objects into an executable that links against libsndfile,
-       the command would be:
-</P>
-       <PRE>
-        gcc `pkg-config --libs sndfile` obj1.o obj2.o -o program
-       </PRE>
-       
-<P>
-       Obviously all this can be rolled into a Makefile for easier maintenance.
-</P>
-</BODY>
-</HTML>
diff --git a/libs/libsndfile/doc/print.css b/libs/libsndfile/doc/print.css
deleted file mode 100644 (file)
index deb5b13..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-body {
-       background:white;
-       color:black;
-}
-
-h1{
-       background:white;
-       color:black;
-}
-
-h2 {
-       background:white;
-       color:#666;
-}
diff --git a/libs/libsndfile/doc/sndfile_info.html b/libs/libsndfile/doc/sndfile_info.html
deleted file mode 100644 (file)
index a84f241..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-       <TITLE>
-       sndfile-info
-       </TITLE>
-       <META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-       <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all">
-       <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print">
-</HEAD>
-
-<BODY>
-
-<P>
-       Here is an example of the output from the <B>sndfile-info</B> program distributed with 
-       libsndfile.
-</P>
-
-<P>
-       This file was opened and parsed correctly but had been truncated so that the values
-       in the <B>FORM</B> and <B>SSND</B> chunks were incorrect.
-</P>
-<PRE>
-        <B>erikd@hendrix ></B> examples/sndfile-info truncated.aiff 
-        truncated.aiff
-        size : 200000
-        FORM : 307474 (should be 199992)
-         AIFF
-         COMM : 18
-          Sample Rate : 16000
-          Samples     : 76857
-          Channels    : 2
-          Sample Size : 16
-         SSND : 307436 (should be 199946)
-          Offset     : 0
-          Block Size : 0
-        
-        --------------------------------
-        Sample Rate : 16000
-        Frames      : 76857
-        Channels    : 2
-        Bit Width   : 16
-        Format      : 0x00020001
-        Sections    : 1
-        Seekable    : TRUE
-        Signal Max  : 32766
-               
-</PRE>
-
-
-</BODY>
-</HTML>
diff --git a/libs/libsndfile/doc/tutorial.html b/libs/libsndfile/doc/tutorial.html
deleted file mode 100644 (file)
index e311239..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-       <TITLE>
-       libsndfile Tutorial
-       </TITLE>
-       <META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-       <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all">
-       <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print">
-</HEAD>
-
-<BODY>
-<!-- pepper -->
-<H1><BR>libsndfile Tutorial</H1>
-<!-- pepper -->
-<P>
-<b>More coming soon.</b>
-</P>
-<!-- pepper -->
-<P>
-For now, the best place to look for example code is the <tt>examples/</tt>
-directory of the source code distribution and the libsndfile test suite which
-is located in the <tt>tests/</tt> directory of the source code distribution.
-</P>
-<!-- pepper -->
-<!-- pepper -->
-<!-- pepper -->
-<!-- pepper -->
-<!-- pepper -->
-<!-- pepper -->
-</BODY>
-</HTML>
-
diff --git a/libs/libsndfile/doc/win32.html b/libs/libsndfile/doc/win32.html
deleted file mode 100644 (file)
index 6ee3153..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-
-<HEAD>
-       <TITLE>
-       Building libsndfile on Win32
-       </TITLE>
-       <META NAME="Author"      CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
-       <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all">
-       <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print">
-</HEAD>
-
-<BODY>
-<!-- pepper -->
-<H1><BR>Building libsndfile on Win32</H1>
-
-<P><B>
-Note : For pre-compiled binaries for windows, both for win32 and win64, see the
-main web page.
-</B></P>
-
-<P>
-There is currently only one way of building libsndfile for Win32 and Win64;
-cross compiling from Linux using the MinGW cross compiler.
-</P>
-
-<P>
-libsndfile is written to be compiled by a compiler which supports large
-chunks of the 1999 ISO C Standard.
-Unfortunately, the microsoft compiler supports close to nothing of this
-standard and hence is not suitable for libsndfile.
-</P>
-
-<P>
-It <b>may</b> be possible to compile libsndfile on windows using the
-       <a href="http://www.mingw.org/">MinGW</a>
-compiler suite, but I haven't tested that and have no interest in supporting
-that.
-</P>
-
-<!--===========================================================================-->
-
-<!-- pepper -->
-<!-- pepper -->
-<!-- pepper -->
-<BR>
-<!-- pepper -->
-<!-- pepper -->
-<!-- pepper -->
-<!-- pepper -->
-
-</BODY>
-</HTML>
diff --git a/libs/libsndfile/echo-install-dirs.in b/libs/libsndfile/echo-install-dirs.in
deleted file mode 100644 (file)
index 48d54b4..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/sh
-# @configure_input@
-
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-bindir=@bindir@
-pkgconfigdir=@pkgconfigdir@
-datadir=@datadir@
-datarootdir=@datarootdir@
-docdir=@docdir@
-htmldir=@htmldir@
-
-echo "
-  Installation directories :
-
-    Library directory : ................... $libdir
-    Program directory : ................... $bindir
-    Pkgconfig directory : ................. $pkgconfigdir
-    HTML docs directory : ................. $htmldir
-"
-echo "Compiling some other packages against libsndfile may require"
-echo "the addition of '$pkgconfigdir' to the"
-echo "PKG_CONFIG_PATH environment variable."
-echo
diff --git a/libs/libsndfile/examples/Makefile.am b/libs/libsndfile/examples/Makefile.am
deleted file mode 100644 (file)
index da841fa..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-noinst_PROGRAMS = make_sine sfprocess list_formats generate sndfilehandle sndfile-to-text
-
-AM_CPPFLAGS = -I$(top_srcdir)/src
-
-sndfile_to_text_SOURCES = sndfile-to-text.c
-sndfile_to_text_LDADD = $(top_builddir)/src/libsndfile.la
-
-make_sine_SOURCES = make_sine.c
-make_sine_LDADD = $(top_builddir)/src/libsndfile.la
-
-sfprocess_SOURCES = sfprocess.c
-sfprocess_LDADD = $(top_builddir)/src/libsndfile.la
-
-list_formats_SOURCES = list_formats.c
-list_formats_LDADD = $(top_builddir)/src/libsndfile.la
-
-generate_SOURCES = generate.c
-generate_LDADD = $(top_builddir)/src/libsndfile.la
-
-sndfilehandle_SOURCES = sndfilehandle.cc
-sndfilehandle_LDADD = $(top_builddir)/src/libsndfile.la
-
-CLEANFILES = *~ *.exe
diff --git a/libs/libsndfile/examples/cooledit-fixer.c b/libs/libsndfile/examples/cooledit-fixer.c
deleted file mode 100644 (file)
index 06ceae6..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
-** Copyright (C) 2002-2005 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <sys/stat.h>
-
-#include <sndfile.h>
-
-#define        BUFFER_LEN      1024
-
-static void usage_exit (char *progname) ;
-static int is_data_really_float (SNDFILE *sndfile) ;
-static void fix_file (char *filename) ;
-static off_t file_size (char *filename) ;
-
-static union
-{      int i [BUFFER_LEN] ;
-       float f [BUFFER_LEN] ;
-} buffer ;
-
-int
-main (int argc, char *argv [])
-{      SNDFILE *sndfile ;
-       SF_INFO sfinfo ;
-       int k, data_is_float, converted = 0 ;
-
-       puts ("\nCooledit Fixer.\n---------------") ;
-
-       if (argc < 2)
-               usage_exit (argv [0]) ;
-
-       for (k = 1 ; k < argc ; k++)
-       {       if ((sndfile = sf_open (argv [k], SFM_READ, &sfinfo)) == NULL)
-               {       /*-printf ("Failed to open : %s\n", argv [k]) ;-*/
-                       continue ;
-                       } ;
-
-               if (sfinfo.format != (SF_FORMAT_WAV | SF_FORMAT_PCM_32))
-               {       /*-printf ("%-50s : not a 32 bit PCM WAV file.\n", argv [k]) ;-*/
-                       sf_close (sndfile) ;
-                       continue ;
-                       } ;
-
-               data_is_float = is_data_really_float (sndfile) ;
-
-               sf_close (sndfile) ;
-
-               if (data_is_float == SF_FALSE)
-               {       /*-printf ("%-50s : not a Cooledit abomination.\n", argv [k]) ;-*/
-                       continue ;
-                       } ;
-
-               fix_file (argv [k]) ;
-               converted ++ ;
-               } ;
-
-       if (converted == 0)
-               puts ("\nNo files converted.") ;
-
-       puts ("") ;
-
-       return 0 ;
-} /* main */
-
-
-static void
-usage_exit (char *progname)
-{      char *cptr ;
-
-       if ((cptr = strrchr (progname, '/')))
-               progname = cptr + 1 ;
-       if ((cptr = strrchr (progname, '\\')))
-               progname = cptr + 1 ;
-
-       printf ("\n    Usage : %s <filename>\n", progname) ;
-       puts ("\n"
-               "Fix broken files created by Syntrillium's Cooledit. These files are \n"
-               "marked as containing PCM data but actually contain floating point \n"
-               "data. Only the broken files created by Cooledit are processed. All \n"
-               "other files remain untouched.\n"
-               "\n"
-               "More than one file may be included on the command line. \n"
-               ) ;
-
-       exit (1) ;
-} /* usage_exit */
-
-static int
-is_data_really_float (SNDFILE *sndfile)
-{      int     k, readcount ;
-
-       while ((readcount = sf_read_int (sndfile, buffer.i, BUFFER_LEN)) > 0)
-       {       for (k = 0 ; k < readcount ; k++)
-               {       if (buffer.i [k] == 0)
-                               continue ;
-
-                       if (fabs (buffer.f [k]) > 32768.0)
-                               return SF_FALSE ;
-                       } ;
-               } ;
-
-       return SF_TRUE ;
-} /* is_data_really_float */
-
-static void
-fix_file (char *filename)
-{      static  char    newfilename [512] ;
-
-       SNDFILE *infile, *outfile ;
-       SF_INFO sfinfo ;
-       int             readcount, k ;
-       float   normfactor ;
-       char    *cptr ;
-
-       printf ("\nFixing : %s\n", filename) ;
-
-       if ((infile = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-       {       printf ("Not able to open input file %s\n", filename) ;
-               exit (1) ;
-               } ;
-
-       if (strlen (filename) >= sizeof (newfilename) - 1)
-       {       puts ("Error : Path name too long.\n") ;
-               exit (1) ;
-               } ;
-
-       strncpy (newfilename, filename, sizeof (newfilename)) ;
-       newfilename [sizeof (newfilename) - 1] = 0 ;
-
-       if ((cptr = strrchr (newfilename, '/')) == NULL)
-               cptr = strrchr (newfilename, '\\') ;
-
-       if (cptr)
-       {       cptr [1] = 0 ;
-               strncat (newfilename, "fixed.wav", sizeof (newfilename) - strlen (newfilename) - 1) ;
-               }
-       else
-               strncpy (newfilename, "fixed.wav", sizeof (newfilename) - 1) ;
-
-       newfilename [sizeof (newfilename) - 1] = 0 ;
-
-       printf ("    Output   : %s\n", newfilename) ;
-
-       sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_FLOAT ;
-
-       if ((outfile = sf_open (newfilename, SFM_WRITE, &sfinfo)) == NULL)
-       {       printf ("Not able to output open file %s\n", filename) ;
-               exit (1) ;
-               } ;
-
-       /* Find the file peak. sf-command (SFC_CALC_SIGNAL_MAX) cannot be used. */
-
-       normfactor = 0.0 ;
-
-       while ((readcount = sf_read_int (infile, buffer.i, BUFFER_LEN)) > 0)
-       {       for (k = 0 ; k < readcount ; k++)
-                       if (fabs (buffer.f [k]) > normfactor)
-                               normfactor = fabs (buffer.f [k]) ;
-               } ;
-
-       printf ("    Peak     : %g\n", normfactor) ;
-
-       normfactor = 1.0 / normfactor ;
-
-       sf_seek (infile, 0, SEEK_SET) ;
-
-       while ((readcount = sf_read_int (infile, buffer.i, BUFFER_LEN)) > 0)
-       {       for (k = 0 ; k < readcount ; k++)
-                       buffer.f [k] *= normfactor ;
-               sf_write_float (outfile, buffer.f, readcount) ;
-               } ;
-
-       sf_close (infile) ;
-       sf_close (outfile) ;
-
-       if (abs (file_size (filename) - file_size (newfilename)) > 50)
-       {       puts ("Error : file size mismatch.\n") ;
-               exit (1) ;
-               } ;
-
-       printf ("    Renaming : %s\n", filename) ;
-
-       if (remove (filename) != 0)
-       {       perror ("rename") ;
-               exit (1) ;
-               } ;
-
-       if (rename (newfilename, filename) != 0)
-       {       perror ("rename") ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* fix_file */
-
-static off_t
-file_size (char *filename)
-{      struct stat buf ;
-
-       if (stat (filename, &buf) != 0)
-       {       perror ("stat") ;
-               exit (1) ;
-               } ;
-
-       return buf.st_size ;
-} /* file_size */
-/*
-** Do not edit or modify anything in this comment block.
-** The arch-tag line is a file identity tag for the GNU Arch
-** revision control system.
-**
-** arch-tag: 5475655e-3898-40ff-969b-c8ab2351b0e4
-*/
diff --git a/libs/libsndfile/examples/generate.c b/libs/libsndfile/examples/generate.c
deleted file mode 100644 (file)
index 884e8d7..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include <sndfile.h>
-
-#define        BUFFER_LEN                      4096
-
-static void encode_file (const char *infilename, const char *outfilename, int filetype) ;
-
-int
-main (int argc, char **argv)
-{
-       if (argc != 2)
-       {       puts ("\nEncode a single input file into a number of different output ") ;
-               puts ("encodings. These output encodings can then be moved to another ") ;
-               puts ("OS for testing.\n") ;
-               puts ("    Usage : generate <filename>\n") ;
-               exit (1) ;
-               } ;
-
-       /* A couple of standard WAV files. Make sure Win32 plays these. */
-       encode_file (argv [1], "pcmu8.wav"      , SF_FORMAT_WAV | SF_FORMAT_PCM_U8) ;
-       encode_file (argv [1], "pcm16.wav"      , SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-       encode_file (argv [1], "imaadpcm.wav", SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM) ;
-       encode_file (argv [1], "msadpcm.wav", SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM) ;
-       encode_file (argv [1], "gsm610.wav"     , SF_FORMAT_WAV | SF_FORMAT_GSM610) ;
-
-       /* Soundforge W64. */
-       encode_file (argv [1], "pcmu8.w64"      , SF_FORMAT_W64 | SF_FORMAT_PCM_U8) ;
-       encode_file (argv [1], "pcm16.w64"      , SF_FORMAT_W64 | SF_FORMAT_PCM_16) ;
-       encode_file (argv [1], "imaadpcm.w64", SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM) ;
-       encode_file (argv [1], "msadpcm.w64", SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM) ;
-       encode_file (argv [1], "gsm610.w64"     , SF_FORMAT_W64 | SF_FORMAT_GSM610) ;
-
-       return 0 ;
-} /* main */
-
-/*============================================================================================
-**     Helper functions and macros.
-*/
-
-#define PUT_DOTS(k)                                    \
-                       {       while (k--)                     \
-                                       putchar ('.') ; \
-                               putchar (' ') ;         \
-                               }
-
-/*========================================================================================
-*/
-
-static void
-encode_file (const char *infilename, const char *outfilename, int filetype)
-{      static float buffer [BUFFER_LEN] ;
-
-       SNDFILE         *infile, *outfile ;
-       SF_INFO         sfinfo ;
-       int                     k, readcount ;
-
-       printf ("    %s -> %s ", infilename, outfilename) ;
-       fflush (stdout) ;
-
-       k = 16 - strlen (outfilename) ;
-       PUT_DOTS (k) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       if (! (infile = sf_open (infilename, SFM_READ, &sfinfo)))
-       {       printf ("Error : could not open file : %s\n", infilename) ;
-               puts (sf_strerror (NULL)) ;
-               exit (1) ;
-               }
-
-       sfinfo.format = filetype ;
-
-       if (! sf_format_check (&sfinfo))
-       {       sf_close (infile) ;
-               printf ("Invalid encoding\n") ;
-               return ;
-               } ;
-
-       if (! (outfile = sf_open (outfilename, SFM_WRITE, &sfinfo)))
-       {       printf ("Error : could not open file : %s\n", outfilename) ;
-               puts (sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       while ((readcount = sf_read_float (infile, buffer, BUFFER_LEN)) > 0)
-               sf_write_float (outfile, buffer, readcount) ;
-
-       sf_close (infile) ;
-       sf_close (outfile) ;
-
-       printf ("ok\n") ;
-
-       return ;
-} /* encode_file */
-
diff --git a/libs/libsndfile/examples/generate.cs b/libs/libsndfile/examples/generate.cs
deleted file mode 100644 (file)
index 1817856..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-/* (c) 2004 James Robson, http://www.arbingersys.com
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-**
-** ****************************
-**
-** How to use:
-**    - libsndfile.dll must have already been compiled and be in this
-**      application's search path
-**
-**    - You must edit this file to point to the file you want to convert. Set
-**     the following line of code (found in the Main() function further below)
-**     to the name of a .WAV file that exists on your system.
-**             186:    string sfn = "input.wav";
-**
-**    - From a command prompt type
-**             csc generate.cs
-**
-**    - Run the resulting executable 'generate.exe'
-**
-**
-** Note: You will obviously need the csc compiler and the .NET runtime. I think
-**      these are freely available for download from Microsoft's website
-**      (part of the .NET SDK?).
-*/
-
-
-using System;
-using System.Runtime.InteropServices;
-using sf_count_t = System.Int64;       //alias; see SF_INFO struct
-
-#if PLATFORM_64
-using size_t = System.UInt64;
-#else
-using size_t = System.UInt32;
-#endif
-
-
-class lsndf_example {
-
-
-//sound file formats
-       public enum lsndf_frmts {
-               SF_FORMAT_WAV                   = 0x010000,             /* Microsoft WAV format (little endian). */
-               SF_FORMAT_AIFF                  = 0x020000,             /* Apple/SGI AIFF format (big endian). */
-               SF_FORMAT_AU                    = 0x030000,             /* Sun/NeXT AU format (big endian). */
-               SF_FORMAT_RAW                   = 0x040000,             /* RAW PCM data. */
-               SF_FORMAT_PAF                   = 0x050000,             /* Ensoniq PARIS file format. */
-               SF_FORMAT_SVX                   = 0x060000,             /* Amiga IFF / SVX8 / SV16 format. */
-               SF_FORMAT_NIST                  = 0x070000,             /* Sphere NIST format. */
-               SF_FORMAT_VOC                   = 0x080000,             /* VOC files. */
-               SF_FORMAT_IRCAM                 = 0x0A0000,             /* Berkeley/IRCAM/CARL */
-               SF_FORMAT_W64                   = 0x0B0000,             /* Sonic Foundry's 64 bit RIFF/WAV */
-               SF_FORMAT_MAT4                  = 0x0C0000,             /* Matlab (tm) V4.2 / GNU Octave 2.0 */
-               SF_FORMAT_MAT5                  = 0x0D0000,             /* Matlab (tm) V5.0 / GNU Octave 2.1 */
-               SF_FORMAT_PVF                   = 0x0E0000,             /* Portable Voice Format */
-               SF_FORMAT_XI                    = 0x0F0000,             /* Fasttracker 2 Extended Instrument */
-               SF_FORMAT_HTK                   = 0x100000,             /* HMM Tool Kit format */
-               SF_FORMAT_SDS                   = 0x110000,             /* Midi Sample Dump Standard */
-
-               /* Subtypes from here on. */
-
-               SF_FORMAT_PCM_S8                = 0x0001,               /* Signed 8 bit data */
-               SF_FORMAT_PCM_16                = 0x0002,               /* Signed 16 bit data */
-               SF_FORMAT_PCM_24                = 0x0003,               /* Signed 24 bit data */
-               SF_FORMAT_PCM_32                = 0x0004,               /* Signed 32 bit data */
-
-               SF_FORMAT_PCM_U8                = 0x0005,               /* Unsigned 8 bit data (WAV and RAW only) */
-
-               SF_FORMAT_FLOAT                 = 0x0006,               /* 32 bit float data */
-               SF_FORMAT_DOUBLE                = 0x0007,               /* 64 bit float data */
-
-               SF_FORMAT_ULAW                  = 0x0010,               /* U-Law encoded. */
-               SF_FORMAT_ALAW                  = 0x0011,               /* A-Law encoded. */
-               SF_FORMAT_IMA_ADPCM             = 0x0012,               /* IMA ADPCM. */
-               SF_FORMAT_MS_ADPCM              = 0x0013,               /* Microsoft ADPCM. */
-
-               SF_FORMAT_GSM610                = 0x0020,               /* GSM 6.10 encoding. */
-               SF_FORMAT_VOX_ADPCM             = 0x0021,               /* OKI / Dialogix ADPCM */
-
-               SF_FORMAT_G721_32               = 0x0030,               /* 32kbs G721 ADPCM encoding. */
-               SF_FORMAT_G723_24               = 0x0031,               /* 24kbs G723 ADPCM encoding. */
-               SF_FORMAT_G723_40               = 0x0032,               /* 40kbs G723 ADPCM encoding. */
-
-               SF_FORMAT_DWVW_12               = 0x0040,               /* 12 bit Delta Width Variable Word encoding. */
-               SF_FORMAT_DWVW_16               = 0x0041,               /* 16 bit Delta Width Variable Word encoding. */
-               SF_FORMAT_DWVW_24               = 0x0042,               /* 24 bit Delta Width Variable Word encoding. */
-               SF_FORMAT_DWVW_N                = 0x0043,               /* N bit Delta Width Variable Word encoding. */
-
-               SF_FORMAT_DPCM_8                = 0x0050,               /* 8 bit differential PCM (XI only) */
-               SF_FORMAT_DPCM_16               = 0x0051,               /* 16 bit differential PCM (XI only) */
-
-
-               /* Endian-ness options. */
-
-               SF_ENDIAN_FILE                  = 0x00000000,   /* Default file endian-ness. */
-               SF_ENDIAN_LITTLE                = 0x10000000,   /* Force little endian-ness. */
-               SF_ENDIAN_BIG                   = 0x20000000,   /* Force big endian-ness. */
-               SF_ENDIAN_CPU                   = 0x30000000,   /* Force CPU endian-ness. */
-
-               SF_FORMAT_SUBMASK               = 0x0000FFFF,
-               SF_FORMAT_TYPEMASK              = 0x0FFF0000,
-               SF_FORMAT_ENDMASK               = 0x30000000
-       }
-
-
-//modes and other
-       public enum lsndf_tf
-       {       /* True and false */
-               SF_FALSE        = 0,
-               SF_TRUE         = 1,
-
-               /* Modes for opening files. */
-               SFM_READ        = 0x10,
-               SFM_WRITE       = 0x20,
-               SFM_RDWR        = 0x30
-       }
-
-
-//important SF_INFO structure
-       [StructLayout(LayoutKind.Sequential)]
-       public struct SF_INFO
-       {
-               public sf_count_t       frames ;                // Used to be called samples.  Changed to avoid confusion.
-               public int                      samplerate ;
-               public int                      channels ;
-               public int                      format ;
-               public int                      sections ;
-               public int                      seekable ;
-       };
-
-
-//function declarations
-//Note: Not all functions have been prototyped here. Only the ones necessary to
-//     make this application work. The below code should give some clues as to
-//     how to add the rest since they have a lot of parameter and return type
-//     similarities.
-       [DllImport("libsndfile.dll")]
-       public static extern IntPtr sf_open ([MarshalAs(UnmanagedType.LPStr)] string path, int mode, ref SF_INFO sfinfo);
-
-       [DllImport("libsndfile.dll")]
-       static extern int sf_error (IntPtr sndfile);
-
-       [DllImport("libsndfile.dll")]
-       static extern IntPtr sf_strerror (IntPtr sndfile);
-
-       [DllImport("libsndfile.dll")]
-       static extern int sf_format_check (ref SF_INFO info);
-
-       [DllImport("libsndfile.dll")]
-       static extern sf_count_t sf_read_float  (IntPtr sndfile, float[] ptr, sf_count_t items);
-
-       [DllImport("libsndfile.dll")]
-       static extern sf_count_t sf_write_float (IntPtr sndfile, float[] ptr, sf_count_t items);
-
-       [DllImport("libsndfile.dll")]
-    static extern int sf_close (IntPtr sndfile);
-
-
-       public const sf_count_t BUFFER_LEN = 4096;
-
-
-//program entry
-       static void Main(  ) {
-
-
-//declarations
-               SF_INFO sfinfo = new SF_INFO();
-               float[] buffer = new float[BUFFER_LEN];
-               sf_count_t rcnt;
-
-//set the input file
-               string sfn = "input.wav";       //set to a file on YOUR system
-               //string sfn = "noexist.wav";   //test with non-existent file
-
-//set the output file
-               string ofn = "output.wav";
-
-//read in sound file to convert
-               IntPtr infile = sf_open (sfn, (int)lsndf_tf.SFM_READ, ref sfinfo);
-
-//exit if error was thrown
-               if ( (int)infile == 0 ) {
-                       Console.WriteLine("Error opening " + sfn);
-                       Console.WriteLine("Error #" + sf_error(infile));
-                       return;
-               }
-
-//set the file type for the output file
-//uncomment one and only one of the statements below to change the output
-//file encoding.
-               //sfinfo.format = (int)(lsndf_frmts.SF_FORMAT_WAV | lsndf_frmts.SF_FORMAT_PCM_U8);
-               //sfinfo.format = (int)(lsndf_frmts.SF_FORMAT_WAV | lsndf_frmts.SF_FORMAT_PCM_16);
-               //sfinfo.format = (int)(lsndf_frmts.SF_FORMAT_WAV | lsndf_frmts.SF_FORMAT_MS_ADPCM);
-               sfinfo.format = (int)(lsndf_frmts.SF_FORMAT_WAV | lsndf_frmts.SF_FORMAT_IMA_ADPCM);
-               //sfinfo.format = (int)(lsndf_frmts.SF_FORMAT_WAV | lsndf_frmts.SF_FORMAT_GSM610);
-               /* Soundforge W64. */
-               //sfinfo.format = (int)(lsndf_frmts.SF_FORMAT_W64 | lsndf_frmts.SF_FORMAT_PCM_U8);
-               //sfinfo.format = (int)(lsndf_frmts.SF_FORMAT_W64 | lsndf_frmts.SF_FORMAT_PCM_16);
-               //sfinfo.format = (int)(lsndf_frmts.SF_FORMAT_W64 | lsndf_frmts.SF_FORMAT_MS_ADPCM);
-               //sfinfo.format = (int)(lsndf_frmts.SF_FORMAT_W64 | lsndf_frmts.SF_FORMAT_IMA_ADPCM);
-               //sfinfo.format = (int)(lsndf_frmts.SF_FORMAT_W64 | lsndf_frmts.SF_FORMAT_GSM610);
-
-
-//check that SF_INFO is valid
-               if ( sf_format_check(ref sfinfo) == 0 ) {
-                       Console.WriteLine("sf_format_check failed. Invalid encoding");
-                       return;
-               }
-
-//open output file
-               IntPtr outfile = sf_open (ofn, (int)lsndf_tf.SFM_WRITE, ref sfinfo);
-
-//exit if error was thrown
-               if ( (int)outfile == 0 ) {
-                       Console.WriteLine("Error opening " + ofn);
-                       Console.WriteLine("Error #" + sf_error(outfile));
-                       return;
-               }
-
-//infile -> outfile
-               Console.Write(sfn + " -> " + ofn);
-               while ( (rcnt = sf_read_float (infile, buffer, BUFFER_LEN)) > 0) {
-                       Console.Write(".");
-                       sf_write_float (outfile, buffer, BUFFER_LEN);
-               }
-               Console.WriteLine("done.");
-
-//close up shop
-               sf_close(infile);
-               sf_close(outfile);
-
-
-       } //main()
-
-
-} //class lsndf_example {}
-
diff --git a/libs/libsndfile/examples/list_formats.c b/libs/libsndfile/examples/list_formats.c
deleted file mode 100644 (file)
index 6d462f0..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
-** Copyright (C) 2001-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include       <stdio.h>
-#include       <stdlib.h>
-#include       <string.h>
-#include       <math.h>
-
-#include       <sndfile.h>
-
-int
-main (void)
-{      SF_FORMAT_INFO  info ;
-       SF_INFO                 sfinfo ;
-       char buffer [128] ;
-       int format, major_count, subtype_count, m, s ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       buffer [0] = 0 ;
-       sf_command (NULL, SFC_GET_LIB_VERSION, buffer, sizeof (buffer)) ;
-       if (strlen (buffer) < 1)
-       {       printf ("Line %d: could not retrieve lib version.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-       printf ("Version : %s\n\n", buffer) ;
-
-       sf_command (NULL, SFC_GET_FORMAT_MAJOR_COUNT, &major_count, sizeof (int)) ;
-       sf_command (NULL, SFC_GET_FORMAT_SUBTYPE_COUNT, &subtype_count, sizeof (int)) ;
-
-       sfinfo.channels = 1 ;
-       for (m = 0 ; m < major_count ; m++)
-       {       info.format = m ;
-               sf_command (NULL, SFC_GET_FORMAT_MAJOR, &info, sizeof (info)) ;
-               printf ("%s  (extension \"%s\")\n", info.name, info.extension) ;
-
-               format = info.format ;
-
-               for (s = 0 ; s < subtype_count ; s++)
-               {       info.format = s ;
-                       sf_command (NULL, SFC_GET_FORMAT_SUBTYPE, &info, sizeof (info)) ;
-
-                       format = (format & SF_FORMAT_TYPEMASK) | info.format ;
-
-                       sfinfo.format = format ;
-                       if (sf_format_check (&sfinfo))
-                               printf ("   %s\n", info.name) ;
-                       } ;
-               puts ("") ;
-               } ;
-       puts ("") ;
-
-       return 0 ;
-} /* main */
-
diff --git a/libs/libsndfile/examples/make_sine.c b/libs/libsndfile/examples/make_sine.c
deleted file mode 100644 (file)
index 1db0e00..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include       <stdio.h>
-#include       <stdlib.h>
-#include       <string.h>
-#include       <math.h>
-
-#include       <sndfile.h>
-
-#ifndef                M_PI
-#define                M_PI            3.14159265358979323846264338
-#endif
-
-#define                SAMPLE_RATE                     44100
-#define                SAMPLE_COUNT            (SAMPLE_RATE * 4)       /* 4 seconds */
-#define                AMPLITUDE                       (1.0 * 0x7F000000)
-#define                LEFT_FREQ                       (344.0 / SAMPLE_RATE)
-#define                RIGHT_FREQ                      (466.0 / SAMPLE_RATE)
-
-int
-main (void)
-{      SNDFILE *file ;
-       SF_INFO sfinfo ;
-       int             k ;
-       int     *buffer ;
-
-       if (! (buffer = malloc (2 * SAMPLE_COUNT * sizeof (int))))
-       {       printf ("Malloc failed.\n") ;
-               exit (0) ;
-               } ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = SAMPLE_COUNT ;
-       sfinfo.channels         = 2 ;
-       sfinfo.format           = (SF_FORMAT_WAV | SF_FORMAT_PCM_24) ;
-
-       if (! (file = sf_open ("sine.wav", SFM_WRITE, &sfinfo)))
-       {       printf ("Error : Not able to open output file.\n") ;
-               return 1 ;
-               } ;
-
-       if (sfinfo.channels == 1)
-       {       for (k = 0 ; k < SAMPLE_COUNT ; k++)
-                       buffer [k] = AMPLITUDE * sin (LEFT_FREQ * 2 * k * M_PI) ;
-               }
-       else if (sfinfo.channels == 2)
-       {       for (k = 0 ; k < SAMPLE_COUNT ; k++)
-               {       buffer [2 * k] = AMPLITUDE * sin (LEFT_FREQ * 2 * k * M_PI) ;
-                       buffer [2 * k + 1] = AMPLITUDE * sin (RIGHT_FREQ * 2 * k * M_PI) ;
-                       } ;
-               }
-       else
-       {       printf ("makesine can only generate mono or stereo files.\n") ;
-               exit (1) ;
-               } ;
-
-       if (sf_write_int (file, buffer, sfinfo.channels * SAMPLE_COUNT) !=
-                                                                                       sfinfo.channels * SAMPLE_COUNT)
-               puts (sf_strerror (file)) ;
-
-       sf_close (file) ;
-       return 0 ;
-} /* main */
-
diff --git a/libs/libsndfile/examples/sfprocess.c b/libs/libsndfile/examples/sfprocess.c
deleted file mode 100644 (file)
index 1c141a4..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
-** Copyright (C) 2001-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**      * Redistributions of source code must retain the above copyright
-**        notice, this list of conditions and the following disclaimer.
-**      * Redistributions in binary form must reproduce the above copyright
-**        notice, this list of conditions and the following disclaimer in
-**        the documentation and/or other materials provided with the
-**        distribution.
-**      * Neither the author nor the names of any contributors may be used
-**        to endorse or promote products derived from this software without
-**        specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include       <stdio.h>
-#include       <string.h>
-
-/* Include this header file to use functions from libsndfile. */
-#include       <sndfile.h>
-
-/*     This will be the length of the buffer used to hold.frames while
-**     we process them.
-*/
-#define                BUFFER_LEN      1024
-
-/* libsndfile can handle more than 6 channels but we'll restrict it to 6. */
-#define                MAX_CHANNELS    6
-
-/* Function prototype. */
-static void process_data (double *data, int count, int channels) ;
-
-
-int
-main (void)
-{      /* This is a buffer of double precision floating point values
-       ** which will hold our data while we process it.
-       */
-       static double data [BUFFER_LEN] ;
-
-       /* A SNDFILE is very much like a FILE in the Standard C library. The
-       ** sf_open function return an SNDFILE* pointer when they sucessfully
-       ** open the specified file.
-       */
-       SNDFILE *infile, *outfile ;
-
-       /* A pointer to an SF_INFO struct is passed to sf_open.
-       ** On read, the library fills this struct with information about the file.
-       ** On write, the struct must be filled in before calling sf_open.
-       */
-       SF_INFO         sfinfo ;
-       int                     readcount ;
-       const char      *infilename = "input.wav" ;
-       const char      *outfilename = "output.wav" ;
-
-       /* The SF_INFO struct must be initialized before using it.
-       */
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       /* Here's where we open the input file. We pass sf_open the file name and
-       ** a pointer to an SF_INFO struct.
-       ** On successful open, sf_open returns a SNDFILE* pointer which is used
-       ** for all subsequent operations on that file.
-       ** If an error occurs during sf_open, the function returns a NULL pointer.
-       **
-       ** If you are trying to open a raw headerless file you will need to set the
-       ** format and channels fields of sfinfo before calling sf_open(). For
-       ** instance to open a raw 16 bit stereo PCM file you would need the following
-       ** two lines:
-       **
-       **              sfinfo.format   = SF_FORMAT_RAW | SF_FORMAT_PCM_16 ;
-       **              sfinfo.channels = 2 ;
-       */
-       if (! (infile = sf_open (infilename, SFM_READ, &sfinfo)))
-       {       /* Open failed so print an error message. */
-               printf ("Not able to open input file %s.\n", infilename) ;
-               /* Print the error message from libsndfile. */
-               puts (sf_strerror (NULL)) ;
-               return 1 ;
-               } ;
-
-       if (sfinfo.channels > MAX_CHANNELS)
-       {       printf ("Not able to process more than %d channels\n", MAX_CHANNELS) ;
-               return 1 ;
-               } ;
-       /* Open the output file. */
-       if (! (outfile = sf_open (outfilename, SFM_WRITE, &sfinfo)))
-       {       printf ("Not able to open output file %s.\n", outfilename) ;
-               puts (sf_strerror (NULL)) ;
-               return 1 ;
-               } ;
-
-       /* While there are.frames in the input file, read them, process
-       ** them and write them to the output file.
-       */
-       while ((readcount = sf_read_double (infile, data, BUFFER_LEN)))
-       {       process_data (data, readcount, sfinfo.channels) ;
-               sf_write_double (outfile, data, readcount) ;
-               } ;
-
-       /* Close input and output files. */
-       sf_close (infile) ;
-       sf_close (outfile) ;
-
-       return 0 ;
-} /* main */
-
-static void
-process_data (double *data, int count, int channels)
-{      double channel_gain [MAX_CHANNELS] = { 0.5, 0.8, 0.1, 0.4, 0.4, 0.9 } ;
-       int k, chan ;
-
-       /* Process the data here.
-       ** If the soundfile contains more then 1 channel you need to take care of
-       ** the data interleaving youself.
-       ** Current we just apply a channel dependant gain.
-       */
-
-       for (chan = 0 ; chan < channels ; chan ++)
-               for (k = chan ; k < count ; k+= channels)
-                       data [k] *= channel_gain [chan] ;
-
-       return ;
-} /* process_data */
-
diff --git a/libs/libsndfile/examples/sndfile-convert.c b/libs/libsndfile/examples/sndfile-convert.c
deleted file mode 100644 (file)
index e142257..0000000
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
-** Copyright (C) 1999-2005 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <sndfile.h>
-
-#define         BUFFER_LEN     1024
-
-
-typedef        struct
-{      char    *infilename, *outfilename ;
-       SF_INFO infileinfo, outfileinfo ;
-} OptionData ;
-
-typedef struct
-{      const char      *ext ;
-       int                     len ;
-       int                     format ;
-} OUTPUT_FORMAT_MAP ;
-
-static void copy_metadata (SNDFILE *outfile, SNDFILE *infile) ;
-static void copy_data_fp (SNDFILE *outfile, SNDFILE *infile, int channels) ;
-static void copy_data_int (SNDFILE *outfile, SNDFILE *infile, int channels) ;
-
-static OUTPUT_FORMAT_MAP format_map [] =
-{
-       {       "aif",          3,      SF_FORMAT_AIFF  },
-       {       "wav",          0,      SF_FORMAT_WAV   },
-       {       "au",           0,      SF_FORMAT_AU    },
-       {       "caf",          0,      SF_FORMAT_CAF   },
-       {       "flac",         0,      SF_FORMAT_FLAC  },
-       {       "snd",          0,      SF_FORMAT_AU    },
-       {       "svx",          0,      SF_FORMAT_SVX   },
-       {       "paf",          0,      SF_ENDIAN_BIG | SF_FORMAT_PAF   },
-       {       "fap",          0,      SF_ENDIAN_LITTLE | SF_FORMAT_PAF        },
-       {       "gsm",          0,      SF_FORMAT_RAW   },
-       {       "nist",         0,      SF_FORMAT_NIST  },
-       {       "ircam",        0,      SF_FORMAT_IRCAM },
-       {       "sf",           0,      SF_FORMAT_IRCAM },
-       {       "voc",          0,      SF_FORMAT_VOC   },
-       {       "w64",          0,      SF_FORMAT_W64   },
-       {       "raw",          0,      SF_FORMAT_RAW   },
-       {       "mat4",         0,      SF_FORMAT_MAT4  },
-       {       "mat5",         0,      SF_FORMAT_MAT5  },
-       {       "mat",          0,      SF_FORMAT_MAT4  },
-       {       "pvf",          0,      SF_FORMAT_PVF   },
-       {       "sds",          0,      SF_FORMAT_SDS   },
-       {       "sd2",          0,      SF_FORMAT_SD2   },
-       {       "vox",          0,      SF_FORMAT_RAW   },
-       {       "xi",           0,      SF_FORMAT_XI    }
-} ; /* format_map */
-
-static int
-guess_output_file_type (char *str, int format)
-{      char    buffer [16], *cptr ;
-       int             k ;
-
-       format &= SF_FORMAT_SUBMASK ;
-
-       if ((cptr = strrchr (str, '.')) == NULL)
-               return 0 ;
-
-       strncpy (buffer, cptr + 1, 15) ;
-       buffer [15] = 0 ;
-
-       for (k = 0 ; buffer [k] ; k++)
-               buffer [k] = tolower ((buffer [k])) ;
-
-       if (strcmp (buffer, "gsm") == 0)
-               return SF_FORMAT_RAW | SF_FORMAT_GSM610 ;
-
-       if (strcmp (buffer, "vox") == 0)
-               return SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM ;
-
-       for (k = 0 ; k < (int) (sizeof (format_map) / sizeof (format_map [0])) ; k++)
-       {       if (format_map [k].len > 0 && strncmp (buffer, format_map [k].ext, format_map [k].len) == 0)
-                       return format_map [k].format | format ;
-               else if (strcmp (buffer, format_map [k].ext) == 0)
-                       return format_map [k].format | format ;
-               } ;
-
-       return  0 ;
-} /* guess_output_file_type */
-
-
-static void
-print_usage (char *progname)
-{      SF_FORMAT_INFO  info ;
-
-       int k ;
-
-       printf ("\nUsage : %s [encoding] <input file> <output file>\n", progname) ;
-       puts ("\n"
-               "    where [encoding] may be one of the following:\n\n"
-               "        -pcms8     : force the output to signed 8 bit pcm\n"
-               "        -pcmu8     : force the output to unsigned 8 bit pcm\n"
-               "        -pcm16     : force the output to 16 bit pcm\n"
-               "        -pcm24     : force the output to 24 bit pcm\n"
-               "        -pcm32     : force the output to 32 bit pcm\n"
-               "        -float32   : force the output to 32 bit floating point"
-               ) ;
-       puts (
-               "        -ulaw      : force the output ULAW\n"
-               "        -alaw      : force the output ALAW\n"
-               "        -ima-adpcm : force the output to IMA ADPCM (WAV only)\n"
-               "        -ms-adpcm  : force the output to MS ADPCM (WAV only)\n"
-               "        -gsm610    : force the GSM6.10 (WAV only)\n"
-               "        -dwvw12    : force the output to 12 bit DWVW (AIFF only)\n"
-               "        -dwvw16    : force the output to 16 bit DWVW (AIFF only)\n"
-               "        -dwvw24    : force the output to 24 bit DWVW (AIFF only)\n"
-               ) ;
-
-       puts (
-               "    The format of the output file is determined by the file extension of the\n"
-               "    output file name. The following extensions are currently understood:\n"
-               ) ;
-
-       for (k = 0 ; k < (int) (sizeof (format_map) / sizeof (format_map [0])) ; k++)
-       {       info.format = format_map [k].format ;
-               sf_command (NULL, SFC_GET_FORMAT_INFO, &info, sizeof (info)) ;
-               printf ("        %-10s : %s\n", format_map [k].ext, info.name) ;
-               } ;
-
-       puts ("") ;
-} /* print_usage */
-
-int
-main (int argc, char * argv [])
-{      char            *progname, *infilename, *outfilename ;
-       SNDFILE         *infile = NULL, *outfile = NULL ;
-       SF_INFO         sfinfo ;
-       int                     k, outfilemajor, outfileminor = 0, infileminor ;
-
-       progname = strrchr (argv [0], '/') ;
-       progname = progname ? progname + 1 : argv [0] ;
-
-       if (argc < 3 || argc > 5)
-       {       print_usage (progname) ;
-               return 1 ;
-               } ;
-
-       infilename = argv [argc-2] ;
-       outfilename = argv [argc-1] ;
-
-       if (strcmp (infilename, outfilename) == 0)
-       {       printf ("Error : Input and output filenames are the same.\n\n") ;
-               print_usage (progname) ;
-               return 1 ;
-               } ;
-
-       if (infilename [0] == '-')
-       {       printf ("Error : Input filename (%s) looks like an option.\n\n", infilename) ;
-               print_usage (progname) ;
-               return 1 ;
-               } ;
-
-       if (outfilename [0] == '-')
-       {       printf ("Error : Output filename (%s) looks like an option.\n\n", outfilename) ;
-               print_usage (progname) ;
-               return 1 ;
-               } ;
-
-       for (k = 1 ; k < argc - 2 ; k++)
-       {       if (! strcmp (argv [k], "-pcms8"))
-               {       outfileminor = SF_FORMAT_PCM_S8 ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-pcmu8"))
-               {       outfileminor = SF_FORMAT_PCM_U8 ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-pcm16"))
-               {       outfileminor = SF_FORMAT_PCM_16 ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-pcm24"))
-               {       outfileminor = SF_FORMAT_PCM_24 ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-pcm32"))
-               {       outfileminor = SF_FORMAT_PCM_32 ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-float32"))
-               {       outfileminor = SF_FORMAT_FLOAT ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-ulaw"))
-               {       outfileminor = SF_FORMAT_ULAW ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-alaw"))
-               {       outfileminor = SF_FORMAT_ALAW ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-ima-adpcm"))
-               {       outfileminor = SF_FORMAT_IMA_ADPCM ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-ms-adpcm"))
-               {       outfileminor = SF_FORMAT_MS_ADPCM ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-gsm610"))
-               {       outfileminor = SF_FORMAT_GSM610 ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-dwvw12"))
-               {       outfileminor = SF_FORMAT_DWVW_12 ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-dwvw16"))
-               {       outfileminor = SF_FORMAT_DWVW_16 ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-dwvw24"))
-               {       outfileminor = SF_FORMAT_DWVW_24 ;
-                       continue ;
-                       } ;
-
-               printf ("Error : Not able to decode argunment '%s'.\n", argv [k]) ;
-               exit (1) ;
-               } ;
-
-       if ((infile = sf_open (infilename, SFM_READ, &sfinfo)) == NULL)
-       {       printf ("Not able to open input file %s.\n", infilename) ;
-               puts (sf_strerror (NULL)) ;
-               return 1 ;
-               } ;
-
-       infileminor = sfinfo.format & SF_FORMAT_SUBMASK ;
-
-       if ((sfinfo.format = guess_output_file_type (outfilename, sfinfo.format)) == 0)
-       {       printf ("Error : Not able to determine output file type for %s.\n", outfilename) ;
-               return 1 ;
-               } ;
-
-       outfilemajor = sfinfo.format & (SF_FORMAT_TYPEMASK | SF_FORMAT_ENDMASK) ;
-
-       if (outfileminor == 0)
-               outfileminor = sfinfo.format & SF_FORMAT_SUBMASK ;
-
-       if (outfileminor != 0)
-               sfinfo.format = outfilemajor | outfileminor ;
-       else
-               sfinfo.format = outfilemajor | (sfinfo.format & SF_FORMAT_SUBMASK) ;
-
-       if ((sfinfo.format & SF_FORMAT_TYPEMASK) == SF_FORMAT_XI)
-               switch (sfinfo.format & SF_FORMAT_SUBMASK)
-               {       case SF_FORMAT_PCM_16 :
-                                       sfinfo.format = outfilemajor | SF_FORMAT_DPCM_16 ;
-                                       break ;
-
-                       case SF_FORMAT_PCM_S8 :
-                       case SF_FORMAT_PCM_U8 :
-                                       sfinfo.format = outfilemajor | SF_FORMAT_DPCM_8 ;
-                                       break ;
-                       } ;
-
-       if (sf_format_check (&sfinfo) == 0)
-       {       printf ("Error : output file format is invalid (0x%08X).\n", sfinfo.format) ;
-               return 1 ;
-               } ;
-
-       /* Open the output file. */
-       if ((outfile = sf_open (outfilename, SFM_WRITE, &sfinfo)) == NULL)
-       {       printf ("Not able to open output file %s : %s\n", outfilename, sf_strerror (NULL)) ;
-               return 1 ;
-               } ;
-
-       /* Copy the metadata */
-       copy_metadata (outfile, infile) ;
-
-       if ((outfileminor == SF_FORMAT_DOUBLE) || (outfileminor == SF_FORMAT_FLOAT) ||
-                               (infileminor == SF_FORMAT_DOUBLE) || (infileminor == SF_FORMAT_FLOAT))
-               copy_data_fp (outfile, infile, sfinfo.channels) ;
-       else
-               copy_data_int (outfile, infile, sfinfo.channels) ;
-
-       sf_close (infile) ;
-       sf_close (outfile) ;
-
-       return 0 ;
-} /* main */
-
-static void
-copy_metadata (SNDFILE *outfile, SNDFILE *infile)
-{      SF_INSTRUMENT inst ;
-       const char *str ;
-       int k, err = 0 ;
-
-       for (k = SF_STR_FIRST ; k <= SF_STR_LAST ; k++)
-       {       str = sf_get_string (infile, k) ;
-               if (str != NULL)
-                       err = sf_set_string (outfile, k, str) ;
-               } ;
-
-       memset (&inst, 0, sizeof (inst)) ;
-       if (sf_command (infile, SFC_GET_INSTRUMENT, &inst, sizeof (inst)) == SF_TRUE)
-               sf_command (outfile, SFC_SET_INSTRUMENT, &inst, sizeof (inst)) ;
-
-} /* copy_metadata */
-
-static void
-copy_data_fp (SNDFILE *outfile, SNDFILE *infile, int channels)
-{      static double   data [BUFFER_LEN], max ;
-       int             frames, readcount, k ;
-
-       frames = BUFFER_LEN / channels ;
-       readcount = frames ;
-
-       sf_command (infile, SFC_CALC_SIGNAL_MAX, &max, sizeof (max)) ;
-
-       if (max < 1.0)
-       {       while (readcount > 0)
-               {       readcount = sf_readf_double (infile, data, frames) ;
-                       sf_writef_double (outfile, data, readcount) ;
-                       } ;
-               }
-       else
-       {       sf_command (infile, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-               while (readcount > 0)
-               {       readcount = sf_readf_double (infile, data, frames) ;
-                       for (k = 0 ; k < readcount * channels ; k++)
-                               data [k] /= max ;
-                       sf_writef_double (outfile, data, readcount) ;
-                       } ;
-               } ;
-
-       return ;
-} /* copy_data_fp */
-
-static void
-copy_data_int (SNDFILE *outfile, SNDFILE *infile, int channels)
-{      static int      data [BUFFER_LEN] ;
-       int             frames, readcount ;
-
-       frames = BUFFER_LEN / channels ;
-       readcount = frames ;
-
-       while (readcount > 0)
-       {       readcount = sf_readf_int (infile, data, frames) ;
-               sf_writef_int (outfile, data, readcount) ;
-               } ;
-
-       return ;
-} /* copy_data_int */
-
-/*
-** Do not edit or modify anything in this comment block.
-** The arch-tag line is a file identity tag for the GNU Arch
-** revision control system.
-**
-** arch-tag: 259682b3-2887-48a6-b5bb-3cde00521ba3
-*/
diff --git a/libs/libsndfile/examples/sndfile-info.c b/libs/libsndfile/examples/sndfile-info.c
deleted file mode 100644 (file)
index 44e2ec1..0000000
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
-** Copyright (C) 1999-2006 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       <stdio.h>
-#include       <stdlib.h>
-#include       <string.h>
-#include       <ctype.h>
-#include       <math.h>
-
-#include       <sndfile.h>
-
-#define        BUFFER_LEN              (1 << 16)
-
-#if (defined (WIN32) || defined (_WIN32))
-#define        snprintf        _snprintf
-#endif
-
-static void print_version (void) ;
-static void print_usage (const char *progname) ;
-
-static void info_dump (const char *filename) ;
-static void instrument_dump (const char *filename) ;
-static void broadcast_dump (const char *filename) ;
-
-int
-main (int argc, char *argv [])
-{      int     k ;
-
-       print_version () ;
-
-       if (argc < 2 || strcmp (argv [1], "--help") == 0 || strcmp (argv [1], "-h") == 0)
-       {       char *progname ;
-
-               progname = strrchr (argv [0], '/') ;
-               progname = progname ? progname + 1 : argv [0] ;
-
-               print_usage (progname) ;
-               return 1 ;
-               } ;
-
-       if (strcmp (argv [1], "-i") == 0)
-       {       instrument_dump (argv [2]) ;
-               return 0 ;
-               } ;
-
-       if (strcmp (argv [1], "-b") == 0)
-       {       broadcast_dump (argv [2]) ;
-               return 0 ;
-               } ;
-
-       for (k = 1 ; k < argc ; k++)
-               info_dump (argv [k]) ;
-
-       return 0 ;
-} /* main */
-
-/*==============================================================================
-**     Print version and usage.
-*/
-
-static double  data [BUFFER_LEN] ;
-
-static void
-print_version (void)
-{      char buffer [256] ;
-
-       sf_command (NULL, SFC_GET_LIB_VERSION, buffer, sizeof (buffer)) ;
-       printf ("\nVersion : %s\n\n", buffer) ;
-} /* print_version */
-
-
-static void
-print_usage (const char *progname)
-{      printf ("Usage :\n  %s <file> ...\n", progname) ;
-       printf ("    Prints out information about one or more sound files.\n\n") ;
-       printf ("  %s -i <file>\n", progname) ;
-       printf ("    Prints out the instrument data for the given file.\n\n") ;
-       printf ("  %s -b <file>\n", progname) ;
-       printf ("    Prints out the broadcast WAV info for the given file.\n\n") ;
-#if (defined (_WIN32) || defined (WIN32))
-               printf ("This is a Unix style command line application which\n"
-                               "should be run in a MSDOS box or Command Shell window.\n\n") ;
-               printf ("Sleeping for 5 seconds before exiting.\n\n") ;
-               fflush (stdout) ;
-
-               /* This is the officially blessed by microsoft way but I can't get
-               ** it to link.
-               **     Sleep (15) ;
-               ** Instead, use this:
-               */
-               _sleep (5 * 1000) ;
-#endif
-} /* print_usage */
-
-/*==============================================================================
-**     Dumping of sndfile info.
-*/
-
-static double  data [BUFFER_LEN] ;
-
-static double
-get_signal_max (SNDFILE *file)
-{      double  max, temp ;
-       int             readcount, k, save_state ;
-
-       save_state = sf_command (file, SFC_GET_NORM_DOUBLE, NULL, 0) ;
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-       max = 0.0 ;
-       while ((readcount = sf_read_double (file, data, BUFFER_LEN)))
-       {       for (k = 0 ; k < readcount ; k++)
-               {       temp = fabs (data [k]) ;
-                       if (temp > max)
-                               max = temp ;
-                       } ;
-               } ;
-
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, save_state) ;
-
-       return max ;
-} /* get_signal_max */
-
-static double
-calc_decibels (SF_INFO * sfinfo, double max)
-{      double decibels ;
-
-       switch (sfinfo->format & SF_FORMAT_SUBMASK)
-       {       case SF_FORMAT_PCM_U8 :
-               case SF_FORMAT_PCM_S8 :
-                       decibels = max / 0x80 ;
-                       break ;
-
-               case SF_FORMAT_PCM_16 :
-                       decibels = max / 0x8000 ;
-                       break ;
-
-               case SF_FORMAT_PCM_24 :
-                       decibels = max / 0x800000 ;
-                       break ;
-
-               case SF_FORMAT_PCM_32 :
-                       decibels = max / 0x80000000 ;
-                       break ;
-
-               case SF_FORMAT_FLOAT :
-               case SF_FORMAT_DOUBLE :
-                       decibels = max / 1.0 ;
-                       break ;
-
-               default :
-                       decibels = max / 0x8000 ;
-                       break ;
-               } ;
-
-       return 20.0 * log10 (decibels) ;
-} /* calc_decibels */
-
-static const char *
-generate_duration_str (SF_INFO *sfinfo)
-{      static char str [128] ;
-
-       int seconds ;
-
-       memset (str, 0, sizeof (str)) ;
-
-       if (sfinfo->samplerate < 1)
-               return NULL ;
-
-       if (sfinfo->frames / sfinfo->samplerate > 0x7FFFFFFF)
-               return "unknown" ;
-
-       seconds = sfinfo->frames / sfinfo->samplerate ;
-
-       snprintf (str, sizeof (str) - 1, "%02d:", seconds / 60 / 60) ;
-
-       seconds = seconds % (60 * 60) ;
-       snprintf (str + strlen (str), sizeof (str) - strlen (str) - 1, "%02d:", seconds / 60) ;
-
-       seconds = seconds % 60 ;
-       snprintf (str + strlen (str), sizeof (str) - strlen (str) - 1, "%02d.", seconds) ;
-
-       seconds = ((1000 * sfinfo->frames) / sfinfo->samplerate) % 1000 ;
-       snprintf (str + strlen (str), sizeof (str) - strlen (str) - 1, "%03d", seconds) ;
-
-       return str ;
-} /* generate_duration_str */
-
-static void
-info_dump (const char *filename)
-{      static  char    strbuffer [BUFFER_LEN] ;
-       SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       double          signal_max, decibels ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-       {       printf ("Error : Not able to open input file %s.\n", filename) ;
-               fflush (stdout) ;
-               memset (data, 0, sizeof (data)) ;
-               sf_command (file, SFC_GET_LOG_INFO, strbuffer, BUFFER_LEN) ;
-               puts (strbuffer) ;
-               puts (sf_strerror (NULL)) ;
-               return ;
-               } ;
-
-       printf ("========================================\n") ;
-       sf_command (file, SFC_GET_LOG_INFO, strbuffer, BUFFER_LEN) ;
-       puts (strbuffer) ;
-       printf ("----------------------------------------\n") ;
-
-       if (file == NULL)
-       {       printf ("Error : Not able to open input file %s.\n", filename) ;
-               fflush (stdout) ;
-               memset (data, 0, sizeof (data)) ;
-               puts (sf_strerror (NULL)) ;
-               }
-       else
-       {       printf ("Sample Rate : %d\n", sfinfo.samplerate) ;
-               if (sfinfo.frames > 0x7FFFFFFF)
-                       printf ("Frames      : unknown\n") ;
-               else
-                       printf ("Frames      : %ld\n", (long) sfinfo.frames) ;
-               printf ("Channels    : %d\n", sfinfo.channels) ;
-               printf ("Format      : 0x%08X\n", sfinfo.format) ;
-               printf ("Sections    : %d\n", sfinfo.sections) ;
-               printf ("Seekable    : %s\n", (sfinfo.seekable ? "TRUE" : "FALSE")) ;
-               printf ("Duration    : %s\n", generate_duration_str (&sfinfo)) ;
-
-               /* Do not use sf_signal_max because it doesn work for non-seekable files . */
-               signal_max = get_signal_max (file) ;
-               decibels = calc_decibels (&sfinfo, signal_max) ;
-               printf ("Signal Max  : %g (%4.2f dB)\n\n", signal_max, decibels) ;
-               } ;
-
-       sf_close (file) ;
-
-} /* info_dump */
-
-/*==============================================================================
-**     Dumping of SF_INSTRUMENT data.
-*/
-
-static const char *
-str_of_type (int mode)
-{      switch (mode)
-       {       case SF_LOOP_NONE : return "none" ;
-               case SF_LOOP_FORWARD : return "fwd " ;
-               case SF_LOOP_BACKWARD : return "back" ;
-               case SF_LOOP_ALTERNATING : return "alt " ;
-               default : break ;
-               } ;
-
-       return "????" ;
-} /* str_of_mode */
-
-static void
-instrument_dump (const char *filename)
-{      SNDFILE  *file ;
-       SF_INFO  sfinfo ;
-       SF_INSTRUMENT inst ;
-       int got_inst, k ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-       {       printf ("Error : Not able to open input file %s.\n", filename) ;
-               fflush (stdout) ;
-               memset (data, 0, sizeof (data)) ;
-               puts (sf_strerror (NULL)) ;
-               return ;
-               } ;
-
-       got_inst = sf_command (file, SFC_GET_INSTRUMENT, &inst, sizeof (inst)) ;
-       sf_close (file) ;
-
-       if (got_inst == SF_FALSE)
-       {       printf ("Error : File '%s' does not contain instrument data.\n\n", filename) ;
-               return ;
-               } ;
-
-       printf ("Instrument : %s\n\n", filename) ;
-       printf ("  Gain        : %d\n", inst.gain) ;
-       printf ("  Base note   : %d\n", inst.basenote) ;
-       printf ("  Velocity    : %d - %d\n", (int) inst.velocity_lo, (int) inst.velocity_hi) ;
-       printf ("  Key         : %d - %d\n", (int) inst.key_lo, (int) inst.key_hi) ;
-       printf ("  Loop points : %d\n", inst.loop_count) ;
-
-       for (k = 0 ; k < inst.loop_count ; k++)
-               printf ("  %-2d    Mode : %s    Start : %6d   End : %6d   Count : %6d\n", k, str_of_type (inst.loops [k].mode), inst.loops [k].start, inst.loops [k].end, inst.loops [k].count) ;
-
-       putchar ('\n') ;
-} /* instrument_dump */
-
-static void
-broadcast_dump (const char *filename)
-{      SNDFILE  *file ;
-       SF_INFO  sfinfo ;
-       SF_BROADCAST_INFO bext ;
-       int got_bext ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-       {       printf ("Error : Not able to open input file %s.\n", filename) ;
-               fflush (stdout) ;
-               memset (data, 0, sizeof (data)) ;
-               puts (sf_strerror (NULL)) ;
-               return ;
-               } ;
-
-       memset (&bext, 0, sizeof (SF_BROADCAST_INFO)) ;
-
-       got_bext = sf_command (file, SFC_GET_BROADCAST_INFO, &bext, sizeof (bext)) ;
-       sf_close (file) ;
-
-       if (got_bext == SF_FALSE)
-       {       printf ("Error : File '%s' does not contain broadcast information.\n\n", filename) ;
-               return ;
-               } ;
-
-       printf ("Description      : %.*s\n", (int) sizeof (bext.description), bext.description) ;
-       printf ("Originator       : %.*s\n", (int) sizeof (bext.originator), bext.originator) ;
-       printf ("Origination ref  : %.*s\n", (int) sizeof (bext.originator_reference), bext.originator_reference) ;
-       printf ("Origination date : %.*s\n", (int) sizeof (bext.origination_date), bext.origination_date) ;
-       printf ("Origination time : %.*s\n", (int) sizeof (bext.origination_time), bext.origination_time) ;
-       printf ("BWF version      : %d\n", bext.version) ;
-       printf ("UMID             : %.*s\n", (int) sizeof (bext.umid), bext.umid) ;
-       printf ("Coding history   : %.*s\n", bext.coding_history_size, bext.coding_history) ;
-
-} /* broadcast_dump */
-
-/*
-** Do not edit or modify anything in this comment block.
-** The arch-tag line is a file identity tag for the GNU Arch
-** revision control system.
-**
-** arch-tag: f59a05db-a182-41de-aedd-d717ce2bb099
-*/
diff --git a/libs/libsndfile/examples/sndfile-play-beos.cpp b/libs/libsndfile/examples/sndfile-play-beos.cpp
deleted file mode 100644 (file)
index 56f7415..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
-** Copyright (C) 2001 Marcus Overhagen <marcus@overhagen.de>
-**  
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-** 
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-** 
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software 
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       <stdio.h>
-
-#include       <Application.h>
-#include       <SoundPlayer.h>
-#include       <string.h>
-
-#include       <sndfile.h>
-
-#define        BUFFER_LEN              1024
-
-/*------------------------------------------------------------------------------
-**     BeOS functions for playing a sound.
-*/
-
-#if defined (__BEOS__)
-
-struct shared_data
-{
-       BSoundPlayer *player;
-       SNDFILE *sndfile;
-       SF_INFO sfinfo; 
-       sem_id finished;
-};
-
-static void 
-buffer_callback(void *theCookie, void *buf, size_t size, const media_raw_audio_format &format) 
-{
-       shared_data *data = (shared_data *)theCookie;
-       short *buffer = (short *)buf;
-       int count = size / sizeof(short);
-       int m, readcount;
-
-       if (!data->player->HasData())
-               return;
-
-       readcount = sf_read_short(data->sndfile, buffer, count);
-       if (readcount == 0) 
-       {       data->player->SetHasData(false);                
-               release_sem(data->finished);
-               }
-       if (readcount < count) 
-       {       for (m = readcount ; m < count ; m++)
-                       buffer [m] = 0 ;
-               }
-       if (data->sfinfo.pcmbitwidth < 16) 
-       {       for (m = 0 ; m < count ; m++)
-                       buffer [m] *= 256 ;
-               }
-}
-
-static void
-beos_play (int argc, char *argv [])
-{
-       shared_data data;
-       status_t status;
-       int     k;
-
-       /* BSoundPlayer requires a BApplication object */
-       BApplication app("application/x-vnd.MarcusOverhagen-sfplay");
-
-       for (k = 1 ; k < argc ; k++)
-       {       printf ("Playing %s\n", argv [k]) ;     
-               if (! (data.sndfile = sf_open_read (argv [k], &data.sfinfo)))
-               {       sf_perror (NULL) ;
-                       continue ;
-                       } ;
-                       
-               if (data.sfinfo.channels < 1 || data.sfinfo.channels > 2)
-               {       printf ("Error : channels = %d.\n", data.sfinfo.channels) ;
-                       sf_close (data.sndfile) ;
-                       continue ;
-                       } ;             
-
-               data.finished = create_sem(0,"finished");                       
-
-               media_raw_audio_format format = 
-               {       data.sfinfo.samplerate,
-                       data.sfinfo.channels,
-                       media_raw_audio_format::B_AUDIO_SHORT,
-                       B_HOST_IS_LENDIAN ? B_MEDIA_LITTLE_ENDIAN : B_MEDIA_BIG_ENDIAN,
-                       BUFFER_LEN * sizeof(short)
-                       };
-
-               BSoundPlayer player(&format,"player",buffer_callback,NULL,&data);
-               data.player = &player;
-               
-               if ((status = player.InitCheck()) != B_OK) 
-               {
-                       printf ("Error : BSoundPlayer init failed, %s.\n", strerror(status)) ;
-                       delete_sem(data.finished);
-                       sf_close (data.sndfile) ;
-                       continue ;
-                       }
-
-               player.SetVolume(1.0);
-               player.Start();
-               player.SetHasData(true);
-               acquire_sem(data.finished);
-               player.Stop();
-               delete_sem(data.finished);
-               
-               sf_close (data.sndfile) ;
-
-               } ;
-
-} /* beos_play */
-
-#endif
-
-/*==============================================================================
-**     Main function.
-*/
-
-int 
-main (int argc, char *argv [])
-{
-       if (argc < 2)
-       {       printf ("Usage : %s <input sound file>\n\n", argv [0]) ;
-               return 1 ;
-               } ;
-       
-       beos_play (argc, argv) ;
-
-       return 0 ;
-} /* main */
-               
-
-/*
-** Do not edit or modify anything in this comment block.
-** The arch-tag line is a file identity tag for the GNU Arch 
-** revision control system.
-**
-** arch-tag: 5407a79d-88de-41c7-8d8e-9acf2cf13cc1
-*/
-
diff --git a/libs/libsndfile/examples/sndfile-play.c b/libs/libsndfile/examples/sndfile-play.c
deleted file mode 100644 (file)
index 7969693..0000000
+++ /dev/null
@@ -1,960 +0,0 @@
-/*
-** Copyright (C) 1999-2005 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if HAVE_ALSA_ASOUNDLIB_H
-       #define ALSA_PCM_NEW_HW_PARAMS_API
-       #define ALSA_PCM_NEW_SW_PARAMS_API
-       #include <alsa/asoundlib.h>
-       #include <sys/time.h>
-#endif
-
-#if defined (__linux__)
-       #include        <fcntl.h>
-       #include        <sys/ioctl.h>
-       #include        <sys/soundcard.h>
-
-#elif (defined (__MACH__) && defined (__APPLE__))
-       #include <Carbon.h>
-       #include <CoreAudio/AudioHardware.h>
-
-#elif (defined (sun) && defined (unix))
-       #include <fcntl.h>
-       #include <sys/ioctl.h>
-       #include <sys/audioio.h>
-
-#elif (OS_IS_WIN32 == 1)
-       #include <windows.h>
-       #include <mmsystem.h>
-
-#endif
-
-#include       <sndfile.h>
-
-#define        SIGNED_SIZEOF(x)        ((int) sizeof (x))
-#define        BUFFER_LEN                      (2048)
-
-/*------------------------------------------------------------------------------
-**     Linux/OSS functions for playing a sound.
-*/
-
-#if HAVE_ALSA_ASOUNDLIB_H
-
-static snd_pcm_t * alsa_open (int channels, unsigned srate, int realtime) ;
-static int alsa_write_float (snd_pcm_t *alsa_dev, float *data, int frames, int channels) ;
-
-static void
-alsa_play (int argc, char *argv [])
-{      static float buffer [BUFFER_LEN] ;
-       SNDFILE *sndfile ;
-       SF_INFO sfinfo ;
-       snd_pcm_t * alsa_dev ;
-       int             k, readcount, subformat ;
-
-       for (k = 1 ; k < argc ; k++)
-       {       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-               printf ("Playing %s\n", argv [k]) ;
-               if (! (sndfile = sf_open (argv [k], SFM_READ, &sfinfo)))
-               {       puts (sf_strerror (NULL)) ;
-                       continue ;
-                       } ;
-
-               if (sfinfo.channels < 1 || sfinfo.channels > 2)
-               {       printf ("Error : channels = %d.\n", sfinfo.channels) ;
-                       continue ;
-                       } ;
-
-               if ((alsa_dev = alsa_open (sfinfo.channels, (unsigned) sfinfo.samplerate, SF_FALSE)) == NULL)
-                       continue ;
-
-               subformat = sfinfo.format & SF_FORMAT_SUBMASK ;
-
-               if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-               {       double  scale ;
-                       int     m ;
-
-                       sf_command (sndfile, SFC_CALC_SIGNAL_MAX, &scale, sizeof (scale)) ;
-                       if (scale < 1e-10)
-                               scale = 1.0 ;
-                       else
-                               scale = 32700.0 / scale ;
-
-                       while ((readcount = sf_read_float (sndfile, buffer, BUFFER_LEN)))
-                       {       for (m = 0 ; m < readcount ; m++)
-                                       buffer [m] *= scale ;
-                               alsa_write_float (alsa_dev, buffer, BUFFER_LEN / sfinfo.channels, sfinfo.channels) ;
-                               } ;
-                       }
-               else
-               {       while ((readcount = sf_read_float (sndfile, buffer, BUFFER_LEN)))
-                               alsa_write_float (alsa_dev, buffer, BUFFER_LEN / sfinfo.channels, sfinfo.channels) ;
-                       } ;
-
-               snd_pcm_drain (alsa_dev) ;
-               snd_pcm_close (alsa_dev) ;
-
-               sf_close (sndfile) ;
-               } ;
-
-       return ;
-} /* alsa_play */
-
-static snd_pcm_t *
-alsa_open (int channels, unsigned samplerate, int realtime)
-{      const char * device = "plughw:0" ;
-       snd_pcm_t *alsa_dev = NULL ;
-       snd_pcm_hw_params_t *hw_params ;
-       snd_pcm_uframes_t buffer_size, xfer_align, start_threshold ;
-       snd_pcm_uframes_t alsa_period_size, alsa_buffer_frames ;
-       snd_pcm_sw_params_t *sw_params ;
-
-       int err ;
-
-       if (realtime)
-       {       alsa_period_size = 256 ;
-               alsa_buffer_frames = 3 * alsa_period_size ;
-               }
-       else
-       {       alsa_period_size = 1024 ;
-               alsa_buffer_frames = 4 * alsa_period_size ;
-               } ;
-
-       if ((err = snd_pcm_open (&alsa_dev, device, SND_PCM_STREAM_PLAYBACK, 0)) < 0)
-       {       fprintf (stderr, "cannot open audio device \"%s\" (%s)\n", device, snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       snd_pcm_nonblock (alsa_dev, 0) ;
-
-       if ((err = snd_pcm_hw_params_malloc (&hw_params)) < 0)
-       {       fprintf (stderr, "cannot allocate hardware parameter structure (%s)\n", snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       if ((err = snd_pcm_hw_params_any (alsa_dev, hw_params)) < 0)
-       {       fprintf (stderr, "cannot initialize hardware parameter structure (%s)\n", snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       if ((err = snd_pcm_hw_params_set_access (alsa_dev, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0)
-       {       fprintf (stderr, "cannot set access type (%s)\n", snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       if ((err = snd_pcm_hw_params_set_format (alsa_dev, hw_params, SND_PCM_FORMAT_FLOAT)) < 0)
-       {       fprintf (stderr, "cannot set sample format (%s)\n", snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       if ((err = snd_pcm_hw_params_set_rate_near (alsa_dev, hw_params, &samplerate, 0)) < 0)
-       {       fprintf (stderr, "cannot set sample rate (%s)\n", snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       if ((err = snd_pcm_hw_params_set_channels (alsa_dev, hw_params, channels)) < 0)
-       {       fprintf (stderr, "cannot set channel count (%s)\n", snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       if ((err = snd_pcm_hw_params_set_buffer_size_near (alsa_dev, hw_params, &alsa_buffer_frames)) < 0)
-       {       fprintf (stderr, "cannot set buffer size (%s)\n", snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       if ((err = snd_pcm_hw_params_set_period_size_near (alsa_dev, hw_params, &alsa_period_size, 0)) < 0)
-       {       fprintf (stderr, "cannot set period size (%s)\n", snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       if ((err = snd_pcm_hw_params (alsa_dev, hw_params)) < 0)
-       {       fprintf (stderr, "cannot set parameters (%s)\n", snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       /* extra check: if we have only one period, this code won't work */
-       snd_pcm_hw_params_get_period_size (hw_params, &alsa_period_size, 0) ;
-       snd_pcm_hw_params_get_buffer_size (hw_params, &buffer_size) ;
-       if (alsa_period_size == buffer_size)
-       {       fprintf (stderr, "Can't use period equal to buffer size (%lu == %lu)", alsa_period_size, buffer_size) ;
-               goto catch_error ;
-               } ;
-
-       snd_pcm_hw_params_free (hw_params) ;
-
-       if ((err = snd_pcm_sw_params_malloc (&sw_params)) != 0)
-       {       fprintf (stderr, "%s: snd_pcm_sw_params_malloc: %s", __func__, snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       if ((err = snd_pcm_sw_params_current (alsa_dev, sw_params)) != 0)
-       {       fprintf (stderr, "%s: snd_pcm_sw_params_current: %s", __func__, snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       /* note: set start threshold to delay start until the ring buffer is full */
-       snd_pcm_sw_params_current (alsa_dev, sw_params) ;
-       if ((err = snd_pcm_sw_params_get_xfer_align (sw_params, &xfer_align)) < 0)
-       {       fprintf (stderr, "cannot get xfer align (%s)\n", snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       /* round up to closest transfer boundary */
-       start_threshold = (buffer_size / xfer_align) * xfer_align ;
-       if (start_threshold < 1)
-               start_threshold = 1 ;
-       if ((err = snd_pcm_sw_params_set_start_threshold (alsa_dev, sw_params, start_threshold)) < 0)
-       {       fprintf (stderr, "cannot set start threshold (%s)\n", snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       if ((err = snd_pcm_sw_params (alsa_dev, sw_params)) != 0)
-       {       fprintf (stderr, "%s: snd_pcm_sw_params: %s", __func__, snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       snd_pcm_sw_params_free (sw_params) ;
-
-       snd_pcm_reset (alsa_dev) ;
-
-catch_error :
-
-       if (err < 0 && alsa_dev != NULL)
-       {       snd_pcm_close (alsa_dev) ;
-               return NULL ;
-               } ;
-
-       return alsa_dev ;
-} /* alsa_open */
-
-static int
-alsa_write_float (snd_pcm_t *alsa_dev, float *data, int frames, int channels)
-{      static  int epipe_count = 0 ;
-
-       snd_pcm_status_t *status ;
-       int total = 0 ;
-       int retval ;
-
-       if (epipe_count > 0)
-               epipe_count -- ;
-
-       while (total < frames)
-       {       retval = snd_pcm_writei (alsa_dev, data + total * channels, frames - total) ;
-
-               if (retval >= 0)
-               {       total += retval ;
-                       if (total == frames)
-                               return total ;
-
-                       continue ;
-                       } ;
-
-               switch (retval)
-               {       case -EAGAIN :
-                                       puts ("alsa_write_float: EAGAIN") ;
-                                       continue ;
-                                       break ;
-
-                       case -EPIPE :
-                                       if (epipe_count > 0)
-                                       {       printf ("alsa_write_float: EPIPE %d\n", epipe_count) ;
-                                               if (epipe_count > 140)
-                                                       return retval ;
-                                               } ;
-                                       epipe_count += 100 ;
-
-                                       if (0)
-                                       {       snd_pcm_status_alloca (&status) ;
-                                               if ((retval = snd_pcm_status (alsa_dev, status)) < 0)
-                                                       fprintf (stderr, "alsa_out: xrun. can't determine length\n") ;
-                                               else if (snd_pcm_status_get_state (status) == SND_PCM_STATE_XRUN)
-                                               {       struct timeval now, diff, tstamp ;
-
-                                                       gettimeofday (&now, 0) ;
-                                                       snd_pcm_status_get_trigger_tstamp (status, &tstamp) ;
-                                                       timersub (&now, &tstamp, &diff) ;
-
-                                                       fprintf (stderr, "alsa_write_float xrun: of at least %.3f msecs. resetting stream\n",
-                                                                       diff.tv_sec * 1000 + diff.tv_usec / 1000.0) ;
-                                                       }
-                                               else
-                                                       fprintf (stderr, "alsa_write_float: xrun. can't determine length\n") ;
-                                               } ;
-
-                                       snd_pcm_prepare (alsa_dev) ;
-                                       break ;
-
-                       case -EBADFD :
-                                       fprintf (stderr, "alsa_write_float: Bad PCM state.n") ;
-                                       return 0 ;
-                                       break ;
-
-                       case -ESTRPIPE :
-                                       fprintf (stderr, "alsa_write_float: Suspend event.n") ;
-                                       return 0 ;
-                                       break ;
-
-                       case -EIO :
-                                       puts ("alsa_write_float: EIO") ;
-                                       return 0 ;
-
-                       default :
-                                       fprintf (stderr, "alsa_write_float: retval = %d\n", retval) ;
-                                       return 0 ;
-                                       break ;
-                       } ; /* switch */
-               } ; /* while */
-
-       return total ;
-} /* alsa_write_float */
-
-#endif /* HAVE_ALSA_ASOUNDLIB_H */
-
-/*------------------------------------------------------------------------------
-**     Linux/OSS functions for playing a sound.
-*/
-
-#if defined (__linux__)
-
-static int     linux_open_dsp_device (int channels, int srate) ;
-
-static void
-linux_play (int argc, char *argv [])
-{      static short buffer [BUFFER_LEN] ;
-       SNDFILE *sndfile ;
-       SF_INFO sfinfo ;
-       int             k, audio_device, readcount, subformat ;
-
-       for (k = 1 ; k < argc ; k++)
-       {       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-               printf ("Playing %s\n", argv [k]) ;
-               if (! (sndfile = sf_open (argv [k], SFM_READ, &sfinfo)))
-               {       puts (sf_strerror (NULL)) ;
-                       continue ;
-                       } ;
-
-               if (sfinfo.channels < 1 || sfinfo.channels > 2)
-               {       printf ("Error : channels = %d.\n", sfinfo.channels) ;
-                       continue ;
-                       } ;
-
-               audio_device = linux_open_dsp_device (sfinfo.channels, sfinfo.samplerate) ;
-
-               subformat = sfinfo.format & SF_FORMAT_SUBMASK ;
-
-               if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-               {       static float float_buffer [BUFFER_LEN] ;
-                       double  scale ;
-                       int     m ;
-
-                       sf_command (sndfile, SFC_CALC_SIGNAL_MAX, &scale, sizeof (scale)) ;
-                       if (scale < 1e-10)
-                               scale = 1.0 ;
-                       else
-                               scale = 32700.0 / scale ;
-
-                       while ((readcount = sf_read_float (sndfile, float_buffer, BUFFER_LEN)))
-                       {       for (m = 0 ; m < readcount ; m++)
-                                       buffer [m] = scale * float_buffer [m] ;
-                               write (audio_device, buffer, readcount * sizeof (short)) ;
-                               } ;
-                       }
-               else
-               {       while ((readcount = sf_read_short (sndfile, buffer, BUFFER_LEN)))
-                               write (audio_device, buffer, readcount * sizeof (short)) ;
-                       } ;
-
-               if (ioctl (audio_device, SNDCTL_DSP_POST, 0) == -1)
-                       perror ("ioctl (SNDCTL_DSP_POST) ") ;
-
-               if (ioctl (audio_device, SNDCTL_DSP_SYNC, 0) == -1)
-                       perror ("ioctl (SNDCTL_DSP_SYNC) ") ;
-
-               close (audio_device) ;
-
-               sf_close (sndfile) ;
-               } ;
-
-       return ;
-} /* linux_play */
-
-static int
-linux_open_dsp_device (int channels, int srate)
-{      int fd, stereo, fmt ;
-
-       if ((fd = open ("/dev/dsp", O_WRONLY, 0)) == -1 &&
-               (fd = open ("/dev/sound/dsp", O_WRONLY, 0)) == -1)
-       {       perror ("linux_open_dsp_device : open ") ;
-               exit (1) ;
-               } ;
-
-       stereo = 0 ;
-       if (ioctl (fd, SNDCTL_DSP_STEREO, &stereo) == -1)
-       {       /* Fatal error */
-               perror ("linux_open_dsp_device : stereo ") ;
-               exit (1) ;
-               } ;
-
-       if (ioctl (fd, SNDCTL_DSP_RESET, 0))
-       {       perror ("linux_open_dsp_device : reset ") ;
-               exit (1) ;
-               } ;
-
-       fmt = CPU_IS_BIG_ENDIAN ? AFMT_S16_BE : AFMT_S16_LE ;
-       if (ioctl (fd, SOUND_PCM_SETFMT, &fmt) != 0)
-       {       perror ("linux_open_dsp_device : set format ") ;
-           exit (1) ;
-               } ;
-
-       if (ioctl (fd, SOUND_PCM_WRITE_CHANNELS, &channels) != 0)
-       {       perror ("linux_open_dsp_device : channels ") ;
-               exit (1) ;
-               } ;
-
-       if (ioctl (fd, SOUND_PCM_WRITE_RATE, &srate) != 0)
-       {       perror ("linux_open_dsp_device : sample rate ") ;
-               exit (1) ;
-               } ;
-
-       if (ioctl (fd, SNDCTL_DSP_SYNC, 0) != 0)
-       {       perror ("linux_open_dsp_device : sync ") ;
-               exit (1) ;
-               } ;
-
-       return  fd ;
-} /* linux_open_dsp_device */
-
-#endif /* __linux__ */
-
-/*------------------------------------------------------------------------------
-**     Mac OS X functions for playing a sound.
-*/
-
-#if (defined (__MACH__) && defined (__APPLE__)) /* MacOSX */
-
-typedef struct
-{      AudioStreamBasicDescription             format ;
-
-       UInt32                  buf_size ;
-       AudioDeviceID   device ;
-
-       SNDFILE                 *sndfile ;
-       SF_INFO                 sfinfo ;
-
-       int                             fake_stereo ;
-       int                             done_playing ;
-} MacOSXAudioData ;
-
-#include <math.h>
-
-static OSStatus
-macosx_audio_out_callback (AudioDeviceID device, const AudioTimeStamp* current_time,
-       const AudioBufferList* data_in, const AudioTimeStamp* time_in,
-       AudioBufferList*        data_out, const AudioTimeStamp* time_out,
-       void* client_data)
-{      MacOSXAudioData *audio_data ;
-       int             size, sample_count, read_count, k ;
-       float   *buffer ;
-
-       /* Prevent compiler warnings. */
-       device = device ;
-       current_time = current_time ;
-       data_in = data_in ;
-       time_in = time_in ;
-       time_out = time_out ;
-
-       audio_data = (MacOSXAudioData*) client_data ;
-
-       size = data_out->mBuffers [0].mDataByteSize ;
-       sample_count = size / sizeof (float) ;
-
-       buffer = (float*) data_out->mBuffers [0].mData ;
-
-       if (audio_data->fake_stereo != 0)
-       {       read_count = sf_read_float (audio_data->sndfile, buffer, sample_count / 2) ;
-
-               for (k = read_count - 1 ; k >= 0 ; k--)
-               {       buffer [2 * k   ] = buffer [k] ;
-                       buffer [2 * k + 1] = buffer [k] ;
-                       } ;
-               read_count *= 2 ;
-               }
-       else
-               read_count = sf_read_float (audio_data->sndfile, buffer, sample_count) ;
-
-       /* Fill the remainder with zeroes. */
-       if (read_count < sample_count)
-       {       if (audio_data->fake_stereo == 0)
-                       memset (&(buffer [read_count]), 0, (sample_count - read_count) * sizeof (float)) ;
-               /* Tell the main application to terminate. */
-               audio_data->done_playing = SF_TRUE ;
-               } ;
-
-       return noErr ;
-} /* macosx_audio_out_callback */
-
-static void
-macosx_play (int argc, char *argv [])
-{      MacOSXAudioData         audio_data ;
-       OSStatus        err ;
-       UInt32          count, buffer_size ;
-       int             k ;
-
-       audio_data.fake_stereo = 0 ;
-       audio_data.device = kAudioDeviceUnknown ;
-
-       /*  get the default output device for the HAL */
-       count = sizeof (AudioDeviceID) ;
-       if ((err = AudioHardwareGetProperty (kAudioHardwarePropertyDefaultOutputDevice,
-                               &count, (void *) &(audio_data.device))) != noErr)
-       {       printf ("AudioHardwareGetProperty (kAudioDevicePropertyDefaultOutputDevice) failed.\n") ;
-               return ;
-               } ;
-
-       /*  get the buffersize that the default device uses for IO */
-       count = sizeof (UInt32) ;
-       if ((err = AudioDeviceGetProperty (audio_data.device, 0, false, kAudioDevicePropertyBufferSize,
-                               &count, &buffer_size)) != noErr)
-       {       printf ("AudioDeviceGetProperty (kAudioDevicePropertyBufferSize) failed.\n") ;
-               return ;
-               } ;
-
-       /*  get a description of the data format used by the default device */
-       count = sizeof (AudioStreamBasicDescription) ;
-       if ((err = AudioDeviceGetProperty (audio_data.device, 0, false, kAudioDevicePropertyStreamFormat,
-                               &count, &(audio_data.format))) != noErr)
-       {       printf ("AudioDeviceGetProperty (kAudioDevicePropertyStreamFormat) failed.\n") ;
-               return ;
-               } ;
-
-       /* Base setup completed. Now play files. */
-       for (k = 1 ; k < argc ; k++)
-       {       printf ("Playing %s\n", argv [k]) ;
-               if (! (audio_data.sndfile = sf_open (argv [k], SFM_READ, &(audio_data.sfinfo))))
-               {       puts (sf_strerror (NULL)) ;
-                       continue ;
-                       } ;
-
-               if (audio_data.sfinfo.channels < 1 || audio_data.sfinfo.channels > 2)
-               {       printf ("Error : channels = %d.\n", audio_data.sfinfo.channels) ;
-                       continue ;
-                       } ;
-
-               audio_data.format.mSampleRate = audio_data.sfinfo.samplerate ;
-
-               if (audio_data.sfinfo.channels == 1)
-               {       audio_data.format.mChannelsPerFrame = 2 ;
-                       audio_data.fake_stereo = 1 ;
-                       }
-               else
-               audio_data.format.mChannelsPerFrame = audio_data.sfinfo.channels ;
-
-               if ((err = AudioDeviceSetProperty (audio_data.device, NULL, 0, false, kAudioDevicePropertyStreamFormat,
-                                       sizeof (AudioStreamBasicDescription), &(audio_data.format))) != noErr)
-               {       printf ("AudioDeviceSetProperty (kAudioDevicePropertyStreamFormat) failed.\n") ;
-                       return ;
-                       } ;
-
-               /*  we want linear pcm */
-               if (audio_data.format.mFormatID != kAudioFormatLinearPCM)
-                       return ;
-
-               /* Fire off the device. */
-               if ((err = AudioDeviceAddIOProc (audio_data.device, macosx_audio_out_callback,
-                               (void *) &audio_data)) != noErr)
-               {       printf ("AudioDeviceAddIOProc failed.\n") ;
-                       return ;
-                       } ;
-
-               err = AudioDeviceStart (audio_data.device, macosx_audio_out_callback) ;
-               if      (err != noErr)
-                       return ;
-
-               audio_data.done_playing = SF_FALSE ;
-
-               while (audio_data.done_playing == SF_FALSE)
-                       usleep (10 * 1000) ; /* 10 000 milliseconds. */
-
-               if ((err = AudioDeviceStop (audio_data.device, macosx_audio_out_callback)) != noErr)
-               {       printf ("AudioDeviceStop failed.\n") ;
-                       return ;
-                       } ;
-
-               err = AudioDeviceRemoveIOProc (audio_data.device, macosx_audio_out_callback) ;
-               if (err != noErr)
-               {       printf ("AudioDeviceRemoveIOProc failed.\n") ;
-                       return ;
-                       } ;
-
-               sf_close (audio_data.sndfile) ;
-               } ;
-
-       return ;
-} /* macosx_play */
-
-#endif /* MacOSX */
-
-
-/*------------------------------------------------------------------------------
-**     Win32 functions for playing a sound.
-**
-**     This API sucks. Its needlessly complicated and is *WAY* too loose with
-**     passing pointers arounf in integers and and using char* pointers to
-**  point to data instead of short*. It plain sucks!
-*/
-
-#if (OS_IS_WIN32 == 1)
-
-#define        WIN32_BUFFER_LEN        (1<<15)
-
-typedef struct
-{      HWAVEOUT        hwave ;
-       WAVEHDR         whdr [2] ;
-
-       CRITICAL_SECTION        mutex ;         /* to control access to BuffersInUSe */
-       HANDLE          Event ;                 /* signal that a buffer is free */
-
-       short           buffer [WIN32_BUFFER_LEN / sizeof (short)] ;
-       int                     current, bufferlen ;
-       int                     BuffersInUse ;
-
-       SNDFILE         *sndfile ;
-       SF_INFO         sfinfo ;
-
-       sf_count_t      remaining ;
-} Win32_Audio_Data ;
-
-
-static void
-win32_play_data (Win32_Audio_Data *audio_data)
-{      int thisread, readcount ;
-
-       /* fill a buffer if there is more data and we can read it sucessfully */
-       readcount = (audio_data->remaining > audio_data->bufferlen) ? audio_data->bufferlen : (int) audio_data->remaining ;
-
-       thisread = (int) sf_read_short (audio_data->sndfile, (short *) (audio_data->whdr [audio_data->current].lpData), readcount) ;
-
-       audio_data->remaining -= thisread ;
-
-       if (thisread > 0)
-       {       /* Fix buffer length if this is only a partial block. */
-               if (thisread < audio_data->bufferlen)
-                       audio_data->whdr [audio_data->current].dwBufferLength = thisread * sizeof (short) ;
-
-               /* Queue the WAVEHDR */
-               waveOutWrite (audio_data->hwave, (LPWAVEHDR) &(audio_data->whdr [audio_data->current]), sizeof (WAVEHDR)) ;
-
-               /* count another buffer in use */
-               EnterCriticalSection (&audio_data->mutex) ;
-               audio_data->BuffersInUse ++ ;
-               LeaveCriticalSection (&audio_data->mutex) ;
-
-               /* use the other buffer next time */
-               audio_data->current = (audio_data->current + 1) % 2 ;
-               } ;
-
-       return ;
-} /* win32_play_data */
-
-static void CALLBACK
-win32_audio_out_callback (HWAVEOUT hwave, UINT msg, DWORD data, DWORD param1, DWORD param2)
-{      Win32_Audio_Data        *audio_data ;
-
-       /* Prevent compiler warnings. */
-       hwave = hwave ;
-       param1 = param2 ;
-
-       if (data == 0)
-               return ;
-
-       /*
-       ** I consider this technique of passing a pointer via an integer as
-       ** fundamentally broken but thats the way microsoft has defined the
-       ** interface.
-       */
-       audio_data = (Win32_Audio_Data*) data ;
-
-       /* let main loop know a buffer is free */
-       if (msg == MM_WOM_DONE)
-       {       EnterCriticalSection (&audio_data->mutex) ;
-               audio_data->BuffersInUse -- ;
-               LeaveCriticalSection (&audio_data->mutex) ;
-               SetEvent (audio_data->Event) ;
-               } ;
-
-       return ;
-} /* win32_audio_out_callback */
-
-/* This is needed for earlier versions of the M$ development tools. */
-#ifndef DWORD_PTR
-#define DWORD_PTR DWORD
-#endif
-
-static void
-win32_play (int argc, char *argv [])
-{      Win32_Audio_Data        audio_data ;
-
-       WAVEFORMATEX wf ;
-       int     k, error ;
-
-       audio_data.sndfile = NULL ;
-       audio_data.hwave = 0 ;
-
-       for (k = 1 ; k < argc ; k++)
-       {       printf ("Playing %s\n", argv [k]) ;
-
-               if (! (audio_data.sndfile = sf_open (argv [k], SFM_READ, &(audio_data.sfinfo))))
-               {       puts (sf_strerror (NULL)) ;
-                       continue ;
-                       } ;
-
-               audio_data.remaining = audio_data.sfinfo.frames * audio_data.sfinfo.channels ;
-               audio_data.current = 0 ;
-
-               InitializeCriticalSection (&audio_data.mutex) ;
-               audio_data.Event = CreateEvent (0, FALSE, FALSE, 0) ;
-
-               wf.nChannels = audio_data.sfinfo.channels ;
-               wf.wFormatTag = WAVE_FORMAT_PCM ;
-               wf.cbSize = 0 ;
-               wf.wBitsPerSample = 16 ;
-
-               wf.nSamplesPerSec = audio_data.sfinfo.samplerate ;
-
-               wf.nBlockAlign = audio_data.sfinfo.channels * sizeof (short) ;
-
-               wf.nAvgBytesPerSec = wf.nBlockAlign * wf.nSamplesPerSec ;
-
-               error = waveOutOpen (&(audio_data.hwave), WAVE_MAPPER, &wf, (DWORD_PTR) win32_audio_out_callback,
-                                                       (DWORD_PTR) &audio_data, CALLBACK_FUNCTION) ;
-               if (error)
-               {       puts ("waveOutOpen failed.") ;
-                       audio_data.hwave = 0 ;
-                       continue ;
-                       } ;
-
-               audio_data.whdr [0].lpData = (char*) audio_data.buffer ;
-               audio_data.whdr [1].lpData = ((char*) audio_data.buffer) + sizeof (audio_data.buffer) / 2 ;
-
-               audio_data.whdr [0].dwBufferLength = sizeof (audio_data.buffer) / 2 ;
-               audio_data.whdr [1].dwBufferLength = sizeof (audio_data.buffer) / 2 ;
-
-               audio_data.whdr [0].dwFlags = 0 ;
-               audio_data.whdr [1].dwFlags = 0 ;
-
-               /* length of each audio buffer in samples */
-               audio_data.bufferlen = sizeof (audio_data.buffer) / 2 / sizeof (short) ;
-
-               /* Prepare the WAVEHDRs */
-               if ((error = waveOutPrepareHeader (audio_data.hwave, &(audio_data.whdr [0]), sizeof (WAVEHDR))))
-               {       printf ("waveOutPrepareHeader [0] failed : %08X\n", error) ;
-                       waveOutClose (audio_data.hwave) ;
-                       continue ;
-                       } ;
-
-               if ((error = waveOutPrepareHeader (audio_data.hwave, &(audio_data.whdr [1]), sizeof (WAVEHDR))))
-               {       printf ("waveOutPrepareHeader [1] failed : %08X\n", error) ;
-                       waveOutUnprepareHeader (audio_data.hwave, &(audio_data.whdr [0]), sizeof (WAVEHDR)) ;
-                       waveOutClose (audio_data.hwave) ;
-                       continue ;
-                       } ;
-
-               /* Fill up both buffers with audio data */
-               audio_data.BuffersInUse = 0 ;
-               win32_play_data (&audio_data) ;
-               win32_play_data (&audio_data) ;
-
-               /* loop until both buffers are released */
-               while (audio_data.BuffersInUse > 0)
-               {
-                       /* wait for buffer to be released */
-                       WaitForSingleObject (audio_data.Event, INFINITE) ;
-
-                       /* refill the buffer if there is more data to play */
-                       win32_play_data (&audio_data) ;
-                       } ;
-
-               waveOutUnprepareHeader (audio_data.hwave, &(audio_data.whdr [0]), sizeof (WAVEHDR)) ;
-               waveOutUnprepareHeader (audio_data.hwave, &(audio_data.whdr [1]), sizeof (WAVEHDR)) ;
-
-               waveOutClose (audio_data.hwave) ;
-               audio_data.hwave = 0 ;
-
-               DeleteCriticalSection (&audio_data.mutex) ;
-
-               sf_close (audio_data.sndfile) ;
-               } ;
-
-} /* win32_play */
-
-#endif /* Win32 */
-
-/*------------------------------------------------------------------------------
-**     Solaris.
-*/
-
-#if (defined (sun) && defined (unix)) /* ie Solaris */
-
-static void
-solaris_play (int argc, char *argv [])
-{      static short    buffer [BUFFER_LEN] ;
-       audio_info_t    audio_info ;
-       SNDFILE                 *sndfile ;
-       SF_INFO                 sfinfo ;
-       unsigned long   delay_time ;
-       long                    k, start_count, output_count, write_count, read_count ;
-       int                             audio_fd, error, done ;
-
-       for (k = 1 ; k < argc ; k++)
-       {       printf ("Playing %s\n", argv [k]) ;
-               if (! (sndfile = sf_open (argv [k], SFM_READ, &sfinfo)))
-               {       puts (sf_strerror (NULL)) ;
-                       continue ;
-                       } ;
-
-               if (sfinfo.channels < 1 || sfinfo.channels > 2)
-               {       printf ("Error : channels = %d.\n", sfinfo.channels) ;
-                       continue ;
-                       } ;
-
-               /* open the audio device - write only, non-blocking */
-               if ((audio_fd = open ("/dev/audio", O_WRONLY | O_NONBLOCK)) < 0)
-               {       perror ("open (/dev/audio) failed") ;
-                       return ;
-                       } ;
-
-               /*      Retrive standard values. */
-               AUDIO_INITINFO (&audio_info) ;
-
-               audio_info.play.sample_rate = sfinfo.samplerate ;
-               audio_info.play.channels = sfinfo.channels ;
-               audio_info.play.precision = 16 ;
-               audio_info.play.encoding = AUDIO_ENCODING_LINEAR ;
-               audio_info.play.gain = AUDIO_MAX_GAIN ;
-               audio_info.play.balance = AUDIO_MID_BALANCE ;
-
-               if ((error = ioctl (audio_fd, AUDIO_SETINFO, &audio_info)))
-               {       perror ("ioctl (AUDIO_SETINFO) failed") ;
-                       return ;
-                       } ;
-
-               /* Delay time equal to 1/4 of a buffer in microseconds. */
-               delay_time = (BUFFER_LEN * 1000000) / (audio_info.play.sample_rate * 4) ;
-
-               done = 0 ;
-               while (! done)
-               {       read_count = sf_read_short (sndfile, buffer, BUFFER_LEN) ;
-                       if (read_count < BUFFER_LEN)
-                       {       memset (&(buffer [read_count]), 0, (BUFFER_LEN - read_count) * sizeof (short)) ;
-                               /* Tell the main application to terminate. */
-                               done = SF_TRUE ;
-                               } ;
-
-                       start_count = 0 ;
-                       output_count = BUFFER_LEN * sizeof (short) ;
-
-                       while (output_count > 0)
-                       {       /* write as much data as possible */
-                               write_count = write (audio_fd, &(buffer [start_count]), output_count) ;
-                               if (write_count > 0)
-                               {       output_count -= write_count ;
-                                       start_count += write_count ;
-                                       }
-                               else
-                               {       /*      Give the audio output time to catch up. */
-                                       usleep (delay_time) ;
-                                       } ;
-                               } ; /* while (outpur_count > 0) */
-                       } ; /* while (! done) */
-
-               close (audio_fd) ;
-               } ;
-
-       return ;
-} /* solaris_play */
-
-#endif /* Solaris */
-
-/*==============================================================================
-**     Main function.
-*/
-
-int
-main (int argc, char *argv [])
-{
-       if (argc < 2)
-       {
-               printf ("\nUsage : %s <input sound file>\n\n", argv [0]) ;
-#if (OS_IS_WIN32 == 1)
-               printf ("This is a Unix style command line application which\n"
-                               "should be run in a MSDOS box or Command Shell window.\n\n") ;
-               printf ("Sleeping for 5 seconds before exiting.\n\n") ;
-
-               /* This is the officially blessed by microsoft way but I can't get
-               ** it to link.
-               **     Sleep (15) ;
-               ** Instead, use this:
-               */
-               _sleep (5 * 1000) ;
-#endif
-               return 1 ;
-               } ;
-
-#if defined (__linux__)
-       #if HAVE_ALSA_ASOUNDLIB_H
-               if (access ("/proc/asound/cards", R_OK) == 0)
-                       alsa_play (argc, argv) ;
-               else
-       #endif
-               linux_play (argc, argv) ;
-#elif (defined (__MACH__) && defined (__APPLE__))
-       macosx_play (argc, argv) ;
-#elif (defined (sun) && defined (unix))
-       solaris_play (argc, argv) ;
-#elif (OS_IS_WIN32 == 1)
-       win32_play (argc, argv) ;
-#elif defined (__BEOS__)
-       printf ("This program cannot be compiled on BeOS.\n") ;
-       printf ("Instead, compile the file sfplay_beos.cpp.\n") ;
-       return 1 ;
-#else
-       puts ("*** Playing sound not yet supported on this platform.") ;
-       puts ("*** Please feel free to submit a patch.") ;
-       return 1 ;
-#endif
-
-       return 0 ;
-} /* main */
-/*
-** Do not edit or modify anything in this comment block.
-** The arch-tag line is a file identity tag for the GNU Arch
-** revision control system.
-**
-** arch-tag: 8fc4110d-6cec-4e03-91df-0f384cabedac
-*/
diff --git a/libs/libsndfile/examples/sndfile-to-text.c b/libs/libsndfile/examples/sndfile-to-text.c
deleted file mode 100644 (file)
index 466bb86..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
-** Copyright (C) 2008-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <sndfile.h>
-
-#define        BLOCK_SIZE 512
-
-static void
-print_usage (char *progname)
-{      printf ("\nUsage : %s <input file> <output file>\n", progname) ;
-       puts ("\n"
-               "    Where the output file will contain a line for each frame\n"
-               "    and a column for each channel.\n"
-               ) ;
-
-} /* print_usage */
-
-static void
-convert_to_text (SNDFILE * infile, FILE * outfile, int channels)
-{      float buf [channels * BLOCK_SIZE] ;
-       int k, m, readcount ;
-
-       while ((readcount = sf_readf_float (infile, buf, BLOCK_SIZE)) > 0)
-       {       for (k = 0 ; k < readcount ; k++)
-               {       for (m = 0 ; m < channels ; m++)
-                               fprintf (outfile, " % 12.10f", buf [k * channels + m]) ;
-                       fprintf (outfile, "\n") ;
-                       } ;
-               } ;
-
-       return ;
-} /* convert_to_text */
-
-int
-main (int argc, char * argv [])
-{      char            *progname, *infilename, *outfilename ;
-       SNDFILE         *infile = NULL ;
-       FILE            *outfile = NULL ;
-       SF_INFO         sfinfo ;
-
-       progname = strrchr (argv [0], '/') ;
-       progname = progname ? progname + 1 : argv [0] ;
-
-       if (argc != 3)
-       {       print_usage (progname) ;
-               return 1 ;
-               } ;
-
-       infilename = argv [1] ;
-       outfilename = argv [2] ;
-
-       if (strcmp (infilename, outfilename) == 0)
-       {       printf ("Error : Input and output filenames are the same.\n\n") ;
-               print_usage (progname) ;
-               return 1 ;
-               } ;
-
-       if (infilename [0] == '-')
-       {       printf ("Error : Input filename (%s) looks like an option.\n\n", infilename) ;
-               print_usage (progname) ;
-               return 1 ;
-               } ;
-
-       if (outfilename [0] == '-')
-       {       printf ("Error : Output filename (%s) looks like an option.\n\n", outfilename) ;
-               print_usage (progname) ;
-               return 1 ;
-               } ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       if ((infile = sf_open (infilename, SFM_READ, &sfinfo)) == NULL)
-       {       printf ("Not able to open input file %s.\n", infilename) ;
-               puts (sf_strerror (NULL)) ;
-               return 1 ;
-               } ;
-
-       /* Open the output file. */
-       if ((outfile = fopen (outfilename, "w")) == NULL)
-       {       printf ("Not able to open output file %s : %s\n", outfilename, sf_strerror (NULL)) ;
-               return 1 ;
-               } ;
-
-       fprintf (outfile, "# Converted from file %s.\n", infilename) ;
-       fprintf (outfile, "# Channels %d, Sample rate %d\n", sfinfo.channels, sfinfo.samplerate) ;
-
-       convert_to_text (infile, outfile, sfinfo.channels) ;
-
-       sf_close (infile) ;
-       fclose (outfile) ;
-
-       return 0 ;
-} /* main */
-
diff --git a/libs/libsndfile/examples/sndfilehandle.cc b/libs/libsndfile/examples/sndfilehandle.cc
deleted file mode 100644 (file)
index c9a1931..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-** Copyright (C) 2007-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       <cstdio>
-#include       <cstring>
-
-#include       <sndfile.hh>
-
-#define                BUFFER_LEN              1024
-
-static void
-create_file (const char * fname, int format)
-{      static short buffer [BUFFER_LEN] ;
-
-       SndfileHandle file ;
-       int channels = 2 ;
-       int srate = 48000 ;
-
-       printf ("Creating file named '%s'\n", fname) ;
-
-       file = SndfileHandle (fname, SFM_WRITE, format, channels, srate) ;
-
-       memset (buffer, 0, sizeof (buffer)) ;
-
-       file.write (buffer, BUFFER_LEN) ;
-
-       puts ("") ;
-       /*
-       **      The SndfileHandle object will automatically close the file and
-       **      release all allocated memory when the object goes out of scope.
-       **      This is the Resource Acquisition Is Initailization idom.
-       **      See : http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization
-       */
-} /* create_file */
-
-static void
-read_file (const char * fname)
-{      static short buffer [BUFFER_LEN] ;
-
-       SndfileHandle file ;
-
-       file = SndfileHandle (fname) ;
-
-       printf ("Opened file '%s'\n", fname) ;
-       printf ("    Sample rate : %d\n", file.samplerate ()) ;
-       printf ("    Channels    : %d\n", file.channels ()) ;
-
-       file.read (buffer, BUFFER_LEN) ;
-
-       puts ("") ;
-
-       /* RAII takes care of destroying SndfileHandle object. */
-} /* read_file */
-
-int
-main (void)
-{      const char * fname = "test.wav" ;
-
-       puts ("\nSimple example showing usage of the C++ SndfileHandle object.\n") ;
-
-       create_file (fname, SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-
-       read_file (fname) ;
-
-       puts ("Done.\n") ;
-       return 0 ;
-} /* main */
-
-
diff --git a/libs/libsndfile/libsndfile.spec.in b/libs/libsndfile/libsndfile.spec.in
deleted file mode 100644 (file)
index d442728..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-
-%define name    @PACKAGE@
-%define version @VERSION@
-%define release 1
-
-Summary: A library to handle various audio file formats.
-Name: %{name}
-Version: %{version}
-Release: %{release}
-Copyright: LGPL
-Group: Libraries/Sound
-Source: http://www.mega-nerd.com/libsndfile/libsndfile-%{version}.tar.gz
-Url: http://www.mega-nerd.com/libsndfile/
-BuildRoot: /var/tmp/%{name}-%{version}
-
-%description
-libsndfile is a C library for reading and writing sound files such as
-AIFF, AU and WAV files through one standard interface. It can currently
-read/write 8, 16, 24 and 32-bit PCM files as well as 32-bit floating
-point WAV files and a number of compressed formats.
-
-%package devel
-Summary: Libraries, includes, etc to develop libsndfile applications
-Group: Libraries
-
-%description devel
-Libraries, include files, etc you can use to develop libsndfile applications.
-
-%prep
-%setup
-
-%build
-%configure
-make
-
-%install
-if [ -d $RPM_BUILD_ROOT ]; then rm -rf $RPM_BUILD_ROOT; fi
-mkdir -p $RPM_BUILD_ROOT
-make DESTDIR=$RPM_BUILD_ROOT install
-%clean
-if [ -d $RPM_BUILD_ROOT ]; then rm -rf $RPM_BUILD_ROOT; fi
-
-%files
-%defattr(-,root,root)
-%doc AUTHORS COPYING ChangeLog INSTALL NEWS README TODO doc
-%{_libdir}/libsndfile.so.*
-%{_bindir}/*
-%{_mandir}/man1/*
-%{_datadir}/octave/site/m/*
-%{_defaultdocdir}/libsndfile1-dev/html/*
-
-%files devel
-%defattr(-,root,root)
-%{_libdir}/libsndfile.a
-%{_libdir}/libsndfile.la
-%{_libdir}/libsndfile.so
-%{_includedir}/sndfile.h
-%{_libdir}/pkgconfig/sndfile.pc
-
-%changelog
-* Sun May 15 2005 Erik de Castro Lopo <erikd@mega-nerd.com>
-- Add html files to the files section.
-* Tue Sep 16 2003 Erik de Castro Lopo <erikd@mega-nerd.com>
-- Apply corrections from Andrew Schultz.
-* Mon Oct 21 2002 Erik de Castro Lopo <erikd@mega-nerd.com>
-- Force installation of sndfile.pc file.
-* Thu Jul 6 2000 Josh Green <jgreen@users.sourceforge.net>
-- Created libsndfile.spec.in
-
diff --git a/libs/libsndfile/make_lite.py b/libs/libsndfile/make_lite.py
deleted file mode 100644 (file)
index eee69fc..0000000
+++ /dev/null
@@ -1,491 +0,0 @@
-#!/usr/bin/python
-
-import commands, os, re, string, sys, time
-
-def count_enclosed_functions (source):
-       func_count = 0
-       open_brace = 0
-       close_brace = 0
-       for ch in source:
-               if ch == '{':
-                       open_brace += 1
-               elif ch == '}':
-                       close_brace += 1
-                       if open_brace == close_brace:
-                               func_count += 1
-               if open_brace < close_brace:
-                       print "count_enclosed_functions : open_brace < close_brace"
-                       return -1
-       return func_count
-
-def find_function_prototype (source, proto_name):
-       proto_re = "(^[a-zA-Z_ \t]+\s+%s[^a-zA-Z0-9_]\s*\([^\)]+\)\s+;\n)" % (proto_name)
-       proto_result = re.search (proto_re, source, re.MULTILINE | re.DOTALL)
-       if not proto_result:
-               return None
-       proto_text = proto_result.groups ()[0]
-       return proto_text
-
-def find_function_definition (source, func_name):
-       func_re = "(\n[a-zA-Z_ \t]+\n%s[^a-zA-Z0-9_].* /\* %s \*/\n)" % (func_name, func_name)
-       func_result = re.search (func_re, source, re.MULTILINE | re.DOTALL)
-       if not func_result:
-               sys.exit (1)
-               return None
-       func_text = func_result.groups ()[0]
-
-       # Now to check that we only have one enclosing function.
-       func_count = count_enclosed_functions (func_text)
-       if func_count != 1:
-               return None
-       return func_text
-
-def find_include (source, inc_name):
-       inc_re = "(^#include\s+[\<\"]%s[\"\>]\s*)" % inc_name
-       inc_result = re.search (inc_re, source, re.MULTILINE | re.DOTALL)
-       if not inc_result:
-               return None
-       inc_text = inc_result.groups ()[0]
-       return inc_text
-
-def find_assign_statement (source, var_name):
-       var_re = "(^\s+%s\s*=[^;]+;)" % var_name
-       var_result = re.search (var_re, source, re.MULTILINE | re.DOTALL)
-       if not var_result:
-               return None
-       assign_text = var_result.groups ()[0]
-       return assign_text
-
-#--------------------------------------------------------------------------------
-
-def remove_include (source, inc_name):
-       inc_text = find_include (source, inc_name)
-       if not inc_text:
-               print "remove_include : include '%s' not found. Exiting." % inc_name
-               sys.exit (1)
-
-       source = string.replace (source, inc_text, "")
-       return source
-
-def remove_assign (source, assign_name):
-       assign_text = find_assign (source, inc_name)
-       if not inc_text:
-               print "remove_include : include '%s' not found. Exiting." % inc_name
-               sys.exit (1)
-
-       source = string.replace (source, inc_text, "")
-       return source
-
-def remove_prototype (source, proto_name):
-       proto_text = find_function_prototype (source, proto_name)
-       if not proto_text:
-               print "remove_prototype : prototype '%s' not found. Exiting." % proto_name
-               sys.exit (1)
-
-       source = string.replace (source, proto_text, "")
-       return source
-
-def remove_function (source, func_name):
-       func_text = find_function_definition (source, func_name)
-       if not func_text:
-               print "remove_function : function '%s' not found. Exiting." % func_name
-               sys.exit (1)
-
-       source = string.replace (source, func_text, "/* Function %s() removed here. */\n" % func_name)
-       return source
-
-def remove_all_assignments (source, var):
-       count = 0
-       while 1:
-               assign_text = find_assign_statement (source, var)
-               if not assign_text:
-                       if count != 0:
-                               break
-                       print "remove_all_assignments : variable '%s' not found. Exiting." % var
-                       sys.exit (1)
-
-               source = string.replace (source, assign_text, "")
-               count += 1
-       return source
-
-
-
-#----------------------------------------------------------------
-
-def remove_funcs_and_protos_from_file (filename, func_list):
-       source_code = open (filename, 'r').read ()
-
-       for func in func_list:
-               source_code = remove_prototype (source_code, func) ;
-               source_code = remove_function (source_code, func) ;
-       open (filename, 'w').write (source_code)
-
-def remove_funcs_from_file (filename, func_list):
-       source_code = open (filename, 'r').read ()
-
-       for func in func_list:
-               source_code = remove_function (source_code, func) ;
-       open (filename, 'w').write (source_code)
-
-def remove_protos_from_file (filename, func_list):
-       source_code = open (filename, 'r').read ()
-
-       for func in func_list:
-               source_code = remove_prototype (source_code, func) ;
-       open (filename, 'w').write (source_code)
-
-def remove_includes_from_file (filename, inc_list):
-       source_code = open (filename, 'r').read ()
-
-       for inc in inc_list:
-               source_code = remove_include (source_code, inc) ;
-       open (filename, 'w').write (source_code)
-
-def remove_all_assignments_from_file (filename, var_list):
-       source_code = open (filename, 'r').read ()
-
-       for var in var_list:
-               source_code = remove_all_assignments (source_code, var) ;
-       open (filename, 'w').write (source_code)
-
-def remove_comment_start_end (filename, start_comment, end_comment):
-       source_code = open (filename, 'r').read ()
-
-       while 1:
-               start_index = string.find (source_code, start_comment)
-               end_index = string.find (source_code, end_comment)
-               if start_index < 0 or end_index < start_index:
-                       break
-               end_index += len (end_comment)
-               source_code = source_code [:start_index-1] + source_code [end_index:] ;
-
-       open (filename, 'w').write (source_code)
-
-def remove_strings_from_file (filename, str_list):
-       file_text = open (filename, 'r').read ()
-       for current_str in str_list:
-               file_text = string.replace (file_text, current_str, '')
-       open (filename, 'w').write (file_text)
-
-def string_replace_in_file (filename, from_str, to_str):
-       file_text = open (filename, 'r').read ()
-       file_text = string.replace (file_text, from_str, to_str)
-       open (filename, 'w').write (file_text)
-
-def remove_regex_from_file (filename, regex_list):
-       file_text = open (filename, 'r').read ()
-       for regex in regex_list:
-               file_text = re.sub (regex, '', file_text, re.MULTILINE | re.DOTALL)
-       open (filename, 'w').write (file_text)
-
-#==========================================================================
-
-def find_configure_version (filename):
-       # AM_INIT_AUTOMAKE(libsndfile,0.0.21pre6)
-       file = open (filename)
-       while 1:
-               line = file.readline ()
-               if re.search ("AC_INIT", line):
-                       x = re.sub ("[^\(]+\(", "", line)
-                       x = re.sub ("\).*\n", "", x)
-                       x = string.split (x, ",")
-                       package = x [0]
-                       version = x [1]
-                       break
-       file.close ()
-       # version = re.escape (version)
-       return package, version
-
-def fix_configure_ac_file (filename):
-       data = open (filename, 'r').read ()
-       data = string.replace (data, "AM_INIT_AUTOMAKE(libsndfile,", "AM_INIT_AUTOMAKE(libsndfile_lite,", 1)
-
-       file = open (filename, 'w')
-       file.write (data)
-       file.close ()
-
-
-def make_dist_file (package, version):
-       print "Making dist file."
-       tar_gz_file = "%s-%s.tar.gz" % (package, version)
-       if os.path.exists (tar_gz_file):
-               return
-       if os.system ("make dist"):
-               sys.exit (1)
-       return
-
-def delete_files (file_list):
-       for file_name in file_list:
-               os.remove (file_name)
-
-#=======================================================================
-
-source_dir = os.getcwd ()
-
-conf_package, conf_version =  find_configure_version ('configure.ac')
-
-package_version = "%s-%s" % (conf_package, conf_version)
-lite_version = "%s_lite-%s" % (conf_package, conf_version)
-
-os.system ("rm -rf %s%s.tar.gz" % (source_dir, package_version))
-
-os.system ("make dist")
-
-make_dist_file (conf_package, conf_version)
-
-os.chdir ("/tmp")
-
-print "Uncompressing .tar.gz file."
-os.system ("rm -rf %s" % package_version)
-if os.system ("tar zxf %s/%s.tar.gz" % (source_dir, package_version)):
-       sys.exit (1)
-
-
-print "Renaming to libsndfile_lite."
-os.system ("rm -rf %s" % lite_version)
-os.rename (package_version, lite_version)
-
-print "Changing into libsndfile_lite directory."
-os.chdir (lite_version)
-
-print "Removing un-neeed directories."
-delete_dirs = [ 'src/G72x' ]
-
-for dir_name in delete_dirs:
-       os.system ("rm -rf %s" % dir_name)
-
-print "Removing un-needed files."
-delete_files ([ 'src/ircam.c', 'src/nist.c',
-       'src/ima_adpcm.c', 'src/ms_adpcm.c', 'src/au_g72x.c',
-       'src/mat4.c', 'src/mat5.c', 'src/dwvw.c', 'src/paf.c',
-       'src/ogg.c', 'src/pvf.c', 'src/xi.c', 'src/htk.c',
-       'src/sd2.c', 'src/rx2.c', 'src/txw.c', 'src/wve.c',
-       'src/dwd.c', 'src/svx.c', 'src/voc.c', 'src/vox_adpcm.c',
-       'src/sds.c'
-       ])
-
-
-print "Hacking 'configure.ac' and 'src/Makefile.am'."
-remove_strings_from_file ('configure.ac', [ 'src/G72x/Makefile' ])
-remove_strings_from_file ('src/Makefile.am', [ 'G72x/libg72x.la', 'G72x',
-               'ircam.c', 'nist.c', 'ima_adpcm.c', 'ms_adpcm.c', 'au_g72x.c', 'mat4.c', 
-               'mat5.c', 'dwvw.c',  'paf.c', 'ogg.c', 'pvf.c', 'xi.c', 'htk.c', 
-               'sd2.c', 'rx2.c', 'txw.c', 'wve.c', 'dwd.c', 'svx.c', 'voc.c', 
-               'vox_adpcm.c', 'sds.c'
-               ])
-
-#----------------------------------------------------------------------------
-
-print "Hacking header files."
-
-remove_protos_from_file ('src/common.h', [     'xi_open', 'sd2_open', 'ogg_open',
-       'dwvw_init', 'paf_open', 'svx_open', 'nist_open', 'rx2_open', 'mat4_open',
-       'voc_open', 'txw_open', 'dwd_open', 'htk_open', 'wve_open', 'mat5_open',
-       'pvf_open', 'ircam_open', 'sds_open',
-       'float32_init', 'double64_init', 'aiff_ima_init', 'vox_adpcm_init',
-       'wav_w64_ima_init', 'wav_w64_msadpcm_init'
-       ])
-
-remove_protos_from_file ('src/au.h',
-               [ 'au_g72x_reader_init', 'au_g72x_writer_init' ])
-
-remove_protos_from_file ('src/wav_w64.h', [ 'msadpcm_write_adapt_coeffs' ])
-
-#----------------------------------------------------------------------------
-
-print "Hacking case statements."
-
-remove_comment_start_end ('src/sndfile.c', '/* Lite remove start */' , '/* Lite remove end */')
-remove_comment_start_end ('src/aiff.c', '/* Lite remove start */' , '/* Lite remove end */')
-remove_comment_start_end ('src/au.c', '/* Lite remove start */' , '/* Lite remove end */')
-remove_comment_start_end ('src/raw.c', '/* Lite remove start */' , '/* Lite remove end */')
-remove_comment_start_end ('src/w64.c', '/* Lite remove start */' , '/* Lite remove end */')
-remove_comment_start_end ('src/wav.c', '/* Lite remove start */' , '/* Lite remove end */')
-remove_comment_start_end ('src/double64.c', '/* Lite remove start */' , '/* Lite remove end */')
-remove_comment_start_end ('src/float32.c', '/* Lite remove start */' , '/* Lite remove end */')
-
-
-#----------------------------------------------------------------------------
-
-print "Hacking src/pcm.c."
-remove_funcs_from_file ('src/pcm.c', [
-       'f2sc_array', 'f2sc_clip_array', 'f2uc_array', 'f2uc_clip_array',
-       'f2bes_array', 'f2bes_clip_array', 'f2les_array', 'f2les_clip_array',
-       'f2let_array', 'f2let_clip_array', 'f2bet_array', 'f2bet_clip_array',
-       'f2bei_array', 'f2bei_clip_array', 'f2lei_array', 'f2lei_clip_array',
-       'd2sc_array', 'd2sc_clip_array', 'd2uc_array', 'd2uc_clip_array',
-       'd2bes_array', 'd2bes_clip_array', 'd2les_array', 'd2les_clip_array',
-       'd2let_array', 'd2let_clip_array', 'd2bet_array', 'd2bet_clip_array',
-       'd2bei_array', 'd2bei_clip_array', 'd2lei_array', 'd2lei_clip_array',
-       ])
-
-remove_funcs_and_protos_from_file ('src/pcm.c', [
-       'pcm_read_sc2f', 'pcm_read_uc2f', 'pcm_read_les2f', 'pcm_read_bes2f',
-       'pcm_read_let2f', 'pcm_read_bet2f', 'pcm_read_lei2f', 'pcm_read_bei2f',
-       'pcm_read_sc2d', 'pcm_read_uc2d', 'pcm_read_les2d', 'pcm_read_bes2d',
-       'pcm_read_let2d', 'pcm_read_bet2d', 'pcm_read_lei2d', 'pcm_read_bei2d',
-       'pcm_write_f2sc', 'pcm_write_f2uc', 'pcm_write_f2bes', 'pcm_write_f2les',
-       'pcm_write_f2bet', 'pcm_write_f2let', 'pcm_write_f2bei', 'pcm_write_f2lei',
-       'pcm_write_d2sc', 'pcm_write_d2uc', 'pcm_write_d2bes', 'pcm_write_d2les',
-       'pcm_write_d2bet', 'pcm_write_d2let', 'pcm_write_d2bei', 'pcm_write_d2lei',
-
-       'sc2f_array', 'uc2f_array', 'bes2f_array', 'les2f_array',
-       'bet2f_array', 'let2f_array', 'bei2f_array', 'lei2f_array',
-       'sc2d_array', 'uc2d_array', 'bes2d_array', 'les2d_array',
-       'bet2d_array', 'let2d_array', 'bei2d_array', 'lei2d_array'
-       ])
-
-remove_includes_from_file ('src/pcm.c', [ 'float_cast.h' ])
-remove_all_assignments_from_file ('src/pcm.c', [
-       'psf-\>write_float', 'psf\-\>write_double',
-       'psf-\>read_float', 'psf\-\>read_double' ])
-
-#----------------------------------------------------------------------------
-print "Hacking src/ulaw.c."
-remove_funcs_and_protos_from_file ('src/ulaw.c', [
-       'ulaw_read_ulaw2f', 'ulaw_read_ulaw2d',
-       'ulaw_write_f2ulaw', 'ulaw_write_d2ulaw',
-       'ulaw2f_array', 'ulaw2d_array', 'f2ulaw_array', 'd2ulaw_array'
-       ])
-
-remove_includes_from_file ('src/ulaw.c', [ 'float_cast.h' ])
-remove_all_assignments_from_file ('src/ulaw.c', [
-       'psf-\>write_float', 'psf\-\>write_double',
-       'psf-\>read_float', 'psf\-\>read_double' ])
-
-#----------------------------------------------------------------------------
-
-print "Hacking src/alaw.c."
-remove_funcs_and_protos_from_file ('src/alaw.c', [
-       'alaw_read_alaw2f', 'alaw_read_alaw2d',
-       'alaw_write_f2alaw', 'alaw_write_d2alaw',
-       'alaw2f_array', 'alaw2d_array', 'f2alaw_array', 'd2alaw_array'
-       ])
-
-remove_includes_from_file ('src/alaw.c', [ 'float_cast.h' ])
-remove_all_assignments_from_file ('src/alaw.c', [
-       'psf-\>write_float', 'psf\-\>write_double',
-       'psf-\>read_float', 'psf\-\>read_double' ])
-
-#----------------------------------------------------------------------------
-
-print "Hacking src/gsm610.c."
-remove_funcs_and_protos_from_file ('src/gsm610.c', [
-       'gsm610_read_f', 'gsm610_read_d', 'gsm610_write_f', 'gsm610_write_d'
-       ])
-
-remove_includes_from_file ('src/gsm610.c', [ 'float_cast.h' ])
-remove_all_assignments_from_file ('src/gsm610.c', [
-       'psf-\>write_float', 'psf\-\>write_double',
-       'psf-\>read_float', 'psf\-\>read_double' ])
-
-#----------------------------------------------------------------------------
-
-print "Hacking src/float32.c."
-
-# string_replace_in_file ('src/float32.c', '"float_cast.h"', '<math.h>')
-remove_funcs_from_file ('src/float32.c', [ 'float32_init'      ])
-
-remove_funcs_and_protos_from_file ('src/float32.c', [
-       'host_read_f2s', 'host_read_f2i', 'host_read_f', 'host_read_f2d', 
-       'host_write_s2f', 'host_write_i2f', 'host_write_f', 'host_write_d2f', 
-       'f2s_array', 'f2i_array', 'f2d_array', 's2f_array', 'i2f_array', 'd2f_array', 
-       'float32_peak_update', 
-       'replace_read_f2s', 'replace_read_f2i', 'replace_read_f', 'replace_read_f2d', 
-       'replace_write_s2f', 'replace_write_i2f', 'replace_write_f', 'replace_write_d2f', 
-       'bf2f_array', 'f2bf_array', 
-       'float32_get_capability', 
-       ])
-
-#----------------------------------------------------------------------------
-
-print "Hacking src/double64.c."
-remove_funcs_from_file ('src/double64.c', [ 'double64_init'    ])
-
-remove_funcs_and_protos_from_file ('src/double64.c', [
-       'host_read_d2s', 'host_read_d2i', 'host_read_d2f', 'host_read_d',
-       'host_write_s2d', 'host_write_i2d', 'host_write_f2d', 'host_write_d',
-       'd2s_array', 'd2i_array', 'd2f_array',
-       's2d_array', 'i2d_array', 'f2d_array',
-       'double64_peak_update', 'double64_get_capability',
-       'replace_read_d2s', 'replace_read_d2i', 'replace_read_d2f', 'replace_read_d',
-       'replace_write_s2d', 'replace_write_i2d', 'replace_write_f2d', 'replace_write_d',
-       'd2bd_read', 'bd2d_write'
-       ])
-
-#----------------------------------------------------------------------------
-
-print "Hacking test programs."
-delete_files ([ 'tests/dwvw_test.c', 'tests/floating_point_test.c', 
-       'tests/dft_cmp.c', 'tests/peak_chunk_test.c',
-       'tests/scale_clip_test.tpl', 'tests/scale_clip_test.def'
-       ])
-
-remove_comment_start_end ('tests/write_read_test.def', '/* Lite remove start */', '/* Lite remove end */')
-remove_comment_start_end ('tests/write_read_test.tpl', '/* Lite remove start */', '/* Lite remove end */')
-
-remove_comment_start_end ('tests/Makefile.am', '# Lite remove start', '# Lite remove end')
-
-remove_strings_from_file ('tests/Makefile.am', [ 
-       'scale_clip_test.tpl', 'scale_clip_test.def',
-       '\n\t./dwvw_test',
-       '\n\t./floating_point_test', '\n\t./scale_clip_test', 
-       '\n\t./peak_chunk_test aiff', '\n\t./peak_chunk_test wav',
-       '\n\t./command_test norm', '\n\t./command_test peak',
-       '\n\t./lossy_comp_test wav_ima', '\n\t./lossy_comp_test wav_msadpcm',
-       '\n\t./lossy_comp_test au_g721', '\n\t./lossy_comp_test au_g723',
-       '\n\t./lossy_comp_test vox_adpcm', 
-       '\n\t./lossy_comp_test w64_ima', '\n\t./lossy_comp_test w64_msadpcm',
-       'peak_chunk_test', 'dwvw_test', 'floating_point_test', 'scale_clip_test',
-       
-       'paf-tests', 'svx-tests', 'nist-tests', 'ircam-tests', 'voc-tests',
-       'mat4-tests', 'mat5-tests', 'pvf-tests', 'xi-tests', 'htk-tests',
-       'sds-tests'
-       ])
-
-remove_comment_start_end ('tests/pcm_test.c', '/* Lite remove start */', '/* Lite remove end */')
-remove_funcs_and_protos_from_file ('tests/pcm_test.c', [
-       'pcm_test_float', 'pcm_test_double' 
-       ])
-
-remove_comment_start_end ('tests/lossy_comp_test.c', '/* Lite remove start */', '/* Lite remove end */')
-remove_funcs_and_protos_from_file ('tests/lossy_comp_test.c', [
-       'lcomp_test_float', 'lcomp_test_double', 'sdlcomp_test_float', 'sdlcomp_test_double',
-       'smoothed_diff_float', 'smoothed_diff_double'
-       ])
-
-remove_comment_start_end ('tests/multi_file_test.c', '/* Lite remove start */', '/* Lite remove end */')
-
-remove_strings_from_file ('tests/stdio_test.c', [ 
-       '"paf",', '"svx",', '"nist",', '"ircam",', '"voc",', '"mat4",', '"mat5",', '"pvf",'
-       ])
-
-remove_comment_start_end ('tests/pipe_test.c', '/* Lite remove start */', '/* Lite remove end */')
-
-#----------------------------------------------------------------------------
-
-print "Fixing configure.ac file."
-fix_configure_ac_file ('configure.ac')
-
-print "Building and testing source."
-       # Try --disable-shared --disable-gcc-opt
-if os.system ("./reconfigure.mk && ./configure --disable-shared --disable-gcc-opt && make check"):
-       os.system ('PS1="FIX > " bash --norc')
-       sys.exit (1)
-
-print "Making distcheck"
-if os.system ("make distcheck"):
-       os.system ('PS1="FIX > " bash --norc')
-       sys.exit (1)
-
-print "Copying tarball"
-if os.system ("cp %s.tar.gz %s" % (lite_version, source_dir)):
-       print "??? %s.tar.gz ???" % lite_version
-       os.system ('PS1="FIX > " bash --norc')
-       sys.exit (1)
-
-os.chdir (source_dir)
-
-os.system ("rm -rf /tmp/%s" % lite_version)
-
-print "Done."
diff --git a/libs/libsndfile/man/Makefile.am b/libs/libsndfile/man/Makefile.am
deleted file mode 100644 (file)
index 3f5d9ef..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-man_MANS = sndfile-info.1 sndfile-play.1 sndfile-convert.1 sndfile-cmp.1 \
-                       sndfile-metadata-get.1 sndfile-metadata-set.1 sndfile-concat.1 \
-                       sndfile-interleave.1 sndfile-deinterleave.1
-
-EXTRA_DIST = sndfile-info.1 sndfile-play.1 sndfile-convert.1 sndfile-cmp.1 \
-                       sndfile-metadata-get.1 sndfile-concat.1 sndfile-interleave.1
-
-# Same manpage for both programs.
-sndfile-metadata-set.1 : sndfile-metadata-get.1
-       $(LN_S) $(srcdir)/sndfile-metadata-get.1 $@
-
-sndfile-deinterleave.1 : sndfile-interleave.1
-       $(LN_S) $(srcdir)/sndfile-interleave.1 $@
diff --git a/libs/libsndfile/man/sndfile-cmp.1 b/libs/libsndfile/man/sndfile-cmp.1
deleted file mode 100644 (file)
index 30870bd..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-.TH SNDFILE-CMP 1 "October 5, 2009"
-.SH NAME
-sndfile-cmp \- compares two audio files
-.SH SYNOPSIS
-.B sndfile-cmp
-.RI "file1 file2"
-.SH DESCRIPTION
-sndfile-cmp compares the audio data of two sound files. In particular most
-differences in the audio file header, particularly metadata like string info,
-are completely ignored.
-
-sndfile-cmp does its work using libsndfile
-(http://www.mega-nerd.com/libsndfile/).
-.SH AUTHOR
-This manual page was written by Erik de Castro Lopo <erikd@mega-nerd.com>.
-
diff --git a/libs/libsndfile/man/sndfile-concat.1 b/libs/libsndfile/man/sndfile-concat.1
deleted file mode 100644 (file)
index 1d95765..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-.TH SNDFILE-CONCAT 1 "December 9, 2009"
-.SH NAME
-sndfile-concat \- concatenates two or more audio files
-.SH SYNOPSIS
-.B sndfile-concat
-.RI "infile1 infile2 .... outfile"
-.SH DESCRIPTION
-sndfile-concat generates a new output file by concatenating two or more input
-files. The format of the output file is the same as the format of the input
-file.
-
-sndfile-concat does its work using libsndfile
-(http://www.mega-nerd.com/libsndfile/).
-.SH AUTHOR
-This manual page was written by Erik de Castro Lopo <erikd@mega-nerd.com>.
-
diff --git a/libs/libsndfile/man/sndfile-convert.1 b/libs/libsndfile/man/sndfile-convert.1
deleted file mode 100644 (file)
index 583c956..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-.TH SNDFILE-CONVERT 1 "October 09, 2002"
-.SH NAME
-sndfile-convert \- convert a sound files from one format to another
-.SH SYNOPSIS
-.B sndfile-convert
-.RI "[encoding] input_file output_file"
-.LP
-.B sndfile-convert
-.RI --help
-.SH DESCRIPTION
-sndfile-convert converts sound files from one format to another using
-libsndfile (http://www.mega-nerd.com/libsndfile/) to read and write
-the data.
-.LP
-The format of the output file is determined by the filename extension
-of the output file.
-.LP
-The optional encoding parameter allows setting of the data encoding for
-the output file. Run "sndfile\-convert \-\-help" for more information.
-.SH AUTHOR
-This manual page was written by Erik de Castro Lopo <erikd@mega-nerd.com>.
-
diff --git a/libs/libsndfile/man/sndfile-info.1 b/libs/libsndfile/man/sndfile-info.1
deleted file mode 100644 (file)
index b668758..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-.TH SNDFILE-INFO 1 "July 28, 2002"
-.SH NAME
-sndfile-info \- display information about a sound file
-.SH SYNOPSIS
-.B sndfile-info
-.RI file
-.SH DESCRIPTION
-sndfile-info will display basic information about a sound file such as
-its format, its sample rate, and the number of channels. This information
-is obtained using libsndfile (http://www.mega-nerd.com/libsndfile/).
-.SH AUTHOR
-This manual page was originally written by Joshua Haberman 
-<joshua@debian.org>, for the Debian GNU/Linux system (but may be used by 
-others). Further additions have been made by Erik de Castro Lopo 
-<erikd@mega-nerd.com>.
-
diff --git a/libs/libsndfile/man/sndfile-interleave.1 b/libs/libsndfile/man/sndfile-interleave.1
deleted file mode 100644 (file)
index 26ca345..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-.TH SNDFILE-INTERLEAVE 1 "December 14, 2009"
-.SH NAME
-sndfile-interleave \- convert multiple single channel files into a multi-channel file
-.br
-sndfile-deinterleave \- split a multi-channel into multiple single channel files
-.SH SYNOPSIS
-.B sndfile-interleave
-.RI "<input 1> <input 2> ... -o <output file>"
-.br
-.B sndfile-deinterleave
-.RI "filename"
-
-.SH DESCRIPTION
-sndfile-interleave and sndfile-deinterleave use libsndfile
-(http://www.mega-nerd.com/libsndfile/) to convert back and forth between multiple
-single channel files and a single multi-channel sound file.
-
-Run "sndfile\-interleave \-\-help" or "sndfile\-deinterleave \-\-help" for
-more information
-
-.SH AUTHOR
-This manual page was written by Erik de Castro Lopo <erikd@mega-nerd.com>.
-
diff --git a/libs/libsndfile/man/sndfile-metadata-get.1 b/libs/libsndfile/man/sndfile-metadata-get.1
deleted file mode 100644 (file)
index b97560e..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-.TH SNDFILE-METADATA-GET 1 "October 6, 2009"
-.SH NAME
-sndfile-metadata-get \- retrieve metadata from a sound file
-.br
-sndfile-metadata-set \- set metadata in a sound file
-.SH SYNOPSIS
-.B sndfile-metadata-get
-.RI "[options] file"
-.br
-.B sndfile-metadata-set
-.RI "[options] file"
-.br
-.B sndfile-metadata-set
-.RI "[options] input-file output-file"
-
-.SH DESCRIPTION
-sndfile-metadata-get and sndfile-metadata-set use libsndfile
-(http://www.mega-nerd.com/libsndfile/) to retrieve metadata from or set metadata
-in a sound file.
-
-Run "sndfile\-metadata\-get \-\-help" or "sndfile\-metadata\-set \-\-help" for
-more information
-
-.SH AUTHOR
-This manual page was written by Erik de Castro Lopo <erikd@mega-nerd.com>.
-
diff --git a/libs/libsndfile/man/sndfile-play.1 b/libs/libsndfile/man/sndfile-play.1
deleted file mode 100644 (file)
index 0196461..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-.de EX
-.ne 5
-.if n .sp 1
-.if t .sp .5
-.nf
-.in +.5i
-..
-.de EE
-.fi
-.in -.5i
-.if n .sp 1
-.if t .sp .5
-..
-.TH SNDFILE-PLAY 1 "July 28, 2002"
-.SH NAME
-sndfile-play \- play a sound file
-.SH SYNOPSIS
-.B sndfile-play
-.RI file
-.SH DESCRIPTION
-sndfile-play plays the specified sound file using :
-.EX
-ALSA on Linux
-/dev/dsp on systems supporting OSS (including Linux)
-/dev/audio on Sun Solaris
-CoreAudio on Apple MacOSX
-waveOut on Microsoft Win32
-.EE
-sndfile-play uses libsndfile (http://www.mega-nerd.com/libsndfile/)
-to read the file.
-.SH AUTHOR
-This manual page was originally written by Joshua Haberman 
-<joshua@debian.org>, for the Debian GNU/Linux system (but may be used by 
-others). Further additions have been made by Erik de Castro Lopo 
-<erikd@mega-nerd.com>.
-
diff --git a/libs/libsndfile/programs/Makefile.am b/libs/libsndfile/programs/Makefile.am
deleted file mode 100644 (file)
index 8149553..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-bin_PROGRAMS = sndfile-info sndfile-play sndfile-convert sndfile-cmp \
-                               sndfile-metadata-set sndfile-metadata-get sndfile-interleave \
-                               sndfile-deinterleave sndfile-concat sndfile-salvage
-
-OS_SPECIFIC_CFLAGS = @OS_SPECIFIC_CFLAGS@
-OS_SPECIFIC_LINKS = @OS_SPECIFIC_LINKS@
-
-AM_CPPFLAGS = -I$(top_srcdir)/src $(OS_SPECIFIC_CFLAGS)
-
-CLEANFILES = *~ sndfile-*.exe
-
-# This is the BeOS version of sndfile-play. It needs to be compiled with the C++
-# compiler.
-EXTRA_DIST = sndfile-play-beos.cpp test-sndfile-metadata-set.py
-
-sndfile_info_SOURCES = sndfile-info.c common.c common.h
-sndfile_info_LDADD = $(top_builddir)/src/libsndfile.la
-
-sndfile_play_SOURCES = sndfile-play.c common.c common.h
-sndfile_play_LDADD = $(top_builddir)/src/libsndfile.la $(OS_SPECIFIC_LINKS) $(ALSA_LIBS) $(SNDIO_LIBS)
-
-sndfile_convert_SOURCES = sndfile-convert.c common.c common.h
-sndfile_convert_LDADD = $(top_builddir)/src/libsndfile.la
-
-sndfile_cmp_SOURCES = sndfile-cmp.c common.c common.h
-sndfile_cmp_LDADD = $(top_builddir)/src/libsndfile.la
-
-sndfile_metadata_set_SOURCES = sndfile-metadata-set.c common.c common.h
-sndfile_metadata_set_LDADD = $(top_builddir)/src/libsndfile.la
-
-sndfile_metadata_get_SOURCES = sndfile-metadata-get.c common.c common.h
-sndfile_metadata_get_LDADD = $(top_builddir)/src/libsndfile.la
-
-sndfile_interleave_SOURCES = sndfile-interleave.c common.c common.h
-sndfile_interleave_LDADD = $(top_builddir)/src/libsndfile.la
-
-sndfile_deinterleave_SOURCES = sndfile-deinterleave.c common.c common.h
-sndfile_deinterleave_LDADD = $(top_builddir)/src/libsndfile.la
-
-sndfile_concat_SOURCES = sndfile-concat.c common.c common.h
-sndfile_concat_LDADD = $(top_builddir)/src/libsndfile.la
-
-sndfile_salvage_SOURCES = sndfile-salvage.c common.c common.h
-sndfile_salvage_LDADD = $(top_builddir)/src/libsndfile.la
-
diff --git a/libs/libsndfile/programs/common.c b/libs/libsndfile/programs/common.c
deleted file mode 100644 (file)
index 2811536..0000000
+++ /dev/null
@@ -1,466 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2008 George Blood Audio
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdint.h>
-
-#include <sndfile.h>
-
-#include "common.h"
-
-#define        BUFFER_LEN      4096
-
-#define        MIN(x, y)       ((x) < (y) ? (x) : (y))
-
-void
-sfe_copy_data_fp (SNDFILE *outfile, SNDFILE *infile, int channels, int normalize)
-{      static double   data [BUFFER_LEN], max ;
-       int             frames, readcount, k ;
-
-       frames = BUFFER_LEN / channels ;
-       readcount = frames ;
-
-       sf_command (infile, SFC_CALC_SIGNAL_MAX, &max, sizeof (max)) ;
-
-       if (!normalize && max < 1.0)
-       {       while (readcount > 0)
-               {       readcount = sf_readf_double (infile, data, frames) ;
-                       sf_writef_double (outfile, data, readcount) ;
-                       } ;
-               }
-       else
-       {       sf_command (infile, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-               while (readcount > 0)
-               {       readcount = sf_readf_double (infile, data, frames) ;
-                       for (k = 0 ; k < readcount * channels ; k++)
-                               data [k] /= max ;
-                       sf_writef_double (outfile, data, readcount) ;
-                       } ;
-               } ;
-
-       return ;
-} /* sfe_copy_data_fp */
-
-void
-sfe_copy_data_int (SNDFILE *outfile, SNDFILE *infile, int channels)
-{      static int      data [BUFFER_LEN] ;
-       int             frames, readcount ;
-
-       frames = BUFFER_LEN / channels ;
-       readcount = frames ;
-
-       while (readcount > 0)
-       {       readcount = sf_readf_int (infile, data, frames) ;
-               sf_writef_int (outfile, data, readcount) ;
-               } ;
-
-       return ;
-} /* sfe_copy_data_int */
-
-/*==============================================================================
-*/
-
-static int
-merge_broadcast_info (SNDFILE * infile, SNDFILE * outfile, int format, const METADATA_INFO * info)
-{      SF_BROADCAST_INFO_2K binfo ;
-       int infileminor ;
-
-       memset (&binfo, 0, sizeof (binfo)) ;
-
-       if ((SF_FORMAT_TYPEMASK & format) != SF_FORMAT_WAV)
-       {       printf ("Error : This is not a WAV file and hence broadcast info cannot be added to it.\n\n") ;
-               return 1 ;
-               } ;
-
-       infileminor = SF_FORMAT_SUBMASK & format ;
-
-       switch (infileminor)
-       {       case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_PCM_24 :
-               case SF_FORMAT_PCM_32 :
-                       break ;
-
-               default :
-                       printf (
-                               "Warning : The EBU Technical Recommendation R68-2000 states that the only\n"
-                               "          allowed encodings are Linear PCM and MPEG3. This file is not in\n"
-                               "          the right format.\n\n"
-                               ) ;
-                       break ;
-               } ;
-
-       if (sf_command (infile, SFC_GET_BROADCAST_INFO, &binfo, sizeof (binfo)) == 0)
-       {       if (infile == outfile)
-               {       printf (
-                               "Error : Attempting in-place broadcast info update, but file does not\n"
-                               "        have a 'bext' chunk to modify. The solution is to specify both\n"
-                               "        input and output files on the command line.\n\n"
-                               ) ;
-                       return 1 ;
-                       } ;
-               } ;
-
-#define REPLACE_IF_NEW(x) \
-               if (info->x != NULL) \
-               {       memset (binfo.x, 0, sizeof (binfo.x)) ; \
-                       memcpy (binfo.x, info->x, MIN (strlen (info->x), sizeof (binfo.x))) ; \
-                       } ;
-
-       REPLACE_IF_NEW (description) ;
-       REPLACE_IF_NEW (originator) ;
-       REPLACE_IF_NEW (originator_reference) ;
-       REPLACE_IF_NEW (origination_date) ;
-       REPLACE_IF_NEW (origination_time) ;
-       REPLACE_IF_NEW (umid) ;
-
-       /* Special case for Time Ref. */
-       if (info->time_ref != NULL)
-       {       uint64_t ts = atoll (info->time_ref) ;
-
-               binfo.time_reference_high = (ts >> 32) ;
-               binfo.time_reference_low = (ts & 0xffffffff) ;
-               } ;
-
-       /* Special case for coding_history because we may want to append. */
-       if (info->coding_history != NULL)
-       {       if (info->coding_hist_append)
-               {       int slen = strlen (binfo.coding_history) ;
-
-                       while (slen > 1 && isspace (binfo.coding_history [slen - 1]))
-                               slen -- ;
-
-                       memcpy (binfo.coding_history + slen, info->coding_history, sizeof (binfo.coding_history) - slen) ;
-                       }
-               else
-               {       size_t slen = MIN (strlen (info->coding_history), sizeof (binfo.coding_history)) ;
-
-                       memset (binfo.coding_history, 0, sizeof (binfo.coding_history)) ;
-                       memcpy (binfo.coding_history, info->coding_history, slen) ;
-                       binfo.coding_history_size = slen ;
-                       } ;
-               } ;
-
-       if (sf_command (outfile, SFC_SET_BROADCAST_INFO, &binfo, sizeof (binfo)) == 0)
-       {       printf ("Error : Setting of broadcast info chunks failed.\n\n") ;
-               return 1 ;
-               } ;
-
-       return 0 ;
-} /* merge_broadcast_info*/
-
-static void
-update_strings (SNDFILE * outfile, const METADATA_INFO * info)
-{
-       if (info->title != NULL)
-               sf_set_string (outfile, SF_STR_TITLE, info->title) ;
-
-       if (info->copyright != NULL)
-               sf_set_string (outfile, SF_STR_COPYRIGHT, info->copyright) ;
-
-       if (info->artist != NULL)
-               sf_set_string (outfile, SF_STR_ARTIST, info->artist) ;
-
-       if (info->comment != NULL)
-               sf_set_string (outfile, SF_STR_COMMENT, info->comment) ;
-
-       if (info->date != NULL)
-               sf_set_string (outfile, SF_STR_DATE, info->date) ;
-
-       if (info->album != NULL)
-               sf_set_string (outfile, SF_STR_ALBUM, info->album) ;
-
-       if (info->license != NULL)
-               sf_set_string (outfile, SF_STR_LICENSE, info->license) ;
-
-} /* update_strings */
-
-
-
-void
-sfe_apply_metadata_changes (const char * filenames [2], const METADATA_INFO * info)
-{      SNDFILE *infile = NULL, *outfile = NULL ;
-       SF_INFO sfinfo ;
-       METADATA_INFO tmpinfo ;
-       int error_code = 0 ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       memset (&tmpinfo, 0, sizeof (tmpinfo)) ;
-
-       if (filenames [1] == NULL)
-               infile = outfile = sf_open (filenames [0], SFM_RDWR, &sfinfo) ;
-       else
-       {       infile = sf_open (filenames [0], SFM_READ, &sfinfo) ;
-
-               /* Output must be WAV. */
-               sfinfo.format = SF_FORMAT_WAV | (SF_FORMAT_SUBMASK & sfinfo.format) ;
-               outfile = sf_open (filenames [1], SFM_WRITE, &sfinfo) ;
-               } ;
-
-       if (infile == NULL)
-       {       printf ("Error : Not able to open input file '%s' : %s\n", filenames [0], sf_strerror (infile)) ;
-               error_code = 1 ;
-               goto cleanup_exit ;
-               } ;
-
-       if (outfile == NULL)
-       {       printf ("Error : Not able to open output file '%s' : %s\n", filenames [1], sf_strerror (outfile)) ;
-               error_code = 1 ;
-               goto cleanup_exit ;
-               } ;
-
-       if (info->has_bext_fields && merge_broadcast_info (infile, outfile, sfinfo.format, info))
-       {       error_code = 1 ;
-               goto cleanup_exit ;
-               } ;
-
-       if (infile != outfile)
-       {       int infileminor = SF_FORMAT_SUBMASK & sfinfo.format ;
-
-               /* If the input file is not the same as the output file, copy the data. */
-               if ((infileminor == SF_FORMAT_DOUBLE) || (infileminor == SF_FORMAT_FLOAT))
-                       sfe_copy_data_fp (outfile, infile, sfinfo.channels, SF_FALSE) ;
-               else
-                       sfe_copy_data_int (outfile, infile, sfinfo.channels) ;
-               } ;
-
-       update_strings (outfile, info) ;
-
-cleanup_exit :
-
-       if (outfile != NULL && outfile != infile)
-               sf_close (outfile) ;
-
-       if (infile != NULL)
-               sf_close (infile) ;
-
-       if (error_code)
-               exit (error_code) ;
-
-       return ;
-} /* sfe_apply_metadata_changes */
-
-/*==============================================================================
-*/
-
-typedef struct
-{      const char      *ext ;
-       int                     len ;
-       int                     format ;
-} OUTPUT_FORMAT_MAP ;
-
-static OUTPUT_FORMAT_MAP format_map [] =
-{
-       {       "aif",          3,      SF_FORMAT_AIFF  },
-       {       "wav",          0,      SF_FORMAT_WAV   },
-       {       "au",           0,      SF_FORMAT_AU    },
-       {       "caf",          0,      SF_FORMAT_CAF   },
-       {       "flac",         0,      SF_FORMAT_FLAC  },
-       {       "snd",          0,      SF_FORMAT_AU    },
-       {       "svx",          0,      SF_FORMAT_SVX   },
-       {       "paf",          0,      SF_ENDIAN_BIG | SF_FORMAT_PAF   },
-       {       "fap",          0,      SF_ENDIAN_LITTLE | SF_FORMAT_PAF        },
-       {       "gsm",          0,      SF_FORMAT_RAW   },
-       {       "nist",         0,      SF_FORMAT_NIST  },
-       {       "htk",          0,      SF_FORMAT_HTK   },
-       {       "ircam",        0,      SF_FORMAT_IRCAM },
-       {       "sf",           0,      SF_FORMAT_IRCAM },
-       {       "voc",          0,      SF_FORMAT_VOC   },
-       {       "w64",          0,      SF_FORMAT_W64   },
-       {       "raw",          0,      SF_FORMAT_RAW   },
-       {       "mat4",         0,      SF_FORMAT_MAT4  },
-       {       "mat5",         0,      SF_FORMAT_MAT5  },
-       {       "mat",          0,      SF_FORMAT_MAT4  },
-       {       "pvf",          0,      SF_FORMAT_PVF   },
-       {       "sds",          0,      SF_FORMAT_SDS   },
-       {       "sd2",          0,      SF_FORMAT_SD2   },
-       {       "vox",          0,      SF_FORMAT_RAW   },
-       {       "xi",           0,      SF_FORMAT_XI    },
-       {       "wve",          0,      SF_FORMAT_WVE   },
-       {       "oga",          0,      SF_FORMAT_OGG   },
-       {       "ogg",          0,      SF_FORMAT_OGG   },
-       {       "mpc",          0,      SF_FORMAT_MPC2K },
-       {       "rf64",         0,      SF_FORMAT_RF64  },
-} ; /* format_map */
-
-int
-sfe_file_type_of_ext (const char *str, int format)
-{      char    buffer [16], *cptr ;
-       int             k ;
-
-       format &= SF_FORMAT_SUBMASK ;
-
-       if ((cptr = strrchr (str, '.')) == NULL)
-               return 0 ;
-
-       strncpy (buffer, cptr + 1, 15) ;
-       buffer [15] = 0 ;
-
-       for (k = 0 ; buffer [k] ; k++)
-               buffer [k] = tolower ((buffer [k])) ;
-
-       if (strcmp (buffer, "gsm") == 0)
-               return SF_FORMAT_RAW | SF_FORMAT_GSM610 ;
-
-       if (strcmp (buffer, "vox") == 0)
-               return SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM ;
-
-       for (k = 0 ; k < (int) (sizeof (format_map) / sizeof (format_map [0])) ; k++)
-       {       if (format_map [k].len > 0 && strncmp (buffer, format_map [k].ext, format_map [k].len) == 0)
-                       return format_map [k].format | format ;
-               else if (strcmp (buffer, format_map [k].ext) == 0)
-                       return format_map [k].format | format ;
-               } ;
-
-       /* Default if all the above fails. */
-       return (SF_FORMAT_WAV | SF_FORMAT_PCM_24) ;
-} /* sfe_file_type_of_ext */
-
-void
-sfe_dump_format_map (void)
-{      SF_FORMAT_INFO  info ;
-       int k ;
-
-       for (k = 0 ; k < ARRAY_LEN (format_map) ; k++)
-       {       info.format = format_map [k].format ;
-               sf_command (NULL, SFC_GET_FORMAT_INFO, &info, sizeof (info)) ;
-               printf ("        %-10s : %s\n", format_map [k].ext, info.name == NULL ? "????" : info.name) ;
-               } ;
-
-} /* sfe_dump_format_map */
-
-const char *
-program_name (const char * argv0)
-{      const char * tmp ;
-
-       tmp = strrchr (argv0, '/') ;
-       argv0 = tmp ? tmp + 1 : argv0 ;
-
-       tmp = strrchr (argv0, '/') ;
-       argv0 = tmp ? tmp + 1 : argv0 ;
-
-       /* Remove leading libtool name mangling. */
-       if (strstr (argv0, "lt-") == argv0)
-               return argv0 + 3 ;
-
-       return argv0 ;
-} /* program_name */
-
-const char *
-sfe_endian_name (int format)
-{
-       switch (format & SF_FORMAT_ENDMASK)
-       {       case SF_ENDIAN_FILE : return "file" ;
-               case SF_ENDIAN_LITTLE : return "little" ;
-               case SF_ENDIAN_BIG : return "big" ;
-               case SF_ENDIAN_CPU : return "cpu" ;
-               default : break ;
-               } ;
-
-       return "unknown" ;
-} /* sfe_endian_name */
-
-const char *
-sfe_container_name (int format)
-{
-       switch (format & SF_FORMAT_TYPEMASK)
-       {       case SF_FORMAT_WAV : return "WAV" ;
-               case SF_FORMAT_AIFF : return "AIFF" ;
-               case SF_FORMAT_AU : return "AU" ;
-               case SF_FORMAT_RAW : return "RAW" ;
-               case SF_FORMAT_PAF : return "PAF" ;
-               case SF_FORMAT_SVX : return "SVX" ;
-               case SF_FORMAT_NIST : return "NIST" ;
-               case SF_FORMAT_VOC : return "VOC" ;
-               case SF_FORMAT_IRCAM : return "IRCAM" ;
-               case SF_FORMAT_W64 : return "W64" ;
-               case SF_FORMAT_MAT4 : return "MAT4" ;
-               case SF_FORMAT_MAT5 : return "MAT5" ;
-               case SF_FORMAT_PVF : return "PVF" ;
-               case SF_FORMAT_XI : return "XI" ;
-               case SF_FORMAT_HTK : return "HTK" ;
-               case SF_FORMAT_SDS : return "SDS" ;
-               case SF_FORMAT_AVR : return "AVR" ;
-               case SF_FORMAT_WAVEX : return "WAVEX" ;
-               case SF_FORMAT_SD2 : return "SD2" ;
-               case SF_FORMAT_FLAC : return "FLAC" ;
-               case SF_FORMAT_CAF : return "CAF" ;
-               case SF_FORMAT_WVE : return "WVE" ;
-               case SF_FORMAT_OGG : return "OGG" ;
-               case SF_FORMAT_MPC2K : return "MPC2K" ;
-               case SF_FORMAT_RF64 : return "RF64" ;
-               default : break ;
-               } ;
-
-       return "unknown" ;
-} /* sfe_container_name */
-
-const char *
-sfe_codec_name (int format)
-{
-       switch (format & SF_FORMAT_SUBMASK)
-       {       case SF_FORMAT_PCM_S8 : return "signed 8 bit PCM" ;
-               case SF_FORMAT_PCM_16 : return "16 bit PCM" ;
-               case SF_FORMAT_PCM_24 : return "24 bit PCM" ;
-               case SF_FORMAT_PCM_32 : return "32 bit PCM" ;
-               case SF_FORMAT_PCM_U8 : return "unsigned 8 bit PCM" ;
-               case SF_FORMAT_FLOAT : return "32 bit float" ;
-               case SF_FORMAT_DOUBLE : return "64 bit double" ;
-               case SF_FORMAT_ULAW : return "u-law" ;
-               case SF_FORMAT_ALAW : return "a-law" ;
-               case SF_FORMAT_IMA_ADPCM : return "IMA ADPCM" ;
-               case SF_FORMAT_MS_ADPCM : return "MS ADPCM" ;
-               case SF_FORMAT_GSM610 : return "gsm610" ;
-               case SF_FORMAT_VOX_ADPCM : return "Vox ADPCM" ;
-               case SF_FORMAT_G721_32 : return "g721 32kbps" ;
-               case SF_FORMAT_G723_24 : return "g723 24kbps" ;
-               case SF_FORMAT_G723_40 : return "g723 40kbps" ;
-               case SF_FORMAT_DWVW_12 : return "12 bit DWVW" ;
-               case SF_FORMAT_DWVW_16 : return "16 bit DWVW" ;
-               case SF_FORMAT_DWVW_24 : return "14 bit DWVW" ;
-               case SF_FORMAT_DWVW_N : return "DWVW" ;
-               case SF_FORMAT_DPCM_8 : return "8 bit DPCM" ;
-               case SF_FORMAT_DPCM_16 : return "16 bit DPCM" ;
-               case SF_FORMAT_VORBIS : return "Vorbis" ;
-               case SF_FORMAT_ALAC_16 : return "16 bit ALAC" ;
-               case SF_FORMAT_ALAC_20 : return "20 bit ALAC" ;
-               case SF_FORMAT_ALAC_24 : return "24 bit ALAC" ;
-               case SF_FORMAT_ALAC_32 : return "32 bit ALAC" ;
-               default : break ;
-               } ;
-       return "unknown" ;
-} /* sfe_codec_name */
-
diff --git a/libs/libsndfile/programs/common.h b/libs/libsndfile/programs/common.h
deleted file mode 100644 (file)
index eda2d7d..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-
-#define        ARRAY_LEN(x)    ((int) (sizeof (x) / sizeof (x [0])))
-#define        MAX(a, b)               ((a) > (b) ? (a) : (b))
-
-typedef struct
-{      const char * title ;
-       const char * copyright ;
-       const char * artist ;
-       const char * comment ;
-       const char * date ;
-       const char * album ;
-       const char * license ;
-
-
-       /* Stuff to go in the 'bext' chunk of WAV files. */
-       int has_bext_fields ;
-       int coding_hist_append ;
-
-       const char * description ;
-       const char * originator ;
-       const char * originator_reference ;
-       const char * origination_date ;
-       const char * origination_time ;
-       const char * umid ;
-       const char * coding_history ;
-       const char * time_ref ;
-} METADATA_INFO ;
-
-typedef SF_BROADCAST_INFO_VAR (2048) SF_BROADCAST_INFO_2K ;
-
-void sfe_apply_metadata_changes (const char * filenames [2], const METADATA_INFO * info) ;
-
-void sfe_copy_data_fp (SNDFILE *outfile, SNDFILE *infile, int channels, int normalize) ;
-
-void sfe_copy_data_int (SNDFILE *outfile, SNDFILE *infile, int channels) ;
-
-int sfe_file_type_of_ext (const char *filename, int format) ;
-
-void sfe_dump_format_map (void) ;
-
-const char * program_name (const char * argv0) ;
-
-const char * sfe_endian_name (int format) ;
-const char * sfe_container_name (int format) ;
-const char * sfe_codec_name (int format) ;
-
diff --git a/libs/libsndfile/programs/sndfile-cmp.c b/libs/libsndfile/programs/sndfile-cmp.c
deleted file mode 100644 (file)
index 121d25a..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
-** Copyright (C) 2008-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2008 Conrad Parker <conrad@metadecks.org>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <inttypes.h>
-
-#include <sndfile.h>
-
-#include "common.h"
-
-/* Length of comparison data buffers in units of items */
-#define BUFLEN 65536
-
-static const char * progname = NULL ;
-static char * filename1 = NULL, * filename2 = NULL ;
-
-static int
-comparison_error (const char * what, sf_count_t frame_offset)
-{      char buffer [128] = "" ;
-
-       if (frame_offset >= 0)
-               snprintf (buffer, sizeof (buffer), " (at frame offset %" PRId64 ")", frame_offset) ;
-
-       printf ("%s: %s of files %s and %s differ%s.\n", progname, what, filename1, filename2, buffer) ;
-       return 1 ;
-} /* comparison_error */
-
-static int
-compare (void)
-{
-       double buf1 [BUFLEN], buf2 [BUFLEN] ;
-       SF_INFO sfinfo1, sfinfo2 ;
-       SNDFILE * sf1 = NULL, * sf2 = NULL ;
-       sf_count_t items, i, nread1, nread2, offset = 0 ;
-       int retval = 0 ;
-
-       memset (&sfinfo1, 0, sizeof (SF_INFO)) ;
-       sf1 = sf_open (filename1, SFM_READ, &sfinfo1) ;
-       if (sf1 == NULL)
-       {       printf ("Error opening %s.\n", filename1) ;
-               retval = 1 ;
-               goto out ;
-               } ;
-
-       memset (&sfinfo2, 0, sizeof (SF_INFO)) ;
-       sf2 = sf_open (filename2, SFM_READ, &sfinfo2) ;
-       if (sf2 == NULL)
-       {       printf ("Error opening %s.\n", filename2) ;
-               retval = 1 ;
-               goto out ;
-               } ;
-
-       if (sfinfo1.samplerate != sfinfo2.samplerate)
-       {       retval = comparison_error ("Samplerates", -1) ;
-               goto out ;
-               } ;
-
-       if (sfinfo1.channels != sfinfo2.channels)
-       {       retval = comparison_error ("Number of channels", -1) ;
-               goto out ;
-               } ;
-
-       /* Calculate the framecount that will fit in our data buffers */
-       items = BUFLEN / sfinfo1.channels ;
-
-       while ((nread1 = sf_readf_double (sf1, buf1, items)) > 0)
-       {       nread2 = sf_readf_double (sf2, buf2, nread1) ;
-               if (nread2 != nread1)
-               {       retval = comparison_error ("PCM data lengths", -1) ;
-                       goto out ;
-                       } ;
-               for (i = 0 ; i < nread1 * sfinfo1.channels ; i++)
-               {       if (buf1 [i] != buf2 [i])
-                       {       retval = comparison_error ("PCM data", offset + i / sfinfo1.channels) ;
-                               goto out ;
-                               } ;
-                       } ;
-               offset += nread1 ;
-               } ;
-
-       if ((nread2 = sf_readf_double (sf2, buf2, items)) != 0)
-       {       retval = comparison_error ("PCM data lengths", -1) ;
-               goto out ;
-               } ;
-
-out :
-       sf_close (sf1) ;
-       sf_close (sf2) ;
-
-       return retval ;
-} /* compare */
-
-static void
-print_version (void)
-{      char buffer [256] ;
-
-       sf_command (NULL, SFC_GET_LIB_VERSION, buffer, sizeof (buffer)) ;
-       printf ("\nVersion : %s\n\n", buffer) ;
-} /* print_version */
-
-static void
-usage_exit (void)
-{
-       print_version () ;
-
-       printf ("Usage : %s <filename> <filename>\n", progname) ;
-       printf ("       Compare the PCM data of two sound files.\n\n") ;
-       exit (0) ;
-} /* usage_exit */
-
-int
-main (int argc, char *argv [])
-{
-       progname = program_name (argv [0]) ;
-
-       if (argc != 3)
-       {       usage_exit () ;
-               return 1 ;
-               } ;
-
-       filename1 = argv [argc - 2] ;
-       filename2 = argv [argc - 1] ;
-
-       if (strcmp (filename1, filename2) == 0)
-       {       printf ("Error : Input filenames are the same.\n\n") ;
-               usage_exit () ;
-               return 1 ;
-               } ;
-
-       return compare () ;
-} /* main */
diff --git a/libs/libsndfile/programs/sndfile-concat.c b/libs/libsndfile/programs/sndfile-concat.c
deleted file mode 100644 (file)
index ef5312b..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include       <stdio.h>
-#include       <stdlib.h>
-#include       <string.h>
-#include       <ctype.h>
-
-#include       <sndfile.h>
-
-#include       "common.h"
-
-#define                BUFFER_LEN      (1 << 16)
-
-
-static void concat_data_fp (SNDFILE *wfile, SNDFILE *rofile, int channels) ;
-static void concat_data_int (SNDFILE *wfile, SNDFILE *rofile, int channels) ;
-
-static void
-usage_exit (const char *progname)
-{
-       printf ("\nUsage : %s <infile1> <infile2>  ... <outfile>\n\n", progname) ;
-       puts (
-               "    Create a new output file <outfile> containing the concatenated\n"
-               "    audio data from froms <infile1> <infile2> ....\n"
-               "\n"
-               "    The joined file will be encoded in the same format as the data\n"
-               "    in infile1, with all the data in subsequent files automatically\n"
-               "    converted to the correct encoding.\n"
-               "\n"
-               "    The only restriction is that the two files must have the same\n"
-               "    number of channels.\n"
-               ) ;
-
-       exit (0) ;
-} /* usage_exit */
-
-int
-main (int argc, char *argv [])
-{      const char      *progname, *outfilename ;
-       SNDFILE         *outfile, **infiles ;
-       SF_INFO         sfinfo_out, sfinfo_in ;
-       void            (*func) (SNDFILE*, SNDFILE*, int) ;
-       int                     k ;
-
-       progname = program_name (argv [0]) ;
-
-       if (argc < 4)
-               usage_exit (progname) ;
-
-       argv ++ ;
-       argc -- ;
-
-       argc -- ;
-       outfilename = argv [argc] ;
-
-       if ((infiles = calloc (argc, sizeof (SNDFILE*))) == NULL)
-       {       printf ("\nError : Malloc failed.\n\n") ;
-               exit (1) ;
-               } ;
-
-       memset (&sfinfo_in, 0, sizeof (sfinfo_in)) ;
-
-       if ((infiles [0] = sf_open (argv [0], SFM_READ, &sfinfo_in)) == NULL)
-       {       printf ("\nError : failed to open file '%s'.\n\n", argv [0]) ;
-               exit (1) ;
-               } ;
-
-       sfinfo_out = sfinfo_in ;
-
-       for (k = 1 ; k < argc ; k++)
-       {       if ((infiles [k] = sf_open (argv [k], SFM_READ, &sfinfo_in)) == NULL)
-               {       printf ("\nError : failed to open file '%s'.\n\n", argv [k]) ;
-                       exit (1) ;
-                       } ;
-
-               if (sfinfo_in.channels != sfinfo_out.channels)
-               {       printf ("\nError : File '%s' has %d channels (should have %d).\n\n", argv [k], sfinfo_in.channels, sfinfo_out.channels) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       if ((outfile = sf_open (outfilename, SFM_WRITE, &sfinfo_out)) == NULL)
-       {       printf ("\nError : Not able to open input file %s.\n", outfilename) ;
-               puts (sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       if ((sfinfo_out.format & SF_FORMAT_SUBMASK) == SF_FORMAT_DOUBLE ||
-                       (sfinfo_out.format & SF_FORMAT_SUBMASK) == SF_FORMAT_FLOAT)
-               func = concat_data_fp ;
-       else
-               func = concat_data_int ;
-
-       for (k = 0 ; k < argc ; k++)
-       {       func (outfile, infiles [k], sfinfo_out.channels) ;
-               sf_close (infiles [k]) ;
-               } ;
-
-       sf_close (outfile) ;
-
-       return 0 ;
-} /* main */
-
-static void
-concat_data_fp (SNDFILE *wfile, SNDFILE *rofile, int channels)
-{      static double   data [BUFFER_LEN] ;
-       int             frames, readcount ;
-
-       frames = BUFFER_LEN / channels ;
-       readcount = frames ;
-
-       sf_seek (wfile, 0, SEEK_END) ;
-
-       while (readcount > 0)
-       {       readcount = sf_readf_double (rofile, data, frames) ;
-               sf_writef_double (wfile, data, readcount) ;
-               } ;
-
-       return ;
-} /* concat_data_fp */
-
-static void
-concat_data_int (SNDFILE *wfile, SNDFILE *rofile, int channels)
-{      static int      data [BUFFER_LEN] ;
-       int             frames, readcount ;
-
-       frames = BUFFER_LEN / channels ;
-       readcount = frames ;
-
-       sf_seek (wfile, 0, SEEK_END) ;
-
-       while (readcount > 0)
-       {       readcount = sf_readf_int (rofile, data, frames) ;
-               sf_writef_int (wfile, data, readcount) ;
-               } ;
-
-       return ;
-} /* concat_data_int */
-
diff --git a/libs/libsndfile/programs/sndfile-convert.c b/libs/libsndfile/programs/sndfile-convert.c
deleted file mode 100644 (file)
index c22cc9b..0000000
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <sndfile.h>
-
-#include "common.h"
-
-
-typedef        struct
-{      char    *infilename, *outfilename ;
-       SF_INFO infileinfo, outfileinfo ;
-} OptionData ;
-
-static void copy_metadata (SNDFILE *outfile, SNDFILE *infile, int channels) ;
-
-static void
-usage_exit (const char *progname)
-{
-       printf ("\nUsage : %s [options] [encoding] <input file> <output file>\n", progname) ;
-       puts ("\n"
-               "    where [option] may be:\n\n"
-               "        -override-sample-rate=X  : force sample rate of input to X\n"
-               "        -endian=little           : force output file to little endian data\n"
-               "        -endian=big              : force output file to big endian data\n"
-               "        -endian=cpu              : force output file same endian-ness as the CPU\n"
-               "        -normalize               : normalize the data in the output file\n"
-               ) ;
-
-       puts (
-               "    where [encoding] may be one of the following:\n\n"
-               "        -pcms8     : force the output to signed 8 bit pcm\n"
-               "        -pcmu8     : force the output to unsigned 8 bit pcm\n"
-               "        -pcm16     : force the output to 16 bit pcm\n"
-               "        -pcm24     : force the output to 24 bit pcm\n"
-               "        -pcm32     : force the output to 32 bit pcm\n"
-               "        -float32   : force the output to 32 bit floating point"
-               ) ;
-       puts (
-               "        -ulaw      : force the output ULAW\n"
-               "        -alaw      : force the output ALAW\n"
-               "        -alac16    : force the output 16 bit ALAC (CAF only)\n"
-               "        -alac20    : force the output 20 bit ALAC (CAF only)\n"
-               "        -alac24    : force the output 24 bit ALAC (CAF only)\n"
-               "        -alac32    : force the output 32 bit ALAC (CAF only)\n"
-               "        -ima-adpcm : force the output to IMA ADPCM (WAV only)\n"
-               "        -ms-adpcm  : force the output to MS ADPCM (WAV only)\n"
-               "        -gsm610    : force the GSM6.10 (WAV only)\n"
-               "        -dwvw12    : force the output to 12 bit DWVW (AIFF only)\n"
-               "        -dwvw16    : force the output to 16 bit DWVW (AIFF only)\n"
-               "        -dwvw24    : force the output to 24 bit DWVW (AIFF only)\n"
-               "        -vorbis    : force the output to Vorbis (OGG only)\n"
-               ) ;
-
-       puts (
-               "    If no encoding is specified, the program will try to use the encoding\n"
-               "    of the input file in the output file. This will not always work as\n"
-               "    most container formats (eg WAV, AIFF etc) only support a small subset\n"
-               "    of codec formats (eg 16 bit PCM, a-law, Vorbis etc).\n"
-               ) ;
-
-       puts (
-               "    The format of the output file is determined by the file extension of the\n"
-               "    output file name. The following extensions are currently understood:\n"
-               ) ;
-
-       sfe_dump_format_map () ;
-
-       puts ("") ;
-       exit (0) ;
-} /* usage_exit */
-
-static void
-report_format_error_exit (const char * argv0, SF_INFO * sfinfo)
-{      int old_format = sfinfo->format ;
-       int endian = sfinfo->format & SF_FORMAT_ENDMASK ;
-
-       sfinfo->format = old_format & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-       if (endian && sf_format_check (sfinfo))
-       {       printf ("Error : output file format does not support %s endian-ness.\n", sfe_endian_name (endian)) ;
-               exit (1) ;
-               } ;
-
-       printf ("\n"
-                       "Error : output file format is invalid.\n"
-                       "The '%s' container does not support '%s' codec data.\n"
-                       "Run '%s --help' for clues.\n\n",
-                       sfe_container_name (sfinfo->format), sfe_codec_name (sfinfo->format), program_name (argv0)) ;
-       exit (1) ;
-} /* report_format_error_exit */
-
-int
-main (int argc, char * argv [])
-{      const char      *progname, *infilename, *outfilename ;
-       SNDFILE         *infile = NULL, *outfile = NULL ;
-       SF_INFO         sfinfo ;
-       int                     k, outfilemajor, outfileminor = 0, infileminor ;
-       int                     override_sample_rate = 0 ; /* assume no sample rate override. */
-       int                     endian = SF_ENDIAN_FILE, normalize = SF_FALSE ;
-
-       progname = program_name (argv [0]) ;
-
-       if (argc < 3 || argc > 5)
-       {       usage_exit (progname) ;
-               return 1 ;
-               } ;
-
-       infilename = argv [argc-2] ;
-       outfilename = argv [argc-1] ;
-
-       if (strcmp (infilename, outfilename) == 0)
-       {       printf ("Error : Input and output filenames are the same.\n\n") ;
-               usage_exit (progname) ;
-               return 1 ;
-               } ;
-
-       if (strlen (infilename) > 1 && infilename [0] == '-')
-       {       printf ("Error : Input filename (%s) looks like an option.\n\n", infilename) ;
-               usage_exit (progname) ;
-               return 1 ;
-               } ;
-
-       if (outfilename [0] == '-')
-       {       printf ("Error : Output filename (%s) looks like an option.\n\n", outfilename) ;
-               usage_exit (progname) ;
-               return 1 ;
-               } ;
-
-       for (k = 1 ; k < argc - 2 ; k++)
-       {       if (! strcmp (argv [k], "-pcms8"))
-               {       outfileminor = SF_FORMAT_PCM_S8 ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-pcmu8"))
-               {       outfileminor = SF_FORMAT_PCM_U8 ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-pcm16"))
-               {       outfileminor = SF_FORMAT_PCM_16 ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-pcm24"))
-               {       outfileminor = SF_FORMAT_PCM_24 ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-pcm32"))
-               {       outfileminor = SF_FORMAT_PCM_32 ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-float32"))
-               {       outfileminor = SF_FORMAT_FLOAT ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-ulaw"))
-               {       outfileminor = SF_FORMAT_ULAW ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-alaw"))
-               {       outfileminor = SF_FORMAT_ALAW ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-alac16"))
-               {       outfileminor = SF_FORMAT_ALAC_16 ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-alac20"))
-               {       outfileminor = SF_FORMAT_ALAC_20 ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-alac24"))
-               {       outfileminor = SF_FORMAT_ALAC_24 ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-alac32"))
-               {       outfileminor = SF_FORMAT_ALAC_32 ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-ima-adpcm"))
-               {       outfileminor = SF_FORMAT_IMA_ADPCM ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-ms-adpcm"))
-               {       outfileminor = SF_FORMAT_MS_ADPCM ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-gsm610"))
-               {       outfileminor = SF_FORMAT_GSM610 ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-dwvw12"))
-               {       outfileminor = SF_FORMAT_DWVW_12 ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-dwvw16"))
-               {       outfileminor = SF_FORMAT_DWVW_16 ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-dwvw24"))
-               {       outfileminor = SF_FORMAT_DWVW_24 ;
-                       continue ;
-                       } ;
-               if (! strcmp (argv [k], "-vorbis"))
-               {       outfileminor = SF_FORMAT_VORBIS ;
-                       continue ;
-                       } ;
-
-               if (strstr (argv [k], "-override-sample-rate=") == argv [k])
-               {       const char *ptr ;
-
-                       ptr = argv [k] + strlen ("-override-sample-rate=") ;
-                       override_sample_rate = atoi (ptr) ;
-                       continue ;
-                       } ;
-
-               if (! strcmp (argv [k], "-endian=little"))
-               {       endian = SF_ENDIAN_LITTLE ;
-                       continue ;
-                       } ;
-
-               if (! strcmp (argv [k], "-endian=big"))
-               {       endian = SF_ENDIAN_BIG ;
-                       continue ;
-                       } ;
-
-               if (! strcmp (argv [k], "-endian=cpu"))
-               {       endian = SF_ENDIAN_CPU ;
-                       continue ;
-                       } ;
-
-               if (! strcmp (argv [k], "-endian=file"))
-               {       endian = SF_ENDIAN_FILE ;
-                       continue ;
-                       } ;
-
-               if (! strcmp (argv [k], "-normalize"))
-               {       normalize = SF_TRUE ;
-                       continue ;
-                       } ;
-
-               printf ("Error : Not able to decode argunment '%s'.\n", argv [k]) ;
-               exit (1) ;
-               } ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       if ((infile = sf_open (infilename, SFM_READ, &sfinfo)) == NULL)
-       {       printf ("Not able to open input file %s.\n", infilename) ;
-               puts (sf_strerror (NULL)) ;
-               return 1 ;
-               } ;
-
-       /* Update sample rate if forced to something else. */
-       if (override_sample_rate)
-               sfinfo.samplerate = override_sample_rate ;
-
-       infileminor = sfinfo.format & SF_FORMAT_SUBMASK ;
-
-       if ((sfinfo.format = sfe_file_type_of_ext (outfilename, sfinfo.format)) == 0)
-       {       printf ("Error : Not able to determine output file type for %s.\n", outfilename) ;
-               return 1 ;
-               } ;
-
-       outfilemajor = sfinfo.format & (SF_FORMAT_TYPEMASK | SF_FORMAT_ENDMASK) ;
-
-       if (outfileminor == 0)
-               outfileminor = sfinfo.format & SF_FORMAT_SUBMASK ;
-
-       if (outfileminor != 0)
-               sfinfo.format = outfilemajor | outfileminor ;
-       else
-               sfinfo.format = outfilemajor | (sfinfo.format & SF_FORMAT_SUBMASK) ;
-
-       sfinfo.format |= endian ;
-
-       if ((sfinfo.format & SF_FORMAT_TYPEMASK) == SF_FORMAT_XI)
-               switch (sfinfo.format & SF_FORMAT_SUBMASK)
-               {       case SF_FORMAT_PCM_16 :
-                                       sfinfo.format = outfilemajor | SF_FORMAT_DPCM_16 ;
-                                       break ;
-
-                       case SF_FORMAT_PCM_S8 :
-                       case SF_FORMAT_PCM_U8 :
-                                       sfinfo.format = outfilemajor | SF_FORMAT_DPCM_8 ;
-                                       break ;
-                       } ;
-
-       if (sf_format_check (&sfinfo) == 0)
-               report_format_error_exit (argv [0], &sfinfo) ;
-
-       /* Open the output file. */
-       if ((outfile = sf_open (outfilename, SFM_WRITE, &sfinfo)) == NULL)
-       {       printf ("Not able to open output file %s : %s\n", outfilename, sf_strerror (NULL)) ;
-               return 1 ;
-               } ;
-
-       /* Copy the metadata */
-       copy_metadata (outfile, infile, sfinfo.channels) ;
-
-       if (normalize
-                       || (outfileminor == SF_FORMAT_DOUBLE) || (outfileminor == SF_FORMAT_FLOAT)
-                       || (infileminor == SF_FORMAT_DOUBLE) || (infileminor == SF_FORMAT_FLOAT)
-                       || (infileminor == SF_FORMAT_VORBIS) || (outfileminor == SF_FORMAT_VORBIS))
-               sfe_copy_data_fp (outfile, infile, sfinfo.channels, normalize) ;
-       else
-               sfe_copy_data_int (outfile, infile, sfinfo.channels) ;
-
-       sf_close (infile) ;
-       sf_close (outfile) ;
-
-       return 0 ;
-} /* main */
-
-static void
-copy_metadata (SNDFILE *outfile, SNDFILE *infile, int channels)
-{      SF_INSTRUMENT inst ;
-       SF_BROADCAST_INFO_2K binfo ;
-       const char *str ;
-       int k, chanmap [256] ;
-
-       for (k = SF_STR_FIRST ; k <= SF_STR_LAST ; k++)
-       {       str = sf_get_string (infile, k) ;
-               if (str != NULL)
-                       sf_set_string (outfile, k, str) ;
-               } ;
-
-       memset (&inst, 0, sizeof (inst)) ;
-       memset (&binfo, 0, sizeof (binfo)) ;
-
-       if (channels < ARRAY_LEN (chanmap))
-       {       size_t size = channels * sizeof (chanmap [0]) ;
-
-               if (sf_command (infile, SFC_GET_CHANNEL_MAP_INFO, chanmap, size) == SF_TRUE)
-                       sf_command (outfile, SFC_SET_CHANNEL_MAP_INFO, chanmap, size) ;
-               } ;
-
-       if (sf_command (infile, SFC_GET_INSTRUMENT, &inst, sizeof (inst)) == SF_TRUE)
-               sf_command (outfile, SFC_SET_INSTRUMENT, &inst, sizeof (inst)) ;
-
-       if (sf_command (infile, SFC_GET_BROADCAST_INFO, &binfo, sizeof (binfo)) == SF_TRUE)
-               sf_command (outfile, SFC_SET_BROADCAST_INFO, &binfo, sizeof (binfo)) ;
-
-} /* copy_metadata */
-
diff --git a/libs/libsndfile/programs/sndfile-deinterleave.c b/libs/libsndfile/programs/sndfile-deinterleave.c
deleted file mode 100644 (file)
index df80b04..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
-** Copyright (C) 2009-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sndfile.h>
-
-#include "common.h"
-
-#define        BUFFER_LEN      4096
-#define        MAX_CHANNELS    16
-
-
-typedef struct
-{      SNDFILE * infile ;
-       SNDFILE * outfile [MAX_CHANNELS] ;
-
-       union
-       {       double  d [MAX_CHANNELS * BUFFER_LEN] ;
-               int             i [MAX_CHANNELS * BUFFER_LEN] ;
-       } din ;
-
-       union
-       {       double  d [BUFFER_LEN] ;
-               int             i [BUFFER_LEN] ;
-       } dout ;
-
-       int channels ;
-} STATE ;
-
-static void usage_exit (void) ;
-
-static void deinterleave_int (STATE * state) ;
-static void deinterleave_double (STATE * state) ;
-
-int
-main (int argc, char **argv)
-{      STATE state ;
-       SF_INFO sfinfo ;
-       char pathname [512], ext [32], *cptr ;
-       int ch, double_split ;
-
-       if (argc != 2)
-       {       if (argc != 1)
-                       puts ("\nError : need a single input file.\n") ;
-               usage_exit () ;
-               } ;
-
-       memset (&state, 0, sizeof (state)) ;
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       if ((state.infile = sf_open (argv [1], SFM_READ, &sfinfo)) == NULL)
-       {       printf ("\nError : Not able to open input file '%s'\n%s\n", argv [1], sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels < 2)
-       {       printf ("\nError : Input file '%s' only has one channel.\n", argv [1]) ;
-               exit (1) ;
-               } ;
-
-       state.channels = sfinfo.channels ;
-       sfinfo.channels = 1 ;
-
-       snprintf (pathname, sizeof (pathname), "%s", argv [1]) ;
-       if ((cptr = strrchr (pathname, '.')) == NULL)
-               ext [0] = 0 ;
-       else
-       {       snprintf (ext, sizeof (ext), "%s", cptr) ;
-               cptr [0] = 0 ;
-               } ;
-
-       printf ("Input file : %s\n", pathname) ;
-       puts ("Output files :") ;
-
-       for (ch = 0 ; ch < state.channels ; ch++)
-       {       char filename [520] ;
-
-               snprintf (filename, sizeof (filename), "%s_%02d%s", pathname, ch, ext) ;
-
-               if ((state.outfile [ch] = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-               {       printf ("Not able to open output file '%s'\n%s\n", filename, sf_strerror (NULL)) ;
-                       exit (1) ;
-                       } ;
-
-               printf ("    %s\n", filename) ;
-               } ;
-
-       switch (sfinfo.format & SF_FORMAT_SUBMASK)
-       {       case SF_FORMAT_FLOAT :
-               case SF_FORMAT_DOUBLE :
-               case SF_FORMAT_VORBIS :
-                       double_split = 1 ;
-                       break ;
-
-               default :
-                       double_split = 0 ;
-                       break ;
-               } ;
-
-       if (double_split)
-               deinterleave_double (&state) ;
-       else
-               deinterleave_int (&state) ;
-
-       sf_close (state.infile) ;
-       for (ch = 0 ; ch < MAX_CHANNELS ; ch++)
-               if (state.outfile [ch] != NULL)
-                       sf_close (state.outfile [ch]) ;
-
-       return 0 ;
-} /* main */
-
-/*------------------------------------------------------------------------------
-*/
-
-static void
-usage_exit (void)
-{      puts ("\nUsage : sndfile-deinterleave <filename>\n") ;
-       puts (
-               "Split a mutli-channel file into a set of mono files.\n"
-               "\n"
-               "If the input file is named 'a.wav', the output files will be named\n"
-               "a_00.wav, a_01.wav and so on.\n"
-               ) ;
-       printf ("Using %s.\n\n", sf_version_string ()) ;
-       exit (0) ;
-} /* usage_exit */
-
-static void
-deinterleave_int (STATE * state)
-{      int read_len ;
-       int ch, k ;
-
-       do
-       {       read_len = sf_readf_int (state->infile, state->din.i, BUFFER_LEN) ;
-
-               for (ch = 0 ; ch < state->channels ; ch ++)
-               {       for (k = 0 ; k < read_len ; k++)
-                               state->dout.i [k] = state->din.i [k * state->channels + ch] ;
-                       sf_write_int (state->outfile [ch], state->dout.i, read_len) ;
-                       } ;
-               }
-       while (read_len > 0) ;
-
-} /* deinterleave_int */
-
-static void
-deinterleave_double (STATE * state)
-{      int read_len ;
-       int ch, k ;
-
-       do
-       {       read_len = sf_readf_double (state->infile, state->din.d, BUFFER_LEN) ;
-
-               for (ch = 0 ; ch < state->channels ; ch ++)
-               {       for (k = 0 ; k < read_len ; k++)
-                               state->dout.d [k] = state->din.d [k * state->channels + ch] ;
-                       sf_write_double (state->outfile [ch], state->dout.d, read_len) ;
-                       } ;
-               }
-       while (read_len > 0) ;
-
-} /* deinterleave_double */
diff --git a/libs/libsndfile/programs/sndfile-info.c b/libs/libsndfile/programs/sndfile-info.c
deleted file mode 100644 (file)
index 06982fd..0000000
+++ /dev/null
@@ -1,529 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include       <stdio.h>
-#include       <stdlib.h>
-#include       <string.h>
-#include       <inttypes.h>
-#include       <ctype.h>
-#include       <math.h>
-
-#include       <sndfile.h>
-
-#include "common.h"
-
-#define        BUFFER_LEN              (1 << 16)
-
-#if (defined (WIN32) || defined (_WIN32))
-#include <windows.h>
-#endif
-
-static void print_version (void) ;
-static void usage_exit (const char *progname) ;
-
-static void info_dump (const char *filename) ;
-static int     instrument_dump (const char *filename) ;
-static int     broadcast_dump (const char *filename) ;
-static int     chanmap_dump (const char *filename) ;
-static int     cart_dump (const char *filename) ;
-static void total_dump (void) ;
-
-static double total_seconds = 0.0 ;
-
-int
-main (int argc, char *argv [])
-{      int     k ;
-
-       print_version () ;
-
-       if (argc < 2 || strcmp (argv [1], "--help") == 0 || strcmp (argv [1], "-h") == 0)
-       {       usage_exit (program_name (argv [0])) ;
-               return 1 ;
-               } ;
-
-       if (strcmp (argv [1], "--instrument") == 0)
-       {       int error = 0 ;
-
-               for (k = 2 ; k < argc ; k++)
-                       error += instrument_dump (argv [k]) ;
-               return error ;
-               } ;
-
-       if (strcmp (argv [1], "--broadcast") == 0)
-       {       int error = 0 ;
-
-               for (k = 2 ; k < argc ; k++)
-                       error += broadcast_dump (argv [k]) ;
-               return error ;
-               } ;
-
-       if (strcmp (argv [1], "--channel-map") == 0)
-       {       int error = 0 ;
-
-               for (k = 2 ; k < argc ; k++)
-                       error += chanmap_dump (argv [k]) ;
-               return error ;
-               } ;
-
-       if (strcmp (argv [1], "--cart") == 0)
-       {       int error = 0 ;
-
-               for (k = 2 ; k < argc ; k++)
-                       error += cart_dump (argv [k]) ;
-               return error ;
-               } ;
-
-       for (k = 1 ; k < argc ; k++)
-               info_dump (argv [k]) ;
-
-       if (argc > 2)
-               total_dump () ;
-
-       return 0 ;
-} /* main */
-
-/*==============================================================================
-**     Print version and usage.
-*/
-
-static double  data [BUFFER_LEN] ;
-
-static void
-print_version (void)
-{      char buffer [256] ;
-
-       sf_command (NULL, SFC_GET_LIB_VERSION, buffer, sizeof (buffer)) ;
-       printf ("\nVersion : %s\n\n", buffer) ;
-} /* print_version */
-
-
-static void
-usage_exit (const char *progname)
-{      printf ("Usage :\n  %s <file> ...\n", progname) ;
-       printf ("    Prints out information about one or more sound files.\n\n") ;
-       printf ("  %s --instrument <file>\n", progname) ;
-       printf ("    Prints out the instrument data for the given file.\n\n") ;
-       printf ("  %s --broadcast <file>\n", progname) ;
-       printf ("    Prints out the broadcast WAV info for the given file.\n\n") ;
-       printf ("  %s --channel-map <file>\n", progname) ;
-       printf ("    Prints out the channel map for the given file.\n\n") ;
-       printf ("  %s --cart <file>\n", progname) ;
-       printf ("    Prints out the cart chunk WAV info for the given file.\n\n") ;
-#if (defined (_WIN32) || defined (WIN32))
-               printf ("This is a Unix style command line application which\n"
-                               "should be run in a MSDOS box or Command Shell window.\n\n") ;
-               printf ("Sleeping for 5 seconds before exiting.\n\n") ;
-               fflush (stdout) ;
-
-               /* This is the officially blessed by microsoft way but I can't get
-               ** it to link.
-               **     Sleep (15) ;
-               ** Instead, use this:
-               */
-               Sleep (5 * 1000) ;
-#endif
-       exit (0) ;
-} /* usage_exit */
-
-/*==============================================================================
-**     Dumping of sndfile info.
-*/
-
-static double  data [BUFFER_LEN] ;
-
-static double
-calc_decibels (SF_INFO * sfinfo, double max)
-{      double decibels ;
-
-       switch (sfinfo->format & SF_FORMAT_SUBMASK)
-       {       case SF_FORMAT_PCM_U8 :
-               case SF_FORMAT_PCM_S8 :
-                       decibels = max / 0x80 ;
-                       break ;
-
-               case SF_FORMAT_PCM_16 :
-                       decibels = max / 0x8000 ;
-                       break ;
-
-               case SF_FORMAT_PCM_24 :
-                       decibels = max / 0x800000 ;
-                       break ;
-
-               case SF_FORMAT_PCM_32 :
-                       decibels = max / 0x80000000 ;
-                       break ;
-
-               case SF_FORMAT_FLOAT :
-               case SF_FORMAT_DOUBLE :
-                       decibels = max / 1.0 ;
-                       break ;
-
-               default :
-                       decibels = max / 0x8000 ;
-                       break ;
-               } ;
-
-       return 20.0 * log10 (decibels) ;
-} /* calc_decibels */
-
-static const char *
-format_duration_str (double seconds)
-{      static char str [128] ;
-       int hrs, min ;
-       double sec ;
-
-       memset (str, 0, sizeof (str)) ;
-
-       hrs = (int) (seconds / 3600.0) ;
-       min = (int) ((seconds - (hrs * 3600.0)) / 60.0) ;
-       sec = seconds - (hrs * 3600.0) - (min * 60.0) ;
-
-       snprintf (str, sizeof (str) - 1, "%02d:%02d:%06.3f", hrs, min, sec) ;
-
-       return str ;
-} /* format_duration_str */
-
-static const char *
-generate_duration_str (SF_INFO *sfinfo)
-{
-       double seconds ;
-
-       if (sfinfo->samplerate < 1)
-               return NULL ;
-
-       if (sfinfo->frames / sfinfo->samplerate > 0x7FFFFFFF)
-               return "unknown" ;
-
-       seconds = (1.0 * sfinfo->frames) / sfinfo->samplerate ;
-
-       /* Accumulate the total of all known file durations */
-       total_seconds += seconds ;
-
-       return format_duration_str (seconds) ;
-} /* generate_duration_str */
-
-static void
-info_dump (const char *filename)
-{      static  char    strbuffer [BUFFER_LEN] ;
-       SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       double          signal_max, decibels ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-       {       printf ("Error : Not able to open input file %s.\n", filename) ;
-               fflush (stdout) ;
-               memset (data, 0, sizeof (data)) ;
-               sf_command (file, SFC_GET_LOG_INFO, strbuffer, BUFFER_LEN) ;
-               puts (strbuffer) ;
-               puts (sf_strerror (NULL)) ;
-               return ;
-               } ;
-
-       printf ("========================================\n") ;
-       sf_command (file, SFC_GET_LOG_INFO, strbuffer, BUFFER_LEN) ;
-       puts (strbuffer) ;
-       printf ("----------------------------------------\n") ;
-
-       printf ("Sample Rate : %d\n", sfinfo.samplerate) ;
-
-       if (sfinfo.frames == SF_COUNT_MAX)
-               printf ("Frames      : unknown\n") ;
-       else
-               printf ("Frames      : %" PRId64 "\n", sfinfo.frames) ;
-
-       printf ("Channels    : %d\n", sfinfo.channels) ;
-       printf ("Format      : 0x%08X\n", sfinfo.format) ;
-       printf ("Sections    : %d\n", sfinfo.sections) ;
-       printf ("Seekable    : %s\n", (sfinfo.seekable ? "TRUE" : "FALSE")) ;
-       printf ("Duration    : %s\n", generate_duration_str (&sfinfo)) ;
-
-       if (sfinfo.frames < 100 * 1024 * 1024)
-       {       /* Do not use sf_signal_max because it doesn't work for non-seekable files . */
-               sf_command (file, SFC_CALC_SIGNAL_MAX, &signal_max, sizeof (signal_max)) ;
-               decibels = calc_decibels (&sfinfo, signal_max) ;
-               printf ("Signal Max  : %g (%4.2f dB)\n", signal_max, decibels) ;
-               } ;
-       putchar ('\n') ;
-
-       sf_close (file) ;
-
-} /* info_dump */
-
-/*==============================================================================
-**     Dumping of SF_INSTRUMENT data.
-*/
-
-static const char *
-str_of_type (int mode)
-{      switch (mode)
-       {       case SF_LOOP_NONE : return "none" ;
-               case SF_LOOP_FORWARD : return "fwd " ;
-               case SF_LOOP_BACKWARD : return "back" ;
-               case SF_LOOP_ALTERNATING : return "alt " ;
-               default : break ;
-               } ;
-
-       return "????" ;
-} /* str_of_mode */
-
-static int
-instrument_dump (const char *filename)
-{      SNDFILE *file ;
-       SF_INFO sfinfo ;
-       SF_INSTRUMENT inst ;
-       int got_inst, k ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-       {       printf ("Error : Not able to open input file %s.\n", filename) ;
-               fflush (stdout) ;
-               memset (data, 0, sizeof (data)) ;
-               puts (sf_strerror (NULL)) ;
-               return 1 ;
-               } ;
-
-       got_inst = sf_command (file, SFC_GET_INSTRUMENT, &inst, sizeof (inst)) ;
-       sf_close (file) ;
-
-       if (got_inst == SF_FALSE)
-       {       printf ("Error : File '%s' does not contain instrument data.\n\n", filename) ;
-               return 1 ;
-               } ;
-
-       printf ("Instrument : %s\n\n", filename) ;
-       printf ("  Gain        : %d\n", inst.gain) ;
-       printf ("  Base note   : %d\n", inst.basenote) ;
-       printf ("  Velocity    : %d - %d\n", (int) inst.velocity_lo, (int) inst.velocity_hi) ;
-       printf ("  Key         : %d - %d\n", (int) inst.key_lo, (int) inst.key_hi) ;
-       printf ("  Loop points : %d\n", inst.loop_count) ;
-
-       for (k = 0 ; k < inst.loop_count ; k++)
-               printf ("  %-2d    Mode : %s    Start : %6d   End : %6d   Count : %6d\n", k, str_of_type (inst.loops [k].mode), inst.loops [k].start, inst.loops [k].end, inst.loops [k].count) ;
-
-       putchar ('\n') ;
-       return 0 ;
-} /* instrument_dump */
-
-static int
-broadcast_dump (const char *filename)
-{      SNDFILE *file ;
-       SF_INFO sfinfo ;
-       SF_BROADCAST_INFO_2K bext ;
-       double time_ref_sec ;
-       int got_bext ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-       {       printf ("Error : Not able to open input file %s.\n", filename) ;
-               fflush (stdout) ;
-               memset (data, 0, sizeof (data)) ;
-               puts (sf_strerror (NULL)) ;
-               return 1 ;
-               } ;
-
-       memset (&bext, 0, sizeof (SF_BROADCAST_INFO_2K)) ;
-
-       got_bext = sf_command (file, SFC_GET_BROADCAST_INFO, &bext, sizeof (bext)) ;
-       sf_close (file) ;
-
-       if (got_bext == SF_FALSE)
-       {       printf ("Error : File '%s' does not contain broadcast information.\n\n", filename) ;
-               return 1 ;
-               } ;
-
-       /*
-       **      From : http://www.ebu.ch/en/technical/publications/userguides/bwf_user_guide.php
-       **
-       **      Time Reference:
-       **              This field is a count from midnight in samples to the first sample
-       **              of the audio sequence.
-       */
-
-       time_ref_sec = ((pow (2.0, 32) * bext.time_reference_high) + (1.0 * bext.time_reference_low)) / sfinfo.samplerate ;
-
-       printf ("Description      : %.*s\n", (int) sizeof (bext.description), bext.description) ;
-       printf ("Originator       : %.*s\n", (int) sizeof (bext.originator), bext.originator) ;
-       printf ("Origination ref  : %.*s\n", (int) sizeof (bext.originator_reference), bext.originator_reference) ;
-       printf ("Origination date : %.*s\n", (int) sizeof (bext.origination_date), bext.origination_date) ;
-       printf ("Origination time : %.*s\n", (int) sizeof (bext.origination_time), bext.origination_time) ;
-
-       if (bext.time_reference_high == 0 && bext.time_reference_low == 0)
-               printf ("Time ref         : 0\n") ;
-       else
-               printf ("Time ref         : 0x%x%08x (%.6f seconds)\n", bext.time_reference_high, bext.time_reference_low, time_ref_sec) ;
-
-       printf ("BWF version      : %d\n", bext.version) ;
-       printf ("UMID             : %.*s\n", (int) sizeof (bext.umid), bext.umid) ;
-       printf ("Coding history   : %.*s\n", bext.coding_history_size, bext.coding_history) ;
-
-       return 0 ;
-} /* broadcast_dump */
-
-static int
-chanmap_dump (const char *filename)
-{      SNDFILE *file ;
-       SF_INFO sfinfo ;
-       int * channel_map ;
-       int got_chanmap, k ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-       {       printf ("Error : Not able to open input file %s.\n", filename) ;
-               fflush (stdout) ;
-               memset (data, 0, sizeof (data)) ;
-               puts (sf_strerror (NULL)) ;
-               return 1 ;
-               } ;
-
-       if ((channel_map = calloc (sfinfo.channels, sizeof (int))) == NULL)
-       {       printf ("Error : malloc failed.\n\n") ;
-               return 1 ;
-               } ;
-
-       got_chanmap = sf_command (file, SFC_GET_CHANNEL_MAP_INFO, channel_map, sfinfo.channels * sizeof (int)) ;
-       sf_close (file) ;
-
-       if (got_chanmap == SF_FALSE)
-       {       printf ("Error : File '%s' does not contain channel map information.\n\n", filename) ;
-               free (channel_map) ;
-               return 1 ;
-               } ;
-
-       printf ("File : %s\n\n", filename) ;
-
-       puts ("    Chan    Position") ;
-       for (k = 0 ; k < sfinfo.channels ; k ++)
-       {       const char * name ;
-
-#define CASE_NAME(x)   case x : name = #x ; break ;
-               switch (channel_map [k])
-               {       CASE_NAME (SF_CHANNEL_MAP_INVALID) ;
-                       CASE_NAME (SF_CHANNEL_MAP_MONO) ;
-                       CASE_NAME (SF_CHANNEL_MAP_LEFT) ;
-                       CASE_NAME (SF_CHANNEL_MAP_RIGHT) ;
-                       CASE_NAME (SF_CHANNEL_MAP_CENTER) ;
-                       CASE_NAME (SF_CHANNEL_MAP_FRONT_LEFT) ;
-                       CASE_NAME (SF_CHANNEL_MAP_FRONT_RIGHT) ;
-                       CASE_NAME (SF_CHANNEL_MAP_FRONT_CENTER) ;
-                       CASE_NAME (SF_CHANNEL_MAP_REAR_CENTER) ;
-                       CASE_NAME (SF_CHANNEL_MAP_REAR_LEFT) ;
-                       CASE_NAME (SF_CHANNEL_MAP_REAR_RIGHT) ;
-                       CASE_NAME (SF_CHANNEL_MAP_LFE) ;
-                       CASE_NAME (SF_CHANNEL_MAP_FRONT_LEFT_OF_CENTER) ;
-                       CASE_NAME (SF_CHANNEL_MAP_FRONT_RIGHT_OF_CENTER) ;
-                       CASE_NAME (SF_CHANNEL_MAP_SIDE_LEFT) ;
-                       CASE_NAME (SF_CHANNEL_MAP_SIDE_RIGHT) ;
-                       CASE_NAME (SF_CHANNEL_MAP_TOP_CENTER) ;
-                       CASE_NAME (SF_CHANNEL_MAP_TOP_FRONT_LEFT) ;
-                       CASE_NAME (SF_CHANNEL_MAP_TOP_FRONT_RIGHT) ;
-                       CASE_NAME (SF_CHANNEL_MAP_TOP_FRONT_CENTER) ;
-                       CASE_NAME (SF_CHANNEL_MAP_TOP_REAR_LEFT) ;
-                       CASE_NAME (SF_CHANNEL_MAP_TOP_REAR_RIGHT) ;
-                       CASE_NAME (SF_CHANNEL_MAP_TOP_REAR_CENTER) ;
-                       CASE_NAME (SF_CHANNEL_MAP_MAX) ;
-                       default : name = "default" ;
-                               break ;
-                       } ;
-
-               printf ("    %3d     %s\n", k, name) ;
-               } ;
-
-       putchar ('\n') ;
-       free (channel_map) ;
-
-       return 0 ;
-} /* chanmap_dump */
-
-static int
-cart_dump (const char *filename)
-{      SNDFILE *file ;
-       SF_INFO sfinfo ;
-       SF_CART_INFO_VAR (1024) cart ;
-       int got_cart, k ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       memset (&cart, 0, sizeof (cart)) ;
-
-       if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-       {       printf ("Error : Not able to open input file %s.\n", filename) ;
-               fflush (stdout) ;
-               memset (data, 0, sizeof (data)) ;
-               puts (sf_strerror (NULL)) ;
-               return 1 ;
-               } ;
-
-       got_cart = sf_command (file, SFC_GET_CART_INFO, &cart, sizeof (cart)) ;
-       sf_close (file) ;
-
-       if (got_cart == SF_FALSE)
-       {       printf ("Error : File '%s' does not contain cart information.\n\n", filename) ;
-               return 1 ;
-               } ;
-
-       printf ("Version        : %.*s\n", (int) sizeof (cart.version), cart.version) ;
-       printf ("Title          : %.*s\n", (int) sizeof (cart.title), cart.title) ;
-       printf ("Artist         : %.*s\n", (int) sizeof (cart.artist), cart.artist) ;
-       printf ("Cut id         : %.*s\n", (int) sizeof (cart.cut_id), cart.cut_id) ;
-       printf ("Category       : %.*s\n", (int) sizeof (cart.category), cart.category) ;
-       printf ("Classification : %.*s\n", (int) sizeof (cart.classification), cart.classification) ;
-       printf ("Out cue        : %.*s\n", (int) sizeof (cart.out_cue), cart.out_cue) ;
-       printf ("Start date     : %.*s\n", (int) sizeof (cart.start_date), cart.start_date) ;
-       printf ("Start time     : %.*s\n", (int) sizeof (cart.start_time), cart.start_time) ;
-       printf ("End date       : %.*s\n", (int) sizeof (cart.end_date), cart.end_date) ;
-       printf ("End time       : %.*s\n", (int) sizeof (cart.end_time), cart.end_time) ;
-       printf ("App id         : %.*s\n", (int) sizeof (cart.producer_app_id), cart.producer_app_id) ;
-       printf ("App version    : %.*s\n", (int) sizeof (cart.producer_app_version), cart.producer_app_version) ;
-       printf ("User defined   : %.*s\n", (int) sizeof (cart.user_def), cart.user_def) ;
-       printf ("Level ref.     : %d\n", cart.level_reference) ;
-       printf ("Post timers    :\n") ;
-
-       for (k = 0 ; k < ARRAY_LEN (cart.post_timers) ; k++)
-               if (cart.post_timers [k].usage [0])
-                       printf ("  %d   %.*s    %d\n", k, (int) sizeof (cart.post_timers [k].usage), cart.post_timers [k].usage, cart.post_timers [k].value) ;
-
-       printf ("Reserved       : %.*s\n", (int) sizeof (cart.reserved), cart.reserved) ;
-       printf ("Url            : %.*s\n", (int) sizeof (cart.url), cart.url) ;
-       printf ("Tag text       : %.*s\n", cart.tag_text_size, cart.tag_text) ;
-
-       return 0 ;
-} /* cart_dump */
-
-static void
-total_dump (void)
-{      printf ("========================================\n") ;
-       printf ("Total Duration : %s\n", format_duration_str (total_seconds)) ;
-} /* total_dump */
diff --git a/libs/libsndfile/programs/sndfile-interleave.c b/libs/libsndfile/programs/sndfile-interleave.c
deleted file mode 100644 (file)
index 24d6b9d..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
-** Copyright (C) 2009-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sndfile.h>
-
-#include "common.h"
-
-#define        BUFFER_LEN      4096
-#define        MAX_INPUTS      16
-
-
-typedef struct
-{      SNDFILE * infile [MAX_INPUTS] ;
-       SNDFILE * outfile ;
-
-       union
-       {       double  d [BUFFER_LEN] ;
-               int             i [BUFFER_LEN] ;
-       } din ;
-
-       union
-
-       {       double  d [MAX_INPUTS * BUFFER_LEN] ;
-               int             i [MAX_INPUTS * BUFFER_LEN] ;
-       } dout ;
-
-       int channels ;
-} STATE ;
-
-
-static void usage_exit (void) ;
-static void interleave_int (STATE * state) ;
-static void interleave_double (STATE * state) ;
-
-
-int
-main (int argc, char **argv)
-{      STATE state ;
-       SF_INFO sfinfo ;
-       int k, double_merge = 0 ;
-
-       if (argc < 5)
-       {       if (argc > 1)
-                       puts ("\nError : need at least 2 input files.") ;
-               usage_exit () ;
-               } ;
-
-       if (strcmp (argv [argc - 2], "-o") != 0)
-       {       puts ("\nError : second last command line parameter should be '-o'.\n") ;
-               usage_exit () ;
-               } ;
-
-       if (argc - 3 > MAX_INPUTS)
-       {       printf ("\nError : Cannot handle more than %d input channels.\n\n", MAX_INPUTS) ;
-               exit (1) ;
-               } ;
-
-       memset (&state, 0, sizeof (state)) ;
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       for (k = 1 ; k < argc - 2 ; k++)
-       {
-               if ((state.infile [k - 1] = sf_open (argv [k], SFM_READ, &sfinfo)) == NULL)
-               {       printf ("\nError : Not able to open input file '%s'\n%s\n", argv [k], sf_strerror (NULL)) ;
-                       exit (1) ;
-                       } ;
-
-               if (sfinfo.channels != 1)
-               {       printf ("\bError : Input file '%s' should be mono (has %d channels).\n", argv [k], sfinfo.channels) ;
-                       exit (1) ;
-                       } ;
-
-               switch (sfinfo.format & SF_FORMAT_SUBMASK)
-               {       case SF_FORMAT_FLOAT :
-                       case SF_FORMAT_DOUBLE :
-                       case SF_FORMAT_VORBIS :
-                               double_merge = 1 ;
-                               break ;
-
-                       default :
-                               break ;
-                       } ;
-
-               state.channels ++ ;
-               } ;
-
-       sfinfo.channels = state.channels ;
-       sfinfo.format = sfe_file_type_of_ext (argv [argc - 1], sfinfo.format) ;
-
-       if ((state.outfile = sf_open (argv [argc - 1], SFM_WRITE, &sfinfo)) == NULL)
-       {       printf ("Not able to open output file '%s'\n%s\n", argv [argc - 1], sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       if (double_merge)
-               interleave_double (&state) ;
-       else
-               interleave_int (&state) ;
-
-       for (k = 0 ; k < MAX_INPUTS ; k++)
-               if (state.infile [k] != NULL)
-                       sf_close (state.infile [k]) ;
-       sf_close (state.outfile) ;
-
-       return 0 ;
-} /* main */
-
-/*------------------------------------------------------------------------------
-*/
-
-
-static void
-usage_exit (void)
-{      puts ("\nUsage : sndfile-interleave <input 1> <input 2> ... -o <output file>\n") ;
-       puts ("Merge two or more mono files into a single multi-channel file.\n") ;
-       printf ("Using %s.\n\n", sf_version_string ()) ;
-       exit (0) ;
-} /* usage_exit */
-
-
-static void
-interleave_int (STATE * state)
-{      int max_read_len, read_len ;
-       int ch, k ;
-
-       do
-       {       max_read_len = 0 ;
-
-               for (ch = 0 ; ch < state->channels ; ch ++)
-               {       read_len = sf_read_int (state->infile [ch], state->din.i, BUFFER_LEN) ;
-                       if (read_len < BUFFER_LEN)
-                               memset (state->din.i + read_len, 0, sizeof (state->din.i [0]) * (BUFFER_LEN - read_len)) ;
-
-                       for (k = 0 ; k < read_len ; k++)
-                               state->dout.i [k * state->channels + ch] = state->din.i [k] ;
-
-                       max_read_len = MAX (max_read_len, read_len) ;
-                       } ;
-
-               sf_writef_int (state->outfile, state->dout.i, max_read_len) ;
-               }
-       while (max_read_len > 0) ;
-
-} /* interleave_int */
-
-
-static void
-interleave_double (STATE * state)
-{      int max_read_len, read_len ;
-       int ch, k ;
-
-       do
-       {       max_read_len = 0 ;
-
-               for (ch = 0 ; ch < state->channels ; ch ++)
-               {       read_len = sf_read_double (state->infile [ch], state->din.d, BUFFER_LEN) ;
-                       if (read_len < BUFFER_LEN)
-                               memset (state->din.d + read_len, 0, sizeof (state->din.d [0]) * (BUFFER_LEN - read_len)) ;
-
-                       for (k = 0 ; k < read_len ; k++)
-                               state->dout.d [k * state->channels + ch] = state->din.d [k] ;
-
-                       max_read_len = MAX (max_read_len, read_len) ;
-                       } ;
-
-               sf_writef_double (state->outfile, state->dout.d, max_read_len) ;
-               }
-       while (max_read_len > 0) ;
-
-} /* interleave_double */
diff --git a/libs/libsndfile/programs/sndfile-jackplay.c b/libs/libsndfile/programs/sndfile-jackplay.c
deleted file mode 100644 (file)
index 87b722d..0000000
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
-** Copyright (c) 2007-2009 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2007 Jonatan Liljedahl <lijon@kymatica.com>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation ; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_JACK
-
-#include <math.h>
-#include <pthread.h>
-
-#include <jack/jack.h>
-#include <jack/ringbuffer.h>
-
-#include <sndfile.h>
-
-#define RB_SIZE (1 << 16)
-
-typedef struct _thread_info
-{      pthread_t thread_id ;
-       SNDFILE *sndfile ;
-       jack_nframes_t pos ;
-       jack_client_t *client ;
-       unsigned int channels ;
-       volatile int can_process ;
-       volatile int read_done ;
-       volatile int play_done ;
-} thread_info_t ;
-
-pthread_mutex_t disk_thread_lock = PTHREAD_MUTEX_INITIALIZER ;
-pthread_cond_t data_ready = PTHREAD_COND_INITIALIZER ;
-
-static jack_ringbuffer_t *ringbuf ;
-static jack_port_t **output_port ;
-static jack_default_audio_sample_t ** outs ;
-const size_t sample_size = sizeof (jack_default_audio_sample_t) ;
-
-static int
-process (jack_nframes_t nframes, void * arg)
-{
-       thread_info_t *info = (thread_info_t *) arg ;
-       jack_default_audio_sample_t buf [info->channels] ;
-       unsigned i, n ;
-
-       if (! info->can_process)
-               return 0 ;
-
-       for (n = 0 ; n < info->channels ; n++)
-               outs [n] = jack_port_get_buffer (output_port [n], nframes) ;
-
-       for (i = 0 ; i < nframes ; i++)
-       {       size_t read_cnt ;
-
-               /* Read one frame of audio. */
-               read_cnt = jack_ringbuffer_read (ringbuf, (void*) buf, sample_size*info->channels) ;
-               if (read_cnt == 0 && info->read_done)
-               {       /* File is done, so stop the main loop. */
-                       info->play_done = 1 ;
-                       return 0 ;
-                       } ;
-
-               /* Update play-position counter. */
-               info->pos += read_cnt / (sample_size*info->channels) ;
-
-               /* Output each channel of the frame. */
-               for (n = 0 ; n < info->channels ; n++)
-                       outs [n][i] = buf [n] ;
-               } ;
-
-       /* Wake up the disk thread to read more data. */
-       if (pthread_mutex_trylock (&disk_thread_lock) == 0)
-       {       pthread_cond_signal (&data_ready) ;
-               pthread_mutex_unlock (&disk_thread_lock) ;
-               } ;
-
-       return 0 ;
-} /* process */
-
-static void *
-disk_thread (void *arg)
-{      thread_info_t *info = (thread_info_t *) arg ;
-       sf_count_t buf_avail, read_frames ;
-       jack_ringbuffer_data_t vec [2] ;
-       size_t bytes_per_frame = sample_size*info->channels ;
-
-       pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, NULL) ;
-       pthread_mutex_lock (&disk_thread_lock) ;
-
-       while (1)
-       {       jack_ringbuffer_get_write_vector (ringbuf, vec) ;
-
-               read_frames = 0 ;
-
-               if (vec [0].len)
-               {       /* Fill the first part of the ringbuffer. */
-                       buf_avail = vec [0].len / bytes_per_frame ;
-                       read_frames = sf_readf_float (info->sndfile, (float *) vec [0].buf, buf_avail) ;
-                       if (vec [1].len)
-                       {       /* Fill the second part of the ringbuffer? */
-                               buf_avail = vec [1].len / bytes_per_frame ;
-                               read_frames += sf_readf_float (info->sndfile, (float *) vec [1].buf, buf_avail) ;
-                               } ;
-                       } ;
-
-               if (read_frames == 0)
-                       break ; /* end of file? */
-
-               jack_ringbuffer_write_advance (ringbuf, read_frames * bytes_per_frame) ;
-
-               /* Tell process that we've filled the ringbuffer. */
-               info->can_process = 1 ;
-
-               /* Wait for the process thread to wake us up. */
-               pthread_cond_wait (&data_ready, &disk_thread_lock) ;
-               } ;
-
-       /* Tell that we're done reading the file. */
-       info->read_done = 1 ;
-       pthread_mutex_unlock (&disk_thread_lock) ;
-
-       return 0 ;
-} /* disk_thread */
-
-static void
-jack_shutdown (void *arg)
-{      (void) arg ;
-       exit (1) ;
-} /* jack_shutdown */
-
-static void
-print_time (jack_nframes_t pos, int jack_sr)
-{      float sec = pos / (1.0 * jack_sr) ;
-       int min = sec / 60.0 ;
-       fprintf (stderr, "%02d:%05.2f", min, fmod (sec, 60.0)) ;
-} /* print_time */
-
-int
-main (int narg, char * args [])
-{
-       SNDFILE *sndfile ;
-       SF_INFO sndfileinfo ;
-       jack_client_t *client ;
-       thread_info_t info ;
-       int i, jack_sr ;
-
-       if (narg < 2)
-       {       fprintf (stderr, "no soundfile given\n") ;
-               return 1 ;
-               } ;
-
-       // create jack client
-       if ((client = jack_client_new ("jackplay")) == 0)
-       {
-               fprintf (stderr, "Jack server not running?\n") ;
-               return 1 ;
-               } ;
-
-       jack_sr = jack_get_sample_rate (client) ;
-
-       /* Open the soundfile. */
-       sndfileinfo.format = 0 ;
-       sndfile = sf_open (args [1], SFM_READ, &sndfileinfo) ;
-       if (sndfile == NULL)
-       {       fprintf (stderr, "Could not open soundfile '%s'\n", args [1]) ;
-               return 1 ;
-               } ;
-
-       fprintf (stderr, "Channels    : %d\nSample rate : %d Hz\nDuration    : ", sndfileinfo.channels, sndfileinfo.samplerate) ;
-
-       print_time (sndfileinfo.frames, sndfileinfo.samplerate) ;
-       fprintf (stderr, "\n") ;
-
-       if (sndfileinfo.samplerate != jack_sr)
-               fprintf (stderr, "Warning: samplerate of soundfile (%d Hz) does not match jack server (%d Hz).\n", sndfileinfo.samplerate, jack_sr) ;
-
-       /* Init the thread info struct. */
-       memset (&info, 0, sizeof (info)) ;
-       info.can_process = 0 ;
-       info.read_done = 0 ;
-       info.play_done = 0 ;
-       info.sndfile = sndfile ;
-       info.channels = sndfileinfo.channels ;
-       info.client = client ;
-       info.pos = 0 ;
-
-       /* Set up callbacks. */
-       jack_set_process_callback (client, process, &info) ;
-       jack_on_shutdown (client, jack_shutdown, 0) ;
-
-       /* Allocate output ports. */
-       output_port = calloc (sndfileinfo.channels, sizeof (jack_port_t *)) ;
-       outs = calloc (sndfileinfo.channels, sizeof (jack_default_audio_sample_t *)) ;
-       for (i = 0 ; i < sndfileinfo.channels ; i++)
-       {       char name [16] ;
-
-               snprintf (name, sizeof (name), "out_%d", i + 1) ;
-               output_port [i] = jack_port_register (client, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, 0) ;
-               } ;
-
-       /* Allocate and clear ringbuffer. */
-       ringbuf = jack_ringbuffer_create (sizeof (jack_default_audio_sample_t) * RB_SIZE) ;
-       memset (ringbuf->buf, 0, ringbuf->size) ;
-
-       /* Activate client. */
-       if (jack_activate (client))
-       {       fprintf (stderr, "Cannot activate client.\n") ;
-               return 1 ;
-               } ;
-
-       /* Auto connect all channels. */
-       for (i = 0 ; i < sndfileinfo.channels ; i++)
-       {       char name [64] ;
-
-               snprintf (name, sizeof (name), "alsa_pcm:playback_%d", i + 1) ;
-
-               if (jack_connect (client, jack_port_name (output_port [i]), name))
-                       fprintf (stderr, "Cannot connect output port %d (%s).\n", i, name) ;
-               } ;
-
-       /* Start the disk thread. */
-       pthread_create (&info.thread_id, NULL, disk_thread, &info) ;
-
-       /* Sit in a loop, displaying the current play position. */
-       while (! info.play_done)
-       {       fprintf (stderr, "\r-> ") ;
-               print_time (info.pos, jack_sr) ;
-               fflush (stdout) ;
-               usleep (50000) ;
-               } ;
-
-       /* Clean up. */
-       jack_client_close (client) ;
-       jack_ringbuffer_free (ringbuf) ;
-       sf_close (sndfile) ;
-       free (outs) ;
-       free (output_port) ;
-
-       puts ("") ;
-
-       return 0 ;
-} /* main */
-
-#else
-
-int
-main (void)
-{
-       puts (
-               "Sorry this program was compiled without libjack (which probably\n"
-               "only exists on Linux and Mac OSX) and hence doesn't work."
-               ) ;
-
-       return 0 ;
-} /* main */
-
-#endif
diff --git a/libs/libsndfile/programs/sndfile-metadata-get.c b/libs/libsndfile/programs/sndfile-metadata-get.c
deleted file mode 100644 (file)
index b4aa9b6..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
-** Copyright (C) 2008-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2008-2010 George Blood Audio
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <config.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <time.h>
-
-#include <sndfile.h>
-
-#include "common.h"
-
-#define        BUFFER_LEN              (1 << 16)
-
-static void usage_exit (const char *progname, int exit_code) ;
-static void process_args (SNDFILE * file, const SF_BROADCAST_INFO_2K * binfo, int argc, char * argv []) ;
-
-int
-main (int argc, char *argv [])
-{      SNDFILE *file ;
-       SF_INFO sfinfo ;
-       SF_BROADCAST_INFO_2K binfo ;
-       const char *progname ;
-       const char * filename = NULL ;
-       int     start ;
-
-       /* Store the program name. */
-       progname = program_name (argv [0]) ;
-
-       /* Check if we've been asked for help. */
-       if (argc <= 2 || strcmp (argv [1], "--help") == 0 || strcmp (argv [1], "-h") == 0)
-               usage_exit (progname, 0) ;
-
-       if (argv [argc - 1][0] != '-')
-       {       filename = argv [argc - 1] ;
-               start = 1 ;
-               }
-       else if (argv [1][0] != '-')
-       {       filename = argv [1] ;
-               start = 2 ;
-               }
-       else
-       {       printf ("Error : Either the first or the last command line parameter should be a filename.\n\n") ;
-               exit (1) ;
-               } ;
-
-       /* Get the time in case we need it later. */
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-       {       printf ("Error : Open of file '%s' failed : %s\n\n", filename, sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       memset (&binfo, 0, sizeof (binfo)) ;
-       if (sf_command (file, SFC_GET_BROADCAST_INFO, &binfo, sizeof (binfo)) == 0)
-               memset (&binfo, 0, sizeof (binfo)) ;
-
-       process_args (file, &binfo, argc - 2, argv + start) ;
-
-       sf_close (file) ;
-       return 0 ;
-} /* main */
-
-/*==============================================================================
-**     Print version and usage.
-*/
-
-static void
-usage_exit (const char *progname, int exit_code)
-{      printf ("\nUsage :\n  %s [options] <file>\n\nOptions:\n", progname) ;
-
-       puts (
-               "    --bext-description    Print the 'bext' description.\n"
-               "    --bext-originator     Print the 'bext; originator info.\n"
-               "    --bext-orig-ref       Print the 'bext' origination reference.\n"
-               "    --bext-umid           Print the 'bext' UMID.\n"
-               "    --bext-orig-date      Print the 'bext' origination date.\n"
-               "    --bext-orig-time      Print the 'bext' origination time.\n"
-               "    --bext-coding-hist    Print the 'bext' coding history.\n"
-               ) ;
-
-       puts (
-               "    --str-title           Print the title metadata.\n"
-               "    --str-copyright       Print the copyright metadata.\n"
-               "    --str-artist          Print the artist metadata.\n"
-               "    --str-comment         Print the comment metadata.\n"
-               "    --str-date            Print the creation date metadata.\n"
-               "    --str-album           Print the album metadata.\n"
-               "    --str-license         Print the license metadata.\n"
-               ) ;
-
-       printf ("Using %s.\n\n", sf_version_string ()) ;
-       exit (exit_code) ;
-} /* usage_exit */
-
-static void
-process_args (SNDFILE * file, const SF_BROADCAST_INFO_2K * binfo, int argc, char * argv [])
-{      const char * str ;
-       int k, do_all = 0 ;
-
-#define HANDLE_BEXT_ARG(cmd, name, field) \
-               if (do_all || strcmp (argv [k], cmd) == 0) \
-               {       printf ("%-20s : %.*s\n", name, (int) sizeof (binfo->field), binfo->field) ; \
-                       if (! do_all) \
-                               continue ; \
-                       } ;
-
-#define HANDLE_STR_ARG(cmd, name, id) \
-               if (do_all || strcmp (argv [k], cmd) == 0) \
-               {       str = sf_get_string (file, id) ; \
-                       printf ("%-20s : %s\n", name, str ? str : "") ; \
-                       if (! do_all) continue ; \
-                       } ;
-
-       for (k = 0 ; k < argc ; k++)
-       {       if (do_all || strcmp (argv [k], "--all") == 0)
-                       do_all = 1 ;
-
-               HANDLE_BEXT_ARG ("--bext-description", "Description", description) ;
-               HANDLE_BEXT_ARG ("--bext-originator", "Originator", originator) ;
-               HANDLE_BEXT_ARG ("--bext-orig-ref", "Origination ref", originator_reference) ;
-               HANDLE_BEXT_ARG ("--bext-umid", "UMID", umid) ;
-               HANDLE_BEXT_ARG ("--bext-orig-date", "Origination date", origination_date) ;
-               HANDLE_BEXT_ARG ("--bext-orig-time", "Origination time", origination_time) ;
-               HANDLE_BEXT_ARG ("--bext-coding-hist", "Coding history", coding_history) ;
-
-               HANDLE_STR_ARG ("--str-title", "Name", SF_STR_TITLE) ;
-               HANDLE_STR_ARG ("--str-copyright", "Copyright", SF_STR_COPYRIGHT) ;
-               HANDLE_STR_ARG ("--str-artist", "Artist", SF_STR_ARTIST) ;
-               HANDLE_STR_ARG ("--str-comment", "Comment", SF_STR_COMMENT) ;
-               HANDLE_STR_ARG ("--str-date", "Create date", SF_STR_DATE) ;
-               HANDLE_STR_ARG ("--str-album", "Album", SF_STR_ALBUM) ;
-               HANDLE_STR_ARG ("--str-license", "License", SF_STR_LICENSE) ;
-
-               if (! do_all)
-               {       printf ("Error : Don't know what to do with command line arg '%s'.\n\n", argv [k]) ;
-                       exit (1) ;
-                       } ;
-               break ;
-               } ;
-
-       return ;
-} /* process_args */
diff --git a/libs/libsndfile/programs/sndfile-metadata-set.c b/libs/libsndfile/programs/sndfile-metadata-set.c
deleted file mode 100644 (file)
index b1d021a..0000000
+++ /dev/null
@@ -1,284 +0,0 @@
-/*
-** Copyright (C) 2008-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2008-2010 George Blood Audio
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include <config.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <time.h>
-
-#include <sndfile.h>
-
-#include "common.h"
-
-#define        BUFFER_LEN              (1 << 16)
-
-
-static void usage_exit (const char *progname, int exit_code) ;
-static void missing_param (const char * option) ;
-static void read_localtime (struct tm * timedata) ;
-static int has_bext_fields_set (const METADATA_INFO * info) ;
-
-int
-main (int argc, char *argv [])
-{      METADATA_INFO info ;
-       struct tm timedata ;
-       const char *progname ;
-       const char * filenames [2] = { NULL, NULL } ;
-       int     k ;
-
-       /* Store the program name. */
-       progname = program_name (argv [0]) ;
-
-       /* Check if we've been asked for help. */
-       if (argc < 3 || strcmp (argv [1], "--help") == 0 || strcmp (argv [1], "-h") == 0)
-               usage_exit (progname, 0) ;
-
-       /* Clear set all fields of the struct to zero bytes. */
-       memset (&info, 0, sizeof (info)) ;
-
-       /* Get the time in case we need it later. */
-       read_localtime (&timedata) ;
-
-       for (k = 1 ; k < argc ; k++)
-       {       char tmp [20] ;
-
-               if (argv [k][0] != '-')
-               {       if (filenames [0] == NULL)
-                               filenames [0] = argv [k] ;
-                       else if (filenames [1] == NULL)
-                               filenames [1] = argv [k] ;
-                       else
-                       {       printf ("Error : Already have two file names on the command line and then found '%s'.\n\n", argv [k]) ;
-                               usage_exit (progname, 1) ;
-                               } ;
-                       continue ;
-                       } ;
-
-#define HANDLE_BEXT_ARG(cmd, field) \
-               if (strcmp (argv [k], cmd) == 0) \
-               {       k ++ ; \
-                       if (k == argc) missing_param (argv [k - 1]) ; \
-                       info.field = argv [k] ; \
-                       continue ; \
-                       } ;
-
-               HANDLE_BEXT_ARG ("--bext-description", description) ;
-               HANDLE_BEXT_ARG ("--bext-originator", originator) ;
-               HANDLE_BEXT_ARG ("--bext-orig-ref", originator_reference) ;
-               HANDLE_BEXT_ARG ("--bext-umid", umid) ;
-               HANDLE_BEXT_ARG ("--bext-orig-date", origination_date) ;
-               HANDLE_BEXT_ARG ("--bext-orig-time", origination_time) ;
-               HANDLE_BEXT_ARG ("--bext-coding-hist", coding_history) ;
-               HANDLE_BEXT_ARG ("--bext-time-ref", time_ref) ;
-
-#define HANDLE_STR_ARG(cmd, field) \
-       if (strcmp (argv [k], cmd) == 0) \
-       {       k ++ ; \
-               if (k == argc) missing_param (argv [k - 1]) ; \
-               info.field = argv [k] ; \
-               continue ; \
-               } ;
-
-               HANDLE_STR_ARG ("--str-comment", comment) ;
-               HANDLE_STR_ARG ("--str-title", title) ;
-               HANDLE_STR_ARG ("--str-copyright", copyright) ;
-               HANDLE_STR_ARG ("--str-artist", artist) ;
-               HANDLE_STR_ARG ("--str-date", date) ;
-               HANDLE_STR_ARG ("--str-album", album) ;
-               HANDLE_STR_ARG ("--str-license", license) ;
-
-               /* Following options do not take an argument. */
-               if (strcmp (argv [k], "--bext-auto-time-date") == 0)
-               {       snprintf (tmp, sizeof (tmp), "%02d:%02d:%02d", timedata.tm_hour, timedata.tm_min, timedata.tm_sec) ;
-                       info.origination_time = strdup (tmp) ;
-
-                       snprintf (tmp, sizeof (tmp), "%04d-%02d-%02d", timedata.tm_year + 1900, timedata.tm_mon + 1, timedata.tm_mday) ;
-                       info.origination_date = strdup (tmp) ;
-                       continue ;
-                       } ;
-
-               if (strcmp (argv [k], "--bext-auto-time") == 0)
-               {       snprintf (tmp, sizeof (tmp), "%02d:%02d:%02d", timedata.tm_hour, timedata.tm_min, timedata.tm_sec) ;
-                       info.origination_time = strdup (tmp) ;
-                       continue ;
-                       } ;
-
-               if (strcmp (argv [k], "--bext-auto-date") == 0)
-               {       snprintf (tmp, sizeof (tmp), "%04d-%02d-%02d", timedata.tm_year + 1900, timedata.tm_mon + 1, timedata.tm_mday) ;
-                       info.origination_date = strdup (tmp) ;
-                       continue ;
-                       } ;
-
-               if (strcmp (argv [k], "--str-auto-date") == 0)
-               {       snprintf (tmp, sizeof (tmp), "%04d-%02d-%02d", timedata.tm_year + 1900, timedata.tm_mon + 1, timedata.tm_mday) ;
-
-                       info.date = strdup (tmp) ;
-                       continue ;
-                       } ;
-
-               printf ("Error : Don't know what to do with command line arg '%s'.\n\n", argv [k]) ;
-               usage_exit (progname, 1) ;
-               } ;
-
-       /* Find out if any of the 'bext' fields are set. */
-       info.has_bext_fields = has_bext_fields_set (&info) ;
-
-       if (filenames [0] == NULL)
-       {       printf ("Error : No input file specificed.\n\n") ;
-               exit (1) ;
-               } ;
-
-       if (filenames [1] != NULL && strcmp (filenames [0], filenames [1]) == 0)
-       {       printf ("Error : Input and output files are the same.\n\n") ;
-               exit (1) ;
-               } ;
-
-       if (info.coding_history != NULL && filenames [1] == NULL)
-       {       printf ("\n"
-                       "Error : Trying to update coding history of an existing file which unfortunately\n"
-                       "        is not supported. Instead, create a new file using :\n"
-                       "\n"
-                       "        %s --bext-coding-hist \"Coding history\" old_file.wav new_file.wav\n"
-                       "\n",
-                       progname) ;
-               exit (1) ;
-               } ;
-
-       sfe_apply_metadata_changes (filenames, &info) ;
-
-       return 0 ;
-} /* main */
-
-/*==============================================================================
-**     Print version and usage.
-*/
-
-static void
-usage_exit (const char *progname, int exit_code)
-{      printf ("\nUsage :\n\n"
-               "  %s [options] <file>\n"
-               "  %s [options] <input file> <output file>\n"
-               "\n",
-               progname, progname) ;
-
-       puts (
-               "Where an option is made up of a pair of a field to set (one of\n"
-               "the 'bext' or metadata fields below) and a string. Fields are\n"
-               "as follows :\n"
-               ) ;
-
-       puts (
-               "    --bext-description       Set the 'bext' description.\n"
-               "    --bext-originator        Set the 'bext' originator.\n"
-               "    --bext-orig-ref          Set the 'bext' originator reference.\n"
-               "    --bext-umid              Set the 'bext' UMID.\n"
-               "    --bext-orig-date         Set the 'bext' origination date.\n"
-               "    --bext-orig-time         Set the 'bext' origination time.\n"
-               "    --bext-coding-hist       Set the 'bext' coding history.\n"
-               "    --bext-time-raf          Set the 'bext' Time ref.\n"
-               "\n"
-               "    --str-comment            Set the metadata comment.\n"
-               "    --str-title              Set the metadata title.\n"
-               "    --str-copyright          Set the metadata copyright.\n"
-               "    --str-artist             Set the metadata artist.\n"
-               "    --str-date               Set the metadata date.\n"
-               "    --str-album              Set the metadata album.\n"
-               "    --str-license            Set the metadata license.\n"
-               ) ;
-
-       puts (
-               "There are also the following arguments which do not take a\n"
-               "parameter :\n\n"
-               "    --bext-auto-time-date    Set the 'bext' time and date to current time/date.\n"
-               "    --bext-auto-time         Set the 'bext' time to current time.\n"
-               "    --bext-auto-date         Set the 'bext' date to current date.\n"
-               "    --str-auto-date          Set the metadata date to current date.\n"
-               ) ;
-
-       puts (
-               "Most of the above operations can be done in-place on an existing\n"
-               "file. If any operation cannot be performed, the application will\n"
-               "exit with an appropriate error message.\n"
-               ) ;
-
-       printf ("Using %s.\n\n", sf_version_string ()) ;
-       exit (exit_code) ;
-} /* usage_exit */
-
-static void
-missing_param (const char * option)
-{
-       printf ("Error : Option '%s' needs a parameter but doesn't seem to have one.\n\n", option) ;
-       exit (1) ;
-} /* missing_param */
-
-/*==============================================================================
-*/
-
-static int
-has_bext_fields_set (const METADATA_INFO * info)
-{
-       if (info->description || info->originator || info->originator_reference)
-               return 1 ;
-
-       if (info->origination_date || info->origination_time || info->umid || info->coding_history || info->time_ref)
-               return 1 ;
-
-       return 0 ;
-} /* has_bext_fields_set */
-
-static void
-read_localtime (struct tm * timedata)
-{      time_t          current ;
-
-       time (&current) ;
-       memset (timedata, 0, sizeof (struct tm)) ;
-
-#if defined (HAVE_LOCALTIME_R)
-       /* If the re-entrant version is available, use it. */
-       localtime_r (&current, timedata) ;
-#elif defined (HAVE_LOCALTIME)
-       {
-               struct tm       *tmptr ;
-               /* Otherwise use the standard one and copy the data to local storage. */
-               if ((tmptr = localtime (&current)) != NULL)
-                       memcpy (timedata, tmptr, sizeof (struct tm)) ;
-       }
-#endif
-
-       return ;
-} /* read_localtime */
-
diff --git a/libs/libsndfile/programs/sndfile-play-beos.cpp b/libs/libsndfile/programs/sndfile-play-beos.cpp
deleted file mode 100644 (file)
index fb3fde4..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
-** Copyright (C) 2001 Marcus Overhagen <marcus@overhagen.de>
-**  
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-** 
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-** 
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software 
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       <stdio.h>
-
-#include       <Application.h>
-#include       <SoundPlayer.h>
-#include       <string.h>
-
-#include       <sndfile.h>
-
-#define        BUFFER_LEN              1024
-
-/*------------------------------------------------------------------------------
-**     BeOS functions for playing a sound.
-*/
-
-#if defined (__BEOS__)
-
-struct shared_data
-{
-       BSoundPlayer *player;
-       SNDFILE *sndfile;
-       SF_INFO sfinfo; 
-       sem_id finished;
-};
-
-static void 
-buffer_callback(void *theCookie, void *buf, size_t size, const media_raw_audio_format &format) 
-{
-       shared_data *data = (shared_data *)theCookie;
-       short *buffer = (short *)buf;
-       int count = size / sizeof(short);
-       int m, readcount;
-
-       if (!data->player->HasData())
-               return;
-
-       readcount = sf_read_short(data->sndfile, buffer, count);
-       if (readcount == 0) 
-       {       data->player->SetHasData(false);                
-               release_sem(data->finished);
-               }
-       if (readcount < count) 
-       {       for (m = readcount ; m < count ; m++)
-                       buffer [m] = 0 ;
-               }
-       if (data->sfinfo.pcmbitwidth < 16) 
-       {       for (m = 0 ; m < count ; m++)
-                       buffer [m] *= 256 ;
-               }
-}
-
-static void
-beos_play (int argc, char *argv [])
-{
-       shared_data data;
-       status_t status;
-       int     k;
-
-       /* BSoundPlayer requires a BApplication object */
-       BApplication app("application/x-vnd.MarcusOverhagen-sfplay");
-
-       for (k = 1 ; k < argc ; k++)
-       {       printf ("Playing %s\n", argv [k]) ;     
-               if (! (data.sndfile = sf_open_read (argv [k], &data.sfinfo)))
-               {       sf_perror (NULL) ;
-                       continue ;
-                       } ;
-                       
-               if (data.sfinfo.channels < 1 || data.sfinfo.channels > 2)
-               {       printf ("Error : channels = %d.\n", data.sfinfo.channels) ;
-                       sf_close (data.sndfile) ;
-                       continue ;
-                       } ;             
-
-               data.finished = create_sem(0,"finished");                       
-
-               media_raw_audio_format format = 
-               {       data.sfinfo.samplerate,
-                       data.sfinfo.channels,
-                       media_raw_audio_format::B_AUDIO_SHORT,
-                       B_HOST_IS_LENDIAN ? B_MEDIA_LITTLE_ENDIAN : B_MEDIA_BIG_ENDIAN,
-                       BUFFER_LEN * sizeof(short)
-                       };
-
-               BSoundPlayer player(&format,"player",buffer_callback,NULL,&data);
-               data.player = &player;
-               
-               if ((status = player.InitCheck()) != B_OK) 
-               {
-                       printf ("Error : BSoundPlayer init failed, %s.\n", strerror(status)) ;
-                       delete_sem(data.finished);
-                       sf_close (data.sndfile) ;
-                       continue ;
-                       }
-
-               player.SetVolume(1.0);
-               player.Start();
-               player.SetHasData(true);
-               acquire_sem(data.finished);
-               player.Stop();
-               delete_sem(data.finished);
-               
-               sf_close (data.sndfile) ;
-
-               } ;
-
-} /* beos_play */
-
-#endif
-
-/*==============================================================================
-**     Main function.
-*/
-
-int 
-main (int argc, char *argv [])
-{
-       if (argc < 2)
-       {       printf ("Usage : %s <input sound file>\n\n", argv [0]) ;
-               return 1 ;
-               } ;
-       
-       beos_play (argc, argv) ;
-
-       return 0 ;
-} /* main */
-               
diff --git a/libs/libsndfile/programs/sndfile-play.c b/libs/libsndfile/programs/sndfile-play.c
deleted file mode 100644 (file)
index f779f11..0000000
+++ /dev/null
@@ -1,1211 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "common.h"
-
-#if HAVE_ALSA_ASOUNDLIB_H
-       #define ALSA_PCM_NEW_HW_PARAMS_API
-       #define ALSA_PCM_NEW_SW_PARAMS_API
-       #include <alsa/asoundlib.h>
-       #include <sys/time.h>
-#endif
-
-#if defined (__ANDROID__)
-
-#elif defined (__linux__) || defined (__FreeBSD_kernel__) || defined (__FreeBSD__)
-       #include        <fcntl.h>
-       #include        <sys/ioctl.h>
-       #include        <sys/soundcard.h>
-
-#elif (defined (__MACH__) && defined (__APPLE__))
-       #include <AvailabilityMacros.h>
-       #include <Availability.h>
-
-       #if (OSX_DARWIN_VERSION > 11)
-               /* Includes go here. */
-       #elif (OSX_DARWIN_VERSION == 11)
-               #include <AudioToolbox/AudioToolbox.h>
-       #elif (OSX_DARWIN_VERSION > 0 && OSX_DARWIN_VERSION <= 10)
-               #include <Carbon.h>
-               #include <CoreAudio/AudioHardware.h>
-       #endif
-
-#elif defined (HAVE_SNDIO_H)
-       #include <sndio.h>
-
-#elif (defined (sun) && defined (unix))
-       #include <fcntl.h>
-       #include <sys/ioctl.h>
-       #include <sys/audioio.h>
-
-#elif (OS_IS_WIN32 == 1)
-       #include <windows.h>
-       #include <mmsystem.h>
-
-#endif
-
-#define        SIGNED_SIZEOF(x)        ((int) sizeof (x))
-#define        BUFFER_LEN                      (2048)
-
-/*------------------------------------------------------------------------------
-**     Linux/OSS functions for playing a sound.
-*/
-
-#if HAVE_ALSA_ASOUNDLIB_H
-
-static snd_pcm_t * alsa_open (int channels, unsigned srate, int realtime) ;
-static int alsa_write_float (snd_pcm_t *alsa_dev, float *data, int frames, int channels) ;
-
-static void
-alsa_play (int argc, char *argv [])
-{      static float buffer [BUFFER_LEN] ;
-       SNDFILE *sndfile ;
-       SF_INFO sfinfo ;
-       snd_pcm_t * alsa_dev ;
-       int             k, readcount, subformat ;
-
-       for (k = 1 ; k < argc ; k++)
-       {       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-               printf ("Playing %s\n", argv [k]) ;
-               if (! (sndfile = sf_open (argv [k], SFM_READ, &sfinfo)))
-               {       puts (sf_strerror (NULL)) ;
-                       continue ;
-                       } ;
-
-               if (sfinfo.channels < 1 || sfinfo.channels > 2)
-               {       printf ("Error : channels = %d.\n", sfinfo.channels) ;
-                       continue ;
-                       } ;
-
-               if ((alsa_dev = alsa_open (sfinfo.channels, (unsigned) sfinfo.samplerate, SF_FALSE)) == NULL)
-                       continue ;
-
-               subformat = sfinfo.format & SF_FORMAT_SUBMASK ;
-
-               if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-               {       double  scale ;
-                       int     m ;
-
-                       sf_command (sndfile, SFC_CALC_SIGNAL_MAX, &scale, sizeof (scale)) ;
-                       if (scale < 1e-10)
-                               scale = 1.0 ;
-                       else
-                               scale = 32700.0 / scale ;
-
-                       while ((readcount = sf_read_float (sndfile, buffer, BUFFER_LEN)))
-                       {       for (m = 0 ; m < readcount ; m++)
-                                       buffer [m] *= scale ;
-                               alsa_write_float (alsa_dev, buffer, BUFFER_LEN / sfinfo.channels, sfinfo.channels) ;
-                               } ;
-                       }
-               else
-               {       while ((readcount = sf_read_float (sndfile, buffer, BUFFER_LEN)))
-                               alsa_write_float (alsa_dev, buffer, BUFFER_LEN / sfinfo.channels, sfinfo.channels) ;
-                       } ;
-
-               snd_pcm_drain (alsa_dev) ;
-               snd_pcm_close (alsa_dev) ;
-
-               sf_close (sndfile) ;
-               } ;
-
-       return ;
-} /* alsa_play */
-
-static snd_pcm_t *
-alsa_open (int channels, unsigned samplerate, int realtime)
-{      const char * device = "default" ;
-       snd_pcm_t *alsa_dev = NULL ;
-       snd_pcm_hw_params_t *hw_params ;
-       snd_pcm_uframes_t buffer_size ;
-       snd_pcm_uframes_t alsa_period_size, alsa_buffer_frames ;
-       snd_pcm_sw_params_t *sw_params ;
-
-       int err ;
-
-       if (realtime)
-       {       alsa_period_size = 256 ;
-               alsa_buffer_frames = 3 * alsa_period_size ;
-               }
-       else
-       {       alsa_period_size = 1024 ;
-               alsa_buffer_frames = 4 * alsa_period_size ;
-               } ;
-
-       if ((err = snd_pcm_open (&alsa_dev, device, SND_PCM_STREAM_PLAYBACK, 0)) < 0)
-       {       fprintf (stderr, "cannot open audio device \"%s\" (%s)\n", device, snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       snd_pcm_nonblock (alsa_dev, 0) ;
-
-       if ((err = snd_pcm_hw_params_malloc (&hw_params)) < 0)
-       {       fprintf (stderr, "cannot allocate hardware parameter structure (%s)\n", snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       if ((err = snd_pcm_hw_params_any (alsa_dev, hw_params)) < 0)
-       {       fprintf (stderr, "cannot initialize hardware parameter structure (%s)\n", snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       if ((err = snd_pcm_hw_params_set_access (alsa_dev, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED)) < 0)
-       {       fprintf (stderr, "cannot set access type (%s)\n", snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       if ((err = snd_pcm_hw_params_set_format (alsa_dev, hw_params, SND_PCM_FORMAT_FLOAT)) < 0)
-       {       fprintf (stderr, "cannot set sample format (%s)\n", snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       if ((err = snd_pcm_hw_params_set_rate_near (alsa_dev, hw_params, &samplerate, 0)) < 0)
-       {       fprintf (stderr, "cannot set sample rate (%s)\n", snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       if ((err = snd_pcm_hw_params_set_channels (alsa_dev, hw_params, channels)) < 0)
-       {       fprintf (stderr, "cannot set channel count (%s)\n", snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       if ((err = snd_pcm_hw_params_set_buffer_size_near (alsa_dev, hw_params, &alsa_buffer_frames)) < 0)
-       {       fprintf (stderr, "cannot set buffer size (%s)\n", snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       if ((err = snd_pcm_hw_params_set_period_size_near (alsa_dev, hw_params, &alsa_period_size, 0)) < 0)
-       {       fprintf (stderr, "cannot set period size (%s)\n", snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       if ((err = snd_pcm_hw_params (alsa_dev, hw_params)) < 0)
-       {       fprintf (stderr, "cannot set parameters (%s)\n", snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       /* extra check: if we have only one period, this code won't work */
-       snd_pcm_hw_params_get_period_size (hw_params, &alsa_period_size, 0) ;
-       snd_pcm_hw_params_get_buffer_size (hw_params, &buffer_size) ;
-       if (alsa_period_size == buffer_size)
-       {       fprintf (stderr, "Can't use period equal to buffer size (%lu == %lu)", alsa_period_size, buffer_size) ;
-               goto catch_error ;
-               } ;
-
-       snd_pcm_hw_params_free (hw_params) ;
-
-       if ((err = snd_pcm_sw_params_malloc (&sw_params)) != 0)
-       {       fprintf (stderr, "%s: snd_pcm_sw_params_malloc: %s", __func__, snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       if ((err = snd_pcm_sw_params_current (alsa_dev, sw_params)) != 0)
-       {       fprintf (stderr, "%s: snd_pcm_sw_params_current: %s", __func__, snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       /* note: set start threshold to delay start until the ring buffer is full */
-       snd_pcm_sw_params_current (alsa_dev, sw_params) ;
-
-       if ((err = snd_pcm_sw_params_set_start_threshold (alsa_dev, sw_params, buffer_size)) < 0)
-       {       fprintf (stderr, "cannot set start threshold (%s)\n", snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       if ((err = snd_pcm_sw_params (alsa_dev, sw_params)) != 0)
-       {       fprintf (stderr, "%s: snd_pcm_sw_params: %s", __func__, snd_strerror (err)) ;
-               goto catch_error ;
-               } ;
-
-       snd_pcm_sw_params_free (sw_params) ;
-
-       snd_pcm_reset (alsa_dev) ;
-
-catch_error :
-
-       if (err < 0 && alsa_dev != NULL)
-       {       snd_pcm_close (alsa_dev) ;
-               return NULL ;
-               } ;
-
-       return alsa_dev ;
-} /* alsa_open */
-
-static int
-alsa_write_float (snd_pcm_t *alsa_dev, float *data, int frames, int channels)
-{      static  int epipe_count = 0 ;
-
-       int total = 0 ;
-       int retval ;
-
-       if (epipe_count > 0)
-               epipe_count -- ;
-
-       while (total < frames)
-       {       retval = snd_pcm_writei (alsa_dev, data + total * channels, frames - total) ;
-
-               if (retval >= 0)
-               {       total += retval ;
-                       if (total == frames)
-                               return total ;
-
-                       continue ;
-                       } ;
-
-               switch (retval)
-               {       case -EAGAIN :
-                                       puts ("alsa_write_float: EAGAIN") ;
-                                       continue ;
-                                       break ;
-
-                       case -EPIPE :
-                                       if (epipe_count > 0)
-                                       {       printf ("alsa_write_float: EPIPE %d\n", epipe_count) ;
-                                               if (epipe_count > 140)
-                                                       return retval ;
-                                               } ;
-                                       epipe_count += 100 ;
-
-#if 0
-                                       if (0)
-                                       {       snd_pcm_status_t *status ;
-
-                                               snd_pcm_status_alloca (&status) ;
-                                               if ((retval = snd_pcm_status (alsa_dev, status)) < 0)
-                                                       fprintf (stderr, "alsa_out: xrun. can't determine length\n") ;
-                                               else if (snd_pcm_status_get_state (status) == SND_PCM_STATE_XRUN)
-                                               {       struct timeval now, diff, tstamp ;
-
-                                                       gettimeofday (&now, 0) ;
-                                                       snd_pcm_status_get_trigger_tstamp (status, &tstamp) ;
-                                                       timersub (&now, &tstamp, &diff) ;
-
-                                                       fprintf (stderr, "alsa_write_float xrun: of at least %.3f msecs. resetting stream\n",
-                                                                       diff.tv_sec * 1000 + diff.tv_usec / 1000.0) ;
-                                                       }
-                                               else
-                                                       fprintf (stderr, "alsa_write_float: xrun. can't determine length\n") ;
-                                               } ;
-#endif
-
-                                       snd_pcm_prepare (alsa_dev) ;
-                                       break ;
-
-                       case -EBADFD :
-                                       fprintf (stderr, "alsa_write_float: Bad PCM state.n") ;
-                                       return 0 ;
-                                       break ;
-
-                       case -ESTRPIPE :
-                                       fprintf (stderr, "alsa_write_float: Suspend event.n") ;
-                                       return 0 ;
-                                       break ;
-
-                       case -EIO :
-                                       puts ("alsa_write_float: EIO") ;
-                                       return 0 ;
-
-                       default :
-                                       fprintf (stderr, "alsa_write_float: retval = %d\n", retval) ;
-                                       return 0 ;
-                                       break ;
-                       } ; /* switch */
-               } ; /* while */
-
-       return total ;
-} /* alsa_write_float */
-
-#endif /* HAVE_ALSA_ASOUNDLIB_H */
-
-/*------------------------------------------------------------------------------
-**     Linux/OSS functions for playing a sound.
-*/
-
-#if !defined (__ANDROID__) && (defined (__linux__) || defined (__FreeBSD_kernel__) || defined (__FreeBSD__))
-
-static int     opensoundsys_open_device (int channels, int srate) ;
-
-static int
-opensoundsys_play (int argc, char *argv [])
-{      static short buffer [BUFFER_LEN] ;
-       SNDFILE *sndfile ;
-       SF_INFO sfinfo ;
-       int             k, audio_device, readcount, writecount, subformat ;
-
-       for (k = 1 ; k < argc ; k++)
-       {       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-               printf ("Playing %s\n", argv [k]) ;
-               if (! (sndfile = sf_open (argv [k], SFM_READ, &sfinfo)))
-               {       puts (sf_strerror (NULL)) ;
-                       continue ;
-                       } ;
-
-               if (sfinfo.channels < 1 || sfinfo.channels > 2)
-               {       printf ("Error : channels = %d.\n", sfinfo.channels) ;
-                       continue ;
-                       } ;
-
-               audio_device = opensoundsys_open_device (sfinfo.channels, sfinfo.samplerate) ;
-
-               subformat = sfinfo.format & SF_FORMAT_SUBMASK ;
-
-               if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-               {       static float float_buffer [BUFFER_LEN] ;
-                       double  scale ;
-                       int     m ;
-
-                       sf_command (sndfile, SFC_CALC_SIGNAL_MAX, &scale, sizeof (scale)) ;
-                       if (scale < 1e-10)
-                               scale = 1.0 ;
-                       else
-                               scale = 32700.0 / scale ;
-
-                       while ((readcount = sf_read_float (sndfile, float_buffer, BUFFER_LEN)))
-                       {       for (m = 0 ; m < readcount ; m++)
-                                       buffer [m] = scale * float_buffer [m] ;
-                               writecount = write (audio_device, buffer, readcount * sizeof (short)) ;
-                               } ;
-                       }
-               else
-               {       while ((readcount = sf_read_short (sndfile, buffer, BUFFER_LEN)))
-                               writecount = write (audio_device, buffer, readcount * sizeof (short)) ;
-                       } ;
-
-               if (ioctl (audio_device, SNDCTL_DSP_POST, 0) == -1)
-                       perror ("ioctl (SNDCTL_DSP_POST) ") ;
-
-               if (ioctl (audio_device, SNDCTL_DSP_SYNC, 0) == -1)
-                       perror ("ioctl (SNDCTL_DSP_SYNC) ") ;
-
-               close (audio_device) ;
-
-               sf_close (sndfile) ;
-               } ;
-
-       return writecount ;
-} /* opensoundsys_play */
-
-static int
-opensoundsys_open_device (int channels, int srate)
-{      int fd, stereo, fmt ;
-
-       if ((fd = open ("/dev/dsp", O_WRONLY, 0)) == -1 &&
-               (fd = open ("/dev/sound/dsp", O_WRONLY, 0)) == -1)
-       {       perror ("opensoundsys_open_device : open ") ;
-               exit (1) ;
-               } ;
-
-       stereo = 0 ;
-       if (ioctl (fd, SNDCTL_DSP_STEREO, &stereo) == -1)
-       {       /* Fatal error */
-               perror ("opensoundsys_open_device : stereo ") ;
-               exit (1) ;
-               } ;
-
-       if (ioctl (fd, SNDCTL_DSP_RESET, 0))
-       {       perror ("opensoundsys_open_device : reset ") ;
-               exit (1) ;
-               } ;
-
-       fmt = CPU_IS_BIG_ENDIAN ? AFMT_S16_BE : AFMT_S16_LE ;
-       if (ioctl (fd, SNDCTL_DSP_SETFMT, &fmt) != 0)
-       {       perror ("opensoundsys_open_device : set format ") ;
-               exit (1) ;
-               } ;
-
-       if (ioctl (fd, SNDCTL_DSP_CHANNELS, &channels) != 0)
-       {       perror ("opensoundsys_open_device : channels ") ;
-               exit (1) ;
-               } ;
-
-       if (ioctl (fd, SNDCTL_DSP_SPEED, &srate) != 0)
-       {       perror ("opensoundsys_open_device : sample rate ") ;
-               exit (1) ;
-               } ;
-
-       if (ioctl (fd, SNDCTL_DSP_SYNC, 0) != 0)
-       {       perror ("opensoundsys_open_device : sync ") ;
-               exit (1) ;
-               } ;
-
-       return  fd ;
-} /* opensoundsys_open_device */
-
-#endif /* __linux__ */
-
-/*------------------------------------------------------------------------------
-**     Mac OS X functions for playing a sound.
-*/
-
-#if (OSX_DARWIN_VERSION > 11)
-/* MacOSX 10.8 use a new Audio API. Someone needs to write some code for it. */
-#endif /* OSX_DARWIN_VERSION > 11 */
-
-#if (OSX_DARWIN_VERSION == 11)
-/* MacOSX 10.7 use AudioQueue API */
-
-#define kBytesPerAudioBuffer   (1024 * 8)
-#define kNumberOfAudioBuffers  4
-
-typedef struct
-{      AudioStreamBasicDescription             format ;
-
-       AudioQueueRef           queue ;
-       AudioQueueBufferRef     queueBuffer [kNumberOfAudioBuffers] ;
-
-       UInt32                  buf_size ;
-
-       SNDFILE                 *sndfile ;
-       SF_INFO                 sfinfo ;
-
-       int                             done_playing ;
-} MacOSXAudioData ;
-
-
-static void
-macosx_fill_buffer (MacOSXAudioData *audio_data, AudioQueueBufferRef audio_buffer)
-{      int             size, sample_count, read_count ;
-       short   *buffer ;
-
-       size = audio_buffer->mAudioDataBytesCapacity ;
-       sample_count = size / sizeof (short) ;
-
-       buffer = (short*) audio_buffer->mAudioData ;
-
-       read_count = sf_read_short (audio_data->sndfile, buffer, sample_count) ;
-
-       if (read_count > 0)
-       {       audio_buffer->mAudioDataByteSize = read_count * sizeof (short) ;
-               AudioQueueEnqueueBuffer (audio_data->queue, audio_buffer, 0, NULL) ;
-               }
-       else
-               AudioQueueStop (audio_data->queue, false) ;
-
-} /* macosx_fill_buffer */
-
-
-static void
-macosx_audio_out_callback (void *user_data, AudioQueueRef audio_queue, AudioQueueBufferRef audio_buffer)
-{      MacOSXAudioData *audio_data = (MacOSXAudioData *) user_data ;
-
-       if (audio_data->queue == audio_queue)
-               macosx_fill_buffer (audio_data, audio_buffer) ;
-
-} /* macosx_audio_out_callback */
-
-
-static void
-macosx_audio_out_property_callback (void *user_data, AudioQueueRef audio_queue, AudioQueuePropertyID prop)
-{      MacOSXAudioData *audio_data = (MacOSXAudioData *) user_data ;
-
-       if (prop == kAudioQueueProperty_IsRunning)
-       {       UInt32 is_running = 0 ;
-               UInt32 is_running_size = sizeof (is_running) ;
-
-               AudioQueueGetProperty (audio_queue, kAudioQueueProperty_IsRunning, &is_running, &is_running_size) ;
-
-               if (!is_running)
-               {       audio_data->done_playing = SF_TRUE ;
-                       CFRunLoopStop (CFRunLoopGetCurrent ()) ;
-                       } ;
-               } ;
-} /* macosx_audio_out_property_callback */
-
-
-
-static void
-macosx_play (int argc, char *argv [])
-{      MacOSXAudioData         audio_data ;
-       OSStatus        err ;
-       int             i ;
-       int             k ;
-
-       memset (&audio_data, 0x55, sizeof (audio_data)) ;
-
-       for (k = 1 ; k < argc ; k++)
-       {       memset (&(audio_data.sfinfo), 0, sizeof (audio_data.sfinfo)) ;
-
-               printf ("Playing %s\n", argv [k]) ;
-               if (! (audio_data.sndfile = sf_open (argv [k], SFM_READ, &(audio_data.sfinfo))))
-               {       puts (sf_strerror (NULL)) ;
-                       continue ;
-                       } ;
-
-               if (audio_data.sfinfo.channels < 1 || audio_data.sfinfo.channels > 2)
-               {       printf ("Error : channels = %d.\n", audio_data.sfinfo.channels) ;
-                       continue ;
-                       } ;
-
-               /*  fill ASBD */
-               audio_data.format.mSampleRate = audio_data.sfinfo.samplerate ;
-               audio_data.format.mChannelsPerFrame     = audio_data.sfinfo.channels ;
-               audio_data.format.mFormatID                     = kAudioFormatLinearPCM ;
-               audio_data.format.mFormatFlags          = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked ;
-               audio_data.format.mBytesPerPacket       = audio_data.format.mChannelsPerFrame * 2 ;
-               audio_data.format.mFramesPerPacket      = 1 ;
-               audio_data.format.mBytesPerFrame        = audio_data.format.mBytesPerPacket ;
-               audio_data.format.mBitsPerChannel       = 16 ;
-               audio_data.format.mReserved                     = 0 ;
-
-               /* create the queue */
-               if ((err = AudioQueueNewOutput (&(audio_data.format), macosx_audio_out_callback, &audio_data,
-                                       CFRunLoopGetCurrent (), kCFRunLoopCommonModes, 0, &(audio_data.queue))) != noErr)
-               {       printf ("AudioQueueNewOutput failed\n") ;
-                       return ;
-                       } ;
-
-               /*  add property listener */
-               if ((err = AudioQueueAddPropertyListener (audio_data.queue, kAudioQueueProperty_IsRunning, macosx_audio_out_property_callback, &audio_data)) != noErr)
-               {       printf ("AudioQueueAddPropertyListener failed\n") ;
-                       return ;
-                       } ;
-
-               /*  create the buffers */
-               for (i = 0 ; i < kNumberOfAudioBuffers ; i++)
-               {       if ((err = AudioQueueAllocateBuffer (audio_data.queue, kBytesPerAudioBuffer, &audio_data.queueBuffer [i])) != noErr)
-                       {       printf ("AudioQueueAllocateBuffer failed\n") ;
-                               return ;
-                               } ;
-
-                       macosx_fill_buffer (&audio_data, audio_data.queueBuffer [i]) ;
-                       } ;
-
-               audio_data.done_playing = SF_FALSE ;
-
-               /* start queue */
-               if ((err = AudioQueueStart (audio_data.queue, NULL)) != noErr)
-               {       printf ("AudioQueueStart failed\n") ;
-                       return ;
-               } ;
-
-               while (audio_data.done_playing == SF_FALSE)
-                       CFRunLoopRun () ;
-
-               /*  free the buffers */
-               for (i = 0 ; i < kNumberOfAudioBuffers ; i++)
-               {       if ((err = AudioQueueFreeBuffer (audio_data.queue, audio_data.queueBuffer [i])) != noErr)
-                       {       printf ("AudioQueueFreeBuffer failed\n") ;
-                               return ;
-                               } ;
-                       } ;
-
-               /*  free the queue */
-               if ((err = AudioQueueDispose (audio_data.queue, true)) != noErr)
-               {       printf ("AudioQueueDispose failed\n") ;
-                       return ;
-                       } ;
-
-               sf_close (audio_data.sndfile) ;
-               } ;
-
-       return ;
-} /* macosx_play, AudioQueue implementation */
-
-#endif /* OSX_DARWIN_VERSION == 11 */
-
-#if (OSX_DARWIN_VERSION > 0 && OSX_DARWIN_VERSION <= 10)
-/* MacOSX 10.6 or earlier, use Carbon and AudioHardware API */
-
-typedef struct
-{      AudioStreamBasicDescription             format ;
-
-       UInt32                  buf_size ;
-       AudioDeviceID   device ;
-
-       SNDFILE                 *sndfile ;
-       SF_INFO                 sfinfo ;
-
-       int                             fake_stereo ;
-       int                             done_playing ;
-} MacOSXAudioData ;
-
-#include <math.h>
-
-static OSStatus
-macosx_audio_out_callback (AudioDeviceID device, const AudioTimeStamp* current_time,
-       const AudioBufferList* data_in, const AudioTimeStamp* time_in,
-       AudioBufferList*        data_out, const AudioTimeStamp* time_out,
-       void* client_data)
-{      MacOSXAudioData *audio_data ;
-       int             size, sample_count, read_count, k ;
-       float   *buffer ;
-
-       /* Prevent compiler warnings. */
-       device = device ;
-       current_time = current_time ;
-       data_in = data_in ;
-       time_in = time_in ;
-       time_out = time_out ;
-
-       audio_data = (MacOSXAudioData*) client_data ;
-
-       size = data_out->mBuffers [0].mDataByteSize ;
-       sample_count = size / sizeof (float) ;
-
-       buffer = (float*) data_out->mBuffers [0].mData ;
-
-       if (audio_data->fake_stereo != 0)
-       {       read_count = sf_read_float (audio_data->sndfile, buffer, sample_count / 2) ;
-
-               for (k = read_count - 1 ; k >= 0 ; k--)
-               {       buffer [2 * k   ] = buffer [k] ;
-                       buffer [2 * k + 1] = buffer [k] ;
-                       } ;
-               read_count *= 2 ;
-               }
-       else
-               read_count = sf_read_float (audio_data->sndfile, buffer, sample_count) ;
-
-       /* Fill the remainder with zeroes. */
-       if (read_count < sample_count)
-       {       if (audio_data->fake_stereo == 0)
-                       memset (&(buffer [read_count]), 0, (sample_count - read_count) * sizeof (float)) ;
-               /* Tell the main application to terminate. */
-               audio_data->done_playing = SF_TRUE ;
-               } ;
-
-       return noErr ;
-} /* macosx_audio_out_callback */
-
-static void
-macosx_play (int argc, char *argv [])
-{      MacOSXAudioData         audio_data ;
-       OSStatus        err ;
-       UInt32          count, buffer_size ;
-       int             k ;
-
-       audio_data.fake_stereo = 0 ;
-       audio_data.device = kAudioDeviceUnknown ;
-
-       /*  get the default output device for the HAL */
-       count = sizeof (AudioDeviceID) ;
-       if ((err = AudioHardwareGetProperty (kAudioHardwarePropertyDefaultOutputDevice,
-                               &count, (void *) &(audio_data.device))) != noErr)
-       {       printf ("AudioHardwareGetProperty (kAudioDevicePropertyDefaultOutputDevice) failed.\n") ;
-               return ;
-               } ;
-
-       /*  get the buffersize that the default device uses for IO */
-       count = sizeof (UInt32) ;
-       if ((err = AudioDeviceGetProperty (audio_data.device, 0, false, kAudioDevicePropertyBufferSize,
-                               &count, &buffer_size)) != noErr)
-       {       printf ("AudioDeviceGetProperty (kAudioDevicePropertyBufferSize) failed.\n") ;
-               return ;
-               } ;
-
-       /*  get a description of the data format used by the default device */
-       count = sizeof (AudioStreamBasicDescription) ;
-       if ((err = AudioDeviceGetProperty (audio_data.device, 0, false, kAudioDevicePropertyStreamFormat,
-                               &count, &(audio_data.format))) != noErr)
-       {       printf ("AudioDeviceGetProperty (kAudioDevicePropertyStreamFormat) failed.\n") ;
-               return ;
-               } ;
-
-       /* Base setup completed. Now play files. */
-       for (k = 1 ; k < argc ; k++)
-       {       memset (&(audio_data.sfinfo), 0, sizeof (audio_data.sfinfo)) ;
-
-               printf ("Playing %s\n", argv [k]) ;
-               if (! (audio_data.sndfile = sf_open (argv [k], SFM_READ, &(audio_data.sfinfo))))
-               {       puts (sf_strerror (NULL)) ;
-                       continue ;
-                       } ;
-
-               if (audio_data.sfinfo.channels < 1 || audio_data.sfinfo.channels > 2)
-               {       printf ("Error : channels = %d.\n", audio_data.sfinfo.channels) ;
-                       continue ;
-                       } ;
-
-               audio_data.format.mSampleRate = audio_data.sfinfo.samplerate ;
-
-               if (audio_data.sfinfo.channels == 1)
-               {       audio_data.format.mChannelsPerFrame = 2 ;
-                       audio_data.fake_stereo = 1 ;
-                       }
-               else
-               audio_data.format.mChannelsPerFrame = audio_data.sfinfo.channels ;
-
-               if ((err = AudioDeviceSetProperty (audio_data.device, NULL, 0, false, kAudioDevicePropertyStreamFormat,
-                                       sizeof (AudioStreamBasicDescription), &(audio_data.format))) != noErr)
-               {       printf ("AudioDeviceSetProperty (kAudioDevicePropertyStreamFormat) failed.\n") ;
-                       return ;
-                       } ;
-
-               /*  we want linear pcm */
-               if (audio_data.format.mFormatID != kAudioFormatLinearPCM)
-                       return ;
-
-               /* Fire off the device. */
-               if ((err = AudioDeviceAddIOProc (audio_data.device, macosx_audio_out_callback,
-                               (void *) &audio_data)) != noErr)
-               {       printf ("AudioDeviceAddIOProc failed.\n") ;
-                       return ;
-                       } ;
-
-               err = AudioDeviceStart (audio_data.device, macosx_audio_out_callback) ;
-               if      (err != noErr)
-                       return ;
-
-               audio_data.done_playing = SF_FALSE ;
-
-               while (audio_data.done_playing == SF_FALSE)
-                       usleep (10 * 1000) ; /* 10 000 milliseconds. */
-
-               if ((err = AudioDeviceStop (audio_data.device, macosx_audio_out_callback)) != noErr)
-               {       printf ("AudioDeviceStop failed.\n") ;
-                       return ;
-                       } ;
-
-               err = AudioDeviceRemoveIOProc (audio_data.device, macosx_audio_out_callback) ;
-               if (err != noErr)
-               {       printf ("AudioDeviceRemoveIOProc failed.\n") ;
-                       return ;
-                       } ;
-
-               sf_close (audio_data.sndfile) ;
-               } ;
-
-       return ;
-} /* macosx_play, AudioHardware implementation */
-
-#endif /* OSX_DARWIN_VERSION > 0 && OSX_DARWIN_VERSION <= 10 */
-
-/*------------------------------------------------------------------------------
-**     Win32 functions for playing a sound.
-**
-**     This API sucks. Its needlessly complicated and is *WAY* too loose with
-**     passing pointers arounf in integers and and using char* pointers to
-**  point to data instead of short*. It plain sucks!
-*/
-
-#if (OS_IS_WIN32 == 1)
-
-#define        WIN32_BUFFER_LEN        (1 << 15)
-
-typedef struct
-{      HWAVEOUT        hwave ;
-       WAVEHDR         whdr [2] ;
-
-       CRITICAL_SECTION        mutex ;         /* to control access to BuffersInUSe */
-       HANDLE          Event ;                 /* signal that a buffer is free */
-
-       short           buffer [WIN32_BUFFER_LEN / sizeof (short)] ;
-       int                     current, bufferlen ;
-       int                     BuffersInUse ;
-
-       SNDFILE         *sndfile ;
-       SF_INFO         sfinfo ;
-
-       sf_count_t      remaining ;
-} Win32_Audio_Data ;
-
-
-static void
-win32_play_data (Win32_Audio_Data *audio_data)
-{      int thisread, readcount ;
-
-       /* fill a buffer if there is more data and we can read it sucessfully */
-       readcount = (audio_data->remaining > audio_data->bufferlen) ? audio_data->bufferlen : (int) audio_data->remaining ;
-
-       thisread = (int) sf_read_short (audio_data->sndfile, (short *) (audio_data->whdr [audio_data->current].lpData), readcount) ;
-
-       audio_data->remaining -= thisread ;
-
-       if (thisread > 0)
-       {       /* Fix buffer length if this is only a partial block. */
-               if (thisread < audio_data->bufferlen)
-                       audio_data->whdr [audio_data->current].dwBufferLength = thisread * sizeof (short) ;
-
-               /* Queue the WAVEHDR */
-               waveOutWrite (audio_data->hwave, (LPWAVEHDR) &(audio_data->whdr [audio_data->current]), sizeof (WAVEHDR)) ;
-
-               /* count another buffer in use */
-               EnterCriticalSection (&audio_data->mutex) ;
-               audio_data->BuffersInUse ++ ;
-               LeaveCriticalSection (&audio_data->mutex) ;
-
-               /* use the other buffer next time */
-               audio_data->current = (audio_data->current + 1) % 2 ;
-               } ;
-
-       return ;
-} /* win32_play_data */
-
-static void CALLBACK
-win32_audio_out_callback (HWAVEOUT hwave, UINT msg, DWORD_PTR data, DWORD param1, DWORD param2)
-{      Win32_Audio_Data        *audio_data ;
-
-       /* Prevent compiler warnings. */
-       (void) hwave ;
-       (void) param1 ;
-       (void) param2 ;
-
-       if (data == 0)
-               return ;
-
-       /*
-       ** I consider this technique of passing a pointer via an integer as
-       ** fundamentally broken but thats the way microsoft has defined the
-       ** interface.
-       */
-       audio_data = (Win32_Audio_Data*) data ;
-
-       /* let main loop know a buffer is free */
-       if (msg == MM_WOM_DONE)
-       {       EnterCriticalSection (&audio_data->mutex) ;
-               audio_data->BuffersInUse -- ;
-               LeaveCriticalSection (&audio_data->mutex) ;
-               SetEvent (audio_data->Event) ;
-               } ;
-
-       return ;
-} /* win32_audio_out_callback */
-
-static void
-win32_play (int argc, char *argv [])
-{      Win32_Audio_Data        audio_data ;
-
-       WAVEFORMATEX wf ;
-       int     k, error ;
-
-       audio_data.sndfile = NULL ;
-       audio_data.hwave = 0 ;
-
-       for (k = 1 ; k < argc ; k++)
-       {       printf ("Playing %s\n", argv [k]) ;
-
-               if (! (audio_data.sndfile = sf_open (argv [k], SFM_READ, &(audio_data.sfinfo))))
-               {       puts (sf_strerror (NULL)) ;
-                       continue ;
-                       } ;
-
-               audio_data.remaining = audio_data.sfinfo.frames * audio_data.sfinfo.channels ;
-               audio_data.current = 0 ;
-
-               InitializeCriticalSection (&audio_data.mutex) ;
-               audio_data.Event = CreateEvent (0, FALSE, FALSE, 0) ;
-
-               wf.nChannels = audio_data.sfinfo.channels ;
-               wf.wFormatTag = WAVE_FORMAT_PCM ;
-               wf.cbSize = 0 ;
-               wf.wBitsPerSample = 16 ;
-
-               wf.nSamplesPerSec = audio_data.sfinfo.samplerate ;
-
-               wf.nBlockAlign = audio_data.sfinfo.channels * sizeof (short) ;
-
-               wf.nAvgBytesPerSec = wf.nBlockAlign * wf.nSamplesPerSec ;
-
-               error = waveOutOpen (&(audio_data.hwave), WAVE_MAPPER, &wf, (DWORD_PTR) win32_audio_out_callback,
-                                                       (DWORD_PTR) &audio_data, CALLBACK_FUNCTION) ;
-               if (error)
-               {       puts ("waveOutOpen failed.") ;
-                       audio_data.hwave = 0 ;
-                       continue ;
-                       } ;
-
-               audio_data.whdr [0].lpData = (char*) audio_data.buffer ;
-               audio_data.whdr [1].lpData = ((char*) audio_data.buffer) + sizeof (audio_data.buffer) / 2 ;
-
-               audio_data.whdr [0].dwBufferLength = sizeof (audio_data.buffer) / 2 ;
-               audio_data.whdr [1].dwBufferLength = sizeof (audio_data.buffer) / 2 ;
-
-               audio_data.whdr [0].dwFlags = 0 ;
-               audio_data.whdr [1].dwFlags = 0 ;
-
-               /* length of each audio buffer in samples */
-               audio_data.bufferlen = sizeof (audio_data.buffer) / 2 / sizeof (short) ;
-
-               /* Prepare the WAVEHDRs */
-               if ((error = waveOutPrepareHeader (audio_data.hwave, &(audio_data.whdr [0]), sizeof (WAVEHDR))))
-               {       printf ("waveOutPrepareHeader [0] failed : %08X\n", error) ;
-                       waveOutClose (audio_data.hwave) ;
-                       continue ;
-                       } ;
-
-               if ((error = waveOutPrepareHeader (audio_data.hwave, &(audio_data.whdr [1]), sizeof (WAVEHDR))))
-               {       printf ("waveOutPrepareHeader [1] failed : %08X\n", error) ;
-                       waveOutUnprepareHeader (audio_data.hwave, &(audio_data.whdr [0]), sizeof (WAVEHDR)) ;
-                       waveOutClose (audio_data.hwave) ;
-                       continue ;
-                       } ;
-
-               /* Fill up both buffers with audio data */
-               audio_data.BuffersInUse = 0 ;
-               win32_play_data (&audio_data) ;
-               win32_play_data (&audio_data) ;
-
-               /* loop until both buffers are released */
-               while (audio_data.BuffersInUse > 0)
-               {
-                       /* wait for buffer to be released */
-                       WaitForSingleObject (audio_data.Event, INFINITE) ;
-
-                       /* refill the buffer if there is more data to play */
-                       win32_play_data (&audio_data) ;
-                       } ;
-
-               waveOutUnprepareHeader (audio_data.hwave, &(audio_data.whdr [0]), sizeof (WAVEHDR)) ;
-               waveOutUnprepareHeader (audio_data.hwave, &(audio_data.whdr [1]), sizeof (WAVEHDR)) ;
-
-               waveOutClose (audio_data.hwave) ;
-               audio_data.hwave = 0 ;
-
-               DeleteCriticalSection (&audio_data.mutex) ;
-
-               sf_close (audio_data.sndfile) ;
-               } ;
-
-} /* win32_play */
-
-#endif /* Win32 */
-
-/*------------------------------------------------------------------------------
-**     OpenBDS's sndio.
-*/
-
-#if defined (HAVE_SNDIO_H)
-
-static void
-sndio_play (int argc, char *argv [])
-{      struct sio_hdl  *hdl ;
-       struct sio_par  par ;
-       short buffer [BUFFER_LEN] ;
-       SNDFILE *sndfile ;
-       SF_INFO sfinfo ;
-       int             k, readcount ;
-
-       for (k = 1 ; k < argc ; k++)
-       {       printf ("Playing %s\n", argv [k]) ;
-               if (! (sndfile = sf_open (argv [k], SFM_READ, &sfinfo)))
-               {       puts (sf_strerror (NULL)) ;
-                       continue ;
-                       } ;
-
-               if (sfinfo.channels < 1 || sfinfo.channels > 2)
-               {       printf ("Error : channels = %d.\n", sfinfo.channels) ;
-                       continue ;
-                       } ;
-
-               if ((hdl = sio_open (NULL, SIO_PLAY, 0)) == NULL)
-               {       fprintf (stderr, "open sndio device failed") ;
-                       return ;
-                       } ;
-
-               sio_initpar (&par) ;
-               par.rate = sfinfo.samplerate ;
-               par.pchan = sfinfo.channels ;
-               par.bits = 16 ;
-               par.sig = 1 ;
-               par.le = SIO_LE_NATIVE ;
-
-               if (! sio_setpar (hdl, &par) || ! sio_getpar (hdl, &par))
-               {       fprintf (stderr, "set sndio params failed") ;
-                       return ;
-                       } ;
-
-               if (! sio_start (hdl))
-               {       fprintf (stderr, "sndio start failed") ;
-                       return ;
-                       } ;
-
-               while ((readcount = sf_read_short (sndfile, buffer, BUFFER_LEN)))
-                       sio_write (hdl, buffer, readcount * sizeof (short)) ;
-
-               sio_close (hdl) ;
-               } ;
-
-       return ;
-} /* sndio_play */
-
-#endif /* sndio */
-
-/*------------------------------------------------------------------------------
-**     Solaris.
-*/
-
-#if (defined (sun) && defined (unix)) /* ie Solaris */
-
-static void
-solaris_play (int argc, char *argv [])
-{      static short    buffer [BUFFER_LEN] ;
-       audio_info_t    audio_info ;
-       SNDFILE                 *sndfile ;
-       SF_INFO                 sfinfo ;
-       unsigned long   delay_time ;
-       long                    k, start_count, output_count, write_count, read_count ;
-       int                             audio_fd, error, done ;
-
-       for (k = 1 ; k < argc ; k++)
-       {       printf ("Playing %s\n", argv [k]) ;
-               if (! (sndfile = sf_open (argv [k], SFM_READ, &sfinfo)))
-               {       puts (sf_strerror (NULL)) ;
-                       continue ;
-                       } ;
-
-               if (sfinfo.channels < 1 || sfinfo.channels > 2)
-               {       printf ("Error : channels = %d.\n", sfinfo.channels) ;
-                       continue ;
-                       } ;
-
-               /* open the audio device - write only, non-blocking */
-               if ((audio_fd = open ("/dev/audio", O_WRONLY | O_NONBLOCK)) < 0)
-               {       perror ("open (/dev/audio) failed") ;
-                       return ;
-                       } ;
-
-               /*      Retrive standard values. */
-               AUDIO_INITINFO (&audio_info) ;
-
-               audio_info.play.sample_rate = sfinfo.samplerate ;
-               audio_info.play.channels = sfinfo.channels ;
-               audio_info.play.precision = 16 ;
-               audio_info.play.encoding = AUDIO_ENCODING_LINEAR ;
-               audio_info.play.gain = AUDIO_MAX_GAIN ;
-               audio_info.play.balance = AUDIO_MID_BALANCE ;
-
-               if ((error = ioctl (audio_fd, AUDIO_SETINFO, &audio_info)))
-               {       perror ("ioctl (AUDIO_SETINFO) failed") ;
-                       return ;
-                       } ;
-
-               /* Delay time equal to 1/4 of a buffer in microseconds. */
-               delay_time = (BUFFER_LEN * 1000000) / (audio_info.play.sample_rate * 4) ;
-
-               done = 0 ;
-               while (! done)
-               {       read_count = sf_read_short (sndfile, buffer, BUFFER_LEN) ;
-                       if (read_count < BUFFER_LEN)
-                       {       memset (&(buffer [read_count]), 0, (BUFFER_LEN - read_count) * sizeof (short)) ;
-                               /* Tell the main application to terminate. */
-                               done = SF_TRUE ;
-                               } ;
-
-                       start_count = 0 ;
-                       output_count = BUFFER_LEN * sizeof (short) ;
-
-                       while (output_count > 0)
-                       {       /* write as much data as possible */
-                               write_count = write (audio_fd, &(buffer [start_count]), output_count) ;
-                               if (write_count > 0)
-                               {       output_count -= write_count ;
-                                       start_count += write_count ;
-                                       }
-                               else
-                               {       /*      Give the audio output time to catch up. */
-                                       usleep (delay_time) ;
-                                       } ;
-                               } ; /* while (outpur_count > 0) */
-                       } ; /* while (! done) */
-
-               close (audio_fd) ;
-               } ;
-
-       return ;
-} /* solaris_play */
-
-#endif /* Solaris */
-
-/*==============================================================================
-**     Main function.
-*/
-
-int
-main (int argc, char *argv [])
-{
-       if (argc < 2)
-       {
-               printf ("\nUsage : %s <input sound file>\n\n", program_name (argv [0])) ;
-               printf ("  Using %s.\n\n", sf_version_string ()) ;
-#if (OS_IS_WIN32 == 1)
-               printf ("This is a Unix style command line application which\n"
-                               "should be run in a MSDOS box or Command Shell window.\n\n") ;
-               printf ("Sleeping for 5 seconds before exiting.\n\n") ;
-
-               Sleep (5 * 1000) ;
-#endif
-               return 1 ;
-               } ;
-
-#if defined (__ANDROID__)
-       puts ("*** Playing sound not yet supported on Android.") ;
-       puts ("*** Please feel free to submit a patch.") ;
-       return 1 ;
-#elif defined (__linux__)
-       #if HAVE_ALSA_ASOUNDLIB_H
-               if (access ("/proc/asound/cards", R_OK) == 0)
-                       alsa_play (argc, argv) ;
-               else
-       #endif
-               opensoundsys_play (argc, argv) ;
-#elif defined (__FreeBSD_kernel__) || defined (__FreeBSD__)
-       opensoundsys_play (argc, argv) ;
-#elif (defined (__MACH__) && defined (__APPLE__) && OSX_DARWIN_VERSION <= 11)
-       macosx_play (argc, argv) ;
-#elif defined HAVE_SNDIO_H
-       sndio_play (argc, argv) ;
-#elif (defined (sun) && defined (unix))
-       solaris_play (argc, argv) ;
-#elif (OS_IS_WIN32 == 1)
-       win32_play (argc, argv) ;
-#elif (defined (__MACH__) && defined (__APPLE__) && OSX_DARWIN_VERSION > 11)
-       printf ("OS X 10.8 and later have a new Audio API.\n") ;
-       printf ("Someone needs to write code to use that API.\n") ;
-       return 1 ;
-#elif defined (__BEOS__)
-       printf ("This program cannot be compiled on BeOS.\n") ;
-       printf ("Instead, compile the file sfplay_beos.cpp.\n") ;
-       return 1 ;
-#else
-       puts ("*** Playing sound not yet supported on this platform.") ;
-       puts ("*** Please feel free to submit a patch.") ;
-       return 1 ;
-#endif
-
-       return 0 ;
-} /* main */
-
diff --git a/libs/libsndfile/programs/sndfile-salvage.c b/libs/libsndfile/programs/sndfile-salvage.c
deleted file mode 100644 (file)
index db55e60..0000000
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
-** Copyright (C) 2010-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include       <stdio.h>
-#include       <stdlib.h>
-#include       <string.h>
-#include       <inttypes.h>
-#include       <ctype.h>
-#include       <math.h>
-#include       <errno.h>
-#include       <unistd.h>
-#include       <fcntl.h>
-#include       <sys/stat.h>
-#include       <sys/types.h>
-
-#include       <sndfile.h>
-
-#include       "common.h"
-
-#define        BUFFER_LEN              (1 << 16)
-
-#define        NOT(x)                  (! (x))
-
-
-static void usage_exit (const char *progname) ;
-static void salvage_file (const char * broken_wav, const char * fixed_w64) ;
-
-int
-main (int argc, char *argv [])
-{
-       if (argc != 3)
-               usage_exit (program_name (argv [0])) ;
-
-       salvage_file (argv [1], argv [2]) ;
-
-       return 0 ;
-} /* main */
-
-/*==============================================================================
-*/
-
-static void lseek_or_die (int fd, off_t offset, int whence) ;
-static sf_count_t get_file_length (int fd, const char * name) ;
-static sf_count_t find_data_offset (int fd, int format) ;
-static void copy_data (int fd, SNDFILE * sndfile, int readsize) ;
-
-
-static void
-usage_exit (const char *progname)
-{      printf ("Usage :\n\n  %s <broken wav file> <fixed w64 file>\n\n", progname) ;
-       puts ("Salvages the audio data from WAV files which are more than 4G in length.\n") ;
-       printf ("Using %s.\n\n", sf_version_string ()) ;
-       exit (0) ;
-} /* usage_exit */
-
-static void
-salvage_file (const char * broken_wav, const char * fixed_w64)
-{      SNDFILE * sndfile ;
-       SF_INFO sfinfo ;
-       sf_count_t broken_len, data_offset ;
-       int fd, read_size ;
-
-       if (strcmp (broken_wav, fixed_w64) == 0)
-       {       printf ("Error : Input and output files must be different.\n\n") ;
-               exit (1) ;
-               } ;
-
-       if ((fd = open (broken_wav, O_RDONLY)) < 0)
-       {       printf ("Error : Not able to open file '%s' : %s\n", broken_wav, strerror (errno)) ;
-               exit (1) ;
-               } ;
-
-       broken_len = get_file_length (fd, broken_wav) ;
-       if (broken_len <= 0xffffffff)
-               printf ("File is not greater than 4Gig but salvaging anyway.\n") ;
-
-       /* Grab the format info from the broken file. */
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       if ((sndfile = sf_open (broken_wav, SFM_READ, &sfinfo)) == NULL)
-       {       printf ("sf_open ('%s') failed : %s\n", broken_wav, sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-       sf_close (sndfile) ;
-
-       data_offset = find_data_offset (fd, sfinfo.format & SF_FORMAT_TYPEMASK) ;
-
-       printf ("Offset to audio data : %" PRId64 "\n", data_offset) ;
-
-       switch (sfinfo.format & SF_FORMAT_TYPEMASK)
-       {       case SF_FORMAT_WAV :
-               case SF_FORMAT_WAVEX :
-                       sfinfo.format = SF_FORMAT_W64 | (sfinfo.format & SF_FORMAT_SUBMASK) ;
-                       break ;
-
-               default :
-                       printf ("Don't currently support this file type.\n") ;
-                       exit (1) ;
-               } ;
-
-       switch (sfinfo.format & SF_FORMAT_SUBMASK)
-       {       case SF_FORMAT_PCM_U8 :
-               case SF_FORMAT_PCM_S8 :
-                               read_size = 1 ;
-                               break ;
-
-               case SF_FORMAT_PCM_16 :
-                               read_size = 2 ;
-                               break ;
-
-               case SF_FORMAT_PCM_24 :
-                               read_size = 3 ;
-                               break ;
-
-               case SF_FORMAT_PCM_32 :
-               case SF_FORMAT_FLOAT :
-                               read_size = 4 ;
-                               break ;
-
-               case SF_FORMAT_DOUBLE :
-                               read_size = 8 ;
-                               break ;
-
-               default :
-                       printf ("Sorry, don't currently support this file encoding type.\n") ;
-                       exit (1) ;
-               } ;
-
-       read_size *= sfinfo.channels ;
-
-       if ((sndfile = sf_open (fixed_w64, SFM_WRITE, &sfinfo)) == NULL)
-       {       printf ("sf_open ('%s') failed : %s\n", broken_wav, sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       lseek_or_die (fd, data_offset, SEEK_SET) ;
-
-       copy_data (fd, sndfile, read_size) ;
-
-       sf_close (sndfile) ;
-
-       puts ("Done!") ;
-} /* salvage_file */
-
-/*------------------------------------------------------------------------------
-*/
-
-static void
-lseek_or_die (int fd, off_t offset, int whence)
-{
-       if (lseek (fd, offset, whence) < 0)
-       {       printf ("lseek failed : %s\n", strerror (errno)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* lseek_or_die */
-
-
-static sf_count_t
-get_file_length (int fd, const char * name)
-{      struct stat sbuf ;
-
-       if (sizeof (sbuf.st_size) != 8)
-       {       puts ("Error : sizeof (sbuf.st_size) != 8. Was program compiled with\n"
-                               "        64 bit file offsets?\n") ;
-               exit (1) ;
-               } ;
-
-       if (fstat (fd, &sbuf) != 0)
-       {       printf ("Error : fstat ('%s') failed : %s\n", name, strerror (errno)) ;
-               exit (1) ;
-               } ;
-
-       return sbuf.st_size ;
-} /* get_file_length */
-
-static sf_count_t
-find_data_offset (int fd, int format)
-{      char buffer [8192], *cptr ;
-       const char * target = "XXXX" ;
-       sf_count_t offset = -1, extra ;
-       int rlen, slen ;
-
-       switch (format)
-       {       case SF_FORMAT_WAV :
-               case SF_FORMAT_WAVEX :
-                       target = "data" ;
-                       extra = 8 ;
-                       break ;
-
-               case SF_FORMAT_AIFF :
-                       target = "SSND" ;
-                       extra = 16 ;
-                       break ;
-
-               default :
-                       puts ("Error : Sorry, don't handle this input file format.\n") ;
-                       exit (1) ;
-               } ;
-
-       slen = strlen (target) ;
-
-       lseek_or_die (fd, 0, SEEK_SET) ;
-
-       printf ("Searching for '%s' maker.\n", target) ;
-
-       if ((rlen = read (fd, buffer, sizeof (buffer))) < 0)
-       {       printf ("Error : failed read : %s\n", strerror (errno)) ;
-               exit (1) ;
-               } ;
-
-       cptr = memchr (buffer, target [0], rlen - slen) ;
-       if (cptr && memcmp (cptr, target, slen) == 0)
-               offset = cptr - buffer ;
-       else
-       {       printf ("Error : Could not find data offset.\n") ;
-               exit (1) ;
-               } ;
-
-       return offset + extra ;
-} /* find_data_offset */
-
-static void
-copy_data (int fd, SNDFILE * sndfile, int readsize)
-{      static char * buffer ;
-       sf_count_t readlen, count ;
-       int bufferlen, done = 0 ;
-
-       bufferlen = readsize * 1024 ;
-       buffer = malloc (bufferlen) ;
-
-       while (NOT (done) && (readlen = read (fd, buffer, bufferlen)) >= 0)
-       {       if (readlen < bufferlen)
-               {       readlen -= readlen % readsize ;
-                       done = 1 ;
-                       } ;
-
-               if ((count = sf_write_raw (sndfile, buffer, readlen)) != readlen)
-               {       printf ("Error : sf_write_raw returned %" PRId64 " : %s\n", count, sf_strerror (sndfile)) ;
-                       return ;
-                       } ;
-               } ;
-
-       free (buffer) ;
-
-       return ;
-} /* copy_data */
-
diff --git a/libs/libsndfile/programs/test-sndfile-metadata-set.py b/libs/libsndfile/programs/test-sndfile-metadata-set.py
deleted file mode 100644 (file)
index a21a36b..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-#!/usr/bin/python
-
-# Copyright (C) 2008-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-#       notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above copyright
-#       notice, this list of conditions and the following disclaimer in
-#       the documentation and/or other materials provided with the
-#       distribution.
-#     * Neither the author nor the names of any contributors may be used
-#       to endorse or promote products derived from this software without
-#       specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-# Simple test script for the sndfile-metadata-set program.
-
-import commands, os, sys
-import time, datetime
-
-def print_test_name (name):
-       print "    %-30s :" % name,
-
-def assert_info (filename, arg, value):
-       cmd = "./sndfile-metadata-get %s %s" % (arg, filename)
-       status, output = commands.getstatusoutput (cmd)
-       if status:
-               print "\n\nError : command '%s' should not have failed." % cmd
-               sys.exit (1)
-       if output.find (value) < 0:
-               print "\n\nError : not able to find '%s'." % value
-               print output
-               sys.exit (1)
-       return
-
-
-def check_executable (name):
-       if not (os.path.isfile (name)):
-               print "\n\nError : Can't find executable '%s'. Have you run make?" % name
-               sys.exit (1)
-
-def test_empty_fail ():
-       print_test_name ("Empty fail test")
-       cmd = "./sndfile-metadata-set --bext-description Alpha sine.wav"
-       status, output = commands.getstatusoutput (cmd)
-       if not status:
-               print "\n\nError : command '%s' should have failed." % cmd
-               sys.exit (1)
-       print "ok"
-
-def test_copy ():
-       print_test_name ("Copy test")
-       cmd = "./sndfile-metadata-set --bext-description \"First Try\" sine.wav output.wav"
-       status, output = commands.getstatusoutput (cmd)
-       if status:
-               print "\n\nError : command '%s' should not have failed." % cmd
-               sys.exit (1)
-       assert_info ("output.wav", "--bext-description", "First Try")
-       print "ok"
-
-def test_update (tests):
-       print_test_name ("Update test")
-       for arg, value in tests:
-               cmd = "./sndfile-metadata-set %s \"%s\" output.wav" % (arg, value)
-               status, output = commands.getstatusoutput (cmd)
-               if status:
-                       print "\n\nError : command '%s' should not have failed." % cmd
-                       sys.exit (1)
-               assert_info ("output.wav", arg, value)
-       print "ok"
-
-def test_post_mod (tests):
-       print_test_name ("Post mod test")
-       for arg, value in tests:
-               assert_info ("output.wav", arg, value)
-       print "ok"
-
-def test_auto_date ():
-       print_test_name ("Auto date test")
-       cmd = "./sndfile-metadata-set --bext-auto-time-date sine.wav date-time.wav"
-       status, output = commands.getstatusoutput (cmd)
-       if status:
-               print "\n\nError : command '%s' should not have failed." % cmd
-               sys.exit (1)
-       target = datetime.date.today ().__str__ ()
-       assert_info ("date-time.wav", "--bext-orig-date", target)
-       print "ok"
-
-
-#-------------------------------------------------------------------------------
-
-def test_coding_history ():
-       print_test_name ("Coding history test")
-       cmd = "./sndfile-metadata-set --bext-coding-hist \"alpha beta\" output.wav"
-       status, output = commands.getstatusoutput (cmd)
-       if status:
-               print "\n\nError : command '%s' should not have failed." % cmd
-               sys.exit (1)
-       cmd = "./sndfile-metadata-get --bext-coding-hist output.wav"
-       status, output = commands.getstatusoutput (cmd)
-       if status:
-               print "\n\nError : command '%s' should not have failed." % cmd
-               sys.exit (1)
-       print "ok"
-
-#-------------------------------------------------------------------------------
-
-def test_rewrite ():
-       print_test_name ("Rewrite test")
-       cmd = "./sndfile-metadata-set --bext-originator \"Really, really long string\" output.wav"
-       status, output = commands.getstatusoutput (cmd)
-       if status:
-               print "\n\nError : command '%s' should not have failed." % cmd
-               sys.exit (1)
-       cmd = "./sndfile-metadata-set --bext-originator \"Short\" output.wav"
-       status, output = commands.getstatusoutput (cmd)
-       if status:
-               print "\n\nError : command '%s' should not have failed." % cmd
-               sys.exit (1)
-       cmd = "./sndfile-metadata-get --bext-originator output.wav"
-       status, output = commands.getstatusoutput (cmd)
-       if status:
-               print "\n\nError : command '%s' should not have failed." % cmd
-               sys.exit (1)
-       if output.find ("really long") > 0:
-               print "\n\nError : output '%s' should not contain 'really long'." % output
-               sys.exit (1)
-       print "ok"
-
-#===============================================================================
-
-test_dir = "programs"
-
-if os.path.isdir (test_dir):
-       os.chdir (test_dir)
-
-for f in [ "sndfile-metadata-set", "sndfile-metadata-get", "../examples/make_sine" ]:
-       check_executable (f)
-
-os.system ("../examples/make_sine")
-if not os.path.isfile ("sine.wav"):
-       print "\n\nError : Can't file file 'sine.wav'."
-       sys.exit (1)
-
-print ""
-
-test_empty_fail ()
-test_copy ()
-
-tests = [
-       ("--bext-description", "Alpha"), ("--bext-originator", "Beta"), ("--bext-orig-ref", "Charlie"),
-       ("--bext-umid", "Delta"), ("--bext-orig-date", "2001-10-01"),  ("--bext-orig-time", "01:02:03"),
-       ("--str-title", "Echo"), ("--str-artist", "Fox trot")
-       ]
-
-test_auto_date ()
-test_update (tests)
-test_post_mod (tests)
-
-test_update ([ ("--str-artist", "Fox") ])
-
-# This never worked.
-# test_coding_history ()
-
-test_rewrite ()
-
-
-print ""
-
-sys.exit (0)
-
diff --git a/libs/libsndfile/reconfigure.mk b/libs/libsndfile/reconfigure.mk
deleted file mode 100644 (file)
index 5ec5943..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/make -f
-
-# The auto tools MUST be run in the following order:
-#
-#      1.  aclocal
-#      2.  libtoolize (if you use libtool)
-#      3.  autoconf
-#      4.  autoheader (if you use autoheader)
-#      5.  automake (if you use automake)
-#
-# The following makefile runs these in the correct order according to their
-# dependancies. It also makes up for Mac OSX's fucked-upped-ness.
-
-ACLOCAL = aclocal
-
-ifneq ($(shell uname -s), Darwin)
-  LIBTOOLIZE = libtoolize
-else
-  # Fuck Apple! Why the hell did they rename libtoolize????
-  LIBTOOLIZE = glibtoolize
-  # Fink sucks as well, but this seems necessary.
-  ACLOCAL_INC = -I /sw/share/aclocal
-endif
-
-genfiles : config.status
-       (cd src && make genfiles)
-       (cd tests && make genfiles)
-
-config.status: configure src/config.h.in Makefile.in src/Makefile.in tests/Makefile.in
-       ./configure --enable-gcc-werror
-
-configure: ltmain.sh
-       autoconf
-
-Makefile.in: Makefile.am       
-       automake --copy --add-missing
-
-src/Makefile.in: src/Makefile.am       
-       automake --copy --add-missing
-
-tests/Makefile.in: tests/Makefile.am   
-       automake --copy --add-missing
-
-src/config.h.in: configure
-       autoheader
-
-libtool ltmain.sh: aclocal.m4
-       $(LIBTOOLIZE) --copy --force
-       
-# Need to re-run aclocal whenever acinclude.m4 is modified.
-aclocal.m4: acinclude.m4
-       $(ACLOCAL) $(ACLOCAL_INC)
-
-clean:
-       rm -f libtool ltmain.sh aclocal.m4 Makefile.in src/config.h.in config.cache config.status
-       find . -name .deps -type d -exec rm -rf {} \;
-
-
-# Do not edit or modify anything in this comment block.
-# The arch-tag line is a file identity tag for the GNU Arch 
-# revision control system.
-#
-# arch-tag: 2b02bfd0-d5ed-489b-a554-2bf36903cca9
diff --git a/libs/libsndfile/regtest/Makefile.am b/libs/libsndfile/regtest/Makefile.am
deleted file mode 100644 (file)
index a87d0c4..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-bin_PROGRAMS = sndfile-regtest
-
-noinst_HEADERS = regtest.h
-
-AM_CPPFLAGS = -I$(top_srcdir)/src $(SQLITE3_CFLAGS) $(OS_SPECIFIC_CFLAGS)
-
-sndfile_regtest_SOURCES = sndfile-regtest.c database.c checksum.c
-sndfile_regtest_LDADD = $(top_builddir)/src/libsndfile.la $(SQLITE3_LIBS)
-
-CLEANFILES = *~ *.exe
diff --git a/libs/libsndfile/regtest/Readme.txt b/libs/libsndfile/regtest/Readme.txt
deleted file mode 100644 (file)
index bc038d6..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-sndfile-regtest
-===============
-
-The 'sndfile-regtest' program is a regression test-suite for libsndile.
-
-This program is intended to allow anyone who has an interest in the
-reliability and correctness of libsndfile to do their own regression
-testing. From the point of view of the libsndfile developers, this
-program now allows for distributed regression testing of libsndfile
-which will make libsndfile better.
-
-
-How Does it Work
-----------------
-Anyone who wishes to take part in the distributed regression testing of
-libsndfile can download the regression test program and install it.
-
-Once installed the user can start collecting files and adding them to
-their own personal database. Then, as new versions of libsndfile come
-out, the user should test the new library version against their database
-of files (instructions below).
-
-Any files which were successfully added to the database in the past but
-now fail the check with the new library version represent a regression.
-The user should then contact the libsndfile developers so that a copy
-of the test file can be made available to the developers.
-
-
-Requirements
-------------
-The regression test program uses sqlite3 as the database engine. On
-Debian, the required packages are :
-
-    sqlite3
-       libsqlite3-0
-       libsqlite3-dev
-
-but similar packages should be available on any other Linux style
-system.
-
-The regression test currently only compiles under Unix-like systems.
-At some time in the future the regression test will distributed along
-with the libsndfile source code distribution.
-
-
-Organization of Files
----------------------
-The regession test program keeps its database file in the directory it
-is run from. In addition, the database only contains information about
-the files, not the files themselves.
-
-This means that database file should probably be kept in the same
-directory (or a directory above) the test files.
-
-
-Setting it Up for the First Time
---------------------------------
-The sndfile-regtest program should be on your PATH. You can then cd into
-the directory where you intend to keep you test files and
-run the command:
-
-        sndfile-regtest --create-db
-
-which creates a file named '.sndfile-regtest.db' in the current directory.
-
-Files can then be added to the database using the command:
-
-        sndfile-regtest --add-file file1.wav
-
-The --add-file option allows more than one file to be added at a time
-using:
-
-        sndfile-regtest --add-file file1.wav file2.aif .....
-
-
-Checking Files
---------------
-One or more files that have already been added to the database can be
-checked using:
-
-        sndfile-regtest --check-file file1.wav file2.aif .....
-
-It is also possible to check all files in the database using:
-
-        sndfile-regtest --check-all
-
-
-Running a Regression Test
--------------------------
-Once you have a collection of files and a database it is possible to test
-new versions of libsndfile before you install them. If for instance you
-have just compiled a new version of libsndfile in the directory
-/usr/src/libsndfile-X.Y.Z, then you can use an existing sndfile-regtest
-binary with the new libsndfile using something like:
-
-    LD_PRELOAD=/usr/src/libsndfile-X.Y.Z/src/.libs/libsndfile.so.X.Y.Z \
-       sndfile-regtest --check-all
-
-
-Reporting Regressions
----------------------
-Any user who finds a file which was added to the regression database with
-an earlier version of libsndfile and then fails the check with a later
-version of the library should contact the author (erikd at mega dash nerd
-dot com). If possible place the file on a web server and email the author
-a link to it.
-
-
diff --git a/libs/libsndfile/regtest/checksum.c b/libs/libsndfile/regtest/checksum.c
deleted file mode 100644 (file)
index 7f433a4..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
-**     Copyright (C) 2005-2011 Erik de Castro Lopo
-**
-**     This program is free software; you can redistribute it and/or modify
-**     it under the terms of the GNU General Public License as published by
-**     the Free Software Foundation; either version 2 of the License, or
-**     (at your option) any later version.
-**
-**     This program is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-**     GNU General Public License for more details.
-**
-**     You should have received a copy of the GNU General Public License
-**     along with this program; if not, write to the Free Software
-**     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/*
-**     A simple checksum for short, int and float data.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include <sndfile.h>
-
-#include "regtest.h"
-
-#define        BIG_PRIME               999983
-
-#define        ARRAY_LEN(x)    ((int) (sizeof (x)) / (sizeof ((x) [0])))
-
-static int short_checksum (SNDFILE * file, int start) ;
-static int int_checksum (SNDFILE * file, int start) ;
-static int float_checksum (SNDFILE * file, int start) ;
-
-int
-calc_checksum (SNDFILE * file, const SF_INFO * info)
-{      int start ;
-
-       /* Seed the checksum with data from the SF_INFO struct. */
-       start = info->samplerate ;
-       start = start * BIG_PRIME + info->channels ;
-       start = start * BIG_PRIME + info->format ;
-
-       switch (info->format & SF_FORMAT_SUBMASK)
-       {       case SF_FORMAT_FLOAT :
-               case SF_FORMAT_DOUBLE :
-                       return float_checksum (file, start) ;
-
-               case SF_FORMAT_PCM_24 :
-               case SF_FORMAT_PCM_32 :
-                       return int_checksum (file, start) ;
-
-               default :
-                       return short_checksum (file, start) ;
-               } ;
-
-       return 0 ;
-} /* calc_checksum */
-
-/*------------------------------------------------------------------------------
-*/
-
-static union
-{      short   s [1 << 16] ;
-       int             i [1 << 15] ;
-       float   f [1 << 15] ;
-} data ;
-
-static int
-short_checksum (SNDFILE * file, int start)
-{      int k, count ;
-
-       do
-       {       count = (int) sf_read_short (file, data.s, ARRAY_LEN (data.s)) ;
-               for (k = 0 ; k < count ; k++)
-                       start = start * BIG_PRIME + data.s [k] ;
-               }
-       while (count > 0) ;
-
-       return start ;
-} /* short_checksum */
-
-static int
-int_checksum (SNDFILE * file, int start)
-{      int k, count ;
-
-       do
-       {       count = (int) sf_read_int (file, data.i, ARRAY_LEN (data.i)) ;
-               for (k = 0 ; k < count ; k++)
-                       start = start * BIG_PRIME + data.i [k] ;
-               }
-       while (count > 0) ;
-
-       return start ;
-} /* int_checksum */
-
-static int
-float_checksum (SNDFILE * file, int start)
-{      int k, count ;
-
-       do
-       {       count = (int) sf_read_float (file, data.f, ARRAY_LEN (data.f)) ;
-               for (k = 0 ; k < count ; k++)
-                       start = start * BIG_PRIME + lrintf (0x7FFFFFFF * data.f [k]) ;
-               }
-       while (count > 0) ;
-
-       return start ;
-} /* float_checksum */
-
diff --git a/libs/libsndfile/regtest/database.c b/libs/libsndfile/regtest/database.c
deleted file mode 100644 (file)
index f800a2c..0000000
+++ /dev/null
@@ -1,495 +0,0 @@
-/*
-**     Copyright (C) 2005-2011 Erik de Castro Lopo
-**
-**     This program is free software; you can redistribute it and/or modify
-**     it under the terms of the GNU General Public License as published by
-**     the Free Software Foundation; either version 2 of the License, or
-**     (at your option) any later version.
-**
-**     This program is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-**     GNU General Public License for more details.
-**
-**     You should have received a copy of the GNU General Public License
-**     along with this program; if not, write to the Free Software
-**     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-
-#include <sndfile.h>
-
-#include "regtest.h"
-
-#if HAVE_SQLITE3
-
-#include <sqlite3.h>
-
-typedef struct
-{      sqlite3 *sql ;
-
-       int count ;
-       int ekey_max ;
-
-       /* Filename and pathname for file. */
-       char filename [256] ;
-       char pathname [512] ;
-
-       /* Storage for createding SQL commands. Must be larger than logbuf below. */
-       char cmdbuf [1 << 15] ;
-
-       /* Storage for log buffer retrieved from SNDFILE* .*/
-       char logbuf [1 << 14] ;
-
-} REGTEST_DB ;
-
-/* In checksum.c */
-int calc_checksum (SNDFILE * file, const SF_INFO * info) ;
-
-static void get_filename_pathname (REGTEST_DB * db, const char *filepath) ;
-static void single_quote_replace (char * buf) ;
-
-static int get_ekey_from_filename (REGTEST_DB * db, const char *filepath) ;
-static int get_filename_pathname_by_ekey (REGTEST_DB * db, int ekey) ;
-static int check_file_by_ekey (REGTEST_DB * db, int ekey) ;
-
-static int count_callback (REGTEST_DB * db, int argc, char **argv, char **colname) ;
-static int ekey_max_callback (REGTEST_DB * db, int argc, char **argv, char **colname) ;
-static int callback (void *unused, int argc, char **argv, char **colname) ;
-
-REG_DB *
-db_open (const char * db_name)
-{      REGTEST_DB * db ;
-       int err ;
-
-       if ((db = malloc (sizeof (REGTEST_DB))) == NULL)
-       {       perror ("malloc") ;
-               exit (1) ;
-               } ;
-
-       if ((err = sqlite3_open (db_name, &(db->sql))) != 0)
-       {       printf ("Can't open database: %s\n", sqlite3_errmsg (db->sql)) ;
-        sqlite3_close (db->sql) ;
-               free (db) ;
-               exit (1) ;
-               } ;
-
-       return (REG_DB *) db ;
-} /* db_open */
-
-int
-db_create (const char * db_name)
-{      REGTEST_DB * db ;
-       const char *cmd ;
-       char * errmsg = NULL ;
-       int err ;
-
-       db = (REGTEST_DB *) db_open (db_name) ;
-
-       cmd = "create table sndfile (ekey INTEGER PRIMARY KEY,"
-                       "fname VARCHAR(1),"
-                       "fpath VARCHAR(1),"
-                       "srate INTEGER,"
-                       "frames VARCHAR(1),"
-                       "channels INTEGER,"
-                       "format VARCHAR(1),"
-                       "checksum VARCHAR(1),"
-                       "logbuf VARCHAR(1)"
-                       ");" ;
-
-       err = sqlite3_exec (db->sql, cmd, callback, 0, &errmsg) ;
-       if (err != SQLITE_OK)
-               printf ("Line %d : SQL error: %s\n", __LINE__, errmsg) ;
-
-       sqlite3_close (db->sql) ;
-       free (db) ;
-
-       return 0 ;
-} /* db_create */
-
-int
-db_close (REG_DB * db_handle)
-{      REGTEST_DB * db ;
-
-       db = (REGTEST_DB *) db_handle ;
-
-       sqlite3_close (db->sql) ;
-       free (db) ;
-
-       return 0 ;
-} /* db_close */
-
-/*==============================================================================
-*/
-
-int
-db_file_exists (REG_DB * db_handle, const char * filename)
-{      REGTEST_DB * db ;
-       const char * cptr ;
-       char * errmsg ;
-       int err ;
-
-       db = (REGTEST_DB *) db_handle ;
-
-       if ((cptr = strrchr (filename, '/')) != NULL)
-               filename = cptr + 1 ;
-
-       snprintf (db->cmdbuf, sizeof (db->cmdbuf), "select fname from sndfile where fname='%s'", filename) ;
-
-       db->count = 0 ;
-       err = sqlite3_exec (db->sql, db->cmdbuf, (sqlite3_callback) count_callback, db, &errmsg) ;
-       if (err == 0 && db->count == 1)
-               return 1 ;
-
-       return 0 ;
-} /* db_file_exists */
-
-int
-db_add_file (REG_DB * db_handle, const char * filepath)
-{      REGTEST_DB * db ;
-       SNDFILE * sndfile ;
-       SF_INFO info ;
-       char * errmsg ;
-       int err, checksum ;
-
-       db = (REGTEST_DB *) db_handle ;
-
-       get_filename_pathname (db, filepath) ;
-
-       if (db_file_exists (db_handle, filepath))
-       {       printf ("    %s : already in database\n", db->filename) ;
-               return 0 ;
-               } ;
-
-       memset (&info, 0, sizeof (info)) ;
-       sndfile = sf_open (db->pathname, SFM_READ, &info) ;
-       sf_command (sndfile, SFC_GET_LOG_INFO, db->logbuf, sizeof (db->logbuf)) ;
-       checksum = (sndfile == NULL) ? 0 : calc_checksum (sndfile, &info) ;
-       sf_close (sndfile) ;
-
-       if (sndfile == NULL)
-       {       printf ("    %s : could not open : %s\n", db->filename, sf_strerror (NULL)) ;
-               puts (db->logbuf) ;
-               return 1 ;
-               } ;
-
-       single_quote_replace (db->logbuf) ;
-
-       snprintf (db->cmdbuf, sizeof (db->cmdbuf), "insert into sndfile "
-               "(fname, fpath, srate, frames, channels, format, checksum, logbuf) values"
-               "('%s','%s',%d,'%ld', %d, '0x%08x', '0x%08x', '%s');",
-               db->filename, db->pathname, info.samplerate, (long) info.frames, info.channels, info.format, checksum, db->logbuf) ;
-
-       if (strlen (db->cmdbuf) >= sizeof (db->cmdbuf) - 1)
-       {       printf ("strlen (db->cmdbuf) too long.\n") ;
-               exit (1) ;
-               } ;
-
-       err = sqlite3_exec (db->sql, db->cmdbuf, callback, 0, &errmsg) ;
-       if (err != SQLITE_OK)
-       {       printf ("Line %d : SQL error: %s\n", __LINE__, errmsg) ;
-               puts (db->cmdbuf) ;
-               } ;
-
-       return 0 ;
-} /* db_add_file */
-
-int
-db_check_file (REG_DB * db_handle, const char * filepath)
-{      REGTEST_DB * db ;
-       int ekey ;
-
-       if (db_file_exists (db_handle, filepath) == 0)
-       {       printf ("\nFile not in database.\n\n") ;
-               exit (0) ;
-               } ;
-
-       db = (REGTEST_DB *) db_handle ;
-
-       ekey = get_ekey_from_filename (db, filepath) ;
-
-       return check_file_by_ekey (db, ekey) ;
-} /* db_check_file */
-
-/*==============================================================================
-*/
-
-int
-db_check_all (REG_DB * db_handle)
-{      REGTEST_DB * db ;
-       char * errmsg ;
-       int err, ekey ;
-
-       db = (REGTEST_DB *) db_handle ;
-
-       db->ekey_max = 0 ;
-
-       snprintf (db->cmdbuf, sizeof (db->cmdbuf), "select ekey from sndfile") ;
-
-       err = sqlite3_exec (db->sql, db->cmdbuf, (sqlite3_callback) ekey_max_callback, db, &errmsg) ;
-       if (err != SQLITE_OK)
-       {       printf ("Line %d : SQL error: %s\n", __LINE__, errmsg) ;
-               puts (db->cmdbuf) ;
-               } ;
-
-       for (ekey = 1 ; ekey <= db->ekey_max ; ekey++)
-               if (get_filename_pathname_by_ekey (db, ekey) != 0)
-                       check_file_by_ekey (db, ekey) ;
-
-       return 0 ;
-} /* db_check_all */
-
-
-int
-db_list_all (REG_DB * db_handle)
-{
-       printf ("%s : %p\n", __func__, db_handle) ;
-       return 0 ;
-} /* db_list_all */
-
-int
-db_del_entry (REG_DB * db_handle, const char * entry)
-{
-       printf ("%s : %p %s\n", __func__, db_handle, entry) ;
-       return 0 ;
-} /* db_del_entry */
-
-/*==============================================================================
-*/
-
-static int
-get_ekey_from_filename (REGTEST_DB * db, const char *filepath)
-{      char * errmsg, **result ;
-       int err, ekey = 0, rows, cols ;
-
-       get_filename_pathname (db, filepath) ;
-
-       snprintf (db->cmdbuf, sizeof (db->cmdbuf), "select ekey from sndfile where fname='%s'", db->filename) ;
-
-       err = sqlite3_get_table (db->sql, db->cmdbuf, &result, &rows, &cols, &errmsg) ;
-       if (err != SQLITE_OK)
-       {       printf ("Line %d : SQL error: %s\n", __LINE__, errmsg) ;
-               puts (db->cmdbuf) ;
-               } ;
-
-       if (cols != 1 || rows != 1)
-       {       printf ("Bad juju!! rows = %d cols = %d\n", rows, cols) ;
-               exit (1) ;
-               } ;
-
-       ekey = strtol (result [1], NULL, 10) ;
-
-       sqlite3_free_table (result) ;
-
-       return ekey ;
-} /* get_ekey_from_filename */
-
-static int
-get_filename_pathname_by_ekey (REGTEST_DB * db, int ekey)
-{      char *errmsg, **result ;
-       int err, rows, cols ;
-
-       snprintf (db->cmdbuf, sizeof (db->cmdbuf), "select fname,fpath from sndfile where ekey='%d'", ekey) ;
-
-       err = sqlite3_get_table (db->sql, db->cmdbuf, &result, &rows, &cols, &errmsg) ;
-       if (err != SQLITE_OK)
-       {       printf ("Line %d : SQL error: %s\n", __LINE__, errmsg) ;
-               puts (db->cmdbuf) ;
-               return 0 ;
-               } ;
-
-       if (cols != 2 || rows != 1)
-       {       printf ("\nError (%s %d) : rows = %d cols = %d\n", __func__, __LINE__, rows, cols) ;
-               exit (1) ;
-               } ;
-
-       snprintf (db->filename, sizeof (db->filename), "%s", result [2]) ;
-       snprintf (db->pathname, sizeof (db->pathname), "%s", result [3]) ;
-
-       sqlite3_free_table (result) ;
-
-       return 1 ;
-} /* get_filename_pathname_by_ekey */
-
-static int
-check_file_by_ekey (REGTEST_DB * db, int ekey)
-{      SNDFILE * sndfile ;
-       SF_INFO info ;
-       char * errmsg, **result ;
-       int err, k, rows, cols, checksum ;
-
-       printf ("    %s : ", db->filename) ;
-       fflush (stdout) ;
-
-       memset (&info, 0, sizeof (info)) ;
-       sndfile = sf_open (db->pathname, SFM_READ, &info) ;
-       sf_command (sndfile, SFC_GET_LOG_INFO, db->logbuf, sizeof (db->logbuf)) ;
-       checksum = (sndfile == NULL) ? 0 : calc_checksum (sndfile, &info) ;
-       sf_close (sndfile) ;
-
-       if (sndfile == NULL)
-       {       printf ("\n\nError : Could not open '%s' : %s\n", db->pathname, sf_strerror (NULL)) ;
-               puts (db->logbuf) ;
-               exit (1) ;
-               } ;
-
-       single_quote_replace (db->logbuf) ;
-
-       snprintf (db->cmdbuf, sizeof (db->cmdbuf), "select fname,srate,frames,channels,format,"
-                       "checksum,logbuf from sndfile where ekey='%d'", ekey) ;
-
-       err = sqlite3_get_table (db->sql, db->cmdbuf, &result, &rows, &cols, &errmsg) ;
-       if (err != SQLITE_OK)
-       {       printf ("Line %d : SQL error: %s\n", __LINE__, errmsg) ;
-               puts (db->cmdbuf) ;
-               } ;
-
-       for (k = 0 ; k < cols ; k++)
-       {       if (strcmp (result [k], "fname") == 0)
-               {       if (strcmp (result [k + cols], db->filename) == 0)
-                               continue ;
-                       printf ("\n\nError : fname doesn't match : %s != %s\n", result [k + cols], db->filename) ;
-                       } ;
-
-               if (strcmp (result [k], "srate") == 0)
-               {       if (strtol (result [k + cols], NULL, 10) == info.samplerate)
-                               continue ;
-                       printf ("\n\nError : srate doesn't match : %s == %d\n", result [k + cols], info.samplerate) ;
-                       } ;
-
-               if (strcmp (result [k], "frames") == 0)
-               {       if (strtoll (result [k + cols], NULL, 10) == info.frames)
-                               continue ;
-                       printf ("\n\nError : frames doesn't match : %s == %ld\n", result [k + cols], (long) info.frames) ;
-                       } ;
-
-               if (strcmp (result [k], "channels") == 0)
-               {       if (strtol (result [k + cols], NULL, 10) == info.channels)
-                               continue ;
-                       printf ("\n\nError : channels doesn't match : %s == %d\n", result [k + cols], info.channels) ;
-                       } ;
-
-               if (strcmp (result [k], "format") == 0)
-               {       if (strtol (result [k + cols], NULL, 16) == info.format)
-                               continue ;
-                       printf ("\n\nError : format doesn't match : %s == 0x%08x\n", result [k + cols], info.format) ;
-                       } ;
-
-               if (strcmp (result [k], "checksum") == 0)
-               {       int db_val = (int) strtoll (result [k + cols], NULL, 16) ;
-
-                       if (db_val == checksum)
-                               continue ;
-                       printf ("\n\nError : checksum doesn't match : 0x%08x == 0x%08x\n", db_val, checksum) ;
-                       } ;
-
-               if (strcmp (result [k], "logbuf") == 0)
-                       continue ;
-
-               printf ("\nHere is the old logubuffer :\n\n%s\n\nand the new :\n\n%s\n\n", result [2 * cols - 1], db->logbuf) ;
-               exit (1) ;
-               } ;
-
-       sqlite3_free_table (result) ;
-
-       puts ("ok") ;
-
-       return 0 ;
-} /* check_file_by_ekey */
-
-/*==============================================================================
-*/
-
-static void
-get_filename_pathname (REGTEST_DB * db, const char *filepath)
-{      const char * cptr ;
-       int slen ;
-
-       if (filepath [0] != '/')
-       {       memset (db->pathname, 0, sizeof (db->pathname)) ;
-               if (getcwd (db->pathname, sizeof (db->pathname)) == NULL)
-               {       perror ("\ngetcwd failed") ;
-                       exit (1) ;
-                       } ;
-
-               slen = strlen (db->pathname) ;
-               db->pathname [slen ++] = '/' ;
-               snprintf (db->pathname + slen, sizeof (db->pathname) - slen, "%s", filepath) ;
-               }
-       else
-               snprintf (db->pathname, sizeof (db->pathname), "%s", filepath) ;
-
-       if ((cptr = strrchr (db->pathname, '/')) == NULL)
-       {       printf ("\nError : bad pathname %s\n", filepath) ;
-               exit (1) ;
-               } ;
-
-       snprintf (db->filename, sizeof (db->filename), "%s", cptr + 1) ;
-} /* get filename_pathname */
-
-static void
-single_quote_replace (char * buf)
-{      while ((buf = strchr (buf, '\'')) != 0)
-               buf [0] = '"' ;
-} /* single_quote_replace */
-
-static int
-count_callback (REGTEST_DB * db, int argc, char **argv, char **colname)
-{      db->count ++ ;
-
-       (void) argc ;
-       (void) argv ;
-       (void) colname ;
-       return 0 ;
-} /* count_callback */
-
-static int
-ekey_max_callback (REGTEST_DB * db, int argc, char **argv, char **unused)
-{      int ekey ;
-
-       (void) argc ;
-       (void) unused ;
-
-       ekey = strtol (argv [0], NULL, 10) ;
-       if (ekey > db->ekey_max)
-               db->ekey_max = ekey ;
-
-       return 0 ;
-} /* ekey_max_callback */
-
-static int
-callback (void *unused, int argc, char **argv, char **colname)
-{      int k ;
-
-       (void) unused ;
-
-       for (k = 0 ; k < argc ; k++)
-               printf ("%s = %s\n", colname [k], argv [k] ? argv [k] : "NULL") ;
-
-       printf ("\n") ;
-
-       return 0 ;
-} /* callback */
-
-#else
-
-int dummy (void) ;
-
-int
-dummy (void)
-{      /*
-       **      Empty dummy fnction so tha compiler doesn't winge about an
-       **      empty file.
-       */
-       return 0 ;
-} /* dummy */
-
-#endif
diff --git a/libs/libsndfile/regtest/regtest.h b/libs/libsndfile/regtest/regtest.h
deleted file mode 100644 (file)
index 567d97b..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-**     Copyright (C) 2005-2011 Erik de Castro Lopo
-**
-**     This program is free software; you can redistribute it and/or modify
-**     it under the terms of the GNU General Public License as published by
-**     the Free Software Foundation; either version 2 of the License, or
-**     (at your option) any later version.
-**
-**     This program is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-**     GNU General Public License for more details.
-**
-**     You should have received a copy of the GNU General Public License
-**     along with this program; if not, write to the Free Software
-**     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-typedef struct REG_DB_tag REG_DB ;
-
-/* In database.c */
-REG_DB * db_open (const char * db_name) ;
-
-int db_create (const char * dbname) ;
-
-int db_close (REG_DB * db_handle) ;
-
-int db_file_exists (REG_DB * db_handle, const char * filename) ;
-int db_add_file (REG_DB * db_handle, const char * filename) ;
-int db_check_file (REG_DB * db_handle, const char * filename) ;
-
-int db_list_all (REG_DB * db_handle) ;
-int db_check_all (REG_DB * db_handle) ;
-int db_del_entry (REG_DB * db_handle, const char * entry) ;
-
-/* In checksum.c */
-int calc_checksum (SNDFILE * file, const SF_INFO * info) ;
-
diff --git a/libs/libsndfile/regtest/sndfile-regtest.c b/libs/libsndfile/regtest/sndfile-regtest.c
deleted file mode 100644 (file)
index a28caa2..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
-**     Copyright (C) 2005-2011 Erik de Castro Lopo
-**
-**     This program is free software; you can redistribute it and/or modify
-**     it under the terms of the GNU General Public License as published by
-**     the Free Software Foundation; either version 2 of the License, or
-**     (at your option) any later version.
-**
-**     This program is distributed in the hope that it will be useful,
-**     but WITHOUT ANY WARRANTY; without even the implied warranty of
-**     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-**     GNU General Public License for more details.
-**
-**     You should have received a copy of the GNU General Public License
-**     along with this program; if not, write to the Free Software
-**     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <sndfile.h>
-
-#if HAVE_SQLITE3
-
-#include "regtest.h"
-
-enum
-{      OPT_ADD_FILE    = 0x0100,
-       OPT_CREATE_DB   = 0x0200,
-       OPT_DEL_ENTRY   = 0x0400,
-       OPT_LIST_ALL    = 0x0800,
-       OPT_TEST_ALL    = 0x1000,
-       OPT_VERBOSE             = 0x2000
-} ;
-
-static void print_libsndfile_version (void) ;
-
-int
-main (int argc, char * argv [])
-{      const char *db_name = "./.sndfile-regtest.db" ;
-       REG_DB *reg_db ;
-       int k, retval ;
-
-       if (argc < 2)
-       {       printf ("\nUsage message goes here.\n\n") ;
-               exit (0) ;
-               } ;
-
-       if (argc == 2 && strcmp (argv [1], "--create-db") == 0)
-               return db_create (db_name) ;
-
-       reg_db = db_open (db_name) ;
-
-       if (argc == 2)
-       {       if (strcmp (argv [1], "--list-all") == 0)
-                       return db_list_all (reg_db) ;
-
-               if (strcmp (argv [1], "--check-all") == 0)
-               {       print_libsndfile_version () ;
-                       retval = db_check_all (reg_db) ;
-                       puts ("\nDone.\n") ;
-                       return retval ;
-                       } ;
-               } ;
-
-       if (argc == 3 && strcmp (argv [1], "--del-entry") == 0)
-       {       db_del_entry (reg_db, argv [2]) ;
-               db_close (reg_db) ;
-               return 0 ;
-               } ;
-
-       if (strcmp (argv [1], "--check-file") == 0)
-       {       print_libsndfile_version () ;
-
-               for (k = 2 ; k < argc ; k++)
-                       db_check_file (reg_db, argv [k]) ;
-               db_close (reg_db) ;
-               return 0 ;
-               } ;
-
-       if (strcmp (argv [1], "--add-file") == 0)
-       {       print_libsndfile_version () ;
-
-               for (k = 2 ; k < argc ; k++)
-                       db_add_file (reg_db, argv [k]) ;
-               db_close (reg_db) ;
-               return 0 ;
-               } ;
-
-       printf ("\nError : unhandled command line args :") ;
-       for (k = 1 ; k < argc ; k++)
-               printf (" %s", argv [k]) ;
-       puts ("\n") ;
-
-       return 1 ;
-} /* main */
-
-static void
-print_libsndfile_version (void)
-{      char version [64] ;
-
-       sf_command (NULL, SFC_GET_LIB_VERSION, version, sizeof (version)) ;
-       printf ("\nsndfile-regtest : using %s\n\n", version) ;
-} /* print_lib_version */
-
-#else
-
-int
-main (void)
-{
-       puts ("\nThis program was not compiled with libsqlite3 and hence doesn't work.\n") ;
-
-       return 0 ;
-} /* main */
-
-#endif
-
diff --git a/libs/libsndfile/sndfile.pc.in b/libs/libsndfile/sndfile.pc.in
deleted file mode 100644 (file)
index 28269c1..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-
-Name: sndfile
-Description: A library for reading and writing audio files
-Requires: 
-Version: @VERSION@
-Libs: -L${libdir} -lsndfile
-Libs.private: @EXTERNAL_LIBS@
-Cflags: -I${includedir} 
diff --git a/libs/libsndfile/src/ALAC/ALACAudioTypes.h b/libs/libsndfile/src/ALAC/ALACAudioTypes.h
deleted file mode 100644 (file)
index 4d120fa..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-       File:           ALACAudioTypes.h
-*/
-
-#ifndef ALACAUDIOTYPES_H
-#define ALACAUDIOTYPES_H
-
-/* Force these Mac OS specific things to zero. */
-#define PRAGMA_STRUCT_ALIGN 0
-#define PRAGMA_STRUCT_PACKPUSH 0
-#define PRAGMA_STRUCT_PACK 0
-#define PRAGMA_ONCE 0
-#define PRAGMA_MARK 0
-
-
-#if PRAGMA_ONCE
-#pragma once
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdint.h>
-
-#include "sfendian.h"
-
-#if CPU_IS_BIG_ENDIAN == 1
-#define TARGET_RT_BIG_ENDIAN 1
-#else
-#define TARGET_RT_BIG_ENDIAN 0
-#endif
-
-#define kChannelAtomSize 12
-
-enum
-{
-    kALAC_UnimplementedError   = -4,
-    kALAC_FileNotFoundError    = -43,
-    kALAC_ParamError           = -50,
-    kALAC_MemFullError         = -108,
-    fALAC_FrameLengthError     = -666,
-};
-
-enum
-{
-    kALACFormatAppleLossless = MAKE_MARKER ('a', 'l', 'a', 'c'),
-    kALACFormatLinearPCM = MAKE_MARKER ('l', 'p', 'c', 'm')
-};
-
-enum
-{
-    kALACMaxChannels   = 8,
-    kALACMaxEscapeHeaderBytes = 8,
-    kALACMaxSearches   = 16,
-    kALACMaxCoefs              = 16,
-    kALACDefaultFramesPerPacket = 4096
-};
-
-typedef uint32_t ALACChannelLayoutTag;
-
-enum
-{
-    kALACFormatFlagIsFloat                     = (1 << 0),     // 0x1
-    kALACFormatFlagIsBigEndian                 = (1 << 1),     // 0x2
-    kALACFormatFlagIsSignedInteger             = (1 << 2),     // 0x4
-    kALACFormatFlagIsPacked                    = (1 << 3),     // 0x8
-    kALACFormatFlagIsAlignedHigh               = (1 << 4),     // 0x10
-};
-
-enum
-{
-#if TARGET_RT_BIG_ENDIAN
-    kALACFormatFlagsNativeEndian       = kALACFormatFlagIsBigEndian
-#else
-    kALACFormatFlagsNativeEndian       = 0
-#endif
-};
-
-// this is required to be an IEEE 64bit float
-typedef double alac_float64_t;
-
-// These are the Channel Layout Tags used in the Channel Layout Info portion of the ALAC magic cookie
-enum
-{
-    kALACChannelLayoutTag_Mono          = (100<<16) | 1,    // C
-    kALACChannelLayoutTag_Stereo        = (101<<16) | 2,       // L R
-    kALACChannelLayoutTag_MPEG_3_0_B    = (113<<16) | 3,       // C L R
-    kALACChannelLayoutTag_MPEG_4_0_B    = (116<<16) | 4,       // C L R Cs
-    kALACChannelLayoutTag_MPEG_5_0_D    = (120<<16) | 5,    // C L R Ls Rs
-    kALACChannelLayoutTag_MPEG_5_1_D    = (124<<16) | 6,       // C L R Ls Rs LFE
-    kALACChannelLayoutTag_AAC_6_1       = (142<<16) | 7,       // C L R Ls Rs Cs LFE
-    kALACChannelLayoutTag_MPEG_7_1_B   = (127<<16) | 8     // C Lc Rc L R Ls Rs LFE    (doc: IS-13818-7 MPEG2-AAC)
-};
-
-// ALAC currently only utilizes these channels layouts. There is a one for one correspondance between a
-// given number of channels and one of these layout tags
-static const ALACChannelLayoutTag      ALACChannelLayoutTags[kALACMaxChannels] =
-{
-    kALACChannelLayoutTag_Mono,         // C
-    kALACChannelLayoutTag_Stereo,              // L R
-    kALACChannelLayoutTag_MPEG_3_0_B,  // C L R
-    kALACChannelLayoutTag_MPEG_4_0_B,  // C L R Cs
-    kALACChannelLayoutTag_MPEG_5_0_D,  // C L R Ls Rs
-    kALACChannelLayoutTag_MPEG_5_1_D,  // C L R Ls Rs LFE
-    kALACChannelLayoutTag_AAC_6_1,             // C L R Ls Rs Cs LFE
-    kALACChannelLayoutTag_MPEG_7_1_B   // C Lc Rc L R Ls Rs LFE    (doc: IS-13818-7 MPEG2-AAC)
-};
-
-// AudioChannelLayout from CoreAudioTypes.h. We never need the AudioChannelDescription so we remove it
-struct ALACAudioChannelLayout
-{
-    ALACChannelLayoutTag          mChannelLayoutTag;
-    uint32_t                      mChannelBitmap;
-    uint32_t                      mNumberChannelDescriptions;
-};
-typedef struct ALACAudioChannelLayout ALACAudioChannelLayout;
-
-struct AudioFormatDescription
-{
-    alac_float64_t mSampleRate;
-    uint32_t  mFormatID;
-    uint32_t  mFormatFlags;
-    uint32_t  mBytesPerPacket;
-    uint32_t  mFramesPerPacket;
-    uint32_t  mBytesPerFrame;
-    uint32_t  mChannelsPerFrame;
-    uint32_t  mBitsPerChannel;
-    uint32_t  mReserved;
-};
-typedef struct AudioFormatDescription  AudioFormatDescription;
-
-/* Lossless Definitions */
-
-enum
-{
-       kALACCodecFormat                = MAKE_MARKER ('a', 'l', 'a', 'c'),
-       kALACVersion                    = 0,
-       kALACCompatibleVersion  = kALACVersion,
-       kALACDefaultFrameSize   = 4096
-};
-
-// note: this struct is wrapped in an 'alac' atom in the sample description extension area
-// note: in QT movies, it will be further wrapped in a 'wave' atom surrounded by 'frma' and 'term' atoms
-typedef struct ALACSpecificConfig
-{
-       uint32_t                                frameLength;
-       uint8_t                                 compatibleVersion;
-       uint8_t                                 bitDepth;                                                       // max 32
-       uint8_t                                 pb;                                                                     // 0 <= pb <= 255
-       uint8_t                                 mb;
-       uint8_t                                 kb;
-       uint8_t                                 numChannels;
-       uint16_t                                maxRun;
-       uint32_t                                maxFrameBytes;
-       uint32_t                                avgBitRate;
-       uint32_t                                sampleRate;
-
-} ALACSpecificConfig;
-
-
-// The AudioChannelLayout atom type is not exposed yet so define it here
-enum
-{
-       AudioChannelLayoutAID = MAKE_MARKER ('c', 'h', 'a', 'n')
-};
-
-#if PRAGMA_STRUCT_ALIGN
-    #pragma options align=reset
-#elif PRAGMA_STRUCT_PACKPUSH
-    #pragma pack(pop)
-#elif PRAGMA_STRUCT_PACK
-    #pragma pack()
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ALACAUDIOTYPES_H */
diff --git a/libs/libsndfile/src/ALAC/ALACBitUtilities.c b/libs/libsndfile/src/ALAC/ALACBitUtilities.c
deleted file mode 100644 (file)
index f385daf..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*=============================================================================
-    File:              ALACBitUtilities.c
-
-       $NoKeywords: $
-=============================================================================*/
-
-#include <stdio.h>
-#include "ALACBitUtilities.h"
-
-#define PRAGMA_MARK 0
-
-// BitBufferInit
-//
-void BitBufferInit( BitBuffer * bits, uint8_t * buffer, uint32_t byteSize )
-{
-       bits->cur               = buffer;
-       bits->end               = bits->cur + byteSize;
-       bits->bitIndex  = 0;
-       bits->byteSize  = byteSize;
-}
-
-// BitBufferRead
-//
-uint32_t BitBufferRead( BitBuffer * bits, uint8_t numBits )
-{
-       uint32_t                returnBits;
-
-       //Assert( numBits <= 16 );
-
-       returnBits = ((uint32_t)bits->cur[0] << 16) | ((uint32_t)bits->cur[1] << 8) | ((uint32_t)bits->cur[2]);
-       returnBits = returnBits << bits->bitIndex;
-       returnBits &= 0x00FFFFFF;
-
-       bits->bitIndex += numBits;
-
-       returnBits = returnBits >> (24 - numBits);
-
-       bits->cur               += (bits->bitIndex >> 3);
-       bits->bitIndex  &= 7;
-
-       //Assert( bits->cur <= bits->end );
-
-       return returnBits;
-}
-
-// BitBufferReadSmall
-//
-// Reads up to 8 bits
-uint8_t BitBufferReadSmall( BitBuffer * bits, uint8_t numBits )
-{
-       uint16_t                returnBits;
-
-       //Assert( numBits <= 8 );
-
-       returnBits = (bits->cur[0] << 8) | bits->cur[1];
-       returnBits = returnBits << bits->bitIndex;
-
-       bits->bitIndex += numBits;
-
-       returnBits = returnBits >> (16 - numBits);
-
-       bits->cur               += (bits->bitIndex >> 3);
-       bits->bitIndex  &= 7;
-
-       //Assert( bits->cur <= bits->end );
-
-       return (uint8_t)returnBits;
-}
-
-// BitBufferReadOne
-//
-// Reads one byte
-uint8_t BitBufferReadOne( BitBuffer * bits )
-{
-       uint8_t         returnBits;
-
-       returnBits = (bits->cur[0] >> (7 - bits->bitIndex)) & 1;
-
-       bits->bitIndex++;
-
-       bits->cur               += (bits->bitIndex >> 3);
-       bits->bitIndex  &= 7;
-
-       //Assert( bits->cur <= bits->end );
-
-       return returnBits;
-}
-
-// BitBufferPeek
-//
-uint32_t BitBufferPeek( BitBuffer * bits, uint8_t numBits )
-{
-       return ((((((uint32_t) bits->cur[0] << 16) | ((uint32_t) bits->cur[1] << 8) |
-                       ((uint32_t) bits->cur[2])) << bits->bitIndex) & 0x00FFFFFF) >> (24 - numBits));
-}
-
-// BitBufferPeekOne
-//
-uint32_t BitBufferPeekOne( BitBuffer * bits )
-{
-       return ((bits->cur[0] >> (7 - bits->bitIndex)) & 1);
-}
-
-// BitBufferUnpackBERSize
-//
-uint32_t BitBufferUnpackBERSize( BitBuffer * bits )
-{
-       uint32_t                size;
-       uint8_t         tmp;
-
-       for ( size = 0, tmp = 0x80u; tmp &= 0x80u; size = (size << 7u) | (tmp & 0x7fu) )
-               tmp = (uint8_t) BitBufferReadSmall( bits, 8 );
-
-       return size;
-}
-
-// BitBufferGetPosition
-//
-uint32_t BitBufferGetPosition( BitBuffer * bits )
-{
-       uint8_t *               begin;
-
-       begin = bits->end - bits->byteSize;
-
-       return ((uint32_t)(bits->cur - begin) * 8) + bits->bitIndex;
-}
-
-// BitBufferByteAlign
-//
-void BitBufferByteAlign( BitBuffer * bits, int32_t addZeros )
-{
-       // align bit buffer to next byte boundary, writing zeros if requested
-       if ( bits->bitIndex == 0 )
-               return;
-
-       if ( addZeros )
-               BitBufferWrite( bits, 0, 8 - bits->bitIndex );
-       else
-               BitBufferAdvance( bits, 8 - bits->bitIndex );
-}
-
-// BitBufferAdvance
-//
-void BitBufferAdvance( BitBuffer * bits, uint32_t numBits )
-{
-       if ( numBits )
-       {
-               bits->bitIndex += numBits;
-               bits->cur += (bits->bitIndex >> 3);
-               bits->bitIndex &= 7;
-       }
-}
-
-// BitBufferRewind
-//
-void BitBufferRewind( BitBuffer * bits, uint32_t numBits )
-{
-       uint32_t        numBytes;
-
-       if ( numBits == 0 )
-               return;
-
-       if ( bits->bitIndex >= numBits )
-       {
-               bits->bitIndex -= numBits;
-               return;
-       }
-
-       numBits -= bits->bitIndex;
-       bits->bitIndex = 0;
-
-       numBytes        = numBits / 8;
-       numBits         = numBits % 8;
-
-       bits->cur -= numBytes;
-
-       if ( numBits > 0 )
-       {
-               bits->bitIndex = 8 - numBits;
-               bits->cur--;
-       }
-
-       if ( bits->cur < (bits->end - bits->byteSize) )
-       {
-               //DebugCMsg("BitBufferRewind: Rewound too far.");
-
-               bits->cur               = (bits->end - bits->byteSize);
-               bits->bitIndex  = 0;
-       }
-}
-
-// BitBufferWrite
-//
-void BitBufferWrite( BitBuffer * bits, uint32_t bitValues, uint32_t numBits )
-{
-       uint32_t                                invBitIndex;
-
-       RequireAction( bits != NULL, return; );
-       RequireActionSilent( numBits > 0, return; );
-
-       invBitIndex = 8 - bits->bitIndex;
-
-       while ( numBits > 0 )
-       {
-               uint32_t                tmp;
-               uint8_t         shift;
-               uint8_t         mask;
-               uint32_t                curNum;
-
-               curNum = MIN( invBitIndex, numBits );
-
-               tmp = bitValues >> (numBits - curNum);
-
-               shift  = (uint8_t)(invBitIndex - curNum);
-               mask   = 0xffu >> (8 - curNum);         // must be done in two steps to avoid compiler sequencing ambiguity
-               mask <<= shift;
-
-               bits->cur[0] = (bits->cur[0] & ~mask) | (((uint8_t) tmp << shift)  & mask);
-               numBits -= curNum;
-
-               // increment to next byte if need be
-               invBitIndex -= curNum;
-               if ( invBitIndex == 0 )
-               {
-                       invBitIndex = 8;
-                       bits->cur++;
-               }
-       }
-
-       bits->bitIndex = 8 - invBitIndex;
-}
-
-void   BitBufferReset( BitBuffer * bits )
-//void BitBufferInit( BitBuffer * bits, uint8_t * buffer, uint32_t byteSize )
-{
-       bits->cur               = bits->end - bits->byteSize;
-    bits->bitIndex     = 0;
-}
-
-#if PRAGMA_MARK
-#pragma mark -
-#endif
diff --git a/libs/libsndfile/src/ALAC/ALACBitUtilities.h b/libs/libsndfile/src/ALAC/ALACBitUtilities.h
deleted file mode 100644 (file)
index 5d3a4c1..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*=============================================================================
-    File:              ALACBitUtilities.h
-
-       $NoKeywords: $
-=============================================================================*/
-
-#ifndef __ALACBITUTILITIES_H
-#define __ALACBITUTILITIES_H
-
-#include <stdint.h>
-
-#ifndef MIN
-#define MIN(x, y)                      ( (x)<(y) ?(x) :(y) )
-#endif //MIN
-#ifndef MAX
-#define MAX(x, y)                      ( (x)>(y) ?(x): (y) )
-#endif //MAX
-
-#define RequireAction(condition, action)                       if (!(condition)) { action }
-#define RequireActionSilent(condition, action)                 if (!(condition)) { action }
-#define RequireNoErr(condition, action)                        if ((condition)) { action }
-
-enum
-{
-    ALAC_noErr = 0
-};
-
-
-typedef enum
-{
-
-    ID_SCE = 0,                                                /* Single Channel Element   */
-    ID_CPE = 1,                                                /* Channel Pair Element     */
-    ID_CCE = 2,                                                /* Coupling Channel Element */
-    ID_LFE = 3,                                                /* LFE Channel Element      */
-    ID_DSE = 4,                                                /* not yet supported        */
-    ID_PCE = 5,
-    ID_FIL = 6,
-    ID_END = 7
-} ELEMENT_TYPE;
-
-// types
-typedef struct BitBuffer
-{
-       uint8_t *               cur;
-       uint8_t *               end;
-       uint32_t                bitIndex;
-       uint32_t                byteSize;
-
-} BitBuffer;
-
-/*
-       BitBuffer routines
-       - these routines take a fixed size buffer and read/write to it
-       - bounds checking must be done by the client
-*/
-void   BitBufferInit( BitBuffer * bits, uint8_t * buffer, uint32_t byteSize );
-uint32_t       BitBufferRead( BitBuffer * bits, uint8_t numBits );   // note: cannot read more than 16 bits at a time
-uint8_t        BitBufferReadSmall( BitBuffer * bits, uint8_t numBits );
-uint8_t        BitBufferReadOne( BitBuffer * bits );
-uint32_t       BitBufferPeek( BitBuffer * bits, uint8_t numBits );   // note: cannot read more than 16 bits at a time
-uint32_t       BitBufferPeekOne( BitBuffer * bits );
-uint32_t       BitBufferUnpackBERSize( BitBuffer * bits );
-uint32_t       BitBufferGetPosition( BitBuffer * bits );
-void   BitBufferByteAlign( BitBuffer * bits, int32_t addZeros );
-void   BitBufferAdvance( BitBuffer * bits, uint32_t numBits );
-void   BitBufferRewind( BitBuffer * bits, uint32_t numBits );
-void   BitBufferWrite( BitBuffer * bits, uint32_t value, uint32_t numBits );
-void   BitBufferReset( BitBuffer * bits);
-
-#endif /* __BITUTILITIES_H */
diff --git a/libs/libsndfile/src/ALAC/ALACDecoder.h b/libs/libsndfile/src/ALAC/ALACDecoder.h
deleted file mode 100644 (file)
index baebd4f..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-       File:           ALACDecoder.h
-*/
-
-#ifndef _ALACDECODER_H
-#define _ALACDECODER_H
-
-#include <stdint.h>
-
-#include "ALACAudioTypes.h"
-
-struct BitBuffer;
-
-class ALACDecoder
-{
-       public:
-               ALACDecoder();
-               ~ALACDecoder();
-
-               int32_t Init( void * inMagicCookie, uint32_t inMagicCookieSize );
-               int32_t Decode( struct BitBuffer * bits, uint8_t * sampleBuffer, uint32_t numSamples, uint32_t numChannels, uint32_t * outNumSamples );
-
-       public:
-               // decoding parameters (public for use in the analyzer)
-               ALACSpecificConfig              mConfig;
-
-       protected:
-               int32_t FillElement( struct BitBuffer * bits );
-               int32_t DataStreamElement( struct BitBuffer * bits );
-
-               uint16_t                                        mActiveElements;
-
-               // decoding buffers
-               int32_t *                               mMixBufferU;
-               int32_t *                               mMixBufferV;
-               int32_t *                               mPredictor;
-               uint16_t *                              mShiftBuffer;   // note: this points to mPredictor's memory but different
-                                                                                               //               variable for clarity and type difference
-};
-
-#endif /* _ALACDECODER_H */
diff --git a/libs/libsndfile/src/ALAC/ALACEncoder.h b/libs/libsndfile/src/ALAC/ALACEncoder.h
deleted file mode 100644 (file)
index 75a0a43..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-       File:           ALACEncoder.h
-*/
-
-#pragma once
-
-#include <stdint.h>
-
-#include "ALACAudioTypes.h"
-
-
-struct BitBuffer;
-
-class ALACEncoder
-{
-       public:
-               ALACEncoder();
-               virtual ~ALACEncoder();
-
-               virtual int32_t Encode(AudioFormatDescription theInputFormat, AudioFormatDescription theOutputFormat,
-                                   unsigned char * theReadBuffer, unsigned char * theWriteBuffer, int32_t * ioNumBytes);
-               virtual int32_t Finish( );
-
-               void                            SetFastMode( bool fast ) { mFastMode = fast; };
-
-               // this must be called *before* InitializeEncoder()
-               void                            SetFrameSize( uint32_t frameSize ) { mFrameSize = frameSize; };
-
-               void                            GetConfig( ALACSpecificConfig & config );
-        uint32_t            GetMagicCookieSize(uint32_t inNumChannels);
-        void                           GetMagicCookie( void * config, uint32_t * ioSize );
-
-        virtual int32_t        InitializeEncoder(AudioFormatDescription theOutputFormat);
-
-    protected:
-               virtual void            GetSourceFormat( const AudioFormatDescription * source, AudioFormatDescription * output );
-
-               int32_t                 EncodeStereo( struct BitBuffer * bitstream, void * input, uint32_t stride, uint32_t channelIndex, uint32_t numSamples );
-               int32_t                 EncodeStereoFast( struct BitBuffer * bitstream, void * input, uint32_t stride, uint32_t channelIndex, uint32_t numSamples );
-               int32_t                 EncodeStereoEscape( struct BitBuffer * bitstream, void * input, uint32_t stride, uint32_t numSamples );
-               int32_t                 EncodeMono( struct BitBuffer * bitstream, void * input, uint32_t stride, uint32_t channelIndex, uint32_t numSamples );
-
-
-               // ALAC encoder parameters
-               int16_t                                 mBitDepth;
-               bool                                    mFastMode;
-
-               // encoding state
-               int16_t                                 mLastMixRes[kALACMaxChannels];
-
-               // encoding buffers
-               int32_t *                               mMixBufferU;
-               int32_t *                               mMixBufferV;
-               int32_t *                               mPredictorU;
-               int32_t *                               mPredictorV;
-               uint16_t *                              mShiftBufferUV;
-
-               uint8_t *                                       mWorkBuffer;
-
-               // per-channel coefficients buffers
-               int16_t                                 mCoefsU[kALACMaxChannels][kALACMaxSearches][kALACMaxCoefs];
-               int16_t                                 mCoefsV[kALACMaxChannels][kALACMaxSearches][kALACMaxCoefs];
-
-               // encoding statistics
-               uint32_t                                        mTotalBytesGenerated;
-               uint32_t                                        mAvgBitRate;
-               uint32_t                                        mMaxFrameBytes;
-        uint32_t                  mFrameSize;
-        uint32_t                  mMaxOutputBytes;
-        uint32_t                  mNumChannels;
-        uint32_t                  mOutputSampleRate;
-};
diff --git a/libs/libsndfile/src/ALAC/EndianPortable.h b/libs/libsndfile/src/ALAC/EndianPortable.h
deleted file mode 100644 (file)
index d0b1327..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
-** Copyright (C) 2013 Erik de Castro Lopo <erikd@mega-nerd.com>
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-//
-//  EndianPortable.h
-//
-//  Copyright 2011 Apple Inc. All rights reserved.
-//
-
-#ifndef _EndianPortable_h
-#define _EndianPortable_h
-
-#include <sfendian.h>
-
-#define Swap16NtoB(x)  H2BE_16(x)
-#define Swap16BtoN(x)  BE2H_16(x)
-
-#define Swap32NtoB(x)  H2BE_32(x)
-#define Swap32BtoN(x)  BE2H_32(x)
-
-#endif
diff --git a/libs/libsndfile/src/ALAC/LICENSE b/libs/libsndfile/src/ALAC/LICENSE
deleted file mode 100644 (file)
index 7d85954..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-Apache License
-
-Version 2.0, January 2004
-
-http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
-"License" shall mean the terms and conditions for use, reproduction, and
-distribution as defined by Sections 1 through 9 of this document.
-
-"Licensor" shall mean the copyright owner or entity authorized by the
-copyright owner that is granting the License.
-
-"Legal Entity" shall mean the union of the acting entity and all other
-entities that control, are controlled by, or are under common control
-with that entity. For the purposes of this definition, "control" means
-(i) the power, direct or indirect, to cause the direction or management
-of such entity, whether by contract or otherwise, or (ii) ownership
-of fifty percent (50%) or more of the outstanding shares, or (iii)
-beneficial ownership of such entity.
-
-"You" (or "Your") shall mean an individual or Legal Entity exercising
-permissions granted by this License.
-
-"Source" form shall mean the preferred form for making modifications,
-including but not limited to software source code, documentation source,
-and configuration files.
-
-"Object" form shall mean any form resulting from mechanical
-transformation or translation of a Source form, including but not
-limited to compiled object code, generated documentation, and
-conversions to other media types.
-
-"Work" shall mean the work of authorship, whether in Source or Object
-form, made available under the License, as indicated by a copyright
-notice that is included in or attached to the work (an example is
-provided in the Appendix below).
-
-"Derivative Works" shall mean any work, whether in Source or Object
-form, that is based on (or derived from) the Work and for which the
-editorial revisions, annotations, elaborations, or other modifications
-represent, as a whole, an original work of authorship. For the purposes
-of this License, Derivative Works shall not include works that remain
-separable from, or merely link (or bind by name) to the interfaces of,
-the Work and Derivative Works thereof.
-
-"Contribution" shall mean any work of authorship, including the original
-version of the Work and any modifications or additions to that Work or
-Derivative Works thereof, that is intentionally submitted to Licensor
-for inclusion in the Work by the copyright owner or by an individual
-or Legal Entity authorized to submit on behalf of the copyright owner.
-For the purposes of this definition, "submitted" means any form of
-electronic, verbal, or written communication sent to the Licensor
-or its representatives, including but not limited to communication
-on electronic mailing lists, source code control systems, and issue
-tracking systems that are managed by, or on behalf of, the Licensor
-for the purpose of discussing and improving the Work, but excluding
-communication that is conspicuously marked or otherwise designated in
-writing by the copyright owner as "Not a Contribution."
-
-"Contributor" shall mean Licensor and any individual or Legal Entity
-on behalf of whom a Contribution has been received by Licensor and
-subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions
-of this License, each Contributor hereby grants to You a perpetual,
-worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-copyright license to reproduce, prepare Derivative Works of, publicly
-display, publicly perform, sublicense, and distribute the Work and such
-Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
-this License, each Contributor hereby grants to You a perpetual,
-worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except
-as stated in this section) patent license to make, have made, use,
-offer to sell, sell, import, and otherwise transfer the Work, where
-such license applies only to those patent claims licensable by such
-Contributor that are necessarily infringed by their Contribution(s)
-alone or by combination of their Contribution(s) with the Work to which
-such Contribution(s) was submitted. If You institute patent litigation
-against any entity (including a cross-claim or counterclaim in a
-lawsuit) alleging that the Work or a Contribution incorporated within
-the Work constitutes direct or contributory patent infringement, then
-any patent licenses granted to You under this License for that Work
-shall terminate as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
-Work or Derivative Works thereof in any medium, with or without
-modifications, and in Source or Object form, provided that You meet the
-following conditions:
-
-You must give any other recipients of the Work or Derivative Works a
-copy of this License; and
-
-You must cause any modified files to carry prominent notices stating
-that You changed the files; and
-
-You must retain, in the Source form of any Derivative Works that You
-distribute, all copyright, patent, trademark, and attribution notices
-from the Source form of the Work, excluding those notices that do not
-pertain to any part of the Derivative Works; and
-
-If the Work includes a "NOTICE" text file as part of its distribution,
-then any Derivative Works that You distribute must include a readable
-copy of the attribution notices contained within such NOTICE file,
-excluding those notices that do not pertain to any part of the
-Derivative Works, in at least one of the following places: within a
-NOTICE text file distributed as part of the Derivative Works; within
-the Source form or documentation, if provided along with the Derivative
-Works; or, within a display generated by the Derivative Works, if and
-wherever such third-party notices normally appear. The contents of the
-NOTICE file are for informational purposes only and do not modify the
-License. You may add Your own attribution notices within Derivative
-Works that You distribute, alongside or as an addendum to the NOTICE
-text from the Work, provided that such additional attribution notices
-cannot be construed as modifying the License. You may add Your own
-copyright statement to Your modifications and may provide additional
-or different license terms and conditions for use, reproduction, or
-distribution of Your modifications, or for any such Derivative Works as
-a whole, provided Your use, reproduction, and distribution of the Work
-otherwise complies with the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
-any Contribution intentionally submitted for inclusion in the Work by
-You to the Licensor shall be under the terms and conditions of this
-License, without any additional terms or conditions. Notwithstanding
-the above, nothing herein shall supersede or modify the terms of any
-separate license agreement you may have executed with Licensor regarding
-such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
-names, trademarks, service marks, or product names of the Licensor,
-except as required for reasonable and customary use in describing the
-origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or agreed
-to in writing, Licensor provides the Work (and each Contributor
-provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR
-CONDITIONS OF ANY KIND, either express or implied, including, without
-limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT,
-MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
-solely responsible for determining the appropriateness of using or
-redistributing the Work and assume any risks associated with Your
-exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
-whether in tort (including negligence), contract, or otherwise, unless
-required by applicable law (such as deliberate and grossly negligent
-acts) or agreed to in writing, shall any Contributor be liable to You
-for damages, including any direct, indirect, special, incidental, or
-consequential damages of any character arising as a result of this
-License or out of the use or inability to use the Work (including but
-not limited to damages for loss of goodwill, work stoppage, computer
-failure or malfunction, or any and all other commercial damages or
-losses), even if such Contributor has been advised of the possibility of
-such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing the
-Work or Derivative Works thereof, You may choose to offer, and charge a
-fee for, acceptance of support, warranty, indemnity, or other liability
-obligations and/or rights consistent with this License. However, in
-accepting such obligations, You may act only on Your own behalf and
-on Your sole responsibility, not on behalf of any other Contributor,
-and only if You agree to indemnify, defend, and hold each Contributor
-harmless for any liability incurred by, or claims asserted against, such
-Contributor by reason of your accepting any such warranty or additional
-liability.
diff --git a/libs/libsndfile/src/ALAC/ag_dec.c b/libs/libsndfile/src/ALAC/ag_dec.c
deleted file mode 100644 (file)
index 81c18dc..0000000
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-       File:           ag_dec.c
-
-       Contains:   Adaptive Golomb decode routines.
-
-       Copyright:      (c) 2001-2011 Apple, Inc.
-*/
-
-#include "aglib.h"
-#include "ALACBitUtilities.h"
-#include "ALACAudioTypes.h"
-
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#define CODE_TO_LONG_MAXBITS   32
-#define N_MAX_MEAN_CLAMP               0xffff
-#define N_MEAN_CLAMP_VAL               0xffff
-#define REPORT_VAL  40
-
-#if __GNUC__
-#define ALWAYS_INLINE          __attribute__((always_inline))
-#else
-#define ALWAYS_INLINE
-#endif
-
-/*     And on the subject of the CodeWarrior x86 compiler and inlining, I reworked a lot of this
-       to help the compiler out.   In many cases this required manual inlining or a macro.  Sorry
-       if it is ugly but the performance gains are well worth it.
-       - WSK 5/19/04
-*/
-
-void set_standard_ag_params(AGParamRecPtr params, uint32_t fullwidth, uint32_t sectorwidth)
-{
-       /* Use
-               fullwidth = sectorwidth = numOfSamples, for analog 1-dimensional type-short data,
-               but use
-               fullwidth = full image width, sectorwidth = sector (patch) width
-               for such as image (2-dim.) data.
-       */
-       set_ag_params( params, MB0, PB0, KB0, fullwidth, sectorwidth, MAX_RUN_DEFAULT );
-}
-
-void set_ag_params(AGParamRecPtr params, uint32_t m, uint32_t p, uint32_t k, uint32_t f, uint32_t s, uint32_t maxrun)
-{
-       params->mb = params->mb0 = m;
-       params->pb = p;
-       params->kb = k;
-       params->wb = (1u<<params->kb)-1;
-       params->qb = QB-params->pb;
-       params->fw = f;
-       params->sw = s;
-       params->maxrun = maxrun;
-}
-
-#if PRAGMA_MARK
-#pragma mark -
-#endif
-
-
-// note: implementing this with some kind of "count leading zeros" assembly is a big performance win
-static inline int32_t lead( int32_t m )
-{
-       long j;
-       unsigned long c = (1ul << 31);
-
-       for(j=0; j < 32; j++)
-       {
-               if((c & m) != 0)
-                       break;
-               c >>= 1;
-       }
-       return (j);
-}
-
-#define arithmin(a, b) ((a) < (b) ? (a) : (b))
-
-static inline int32_t ALWAYS_INLINE lg3a( int32_t x)
-{
-    int32_t result;
-
-    x += 3;
-    result = lead(x);
-
-    return 31 - result;
-}
-
-static inline uint32_t ALWAYS_INLINE read32bit( uint8_t * buffer )
-{
-       // embedded CPUs typically can't read unaligned 32-bit words so just read the bytes
-       uint32_t                value;
-
-       value = ((uint32_t)buffer[0] << 24) | ((uint32_t)buffer[1] << 16) |
-                        ((uint32_t)buffer[2] << 8) | (uint32_t)buffer[3];
-       return value;
-
-}
-
-#if PRAGMA_MARK
-#pragma mark -
-#endif
-
-#define get_next_fromlong(inlong, suff)                ((inlong) >> (32 - (suff)))
-
-
-static inline uint32_t ALWAYS_INLINE
-getstreambits( uint8_t *in, int32_t bitoffset, int32_t numbits )
-{
-       uint32_t        load1, load2;
-       uint32_t        byteoffset = bitoffset / 8;
-       uint32_t        result;
-
-       //Assert( numbits <= 32 );
-
-       load1 = read32bit( in + byteoffset );
-
-       if ( (numbits + (bitoffset & 0x7)) > 32)
-       {
-               int32_t load2shift;
-
-               result = load1 << (bitoffset & 0x7);
-               load2 = (uint32_t) in[byteoffset+4];
-               load2shift = (8-(numbits + (bitoffset & 0x7)-32));
-               load2 >>= load2shift;
-               result >>= (32-numbits);
-               result |= load2;
-       }
-       else
-       {
-               result = load1 >> (32-numbits-(bitoffset & 7));
-       }
-
-       // a shift of >= "the number of bits in the type of the value being shifted" results in undefined
-       // behavior so don't try to shift by 32
-       if ( numbits != (sizeof(result) * 8) )
-               result &= ~(0xfffffffful << numbits);
-
-       return result;
-}
-
-
-static inline int32_t dyn_get(unsigned char *in, uint32_t *bitPos, uint32_t m, uint32_t k)
-{
-    uint32_t   tempbits = *bitPos;
-    uint32_t           result;
-    uint32_t           pre = 0, v;
-    uint32_t           streamlong;
-
-       streamlong = read32bit( in + (tempbits >> 3) );
-    streamlong <<= (tempbits & 7);
-
-    /* find the number of bits in the prefix */
-    {
-        uint32_t       notI = ~streamlong;
-       pre = lead( notI);
-    }
-
-    if(pre >= MAX_PREFIX_16)
-    {
-        pre = MAX_PREFIX_16;
-        tempbits += pre;
-        streamlong <<= pre;
-        result = get_next_fromlong(streamlong,MAX_DATATYPE_BITS_16);
-        tempbits += MAX_DATATYPE_BITS_16;
-
-    }
-    else
-    {
-        // all of the bits must fit within the long we have loaded
-        //Assert(pre+1+k <= 32);
-
-        tempbits += pre;
-        tempbits += 1;
-        streamlong <<= pre+1;
-        v = get_next_fromlong(streamlong, k);
-        tempbits += k;
-
-        result = pre*m + v-1;
-
-        if(v<2) {
-            result -= (v-1);
-            tempbits -= 1;
-        }
-    }
-
-    *bitPos = tempbits;
-    return result;
-}
-
-
-static inline int32_t dyn_get_32bit( uint8_t * in, uint32_t * bitPos, int32_t m, int32_t k, int32_t maxbits )
-{
-       uint32_t        tempbits = *bitPos;
-       uint32_t                v;
-       uint32_t                streamlong;
-       uint32_t                result;
-
-       streamlong = read32bit( in + (tempbits >> 3) );
-       streamlong <<= (tempbits & 7);
-
-       /* find the number of bits in the prefix */
-       {
-               uint32_t notI = ~streamlong;
-               result = lead( notI);
-       }
-
-       if(result >= MAX_PREFIX_32)
-       {
-               result = getstreambits(in, tempbits+MAX_PREFIX_32, maxbits);
-               tempbits += MAX_PREFIX_32 + maxbits;
-       }
-       else
-       {
-               /* all of the bits must fit within the long we have loaded*/
-               //Assert(k<=14);
-               //Assert(result<MAX_PREFIX_32);
-               //Assert(result+1+k <= 32);
-
-               tempbits += result;
-               tempbits += 1;
-
-               if (k != 1)
-               {
-                       streamlong <<= result+1;
-                       v = get_next_fromlong(streamlong, k);
-                       tempbits += k;
-                       tempbits -= 1;
-                       result = result*m;
-
-                       if(v>=2)
-                       {
-                               result += (v-1);
-                               tempbits += 1;
-                       }
-               }
-       }
-
-       *bitPos = tempbits;
-
-       return result;
-}
-
-int32_t dyn_decomp( AGParamRecPtr params, BitBuffer * bitstream, int32_t * pc, int32_t numSamples, int32_t maxSize, uint32_t * outNumBits )
-{
-    uint8_t            *in;
-    int32_t                    *outPtr = pc;
-    uint32_t   bitPos, startPos, maxPos;
-    uint32_t           j, m, k, n, c, mz;
-    int32_t                    del, zmode;
-    uint32_t   mb;
-    uint32_t   pb_local = params->pb;
-    uint32_t   kb_local = params->kb;
-    uint32_t   wb_local = params->wb;
-    int32_t                            status;
-
-       RequireAction( (bitstream != NULL) && (pc != NULL) && (outNumBits != NULL), return kALAC_ParamError; );
-       *outNumBits = 0;
-
-       in = bitstream->cur;
-       startPos = bitstream->bitIndex;
-       maxPos = bitstream->byteSize * 8;
-       bitPos = startPos;
-
-    mb = params->mb0;
-    zmode = 0;
-
-    c = 0;
-       status = ALAC_noErr;
-
-    while (c < (uint32_t) numSamples)
-    {
-               // bail if we've run off the end of the buffer
-       RequireAction( bitPos < maxPos, status = kALAC_ParamError; goto Exit; );
-
-        m = (mb)>>QBSHIFT;
-        k = lg3a(m);
-
-        k = arithmin(k, kb_local);
-        m = (1<<k)-1;
-
-               n = dyn_get_32bit( in, &bitPos, m, k, maxSize );
-
-        // least significant bit is sign bit
-        {
-               uint32_t        ndecode = n + zmode;
-            int32_t            multiplier = (- (ndecode&1));
-
-            multiplier |= 1;
-            del = ((ndecode+1) >> 1) * (multiplier);
-        }
-
-        *outPtr++ = del;
-
-        c++;
-
-        mb = pb_local*(n+zmode) + mb - ((pb_local*mb)>>QBSHIFT);
-
-               // update mean tracking
-               if (n > N_MAX_MEAN_CLAMP)
-                       mb = N_MEAN_CLAMP_VAL;
-
-        zmode = 0;
-
-        if (((mb << MMULSHIFT) < QB) && (c < (uint32_t) numSamples))
-        {
-            zmode = 1;
-            k = lead(mb) - BITOFF+((mb+MOFF)>>MDENSHIFT);
-            mz = ((1<<k)-1) & wb_local;
-
-            n = dyn_get(in, &bitPos, mz, k);
-
-            RequireAction(c+n <= (uint32_t) numSamples, status = kALAC_ParamError; goto Exit; );
-
-            for(j=0; j < n; j++)
-            {
-                *outPtr++ = 0;
-                ++c;
-            }
-
-            if(n >= 65535)
-               zmode = 0;
-
-            mb = 0;
-        }
-    }
-
-Exit:
-       *outNumBits = (bitPos - startPos);
-       BitBufferAdvance( bitstream, *outNumBits );
-       RequireAction( bitstream->cur <= bitstream->end, status = kALAC_ParamError; );
-
-    return status;
-}
diff --git a/libs/libsndfile/src/ALAC/ag_enc.c b/libs/libsndfile/src/ALAC/ag_enc.c
deleted file mode 100644 (file)
index 0916cc0..0000000
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- * Copyright (C) 2013 Erik de Castro Lopo <erikd@mega-nerd.com>
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-       File:           ag_enc.c
-
-       Contains:   Adaptive Golomb encode routines.
-
-       Copyright:      (c) 2001-2011 Apple, Inc.
-*/
-
-#include "aglib.h"
-#include "ALACBitUtilities.h"
-#include "EndianPortable.h"
-#include "ALACAudioTypes.h"
-
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#define CODE_TO_LONG_MAXBITS   32
-#define N_MAX_MEAN_CLAMP               0xffff
-#define N_MEAN_CLAMP_VAL               0xffff
-#define REPORT_VAL  40
-
-#if __GNUC__
-#define ALWAYS_INLINE          __attribute__((always_inline))
-#else
-#define ALWAYS_INLINE
-#endif
-
-
-/*     And on the subject of the CodeWarrior x86 compiler and inlining, I reworked a lot of this
-       to help the compiler out.   In many cases this required manual inlining or a macro.  Sorry
-       if it is ugly but the performance gains are well worth it.
-       - WSK 5/19/04
-*/
-
-// note: implementing this with some kind of "count leading zeros" assembly is a big performance win
-static inline int32_t lead( int32_t m )
-{
-       long j;
-       unsigned long c = (1ul << 31);
-
-       for(j=0; j < 32; j++)
-       {
-               if((c & m) != 0)
-                       break;
-               c >>= 1;
-       }
-       return (j);
-}
-
-#define arithmin(a, b) ((a) < (b) ? (a) : (b))
-
-static inline int32_t ALWAYS_INLINE lg3a( int32_t x)
-{
-    int32_t result;
-
-    x += 3;
-    result = lead(x);
-
-    return 31 - result;
-}
-
-static inline int32_t ALWAYS_INLINE abs_func( int32_t a )
-{
-       // note: the CW PPC intrinsic __abs() turns into these instructions so no need to try and use it
-       int32_t isneg  = a >> 31;
-       int32_t xorval = a ^ isneg;
-       int32_t result = xorval-isneg;
-
-       return result;
-}
-
-static inline uint32_t ALWAYS_INLINE read32bit( uint8_t * buffer )
-{
-       // embedded CPUs typically can't read unaligned 32-bit words so just read the bytes
-       uint32_t                value;
-
-       value = ((uint32_t)buffer[0] << 24) | ((uint32_t)buffer[1] << 16) |
-                        ((uint32_t)buffer[2] << 8) | (uint32_t)buffer[3];
-       return value;
-}
-
-#if PRAGMA_MARK
-#pragma mark -
-#endif
-
-static inline int32_t dyn_code(int32_t m, int32_t k, int32_t n, uint32_t *outNumBits)
-{
-       uint32_t        divx, mod, de;
-       uint32_t        numBits;
-       uint32_t        value;
-
-       //Assert( n >= 0 );
-
-       divx = n/m;
-
-       if(divx >= MAX_PREFIX_16)
-       {
-               numBits = MAX_PREFIX_16 + MAX_DATATYPE_BITS_16;
-               value = (((1<<MAX_PREFIX_16)-1)<<MAX_DATATYPE_BITS_16) + n;
-       }
-       else
-       {
-               mod = n%m;
-               de = (mod == 0);
-               numBits = divx + k + 1 - de;
-               value = (((1<<divx)-1)<<(numBits-divx)) + mod + 1 - de;
-
-               // if coding this way is bigger than doing escape, then do escape
-               if (numBits > MAX_PREFIX_16 + MAX_DATATYPE_BITS_16)
-               {
-                   numBits = MAX_PREFIX_16 + MAX_DATATYPE_BITS_16;
-                   value = (((1<<MAX_PREFIX_16)-1)<<MAX_DATATYPE_BITS_16) + n;
-               }
-       }
-
-       *outNumBits = numBits;
-
-       return (int32_t) value;
-}
-
-
-static inline int32_t dyn_code_32bit(int32_t maxbits, uint32_t m, uint32_t k, uint32_t n, uint32_t *outNumBits, uint32_t *outValue, uint32_t *overflow, uint32_t *overflowbits)
-{
-       uint32_t        divx, mod, de;
-       uint32_t        numBits;
-       uint32_t        value;
-       int32_t                 didOverflow = 0;
-
-       divx = n/m;
-
-       if (divx < MAX_PREFIX_32)
-       {
-               mod = n - (m * divx);
-
-               de = (mod == 0);
-               numBits = divx + k + 1 - de;
-               value = (((1<<divx)-1)<<(numBits-divx)) + mod + 1 - de;
-               if (numBits > 25)
-                       goto codeasescape;
-       }
-       else
-       {
-codeasescape:
-               numBits = MAX_PREFIX_32;
-               value = (((1<<MAX_PREFIX_32)-1));
-               *overflow = n;
-               *overflowbits = maxbits;
-               didOverflow = 1;
-       }
-
-       *outNumBits = numBits;
-       *outValue = value;
-
-       return didOverflow;
-}
-
-
-static inline void ALWAYS_INLINE dyn_jam_noDeref(unsigned char *out, uint32_t bitPos, uint32_t numBits, uint32_t value)
-{
-       uint32_t        mask;
-       uint32_t        curr;
-       uint32_t        shift;
-
-       //Assert( numBits <= 32 );
-
-       curr = psf_get_be32 (out, bitPos >> 3);
-
-       shift = 32 - (bitPos & 7) - numBits;
-
-       mask = ~0u >> (32 - numBits);           // mask must be created in two steps to avoid compiler sequencing ambiguity
-       mask <<= shift;
-
-       value  = (value << shift) & mask;
-       value |= curr & ~mask;
-
-       psf_put_be32 (out, bitPos >> 3, value) ;
-}
-
-
-static inline void ALWAYS_INLINE dyn_jam_noDeref_large(unsigned char *out, uint32_t bitPos, uint32_t numBits, uint32_t value)
-{
-       uint32_t        w;
-       uint32_t        curr;
-       uint32_t        mask;
-       int32_t         shiftvalue = (32 - (bitPos&7) - numBits);
-
-       //Assert(numBits <= 32);
-
-       curr = psf_get_be32 (out, bitPos >> 3);
-
-       if (shiftvalue < 0)
-       {
-               uint8_t         tailbyte;
-               uint8_t         *tailptr;
-
-               w = value >> -shiftvalue;
-               mask = ~0u >> -shiftvalue;
-               w |= (curr & ~mask);
-
-               tailptr = out + (bitPos>>3) + 4;
-               tailbyte = (value << ((8+shiftvalue))) & 0xff;
-               *tailptr = (uint8_t)tailbyte;
-       }
-       else
-       {
-               mask = ~0u >> (32 - numBits);
-               mask <<= shiftvalue;                    // mask must be created in two steps to avoid compiler sequencing ambiguity
-
-               w  = (value << shiftvalue) & mask;
-               w |= curr & ~mask;
-       }
-
-       psf_put_be32 (out, bitPos >> 3, w) ;
-}
-
-
-int32_t dyn_comp( AGParamRecPtr params, int32_t * pc, BitBuffer * bitstream, int32_t numSamples, int32_t bitSize, uint32_t * outNumBits )
-{
-    unsigned char *            out;
-    uint32_t           bitPos, startPos;
-    uint32_t                   m, k, n, c, mz, nz;
-    uint32_t           numBits;
-    uint32_t                   value;
-    int32_t                            del, zmode;
-       uint32_t                overflow, overflowbits;
-    int32_t                                    status;
-
-    // shadow the variables in params so there's not the dereferencing overhead
-    uint32_t           mb, pb, kb, wb;
-    int32_t                                    rowPos = 0;
-    int32_t                                    rowSize = params->sw;
-    int32_t                                    rowJump = (params->fw) - rowSize;
-    int32_t *                  inPtr = pc;
-
-       *outNumBits = 0;
-       RequireAction( (bitSize >= 1) && (bitSize <= 32), return kALAC_ParamError; );
-
-       out = bitstream->cur;
-       startPos = bitstream->bitIndex;
-    bitPos = startPos;
-
-    mb = params->mb = params->mb0;
-    pb = params->pb;
-    kb = params->kb;
-    wb = params->wb;
-    zmode = 0;
-
-    c=0;
-       status = ALAC_noErr;
-
-    while (c < (uint32_t) numSamples)
-    {
-        m  = mb >> QBSHIFT;
-        k = lg3a(m);
-        if ( k > kb)
-        {
-               k = kb;
-        }
-        m = (1<<k)-1;
-
-        del = *inPtr++;
-        rowPos++;
-
-        n = (abs_func(del) << 1) - ((del >> 31) & 1) - zmode;
-               //Assert( 32-lead(n) <= bitSize );
-
-               if ( dyn_code_32bit(bitSize, m, k, n, &numBits, &value, &overflow, &overflowbits) )
-               {
-                       dyn_jam_noDeref(out, bitPos, numBits, value);
-                       bitPos += numBits;
-                       dyn_jam_noDeref_large(out, bitPos, overflowbits, overflow);
-                       bitPos += overflowbits;
-               }
-               else
-               {
-                       dyn_jam_noDeref(out, bitPos, numBits, value);
-                       bitPos += numBits;
-               }
-
-        c++;
-        if ( rowPos >= rowSize)
-        {
-               rowPos = 0;
-               inPtr += rowJump;
-        }
-
-        mb = pb * (n + zmode) + mb - ((pb *mb)>>QBSHIFT);
-
-               // update mean tracking if it's overflowed
-               if (n > N_MAX_MEAN_CLAMP)
-                       mb = N_MEAN_CLAMP_VAL;
-
-        zmode = 0;
-
-        RequireAction(c <= (uint32_t) numSamples, status = kALAC_ParamError; goto Exit; );
-
-        if (((mb << MMULSHIFT) < QB) && (c < (uint32_t) numSamples))
-        {
-            zmode = 1;
-            nz = 0;
-
-            while(c<(uint32_t) numSamples && *inPtr == 0)
-            {
-               /* Take care of wrap-around globals. */
-                ++inPtr;
-                ++nz;
-                ++c;
-                if ( ++rowPos >= rowSize)
-                {
-                       rowPos = 0;
-                       inPtr += rowJump;
-                }
-
-                if(nz >= 65535)
-                {
-                       zmode = 0;
-                       break;
-                }
-            }
-
-            k = lead(mb) - BITOFF+((mb+MOFF)>>MDENSHIFT);
-            mz = ((1<<k)-1) & wb;
-
-            value = dyn_code(mz, k, nz, &numBits);
-            dyn_jam_noDeref(out, bitPos, numBits, value);
-            bitPos += numBits;
-
-            mb = 0;
-        }
-    }
-
-    *outNumBits = (bitPos - startPos);
-       BitBufferAdvance( bitstream, *outNumBits );
-
-Exit:
-       return status;
-}
diff --git a/libs/libsndfile/src/ALAC/aglib.h b/libs/libsndfile/src/ALAC/aglib.h
deleted file mode 100644 (file)
index c14e9f6..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-       File:           aglib.h
-
-       Copyright:      (C) 2001-2011 Apple, Inc.
-*/
-
-#ifndef AGLIB_H
-#define AGLIB_H
-
-#include <stdint.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define QBSHIFT 9
-#define QB (1<<QBSHIFT)
-#define PB0 40
-#define MB0 10
-#define KB0 14
-#define MAX_RUN_DEFAULT 255
-
-#define MMULSHIFT 2
-#define MDENSHIFT (QBSHIFT - MMULSHIFT - 1)
-#define MOFF ((1<<(MDENSHIFT-2)))
-
-#define BITOFF 24
-
-/* Max. prefix of 1's. */
-#define MAX_PREFIX_16                  9
-#define MAX_PREFIX_TOLONG_16   15
-#define MAX_PREFIX_32                  9
-
-/* Max. bits in 16-bit data type */
-#define MAX_DATATYPE_BITS_16   16
-
-typedef struct AGParamRec
-{
-    uint32_t mb, mb0, pb, kb, wb, qb;
-    uint32_t fw, sw;
-
-    uint32_t maxrun;
-
-    // fw = 1, sw = 1;
-
-} AGParamRec, *AGParamRecPtr;
-
-struct BitBuffer;
-
-void   set_standard_ag_params(AGParamRecPtr params, uint32_t fullwidth, uint32_t sectorwidth);
-void   set_ag_params(AGParamRecPtr params, uint32_t m, uint32_t p, uint32_t k, uint32_t f, uint32_t s, uint32_t maxrun);
-
-int32_t                dyn_comp(AGParamRecPtr params, int32_t * pc, struct BitBuffer * bitstream, int32_t numSamples, int32_t bitSize, uint32_t * outNumBits);
-int32_t                dyn_decomp(AGParamRecPtr params, struct BitBuffer * bitstream, int32_t * pc, int32_t numSamples, int32_t maxSize, uint32_t * outNumBits);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif //#ifndef AGLIB_H
diff --git a/libs/libsndfile/src/ALAC/alac_codec.h b/libs/libsndfile/src/ALAC/alac_codec.h
deleted file mode 100644 (file)
index b9e5fa1..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- * Copyright (C) 2012-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-       File:           alac_codec.h
-*/
-
-#ifndef ALAC_CODEC_H
-#define ALAC_CODEC_H
-
-#include <stdint.h>
-
-#include "ALACAudioTypes.h"
-
-#define                ALAC_FRAME_LENGTH       4096
-
-struct BitBuffer;
-
-typedef struct alac_decoder_s
-{
-       // decoding parameters (public for use in the analyzer)
-       ALACSpecificConfig              mConfig;
-
-       uint16_t                                mActiveElements;
-
-       // decoding buffers
-       int32_t                         mMixBufferU [ALAC_FRAME_LENGTH];
-       int32_t                         mMixBufferV [ALAC_FRAME_LENGTH];
-       union
-       {
-               int32_t                 mPredictor [ALAC_FRAME_LENGTH];
-               uint16_t                mShiftBuffer [ALAC_FRAME_LENGTH];
-       } ;
-} ALAC_DECODER ;
-
-typedef struct alac_encoder_s
-{
-       // ALAC encoder parameters
-       int16_t                 mBitDepth;
-
-       // encoding state
-       int16_t                 mLastMixRes [kALACMaxChannels];
-
-       int32_t                 mFastMode;
-
-       // encoding buffers
-       int32_t                 mMixBufferU [ALAC_FRAME_LENGTH] ;
-       int32_t                 mMixBufferV [ALAC_FRAME_LENGTH] ;
-       int32_t                 mPredictorU [ALAC_FRAME_LENGTH] ;
-       int32_t                 mPredictorV [ALAC_FRAME_LENGTH] ;
-       uint16_t                mShiftBufferUV [2 * ALAC_FRAME_LENGTH] ;
-       uint8_t                 mWorkBuffer [4 * ALAC_FRAME_LENGTH];
-
-       // per-channel coefficients buffers
-       int16_t                 mCoefsU [kALACMaxChannels][kALACMaxSearches][kALACMaxCoefs];
-       int16_t                 mCoefsV [kALACMaxChannels][kALACMaxSearches][kALACMaxCoefs];
-
-       // encoding statistics
-       uint32_t                mTotalBytesGenerated;
-       uint32_t                mAvgBitRate;
-       uint32_t                mMaxFrameBytes;
-       uint32_t                mFrameSize;
-       uint32_t                mMaxOutputBytes;
-       uint32_t                mNumChannels;
-       uint32_t                mOutputSampleRate;
-} ALAC_ENCODER ;
-
-
-int32_t        alac_decoder_init (ALAC_DECODER *p, void * inMagicCookie, uint32_t inMagicCookieSize) ;
-int32_t alac_encoder_init (ALAC_ENCODER *p, uint32_t samplerate, uint32_t channels, uint32_t format_flags, uint32_t frameSize) ;
-
-int32_t        alac_decode (ALAC_DECODER *, struct BitBuffer * bits, int32_t * sampleBuffer,
-                                       uint32_t numSamples, uint32_t numChannels, uint32_t * outNumSamples) ;
-
-int32_t        alac_encode (ALAC_ENCODER *p, uint32_t numChannels, uint32_t numSamples,
-                                       int32_t * theReadBuffer, unsigned char * theWriteBuffer,
-                                       uint32_t * ioNumBytes) ;
-
-void alac_set_fastmode(ALAC_ENCODER * p, int32_t fast) ;
-
-uint32_t alac_get_magic_cookie_size(uint32_t inNumChannels) ;
-void   alac_get_magic_cookie(ALAC_ENCODER *p, void * config, uint32_t * ioSize) ;
-void   alac_get_source_format(ALAC_ENCODER *p, const AudioFormatDescription * source, AudioFormatDescription * output) ;
-
-#endif
diff --git a/libs/libsndfile/src/ALAC/alac_decoder.c b/libs/libsndfile/src/ALAC/alac_decoder.c
deleted file mode 100644 (file)
index 2681ef6..0000000
+++ /dev/null
@@ -1,646 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- * Copyright (C) 2012-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-       File:           ALACDecoder.cpp
-*/
-
-#include <stdlib.h>
-#include <stddef.h>
-#include <string.h>
-
-#include "alac_codec.h"
-
-#include "dplib.h"
-#include "aglib.h"
-#include "matrixlib.h"
-
-#include "ALACBitUtilities.h"
-#include "EndianPortable.h"
-
-typedef enum
-{      false = 0,
-       true = 1
-} bool ;
-
-// constants/data
-const uint32_t kMaxBitDepth = 32;                      // max allowed bit depth is 32
-
-
-// prototypes
-static int32_t alac_fill_element (struct BitBuffer * bits) ;
-static int32_t alac_data_stream_element (struct BitBuffer * bits) ;
-
-static void Zero32( int32_t * buffer, uint32_t numItems, uint32_t stride );
-
-
-/*
-       Init()
-       - initialize the decoder with the given configuration
-*/
-int32_t
-alac_decoder_init (ALAC_DECODER *p, void * inMagicCookie, uint32_t inMagicCookieSize)
-{
-       int32_t         status = ALAC_noErr;
-    ALACSpecificConfig theConfig;
-    uint8_t * theActualCookie = (uint8_t *)inMagicCookie;
-    uint32_t theCookieBytesRemaining = inMagicCookieSize;
-
-    // For historical reasons the decoder needs to be resilient to magic cookies vended by older encoders.
-    // As specified in the ALACMagicCookieDescription.txt document, there may be additional data encapsulating
-    // the ALACSpecificConfig. This would consist of format ('frma') and 'alac' atoms which precede the
-    // ALACSpecificConfig.
-    // See ALACMagicCookieDescription.txt for additional documentation concerning the 'magic cookie'
-
-    // skip format ('frma') atom if present
-    if (theActualCookie[4] == 'f' && theActualCookie[5] == 'r' && theActualCookie[6] == 'm' && theActualCookie[7] == 'a')
-    {
-        theActualCookie += 12;
-        theCookieBytesRemaining -= 12;
-    }
-
-    // skip 'alac' atom header if present
-    if (theActualCookie[4] == 'a' && theActualCookie[5] == 'l' && theActualCookie[6] == 'a' && theActualCookie[7] == 'c')
-    {
-        theActualCookie += 12;
-        theCookieBytesRemaining -= 12;
-    }
-
-    // read the ALACSpecificConfig
-    if (theCookieBytesRemaining >= sizeof(ALACSpecificConfig))
-    {
-        theConfig.frameLength = psf_get_be32 (theActualCookie, offsetof (ALACSpecificConfig, frameLength)) ;
-
-               if (theConfig.frameLength > ALAC_FRAME_LENGTH)
-                       return fALAC_FrameLengthError ;
-
-        theConfig.compatibleVersion = theActualCookie [offsetof (ALACSpecificConfig, compatibleVersion)] ;
-        theConfig.bitDepth = theActualCookie [offsetof (ALACSpecificConfig, bitDepth)] ;
-        theConfig.pb = theActualCookie [offsetof (ALACSpecificConfig, pb)] ;
-        theConfig.mb = theActualCookie [offsetof (ALACSpecificConfig, mb)] ;
-        theConfig.kb = theActualCookie [offsetof (ALACSpecificConfig, kb)] ;
-        theConfig.numChannels = theActualCookie [offsetof (ALACSpecificConfig, numChannels)] ;
-        theConfig.maxRun = psf_get_be16 (theActualCookie, offsetof (ALACSpecificConfig, maxRun)) ;
-        theConfig.maxFrameBytes = psf_get_be32 (theActualCookie, offsetof (ALACSpecificConfig, maxFrameBytes)) ;
-        theConfig.avgBitRate = psf_get_be32 (theActualCookie, offsetof (ALACSpecificConfig, avgBitRate)) ;
-        theConfig.sampleRate = psf_get_be32 (theActualCookie, offsetof (ALACSpecificConfig, sampleRate)) ;
-
-        p->mConfig = theConfig;
-
-        RequireAction( p->mConfig.compatibleVersion <= kALACVersion, return kALAC_ParamError; );
-
-        RequireAction( (p->mMixBufferU != NULL) && (p->mMixBufferV != NULL) && (p->mPredictor != NULL),
-                        status = kALAC_MemFullError; goto Exit; );
-     }
-    else
-    {
-        status = kALAC_ParamError;
-    }
-
-    // skip to Channel Layout Info
-    // theActualCookie += sizeof(ALACSpecificConfig);
-
-    // Currently, the Channel Layout Info portion of the magic cookie (as defined in the
-    // ALACMagicCookieDescription.txt document) is unused by the decoder.
-
-Exit:
-       return status;
-}
-
-/*
-       Decode()
-       - the decoded samples are interleaved into the output buffer in the order they arrive in
-         the bitstream
-*/
-int32_t
-alac_decode (ALAC_DECODER *p, struct BitBuffer * bits, int32_t * sampleBuffer, uint32_t numSamples, uint32_t numChannels, uint32_t * outNumSamples)
-{
-       BitBuffer                       shiftBits;
-       uint32_t            bits1, bits2;
-       uint8_t                         tag;
-       uint8_t                         elementInstanceTag;
-       AGParamRec                      agParams;
-       uint32_t                                channelIndex;
-       int16_t                         coefsU[32];             // max possible size is 32 although NUMCOEPAIRS is the current limit
-       int16_t                         coefsV[32];
-       uint8_t                         numU, numV;
-       uint8_t                         mixBits;
-       int8_t                          mixRes;
-       uint16_t                        unusedHeader;
-       uint8_t                         escapeFlag;
-       uint32_t                        chanBits;
-       uint8_t                         bytesShifted;
-       uint32_t                        shift;
-       uint8_t                         modeU, modeV;
-       uint32_t                        denShiftU, denShiftV;
-       uint16_t                        pbFactorU, pbFactorV;
-       uint16_t                        pb;
-       int32_t *                       out32;
-       uint8_t                         headerByte;
-       uint8_t                         partialFrame;
-       uint32_t                        extraBits;
-       int32_t                         val;
-       uint32_t                        i, j;
-       int32_t             status;
-
-       RequireAction( (bits != NULL) && (sampleBuffer != NULL) && (outNumSamples != NULL), return kALAC_ParamError; );
-       RequireAction( numChannels > 0, return kALAC_ParamError; );
-
-       p->mActiveElements = 0;
-       channelIndex    = 0;
-
-       status = ALAC_noErr;
-       *outNumSamples = numSamples;
-
-       while ( status == ALAC_noErr )
-       {
-               // bail if we ran off the end of the buffer
-       RequireAction( bits->cur < bits->end, status = kALAC_ParamError; goto Exit; );
-
-               // copy global decode params for this element
-               pb = p->mConfig.pb;
-
-               // read element tag
-               tag = BitBufferReadSmall( bits, 3 );
-               switch ( tag )
-               {
-                       case ID_SCE:
-                       case ID_LFE:
-                       {
-                               // mono/LFE channel
-                               elementInstanceTag = BitBufferReadSmall( bits, 4 );
-                               p->mActiveElements |= (1u << elementInstanceTag);
-
-                               // read the 12 unused header bits
-                               unusedHeader = (uint16_t) BitBufferRead( bits, 12 );
-                               RequireAction( unusedHeader == 0, status = kALAC_ParamError; goto Exit; );
-
-                               // read the 1-bit "partial frame" flag, 2-bit "shift-off" flag & 1-bit "escape" flag
-                               headerByte = (uint8_t) BitBufferRead( bits, 4 );
-
-                               partialFrame = headerByte >> 3;
-
-                               bytesShifted = (headerByte >> 1) & 0x3u;
-                               RequireAction( bytesShifted != 3, status = kALAC_ParamError; goto Exit; );
-
-                               shift = bytesShifted * 8;
-
-                               escapeFlag = headerByte & 0x1;
-
-                               chanBits = p->mConfig.bitDepth - (bytesShifted * 8);
-
-                               // check for partial frame to override requested numSamples
-                               if ( partialFrame != 0 )
-                               {
-                                       numSamples  = BitBufferRead( bits, 16 ) << 16;
-                                       numSamples |= BitBufferRead( bits, 16 );
-                               }
-
-                               if ( escapeFlag == 0 )
-                               {
-                                       // compressed frame, read rest of parameters
-                                       mixBits = (uint8_t) BitBufferRead( bits, 8 );
-                                       mixRes  = (int8_t) BitBufferRead( bits, 8 );
-                                       //Assert( (mixBits == 0) && (mixRes == 0) );            // no mixing for mono
-
-                                       headerByte      = (uint8_t) BitBufferRead( bits, 8 );
-                                       modeU           = headerByte >> 4;
-                                       denShiftU       = headerByte & 0xfu;
-
-                                       headerByte      = (uint8_t) BitBufferRead( bits, 8 );
-                                       pbFactorU       = headerByte >> 5;
-                                       numU            = headerByte & 0x1fu;
-
-                                       for ( i = 0; i < numU; i++ )
-                                               coefsU[i] = (int16_t) BitBufferRead( bits, 16 );
-
-                                       // if shift active, skip the the shift buffer but remember where it starts
-                                       if ( bytesShifted != 0 )
-                                       {
-                                               shiftBits = *bits;
-                                               BitBufferAdvance( bits, (bytesShifted * 8) * numSamples );
-                                       }
-
-                                       // decompress
-                                       set_ag_params( &agParams, p->mConfig.mb, (pb * pbFactorU) / 4, p->mConfig.kb, numSamples, numSamples, p->mConfig.maxRun );
-                                       status = dyn_decomp( &agParams, bits, p->mPredictor, numSamples, chanBits, &bits1 );
-                                       RequireNoErr( status, goto Exit; );
-
-                                       if ( modeU == 0 )
-                                       {
-                                               unpc_block( p->mPredictor, p->mMixBufferU, numSamples, &coefsU[0], numU, chanBits, denShiftU );
-                                       }
-                                       else
-                                       {
-                                               // the special "numActive == 31" mode can be done in-place
-                                               unpc_block( p->mPredictor, p->mPredictor, numSamples, NULL, 31, chanBits, 0 );
-                                               unpc_block( p->mPredictor, p->mMixBufferU, numSamples, &coefsU[0], numU, chanBits, denShiftU );
-                                       }
-                               }
-                               else
-                               {
-                                       //Assert( bytesShifted == 0 );
-
-                                       // uncompressed frame, copy data into the mix buffer to use common output code
-                                       shift = 32 - chanBits;
-                                       if ( chanBits <= 16 )
-                                       {
-                                               for ( i = 0; i < numSamples; i++ )
-                                               {
-                                                       val = (int32_t) BitBufferRead( bits, (uint8_t) chanBits );
-                                                       val = (val << shift) >> shift;
-                                                       p->mMixBufferU[i] = val;
-                                               }
-                                       }
-                                       else
-                                       {
-                                               // BitBufferRead() can't read more than 16 bits at a time so break up the reads
-                                               extraBits = chanBits - 16;
-                                               for ( i = 0; i < numSamples; i++ )
-                                               {
-                                                       val = (int32_t) BitBufferRead( bits, 16 );
-                                                       val = (val << 16) >> shift;
-                                                       p->mMixBufferU[i] = val | BitBufferRead( bits, (uint8_t) extraBits );
-                                               }
-                                       }
-
-                                       mixBits = mixRes = 0;
-                                       bits1 = chanBits * numSamples;
-                                       bytesShifted = 0;
-                               }
-
-                               // now read the shifted values into the shift buffer
-                               if ( bytesShifted != 0 )
-                               {
-                                       shift = bytesShifted * 8;
-                                       //Assert( shift <= 16 );
-
-                                       for ( i = 0; i < numSamples; i++ )
-                                               p->mShiftBuffer[i] = (uint16_t) BitBufferRead( &shiftBits, (uint8_t) shift );
-                               }
-
-                               // convert 32-bit integers into output buffer
-                               switch ( p->mConfig.bitDepth )
-                               {
-                                       case 16:
-                                               out32 = sampleBuffer + channelIndex;
-                                               for ( i = 0, j = 0; i < numSamples; i++, j += numChannels )
-                                                       out32[j] = p->mMixBufferU[i] << 16;
-                                               break;
-                                       case 20:
-                                               out32 = sampleBuffer + channelIndex;
-                                               copyPredictorTo20( p->mMixBufferU, out32, numChannels, numSamples );
-                                               break;
-                                       case 24:
-                                               out32 = sampleBuffer + channelIndex;
-                                               if ( bytesShifted != 0 )
-                                                       copyPredictorTo24Shift( p->mMixBufferU, p->mShiftBuffer, out32, numChannels, numSamples, bytesShifted );
-                                               else
-                                                       copyPredictorTo24( p->mMixBufferU, out32, numChannels, numSamples );
-                                               break;
-                                       case 32:
-                                               out32 = sampleBuffer + channelIndex;
-                                               if ( bytesShifted != 0 )
-                                                       copyPredictorTo32Shift( p->mMixBufferU, p->mShiftBuffer, out32, numChannels, numSamples, bytesShifted );
-                                               else
-                                                       copyPredictorTo32( p->mMixBufferU, out32, numChannels, numSamples);
-                                               break;
-                               }
-
-                               channelIndex += 1;
-                               *outNumSamples = numSamples;
-                               break;
-                       }
-
-                       case ID_CPE:
-                       {
-                               // if decoding this pair would take us over the max channels limit, bail
-                               if ( (channelIndex + 2) > numChannels )
-                                       goto NoMoreChannels;
-
-                               // stereo channel pair
-                               elementInstanceTag = BitBufferReadSmall( bits, 4 );
-                               p->mActiveElements |= (1u << elementInstanceTag);
-
-                               // read the 12 unused header bits
-                               unusedHeader = (uint16_t) BitBufferRead( bits, 12 );
-                               RequireAction( unusedHeader == 0, status = kALAC_ParamError; goto Exit; );
-
-                               // read the 1-bit "partial frame" flag, 2-bit "shift-off" flag & 1-bit "escape" flag
-                               headerByte = (uint8_t) BitBufferRead( bits, 4 );
-
-                               partialFrame = headerByte >> 3;
-
-                               bytesShifted = (headerByte >> 1) & 0x3u;
-                               RequireAction( bytesShifted != 3, status = kALAC_ParamError; goto Exit; );
-
-                               shift = bytesShifted * 8;
-
-                               escapeFlag = headerByte & 0x1;
-
-                               chanBits = p->mConfig.bitDepth - (bytesShifted * 8) + 1;
-
-                               // check for partial frame length to override requested numSamples
-                               if ( partialFrame != 0 )
-                               {
-                                       numSamples  = BitBufferRead( bits, 16 ) << 16;
-                                       numSamples |= BitBufferRead( bits, 16 );
-                               }
-
-                               if ( escapeFlag == 0 )
-                               {
-                                       // compressed frame, read rest of parameters
-                                       mixBits         = (uint8_t) BitBufferRead( bits, 8 );
-                                       mixRes          = (int8_t) BitBufferRead( bits, 8 );
-
-                                       headerByte      = (uint8_t) BitBufferRead( bits, 8 );
-                                       modeU           = headerByte >> 4;
-                                       denShiftU       = headerByte & 0xfu;
-
-                                       headerByte      = (uint8_t) BitBufferRead( bits, 8 );
-                                       pbFactorU       = headerByte >> 5;
-                                       numU            = headerByte & 0x1fu;
-                                       for ( i = 0; i < numU; i++ )
-                                               coefsU[i] = (int16_t) BitBufferRead( bits, 16 );
-
-                                       headerByte      = (uint8_t) BitBufferRead( bits, 8 );
-                                       modeV           = headerByte >> 4;
-                                       denShiftV       = headerByte & 0xfu;
-
-                                       headerByte      = (uint8_t) BitBufferRead( bits, 8 );
-                                       pbFactorV       = headerByte >> 5;
-                                       numV            = headerByte & 0x1fu;
-                                       for ( i = 0; i < numV; i++ )
-                                               coefsV[i] = (int16_t) BitBufferRead( bits, 16 );
-
-                                       // if shift active, skip the interleaved shifted values but remember where they start
-                                       if ( bytesShifted != 0 )
-                                       {
-                                               shiftBits = *bits;
-                                               BitBufferAdvance( bits, (bytesShifted * 8) * 2 * numSamples );
-                                       }
-
-                                       // decompress and run predictor for "left" channel
-                                       set_ag_params( &agParams, p->mConfig.mb, (pb * pbFactorU) / 4, p->mConfig.kb, numSamples, numSamples, p->mConfig.maxRun );
-                                       status = dyn_decomp( &agParams, bits, p->mPredictor, numSamples, chanBits, &bits1 );
-                                       RequireNoErr( status, goto Exit; );
-
-                                       if ( modeU == 0 )
-                                       {
-                                               unpc_block( p->mPredictor, p->mMixBufferU, numSamples, &coefsU[0], numU, chanBits, denShiftU );
-                                       }
-                                       else
-                                       {
-                                               // the special "numActive == 31" mode can be done in-place
-                                               unpc_block( p->mPredictor, p->mPredictor, numSamples, NULL, 31, chanBits, 0 );
-                                               unpc_block( p->mPredictor, p->mMixBufferU, numSamples, &coefsU[0], numU, chanBits, denShiftU );
-                                       }
-
-                                       // decompress and run predictor for "right" channel
-                                       set_ag_params( &agParams, p->mConfig.mb, (pb * pbFactorV) / 4, p->mConfig.kb, numSamples, numSamples, p->mConfig.maxRun );
-                                       status = dyn_decomp( &agParams, bits, p->mPredictor, numSamples, chanBits, &bits2 );
-                                       RequireNoErr( status, goto Exit; );
-
-                                       if ( modeV == 0 )
-                                       {
-                                               unpc_block( p->mPredictor, p->mMixBufferV, numSamples, &coefsV[0], numV, chanBits, denShiftV );
-                                       }
-                                       else
-                                       {
-                                               // the special "numActive == 31" mode can be done in-place
-                                               unpc_block( p->mPredictor, p->mPredictor, numSamples, NULL, 31, chanBits, 0 );
-                                               unpc_block( p->mPredictor, p->mMixBufferV, numSamples, &coefsV[0], numV, chanBits, denShiftV );
-                                       }
-                               }
-                               else
-                               {
-                                       //Assert( bytesShifted == 0 );
-
-                                       // uncompressed frame, copy data into the mix buffers to use common output code
-                                       chanBits = p->mConfig.bitDepth;
-                                       shift = 32 - chanBits;
-                                       if ( chanBits <= 16 )
-                                       {
-                                               for ( i = 0; i < numSamples; i++ )
-                                               {
-                                                       val = (int32_t) BitBufferRead( bits, (uint8_t) chanBits );
-                                                       val = (val << shift) >> shift;
-                                                       p->mMixBufferU[i] = val;
-
-                                                       val = (int32_t) BitBufferRead( bits, (uint8_t) chanBits );
-                                                       val = (val << shift) >> shift;
-                                                       p->mMixBufferV[i] = val;
-                                               }
-                                       }
-                                       else
-                                       {
-                                               // BitBufferRead() can't read more than 16 bits at a time so break up the reads
-                                               extraBits = chanBits - 16;
-                                               for ( i = 0; i < numSamples; i++ )
-                                               {
-                                                       val = (int32_t) BitBufferRead( bits, 16 );
-                                                       val = (val << 16) >> shift;
-                                                       p->mMixBufferU[i] = val | BitBufferRead( bits, (uint8_t)extraBits );
-
-                                                       val = (int32_t) BitBufferRead( bits, 16 );
-                                                       val = (val << 16) >> shift;
-                                                       p->mMixBufferV[i] = val | BitBufferRead( bits, (uint8_t)extraBits );
-                                               }
-                                       }
-
-                                       bits1 = chanBits * numSamples;
-                                       bits2 = chanBits * numSamples;
-                                       mixBits = mixRes = 0;
-                                       bytesShifted = 0;
-                               }
-
-                               // now read the shifted values into the shift buffer
-                               if ( bytesShifted != 0 )
-                               {
-                                       shift = bytesShifted * 8;
-                                       //Assert( shift <= 16 );
-
-                                       for ( i = 0; i < (numSamples * 2); i += 2 )
-                                       {
-                                               p->mShiftBuffer[i + 0] = (uint16_t) BitBufferRead( &shiftBits, (uint8_t) shift );
-                                               p->mShiftBuffer[i + 1] = (uint16_t) BitBufferRead( &shiftBits, (uint8_t) shift );
-                                       }
-                               }
-
-                               // un-mix the data and convert to output format
-                               // - note that mixRes = 0 means just interleave so we use that path for uncompressed frames
-                               switch ( p->mConfig.bitDepth )
-                               {
-                                       case 16:
-                                               out32 = sampleBuffer + channelIndex;
-                                               unmix16( p->mMixBufferU, p->mMixBufferV, out32, numChannels, numSamples, mixBits, mixRes );
-                                               break;
-                                       case 20:
-                                               out32 = sampleBuffer + channelIndex;
-                                               unmix20( p->mMixBufferU, p->mMixBufferV, out32, numChannels, numSamples, mixBits, mixRes );
-                                               break;
-                                       case 24:
-                                               out32 = sampleBuffer + channelIndex;
-                                               unmix24( p->mMixBufferU, p->mMixBufferV, out32, numChannels, numSamples,
-                                                                       mixBits, mixRes, p->mShiftBuffer, bytesShifted );
-                                               break;
-                                       case 32:
-                                               out32 = sampleBuffer + channelIndex;
-                                               unmix32( p->mMixBufferU, p->mMixBufferV, out32, numChannels, numSamples,
-                                                                       mixBits, mixRes, p->mShiftBuffer, bytesShifted );
-                                               break;
-                               }
-
-                               channelIndex += 2;
-                               *outNumSamples = numSamples;
-                               break;
-                       }
-
-                       case ID_CCE:
-                       case ID_PCE:
-                       {
-                               // unsupported element, bail
-                               //AssertNoErr( tag );
-                               status = kALAC_ParamError;
-                               break;
-                       }
-
-                       case ID_DSE:
-                       {
-                               // data stream element -- parse but ignore
-                               status = alac_data_stream_element (bits) ;
-                               break;
-                       }
-
-                       case ID_FIL:
-                       {
-                               // fill element -- parse but ignore
-                               status = alac_fill_element (bits) ;
-                               break;
-                       }
-
-                       case ID_END:
-                       {
-                               // frame end, all done so byte align the frame and check for overruns
-                               BitBufferByteAlign( bits, false );
-                               //Assert( bits->cur == bits->end );
-                               goto Exit;
-                       }
-               }
-
-#if 0 // ! DEBUG
-               // if we've decoded all of our channels, bail (but not in debug b/c we want to know if we're seeing bad bits)
-               // - this also protects us if the config does not match the bitstream or crap data bits follow the audio bits
-               if ( channelIndex >= numChannels )
-                       break;
-#endif
-       }
-
-NoMoreChannels:
-
-       // if we get here and haven't decoded all of the requested channels, fill the remaining channels with zeros
-       for ( ; channelIndex < numChannels; channelIndex++ )
-       {
-               int32_t *       fill32 = sampleBuffer + channelIndex;
-               Zero32( fill32, numSamples, numChannels );
-       }
-
-Exit:
-       return status;
-}
-
-#if PRAGMA_MARK
-#pragma mark -
-#endif
-
-/*
-       FillElement()
-       - they're just filler so we don't need 'em
-*/
-static int32_t
-alac_fill_element (struct BitBuffer * bits)
-{
-       int16_t         count;
-
-       // 4-bit count or (4-bit + 8-bit count) if 4-bit count == 15
-       // - plus this weird -1 thing I still don't fully understand
-       count = BitBufferReadSmall( bits, 4 );
-       if ( count == 15 )
-               count += (int16_t) BitBufferReadSmall( bits, 8 ) - 1;
-
-       BitBufferAdvance( bits, count * 8 );
-
-       RequireAction( bits->cur <= bits->end, return kALAC_ParamError; );
-
-       return ALAC_noErr;
-}
-
-/*
-       DataStreamElement()
-       - we don't care about data stream elements so just skip them
-*/
-static int32_t
-alac_data_stream_element (struct BitBuffer * bits)
-{
-       int32_t         data_byte_align_flag;
-       uint16_t                count;
-
-       // the tag associates this data stream element with a given audio element
-
-       /* element_instance_tag = */ BitBufferReadSmall( bits, 4 );
-
-       data_byte_align_flag = BitBufferReadOne( bits );
-
-       // 8-bit count or (8-bit + 8-bit count) if 8-bit count == 255
-       count = BitBufferReadSmall( bits, 8 );
-       if ( count == 255 )
-               count += BitBufferReadSmall( bits, 8 );
-
-       // the align flag means the bitstream should be byte-aligned before reading the following data bytes
-       if ( data_byte_align_flag )
-               BitBufferByteAlign( bits, false );
-
-       // skip the data bytes
-       BitBufferAdvance( bits, count * 8 );
-
-       RequireAction( bits->cur <= bits->end, return kALAC_ParamError; );
-
-       return ALAC_noErr;
-}
-
-/*
-       ZeroN()
-       - helper routines to clear out output channel buffers when decoding fewer channels than requested
-*/
-static void Zero32( int32_t * buffer, uint32_t numItems, uint32_t stride )
-{
-       uint32_t indx;
-
-       if ( stride == 1 )
-       {
-               memset( buffer, 0, numItems * sizeof(int32_t) );
-       }
-       else
-       {
-               for ( indx = 0; indx < (numItems * stride); indx += stride )
-                       buffer[indx] = 0;
-       }
-}
diff --git a/libs/libsndfile/src/ALAC/alac_decoder.h b/libs/libsndfile/src/ALAC/alac_decoder.h
deleted file mode 100644 (file)
index 78f3cb2..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-       File:           alac_decoder.h
-*/
-
-#ifndef ALAC_DECODER_H
-#define ALAC_DECODER_H
-
-#include <stdint.h>
-
-#include "ALACAudioTypes.h"
-
-typedef enum
-{
-       false = 0,
-       ALAC_TRUE = 1
-} bool ;
-
-struct BitBuffer;
-
-typedef struct alac_decoder
-{
-               // decoding parameters (public for use in the analyzer)
-               ALACSpecificConfig              mConfig;
-
-               uint16_t                                        mActiveElements;
-
-               // decoding buffers
-               int32_t *                               mMixBufferU;
-               int32_t *                               mMixBufferV;
-               int32_t *                               mPredictor;
-               uint16_t *                              mShiftBuffer;   // note: this points to mPredictor's memory but different
-                                                                                               //               variable for clarity and type difference
-} alac_decoder ;
-
-alac_decoder * alac_decoder_new (void) ;
-void alac_decoder_delete (alac_decoder *) ;
-
-int32_t        alac_init (alac_decoder *p, void * inMagicCookie, uint32_t inMagicCookieSize) ;
-int32_t        alac_decode (alac_decoder *, struct BitBuffer * bits, uint8_t * sampleBuffer, uint32_t numSamples, uint32_t numChannels, uint32_t * outNumSamples) ;
-
-#endif /* ALAC_DECODER_H */
diff --git a/libs/libsndfile/src/ALAC/alac_encoder.c b/libs/libsndfile/src/ALAC/alac_encoder.c
deleted file mode 100644 (file)
index 02210ee..0000000
+++ /dev/null
@@ -1,1342 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- * Copyright (C) 2012-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-       File:           ALACEncoder.cpp
-*/
-
-// build stuff
-#define VERBOSE_DEBUG          0
-#define DebugMsg                       printf
-
-// headers
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "sfendian.h"
-
-#include "alac_codec.h"
-
-#include "aglib.h"
-#include "dplib.h"
-#include "matrixlib.h"
-
-#include "ALACBitUtilities.h"
-#include "ALACAudioTypes.h"
-#include "EndianPortable.h"
-
-typedef enum
-{
-       false = 0,
-       true = 1
-} bool ;
-
-static void    GetConfig(ALAC_ENCODER *p, ALACSpecificConfig * config );
-
-static int32_t EncodeStereo(ALAC_ENCODER *p, struct BitBuffer * bitstream, int32_t * input, uint32_t stride, uint32_t channelIndex, uint32_t numSamples );
-static int32_t EncodeStereoFast(ALAC_ENCODER *p, struct BitBuffer * bitstream, int32_t * input, uint32_t stride, uint32_t channelIndex, uint32_t numSamples );
-static int32_t EncodeStereoEscape(ALAC_ENCODER *p, struct BitBuffer * bitstream, int32_t * input, uint32_t stride, uint32_t numSamples );
-static int32_t EncodeMono(ALAC_ENCODER *p, struct BitBuffer * bitstream, int32_t * input, uint32_t stride, uint32_t channelIndex, uint32_t numSamples );
-
-
-
-// Note: in C you can't typecast to a 2-dimensional array pointer but that's what we need when
-// picking which coefs to use so we declare this typedef b/c we *can* typecast to this type
-typedef int16_t (*SearchCoefs)[kALACMaxCoefs];
-
-// defines/constants
-const uint32_t kALACEncoderMagic       = MAKE_MARKER ('d', 'p', 'g', 'e');
-const uint32_t kMaxSampleSize          = 32;                   // max allowed bit width is 32
-const uint32_t kDefaultMixBits         = 2;
-const uint32_t kDefaultMixRes          = 0;
-const uint32_t kMaxRes                         = 4;
-const uint32_t kDefaultNumUV           = 8;
-const uint32_t kMinUV                          = 4;
-const uint32_t kMaxUV                          = 8;
-
-// static functions
-#if VERBOSE_DEBUG
-static void AddFiller( BitBuffer * bits, int32_t numBytes );
-#endif
-
-
-/*
-       Map Format: 3-bit field per channel which is the same as the "element tag" that should be placed
-                               at the beginning of the frame for that channel.  Indicates whether SCE, CPE, or LFE.
-                               Each particular field is accessed via the current channel indx.  Note that the channel
-                               indx increments by two for channel pairs.
-
-       For example:
-
-                       C L R 3-channel input           = (ID_CPE << 3) | (ID_SCE)
-                               indx 0 value = (map & (0x7ul << (0 * 3))) >> (0 * 3)
-                               indx 1 value = (map & (0x7ul << (1 * 3))) >> (1 * 3)
-
-                       C L R Ls Rs LFE 5.1-channel input = (ID_LFE << 15) | (ID_CPE << 9) | (ID_CPE << 3) | (ID_SCE)
-                               indx 0 value = (map & (0x7ul << (0 * 3))) >> (0 * 3)
-                               indx 1 value = (map & (0x7ul << (1 * 3))) >> (1 * 3)
-                               indx 3 value = (map & (0x7ul << (3 * 3))) >> (3 * 3)
-                               indx 5 value = (map & (0x7ul << (5 * 3))) >> (5 * 3)
-                               indx 7 value = (map & (0x7ul << (7 * 3))) >> (7 * 3)
-*/
-static const uint32_t  sChannelMaps[kALACMaxChannels] =
-{
-       ID_SCE,
-       ID_CPE,
-       (ID_CPE << 3) | (ID_SCE),
-       (ID_SCE << 9) | (ID_CPE << 3) | (ID_SCE),
-       (ID_CPE << 9) | (ID_CPE << 3) | (ID_SCE),
-       (ID_SCE << 15) | (ID_CPE << 9) | (ID_CPE << 3) | (ID_SCE),
-       (ID_SCE << 18) | (ID_SCE << 15) | (ID_CPE << 9) | (ID_CPE << 3) | (ID_SCE),
-       (ID_SCE << 21) | (ID_CPE << 15) | (ID_CPE << 9) | (ID_CPE << 3) | (ID_SCE)
-};
-
-static const uint32_t sSupportediPodSampleRates[] =
-{
-       8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000
-};
-
-
-#if PRAGMA_MARK
-#pragma mark -
-#endif
-
-void
-alac_set_fastmode (ALAC_ENCODER * p, int32_t fast )
-{
-       p->mFastMode = fast;
-}
-
-
-/*
-       HEADER SPECIFICATION
-
-        For every segment we adopt the following header:
-
-                       1 byte reserved                 (always 0)
-                       1 byte flags                    (see below)
-                       [4 byte frame length]   (optional, see below)
-                            ---Next, the per-segment ALAC parameters---
-                       1 byte mixBits                  (middle-side parameter)
-                       1 byte mixRes                   (middle-side parameter, interpreted as signed char)
-
-                       1 byte shiftU                   (4 bits modeU, 4 bits denShiftU)
-                       1 byte filterU                  (3 bits pbFactorU, 5 bits numU)
-                       (numU) shorts                   (signed DP coefficients for V channel)
-                            ---Next, 2nd-channel ALAC parameters in case of stereo mode---
-                       1 byte shiftV                   (4 bits modeV, 4 bits denShiftV)
-                       1 byte filterV                  (3 bits pbFactorV, 5 bits numV)
-                       (numV) shorts                   (signed DP coefficients for V channel)
-                            ---After this come the shift-off bytes for (>= 24)-bit data (n-byte shift) if indicated---
-                            ---Then comes the AG-compressor bitstream---
-
-
-        FLAGS
-        -----
-
-               The presence of certain flag bits changes the header format such that the parameters might
-               not even be sent.  The currently defined flags format is:
-
-                       0000psse
-
-                       where           0       = reserved, must be 0
-                                               p       = 1-bit field "partial frame" flag indicating 32-bit frame length follows this byte
-                                               ss      = 2-bit field indicating "number of shift-off bytes ignored by compression"
-                                               e       = 1-bit field indicating "escape"
-
-               The "partial frame" flag means that the following segment is not equal to the frame length specified
-               in the out-of-band decoder configuration.  This allows the decoder to deal with end-of-file partial
-               segments without incurring the 32-bit overhead for each segment.
-
-               The "shift-off" field indicates the number of bytes at the bottom of the word that were passed through
-               uncompressed.  The reason for this is that the entropy inherent in the LS bytes of >= 24-bit words
-               quite often means that the frame would have to be "escaped" b/c the compressed size would be >= the
-               uncompressed size.  However, by shifting the input values down and running the remaining bits through
-               the normal compression algorithm, a net win can be achieved.  If this field is non-zero, it means that
-               the shifted-off bytes follow after the parameter section of the header and before the compressed
-               bitstream.  Note that doing this also allows us to use matrixing on 32-bit inputs after one or more
-               bytes are shifted off the bottom which helps the eventual compression ratio.  For stereo channels,
-               the shifted off bytes are interleaved.
-
-        The "escape" flag means that this segment was not compressed b/c the compressed size would be
-        >= uncompressed size.  In that case, the audio data was passed through uncompressed after the header.
-        The other header parameter bytes will not be sent.
-
-
-               PARAMETERS
-               ----------
-
-               If the segment is not a partial or escape segment, the total header size (in bytes) is given exactly by:
-
-                       4 + (2 + 2 * numU)                   (mono mode)
-                       4 + (2 + 2 * numV) + (2 + 2 * numV)  (stereo mode)
-
-        where the ALAC filter-lengths numU, numV are bounded by a
-        constant (in the current source, numU, numV <= NUMCOEPAIRS), and
-        this forces an absolute upper bound on header size.
-
-        Each segment-decode process loads up these bytes from the front of the
-        local stream, in the above order, then follows with the entropy-encoded
-        bits for the given segment.
-
-        To generalize middle-side, there are various mixing modes including middle-side, each lossless,
-        as embodied in the mix() and unmix() functions.  These functions exploit a generalized middle-side
-        transformation:
-
-        u := [(rL + (m-r)R)/m];
-        v := L - R;
-
-        where [ ] denotes integer floor.  The (lossless) inverse is
-
-        L = u + v - [rV/m];
-        R = L - v;
-
-        In the segment header, m and r are encoded in mixBits and mixRes.
-        Classical "middle-side" is obtained with m = 2, r = 1, but now
-        we have more generalized mixes.
-
-        NOTES
-        -----
-        The relevance of the ALAC coefficients is explained in detail
-        in patent documents.
-*/
-
-/*
-       EncodeStereo()
-       - encode a channel pair
-*/
-static int32_t
-EncodeStereo(ALAC_ENCODER *p, struct BitBuffer * bitstream, int32_t * inputBuffer, uint32_t stride, uint32_t channelIndex, uint32_t numSamples )
-{
-       BitBuffer               workBits;
-       BitBuffer               startBits = *bitstream;                 // squirrel away copy of current state in case we need to go back and do an escape packet
-       AGParamRec              agParams;
-       uint32_t        bits1, bits2;
-       uint32_t                dilate;
-       int32_t                 mixBits, mixRes, maxRes;
-       uint32_t                minBits, minBits1, minBits2;
-       uint32_t                numU, numV;
-       uint32_t                mode;
-       uint32_t                pbFactor;
-       uint32_t                chanBits;
-       uint8_t                 bytesShifted;
-       SearchCoefs             coefsU;
-       SearchCoefs             coefsV;
-       uint32_t                indx;
-       uint8_t                 partialFrame;
-       uint32_t                escapeBits;
-       bool                    doEscape;
-       int32_t                 status = ALAC_noErr;
-       int32_t                 bestRes;
-       uint32_t numUV, converge;
-
-       // make sure we handle this bit-depth before we get going
-       RequireAction( (p->mBitDepth == 16) || (p->mBitDepth == 20) || (p->mBitDepth == 24) || (p->mBitDepth == 32), return kALAC_ParamError; );
-
-       // reload coefs pointers for this channel pair
-       // - note that, while you might think they should be re-initialized per block, retaining state across blocks
-       //       actually results in better overall compression
-       // - strangely, re-using the same coefs for the different passes of the "mixRes" search loop instead of using
-       //       different coefs for the different passes of "mixRes" results in even better compression
-       coefsU = (SearchCoefs) p->mCoefsU[channelIndex];
-       coefsV = (SearchCoefs) p->mCoefsV[channelIndex];
-
-       // matrix encoding adds an extra bit but 32-bit inputs cannot be matrixed b/c 33 is too many
-       // so enable 16-bit "shift off" and encode in 17-bit mode
-       // - in addition, 24-bit mode really improves with one byte shifted off
-       if ( p->mBitDepth == 32 )
-               bytesShifted = 2;
-       else if ( p->mBitDepth >= 24 )
-               bytesShifted = 1;
-       else
-               bytesShifted = 0;
-
-       chanBits = p->mBitDepth - (bytesShifted * 8) + 1;
-
-       // flag whether or not this is a partial frame
-       partialFrame = (numSamples == p->mFrameSize) ? 0 : 1;
-
-       // brute-force encode optimization loop
-       // - run over variations of the encoding params to find the best choice
-       mixBits         = kDefaultMixBits;
-       maxRes          = kMaxRes;
-       numU = numV = kDefaultNumUV;
-       mode            = 0;
-       pbFactor        = 4;
-       dilate          = 8;
-
-       minBits = minBits1 = minBits2 = 1ul << 31;
-
-    bestRes = p->mLastMixRes[channelIndex];
-
-    for ( mixRes = 0; mixRes <= maxRes; mixRes++ )
-    {
-        // mix the stereo inputs
-        switch ( p->mBitDepth )
-        {
-            case 16:
-                mix16( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples/dilate, mixBits, mixRes );
-                break;
-            case 20:
-                mix20( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples/dilate, mixBits, mixRes );
-                break;
-            case 24:
-                // includes extraction of shifted-off bytes
-                mix24( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples/dilate,
-                        mixBits, mixRes, p->mShiftBufferUV, bytesShifted );
-                break;
-            case 32:
-                // includes extraction of shifted-off bytes
-                mix32( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples/dilate,
-                        mixBits, mixRes, p->mShiftBufferUV, bytesShifted );
-                break;
-        }
-
-        BitBufferInit( &workBits, p->mWorkBuffer, p->mMaxOutputBytes );
-
-        // run the dynamic predictors
-        pc_block( p->mMixBufferU, p->mPredictorU, numSamples/dilate, coefsU[numU - 1], numU, chanBits, DENSHIFT_DEFAULT );
-        pc_block( p->mMixBufferV, p->mPredictorV, numSamples/dilate, coefsV[numV - 1], numV, chanBits, DENSHIFT_DEFAULT );
-
-        // run the lossless compressor on each channel
-        set_ag_params( &agParams, MB0, (pbFactor * PB0) / 4, KB0, numSamples/dilate, numSamples/dilate, MAX_RUN_DEFAULT );
-        status = dyn_comp( &agParams, p->mPredictorU, &workBits, numSamples/dilate, chanBits, &bits1 );
-        RequireNoErr( status, goto Exit; );
-
-        set_ag_params( &agParams, MB0, (pbFactor * PB0) / 4, KB0, numSamples/dilate, numSamples/dilate, MAX_RUN_DEFAULT );
-        status = dyn_comp( &agParams, p->mPredictorV, &workBits, numSamples/dilate, chanBits, &bits2 );
-        RequireNoErr( status, goto Exit; );
-
-        // look for best match
-        if ( (bits1 + bits2) < minBits1 )
-        {
-            minBits1 = bits1 + bits2;
-            bestRes = mixRes;
-        }
-    }
-
-    p->mLastMixRes[channelIndex] = (int16_t)bestRes;
-
-       // mix the stereo inputs with the current best mixRes
-       mixRes = p->mLastMixRes[channelIndex];
-       switch ( p->mBitDepth )
-       {
-               case 16:
-                       mix16( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples, mixBits, mixRes );
-                       break;
-               case 20:
-                       mix20( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples, mixBits, mixRes );
-                       break;
-               case 24:
-                       // also extracts the shifted off bytes into the shift buffers
-                       mix24( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples,
-                                       mixBits, mixRes, p->mShiftBufferUV, bytesShifted );
-                       break;
-               case 32:
-                       // also extracts the shifted off bytes into the shift buffers
-                       mix32( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples,
-                                       mixBits, mixRes, p->mShiftBufferUV, bytesShifted );
-                       break;
-       }
-
-       // now it's time for the predictor coefficient search loop
-       numU = numV = kMinUV;
-       minBits1 = minBits2 = 1ul << 31;
-
-       for ( numUV = kMinUV; numUV <= kMaxUV; numUV += 4 )
-       {
-               BitBufferInit( &workBits, p->mWorkBuffer, p->mMaxOutputBytes );
-
-               dilate = 32;
-
-               // run the predictor over the same data multiple times to help it converge
-               for ( converge = 0; converge < 8; converge++ )
-               {
-                   pc_block( p->mMixBufferU, p->mPredictorU, numSamples/dilate, coefsU[numUV-1], numUV, chanBits, DENSHIFT_DEFAULT );
-                   pc_block( p->mMixBufferV, p->mPredictorV, numSamples/dilate, coefsV[numUV-1], numUV, chanBits, DENSHIFT_DEFAULT );
-               }
-
-               dilate = 8;
-
-               set_ag_params( &agParams, MB0, (pbFactor * PB0)/4, KB0, numSamples/dilate, numSamples/dilate, MAX_RUN_DEFAULT );
-               status = dyn_comp( &agParams, p->mPredictorU, &workBits, numSamples/dilate, chanBits, &bits1 );
-
-               if ( (bits1 * dilate + 16 * numUV) < minBits1 )
-               {
-                       minBits1 = bits1 * dilate + 16 * numUV;
-                       numU = numUV;
-               }
-
-               set_ag_params( &agParams, MB0, (pbFactor * PB0)/4, KB0, numSamples/dilate, numSamples/dilate, MAX_RUN_DEFAULT );
-               status = dyn_comp( &agParams, p->mPredictorV, &workBits, numSamples/dilate, chanBits, &bits2 );
-
-               if ( (bits2 * dilate + 16 * numUV) < minBits2 )
-               {
-                       minBits2 = bits2 * dilate + 16 * numUV;
-                       numV = numUV;
-               }
-       }
-
-       // test for escape hatch if best calculated compressed size turns out to be more than the input size
-       minBits = minBits1 + minBits2 + (8 /* mixRes/maxRes/etc. */ * 8) + ((partialFrame == true) ? 32 : 0);
-       if ( bytesShifted != 0 )
-               minBits += (numSamples * (bytesShifted * 8) * 2);
-
-       escapeBits = (numSamples * p->mBitDepth * 2) + ((partialFrame == true) ? 32 : 0) + (2 * 8);     /* 2 common header bytes */
-
-       doEscape = (minBits >= escapeBits) ? true : false;
-
-       if ( doEscape == false )
-       {
-               // write bitstream header and coefs
-               BitBufferWrite( bitstream, 0, 12 );
-               BitBufferWrite( bitstream, (partialFrame << 3) | (bytesShifted << 1), 4 );
-               if ( partialFrame )
-                       BitBufferWrite( bitstream, numSamples, 32 );
-               BitBufferWrite( bitstream, mixBits, 8 );
-               BitBufferWrite( bitstream, mixRes, 8 );
-
-               //Assert( (mode < 16) && (DENSHIFT_DEFAULT < 16) );
-               //Assert( (pbFactor < 8) && (numU < 32) );
-               //Assert( (pbFactor < 8) && (numV < 32) );
-
-               BitBufferWrite( bitstream, (mode << 4) | DENSHIFT_DEFAULT, 8 );
-               BitBufferWrite( bitstream, (pbFactor << 5) | numU, 8 );
-               for ( indx = 0; indx < numU; indx++ )
-                       BitBufferWrite( bitstream, coefsU[numU - 1][indx], 16 );
-
-               BitBufferWrite( bitstream, (mode << 4) | DENSHIFT_DEFAULT, 8 );
-               BitBufferWrite( bitstream, (pbFactor << 5) | numV, 8 );
-               for ( indx = 0; indx < numV; indx++ )
-                       BitBufferWrite( bitstream, coefsV[numV - 1][indx], 16 );
-
-               // if shift active, write the interleaved shift buffers
-               if ( bytesShifted != 0 )
-               {
-                       uint32_t                bitShift = bytesShifted * 8;
-
-                       //Assert( bitShift <= 16 );
-
-                       for ( indx = 0; indx < (numSamples * 2); indx += 2 )
-                       {
-                               uint32_t                        shiftedVal;
-
-                               shiftedVal = ((uint32_t) p->mShiftBufferUV[indx + 0] << bitShift) | (uint32_t) p->mShiftBufferUV[indx + 1];
-                               BitBufferWrite( bitstream, shiftedVal, bitShift * 2 );
-                       }
-               }
-
-               // run the dynamic predictor and lossless compression for the "left" channel
-               // - note: to avoid allocating more buffers, we're mixing and matching between the available buffers instead
-               //                 of only using "U" buffers for the U-channel and "V" buffers for the V-channel
-               if ( mode == 0 )
-               {
-                       pc_block( p->mMixBufferU, p->mPredictorU, numSamples, coefsU[numU - 1], numU, chanBits, DENSHIFT_DEFAULT );
-               }
-               else
-               {
-                       pc_block( p->mMixBufferU, p->mPredictorV, numSamples, coefsU[numU - 1], numU, chanBits, DENSHIFT_DEFAULT );
-                       pc_block( p->mPredictorV, p->mPredictorU, numSamples, NULL, 31, chanBits, 0 );
-               }
-
-               set_ag_params( &agParams, MB0, (pbFactor * PB0) / 4, KB0, numSamples, numSamples, MAX_RUN_DEFAULT );
-               status = dyn_comp( &agParams, p->mPredictorU, bitstream, numSamples, chanBits, &bits1 );
-               RequireNoErr( status, goto Exit; );
-
-               // run the dynamic predictor and lossless compression for the "right" channel
-               if ( mode == 0 )
-               {
-                       pc_block( p->mMixBufferV, p->mPredictorV, numSamples, coefsV[numV - 1], numV, chanBits, DENSHIFT_DEFAULT );
-               }
-               else
-               {
-                       pc_block( p->mMixBufferV, p->mPredictorU, numSamples, coefsV[numV - 1], numV, chanBits, DENSHIFT_DEFAULT );
-                       pc_block( p->mPredictorU, p->mPredictorV, numSamples, NULL, 31, chanBits, 0 );
-               }
-
-               set_ag_params( &agParams, MB0, (pbFactor * PB0) / 4, KB0, numSamples, numSamples, MAX_RUN_DEFAULT );
-               status = dyn_comp( &agParams, p->mPredictorV, bitstream, numSamples, chanBits, &bits2 );
-               RequireNoErr( status, goto Exit; );
-
-               /*      if we happened to create a compressed packet that was actually bigger than an escape packet would be,
-                       chuck it and do an escape packet
-               */
-               minBits = BitBufferGetPosition( bitstream ) - BitBufferGetPosition( &startBits );
-               if ( minBits >= escapeBits )
-               {
-                       *bitstream = startBits;         // reset bitstream state
-                       doEscape = true;
-                       printf( "compressed frame too big: %u vs. %u \n", minBits, escapeBits );
-               }
-       }
-
-       if ( doEscape == true )
-       {
-               /* escape */
-               status = EncodeStereoEscape(p, bitstream, inputBuffer, stride, numSamples );
-
-#if VERBOSE_DEBUG
-               DebugMsg( "escape!: %u vs %u\n", minBits, escapeBits );
-#endif
-       }
-
-Exit:
-       return status;
-}
-
-/*
-       EncodeStereoFast()
-       - encode a channel pair without the search loop for maximum possible speed
-*/
-static int32_t
-EncodeStereoFast(ALAC_ENCODER *p, struct BitBuffer * bitstream, int32_t * inputBuffer, uint32_t stride, uint32_t channelIndex, uint32_t numSamples )
-{
-       BitBuffer               startBits = *bitstream;                 // squirrel away current bit position in case we decide to use escape hatch
-       AGParamRec              agParams;
-       uint32_t                bits1, bits2;
-       int32_t                 mixBits, mixRes;
-       uint32_t                minBits, minBits1, minBits2;
-       uint32_t                numU, numV;
-       uint32_t                mode;
-       uint32_t                pbFactor;
-       uint32_t                chanBits;
-       uint8_t                 bytesShifted;
-       SearchCoefs             coefsU;
-       SearchCoefs             coefsV;
-       uint32_t                indx;
-       uint8_t                 partialFrame;
-       uint32_t                escapeBits;
-       bool                    doEscape;
-       int32_t                 status;
-
-       // make sure we handle this bit-depth before we get going
-       RequireAction( (p->mBitDepth == 16) || (p->mBitDepth == 20) || (p->mBitDepth == 24) || (p->mBitDepth == 32), return kALAC_ParamError; );
-
-       // reload coefs pointers for this channel pair
-       // - note that, while you might think they should be re-initialized per block, retaining state across blocks
-       //       actually results in better overall compression
-       // - strangely, re-using the same coefs for the different passes of the "mixRes" search loop instead of using
-       //       different coefs for the different passes of "mixRes" results in even better compression
-       coefsU = (SearchCoefs) p->mCoefsU[channelIndex];
-       coefsV = (SearchCoefs) p->mCoefsV[channelIndex];
-
-       // matrix encoding adds an extra bit but 32-bit inputs cannot be matrixed b/c 33 is too many
-       // so enable 16-bit "shift off" and encode in 17-bit mode
-       // - in addition, 24-bit mode really improves with one byte shifted off
-       if ( p->mBitDepth == 32 )
-               bytesShifted = 2;
-       else if ( p->mBitDepth >= 24 )
-               bytesShifted = 1;
-       else
-               bytesShifted = 0;
-
-       chanBits = p->mBitDepth - (bytesShifted * 8) + 1;
-
-       // flag whether or not this is a partial frame
-       partialFrame = (numSamples == p->mFrameSize) ? 0 : 1;
-
-       // set up default encoding parameters for "fast" mode
-       mixBits         = kDefaultMixBits;
-       mixRes          = kDefaultMixRes;
-       numU = numV = kDefaultNumUV;
-       mode            = 0;
-       pbFactor        = 4;
-
-       minBits = minBits1 = minBits2 = 1ul << 31;
-
-       // mix the stereo inputs with default mixBits/mixRes
-       switch ( p->mBitDepth )
-       {
-               case 16:
-                       mix16( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples, mixBits, mixRes );
-                       break;
-               case 20:
-                       mix20( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples, mixBits, mixRes );
-                       break;
-               case 24:
-                       // also extracts the shifted off bytes into the shift buffers
-                       mix24( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples,
-                                       mixBits, mixRes, p->mShiftBufferUV, bytesShifted );
-                       break;
-               case 32:
-                       // also extracts the shifted off bytes into the shift buffers
-                       mix32( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples,
-                                       mixBits, mixRes, p->mShiftBufferUV, bytesShifted );
-                       break;
-       }
-
-       /* speculatively write the bitstream assuming the compressed version will be smaller */
-
-       // write bitstream header and coefs
-       BitBufferWrite( bitstream, 0, 12 );
-       BitBufferWrite( bitstream, (partialFrame << 3) | (bytesShifted << 1), 4 );
-       if ( partialFrame )
-               BitBufferWrite( bitstream, numSamples, 32 );
-       BitBufferWrite( bitstream, mixBits, 8 );
-       BitBufferWrite( bitstream, mixRes, 8 );
-
-       //Assert( (mode < 16) && (DENSHIFT_DEFAULT < 16) );
-       //Assert( (pbFactor < 8) && (numU < 32) );
-       //Assert( (pbFactor < 8) && (numV < 32) );
-
-       BitBufferWrite( bitstream, (mode << 4) | DENSHIFT_DEFAULT, 8 );
-       BitBufferWrite( bitstream, (pbFactor << 5) | numU, 8 );
-       for ( indx = 0; indx < numU; indx++ )
-               BitBufferWrite( bitstream, coefsU[numU - 1][indx], 16 );
-
-       BitBufferWrite( bitstream, (mode << 4) | DENSHIFT_DEFAULT, 8 );
-       BitBufferWrite( bitstream, (pbFactor << 5) | numV, 8 );
-       for ( indx = 0; indx < numV; indx++ )
-               BitBufferWrite( bitstream, coefsV[numV - 1][indx], 16 );
-
-       // if shift active, write the interleaved shift buffers
-       if ( bytesShifted != 0 )
-       {
-               uint32_t                bitShift = bytesShifted * 8;
-
-               //Assert( bitShift <= 16 );
-
-               for ( indx = 0; indx < (numSamples * 2); indx += 2 )
-               {
-                       uint32_t                        shiftedVal;
-
-                       shiftedVal = ((uint32_t) p->mShiftBufferUV[indx + 0] << bitShift) | (uint32_t) p->mShiftBufferUV[indx + 1];
-                       BitBufferWrite( bitstream, shiftedVal, bitShift * 2 );
-               }
-       }
-
-       // run the dynamic predictor and lossless compression for the "left" channel
-       // - note: we always use mode 0 in the "fast" path so we don't need the code for mode != 0
-       pc_block( p->mMixBufferU, p->mPredictorU, numSamples, coefsU[numU - 1], numU, chanBits, DENSHIFT_DEFAULT );
-
-       set_ag_params( &agParams, MB0, (pbFactor * PB0) / 4, KB0, numSamples, numSamples, MAX_RUN_DEFAULT );
-       status = dyn_comp( &agParams, p->mPredictorU, bitstream, numSamples, chanBits, &bits1 );
-       RequireNoErr( status, goto Exit; );
-
-       // run the dynamic predictor and lossless compression for the "right" channel
-       pc_block( p->mMixBufferV, p->mPredictorV, numSamples, coefsV[numV - 1], numV, chanBits, DENSHIFT_DEFAULT );
-
-       set_ag_params( &agParams, MB0, (pbFactor * PB0) / 4, KB0, numSamples, numSamples, MAX_RUN_DEFAULT );
-       status = dyn_comp( &agParams, p->mPredictorV, bitstream, numSamples, chanBits, &bits2 );
-       RequireNoErr( status, goto Exit; );
-
-       // do bit requirement calculations
-       minBits1 = bits1 + (numU * sizeof(int16_t) * 8);
-       minBits2 = bits2 + (numV * sizeof(int16_t) * 8);
-
-       // test for escape hatch if best calculated compressed size turns out to be more than the input size
-       minBits = minBits1 + minBits2 + (8 /* mixRes/maxRes/etc. */ * 8) + ((partialFrame == true) ? 32 : 0);
-       if ( bytesShifted != 0 )
-               minBits += (numSamples * (bytesShifted * 8) * 2);
-
-       escapeBits = (numSamples * p->mBitDepth * 2) + ((partialFrame == true) ? 32 : 0) + (2 * 8);     /* 2 common header bytes */
-
-       doEscape = (minBits >= escapeBits) ? true : false;
-
-       if ( doEscape == false )
-       {
-               /*      if we happened to create a compressed packet that was actually bigger than an escape packet would be,
-                       chuck it and do an escape packet
-               */
-               minBits = BitBufferGetPosition( bitstream ) - BitBufferGetPosition( &startBits );
-               if ( minBits >= escapeBits )
-               {
-                       doEscape = true;
-                       printf( "compressed frame too big: %u vs. %u\n", minBits, escapeBits );
-               }
-
-       }
-
-       if ( doEscape == true )
-       {
-               /* escape */
-
-               // reset bitstream position since we speculatively wrote the compressed version
-               *bitstream = startBits;
-
-               // write escape frame
-               status = EncodeStereoEscape(p, bitstream, inputBuffer, stride, numSamples );
-
-#if VERBOSE_DEBUG
-               DebugMsg( "escape!: %u vs %u\n", minBits, (numSamples * p->mBitDepth * 2) );
-#endif
-       }
-
-Exit:
-       return status;
-}
-
-/*
-       EncodeStereoEscape()
-       - encode stereo escape frame
-*/
-static int32_t
-EncodeStereoEscape(ALAC_ENCODER *p, struct BitBuffer * bitstream, int32_t * inputBuffer, uint32_t stride, uint32_t numSamples )
-{
-       uint8_t                 partialFrame;
-       uint32_t                indx;
-
-       // flag whether or not this is a partial frame
-       partialFrame = (numSamples == p->mFrameSize) ? 0 : 1;
-
-       // write bitstream header
-       BitBufferWrite( bitstream, 0, 12 );
-       BitBufferWrite( bitstream, (partialFrame << 3) | 1, 4 );        // LSB = 1 means "frame not compressed"
-       if ( partialFrame )
-               BitBufferWrite( bitstream, numSamples, 32 );
-
-       // just copy the input data to the output buffer
-       switch ( p->mBitDepth )
-       {
-               case 16:
-                       for ( indx = 0; indx < (numSamples * stride); indx += stride )
-                       {
-                               BitBufferWrite( bitstream, inputBuffer[indx + 0] >> 16, 16 );
-                               BitBufferWrite( bitstream, inputBuffer[indx + 1] >> 16, 16 );
-                       }
-                       break;
-               case 20:
-                       for ( indx = 0; indx < (numSamples * stride); indx += stride )
-                       {
-                               BitBufferWrite( bitstream, inputBuffer[indx + 0] >> 12, 16 );
-                               BitBufferWrite( bitstream, inputBuffer[indx + 1] >> 12, 16 );
-                       }
-                       break;
-               case 24:
-                       // mix24() with mixres param = 0 means de-interleave so use it to simplify things
-                       mix24( inputBuffer, stride, p->mMixBufferU, p->mMixBufferV, numSamples, 0, 0, p->mShiftBufferUV, 0 );
-                       for ( indx = 0; indx < numSamples; indx++ )
-                       {
-                               BitBufferWrite( bitstream, p->mMixBufferU[indx] >> 8, 24 );
-                               BitBufferWrite( bitstream, p->mMixBufferV[indx] >> 8, 24 );
-                       }
-                       break;
-               case 32:
-                       for ( indx = 0; indx < (numSamples * stride); indx += stride )
-                       {
-                               BitBufferWrite( bitstream, inputBuffer[indx + 0], 32 );
-                               BitBufferWrite( bitstream, inputBuffer[indx + 1], 32 );
-                       }
-                       break;
-       }
-
-       return ALAC_noErr;
-}
-
-/*
-       EncodeMono()
-       - encode a mono input buffer
-*/
-static int32_t
-EncodeMono(ALAC_ENCODER *p, struct BitBuffer * bitstream, int32_t * inputBuffer, uint32_t stride, uint32_t channelIndex, uint32_t numSamples )
-{
-       BitBuffer               startBits = *bitstream;                 // squirrel away copy of current state in case we need to go back and do an escape packet
-       AGParamRec              agParams;
-       uint32_t                bits1;
-       uint32_t                numU;
-       SearchCoefs             coefsU;
-       uint32_t                dilate;
-       uint32_t                minBits, bestU;
-       uint32_t                minU, maxU;
-       uint32_t                indx, indx2;
-       uint8_t                 bytesShifted;
-       uint32_t                shift;
-       uint32_t                mask;
-       uint32_t                chanBits;
-       uint8_t                 pbFactor;
-       uint8_t                 partialFrame;
-       uint32_t                escapeBits;
-       bool                    doEscape;
-       int32_t                 status = ALAC_noErr;
-       uint32_t converge;
-
-
-       // make sure we handle this bit-depth before we get going
-       RequireAction( (p->mBitDepth == 16) || (p->mBitDepth == 20) || (p->mBitDepth == 24) || (p->mBitDepth == 32), return kALAC_ParamError; );
-
-       // reload coefs array from previous frame
-       coefsU = (SearchCoefs) p->mCoefsU[channelIndex];
-
-       // pick bit depth for actual encoding
-       // - we lop off the lower byte(s) for 24-/32-bit encodings
-       if ( p->mBitDepth == 32 )
-               bytesShifted = 2;
-       else if ( p->mBitDepth >= 24 )
-               bytesShifted = 1;
-       else
-               bytesShifted = 0;
-
-       shift = bytesShifted * 8;
-       mask = (1ul << shift) - 1;
-       chanBits = p->mBitDepth - (bytesShifted * 8);
-
-       // flag whether or not this is a partial frame
-       partialFrame = (numSamples == p->mFrameSize) ? 0 : 1;
-
-       // convert N-bit data to 32-bit for predictor
-       switch ( p->mBitDepth )
-       {
-               case 16:
-                       // convert 16-bit data to 32-bit for predictor
-                       for ( indx = 0, indx2 = 0; indx < numSamples; indx++, indx2 += stride )
-                               p->mMixBufferU[indx] = inputBuffer[indx2] >> 16;
-                       break;
-
-               case 20:
-                       // convert 20-bit data to 32-bit for predictor
-                       for ( indx = 0, indx2 = 0; indx < numSamples; indx++, indx2 += stride )
-                               p->mMixBufferU[indx] = inputBuffer[indx2] >> 12;
-                       break;
-               case 24:
-                       // convert 24-bit data to 32-bit for the predictor and extract the shifted off byte(s)
-                       for ( indx = 0, indx2 = 0; indx < numSamples; indx++, indx2 += stride )
-                       {
-                               p->mMixBufferU[indx] = inputBuffer[indx2] >> 8;
-                               p->mShiftBufferUV[indx] = (uint16_t)(p->mMixBufferU[indx] & mask);
-                               p->mMixBufferU[indx] >>= shift;
-                       }
-
-                       break;
-               case 32:
-                       // just copy the 32-bit input data for the predictor and extract the shifted off byte(s)
-                       for ( indx = 0, indx2 = 0; indx < numSamples; indx++, indx2 += stride )
-                       {
-                               p->mShiftBufferUV[indx] = (uint16_t)(inputBuffer[indx2] & mask);
-                               p->mMixBufferU[indx] = inputBuffer[indx2] >> shift;
-                       }
-                       break;
-       }
-
-       // brute-force encode optimization loop (implied "encode depth" of 0 if comparing to cmd line tool)
-       // - run over variations of the encoding params to find the best choice
-       minU            = 4;
-       maxU            = 8;
-       minBits         = 1ul << 31;
-       pbFactor        = 4;
-
-       bestU   = minU;
-
-       for ( numU = minU; numU <= maxU; numU += 4 )
-       {
-               BitBuffer               workBits;
-               uint32_t                numBits;
-
-               BitBufferInit( &workBits, p->mWorkBuffer, p->mMaxOutputBytes );
-
-               dilate = 32;
-               for ( converge = 0; converge < 7; converge++ )
-                       pc_block( p->mMixBufferU, p->mPredictorU, numSamples/dilate, coefsU[numU-1], numU, chanBits, DENSHIFT_DEFAULT );
-
-               dilate = 8;
-               pc_block( p->mMixBufferU, p->mPredictorU, numSamples/dilate, coefsU[numU-1], numU, chanBits, DENSHIFT_DEFAULT );
-
-               set_ag_params( &agParams, MB0, (pbFactor * PB0) / 4, KB0, numSamples/dilate, numSamples/dilate, MAX_RUN_DEFAULT );
-               status = dyn_comp( &agParams, p->mPredictorU, &workBits, numSamples/dilate, chanBits, &bits1 );
-               RequireNoErr( status, goto Exit; );
-
-               numBits = (dilate * bits1) + (16 * numU);
-               if ( numBits < minBits )
-               {
-                       bestU   = numU;
-                       minBits = numBits;
-               }
-       }
-
-       // test for escape hatch if best calculated compressed size turns out to be more than the input size
-       // - first, add bits for the header bytes mixRes/maxRes/shiftU/filterU
-       minBits += (4 /* mixRes/maxRes/etc. */ * 8) + ((partialFrame == true) ? 32 : 0);
-       if ( bytesShifted != 0 )
-               minBits += (numSamples * (bytesShifted * 8));
-
-       escapeBits = (numSamples * p->mBitDepth) + ((partialFrame == true) ? 32 : 0) + (2 * 8); /* 2 common header bytes */
-
-       doEscape = (minBits >= escapeBits) ? true : false;
-
-       if ( doEscape == false )
-       {
-               // write bitstream header
-               BitBufferWrite( bitstream, 0, 12 );
-               BitBufferWrite( bitstream, (partialFrame << 3) | (bytesShifted << 1), 4 );
-               if ( partialFrame )
-                       BitBufferWrite( bitstream, numSamples, 32 );
-               BitBufferWrite( bitstream, 0, 16 );                                                             // mixBits = mixRes = 0
-
-               // write the params and predictor coefs
-               numU = bestU;
-               BitBufferWrite( bitstream, (0 << 4) | DENSHIFT_DEFAULT, 8 );    // modeU = 0
-               BitBufferWrite( bitstream, (pbFactor << 5) | numU, 8 );
-               for ( indx = 0; indx < numU; indx++ )
-                       BitBufferWrite( bitstream, coefsU[numU-1][indx], 16 );
-
-               // if shift active, write the interleaved shift buffers
-               if ( bytesShifted != 0 )
-               {
-                       for ( indx = 0; indx < numSamples; indx++ )
-                               BitBufferWrite( bitstream, p->mShiftBufferUV[indx], shift );
-               }
-
-               // run the dynamic predictor with the best result
-               pc_block( p->mMixBufferU, p->mPredictorU, numSamples, coefsU[numU-1], numU, chanBits, DENSHIFT_DEFAULT );
-
-               // do lossless compression
-               set_standard_ag_params( &agParams, numSamples, numSamples );
-               status = dyn_comp( &agParams, p->mPredictorU, bitstream, numSamples, chanBits, &bits1 );
-               //AssertNoErr( status );
-
-
-               /*      if we happened to create a compressed packet that was actually bigger than an escape packet would be,
-                       chuck it and do an escape packet
-               */
-               minBits = BitBufferGetPosition( bitstream ) - BitBufferGetPosition( &startBits );
-               if ( minBits >= escapeBits )
-               {
-                       *bitstream = startBits;         // reset bitstream state
-                       doEscape = true;
-                       printf( "compressed frame too big: %u vs. %u\n", minBits, escapeBits );
-               }
-       }
-
-       if ( doEscape == true )
-       {
-               // write bitstream header and coefs
-               BitBufferWrite( bitstream, 0, 12 );
-               BitBufferWrite( bitstream, (partialFrame << 3) | 1, 4 );        // LSB = 1 means "frame not compressed"
-               if ( partialFrame )
-                       BitBufferWrite( bitstream, numSamples, 32 );
-
-               // just copy the input data to the output buffer
-               switch ( p->mBitDepth )
-               {
-                       case 16:
-                               for ( indx = 0; indx < (numSamples * stride); indx += stride )
-                                       BitBufferWrite( bitstream, inputBuffer[indx] >> 16, 16 );
-                               break;
-                       case 20:
-                               // convert 20-bit data to 32-bit for simplicity
-                               for ( indx = 0; indx < (numSamples * stride); indx += stride )
-                                       BitBufferWrite( bitstream, inputBuffer[indx] >> 12, 20 );
-                               break;
-                       case 24:
-                               // convert 24-bit data to 32-bit for simplicity
-                               for ( indx = 0, indx2 = 0; indx < numSamples; indx++, indx2 += stride )
-                               {
-                                       p->mMixBufferU[indx] = inputBuffer[indx2] >> 8;
-                                       BitBufferWrite( bitstream, p->mMixBufferU[indx], 24 );
-                               }
-                               break;
-                       case 32:
-                               for ( indx = 0; indx < (numSamples * stride); indx += stride )
-                                       BitBufferWrite( bitstream, inputBuffer[indx], 32 );
-                               break;
-               }
-#if VERBOSE_DEBUG
-               DebugMsg( "escape!: %u vs %u\n", minBits, (numSamples * p->mBitDepth) );
-#endif
-       }
-
-Exit:
-       return status;
-}
-
-#if PRAGMA_MARK
-#pragma mark -
-#endif
-
-/*
-       Encode()
-       - encode the next block of samples
-*/
-int32_t
-alac_encode(ALAC_ENCODER *p, uint32_t numChannels, uint32_t            numSamples,
-                                                                  int32_t * theReadBuffer, unsigned char * theWriteBuffer, uint32_t * ioNumBytes)
-{
-       uint32_t                outputSize;
-       BitBuffer               bitstream;
-       int32_t                 status;
-
-       // create a bit buffer structure pointing to our output buffer
-       BitBufferInit( &bitstream, theWriteBuffer, p->mMaxOutputBytes );
-
-       if ( numChannels == 2 )
-       {
-               // add 3-bit frame start tag ID_CPE = channel pair & 4-bit element instance tag = 0
-               BitBufferWrite( &bitstream, ID_CPE, 3 );
-               BitBufferWrite( &bitstream, 0, 4 );
-
-               // encode stereo input buffer
-               if ( p->mFastMode == false )
-                       status = EncodeStereo(p, &bitstream, theReadBuffer, 2, 0, numSamples );
-               else
-                       status = EncodeStereoFast(p, &bitstream, theReadBuffer, 2, 0, numSamples );
-               RequireNoErr( status, goto Exit; );
-       }
-       else if ( numChannels == 1 )
-       {
-               // add 3-bit frame start tag ID_SCE = mono channel & 4-bit element instance tag = 0
-               BitBufferWrite( &bitstream, ID_SCE, 3 );
-               BitBufferWrite( &bitstream, 0, 4 );
-
-               // encode mono input buffer
-               status = EncodeMono(p, &bitstream, theReadBuffer, 1, 0, numSamples );
-               RequireNoErr( status, goto Exit; );
-       }
-       else
-       {
-               int32_t *                       inputBuffer;
-               uint32_t                        tag;
-               uint32_t                        channelIndex;
-               uint32_t                        inputIncrement;
-               uint8_t                         stereoElementTag;
-               uint8_t                         monoElementTag;
-               uint8_t                         lfeElementTag;
-
-               inputBuffer             = theReadBuffer;
-               inputIncrement  = ((p->mBitDepth + 7) / 8);
-
-               stereoElementTag        = 0;
-               monoElementTag          = 0;
-               lfeElementTag           = 0;
-
-               for ( channelIndex = 0; channelIndex < numChannels; )
-               {
-                       tag = (sChannelMaps[numChannels - 1] & (0x7ul << (channelIndex * 3))) >> (channelIndex * 3);
-
-                       BitBufferWrite( &bitstream, tag, 3 );
-                       switch ( tag )
-                       {
-                               case ID_SCE:
-                                       // mono
-                                       BitBufferWrite( &bitstream, monoElementTag, 4 );
-
-                                       status = EncodeMono(p, &bitstream, inputBuffer, numChannels, channelIndex, numSamples );
-
-                                       inputBuffer += inputIncrement;
-                                       channelIndex++;
-                                       monoElementTag++;
-                                       break;
-
-                               case ID_CPE:
-                                       // stereo
-                                       BitBufferWrite( &bitstream, stereoElementTag, 4 );
-
-                                       status = EncodeStereo(p,&bitstream, inputBuffer, numChannels, channelIndex, numSamples );
-
-                                       inputBuffer += (inputIncrement * 2);
-                                       channelIndex += 2;
-                                       stereoElementTag++;
-                                       break;
-
-                               case ID_LFE:
-                                       // LFE channel (subwoofer)
-                                       BitBufferWrite( &bitstream, lfeElementTag, 4 );
-
-                                       status = EncodeMono(p, &bitstream, inputBuffer, numChannels, channelIndex, numSamples );
-
-                                       inputBuffer += inputIncrement;
-                                       channelIndex++;
-                                       lfeElementTag++;
-                                       break;
-
-                               default:
-                                       printf( "That ain't right! (%u)\n", tag );
-                                       status = kALAC_ParamError;
-                                       goto Exit;
-                       }
-
-                       RequireNoErr( status, goto Exit; );
-               }
-       }
-
-#if VERBOSE_DEBUG
-{
-       // if there is room left in the output buffer, add some random fill data to test decoder
-       int32_t                 bitsLeft;
-       int32_t                 bytesLeft;
-
-       bitsLeft = BitBufferGetPosition( &bitstream ) - 3;      // - 3 for ID_END tag
-       bytesLeft = bitstream.byteSize - ((bitsLeft + 7) / 8);
-
-       if ( (bytesLeft > 20) && ((bytesLeft & 0x4u) != 0) )
-               AddFiller( &bitstream, bytesLeft );
-}
-#endif
-
-       // add 3-bit frame end tag: ID_END
-       BitBufferWrite( &bitstream, ID_END, 3 );
-
-       // byte-align the output data
-       BitBufferByteAlign( &bitstream, true );
-
-       outputSize = BitBufferGetPosition( &bitstream ) / 8;
-       //Assert( outputSize <= mMaxOutputBytes );
-
-
-       // all good, let iTunes know what happened and remember the total number of input sample frames
-       *ioNumBytes = outputSize;
-       //mEncodedFrames                           += encodeMsg->numInputSamples;
-
-       // gather encoding stats
-       p->mTotalBytesGenerated += outputSize;
-       p->mMaxFrameBytes = MAX( p->mMaxFrameBytes, outputSize );
-
-       status = ALAC_noErr;
-
-Exit:
-       return status;
-}
-
-
-#if PRAGMA_MARK
-#pragma mark -
-#endif
-
-/*
-       GetConfig()
-*/
-void
-GetConfig(ALAC_ENCODER *p, ALACSpecificConfig * config )
-{
-       config->frameLength                     = Swap32NtoB(p->mFrameSize);
-       config->compatibleVersion       = (uint8_t) kALACCompatibleVersion;
-       config->bitDepth                        = (uint8_t) p->mBitDepth;
-       config->pb                                      = (uint8_t) PB0;
-       config->kb                                      = (uint8_t) KB0;
-       config->mb                                      = (uint8_t) MB0;
-       config->numChannels                     = (uint8_t) p->mNumChannels;
-       config->maxRun                          = Swap16NtoB((uint16_t) MAX_RUN_DEFAULT);
-       config->maxFrameBytes           = Swap32NtoB(p->mMaxFrameBytes);
-       config->avgBitRate                      = Swap32NtoB(p->mAvgBitRate);
-       config->sampleRate                      = Swap32NtoB(p->mOutputSampleRate);
-}
-
-uint32_t
-alac_get_magic_cookie_size(uint32_t inNumChannels)
-{
-    if (inNumChannels > 2)
-    {
-        return sizeof(ALACSpecificConfig) + kChannelAtomSize + sizeof(ALACAudioChannelLayout);
-    }
-    else
-    {
-        return sizeof(ALACSpecificConfig);
-    }
-}
-
-void
-alac_get_magic_cookie(ALAC_ENCODER *p, void * outCookie, uint32_t * ioSize )
-{
-    ALACSpecificConfig theConfig = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-    ALACAudioChannelLayout theChannelLayout = {0, 0, 0};
-    uint8_t theChannelAtom[kChannelAtomSize] = {0, 0, 0, 0, 'c', 'h', 'a', 'n', 0, 0, 0, 0};
-    uint32_t theCookieSize = sizeof(ALACSpecificConfig);
-    uint8_t * theCookiePointer = (uint8_t *)outCookie;
-
-    GetConfig(p, &theConfig);
-    if (theConfig.numChannels > 2)
-    {
-        theChannelLayout.mChannelLayoutTag = Swap32NtoB(ALACChannelLayoutTags[theConfig.numChannels - 1]);
-        theCookieSize += (sizeof(ALACAudioChannelLayout) + kChannelAtomSize);
-    }
-     if (*ioSize >= theCookieSize)
-    {
-        memcpy(theCookiePointer, &theConfig, sizeof(ALACSpecificConfig));
-        theChannelAtom[3] = (sizeof(ALACAudioChannelLayout) + kChannelAtomSize);
-        if (theConfig.numChannels > 2)
-        {
-            theCookiePointer += sizeof(ALACSpecificConfig);
-            memcpy(theCookiePointer, theChannelAtom, kChannelAtomSize);
-            theCookiePointer += kChannelAtomSize;
-            memcpy(theCookiePointer, &theChannelLayout, sizeof(ALACAudioChannelLayout));
-        }
-        *ioSize = theCookieSize;
-    }
-    else
-    {
-        *ioSize = 0; // no incomplete cookies
-    }
-}
-
-/*
-       alac_encoder_init()
-       - initialize the encoder component with the current config
-*/
-int32_t
-alac_encoder_init (ALAC_ENCODER *p, uint32_t samplerate, uint32_t channels, uint32_t format_flags, uint32_t frameSize)
-{
-       int32_t                 status;
-       uint32_t indx;
-       int32_t channel, search;
-
-       p->mFrameSize = (frameSize > 0 && frameSize <= ALAC_FRAME_LENGTH) ? frameSize : ALAC_FRAME_LENGTH ;
-
-    p->mOutputSampleRate = samplerate;
-    p->mNumChannels = channels;
-    switch (format_flags)
-    {
-        case 1:
-            p->mBitDepth = 16;
-            break;
-        case 2:
-            p->mBitDepth = 20;
-            break;
-        case 3:
-            p->mBitDepth = 24;
-            break;
-        case 4:
-            p->mBitDepth = 32;
-            break;
-        default:
-            break;
-    }
-
-       // set up default encoding parameters and state
-       // - note: mFrameSize is set in the constructor or via alac_set_frame_size() which must be called before this routine
-       for ( indx = 0; indx < kALACMaxChannels; indx++ )
-               p->mLastMixRes[indx] = kDefaultMixRes;
-
-       // the maximum output frame size can be no bigger than (samplesPerBlock * numChannels * ((10 + sampleSize)/8) + 1)
-       // but note that this can be bigger than the input size!
-       // - since we don't yet know what our input format will be, use our max allowed sample size in the calculation
-       p->mMaxOutputBytes = p->mFrameSize * p->mNumChannels * ((10 + kMaxSampleSize) / 8)  + 1;
-
-       status = ALAC_noErr;
-
-       // initialize coefs arrays once b/c retaining state across blocks actually improves the encode ratio
-       for ( channel = 0; channel < (int32_t) p->mNumChannels; channel++ )
-       {
-               for ( search = 0; search < kALACMaxSearches; search++ )
-               {
-                       init_coefs( p->mCoefsU[channel][search], DENSHIFT_DEFAULT, kALACMaxCoefs );
-                       init_coefs( p->mCoefsV[channel][search], DENSHIFT_DEFAULT, kALACMaxCoefs );
-               }
-       }
-
-       return status;
-}
-
-/*
-       alac_get_source_format()
-       - given the input format, return one of our supported formats
-*/
-void
-alac_get_source_format(ALAC_ENCODER *p, const AudioFormatDescription * source, AudioFormatDescription * output )
-{
-       (void) output ;
-       // default is 16-bit native endian
-       // - note: for float input we assume that's coming from one of our decoders (mp3, aac) so it only makes sense
-       //                 to encode to 16-bit since the source was lossy in the first place
-       // - note: if not a supported bit depth, find the closest supported bit depth to the input one
-       if ( (source->mFormatID != kALACFormatLinearPCM) || ((source->mFormatFlags & kALACFormatFlagIsFloat) != 0) ||
-               ( source->mBitsPerChannel <= 16 ) )
-               p->mBitDepth = 16;
-       else if ( source->mBitsPerChannel <= 20 )
-               p->mBitDepth = 20;
-       else if ( source->mBitsPerChannel <= 24 )
-               p->mBitDepth = 24;
-       else
-               p->mBitDepth = 32;
-
-       // we support 16/20/24/32-bit integer data at any sample rate and our target number of channels
-       // and sample rate were specified when we were configured
-       /*
-    MakeUncompressedAudioFormat( mNumChannels, (float) mOutputSampleRate, mBitDepth, kAudioFormatFlagsNativeIntegerPacked, output );
-     */
-}
-
-
-
-#if VERBOSE_DEBUG
-
-#if PRAGMA_MARK
-#pragma mark -
-#endif
-
-/*
-       AddFiller()
-       - add fill and data stream elements to the bitstream to test the decoder
-*/
-static void AddFiller( BitBuffer * bits, int32_t numBytes )
-{
-       uint8_t         tag;
-       int32_t         indx;
-
-       // out of lameness, subtract 6 bytes to deal with header + alignment as required for fill/data elements
-       numBytes -= 6;
-       if ( numBytes <= 0 )
-               return;
-
-       // randomly pick Fill or Data Stream Element based on numBytes requested
-       tag = (numBytes & 0x8) ? ID_FIL : ID_DSE;
-
-       BitBufferWrite( bits, tag, 3 );
-       if ( tag == ID_FIL )
-       {
-               // can't write more than 269 bytes in a fill element
-               numBytes = (numBytes > 269) ? 269 : numBytes;
-
-               // fill element = 4-bit size unless >= 15 then 4-bit size + 8-bit extension size
-               if ( numBytes >= 15 )
-               {
-                       uint16_t                        extensionSize;
-
-                       BitBufferWrite( bits, 15, 4 );
-
-                       // 8-bit extension count field is "extra + 1" which is weird but I didn't define the syntax
-                       // - otherwise, there's no way to represent 15
-                       // - for example, to really mean 15 bytes you must encode extensionSize = 1
-                       // - why it's not like data stream elements I have no idea
-                       extensionSize = (numBytes - 15) + 1;
-                       //Assert( extensionSize <= 255 );
-                       BitBufferWrite( bits, extensionSize, 8 );
-               }
-               else
-                       BitBufferWrite( bits, numBytes, 4 );
-
-               BitBufferWrite( bits, 0x10, 8 );                // extension_type = FILL_DATA = b0001 or'ed with fill_nibble = b0000
-               for ( indx = 0; indx < (numBytes - 1); indx++ )
-                       BitBufferWrite( bits, 0xa5, 8 );        // fill_byte = b10100101 = 0xa5
-       }
-       else
-       {
-               // can't write more than 510 bytes in a data stream element
-               numBytes = (numBytes > 510) ? 510 : numBytes;
-
-               BitBufferWrite( bits, 0, 4 );                   // element instance tag
-               BitBufferWrite( bits, 1, 1 );                   // byte-align flag = true
-
-               // data stream element = 8-bit size unless >= 255 then 8-bit size + 8-bit size
-               if ( numBytes >= 255 )
-               {
-                       BitBufferWrite( bits, 255, 8 );
-                       BitBufferWrite( bits, numBytes - 255, 8 );
-               }
-               else
-                       BitBufferWrite( bits, numBytes, 8 );
-
-               BitBufferByteAlign( bits, true );               // byte-align with zeros
-
-               for ( indx = 0; indx < numBytes; indx++ )
-                       BitBufferWrite( bits, 0x5a, 8 );
-       }
-}
-
-#endif /* VERBOSE_DEBUG */
diff --git a/libs/libsndfile/src/ALAC/dp_dec.c b/libs/libsndfile/src/ALAC/dp_dec.c
deleted file mode 100644 (file)
index 45aae7a..0000000
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-       File:           dp_dec.c
-
-       Contains:       Dynamic Predictor decode routines
-
-       Copyright:      (c) 2001-2011 Apple, Inc.
-*/
-
-
-#include "dplib.h"
-#include <string.h>
-
-#if __GNUC__
-#define ALWAYS_INLINE          __attribute__((always_inline))
-#else
-#define ALWAYS_INLINE
-#endif
-
-#define LOOP_ALIGN
-
-static inline int32_t ALWAYS_INLINE sign_of_int( int32_t i )
-{
-    int32_t negishift;
-
-    negishift = ((uint32_t)-i) >> 31;
-    return negishift | (i >> 31);
-}
-
-void unpc_block( int32_t * pc1, int32_t * out, int32_t num, int16_t * coefs, int32_t numactive, uint32_t chanbits, uint32_t denshift )
-{
-       register int16_t        a0, a1, a2, a3;
-       register int32_t        b0, b1, b2, b3;
-       int32_t                                 j, k, lim;
-       int32_t                         sum1, sg, sgn, top, dd;
-       int32_t *                       pout;
-       int32_t                         del, del0;
-       uint32_t                        chanshift = 32 - chanbits;
-       int32_t                         denhalf = 1<<(denshift-1);
-
-       out[0] = pc1[0];
-       if ( numactive == 0 )
-       {
-               // just copy if numactive == 0 (but don't bother if in/out pointers the same)
-               if ( (num > 1)  && (pc1 != out) )
-                       memcpy( &out[1], &pc1[1], (num - 1) * sizeof(int32_t) );
-               return;
-       }
-       if ( numactive == 31 )
-       {
-               // short-circuit if numactive == 31
-               int32_t         prev;
-
-               /*      this code is written such that the in/out buffers can be the same
-                       to conserve buffer space on embedded devices like the iPod
-
-                       (original code)
-                       for ( j = 1; j < num; j++ )
-                               del = pc1[j] + out[j-1];
-                               out[j] = (del << chanshift) >> chanshift;
-               */
-               prev = out[0];
-               for ( j = 1; j < num; j++ )
-               {
-                       del = pc1[j] + prev;
-                       prev = (del << chanshift) >> chanshift;
-                       out[j] = prev;
-               }
-               return;
-       }
-
-       for ( j = 1; j <= numactive; j++ )
-       {
-               del = pc1[j] + out[j-1];
-               out[j] = (del << chanshift) >> chanshift;
-       }
-
-       lim = numactive + 1;
-
-       if ( numactive == 4 )
-       {
-               // optimization for numactive == 4
-               register int16_t        ia0, ia1, ia2, ia3;
-               register int32_t        ib0, ib1, ib2, ib3;
-
-               ia0 = coefs[0];
-               ia1 = coefs[1];
-               ia2 = coefs[2];
-               ia3 = coefs[3];
-
-               for ( j = lim; j < num; j++ )
-               {
-                       LOOP_ALIGN
-
-                       top = out[j - lim];
-                       pout = out + j - 1;
-
-                       ib0 = top - pout[0];
-                       ib1 = top - pout[-1];
-                       ib2 = top - pout[-2];
-                       ib3 = top - pout[-3];
-
-                       sum1 = (denhalf - ia0 * ib0 - ia1 * ib1 - ia2 * ib2 - ia3 * ib3) >> denshift;
-
-                       del = pc1[j];
-                       del0 = del;
-                       sg = sign_of_int(del);
-                       del += top + sum1;
-
-                       out[j] = (del << chanshift) >> chanshift;
-
-                       if ( sg > 0 )
-                       {
-                               sgn = sign_of_int( ib3 );
-                               ia3 -= sgn;
-                               del0 -= (4 - 3) * ((sgn * ib3) >> denshift);
-                               if ( del0 <= 0 )
-                                       continue;
-
-                               sgn = sign_of_int( ib2 );
-                               ia2 -= sgn;
-                               del0 -= (4 - 2) * ((sgn * ib2) >> denshift);
-                               if ( del0 <= 0 )
-                                       continue;
-
-                               sgn = sign_of_int( ib1 );
-                               ia1 -= sgn;
-                               del0 -= (4 - 1) * ((sgn * ib1) >> denshift);
-                               if ( del0 <= 0 )
-                                       continue;
-
-                               ia0 -= sign_of_int( ib0 );
-                       }
-                       else if ( sg < 0 )
-                       {
-                               // note: to avoid unnecessary negations, we flip the value of "sgn"
-                               sgn = -sign_of_int( ib3 );
-                               ia3 -= sgn;
-                               del0 -= (4 - 3) * ((sgn * ib3) >> denshift);
-                               if ( del0 >= 0 )
-                                       continue;
-
-                               sgn = -sign_of_int( ib2 );
-                               ia2 -= sgn;
-                               del0 -= (4 - 2) * ((sgn * ib2) >> denshift);
-                               if ( del0 >= 0 )
-                                       continue;
-
-                               sgn = -sign_of_int( ib1 );
-                               ia1 -= sgn;
-                               del0 -= (4 - 1) * ((sgn * ib1) >> denshift);
-                               if ( del0 >= 0 )
-                                       continue;
-
-                               ia0 += sign_of_int( ib0 );
-                       }
-               }
-
-               coefs[0] = ia0;
-               coefs[1] = ia1;
-               coefs[2] = ia2;
-               coefs[3] = ia3;
-       }
-       else if ( numactive == 8 )
-       {
-               register int16_t        a4, a5, a6, a7;
-               register int32_t        b4, b5, b6, b7;
-
-               // optimization for numactive == 8
-               a0 = coefs[0];
-               a1 = coefs[1];
-               a2 = coefs[2];
-               a3 = coefs[3];
-               a4 = coefs[4];
-               a5 = coefs[5];
-               a6 = coefs[6];
-               a7 = coefs[7];
-
-               for ( j = lim; j < num; j++ )
-               {
-                       LOOP_ALIGN
-
-                       top = out[j - lim];
-                       pout = out + j - 1;
-
-                       b0 = top - (*pout--);
-                       b1 = top - (*pout--);
-                       b2 = top - (*pout--);
-                       b3 = top - (*pout--);
-                       b4 = top - (*pout--);
-                       b5 = top - (*pout--);
-                       b6 = top - (*pout--);
-                       b7 = top - (*pout);
-                       pout += 8;
-
-                       sum1 = (denhalf - a0 * b0 - a1 * b1 - a2 * b2 - a3 * b3
-                                       - a4 * b4 - a5 * b5 - a6 * b6 - a7 * b7) >> denshift;
-
-                       del = pc1[j];
-                       del0 = del;
-                       sg = sign_of_int(del);
-                       del += top + sum1;
-
-                       out[j] = (del << chanshift) >> chanshift;
-
-                       if ( sg > 0 )
-                       {
-                               sgn = sign_of_int( b7 );
-                               a7 -= sgn;
-                               del0 -= 1 * ((sgn * b7) >> denshift);
-                               if ( del0 <= 0 )
-                                       continue;
-
-                               sgn = sign_of_int( b6 );
-                               a6 -= sgn;
-                               del0 -= 2 * ((sgn * b6) >> denshift);
-                               if ( del0 <= 0 )
-                                       continue;
-
-                               sgn = sign_of_int( b5 );
-                               a5 -= sgn;
-                               del0 -= 3 * ((sgn * b5) >> denshift);
-                               if ( del0 <= 0 )
-                                       continue;
-
-                               sgn = sign_of_int( b4 );
-                               a4 -= sgn;
-                               del0 -= 4 * ((sgn * b4) >> denshift);
-                               if ( del0 <= 0 )
-                                       continue;
-
-                               sgn = sign_of_int( b3 );
-                               a3 -= sgn;
-                               del0 -= 5 * ((sgn * b3) >> denshift);
-                               if ( del0 <= 0 )
-                                       continue;
-
-                               sgn = sign_of_int( b2 );
-                               a2 -= sgn;
-                               del0 -= 6 * ((sgn * b2) >> denshift);
-                               if ( del0 <= 0 )
-                                       continue;
-
-                               sgn = sign_of_int( b1 );
-                               a1 -= sgn;
-                               del0 -= 7 * ((sgn * b1) >> denshift);
-                               if ( del0 <= 0 )
-                                       continue;
-
-                               a0 -= sign_of_int( b0 );
-                       }
-                       else if ( sg < 0 )
-                       {
-                               // note: to avoid unnecessary negations, we flip the value of "sgn"
-                               sgn = -sign_of_int( b7 );
-                               a7 -= sgn;
-                               del0 -= 1 * ((sgn * b7) >> denshift);
-                               if ( del0 >= 0 )
-                                       continue;
-
-                               sgn = -sign_of_int( b6 );
-                               a6 -= sgn;
-                               del0 -= 2 * ((sgn * b6) >> denshift);
-                               if ( del0 >= 0 )
-                                       continue;
-
-                               sgn = -sign_of_int( b5 );
-                               a5 -= sgn;
-                               del0 -= 3 * ((sgn * b5) >> denshift);
-                               if ( del0 >= 0 )
-                                       continue;
-
-                               sgn = -sign_of_int( b4 );
-                               a4 -= sgn;
-                               del0 -= 4 * ((sgn * b4) >> denshift);
-                               if ( del0 >= 0 )
-                                       continue;
-
-                               sgn = -sign_of_int( b3 );
-                               a3 -= sgn;
-                               del0 -= 5 * ((sgn * b3) >> denshift);
-                               if ( del0 >= 0 )
-                                       continue;
-
-                               sgn = -sign_of_int( b2 );
-                               a2 -= sgn;
-                               del0 -= 6 * ((sgn * b2) >> denshift);
-                               if ( del0 >= 0 )
-                                       continue;
-
-                               sgn = -sign_of_int( b1 );
-                               a1 -= sgn;
-                               del0 -= 7 * ((sgn * b1) >> denshift);
-                               if ( del0 >= 0 )
-                                       continue;
-
-                               a0 += sign_of_int( b0 );
-                       }
-               }
-
-               coefs[0] = a0;
-               coefs[1] = a1;
-               coefs[2] = a2;
-               coefs[3] = a3;
-               coefs[4] = a4;
-               coefs[5] = a5;
-               coefs[6] = a6;
-               coefs[7] = a7;
-       }
-       else
-       {
-               // general case
-               for ( j = lim; j < num; j++ )
-               {
-                       LOOP_ALIGN
-
-                       sum1 = 0;
-                       pout = out + j - 1;
-                       top = out[j-lim];
-
-                       for ( k = 0; k < numactive; k++ )
-                               sum1 += coefs[k] * (pout[-k] - top);
-
-                       del = pc1[j];
-                       del0 = del;
-                       sg = sign_of_int( del );
-                       del += top + ((sum1 + denhalf) >> denshift);
-                       out[j] = (del << chanshift) >> chanshift;
-
-                       if ( sg > 0 )
-                       {
-                               for ( k = (numactive - 1); k >= 0; k-- )
-                               {
-                                       dd = top - pout[-k];
-                                       sgn = sign_of_int( dd );
-                                       coefs[k] -= sgn;
-                                       del0 -= (numactive - k) * ((sgn * dd) >> denshift);
-                                       if ( del0 <= 0 )
-                                               break;
-                               }
-                       }
-                       else if ( sg < 0 )
-                       {
-                               for ( k = (numactive - 1); k >= 0; k-- )
-                               {
-                                       dd = top - pout[-k];
-                                       sgn = sign_of_int( dd );
-                                       coefs[k] += sgn;
-                                       del0 -= (numactive - k) * ((-sgn * dd) >> denshift);
-                                       if ( del0 >= 0 )
-                                               break;
-                               }
-                       }
-               }
-       }
-}
diff --git a/libs/libsndfile/src/ALAC/dp_enc.c b/libs/libsndfile/src/ALAC/dp_enc.c
deleted file mode 100644 (file)
index f81cdba..0000000
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-       File:           dp_enc.c
-
-       Contains:       Dynamic Predictor encode routines
-
-       Copyright:      (c) 2001-2011 Apple, Inc.
-*/
-
-#include "dplib.h"
-#include <string.h>
-
-#if __GNUC__
-#define ALWAYS_INLINE          __attribute__((always_inline))
-#else
-#define ALWAYS_INLINE
-#endif
-
-#define LOOP_ALIGN
-
-void init_coefs( int16_t * coefs, uint32_t denshift, int32_t numPairs )
-{
-       int32_t         k;
-       int32_t         den = 1 << denshift;
-
-       coefs[0] = (AINIT * den) >> 4;
-       coefs[1] = (BINIT * den) >> 4;
-       coefs[2] = (CINIT * den) >> 4;
-       for ( k = 3; k < numPairs; k++ )
-               coefs[k]  = 0;
-}
-
-void copy_coefs( int16_t * srcCoefs, int16_t * dstCoefs, int32_t numPairs )
-{
-       int32_t k;
-
-       for ( k = 0; k < numPairs; k++ )
-               dstCoefs[k] = srcCoefs[k];
-}
-
-static inline int32_t ALWAYS_INLINE sign_of_int( int32_t i )
-{
-    int32_t negishift;
-
-    negishift = ((uint32_t)-i) >> 31;
-    return negishift | (i >> 31);
-}
-
-void pc_block( int32_t * in, int32_t * pc1, int32_t num, int16_t * coefs, int32_t numactive, uint32_t chanbits, uint32_t denshift )
-{
-       register int16_t        a0, a1, a2, a3;
-       register int32_t        b0, b1, b2, b3;
-       int32_t                                 j, k, lim;
-       int32_t *                       pin;
-       int32_t                         sum1, dd;
-       int32_t                         sg, sgn;
-       int32_t                         top;
-       int32_t                         del, del0;
-       uint32_t                        chanshift = 32 - chanbits;
-       int32_t                         denhalf = 1 << (denshift - 1);
-
-       pc1[0] = in[0];
-       if ( numactive == 0 )
-       {
-               // just copy if numactive == 0 (but don't bother if in/out pointers the same)
-               if ( (num > 1) && (in != pc1) )
-                       memcpy( &pc1[1], &in[1], (num - 1) * sizeof(int32_t) );
-               return;
-       }
-       if ( numactive == 31 )
-       {
-               // short-circuit if numactive == 31
-               for( j = 1; j < num; j++ )
-               {
-                       del = in[j] - in[j-1];
-                       pc1[j] = (del << chanshift) >> chanshift;
-               }
-               return;
-       }
-
-       for ( j = 1; j <= numactive; j++ )
-       {
-               del = in[j] - in[j-1];
-               pc1[j] = (del << chanshift) >> chanshift;
-       }
-
-       lim = numactive + 1;
-
-       if ( numactive == 4 )
-       {
-               // optimization for numactive == 4
-               a0 = coefs[0];
-               a1 = coefs[1];
-               a2 = coefs[2];
-               a3 = coefs[3];
-
-               for ( j = lim; j < num; j++ )
-               {
-                       LOOP_ALIGN
-
-                       top = in[j - lim];
-                       pin = in + j - 1;
-
-                       b0 = top - pin[0];
-                       b1 = top - pin[-1];
-                       b2 = top - pin[-2];
-                       b3 = top - pin[-3];
-
-                       sum1 = (denhalf - a0 * b0 - a1 * b1 - a2 * b2 - a3 * b3) >> denshift;
-
-                       del = in[j] - top - sum1;
-                       del = (del << chanshift) >> chanshift;
-                       pc1[j] = del;
-                       del0 = del;
-
-                       sg = sign_of_int(del);
-                       if ( sg > 0 )
-                       {
-                               sgn = sign_of_int( b3 );
-                               a3 -= sgn;
-                               del0 -= (4 - 3) * ((sgn * b3) >> denshift);
-                               if ( del0 <= 0 )
-                                       continue;
-
-                               sgn = sign_of_int( b2 );
-                               a2 -= sgn;
-                               del0 -= (4 - 2) * ((sgn * b2) >> denshift);
-                               if ( del0 <= 0 )
-                                       continue;
-
-                               sgn = sign_of_int( b1 );
-                               a1 -= sgn;
-                               del0 -= (4 - 1) * ((sgn * b1) >> denshift);
-                               if ( del0 <= 0 )
-                                       continue;
-
-                               a0 -= sign_of_int( b0 );
-                       }
-                       else if ( sg < 0 )
-                       {
-                               // note: to avoid unnecessary negations, we flip the value of "sgn"
-                               sgn = -sign_of_int( b3 );
-                               a3 -= sgn;
-                               del0 -= (4 - 3) * ((sgn * b3) >> denshift);
-                               if ( del0 >= 0 )
-                                       continue;
-
-                               sgn = -sign_of_int( b2 );
-                               a2 -= sgn;
-                               del0 -= (4 - 2) * ((sgn * b2) >> denshift);
-                               if ( del0 >= 0 )
-                                       continue;
-
-                               sgn = -sign_of_int( b1 );
-                               a1 -= sgn;
-                               del0 -= (4 - 1) * ((sgn * b1) >> denshift);
-                               if ( del0 >= 0 )
-                                       continue;
-
-                               a0 += sign_of_int( b0 );
-                       }
-               }
-
-               coefs[0] = a0;
-               coefs[1] = a1;
-               coefs[2] = a2;
-               coefs[3] = a3;
-       }
-       else if ( numactive == 8 )
-       {
-               // optimization for numactive == 8
-               register int16_t        a4, a5, a6, a7;
-               register int32_t        b4, b5, b6, b7;
-
-               a0 = coefs[0];
-               a1 = coefs[1];
-               a2 = coefs[2];
-               a3 = coefs[3];
-               a4 = coefs[4];
-               a5 = coefs[5];
-               a6 = coefs[6];
-               a7 = coefs[7];
-
-               for ( j = lim; j < num; j++ )
-               {
-                       LOOP_ALIGN
-
-                       top = in[j - lim];
-                       pin = in + j - 1;
-
-                       b0 = top - (*pin--);
-                       b1 = top - (*pin--);
-                       b2 = top - (*pin--);
-                       b3 = top - (*pin--);
-                       b4 = top - (*pin--);
-                       b5 = top - (*pin--);
-                       b6 = top - (*pin--);
-                       b7 = top - (*pin);
-                       pin += 8;
-
-                       sum1 = (denhalf - a0 * b0 - a1 * b1 - a2 * b2 - a3 * b3
-                                       - a4 * b4 - a5 * b5 - a6 * b6 - a7 * b7) >> denshift;
-
-                       del = in[j] - top - sum1;
-                       del = (del << chanshift) >> chanshift;
-                       pc1[j] = del;
-                       del0 = del;
-
-                       sg = sign_of_int(del);
-                       if ( sg > 0 )
-                       {
-                               sgn = sign_of_int( b7 );
-                               a7 -= sgn;
-                               del0 -= 1 * ((sgn * b7) >> denshift);
-                               if ( del0 <= 0 )
-                                       continue;
-
-                               sgn = sign_of_int( b6 );
-                               a6 -= sgn;
-                               del0 -= 2 * ((sgn * b6) >> denshift);
-                               if ( del0 <= 0 )
-                                       continue;
-
-                               sgn = sign_of_int( b5 );
-                               a5 -= sgn;
-                               del0 -= 3 * ((sgn * b5) >> denshift);
-                               if ( del0 <= 0 )
-                                       continue;
-
-                               sgn = sign_of_int( b4 );
-                               a4 -= sgn;
-                               del0 -= 4 * ((sgn * b4) >> denshift);
-                               if ( del0 <= 0 )
-                                       continue;
-
-                               sgn = sign_of_int( b3 );
-                               a3 -= sgn;
-                               del0 -= 5 * ((sgn * b3) >> denshift);
-                               if ( del0 <= 0 )
-                                       continue;
-
-                               sgn = sign_of_int( b2 );
-                               a2 -= sgn;
-                               del0 -= 6 * ((sgn * b2) >> denshift);
-                               if ( del0 <= 0 )
-                                       continue;
-
-                               sgn = sign_of_int( b1 );
-                               a1 -= sgn;
-                               del0 -= 7 * ((sgn * b1) >> denshift);
-                               if ( del0 <= 0 )
-                                       continue;
-
-                               a0 -= sign_of_int( b0 );
-                       }
-                       else if ( sg < 0 )
-                       {
-                               // note: to avoid unnecessary negations, we flip the value of "sgn"
-                               sgn = -sign_of_int( b7 );
-                               a7 -= sgn;
-                               del0 -= 1 * ((sgn * b7) >> denshift);
-                               if ( del0 >= 0 )
-                                       continue;
-
-                               sgn = -sign_of_int( b6 );
-                               a6 -= sgn;
-                               del0 -= 2 * ((sgn * b6) >> denshift);
-                               if ( del0 >= 0 )
-                                       continue;
-
-                               sgn = -sign_of_int( b5 );
-                               a5 -= sgn;
-                               del0 -= 3 * ((sgn * b5) >> denshift);
-                               if ( del0 >= 0 )
-                                       continue;
-
-                               sgn = -sign_of_int( b4 );
-                               a4 -= sgn;
-                               del0 -= 4 * ((sgn * b4) >> denshift);
-                               if ( del0 >= 0 )
-                                       continue;
-
-                               sgn = -sign_of_int( b3 );
-                               a3 -= sgn;
-                               del0 -= 5 * ((sgn * b3) >> denshift);
-                               if ( del0 >= 0 )
-                                       continue;
-
-                               sgn = -sign_of_int( b2 );
-                               a2 -= sgn;
-                               del0 -= 6 * ((sgn * b2) >> denshift);
-                               if ( del0 >= 0 )
-                                       continue;
-
-                               sgn = -sign_of_int( b1 );
-                               a1 -= sgn;
-                               del0 -= 7 * ((sgn * b1) >> denshift);
-                               if ( del0 >= 0 )
-                                       continue;
-
-                               a0 += sign_of_int( b0 );
-                       }
-               }
-
-               coefs[0] = a0;
-               coefs[1] = a1;
-               coefs[2] = a2;
-               coefs[3] = a3;
-               coefs[4] = a4;
-               coefs[5] = a5;
-               coefs[6] = a6;
-               coefs[7] = a7;
-       }
-       else
-       {
-//pc_block_general:
-               // general case
-               for ( j = lim; j < num; j++ )
-               {
-                       LOOP_ALIGN
-
-                       top = in[j - lim];
-                       pin = in + j - 1;
-
-                       sum1 = 0;
-                       for ( k = 0; k < numactive; k++ )
-                               sum1 -= coefs[k] * (top - pin[-k]);
-
-                       del = in[j] - top - ((sum1 + denhalf) >> denshift);
-                       del = (del << chanshift) >> chanshift;
-                       pc1[j] = del;
-                       del0 = del;
-
-                       sg = sign_of_int( del );
-                       if ( sg > 0 )
-                       {
-                               for ( k = (numactive - 1); k >= 0; k-- )
-                               {
-                                       dd = top - pin[-k];
-                                       sgn = sign_of_int( dd );
-                                       coefs[k] -= sgn;
-                                       del0 -= (numactive - k) * ((sgn * dd) >> denshift);
-                                       if ( del0 <= 0 )
-                                               break;
-                               }
-                       }
-                       else if ( sg < 0 )
-                       {
-                               for ( k = (numactive - 1); k >= 0; k-- )
-                               {
-                                       dd = top - pin[-k];
-                                       sgn = sign_of_int( dd );
-                                       coefs[k] += sgn;
-                                       del0 -= (numactive - k) * ((-sgn * dd) >> denshift);
-                                       if ( del0 >= 0 )
-                                               break;
-                               }
-                       }
-               }
-       }
-}
diff --git a/libs/libsndfile/src/ALAC/dplib.h b/libs/libsndfile/src/ALAC/dplib.h
deleted file mode 100644 (file)
index 37d3353..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-       File:           dplib.h
-
-       Contains:       Dynamic Predictor routines
-
-       Copyright:      Copyright (C) 2001-2011 Apple, Inc.
-*/
-
-#ifndef __DPLIB_H__
-#define __DPLIB_H__
-
-#include <stdint.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// defines
-
-#define DENSHIFT_MAX  15
-#define DENSHIFT_DEFAULT 9
-#define AINIT 38
-#define BINIT (-29)
-#define CINIT (-2)
-#define NUMCOEPAIRS 16
-
-// prototypes
-
-void init_coefs( int16_t * coefs, uint32_t denshift, int32_t numPairs );
-void copy_coefs( int16_t * srcCoefs, int16_t * dstCoefs, int32_t numPairs );
-
-// NOTE: these routines read at least "numactive" samples so the i/o buffers must be at least that big
-
-void pc_block( int32_t * in, int32_t * pc, int32_t num, int16_t * coefs, int32_t numactive, uint32_t chanbits, uint32_t denshift );
-void unpc_block( int32_t * pc, int32_t * out, int32_t num, int16_t * coefs, int32_t numactive, uint32_t chanbits, uint32_t denshift );
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __DPLIB_H__ */
diff --git a/libs/libsndfile/src/ALAC/matrix_dec.c b/libs/libsndfile/src/ALAC/matrix_dec.c
deleted file mode 100644 (file)
index cb812d1..0000000
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- * Copyright (C) 2012 Erik de Castro Lopo <erikd@mega-nerd.com>
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-       File:           matrix_dec.c
-
-       Contains:       ALAC mixing/matrixing decode routines.
-
-       Copyright:      (c) 2004-2011 Apple, Inc.
-*/
-
-#include "matrixlib.h"
-#include "ALACAudioTypes.h"
-
-// up to 24-bit "offset" macros for the individual bytes of a 20/24-bit word
-#if TARGET_RT_BIG_ENDIAN
-       #define LBYTE   2
-       #define MBYTE   1
-       #define HBYTE   0
-#else
-       #define LBYTE   0
-       #define MBYTE   1
-       #define HBYTE   2
-#endif
-
-/*
-    There is no plain middle-side option; instead there are various mixing
-    modes including middle-side, each lossless, as embodied in the mix()
-    and unmix() functions.  These functions exploit a generalized middle-side
-    transformation:
-
-    u := [(rL + (m-r)R)/m];
-    v := L - R;
-
-    where [ ] denotes integer floor.  The (lossless) inverse is
-
-    L = u + v - [rV/m];
-    R = L - v;
-*/
-
-// 16-bit routines
-
-void unmix16( int32_t * u, int32_t * v, int32_t * out, uint32_t stride, int32_t numSamples, int32_t mixbits, int32_t mixres )
-{
-       int32_t         j;
-
-       if ( mixres != 0 )
-       {
-               /* matrixed stereo */
-               for ( j = 0; j < numSamples; j++ )
-               {
-                       int32_t         l, r;
-
-                       l = u[j] + v[j] - ((mixres * v[j]) >> mixbits);
-                       r = l - v[j];
-
-                       out[0] = l << 16;
-                       out[1] = r << 16;
-                       out += stride;
-               }
-       }
-       else
-       {
-               /* Conventional separated stereo. */
-               for ( j = 0; j < numSamples; j++ )
-               {
-                       out[0] = u[j] << 16;
-                       out[1] = v[j] << 16;
-                       out += stride;
-               }
-       }
-}
-
-// 20-bit routines
-// - the 20 bits of data are left-justified in 3 bytes of storage but right-aligned for input/output predictor buffers
-
-void unmix20( int32_t * u, int32_t * v, int32_t * out, uint32_t stride, int32_t numSamples, int32_t mixbits, int32_t mixres )
-{
-       int32_t         j;
-
-       if ( mixres != 0 )
-       {
-               /* matrixed stereo */
-               for ( j = 0; j < numSamples; j++ )
-               {
-                       int32_t         l, r;
-
-                       l = u[j] + v[j] - ((mixres * v[j]) >> mixbits);
-                       r = l - v[j];
-
-                       out[0] = l << 12;
-                       out[1] = r << 12;
-                       out += stride;
-               }
-       }
-       else
-       {
-               /* Conventional separated stereo. */
-               for ( j = 0; j < numSamples; j++ )
-               {
-                       out[0] = u[j] << 12;
-                       out[1] = v[j] << 12;
-                       out += stride;
-               }
-       }
-}
-
-// 24-bit routines
-// - the 24 bits of data are right-justified in the input/output predictor buffers
-
-void unmix24( int32_t * u, int32_t * v, int32_t * out, uint32_t stride, int32_t numSamples,
-                               int32_t mixbits, int32_t mixres, uint16_t * shiftUV, int32_t bytesShifted )
-{
-       int32_t         shift = bytesShifted * 8;
-       int32_t         l, r;
-       int32_t                 j, k;
-
-       if ( mixres != 0 )
-       {
-               /* matrixed stereo */
-               if ( bytesShifted != 0 )
-               {
-                       for ( j = 0, k = 0; j < numSamples; j++, k += 2 )
-                       {
-                               l = u[j] + v[j] - ((mixres * v[j]) >> mixbits);
-                               r = l - v[j];
-
-                               l = (l << shift) | (uint32_t) shiftUV[k + 0];
-                               r = (r << shift) | (uint32_t) shiftUV[k + 1];
-
-                               out[0] = l << 8;
-                               out[1] = r << 8;
-                               out += stride;
-                       }
-               }
-               else
-               {
-                       for ( j = 0; j < numSamples; j++ )
-                       {
-                               l = u[j] + v[j] - ((mixres * v[j]) >> mixbits);
-                               r = l - v[j];
-
-                               out[0] = l << 8;
-                               out[1] = r << 8;
-                               out += stride;
-                       }
-               }
-       }
-       else
-       {
-               /* Conventional separated stereo. */
-               if ( bytesShifted != 0 )
-               {
-                       for ( j = 0, k = 0; j < numSamples; j++, k += 2 )
-                       {
-                               l = u[j];
-                               r = v[j];
-
-                               l = (l << shift) | (uint32_t) shiftUV[k + 0];
-                               r = (r << shift) | (uint32_t) shiftUV[k + 1];
-
-                               out[0] = l << 8;
-                               out[1] = r << 8;
-                               out += stride;
-                       }
-               }
-               else
-               {
-                       for ( j = 0; j < numSamples; j++ )
-                       {
-                               out[0] = u[j] << 8;
-                               out[1] = v[j] << 8;
-                               out += stride;
-                       }
-               }
-       }
-}
-
-// 32-bit routines
-// - note that these really expect the internal data width to be < 32 but the arrays are 32-bit
-// - otherwise, the calculations might overflow into the 33rd bit and be lost
-// - therefore, these routines deal with the specified "unused lower" bytes in the "shift" buffers
-
-void unmix32( int32_t * u, int32_t * v, int32_t * out, uint32_t stride, int32_t numSamples,
-                               int32_t mixbits, int32_t mixres, uint16_t * shiftUV, int32_t bytesShifted )
-{
-       int32_t         shift = bytesShifted * 8;
-       int32_t         l, r;
-       int32_t         j, k;
-
-       if ( mixres != 0 )
-       {
-               //Assert( bytesShifted != 0 );
-
-               /* matrixed stereo with shift */
-               for ( j = 0, k = 0; j < numSamples; j++, k += 2 )
-               {
-                       int32_t         lt, rt;
-
-                       lt = u[j];
-                       rt = v[j];
-
-                       l = lt + rt - ((mixres * rt) >> mixbits);
-                       r = l - rt;
-
-                       out[0] = (l << shift) | (uint32_t) shiftUV[k + 0];
-                       out[1] = (r << shift) | (uint32_t) shiftUV[k + 1];
-                       out += stride;
-               }
-       }
-       else
-       {
-               if ( bytesShifted == 0 )
-               {
-                       /* interleaving w/o shift */
-                       for ( j = 0; j < numSamples; j++ )
-                       {
-                               out[0] = u[j];
-                               out[1] = v[j];
-                               out += stride;
-                       }
-               }
-               else
-               {
-                       /* interleaving with shift */
-                       for ( j = 0, k = 0; j < numSamples; j++, k += 2 )
-                       {
-                               out[0] = (u[j] << shift) | (uint32_t) shiftUV[k + 0];
-                               out[1] = (v[j] << shift) | (uint32_t) shiftUV[k + 1];
-                               out += stride;
-                       }
-               }
-       }
-}
-
-// 20/24-bit <-> 32-bit helper routines (not really matrixing but convenient to put here)
-
-void copyPredictorTo24( int32_t * in, int32_t * out, uint32_t stride, int32_t numSamples )
-{
-       int32_t         j;
-
-       for ( j = 0; j < numSamples; j++ )
-       {
-               out[0] = in[j] << 8;
-               out += stride;
-       }
-}
-
-void copyPredictorTo24Shift( int32_t * in, uint16_t * shift, int32_t * out, uint32_t stride, int32_t numSamples, int32_t bytesShifted )
-{
-       int32_t         shiftVal = bytesShifted * 8;
-       int32_t         j;
-
-       //Assert( bytesShifted != 0 );
-
-       for ( j = 0; j < numSamples; j++ )
-       {
-               int32_t         val = in[j];
-
-               val = (val << shiftVal) | (uint32_t) shift[j];
-               out[0] = val << 8;
-               out += stride;
-       }
-}
-
-void copyPredictorTo20( int32_t * in, int32_t * out, uint32_t stride, int32_t numSamples )
-{
-       int32_t         j;
-
-       // 32-bit predictor values are right-aligned but 20-bit output values should be left-aligned
-       // in the 24-bit output buffer
-       for ( j = 0; j < numSamples; j++ )
-       {
-               out[0] = in[j] << 12;
-               out += stride;
-       }
-}
-
-void copyPredictorTo32( int32_t * in, int32_t * out, uint32_t stride, int32_t numSamples )
-{
-       int32_t                 i, j;
-
-       // this is only a subroutine to abstract the "iPod can only output 16-bit data" problem
-       for ( i = 0, j = 0; i < numSamples; i++, j += stride )
-               out[j] = in[i] << 8;
-}
-
-void copyPredictorTo32Shift( int32_t * in, uint16_t * shift, int32_t * out, uint32_t stride, int32_t numSamples, int32_t bytesShifted )
-{
-       int32_t *               op = out;
-       uint32_t                shiftVal = bytesShifted * 8;
-       int32_t                 j;
-
-       //Assert( bytesShifted != 0 );
-
-       // this is only a subroutine to abstract the "iPod can only output 16-bit data" problem
-       for ( j = 0; j < numSamples; j++ )
-       {
-               op[0] = (in[j] << shiftVal) | (uint32_t) shift[j];
-               op += stride;
-       }
-}
diff --git a/libs/libsndfile/src/ALAC/matrix_enc.c b/libs/libsndfile/src/ALAC/matrix_enc.c
deleted file mode 100644 (file)
index 5b4d158..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- * Copyright (C) 2012 Erik de Castro Lopo <erikd@mega-nerd.com>
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-       File:           matrix_enc.c
-
-       Contains:       ALAC mixing/matrixing encode routines.
-
-       Copyright:      (c) 2004-2011 Apple, Inc.
-*/
-
-#include "matrixlib.h"
-#include "ALACAudioTypes.h"
-
-/*
-    There is no plain middle-side option; instead there are various mixing
-    modes including middle-side, each lossless, as embodied in the mix()
-    and unmix() functions.  These functions exploit a generalized middle-side
-    transformation:
-
-    u := [(rL + (m-r)R)/m];
-    v := L - R;
-
-    where [ ] denotes integer floor.  The (lossless) inverse is
-
-    L = u + v - [rV/m];
-    R = L - v;
-*/
-
-// 16-bit routines
-
-void mix16( int32_t * in, uint32_t stride, int32_t * u, int32_t * v, int32_t numSamples, int32_t mixbits, int32_t mixres )
-{
-       int32_t         j;
-
-       if ( mixres != 0 )
-       {
-               int32_t         mod = 1 << mixbits;
-               int32_t         m2;
-
-               /* matrixed stereo */
-               m2 = mod - mixres;
-               for ( j = 0; j < numSamples; j++ )
-               {
-                       int32_t         l, r;
-
-                       l = in[0] >> 16;
-                       r = in[1] >> 16;
-                       in += stride;
-                       u[j] = (mixres * l + m2 * r) >> mixbits;
-                       v[j] = l - r;
-               }
-       }
-       else
-       {
-               /* Conventional separated stereo. */
-               for ( j = 0; j < numSamples; j++ )
-               {
-                       u[j] = in[0] >> 16;
-                       v[j] = in[1] >> 16;
-                       in += stride;
-               }
-       }
-}
-
-// 20-bit routines
-// - the 20 bits of data are left-justified in 3 bytes of storage but right-aligned for input/output predictor buffers
-
-void mix20( int32_t * in, uint32_t stride, int32_t * u, int32_t * v, int32_t numSamples, int32_t mixbits, int32_t mixres )
-{
-       int32_t         l, r;
-       int32_t         j;
-
-       if ( mixres != 0 )
-       {
-               /* matrixed stereo */
-               int32_t         mod = 1 << mixbits;
-               int32_t         m2 = mod - mixres;
-
-               for ( j = 0; j < numSamples; j++ )
-               {
-                       l = in[0] >> 12;
-                       r = in[1] >> 12;
-                       in += stride;
-
-                       u[j] = (mixres * l + m2 * r) >> mixbits;
-                       v[j] = l - r;
-               }
-       }
-       else
-       {
-               /* Conventional separated stereo. */
-               for ( j = 0; j < numSamples; j++ )
-               {
-                       u[j] = in[0] >> 12;
-                       v[j] = in[1] >> 12;
-                       in += stride;
-               }
-       }
-}
-
-// 24-bit routines
-// - the 24 bits of data are right-justified in the input/output predictor buffers
-
-void mix24( int32_t * in, uint32_t stride, int32_t * u, int32_t * v, int32_t numSamples,
-                       int32_t mixbits, int32_t mixres, uint16_t * shiftUV, int32_t bytesShifted )
-{
-       int32_t         l, r;
-       int32_t         shift = bytesShifted * 8;
-       uint32_t        mask  = (1ul << shift) - 1;
-       int32_t         j, k;
-
-       if ( mixres != 0 )
-       {
-               /* matrixed stereo */
-               int32_t         mod = 1 << mixbits;
-               int32_t         m2 = mod - mixres;
-
-               if ( bytesShifted != 0 )
-               {
-                       for ( j = 0, k = 0; j < numSamples; j++, k += 2 )
-                       {
-                               l = in[0] >> 8;
-                               r = in[1] >> 8;
-                               in += stride;
-
-                               shiftUV[k + 0] = (uint16_t)(l & mask);
-                               shiftUV[k + 1] = (uint16_t)(r & mask);
-
-                               l >>= shift;
-                               r >>= shift;
-
-                               u[j] = (mixres * l + m2 * r) >> mixbits;
-                               v[j] = l - r;
-                       }
-               }
-               else
-               {
-                       for ( j = 0; j < numSamples; j++ )
-                       {
-                               l = in[0] >> 8;
-                               r = in[1] >> 8;
-                               in += stride;
-
-                               u[j] = (mixres * l + m2 * r) >> mixbits;
-                               v[j] = l - r;
-                       }
-               }
-       }
-       else
-       {
-               /* Conventional separated stereo. */
-               if ( bytesShifted != 0 )
-               {
-                       for ( j = 0, k = 0; j < numSamples; j++, k += 2 )
-                       {
-                               l = in[0] >> 8;
-                               r = in[1] >> 8;
-                               in += stride;
-
-                               shiftUV[k + 0] = (uint16_t)(l & mask);
-                               shiftUV[k + 1] = (uint16_t)(r & mask);
-
-                               l >>= shift;
-                               r >>= shift;
-
-                               u[j] = l;
-                               v[j] = r;
-                       }
-               }
-               else
-               {
-                       for ( j = 0; j < numSamples; j++ )
-                       {
-                               l = in[0] >> 8;
-                               r = in[1] >> 8;
-                               in += stride;
-                       }
-               }
-       }
-}
-
-// 32-bit routines
-// - note that these really expect the internal data width to be < 32 but the arrays are 32-bit
-// - otherwise, the calculations might overflow into the 33rd bit and be lost
-// - therefore, these routines deal with the specified "unused lower" bytes in the "shift" buffers
-
-void mix32( int32_t * in, uint32_t stride, int32_t * u, int32_t * v, int32_t numSamples,
-                       int32_t mixbits, int32_t mixres, uint16_t * shiftUV, int32_t bytesShifted )
-{
-       int32_t         shift = bytesShifted * 8;
-       uint32_t        mask  = (1ul << shift) - 1;
-       int32_t         l, r;
-       int32_t         j, k;
-
-       if ( mixres != 0 )
-       {
-               int32_t         mod = 1 << mixbits;
-               int32_t         m2;
-
-               //Assert( bytesShifted != 0 );
-
-               /* matrixed stereo with shift */
-               m2 = mod - mixres;
-               for ( j = 0, k = 0; j < numSamples; j++, k += 2 )
-               {
-                       l = in[0];
-                       r = in[1];
-                       in += stride;
-
-                       shiftUV[k + 0] = (uint16_t)(l & mask);
-                       shiftUV[k + 1] = (uint16_t)(r & mask);
-
-                       l >>= shift;
-                       r >>= shift;
-
-                       u[j] = (mixres * l + m2 * r) >> mixbits;
-                       v[j] = l - r;
-               }
-       }
-       else
-       {
-               if ( bytesShifted == 0 )
-               {
-                       /* de-interleaving w/o shift */
-                       for ( j = 0; j < numSamples; j++ )
-                       {
-                               u[j] = in[0];
-                               v[j] = in[1];
-                               in += stride;
-                       }
-               }
-               else
-               {
-                       /* de-interleaving with shift */
-                       for ( j = 0, k = 0; j < numSamples; j++, k += 2 )
-                       {
-                               l = in[0];
-                               r = in[1];
-                               in += stride;
-
-                               shiftUV[k + 0] = (uint16_t)(l & mask);
-                               shiftUV[k + 1] = (uint16_t)(r & mask);
-
-                               l >>= shift;
-                               r >>= shift;
-
-                               u[j] = l;
-                               v[j] = r;
-                       }
-               }
-       }
-}
-
diff --git a/libs/libsndfile/src/ALAC/matrixlib.h b/libs/libsndfile/src/ALAC/matrixlib.h
deleted file mode 100644 (file)
index d405cbc..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2011 Apple Inc. All rights reserved.
- * Copyright (C) 2012 Erik de Castro Lopo <erikd@mega-nerd.com>
- *
- * @APPLE_APACHE_LICENSE_HEADER_START@
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @APPLE_APACHE_LICENSE_HEADER_END@
- */
-
-/*
-       File:           matrixlib.h
-
-       Contains:       ALAC mixing/matrixing routines to/from 32-bit predictor buffers.
-
-       Copyright:      Copyright (C) 2004 to 2011 Apple, Inc.
-*/
-
-#ifndef __MATRIXLIB_H
-#define __MATRIXLIB_H
-
-#pragma once
-
-#include <stdint.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// 16-bit routines
-void   mix16( int32_t * in, uint32_t stride, int32_t * u, int32_t * v, int32_t numSamples, int32_t mixbits, int32_t mixres );
-void   unmix16( int32_t * u, int32_t * v, int32_t * out, uint32_t stride, int32_t numSamples, int32_t mixbits, int32_t mixres );
-
-// 20-bit routines
-void   mix20( int32_t * in, uint32_t stride, int32_t * u, int32_t * v, int32_t numSamples, int32_t mixbits, int32_t mixres );
-void   unmix20( int32_t * u, int32_t * v, int32_t * out, uint32_t stride, int32_t numSamples, int32_t mixbits, int32_t mixres );
-
-// 24-bit routines
-// - 24-bit data sometimes compresses better by shifting off the bottom byte so these routines deal with
-//      the specified "unused lower bytes" in the combined "shift" buffer
-void   mix24( int32_t * in, uint32_t stride, int32_t * u, int32_t * v, int32_t numSamples,
-                               int32_t mixbits, int32_t mixres, uint16_t * shiftUV, int32_t bytesShifted );
-void   unmix24( int32_t * u, int32_t * v, int32_t * out, uint32_t stride, int32_t numSamples,
-                                int32_t mixbits, int32_t mixres, uint16_t * shiftUV, int32_t bytesShifted );
-
-// 32-bit routines
-// - note that these really expect the internal data width to be < 32-bit but the arrays are 32-bit
-// - otherwise, the calculations might overflow into the 33rd bit and be lost
-// - therefore, these routines deal with the specified "unused lower" bytes in the combined "shift" buffer
-void   mix32( int32_t * in, uint32_t stride, int32_t * u, int32_t * v, int32_t numSamples,
-                               int32_t mixbits, int32_t mixres, uint16_t * shiftUV, int32_t bytesShifted );
-void   unmix32( int32_t * u, int32_t * v, int32_t * out, uint32_t stride, int32_t numSamples,
-                                int32_t mixbits, int32_t mixres, uint16_t * shiftUV, int32_t bytesShifted );
-
-// 20/24/32-bit <-> 32-bit helper routines (not really matrixing but convenient to put here)
-void   copy20ToPredictor( int32_t * in, uint32_t stride, int32_t * out, int32_t numSamples );
-void   copy24ToPredictor( int32_t * in, uint32_t stride, int32_t * out, int32_t numSamples );
-
-void   copyPredictorTo24( int32_t * in, int32_t * out, uint32_t stride, int32_t numSamples );
-void   copyPredictorTo24Shift( int32_t * in, uint16_t * shift, int32_t * out, uint32_t stride, int32_t numSamples, int32_t bytesShifted );
-void   copyPredictorTo20( int32_t * in, int32_t * out, uint32_t stride, int32_t numSamples );
-
-void   copyPredictorTo32( int32_t * in, int32_t * out, uint32_t stride, int32_t numSamples );
-void   copyPredictorTo32Shift( int32_t * in, uint16_t * shift, int32_t * out, uint32_t stride, int32_t numSamples, int32_t bytesShifted );
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __MATRIXLIB_H */
diff --git a/libs/libsndfile/src/G72x/ChangeLog b/libs/libsndfile/src/G72x/ChangeLog
deleted file mode 100644 (file)
index aa108df..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-2001-06-05  Erik de Castro Lopo  <erikd@mega-nerd.com>
-
-       * g72x.c
-       Added {} in function update () to prevent 'ambiguous else' warning messages.
-
-2000-07-14  Erik de Castro Lopo  <erikd@mega-nerd.com>
-
-       * g72x.c
-       Modified g72x_init_state () to fit in with the new structure of the code.
-       Implemented g72x_encode_block () and g72x_decode_block ().
-
-2000-07-12  Erik de Castro Lopo  <erikd@mega-nerd.com>
-
-    * g72x.h
-    Moved nearly all definitions and function prototypes from this file have been 
-    moved to private.h.
-    Added an enum defining the 4 different G72x ADPCM codecs.
-    Added new function prototypes to define a cleaner interface to the encoder 
-    and decoder. This new interface also allows samples to be processed in blocks
-    rather than on a sample by sample basis like the original code.
-    
-    * private.h
-    Added prototypes moved from g72x.h.
-    Changed struct g72x_state to a typedef struct { .. } G72x_PRIVATE.
-    Added fields to G72x_PRIVATE required for working on blocks of samples.
-
-2000-06-07  Erik de Castro Lopo  <erikd@mega-nerd.com>
-
-    * g72x.c
-    Fixed all compiler warnings.
-    Removed functions tandem_adjust() which is not required by libsndfile.
-    
-    * g721.c
-    Fixed all compiler warnings.
-    Removed functions tandem_adjust_alaw() and tandem_adjust_ulaw () which are not 
-    required by libsndfile.
-    Removed second parameter to g721_encoder () which is not required.
-
-    * g72x.h
-    Removed in_coding and out_coding parameters from all functions. These allowed
-    g72x encoding/decoding to/from A-law or u-law and are not required by libsndfile.
-    Removed unneeded defines for A-law, u-law and linear encoding.
-
-    * g723_16.c
-    Removed second parameter (in_coding) for g723_16_encoder().    
-    Removed second parameter (out_coding) for g723_16_decoder().
-    
-    * private.h
-    New file containing prototypes and tyepdefs private to G72x code.
-    
diff --git a/libs/libsndfile/src/G72x/Makefile.am b/libs/libsndfile/src/G72x/Makefile.am
deleted file mode 100644 (file)
index 62a0aa1..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-EXTRA_DIST = README README.original ChangeLog
-
-noinst_HEADERS = g72x.h g72x_priv.h
-noinst_LTLIBRARIES = libg72x.la
-
-noinst_PROGRAMS = g72x_test
-
-CFILES = g72x.c g721.c g723_16.c g723_24.c g723_40.c
-
-libg72x_la_SOURCES = $(CFILES) $(noinst_HEADERS)
-
-g72x_test_SOURCES = g72x_test.c
-g72x_test_LDADD = ./libg72x.la -lm
-
-check: g72x_test$(EXEEXT)
-       ./g72x_test$(EXEEXT) all
-
-# Disable autoheader.
-AUTOHEADER=echo
-
diff --git a/libs/libsndfile/src/G72x/README b/libs/libsndfile/src/G72x/README
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/libs/libsndfile/src/G72x/README.original b/libs/libsndfile/src/G72x/README.original
deleted file mode 100644 (file)
index 23b0e7d..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-The files in this directory comprise ANSI-C language reference implementations
-of the CCITT (International Telegraph and Telephone Consultative Committee)
-G.711, G.721 and G.723 voice compressions.  They have been tested on Sun
-SPARCstations and passed 82 out of 84 test vectors published by CCITT
-(Dec. 20, 1988) for G.721 and G.723.  [The two remaining test vectors,
-which the G.721 decoder implementation for u-law samples did not pass,
-may be in error because they are identical to two other vectors for G.723_40.]
-
-This source code is released by Sun Microsystems, Inc. to the public domain.
-Please give your acknowledgement in product literature if this code is used
-in your product implementation.
-
-Sun Microsystems supports some CCITT audio formats in Solaris 2.0 system
-software.  However, Sun's implementations have been optimized for higher
-performance on SPARCstations.
-
-
-The source files for CCITT conversion routines in this directory are:
-
-       g72x.h          header file for g721.c, g723_24.c and g723_40.c
-       g711.c          CCITT G.711 u-law and A-law compression
-       g72x.c          common denominator of G.721 and G.723 ADPCM codes
-       g721.c          CCITT G.721 32Kbps ADPCM coder (with g72x.c)
-       g723_24.c       CCITT G.723 24Kbps ADPCM coder (with g72x.c)
-       g723_40.c       CCITT G.723 40Kbps ADPCM coder (with g72x.c)
-
-
-Simple conversions between u-law, A-law, and 16-bit linear PCM are invoked
-as follows:
-
-       unsigned char           ucode, acode;
-       short                   pcm_val;
-
-       ucode = linear2ulaw(pcm_val);
-       ucode = alaw2ulaw(acode);
-
-       acode = linear2alaw(pcm_val);
-       acode = ulaw2alaw(ucode);
-
-       pcm_val = ulaw2linear(ucode);
-       pcm_val = alaw2linear(acode);
-
-
-The other CCITT compression routines are invoked as follows:
-
-       #include "g72x.h"
-
-       struct g72x_state       state;
-       int                     sample, code;
-
-       g72x_init_state(&state);
-       code = {g721,g723_24,g723_40}_encoder(sample, coding, &state);
-       sample = {g721,g723_24,g723_40}_decoder(code, coding, &state);
-
-where
-       coding = AUDIO_ENCODING_ULAW    for 8-bit u-law samples
-                AUDIO_ENCODING_ALAW    for 8-bit A-law samples
-                AUDIO_ENCODING_LINEAR  for 16-bit linear PCM samples
-
-
-
-This directory also includes the following sample programs:
-
-       encode.c        CCITT ADPCM encoder
-       decode.c        CCITT ADPCM decoder
-       Makefile        makefile for the sample programs
-
-
-The sample programs contain examples of how to call the various compression
-routines and pack/unpack the bits.  The sample programs read byte streams from
-stdin and write to stdout.  The input/output data is raw data (no file header
-or other identifying information is embedded).  The sample programs are
-invoked as follows:
-
-       encode [-3|4|5] [-a|u|l] <infile >outfile
-       decode [-3|4|5] [-a|u|l] <infile >outfile
-where:
-       -3      encode to (decode from) G.723 24kbps (3-bit) data
-       -4      encode to (decode from) G.721 32kbps (4-bit) data [the default]
-       -5      encode to (decode from) G.723 40kbps (5-bit) data
-       -a      encode from (decode to) A-law data
-       -u      encode from (decode to) u-law data [the default]
-       -l      encode from (decode to) 16-bit linear data
-
-Examples:
-       # Read 16-bit linear and output G.721
-       encode -4 -l <pcmfile >g721file
-
-       # Read 40Kbps G.723 and output A-law
-       decode -5 -a <g723file >alawfile
-
-       # Compress and then decompress u-law data using 24Kbps G.723
-       encode -3 <ulawin | deoced -3 >ulawout
-
diff --git a/libs/libsndfile/src/G72x/g721.c b/libs/libsndfile/src/G72x/g721.c
deleted file mode 100644 (file)
index d305ba8..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * This source code is a product of Sun Microsystems, Inc. and is provided
- * for unrestricted use.  Users may copy or modify this source code without
- * charge.
- *
- * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
- * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun source code is provided with no support and without any obligation on
- * the part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California  94043
- */
-
-/*
- * g721.c
- *
- * Description:
- *
- * g721_encoder(), g721_decoder()
- *
- * These routines comprise an implementation of the CCITT G.721 ADPCM
- * coding algorithm.  Essentially, this implementation is identical to
- * the bit level description except for a few deviations which
- * take advantage of work station attributes, such as hardware 2's
- * complement arithmetic and large memory.  Specifically, certain time
- * consuming operations such as multiplications are replaced
- * with lookup tables and software 2's complement operations are
- * replaced with hardware 2's complement.
- *
- * The deviation from the bit level specification (lookup tables)
- * preserves the bit level performance specifications.
- *
- * As outlined in the G.721 Recommendation, the algorithm is broken
- * down into modules.  Each section of code below is preceded by
- * the name of the module which it is implementing.
- *
- */
-
-#include "g72x.h"
-#include "g72x_priv.h"
-
-static short qtab_721[7] = {-124, 80, 178, 246, 300, 349, 400};
-/*
- * Maps G.721 code word to reconstructed scale factor normalized log
- * magnitude values.
- */
-static short   _dqlntab[16] = {-2048, 4, 135, 213, 273, 323, 373, 425,
-                               425, 373, 323, 273, 213, 135, 4, -2048};
-
-/* Maps G.721 code word to log of scale factor multiplier. */
-static short   _witab[16] = {-12, 18, 41, 64, 112, 198, 355, 1122,
-                               1122, 355, 198, 112, 64, 41, 18, -12};
-/*
- * Maps G.721 code words to a set of values whose long and short
- * term averages are computed and then compared to give an indication
- * how stationary (steady state) the signal is.
- */
-static short   _fitab[16] = {0, 0, 0, 0x200, 0x200, 0x200, 0x600, 0xE00,
-                               0xE00, 0x600, 0x200, 0x200, 0x200, 0, 0, 0};
-
-/*
- * g721_encoder()
- *
- * Encodes the input vale of linear PCM, A-law or u-law data sl and returns
- * the resulting code. -1 is returned for unknown input coding value.
- */
-int
-g721_encoder(
-       int             sl,
-       G72x_STATE *state_ptr)
-{
-       short           sezi, se, sez;          /* ACCUM */
-       short           d;                      /* SUBTA */
-       short           sr;                     /* ADDB */
-       short           y;                      /* MIX */
-       short           dqsez;                  /* ADDC */
-       short           dq, i;
-
-       /* linearize input sample to 14-bit PCM */
-       sl >>= 2;                       /* 14-bit dynamic range */
-
-       sezi = predictor_zero(state_ptr);
-       sez = sezi >> 1;
-       se = (sezi + predictor_pole(state_ptr)) >> 1;   /* estimated signal */
-
-       d = sl - se;                            /* estimation difference */
-
-       /* quantize the prediction difference */
-       y = step_size(state_ptr);               /* quantizer step size */
-       i = quantize(d, y, qtab_721, 7);        /* i = ADPCM code */
-
-       dq = reconstruct(i & 8, _dqlntab[i], y);        /* quantized est diff */
-
-       sr = (dq < 0) ? se - (dq & 0x3FFF) : se + dq;   /* reconst. signal */
-
-       dqsez = sr + sez - se;                  /* pole prediction diff. */
-
-       update(4, y, _witab[i] << 5, _fitab[i], dq, sr, dqsez, state_ptr);
-
-       return (i);
-}
-
-/*
- * g721_decoder()
- *
- * Description:
- *
- * Decodes a 4-bit code of G.721 encoded data of i and
- * returns the resulting linear PCM, A-law or u-law value.
- * return -1 for unknown out_coding value.
- */
-int
-g721_decoder(
-       int             i,
-       G72x_STATE *state_ptr)
-{
-       short           sezi, sei, sez, se;     /* ACCUM */
-       short           y;                      /* MIX */
-       short           sr;                     /* ADDB */
-       short           dq;
-       short           dqsez;
-
-       i &= 0x0f;                      /* mask to get proper bits */
-       sezi = predictor_zero(state_ptr);
-       sez = sezi >> 1;
-       sei = sezi + predictor_pole(state_ptr);
-       se = sei >> 1;                  /* se = estimated signal */
-
-       y = step_size(state_ptr);       /* dynamic quantizer step size */
-
-       dq = reconstruct(i & 0x08, _dqlntab[i], y); /* quantized diff. */
-
-       sr = (dq < 0) ? (se - (dq & 0x3FFF)) : se + dq; /* reconst. signal */
-
-       dqsez = sr - se + sez;                  /* pole prediction diff. */
-
-       update(4, y, _witab[i] << 5, _fitab[i], dq, sr, dqsez, state_ptr);
-
-       /* sr was 14-bit dynamic range */
-       return (sr << 2);       
-}
-
diff --git a/libs/libsndfile/src/G72x/g723_16.c b/libs/libsndfile/src/G72x/g723_16.c
deleted file mode 100644 (file)
index ae90b6c..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * This source code is a product of Sun Microsystems, Inc. and is provided
- * for unrestricted use.  Users may copy or modify this source code without
- * charge.
- *
- * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
- * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun source code is provided with no support and without any obligation on
- * the part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California  94043
- */
-/* 16kbps version created, used 24kbps code and changing as little as possible.
- * G.726 specs are available from ITU's gopher or WWW site (http://www.itu.ch)
- * If any errors are found, please contact me at mrand@tamu.edu
- *      -Marc Randolph
- */
-
-/*
- * g723_16.c
- *
- * Description:
- *
- * g723_16_encoder(), g723_16_decoder()
- *
- * These routines comprise an implementation of the CCITT G.726 16 Kbps
- * ADPCM coding algorithm.  Essentially, this implementation is identical to
- * the bit level description except for a few deviations which take advantage
- * of workstation attributes, such as hardware 2's complement arithmetic.
- *
- */
-
-#include "g72x.h"
-#include "g72x_priv.h"
-
-/*
- * Maps G.723_16 code word to reconstructed scale factor normalized log
- * magnitude values.  Comes from Table 11/G.726
- */
-static short   _dqlntab[4] = { 116, 365, 365, 116}; 
-
-/* Maps G.723_16 code word to log of scale factor multiplier.
- *
- * _witab[4] is actually {-22 , 439, 439, -22}, but FILTD wants it
- * as WI << 5  (multiplied by 32), so we'll do that here 
- */
-static short   _witab[4] = {-704, 14048, 14048, -704};
-
-/*
- * Maps G.723_16 code words to a set of values whose long and short
- * term averages are computed and then compared to give an indication
- * how stationary (steady state) the signal is.
- */
-
-/* Comes from FUNCTF */
-static short   _fitab[4] = {0, 0xE00, 0xE00, 0};
-
-/* Comes from quantizer decision level tables (Table 7/G.726)
- */
-static short qtab_723_16[1] = {261};
-
-
-/*
- * g723_16_encoder()
- *
- * Encodes a linear PCM, A-law or u-law input sample and returns its 2-bit code.
- * Returns -1 if invalid input coding value.
- */
-int
-g723_16_encoder(
-       int             sl,
-       G72x_STATE *state_ptr)
-{
-       short           sei, sezi, se, sez;     /* ACCUM */
-       short           d;                      /* SUBTA */
-       short           y;                      /* MIX */
-       short           sr;                     /* ADDB */
-       short           dqsez;                  /* ADDC */
-       short           dq, i;
-
-               /* linearize input sample to 14-bit PCM */
-               sl >>= 2;               /* sl of 14-bit dynamic range */
-
-       sezi = predictor_zero(state_ptr);
-       sez = sezi >> 1;
-       sei = sezi + predictor_pole(state_ptr);
-       se = sei >> 1;                  /* se = estimated signal */
-
-       d = sl - se;                    /* d = estimation diff. */
-
-       /* quantize prediction difference d */
-       y = step_size(state_ptr);       /* quantizer step size */
-       i = quantize(d, y, qtab_723_16, 1);  /* i = ADPCM code */
-
-             /* Since quantize() only produces a three level output
-              * (1, 2, or 3), we must create the fourth one on our own
-              */
-       if (i == 3)                          /* i code for the zero region */
-         if ((d & 0x8000) == 0)             /* If d > 0, i=3 isn't right... */
-           i = 0;
-           
-       dq = reconstruct(i & 2, _dqlntab[i], y); /* quantized diff. */
-
-       sr = (dq < 0) ? se - (dq & 0x3FFF) : se + dq; /* reconstructed signal */
-
-       dqsez = sr + sez - se;          /* pole prediction diff. */
-
-       update(2, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr);
-
-       return (i);
-}
-
-/*
- * g723_16_decoder()
- *
- * Decodes a 2-bit CCITT G.723_16 ADPCM code and returns
- * the resulting 16-bit linear PCM, A-law or u-law sample value.
- * -1 is returned if the output coding is unknown.
- */
-int
-g723_16_decoder(
-       int             i,
-       G72x_STATE *state_ptr)
-{
-       short           sezi, sei, sez, se;     /* ACCUM */
-       short           y;                      /* MIX */
-       short           sr;                     /* ADDB */
-       short           dq;
-       short           dqsez;
-
-       i &= 0x03;                      /* mask to get proper bits */
-       sezi = predictor_zero(state_ptr);
-       sez = sezi >> 1;
-       sei = sezi + predictor_pole(state_ptr);
-       se = sei >> 1;                  /* se = estimated signal */
-
-       y = step_size(state_ptr);       /* adaptive quantizer step size */
-       dq = reconstruct(i & 0x02, _dqlntab[i], y); /* unquantize pred diff */
-
-       sr = (dq < 0) ? (se - (dq & 0x3FFF)) : (se + dq); /* reconst. signal */
-
-       dqsez = sr - se + sez;                  /* pole prediction diff. */
-
-       update(2, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr);
-
-               /* sr was of 14-bit dynamic range */
-               return (sr << 2);       
-}
-
diff --git a/libs/libsndfile/src/G72x/g723_24.c b/libs/libsndfile/src/G72x/g723_24.c
deleted file mode 100644 (file)
index 02b6c24..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * This source code is a product of Sun Microsystems, Inc. and is provided
- * for unrestricted use.  Users may copy or modify this source code without
- * charge.
- *
- * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
- * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun source code is provided with no support and without any obligation on
- * the part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California  94043
- */
-
-/*
- * g723_24.c
- *
- * Description:
- *
- * g723_24_encoder(), g723_24_decoder()
- *
- * These routines comprise an implementation of the CCITT G.723 24 Kbps
- * ADPCM coding algorithm.  Essentially, this implementation is identical to
- * the bit level description except for a few deviations which take advantage
- * of workstation attributes, such as hardware 2's complement arithmetic.
- *
- */
-
-#include "g72x.h"
-#include "g72x_priv.h"
-
-/*
- * Maps G.723_24 code word to reconstructed scale factor normalized log
- * magnitude values.
- */
-static short   _dqlntab[8] = {-2048, 135, 273, 373, 373, 273, 135, -2048};
-
-/* Maps G.723_24 code word to log of scale factor multiplier. */
-static short   _witab[8] = {-128, 960, 4384, 18624, 18624, 4384, 960, -128};
-
-/*
- * Maps G.723_24 code words to a set of values whose long and short
- * term averages are computed and then compared to give an indication
- * how stationary (steady state) the signal is.
- */
-static short   _fitab[8] = {0, 0x200, 0x400, 0xE00, 0xE00, 0x400, 0x200, 0};
-
-static short qtab_723_24[3] = {8, 218, 331};
-
-/*
- * g723_24_encoder()
- *
- * Encodes a linear PCM, A-law or u-law input sample and returns its 3-bit code.
- * Returns -1 if invalid input coding value.
- */
-int
-g723_24_encoder(
-       int             sl,
-       G72x_STATE *state_ptr)
-{
-       short           sei, sezi, se, sez;     /* ACCUM */
-       short           d;                      /* SUBTA */
-       short           y;                      /* MIX */
-       short           sr;                     /* ADDB */
-       short           dqsez;                  /* ADDC */
-       short           dq, i;
-
-       /* linearize input sample to 14-bit PCM */
-       sl >>= 2;               /* sl of 14-bit dynamic range */
-
-       sezi = predictor_zero(state_ptr);
-       sez = sezi >> 1;
-       sei = sezi + predictor_pole(state_ptr);
-       se = sei >> 1;                  /* se = estimated signal */
-
-       d = sl - se;                    /* d = estimation diff. */
-
-       /* quantize prediction difference d */
-       y = step_size(state_ptr);       /* quantizer step size */
-       i = quantize(d, y, qtab_723_24, 3);     /* i = ADPCM code */
-       dq = reconstruct(i & 4, _dqlntab[i], y); /* quantized diff. */
-
-       sr = (dq < 0) ? se - (dq & 0x3FFF) : se + dq; /* reconstructed signal */
-
-       dqsez = sr + sez - se;          /* pole prediction diff. */
-
-       update(3, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr);
-
-       return (i);
-}
-
-/*
- * g723_24_decoder()
- *
- * Decodes a 3-bit CCITT G.723_24 ADPCM code and returns
- * the resulting 16-bit linear PCM, A-law or u-law sample value.
- * -1 is returned if the output coding is unknown.
- */
-int
-g723_24_decoder(
-       int             i,
-       G72x_STATE *state_ptr)
-{
-       short           sezi, sei, sez, se;     /* ACCUM */
-       short           y;                      /* MIX */
-       short           sr;                     /* ADDB */
-       short           dq;
-       short           dqsez;
-
-       i &= 0x07;                      /* mask to get proper bits */
-       sezi = predictor_zero(state_ptr);
-       sez = sezi >> 1;
-       sei = sezi + predictor_pole(state_ptr);
-       se = sei >> 1;                  /* se = estimated signal */
-
-       y = step_size(state_ptr);       /* adaptive quantizer step size */
-       dq = reconstruct(i & 0x04, _dqlntab[i], y); /* unquantize pred diff */
-
-       sr = (dq < 0) ? (se - (dq & 0x3FFF)) : (se + dq); /* reconst. signal */
-
-       dqsez = sr - se + sez;                  /* pole prediction diff. */
-
-       update(3, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr);
-
-       return (sr << 2);       /* sr was of 14-bit dynamic range */
-}
-
diff --git a/libs/libsndfile/src/G72x/g723_40.c b/libs/libsndfile/src/G72x/g723_40.c
deleted file mode 100644 (file)
index d520395..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * This source code is a product of Sun Microsystems, Inc. and is provided
- * for unrestricted use.  Users may copy or modify this source code without
- * charge.
- *
- * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
- * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun source code is provided with no support and without any obligation on
- * the part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California  94043
- */
-
-/*
- * g723_40.c
- *
- * Description:
- *
- * g723_40_encoder(), g723_40_decoder()
- *
- * These routines comprise an implementation of the CCITT G.723 40Kbps
- * ADPCM coding algorithm.  Essentially, this implementation is identical to
- * the bit level description except for a few deviations which
- * take advantage of workstation attributes, such as hardware 2's
- * complement arithmetic.
- *
- * The deviation from the bit level specification (lookup tables),
- * preserves the bit level performance specifications.
- *
- * As outlined in the G.723 Recommendation, the algorithm is broken
- * down into modules.  Each section of code below is preceded by
- * the name of the module which it is implementing.
- *
- */
-
-#include "g72x.h"
-#include "g72x_priv.h"
-
-/*
- * Maps G.723_40 code word to ructeconstructed scale factor normalized log
- * magnitude values.
- */
-static short   _dqlntab[32] = {-2048, -66, 28, 104, 169, 224, 274, 318,
-                               358, 395, 429, 459, 488, 514, 539, 566,
-                               566, 539, 514, 488, 459, 429, 395, 358,
-                               318, 274, 224, 169, 104, 28, -66, -2048};
-
-/* Maps G.723_40 code word to log of scale factor multiplier. */
-static short   _witab[32] = {448, 448, 768, 1248, 1280, 1312, 1856, 3200,
-                       4512, 5728, 7008, 8960, 11456, 14080, 16928, 22272,
-                       22272, 16928, 14080, 11456, 8960, 7008, 5728, 4512,
-                       3200, 1856, 1312, 1280, 1248, 768, 448, 448};
-
-/*
- * Maps G.723_40 code words to a set of values whose long and short
- * term averages are computed and then compared to give an indication
- * how stationary (steady state) the signal is.
- */
-static short   _fitab[32] = {0, 0, 0, 0, 0, 0x200, 0x200, 0x200,
-                       0x200, 0x200, 0x400, 0x600, 0x800, 0xA00, 0xC00, 0xC00,
-                       0xC00, 0xC00, 0xA00, 0x800, 0x600, 0x400, 0x200, 0x200,
-                       0x200, 0x200, 0x200, 0, 0, 0, 0, 0};
-
-static short qtab_723_40[15] = {-122, -16, 68, 139, 198, 250, 298, 339,
-                               378, 413, 445, 475, 502, 528, 553};
-
-/*
- * g723_40_encoder()
- *
- * Encodes a 16-bit linear PCM, A-law or u-law input sample and retuens
- * the resulting 5-bit CCITT G.723 40Kbps code.
- * Returns -1 if the input coding value is invalid.
- */
-int    g723_40_encoder (int sl, G72x_STATE *state_ptr)
-{
-       short           sei, sezi, se, sez;     /* ACCUM */
-       short           d;                      /* SUBTA */
-       short           y;                      /* MIX */
-       short           sr;                     /* ADDB */
-       short           dqsez;                  /* ADDC */
-       short           dq, i;
-
-       /* linearize input sample to 14-bit PCM */
-       sl >>= 2;               /* sl of 14-bit dynamic range */
-
-       sezi = predictor_zero(state_ptr);
-       sez = sezi >> 1;
-       sei = sezi + predictor_pole(state_ptr);
-       se = sei >> 1;                  /* se = estimated signal */
-
-       d = sl - se;                    /* d = estimation difference */
-
-       /* quantize prediction difference */
-       y = step_size(state_ptr);       /* adaptive quantizer step size */
-       i = quantize(d, y, qtab_723_40, 15);    /* i = ADPCM code */
-
-       dq = reconstruct(i & 0x10, _dqlntab[i], y);     /* quantized diff */
-
-       sr = (dq < 0) ? se - (dq & 0x7FFF) : se + dq; /* reconstructed signal */
-
-       dqsez = sr + sez - se;          /* dqsez = pole prediction diff. */
-
-       update(5, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr);
-
-       return (i);
-}
-
-/*
- * g723_40_decoder()
- *
- * Decodes a 5-bit CCITT G.723 40Kbps code and returns
- * the resulting 16-bit linear PCM, A-law or u-law sample value.
- * -1 is returned if the output coding is unknown.
- */
-int    g723_40_decoder (int i, G72x_STATE *state_ptr)
-{
-       short           sezi, sei, sez, se;     /* ACCUM */
-       short           y ;                     /* MIX */
-       short           sr;                     /* ADDB */
-       short           dq;
-       short           dqsez;
-
-       i &= 0x1f;                      /* mask to get proper bits */
-       sezi = predictor_zero(state_ptr);
-       sez = sezi >> 1;
-       sei = sezi + predictor_pole(state_ptr);
-       se = sei >> 1;                  /* se = estimated signal */
-
-       y = step_size(state_ptr);       /* adaptive quantizer step size */
-       dq = reconstruct(i & 0x10, _dqlntab[i], y);     /* estimation diff. */
-
-       sr = (dq < 0) ? (se - (dq & 0x7FFF)) : (se + dq); /* reconst. signal */
-
-       dqsez = sr - se + sez;          /* pole prediction diff. */
-
-       update(5, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr);
-
-       return (sr << 2);       /* sr was of 14-bit dynamic range */
-}
-
diff --git a/libs/libsndfile/src/G72x/g72x.c b/libs/libsndfile/src/G72x/g72x.c
deleted file mode 100644 (file)
index 3fae81a..0000000
+++ /dev/null
@@ -1,644 +0,0 @@
-/*
- * This source code is a product of Sun Microsystems, Inc. and is provided
- * for unrestricted use.  Users may copy or modify this source code without
- * charge.
- *
- * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
- * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun source code is provided with no support and without any obligation on
- * the part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California  94043
- */
-
-/*
- * g72x.c
- *
- * Common routines for G.721 and G.723 conversions.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "g72x.h"
-#include "g72x_priv.h"
-
-static G72x_STATE * g72x_state_new (void) ;
-static int unpack_bytes (int bits, int blocksize, const unsigned char * block, short * samples) ;
-static int pack_bytes (int bits, const short * samples, unsigned char * block) ;
-
-static
-short power2 [15] =
-{      1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80,
-       0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000
-} ;
-
-/*
- * quan()
- *
- * quantizes the input val against the table of size short integers.
- * It returns i if table[i - 1] <= val < table[i].
- *
- * Using linear search for simple coding.
- */
-static
-int quan (int val, short *table, int size)
-{
-       int             i;
-
-       for (i = 0; i < size; i++)
-               if (val < *table++)
-                       break;
-       return (i);
-}
-
-/*
- * fmult()
- *
- * returns the integer product of the 14-bit integer "an" and
- * "floating point" representation (4-bit exponent, 6-bit mantessa) "srn".
- */
-static
-int fmult (int an, int srn)
-{
-       short           anmag, anexp, anmant;
-       short           wanexp, wanmant;
-       short           retval;
-
-       anmag = (an > 0) ? an : ((-an) & 0x1FFF);
-       anexp = quan(anmag, power2, 15) - 6;
-       anmant = (anmag == 0) ? 32 :
-           (anexp >= 0) ? anmag >> anexp : anmag << -anexp;
-       wanexp = anexp + ((srn >> 6) & 0xF) - 13;
-
-       /*
-       ** The original was :
-       **              wanmant = (anmant * (srn & 0x3F) + 0x30) >> 4 ;
-       ** but could see no valid reason for the + 0x30.
-       ** Removed it and it improved the SNR of the codec.
-       */
-
-       wanmant = (anmant * (srn & 0x3F)) >> 4 ;
-
-       retval = (wanexp >= 0) ? ((wanmant << wanexp) & 0x7FFF) :
-           (wanmant >> -wanexp);
-
-       return (((an ^ srn) < 0) ? -retval : retval);
-}
-
-static G72x_STATE * g72x_state_new (void)
-{      return calloc (1, sizeof (G72x_STATE)) ;
-}
-
-/*
- * private_init_state()
- *
- * This routine initializes and/or resets the G72x_PRIVATE structure
- * pointed to by 'state_ptr'.
- * All the initial state values are specified in the CCITT G.721 document.
- */
-void private_init_state (G72x_STATE *state_ptr)
-{
-       int             cnta;
-
-       state_ptr->yl = 34816;
-       state_ptr->yu = 544;
-       state_ptr->dms = 0;
-       state_ptr->dml = 0;
-       state_ptr->ap = 0;
-       for (cnta = 0; cnta < 2; cnta++) {
-               state_ptr->a[cnta] = 0;
-               state_ptr->pk[cnta] = 0;
-               state_ptr->sr[cnta] = 32;
-       }
-       for (cnta = 0; cnta < 6; cnta++) {
-               state_ptr->b[cnta] = 0;
-               state_ptr->dq[cnta] = 32;
-       }
-       state_ptr->td = 0;
-}      /* private_init_state */
-
-struct g72x_state * g72x_reader_init (int codec, int *blocksize, int *samplesperblock)
-{      G72x_STATE *pstate ;
-
-       if ((pstate = g72x_state_new ()) == NULL)
-               return NULL ;
-
-       private_init_state (pstate) ;
-
-       pstate->encoder = NULL ;
-
-       switch (codec)
-       {       case G723_16_BITS_PER_SAMPLE : /* 2 bits per sample. */
-                               pstate->decoder = g723_16_decoder ;
-                               *blocksize = G723_16_BYTES_PER_BLOCK ;
-                               *samplesperblock = G723_16_SAMPLES_PER_BLOCK ;
-                               pstate->codec_bits = 2 ;
-                               pstate->blocksize = G723_16_BYTES_PER_BLOCK ;
-                               pstate->samplesperblock = G723_16_SAMPLES_PER_BLOCK ;
-                               break ;
-
-               case G723_24_BITS_PER_SAMPLE : /* 3 bits per sample. */
-                               pstate->decoder = g723_24_decoder ;
-                               *blocksize = G723_24_BYTES_PER_BLOCK ;
-                               *samplesperblock = G723_24_SAMPLES_PER_BLOCK ;
-                               pstate->codec_bits = 3 ;
-                               pstate->blocksize = G723_24_BYTES_PER_BLOCK ;
-                               pstate->samplesperblock = G723_24_SAMPLES_PER_BLOCK ;
-                               break ;
-
-               case G721_32_BITS_PER_SAMPLE : /* 4 bits per sample. */
-                               pstate->decoder = g721_decoder ;
-                               *blocksize = G721_32_BYTES_PER_BLOCK ;
-                               *samplesperblock = G721_32_SAMPLES_PER_BLOCK ;
-                               pstate->codec_bits = 4 ;
-                               pstate->blocksize = G721_32_BYTES_PER_BLOCK ;
-                               pstate->samplesperblock = G721_32_SAMPLES_PER_BLOCK ;
-                               break ;
-
-               case G721_40_BITS_PER_SAMPLE : /* 5 bits per sample. */
-                               pstate->decoder = g723_40_decoder ;
-                               *blocksize = G721_40_BYTES_PER_BLOCK ;
-                               *samplesperblock = G721_40_SAMPLES_PER_BLOCK ;
-                               pstate->codec_bits = 5 ;
-                               pstate->blocksize = G721_40_BYTES_PER_BLOCK ;
-                               pstate->samplesperblock = G721_40_SAMPLES_PER_BLOCK ;
-                               break ;
-
-               default :
-                               free (pstate) ;
-                               return NULL ;
-               } ;
-
-       return pstate ;
-}      /* g72x_reader_init */
-
-struct g72x_state * g72x_writer_init (int codec, int *blocksize, int *samplesperblock)
-{      G72x_STATE *pstate ;
-
-       if ((pstate = g72x_state_new ()) == NULL)
-               return NULL ;
-
-       private_init_state (pstate) ;
-       pstate->decoder = NULL ;
-
-       switch (codec)
-       {       case G723_16_BITS_PER_SAMPLE : /* 2 bits per sample. */
-                               pstate->encoder = g723_16_encoder ;
-                               *blocksize = G723_16_BYTES_PER_BLOCK ;
-                               *samplesperblock = G723_16_SAMPLES_PER_BLOCK ;
-                               pstate->codec_bits = 2 ;
-                               pstate->blocksize = G723_16_BYTES_PER_BLOCK ;
-                               pstate->samplesperblock = G723_16_SAMPLES_PER_BLOCK ;
-                               break ;
-
-               case G723_24_BITS_PER_SAMPLE : /* 3 bits per sample. */
-                               pstate->encoder = g723_24_encoder ;
-                               *blocksize = G723_24_BYTES_PER_BLOCK ;
-                               *samplesperblock = G723_24_SAMPLES_PER_BLOCK ;
-                               pstate->codec_bits = 3 ;
-                               pstate->blocksize = G723_24_BYTES_PER_BLOCK ;
-                               pstate->samplesperblock = G723_24_SAMPLES_PER_BLOCK ;
-                               break ;
-
-               case G721_32_BITS_PER_SAMPLE : /* 4 bits per sample. */
-                               pstate->encoder = g721_encoder ;
-                               *blocksize = G721_32_BYTES_PER_BLOCK ;
-                               *samplesperblock = G721_32_SAMPLES_PER_BLOCK ;
-                               pstate->codec_bits = 4 ;
-                               pstate->blocksize = G721_32_BYTES_PER_BLOCK ;
-                               pstate->samplesperblock = G721_32_SAMPLES_PER_BLOCK ;
-                               break ;
-
-               case G721_40_BITS_PER_SAMPLE : /* 5 bits per sample. */
-                               pstate->encoder = g723_40_encoder ;
-                               *blocksize = G721_40_BYTES_PER_BLOCK ;
-                               *samplesperblock = G721_40_SAMPLES_PER_BLOCK ;
-                               pstate->codec_bits = 5 ;
-                               pstate->blocksize = G721_40_BYTES_PER_BLOCK ;
-                               pstate->samplesperblock = G721_40_SAMPLES_PER_BLOCK ;
-                               break ;
-
-               default :
-                               free (pstate) ;
-                               return NULL ;
-               } ;
-
-       return pstate ;
-}      /* g72x_writer_init */
-
-int g72x_decode_block (G72x_STATE *pstate, const unsigned char *block, short *samples)
-{      int     k, count ;
-
-       count = unpack_bytes (pstate->codec_bits, pstate->blocksize, block, samples) ;
-
-       for (k = 0 ; k < count ; k++)
-               samples [k] = pstate->decoder (samples [k], pstate) ;
-
-       return 0 ;
-}      /* g72x_decode_block */
-
-int g72x_encode_block (G72x_STATE *pstate, short *samples, unsigned char *block)
-{      int k, count ;
-
-       for (k = 0 ; k < pstate->samplesperblock ; k++)
-               samples [k] = pstate->encoder (samples [k], pstate) ;
-
-       count = pack_bytes (pstate->codec_bits, samples, block) ;
-
-       return count ;
-}      /* g72x_encode_block */
-
-/*
- * predictor_zero()
- *
- * computes the estimated signal from 6-zero predictor.
- *
- */
-int  predictor_zero (G72x_STATE *state_ptr)
-{
-       int             i;
-       int             sezi;
-
-       sezi = fmult(state_ptr->b[0] >> 2, state_ptr->dq[0]);
-       for (i = 1; i < 6; i++)                 /* ACCUM */
-               sezi += fmult(state_ptr->b[i] >> 2, state_ptr->dq[i]);
-       return (sezi);
-}
-/*
- * predictor_pole()
- *
- * computes the estimated signal from 2-pole predictor.
- *
- */
-int  predictor_pole(G72x_STATE *state_ptr)
-{
-       return (fmult(state_ptr->a[1] >> 2, state_ptr->sr[1]) +
-           fmult(state_ptr->a[0] >> 2, state_ptr->sr[0]));
-}
-/*
- * step_size()
- *
- * computes the quantization step size of the adaptive quantizer.
- *
- */
-int  step_size (G72x_STATE *state_ptr)
-{
-       int             y;
-       int             dif;
-       int             al;
-
-       if (state_ptr->ap >= 256)
-               return (state_ptr->yu);
-       else {
-               y = state_ptr->yl >> 6;
-               dif = state_ptr->yu - y;
-               al = state_ptr->ap >> 2;
-               if (dif > 0)
-                       y += (dif * al) >> 6;
-               else if (dif < 0)
-                       y += (dif * al + 0x3F) >> 6;
-               return (y);
-       }
-}
-
-/*
- * quantize()
- *
- * Given a raw sample, 'd', of the difference signal and a
- * quantization step size scale factor, 'y', this routine returns the
- * ADPCM codeword to which that sample gets quantized.  The step
- * size scale factor division operation is done in the log base 2 domain
- * as a subtraction.
- */
-int quantize(
-       int             d,      /* Raw difference signal sample */
-       int             y,      /* Step size multiplier */
-       short   *table, /* quantization table */
-       int             size)   /* table size of short integers */
-{
-       short           dqm;    /* Magnitude of 'd' */
-       short           expon;  /* Integer part of base 2 log of 'd' */
-       short           mant;   /* Fractional part of base 2 log */
-       short           dl;     /* Log of magnitude of 'd' */
-       short           dln;    /* Step size scale factor normalized log */
-       int             i;
-
-       /*
-        * LOG
-        *
-        * Compute base 2 log of 'd', and store in 'dl'.
-        */
-       dqm = abs(d);
-       expon = quan(dqm >> 1, power2, 15);
-       mant = ((dqm << 7) >> expon) & 0x7F;    /* Fractional portion. */
-       dl = (expon << 7) + mant;
-
-       /*
-        * SUBTB
-        *
-        * "Divide" by step size multiplier.
-        */
-       dln = dl - (y >> 2);
-
-       /*
-        * QUAN
-        *
-        * Obtain codword i for 'd'.
-        */
-       i = quan(dln, table, size);
-       if (d < 0)                      /* take 1's complement of i */
-               return ((size << 1) + 1 - i);
-       else if (i == 0)                /* take 1's complement of 0 */
-               return ((size << 1) + 1); /* new in 1988 */
-       else
-               return (i);
-}
-/*
- * reconstruct()
- *
- * Returns reconstructed difference signal 'dq' obtained from
- * codeword 'i' and quantization step size scale factor 'y'.
- * Multiplication is performed in log base 2 domain as addition.
- */
-int
-reconstruct(
-       int             sign,   /* 0 for non-negative value */
-       int             dqln,   /* G.72x codeword */
-       int             y)      /* Step size multiplier */
-{
-       short           dql;    /* Log of 'dq' magnitude */
-       short           dex;    /* Integer part of log */
-       short           dqt;
-       short           dq;     /* Reconstructed difference signal sample */
-
-       dql = dqln + (y >> 2);  /* ADDA */
-
-       if (dql < 0) {
-               return ((sign) ? -0x8000 : 0);
-       } else {                /* ANTILOG */
-               dex = (dql >> 7) & 15;
-               dqt = 128 + (dql & 127);
-               dq = (dqt << 7) >> (14 - dex);
-               return ((sign) ? (dq - 0x8000) : dq);
-       }
-}
-
-
-/*
- * update()
- *
- * updates the state variables for each output code
- */
-void
-update(
-       int             code_size,      /* distinguish 723_40 with others */
-       int             y,              /* quantizer step size */
-       int             wi,             /* scale factor multiplier */
-       int             fi,             /* for long/short term energies */
-       int             dq,             /* quantized prediction difference */
-       int             sr,             /* reconstructed signal */
-       int             dqsez,          /* difference from 2-pole predictor */
-       G72x_STATE *state_ptr)  /* coder state pointer */
-{
-       int             cnt;
-       short           mag, expon;     /* Adaptive predictor, FLOAT A */
-       short           a2p = 0;        /* LIMC */
-       short           a1ul;           /* UPA1 */
-       short           pks1;           /* UPA2 */
-       short           fa1;
-       char            tr;             /* tone/transition detector */
-       short           ylint, thr2, dqthr;
-       short           ylfrac, thr1;
-       short           pk0;
-
-       pk0 = (dqsez < 0) ? 1 : 0;      /* needed in updating predictor poles */
-
-       mag = dq & 0x7FFF;              /* prediction difference magnitude */
-       /* TRANS */
-       ylint = state_ptr->yl >> 15;    /* exponent part of yl */
-       ylfrac = (state_ptr->yl >> 10) & 0x1F;  /* fractional part of yl */
-       thr1 = (32 + ylfrac) << ylint;          /* threshold */
-       thr2 = (ylint > 9) ? 31 << 10 : thr1;   /* limit thr2 to 31 << 10 */
-       dqthr = (thr2 + (thr2 >> 1)) >> 1;      /* dqthr = 0.75 * thr2 */
-       if (state_ptr->td == 0)         /* signal supposed voice */
-               tr = 0;
-       else if (mag <= dqthr)          /* supposed data, but small mag */
-               tr = 0;                 /* treated as voice */
-       else                            /* signal is data (modem) */
-               tr = 1;
-
-       /*
-        * Quantizer scale factor adaptation.
-        */
-
-       /* FUNCTW & FILTD & DELAY */
-       /* update non-steady state step size multiplier */
-       state_ptr->yu = y + ((wi - y) >> 5);
-
-       /* LIMB */
-       if (state_ptr->yu < 544)        /* 544 <= yu <= 5120 */
-               state_ptr->yu = 544;
-       else if (state_ptr->yu > 5120)
-               state_ptr->yu = 5120;
-
-       /* FILTE & DELAY */
-       /* update steady state step size multiplier */
-       state_ptr->yl += state_ptr->yu + ((-state_ptr->yl) >> 6);
-
-       /*
-        * Adaptive predictor coefficients.
-        */
-       if (tr == 1) {                  /* reset a's and b's for modem signal */
-               state_ptr->a[0] = 0;
-               state_ptr->a[1] = 0;
-               state_ptr->b[0] = 0;
-               state_ptr->b[1] = 0;
-               state_ptr->b[2] = 0;
-               state_ptr->b[3] = 0;
-               state_ptr->b[4] = 0;
-               state_ptr->b[5] = 0;
-       } else {                        /* update a's and b's */
-               pks1 = pk0 ^ state_ptr->pk[0];          /* UPA2 */
-
-               /* update predictor pole a[1] */
-               a2p = state_ptr->a[1] - (state_ptr->a[1] >> 7);
-               if (dqsez != 0) {
-                       fa1 = (pks1) ? state_ptr->a[0] : -state_ptr->a[0];
-                       if (fa1 < -8191)        /* a2p = function of fa1 */
-                               a2p -= 0x100;
-                       else if (fa1 > 8191)
-                               a2p += 0xFF;
-                       else
-                               a2p += fa1 >> 5;
-
-                       if (pk0 ^ state_ptr->pk[1])
-                       {       /* LIMC */
-                               if (a2p <= -12160)
-                                       a2p = -12288;
-                               else if (a2p >= 12416)
-                                       a2p = 12288;
-                               else
-                                       a2p -= 0x80;
-                               }
-                       else if (a2p <= -12416)
-                               a2p = -12288;
-                       else if (a2p >= 12160)
-                               a2p = 12288;
-                       else
-                               a2p += 0x80;
-               }
-
-               /* TRIGB & DELAY */
-               state_ptr->a[1] = a2p;
-
-               /* UPA1 */
-               /* update predictor pole a[0] */
-               state_ptr->a[0] -= state_ptr->a[0] >> 8;
-               if (dqsez != 0)
-               {       if (pks1 == 0)
-                               state_ptr->a[0] += 192;
-                       else
-                               state_ptr->a[0] -= 192;
-                       } ;
-
-               /* LIMD */
-               a1ul = 15360 - a2p;
-               if (state_ptr->a[0] < -a1ul)
-                       state_ptr->a[0] = -a1ul;
-               else if (state_ptr->a[0] > a1ul)
-                       state_ptr->a[0] = a1ul;
-
-               /* UPB : update predictor zeros b[6] */
-               for (cnt = 0; cnt < 6; cnt++) {
-                       if (code_size == 5)             /* for 40Kbps G.723 */
-                               state_ptr->b[cnt] -= state_ptr->b[cnt] >> 9;
-                       else                    /* for G.721 and 24Kbps G.723 */
-                               state_ptr->b[cnt] -= state_ptr->b[cnt] >> 8;
-                       if (dq & 0x7FFF) {                      /* XOR */
-                               if ((dq ^ state_ptr->dq[cnt]) >= 0)
-                                       state_ptr->b[cnt] += 128;
-                               else
-                                       state_ptr->b[cnt] -= 128;
-                       }
-               }
-       }
-
-       for (cnt = 5; cnt > 0; cnt--)
-               state_ptr->dq[cnt] = state_ptr->dq[cnt-1];
-       /* FLOAT A : convert dq[0] to 4-bit exp, 6-bit mantissa f.p. */
-       if (mag == 0) {
-               state_ptr->dq[0] = (dq >= 0) ? 0x20 : 0xFC20;
-       } else {
-               expon = quan(mag, power2, 15);
-               state_ptr->dq[0] = (dq >= 0) ?
-                   (expon << 6) + ((mag << 6) >> expon) :
-                   (expon << 6) + ((mag << 6) >> expon) - 0x400;
-       }
-
-       state_ptr->sr[1] = state_ptr->sr[0];
-       /* FLOAT B : convert sr to 4-bit exp., 6-bit mantissa f.p. */
-       if (sr == 0) {
-               state_ptr->sr[0] = 0x20;
-       } else if (sr > 0) {
-               expon = quan(sr, power2, 15);
-               state_ptr->sr[0] = (expon << 6) + ((sr << 6) >> expon);
-       } else if (sr > -32768) {
-               mag = -sr;
-               expon = quan(mag, power2, 15);
-               state_ptr->sr[0] =  (expon << 6) + ((mag << 6) >> expon) - 0x400;
-       } else
-               state_ptr->sr[0] = (short) 0xFC20;
-
-       /* DELAY A */
-       state_ptr->pk[1] = state_ptr->pk[0];
-       state_ptr->pk[0] = pk0;
-
-       /* TONE */
-       if (tr == 1)            /* this sample has been treated as data */
-               state_ptr->td = 0;      /* next one will be treated as voice */
-       else if (a2p < -11776)  /* small sample-to-sample correlation */
-               state_ptr->td = 1;      /* signal may be data */
-       else                            /* signal is voice */
-               state_ptr->td = 0;
-
-       /*
-        * Adaptation speed control.
-        */
-       state_ptr->dms += (fi - state_ptr->dms) >> 5;           /* FILTA */
-       state_ptr->dml += (((fi << 2) - state_ptr->dml) >> 7);  /* FILTB */
-
-       if (tr == 1)
-               state_ptr->ap = 256;
-       else if (y < 1536)                                      /* SUBTC */
-               state_ptr->ap += (0x200 - state_ptr->ap) >> 4;
-       else if (state_ptr->td == 1)
-               state_ptr->ap += (0x200 - state_ptr->ap) >> 4;
-       else if (abs((state_ptr->dms << 2) - state_ptr->dml) >=
-           (state_ptr->dml >> 3))
-               state_ptr->ap += (0x200 - state_ptr->ap) >> 4;
-       else
-               state_ptr->ap += (-state_ptr->ap) >> 4;
-
-       return ;
-} /* update */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-unpack_bytes (int bits, int blocksize, const unsigned char * block, short * samples)
-{      unsigned int    in_buffer = 0 ;
-       unsigned char   in_byte ;
-       int                             k, in_bits = 0, bindex = 0 ;
-
-       for (k = 0 ; bindex <= blocksize && k < G72x_BLOCK_SIZE ; k++)
-       {       if (in_bits < bits)
-               {       in_byte = block [bindex++] ;
-
-                       in_buffer |= (in_byte << in_bits);
-                       in_bits += 8;
-                       }
-               samples [k] = in_buffer & ((1 << bits) - 1);
-               in_buffer >>= bits;
-               in_bits -= bits;
-               } ;
-
-       return k ;
-} /* unpack_bytes */
-
-static int
-pack_bytes (int bits, const short * samples, unsigned char * block)
-{
-       unsigned int    out_buffer = 0 ;
-       int                             k, bindex = 0, out_bits = 0 ;
-       unsigned char   out_byte ;
-
-       for (k = 0 ; k < G72x_BLOCK_SIZE ; k++)
-       {       out_buffer |= (samples [k] << out_bits) ;
-               out_bits += bits ;
-               if (out_bits >= 8)
-               {       out_byte = out_buffer & 0xFF ;
-                       out_bits -= 8 ;
-                       out_buffer >>= 8 ;
-                       block [bindex++] = out_byte ;
-                       }
-               } ;
-
-       return bindex ;
-} /* pack_bytes */
-
diff --git a/libs/libsndfile/src/G72x/g72x.h b/libs/libsndfile/src/G72x/g72x.h
deleted file mode 100644 (file)
index d7631e6..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-** This file is not the same as the original file from Sun Microsystems. Nearly
-** all the original definitions and function prototypes that were in the file
-** of this name have been moved to g72x_priv.h.
-*/
-
-#ifndef G72X_HEADER_FILE
-#define        G72X_HEADER_FILE
-
-/*
-** Number of samples per block to process.
-** Must be a common multiple of possible bits per sample : 2, 3, 4, 5 and 8.
-*/
-#define        G72x_BLOCK_SIZE         (3 * 5 * 8)
-
-/*
-**     Identifiers for the differing kinds of G72x ADPCM codecs.
-**     The identifiers also define the number of encoded bits per sample.
-*/
-
-enum
-{      G723_16_BITS_PER_SAMPLE = 2,
-       G723_24_BITS_PER_SAMPLE = 3,
-       G723_40_BITS_PER_SAMPLE = 5,
-
-       G721_32_BITS_PER_SAMPLE = 4,
-       G721_40_BITS_PER_SAMPLE = 5,
-
-       G723_16_SAMPLES_PER_BLOCK = G72x_BLOCK_SIZE,
-       G723_24_SAMPLES_PER_BLOCK = G723_24_BITS_PER_SAMPLE * (G72x_BLOCK_SIZE / G723_24_BITS_PER_SAMPLE),
-       G723_40_SAMPLES_PER_BLOCK = G723_40_BITS_PER_SAMPLE * (G72x_BLOCK_SIZE / G723_40_BITS_PER_SAMPLE),
-
-       G721_32_SAMPLES_PER_BLOCK = G72x_BLOCK_SIZE,
-       G721_40_SAMPLES_PER_BLOCK = G721_40_BITS_PER_SAMPLE * (G72x_BLOCK_SIZE / G721_40_BITS_PER_SAMPLE),
-
-       G723_16_BYTES_PER_BLOCK = (G723_16_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8,
-       G723_24_BYTES_PER_BLOCK = (G723_24_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8,
-       G723_40_BYTES_PER_BLOCK = (G723_40_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8,
-
-       G721_32_BYTES_PER_BLOCK = (G721_32_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8,
-       G721_40_BYTES_PER_BLOCK = (G721_40_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8
-} ;
-
-/* Forward declaration of of g72x_state. */
-
-struct g72x_state ;
-
-/* External function definitions. */
-
-struct g72x_state * g72x_reader_init (int codec, int *blocksize, int *samplesperblock) ;
-struct g72x_state * g72x_writer_init (int codec, int *blocksize, int *samplesperblock) ;
-/*
-**     Initialize the ADPCM state table for the given codec.
-**     Return 0 on success, 1 on fail.
-*/
-
-int g72x_decode_block (struct g72x_state *pstate, const unsigned char *block, short *samples) ;
-/*
-**     The caller fills data->block with data->bytes bytes before calling the
-**     function. The value data->bytes must be an integer multiple of
-**     data->blocksize and be <= data->max_bytes.
-**     When it returns, the caller can read out data->samples samples.
-*/
-
-int g72x_encode_block (struct g72x_state *pstate, short *samples, unsigned char *block) ;
-/*
-**     The caller fills state->samples some integer multiple data->samples_per_block
-**     (up to G72x_BLOCK_SIZE) samples before calling the function.
-**     When it returns, the caller can read out bytes encoded bytes.
-*/
-
-#endif /* !G72X_HEADER_FILE */
-
diff --git a/libs/libsndfile/src/G72x/g72x_priv.h b/libs/libsndfile/src/G72x/g72x_priv.h
deleted file mode 100644 (file)
index 867c64b..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * This source code is a product of Sun Microsystems, Inc. and is provided
- * for unrestricted use.  Users may copy or modify this source code without
- * charge.
- *
- * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
- * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun source code is provided with no support and without any obligation on
- * the part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California  94043
- */
-
-#ifndef G72X_PRIVATE_H
-#define G72X_PRIVATE_H
-
-#ifdef __cplusplus
-#error "This code is not designed to be compiled with a C++ compiler."
-#endif
-
-/*
-** The following is the definition of the state structure used by the
-** G.721/G.723 encoder and decoder to preserve their internal state
-** between successive calls.  The meanings of the majority of the state
-** structure fields are explained in detail in the CCITT Recommendation
-** G.721.  The field names are essentially identical to variable names
-** in the bit level description of the coding algorithm included in this
-** Recommendation.
-*/
-
-struct g72x_state
-{      long  yl;       /* Locked or steady state step size multiplier. */
-       short yu;       /* Unlocked or non-steady state step size multiplier. */
-       short dms;      /* Short term energy estimate. */
-       short dml;      /* Long term energy estimate. */
-       short ap;       /* Linear weighting coefficient of 'yl' and 'yu'. */
-
-       short a[2];     /* Coefficients of pole portion of prediction filter. */
-       short b[6];     /* Coefficients of zero portion of prediction filter. */
-       short pk[2];    /*
-                                       ** Signs of previous two samples of a partially
-                                       ** reconstructed signal.
-                                       **/
-       short dq[6];    /*
-                                       ** Previous 6 samples of the quantized difference
-                                       ** signal represented in an internal floating point
-                                       ** format.
-                                       **/
-       short sr[2];    /*
-                                       ** Previous 2 samples of the quantized difference
-                                       ** signal represented in an internal floating point
-                                       ** format.
-                                       */
-       char td;        /* delayed tone detect, new in 1988 version */
-
-       /*      The following struct members were added for libsndfile. The original
-       **      code worked by calling a set of functions on a sample by sample basis
-       **      which is slow on architectures like Intel x86. For libsndfile, this
-       **      was changed so that the encoding and decoding routines could work on
-       **      a block of samples at a time to reduce the function call overhead.
-       */
-       int             (*encoder) (int, struct g72x_state* state) ;
-       int             (*decoder) (int, struct g72x_state* state) ;
-
-       int             codec_bits, blocksize, samplesperblock ;
-} ;
-
-typedef struct g72x_state G72x_STATE ;
-
-int    predictor_zero (G72x_STATE *state_ptr);
-
-int    predictor_pole (G72x_STATE *state_ptr);
-
-int    step_size (G72x_STATE *state_ptr);
-
-int    quantize (int d, int    y, short *table, int size);
-
-int    reconstruct (int sign, int dqln,        int y);
-
-void update (int code_size, int y, int wi, int fi, int dq, int sr, int dqsez, G72x_STATE *state_ptr);
-
-int g721_encoder       (int sample, G72x_STATE *state_ptr);
-int g721_decoder       (int code, G72x_STATE *state_ptr);
-
-int g723_16_encoder    (int sample, G72x_STATE *state_ptr);
-int g723_16_decoder    (int code, G72x_STATE *state_ptr);
-
-int g723_24_encoder    (int sample, G72x_STATE *state_ptr);
-int g723_24_decoder    (int code, G72x_STATE *state_ptr);
-
-int g723_40_encoder    (int sample, G72x_STATE *state_ptr);
-int g723_40_decoder    (int code, G72x_STATE *state_ptr);
-
-void private_init_state (G72x_STATE *state_ptr) ;
-
-#endif /* G72X_PRIVATE_H */
diff --git a/libs/libsndfile/src/G72x/g72x_test.c b/libs/libsndfile/src/G72x/g72x_test.c
deleted file mode 100644 (file)
index 79cabce..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include "g72x.h"
-#include "g72x_priv.h"
-
-#ifndef                M_PI
-#define                M_PI            3.14159265358979323846264338
-#endif
-
-#define                BUFFER_SIZE             (1<<14) /* Should be (1<<14) */
-#define                SAMPLE_RATE             11025
-
-
-static void g721_test  (void) ;
-static void g723_test  (double margin) ;
-
-static void    gen_signal_double (double *data, double scale, int datalen) ;
-static int error_function (double data, double orig, double margin) ;
-
-static int     oct_save_short  (short *a, short *b, int len) ;
-
-int
-main (int argc, char *argv [])
-{      int             bDoAll = 0 ;
-       int             nTests = 0 ;
-
-       if (argc != 2)
-       {       printf ("Usage : %s <test>\n", argv [0]) ;
-               printf ("    Where <test> is one of the following:\n") ;
-               printf ("           g721  - test G721 encoder and decoder\n") ;
-               printf ("           g723  - test G721 encoder and decoder\n") ;
-               printf ("           all   - perform all tests\n") ;
-               exit (1) ;
-               } ;
-
-       bDoAll=!strcmp (argv [1], "all");
-
-       if (bDoAll || ! strcmp (argv [1], "g721"))
-       {       g721_test       () ;
-               nTests++ ;
-               } ;
-
-       if (bDoAll || ! strcmp (argv [1], "g723"))
-       {       g723_test       (0.53) ;
-               nTests++ ;
-               } ;
-
-       if (nTests == 0)
-       {       printf ("Mono : ************************************\n") ;
-               printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-               printf ("Mono : ************************************\n") ;
-               return 1 ;
-               } ;
-
-       return 0 ;
-} /* main */
-
-static void
-g721_test      (void)
-{
-       return ;
-} /* g721_test */
-
-static void
-g723_test      (double margin)
-{      static double   orig_buffer [BUFFER_SIZE] ;
-       static short    orig [BUFFER_SIZE] ;
-       static short    data [BUFFER_SIZE] ;
-
-       G72x_STATE encoder_state, decoder_state ;
-
-       long    k ;
-       int     code, position, max_err ;
-
-       private_init_state (&encoder_state) ;
-       encoder_state.encoder = g723_24_encoder ;
-       encoder_state.codec_bits = 3 ;
-
-       private_init_state (&decoder_state) ;
-       decoder_state.decoder = g723_24_decoder ;
-       decoder_state.codec_bits = 3 ;
-
-       memset (data, 0, BUFFER_SIZE * sizeof (short)) ;
-       memset (orig, 0, BUFFER_SIZE * sizeof (short)) ;
-
-       printf ("    g723_test    : ") ;
-       fflush (stdout) ;
-
-       gen_signal_double (orig_buffer, 32000.0, BUFFER_SIZE) ;
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               orig [k] = (short) orig_buffer [k] ;
-
-       /* Write and read data here. */
-       position = 0 ;
-       max_err = 0 ;
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-       {       code = encoder_state.encoder (orig [k], &encoder_state) ;
-               data [k] = decoder_state.decoder (code, &decoder_state) ;
-               if (abs (orig [k] - data [k]) > max_err)
-               {       position = k ;
-                       max_err = abs (orig [k] - data [k]) ;
-                       } ;
-               } ;
-
-       printf ("\n\nMax error of %d at postion %d.\n", max_err, position) ;
-
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-       {       if (error_function (data [k], orig [k], margin))
-               {       printf ("Line %d: Incorrect sample A (#%ld : %d should be %d).\n", __LINE__, k, data [k], orig [k]) ;
-                       oct_save_short (orig, data, BUFFER_SIZE) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-
-       printf ("ok\n") ;
-
-       return ;
-} /* g723_test */
-
-
-#define                SIGNAL_MAXVAL   30000.0
-#define                DECAY_COUNT             1000
-
-static void
-gen_signal_double (double *gendata, double scale, int gendatalen)
-{      int             k, ramplen ;
-       double  amp = 0.0 ;
-
-       ramplen = DECAY_COUNT ;
-
-       for (k = 0 ; k < gendatalen ; k++)
-       {       if (k <= ramplen)
-                       amp = scale * k / ((double) ramplen) ;
-               else if (k > gendatalen - ramplen)
-                       amp = scale * (gendatalen - k) / ((double) ramplen) ;
-
-               gendata [k] = amp * (0.4 * sin (33.3 * 2.0 * M_PI * ((double) (k+1)) / ((double) SAMPLE_RATE))
-                                               + 0.3 * cos (201.1 * 2.0 * M_PI * ((double) (k+1)) / ((double) SAMPLE_RATE))) ;
-               } ;
-
-       return ;
-} /* gen_signal_double */
-
-static int
-error_function (double data, double orig, double margin)
-{      double error ;
-
-       if (fabs (orig) <= 500.0)
-               error = fabs (fabs (data) - fabs(orig)) / 2000.0 ;
-       else if (fabs (orig) <= 1000.0)
-               error = fabs (data - orig) / 3000.0 ;
-       else
-               error = fabs (data - orig) / fabs (orig) ;
-
-       if (error > margin)
-       {       printf ("\n\n*******************\nError : %f\n", error) ;
-               return 1 ;
-               } ;
-       return 0 ;
-} /* error_function */
-
-static int
-oct_save_short (short *a, short *b, int len)
-{      FILE    *file ;
-       int             k ;
-
-       if (! (file = fopen ("error.dat", "w")))
-               return 1 ;
-
-       fprintf (file, "# Not created by Octave\n") ;
-
-       fprintf (file, "# name: a\n") ;
-       fprintf (file, "# type: matrix\n") ;
-       fprintf (file, "# rows: %d\n", len) ;
-       fprintf (file, "# columns: 1\n") ;
-
-       for (k = 0 ; k < len ; k++)
-               fprintf (file, "% d\n", a [k]) ;
-
-       fprintf (file, "# name: b\n") ;
-       fprintf (file, "# type: matrix\n") ;
-       fprintf (file, "# rows: %d\n", len) ;
-       fprintf (file, "# columns: 1\n") ;
-
-       for (k = 0 ; k < len ; k++)
-               fprintf (file, "% d\n", b [k]) ;
-
-       fclose (file) ;
-       return 0 ;
-} /* oct_save_short */
-
diff --git a/libs/libsndfile/src/GSM610/COPYRIGHT b/libs/libsndfile/src/GSM610/COPYRIGHT
deleted file mode 100644 (file)
index eba0e52..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann,
-Technische Universitaet Berlin
-
-Any use of this software is permitted provided that this notice is not
-removed and that neither the authors nor the Technische Universitaet Berlin
-are deemed to have made any representations as to the suitability of this
-software for any purpose nor are held responsible for any defects of
-this software.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
-
-As a matter of courtesy, the authors request to be informed about uses
-this software has found, about bugs in this software, and about any
-improvements that may be of general interest.
-
-Berlin, 28.11.1994
-Jutta Degener
-Carsten Bormann
diff --git a/libs/libsndfile/src/GSM610/ChangeLog b/libs/libsndfile/src/GSM610/ChangeLog
deleted file mode 100644 (file)
index 24f5248..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-2004-05-12  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * gsm610_priv.h
-    Replace ugly macros with inline functions.
-
-    * *.c
-    Remove temporary variables used by macros and other minor fixes required by
-    above change.
-
-2003-06-02  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * rpe.c
-       Renamed variables "exp" to "expon" to avoid shadowed parameter warnigns.
-
-2002-06-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * long_term.c
-       Changes tp removed compiler warnings about shadowed parameters.
-
-2002-06-08  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * private.h
-       Made declarations of gsm_A, gsm_B, gsm_MIC etc extern. This fixed a compile
-       problem on MacOSX.
-
-2002-05-10  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-       * *.[ch]
-       Removed all pre-ANSI prototype kludges. Removed proto.h and unproto.h. 
-       Started work on making GSM 6.10 files seekable. Currently they are not.
-
-    * code.c private.h
-       Function Gsm_Coder () used a statically defined array. This was obviously
-       not re-entrant so moved it to struct gsm_state.
-
-2001-09-16  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * code.c
-    Added #includes for string.h and stdlib.h.
-
-2000-10-27  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * config.h
-    Removed some commented out #defines (ie //*efine) which were causing problems on
-       the Sun cc compiler.
-
-2000-02-29  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * private.h
-    Added #defines to emulate normal compile time options.
-
-2000-02-28  Erik de Castro Lopo  <erikd AT mega-nerd DOT com>
-
-    * everthing
-    Created this directory and copied files from libgsm.
-    http://kbs.cs.tu-berlin.de/~jutta/toast.html
diff --git a/libs/libsndfile/src/GSM610/Makefile.am b/libs/libsndfile/src/GSM610/Makefile.am
deleted file mode 100644 (file)
index a7358f2..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-EXTRA_DIST = README COPYRIGHT ChangeLog
-
-noinst_HEADERS = gsm.h config.h gsm610_priv.h
-noinst_LTLIBRARIES = libgsm.la
-
-CFILES = add.c decode.c gsm_decode.c gsm_encode.c long_term.c preprocess.c \
-       short_term.c code.c gsm_create.c gsm_destroy.c gsm_option.c lpc.c rpe.c table.c
-
-libgsm_la_SOURCES = $(CFILES) $(noinst_HEADERS)
-
-# Disable autoheader. 
-AUTOHEADER=echo
-
-
diff --git a/libs/libsndfile/src/GSM610/README b/libs/libsndfile/src/GSM610/README
deleted file mode 100644 (file)
index b57132b..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-GSM 06.10 13 kbit/s RPE/LTP speech codec
-----------------------------------------
-
-All the file in this directory were written by Jutta Degener
-and Carsten Borman for The Communications and Operating Systems 
-Research Group (KBS) at the Technische Universitaet Berlin.
-
-Their work was released under the following license which is 
-assumed to be compatible with The GNU Lesser General Public License.
-
-----------------------------------------------------------------------------
-
-Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann,
-Technische Universitaet Berlin
-
-Any use of this software is permitted provided that this notice is not
-removed and that neither the authors nor the Technische Universitaet Berlin
-are deemed to have made any representations as to the suitability of this
-software for any purpose nor are held responsible for any defects of
-this software.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
-
-As a matter of courtesy, the authors request to be informed about uses
-this software has found, about bugs in this software, and about any
-improvements that may be of general interest.
-
-Berlin, 28.11.1994
-Jutta Degener (jutta@cs.tu-berlin.de)
-Carsten Bormann (cabo@cs.tu-berlin.de)
-
-----------------------------------------------------------------------------
-
-Jutta Degener and Carsten Bormann's work can be found on their homepage
-at:
-
-    http://kbs.cs.tu-berlin.de/~jutta/toast.html
-       
diff --git a/libs/libsndfile/src/GSM610/add.c b/libs/libsndfile/src/GSM610/add.c
deleted file mode 100644 (file)
index 6f4eb5c..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-/*
- *  See private.h for the more commonly used macro versions.
- */
-
-#include       <stdio.h>
-#include       <assert.h>
-
-#include       "gsm610_priv.h"
-
-#define        saturate(x)     \
-       ((x) < MIN_WORD ? MIN_WORD : (x) > MAX_WORD ? MAX_WORD: (x))
-
-word gsm_add ( word a, word b)
-{
-       longword sum = (longword)a + (longword)b;
-       return saturate(sum);
-}
-
-word gsm_sub ( word a, word b)
-{
-       longword diff = (longword)a - (longword)b;
-       return saturate(diff);
-}
-
-word gsm_mult ( word a, word b)
-{
-       if (a == MIN_WORD && b == MIN_WORD)
-               return MAX_WORD;
-       
-       return SASR_L( (longword)a * (longword)b, 15 );
-}
-
-word gsm_mult_r ( word a, word b)
-{
-       if (b == MIN_WORD && a == MIN_WORD) return MAX_WORD;
-       else {
-               longword prod = (longword)a * (longword)b + 16384;
-               prod >>= 15;
-               return prod & 0xFFFF;
-       }
-}
-
-word gsm_abs (word a)
-{
-       return a < 0 ? (a == MIN_WORD ? MAX_WORD : -a) : a;
-}
-
-longword gsm_L_mult (word a, word b)
-{
-       assert( a != MIN_WORD || b != MIN_WORD );
-       return ((longword)a * (longword)b) << 1;
-}
-
-longword gsm_L_add ( longword a, longword b)
-{
-       if (a < 0) {
-               if (b >= 0) return a + b;
-               else {
-                       ulongword A = (ulongword)-(a + 1) + (ulongword)-(b + 1);
-                       return A >= MAX_LONGWORD ? MIN_LONGWORD :-(longword)A-2;
-               }
-       }
-       else if (b <= 0) return a + b;
-       else {
-               ulongword A = (ulongword)a + (ulongword)b;
-               return A > MAX_LONGWORD ? MAX_LONGWORD : A;
-       }
-}
-
-longword gsm_L_sub ( longword a, longword b)
-{
-       if (a >= 0) {
-               if (b >= 0) return a - b;
-               else {
-                       /* a>=0, b<0 */
-
-                       ulongword A = (ulongword)a + -(b + 1);
-                       return A >= MAX_LONGWORD ? MAX_LONGWORD : (A + 1);
-               }
-       }
-       else if (b <= 0) return a - b;
-       else {
-               /* a<0, b>0 */  
-
-               ulongword A = (ulongword)-(a + 1) + b;
-               return A >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)A - 1;
-       }
-}
-
-static unsigned char const bitoff[ 256 ] = {
-        8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
-        3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-word gsm_norm (longword a )
-/*
- * the number of left shifts needed to normalize the 32 bit
- * variable L_var1 for positive values on the interval
- *
- * with minimum of
- * minimum of 1073741824  (01000000000000000000000000000000) and 
- * maximum of 2147483647  (01111111111111111111111111111111)
- *
- *
- * and for negative values on the interval with
- * minimum of -2147483648 (-10000000000000000000000000000000) and
- * maximum of -1073741824 ( -1000000000000000000000000000000).
- *
- * in order to normalize the result, the following
- * operation must be done: L_norm_var1 = L_var1 << norm( L_var1 );
- *
- * (That's 'ffs', only from the left, not the right..)
- */
-{
-       assert(a != 0);
-
-       if (a < 0) {
-               if (a <= -1073741824) return 0;
-               a = ~a;
-       }
-
-       return    a & 0xffff0000 
-               ? ( a & 0xff000000
-                 ?  -1 + bitoff[ 0xFF & (a >> 24) ]
-                 :   7 + bitoff[ 0xFF & (a >> 16) ] )
-               : ( a & 0xff00
-                 ?  15 + bitoff[ 0xFF & (a >> 8) ]
-                 :  23 + bitoff[ 0xFF & a ] );
-}
-
-longword gsm_L_asl (longword a, int n)
-{
-       if (n >= 32) return 0;
-       if (n <= -32) return -(a < 0);
-       if (n < 0) return gsm_L_asr(a, -n);
-       return a << n;
-}
-
-word gsm_asr (word a, int n)
-{
-       if (n >= 16) return -(a < 0);
-       if (n <= -16) return 0;
-       if (n < 0) return a << -n;
-
-       return SASR_W (a, (word) n);
-}
-
-word gsm_asl (word a, int n)
-{
-       if (n >= 16) return 0;
-       if (n <= -16) return -(a < 0);
-       if (n < 0) return gsm_asr(a, -n);
-       return a << n;
-}
-
-longword gsm_L_asr (longword a, int n)
-{
-       if (n >= 32) return -(a < 0);
-       if (n <= -32) return 0;
-       if (n < 0) return a << -n;
-
-       return SASR_L (a, (word) n);
-}
-
-/*
-**     word gsm_asr (word a, int n)
-**     {
-**             if (n >= 16) return -(a < 0);
-**             if (n <= -16) return 0;
-**             if (n < 0) return a << -n;
-**     
-**     #       ifdef   SASR_W
-**                     return a >> n;
-**     #       else
-**                     if (a >= 0) return a >> n;
-**                     else return -(word)( -(uword)a >> n );
-**     #       endif
-**     }
-**     
-*/
-/* 
- *  (From p. 46, end of section 4.2.5)
- *
- *  NOTE: The following lines gives [sic] one correct implementation
- *       of the div(num, denum) arithmetic operation.  Compute div
- *        which is the integer division of num by denum: with denum
- *       >= num > 0
- */
-
-word gsm_div (word num, word denum)
-{
-       longword        L_num   = num;
-       longword        L_denum = denum;
-       word            div     = 0;
-       int             k       = 15;
-
-       /* The parameter num sometimes becomes zero.
-        * Although this is explicitly guarded against in 4.2.5,
-        * we assume that the result should then be zero as well.
-        */
-
-       /* assert(num != 0); */
-
-       assert(num >= 0 && denum >= num);
-       if (num == 0)
-           return 0;
-
-       while (k--) {
-               div   <<= 1;
-               L_num <<= 1;
-
-               if (L_num >= L_denum) {
-                       L_num -= L_denum;
-                       div++;
-               }
-       }
-
-       return div;
-}
-
diff --git a/libs/libsndfile/src/GSM610/code.c b/libs/libsndfile/src/GSM610/code.c
deleted file mode 100644 (file)
index 78cb853..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-
-#include       <stdlib.h>
-#include       <string.h>
-
-#include       "gsm610_priv.h"
-
-/* 
- *  4.2 FIXED POINT IMPLEMENTATION OF THE RPE-LTP CODER 
- */
-
-void Gsm_Coder (
-
-       struct gsm_state        * State,
-
-       word    * s,    /* [0..159] samples                     IN      */
-
-/*
- * The RPE-LTD coder works on a frame by frame basis.  The length of
- * the frame is equal to 160 samples.  Some computations are done
- * once per frame to produce at the output of the coder the
- * LARc[1..8] parameters which are the coded LAR coefficients and 
- * also to realize the inverse filtering operation for the entire
- * frame (160 samples of signal d[0..159]).  These parts produce at
- * the output of the coder:
- */
-
-       word    * LARc, /* [0..7] LAR coefficients              OUT     */
-
-/*
- * Procedure 4.2.11 to 4.2.18 are to be executed four times per
- * frame.  That means once for each sub-segment RPE-LTP analysis of
- * 40 samples.  These parts produce at the output of the coder:
- */
-
-       word    * Nc,   /* [0..3] LTP lag                       OUT     */
-       word    * bc,   /* [0..3] coded LTP gain                OUT     */
-       word    * Mc,   /* [0..3] RPE grid selection            OUT     */
-       word    * xmaxc,/* [0..3] Coded maximum amplitude       OUT     */
-       word    * xMc   /* [13*4] normalized RPE samples        OUT     */
-)
-{
-       int     k;
-       word    * dp  = State->dp0 + 120;       /* [ -120...-1 ] */
-       word    * dpp = dp;             /* [ 0...39 ]    */
-
-       word    so[160];
-
-       Gsm_Preprocess                  (State, s, so);
-       Gsm_LPC_Analysis                (State, so, LARc);
-       Gsm_Short_Term_Analysis_Filter  (State, LARc, so);
-
-       for (k = 0; k <= 3; k++, xMc += 13) {
-
-               Gsm_Long_Term_Predictor ( State,
-                                        so+k*40, /* d      [0..39] IN  */
-                                        dp,      /* dp  [-120..-1] IN  */
-                                       State->e + 5,     /* e      [0..39] OUT */
-                                       dpp,      /* dpp    [0..39] OUT */
-                                        Nc++,
-                                        bc++);
-
-               Gsm_RPE_Encoding        ( /*-S,-*/
-                                       State->e + 5,   /* e      ][0..39][ IN/OUT */
-                                         xmaxc++, Mc++, xMc );
-               /*
-                * Gsm_Update_of_reconstructed_short_time_residual_signal
-                *                      ( dpp, State->e + 5, dp );
-                */
-
-               { register int i;
-                 for (i = 0; i <= 39; i++)
-                       dp[ i ] = GSM_ADD( State->e[5 + i], dpp[i] );
-               }
-               dp  += 40;
-               dpp += 40;
-
-       }
-       (void)memcpy( (char *)State->dp0, (char *)(State->dp0 + 160),
-               120 * sizeof(*State->dp0) );
-}
-
diff --git a/libs/libsndfile/src/GSM610/config.h b/libs/libsndfile/src/GSM610/config.h
deleted file mode 100644 (file)
index f3eeb82..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#ifndef        CONFIG_H
-#define        CONFIG_H
-
-#define        HAS_STDLIB_H    1               /* /usr/include/stdlib.h        */
-#define        HAS_FCNTL_H     1               /* /usr/include/fcntl.h         */
-
-#define        HAS_FSTAT       1               /* fstat syscall                */
-#define        HAS_FCHMOD      1               /* fchmod syscall               */
-#define        HAS_CHMOD       1               /* chmod syscall                */
-#define        HAS_FCHOWN      1               /* fchown syscall               */
-#define        HAS_CHOWN       1               /* chown syscall                */
-
-#define        HAS_STRING_H    1               /* /usr/include/string.h        */
-
-#define        HAS_UNISTD_H    1               /* /usr/include/unistd.h        */
-#define        HAS_UTIME       1               /* POSIX utime(path, times)     */
-#define        HAS_UTIME_H     1               /* UTIME header file            */
-
-#endif /* CONFIG_H */
-
diff --git a/libs/libsndfile/src/GSM610/decode.c b/libs/libsndfile/src/GSM610/decode.c
deleted file mode 100644 (file)
index 350df12..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include <stdio.h>
-
-#include       "gsm610_priv.h"
-
-/*
- *  4.3 FIXED POINT IMPLEMENTATION OF THE RPE-LTP DECODER
- */
-
-static void Postprocessing (
-       struct gsm_state        * S,
-       register word           * s)
-{
-       register int            k;
-       register word           msr = S->msr;
-       register word           tmp;
-
-       for (k = 160; k--; s++) {
-               tmp = GSM_MULT_R( msr, 28180 );
-               msr = GSM_ADD(*s, tmp);            /* Deemphasis             */
-               *s  = GSM_ADD(msr, msr) & 0xFFF8;  /* Truncation & Upscaling */
-       }
-       S->msr = msr;
-}
-
-void Gsm_Decoder (
-       struct gsm_state        * S,
-
-       word            * LARcr,        /* [0..7]               IN      */
-
-       word            * Ncr,          /* [0..3]               IN      */
-       word            * bcr,          /* [0..3]               IN      */
-       word            * Mcr,          /* [0..3]               IN      */
-       word            * xmaxcr,       /* [0..3]               IN      */
-       word            * xMcr,         /* [0..13*4]            IN      */
-
-       word            * s)            /* [0..159]             OUT     */
-{
-       int             j, k;
-       word            erp[40], wt[160];
-       word            * drp = S->dp0 + 120;
-
-       for (j=0; j <= 3; j++, xmaxcr++, bcr++, Ncr++, Mcr++, xMcr += 13) {
-
-               Gsm_RPE_Decoding( /*-S,-*/ *xmaxcr, *Mcr, xMcr, erp );
-               Gsm_Long_Term_Synthesis_Filtering( S, *Ncr, *bcr, erp, drp );
-
-               for (k = 0; k <= 39; k++) wt[ j * 40 + k ] =  drp[ k ];
-       }
-
-       Gsm_Short_Term_Synthesis_Filter( S, LARcr, wt, s );
-       Postprocessing(S, s);
-}
-
diff --git a/libs/libsndfile/src/GSM610/gsm.h b/libs/libsndfile/src/GSM610/gsm.h
deleted file mode 100644 (file)
index 48aecc7..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#ifndef        GSM_H
-#define        GSM_H
-
-#include       <stdio.h>               /* for FILE *   */
-
-/*
- *     Interface
- */
-
-typedef struct gsm_state *     gsm;
-typedef short                          gsm_signal;             /* signed 16 bit */
-typedef unsigned char          gsm_byte;
-typedef gsm_byte                       gsm_frame[33];          /* 33 * 8 bits   */
-
-#define        GSM_MAGIC               0xD                     /* 13 kbit/s RPE-LTP */
-
-#define        GSM_PATCHLEVEL          10
-#define        GSM_MINOR                       0
-#define        GSM_MAJOR                       1
-
-#define        GSM_OPT_VERBOSE         1
-#define        GSM_OPT_FAST            2
-#define        GSM_OPT_LTP_CUT         3
-#define        GSM_OPT_WAV49           4
-#define        GSM_OPT_FRAME_INDEX     5
-#define        GSM_OPT_FRAME_CHAIN     6
-
-gsm  gsm_create        (void);
-
-/* Added for libsndfile : May 6, 2002 */
-void gsm_init (gsm);   
-
-void gsm_destroy (gsm);        
-
-int  gsm_print   (FILE *, gsm, gsm_byte  *);
-int  gsm_option  (gsm, int, int *);
-
-void gsm_encode  (gsm, gsm_signal *, gsm_byte  *);
-int  gsm_decode  (gsm, gsm_byte   *, gsm_signal *);
-
-int  gsm_explode (gsm, gsm_byte   *, gsm_signal *);
-void gsm_implode (gsm, gsm_signal *, gsm_byte   *);
-
-#endif /* GSM_H */
-
-
diff --git a/libs/libsndfile/src/GSM610/gsm610_priv.h b/libs/libsndfile/src/GSM610/gsm610_priv.h
deleted file mode 100644 (file)
index e121c1c..0000000
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#ifndef        PRIVATE_H
-#define        PRIVATE_H
-
-/* Added by Erik de Castro Lopo */
-#define        USE_FLOAT_MUL
-#define        FAST
-#define        WAV49
-
-#ifdef __cplusplus
-#error "This code is not designed to be compiled with a C++ compiler."
-#endif
-/* Added by Erik de Castro Lopo */
-
-
-
-typedef short                          word;           /* 16 bit signed int    */
-typedef int                                    longword;       /* 32 bit signed int    */
-
-typedef unsigned short         uword;          /* unsigned word        */
-typedef unsigned int           ulongword;      /* unsigned longword    */
-
-struct gsm_state
-{      word                    dp0[ 280 ] ;
-
-       word                    z1;                     /* preprocessing.c, Offset_com. */
-       longword                L_z2;           /*                  Offset_com. */
-       int                             mp;                     /*                  Preemphasis */
-
-       word                    u[8] ;                  /* short_term_aly_filter.c      */
-       word                    LARpp[2][8] ;   /*                              */
-       word                    j;                              /*                              */
-
-       word            ltp_cut;        /* long_term.c, LTP crosscorr.  */
-       word                    nrp;                    /* 40 */        /* long_term.c, synthesis       */
-       word                    v[9] ;                  /* short_term.c, synthesis      */
-       word                    msr;                    /* decoder.c,   Postprocessing  */
-
-       char                    verbose;                /* only used if !NDEBUG         */
-       char                    fast;                   /* only used if FAST            */
-
-       char                    wav_fmt;                /* only used if WAV49 defined   */
-       unsigned char   frame_index;    /*            odd/even chaining */
-       unsigned char   frame_chain;    /*   half-byte to carry forward */
-
-       /* Moved here from code.c where it was defined as static */
-       word e[50] ;
-} ;
-
-typedef struct gsm_state GSM_STATE ;
-
-#define        MIN_WORD        (-32767 - 1)
-#define        MAX_WORD          32767
-
-#define        MIN_LONGWORD    (-2147483647 - 1)
-#define        MAX_LONGWORD      2147483647
-
-/* Signed arithmetic shift right. */
-static inline word
-SASR_W (word x, word by)
-{      return (x >> by) ;
-} /* SASR */
-
-static inline longword
-SASR_L (longword x, word by)
-{      return (x >> by) ;
-} /* SASR */
-
-/*
- *     Prototypes from add.c
- */
-word   gsm_mult                (word a, word b) ;
-longword gsm_L_mult    (word a, word b) ;
-word   gsm_mult_r              (word a, word b) ;
-
-word   gsm_div                 (word num, word denum) ;
-
-word   gsm_add                 (word a, word b ) ;
-longword gsm_L_add     (longword a, longword b ) ;
-
-word   gsm_sub                 (word a, word b) ;
-longword gsm_L_sub     (longword a, longword b) ;
-
-word   gsm_abs                 (word a) ;
-
-word   gsm_norm                (longword a ) ;
-
-longword gsm_L_asl     (longword a, int n) ;
-word   gsm_asl                 (word a, int n) ;
-
-longword gsm_L_asr     (longword a, int n) ;
-word   gsm_asr                 (word a, int n) ;
-
-/*
- *  Inlined functions from add.h
- */
-
-static inline longword
-GSM_MULT_R (word a, word b)
-{      return (((longword) (a)) * ((longword) (b)) + 16384) >> 15 ;
-} /* GSM_MULT_R */
-
-static inline longword
-GSM_MULT (word a, word b)
-{      return (((longword) (a)) * ((longword) (b))) >> 15 ;
-} /* GSM_MULT */
-
-static inline longword
-GSM_L_MULT (word a, word b)
-{      return ((longword) (a)) * ((longword) (b)) << 1 ;
-} /* GSM_L_MULT */
-
-static inline longword
-GSM_L_ADD (longword a, longword b)
-{      ulongword utmp ;
-
-       if (a < 0 && b < 0)
-       {       utmp = (ulongword)-((a) + 1) + (ulongword)-((b) + 1) ;
-               return (utmp >= (ulongword) MAX_LONGWORD) ? MIN_LONGWORD : -(longword)utmp-2 ;
-               } ;
-
-       if (a > 0 && b > 0)
-       {       utmp = (ulongword) a + (ulongword) b ;
-               return (utmp >= (ulongword) MAX_LONGWORD) ? MAX_LONGWORD : utmp ;
-               } ;
-
-       return a + b ;
-} /* GSM_L_ADD */
-
-static inline longword
-GSM_ADD (word a, word b)
-{      longword ltmp ;
-
-       ltmp = ((longword) a) + ((longword) b) ;
-
-       if (ltmp >= MAX_WORD)
-               return MAX_WORD ;
-       if (ltmp <= MIN_WORD)
-               return MIN_WORD ;
-
-       return ltmp ;
-} /* GSM_ADD */
-
-static inline longword
-GSM_SUB (word a, word b)
-{      longword ltmp ;
-
-       ltmp = ((longword) a) - ((longword) b) ;
-
-       if (ltmp >= MAX_WORD)
-               ltmp = MAX_WORD ;
-       else if (ltmp <= MIN_WORD)
-               ltmp = MIN_WORD ;
-
-       return ltmp ;
-} /* GSM_SUB */
-
-static inline word
-GSM_ABS (word a)
-{
-       if (a > 0)
-               return a ;
-       if (a == MIN_WORD)
-               return MAX_WORD ;
-       return -a ;
-} /* GSM_ADD */
-
-
-/*
- *  More prototypes from implementations..
- */
-void Gsm_Coder (
-               struct gsm_state        * S,
-               word    * s,    /* [0..159] samples             IN      */
-               word    * LARc, /* [0..7] LAR coefficients      OUT     */
-               word    * Nc,   /* [0..3] LTP lag               OUT     */
-               word    * bc,   /* [0..3] coded LTP gain        OUT     */
-               word    * Mc,   /* [0..3] RPE grid selection    OUT     */
-               word    * xmaxc,/* [0..3] Coded maximum amplitude OUT   */
-               word    * xMc) ;/* [13*4] normalized RPE samples OUT    */
-
-void Gsm_Long_Term_Predictor (         /* 4x for 160 samples */
-               struct gsm_state * S,
-               word    * d,    /* [0..39]   residual signal    IN      */
-               word    * dp,   /* [-120..-1] d'                IN      */
-               word    * e,    /* [0..40]                      OUT     */
-               word    * dpp,  /* [0..40]                      OUT     */
-               word    * Nc,   /* correlation lag              OUT     */
-               word    * bc) ; /* gain factor                  OUT     */
-
-void Gsm_LPC_Analysis (
-               struct gsm_state * S,
-               word * s,               /* 0..159 signals       IN/OUT  */
-               word * LARc) ;   /* 0..7   LARc's       OUT     */
-
-void Gsm_Preprocess (
-               struct gsm_state * S,
-               word * s, word * so) ;
-
-void Gsm_Encoding (
-               struct gsm_state * S,
-               word    * e,
-               word    * ep,
-               word    * xmaxc,
-               word    * Mc,
-               word    * xMc) ;
-
-void Gsm_Short_Term_Analysis_Filter (
-               struct gsm_state * S,
-               word    * LARc, /* coded log area ratio [0..7]  IN      */
-               word    * d) ;  /* st res. signal [0..159]      IN/OUT  */
-
-void Gsm_Decoder (
-               struct gsm_state * S,
-               word    * LARcr,        /* [0..7]               IN      */
-               word    * Ncr,          /* [0..3]               IN      */
-               word    * bcr,          /* [0..3]               IN      */
-               word    * Mcr,          /* [0..3]               IN      */
-               word    * xmaxcr,       /* [0..3]               IN      */
-               word    * xMcr,         /* [0..13*4]            IN      */
-               word    * s) ;          /* [0..159]             OUT     */
-
-void Gsm_Decoding (
-               struct gsm_state * S,
-               word    xmaxcr,
-               word    Mcr,
-               word    * xMcr,         /* [0..12]              IN      */
-               word    * erp) ;        /* [0..39]              OUT     */
-
-void Gsm_Long_Term_Synthesis_Filtering (
-               struct gsm_state* S,
-               word    Ncr,
-               word    bcr,
-               word    * erp,          /* [0..39]                IN    */
-               word    * drp) ;        /* [-120..-1] IN, [0..40] OUT   */
-
-void Gsm_RPE_Decoding (
-       /*-struct gsm_state *S,-*/
-               word xmaxcr,
-               word Mcr,
-               word * xMcr,  /* [0..12], 3 bits             IN      */
-               word * erp) ; /* [0..39]                     OUT     */
-
-void Gsm_RPE_Encoding (
-               /*-struct gsm_state * S,-*/
-               word    * e,            /* -5..-1][0..39][40..44     IN/OUT  */
-               word    * xmaxc,        /*                              OUT */
-               word    * Mc,           /*                              OUT */
-               word    * xMc) ;        /* [0..12]                      OUT */
-
-void Gsm_Short_Term_Synthesis_Filter (
-               struct gsm_state * S,
-               word    * LARcr,        /* log area ratios [0..7]  IN   */
-               word    * drp,          /* received d [0...39]     IN   */
-               word    * s) ;          /* signal   s [0..159]    OUT   */
-
-void Gsm_Update_of_reconstructed_short_time_residual_signal (
-               word    * dpp,          /* [0...39]     IN      */
-               word    * ep,           /* [0...39]     IN      */
-               word    * dp) ;         /* [-120...-1]  IN/OUT  */
-
-/*
- *  Tables from table.c
- */
-#ifndef        GSM_TABLE_C
-
-extern word gsm_A [8], gsm_B [8], gsm_MIC [8], gsm_MAC [8] ;
-extern word gsm_INVA [8] ;
-extern word gsm_DLB [4], gsm_QLB [4] ;
-extern word gsm_H [11] ;
-extern word gsm_NRFAC [8] ;
-extern word gsm_FAC [8] ;
-
-#endif /* GSM_TABLE_C */
-
-/*
- *  Debugging
- */
-#ifdef NDEBUG
-
-#      define  gsm_debug_words(a, b, c, d)             /* nil */
-#      define  gsm_debug_longwords(a, b, c, d)         /* nil */
-#      define  gsm_debug_word(a, b)                    /* nil */
-#      define  gsm_debug_longword(a, b)                /* nil */
-
-#else  /* !NDEBUG => DEBUG */
-
-       void  gsm_debug_words     (char * name, int, int, word *) ;
-       void  gsm_debug_longwords (char * name, int, int, longword *) ;
-       void  gsm_debug_longword  (char * name, longword) ;
-       void  gsm_debug_word      (char * name, word) ;
-
-#endif /* !NDEBUG */
-
-#endif /* PRIVATE_H */
-
diff --git a/libs/libsndfile/src/GSM610/gsm_create.c b/libs/libsndfile/src/GSM610/gsm_create.c
deleted file mode 100644 (file)
index 2bb4307..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include       "config.h"
-
-#include       <stdio.h>
-#include       <stdlib.h>
-#include       <string.h>
-
-
-
-#include "gsm.h"
-#include "gsm610_priv.h"
-
-gsm gsm_create (void)
-{
-       gsm  r;
-
-       r = malloc (sizeof(struct gsm_state));
-       if (!r) return r;
-       
-       memset((char *)r, 0, sizeof (struct gsm_state));
-       r->nrp = 40;
-
-       return r;
-}
-
-/* Added for libsndfile : May 6, 2002. Not sure if it works. */
-void gsm_init (gsm state)
-{
-       memset (state, 0, sizeof (struct gsm_state)) ;
-       state->nrp = 40 ;
-} 
-
diff --git a/libs/libsndfile/src/GSM610/gsm_decode.c b/libs/libsndfile/src/GSM610/gsm_decode.c
deleted file mode 100644 (file)
index b13308a..0000000
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include "gsm610_priv.h"
-
-#include "gsm.h"
-
-int gsm_decode (gsm s, gsm_byte * c, gsm_signal * target)
-{
-       word    LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4];
-
-#ifdef WAV49
-       if (s->wav_fmt) {
-
-               uword sr = 0;
-
-               s->frame_index = !s->frame_index;
-               if (s->frame_index) {
-
-                       sr = *c++;
-                       LARc[0] = sr & 0x3f;  sr >>= 6;
-                       sr |= (uword)*c++ << 2;
-                       LARc[1] = sr & 0x3f;  sr >>= 6;
-                       sr |= (uword)*c++ << 4;
-                       LARc[2] = sr & 0x1f;  sr >>= 5;
-                       LARc[3] = sr & 0x1f;  sr >>= 5;
-                       sr |= (uword)*c++ << 2;
-                       LARc[4] = sr & 0xf;  sr >>= 4;
-                       LARc[5] = sr & 0xf;  sr >>= 4;
-                       sr |= (uword)*c++ << 2;                 /* 5 */
-                       LARc[6] = sr & 0x7;  sr >>= 3;
-                       LARc[7] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 4;
-                       Nc[0] = sr & 0x7f;  sr >>= 7;
-                       bc[0] = sr & 0x3;  sr >>= 2;
-                       Mc[0] = sr & 0x3;  sr >>= 2;
-                       sr |= (uword)*c++ << 1;
-                       xmaxc[0] = sr & 0x3f;  sr >>= 6;
-                       xmc[0] = sr & 0x7;  sr >>= 3;
-                       sr = *c++;
-                       xmc[1] = sr & 0x7;  sr >>= 3;
-                       xmc[2] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 2;
-                       xmc[3] = sr & 0x7;  sr >>= 3;
-                       xmc[4] = sr & 0x7;  sr >>= 3;
-                       xmc[5] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 1;                 /* 10 */
-                       xmc[6] = sr & 0x7;  sr >>= 3;
-                       xmc[7] = sr & 0x7;  sr >>= 3;
-                       xmc[8] = sr & 0x7;  sr >>= 3;
-                       sr = *c++;
-                       xmc[9] = sr & 0x7;  sr >>= 3;
-                       xmc[10] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 2;
-                       xmc[11] = sr & 0x7;  sr >>= 3;
-                       xmc[12] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 4;
-                       Nc[1] = sr & 0x7f;  sr >>= 7;
-                       bc[1] = sr & 0x3;  sr >>= 2;
-                       Mc[1] = sr & 0x3;  sr >>= 2;
-                       sr |= (uword)*c++ << 1;
-                       xmaxc[1] = sr & 0x3f;  sr >>= 6;
-                       xmc[13] = sr & 0x7;  sr >>= 3;
-                       sr = *c++;                              /* 15 */
-                       xmc[14] = sr & 0x7;  sr >>= 3;
-                       xmc[15] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 2;
-                       xmc[16] = sr & 0x7;  sr >>= 3;
-                       xmc[17] = sr & 0x7;  sr >>= 3;
-                       xmc[18] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 1;
-                       xmc[19] = sr & 0x7;  sr >>= 3;
-                       xmc[20] = sr & 0x7;  sr >>= 3;
-                       xmc[21] = sr & 0x7;  sr >>= 3;
-                       sr = *c++;
-                       xmc[22] = sr & 0x7;  sr >>= 3;
-                       xmc[23] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 2;
-                       xmc[24] = sr & 0x7;  sr >>= 3;
-                       xmc[25] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 4;                 /* 20 */
-                       Nc[2] = sr & 0x7f;  sr >>= 7;
-                       bc[2] = sr & 0x3;  sr >>= 2;
-                       Mc[2] = sr & 0x3;  sr >>= 2;
-                       sr |= (uword)*c++ << 1;
-                       xmaxc[2] = sr & 0x3f;  sr >>= 6;
-                       xmc[26] = sr & 0x7;  sr >>= 3;
-                       sr = *c++;
-                       xmc[27] = sr & 0x7;  sr >>= 3;
-                       xmc[28] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 2;
-                       xmc[29] = sr & 0x7;  sr >>= 3;
-                       xmc[30] = sr & 0x7;  sr >>= 3;
-                       xmc[31] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 1;
-                       xmc[32] = sr & 0x7;  sr >>= 3;
-                       xmc[33] = sr & 0x7;  sr >>= 3;
-                       xmc[34] = sr & 0x7;  sr >>= 3;
-                       sr = *c++;                              /* 25 */
-                       xmc[35] = sr & 0x7;  sr >>= 3;
-                       xmc[36] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 2;
-                       xmc[37] = sr & 0x7;  sr >>= 3;
-                       xmc[38] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 4;
-                       Nc[3] = sr & 0x7f;  sr >>= 7;
-                       bc[3] = sr & 0x3;  sr >>= 2;
-                       Mc[3] = sr & 0x3;  sr >>= 2;
-                       sr |= (uword)*c++ << 1;
-                       xmaxc[3] = sr & 0x3f;  sr >>= 6;
-                       xmc[39] = sr & 0x7;  sr >>= 3;
-                       sr = *c++;
-                       xmc[40] = sr & 0x7;  sr >>= 3;
-                       xmc[41] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 2;                 /* 30 */
-                       xmc[42] = sr & 0x7;  sr >>= 3;
-                       xmc[43] = sr & 0x7;  sr >>= 3;
-                       xmc[44] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 1;
-                       xmc[45] = sr & 0x7;  sr >>= 3;
-                       xmc[46] = sr & 0x7;  sr >>= 3;
-                       xmc[47] = sr & 0x7;  sr >>= 3;
-                       sr = *c++;
-                       xmc[48] = sr & 0x7;  sr >>= 3;
-                       xmc[49] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 2;
-                       xmc[50] = sr & 0x7;  sr >>= 3;
-                       xmc[51] = sr & 0x7;  sr >>= 3;
-
-                       s->frame_chain = sr & 0xf;
-               }
-               else {
-                       sr = s->frame_chain;
-                       sr |= (uword)*c++ << 4;                 /* 1 */
-                       LARc[0] = sr & 0x3f;  sr >>= 6;
-                       LARc[1] = sr & 0x3f;  sr >>= 6;
-                       sr = *c++;
-                       LARc[2] = sr & 0x1f;  sr >>= 5;
-                       sr |= (uword)*c++ << 3;
-                       LARc[3] = sr & 0x1f;  sr >>= 5;
-                       LARc[4] = sr & 0xf;  sr >>= 4;
-                       sr |= (uword)*c++ << 2;
-                       LARc[5] = sr & 0xf;  sr >>= 4;
-                       LARc[6] = sr & 0x7;  sr >>= 3;
-                       LARc[7] = sr & 0x7;  sr >>= 3;
-                       sr = *c++;                              /* 5 */
-                       Nc[0] = sr & 0x7f;  sr >>= 7;
-                       sr |= (uword)*c++ << 1;
-                       bc[0] = sr & 0x3;  sr >>= 2;
-                       Mc[0] = sr & 0x3;  sr >>= 2;
-                       sr |= (uword)*c++ << 5;
-                       xmaxc[0] = sr & 0x3f;  sr >>= 6;
-                       xmc[0] = sr & 0x7;  sr >>= 3;
-                       xmc[1] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 1;
-                       xmc[2] = sr & 0x7;  sr >>= 3;
-                       xmc[3] = sr & 0x7;  sr >>= 3;
-                       xmc[4] = sr & 0x7;  sr >>= 3;
-                       sr = *c++;
-                       xmc[5] = sr & 0x7;  sr >>= 3;
-                       xmc[6] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 2;                 /* 10 */
-                       xmc[7] = sr & 0x7;  sr >>= 3;
-                       xmc[8] = sr & 0x7;  sr >>= 3;
-                       xmc[9] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 1;
-                       xmc[10] = sr & 0x7;  sr >>= 3;
-                       xmc[11] = sr & 0x7;  sr >>= 3;
-                       xmc[12] = sr & 0x7;  sr >>= 3;
-                       sr = *c++;
-                       Nc[1] = sr & 0x7f;  sr >>= 7;
-                       sr |= (uword)*c++ << 1;
-                       bc[1] = sr & 0x3;  sr >>= 2;
-                       Mc[1] = sr & 0x3;  sr >>= 2;
-                       sr |= (uword)*c++ << 5;
-                       xmaxc[1] = sr & 0x3f;  sr >>= 6;
-                       xmc[13] = sr & 0x7;  sr >>= 3;
-                       xmc[14] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 1;                 /* 15 */
-                       xmc[15] = sr & 0x7;  sr >>= 3;
-                       xmc[16] = sr & 0x7;  sr >>= 3;
-                       xmc[17] = sr & 0x7;  sr >>= 3;
-                       sr = *c++;
-                       xmc[18] = sr & 0x7;  sr >>= 3;
-                       xmc[19] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 2;
-                       xmc[20] = sr & 0x7;  sr >>= 3;
-                       xmc[21] = sr & 0x7;  sr >>= 3;
-                       xmc[22] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 1;
-                       xmc[23] = sr & 0x7;  sr >>= 3;
-                       xmc[24] = sr & 0x7;  sr >>= 3;
-                       xmc[25] = sr & 0x7;  sr >>= 3;
-                       sr = *c++;
-                       Nc[2] = sr & 0x7f;  sr >>= 7;
-                       sr |= (uword)*c++ << 1;                 /* 20 */
-                       bc[2] = sr & 0x3;  sr >>= 2;
-                       Mc[2] = sr & 0x3;  sr >>= 2;
-                       sr |= (uword)*c++ << 5;
-                       xmaxc[2] = sr & 0x3f;  sr >>= 6;
-                       xmc[26] = sr & 0x7;  sr >>= 3;
-                       xmc[27] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 1; 
-                       xmc[28] = sr & 0x7;  sr >>= 3;
-                       xmc[29] = sr & 0x7;  sr >>= 3;
-                       xmc[30] = sr & 0x7;  sr >>= 3;
-                       sr = *c++;
-                       xmc[31] = sr & 0x7;  sr >>= 3;
-                       xmc[32] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 2;
-                       xmc[33] = sr & 0x7;  sr >>= 3;
-                       xmc[34] = sr & 0x7;  sr >>= 3;
-                       xmc[35] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 1;                 /* 25 */
-                       xmc[36] = sr & 0x7;  sr >>= 3;
-                       xmc[37] = sr & 0x7;  sr >>= 3;
-                       xmc[38] = sr & 0x7;  sr >>= 3;
-                       sr = *c++;
-                       Nc[3] = sr & 0x7f;  sr >>= 7;
-                       sr |= (uword)*c++ << 1;         
-                       bc[3] = sr & 0x3;  sr >>= 2;
-                       Mc[3] = sr & 0x3;  sr >>= 2;
-                       sr |= (uword)*c++ << 5;
-                       xmaxc[3] = sr & 0x3f;  sr >>= 6;
-                       xmc[39] = sr & 0x7;  sr >>= 3;
-                       xmc[40] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 1;
-                       xmc[41] = sr & 0x7;  sr >>= 3;
-                       xmc[42] = sr & 0x7;  sr >>= 3;
-                       xmc[43] = sr & 0x7;  sr >>= 3;
-                       sr = *c++;                              /* 30 */
-                       xmc[44] = sr & 0x7;  sr >>= 3;
-                       xmc[45] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 2;
-                       xmc[46] = sr & 0x7;  sr >>= 3;
-                       xmc[47] = sr & 0x7;  sr >>= 3;
-                       xmc[48] = sr & 0x7;  sr >>= 3;
-                       sr |= (uword)*c++ << 1;
-                       xmc[49] = sr & 0x7;  sr >>= 3;
-                       xmc[50] = sr & 0x7;  sr >>= 3;
-                       xmc[51] = sr & 0x7;  sr >>= 3;
-               }
-       }
-       else
-#endif
-       {
-               /* GSM_MAGIC  = (*c >> 4) & 0xF; */
-
-               if (((*c >> 4) & 0x0F) != GSM_MAGIC) return -1;
-
-               LARc[0]  = (*c++ & 0xF) << 2;           /* 1 */
-               LARc[0] |= (*c >> 6) & 0x3;
-               LARc[1]  = *c++ & 0x3F;
-               LARc[2]  = (*c >> 3) & 0x1F;
-               LARc[3]  = (*c++ & 0x7) << 2;
-               LARc[3] |= (*c >> 6) & 0x3;
-               LARc[4]  = (*c >> 2) & 0xF;
-               LARc[5]  = (*c++ & 0x3) << 2;
-               LARc[5] |= (*c >> 6) & 0x3;
-               LARc[6]  = (*c >> 3) & 0x7;
-               LARc[7]  = *c++ & 0x7;
-               Nc[0]  = (*c >> 1) & 0x7F;
-               bc[0]  = (*c++ & 0x1) << 1;
-               bc[0] |= (*c >> 7) & 0x1;
-               Mc[0]  = (*c >> 5) & 0x3;
-               xmaxc[0]  = (*c++ & 0x1F) << 1;
-               xmaxc[0] |= (*c >> 7) & 0x1;
-               xmc[0]  = (*c >> 4) & 0x7;
-               xmc[1]  = (*c >> 1) & 0x7;
-               xmc[2]  = (*c++ & 0x1) << 2;
-               xmc[2] |= (*c >> 6) & 0x3;
-               xmc[3]  = (*c >> 3) & 0x7;
-               xmc[4]  = *c++ & 0x7;
-               xmc[5]  = (*c >> 5) & 0x7;
-               xmc[6]  = (*c >> 2) & 0x7;
-               xmc[7]  = (*c++ & 0x3) << 1;            /* 10 */
-               xmc[7] |= (*c >> 7) & 0x1;
-               xmc[8]  = (*c >> 4) & 0x7;
-               xmc[9]  = (*c >> 1) & 0x7;
-               xmc[10]  = (*c++ & 0x1) << 2;
-               xmc[10] |= (*c >> 6) & 0x3;
-               xmc[11]  = (*c >> 3) & 0x7;
-               xmc[12]  = *c++ & 0x7;
-               Nc[1]  = (*c >> 1) & 0x7F;
-               bc[1]  = (*c++ & 0x1) << 1;
-               bc[1] |= (*c >> 7) & 0x1;
-               Mc[1]  = (*c >> 5) & 0x3;
-               xmaxc[1]  = (*c++ & 0x1F) << 1;
-               xmaxc[1] |= (*c >> 7) & 0x1;
-               xmc[13]  = (*c >> 4) & 0x7;
-               xmc[14]  = (*c >> 1) & 0x7;
-               xmc[15]  = (*c++ & 0x1) << 2;
-               xmc[15] |= (*c >> 6) & 0x3;
-               xmc[16]  = (*c >> 3) & 0x7;
-               xmc[17]  = *c++ & 0x7;
-               xmc[18]  = (*c >> 5) & 0x7;
-               xmc[19]  = (*c >> 2) & 0x7;
-               xmc[20]  = (*c++ & 0x3) << 1;
-               xmc[20] |= (*c >> 7) & 0x1;
-               xmc[21]  = (*c >> 4) & 0x7;
-               xmc[22]  = (*c >> 1) & 0x7;
-               xmc[23]  = (*c++ & 0x1) << 2;
-               xmc[23] |= (*c >> 6) & 0x3;
-               xmc[24]  = (*c >> 3) & 0x7;
-               xmc[25]  = *c++ & 0x7;
-               Nc[2]  = (*c >> 1) & 0x7F;
-               bc[2]  = (*c++ & 0x1) << 1;             /* 20 */
-               bc[2] |= (*c >> 7) & 0x1;
-               Mc[2]  = (*c >> 5) & 0x3;
-               xmaxc[2]  = (*c++ & 0x1F) << 1;
-               xmaxc[2] |= (*c >> 7) & 0x1;
-               xmc[26]  = (*c >> 4) & 0x7;
-               xmc[27]  = (*c >> 1) & 0x7;
-               xmc[28]  = (*c++ & 0x1) << 2;
-               xmc[28] |= (*c >> 6) & 0x3;
-               xmc[29]  = (*c >> 3) & 0x7;
-               xmc[30]  = *c++ & 0x7;
-               xmc[31]  = (*c >> 5) & 0x7;
-               xmc[32]  = (*c >> 2) & 0x7;
-               xmc[33]  = (*c++ & 0x3) << 1;
-               xmc[33] |= (*c >> 7) & 0x1;
-               xmc[34]  = (*c >> 4) & 0x7;
-               xmc[35]  = (*c >> 1) & 0x7;
-               xmc[36]  = (*c++ & 0x1) << 2;
-               xmc[36] |= (*c >> 6) & 0x3;
-               xmc[37]  = (*c >> 3) & 0x7;
-               xmc[38]  = *c++ & 0x7;
-               Nc[3]  = (*c >> 1) & 0x7F;
-               bc[3]  = (*c++ & 0x1) << 1;
-               bc[3] |= (*c >> 7) & 0x1;
-               Mc[3]  = (*c >> 5) & 0x3;
-               xmaxc[3]  = (*c++ & 0x1F) << 1;
-               xmaxc[3] |= (*c >> 7) & 0x1;
-               xmc[39]  = (*c >> 4) & 0x7;
-               xmc[40]  = (*c >> 1) & 0x7;
-               xmc[41]  = (*c++ & 0x1) << 2;
-               xmc[41] |= (*c >> 6) & 0x3;
-               xmc[42]  = (*c >> 3) & 0x7;
-               xmc[43]  = *c++ & 0x7;                  /* 30  */
-               xmc[44]  = (*c >> 5) & 0x7;
-               xmc[45]  = (*c >> 2) & 0x7;
-               xmc[46]  = (*c++ & 0x3) << 1;
-               xmc[46] |= (*c >> 7) & 0x1;
-               xmc[47]  = (*c >> 4) & 0x7;
-               xmc[48]  = (*c >> 1) & 0x7;
-               xmc[49]  = (*c++ & 0x1) << 2;
-               xmc[49] |= (*c >> 6) & 0x3;
-               xmc[50]  = (*c >> 3) & 0x7;
-               xmc[51]  = *c & 0x7;                    /* 33 */
-       }
-
-       Gsm_Decoder(s, LARc, Nc, bc, Mc, xmaxc, xmc, target);
-
-       return 0;
-}
-
diff --git a/libs/libsndfile/src/GSM610/gsm_destroy.c b/libs/libsndfile/src/GSM610/gsm_destroy.c
deleted file mode 100644 (file)
index 9b41711..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include "gsm.h"
-#include "config.h"
-
-#ifdef HAS_STDLIB_H
-#      include <stdlib.h>
-#else
-#      ifdef   HAS_MALLOC_H
-#              include         <malloc.h>
-#      else
-               extern void free();
-#      endif
-#endif
-
-void gsm_destroy (gsm S)
-{
-       if (S) free((char *)S);
-}
-
diff --git a/libs/libsndfile/src/GSM610/gsm_encode.c b/libs/libsndfile/src/GSM610/gsm_encode.c
deleted file mode 100644 (file)
index 5c9e1ab..0000000
+++ /dev/null
@@ -1,449 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include "gsm610_priv.h"
-#include "gsm.h"
-
-void gsm_encode (gsm s, gsm_signal * source, gsm_byte * c)
-{
-       word            LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4];
-
-       Gsm_Coder(s, source, LARc, Nc, bc, Mc, xmaxc, xmc);
-
-
-       /*      variable        size
-
-               GSM_MAGIC       4
-
-               LARc[0]         6
-               LARc[1]         6
-               LARc[2]         5
-               LARc[3]         5
-               LARc[4]         4
-               LARc[5]         4
-               LARc[6]         3
-               LARc[7]         3
-
-               Nc[0]           7
-               bc[0]           2
-               Mc[0]           2
-               xmaxc[0]        6
-               xmc[0]          3
-               xmc[1]          3
-               xmc[2]          3
-               xmc[3]          3
-               xmc[4]          3
-               xmc[5]          3
-               xmc[6]          3
-               xmc[7]          3
-               xmc[8]          3
-               xmc[9]          3
-               xmc[10]         3
-               xmc[11]         3
-               xmc[12]         3
-
-               Nc[1]           7
-               bc[1]           2
-               Mc[1]           2
-               xmaxc[1]        6
-               xmc[13]         3
-               xmc[14]         3
-               xmc[15]         3
-               xmc[16]         3
-               xmc[17]         3
-               xmc[18]         3
-               xmc[19]         3
-               xmc[20]         3
-               xmc[21]         3
-               xmc[22]         3
-               xmc[23]         3
-               xmc[24]         3
-               xmc[25]         3
-
-               Nc[2]           7
-               bc[2]           2
-               Mc[2]           2
-               xmaxc[2]        6
-               xmc[26]         3
-               xmc[27]         3
-               xmc[28]         3
-               xmc[29]         3
-               xmc[30]         3
-               xmc[31]         3
-               xmc[32]         3
-               xmc[33]         3
-               xmc[34]         3
-               xmc[35]         3
-               xmc[36]         3
-               xmc[37]         3
-               xmc[38]         3
-
-               Nc[3]           7
-               bc[3]           2
-               Mc[3]           2
-               xmaxc[3]        6
-               xmc[39]         3
-               xmc[40]         3
-               xmc[41]         3
-               xmc[42]         3
-               xmc[43]         3
-               xmc[44]         3
-               xmc[45]         3
-               xmc[46]         3
-               xmc[47]         3
-               xmc[48]         3
-               xmc[49]         3
-               xmc[50]         3
-               xmc[51]         3
-       */
-
-#ifdef WAV49
-
-       if (s->wav_fmt) {
-               s->frame_index = !s->frame_index;
-               if (s->frame_index) {
-
-                       uword sr;
-
-                       sr = 0;
-                       sr = sr >> 6 | LARc[0] << 10;
-                       sr = sr >> 6 | LARc[1] << 10;
-                       *c++ = sr >> 4;
-                       sr = sr >> 5 | LARc[2] << 11;
-                       *c++ = sr >> 7;
-                       sr = sr >> 5 | LARc[3] << 11;
-                       sr = sr >> 4 | LARc[4] << 12;
-                       *c++ = sr >> 6;
-                       sr = sr >> 4 | LARc[5] << 12;
-                       sr = sr >> 3 | LARc[6] << 13;
-                       *c++ = sr >> 7;
-                       sr = sr >> 3 | LARc[7] << 13;
-                       sr = sr >> 7 | Nc[0] << 9;
-                       *c++ = sr >> 5;
-                       sr = sr >> 2 | bc[0] << 14;
-                       sr = sr >> 2 | Mc[0] << 14;
-                       sr = sr >> 6 | xmaxc[0] << 10;
-                       *c++ = sr >> 3;
-                       sr = sr >> 3 | xmc[0] << 13;
-                       *c++ = sr >> 8;
-                       sr = sr >> 3 | xmc[1] << 13;
-                       sr = sr >> 3 | xmc[2] << 13;
-                       sr = sr >> 3 | xmc[3] << 13;
-                       *c++ = sr >> 7;
-                       sr = sr >> 3 | xmc[4] << 13;
-                       sr = sr >> 3 | xmc[5] << 13;
-                       sr = sr >> 3 | xmc[6] << 13;
-                       *c++ = sr >> 6;
-                       sr = sr >> 3 | xmc[7] << 13;
-                       sr = sr >> 3 | xmc[8] << 13;
-                       *c++ = sr >> 8;
-                       sr = sr >> 3 | xmc[9] << 13;
-                       sr = sr >> 3 | xmc[10] << 13;
-                       sr = sr >> 3 | xmc[11] << 13;
-                       *c++ = sr >> 7;
-                       sr = sr >> 3 | xmc[12] << 13;
-                       sr = sr >> 7 | Nc[1] << 9;
-                       *c++ = sr >> 5;
-                       sr = sr >> 2 | bc[1] << 14;
-                       sr = sr >> 2 | Mc[1] << 14;
-                       sr = sr >> 6 | xmaxc[1] << 10;
-                       *c++ = sr >> 3;
-                       sr = sr >> 3 | xmc[13] << 13;
-                       *c++ = sr >> 8;
-                       sr = sr >> 3 | xmc[14] << 13;
-                       sr = sr >> 3 | xmc[15] << 13;
-                       sr = sr >> 3 | xmc[16] << 13;
-                       *c++ = sr >> 7;
-                       sr = sr >> 3 | xmc[17] << 13;
-                       sr = sr >> 3 | xmc[18] << 13;
-                       sr = sr >> 3 | xmc[19] << 13;
-                       *c++ = sr >> 6;
-                       sr = sr >> 3 | xmc[20] << 13;
-                       sr = sr >> 3 | xmc[21] << 13;
-                       *c++ = sr >> 8;
-                       sr = sr >> 3 | xmc[22] << 13;
-                       sr = sr >> 3 | xmc[23] << 13;
-                       sr = sr >> 3 | xmc[24] << 13;
-                       *c++ = sr >> 7;
-                       sr = sr >> 3 | xmc[25] << 13;
-                       sr = sr >> 7 | Nc[2] << 9;
-                       *c++ = sr >> 5;
-                       sr = sr >> 2 | bc[2] << 14;
-                       sr = sr >> 2 | Mc[2] << 14;
-                       sr = sr >> 6 | xmaxc[2] << 10;
-                       *c++ = sr >> 3;
-                       sr = sr >> 3 | xmc[26] << 13;
-                       *c++ = sr >> 8;
-                       sr = sr >> 3 | xmc[27] << 13;
-                       sr = sr >> 3 | xmc[28] << 13;
-                       sr = sr >> 3 | xmc[29] << 13;
-                       *c++ = sr >> 7;
-                       sr = sr >> 3 | xmc[30] << 13;
-                       sr = sr >> 3 | xmc[31] << 13;
-                       sr = sr >> 3 | xmc[32] << 13;
-                       *c++ = sr >> 6;
-                       sr = sr >> 3 | xmc[33] << 13;
-                       sr = sr >> 3 | xmc[34] << 13;
-                       *c++ = sr >> 8;
-                       sr = sr >> 3 | xmc[35] << 13;
-                       sr = sr >> 3 | xmc[36] << 13;
-                       sr = sr >> 3 | xmc[37] << 13;
-                       *c++ = sr >> 7;
-                       sr = sr >> 3 | xmc[38] << 13;
-                       sr = sr >> 7 | Nc[3] << 9;
-                       *c++ = sr >> 5;
-                       sr = sr >> 2 | bc[3] << 14;
-                       sr = sr >> 2 | Mc[3] << 14;
-                       sr = sr >> 6 | xmaxc[3] << 10;
-                       *c++ = sr >> 3;
-                       sr = sr >> 3 | xmc[39] << 13;
-                       *c++ = sr >> 8;
-                       sr = sr >> 3 | xmc[40] << 13;
-                       sr = sr >> 3 | xmc[41] << 13;
-                       sr = sr >> 3 | xmc[42] << 13;
-                       *c++ = sr >> 7;
-                       sr = sr >> 3 | xmc[43] << 13;
-                       sr = sr >> 3 | xmc[44] << 13;
-                       sr = sr >> 3 | xmc[45] << 13;
-                       *c++ = sr >> 6;
-                       sr = sr >> 3 | xmc[46] << 13;
-                       sr = sr >> 3 | xmc[47] << 13;
-                       *c++ = sr >> 8;
-                       sr = sr >> 3 | xmc[48] << 13;
-                       sr = sr >> 3 | xmc[49] << 13;
-                       sr = sr >> 3 | xmc[50] << 13;
-                       *c++ = sr >> 7;
-                       sr = sr >> 3 | xmc[51] << 13;
-                       sr = sr >> 4;
-                       *c = sr >> 8;
-                       s->frame_chain = *c;
-               }
-               else {
-                       uword sr;
-
-                       sr = 0;
-                       sr = sr >> 4 | s->frame_chain << 12;
-                       sr = sr >> 6 | LARc[0] << 10;
-                       *c++ = sr >> 6;
-                       sr = sr >> 6 | LARc[1] << 10;
-                       *c++ = sr >> 8;
-                       sr = sr >> 5 | LARc[2] << 11;
-                       sr = sr >> 5 | LARc[3] << 11;
-                       *c++ = sr >> 6;
-                       sr = sr >> 4 | LARc[4] << 12;
-                       sr = sr >> 4 | LARc[5] << 12;
-                       *c++ = sr >> 6;
-                       sr = sr >> 3 | LARc[6] << 13;
-                       sr = sr >> 3 | LARc[7] << 13;
-                       *c++ = sr >> 8;
-                       sr = sr >> 7 | Nc[0] << 9;
-                       sr = sr >> 2 | bc[0] << 14;
-                       *c++ = sr >> 7;
-                       sr = sr >> 2 | Mc[0] << 14;
-                       sr = sr >> 6 | xmaxc[0] << 10;
-                       *c++ = sr >> 7;
-                       sr = sr >> 3 | xmc[0] << 13;
-                       sr = sr >> 3 | xmc[1] << 13;
-                       sr = sr >> 3 | xmc[2] << 13;
-                       *c++ = sr >> 6;
-                       sr = sr >> 3 | xmc[3] << 13;
-                       sr = sr >> 3 | xmc[4] << 13;
-                       *c++ = sr >> 8;
-                       sr = sr >> 3 | xmc[5] << 13;
-                       sr = sr >> 3 | xmc[6] << 13;
-                       sr = sr >> 3 | xmc[7] << 13;
-                       *c++ = sr >> 7;
-                       sr = sr >> 3 | xmc[8] << 13;
-                       sr = sr >> 3 | xmc[9] << 13;
-                       sr = sr >> 3 | xmc[10] << 13;
-                       *c++ = sr >> 6;
-                       sr = sr >> 3 | xmc[11] << 13;
-                       sr = sr >> 3 | xmc[12] << 13;
-                       *c++ = sr >> 8;
-                       sr = sr >> 7 | Nc[1] << 9;
-                       sr = sr >> 2 | bc[1] << 14;
-                       *c++ = sr >> 7;
-                       sr = sr >> 2 | Mc[1] << 14;
-                       sr = sr >> 6 | xmaxc[1] << 10;
-                       *c++ = sr >> 7;
-                       sr = sr >> 3 | xmc[13] << 13;
-                       sr = sr >> 3 | xmc[14] << 13;
-                       sr = sr >> 3 | xmc[15] << 13;
-                       *c++ = sr >> 6;
-                       sr = sr >> 3 | xmc[16] << 13;
-                       sr = sr >> 3 | xmc[17] << 13;
-                       *c++ = sr >> 8;
-                       sr = sr >> 3 | xmc[18] << 13;
-                       sr = sr >> 3 | xmc[19] << 13;
-                       sr = sr >> 3 | xmc[20] << 13;
-                       *c++ = sr >> 7;
-                       sr = sr >> 3 | xmc[21] << 13;
-                       sr = sr >> 3 | xmc[22] << 13;
-                       sr = sr >> 3 | xmc[23] << 13;
-                       *c++ = sr >> 6;
-                       sr = sr >> 3 | xmc[24] << 13;
-                       sr = sr >> 3 | xmc[25] << 13;
-                       *c++ = sr >> 8;
-                       sr = sr >> 7 | Nc[2] << 9;
-                       sr = sr >> 2 | bc[2] << 14;
-                       *c++ = sr >> 7;
-                       sr = sr >> 2 | Mc[2] << 14;
-                       sr = sr >> 6 | xmaxc[2] << 10;
-                       *c++ = sr >> 7;
-                       sr = sr >> 3 | xmc[26] << 13;
-                       sr = sr >> 3 | xmc[27] << 13;
-                       sr = sr >> 3 | xmc[28] << 13;
-                       *c++ = sr >> 6;
-                       sr = sr >> 3 | xmc[29] << 13;
-                       sr = sr >> 3 | xmc[30] << 13;
-                       *c++ = sr >> 8;
-                       sr = sr >> 3 | xmc[31] << 13;
-                       sr = sr >> 3 | xmc[32] << 13;
-                       sr = sr >> 3 | xmc[33] << 13;
-                       *c++ = sr >> 7;
-                       sr = sr >> 3 | xmc[34] << 13;
-                       sr = sr >> 3 | xmc[35] << 13;
-                       sr = sr >> 3 | xmc[36] << 13;
-                       *c++ = sr >> 6;
-                       sr = sr >> 3 | xmc[37] << 13;
-                       sr = sr >> 3 | xmc[38] << 13;
-                       *c++ = sr >> 8;
-                       sr = sr >> 7 | Nc[3] << 9;
-                       sr = sr >> 2 | bc[3] << 14;
-                       *c++ = sr >> 7;
-                       sr = sr >> 2 | Mc[3] << 14;
-                       sr = sr >> 6 | xmaxc[3] << 10;
-                       *c++ = sr >> 7;
-                       sr = sr >> 3 | xmc[39] << 13;
-                       sr = sr >> 3 | xmc[40] << 13;
-                       sr = sr >> 3 | xmc[41] << 13;
-                       *c++ = sr >> 6;
-                       sr = sr >> 3 | xmc[42] << 13;
-                       sr = sr >> 3 | xmc[43] << 13;
-                       *c++ = sr >> 8;
-                       sr = sr >> 3 | xmc[44] << 13;
-                       sr = sr >> 3 | xmc[45] << 13;
-                       sr = sr >> 3 | xmc[46] << 13;
-                       *c++ = sr >> 7;
-                       sr = sr >> 3 | xmc[47] << 13;
-                       sr = sr >> 3 | xmc[48] << 13;
-                       sr = sr >> 3 | xmc[49] << 13;
-                       *c++ = sr >> 6;
-                       sr = sr >> 3 | xmc[50] << 13;
-                       sr = sr >> 3 | xmc[51] << 13;
-                       *c++ = sr >> 8;
-               }
-       }
-
-       else
-
-#endif /* WAV49 */
-       {
-
-               *c++ =   ((GSM_MAGIC & 0xF) << 4)               /* 1 */
-                      | ((LARc[0] >> 2) & 0xF);
-               *c++ =   ((LARc[0] & 0x3) << 6)
-                      | (LARc[1] & 0x3F);
-               *c++ =   ((LARc[2] & 0x1F) << 3)
-                      | ((LARc[3] >> 2) & 0x7);
-               *c++ =   ((LARc[3] & 0x3) << 6)
-                      | ((LARc[4] & 0xF) << 2)
-                      | ((LARc[5] >> 2) & 0x3);
-               *c++ =   ((LARc[5] & 0x3) << 6)
-                      | ((LARc[6] & 0x7) << 3)
-                      | (LARc[7] & 0x7);
-               *c++ =   ((Nc[0] & 0x7F) << 1)
-                      | ((bc[0] >> 1) & 0x1);
-               *c++ =   ((bc[0] & 0x1) << 7)
-                      | ((Mc[0] & 0x3) << 5)
-                      | ((xmaxc[0] >> 1) & 0x1F);
-               *c++ =   ((xmaxc[0] & 0x1) << 7)
-                      | ((xmc[0] & 0x7) << 4)
-                      | ((xmc[1] & 0x7) << 1)
-                      | ((xmc[2] >> 2) & 0x1);
-               *c++ =   ((xmc[2] & 0x3) << 6)
-                      | ((xmc[3] & 0x7) << 3)
-                      | (xmc[4] & 0x7);
-               *c++ =   ((xmc[5] & 0x7) << 5)                  /* 10 */
-                      | ((xmc[6] & 0x7) << 2)
-                      | ((xmc[7] >> 1) & 0x3);
-               *c++ =   ((xmc[7] & 0x1) << 7)
-                      | ((xmc[8] & 0x7) << 4)
-                      | ((xmc[9] & 0x7) << 1)
-                      | ((xmc[10] >> 2) & 0x1);
-               *c++ =   ((xmc[10] & 0x3) << 6)
-                      | ((xmc[11] & 0x7) << 3)
-                      | (xmc[12] & 0x7);
-               *c++ =   ((Nc[1] & 0x7F) << 1)
-                      | ((bc[1] >> 1) & 0x1);
-               *c++ =   ((bc[1] & 0x1) << 7)
-                      | ((Mc[1] & 0x3) << 5)
-                      | ((xmaxc[1] >> 1) & 0x1F);
-               *c++ =   ((xmaxc[1] & 0x1) << 7)
-                      | ((xmc[13] & 0x7) << 4)
-                      | ((xmc[14] & 0x7) << 1)
-                      | ((xmc[15] >> 2) & 0x1);
-               *c++ =   ((xmc[15] & 0x3) << 6)
-                      | ((xmc[16] & 0x7) << 3)
-                      | (xmc[17] & 0x7);
-               *c++ =   ((xmc[18] & 0x7) << 5)
-                      | ((xmc[19] & 0x7) << 2)
-                      | ((xmc[20] >> 1) & 0x3);
-               *c++ =   ((xmc[20] & 0x1) << 7)
-                      | ((xmc[21] & 0x7) << 4)
-                      | ((xmc[22] & 0x7) << 1)
-                      | ((xmc[23] >> 2) & 0x1);
-               *c++ =   ((xmc[23] & 0x3) << 6)
-                      | ((xmc[24] & 0x7) << 3)
-                      | (xmc[25] & 0x7);
-               *c++ =   ((Nc[2] & 0x7F) << 1)                  /* 20 */
-                      | ((bc[2] >> 1) & 0x1);
-               *c++ =   ((bc[2] & 0x1) << 7)
-                      | ((Mc[2] & 0x3) << 5)
-                      | ((xmaxc[2] >> 1) & 0x1F);
-               *c++ =   ((xmaxc[2] & 0x1) << 7)
-                      | ((xmc[26] & 0x7) << 4)
-                      | ((xmc[27] & 0x7) << 1)
-                      | ((xmc[28] >> 2) & 0x1);
-               *c++ =   ((xmc[28] & 0x3) << 6)
-                      | ((xmc[29] & 0x7) << 3)
-                      | (xmc[30] & 0x7);
-               *c++ =   ((xmc[31] & 0x7) << 5)
-                      | ((xmc[32] & 0x7) << 2)
-                      | ((xmc[33] >> 1) & 0x3);
-               *c++ =   ((xmc[33] & 0x1) << 7)
-                      | ((xmc[34] & 0x7) << 4)
-                      | ((xmc[35] & 0x7) << 1)
-                      | ((xmc[36] >> 2) & 0x1);
-               *c++ =   ((xmc[36] & 0x3) << 6)
-                      | ((xmc[37] & 0x7) << 3)
-                      | (xmc[38] & 0x7);
-               *c++ =   ((Nc[3] & 0x7F) << 1)
-                      | ((bc[3] >> 1) & 0x1);
-               *c++ =   ((bc[3] & 0x1) << 7)
-                      | ((Mc[3] & 0x3) << 5)
-                      | ((xmaxc[3] >> 1) & 0x1F);
-               *c++ =   ((xmaxc[3] & 0x1) << 7)
-                      | ((xmc[39] & 0x7) << 4)
-                      | ((xmc[40] & 0x7) << 1)
-                      | ((xmc[41] >> 2) & 0x1);
-               *c++ =   ((xmc[41] & 0x3) << 6)                 /* 30 */
-                      | ((xmc[42] & 0x7) << 3)
-                      | (xmc[43] & 0x7);
-               *c++ =   ((xmc[44] & 0x7) << 5)
-                      | ((xmc[45] & 0x7) << 2)
-                      | ((xmc[46] >> 1) & 0x3);
-               *c++ =   ((xmc[46] & 0x1) << 7)
-                      | ((xmc[47] & 0x7) << 4)
-                      | ((xmc[48] & 0x7) << 1)
-                      | ((xmc[49] >> 2) & 0x1);
-               *c++ =   ((xmc[49] & 0x3) << 6)
-                      | ((xmc[50] & 0x7) << 3)
-                      | (xmc[51] & 0x7);
-
-       }
-}
-
diff --git a/libs/libsndfile/src/GSM610/gsm_option.c b/libs/libsndfile/src/GSM610/gsm_option.c
deleted file mode 100644 (file)
index 0139c35..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include "gsm610_priv.h"
-
-#include "gsm.h"
-
-int gsm_option (gsm r, int opt, int * val)
-{
-       int     result = -1;
-
-       switch (opt) {
-       case GSM_OPT_LTP_CUT:
-#ifdef         LTP_CUT
-               result = r->ltp_cut;
-               if (val) r->ltp_cut = *val;
-#endif
-               break;
-
-       case GSM_OPT_VERBOSE:
-#ifndef        NDEBUG
-               result = r->verbose;
-               if (val) r->verbose = *val;
-#endif
-               break;
-
-       case GSM_OPT_FAST:
-
-#if    defined(FAST) && defined(USE_FLOAT_MUL)
-               result = r->fast;
-               if (val) r->fast = !!*val;
-#endif
-               break;
-
-       case GSM_OPT_FRAME_CHAIN:
-
-#ifdef WAV49
-               result = r->frame_chain;
-               if (val) r->frame_chain = *val;
-#endif
-               break;
-
-       case GSM_OPT_FRAME_INDEX:
-
-#ifdef WAV49
-               result = r->frame_index;
-               if (val) r->frame_index = *val;
-#endif
-               break;
-
-       case GSM_OPT_WAV49:
-
-#ifdef WAV49 
-               result = r->wav_fmt;
-               if (val) r->wav_fmt = !!*val;
-#endif
-               break;
-
-       default:
-               break;
-       }
-       return result;
-}
diff --git a/libs/libsndfile/src/GSM610/long_term.c b/libs/libsndfile/src/GSM610/long_term.c
deleted file mode 100644 (file)
index 0d2cd0f..0000000
+++ /dev/null
@@ -1,959 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include <stdio.h>
-#include <assert.h>
-
-#include "gsm610_priv.h"
-
-/*
- *  4.2.11 .. 4.2.12 LONG TERM PREDICTOR (LTP) SECTION
- */
-
-
-/*
- * This module computes the LTP gain (bc) and the LTP lag (Nc)
- * for the long term analysis filter.   This is done by calculating a
- * maximum of the cross-correlation function between the current
- * sub-segment short term residual signal d[0..39] (output of
- * the short term analysis filter; for simplification the index
- * of this array begins at 0 and ends at 39 for each sub-segment of the
- * RPE-LTP analysis) and the previous reconstructed short term
- * residual signal dp[ -120 .. -1 ].  A dynamic scaling must be
- * performed to avoid overflow.
- */
-
- /* The next procedure exists in six versions.  First two integer
-  * version (if USE_FLOAT_MUL is not defined); then four floating
-  * point versions, twice with proper scaling (USE_FLOAT_MUL defined),
-  * once without (USE_FLOAT_MUL and FAST defined, and fast run-time
-  * option used).  Every pair has first a Cut version (see the -C
-  * option to toast or the LTP_CUT option to gsm_option()), then the
-  * uncut one.  (For a detailed explanation of why this is altogether
-  * a bad idea, see Henry Spencer and Geoff Collyer, ``#ifdef Considered
-  * Harmful''.)
-  */
-
-#ifndef  USE_FLOAT_MUL
-
-#ifdef LTP_CUT
-
-static void Cut_Calculation_of_the_LTP_parameters (
-
-       struct gsm_state * st,
-
-       register word   * d,            /* [0..39]      IN      */
-       register word   * dp,           /* [-120..-1]   IN      */
-       word            * bc_out,       /*              OUT     */
-       word            * Nc_out        /*              OUT     */
-)
-{
-       register int    k, lambda;
-       word            Nc, bc;
-       word            wt[40];
-
-       longword        L_result;
-       longword        L_max, L_power;
-       word            R, S, dmax, scal, best_k;
-       word            ltp_cut;
-
-       register word   temp, wt_k;
-
-       /*  Search of the optimum scaling of d[0..39].
-        */
-       dmax = 0;
-       for (k = 0; k <= 39; k++) {
-               temp = d[k];
-               temp = GSM_ABS( temp );
-               if (temp > dmax) {
-                       dmax = temp;
-                       best_k = k;
-               }
-       }
-       temp = 0;
-       if (dmax == 0) scal = 0;
-       else {
-               assert(dmax > 0);
-               temp = gsm_norm( (longword)dmax << 16 );
-       }
-       if (temp > 6) scal = 0;
-       else scal = 6 - temp;
-       assert(scal >= 0);
-
-       /* Search for the maximum cross-correlation and coding of the LTP lag
-        */
-       L_max = 0;
-       Nc    = 40;     /* index for the maximum cross-correlation */
-       wt_k  = SASR_W(d[best_k], scal);
-
-       for (lambda = 40; lambda <= 120; lambda++) {
-               L_result = (longword)wt_k * dp[best_k - lambda];
-               if (L_result > L_max) {
-                       Nc    = lambda;
-                       L_max = L_result;
-               }
-       }
-       *Nc_out = Nc;
-       L_max <<= 1;
-
-       /*  Rescaling of L_max
-        */
-       assert(scal <= 100 && scal >= -100);
-       L_max = L_max >> (6 - scal);    /* sub(6, scal) */
-
-       assert( Nc <= 120 && Nc >= 40);
-
-       /*   Compute the power of the reconstructed short term residual
-        *   signal dp[..]
-        */
-       L_power = 0;
-       for (k = 0; k <= 39; k++) {
-
-               register longword L_temp;
-
-               L_temp   = SASR_W( dp[k - Nc], 3 );
-               L_power += L_temp * L_temp;
-       }
-       L_power <<= 1;  /* from L_MULT */
-
-       /*  Normalization of L_max and L_power
-        */
-
-       if (L_max <= 0)  {
-               *bc_out = 0;
-               return;
-       }
-       if (L_max >= L_power) {
-               *bc_out = 3;
-               return;
-       }
-
-       temp = gsm_norm( L_power );
-
-       R = SASR( L_max   << temp, 16 );
-       S = SASR( L_power << temp, 16 );
-
-       /*  Coding of the LTP gain
-        */
-
-       /*  Table 4.3a must be used to obtain the level DLB[i] for the
-        *  quantization of the LTP gain b to get the coded version bc.
-        */
-       for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break;
-       *bc_out = bc;
-}
-
-#endif         /* LTP_CUT */
-
-static void Calculation_of_the_LTP_parameters (
-       register word   * d,            /* [0..39]      IN      */
-       register word   * dp,           /* [-120..-1]   IN      */
-       word            * bc_out,       /*              OUT     */
-       word            * Nc_out        /*              OUT     */
-)
-{
-       register int    k, lambda;
-       word            Nc, bc;
-       word            wt[40];
-
-       longword        L_max, L_power;
-       word            R, S, dmax, scal;
-       register word   temp;
-
-       /*  Search of the optimum scaling of d[0..39].
-        */
-       dmax = 0;
-
-       for (k = 0; k <= 39; k++) {
-               temp = d[k];
-               temp = GSM_ABS( temp );
-               if (temp > dmax) dmax = temp;
-       }
-
-       temp = 0;
-       if (dmax == 0) scal = 0;
-       else {
-               assert(dmax > 0);
-               temp = gsm_norm( (longword)dmax << 16 );
-       }
-
-       if (temp > 6) scal = 0;
-       else scal = 6 - temp;
-
-       assert(scal >= 0);
-
-       /*  Initialization of a working array wt
-        */
-
-       for (k = 0; k <= 39; k++) wt[k] = SASR_W( d[k], scal );
-
-       /* Search for the maximum cross-correlation and coding of the LTP lag
-        */
-       L_max = 0;
-       Nc    = 40;     /* index for the maximum cross-correlation */
-
-       for (lambda = 40; lambda <= 120; lambda++) {
-
-# undef STEP
-#              define STEP(k)  (longword)wt[k] * dp[k - lambda]
-
-               register longword L_result;
-
-               L_result  = STEP(0)  ; L_result += STEP(1) ;
-               L_result += STEP(2)  ; L_result += STEP(3) ;
-               L_result += STEP(4)  ; L_result += STEP(5)  ;
-               L_result += STEP(6)  ; L_result += STEP(7)  ;
-               L_result += STEP(8)  ; L_result += STEP(9)  ;
-               L_result += STEP(10) ; L_result += STEP(11) ;
-               L_result += STEP(12) ; L_result += STEP(13) ;
-               L_result += STEP(14) ; L_result += STEP(15) ;
-               L_result += STEP(16) ; L_result += STEP(17) ;
-               L_result += STEP(18) ; L_result += STEP(19) ;
-               L_result += STEP(20) ; L_result += STEP(21) ;
-               L_result += STEP(22) ; L_result += STEP(23) ;
-               L_result += STEP(24) ; L_result += STEP(25) ;
-               L_result += STEP(26) ; L_result += STEP(27) ;
-               L_result += STEP(28) ; L_result += STEP(29) ;
-               L_result += STEP(30) ; L_result += STEP(31) ;
-               L_result += STEP(32) ; L_result += STEP(33) ;
-               L_result += STEP(34) ; L_result += STEP(35) ;
-               L_result += STEP(36) ; L_result += STEP(37) ;
-               L_result += STEP(38) ; L_result += STEP(39) ;
-
-               if (L_result > L_max) {
-
-                       Nc    = lambda;
-                       L_max = L_result;
-               }
-       }
-
-       *Nc_out = Nc;
-
-       L_max <<= 1;
-
-       /*  Rescaling of L_max
-        */
-       assert(scal <= 100 && scal >=  -100);
-       L_max = L_max >> (6 - scal);    /* sub(6, scal) */
-
-       assert( Nc <= 120 && Nc >= 40);
-
-       /*   Compute the power of the reconstructed short term residual
-        *   signal dp[..]
-        */
-       L_power = 0;
-       for (k = 0; k <= 39; k++) {
-
-               register longword L_temp;
-
-               L_temp   = SASR_W( dp[k - Nc], 3 );
-               L_power += L_temp * L_temp;
-       }
-       L_power <<= 1;  /* from L_MULT */
-
-       /*  Normalization of L_max and L_power
-        */
-
-       if (L_max <= 0)  {
-               *bc_out = 0;
-               return;
-       }
-       if (L_max >= L_power) {
-               *bc_out = 3;
-               return;
-       }
-
-       temp = gsm_norm( L_power );
-
-       R = SASR_L( L_max   << temp, 16 );
-       S = SASR_L( L_power << temp, 16 );
-
-       /*  Coding of the LTP gain
-        */
-
-       /*  Table 4.3a must be used to obtain the level DLB[i] for the
-        *  quantization of the LTP gain b to get the coded version bc.
-        */
-       for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break;
-       *bc_out = bc;
-}
-
-#else  /* USE_FLOAT_MUL */
-
-#ifdef LTP_CUT
-
-static void Cut_Calculation_of_the_LTP_parameters (
-       struct gsm_state * st,          /*              IN      */
-       register word   * d,            /* [0..39]      IN      */
-       register word   * dp,           /* [-120..-1]   IN      */
-       word            * bc_out,       /*              OUT     */
-       word            * Nc_out        /*              OUT     */
-)
-{
-       register int    k, lambda;
-       word            Nc, bc;
-       word            ltp_cut;
-
-       float           wt_float[40];
-       float           dp_float_base[120], * dp_float = dp_float_base + 120;
-
-       longword        L_max, L_power;
-       word            R, S, dmax, scal;
-       register word   temp;
-
-       /*  Search of the optimum scaling of d[0..39].
-        */
-       dmax = 0;
-
-       for (k = 0; k <= 39; k++) {
-               temp = d[k];
-               temp = GSM_ABS( temp );
-               if (temp > dmax) dmax = temp;
-       }
-
-       temp = 0;
-       if (dmax == 0) scal = 0;
-       else {
-               assert(dmax > 0);
-               temp = gsm_norm( (longword)dmax << 16 );
-       }
-
-       if (temp > 6) scal = 0;
-       else scal = 6 - temp;
-
-       assert(scal >= 0);
-       ltp_cut = (longword)SASR_W(dmax, scal) * st->ltp_cut / 100; 
-
-
-       /*  Initialization of a working array wt
-        */
-
-       for (k = 0; k < 40; k++) {
-               register word w = SASR_W( d[k], scal );
-               if (w < 0 ? w > -ltp_cut : w < ltp_cut) {
-                       wt_float[k] = 0.0;
-               }
-               else {
-                       wt_float[k] =  w;
-               }
-       }
-       for (k = -120; k <  0; k++) dp_float[k] =  dp[k];
-
-       /* Search for the maximum cross-correlation and coding of the LTP lag
-        */
-       L_max = 0;
-       Nc    = 40;     /* index for the maximum cross-correlation */
-
-       for (lambda = 40; lambda <= 120; lambda += 9) {
-
-               /*  Calculate L_result for l = lambda .. lambda + 9.
-                */
-               register float *lp = dp_float - lambda;
-
-               register float  W;
-               register float  a = lp[-8], b = lp[-7], c = lp[-6],
-                               d = lp[-5], e = lp[-4], f = lp[-3],
-                               g = lp[-2], h = lp[-1];
-               register float  E; 
-               register float  S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0,
-                               S5 = 0, S6 = 0, S7 = 0, S8 = 0;
-
-#              undef STEP
-#              define  STEP(K, a, b, c, d, e, f, g, h) \
-                       if ((W = wt_float[K]) != 0.0) { \
-                       E = W * a; S8 += E;             \
-                       E = W * b; S7 += E;             \
-                       E = W * c; S6 += E;             \
-                       E = W * d; S5 += E;             \
-                       E = W * e; S4 += E;             \
-                       E = W * f; S3 += E;             \
-                       E = W * g; S2 += E;             \
-                       E = W * h; S1 += E;             \
-                       a  = lp[K];                     \
-                       E = W * a; S0 += E; } else (a = lp[K])
-
-#              define  STEP_A(K)       STEP(K, a, b, c, d, e, f, g, h)
-#              define  STEP_B(K)       STEP(K, b, c, d, e, f, g, h, a)
-#              define  STEP_C(K)       STEP(K, c, d, e, f, g, h, a, b)
-#              define  STEP_D(K)       STEP(K, d, e, f, g, h, a, b, c)
-#              define  STEP_E(K)       STEP(K, e, f, g, h, a, b, c, d)
-#              define  STEP_F(K)       STEP(K, f, g, h, a, b, c, d, e)
-#              define  STEP_G(K)       STEP(K, g, h, a, b, c, d, e, f)
-#              define  STEP_H(K)       STEP(K, h, a, b, c, d, e, f, g)
-
-               STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3);
-               STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7);
-
-               STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11);
-               STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15);
-
-               STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19);
-               STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23);
-
-               STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27);
-               STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31);
-
-               STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35);
-               STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39);
-
-#              undef STEP_A
-#              undef STEP_B
-#              undef STEP_C
-#              undef STEP_D
-#              undef STEP_E
-#              undef STEP_F
-#              undef STEP_G
-#              undef STEP_H
-
-               if (S0 > L_max) { L_max = S0; Nc = lambda;     }
-               if (S1 > L_max) { L_max = S1; Nc = lambda + 1; }
-               if (S2 > L_max) { L_max = S2; Nc = lambda + 2; }
-               if (S3 > L_max) { L_max = S3; Nc = lambda + 3; }
-               if (S4 > L_max) { L_max = S4; Nc = lambda + 4; }
-               if (S5 > L_max) { L_max = S5; Nc = lambda + 5; }
-               if (S6 > L_max) { L_max = S6; Nc = lambda + 6; }
-               if (S7 > L_max) { L_max = S7; Nc = lambda + 7; }
-               if (S8 > L_max) { L_max = S8; Nc = lambda + 8; }
-
-       }
-       *Nc_out = Nc;
-
-       L_max <<= 1;
-
-       /*  Rescaling of L_max
-        */
-       assert(scal <= 100 && scal >=  -100);
-       L_max = L_max >> (6 - scal);    /* sub(6, scal) */
-
-       assert( Nc <= 120 && Nc >= 40);
-
-       /*   Compute the power of the reconstructed short term residual
-        *   signal dp[..]
-        */
-       L_power = 0;
-       for (k = 0; k <= 39; k++) {
-
-               register longword L_temp;
-
-               L_temp   = SASR_W( dp[k - Nc], 3 );
-               L_power += L_temp * L_temp;
-       }
-       L_power <<= 1;  /* from L_MULT */
-
-       /*  Normalization of L_max and L_power
-        */
-
-       if (L_max <= 0)  {
-               *bc_out = 0;
-               return;
-       }
-       if (L_max >= L_power) {
-               *bc_out = 3;
-               return;
-       }
-
-       temp = gsm_norm( L_power );
-
-       R = SASR( L_max   << temp, 16 );
-       S = SASR( L_power << temp, 16 );
-
-       /*  Coding of the LTP gain
-        */
-
-       /*  Table 4.3a must be used to obtain the level DLB[i] for the
-        *  quantization of the LTP gain b to get the coded version bc.
-        */
-       for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break;
-       *bc_out = bc;
-}
-
-#endif /* LTP_CUT */
-
-static void Calculation_of_the_LTP_parameters (
-       register word   * din,          /* [0..39]      IN      */
-       register word   * dp,           /* [-120..-1]   IN      */
-       word            * bc_out,       /*              OUT     */
-       word            * Nc_out        /*              OUT     */
-)
-{
-       register int    k, lambda;
-       word            Nc, bc;
-
-       float           wt_float[40];
-       float           dp_float_base[120], * dp_float = dp_float_base + 120;
-
-       longword        L_max, L_power;
-       word            R, S, dmax, scal;
-       register word   temp;
-
-       /*  Search of the optimum scaling of d[0..39].
-        */
-       dmax = 0;
-
-       for (k = 0; k <= 39; k++) {
-               temp = din [k] ;
-               temp = GSM_ABS (temp) ;
-               if (temp > dmax) dmax = temp;
-       }
-
-       temp = 0;
-       if (dmax == 0) scal = 0;
-       else {
-               assert(dmax > 0);
-               temp = gsm_norm( (longword)dmax << 16 );
-       }
-
-       if (temp > 6) scal = 0;
-       else scal = 6 - temp;
-
-       assert(scal >= 0);
-
-       /*  Initialization of a working array wt
-        */
-
-       for (k =    0; k < 40; k++) wt_float[k] =  SASR_W (din [k], scal) ;
-       for (k = -120; k <  0; k++) dp_float[k] =  dp[k];
-
-       /* Search for the maximum cross-correlation and coding of the LTP lag
-        */
-       L_max = 0;
-       Nc    = 40;     /* index for the maximum cross-correlation */
-
-       for (lambda = 40; lambda <= 120; lambda += 9) {
-
-               /*  Calculate L_result for l = lambda .. lambda + 9.
-                */
-               register float *lp = dp_float - lambda;
-
-               register float  W;
-               register float  a = lp[-8], b = lp[-7], c = lp[-6],
-                               d = lp[-5], e = lp[-4], f = lp[-3],
-                               g = lp[-2], h = lp[-1];
-               register float  E; 
-               register float  S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0,
-                               S5 = 0, S6 = 0, S7 = 0, S8 = 0;
-
-#              undef STEP
-#              define  STEP(K, a, b, c, d, e, f, g, h) \
-                       W = wt_float[K];                \
-                       E = W * a; S8 += E;             \
-                       E = W * b; S7 += E;             \
-                       E = W * c; S6 += E;             \
-                       E = W * d; S5 += E;             \
-                       E = W * e; S4 += E;             \
-                       E = W * f; S3 += E;             \
-                       E = W * g; S2 += E;             \
-                       E = W * h; S1 += E;             \
-                       a  = lp[K];                     \
-                       E = W * a; S0 += E
-
-#              define  STEP_A(K)       STEP(K, a, b, c, d, e, f, g, h)
-#              define  STEP_B(K)       STEP(K, b, c, d, e, f, g, h, a)
-#              define  STEP_C(K)       STEP(K, c, d, e, f, g, h, a, b)
-#              define  STEP_D(K)       STEP(K, d, e, f, g, h, a, b, c)
-#              define  STEP_E(K)       STEP(K, e, f, g, h, a, b, c, d)
-#              define  STEP_F(K)       STEP(K, f, g, h, a, b, c, d, e)
-#              define  STEP_G(K)       STEP(K, g, h, a, b, c, d, e, f)
-#              define  STEP_H(K)       STEP(K, h, a, b, c, d, e, f, g)
-
-               STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3);
-               STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7);
-
-               STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11);
-               STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15);
-
-               STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19);
-               STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23);
-
-               STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27);
-               STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31);
-
-               STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35);
-               STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39);
-
-#              undef STEP_A
-#              undef STEP_B
-#              undef STEP_C
-#              undef STEP_D
-#              undef STEP_E
-#              undef STEP_F
-#              undef STEP_G
-#              undef STEP_H
-
-               if (S0 > L_max) { L_max = S0; Nc = lambda;     }
-               if (S1 > L_max) { L_max = S1; Nc = lambda + 1; }
-               if (S2 > L_max) { L_max = S2; Nc = lambda + 2; }
-               if (S3 > L_max) { L_max = S3; Nc = lambda + 3; }
-               if (S4 > L_max) { L_max = S4; Nc = lambda + 4; }
-               if (S5 > L_max) { L_max = S5; Nc = lambda + 5; }
-               if (S6 > L_max) { L_max = S6; Nc = lambda + 6; }
-               if (S7 > L_max) { L_max = S7; Nc = lambda + 7; }
-               if (S8 > L_max) { L_max = S8; Nc = lambda + 8; }
-       }
-       *Nc_out = Nc;
-
-       L_max <<= 1;
-
-       /*  Rescaling of L_max
-        */
-       assert(scal <= 100 && scal >=  -100);
-       L_max = L_max >> (6 - scal);    /* sub(6, scal) */
-
-       assert( Nc <= 120 && Nc >= 40);
-
-       /*   Compute the power of the reconstructed short term residual
-        *   signal dp[..]
-        */
-       L_power = 0;
-       for (k = 0; k <= 39; k++) {
-
-               register longword L_temp;
-
-               L_temp   = SASR_W( dp[k - Nc], 3 );
-               L_power += L_temp * L_temp;
-       }
-       L_power <<= 1;  /* from L_MULT */
-
-       /*  Normalization of L_max and L_power
-        */
-
-       if (L_max <= 0)  {
-               *bc_out = 0;
-               return;
-       }
-       if (L_max >= L_power) {
-               *bc_out = 3;
-               return;
-       }
-
-       temp = gsm_norm( L_power );
-
-       R = SASR_L ( L_max   << temp, 16 );
-       S = SASR_L ( L_power << temp, 16 );
-
-       /*  Coding of the LTP gain
-        */
-
-       /*  Table 4.3a must be used to obtain the level DLB[i] for the
-        *  quantization of the LTP gain b to get the coded version bc.
-        */
-       for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break;
-       *bc_out = bc;
-}
-
-#ifdef FAST
-#ifdef LTP_CUT
-
-static void Cut_Fast_Calculation_of_the_LTP_parameters (
-       struct gsm_state * st,          /*              IN      */
-       register word   * d,            /* [0..39]      IN      */
-       register word   * dp,           /* [-120..-1]   IN      */
-       word            * bc_out,       /*              OUT     */
-       word            * Nc_out        /*              OUT     */
-)
-{
-       register int    k, lambda;
-       register float  wt_float;
-       word            Nc, bc;
-       word            wt_max, best_k, ltp_cut;
-
-       float           dp_float_base[120], * dp_float = dp_float_base + 120;
-
-       register float  L_result, L_max, L_power;
-
-       wt_max = 0;
-
-       for (k = 0; k < 40; ++k) {
-               if      ( d[k] > wt_max) wt_max =  d[best_k = k];
-               else if (-d[k] > wt_max) wt_max = -d[best_k = k];
-       }
-
-       assert(wt_max >= 0);
-       wt_float = (float)wt_max;
-
-       for (k = -120; k < 0; ++k) dp_float[k] = (float)dp[k];
-
-       /* Search for the maximum cross-correlation and coding of the LTP lag
-        */
-       L_max = 0;
-       Nc    = 40;     /* index for the maximum cross-correlation */
-
-       for (lambda = 40; lambda <= 120; lambda++) {
-               L_result = wt_float * dp_float[best_k - lambda];
-               if (L_result > L_max) {
-                       Nc    = lambda;
-                       L_max = L_result;
-               }
-       }
-
-       *Nc_out = Nc;
-       if (L_max <= 0.)  {
-               *bc_out = 0;
-               return;
-       }
-
-       /*  Compute the power of the reconstructed short term residual
-        *  signal dp[..]
-        */
-       dp_float -= Nc;
-       L_power = 0;
-       for (k = 0; k < 40; ++k) {
-               register float f = dp_float[k];
-               L_power += f * f;
-       }
-
-       if (L_max >= L_power) {
-               *bc_out = 3;
-               return;
-       }
-
-       /*  Coding of the LTP gain
-        *  Table 4.3a must be used to obtain the level DLB[i] for the
-        *  quantization of the LTP gain b to get the coded version bc.
-        */
-       lambda = L_max / L_power * 32768.;
-       for (bc = 0; bc <= 2; ++bc) if (lambda <= gsm_DLB[bc]) break;
-       *bc_out = bc;
-}
-
-#endif /* LTP_CUT */
-
-static void Fast_Calculation_of_the_LTP_parameters (
-       register word   * din,          /* [0..39]      IN      */
-       register word   * dp,           /* [-120..-1]   IN      */
-       word            * bc_out,       /*              OUT     */
-       word            * Nc_out        /*              OUT     */
-)
-{
-       register int    k, lambda;
-       word            Nc, bc;
-
-       float           wt_float[40];
-       float           dp_float_base[120], * dp_float = dp_float_base + 120;
-
-       register float  L_max, L_power;
-
-       for (k = 0; k < 40; ++k) wt_float[k] = (float) din [k] ;
-       for (k = -120; k < 0; ++k) dp_float[k] = (float) dp [k] ;
-
-       /* Search for the maximum cross-correlation and coding of the LTP lag
-        */
-       L_max = 0;
-       Nc    = 40;     /* index for the maximum cross-correlation */
-
-       for (lambda = 40; lambda <= 120; lambda += 9) {
-
-               /*  Calculate L_result for l = lambda .. lambda + 9.
-                */
-               register float *lp = dp_float - lambda;
-
-               register float  W;
-               register float  a = lp[-8], b = lp[-7], c = lp[-6],
-                               d = lp[-5], e = lp[-4], f = lp[-3],
-                               g = lp[-2], h = lp[-1];
-               register float  E; 
-               register float  S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0,
-                               S5 = 0, S6 = 0, S7 = 0, S8 = 0;
-
-#              undef STEP
-#              define  STEP(K, a, b, c, d, e, f, g, h) \
-                       W = wt_float[K];                \
-                       E = W * a; S8 += E;             \
-                       E = W * b; S7 += E;             \
-                       E = W * c; S6 += E;             \
-                       E = W * d; S5 += E;             \
-                       E = W * e; S4 += E;             \
-                       E = W * f; S3 += E;             \
-                       E = W * g; S2 += E;             \
-                       E = W * h; S1 += E;             \
-                       a  = lp[K];                     \
-                       E = W * a; S0 += E
-
-#              define  STEP_A(K)       STEP(K, a, b, c, d, e, f, g, h)
-#              define  STEP_B(K)       STEP(K, b, c, d, e, f, g, h, a)
-#              define  STEP_C(K)       STEP(K, c, d, e, f, g, h, a, b)
-#              define  STEP_D(K)       STEP(K, d, e, f, g, h, a, b, c)
-#              define  STEP_E(K)       STEP(K, e, f, g, h, a, b, c, d)
-#              define  STEP_F(K)       STEP(K, f, g, h, a, b, c, d, e)
-#              define  STEP_G(K)       STEP(K, g, h, a, b, c, d, e, f)
-#              define  STEP_H(K)       STEP(K, h, a, b, c, d, e, f, g)
-
-               STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3);
-               STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7);
-
-               STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11);
-               STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15);
-
-               STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19);
-               STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23);
-
-               STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27);
-               STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31);
-
-               STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35);
-               STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39);
-
-               if (S0 > L_max) { L_max = S0; Nc = lambda;     }
-               if (S1 > L_max) { L_max = S1; Nc = lambda + 1; }
-               if (S2 > L_max) { L_max = S2; Nc = lambda + 2; }
-               if (S3 > L_max) { L_max = S3; Nc = lambda + 3; }
-               if (S4 > L_max) { L_max = S4; Nc = lambda + 4; }
-               if (S5 > L_max) { L_max = S5; Nc = lambda + 5; }
-               if (S6 > L_max) { L_max = S6; Nc = lambda + 6; }
-               if (S7 > L_max) { L_max = S7; Nc = lambda + 7; }
-               if (S8 > L_max) { L_max = S8; Nc = lambda + 8; }
-       }
-       *Nc_out = Nc;
-
-       if (L_max <= 0.)  {
-               *bc_out = 0;
-               return;
-       }
-
-       /*  Compute the power of the reconstructed short term residual
-        *  signal dp[..]
-        */
-       dp_float -= Nc;
-       L_power = 0;
-       for (k = 0; k < 40; ++k) {
-               register float f = dp_float[k];
-               L_power += f * f;
-       }
-
-       if (L_max >= L_power) {
-               *bc_out = 3;
-               return;
-       }
-
-       /*  Coding of the LTP gain
-        *  Table 4.3a must be used to obtain the level DLB[i] for the
-        *  quantization of the LTP gain b to get the coded version bc.
-        */
-       lambda = L_max / L_power * 32768.;
-       for (bc = 0; bc <= 2; ++bc) if (lambda <= gsm_DLB[bc]) break;
-       *bc_out = bc;
-}
-
-#endif /* FAST          */
-#endif /* USE_FLOAT_MUL */
-
-
-/* 4.2.12 */
-
-static void Long_term_analysis_filtering (
-       word            bc,     /*                                      IN  */
-       word            Nc,     /*                                      IN  */
-       register word   * dp,   /* previous d   [-120..-1]              IN  */
-       register word   * d,    /* d            [0..39]                 IN  */
-       register word   * dpp,  /* estimate     [0..39]                 OUT */
-       register word   * e     /* long term res. signal [0..39]        OUT */
-)
-/*
- *  In this part, we have to decode the bc parameter to compute
- *  the samples of the estimate dpp[0..39].  The decoding of bc needs the
- *  use of table 4.3b.  The long term residual signal e[0..39]
- *  is then calculated to be fed to the RPE encoding section.
- */
-{
-       register int      k;
-
-#      undef STEP
-#      define STEP(BP)                                 \
-       for (k = 0; k <= 39; k++) {                     \
-               dpp[k]  = GSM_MULT_R( BP, dp[k - Nc]);  \
-               e[k]    = GSM_SUB( d[k], dpp[k] );      \
-       }
-
-       switch (bc) {
-       case 0: STEP(  3277 ); break;
-       case 1: STEP( 11469 ); break;
-       case 2: STEP( 21299 ); break;
-       case 3: STEP( 32767 ); break; 
-       }
-}
-
-void Gsm_Long_Term_Predictor ( /* 4x for 160 samples */
-
-       struct gsm_state        * S,
-
-       word    * d,    /* [0..39]   residual signal    IN      */
-       word    * dp,   /* [-120..-1] d'                IN      */
-
-       word    * e,    /* [0..39]                      OUT     */
-       word    * dpp,  /* [0..39]                      OUT     */
-       word    * Nc,   /* correlation lag              OUT     */
-       word    * bc    /* gain factor                  OUT     */
-)
-{
-       assert( d  ); assert( dp ); assert( e  );
-       assert( dpp); assert( Nc ); assert( bc );
-
-#if defined(FAST) && defined(USE_FLOAT_MUL)
-       if (S->fast) 
-#if   defined (LTP_CUT)
-               if (S->ltp_cut)
-                       Cut_Fast_Calculation_of_the_LTP_parameters(S,
-                               d, dp, bc, Nc);
-               else
-#endif /* LTP_CUT */
-                       Fast_Calculation_of_the_LTP_parameters(d, dp, bc, Nc );
-       else 
-#endif /* FAST & USE_FLOAT_MUL */
-#ifdef LTP_CUT
-               if (S->ltp_cut)
-                       Cut_Calculation_of_the_LTP_parameters(S, d, dp, bc, Nc);
-               else
-#endif
-                       Calculation_of_the_LTP_parameters(d, dp, bc, Nc);
-
-       Long_term_analysis_filtering( *bc, *Nc, dp, d, dpp, e );
-}
-
-/* 4.3.2 */
-void Gsm_Long_Term_Synthesis_Filtering (
-       struct gsm_state        * S,
-
-       word                    Ncr,
-       word                    bcr,
-       register word           * erp,     /* [0..39]                    IN */
-       register word           * drp      /* [-120..-1] IN, [-120..40] OUT */
-)
-/*
- *  This procedure uses the bcr and Ncr parameter to realize the
- *  long term synthesis filtering.  The decoding of bcr needs
- *  table 4.3b.
- */
-{
-       register int            k;
-       word                    brp, drpp, Nr;
-
-       /*  Check the limits of Nr.
-        */
-       Nr = Ncr < 40 || Ncr > 120 ? S->nrp : Ncr;
-       S->nrp = Nr;
-       assert(Nr >= 40 && Nr <= 120);
-
-       /*  Decoding of the LTP gain bcr
-        */
-       brp = gsm_QLB[ bcr ];
-
-       /*  Computation of the reconstructed short term residual 
-        *  signal drp[0..39]
-        */
-       assert(brp != MIN_WORD);
-
-       for (k = 0; k <= 39; k++) {
-               drpp   = GSM_MULT_R( brp, drp[ k - Nr ] );
-               drp[k] = GSM_ADD( erp[k], drpp );
-       }
-
-       /*
-        *  Update of the reconstructed short term residual signal
-        *  drp[ -1..-120 ]
-        */
-
-       for (k = 0; k <= 119; k++) drp[ -120 + k ] = drp[ -80 + k ];
-}
diff --git a/libs/libsndfile/src/GSM610/lpc.c b/libs/libsndfile/src/GSM610/lpc.c
deleted file mode 100644 (file)
index 0e776e3..0000000
+++ /dev/null
@@ -1,331 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include <stdio.h>
-#include <assert.h>
-
-#include "gsm610_priv.h"
-
-/*
- *  4.2.4 .. 4.2.7 LPC ANALYSIS SECTION
- */
-
-/* 4.2.4 */
-
-
-static void Autocorrelation (
-       word     * s,           /* [0..159]     IN/OUT  */
-       longword * L_ACF)       /* [0..8]       OUT     */
-/*
- *  The goal is to compute the array L_ACF[k].  The signal s[i] must
- *  be scaled in order to avoid an overflow situation.
- */
-{
-       register int    k, i;
-
-       word            temp, smax, scalauto;
-
-#ifdef USE_FLOAT_MUL
-       float           float_s[160];
-#endif
-
-       /*  Dynamic scaling of the array  s[0..159]
-        */
-
-       /*  Search for the maximum.
-        */
-       smax = 0;
-       for (k = 0; k <= 159; k++) {
-               temp = GSM_ABS( s[k] );
-               if (temp > smax) smax = temp;
-       }
-
-       /*  Computation of the scaling factor.
-        */
-       if (smax == 0) scalauto = 0;
-       else {
-               assert(smax > 0);
-               scalauto = 4 - gsm_norm( (longword)smax << 16 );/* sub(4,..) */
-       }
-
-       /*  Scaling of the array s[0...159]
-        */
-
-       if (scalauto > 0) {
-
-# ifdef USE_FLOAT_MUL
-#   define SCALE(n)    \
-       case n: for (k = 0; k <= 159; k++) \
-                       float_s[k] = (float)    \
-                               (s[k] = GSM_MULT_R(s[k], 16384 >> (n-1)));\
-               break;
-# else 
-#   define SCALE(n)    \
-       case n: for (k = 0; k <= 159; k++) \
-                       s[k] = GSM_MULT_R( s[k], 16384 >> (n-1) );\
-               break;
-# endif /* USE_FLOAT_MUL */
-
-               switch (scalauto) {
-               SCALE(1)
-               SCALE(2)
-               SCALE(3)
-               SCALE(4)
-               }
-# undef        SCALE
-       }
-# ifdef        USE_FLOAT_MUL
-       else for (k = 0; k <= 159; k++) float_s[k] = (float) s[k];
-# endif
-
-       /*  Compute the L_ACF[..].
-        */
-       {
-# ifdef        USE_FLOAT_MUL
-               register float * sp = float_s;
-               register float   sl = *sp;
-
-#              define STEP(k)   L_ACF[k] += (longword)(sl * sp[ -(k) ]);
-# else
-               word  * sp = s;
-               word    sl = *sp;
-
-#              define STEP(k)   L_ACF[k] += ((longword)sl * sp[ -(k) ]);
-# endif
-
-#      define NEXTI     sl = *++sp
-
-
-       for (k = 9; k--; L_ACF[k] = 0) ;
-
-       STEP (0);
-       NEXTI;
-       STEP(0); STEP(1);
-       NEXTI;
-       STEP(0); STEP(1); STEP(2);
-       NEXTI;
-       STEP(0); STEP(1); STEP(2); STEP(3);
-       NEXTI;
-       STEP(0); STEP(1); STEP(2); STEP(3); STEP(4);
-       NEXTI;
-       STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5);
-       NEXTI;
-       STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6);
-       NEXTI;
-       STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6); STEP(7);
-
-       for (i = 8; i <= 159; i++) {
-
-               NEXTI;
-
-               STEP(0);
-               STEP(1); STEP(2); STEP(3); STEP(4);
-               STEP(5); STEP(6); STEP(7); STEP(8);
-       }
-
-       for (k = 9; k--; L_ACF[k] <<= 1) ; 
-
-       }
-       /*   Rescaling of the array s[0..159]
-        */
-       if (scalauto > 0) {
-               assert(scalauto <= 4); 
-               for (k = 160; k--; *s++ <<= scalauto) ;
-       }
-}
-
-#if defined(USE_FLOAT_MUL) && defined(FAST)
-
-static void Fast_Autocorrelation (
-       word * s,               /* [0..159]     IN/OUT  */
-       longword * L_ACF)       /* [0..8]       OUT     */
-{
-       register int    k, i;
-       float f_L_ACF[9];
-       float scale;
-
-       float          s_f[160];
-       register float *sf = s_f;
-
-       for (i = 0; i < 160; ++i) sf[i] = s[i];
-       for (k = 0; k <= 8; k++) {
-               register float L_temp2 = 0;
-               register float *sfl = sf - k;
-               for (i = k; i < 160; ++i) L_temp2 += sf[i] * sfl[i];
-               f_L_ACF[k] = L_temp2;
-       }
-       scale = MAX_LONGWORD / f_L_ACF[0];
-
-       for (k = 0; k <= 8; k++) {
-               L_ACF[k] = f_L_ACF[k] * scale;
-       }
-}
-#endif /* defined (USE_FLOAT_MUL) && defined (FAST) */
-
-/* 4.2.5 */
-
-static void Reflection_coefficients (
-       longword        * L_ACF,                /* 0...8        IN      */
-       register word   * r                     /* 0...7        OUT     */
-)
-{
-       register int    i, m, n;
-       register word   temp;
-       word            ACF[9]; /* 0..8 */
-       word            P[  9]; /* 0..8 */
-       word            K[  9]; /* 2..8 */
-
-       /*  Schur recursion with 16 bits arithmetic.
-        */
-
-       if (L_ACF[0] == 0) {
-               for (i = 8; i--; *r++ = 0) ;
-               return;
-       }
-
-       assert( L_ACF[0] != 0 );
-       temp = gsm_norm( L_ACF[0] );
-
-       assert(temp >= 0 && temp < 32);
-
-       /* ? overflow ? */
-       for (i = 0; i <= 8; i++) ACF[i] = SASR_L( L_ACF[i] << temp, 16 );
-
-       /*   Initialize array P[..] and K[..] for the recursion.
-        */
-
-       for (i = 1; i <= 7; i++) K[ i ] = ACF[ i ];
-       for (i = 0; i <= 8; i++) P[ i ] = ACF[ i ];
-
-       /*   Compute reflection coefficients
-        */
-       for (n = 1; n <= 8; n++, r++) {
-
-               temp = P[1];
-               temp = GSM_ABS(temp);
-               if (P[0] < temp) {
-                       for (i = n; i <= 8; i++) *r++ = 0;
-                       return;
-               }
-
-               *r = gsm_div( temp, P[0] );
-
-               assert(*r >= 0);
-               if (P[1] > 0) *r = -*r;         /* r[n] = sub(0, r[n]) */
-               assert (*r != MIN_WORD);
-               if (n == 8) return; 
-
-               /*  Schur recursion
-                */
-               temp = GSM_MULT_R( P[1], *r );
-               P[0] = GSM_ADD( P[0], temp );
-
-               for (m = 1; m <= 8 - n; m++) {
-                       temp     = GSM_MULT_R( K[ m   ],    *r );
-                       P[m]     = GSM_ADD(    P[ m+1 ],  temp );
-
-                       temp     = GSM_MULT_R( P[ m+1 ],    *r );
-                       K[m]     = GSM_ADD(    K[ m   ],  temp );
-               }
-       }
-}
-
-/* 4.2.6 */
-
-static void Transformation_to_Log_Area_Ratios (
-       register word   * r                     /* 0..7    IN/OUT */
-)
-/*
- *  The following scaling for r[..] and LAR[..] has been used:
- *
- *  r[..]   = integer( real_r[..]*32768. ); -1 <= real_r < 1.
- *  LAR[..] = integer( real_LAR[..] * 16384 );
- *  with -1.625 <= real_LAR <= 1.625
- */
-{
-       register word   temp;
-       register int    i;
-
-
-       /* Computation of the LAR[0..7] from the r[0..7]
-        */
-       for (i = 1; i <= 8; i++, r++) {
-
-               temp = *r;
-               temp = GSM_ABS(temp);
-               assert(temp >= 0);
-
-               if (temp < 22118) {
-                       temp >>= 1;
-               } else if (temp < 31130) {
-                       assert( temp >= 11059 );
-                       temp -= 11059;
-               } else {
-                       assert( temp >= 26112 );
-                       temp -= 26112;
-                       temp <<= 2;
-               }
-
-               *r = *r < 0 ? -temp : temp;
-               assert( *r != MIN_WORD );
-       }
-}
-
-/* 4.2.7 */
-
-static void Quantization_and_coding (
-       register word * LAR     /* [0..7]       IN/OUT  */
-)
-{
-       register word   temp;
-
-       /*  This procedure needs four tables; the following equations
-        *  give the optimum scaling for the constants:
-        *  
-        *  A[0..7] = integer( real_A[0..7] * 1024 )
-        *  B[0..7] = integer( real_B[0..7] *  512 )
-        *  MAC[0..7] = maximum of the LARc[0..7]
-        *  MIC[0..7] = minimum of the LARc[0..7]
-        */
-
-#      undef STEP
-#      define  STEP( A, B, MAC, MIC )          \
-               temp = GSM_MULT( A,   *LAR );   \
-               temp = GSM_ADD(  temp,   B );   \
-               temp = GSM_ADD(  temp, 256 );   \
-               temp = SASR_W(     temp,   9 ); \
-               *LAR  =  temp>MAC ? MAC - MIC : (temp<MIC ? 0 : temp - MIC); \
-               LAR++;
-
-       STEP(  20480,     0,  31, -32 );
-       STEP(  20480,     0,  31, -32 );
-       STEP(  20480,  2048,  15, -16 );
-       STEP(  20480, -2560,  15, -16 );
-
-       STEP(  13964,    94,   7,  -8 );
-       STEP(  15360, -1792,   7,  -8 );
-       STEP(   8534,  -341,   3,  -4 );
-       STEP(   9036, -1144,   3,  -4 );
-
-#      undef   STEP
-}
-
-void Gsm_LPC_Analysis (
-       struct gsm_state *S,
-       word             * s,           /* 0..159 signals       IN/OUT  */
-        word            * LARc)        /* 0..7   LARc's        OUT     */
-{
-       longword        L_ACF[9];
-
-#if defined(USE_FLOAT_MUL) && defined(FAST)
-       if (S->fast) Fast_Autocorrelation (s,     L_ACF );
-       else
-#endif
-       Autocorrelation                   (s,     L_ACF );
-       Reflection_coefficients           (L_ACF, LARc  );
-       Transformation_to_Log_Area_Ratios (LARc);
-       Quantization_and_coding           (LARc);
-}
diff --git a/libs/libsndfile/src/GSM610/preprocess.c b/libs/libsndfile/src/GSM610/preprocess.c
deleted file mode 100644 (file)
index 723e226..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include       <stdio.h>
-#include       <assert.h>
-
-#include "gsm610_priv.h"
-
-/*     4.2.0 .. 4.2.3  PREPROCESSING SECTION
- *  
- *     After A-law to linear conversion (or directly from the
- *     Ato D converter) the following scaling is assumed for
- *     input to the RPE-LTP algorithm:
- *
- *      in:  0.1.....................12
- *          S.v.v.v.v.v.v.v.v.v.v.v.v.*.*.*
- *
- *     Where S is the sign bit, v a valid bit, and * a "don't care" bit.
- *     The original signal is called sop[..]
- *
- *      out:   0.1................... 12 
- *          S.S.v.v.v.v.v.v.v.v.v.v.v.v.0.0
- */
-
-
-void Gsm_Preprocess (
-       struct gsm_state * S,
-       word             * s,
-       word             * so )         /* [0..159]     IN/OUT  */
-{
-
-       word       z1 = S->z1;
-       longword L_z2 = S->L_z2;
-       word       mp = S->mp;
-
-       word            s1;
-       longword      L_s2;
-
-       longword      L_temp;
-
-       word            msp, lsp;
-       word            SO;
-
-       register int            k = 160;
-
-       while (k--) {
-
-       /*  4.2.1   Downscaling of the input signal
-        */
-               SO = SASR_W( *s, 3 ) << 2;
-               s++;
-
-               assert (SO >= -0x4000); /* downscaled by     */
-               assert (SO <=  0x3FFC); /* previous routine. */
-
-
-       /*  4.2.2   Offset compensation
-        * 
-        *  This part implements a high-pass filter and requires extended
-        *  arithmetic precision for the recursive part of this filter.
-        *  The input of this procedure is the array so[0...159] and the
-        *  output the array sof[ 0...159 ].
-        */
-               /*   Compute the non-recursive part
-                */
-
-               s1 = SO - z1;                   /* s1 = gsm_sub( *so, z1 ); */
-               z1 = SO;
-
-               assert(s1 != MIN_WORD);
-
-               /*   Compute the recursive part
-                */
-               L_s2 = s1;
-               L_s2 <<= 15;
-
-               /*   Execution of a 31 bv 16 bits multiplication
-                */
-
-               msp = SASR_L( L_z2, 15 );
-               lsp = L_z2-((longword)msp<<15); /* gsm_L_sub(L_z2,(msp<<15)); */
-
-               L_s2  += GSM_MULT_R( lsp, 32735 );
-               L_temp = (longword)msp * 32735; /* GSM_L_MULT(msp,32735) >> 1;*/
-               L_z2   = GSM_L_ADD( L_temp, L_s2 );
-
-               /*    Compute sof[k] with rounding
-                */
-               L_temp = GSM_L_ADD( L_z2, 16384 );
-
-       /*   4.2.3  Preemphasis
-        */
-
-               msp   = GSM_MULT_R( mp, -28180 );
-               mp    = SASR_L( L_temp, 15 );
-               *so++ = GSM_ADD( mp, msp );
-       }
-
-       S->z1   = z1;
-       S->L_z2 = L_z2;
-       S->mp   = mp;
-}
diff --git a/libs/libsndfile/src/GSM610/rpe.c b/libs/libsndfile/src/GSM610/rpe.c
deleted file mode 100644 (file)
index d8f931e..0000000
+++ /dev/null
@@ -1,480 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include <stdio.h>
-#include <assert.h>
-
-#include "gsm610_priv.h"
-
-/*  4.2.13 .. 4.2.17  RPE ENCODING SECTION
- */
-
-/* 4.2.13 */
-
-static void Weighting_filter (
-       register word   * e,            /* signal [-5..0.39.44] IN  */
-       word            * x             /* signal [0..39]       OUT */
-)
-/*
- *  The coefficients of the weighting filter are stored in a table
- *  (see table 4.4).  The following scaling is used:
- *
- *     H[0..10] = integer( real_H[ 0..10] * 8192 ); 
- */
-{
-       /* word                 wt[ 50 ]; */
-
-       register longword       L_result;
-       register int            k /* , i */ ;
-
-       /*  Initialization of a temporary working array wt[0...49]
-        */
-
-       /* for (k =  0; k <=  4; k++) wt[k] = 0;
-        * for (k =  5; k <= 44; k++) wt[k] = *e++;
-        * for (k = 45; k <= 49; k++) wt[k] = 0;
-        *
-        *  (e[-5..-1] and e[40..44] are allocated by the caller,
-        *  are initially zero and are not written anywhere.)
-        */
-       e -= 5;
-
-       /*  Compute the signal x[0..39]
-        */ 
-       for (k = 0; k <= 39; k++) {
-
-               L_result = 8192 >> 1;
-
-               /* for (i = 0; i <= 10; i++) {
-                *      L_temp   = GSM_L_MULT( wt[k+i], gsm_H[i] );
-                *      L_result = GSM_L_ADD( L_result, L_temp );
-                * }
-                */
-
-#undef STEP
-#define        STEP( i, H )    (e[ k + i ] * (longword)H)
-
-               /*  Every one of these multiplications is done twice --
-                *  but I don't see an elegant way to optimize this. 
-                *  Do you?
-                */
-
-#ifdef STUPID_COMPILER
-               L_result += STEP(       0,      -134 ) ;
-               L_result += STEP(       1,      -374 )  ;
-                      /* + STEP(       2,      0    )  */
-               L_result += STEP(       3,      2054 ) ;
-               L_result += STEP(       4,      5741 ) ;
-               L_result += STEP(       5,      8192 ) ;
-               L_result += STEP(       6,      5741 ) ;
-               L_result += STEP(       7,      2054 ) ;
-                      /* + STEP(       8,      0    )  */
-               L_result += STEP(       9,      -374 ) ;
-               L_result += STEP(       10,     -134 ) ;
-#else
-               L_result +=
-                 STEP( 0,      -134 ) 
-               + STEP( 1,      -374 ) 
-            /* + STEP( 2,      0    )  */
-               + STEP( 3,      2054 ) 
-               + STEP( 4,      5741 ) 
-               + STEP( 5,      8192 ) 
-               + STEP( 6,      5741 ) 
-               + STEP( 7,      2054 ) 
-            /* + STEP( 8,      0    )  */
-               + STEP( 9,      -374 ) 
-               + STEP(10,      -134 )
-               ;
-#endif
-
-               /* L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x2) *)
-                * L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x4) *)
-                *
-                * x[k] = SASR( L_result, 16 );
-                */
-
-               /* 2 adds vs. >>16 => 14, minus one shift to compensate for
-                * those we lost when replacing L_MULT by '*'.
-                */
-
-               L_result = SASR_L( L_result, 13 );
-               x[k] =  (  L_result < MIN_WORD ? MIN_WORD
-                       : (L_result > MAX_WORD ? MAX_WORD : L_result ));
-       }
-}
-
-/* 4.2.14 */
-
-static void RPE_grid_selection (
-       word            * x,            /* [0..39]              IN  */ 
-       word            * xM,           /* [0..12]              OUT */
-       word            * Mc_out        /*                      OUT */
-)
-/*
- *  The signal x[0..39] is used to select the RPE grid which is
- *  represented by Mc.
- */
-{
-       /* register word        temp1;  */
-       register int            /* m, */  i;
-       register longword       L_result, L_temp;
-       longword                EM;     /* xxx should be L_EM? */
-       word                    Mc;
-
-       longword                L_common_0_3;
-
-       EM = 0;
-       Mc = 0;
-
-       /* for (m = 0; m <= 3; m++) {
-        *      L_result = 0;
-        *
-        *
-        *      for (i = 0; i <= 12; i++) {
-        *
-        *              temp1    = SASR_W( x[m + 3*i], 2 );
-        *
-        *              assert(temp1 != MIN_WORD);
-        *
-        *              L_temp   = GSM_L_MULT( temp1, temp1 );
-        *              L_result = GSM_L_ADD( L_temp, L_result );
-        *      }
-        * 
-        *      if (L_result > EM) {
-        *              Mc = m;
-        *              EM = L_result;
-        *      }
-        * }
-        */
-
-#undef STEP
-#define        STEP( m, i )            L_temp = SASR_W( x[m + 3 * i], 2 );     \
-                               L_result += L_temp * L_temp;
-
-       /* common part of 0 and 3 */
-
-       L_result = 0;
-       STEP( 0, 1 ); STEP( 0, 2 ); STEP( 0, 3 ); STEP( 0, 4 );
-       STEP( 0, 5 ); STEP( 0, 6 ); STEP( 0, 7 ); STEP( 0, 8 );
-       STEP( 0, 9 ); STEP( 0, 10); STEP( 0, 11); STEP( 0, 12);
-       L_common_0_3 = L_result;
-
-       /* i = 0 */
-
-       STEP( 0, 0 );
-       L_result <<= 1; /* implicit in L_MULT */
-       EM = L_result;
-
-       /* i = 1 */
-
-       L_result = 0;
-       STEP( 1, 0 );
-       STEP( 1, 1 ); STEP( 1, 2 ); STEP( 1, 3 ); STEP( 1, 4 );
-       STEP( 1, 5 ); STEP( 1, 6 ); STEP( 1, 7 ); STEP( 1, 8 );
-       STEP( 1, 9 ); STEP( 1, 10); STEP( 1, 11); STEP( 1, 12);
-       L_result <<= 1;
-       if (L_result > EM) {
-               Mc = 1;
-               EM = L_result;
-       }
-
-       /* i = 2 */
-
-       L_result = 0;
-       STEP( 2, 0 );
-       STEP( 2, 1 ); STEP( 2, 2 ); STEP( 2, 3 ); STEP( 2, 4 );
-       STEP( 2, 5 ); STEP( 2, 6 ); STEP( 2, 7 ); STEP( 2, 8 );
-       STEP( 2, 9 ); STEP( 2, 10); STEP( 2, 11); STEP( 2, 12);
-       L_result <<= 1;
-       if (L_result > EM) {
-               Mc = 2;
-               EM = L_result;
-       }
-
-       /* i = 3 */
-
-       L_result = L_common_0_3;
-       STEP( 3, 12 );
-       L_result <<= 1;
-       if (L_result > EM) {
-               Mc = 3;
-               EM = L_result;
-       }
-
-       /**/
-
-       /*  Down-sampling by a factor 3 to get the selected xM[0..12]
-        *  RPE sequence.
-        */
-       for (i = 0; i <= 12; i ++) xM[i] = x[Mc + 3*i];
-       *Mc_out = Mc;
-}
-
-/* 4.12.15 */
-
-static void APCM_quantization_xmaxc_to_exp_mant (
-       word            xmaxc,          /* IN   */
-       word            * expon_out,    /* OUT  */
-       word            * mant_out )    /* OUT  */
-{
-       word    expon, mant;
-
-       /* Compute expononent and mantissa of the decoded version of xmaxc
-        */
-
-       expon = 0;
-       if (xmaxc > 15) expon = SASR_W(xmaxc, 3) - 1;
-       mant = xmaxc - (expon << 3);
-
-       if (mant == 0) {
-               expon  = -4;
-               mant = 7;
-       }
-       else {
-               while (mant <= 7) {
-                       mant = mant << 1 | 1;
-                       expon--;
-               }
-               mant -= 8;
-       }
-
-       assert( expon  >= -4 && expon <= 6 );
-       assert( mant >= 0 && mant <= 7 );
-
-       *expon_out  = expon;
-       *mant_out = mant;
-}
-
-static void APCM_quantization (
-       word            * xM,           /* [0..12]              IN      */
-       word            * xMc,          /* [0..12]              OUT     */
-       word            * mant_out,     /*                      OUT     */
-       word            * expon_out,    /*                      OUT     */
-       word            * xmaxc_out     /*                      OUT     */
-)
-{
-       int     i, itest;
-
-       word    xmax, xmaxc, temp, temp1, temp2;
-       word    expon, mant;
-
-
-       /*  Find the maximum absolute value xmax of xM[0..12].
-        */
-
-       xmax = 0;
-       for (i = 0; i <= 12; i++) {
-               temp = xM[i];
-               temp = GSM_ABS(temp);
-               if (temp > xmax) xmax = temp;
-       }
-
-       /*  Qantizing and coding of xmax to get xmaxc.
-        */
-
-       expon   = 0;
-       temp  = SASR_W( xmax, 9 );
-       itest = 0;
-
-       for (i = 0; i <= 5; i++) {
-
-               itest |= (temp <= 0);
-               temp = SASR_W( temp, 1 );
-
-               assert(expon <= 5);
-               if (itest == 0) expon++;                /* expon = add (expon, 1) */
-       }
-
-       assert(expon <= 6 && expon >= 0);
-       temp = expon + 5;
-
-       assert(temp <= 11 && temp >= 0);
-       xmaxc = gsm_add( SASR_W(xmax, temp), (word) (expon << 3) );
-
-       /*   Quantizing and coding of the xM[0..12] RPE sequence
-        *   to get the xMc[0..12]
-        */
-
-       APCM_quantization_xmaxc_to_exp_mant( xmaxc, &expon, &mant );
-
-       /*  This computation uses the fact that the decoded version of xmaxc
-        *  can be calculated by using the expononent and the mantissa part of
-        *  xmaxc (logarithmic table).
-        *  So, this method avoids any division and uses only a scaling
-        *  of the RPE samples by a function of the expononent.  A direct 
-        *  multiplication by the inverse of the mantissa (NRFAC[0..7]
-        *  found in table 4.5) gives the 3 bit coded version xMc[0..12]
-        *  of the RPE samples.
-        */
-
-
-       /* Direct computation of xMc[0..12] using table 4.5
-        */
-
-       assert( expon <= 4096 && expon >= -4096);
-       assert( mant >= 0 && mant <= 7 ); 
-
-       temp1 = 6 - expon;              /* normalization by the expononent */
-       temp2 = gsm_NRFAC[ mant ];      /* inverse mantissa              */
-
-       for (i = 0; i <= 12; i++) {
-
-               assert(temp1 >= 0 && temp1 < 16);
-
-               temp = xM[i] << temp1;
-               temp = GSM_MULT( temp, temp2 );
-               temp = SASR_W(temp, 12);
-               xMc[i] = temp + 4;              /* see note below */
-       }
-
-       /*  NOTE: This equation is used to make all the xMc[i] positive.
-        */
-
-       *mant_out  = mant;
-       *expon_out   = expon;
-       *xmaxc_out = xmaxc;
-}
-
-/* 4.2.16 */
-
-static void APCM_inverse_quantization (
-       register word   * xMc,  /* [0..12]                      IN      */
-       word            mant,
-       word            expon,
-       register word   * xMp)  /* [0..12]                      OUT     */
-/* 
- *  This part is for decoding the RPE sequence of coded xMc[0..12]
- *  samples to obtain the xMp[0..12] array.  Table 4.6 is used to get
- *  the mantissa of xmaxc (FAC[0..7]).
- */
-{
-       int     i;
-       word    temp, temp1, temp2, temp3;
-
-       assert( mant >= 0 && mant <= 7 ); 
-
-       temp1 = gsm_FAC[ mant ];        /* see 4.2-15 for mant */
-       temp2 = gsm_sub( 6, expon );    /* see 4.2-15 for exp  */
-       temp3 = gsm_asl( 1, gsm_sub( temp2, 1 ));
-
-       for (i = 13; i--;) {
-
-               assert( *xMc <= 7 && *xMc >= 0 );       /* 3 bit unsigned */
-
-               /* temp = gsm_sub( *xMc++ << 1, 7 ); */
-               temp = (*xMc++ << 1) - 7;               /* restore sign   */
-               assert( temp <= 7 && temp >= -7 );      /* 4 bit signed   */
-
-               temp <<= 12;                            /* 16 bit signed  */
-               temp = GSM_MULT_R( temp1, temp );
-               temp = GSM_ADD( temp, temp3 );
-               *xMp++ = gsm_asr( temp, temp2 );
-       }
-}
-
-/* 4.2.17 */
-
-static void RPE_grid_positioning (
-       word            Mc,             /* grid position        IN      */
-       register word   * xMp,          /* [0..12]              IN      */
-       register word   * ep            /* [0..39]              OUT     */
-)
-/*
- *  This procedure computes the reconstructed long term residual signal
- *  ep[0..39] for the LTP analysis filter.  The inputs are the Mc
- *  which is the grid position selection and the xMp[0..12] decoded
- *  RPE samples which are upsampled by a factor of 3 by inserting zero
- *  values.
- */
-{
-       int     i = 13;
-
-       assert(0 <= Mc && Mc <= 3);
-
-        switch (Mc) {
-                case 3: *ep++ = 0;
-                case 2:  do {
-                                *ep++ = 0;
-                case 1:         *ep++ = 0;
-                case 0:         *ep++ = *xMp++;
-                         } while (--i);
-        }
-        while (++Mc < 4) *ep++ = 0;
-
-       /*
-
-       int i, k;
-       for (k = 0; k <= 39; k++) ep[k] = 0;
-       for (i = 0; i <= 12; i++) {
-               ep[ Mc + (3*i) ] = xMp[i];
-       }
-       */
-}
-
-/* 4.2.18 */
-
-/*  This procedure adds the reconstructed long term residual signal
- *  ep[0..39] to the estimated signal dpp[0..39] from the long term
- *  analysis filter to compute the reconstructed short term residual
- *  signal dp[-40..-1]; also the reconstructed short term residual
- *  array dp[-120..-41] is updated.
- */
-
-#if 0  /* Has been inlined in code.c */
-void Gsm_Update_of_reconstructed_short_time_residual_signal (
-       word    * dpp,          /* [0...39]     IN      */
-       word    * ep,           /* [0...39]     IN      */
-       word    * dp)           /* [-120...-1]  IN/OUT  */
-{
-       int             k;
-
-       for (k = 0; k <= 79; k++) 
-               dp[ -120 + k ] = dp[ -80 + k ];
-
-       for (k = 0; k <= 39; k++)
-               dp[ -40 + k ] = gsm_add( ep[k], dpp[k] );
-}
-#endif /* Has been inlined in code.c */
-
-void Gsm_RPE_Encoding (
-       /*-struct gsm_state * S,-*/
-
-       word    * e,            /* -5..-1][0..39][40..44        IN/OUT  */
-       word    * xmaxc,        /*                              OUT */
-       word    * Mc,           /*                              OUT */
-       word    * xMc)          /* [0..12]                      OUT */
-{
-       word    x[40];
-       word    xM[13], xMp[13];
-       word    mant, expon;
-
-       Weighting_filter(e, x);
-       RPE_grid_selection(x, xM, Mc);
-
-       APCM_quantization(      xM, xMc, &mant, &expon, xmaxc);
-       APCM_inverse_quantization(  xMc,  mant,  expon, xMp);
-
-       RPE_grid_positioning( *Mc, xMp, e );
-
-}
-
-void Gsm_RPE_Decoding (
-       /*-struct gsm_state     * S,-*/
-
-       word            xmaxcr,
-       word            Mcr,
-       word            * xMcr,  /* [0..12], 3 bits             IN      */
-       word            * erp    /* [0..39]                     OUT     */
-)
-{
-       word    expon, mant;
-       word    xMp[ 13 ];
-
-       APCM_quantization_xmaxc_to_exp_mant( xmaxcr, &expon, &mant );
-       APCM_inverse_quantization( xMcr, mant, expon, xMp );
-       RPE_grid_positioning( Mcr, xMp, erp );
-
-}
diff --git a/libs/libsndfile/src/GSM610/short_term.c b/libs/libsndfile/src/GSM610/short_term.c
deleted file mode 100644 (file)
index 9048563..0000000
+++ /dev/null
@@ -1,417 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-#include <stdio.h>
-#include <assert.h>
-
-#include "gsm610_priv.h"
-
-/*
- *  SHORT TERM ANALYSIS FILTERING SECTION
- */
-
-/* 4.2.8 */
-
-static void Decoding_of_the_coded_Log_Area_Ratios (
-       word    * LARc,         /* coded log area ratio [0..7]  IN      */
-       word    * LARpp)        /* out: decoded ..                      */
-{
-       register word   temp1 /* , temp2 */;
-
-       /*  This procedure requires for efficient implementation
-        *  two tables.
-        *
-        *  INVA[1..8] = integer( (32768 * 8) / real_A[1..8])
-        *  MIC[1..8]  = minimum value of the LARc[1..8]
-        */
-
-       /*  Compute the LARpp[1..8]
-        */
-
-       /*      for (i = 1; i <= 8; i++, B++, MIC++, INVA++, LARc++, LARpp++) {
-        *
-        *              temp1  = GSM_ADD( *LARc, *MIC ) << 10;
-        *              temp2  = *B << 1;
-        *              temp1  = GSM_SUB( temp1, temp2 );
-        *
-        *              assert(*INVA != MIN_WORD);
-        *
-        *              temp1  = GSM_MULT_R( *INVA, temp1 );
-        *              *LARpp = GSM_ADD( temp1, temp1 );
-        *      }
-        */
-
-#undef STEP
-#define        STEP( B, MIC, INVA )    \
-               temp1    = GSM_ADD( *LARc++, MIC ) << 10;       \
-               temp1    = GSM_SUB( temp1, B << 1 );            \
-               temp1    = GSM_MULT_R( INVA, temp1 );           \
-               *LARpp++ = GSM_ADD( temp1, temp1 );
-
-       STEP(      0,  -32,  13107 );
-       STEP(      0,  -32,  13107 );
-       STEP(   2048,  -16,  13107 );
-       STEP(  -2560,  -16,  13107 );
-
-       STEP(     94,   -8,  19223 );
-       STEP(  -1792,   -8,  17476 );
-       STEP(   -341,   -4,  31454 );
-       STEP(  -1144,   -4,  29708 );
-
-       /* NOTE: the addition of *MIC is used to restore
-        *       the sign of *LARc.
-        */
-}
-
-/* 4.2.9 */
-/* Computation of the quantized reflection coefficients 
- */
-
-/* 4.2.9.1  Interpolation of the LARpp[1..8] to get the LARp[1..8]
- */
-
-/*
- *  Within each frame of 160 analyzed speech samples the short term
- *  analysis and synthesis filters operate with four different sets of
- *  coefficients, derived from the previous set of decoded LARs(LARpp(j-1))
- *  and the actual set of decoded LARs (LARpp(j))
- *
- * (Initial value: LARpp(j-1)[1..8] = 0.)
- */
-
-static void Coefficients_0_12 (
-       register word * LARpp_j_1,
-       register word * LARpp_j,
-       register word * LARp)
-{
-       register int    i;
-
-       for (i = 1; i <= 8; i++, LARp++, LARpp_j_1++, LARpp_j++) {
-               *LARp = GSM_ADD( SASR_W( *LARpp_j_1, 2 ), SASR_W( *LARpp_j, 2 ));
-               *LARp = GSM_ADD( *LARp,  SASR_W( *LARpp_j_1, 1));
-       }
-}
-
-static void Coefficients_13_26 (
-       register word * LARpp_j_1,
-       register word * LARpp_j,
-       register word * LARp)
-{
-       register int i;
-       for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) {
-               *LARp = GSM_ADD( SASR_W( *LARpp_j_1, 1), SASR_W( *LARpp_j, 1 ));
-       }
-}
-
-static void Coefficients_27_39 (
-       register word * LARpp_j_1,
-       register word * LARpp_j,
-       register word * LARp)
-{
-       register int i;
-
-       for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) {
-               *LARp = GSM_ADD( SASR_W( *LARpp_j_1, 2 ), SASR_W( *LARpp_j, 2 ));
-               *LARp = GSM_ADD( *LARp, SASR_W( *LARpp_j, 1 ));
-       }
-}
-
-
-static void Coefficients_40_159 (
-       register word * LARpp_j,
-       register word * LARp)
-{
-       register int i;
-
-       for (i = 1; i <= 8; i++, LARp++, LARpp_j++)
-               *LARp = *LARpp_j;
-}
-
-/* 4.2.9.2 */
-
-static void LARp_to_rp (
-       register word * LARp)   /* [0..7] IN/OUT  */
-/*
- *  The input of this procedure is the interpolated LARp[0..7] array.
- *  The reflection coefficients, rp[i], are used in the analysis
- *  filter and in the synthesis filter.
- */
-{
-       register int            i;
-       register word           temp;
-
-       for (i = 1; i <= 8; i++, LARp++) {
-
-               /* temp = GSM_ABS( *LARp );
-                *
-                * if (temp < 11059) temp <<= 1;
-                * else if (temp < 20070) temp += 11059;
-                * else temp = GSM_ADD( temp >> 2, 26112 );
-                *
-                * *LARp = *LARp < 0 ? -temp : temp;
-                */
-
-               if (*LARp < 0) {
-                       temp = *LARp == MIN_WORD ? MAX_WORD : -(*LARp);
-                       *LARp = - ((temp < 11059) ? temp << 1
-                               : ((temp < 20070) ? temp + 11059
-                               :  GSM_ADD( (word) (temp >> 2), (word) 26112 )));
-               } else {
-                       temp  = *LARp;
-                       *LARp =    (temp < 11059) ? temp << 1
-                               : ((temp < 20070) ? temp + 11059
-                               :  GSM_ADD( (word) (temp >> 2), (word) 26112 ));
-               }
-       }
-}
-
-
-/* 4.2.10 */
-static void Short_term_analysis_filtering (
-       struct gsm_state * S,
-       register word   * rp,   /* [0..7]       IN      */
-       register int    k_n,    /*   k_end - k_start    */
-       register word   * s     /* [0..n-1]     IN/OUT  */
-)
-/*
- *  This procedure computes the short term residual signal d[..] to be fed
- *  to the RPE-LTP loop from the s[..] signal and from the local rp[..]
- *  array (quantized reflection coefficients).  As the call of this
- *  procedure can be done in many ways (see the interpolation of the LAR
- *  coefficient), it is assumed that the computation begins with index
- *  k_start (for arrays d[..] and s[..]) and stops with index k_end
- *  (k_start and k_end are defined in 4.2.9.1).  This procedure also
- *  needs to keep the array u[0..7] in memory for each call.
- */
-{
-       register word           * u = S->u;
-       register int            i;
-       register word           di, zzz, ui, sav, rpi;
-
-       for (; k_n--; s++) {
-
-               di = sav = *s;
-
-               for (i = 0; i < 8; i++) {               /* YYY */
-
-                       ui    = u[i];
-                       rpi   = rp[i];
-                       u[i]  = sav;
-
-                       zzz   = GSM_MULT_R(rpi, di);
-                       sav   = GSM_ADD(   ui,  zzz);
-
-                       zzz   = GSM_MULT_R(rpi, ui);
-                       di    = GSM_ADD(   di,  zzz );
-               }
-
-               *s = di;
-       }
-}
-
-#if defined(USE_FLOAT_MUL) && defined(FAST)
-
-static void Fast_Short_term_analysis_filtering (
-       struct gsm_state * S,
-       register word   * rp,   /* [0..7]       IN      */
-       register int    k_n,    /*   k_end - k_start    */
-       register word   * s     /* [0..n-1]     IN/OUT  */
-)
-{
-       register word           * u = S->u;
-       register int            i;
-
-       float     uf[8],
-                rpf[8];
-
-       register float scalef = 3.0517578125e-5;
-       register float          sav, di, temp;
-
-       for (i = 0; i < 8; ++i) {
-               uf[i]  = u[i];
-               rpf[i] = rp[i] * scalef;
-       }
-       for (; k_n--; s++) {
-               sav = di = *s;
-               for (i = 0; i < 8; ++i) {
-                       register float rpfi = rpf[i];
-                       register float ufi  = uf[i];
-
-                       uf[i] = sav;
-                       temp  = rpfi * di + ufi;
-                       di   += rpfi * ufi;
-                       sav   = temp;
-               }
-               *s = di;
-       }
-       for (i = 0; i < 8; ++i) u[i] = uf[i];
-}
-#endif /* ! (defined (USE_FLOAT_MUL) && defined (FAST)) */
-
-static void Short_term_synthesis_filtering (
-       struct gsm_state * S,
-       register word   * rrp,  /* [0..7]       IN      */
-       register int    k,      /* k_end - k_start      */
-       register word   * wt,   /* [0..k-1]     IN      */
-       register word   * sr    /* [0..k-1]     OUT     */
-)
-{
-       register word           * v = S->v;
-       register int            i;
-       register word           sri, tmp1, tmp2;
-
-       while (k--) {
-               sri = *wt++;
-               for (i = 8; i--;) {
-
-                       /* sri = GSM_SUB( sri, gsm_mult_r( rrp[i], v[i] ) );
-                        */
-                       tmp1 = rrp[i];
-                       tmp2 = v[i];
-                       tmp2 =  ( tmp1 == MIN_WORD && tmp2 == MIN_WORD
-                               ? MAX_WORD
-                               : 0x0FFFF & (( (longword)tmp1 * (longword)tmp2
-                                            + 16384) >> 15)) ;
-
-                       sri  = GSM_SUB( sri, tmp2 );
-
-                       /* v[i+1] = GSM_ADD( v[i], gsm_mult_r( rrp[i], sri ) );
-                        */
-                       tmp1  = ( tmp1 == MIN_WORD && sri == MIN_WORD
-                               ? MAX_WORD
-                               : 0x0FFFF & (( (longword)tmp1 * (longword)sri
-                                            + 16384) >> 15)) ;
-
-                       v[i+1] = GSM_ADD( v[i], tmp1);
-               }
-               *sr++ = v[0] = sri;
-       }
-}
-
-
-#if defined(FAST) && defined(USE_FLOAT_MUL)
-
-static void Fast_Short_term_synthesis_filtering (
-       struct gsm_state * S,
-       register word   * rrp,  /* [0..7]       IN      */
-       register int    k,      /* k_end - k_start      */
-       register word   * wt,   /* [0..k-1]     IN      */
-       register word   * sr    /* [0..k-1]     OUT     */
-)
-{
-       register word           * v = S->v;
-       register int            i;
-
-       float va[9], rrpa[8];
-       register float scalef = 3.0517578125e-5, temp;
-
-       for (i = 0; i < 8; ++i) {
-               va[i]   = v[i];
-               rrpa[i] = (float)rrp[i] * scalef;
-       }
-       while (k--) {
-               register float sri = *wt++;
-               for (i = 8; i--;) {
-                       sri -= rrpa[i] * va[i];
-                       if     (sri < -32768.) sri = -32768.;
-                       else if (sri > 32767.) sri =  32767.;
-
-                       temp = va[i] + rrpa[i] * sri;
-                       if     (temp < -32768.) temp = -32768.;
-                       else if (temp > 32767.) temp =  32767.;
-                       va[i+1] = temp;
-               }
-               *sr++ = va[0] = sri;
-       }
-       for (i = 0; i < 9; ++i) v[i] = va[i];
-}
-
-#endif /* defined(FAST) && defined(USE_FLOAT_MUL) */
-
-void Gsm_Short_Term_Analysis_Filter (
-
-       struct gsm_state * S,
-
-       word    * LARc,         /* coded log area ratio [0..7]  IN      */
-       word    * s             /* signal [0..159]              IN/OUT  */
-)
-{
-       word            * LARpp_j       = S->LARpp[ S->j      ];
-       word            * LARpp_j_1     = S->LARpp[ S->j ^= 1 ];
-
-       word            LARp[8];
-
-#undef FILTER
-#if    defined(FAST) && defined(USE_FLOAT_MUL)
-#      define  FILTER  (* (S->fast                     \
-                          ? Fast_Short_term_analysis_filtering \
-                          : Short_term_analysis_filtering      ))
-
-#else
-#      define  FILTER  Short_term_analysis_filtering
-#endif
-
-       Decoding_of_the_coded_Log_Area_Ratios( LARc, LARpp_j );
-
-       Coefficients_0_12(  LARpp_j_1, LARpp_j, LARp );
-       LARp_to_rp( LARp );
-       FILTER( S, LARp, 13, s);
-
-       Coefficients_13_26( LARpp_j_1, LARpp_j, LARp);
-       LARp_to_rp( LARp );
-       FILTER( S, LARp, 14, s + 13);
-
-       Coefficients_27_39( LARpp_j_1, LARpp_j, LARp);
-       LARp_to_rp( LARp );
-       FILTER( S, LARp, 13, s + 27);
-
-       Coefficients_40_159( LARpp_j, LARp);
-       LARp_to_rp( LARp );
-       FILTER( S, LARp, 120, s + 40);
-}
-
-void Gsm_Short_Term_Synthesis_Filter (
-       struct gsm_state * S,
-
-       word    * LARcr,        /* received log area ratios [0..7] IN  */
-       word    * wt,           /* received d [0..159]             IN  */
-
-       word    * s             /* signal   s [0..159]            OUT  */
-)
-{
-       word            * LARpp_j       = S->LARpp[ S->j     ];
-       word            * LARpp_j_1     = S->LARpp[ S->j ^=1 ];
-
-       word            LARp[8];
-
-#undef FILTER
-#if    defined(FAST) && defined(USE_FLOAT_MUL)
-
-#      define  FILTER  (* (S->fast                     \
-                          ? Fast_Short_term_synthesis_filtering        \
-                          : Short_term_synthesis_filtering     ))
-#else
-#      define  FILTER  Short_term_synthesis_filtering
-#endif
-
-       Decoding_of_the_coded_Log_Area_Ratios( LARcr, LARpp_j );
-
-       Coefficients_0_12( LARpp_j_1, LARpp_j, LARp );
-       LARp_to_rp( LARp );
-       FILTER( S, LARp, 13, wt, s );
-
-       Coefficients_13_26( LARpp_j_1, LARpp_j, LARp);
-       LARp_to_rp( LARp );
-       FILTER( S, LARp, 14, wt + 13, s + 13 );
-
-       Coefficients_27_39( LARpp_j_1, LARpp_j, LARp);
-       LARp_to_rp( LARp );
-       FILTER( S, LARp, 13, wt + 27, s + 27 );
-
-       Coefficients_40_159( LARpp_j, LARp );
-       LARp_to_rp( LARp );
-       FILTER(S, LARp, 120, wt + 40, s + 40);
-}
diff --git a/libs/libsndfile/src/GSM610/table.c b/libs/libsndfile/src/GSM610/table.c
deleted file mode 100644 (file)
index 8b83f78..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
- * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
- * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
- */
-
-/*  Most of these tables are inlined at their point of use.
- */
-
-/*  4.4 TABLES USED IN THE FIXED POINT IMPLEMENTATION OF THE RPE-LTP
- *      CODER AND DECODER
- *
- *     (Most of them inlined, so watch out.)
- */
-
-#define        GSM_TABLE_C
-#include "gsm610_priv.h"
-
-/*  Table 4.1  Quantization of the Log.-Area Ratios
- */
-/* i                1      2      3        4      5      6        7       8 */
-word gsm_A[8]   = {20480, 20480, 20480,  20480,  13964,  15360,   8534,  9036};
-word gsm_B[8]   = {    0,     0,  2048,  -2560,     94,  -1792,   -341, -1144};
-word gsm_MIC[8] = { -32,   -32,   -16,    -16,     -8,     -8,     -4,    -4 };
-word gsm_MAC[8] = {  31,    31,    15,     15,      7,      7,      3,     3 };
-
-
-/*  Table 4.2  Tabulation  of 1/A[1..8]
- */
-word gsm_INVA[8]={ 13107, 13107,  13107, 13107,  19223, 17476,  31454, 29708 };
-
-
-/*   Table 4.3a  Decision level of the LTP gain quantizer
- */
-/*  bc               0         1         2          3                  */
-word gsm_DLB[4] = {  6554,    16384,   26214,     32767        };
-
-
-/*   Table 4.3b   Quantization levels of the LTP gain quantizer
- */
-/* bc                0          1        2          3                  */
-word gsm_QLB[4] = {  3277,    11469,   21299,     32767        };
-
-
-/*   Table 4.4  Coefficients of the weighting filter
- */
-/* i               0      1   2    3   4      5      6     7   8   9    10  */
-word gsm_H[11] = {-134, -374, 0, 2054, 5741, 8192, 5741, 2054, 0, -374, -134 };
-
-
-/*   Table 4.5          Normalized inverse mantissa used to compute xM/xmax 
- */
-/* i                   0        1    2      3      4      5     6      7   */
-word gsm_NRFAC[8] = { 29128, 26215, 23832, 21846, 20165, 18725, 17476, 16384 };
-
-
-/*   Table 4.6  Normalized direct mantissa used to compute xM/xmax
- */
-/* i                  0      1       2      3      4      5      6      7   */
-word gsm_FAC[8]        = { 18431, 20479, 22527, 24575, 26623, 28671, 30719, 32767 };
diff --git a/libs/libsndfile/src/Makefile.am b/libs/libsndfile/src/Makefile.am
deleted file mode 100644 (file)
index 7c307a8..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-AUTOMAKE_OPTIONS = subdir-objects
-
-AM_CPPFLAGS = @EXTERNAL_CFLAGS@
-
-lib_LTLIBRARIES = libsndfile.la
-include_HEADERS = sndfile.hh
-nodist_include_HEADERS = sndfile.h
-
-noinst_LTLIBRARIES =  GSM610/libgsm.la G72x/libg72x.la ALAC/libalac.la libcommon.la
-
-OS_SPECIFIC_CFLAGS = @OS_SPECIFIC_CFLAGS@
-OS_SPECIFIC_LINKS = @OS_SPECIFIC_LINKS@
-
-SYMBOL_FILES = Symbols.gnu-binutils Symbols.darwin libsndfile-1.def Symbols.os2 Symbols.static
-
-EXTRA_DIST = sndfile.h.in config.h.in test_endswap.tpl test_endswap.def \
-                       create_symbols_file.py binheader_writef_check.py \
-                       GSM610/README GSM610/COPYRIGHT GSM610/ChangeLog \
-                       G72x/README G72x/README.original G72x/ChangeLog \
-                       make-static-lib-hidden-privates.sh
-
-noinst_HEADERS = common.h sfconfig.h sfendian.h wav_w64.h sf_unistd.h ogg.h chanmap.h
-
-noinst_PROGRAMS =
-
-COMMON = common.c file_io.c command.c pcm.c ulaw.c alaw.c float32.c \
-               double64.c ima_adpcm.c ms_adpcm.c gsm610.c dwvw.c vox_adpcm.c \
-               interleave.c strings.c dither.c cart.c broadcast.c audio_detect.c \
-               ima_oki_adpcm.c ima_oki_adpcm.h alac.c chunk.c ogg.c chanmap.c \
-               windows.c id3.c $(WIN_VERSION_FILE)
-
-FILESPECIFIC = sndfile.c aiff.c au.c avr.c caf.c dwd.c flac.c g72x.c htk.c ircam.c \
-               macbinary3.c macos.c mat4.c mat5.c nist.c paf.c pvf.c raw.c rx2.c sd2.c \
-               sds.c svx.c txw.c voc.c wve.c w64.c wav_w64.c wav.c xi.c mpc2k.c rf64.c \
-               ogg_vorbis.c ogg_speex.c ogg_pcm.c ogg_opus.c
-
-CLEANFILES = *~ *.exe G72x/*.exe
-
-if USE_WIN_VERSION_FILE
-WIN_VERSION_FILE = version-metadata.rc
-else
-WIN_VERSION_FILE =
-endif
-
-#===============================================================================
-# MinGW requires -no-undefined if a DLL is to be built.
-libsndfile_la_LDFLAGS = -no-undefined -version-info @SHARED_VERSION_INFO@ @SHLIB_VERSION_ARG@
-libsndfile_la_SOURCES = $(FILESPECIFIC) $(noinst_HEADERS)
-nodist_libsndfile_la_SOURCES = $(nodist_include_HEADERS)
-libsndfile_la_LIBADD = GSM610/libgsm.la G72x/libg72x.la ALAC/libalac.la \
-               libcommon.la @EXTERNAL_LIBS@ -lm
-
-libcommon_la_SOURCES = $(COMMON)
-
-#======================================================================
-# Subdir libraries.
-
-GSM610_libgsm_la_SOURCES = GSM610/config.h GSM610/gsm.h GSM610/gsm610_priv.h \
-               GSM610/add.c GSM610/code.c GSM610/decode.c GSM610/gsm_create.c \
-               GSM610/gsm_decode.c GSM610/gsm_destroy.c GSM610/gsm_encode.c \
-               GSM610/gsm_option.c GSM610/long_term.c GSM610/lpc.c GSM610/preprocess.c \
-               GSM610/rpe.c GSM610/short_term.c GSM610/table.c
-
-G72x_libg72x_la_SOURCES = G72x/g72x.h G72x/g72x_priv.h \
-               G72x/g721.c G72x/g723_16.c G72x/g723_24.c G72x/g723_40.c G72x/g72x.c
-
-ALAC_libalac_la_SOURCES = ALAC/ALACAudioTypes.h ALAC/ALACBitUtilities.h \
-               ALAC/EndianPortable.h ALAC/aglib.h ALAC/dplib.h ALAC/matrixlib.h \
-               ALAC/alac_codec.h \
-               ALAC/ALACBitUtilities.c ALAC/ag_dec.c \
-               ALAC/ag_enc.c ALAC/dp_dec.c ALAC/dp_enc.c ALAC/matrix_dec.c \
-               ALAC/matrix_enc.c ALAC/alac_decoder.c ALAC/alac_encoder.c
-
-#===============================================================================
-# Test programs.
-
-#test_main_SOURCES = test_main.c test_main.h test_conversions.c test_float.c test_endswap.c \
-#                                      test_audio_detect.c test_log_printf.c test_file_io.c test_ima_oki_adpcm.c \
-#                                      test_strncpy_crlf.c test_broadcast_var.c test_cart_var.c
-#test_main_LDADD = libcommon.la
-
-#G72x_g72x_test_SOURCES = G72x/g72x_test.c
-#G72x_g72x_test_LDADD = G72x/libg72x.la
-
-#test_endswap.c: test_endswap.def test_endswap.tpl
-#      cd $(srcdir) && autogen --writable test_endswap.def && cd $(abs_builddir)
-
-genfiles : #$(SYMBOL_FILES)
-
-check :
-       @if [ -x /usr/bin/python ]; then $(srcdir)/binheader_writef_check.py $(srcdir)/*.c ; fi
-#      G72x/g72x_test$(EXEEXT) all
-       ./test_main$(EXEEXT)
-
-# Need this target to force building of test programs.
-checkprograms : $(check_PROGRAMS)
-
-#======================================================================
-# Generate an OS specific Symbols files. This is done when the author
-# builds the distribution tarball. There should be not need for the
-# end user to create these files.
-
-Symbols.gnu-binutils: create_symbols_file.py
-       python $(srcdir)/create_symbols_file.py linux $(VERSION) > $@
-
-Symbols.darwin: create_symbols_file.py
-       python $(srcdir)/create_symbols_file.py darwin $(VERSION) > $@
-
-libsndfile-1.def: create_symbols_file.py
-       python $(srcdir)/create_symbols_file.py win32 $(VERSION) > $@
-
-Symbols.os2: create_symbols_file.py
-       python $(srcdir)/create_symbols_file.py os2 $(VERSION) > $@
-
-Symbols.static: create_symbols_file.py
-       python $(srcdir)/create_symbols_file.py static $(VERSION) > $@
-
-# Fake dependancy to force the creation of these files.
-#sndfile.o : $(SYMBOL_FILES)
-
-#======================================================================
-# Building windows resource files (if needed).
-
-.rc.lo:
-       $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --tag=RC --mode=compile $(RC) $(RCFLAGS) $< -o $@
-
-#======================================================================
-# Disable autoheader.
-AUTOHEADER=echo
-
-
-
diff --git a/libs/libsndfile/src/Symbols.darwin b/libs/libsndfile/src/Symbols.darwin
deleted file mode 100644 (file)
index a671460..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-# Auto-generated by create_symbols_file.py
-
-_sf_command
-_sf_open
-_sf_close
-_sf_seek
-_sf_error
-_sf_perror
-_sf_error_str
-_sf_error_number
-_sf_format_check
-_sf_read_raw
-_sf_readf_short
-_sf_readf_int
-_sf_readf_float
-_sf_readf_double
-_sf_read_short
-_sf_read_int
-_sf_read_float
-_sf_read_double
-_sf_write_raw
-_sf_writef_short
-_sf_writef_int
-_sf_writef_float
-_sf_writef_double
-_sf_write_short
-_sf_write_int
-_sf_write_float
-_sf_write_double
-_sf_strerror
-_sf_get_string
-_sf_set_string
-_sf_version_string
-_sf_open_fd
-_sf_open_virtual
-_sf_write_sync
-
diff --git a/libs/libsndfile/src/Symbols.linux b/libs/libsndfile/src/Symbols.linux
deleted file mode 100644 (file)
index 163346f..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-# Auto-generated by create_symbols_file.py
-
-libsndfile.so.1.0
-{
-  global:
-    sf_command ;
-    sf_open ;
-    sf_close ;
-    sf_seek ;
-    sf_error ;
-    sf_perror ;
-    sf_error_str ;
-    sf_error_number ;
-    sf_format_check ;
-    sf_read_raw ;
-    sf_readf_short ;
-    sf_readf_int ;
-    sf_readf_float ;
-    sf_readf_double ;
-    sf_read_short ;
-    sf_read_int ;
-    sf_read_float ;
-    sf_read_double ;
-    sf_write_raw ;
-    sf_writef_short ;
-    sf_writef_int ;
-    sf_writef_float ;
-    sf_writef_double ;
-    sf_write_short ;
-    sf_write_int ;
-    sf_write_float ;
-    sf_write_double ;
-    sf_strerror ;
-    sf_get_string ;
-    sf_set_string ;
-    sf_open_fd ;
-    sf_open_virtual ;
-    sf_write_sync ;
-  local:
-    * ;
-} ;
-
diff --git a/libs/libsndfile/src/Symbols.os2 b/libs/libsndfile/src/Symbols.os2
deleted file mode 100644 (file)
index 118ceba..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-; Auto-generated by create_symbols_file.py
-
-LIBRARY sndfile1
-INITINSTANCE TERMINSTANCE
-CODE PRELOAD MOVEABLE DISCARDABLE
-DATA PRELOAD MOVEABLE MULTIPLE NONSHARED
-EXPORTS
-
-_sf_command           @1
-_sf_open              @2
-_sf_close             @3
-_sf_seek              @4
-_sf_error             @7
-_sf_perror            @8
-_sf_error_str         @9
-_sf_error_number      @10
-_sf_format_check      @11
-_sf_read_raw          @16
-_sf_readf_short       @17
-_sf_readf_int         @18
-_sf_readf_float       @19
-_sf_readf_double      @20
-_sf_read_short        @21
-_sf_read_int          @22
-_sf_read_float        @23
-_sf_read_double       @24
-_sf_write_raw         @32
-_sf_writef_short      @33
-_sf_writef_int        @34
-_sf_writef_float      @35
-_sf_writef_double     @36
-_sf_write_short       @37
-_sf_write_int         @38
-_sf_write_float       @39
-_sf_write_double      @40
-_sf_strerror          @50
-_sf_get_string        @60
-_sf_set_string        @61
-_sf_version_string    @68
-_sf_open_fd           @70
-_sf_open_virtual      @80
-_sf_write_sync        @90
-
diff --git a/libs/libsndfile/src/aiff.c b/libs/libsndfile/src/aiff.c
deleted file mode 100644 (file)
index c0175b2..0000000
+++ /dev/null
@@ -1,1778 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2005 David Viens <davidv@plogue.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <ctype.h>
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-#include "chanmap.h"
-
-/*------------------------------------------------------------------------------
- * Macros to handle big/little endian issues.
- */
-
-#define FORM_MARKER            (MAKE_MARKER ('F', 'O', 'R', 'M'))
-#define AIFF_MARKER            (MAKE_MARKER ('A', 'I', 'F', 'F'))
-#define AIFC_MARKER            (MAKE_MARKER ('A', 'I', 'F', 'C'))
-#define COMM_MARKER            (MAKE_MARKER ('C', 'O', 'M', 'M'))
-#define SSND_MARKER            (MAKE_MARKER ('S', 'S', 'N', 'D'))
-#define MARK_MARKER            (MAKE_MARKER ('M', 'A', 'R', 'K'))
-#define INST_MARKER            (MAKE_MARKER ('I', 'N', 'S', 'T'))
-#define APPL_MARKER            (MAKE_MARKER ('A', 'P', 'P', 'L'))
-#define CHAN_MARKER            (MAKE_MARKER ('C', 'H', 'A', 'N'))
-
-#define c_MARKER               (MAKE_MARKER ('(', 'c', ')', ' '))
-#define NAME_MARKER            (MAKE_MARKER ('N', 'A', 'M', 'E'))
-#define AUTH_MARKER            (MAKE_MARKER ('A', 'U', 'T', 'H'))
-#define ANNO_MARKER            (MAKE_MARKER ('A', 'N', 'N', 'O'))
-#define COMT_MARKER            (MAKE_MARKER ('C', 'O', 'M', 'T'))
-#define FVER_MARKER            (MAKE_MARKER ('F', 'V', 'E', 'R'))
-#define SFX_MARKER             (MAKE_MARKER ('S', 'F', 'X', '!'))
-
-#define PEAK_MARKER            (MAKE_MARKER ('P', 'E', 'A', 'K'))
-#define basc_MARKER            (MAKE_MARKER ('b', 'a', 's', 'c'))
-
-/* Supported AIFC encodings.*/
-#define NONE_MARKER            (MAKE_MARKER ('N', 'O', 'N', 'E'))
-#define sowt_MARKER            (MAKE_MARKER ('s', 'o', 'w', 't'))
-#define twos_MARKER            (MAKE_MARKER ('t', 'w', 'o', 's'))
-#define raw_MARKER             (MAKE_MARKER ('r', 'a', 'w', ' '))
-#define in24_MARKER            (MAKE_MARKER ('i', 'n', '2', '4'))
-#define ni24_MARKER            (MAKE_MARKER ('4', '2', 'n', '1'))
-#define in32_MARKER            (MAKE_MARKER ('i', 'n', '3', '2'))
-#define ni32_MARKER            (MAKE_MARKER ('2', '3', 'n', 'i'))
-
-#define fl32_MARKER            (MAKE_MARKER ('f', 'l', '3', '2'))
-#define FL32_MARKER            (MAKE_MARKER ('F', 'L', '3', '2'))
-#define fl64_MARKER            (MAKE_MARKER ('f', 'l', '6', '4'))
-#define FL64_MARKER            (MAKE_MARKER ('F', 'L', '6', '4'))
-
-#define ulaw_MARKER            (MAKE_MARKER ('u', 'l', 'a', 'w'))
-#define ULAW_MARKER            (MAKE_MARKER ('U', 'L', 'A', 'W'))
-#define alaw_MARKER            (MAKE_MARKER ('a', 'l', 'a', 'w'))
-#define ALAW_MARKER            (MAKE_MARKER ('A', 'L', 'A', 'W'))
-
-#define DWVW_MARKER            (MAKE_MARKER ('D', 'W', 'V', 'W'))
-#define GSM_MARKER             (MAKE_MARKER ('G', 'S', 'M', ' '))
-#define ima4_MARKER            (MAKE_MARKER ('i', 'm', 'a', '4'))
-
-/*
-**     This value is officially assigned to Mega Nerd Pty Ltd by Apple
-**     Corportation as the Application marker for libsndfile.
-**
-**     See : http://developer.apple.com/faq/datatype.html
-*/
-#define m3ga_MARKER            (MAKE_MARKER ('m', '3', 'g', 'a'))
-
-/* Unsupported AIFC encodings.*/
-
-#define MAC3_MARKER            (MAKE_MARKER ('M', 'A', 'C', '3'))
-#define MAC6_MARKER            (MAKE_MARKER ('M', 'A', 'C', '6'))
-#define ADP4_MARKER            (MAKE_MARKER ('A', 'D', 'P', '4'))
-
-/* Predfined chunk sizes. */
-#define SIZEOF_AIFF_COMM               18
-#define SIZEOF_AIFC_COMM_MIN   22
-#define SIZEOF_AIFC_COMM               24
-#define SIZEOF_SSND_CHUNK              8
-#define SIZEOF_INST_CHUNK              20
-
-/* Is it constant? */
-
-/* AIFC/IMA4 defines. */
-#define AIFC_IMA4_BLOCK_LEN                            34
-#define AIFC_IMA4_SAMPLES_PER_BLOCK            64
-
-#define AIFF_PEAK_CHUNK_SIZE(ch)       (2 * sizeof (int) + ch * (sizeof (float) + sizeof (int)))
-
-/*------------------------------------------------------------------------------
- * Typedefs for file chunks.
- */
-
-enum
-{      HAVE_FORM               = 0x01,
-       HAVE_AIFF               = 0x02,
-       HAVE_AIFC               = 0x04,
-       HAVE_FVER               = 0x08,
-       HAVE_COMM               = 0x10,
-       HAVE_SSND               = 0x20
-} ;
-
-typedef struct
-{      unsigned int    size ;
-       short                   numChannels ;
-       unsigned int    numSampleFrames ;
-       short                   sampleSize ;
-       unsigned char   sampleRate [10] ;
-       unsigned int    encoding ;
-       char                    zero_bytes [2] ;
-} COMM_CHUNK ;
-
-typedef struct
-{      unsigned int    offset ;
-       unsigned int    blocksize ;
-} SSND_CHUNK ;
-
-typedef struct
-{      short                   playMode ;
-       unsigned short  beginLoop ;
-       unsigned short  endLoop ;
-} INST_LOOP ;
-
-typedef struct
-{      char            baseNote ;              /* all notes are MIDI note numbers */
-       char            detune ;                /* cents off, only -50 to +50 are significant */
-       char            lowNote ;
-       char            highNote ;
-       char            lowVelocity ;   /* 1 to 127 */
-       char            highVelocity ;  /* 1 to 127 */
-       short           gain ;                  /* in dB, 0 is normal */
-       INST_LOOP       sustain_loop ;
-       INST_LOOP       release_loop ;
-} INST_CHUNK ;
-
-
-enum
-{      basc_SCALE_MINOR = 1,
-       basc_SCALE_MAJOR,
-       basc_SCALE_NEITHER,
-       basc_SCALE_BOTH
-} ;
-
-enum
-{      basc_TYPE_LOOP = 0,
-       basc_TYPE_ONE_SHOT
-} ;
-
-
-typedef struct
-{      unsigned int    version ;
-       unsigned int    numBeats ;
-       unsigned short  rootNote ;
-       unsigned short  scaleType ;
-       unsigned short  sigNumerator ;
-       unsigned short  sigDenominator ;
-       unsigned short  loopType ;
-} basc_CHUNK ;
-
-typedef struct
-{      unsigned short  markerID ;
-       unsigned int    position ;
-} MARK_ID_POS ;
-
-typedef struct
-{      sf_count_t      comm_offset ;
-       sf_count_t      ssnd_offset ;
-
-       int chanmap_tag ;
-
-       MARK_ID_POS *markstr ;
-} AIFF_PRIVATE ;
-
-/*------------------------------------------------------------------------------
- * Private static functions.
- */
-
-static int     aiff_close (SF_PRIVATE *psf) ;
-
-static int     tenbytefloat2int (unsigned char *bytes) ;
-static void uint2tenbytefloat (unsigned int num, unsigned char *bytes) ;
-
-static int     aiff_read_comm_chunk (SF_PRIVATE *psf, COMM_CHUNK *comm_fmt) ;
-
-static int     aiff_read_header (SF_PRIVATE *psf, COMM_CHUNK *comm_fmt) ;
-
-static int     aiff_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int     aiff_write_tailer (SF_PRIVATE *psf) ;
-static void    aiff_write_strings (SF_PRIVATE *psf, int location) ;
-
-static int     aiff_command (SF_PRIVATE *psf, int command, void *data, int datasize) ;
-
-static const char *get_loop_mode_str (short mode) ;
-
-static short get_loop_mode (short mode) ;
-
-static int aiff_read_basc_chunk (SF_PRIVATE * psf, int) ;
-
-static int aiff_read_chanmap (SF_PRIVATE * psf, unsigned dword) ;
-
-static unsigned int marker_to_position (const MARK_ID_POS *m, unsigned short n, int marksize) ;
-
-static int aiff_set_chunk (SF_PRIVATE *psf, const SF_CHUNK_INFO * chunk_info) ;
-static SF_CHUNK_ITERATOR * aiff_next_chunk_iterator (SF_PRIVATE *psf, SF_CHUNK_ITERATOR * iterator) ;
-static int aiff_get_chunk_size (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info) ;
-static int aiff_get_chunk_data (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-aiff_open (SF_PRIVATE *psf)
-{      COMM_CHUNK comm_fmt ;
-       int error, subformat ;
-
-       memset (&comm_fmt, 0, sizeof (comm_fmt)) ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-
-       if ((psf->container_data = calloc (1, sizeof (AIFF_PRIVATE))) == NULL)
-               return SFE_MALLOC_FAILED ;
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-       {       if ((error = aiff_read_header (psf, &comm_fmt)))
-                       return error ;
-
-               psf->next_chunk_iterator = aiff_next_chunk_iterator ;
-               psf->get_chunk_size = aiff_get_chunk_size ;
-               psf->get_chunk_data = aiff_get_chunk_data ;
-
-               psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-               } ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       if (psf->is_pipe)
-                       return SFE_NO_PIPE_WRITE ;
-
-               if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_AIFF)
-                       return SFE_BAD_OPEN_FORMAT ;
-
-               if (psf->file.mode == SFM_WRITE && (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE))
-               {       if ((psf->peak_info = peak_info_calloc (psf->sf.channels)) == NULL)
-                               return SFE_MALLOC_FAILED ;
-                       psf->peak_info->peak_loc = SF_PEAK_START ;
-                       } ;
-
-               if (psf->file.mode != SFM_RDWR || psf->filelength < 40)
-               {       psf->filelength = 0 ;
-                       psf->datalength = 0 ;
-                       psf->dataoffset = 0 ;
-                       psf->sf.frames = 0 ;
-                       } ;
-
-               psf->strings.flags = SF_STR_ALLOW_START | SF_STR_ALLOW_END ;
-
-               if ((error = aiff_write_header (psf, SF_FALSE)))
-                       return error ;
-
-               psf->write_header       = aiff_write_header ;
-               psf->set_chunk          = aiff_set_chunk ;
-               } ;
-
-       psf->container_close = aiff_close ;
-       psf->command = aiff_command ;
-
-       switch (SF_CODEC (psf->sf.format))
-       {       case SF_FORMAT_PCM_U8 :
-                               error = pcm_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_PCM_S8 :
-                               error = pcm_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_PCM_24 :
-               case SF_FORMAT_PCM_32 :
-                               error = pcm_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_ULAW :
-                               error = ulaw_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_ALAW :
-                               error = alaw_init (psf) ;
-                               break ;
-
-               /* Lite remove start */
-               case SF_FORMAT_FLOAT :
-                               error = float32_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_DOUBLE :
-                               error = double64_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_DWVW_12 :
-                               error = dwvw_init (psf, 12) ;
-                               break ;
-
-               case SF_FORMAT_DWVW_16 :
-                               error = dwvw_init (psf, 16) ;
-                               break ;
-
-               case SF_FORMAT_DWVW_24 :
-                               error = dwvw_init (psf, 24) ;
-                               break ;
-
-               case SF_FORMAT_DWVW_N :
-                               if (psf->file.mode != SFM_READ)
-                               {       error = SFE_DWVW_BAD_BITWIDTH ;
-                                       break ;
-                                       } ;
-                               if (comm_fmt.sampleSize >= 8 && comm_fmt.sampleSize < 24)
-                               {       error = dwvw_init (psf, comm_fmt.sampleSize) ;
-                                       psf->sf.frames = comm_fmt.numSampleFrames ;
-                                       break ;
-                                       } ;
-                               psf_log_printf (psf, "AIFC/DWVW : Bad bitwidth %d\n", comm_fmt.sampleSize) ;
-                               error = SFE_DWVW_BAD_BITWIDTH ;
-                               break ;
-
-               case SF_FORMAT_IMA_ADPCM :
-                               /*
-                               **      IMA ADPCM encoded AIFF files always have a block length
-                               **      of 34 which decodes to 64 samples.
-                               */
-                               error = aiff_ima_init (psf, AIFC_IMA4_BLOCK_LEN, AIFC_IMA4_SAMPLES_PER_BLOCK) ;
-                               break ;
-               /* Lite remove end */
-
-               case SF_FORMAT_GSM610 :
-                               error = gsm610_init (psf) ;
-                               break ;
-
-               default : return SFE_UNIMPLEMENTED ;
-               } ;
-
-
-       return error ;
-} /* aiff_open */
-
-/*==========================================================================================
-** Private functions.
-*/
-
-/* This function ought to check size */
-static unsigned int
-marker_to_position (const MARK_ID_POS *m, unsigned short n, int marksize)
-{      int i ;
-
-       for (i = 0 ; i < marksize ; i++)
-               if (m [i].markerID == n)
-                       return m [i].position ;
-       return 0 ;
-} /* marker_to_position */
-
-static int
-aiff_read_header (SF_PRIVATE *psf, COMM_CHUNK *comm_fmt)
-{      SSND_CHUNK      ssnd_fmt ;
-       AIFF_PRIVATE *paiff ;
-       BUF_UNION       ubuf ;
-       unsigned        chunk_size = 0, FORMsize, SSNDsize, bytesread ;
-       int                     k, found_chunk = 0, done = 0, error = 0 ;
-       char            *cptr ;
-       int                     instr_found = 0, mark_found = 0, mark_count = 0 ;
-
-       if (psf->filelength > SF_PLATFORM_S64 (0xffffffff))
-               psf_log_printf (psf, "Warning : filelength > 0xffffffff. This is bad!!!!\n") ;
-
-       if ((paiff = psf->container_data) == NULL)
-               return SFE_INTERNAL ;
-
-       paiff->comm_offset = 0 ;
-       paiff->ssnd_offset = 0 ;
-
-       /* Set position to start of file to begin reading header. */
-       psf_binheader_readf (psf, "p", 0) ;
-
-       memset (comm_fmt, 0, sizeof (COMM_CHUNK)) ;
-
-       /* Until recently AIF* file were all BIG endian. */
-       psf->endian = SF_ENDIAN_BIG ;
-
-       /*      AIFF files can apparently have their chunks in any order. However, they
-       **      must have a FORM chunk. Approach here is to read all the chunks one by
-       **      one and then check for the mandatory chunks at the end.
-       */
-       while (! done)
-       {       unsigned        marker ;
-               size_t jump = chunk_size & 1 ;
-
-               marker = chunk_size = 0 ;
-               psf_binheader_readf (psf, "Ejm4", jump, &marker, &chunk_size) ;
-               if (marker == 0)
-               {       psf_log_printf (psf, "Have 0 marker.\n") ;
-                       break ;
-                       } ;
-
-               if (psf->file.mode == SFM_RDWR && (found_chunk & HAVE_SSND))
-                       return SFE_AIFF_RW_SSND_NOT_LAST ;
-
-               psf_store_read_chunk_u32 (&psf->rchunks, marker, psf_ftell (psf), chunk_size) ;
-
-               switch (marker)
-               {       case FORM_MARKER :
-                                       if (found_chunk)
-                                               return SFE_AIFF_NO_FORM ;
-
-                                       FORMsize = chunk_size ;
-
-                                       found_chunk |= HAVE_FORM ;
-                                       psf_binheader_readf (psf, "m", &marker) ;
-                                       switch (marker)
-                                       {       case AIFC_MARKER :
-                                               case AIFF_MARKER :
-                                                       found_chunk |= (marker == AIFC_MARKER) ? (HAVE_AIFC | HAVE_AIFF) : HAVE_AIFF ;
-                                                       break ;
-                                               default :
-                                                       break ;
-                                               } ;
-
-                                       if (psf->fileoffset > 0 && psf->filelength > FORMsize + 8)
-                                       {       /* Set file length. */
-                                               psf->filelength = FORMsize + 8 ;
-                                               psf_log_printf (psf, "FORM : %u\n %M\n", FORMsize, marker) ;
-                                               }
-                                       else if (FORMsize != psf->filelength - 2 * SIGNED_SIZEOF (chunk_size))
-                                       {       chunk_size = psf->filelength - 2 * sizeof (chunk_size) ;
-                                               psf_log_printf (psf, "FORM : %u (should be %u)\n %M\n", FORMsize, chunk_size, marker) ;
-                                               FORMsize = chunk_size ;
-                                               }
-                                       else
-                                               psf_log_printf (psf, "FORM : %u\n %M\n", FORMsize, marker) ;
-                                       /* Set this to 0, so we don't jump a byte when parsing the next marker. */
-                                       chunk_size = 0 ;
-                                       break ;
-
-
-                       case COMM_MARKER :
-                                       paiff->comm_offset = psf_ftell (psf) - 8 ;
-                                       chunk_size += chunk_size & 1 ;
-                                       comm_fmt->size = chunk_size ;
-                                       if ((error = aiff_read_comm_chunk (psf, comm_fmt)) != 0)
-                                               return error ;
-
-                                       found_chunk |= HAVE_COMM ;
-                                       break ;
-
-                       case PEAK_MARKER :
-                                       /* Must have COMM chunk before PEAK chunk. */
-                                       if ((found_chunk & (HAVE_FORM | HAVE_AIFF | HAVE_COMM)) != (HAVE_FORM | HAVE_AIFF | HAVE_COMM))
-                                               return SFE_AIFF_PEAK_B4_COMM ;
-
-                                       psf_log_printf (psf, "%M : %d\n", marker, chunk_size) ;
-                                       if (chunk_size != AIFF_PEAK_CHUNK_SIZE (psf->sf.channels))
-                                       {       psf_binheader_readf (psf, "j", chunk_size) ;
-                                               psf_log_printf (psf, "*** File PEAK chunk too big.\n") ;
-                                               return SFE_WAV_BAD_PEAK ;
-                                               } ;
-
-                                       if ((psf->peak_info = peak_info_calloc (psf->sf.channels)) == NULL)
-                                               return SFE_MALLOC_FAILED ;
-
-                                       /* read in rest of PEAK chunk. */
-                                       psf_binheader_readf (psf, "E44", &(psf->peak_info->version), &(psf->peak_info->timestamp)) ;
-
-                                       if (psf->peak_info->version != 1)
-                                               psf_log_printf (psf, "  version    : %d *** (should be version 1)\n", psf->peak_info->version) ;
-                                       else
-                                               psf_log_printf (psf, "  version    : %d\n", psf->peak_info->version) ;
-
-                                       psf_log_printf (psf, "  time stamp : %d\n", psf->peak_info->timestamp) ;
-                                       psf_log_printf (psf, "    Ch   Position       Value\n") ;
-
-                                       cptr = ubuf.cbuf ;
-                                       for (k = 0 ; k < psf->sf.channels ; k++)
-                                       {       float value ;
-                                               unsigned int position ;
-
-                                               psf_binheader_readf (psf, "Ef4", &value, &position) ;
-                                               psf->peak_info->peaks [k].value = value ;
-                                               psf->peak_info->peaks [k].position = position ;
-
-                                               snprintf (cptr, sizeof (ubuf.scbuf), "    %2d   %-12" PRId64 "   %g\n",
-                                                               k, psf->peak_info->peaks [k].position, psf->peak_info->peaks [k].value) ;
-                                               cptr [sizeof (ubuf.scbuf) - 1] = 0 ;
-                                               psf_log_printf (psf, "%s", cptr) ;
-                                               } ;
-
-                                       psf->peak_info->peak_loc = ((found_chunk & HAVE_SSND) == 0) ? SF_PEAK_START : SF_PEAK_END ;
-                                       break ;
-
-                       case SSND_MARKER :
-                                       if ((found_chunk & HAVE_AIFC) && (found_chunk & HAVE_FVER) == 0)
-                                               psf_log_printf (psf, "*** Valid AIFC files should have an FVER chunk.\n") ;
-
-                                       paiff->ssnd_offset = psf_ftell (psf) - 8 ;
-                                       SSNDsize = chunk_size ;
-                                       psf_binheader_readf (psf, "E44", &(ssnd_fmt.offset), &(ssnd_fmt.blocksize)) ;
-
-                                       psf->datalength = SSNDsize - sizeof (ssnd_fmt) ;
-                                       psf->dataoffset = psf_ftell (psf) ;
-
-                                       if (psf->datalength > psf->filelength - psf->dataoffset || psf->datalength < 0)
-                                       {       psf_log_printf (psf, " SSND : %u (should be %D)\n", SSNDsize, psf->filelength - psf->dataoffset + sizeof (SSND_CHUNK)) ;
-                                               psf->datalength = psf->filelength - psf->dataoffset ;
-                                               }
-                                       else
-                                               psf_log_printf (psf, " SSND : %u\n", SSNDsize) ;
-
-                                       if (ssnd_fmt.offset == 0 || psf->dataoffset + ssnd_fmt.offset == ssnd_fmt.blocksize)
-                                       {       psf_log_printf (psf, "  Offset     : %u\n", ssnd_fmt.offset) ;
-                                               psf_log_printf (psf, "  Block Size : %u\n", ssnd_fmt.blocksize) ;
-
-                                               psf->dataoffset += ssnd_fmt.offset ;
-                                               psf->datalength -= ssnd_fmt.offset ;
-                                               }
-                                       else
-                                       {       psf_log_printf (psf, "  Offset     : %u\n", ssnd_fmt.offset) ;
-                                               psf_log_printf (psf, "  Block Size : %u ???\n", ssnd_fmt.blocksize) ;
-                                               psf->dataoffset += ssnd_fmt.offset ;
-                                               psf->datalength -= ssnd_fmt.offset ;
-                                               } ;
-
-                                       /* Only set dataend if there really is data at the end. */
-                                       if (psf->datalength + psf->dataoffset < psf->filelength)
-                                               psf->dataend = psf->datalength + psf->dataoffset ;
-
-                                       found_chunk |= HAVE_SSND ;
-
-                                       if (! psf->sf.seekable)
-                                               break ;
-
-                                       /* Seek to end of SSND chunk. */
-                                       psf_fseek (psf, psf->dataoffset + psf->datalength, SEEK_SET) ;
-                                       break ;
-
-                       case c_MARKER :
-                                       if (chunk_size == 0)
-                                               break ;
-                                       if (chunk_size >= SIGNED_SIZEOF (ubuf.scbuf))
-                                       {       psf_log_printf (psf, " %M : %d (too big)\n", marker, chunk_size) ;
-                                               return SFE_INTERNAL ;
-                                               } ;
-
-                                       cptr = ubuf.cbuf ;
-                                       psf_binheader_readf (psf, "b", cptr, chunk_size + (chunk_size & 1)) ;
-                                       cptr [chunk_size] = 0 ;
-
-                                       psf_sanitize_string (cptr, chunk_size) ;
-
-                                       psf_log_printf (psf, " %M : %s\n", marker, cptr) ;
-                                       psf_store_string (psf, SF_STR_COPYRIGHT, cptr) ;
-                                       chunk_size += chunk_size & 1 ;
-                                       break ;
-
-                       case AUTH_MARKER :
-                                       if (chunk_size == 0)
-                                               break ;
-                                       if (chunk_size >= SIGNED_SIZEOF (ubuf.scbuf) - 1)
-                                       {       psf_log_printf (psf, " %M : %d (too big)\n", marker, chunk_size) ;
-                                               return SFE_INTERNAL ;
-                                               } ;
-
-                                       cptr = ubuf.cbuf ;
-                                       psf_binheader_readf (psf, "b", cptr, chunk_size + (chunk_size & 1)) ;
-                                       cptr [chunk_size] = 0 ;
-                                       psf_log_printf (psf, " %M : %s\n", marker, cptr) ;
-                                       psf_store_string (psf, SF_STR_ARTIST, cptr) ;
-                                       chunk_size += chunk_size & 1 ;
-                                       break ;
-
-                       case COMT_MARKER :
-                               {       unsigned short count, id, len ;
-                                       unsigned int timestamp, bytes ;
-
-                                       if (chunk_size == 0)
-                                               break ;
-                                       bytes = chunk_size ;
-                                       bytes -= psf_binheader_readf (psf, "E2", &count) ;
-                                       psf_log_printf (psf, " %M : %d\n  count  : %d\n", marker, chunk_size, count) ;
-
-                                       for (k = 0 ; k < count ; k++)
-                                       {       bytes -= psf_binheader_readf (psf, "E422", &timestamp, &id, &len) ;
-                                               psf_log_printf (psf, "   time   : 0x%x\n   marker : %x\n   length : %d\n", timestamp, id, len) ;
-
-                                               if (len + 1 > SIGNED_SIZEOF (ubuf.scbuf))
-                                               {       psf_log_printf (psf, "\nError : string length (%d) too big.\n", len) ;
-                                                       return SFE_INTERNAL ;
-                                                       } ;
-
-                                               cptr = ubuf.cbuf ;
-                                               bytes -= psf_binheader_readf (psf, "b", cptr, len) ;
-                                               cptr [len] = 0 ;
-                                               psf_log_printf (psf, "   string : %s\n", cptr) ;
-                                               } ;
-
-                                       if (bytes > 0)
-                                               psf_binheader_readf (psf, "j", bytes) ;
-                                       } ;
-                                       break ;
-
-                       case APPL_MARKER :
-                               {       unsigned appl_marker ;
-
-                                       if (chunk_size == 0)
-                                               break ;
-                                       if (chunk_size >= SIGNED_SIZEOF (ubuf.scbuf) - 1)
-                                       {       psf_log_printf (psf, " %M : %d (too big, skipping)\n", marker, chunk_size) ;
-                                               psf_binheader_readf (psf, "j", chunk_size + (chunk_size & 1)) ;
-                                               break ;
-                                               } ;
-
-                                       if (chunk_size < 4)
-                                       {       psf_log_printf (psf, " %M : %d (too small, skipping)\n", marker, chunk_size) ;
-                                               psf_binheader_readf (psf, "j", chunk_size + (chunk_size & 1)) ;
-                                               break ;
-                                               } ;
-
-                                       cptr = ubuf.cbuf ;
-                                       psf_binheader_readf (psf, "mb", &appl_marker, cptr, chunk_size + (chunk_size & 1) - 4) ;
-                                       cptr [chunk_size] = 0 ;
-
-                                       for (k = 0 ; k < (int) chunk_size ; k++)
-                                               if (! psf_isprint (cptr [k]))
-                                               {       cptr [k] = 0 ;
-                                                       break ;
-                                                       } ;
-
-                                       psf_log_printf (psf, " %M : %d\n  AppSig : %M\n  Name   : %s\n", marker, chunk_size, appl_marker, cptr) ;
-                                       psf_store_string (psf, SF_STR_SOFTWARE, cptr) ;
-                                       chunk_size += chunk_size & 1 ;
-                                       } ;
-                                       break ;
-
-                       case NAME_MARKER :
-                                       if (chunk_size == 0)
-                                               break ;
-                                       if (chunk_size >= SIGNED_SIZEOF (ubuf.scbuf) - 2)
-                                       {       psf_log_printf (psf, " %M : %d (too big)\n", marker, chunk_size) ;
-                                               return SFE_INTERNAL ;
-                                               } ;
-
-                                       cptr = ubuf.cbuf ;
-                                       psf_binheader_readf (psf, "b", cptr, chunk_size + (chunk_size & 1)) ;
-                                       cptr [chunk_size] = 0 ;
-                                       psf_log_printf (psf, " %M : %s\n", marker, cptr) ;
-                                       psf_store_string (psf, SF_STR_TITLE, cptr) ;
-                                       chunk_size += chunk_size & 1 ;
-                                       break ;
-
-                       case ANNO_MARKER :
-                                       if (chunk_size == 0)
-                                               break ;
-                                       if (chunk_size >= SIGNED_SIZEOF (ubuf.scbuf) - 2)
-                                       {       psf_log_printf (psf, " %M : %d (too big)\n", marker, chunk_size) ;
-                                               return SFE_INTERNAL ;
-                                               } ;
-
-                                       cptr = ubuf.cbuf ;
-                                       psf_binheader_readf (psf, "b", cptr, chunk_size + (chunk_size & 1)) ;
-                                       cptr [chunk_size] = 0 ;
-                                       psf_log_printf (psf, " %M : %s\n", marker, cptr) ;
-                                       psf_store_string (psf, SF_STR_COMMENT, cptr) ;
-                                       chunk_size += chunk_size & 1 ;
-                                       break ;
-
-                       case INST_MARKER :
-                                       if (chunk_size != SIZEOF_INST_CHUNK)
-                                       {       psf_log_printf (psf, " %M : %d (should be %d)\n", marker, chunk_size, SIZEOF_INST_CHUNK) ;
-                                               psf_binheader_readf (psf, "j", chunk_size) ;
-                                               break ;
-                                               } ;
-                                       psf_log_printf (psf, " %M : %d\n", marker, chunk_size) ;
-                                       {       unsigned char bytes [6] ;
-                                               short gain ;
-
-                                               if (psf->instrument == NULL && (psf->instrument = psf_instrument_alloc ()) == NULL)
-                                                       return SFE_MALLOC_FAILED ;
-
-                                               psf_binheader_readf (psf, "b", bytes, 6) ;
-                                               psf_log_printf (psf, "  Base Note : %u\n  Detune    : %u\n"
-                                                                                       "  Low  Note : %u\n  High Note : %u\n"
-                                                                                       "  Low  Vel. : %u\n  High Vel. : %u\n",
-                                                                                       bytes [0], bytes [1], bytes [2], bytes [3], bytes [4], bytes [5]) ;
-                                               psf->instrument->basenote = bytes [0] ;
-                                               psf->instrument->detune = bytes [1] ;
-                                               psf->instrument->key_lo = bytes [2] ;
-                                               psf->instrument->key_hi = bytes [3] ;
-                                               psf->instrument->velocity_lo = bytes [4] ;
-                                               psf->instrument->velocity_hi = bytes [5] ;
-                                               psf_binheader_readf (psf, "E2", &gain) ;
-                                               psf->instrument->gain = gain ;
-                                               psf_log_printf (psf, "  Gain (dB) : %d\n", gain) ;
-                                               } ;
-                                       {       short   mode ; /* 0 - no loop, 1 - forward looping, 2 - backward looping */
-                                               const char      *loop_mode ;
-                                               unsigned short begin, end ;
-
-                                               psf_binheader_readf (psf, "E222", &mode, &begin, &end) ;
-                                               loop_mode = get_loop_mode_str (mode) ;
-                                               mode = get_loop_mode (mode) ;
-                                               if (mode == SF_LOOP_NONE)
-                                               {       psf->instrument->loop_count = 0 ;
-                                                       psf->instrument->loops [0].mode = SF_LOOP_NONE ;
-                                                       }
-                                               else
-                                               {       psf->instrument->loop_count = 1 ;
-                                                       psf->instrument->loops [0].mode = SF_LOOP_FORWARD ;
-                                                       psf->instrument->loops [0].start = begin ;
-                                                       psf->instrument->loops [0].end = end ;
-                                                       psf->instrument->loops [0].count = 0 ;
-                                                       } ;
-                                               psf_log_printf (psf, "  Sustain\n   mode  : %d => %s\n   begin : %u\n   end   : %u\n",
-                                                                                       mode, loop_mode, begin, end) ;
-                                               psf_binheader_readf (psf, "E222", &mode, &begin, &end) ;
-                                               loop_mode = get_loop_mode_str (mode) ;
-                                               mode = get_loop_mode (mode) ;
-                                               if (mode == SF_LOOP_NONE)
-                                                       psf->instrument->loops [1].mode = SF_LOOP_NONE ;
-                                               else
-                                               {       psf->instrument->loop_count += 1 ;
-                                                       psf->instrument->loops [1].mode = SF_LOOP_FORWARD ;
-                                                       psf->instrument->loops [1].start = begin ;
-                                                       psf->instrument->loops [1].end = end ;
-                                                       psf->instrument->loops [1].count = 0 ;
-                                                       } ;
-                                               psf_log_printf (psf, "  Release\n   mode  : %d => %s\n   begin : %u\n   end   : %u\n",
-                                                                               mode, loop_mode, begin, end) ;
-                                               } ;
-                                       instr_found++ ;
-                                       break ;
-
-                       case basc_MARKER :
-                                       psf_log_printf (psf, " basc : %u\n", chunk_size) ;
-
-                                       if ((error = aiff_read_basc_chunk (psf, chunk_size)))
-                                               return error ;
-                                       break ;
-
-                       case MARK_MARKER :
-                                       psf_log_printf (psf, " %M : %d\n", marker, chunk_size) ;
-                                       {       unsigned short mark_id, n = 0 ;
-                                               unsigned int position ;
-
-                                               bytesread = psf_binheader_readf (psf, "E2", &n) ;
-                                               mark_count = n ;
-                                               psf_log_printf (psf, "  Count : %d\n", mark_count) ;
-                                               if (paiff->markstr != NULL)
-                                               {       psf_log_printf (psf, "*** Second MARK chunk found. Throwing away the first.\n") ;
-                                                       free (paiff->markstr) ;
-                                                       } ;
-                                               paiff->markstr = calloc (mark_count, sizeof (MARK_ID_POS)) ;
-                                               if (paiff->markstr == NULL)
-                                                       return SFE_MALLOC_FAILED ;
-
-                                               for (n = 0 ; n < mark_count && bytesread < chunk_size ; n++)
-                                               {       unsigned int pstr_len ;
-                                                       unsigned char ch ;
-
-                                                       bytesread += psf_binheader_readf (psf, "E241", &mark_id, &position, &ch) ;
-                                                       psf_log_printf (psf, "   Mark ID  : %u\n   Position : %u\n", mark_id, position) ;
-
-                                                       pstr_len = (ch & 1) ? ch : ch + 1 ;
-
-                                                       if (pstr_len < sizeof (ubuf.scbuf) - 1)
-                                                       {       bytesread += psf_binheader_readf (psf, "b", ubuf.scbuf, pstr_len) ;
-                                                               ubuf.scbuf [pstr_len] = 0 ;
-                                                               }
-                                                       else
-                                                       {       unsigned int read_len = pstr_len - (sizeof (ubuf.scbuf) - 1) ;
-                                                               bytesread += psf_binheader_readf (psf, "bj", ubuf.scbuf, read_len, pstr_len - read_len) ;
-                                                               ubuf.scbuf [sizeof (ubuf.scbuf) - 1] = 0 ;
-                                                               }
-
-                                                       psf_log_printf (psf, "   Name     : %s\n", ubuf.scbuf) ;
-
-                                                       paiff->markstr [n].markerID = mark_id ;
-                                                       paiff->markstr [n].position = position ;
-                                                       /*
-                                                       **      TODO if ubuf.scbuf is equal to
-                                                       **      either Beg_loop, Beg loop or beg loop and spam
-                                                       **      if (psf->instrument == NULL && (psf->instrument = psf_instrument_alloc ()) == NULL)
-                                                       **              return SFE_MALLOC_FAILED ;
-                                                       */
-                                                       } ;
-                                               } ;
-                                       mark_found++ ;
-                                       psf_binheader_readf (psf, "j", chunk_size - bytesread) ;
-                                       break ;
-
-                       case FVER_MARKER :
-                                       found_chunk |= HAVE_FVER ;
-                                       /* Fall through to next case. */
-
-                       case SFX_MARKER :
-                                       psf_log_printf (psf, " %M : %d\n", marker, chunk_size) ;
-                                       psf_binheader_readf (psf, "j", chunk_size) ;
-                                       break ;
-
-                       case NONE_MARKER :
-                                       /* Fix for broken AIFC files with incorrect COMM chunk length. */
-                                       chunk_size = (chunk_size >> 24) - 3 ;
-                                       psf_log_printf (psf, " %M : %d\n", marker, chunk_size) ;
-                                       psf_binheader_readf (psf, "j", make_size_t (chunk_size)) ;
-                                       break ;
-
-                       case CHAN_MARKER :
-                                       if (chunk_size < 12)
-                                       {       psf_log_printf (psf, " %M : %d (should be >= 12)\n", marker, chunk_size) ;
-                                               psf_binheader_readf (psf, "j", chunk_size) ;
-                                               break ;
-                                               }
-
-                                       psf_log_printf (psf, " %M : %d\n", marker, chunk_size) ;
-
-                                       if ((error = aiff_read_chanmap (psf, chunk_size)))
-                                               return error ;
-                                       break ;
-
-                       default :
-                                       if (psf_isprint ((marker >> 24) & 0xFF) && psf_isprint ((marker >> 16) & 0xFF)
-                                               && psf_isprint ((marker >> 8) & 0xFF) && psf_isprint (marker & 0xFF))
-                                       {       psf_log_printf (psf, " %M : %d (unknown marker)\n", marker, chunk_size) ;
-
-                                               psf_binheader_readf (psf, "j", chunk_size) ;
-                                               break ;
-                                               } ;
-                                       if ((chunk_size = psf_ftell (psf)) & 0x03)
-                                       {       psf_log_printf (psf, "  Unknown chunk marker %X at position %d. Resyncing.\n", marker, chunk_size - 4) ;
-
-                                               psf_binheader_readf (psf, "j", -3) ;
-                                               break ;
-                                               } ;
-                                       psf_log_printf (psf, "*** Unknown chunk marker %X at position %D. Exiting parser.\n", marker, psf_ftell (psf)) ;
-                                       done = 1 ;
-                                       break ;
-                       } ;     /* switch (marker) */
-
-               if ((! psf->sf.seekable) && (found_chunk & HAVE_SSND))
-                       break ;
-
-               if (psf_ftell (psf) >= psf->filelength - (2 * SIGNED_SIZEOF (int32_t)))
-                       break ;
-               } ; /* while (1) */
-
-       if (instr_found && mark_found)
-       {       int j ;
-
-               for (j = 0 ; j < psf->instrument->loop_count ; j ++)
-               {       if (j < ARRAY_LEN (psf->instrument->loops))
-                       {       psf->instrument->loops [j].start = marker_to_position (paiff->markstr, psf->instrument->loops [j].start, mark_count) ;
-                               psf->instrument->loops [j].end = marker_to_position (paiff->markstr, psf->instrument->loops [j].end, mark_count) ;
-                               psf->instrument->loops [j].mode = SF_LOOP_FORWARD ;
-                               } ;
-                       } ;
-               } ;
-
-       if (! (found_chunk & HAVE_FORM))
-               return SFE_AIFF_NO_FORM ;
-
-       if (! (found_chunk & HAVE_AIFF))
-               return SFE_AIFF_COMM_NO_FORM ;
-
-       if (! (found_chunk & HAVE_COMM))
-               return SFE_AIFF_SSND_NO_COMM ;
-
-       if (! psf->dataoffset)
-               return SFE_AIFF_NO_DATA ;
-
-       return 0 ;
-} /* aiff_read_header */
-
-static int
-aiff_close (SF_PRIVATE *psf)
-{      AIFF_PRIVATE *paiff = psf->container_data ;
-
-       if (paiff != NULL && paiff->markstr != NULL)
-       {       free (paiff->markstr) ;
-               paiff->markstr = NULL ;
-               } ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       aiff_write_tailer (psf) ;
-               aiff_write_header (psf, SF_TRUE) ;
-               } ;
-
-       return 0 ;
-} /* aiff_close */
-
-static int
-aiff_read_comm_chunk (SF_PRIVATE *psf, COMM_CHUNK *comm_fmt)
-{      BUF_UNION       ubuf ;
-       int subformat, samplerate ;
-
-       ubuf.scbuf [0] = 0 ;
-
-       /* The COMM chunk has an int aligned to an odd word boundary. Some
-       ** procesors are not able to deal with this (ie bus fault) so we have
-       ** to take special care.
-       */
-
-       psf_binheader_readf (psf, "E242b", &(comm_fmt->numChannels), &(comm_fmt->numSampleFrames),
-                               &(comm_fmt->sampleSize), &(comm_fmt->sampleRate), SIGNED_SIZEOF (comm_fmt->sampleRate)) ;
-
-       if (comm_fmt->size > 0x10000 && (comm_fmt->size & 0xffff) == 0)
-       {       psf_log_printf (psf, " COMM : %d (0x%x) *** should be ", comm_fmt->size, comm_fmt->size) ;
-               comm_fmt->size = ENDSWAP_32 (comm_fmt->size) ;
-               psf_log_printf (psf, "%d (0x%x)\n", comm_fmt->size, comm_fmt->size) ;
-               }
-       else
-               psf_log_printf (psf, " COMM : %d\n", comm_fmt->size) ;
-
-       if (comm_fmt->size == SIZEOF_AIFF_COMM)
-               comm_fmt->encoding = NONE_MARKER ;
-       else if (comm_fmt->size == SIZEOF_AIFC_COMM_MIN)
-               psf_binheader_readf (psf, "Em", &(comm_fmt->encoding)) ;
-       else if (comm_fmt->size >= SIZEOF_AIFC_COMM)
-       {       unsigned char encoding_len ;
-               unsigned read_len ;
-
-               psf_binheader_readf (psf, "Em1", &(comm_fmt->encoding), &encoding_len) ;
-
-               comm_fmt->size = SF_MIN (sizeof (ubuf.scbuf), make_size_t (comm_fmt->size)) ;
-               memset (ubuf.scbuf, 0, comm_fmt->size) ;
-               read_len = comm_fmt->size - SIZEOF_AIFC_COMM + 1 ;
-               psf_binheader_readf (psf, "b", ubuf.scbuf, read_len) ;
-               ubuf.scbuf [read_len + 1] = 0 ;
-               } ;
-
-       samplerate = tenbytefloat2int (comm_fmt->sampleRate) ;
-
-       psf_log_printf (psf, "  Sample Rate : %d\n", samplerate) ;
-       psf_log_printf (psf, "  Frames      : %u%s\n", comm_fmt->numSampleFrames, (comm_fmt->numSampleFrames == 0 && psf->filelength > 104) ? " (Should not be 0)" : "") ;
-       psf_log_printf (psf, "  Channels    : %d\n", comm_fmt->numChannels) ;
-
-       /* Found some broken 'fl32' files with comm.samplesize == 16. Fix it here. */
-       if ((comm_fmt->encoding == fl32_MARKER || comm_fmt->encoding == FL32_MARKER) && comm_fmt->sampleSize != 32)
-       {       psf_log_printf (psf, "  Sample Size : %d (should be 32)\n", comm_fmt->sampleSize) ;
-               comm_fmt->sampleSize = 32 ;
-               }
-       else if ((comm_fmt->encoding == fl64_MARKER || comm_fmt->encoding == FL64_MARKER) && comm_fmt->sampleSize != 64)
-       {       psf_log_printf (psf, "  Sample Size : %d (should be 64)\n", comm_fmt->sampleSize) ;
-               comm_fmt->sampleSize = 64 ;
-               }
-       else
-               psf_log_printf (psf, "  Sample Size : %d\n", comm_fmt->sampleSize) ;
-
-       subformat = s_bitwidth_to_subformat (comm_fmt->sampleSize) ;
-
-       psf->sf.samplerate = samplerate ;
-       psf->sf.frames = comm_fmt->numSampleFrames ;
-       psf->sf.channels = comm_fmt->numChannels ;
-       psf->bytewidth = BITWIDTH2BYTES (comm_fmt->sampleSize) ;
-
-       psf->endian = SF_ENDIAN_BIG ;
-
-       switch (comm_fmt->encoding)
-       {       case NONE_MARKER :
-                               psf->sf.format = (SF_FORMAT_AIFF | subformat) ;
-                               break ;
-
-               case twos_MARKER :
-               case in24_MARKER :
-               case in32_MARKER :
-                               psf->sf.format = (SF_ENDIAN_BIG | SF_FORMAT_AIFF | subformat) ;
-                               break ;
-
-               case sowt_MARKER :
-               case ni24_MARKER :
-               case ni32_MARKER :
-                               psf->endian = SF_ENDIAN_LITTLE ;
-                               psf->sf.format = (SF_ENDIAN_LITTLE | SF_FORMAT_AIFF | subformat) ;
-                               break ;
-
-               case fl32_MARKER :
-               case FL32_MARKER :
-                               psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_FLOAT) ;
-                               break ;
-
-               case ulaw_MARKER :
-               case ULAW_MARKER :
-                               psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_ULAW) ;
-                               break ;
-
-               case alaw_MARKER :
-               case ALAW_MARKER :
-                               psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_ALAW) ;
-                               break ;
-
-               case fl64_MARKER :
-               case FL64_MARKER :
-                               psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_DOUBLE) ;
-                               break ;
-
-               case raw_MARKER :
-                               psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_PCM_U8) ;
-                               break ;
-
-               case DWVW_MARKER :
-                               psf->sf.format = SF_FORMAT_AIFF ;
-                               switch (comm_fmt->sampleSize)
-                               {       case 12 :
-                                               psf->sf.format |= SF_FORMAT_DWVW_12 ;
-                                               break ;
-                                       case 16 :
-                                               psf->sf.format |= SF_FORMAT_DWVW_16 ;
-                                               break ;
-                                       case 24 :
-                                               psf->sf.format |= SF_FORMAT_DWVW_24 ;
-                                               break ;
-
-                                       default :
-                                               psf->sf.format |= SF_FORMAT_DWVW_N ;
-                                               break ;
-                                       } ;
-                               break ;
-
-               case GSM_MARKER :
-                               psf->sf.format = SF_FORMAT_AIFF ;
-                               psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_GSM610) ;
-                               break ;
-
-
-               case ima4_MARKER :
-                               psf->endian = SF_ENDIAN_BIG ;
-                               psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_IMA_ADPCM) ;
-                               break ;
-
-               default :
-                       psf_log_printf (psf, "AIFC : Unimplemented format : %M\n", comm_fmt->encoding) ;
-                       return SFE_UNIMPLEMENTED ;
-               } ;
-
-       if (! ubuf.scbuf [0])
-               psf_log_printf (psf, "  Encoding    : %M\n", comm_fmt->encoding) ;
-       else
-               psf_log_printf (psf, "  Encoding    : %M => %s\n", comm_fmt->encoding, ubuf.scbuf) ;
-
-       return 0 ;
-} /* aiff_read_comm_chunk */
-
-
-/*==========================================================================================
-*/
-
-static void
-aiff_rewrite_header (SF_PRIVATE *psf)
-{
-       /* Assuming here that the header has already been written and just
-       ** needs to be corrected for new data length. That means that we
-       ** only change the length fields of the FORM and SSND chunks ;
-       ** everything else can be skipped over.
-       */
-       int k, ch, comm_size, comm_frames ;
-
-       psf_fseek (psf, 0, SEEK_SET) ;
-       psf_fread (psf->header, psf->dataoffset, 1, psf) ;
-
-       psf->headindex = 0 ;
-
-       /* FORM chunk. */
-       psf_binheader_writef (psf, "Etm8", FORM_MARKER, psf->filelength - 8) ;
-
-       /* COMM chunk. */
-       if ((k = psf_find_read_chunk_m32 (&psf->rchunks, COMM_MARKER)) >= 0)
-       {       psf->headindex = psf->rchunks.chunks [k].offset - 8 ;
-               comm_frames = psf->sf.frames ;
-               comm_size = psf->rchunks.chunks [k].len ;
-               psf_binheader_writef (psf, "Em42t4", COMM_MARKER, comm_size, psf->sf.channels, comm_frames) ;
-               } ;
-
-       /* PEAK chunk. */
-       if ((k = psf_find_read_chunk_m32 (&psf->rchunks, PEAK_MARKER)) >= 0)
-       {       psf->headindex = psf->rchunks.chunks [k].offset - 8 ;
-               psf_binheader_writef (psf, "Em4", PEAK_MARKER, AIFF_PEAK_CHUNK_SIZE (psf->sf.channels)) ;
-               psf_binheader_writef (psf, "E44", 1, time (NULL)) ;
-               for (ch = 0 ; ch < psf->sf.channels ; ch++)
-                       psf_binheader_writef (psf, "Eft8", (float) psf->peak_info->peaks [ch].value, psf->peak_info->peaks [ch].position) ;
-               } ;
-
-
-       /* SSND chunk. */
-       if ((k = psf_find_read_chunk_m32 (&psf->rchunks, SSND_MARKER)) >= 0)
-       {       psf->headindex = psf->rchunks.chunks [k].offset - 8 ;
-               psf_binheader_writef (psf, "Etm8", SSND_MARKER, psf->datalength + SIZEOF_SSND_CHUNK) ;
-               } ;
-
-       /* Header mangling complete so write it out. */
-       psf_fseek (psf, 0, SEEK_SET) ;
-       psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-       return ;
-} /* aiff_rewrite_header */
-
-static int
-aiff_write_header (SF_PRIVATE *psf, int calc_length)
-{      sf_count_t              current ;
-       AIFF_PRIVATE    *paiff ;
-       unsigned char   comm_sample_rate [10], comm_zero_bytes [2] = { 0, 0 } ;
-       unsigned int    comm_type, comm_size, comm_encoding, comm_frames = 0, uk ;
-       int                             k, endian, has_data = SF_FALSE ;
-       short                   bit_width ;
-
-       if ((paiff = psf->container_data) == NULL)
-               return SFE_INTERNAL ;
-
-       current = psf_ftell (psf) ;
-
-       if (current > psf->dataoffset)
-               has_data = SF_TRUE ;
-
-       if (calc_length)
-       {       psf->filelength = psf_get_filelen (psf) ;
-
-               psf->datalength = psf->filelength - psf->dataoffset ;
-               if (psf->dataend)
-                       psf->datalength -= psf->filelength - psf->dataend ;
-
-               if (psf->bytewidth > 0)
-                       psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-               } ;
-
-       if (psf->file.mode == SFM_RDWR && psf->dataoffset > 0 && psf->rchunks.count > 0)
-       {       aiff_rewrite_header (psf) ;
-               if (current > 0)
-                       psf_fseek (psf, current, SEEK_SET) ;
-               return 0 ;
-               } ;
-
-       endian = SF_ENDIAN (psf->sf.format) ;
-       if (CPU_IS_LITTLE_ENDIAN && endian == SF_ENDIAN_CPU)
-               endian = SF_ENDIAN_LITTLE ;
-
-       /* Standard value here. */
-       bit_width = psf->bytewidth * 8 ;
-       comm_frames = (psf->sf.frames > 0xFFFFFFFF) ? 0xFFFFFFFF : psf->sf.frames ;
-
-       switch (SF_CODEC (psf->sf.format) | endian)
-       {       case SF_FORMAT_PCM_S8 | SF_ENDIAN_BIG :
-                       psf->endian = SF_ENDIAN_BIG ;
-                       comm_type = AIFC_MARKER ;
-                       comm_size = SIZEOF_AIFC_COMM ;
-                       comm_encoding = twos_MARKER ;
-                       break ;
-
-               case SF_FORMAT_PCM_S8 | SF_ENDIAN_LITTLE :
-                       psf->endian = SF_ENDIAN_LITTLE ;
-                       comm_type = AIFC_MARKER ;
-                       comm_size = SIZEOF_AIFC_COMM ;
-                       comm_encoding = sowt_MARKER ;
-                       break ;
-
-               case SF_FORMAT_PCM_16 | SF_ENDIAN_BIG :
-                       psf->endian = SF_ENDIAN_BIG ;
-                       comm_type = AIFC_MARKER ;
-                       comm_size = SIZEOF_AIFC_COMM ;
-                       comm_encoding = twos_MARKER ;
-                       break ;
-
-               case SF_FORMAT_PCM_16 | SF_ENDIAN_LITTLE :
-                       psf->endian = SF_ENDIAN_LITTLE ;
-                       comm_type = AIFC_MARKER ;
-                       comm_size = SIZEOF_AIFC_COMM ;
-                       comm_encoding = sowt_MARKER ;
-                       break ;
-
-               case SF_FORMAT_PCM_24 | SF_ENDIAN_BIG :
-                       psf->endian = SF_ENDIAN_BIG ;
-                       comm_type = AIFC_MARKER ;
-                       comm_size = SIZEOF_AIFC_COMM ;
-                       comm_encoding = in24_MARKER ;
-                       break ;
-
-               case SF_FORMAT_PCM_24 | SF_ENDIAN_LITTLE :
-                       psf->endian = SF_ENDIAN_LITTLE ;
-                       comm_type = AIFC_MARKER ;
-                       comm_size = SIZEOF_AIFC_COMM ;
-                       comm_encoding = ni24_MARKER ;
-                       break ;
-
-               case SF_FORMAT_PCM_32 | SF_ENDIAN_BIG :
-                       psf->endian = SF_ENDIAN_BIG ;
-                       comm_type = AIFC_MARKER ;
-                       comm_size = SIZEOF_AIFC_COMM ;
-                       comm_encoding = in32_MARKER ;
-                       break ;
-
-               case SF_FORMAT_PCM_32 | SF_ENDIAN_LITTLE :
-                       psf->endian = SF_ENDIAN_LITTLE ;
-                       comm_type = AIFC_MARKER ;
-                       comm_size = SIZEOF_AIFC_COMM ;
-                       comm_encoding = ni32_MARKER ;
-                       break ;
-
-               case SF_FORMAT_PCM_S8 :                 /* SF_ENDIAN_FILE */
-               case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_PCM_24 :
-               case SF_FORMAT_PCM_32 :
-                       psf->endian = SF_ENDIAN_BIG ;
-                       comm_type = AIFF_MARKER ;
-                       comm_size = SIZEOF_AIFF_COMM ;
-                       comm_encoding = 0 ;
-                       break ;
-
-               case SF_FORMAT_FLOAT :                                  /* Big endian floating point. */
-                               psf->endian = SF_ENDIAN_BIG ;
-                               comm_type = AIFC_MARKER ;
-                               comm_size = SIZEOF_AIFC_COMM ;
-                               comm_encoding = FL32_MARKER ;   /* Use 'FL32' because its easier to read. */
-                               break ;
-
-               case SF_FORMAT_DOUBLE :                                 /* Big endian double precision floating point. */
-                               psf->endian = SF_ENDIAN_BIG ;
-                               comm_type = AIFC_MARKER ;
-                               comm_size = SIZEOF_AIFC_COMM ;
-                               comm_encoding = FL64_MARKER ;   /* Use 'FL64' because its easier to read. */
-                               break ;
-
-               case SF_FORMAT_ULAW :
-                               psf->endian = SF_ENDIAN_BIG ;
-                               comm_type = AIFC_MARKER ;
-                               comm_size = SIZEOF_AIFC_COMM ;
-                               comm_encoding = ulaw_MARKER ;
-                               break ;
-
-               case SF_FORMAT_ALAW :
-                               psf->endian = SF_ENDIAN_BIG ;
-                               comm_type = AIFC_MARKER ;
-                               comm_size = SIZEOF_AIFC_COMM ;
-                               comm_encoding = alaw_MARKER ;
-                               break ;
-
-               case SF_FORMAT_PCM_U8 :
-                               psf->endian = SF_ENDIAN_BIG ;
-                               comm_type = AIFC_MARKER ;
-                               comm_size = SIZEOF_AIFC_COMM ;
-                               comm_encoding = raw_MARKER ;
-                               break ;
-
-               case SF_FORMAT_DWVW_12 :
-                               psf->endian = SF_ENDIAN_BIG ;
-                               comm_type = AIFC_MARKER ;
-                               comm_size = SIZEOF_AIFC_COMM ;
-                               comm_encoding = DWVW_MARKER ;
-
-                               /* Override standard value here.*/
-                               bit_width = 12 ;
-                               break ;
-
-               case SF_FORMAT_DWVW_16 :
-                               psf->endian = SF_ENDIAN_BIG ;
-                               comm_type = AIFC_MARKER ;
-                               comm_size = SIZEOF_AIFC_COMM ;
-                               comm_encoding = DWVW_MARKER ;
-
-                               /* Override standard value here.*/
-                               bit_width = 16 ;
-                               break ;
-
-               case SF_FORMAT_DWVW_24 :
-                               psf->endian = SF_ENDIAN_BIG ;
-                               comm_type = AIFC_MARKER ;
-                               comm_size = SIZEOF_AIFC_COMM ;
-                               comm_encoding = DWVW_MARKER ;
-
-                               /* Override standard value here.*/
-                               bit_width = 24 ;
-                               break ;
-
-               case SF_FORMAT_GSM610 :
-                               psf->endian = SF_ENDIAN_BIG ;
-                               comm_type = AIFC_MARKER ;
-                               comm_size = SIZEOF_AIFC_COMM ;
-                               comm_encoding = GSM_MARKER ;
-
-                               /* Override standard value here.*/
-                               bit_width = 16 ;
-                               break ;
-
-               case SF_FORMAT_IMA_ADPCM :
-                               psf->endian = SF_ENDIAN_BIG ;
-                               comm_type = AIFC_MARKER ;
-                               comm_size = SIZEOF_AIFC_COMM ;
-                               comm_encoding = ima4_MARKER ;
-
-                               /* Override standard value here.*/
-                               bit_width = 16 ;
-                               comm_frames = psf->sf.frames / AIFC_IMA4_SAMPLES_PER_BLOCK ;
-                               break ;
-
-               default : return SFE_BAD_OPEN_FORMAT ;
-               } ;
-
-       /* Reset the current header length to zero. */
-       psf->header [0] = 0 ;
-       psf->headindex = 0 ;
-       psf_fseek (psf, 0, SEEK_SET) ;
-
-       psf_binheader_writef (psf, "Etm8", FORM_MARKER, psf->filelength - 8) ;
-
-       /* Write AIFF/AIFC marker and COM chunk. */
-       if (comm_type == AIFC_MARKER)
-               /* AIFC must have an FVER chunk. */
-               psf_binheader_writef (psf, "Emm44", comm_type, FVER_MARKER, 4, 0xA2805140) ;
-       else
-               psf_binheader_writef (psf, "Em", comm_type) ;
-
-       paiff->comm_offset = psf->headindex - 8 ;
-
-       memset (comm_sample_rate, 0, sizeof (comm_sample_rate)) ;
-       uint2tenbytefloat (psf->sf.samplerate, comm_sample_rate) ;
-
-       psf_binheader_writef (psf, "Em42t42", COMM_MARKER, comm_size, psf->sf.channels, comm_frames, bit_width) ;
-       psf_binheader_writef (psf, "b", comm_sample_rate, sizeof (comm_sample_rate)) ;
-
-       /* AIFC chunks have some extra data. */
-       if (comm_type == AIFC_MARKER)
-               psf_binheader_writef (psf, "mb", comm_encoding, comm_zero_bytes, sizeof (comm_zero_bytes)) ;
-
-       if (psf->channel_map && paiff->chanmap_tag)
-               psf_binheader_writef (psf, "Em4444", CHAN_MARKER, 12, paiff->chanmap_tag, 0, 0) ;
-
-       if (psf->instrument != NULL)
-       {       MARK_ID_POS     m [4] ;
-               INST_CHUNK ch ;
-               unsigned short ct = 0 ;
-
-               memset (m, 0, sizeof (m)) ;
-               memset (&ch, 0, sizeof (ch)) ;
-
-               ch.baseNote = psf->instrument->basenote ;
-               ch.detune = psf->instrument->detune ;
-               ch.lowNote = psf->instrument->key_lo ;
-               ch.highNote = psf->instrument->key_hi ;
-               ch.lowVelocity = psf->instrument->velocity_lo ;
-               ch.highVelocity = psf->instrument->velocity_hi ;
-               ch.gain = psf->instrument->gain ;
-               if (psf->instrument->loops [0].mode != SF_LOOP_NONE)
-               {       ch.sustain_loop.playMode = 1 ;
-                       ch.sustain_loop.beginLoop = ct ;
-                       m [0].markerID = ct++ ;
-                       m [0].position = psf->instrument->loops [0].start ;
-                       ch.sustain_loop.endLoop = ct ;
-                       m [1].markerID = ct++ ;
-                       m [1].position = psf->instrument->loops [0].end ;
-                       } ;
-               if (psf->instrument->loops [1].mode != SF_LOOP_NONE)
-               {       ch.release_loop.playMode = 1 ;
-                       ch.release_loop.beginLoop = ct ;
-                       m [2].markerID = ct++ ;
-                       m [2].position = psf->instrument->loops [1].start ;
-                       ch.release_loop.endLoop = ct ;
-                       m [3].markerID = ct++ ;
-                       m [3].position = psf->instrument->loops [1].end ;
-                       }
-               else
-               {       ch.release_loop.playMode = 0 ;
-                       ch.release_loop.beginLoop = 0 ;
-                       ch.release_loop.endLoop = 0 ;
-                       } ;
-
-               psf_binheader_writef (psf, "Em4111111", INST_MARKER, SIZEOF_INST_CHUNK, ch.baseNote, ch.detune,
-                                               ch.lowNote, ch.highNote, ch.lowVelocity, ch.highVelocity) ;
-               psf_binheader_writef (psf, "2222222", ch.gain, ch.sustain_loop.playMode,
-                                               ch.sustain_loop.beginLoop, ch.sustain_loop.endLoop, ch.release_loop.playMode,
-                                               ch.release_loop.beginLoop, ch.release_loop.endLoop) ;
-
-               if (ct == 2)
-                       psf_binheader_writef (psf, "Em42241b241b",
-                                       MARK_MARKER, 2 + 2 * (2 + 4 + 1 + 9), 2,
-                                       m [0].markerID, m [0].position, 8, "beg loop", make_size_t (9),
-                                       m [1].markerID, m [1].position, 8, "end loop", make_size_t (9)) ;
-               else if (ct == 4)
-                       psf_binheader_writef (psf, "Em42 241b 241b 241b 241b",
-                                       MARK_MARKER, 2 + 4 * (2 + 4 + 1 + 9), 4,
-                                       m [0].markerID, m [0].position, 8, "beg loop", make_size_t (9),
-                                       m [1].markerID, m [1].position, 8, "end loop", make_size_t (9),
-                                       m [2].markerID, m [2].position, 8, "beg loop", make_size_t (9),
-                                       m [3].markerID, m [3].position, 8, "end loop", make_size_t (9)) ;
-               } ;
-
-       if (psf->strings.flags & SF_STR_LOCATE_START)
-               aiff_write_strings (psf, SF_STR_LOCATE_START) ;
-
-       if (psf->peak_info != NULL && psf->peak_info->peak_loc == SF_PEAK_START)
-       {       psf_binheader_writef (psf, "Em4", PEAK_MARKER, AIFF_PEAK_CHUNK_SIZE (psf->sf.channels)) ;
-               psf_binheader_writef (psf, "E44", 1, time (NULL)) ;
-               for (k = 0 ; k < psf->sf.channels ; k++)
-                       psf_binheader_writef (psf, "Eft8", (float) psf->peak_info->peaks [k].value, psf->peak_info->peaks [k].position) ;
-               } ;
-
-       /* Write custom headers. */
-       for (uk = 0 ; uk < psf->wchunks.used ; uk++)
-               psf_binheader_writef (psf, "Em4b", psf->wchunks.chunks [uk].mark32, psf->wchunks.chunks [uk].len, psf->wchunks.chunks [uk].data, make_size_t (psf->wchunks.chunks [uk].len)) ;
-
-       /* Write SSND chunk. */
-       paiff->ssnd_offset = psf->headindex ;
-       psf_binheader_writef (psf, "Etm844", SSND_MARKER, psf->datalength + SIZEOF_SSND_CHUNK, 0, 0) ;
-
-       /* Header construction complete so write it out. */
-       psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-       if (psf->error)
-               return psf->error ;
-
-       if (has_data && psf->dataoffset != psf->headindex)
-               return psf->error = SFE_INTERNAL ;
-
-       psf->dataoffset = psf->headindex ;
-
-       if (! has_data)
-               psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-       else if (current > 0)
-               psf_fseek (psf, current, SEEK_SET) ;
-
-       return psf->error ;
-} /* aiff_write_header */
-
-static int
-aiff_write_tailer (SF_PRIVATE *psf)
-{      int             k ;
-
-       /* Reset the current header length to zero. */
-       psf->header [0] = 0 ;
-       psf->headindex = 0 ;
-
-       psf->dataend = psf_fseek (psf, 0, SEEK_END) ;
-
-       /* Make sure tailer data starts at even byte offset. Pad if necessary. */
-       if (psf->dataend % 2 == 1)
-       {       psf_fwrite (psf->header, 1, 1, psf) ;
-               psf->dataend ++ ;
-               } ;
-
-       if (psf->peak_info != NULL && psf->peak_info->peak_loc == SF_PEAK_END)
-       {       psf_binheader_writef (psf, "Em4", PEAK_MARKER, AIFF_PEAK_CHUNK_SIZE (psf->sf.channels)) ;
-               psf_binheader_writef (psf, "E44", 1, time (NULL)) ;
-               for (k = 0 ; k < psf->sf.channels ; k++)
-                       psf_binheader_writef (psf, "Eft8", (float) psf->peak_info->peaks [k].value, psf->peak_info->peaks [k].position) ;
-               } ;
-
-       if (psf->strings.flags & SF_STR_LOCATE_END)
-               aiff_write_strings (psf, SF_STR_LOCATE_END) ;
-
-       /* Write the tailer. */
-       if (psf->headindex > 0)
-               psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-       return 0 ;
-} /* aiff_write_tailer */
-
-static void
-aiff_write_strings (SF_PRIVATE *psf, int location)
-{      int     k, slen ;
-
-       for (k = 0 ; k < SF_MAX_STRINGS ; k++)
-       {       if (psf->strings.data [k].type == 0)
-                       break ;
-
-               if (psf->strings.data [k].flags != location)
-                       continue ;
-
-               switch (psf->strings.data [k].type)
-               {       case SF_STR_SOFTWARE :
-                               slen = strlen (psf->strings.storage + psf->strings.data [k].offset) ;
-                               psf_binheader_writef (psf, "Em4mb", APPL_MARKER, slen + 4, m3ga_MARKER, psf->strings.storage + psf->strings.data [k].offset, make_size_t (slen + (slen & 1))) ;
-                               break ;
-
-                       case SF_STR_TITLE :
-                               psf_binheader_writef (psf, "EmS", NAME_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-                               break ;
-
-                       case SF_STR_COPYRIGHT :
-                               psf_binheader_writef (psf, "EmS", c_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-                               break ;
-
-                       case SF_STR_ARTIST :
-                               psf_binheader_writef (psf, "EmS", AUTH_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-                               break ;
-
-                       case SF_STR_COMMENT :
-                               psf_binheader_writef (psf, "EmS", ANNO_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-                               break ;
-
-                       /*
-                       case SF_STR_DATE :
-                               psf_binheader_writef (psf, "Ems", ICRD_MARKER, psf->strings.data [k].str) ;
-                               break ;
-                       */
-                       } ;
-               } ;
-
-       return ;
-} /* aiff_write_strings */
-
-static int
-aiff_command (SF_PRIVATE * psf, int command, void * UNUSED (data), int UNUSED (datasize))
-{      AIFF_PRIVATE    *paiff ;
-
-       if ((paiff = psf->container_data) == NULL)
-               return SFE_INTERNAL ;
-
-       switch (command)
-       {       case SFC_SET_CHANNEL_MAP_INFO :
-                       paiff->chanmap_tag = aiff_caf_find_channel_layout_tag (psf->channel_map, psf->sf.channels) ;
-                       return (paiff->chanmap_tag != 0) ;
-
-               default :
-                       break ;
-       } ;
-
-       return 0 ;
-} /* aiff_command */
-
-static const char*
-get_loop_mode_str (short mode)
-{      switch (mode)
-       {       case 0 : return "none" ;
-               case 1 : return "forward" ;
-               case 2 : return "backward" ;
-               } ;
-
-       return "*** unknown" ;
-} /* get_loop_mode_str */
-
-static short
-get_loop_mode (short mode)
-{      switch (mode)
-       {       case 0 : return SF_LOOP_NONE ;
-               case 1 : return SF_LOOP_FORWARD ;
-               case 2 : return SF_LOOP_BACKWARD ;
-               } ;
-
-       return SF_LOOP_NONE ;
-} /* get_loop_mode */
-
-/*==========================================================================================
-**     Rough hack at converting from 80 bit IEEE float in AIFF header to an int and
-**     back again. It assumes that all sample rates are between 1 and 800MHz, which
-**     should be OK as other sound file formats use a 32 bit integer to store sample
-**     rate.
-**     There is another (probably better) version in the source code to the SoX but it
-**     has a copyright which probably prevents it from being allowable as GPL/LGPL.
-*/
-
-static int
-tenbytefloat2int (unsigned char *bytes)
-{      int val = 3 ;
-
-       if (bytes [0] & 0x80)   /* Negative number. */
-               return 0 ;
-
-       if (bytes [0] <= 0x3F)  /* Less than 1. */
-               return 1 ;
-
-       if (bytes [0] > 0x40)   /* Way too big. */
-               return 0x4000000 ;
-
-       if (bytes [0] == 0x40 && bytes [1] > 0x1C) /* Too big. */
-               return 800000000 ;
-
-       /* Ok, can handle it. */
-
-       val = (bytes [2] << 23) | (bytes [3] << 15) | (bytes [4] << 7) | (bytes [5] >> 1) ;
-
-       val >>= (29 - bytes [1]) ;
-
-       return val ;
-} /* tenbytefloat2int */
-
-static void
-uint2tenbytefloat (unsigned int num, unsigned char *bytes)
-{      unsigned int mask = 0x40000000 ;
-       int     count ;
-
-       if (num <= 1)
-       {       bytes [0] = 0x3F ;
-               bytes [1] = 0xFF ;
-               bytes [2] = 0x80 ;
-               return ;
-               } ;
-
-       bytes [0] = 0x40 ;
-
-       if (num >= mask)
-       {       bytes [1] = 0x1D ;
-               return ;
-               } ;
-
-       for (count = 0 ; count <= 32 ; count ++)
-       {       if (num & mask)
-                       break ;
-               mask >>= 1 ;
-               } ;
-
-       num <<= count + 1 ;
-       bytes [1] = 29 - count ;
-       bytes [2] = (num >> 24) & 0xFF ;
-       bytes [3] = (num >> 16) & 0xFF ;
-       bytes [4] = (num >> 8) & 0xFF ;
-       bytes [5] = num & 0xFF ;
-
-} /* uint2tenbytefloat */
-
-static int
-aiff_read_basc_chunk (SF_PRIVATE * psf, int datasize)
-{      const char * type_str ;
-       basc_CHUNK bc ;
-       int count ;
-
-       count = psf_binheader_readf (psf, "E442", &bc.version, &bc.numBeats, &bc.rootNote) ;
-       count += psf_binheader_readf (psf, "E222", &bc.scaleType, &bc.sigNumerator, &bc.sigDenominator) ;
-       count += psf_binheader_readf (psf, "E2j", &bc.loopType, datasize - sizeof (bc)) ;
-
-       psf_log_printf (psf, "  Version ? : %u\n  Num Beats : %u\n  Root Note : 0x%x\n",
-                                               bc.version, bc.numBeats, bc.rootNote) ;
-
-       switch (bc.scaleType)
-       {       case basc_SCALE_MINOR :
-                               type_str = "MINOR" ;
-                               break ;
-               case basc_SCALE_MAJOR :
-                               type_str = "MAJOR" ;
-                               break ;
-               case basc_SCALE_NEITHER :
-                               type_str = "NEITHER" ;
-                               break ;
-               case basc_SCALE_BOTH :
-                               type_str = "BOTH" ;
-                               break ;
-               default :
-                               type_str = "!!WRONG!!" ;
-                               break ;
-               } ;
-
-       psf_log_printf (psf, "  ScaleType : 0x%x (%s)\n", bc.scaleType, type_str) ;
-       psf_log_printf (psf, "  Time Sig  : %d/%d\n", bc.sigNumerator, bc.sigDenominator) ;
-
-       switch (bc.loopType)
-       {       case basc_TYPE_ONE_SHOT :
-                               type_str = "One Shot" ;
-                               break ;
-               case basc_TYPE_LOOP :
-                               type_str = "Loop" ;
-                               break ;
-               default:
-                               type_str = "!!WRONG!!" ;
-                               break ;
-               } ;
-
-       psf_log_printf (psf, "  Loop Type : 0x%x (%s)\n", bc.loopType, type_str) ;
-
-       if ((psf->loop_info = calloc (1, sizeof (SF_LOOP_INFO))) == NULL)
-               return SFE_MALLOC_FAILED ;
-
-       psf->loop_info->time_sig_num    = bc.sigNumerator ;
-       psf->loop_info->time_sig_den    = bc.sigDenominator ;
-       psf->loop_info->loop_mode               = (bc.loopType == basc_TYPE_ONE_SHOT) ? SF_LOOP_NONE : SF_LOOP_FORWARD ;
-       psf->loop_info->num_beats               = bc.numBeats ;
-
-       /* Can always be recalculated from other known fields. */
-       psf->loop_info->bpm = (1.0 / psf->sf.frames) * psf->sf.samplerate
-                                                       * ((bc.numBeats * 4.0) / bc.sigDenominator) * 60.0 ;
-       psf->loop_info->root_key = bc.rootNote ;
-
-       if (count < datasize)
-               psf_binheader_readf (psf, "j", datasize - count) ;
-
-       return 0 ;
-} /* aiff_read_basc_chunk */
-
-
-static int
-aiff_read_chanmap (SF_PRIVATE * psf, unsigned dword)
-{      const AIFF_CAF_CHANNEL_MAP * map_info ;
-       unsigned channel_bitmap, channel_decriptions, bytesread ;
-       int layout_tag ;
-
-       bytesread = psf_binheader_readf (psf, "444", &layout_tag, &channel_bitmap, &channel_decriptions) ;
-
-       if ((map_info = aiff_caf_of_channel_layout_tag (layout_tag)) == NULL)
-               return 0 ;
-
-       psf_log_printf (psf, "  Tag    : %x\n", layout_tag) ;
-       if (map_info)
-               psf_log_printf (psf, "  Layout : %s\n", map_info->name) ;
-
-       if (bytesread < dword)
-               psf_binheader_readf (psf, "j", dword - bytesread) ;
-
-       if (map_info->channel_map != NULL)
-       {       size_t chanmap_size = psf->sf.channels * sizeof (psf->channel_map [0]) ;
-
-               free (psf->channel_map) ;
-
-               if ((psf->channel_map = malloc (chanmap_size)) == NULL)
-                       return SFE_MALLOC_FAILED ;
-
-               memcpy (psf->channel_map, map_info->channel_map, chanmap_size) ;
-               } ;
-
-       return 0 ;
-} /* aiff_read_chanmap */
-
-/*==============================================================================
-*/
-
-static int
-aiff_set_chunk (SF_PRIVATE *psf, const SF_CHUNK_INFO * chunk_info)
-{      return psf_save_write_chunk (&psf->wchunks, chunk_info) ;
-} /* aiff_set_chunk */
-
-static SF_CHUNK_ITERATOR *
-aiff_next_chunk_iterator (SF_PRIVATE *psf, SF_CHUNK_ITERATOR * iterator)
-{      return psf_next_chunk_iterator (&psf->rchunks, iterator) ;
-} /* aiff_next_chunk_iterator */
-
-static int
-aiff_get_chunk_size (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info)
-{      int indx ;
-
-       if ((indx = psf_find_read_chunk_iterator (&psf->rchunks, iterator)) < 0)
-               return SFE_UNKNOWN_CHUNK ;
-
-       chunk_info->datalen = psf->rchunks.chunks [indx].len ;
-
-       return SFE_NO_ERROR ;
-} /* aiff_get_chunk_size */
-
-static int
-aiff_get_chunk_data (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info)
-{      sf_count_t pos ;
-       int indx ;
-
-       if ((indx = psf_find_read_chunk_iterator (&psf->rchunks, iterator)) < 0)
-               return SFE_UNKNOWN_CHUNK ;
-
-       if (chunk_info->data == NULL)
-               return SFE_BAD_CHUNK_DATA_PTR ;
-
-       chunk_info->id_size = psf->rchunks.chunks [indx].id_size ;
-       memcpy (chunk_info->id, psf->rchunks.chunks [indx].id, sizeof (chunk_info->id) / sizeof (*chunk_info->id)) ;
-
-       pos = psf_ftell (psf) ;
-       psf_fseek (psf, psf->rchunks.chunks [indx].offset, SEEK_SET) ;
-       psf_fread (chunk_info->data, SF_MIN (chunk_info->datalen, psf->rchunks.chunks [indx].len), 1, psf) ;
-       psf_fseek (psf, pos, SEEK_SET) ;
-
-       return SFE_NO_ERROR ;
-} /* aiff_get_chunk_data */
diff --git a/libs/libsndfile/src/alac.c b/libs/libsndfile/src/alac.c
deleted file mode 100644 (file)
index 747e032..0000000
+++ /dev/null
@@ -1,964 +0,0 @@
-/*
-** Copyright (C) 2011-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <stdlib.h>
-#include       <string.h>
-#include       <math.h>
-#include       <errno.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-#include       "ALAC/alac_codec.h"
-#include       "ALAC/ALACBitUtilities.h"
-
-#define                ALAC_MAX_FRAME_SIZE             8192
-#define                ALAC_BYTE_BUFFER_SIZE   82000
-
-
-typedef struct
-{      uint32_t        current, count, allocated ;
-       uint32_t        packet_size [] ;
-} PAKT_INFO ;
-
-typedef struct
-{      sf_count_t      input_data_pos ;
-
-       PAKT_INFO       * pakt_info ;
-
-       int                     channels, final_write_block ;
-
-       uint32_t        frames_this_block, partial_block_frames, frames_per_block ;
-       uint32_t        bits_per_sample, kuki_size ;
-
-
-       /* Can't have a decoder and an encoder at the same time so stick
-       ** them in an un-named union.
-       */
-       union
-       {       ALAC_DECODER decoder ;
-               ALAC_ENCODER encoder ;
-       } ;
-
-       char enctmpname [512] ;
-       FILE *enctmp ;
-
-       int     buffer  [] ;
-
-} ALAC_PRIVATE ;
-
-/*============================================================================================
-*/
-
-static int alac_reader_init (SF_PRIVATE *psf, const ALAC_DECODER_INFO * info) ;
-static int alac_writer_init (SF_PRIVATE *psf) ;
-
-static sf_count_t alac_reader_calc_frames (SF_PRIVATE *psf, ALAC_PRIVATE *plac) ;
-
-static sf_count_t alac_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t alac_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t alac_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t alac_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t alac_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t alac_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t alac_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t alac_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static sf_count_t      alac_seek       (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-
-static int     alac_close              (SF_PRIVATE *psf) ;
-static int     alac_byterate   (SF_PRIVATE *psf) ;
-
-static int alac_decode_block (SF_PRIVATE *psf, ALAC_PRIVATE *plac) ;
-static int alac_encode_block (SF_PRIVATE *psf, ALAC_PRIVATE *plac) ;
-
-static uint32_t alac_kuki_read (SF_PRIVATE * psf, uint32_t kuki_offset, uint8_t * kuki, size_t kuki_maxlen) ;
-
-static PAKT_INFO * alac_pakt_alloc (uint32_t initial_count) ;
-static PAKT_INFO * alac_pakt_read_decode (SF_PRIVATE * psf, uint32_t pakt_offset) ;
-static PAKT_INFO * alac_pakt_append (PAKT_INFO * info, uint32_t value) ;
-static uint8_t * alac_pakt_encode (const SF_PRIVATE *psf, uint32_t * pakt_size) ;
-static sf_count_t alac_pakt_block_offset (const PAKT_INFO *info, uint32_t block) ;
-
-/*============================================================================================
-** ALAC Reader initialisation function.
-*/
-
-int
-alac_init (SF_PRIVATE *psf, const ALAC_DECODER_INFO * info)
-{      int error ;
-
-       if ((psf->codec_data = calloc (1, sizeof (ALAC_PRIVATE) + psf->sf.channels * sizeof (int) * ALAC_MAX_FRAME_SIZE)) == NULL)
-               return SFE_MALLOC_FAILED ;
-
-       psf->codec_close = alac_close ;
-
-       switch (psf->file.mode)
-       {       case SFM_RDWR :
-                       return SFE_BAD_MODE_RW ;
-
-               case SFM_READ :
-                       if ((error = alac_reader_init (psf, info)))
-                               return error ;
-                       break ;
-
-               case SFM_WRITE :
-                       if ((error = alac_writer_init (psf)))
-                               return error ;
-                       break ;
-
-               default :
-                       psf_log_printf (psf, "%s : Bad psf->file.mode.\n", __func__) ;
-                       return SFE_INTERNAL ;
-               } ;
-
-       psf->byterate = alac_byterate ;
-
-       return 0 ;
-} /* aiff_alac_init */
-
-void
-alac_get_desc_chunk_items (int subformat, uint32_t *fmt_flags, uint32_t *frames_per_packet)
-{      switch (subformat)
-       {       case SF_FORMAT_ALAC_16 :
-                       *fmt_flags = 1 ;
-                       break ;
-               case SF_FORMAT_ALAC_20 :
-                       *fmt_flags = 2 ;
-                       break ;
-               case SF_FORMAT_ALAC_24 :
-                       *fmt_flags = 3 ;
-                       break ;
-               case SF_FORMAT_ALAC_32 :
-                       *fmt_flags = 4 ;
-                       break ;
-               default :
-                       break ;
-               } ;
-       *frames_per_packet = ALAC_FRAME_LENGTH ;
-} /* alac_get_desc_chunk_items */
-
-static int
-alac_close     (SF_PRIVATE *psf)
-{      ALAC_PRIVATE *plac ;
-       BUF_UNION       ubuf ;
-
-       plac = psf->codec_data ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       ALAC_ENCODER *penc = &plac->encoder ;
-               SF_CHUNK_INFO chunk_info ;
-               sf_count_t readcount ;
-               uint32_t pakt_size = 0, saved_partial_block_frames ;
-#ifndef _MSC_VER
-               uint8_t *kuki_data [plac->kuki_size];
-#else
-               uint8_t *kuki_data = (uint8_t *)_alloca(plac->kuki_size);
-#endif
-
-               plac->final_write_block = 1 ;
-               saved_partial_block_frames = plac->partial_block_frames ;
-
-               /*      If a block has been partially assembled, write it out as the final block. */
-               if (plac->partial_block_frames && plac->partial_block_frames < plac->frames_per_block)
-                       alac_encode_block (psf, plac) ;
-
-               plac->partial_block_frames = saved_partial_block_frames ;
-
-               alac_get_magic_cookie (penc, kuki_data, &plac->kuki_size) ;
-
-               memset (&chunk_info, 0, sizeof (chunk_info)) ;
-               chunk_info.id_size = snprintf (chunk_info.id, sizeof (chunk_info.id), "kuki") ;
-               chunk_info.data = kuki_data ;
-               chunk_info.datalen = plac->kuki_size ;
-               psf_save_write_chunk (&psf->wchunks, &chunk_info) ;
-
-               memset (&chunk_info, 0, sizeof (chunk_info)) ;
-               chunk_info.id_size = snprintf (chunk_info.id, sizeof (chunk_info.id), "pakt") ;
-               chunk_info.data = alac_pakt_encode (psf, &pakt_size) ;
-               chunk_info.datalen = pakt_size ;
-               psf_save_write_chunk (&psf->wchunks, &chunk_info) ;
-
-               free (chunk_info.data) ;
-               chunk_info.data = NULL ;
-
-               psf->write_header (psf, 1) ;
-
-               if (plac->enctmp != NULL)
-               {       fseek (plac->enctmp, 0, SEEK_SET) ;
-
-                       while ((readcount = fread (ubuf.ucbuf, 1, sizeof (ubuf.ucbuf), plac->enctmp)) > 0)
-                               psf_fwrite (ubuf.ucbuf, 1, readcount, psf) ;
-                       fclose (plac->enctmp) ;
-                       remove (plac->enctmpname) ;
-                       } ;
-                       free(kuki_data);
-               } ;
-
-       if (plac->pakt_info)
-               free (plac->pakt_info) ;
-       plac->pakt_info = NULL ;
-
-       return 0 ;
-} /* alac_close */
-
-static int
-alac_byterate  (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_READ)
-               return (psf->datalength * psf->sf.samplerate) / psf->sf.frames ;
-
-       return -1 ;
-} /* alac_byterate */
-
-/*============================================================================================
-** ALAC initialisation Functions.
-*/
-
-static int
-alac_reader_init (SF_PRIVATE *psf, const ALAC_DECODER_INFO * info)
-{      ALAC_PRIVATE    *plac ;
-       uint32_t                kuki_size ;
-       union                   { uint8_t kuki [512] ; uint32_t alignment ; } u ;
-
-       if (info == NULL)
-       {       psf_log_printf (psf, "%s : ALAC_DECODER_INFO is NULL.\n", __func__) ;
-               return SFE_INTERNAL ;
-               } ;
-
-       plac = psf->codec_data ;
-
-       plac->channels                  = psf->sf.channels ;
-       plac->frames_per_block  = info->frames_per_packet ;
-       plac->bits_per_sample   = info->bits_per_sample ;
-
-       if (plac->pakt_info != NULL)
-               free (plac->pakt_info) ;
-       plac->pakt_info = alac_pakt_read_decode (psf, info->pakt_offset) ;
-
-
-       if (plac->pakt_info == NULL)
-       {       psf_log_printf (psf, "%s : alac_pkt_read() returns NULL.\n", __func__) ;
-               return SFE_MALLOC_FAILED ;
-               } ;
-
-       /* Read in the ALAC cookie data and pass it to the init function. */
-       kuki_size = alac_kuki_read (psf, info->kuki_offset, u.kuki, sizeof (u.kuki)) ;
-
-       alac_decoder_init (&plac->decoder, u.kuki, kuki_size) ;
-
-       switch (info->bits_per_sample)
-       {       case 16 :
-               case 20 :
-               case 24 :
-               case 32 :
-                       psf->read_short         = alac_read_s ;
-                       psf->read_int           = alac_read_i ;
-                       psf->read_float         = alac_read_f ;
-                       psf->read_double        = alac_read_d ;
-                       break ;
-
-               default :
-                       printf ("%s : info->bits_per_sample %u\n", __func__, info->bits_per_sample) ;
-                       return SFE_UNSUPPORTED_ENCODING ;
-               } ;
-
-       psf->codec_close        = alac_close ;
-       psf->seek                       = alac_seek ;
-
-       psf->sf.frames          = alac_reader_calc_frames (psf, plac) ;
-       alac_seek (psf, SFM_READ, 0) ;
-
-       return 0 ;
-} /* alac_reader_init */
-
-static int
-alac_writer_init (SF_PRIVATE *psf)
-{      ALAC_PRIVATE    *plac ;
-       uint32_t                alac_format_flags = 0 ;
-
-       plac = psf->codec_data ;
-
-       if (psf->file.mode != SFM_WRITE)
-               return SFE_BAD_MODE_RW ;
-
-       plac->channels  = psf->sf.channels ;
-       plac->kuki_size = alac_get_magic_cookie_size (psf->sf.channels) ;
-
-       psf->write_short        = alac_write_s ;
-       psf->write_int          = alac_write_i ;
-       psf->write_float        = alac_write_f ;
-       psf->write_double       = alac_write_d ;
-
-       switch (SF_CODEC (psf->sf.format))
-       {       case SF_FORMAT_ALAC_16 :
-                       alac_format_flags       = 1 ;
-                       plac->bits_per_sample = 16 ;
-                       break ;
-
-               case SF_FORMAT_ALAC_20 :
-                       alac_format_flags       = 2 ;
-                       plac->bits_per_sample = 20 ;
-                       break ;
-
-               case SF_FORMAT_ALAC_24 :
-                       alac_format_flags       = 3 ;
-                       plac->bits_per_sample = 24 ;
-                       break ;
-
-               case SF_FORMAT_ALAC_32 :
-                       alac_format_flags       = 4 ;
-                       plac->bits_per_sample = 32 ;
-                       break ;
-
-               default :
-                       psf_log_printf (psf, "%s : Can't figure out bits per sample.\n", __func__) ;
-                       return SFE_UNIMPLEMENTED ;
-               } ;
-
-       plac->frames_per_block = ALAC_FRAME_LENGTH ;
-
-       plac->pakt_info = alac_pakt_alloc (2000) ;
-
-       if ((plac->enctmp = psf_open_tmpfile (plac->enctmpname, sizeof (plac->enctmpname))) == NULL)
-       {       psf_log_printf (psf, "Error : Failed to open temp file '%s' : \n", plac->enctmpname, strerror (errno)) ;
-               return SFE_ALAC_FAIL_TMPFILE ;
-               } ;
-
-       alac_encoder_init (&plac->encoder, psf->sf.samplerate, psf->sf.channels, alac_format_flags, ALAC_FRAME_LENGTH) ;
-
-       return 0 ;
-} /* alac_writer_init */
-
-/*============================================================================================
-** ALAC block decoder and encoder.
-*/
-
-static inline uint32_t
-alac_reader_next_packet_size (PAKT_INFO * info)
-{      if (info->current >= info->count)
-               return 0 ;
-       return info->packet_size [info->current++] ;
-} /* alac_reader_next_packet_size */
-
-static sf_count_t
-alac_reader_calc_frames (SF_PRIVATE *psf, ALAC_PRIVATE *plac)
-{      sf_count_t      frames = 0 ;
-       uint32_t        current_pos = 1, blocks = 0 ;
-
-       plac->pakt_info->current = 0 ;
-
-       while (current_pos < psf->filelength && current_pos > 0)
-       {       current_pos = alac_reader_next_packet_size (plac->pakt_info) ;
-               blocks = current_pos > 0 ? blocks + 1 : blocks ;
-               } ;
-
-       if (blocks == 0)
-               return 0 ;
-
-       /* Only count full blocks. */
-       frames = plac->frames_per_block * (blocks - 1) ;
-
-       alac_seek (psf, SFM_READ, frames) ;
-       alac_decode_block (psf, plac) ;
-       frames += plac->frames_this_block ;
-
-       plac->pakt_info->current = 0 ;
-
-       return frames ;
-} /* alac_reader_calc_frames */
-
-static int
-alac_decode_block (SF_PRIVATE *psf, ALAC_PRIVATE *plac)
-{      ALAC_DECODER *pdec = &plac->decoder ;
-       uint8_t         byte_buffer [ALAC_BYTE_BUFFER_SIZE] ;
-       uint32_t        packet_size ;
-       BitBuffer       bit_buffer ;
-
-       packet_size = alac_reader_next_packet_size (plac->pakt_info) ;
-       if (packet_size == 0)
-       {       if (plac->pakt_info->current < plac->pakt_info->count)
-                       psf_log_printf (psf, "packet_size is 0 (%d of %d)\n", plac->pakt_info->current, plac->pakt_info->count) ;
-               return 0 ;
-               } ;
-
-       psf_fseek (psf, plac->input_data_pos, SEEK_SET) ;
-
-       if (packet_size > SIGNED_SIZEOF (byte_buffer))
-       {       psf_log_printf (psf, "%s : bad packet_size (%u)\n", __func__, packet_size) ;
-               return 0 ;
-               } ;
-
-       if ((packet_size != psf_fread (byte_buffer, 1, packet_size, psf)))
-               return 0 ;
-
-       BitBufferInit (&bit_buffer, byte_buffer, packet_size) ;
-
-       plac->input_data_pos += packet_size ;
-       plac->frames_this_block = 0 ;
-       alac_decode (pdec, &bit_buffer, plac->buffer, plac->frames_per_block, psf->sf.channels, &plac->frames_this_block) ;
-
-       plac->partial_block_frames = 0 ;
-
-       return 1 ;
-} /* alac_decode_block */
-
-
-static int
-alac_encode_block (SF_PRIVATE * psf, ALAC_PRIVATE *plac)
-{      ALAC_ENCODER *penc = &plac->encoder ;
-       uint32_t num_bytes = 0 ;
-#ifndef _MSC_VER
-       uint8_t byte_buffer [psf->sf.channels * ALAC_BYTE_BUFFER_SIZE] ;
-#else
-       uint8_t* byte_buffer = (uint8_t*)_alloca (psf->sf.channels * ALAC_BYTE_BUFFER_SIZE) ;
-#endif
-
-       alac_encode (penc, plac->channels, plac->partial_block_frames, plac->buffer, byte_buffer, &num_bytes) ;
-
-       if (fwrite (byte_buffer, 1, num_bytes, plac->enctmp) != num_bytes)
-       {
-               free (byte_buffer);
-               return 0 ;
-       }
-       free(byte_buffer);
-
-       if ((plac->pakt_info = alac_pakt_append (plac->pakt_info, num_bytes)) == NULL)
-               return 0 ;
-
-       plac->partial_block_frames = 0 ;
-
-       return 1 ;
-} /* alac_encode_block */
-
-/*============================================================================================
-** ALAC read functions.
-*/
-
-static sf_count_t
-alac_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      ALAC_PRIVATE *plac ;
-       int                     *iptr ;
-       int                     k, readcount ;
-       sf_count_t      total = 0 ;
-
-       if ((plac = (ALAC_PRIVATE*) psf->codec_data) == NULL)
-               return 0 ;
-
-       while (len > 0)
-       {       if (plac->partial_block_frames >= plac->frames_this_block && alac_decode_block (psf, plac) == 0)
-                       break ;
-
-               readcount = (plac->frames_this_block - plac->partial_block_frames) * plac->channels ;
-               readcount = readcount > len ? len : readcount ;
-
-               iptr = plac->buffer + plac->partial_block_frames * plac->channels ;
-
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = iptr [k] >> 16 ;
-
-               plac->partial_block_frames += readcount / plac->channels ;
-               total += readcount ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* alac_read_s */
-
-static sf_count_t
-alac_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      ALAC_PRIVATE *plac ;
-       int                     *iptr ;
-       int                     k, readcount ;
-       sf_count_t      total = 0 ;
-
-       if ((plac = (ALAC_PRIVATE*) psf->codec_data) == NULL)
-               return 0 ;
-
-       while (len > 0)
-       {       if (plac->partial_block_frames >= plac->frames_this_block && alac_decode_block (psf, plac) == 0)
-                       break ;
-
-               readcount = (plac->frames_this_block - plac->partial_block_frames) * plac->channels ;
-               readcount = readcount > len ? len : readcount ;
-
-               iptr = plac->buffer + plac->partial_block_frames * plac->channels ;
-
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = iptr [k] ;
-
-               plac->partial_block_frames += readcount / plac->channels ;
-               total += readcount ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* alac_read_i */
-
-static sf_count_t
-alac_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      ALAC_PRIVATE *plac ;
-       int                     *iptr ;
-       int                     k, readcount ;
-       sf_count_t      total = 0 ;
-       float           normfact ;
-
-       if ((plac = (ALAC_PRIVATE*) psf->codec_data) == NULL)
-               return 0 ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80000000) : 1.0 ;
-
-       while (len > 0)
-       {       if (plac->partial_block_frames >= plac->frames_this_block && alac_decode_block (psf, plac) == 0)
-                       break ;
-
-               readcount = (plac->frames_this_block - plac->partial_block_frames) * plac->channels ;
-               readcount = readcount > len ? len : readcount ;
-
-               iptr = plac->buffer + plac->partial_block_frames * plac->channels ;
-
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = normfact * iptr [k] ;
-
-               plac->partial_block_frames += readcount / plac->channels ;
-               total += readcount ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* alac_read_f */
-
-static sf_count_t
-alac_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      ALAC_PRIVATE *plac ;
-       int                     *iptr ;
-       int                     k, readcount ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       if ((plac = (ALAC_PRIVATE*) psf->codec_data) == NULL)
-               return 0 ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((float) 0x80000000) : 1.0 ;
-
-       while (len > 0)
-       {       if (plac->partial_block_frames >= plac->frames_this_block && alac_decode_block (psf, plac) == 0)
-                       break ;
-
-               readcount = (plac->frames_this_block - plac->partial_block_frames) * plac->channels ;
-               readcount = readcount > len ? len : readcount ;
-
-               iptr = plac->buffer + plac->partial_block_frames * plac->channels ;
-
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = normfact * iptr [k] ;
-
-               plac->partial_block_frames += readcount / plac->channels ;
-               total += readcount ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* alac_read_d */
-
-/*============================================================================================
-*/
-
-static sf_count_t
-alac_seek (SF_PRIVATE *psf, int mode, sf_count_t offset)
-{      ALAC_PRIVATE *plac ;
-       int                     newblock, newsample ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       plac = (ALAC_PRIVATE*) psf->codec_data ;
-
-       if (psf->datalength < 0 || psf->dataoffset < 0)
-       {       psf->error = SFE_BAD_SEEK ;
-               return PSF_SEEK_ERROR ;
-               } ;
-
-       if (offset == 0)
-       {       psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-               plac->frames_this_block = 0 ;
-               plac->input_data_pos = psf->dataoffset ;
-               plac->pakt_info->current = 0 ;
-               return 0 ;
-               } ;
-
-       if (offset < 0 || offset > plac->pakt_info->count * plac->frames_per_block)
-       {       psf->error = SFE_BAD_SEEK ;
-               return  PSF_SEEK_ERROR ;
-               } ;
-
-       newblock        = offset / plac->frames_per_block ;
-       newsample       = offset % plac->frames_per_block ;
-
-       if (mode == SFM_READ)
-       {       plac->input_data_pos = psf->dataoffset + alac_pakt_block_offset (plac->pakt_info, newblock) ;
-
-               plac->pakt_info->current = newblock ;
-               alac_decode_block (psf, plac) ;
-               plac->partial_block_frames = newsample ;
-               }
-       else
-       {       /* What to do about write??? */
-               psf->error = SFE_BAD_SEEK ;
-               return  PSF_SEEK_ERROR ;
-               } ;
-
-       return newblock * plac->frames_per_block + newsample ;
-} /* alac_seek */
-
-/*==========================================================================================
-** ALAC Write Functions.
-*/
-
-static sf_count_t
-alac_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      ALAC_PRIVATE *plac ;
-       int                     *iptr ;
-       int                     k, writecount ;
-       sf_count_t      total = 0 ;
-
-       if ((plac = (ALAC_PRIVATE*) psf->codec_data) == NULL)
-               return 0 ;
-
-       while (len > 0)
-       {       writecount = (plac->frames_per_block - plac->partial_block_frames) * plac->channels ;
-               writecount = (writecount == 0 || writecount > len) ? len : writecount ;
-
-               iptr = plac->buffer + plac->partial_block_frames * plac->channels ;
-
-               for (k = 0 ; k < writecount ; k++)
-                       iptr [k] = ptr [total + k] << 16 ;
-
-               plac->partial_block_frames += writecount / plac->channels ;
-               total += writecount ;
-               len -= writecount ;
-
-               if (plac->partial_block_frames >= plac->frames_per_block)
-                       alac_encode_block (psf, plac) ;
-               } ;
-
-       return total ;
-} /* alac_write_s */
-
-static sf_count_t
-alac_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      ALAC_PRIVATE *plac ;
-       int                     *iptr ;
-       int                     k, writecount ;
-       sf_count_t      total = 0 ;
-
-       if ((plac = (ALAC_PRIVATE*) psf->codec_data) == NULL)
-               return 0 ;
-
-       while (len > 0)
-       {       writecount = (plac->frames_per_block - plac->partial_block_frames) * plac->channels ;
-               writecount = (writecount == 0 || writecount > len) ? len : writecount ;
-
-               iptr = plac->buffer + plac->partial_block_frames * plac->channels ;
-
-               for (k = 0 ; k < writecount ; k++)
-                       iptr [k] = ptr [total + k] ;
-
-               plac->partial_block_frames += writecount / plac->channels ;
-               total += writecount ;
-               len -= writecount ;
-
-               if (plac->partial_block_frames >= plac->frames_per_block)
-                       alac_encode_block (psf, plac) ;
-               } ;
-
-       return total ;
-} /* alac_write_i */
-
-static sf_count_t
-alac_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      ALAC_PRIVATE *plac ;
-       void            (*convert) (const float *, int *t, int, int) ;
-       int                     *iptr ;
-       int                     writecount ;
-       sf_count_t      total = 0 ;
-
-       if ((plac = (ALAC_PRIVATE*) psf->codec_data) == NULL)
-               return 0 ;
-
-       convert = (psf->add_clipping) ? psf_f2i_clip_array : psf_f2i_array ;
-
-       while (len > 0)
-       {       writecount = (plac->frames_per_block - plac->partial_block_frames) * plac->channels ;
-               writecount = (writecount == 0 || writecount > len) ? len : writecount ;
-
-               iptr = plac->buffer + plac->partial_block_frames * plac->channels ;
-
-               convert (ptr, iptr, writecount, psf->norm_float) ;
-
-               plac->partial_block_frames += writecount / plac->channels ;
-               total += writecount ;
-               len -= writecount ;
-
-               if (plac->partial_block_frames >= plac->frames_per_block)
-                       alac_encode_block (psf, plac) ;
-               } ;
-
-       return total ;
-} /* alac_write_f */
-
-static sf_count_t
-alac_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      ALAC_PRIVATE *plac ;
-       void            (*convert) (const double *, int *t, int, int) ;
-       int                     *iptr ;
-       int                     writecount ;
-       sf_count_t      total = 0 ;
-
-       if ((plac = (ALAC_PRIVATE*) psf->codec_data) == NULL)
-               return 0 ;
-
-       convert = (psf->add_clipping) ? psf_d2i_clip_array : psf_d2i_array ;
-
-       while (len > 0)
-       {       writecount = (plac->frames_per_block - plac->partial_block_frames) * plac->channels ;
-               writecount = (writecount == 0 || writecount > len) ? len : writecount ;
-
-               iptr = plac->buffer + plac->partial_block_frames * plac->channels ;
-
-               convert (ptr, iptr, writecount, psf->norm_float) ;
-
-               plac->partial_block_frames += writecount / plac->channels ;
-               total += writecount ;
-               len -= writecount ;
-
-               if (plac->partial_block_frames >= plac->frames_per_block)
-                       alac_encode_block (psf, plac) ;
-               } ;
-
-       return total ;
-} /* alac_write_d */
-
-/*==============================================================================
-** PAKT_INFO handling.
-*/
-
-static PAKT_INFO *
-alac_pakt_alloc (uint32_t initial_count)
-{      PAKT_INFO * info ;
-
-       if ((info = calloc (1, sizeof (PAKT_INFO) + initial_count * sizeof (info->packet_size [0]))) == NULL)
-               return NULL ;
-
-       info->allocated = initial_count ;
-       info->current = 0 ;
-       info->count = 0 ;
-
-       return info ;
-} /* alac_pakt_alloc */
-
-static PAKT_INFO *
-alac_pakt_append (PAKT_INFO * info, uint32_t value)
-{
-       if (info->count >= info->allocated)
-       {       PAKT_INFO * temp ;
-               uint32_t newcount = info->allocated + info->allocated / 2 ;
-
-               if ((temp = realloc (info, sizeof (PAKT_INFO) + newcount * sizeof (info->packet_size [0]))) == NULL)
-                       return NULL ;
-
-               info = temp ;
-               info->allocated = newcount ;
-               } ;
-
-       info->packet_size [info->count++] = value ;
-       return info ;
-} /* alac_pakt_append */
-
-static PAKT_INFO *
-alac_pakt_read_decode (SF_PRIVATE * psf, uint32_t UNUSED (pakt_offset))
-{      SF_CHUNK_INFO chunk_info ;
-       PAKT_INFO * info = NULL ;
-       uint8_t *pakt_data = NULL ;
-       uint32_t bcount, value = 1, pakt_size ;
-       SF_CHUNK_ITERATOR * chunk_iterator ;
-
-
-       memset (&chunk_info, 0, sizeof (chunk_info)) ;
-       snprintf (chunk_info.id, sizeof (chunk_info.id), "pakt") ;
-       chunk_info.id_size = 4 ;
-
-       if ((chunk_iterator = psf_get_chunk_iterator (psf, chunk_info.id)) == NULL)
-       {       printf ("%s %d : no chunk iterator found\n\n", __func__, __LINE__) ;
-               free (chunk_info.data) ;
-               chunk_info.data = NULL ;
-               return NULL ;
-               } ;
-
-       psf->get_chunk_size (psf, chunk_iterator, &chunk_info) ;
-
-       pakt_size = chunk_info.datalen ;
-       chunk_info.data = pakt_data = malloc (pakt_size + 5) ;
-
-       if ((bcount = psf->get_chunk_data (psf, chunk_iterator, &chunk_info)) != SF_ERR_NO_ERROR)
-       {       printf ("%s %d : %s\n\n", __func__, __LINE__, sf_error_number (bcount)) ;
-               while (chunk_iterator)
-                       chunk_iterator = psf->next_chunk_iterator (psf, chunk_iterator) ;
-               free (chunk_info.data) ;
-               chunk_info.data = NULL ;
-               return NULL ;
-               } ;
-
-       while (chunk_iterator)
-               chunk_iterator = psf->next_chunk_iterator (psf, chunk_iterator) ;
-
-       info = alac_pakt_alloc (pakt_size / 4) ;
-
-       /* Start at 24 bytes in, skipping over the 'pakt' chunks header. */
-       for (bcount = 24 ; bcount < pakt_size && value != 0 ; )
-       {       uint8_t byte ;
-               int32_t count = 0 ;
-
-               value = 0 ;
-               do
-               {       byte = pakt_data [bcount + count] ;
-                       value = (value << 7) + (byte & 0x7F) ;
-
-                       count ++ ;
-                       if (count > 5 || bcount + count > pakt_size)
-                       {       printf ("%s %d : Ooops! count %d    bcount %d\n", __func__, __LINE__, count, bcount) ;
-                               value = 0 ;
-                               break ;
-                               } ;
-                       }
-                       while (byte & 0x80) ;
-
-               bcount += count ;
-
-               if ((info = alac_pakt_append (info, value)) == NULL)
-                       goto FreeExit ;
-               } ;
-
-       free (pakt_data) ;
-
-       return info ;
-
-FreeExit :
-       free (pakt_data) ;
-       free (info) ;
-       return NULL ;
-} /* alac_pakt_read_decode */
-
-static uint8_t *
-alac_pakt_encode (const SF_PRIVATE *psf, uint32_t * pakt_size_out)
-{      const ALAC_PRIVATE *plac ;
-       const PAKT_INFO *info ;
-       uint8_t *data ;
-       uint32_t k, allocated, pakt_size ;
-
-       plac = psf->codec_data ;
-       info = plac->pakt_info ;
-
-       allocated = 100 + 2 * info->count ;
-       if ((data = calloc (1, allocated)) == NULL)
-               return NULL ;
-
-       psf_put_be64 (data, 0, info->count) ;
-       psf_put_be64 (data, 8, psf->sf.frames) ;
-       psf_put_be32 (data, 20, kALACDefaultFramesPerPacket - plac->partial_block_frames) ;
-
-       /* Real 'pakt' data starts after 24 byte header. */
-       pakt_size = 24 ;
-
-       for (k = 0 ; k < info->count ; k++)
-       {       int32_t value = info->packet_size [k] ;
-
-               if ((value & 0x7f) == value)
-               {       data [pakt_size++] = value ;
-                       continue ;
-                       } ;
-
-               if ((value & 0x3fff) == value)
-               {       data [pakt_size++] = (value >> 7) | 0x80 ;
-                       data [pakt_size++] = value & 0x7f ;
-                       continue ;
-                       } ;
-
-               if ((value & 0x1fffff) == value)
-               {       data [pakt_size++] = (value >> 14) | 0x80 ;
-                       data [pakt_size++] = ((value >> 7) & 0x7f) | 0x80 ;
-                       data [pakt_size++] = value & 0x7f ;
-                       continue ;
-               } ;
-
-               if ((value & 0x0fffffff) == value)
-               {       data [pakt_size++] = (value >> 21) | 0x80 ;
-                       data [pakt_size++] = ((value >> 14) & 0x7f) | 0x80 ;
-                       data [pakt_size++] = ((value >> 7) & 0x7f) | 0x80 ;
-                       data [pakt_size++] = value & 0x7f ;
-                       continue ;
-                       } ;
-
-               *pakt_size_out = 0 ;
-               free (data) ;
-               return NULL ;
-               } ;
-
-       *pakt_size_out = pakt_size ;
-       return data ;
-} /* alac_pakt_encode */
-
-static sf_count_t
-alac_pakt_block_offset (const PAKT_INFO *info, uint32_t block)
-{      sf_count_t offset = 0 ;
-       uint32_t k ;
-
-       for (k = 0 ; k < block ; k++)
-               offset += info->packet_size [k] ;
-
-       return offset ;
-} /* alac_pakt_block_offset */
-
-static uint32_t
-alac_kuki_read (SF_PRIVATE * psf, uint32_t kuki_offset, uint8_t * kuki, size_t kuki_maxlen)
-{      uint32_t marker ;
-       uint64_t kuki_size ;
-
-       if (psf_fseek (psf, kuki_offset, SEEK_SET) != kuki_offset)
-               return 0 ;
-
-       psf_fread (&marker, 1, sizeof (marker), psf) ;
-       if (marker != MAKE_MARKER ('k', 'u', 'k', 'i'))
-               return 0 ;
-
-       psf_fread (&kuki_size, 1, sizeof (kuki_size), psf) ;
-       kuki_size = BE2H_64 (kuki_size) ;
-
-       if (kuki_size == 0 || kuki_size > kuki_maxlen)
-       {       psf_log_printf (psf, "%s : Bad size (%D) of 'kuki' chunk.\n", __func__, kuki_size) ;
-               return 0 ;
-               } ;
-
-       psf_fread (kuki, 1, kuki_size, psf) ;
-
-       return kuki_size ;
-} /* alac_kuki_read */
diff --git a/libs/libsndfile/src/alaw.c b/libs/libsndfile/src/alaw.c
deleted file mode 100644 (file)
index 81d7696..0000000
+++ /dev/null
@@ -1,548 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <math.h>
-
-#include       "sndfile.h"
-#include       "common.h"
-
-static sf_count_t alaw_read_alaw2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t alaw_read_alaw2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t alaw_read_alaw2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t alaw_read_alaw2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t alaw_write_s2alaw (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t alaw_write_i2alaw (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t alaw_write_f2alaw (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t alaw_write_d2alaw (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static void alaw2s_array (unsigned char *buffer, int count, short *ptr) ;
-static void alaw2i_array (unsigned char *buffer, int count, int *ptr) ;
-static void alaw2f_array (unsigned char *buffer, int count, float *ptr, float normfact) ;
-static void alaw2d_array (unsigned char *buffer, int count, double *ptr, double normfact) ;
-
-static void s2alaw_array (const short *buffer, int count, unsigned char *ptr) ;
-static void i2alaw_array (const int *buffer, int count, unsigned char *ptr) ;
-static void f2alaw_array (const float *buffer, int count, unsigned char *ptr, float normfact) ;
-static void d2alaw_array (const double *buffer, int count, unsigned char *ptr, double normfact) ;
-
-
-int
-alaw_init (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_READ || psf->file.mode == SFM_RDWR)
-       {       psf->read_short         = alaw_read_alaw2s ;
-               psf->read_int           = alaw_read_alaw2i ;
-               psf->read_float         = alaw_read_alaw2f ;
-               psf->read_double        = alaw_read_alaw2d ;
-               } ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       psf->write_short        = alaw_write_s2alaw ;
-               psf->write_int          = alaw_write_i2alaw ;
-               psf->write_float        = alaw_write_f2alaw ;
-               psf->write_double       = alaw_write_d2alaw ;
-               } ;
-
-       psf->bytewidth = 1 ;
-       psf->blockwidth = psf->sf.channels ;
-
-       if (psf->filelength > psf->dataoffset)
-               psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset : psf->filelength - psf->dataoffset ;
-       else
-               psf->datalength = 0 ;
-
-       psf->sf.frames = psf->blockwidth > 0 ? psf->datalength / psf->blockwidth : 0 ;
-
-       return 0 ;
-} /* alaw_init */
-
-/*==============================================================================
- *     Private static functions and data.
- */
-
-static
-short alaw_decode [256] =
-{      -5504,  -5248,  -6016,  -5760,  -4480,  -4224,  -4992,  -4736,
-       -7552,  -7296,  -8064,  -7808,  -6528,  -6272,  -7040,  -6784,
-       -2752,  -2624,  -3008,  -2880,  -2240,  -2112,  -2496,  -2368,
-       -3776,  -3648,  -4032,  -3904,  -3264,  -3136,  -3520,  -3392,
-       -22016, -20992, -24064, -23040, -17920, -16896, -19968, -18944,
-       -30208, -29184, -32256, -31232, -26112, -25088, -28160, -27136,
-       -11008, -10496, -12032, -11520, -8960,  -8448,  -9984,  -9472,
-       -15104, -14592, -16128, -15616, -13056, -12544, -14080, -13568,
-       -344,   -328,   -376,   -360,   -280,   -264,   -312,   -296,
-       -472,   -456,   -504,   -488,   -408,   -392,   -440,   -424,
-       -88,    -72,    -120,   -104,   -24,    -8,             -56,    -40,
-       -216,   -200,   -248,   -232,   -152,   -136,   -184,   -168,
-       -1376,  -1312,  -1504,  -1440,  -1120,  -1056,  -1248,  -1184,
-       -1888,  -1824,  -2016,  -1952,  -1632,  -1568,  -1760,  -1696,
-       -688,   -656,   -752,   -720,   -560,   -528,   -624,   -592,
-       -944,   -912,   -1008,  -976,   -816,   -784,   -880,   -848,
-       5504,   5248,   6016,   5760,   4480,   4224,   4992,   4736,
-       7552,   7296,   8064,   7808,   6528,   6272,   7040,   6784,
-       2752,   2624,   3008,   2880,   2240,   2112,   2496,   2368,
-       3776,   3648,   4032,   3904,   3264,   3136,   3520,   3392,
-       22016,  20992,  24064,  23040,  17920,  16896,  19968,  18944,
-       30208,  29184,  32256,  31232,  26112,  25088,  28160,  27136,
-       11008,  10496,  12032,  11520,  8960,   8448,   9984,   9472,
-       15104,  14592,  16128,  15616,  13056,  12544,  14080,  13568,
-       344,    328,    376,    360,    280,    264,    312,    296,
-       472,    456,    504,    488,    408,    392,    440,    424,
-       88,             72,             120,    104,    24,             8,              56,             40,
-       216,    200,    248,    232,    152,    136,    184,    168,
-       1376,   1312,   1504,   1440,   1120,   1056,   1248,   1184,
-       1888,   1824,   2016,   1952,   1632,   1568,   1760,   1696,
-       688,    656,    752,    720,    560,    528,    624,    592,
-       944,    912,    1008,   976,    816,    784,    880,    848
-} ; /* alaw_decode */
-
-static
-unsigned char alaw_encode [2048 + 1] =
-{      0xd5, 0xd4, 0xd7, 0xd6, 0xd1, 0xd0, 0xd3, 0xd2, 0xdd, 0xdc, 0xdf, 0xde,
-       0xd9, 0xd8, 0xdb, 0xda, 0xc5, 0xc4, 0xc7, 0xc6, 0xc1, 0xc0, 0xc3, 0xc2,
-       0xcd, 0xcc, 0xcf, 0xce, 0xc9, 0xc8, 0xcb, 0xca, 0xf5, 0xf5, 0xf4, 0xf4,
-       0xf7, 0xf7, 0xf6, 0xf6, 0xf1, 0xf1, 0xf0, 0xf0, 0xf3, 0xf3, 0xf2, 0xf2,
-       0xfd, 0xfd, 0xfc, 0xfc, 0xff, 0xff, 0xfe, 0xfe, 0xf9, 0xf9, 0xf8, 0xf8,
-       0xfb, 0xfb, 0xfa, 0xfa, 0xe5, 0xe5, 0xe5, 0xe5, 0xe4, 0xe4, 0xe4, 0xe4,
-       0xe7, 0xe7, 0xe7, 0xe7, 0xe6, 0xe6, 0xe6, 0xe6, 0xe1, 0xe1, 0xe1, 0xe1,
-       0xe0, 0xe0, 0xe0, 0xe0, 0xe3, 0xe3, 0xe3, 0xe3, 0xe2, 0xe2, 0xe2, 0xe2,
-       0xed, 0xed, 0xed, 0xed, 0xec, 0xec, 0xec, 0xec, 0xef, 0xef, 0xef, 0xef,
-       0xee, 0xee, 0xee, 0xee, 0xe9, 0xe9, 0xe9, 0xe9, 0xe8, 0xe8, 0xe8, 0xe8,
-       0xeb, 0xeb, 0xeb, 0xeb, 0xea, 0xea, 0xea, 0xea, 0x95, 0x95, 0x95, 0x95,
-       0x95, 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-       0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x96, 0x96, 0x96, 0x96,
-       0x96, 0x96, 0x96, 0x96, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-       0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x93, 0x93, 0x93, 0x93,
-       0x93, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-       0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9c, 0x9c, 0x9c, 0x9c,
-       0x9c, 0x9c, 0x9c, 0x9c, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-       0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x99, 0x99, 0x99, 0x99,
-       0x99, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-       0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9a, 0x9a, 0x9a, 0x9a,
-       0x9a, 0x9a, 0x9a, 0x9a, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0xb5, 0xb5, 0xb5, 0xb5,
-       0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
-       0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
-       0xb5, 0xb5, 0xb5, 0xb5, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
-       0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
-       0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
-       0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
-       0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
-       0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb6, 0xb6, 0xb6, 0xb6,
-       0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
-       0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
-       0xb6, 0xb6, 0xb6, 0xb6, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
-       0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
-       0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
-       0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
-       0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
-       0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb3, 0xb3, 0xb3, 0xb3,
-       0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
-       0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
-       0xb3, 0xb3, 0xb3, 0xb3, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
-       0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
-       0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
-       0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
-       0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
-       0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbc, 0xbc, 0xbc, 0xbc,
-       0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
-       0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
-       0xbc, 0xbc, 0xbc, 0xbc, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
-       0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
-       0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
-       0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
-       0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
-       0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xb9, 0xb9, 0xb9, 0xb9,
-       0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
-       0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
-       0xb9, 0xb9, 0xb9, 0xb9, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
-       0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
-       0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
-       0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
-       0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
-       0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xba, 0xba, 0xba, 0xba,
-       0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
-       0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
-       0xba, 0xba, 0xba, 0xba, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
-       0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
-       0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
-       0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
-       0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
-       0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa4, 0xa4, 0xa4, 0xa4,
-       0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
-       0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
-       0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
-       0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
-       0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
-       0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7,
-       0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7,
-       0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7,
-       0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7,
-       0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7,
-       0xa7, 0xa7, 0xa7, 0xa7, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
-       0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
-       0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
-       0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
-       0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
-       0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa1, 0xa1, 0xa1, 0xa1,
-       0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1,
-       0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1,
-       0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1,
-       0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1,
-       0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1,
-       0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
-       0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
-       0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
-       0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
-       0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
-       0xa0, 0xa0, 0xa0, 0xa0, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
-       0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
-       0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
-       0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
-       0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
-       0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0xa2, 0xa2, 0xa2,
-       0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
-       0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
-       0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
-       0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
-       0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
-       0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
-       0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
-       0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
-       0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
-       0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
-       0xad, 0xad, 0xad, 0xad, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
-       0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
-       0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
-       0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
-       0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
-       0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xaf, 0xaf, 0xaf, 0xaf,
-       0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
-       0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
-       0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
-       0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
-       0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
-       0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
-       0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
-       0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
-       0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
-       0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
-       0xae, 0xae, 0xae, 0xae, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
-       0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
-       0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
-       0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
-       0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
-       0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa8, 0xa8, 0xa8, 0xa8,
-       0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
-       0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
-       0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
-       0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
-       0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
-       0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
-       0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
-       0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
-       0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
-       0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
-       0xab, 0xab, 0xab, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa
-} ; /* alaw_encode */
-
-static inline void
-alaw2s_array (unsigned char *buffer, int count, short *ptr)
-{      while (--count >= 0)
-               ptr [count] = alaw_decode [(int) buffer [count]] ;
-} /* alaw2s_array */
-
-static inline void
-alaw2i_array (unsigned char *buffer, int count, int *ptr)
-{      while (--count >= 0)
-               ptr [count] = alaw_decode [(int) buffer [count]] << 16 ;
-} /* alaw2i_array */
-
-static inline void
-alaw2f_array (unsigned char *buffer, int count, float *ptr, float normfact)
-{      while (--count >= 0)
-               ptr [count] = normfact * alaw_decode [(int) buffer [count]] ;
-} /* alaw2f_array */
-
-static inline void
-alaw2d_array (unsigned char *buffer, int count, double *ptr, double normfact)
-{      while (--count >= 0)
-               ptr [count] = normfact * alaw_decode [(int) buffer [count]] ;
-} /* alaw2d_array */
-
-static inline void
-s2alaw_array (const short *ptr, int count, unsigned char *buffer)
-{      while (--count >= 0)
-       {       if (ptr [count] >= 0)
-                       buffer [count] = alaw_encode [ptr [count] / 16] ;
-               else
-                       buffer [count] = 0x7F & alaw_encode [ptr [count] / -16] ;
-               } ;
-} /* s2alaw_array */
-
-static inline void
-i2alaw_array (const int *ptr, int count, unsigned char *buffer)
-{      while (--count >= 0)
-       {       if (ptr [count] >= 0)
-                       buffer [count] = alaw_encode [ptr [count] >> (16 + 4)] ;
-               else
-                       buffer [count] = 0x7F & alaw_encode [- ptr [count] >> (16 + 4)] ;
-               } ;
-} /* i2alaw_array */
-
-static inline void
-f2alaw_array (const float *ptr, int count, unsigned char *buffer, float normfact)
-{      while (--count >= 0)
-       {       if (ptr [count] >= 0)
-                       buffer [count] = alaw_encode [lrintf (normfact * ptr [count])] ;
-               else
-                       buffer [count] = 0x7F & alaw_encode [- lrintf (normfact * ptr [count])] ;
-               } ;
-} /* f2alaw_array */
-
-static inline void
-d2alaw_array (const double *ptr, int count, unsigned char *buffer, double normfact)
-{      while (--count >= 0)
-       {       if (ptr [count] >= 0)
-                       buffer [count] = alaw_encode [lrint (normfact * ptr [count])] ;
-               else
-                       buffer [count] = 0x7F & alaw_encode [- lrint (normfact * ptr [count])] ;
-               } ;
-} /* d2alaw_array */
-
-/*==============================================================================
-*/
-
-static sf_count_t
-alaw_read_alaw2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ucbuf, 1, bufferlen, psf) ;
-               alaw2s_array (ubuf.ucbuf, readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* alaw_read_alaw2s */
-
-static sf_count_t
-alaw_read_alaw2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ucbuf, 1, bufferlen, psf) ;
-               alaw2i_array (ubuf.ucbuf, readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* alaw_read_alaw2i */
-
-static sf_count_t
-alaw_read_alaw2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       float   normfact ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ucbuf, 1, bufferlen, psf) ;
-               alaw2f_array (ubuf.ucbuf, readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* alaw_read_alaw2f */
-
-static sf_count_t
-alaw_read_alaw2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       double  normfact ;
-
-       normfact = (psf->norm_double) ? 1.0 / ((double) 0x8000) : 1.0 ;
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ucbuf, 1, bufferlen, psf) ;
-               alaw2d_array (ubuf.ucbuf, readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* alaw_read_alaw2d */
-
-/*=============================================================================================
-*/
-
-static sf_count_t
-alaw_write_s2alaw      (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               s2alaw_array (ptr + total, bufferlen, ubuf.ucbuf) ;
-               writecount = psf_fwrite (ubuf.ucbuf, 1, bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* alaw_write_s2alaw */
-
-static sf_count_t
-alaw_write_i2alaw      (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               i2alaw_array (ptr + total, bufferlen, ubuf.ucbuf) ;
-               writecount = psf_fwrite (ubuf.ucbuf, 1, bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* alaw_write_i2alaw */
-
-static sf_count_t
-alaw_write_f2alaw      (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-       float   normfact ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFF) / 16.0 : 1.0 / 16 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               f2alaw_array (ptr + total, bufferlen, ubuf.ucbuf, normfact) ;
-               writecount = psf_fwrite (ubuf.ucbuf, 1, bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* alaw_write_f2alaw */
-
-static sf_count_t
-alaw_write_d2alaw      (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-       double  normfact ;
-
-       normfact = (psf->norm_double) ? (1.0 * 0x7FFF) / 16.0 : 1.0 / 16.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               d2alaw_array (ptr + total, bufferlen, ubuf.ucbuf, normfact) ;
-               writecount = psf_fwrite (ubuf.ucbuf, 1, bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* alaw_write_d2alaw */
-
diff --git a/libs/libsndfile/src/au.c b/libs/libsndfile/src/au.c
deleted file mode 100644 (file)
index bcd869a..0000000
+++ /dev/null
@@ -1,450 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <fcntl.h>
-#include       <string.h>
-#include       <ctype.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-
-#define DOTSND_MARKER  (MAKE_MARKER ('.', 's', 'n', 'd'))
-#define DNSDOT_MARKER  (MAKE_MARKER ('d', 'n', 's', '.'))
-
-#define AU_DATA_OFFSET 24
-
-/*------------------------------------------------------------------------------
-** Known AU file encoding types.
-*/
-
-enum
-{      AU_ENCODING_ULAW_8                                      = 1,    /* 8-bit u-law samples */
-       AU_ENCODING_PCM_8                                       = 2,    /* 8-bit linear samples */
-       AU_ENCODING_PCM_16                                      = 3,    /* 16-bit linear samples */
-       AU_ENCODING_PCM_24                                      = 4,    /* 24-bit linear samples */
-       AU_ENCODING_PCM_32                                      = 5,    /* 32-bit linear samples */
-
-       AU_ENCODING_FLOAT                                       = 6,    /* floating-point samples */
-       AU_ENCODING_DOUBLE                                      = 7,    /* double-precision float samples */
-       AU_ENCODING_INDIRECT                            = 8,    /* fragmented sampled data */
-       AU_ENCODING_NESTED                                      = 9,    /* ? */
-       AU_ENCODING_DSP_CORE                            = 10,   /* DSP program */
-       AU_ENCODING_DSP_DATA_8                          = 11,   /* 8-bit fixed-point samples */
-       AU_ENCODING_DSP_DATA_16                         = 12,   /* 16-bit fixed-point samples */
-       AU_ENCODING_DSP_DATA_24                         = 13,   /* 24-bit fixed-point samples */
-       AU_ENCODING_DSP_DATA_32                         = 14,   /* 32-bit fixed-point samples */
-
-       AU_ENCODING_DISPLAY                                     = 16,   /* non-audio display data */
-       AU_ENCODING_MULAW_SQUELCH                       = 17,   /* ? */
-       AU_ENCODING_EMPHASIZED                          = 18,   /* 16-bit linear with emphasis */
-       AU_ENCODING_NEXT                                        = 19,   /* 16-bit linear with compression (NEXT) */
-       AU_ENCODING_COMPRESSED_EMPHASIZED       = 20,   /* A combination of the two above */
-       AU_ENCODING_DSP_COMMANDS                        = 21,   /* Music Kit DSP commands */
-       AU_ENCODING_DSP_COMMANDS_SAMPLES        = 22,   /* ? */
-
-       AU_ENCODING_ADPCM_G721_32                       = 23,   /* G721 32 kbs ADPCM - 4 bits per sample. */
-       AU_ENCODING_ADPCM_G722                          = 24,   /* G722 64 kbs ADPCM */
-       AU_ENCODING_ADPCM_G723_24                       = 25,   /* G723 24 kbs ADPCM - 3 bits per sample. */
-       AU_ENCODING_ADPCM_G723_40                       = 26,   /* G723 40 kbs ADPCM - 5 bits per sample. */
-
-       AU_ENCODING_ALAW_8                                      = 27
-} ;
-
-/*------------------------------------------------------------------------------
-** Typedefs.
-*/
-
-typedef        struct
-{      int             dataoffset ;
-       int             datasize ;
-       int             encoding ;
-       int             samplerate ;
-       int             channels ;
-} AU_FMT ;
-
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int             au_close                (SF_PRIVATE *psf) ;
-
-static int     au_format_to_encoding   (int format) ;
-
-static int             au_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int             au_read_header (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-au_open        (SF_PRIVATE *psf)
-{      int             subformat ;
-       int             error = 0 ;
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-       {       if ((error = au_read_header (psf)))
-                       return error ;
-               } ;
-
-       if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_AU)
-               return  SFE_BAD_OPEN_FORMAT ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       psf->endian = SF_ENDIAN (psf->sf.format) ;
-               if (CPU_IS_LITTLE_ENDIAN && psf->endian == SF_ENDIAN_CPU)
-                       psf->endian = SF_ENDIAN_LITTLE ;
-               else if (psf->endian != SF_ENDIAN_LITTLE)
-                       psf->endian = SF_ENDIAN_BIG ;
-
-               if (au_write_header (psf, SF_FALSE))
-                       return psf->error ;
-
-               psf->write_header = au_write_header ;
-               } ;
-
-       psf->container_close = au_close ;
-
-       psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-       switch (subformat)
-       {       case SF_FORMAT_ULAW :   /* 8-bit Ulaw encoding. */
-                               ulaw_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_PCM_S8 : /* 8-bit linear PCM. */
-                               error = pcm_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_PCM_16 : /* 16-bit linear PCM. */
-               case SF_FORMAT_PCM_24 : /* 24-bit linear PCM */
-               case SF_FORMAT_PCM_32 : /* 32-bit linear PCM. */
-                               error = pcm_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_ALAW :   /* 8-bit Alaw encoding. */
-                               alaw_init (psf) ;
-                               break ;
-
-               /* Lite remove start */
-               case SF_FORMAT_FLOAT :  /* 32-bit floats. */
-                               error = float32_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_DOUBLE : /* 64-bit double precision floats. */
-                               error = double64_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_G721_32 :
-                               error = g72x_init (psf) ;
-                               psf->sf.seekable = SF_FALSE ;
-                               break ;
-
-               case SF_FORMAT_G723_24 :
-                               error = g72x_init (psf) ;
-                               psf->sf.seekable = SF_FALSE ;
-                               break ;
-
-               case SF_FORMAT_G723_40 :
-                               error = g72x_init (psf) ;
-                               psf->sf.seekable = SF_FALSE ;
-                               break ;
-               /* Lite remove end */
-
-               default :       break ;
-               } ;
-
-       return error ;
-} /* au_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-au_close       (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-               au_write_header (psf, SF_TRUE) ;
-
-       return 0 ;
-} /* au_close */
-
-static int
-au_write_header (SF_PRIVATE *psf, int calc_length)
-{      sf_count_t      current ;
-       int                     encoding, datalength ;
-
-       if (psf->pipeoffset > 0)
-               return 0 ;
-
-       current = psf_ftell (psf) ;
-
-       if (calc_length)
-       {       psf->filelength = psf_get_filelen (psf) ;
-
-               psf->datalength = psf->filelength - psf->dataoffset ;
-               if (psf->dataend)
-                       psf->datalength -= psf->filelength - psf->dataend ;
-               } ;
-
-       encoding = au_format_to_encoding (SF_CODEC (psf->sf.format)) ;
-       if (! encoding)
-               return (psf->error = SFE_BAD_OPEN_FORMAT) ;
-
-       /* Reset the current header length to zero. */
-       psf->header [0] = 0 ;
-       psf->headindex = 0 ;
-
-       /*
-       ** Only attempt to seek if we are not writng to a pipe. If we are
-       ** writing to a pipe we shouldn't be here anyway.
-       */
-       if (psf->is_pipe == SF_FALSE)
-               psf_fseek (psf, 0, SEEK_SET) ;
-
-       /*
-       **      AU format files allow a datalength value of -1 if the datalength
-       **      is not know at the time the header is written.
-       **      Also use this value of -1 if the datalength > 2 gigabytes.
-       */
-       if (psf->datalength     < 0 || psf->datalength > 0x7FFFFFFF)
-               datalength = -1 ;
-       else
-               datalength = (int) (psf->datalength & 0x7FFFFFFF) ;
-
-       if (psf->endian == SF_ENDIAN_BIG)
-       {       psf_binheader_writef (psf, "Em4", DOTSND_MARKER, AU_DATA_OFFSET) ;
-               psf_binheader_writef (psf, "E4444", datalength, encoding, psf->sf.samplerate, psf->sf.channels) ;
-               }
-       else if (psf->endian == SF_ENDIAN_LITTLE)
-       {       psf_binheader_writef (psf, "em4", DNSDOT_MARKER, AU_DATA_OFFSET) ;
-               psf_binheader_writef (psf, "e4444", datalength, encoding, psf->sf.samplerate, psf->sf.channels) ;
-               }
-       else
-               return (psf->error = SFE_BAD_OPEN_FORMAT) ;
-
-       /* Header construction complete so write it out. */
-       psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-       if (psf->error)
-               return psf->error ;
-
-       psf->dataoffset = psf->headindex ;
-
-       if (current > 0)
-               psf_fseek (psf, current, SEEK_SET) ;
-
-       return psf->error ;
-} /* au_write_header */
-
-static int
-au_format_to_encoding (int format)
-{
-       switch (format)
-       {       case SF_FORMAT_PCM_S8 :         return AU_ENCODING_PCM_8 ;
-               case SF_FORMAT_PCM_16 :         return AU_ENCODING_PCM_16 ;
-               case SF_FORMAT_PCM_24 :         return AU_ENCODING_PCM_24 ;
-               case SF_FORMAT_PCM_32 :         return AU_ENCODING_PCM_32 ;
-
-               case SF_FORMAT_FLOAT :          return AU_ENCODING_FLOAT ;
-               case SF_FORMAT_DOUBLE :         return AU_ENCODING_DOUBLE ;
-
-               case SF_FORMAT_ULAW :           return AU_ENCODING_ULAW_8 ;
-               case SF_FORMAT_ALAW :           return AU_ENCODING_ALAW_8 ;
-
-               case SF_FORMAT_G721_32 :        return AU_ENCODING_ADPCM_G721_32 ;
-               case SF_FORMAT_G723_24 :        return AU_ENCODING_ADPCM_G723_24 ;
-               case SF_FORMAT_G723_40 :        return AU_ENCODING_ADPCM_G723_40 ;
-
-               default : break ;
-               } ;
-       return 0 ;
-} /* au_format_to_encoding */
-
-static int
-au_read_header (SF_PRIVATE *psf)
-{      AU_FMT  au_fmt ;
-       int             marker, dword ;
-
-       memset (&au_fmt, 0, sizeof (au_fmt)) ;
-       psf_binheader_readf (psf, "pm", 0, &marker) ;
-       psf_log_printf (psf, "%M\n", marker) ;
-
-       if (marker == DOTSND_MARKER)
-       {       psf->endian = SF_ENDIAN_BIG ;
-
-               psf_binheader_readf (psf, "E44444", &(au_fmt.dataoffset), &(au_fmt.datasize),
-                                       &(au_fmt.encoding), &(au_fmt.samplerate), &(au_fmt.channels)) ;
-               }
-       else if (marker == DNSDOT_MARKER)
-       {       psf->endian = SF_ENDIAN_LITTLE ;
-               psf_binheader_readf (psf, "e44444", &(au_fmt.dataoffset), &(au_fmt.datasize),
-                                       &(au_fmt.encoding), &(au_fmt.samplerate), &(au_fmt.channels)) ;
-               }
-       else
-               return SFE_AU_NO_DOTSND ;
-
-       psf_log_printf (psf, "  Data Offset : %d\n", au_fmt.dataoffset) ;
-
-       if (psf->fileoffset > 0 && au_fmt.datasize == -1)
-       {       psf_log_printf (psf, "  Data Size   : -1\n") ;
-               return SFE_AU_EMBED_BAD_LEN ;
-               } ;
-
-       if (psf->fileoffset > 0)
-       {       psf->filelength = au_fmt.dataoffset + au_fmt.datasize ;
-               psf_log_printf (psf, "  Data Size   : %d\n", au_fmt.datasize) ;
-               }
-       else if (au_fmt.datasize == -1 || au_fmt.dataoffset + au_fmt.datasize == psf->filelength)
-               psf_log_printf (psf, "  Data Size   : %d\n", au_fmt.datasize) ;
-       else if (au_fmt.dataoffset + au_fmt.datasize < psf->filelength)
-       {       psf->filelength = au_fmt.dataoffset + au_fmt.datasize ;
-               psf_log_printf (psf, "  Data Size   : %d\n", au_fmt.datasize) ;
-               }
-       else
-       {       dword = psf->filelength - au_fmt.dataoffset ;
-               psf_log_printf (psf, "  Data Size   : %d (should be %d)\n", au_fmt.datasize, dword) ;
-               au_fmt.datasize = dword ;
-               } ;
-
-       psf->dataoffset = au_fmt.dataoffset ;
-       psf->datalength = psf->filelength - psf->dataoffset ;
-
-       if (psf_ftell (psf) < psf->dataoffset)
-               psf_binheader_readf (psf, "j", psf->dataoffset - psf_ftell (psf)) ;
-
-       psf->sf.samplerate      = au_fmt.samplerate ;
-       psf->sf.channels        = au_fmt.channels ;
-
-       /* Only fill in type major. */
-       if (psf->endian == SF_ENDIAN_BIG)
-               psf->sf.format = SF_FORMAT_AU ;
-       else if (psf->endian == SF_ENDIAN_LITTLE)
-               psf->sf.format = SF_ENDIAN_LITTLE | SF_FORMAT_AU ;
-
-       psf_log_printf (psf, "  Encoding    : %d => ", au_fmt.encoding) ;
-
-       psf->sf.format = SF_ENDIAN (psf->sf.format) ;
-
-       switch (au_fmt.encoding)
-       {       case AU_ENCODING_ULAW_8 :
-                               psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_ULAW ;
-                               psf->bytewidth = 1 ;    /* Before decoding */
-                               psf_log_printf (psf, "8-bit ISDN u-law\n") ;
-                               break ;
-
-               case AU_ENCODING_PCM_8 :
-                               psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_PCM_S8 ;
-                               psf->bytewidth = 1 ;
-                               psf_log_printf (psf, "8-bit linear PCM\n") ;
-                               break ;
-
-               case AU_ENCODING_PCM_16 :
-                               psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_PCM_16 ;
-                               psf->bytewidth = 2 ;
-                               psf_log_printf (psf, "16-bit linear PCM\n") ;
-                               break ;
-
-               case AU_ENCODING_PCM_24 :
-                               psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_PCM_24 ;
-                               psf->bytewidth = 3 ;
-                               psf_log_printf (psf, "24-bit linear PCM\n") ;
-                               break ;
-
-               case AU_ENCODING_PCM_32 :
-                               psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_PCM_32 ;
-                               psf->bytewidth = 4 ;
-                               psf_log_printf (psf, "32-bit linear PCM\n") ;
-                               break ;
-
-               case AU_ENCODING_FLOAT :
-                               psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_FLOAT ;
-                               psf->bytewidth = 4 ;
-                               psf_log_printf (psf, "32-bit float\n") ;
-                               break ;
-
-               case AU_ENCODING_DOUBLE :
-                               psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_DOUBLE ;
-                               psf->bytewidth = 8 ;
-                               psf_log_printf (psf, "64-bit double precision float\n") ;
-                               break ;
-
-               case AU_ENCODING_ALAW_8 :
-                               psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_ALAW ;
-                               psf->bytewidth = 1 ;    /* Before decoding */
-                               psf_log_printf (psf, "8-bit ISDN A-law\n") ;
-                               break ;
-
-               case AU_ENCODING_ADPCM_G721_32 :
-                               psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_G721_32 ;
-                               psf->bytewidth = 0 ;
-                               psf_log_printf (psf, "G721 32kbs ADPCM\n") ;
-                               break ;
-
-               case AU_ENCODING_ADPCM_G723_24 :
-                               psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_G723_24 ;
-                               psf->bytewidth = 0 ;
-                               psf_log_printf (psf, "G723 24kbs ADPCM\n") ;
-                               break ;
-
-               case AU_ENCODING_ADPCM_G723_40 :
-                               psf->sf.format |= SF_FORMAT_AU | SF_FORMAT_G723_40 ;
-                               psf->bytewidth = 0 ;
-                               psf_log_printf (psf, "G723 40kbs ADPCM\n") ;
-                               break ;
-
-               case AU_ENCODING_ADPCM_G722 :
-                               psf_log_printf (psf, "G722 64 kbs ADPCM (unsupported)\n") ;
-                               break ;
-
-               case AU_ENCODING_NEXT :
-                               psf_log_printf (psf, "Weird NeXT encoding format (unsupported)\n") ;
-                               break ;
-
-               default :
-                               psf_log_printf (psf, "Unknown!!\n") ;
-                               break ;
-               } ;
-
-       psf_log_printf (psf, "  Sample Rate : %d\n", au_fmt.samplerate) ;
-       if (au_fmt.channels < 1)
-       {       psf_log_printf (psf, "  Channels    : %d  **** should be >= 1\n", au_fmt.channels) ;
-               return SFE_CHANNEL_COUNT_ZERO ;
-               }
-       else
-               psf_log_printf (psf, "  Channels    : %d\n", au_fmt.channels) ;
-
-       psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
-       if (! psf->sf.frames && psf->blockwidth)
-               psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ;
-
-       return 0 ;
-} /* au_read_header */
-
diff --git a/libs/libsndfile/src/audio_detect.c b/libs/libsndfile/src/audio_detect.c
deleted file mode 100644 (file)
index 9cac83b..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <string.h>
-#include <errno.h>
-
-#include "common.h"
-
-typedef struct
-{      int le_float ;
-       int be_float ;
-       int le_int_24_32 ;
-       int be_int_24_32 ;
-} VOTE ;
-
-
-static void vote_for_format (VOTE * vote, const unsigned char * data, int datalen) ;
-
-int
-audio_detect (SF_PRIVATE * psf, AUDIO_DETECT *ad, const unsigned char * data, int datalen)
-{      VOTE vote ;
-
-       if (psf == NULL)
-               return 0 ;
-
-       if (ad == NULL || datalen < 256)
-               return 0 ;
-
-       vote_for_format (&vote, data, datalen) ;
-
-       psf_log_printf (psf, "audio_detect :\n"
-                       "    le_float     : %d\n"
-                       "    be_float     : %d\n"
-                       "    le_int_24_32 : %d\n"
-                       "    be_int_24_32 : %d\n",
-                       vote.le_float, vote.be_float, vote.le_int_24_32, vote.be_int_24_32) ;
-
-       if (0) puts (psf->parselog.buf) ;
-
-       if (ad->endianness == SF_ENDIAN_LITTLE && vote.le_float > (3 * datalen) / 4)
-       {       /* Almost certainly 32 bit floats. */
-               return SF_FORMAT_FLOAT ;
-               } ;
-
-       if (ad->endianness == SF_ENDIAN_LITTLE && vote.le_int_24_32 > (3 * datalen) / 4)
-       {       /* Almost certainly 24 bit data stored in 32 bit ints. */
-               return SF_FORMAT_PCM_32 ;
-               } ;
-
-       return 0 ;
-} /* data_detect */
-
-static void
-vote_for_format (VOTE * vote, const unsigned char * data, int datalen)
-{
-       int k ;
-
-       memset (vote, 0, sizeof (VOTE)) ;
-
-       datalen -= datalen % 4 ;
-
-       for (k = 0 ; k < datalen ; k ++)
-       {       if ((k % 4) == 0)
-               {       if (data [k] == 0 && data [k + 1] != 0)
-                               vote->le_int_24_32 += 4 ;
-
-                       if (data [2] != 0 && data [3] == 0)
-                               vote->le_int_24_32 += 4 ;
-
-                       if (data [0] != 0 && data [3] > 0x43 && data [3] < 0x4B)
-                               vote->le_float += 4 ;
-
-                       if (data [3] != 0 && data [0] > 0x43 && data [0] < 0x4B)
-                               vote->be_float += 4 ;
-                       } ;
-               } ;
-
-       return ;
-} /* vote_for_format */
-
diff --git a/libs/libsndfile/src/avr.c b/libs/libsndfile/src/avr.c
deleted file mode 100644 (file)
index a235b0d..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
-** Copyright (C) 2004-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <string.h>
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-#define TWOBIT_MARKER  (MAKE_MARKER ('2', 'B', 'I', 'T'))
-#define        AVR_HDR_SIZE    128
-
-#define        SFE_AVR_X       666
-
-/*
-** From: hyc@hanauma.Jpl.Nasa.Gov (Howard Chu)
-**
-** A lot of PD software exists to play Mac .snd files on the ST. One other
-** format that seems pretty popular (used by a number of commercial packages)
-** is the AVR format (from Audio Visual Research). This format has a 128 byte
-** header that looks like this (its actually packed, but thats not portable):
-*/
-
-typedef struct
-{      int             marker ;        /* 2BIT */
-       char    name [8] ;      /* null-padded sample name */
-       short   mono ;          /* 0 = mono, 0xffff = stereo */
-       short   rez ;           /* 8 = 8 bit, 16 = 16 bit */
-       short   sign ;          /* 0 = unsigned, 0xffff = signed */
-
-       short   loop ;          /* 0 = no loop, 0xffff = looping sample */
-       short   midi ;          /* 0xffff = no MIDI note assigned,  */
-                                               /*      0xffXX = single key note assignment */
-                                               /*      0xLLHH = key split, low/hi note */
-       int             srate ;         /* sample frequency in hertz */
-       int             frames ;        /* sample length in bytes or words (see rez) */
-       int             lbeg ;          /* offset to start of loop in bytes or words. */
-                                               /* set to zero if unused */
-       int             lend ;          /* offset to end of loop in bytes or words. */
-                                               /* set to sample length if unused */
-       short   res1 ;          /* Reserved, MIDI keyboard split */
-       short   res2 ;          /* Reserved, sample compression */
-       short   res3 ;          /* Reserved */
-       char    ext [20] ;      /* Additional filename space, used if (name[7] != 0) */
-       char    user [64] ; /* User defined. Typically ASCII message */
-} AVR_HEADER ;
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int             avr_close (SF_PRIVATE *psf) ;
-
-static int             avr_read_header (SF_PRIVATE *psf) ;
-static int             avr_write_header (SF_PRIVATE *psf, int calc_length) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-avr_open       (SF_PRIVATE *psf)
-{      int             error = 0 ;
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-       {       if ((error = avr_read_header (psf)))
-                       return error ;
-               } ;
-
-       if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_AVR)
-               return  SFE_BAD_OPEN_FORMAT ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       psf->endian = SF_ENDIAN_BIG ;
-
-               if (avr_write_header (psf, SF_FALSE))
-                       return psf->error ;
-
-               psf->write_header = avr_write_header ;
-               } ;
-
-       psf->container_close = avr_close ;
-
-       psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-       error = pcm_init (psf) ;
-
-       return error ;
-} /* avr_open */
-
-static int
-avr_read_header (SF_PRIVATE *psf)
-{      AVR_HEADER      hdr ;
-
-       memset (&hdr, 0, sizeof (hdr)) ;
-
-       psf_binheader_readf (psf, "pmb", 0, &hdr.marker, &hdr.name, sizeof (hdr.name)) ;
-       psf_log_printf (psf, "%M\n", hdr.marker) ;
-
-       if (hdr.marker != TWOBIT_MARKER)
-               return SFE_AVR_X ;
-
-       psf_log_printf (psf, "  Name        : %s\n", hdr.name) ;
-
-       psf_binheader_readf (psf, "E22222", &hdr.mono, &hdr.rez, &hdr.sign, &hdr.loop, &hdr.midi) ;
-
-       psf->sf.channels = (hdr.mono & 1) + 1 ;
-
-       psf_log_printf (psf, "  Channels    : %d\n  Bit width   : %d\n  Signed      : %s\n",
-                       (hdr.mono & 1) + 1, hdr.rez, hdr.sign ? "yes" : "no") ;
-
-       switch ((hdr.rez << 16) + (hdr.sign & 1))
-       {       case ((8 << 16) + 0) :
-                       psf->sf.format = SF_FORMAT_AVR | SF_FORMAT_PCM_U8 ;
-                       psf->bytewidth = 1 ;
-                       break ;
-
-               case ((8 << 16) + 1) :
-                       psf->sf.format = SF_FORMAT_AVR | SF_FORMAT_PCM_S8 ;
-                       psf->bytewidth = 1 ;
-                       break ;
-
-               case ((16 << 16) + 1) :
-                       psf->sf.format = SF_FORMAT_AVR | SF_FORMAT_PCM_16 ;
-                       psf->bytewidth = 2 ;
-                       break ;
-
-               default :
-                       psf_log_printf (psf, "Error : bad rez/sign combination.\n") ;
-                       return SFE_AVR_X ;
-               } ;
-
-       psf_binheader_readf (psf, "E4444", &hdr.srate, &hdr.frames, &hdr.lbeg, &hdr.lend) ;
-
-       psf->sf.frames = hdr.frames ;
-       psf->sf.samplerate = hdr.srate ;
-
-       psf_log_printf (psf, "  Frames      : %D\n", psf->sf.frames) ;
-       psf_log_printf (psf, "  Sample rate : %d\n", psf->sf.samplerate) ;
-
-       psf_binheader_readf (psf, "E222", &hdr.res1, &hdr.res2, &hdr.res3) ;
-       psf_binheader_readf (psf, "bb", hdr.ext, sizeof (hdr.ext), hdr.user, sizeof (hdr.user)) ;
-
-       psf_log_printf (psf, "  Ext         : %s\n  User        : %s\n", hdr.ext, hdr.user) ;
-
-       psf->endian = SF_ENDIAN_BIG ;
-
-       psf->dataoffset = AVR_HDR_SIZE ;
-       psf->datalength = hdr.frames * (hdr.rez / 8) ;
-
-       if (psf->fileoffset > 0)
-               psf->filelength = AVR_HDR_SIZE + psf->datalength ;
-
-       if (psf_ftell (psf) != psf->dataoffset)
-               psf_binheader_readf (psf, "j", psf->dataoffset - psf_ftell (psf)) ;
-
-       psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
-       if (psf->sf.frames == 0 && psf->blockwidth)
-               psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ;
-
-       return 0 ;
-} /* avr_read_header */
-
-static int
-avr_write_header (SF_PRIVATE *psf, int calc_length)
-{      sf_count_t      current ;
-       int                     sign ;
-
-       if (psf->pipeoffset > 0)
-               return 0 ;
-
-       current = psf_ftell (psf) ;
-
-       if (calc_length)
-       {       psf->filelength = psf_get_filelen (psf) ;
-
-               psf->datalength = psf->filelength - psf->dataoffset ;
-               if (psf->dataend)
-                       psf->datalength -= psf->filelength - psf->dataend ;
-
-               psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-               } ;
-
-       /* Reset the current header length to zero. */
-       psf->header [0] = 0 ;
-       psf->headindex = 0 ;
-
-       /*
-       ** Only attempt to seek if we are not writng to a pipe. If we are
-       ** writing to a pipe we shouldn't be here anyway.
-       */
-       if (psf->is_pipe == SF_FALSE)
-               psf_fseek (psf, 0, SEEK_SET) ;
-
-       psf_binheader_writef (psf, "Emz22", TWOBIT_MARKER, make_size_t (8),
-                       psf->sf.channels == 2 ? 0xFFFF : 0, psf->bytewidth * 8) ;
-
-       sign = ((SF_CODEC (psf->sf.format)) == SF_FORMAT_PCM_U8) ? 0 : 0xFFFF ;
-
-       psf_binheader_writef (psf, "E222", sign, 0, 0xFFFF) ;
-       psf_binheader_writef (psf, "E4444", psf->sf.samplerate, psf->sf.frames, 0, 0) ;
-
-       psf_binheader_writef (psf, "E222zz", 0, 0, 0, make_size_t (20), make_size_t (64)) ;
-
-       /* Header construction complete so write it out. */
-       psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-       if (psf->error)
-               return psf->error ;
-
-       psf->dataoffset = psf->headindex ;
-
-       if (current > 0)
-               psf_fseek (psf, current, SEEK_SET) ;
-
-       return psf->error ;
-} /* avr_write_header */
-
-static int
-avr_close (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-               avr_write_header (psf, SF_TRUE) ;
-
-       return 0 ;
-} /* avr_close */
-
diff --git a/libs/libsndfile/src/binheader_writef_check.py b/libs/libsndfile/src/binheader_writef_check.py
deleted file mode 100644 (file)
index 6ee609e..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-#!/usr/bin/python
-
-# Copyright (C) 2006-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-#       notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above copyright
-#       notice, this list of conditions and the following disclaimer in
-#       the documentation and/or other materials provided with the
-#       distribution.
-#     * Neither the author nor the names of any contributors may be used
-#       to endorse or promote products derived from this software without
-#       specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-# This parses C code using regexes (yes, thats horrible) and makes sure
-# that calling conventions to the function psf_binheader_writef are
-# correct.
-
-
-
-import re, string, sys
-
-_whitespace_re = re.compile ("\s+", re.MULTILINE)
-
-def find_binheader_writefs (data):
-       lst = re.findall ('psf_binheader_writef\s*\(\s*[a-zA-Z_]+\s*,\s*\"[^;]+;', data, re.MULTILINE)
-       return [_whitespace_re.sub (" ", x) for x in lst]
-
-def find_format_string (s):
-       fmt = re.search ('"([^"]+)"', s)
-       if not fmt:
-               print ("Bad format in :\n\n\t%s\n\n" % s)
-               sys.exit (1)
-       fmt = fmt.groups ()
-       if len (fmt) != 1:
-               print ("Bad format in :\n\n\t%s\n\n" % s)
-               sys.exit (1)
-       return _whitespace_re.sub ("", fmt [0])
-
-def get_param_list (data):
-       dlist = re.search ("\((.+)\)\s*;", data)
-       dlist = dlist.groups ()[0]
-       dlist = dlist.split(",")
-       dlist = [x.strip() for x in dlist]
-       return dlist [2:]
-
-def handle_file (fname):
-       errors = 0
-       data = open (fname, "r").read ()
-
-       writefs = find_binheader_writefs (data)
-       for item in writefs:
-               fmt = find_format_string (item)
-               params = get_param_list (item)
-               param_index = 0
-
-               # print item
-
-               for ch in fmt:
-                       if ch in 'Eet ':
-                               continue
-
-                       # print "    param [%d] %c : %s" % (param_index, ch, params [param_index])
-
-                       if ch != 'b':
-                               param_index += 1
-                               continue
-
-                       # print item
-                       # print "    param [%d] %c : %s <-> %s" % (param_index, ch, params [param_index], params [param_index + 1])
-
-                       # print (params [param_index + 1])
-                       if params [param_index + 1].find ("sizeof") < 0 \
-                                               and params [param_index + 1].find ("make_size_t") < 0 \
-                                               and params [param_index + 1].find ("strlen") < 0:
-                               if errors == 0: sys.stdout.write ("\n")
-                               print ("\n%s :" % fname)
-                               print ("    param [%d] %c : %s <-> %s" % (param_index, ch, params [param_index], params [param_index + 1]))
-                               print ("    %s" % item)
-                               errors += 1
-                       param_index += 2
-
-       return errors
-
-#===============================================================================
-
-if len (sys.argv) > 1:
-       sys.stdout.write ("\n    binheader_writef_check                   :")
-       sys.stdout.flush ()
-       errors = 0
-       for fname in sys.argv [1:]:
-               errors += handle_file (fname)
-       if errors > 0:
-               print ("\nErrors : %d\n" % errors)
-               sys.exit (1)
-
-print ("ok\n")
-
diff --git a/libs/libsndfile/src/broadcast.c b/libs/libsndfile/src/broadcast.c
deleted file mode 100644 (file)
index 128a6a2..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
-** Copyright (C) 2006-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2006 Paul Davis <paul@linuxaudiosystems.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stddef.h>
-#include <string.h>
-
-#include "common.h"
-
-
-static int gen_coding_history (char * added_history, int added_history_max, const SF_INFO * psfinfo) ;
-
-static inline size_t
-bc_min_size (const SF_BROADCAST_INFO* info)
-{      if (info == NULL)
-               return 0 ;
-
-       return offsetof (SF_BROADCAST_INFO, coding_history) + info->coding_history_size ;
-} /* bc_min_size */
-
-SF_BROADCAST_INFO_16K*
-broadcast_var_alloc (void)
-{      return calloc (1, sizeof (SF_BROADCAST_INFO_16K)) ;
-} /* broadcast_var_alloc */
-
-int
-broadcast_var_set (SF_PRIVATE *psf, const SF_BROADCAST_INFO * info, size_t datasize)
-{      size_t len ;
-
-       if (info == NULL)
-               return SF_FALSE ;
-
-       if (bc_min_size (info) > datasize)
-       {       psf->error = SFE_BAD_BROADCAST_INFO_SIZE ;
-               return SF_FALSE ;
-               } ;
-
-       if (datasize >= sizeof (SF_BROADCAST_INFO_16K))
-       {       psf->error = SFE_BAD_BROADCAST_INFO_TOO_BIG ;
-               return SF_FALSE ;
-               } ;
-
-       if (psf->broadcast_16k == NULL)
-       {       if ((psf->broadcast_16k = broadcast_var_alloc ()) == NULL)
-               {       psf->error = SFE_MALLOC_FAILED ;
-                       return SF_FALSE ;
-                       } ;
-               } ;
-
-       /* Only copy the first part of the struct. */
-       memcpy (psf->broadcast_16k, info, offsetof (SF_BROADCAST_INFO, coding_history)) ;
-
-       psf_strlcpy_crlf (psf->broadcast_16k->coding_history, info->coding_history, sizeof (psf->broadcast_16k->coding_history), datasize - offsetof (SF_BROADCAST_INFO, coding_history)) ;
-       len = strlen (psf->broadcast_16k->coding_history) ;
-
-       if (len > 0 && psf->broadcast_16k->coding_history [len - 1] != '\n')
-               psf_strlcat (psf->broadcast_16k->coding_history, sizeof (psf->broadcast_16k->coding_history), "\r\n") ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       char added_history [256] ;
-
-               gen_coding_history (added_history, sizeof (added_history), &(psf->sf)) ;
-               psf_strlcat (psf->broadcast_16k->coding_history, sizeof (psf->broadcast_16k->coding_history), added_history) ;
-               } ;
-
-       /* Force coding_history_size to be even. */
-       len = strlen (psf->broadcast_16k->coding_history) ;
-       len += (len & 1) ? 1 : 0 ;
-       psf->broadcast_16k->coding_history_size = len ;
-
-       /* Currently writing this version. */
-       psf->broadcast_16k->version = 1 ;
-
-       return SF_TRUE ;
-} /* broadcast_var_set */
-
-
-int
-broadcast_var_get (SF_PRIVATE *psf, SF_BROADCAST_INFO * data, size_t datasize)
-{      size_t size ;
-
-       if (psf->broadcast_16k == NULL)
-               return SF_FALSE ;
-
-       size = SF_MIN (datasize, bc_min_size ((const SF_BROADCAST_INFO *) psf->broadcast_16k)) ;
-
-       memcpy (data, psf->broadcast_16k, size) ;
-
-       return SF_TRUE ;
-} /* broadcast_var_get */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-gen_coding_history (char * added_history, int added_history_max, const SF_INFO * psfinfo)
-{      char chnstr [16] ;
-       int count, width ;
-
-       /*
-       **      From : http://www.sr.se/utveckling/tu/bwf/docs/codhist2.htm
-       **
-       **      Parameter            Variable string <allowed option>                 Unit
-       **      ==========================================================================================
-       **      Coding Algorithm     A=<ANALOGUE, PCM, MPEG1L1, MPEG1L2, MPEG1L3,
-       **                          MPEG2L1, MPEG2L2, MPEG2L3>
-       **      Sampling frequency   F=<11000,22050,24000,32000,44100,48000>          [Hz]
-       **      Bit-rate             B=<any bit-rate allowed in MPEG 2 (ISO/IEC       [kbit/s per channel]
-       **                          13818-3)>
-       **      Word Length          W=<8, 12, 14, 16, 18, 20, 22, 24>                [bits]
-       **      Mode                 M=<mono, stereo, dual-mono, joint-stereo>
-       **      Text, free string    T=<a free ASCII-text string for in house use.
-       **                          This string should contain no commas (ASCII
-       **                          2Chex). Examples of the contents: ID-No; codec
-       **                          type; A/D type>
-       */
-
-       switch (psfinfo->channels)
-       {       case 0 :
-                       return SF_FALSE ;
-
-               case 1 :
-                       psf_strlcpy (chnstr, sizeof (chnstr), "mono") ;
-                       break ;
-
-               case 2 :
-                       psf_strlcpy (chnstr, sizeof (chnstr), "stereo") ;
-                       break ;
-
-               default :
-                       snprintf (chnstr, sizeof (chnstr), "%uchn", psfinfo->channels) ;
-                       break ;
-               } ;
-
-       switch (SF_CODEC (psfinfo->format))
-       {       case SF_FORMAT_PCM_U8 :
-               case SF_FORMAT_PCM_S8 :
-                       width = 8 ;
-                       break ;
-               case SF_FORMAT_PCM_16 :
-                       width = 16 ;
-                       break ;
-               case SF_FORMAT_PCM_24 :
-                       width = 24 ;
-                       break ;
-               case SF_FORMAT_PCM_32 :
-                       width = 32 ;
-                       break ;
-               case SF_FORMAT_FLOAT :
-                       width = 24 ; /* Bits in the mantissa + 1 */
-                       break ;
-               case SF_FORMAT_DOUBLE :
-                       width = 53 ; /* Bits in the mantissa + 1 */
-                       break ;
-               case SF_FORMAT_ULAW :
-               case SF_FORMAT_ALAW :
-                       width = 12 ;
-                       break ;
-               default :
-                       width = 42 ;
-                       break ;
-               } ;
-
-       count = snprintf (added_history, added_history_max,
-                                                       "A=PCM,F=%u,W=%d,M=%s,T=%s-%s\r\n",
-                                                       psfinfo->samplerate, width, chnstr, PACKAGE, VERSION) ;
-
-       if (count >= added_history_max)
-               return 0 ;
-
-       return count ;
-} /* gen_coding_history */
-
diff --git a/libs/libsndfile/src/caf.c b/libs/libsndfile/src/caf.c
deleted file mode 100644 (file)
index 8f95d78..0000000
+++ /dev/null
@@ -1,804 +0,0 @@
-/*
-** Copyright (C) 2005-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <stdlib.h>
-#include       <string.h>
-#include       <ctype.h>
-#include       <math.h>
-#ifdef HAVE_INTTYPES_H
-#include       <inttypes.h>
-#endif
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-#include       "chanmap.h"
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-
-#define aac_MARKER             MAKE_MARKER ('a', 'a', 'c', ' ')
-#define alac_MARKER            MAKE_MARKER ('a', 'l', 'a', 'c')
-#define alaw_MARKER            MAKE_MARKER ('a', 'l', 'a', 'w')
-#define caff_MARKER            MAKE_MARKER ('c', 'a', 'f', 'f')
-#define chan_MARKER            MAKE_MARKER ('c', 'h', 'a', 'n')
-#define data_MARKER            MAKE_MARKER ('d', 'a', 't', 'a')
-#define desc_MARKER            MAKE_MARKER ('d', 'e', 's', 'c')
-#define edct_MARKER            MAKE_MARKER ('e', 'd', 'c', 't')
-#define free_MARKER            MAKE_MARKER ('f', 'r', 'e', 'e')
-#define ima4_MARKER            MAKE_MARKER ('i', 'm', 'a', '4')
-#define info_MARKER            MAKE_MARKER ('i', 'n', 'f', 'o')
-#define inst_MARKER            MAKE_MARKER ('i', 'n', 's', 't')
-#define kuki_MARKER            MAKE_MARKER ('k', 'u', 'k', 'i')
-#define lpcm_MARKER            MAKE_MARKER ('l', 'p', 'c', 'm')
-#define mark_MARKER            MAKE_MARKER ('m', 'a', 'r', 'k')
-#define midi_MARKER            MAKE_MARKER ('m', 'i', 'd', 'i')
-#define mp1_MARKER             MAKE_MARKER ('.', 'm', 'p', '1')
-#define mp2_MARKER             MAKE_MARKER ('.', 'm', 'p', '2')
-#define mp3_MARKER             MAKE_MARKER ('.', 'm', 'p', '3')
-#define ovvw_MARKER            MAKE_MARKER ('o', 'v', 'v', 'w')
-#define pakt_MARKER            MAKE_MARKER ('p', 'a', 'k', 't')
-#define peak_MARKER            MAKE_MARKER ('p', 'e', 'a', 'k')
-#define regn_MARKER            MAKE_MARKER ('r', 'e', 'g', 'n')
-#define strg_MARKER            MAKE_MARKER ('s', 't', 'r', 'g')
-#define umid_MARKER            MAKE_MARKER ('u', 'm', 'i', 'd')
-#define uuid_MARKER            MAKE_MARKER ('u', 'u', 'i', 'd')
-#define ulaw_MARKER            MAKE_MARKER ('u', 'l', 'a', 'w')
-#define MAC3_MARKER            MAKE_MARKER ('M', 'A', 'C', '3')
-#define MAC6_MARKER            MAKE_MARKER ('M', 'A', 'C', '6')
-
-#define CAF_PEAK_CHUNK_SIZE(ch)        ((int) (sizeof (int) + ch * (sizeof (float) + 8)))
-
-#define SFE_CAF_NOT_CAF        666
-#define SFE_CAF_NO_DESC        667
-#define SFE_CAF_BAD_PEAK 668
-
-/*------------------------------------------------------------------------------
-** Typedefs.
-*/
-
-typedef struct
-{      uint8_t         srate [8] ;
-       uint32_t        fmt_id ;
-       uint32_t        fmt_flags ;
-       uint32_t        pkt_bytes ;
-       uint32_t        frames_per_packet ;
-       uint32_t        channels_per_frame ;
-       uint32_t        bits_per_chan ;
-} DESC_CHUNK ;
-
-typedef struct
-{      int                     chanmap_tag ;
-
-       ALAC_DECODER_INFO       alac ;
-} CAF_PRIVATE ;
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int     caf_close (SF_PRIVATE *psf) ;
-static int     caf_read_header (SF_PRIVATE *psf) ;
-static int     caf_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int     caf_command (SF_PRIVATE *psf, int command, void *data, int datasize) ;
-static int     caf_read_chanmap (SF_PRIVATE * psf, sf_count_t chunk_size) ;
-
-static int caf_set_chunk (SF_PRIVATE *psf, const SF_CHUNK_INFO * chunk_info) ;
-static SF_CHUNK_ITERATOR * caf_next_chunk_iterator (SF_PRIVATE *psf, SF_CHUNK_ITERATOR * iterator) ;
-static int caf_get_chunk_size (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info) ;
-static int caf_get_chunk_data (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-caf_open (SF_PRIVATE *psf)
-{      CAF_PRIVATE * pcaf ;
-       int     subformat, format, error = 0 ;
-
-       if ((psf->container_data = calloc (1, sizeof (CAF_PRIVATE))) == NULL)
-               return SFE_MALLOC_FAILED ;
-
-       pcaf = psf->container_data ;
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-       {       if ((error = caf_read_header (psf)))
-                       return error ;
-
-               psf->next_chunk_iterator = caf_next_chunk_iterator ;
-               psf->get_chunk_size = caf_get_chunk_size ;
-               psf->get_chunk_data = caf_get_chunk_data ;
-               } ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       if (psf->is_pipe)
-                       return SFE_NO_PIPE_WRITE ;
-
-               format = SF_CONTAINER (psf->sf.format) ;
-               if (format != SF_FORMAT_CAF)
-                       return  SFE_BAD_OPEN_FORMAT ;
-
-               psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-               if (psf->file.mode != SFM_RDWR || psf->filelength < 44)
-               {       psf->filelength = 0 ;
-                       psf->datalength = 0 ;
-                       psf->dataoffset = 0 ;
-                       psf->sf.frames = 0 ;
-                       } ;
-
-               psf->strings.flags = SF_STR_ALLOW_START ;
-
-               /*
-               **      By default, add the peak chunk to floating point files. Default behaviour
-               **      can be switched off using sf_command (SFC_SET_PEAK_CHUNK, SF_FALSE).
-               */
-               if (psf->file.mode == SFM_WRITE && (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE))
-               {       if ((psf->peak_info = peak_info_calloc (psf->sf.channels)) == NULL)
-                               return SFE_MALLOC_FAILED ;
-                       psf->peak_info->peak_loc = SF_PEAK_START ;
-                       } ;
-
-               if ((error = caf_write_header (psf, SF_FALSE)) != 0)
-                       return error ;
-
-               psf->write_header       = caf_write_header ;
-               psf->set_chunk          = caf_set_chunk ;
-               } ;
-
-       psf->container_close = caf_close ;
-       psf->command = caf_command ;
-
-       switch (subformat)
-       {       case SF_FORMAT_PCM_S8 :
-               case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_PCM_24 :
-               case SF_FORMAT_PCM_32 :
-                                       error = pcm_init (psf) ;
-                                       break ;
-
-               case SF_FORMAT_ULAW :
-                                       error = ulaw_init (psf) ;
-                                       break ;
-
-               case SF_FORMAT_ALAW :
-                                       error = alaw_init (psf) ;
-                                       break ;
-
-               /* Lite remove start */
-               case SF_FORMAT_FLOAT :
-                                       error = float32_init (psf) ;
-                                       break ;
-
-               case SF_FORMAT_DOUBLE :
-                                       error = double64_init (psf) ;
-                                       break ;
-
-               case SF_FORMAT_ALAC_16 :
-               case SF_FORMAT_ALAC_20 :
-               case SF_FORMAT_ALAC_24 :
-               case SF_FORMAT_ALAC_32 :
-                                       if (psf->file.mode == SFM_READ)
-                                               /* Only pass the ALAC_DECODER_INFO in read mode. */
-                                               error = alac_init (psf, &pcaf->alac) ;
-                                       else
-                                               error = alac_init (psf, NULL) ;
-                                       break ;
-
-               /* Lite remove end */
-
-               default :
-                       return SFE_UNSUPPORTED_ENCODING ;
-               } ;
-
-       return error ;
-} /* caf_open */
-
-static int
-caf_close (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-               caf_write_header (psf, SF_TRUE) ;
-
-       return 0 ;
-} /* caf_close */
-
-static int
-caf_command (SF_PRIVATE * psf, int command, void * UNUSED (data), int UNUSED (datasize))
-{      CAF_PRIVATE     *pcaf ;
-
-       if ((pcaf = psf->container_data) == NULL)
-               return SFE_INTERNAL ;
-
-       switch (command)
-       {       case SFC_SET_CHANNEL_MAP_INFO :
-                       pcaf->chanmap_tag = aiff_caf_find_channel_layout_tag (psf->channel_map, psf->sf.channels) ;
-                       return (pcaf->chanmap_tag != 0) ;
-
-               default :
-                       break ;
-       } ;
-
-       return 0 ;
-} /* caf_command */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-decode_desc_chunk (SF_PRIVATE *psf, const DESC_CHUNK *desc)
-{      int format = SF_FORMAT_CAF ;
-
-       psf->sf.channels = desc->channels_per_frame ;
-
-       if (desc->fmt_id == alac_MARKER)
-       {       CAF_PRIVATE     *pcaf ;
-
-               if ((pcaf = psf->container_data) != NULL)
-               {       switch (desc->fmt_flags)
-                       {       case 1 :
-                                       pcaf->alac.bits_per_sample = 16 ;
-                                       format |= SF_FORMAT_ALAC_16 ;
-                                       break ;
-                               case 2 :
-                                       pcaf->alac.bits_per_sample = 20 ;
-                                       format |= SF_FORMAT_ALAC_20 ;
-                                       break ;
-                               case 3 :
-                                       pcaf->alac.bits_per_sample = 24 ;
-                                       format |= SF_FORMAT_ALAC_24 ;
-                                       break ;
-                               case 4 :
-                                       pcaf->alac.bits_per_sample = 32 ;
-                                       format |= SF_FORMAT_ALAC_32 ;
-                                       break ;
-                               default :
-                                       psf_log_printf (psf, "Bad ALAC format flag value of %d\n", desc->fmt_flags) ;
-                               } ;
-
-                       pcaf->alac.frames_per_packet = desc->frames_per_packet ;
-                       } ;
-
-               return format ;
-               } ;
-
-       format |= psf->endian == SF_ENDIAN_LITTLE ? SF_ENDIAN_LITTLE : 0 ;
-
-       if (desc->fmt_id == lpcm_MARKER && desc->fmt_flags & 1)
-       {       /* Floating point data. */
-               if (desc->bits_per_chan == 32 && desc->pkt_bytes == 4 * desc->channels_per_frame)
-               {       psf->bytewidth = 4 ;
-                       return format | SF_FORMAT_FLOAT ;
-                       } ;
-               if (desc->bits_per_chan == 64 && desc->pkt_bytes == 8 * desc->channels_per_frame)
-               {       psf->bytewidth = 8 ;
-                       return format | SF_FORMAT_DOUBLE ;
-                       } ;
-               } ;
-
-       if (desc->fmt_id == lpcm_MARKER && (desc->fmt_flags & 1) == 0)
-       {       /* Integer data. */
-               if (desc->bits_per_chan == 32 && desc->pkt_bytes == 4 * desc->channels_per_frame)
-               {       psf->bytewidth = 4 ;
-                       return format | SF_FORMAT_PCM_32 ;
-                       } ;
-               if (desc->bits_per_chan == 24 && desc->pkt_bytes == 3 * desc->channels_per_frame)
-               {       psf->bytewidth = 3 ;
-                       return format | SF_FORMAT_PCM_24 ;
-                       } ;
-               if (desc->bits_per_chan == 16 && desc->pkt_bytes == 2 * desc->channels_per_frame)
-               {       psf->bytewidth = 2 ;
-                       return format | SF_FORMAT_PCM_16 ;
-                       } ;
-               if (desc->bits_per_chan == 8 && desc->pkt_bytes == 1 * desc->channels_per_frame)
-               {       psf->bytewidth = 1 ;
-                       return format | SF_FORMAT_PCM_S8 ;
-                       } ;
-               } ;
-
-       if (desc->fmt_id == alaw_MARKER && desc->bits_per_chan == 8)
-       {       psf->bytewidth = 1 ;
-               return format | SF_FORMAT_ALAW ;
-               } ;
-
-       if (desc->fmt_id == ulaw_MARKER && desc->bits_per_chan == 8)
-       {       psf->bytewidth = 1 ;
-               return format | SF_FORMAT_ULAW ;
-               } ;
-
-       psf_log_printf (psf, "**** Unknown format identifier.\n") ;
-
-       return 0 ;
-} /* decode_desc_chunk */
-
-static int
-caf_read_header (SF_PRIVATE *psf)
-{      CAF_PRIVATE     *pcaf ;
-       BUF_UNION       ubuf ;
-       DESC_CHUNK desc ;
-       sf_count_t chunk_size ;
-       double srate ;
-       short version, flags ;
-       int marker, k, have_data = 0, error ;
-
-       if ((pcaf = psf->container_data) == NULL)
-               return SFE_INTERNAL ;
-
-       memset (&desc, 0, sizeof (desc)) ;
-
-       /* Set position to start of file to begin reading header. */
-       psf_binheader_readf (psf, "pmE2E2", 0, &marker, &version, &flags) ;
-       psf_log_printf (psf, "%M\n  Version : %d\n  Flags   : %x\n", marker, version, flags) ;
-       if (marker != caff_MARKER)
-               return SFE_CAF_NOT_CAF ;
-
-       psf_binheader_readf (psf, "mE8b", &marker, &chunk_size, ubuf.ucbuf, 8) ;
-       srate = double64_be_read (ubuf.ucbuf) ;
-       snprintf (ubuf.cbuf, sizeof (ubuf.cbuf), "%5.3f", srate) ;
-       psf_log_printf (psf, "%M : %D\n  Sample rate  : %s\n", marker, chunk_size, ubuf.cbuf) ;
-       if (marker != desc_MARKER)
-               return SFE_CAF_NO_DESC ;
-
-       if (chunk_size < SIGNED_SIZEOF (DESC_CHUNK))
-       {       psf_log_printf (psf, "**** Chunk size too small. Should be > 32 bytes.\n") ;
-               return SFE_MALFORMED_FILE ;
-               } ;
-
-       psf->sf.samplerate = lrint (srate) ;
-
-       psf_binheader_readf (psf, "mE44444", &desc.fmt_id, &desc.fmt_flags, &desc.pkt_bytes, &desc.frames_per_packet,
-                       &desc.channels_per_frame, &desc.bits_per_chan) ;
-       psf_log_printf (psf, "  Format id    : %M\n  Format flags : %x\n  Bytes / packet   : %u\n"
-                       "  Frames / packet  : %u\n  Channels / frame : %u\n  Bits / channel   : %u\n",
-                       desc.fmt_id, desc.fmt_flags, desc.pkt_bytes, desc.frames_per_packet, desc.channels_per_frame, desc.bits_per_chan) ;
-
-       if (desc.channels_per_frame > SF_MAX_CHANNELS)
-       {       psf_log_printf (psf, "**** Bad channels per frame value %u.\n", desc.channels_per_frame) ;
-               return SFE_MALFORMED_FILE ;
-               } ;
-
-       if (chunk_size > SIGNED_SIZEOF (DESC_CHUNK))
-               psf_binheader_readf (psf, "j", (int) (chunk_size - sizeof (DESC_CHUNK))) ;
-
-       psf->sf.channels = desc.channels_per_frame ;
-
-       while (psf_ftell (psf) < psf->filelength)
-       {       marker = 0 ;
-               chunk_size = 0 ;
-
-               psf_binheader_readf (psf, "mE8", &marker, &chunk_size) ;
-               if (marker == 0)
-               {       psf_log_printf (psf, "Have 0 marker.\n") ;
-                       break ;
-                       } ;
-
-               psf_store_read_chunk_u32 (&psf->rchunks, marker, psf_ftell (psf), chunk_size) ;
-
-               switch (marker)
-               {       case peak_MARKER :
-                               psf_log_printf (psf, "%M : %D\n", marker, chunk_size) ;
-                               if (chunk_size != CAF_PEAK_CHUNK_SIZE (psf->sf.channels))
-                               {       psf_binheader_readf (psf, "j", make_size_t (chunk_size)) ;
-                                       psf_log_printf (psf, "*** File PEAK chunk %D should be %d.\n", chunk_size, CAF_PEAK_CHUNK_SIZE (psf->sf.channels)) ;
-                                       return SFE_CAF_BAD_PEAK ;
-                                       } ;
-
-                               if ((psf->peak_info = peak_info_calloc (psf->sf.channels)) == NULL)
-                                       return SFE_MALLOC_FAILED ;
-
-                               /* read in rest of PEAK chunk. */
-                               psf_binheader_readf (psf, "E4", & (psf->peak_info->edit_number)) ;
-                               psf_log_printf (psf, "  edit count : %d\n", psf->peak_info->edit_number) ;
-
-                               psf_log_printf (psf, "     Ch   Position       Value\n") ;
-                               for (k = 0 ; k < psf->sf.channels ; k++)
-                               {       sf_count_t position ;
-                                       float value ;
-
-                                       psf_binheader_readf (psf, "Ef8", &value, &position) ;
-                                       psf->peak_info->peaks [k].value = value ;
-                                       psf->peak_info->peaks [k].position = position ;
-
-                                       snprintf (ubuf.cbuf, sizeof (ubuf.cbuf), "    %2d   %-12" PRId64 "   %g\n", k, position, value) ;
-                                       psf_log_printf (psf, ubuf.cbuf) ;
-                                       } ;
-
-                               psf->peak_info->peak_loc = SF_PEAK_START ;
-                               break ;
-
-                       case chan_MARKER :
-                               if (chunk_size < 12)
-                               {       psf_log_printf (psf, "%M : %D (should be >= 12)\n", marker, chunk_size) ;
-                                       psf_binheader_readf (psf, "j", make_size_t (chunk_size)) ;
-                                       break ;
-                                       }
-
-                               psf_log_printf (psf, "%M : %D\n", marker, chunk_size) ;
-
-                               if ((error = caf_read_chanmap (psf, chunk_size)))
-                                       return error ;
-                               break ;
-
-                       case free_MARKER :
-                               psf_log_printf (psf, "%M : %D\n", marker, chunk_size) ;
-                               psf_binheader_readf (psf, "j", make_size_t (chunk_size)) ;
-                               break ;
-
-                       case data_MARKER :
-                               psf_binheader_readf (psf, "E4", &k) ;
-                               psf_log_printf (psf, "  edit : %u\n", k) ;
-
-                               if (chunk_size == -1)
-                               {       psf_log_printf (psf, "%M : -1\n") ;
-                                       chunk_size = psf->filelength - psf->headindex ;
-                                       }
-                               else if (psf->filelength > 0 && psf->filelength < psf->headindex + chunk_size - 16)
-                                       psf_log_printf (psf, "%M : %D (should be %D)\n", marker, chunk_size, psf->filelength - psf->headindex - 8) ;
-                               else
-                                       psf_log_printf (psf, "%M : %D\n", marker, chunk_size) ;
-
-
-                               psf->dataoffset = psf->headindex ;
-
-                               /* Subtract the 4 bytes of the 'edit' field above. */
-                               psf->datalength = chunk_size - 4 ;
-
-                               psf_binheader_readf (psf, "j", psf->datalength) ;
-                               have_data = 1 ;
-                               break ;
-
-                       case kuki_MARKER :
-                               psf_log_printf (psf, "%M : %D\n", marker, chunk_size) ;
-                               pcaf->alac.kuki_offset = psf_ftell (psf) - 12 ;
-                               psf_binheader_readf (psf, "j", make_size_t (chunk_size)) ;
-                               break ;
-
-                       case pakt_MARKER :
-                               psf_log_printf (psf, "%M : %D\n", marker, chunk_size) ;
-
-                               psf_binheader_readf (psf, "E8844", &pcaf->alac.packets, &pcaf->alac.valid_frames,
-                                                                       &pcaf->alac.priming_frames, &pcaf->alac.remainder_frames) ;
-
-                               psf_log_printf (psf,
-                                               "  Packets          : %D\n"
-                                               "  Valid frames     : %D\n"
-                                               "  Priming frames   : %d\n"
-                                               "  Remainder frames : %d\n",
-                                               pcaf->alac.packets, pcaf->alac.valid_frames, pcaf->alac.priming_frames,
-                                               pcaf->alac.remainder_frames
-                                               ) ;
-
-                               if (pcaf->alac.packets == 0 && pcaf->alac.valid_frames == 0
-                                                       && pcaf->alac.priming_frames == 0 && pcaf->alac.remainder_frames == 0)
-                                       psf_log_printf (psf, "*** 'pakt' chunk header is all zero.\n") ;
-
-                               pcaf->alac.pakt_offset = psf_ftell (psf) - 12 ;
-                               psf_binheader_readf (psf, "j", make_size_t (chunk_size) - 24) ;
-                               break ;
-
-                       default :
-                               psf_log_printf (psf, "%M : %D (skipped)\n", marker, chunk_size) ;
-                               psf_binheader_readf (psf, "j", make_size_t (chunk_size)) ;
-                               break ;
-                       } ;
-
-               if (! psf->sf.seekable && have_data)
-                       break ;
-
-               if (psf_ftell (psf) >= psf->filelength - SIGNED_SIZEOF (chunk_size))
-               {       psf_log_printf (psf, "End\n") ;
-                       break ;
-                       } ;
-               } ;
-
-       if (have_data == 0)
-       {       psf_log_printf (psf, "**** Error, could not find 'data' chunk.\n") ;
-               return SFE_MALFORMED_FILE ;
-               } ;
-
-       psf->endian = (desc.fmt_flags & 2) ? SF_ENDIAN_LITTLE : SF_ENDIAN_BIG ;
-
-       psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-       if ((psf->sf.format = decode_desc_chunk (psf, &desc)) == 0)
-               return SFE_UNSUPPORTED_ENCODING ;
-
-       if (psf->bytewidth > 0)
-               psf->sf.frames = psf->datalength / psf->bytewidth ;
-
-       return 0 ;
-} /* caf_read_header */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-caf_write_header (SF_PRIVATE *psf, int calc_length)
-{      BUF_UNION       ubuf ;
-       CAF_PRIVATE     *pcaf ;
-       DESC_CHUNK desc ;
-       sf_count_t current, free_len ;
-       uint32_t uk ;
-       int subformat, append_free_block = SF_TRUE ;
-
-       if ((pcaf = psf->container_data) == NULL)
-               return SFE_INTERNAL ;
-
-       memset (&desc, 0, sizeof (desc)) ;
-
-       current = psf_ftell (psf) ;
-
-       if (calc_length)
-       {       psf->filelength = psf_get_filelen (psf) ;
-
-               psf->datalength = psf->filelength - psf->dataoffset ;
-
-               if (psf->dataend)
-                       psf->datalength -= psf->filelength - psf->dataend ;
-
-               if (psf->bytewidth > 0)
-                       psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-               } ;
-
-       /* Reset the current header length to zero. */
-       psf->header [0] = 0 ;
-       psf->headindex = 0 ;
-       psf_fseek (psf, 0, SEEK_SET) ;
-
-       /* 'caff' marker, version and flags. */
-       psf_binheader_writef (psf, "Em22", caff_MARKER, 1, 0) ;
-
-       /* 'desc' marker and chunk size. */
-       psf_binheader_writef (psf, "Em8", desc_MARKER, (sf_count_t) (sizeof (DESC_CHUNK))) ;
-
-       double64_be_write (1.0 * psf->sf.samplerate, ubuf.ucbuf) ;
-       psf_binheader_writef (psf, "b", ubuf.ucbuf, make_size_t (8)) ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-
-       psf->endian = SF_ENDIAN (psf->sf.format) ;
-
-       if (CPU_IS_BIG_ENDIAN && (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU))
-               psf->endian = SF_ENDIAN_BIG ;
-       else if (CPU_IS_LITTLE_ENDIAN && (psf->endian == SF_ENDIAN_LITTLE || psf->endian == SF_ENDIAN_CPU))
-               psf->endian = SF_ENDIAN_LITTLE ;
-
-       if (psf->endian == SF_ENDIAN_LITTLE)
-               desc.fmt_flags = 2 ;
-       else
-               psf->endian = SF_ENDIAN_BIG ;
-
-       /* initial section (same for all, it appears) */
-       switch (subformat)
-       {       case SF_FORMAT_PCM_S8 :
-                       desc.fmt_id = lpcm_MARKER ;
-                       psf->bytewidth = 1 ;
-                       desc.pkt_bytes = psf->bytewidth * psf->sf.channels ;
-                       desc.frames_per_packet = 1 ;
-                       desc.channels_per_frame = psf->sf.channels ;
-                       desc.bits_per_chan = 8 ;
-                       break ;
-
-               case SF_FORMAT_PCM_16 :
-                       desc.fmt_id = lpcm_MARKER ;
-                       psf->bytewidth = 2 ;
-                       desc.pkt_bytes = psf->bytewidth * psf->sf.channels ;
-                       desc.frames_per_packet = 1 ;
-                       desc.channels_per_frame = psf->sf.channels ;
-                       desc.bits_per_chan = 16 ;
-                       break ;
-
-               case SF_FORMAT_PCM_24 :
-                       psf->bytewidth = 3 ;
-                       desc.pkt_bytes = psf->bytewidth * psf->sf.channels ;
-                       desc.frames_per_packet = 1 ;
-                       desc.channels_per_frame = psf->sf.channels ;
-                       desc.bits_per_chan = 24 ;
-                       desc.fmt_id = lpcm_MARKER ;
-                       break ;
-
-               case SF_FORMAT_PCM_32 :
-                       desc.fmt_id = lpcm_MARKER ;
-                       psf->bytewidth = 4 ;
-                       desc.pkt_bytes = psf->bytewidth * psf->sf.channels ;
-                       desc.frames_per_packet = 1 ;
-                       desc.channels_per_frame = psf->sf.channels ;
-                       desc.bits_per_chan = 32 ;
-                       break ;
-
-               case SF_FORMAT_FLOAT :
-                       desc.fmt_id = lpcm_MARKER ;
-                       desc.fmt_flags |= 1 ;
-                       psf->bytewidth = 4 ;
-                       desc.pkt_bytes = psf->bytewidth * psf->sf.channels ;
-                       desc.frames_per_packet = 1 ;
-                       desc.channels_per_frame = psf->sf.channels ;
-                       desc.bits_per_chan = 32 ;
-                       break ;
-
-               case SF_FORMAT_DOUBLE :
-                       desc.fmt_id = lpcm_MARKER ;
-                       desc.fmt_flags |= 1 ;
-                       psf->bytewidth = 8 ;
-                       desc.pkt_bytes = psf->bytewidth * psf->sf.channels ;
-                       desc.frames_per_packet = 1 ;
-                       desc.channels_per_frame = psf->sf.channels ;
-                       desc.bits_per_chan = 64 ;
-                       break ;
-
-               case SF_FORMAT_ALAW :
-                       desc.fmt_id = alaw_MARKER ;
-                       psf->bytewidth = 1 ;
-                       desc.pkt_bytes = psf->bytewidth * psf->sf.channels ;
-                       desc.frames_per_packet = 1 ;
-                       desc.channels_per_frame = psf->sf.channels ;
-                       desc.bits_per_chan = 8 ;
-                       break ;
-
-               case SF_FORMAT_ULAW :
-                       desc.fmt_id = ulaw_MARKER ;
-                       psf->bytewidth = 1 ;
-                       desc.pkt_bytes = psf->bytewidth * psf->sf.channels ;
-                       desc.frames_per_packet = 1 ;
-                       desc.channels_per_frame = psf->sf.channels ;
-                       desc.bits_per_chan = 8 ;
-                       break ;
-
-               case SF_FORMAT_ALAC_16 :
-               case SF_FORMAT_ALAC_20 :
-               case SF_FORMAT_ALAC_24 :
-               case SF_FORMAT_ALAC_32 :
-                       desc.fmt_id = alac_MARKER ;
-                       desc.pkt_bytes = psf->bytewidth * psf->sf.channels ;
-                       desc.channels_per_frame = psf->sf.channels ;
-                       alac_get_desc_chunk_items (subformat, &desc.fmt_flags, &desc.frames_per_packet) ;
-                       append_free_block = SF_FALSE ;
-                       break ;
-
-               default :
-                       return SFE_UNIMPLEMENTED ;
-               } ;
-
-       psf_binheader_writef (psf, "mE44444", desc.fmt_id, desc.fmt_flags, desc.pkt_bytes, desc.frames_per_packet, desc.channels_per_frame, desc.bits_per_chan) ;
-
-#if 0
-       if (psf->strings.flags & SF_STR_LOCATE_START)
-               caf_write_strings (psf, SF_STR_LOCATE_START) ;
-#endif
-
-       if (psf->peak_info != NULL)
-       {       int k ;
-               psf_binheader_writef (psf, "Em84", peak_MARKER, (sf_count_t) CAF_PEAK_CHUNK_SIZE (psf->sf.channels), psf->peak_info->edit_number) ;
-               for (k = 0 ; k < psf->sf.channels ; k++)
-                       psf_binheader_writef (psf, "Ef8", (float) psf->peak_info->peaks [k].value, psf->peak_info->peaks [k].position) ;
-               } ;
-
-       if (psf->channel_map && pcaf->chanmap_tag)
-               psf_binheader_writef (psf, "Em8444", chan_MARKER, (sf_count_t) 12, pcaf->chanmap_tag, 0, 0) ;
-
-       /* Write custom headers. */
-       for (uk = 0 ; uk < psf->wchunks.used ; uk++)
-               psf_binheader_writef (psf, "m44b", (int) psf->wchunks.chunks [uk].mark32, 0, psf->wchunks.chunks [uk].len, psf->wchunks.chunks [uk].data, make_size_t (psf->wchunks.chunks [uk].len)) ;
-
-       if (append_free_block)
-       {       /* Add free chunk so that the actual audio data starts at a multiple 0x1000. */
-               free_len = 0x1000 - psf->headindex - 16 - 12 ;
-               while (free_len < 0)
-                       free_len += 0x1000 ;
-               psf_binheader_writef (psf, "Em8z", free_MARKER, free_len, (int) free_len) ;
-               } ;
-
-       psf_binheader_writef (psf, "Em84", data_MARKER, psf->datalength + 4, 0) ;
-
-       psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-       if (psf->error)
-               return psf->error ;
-
-       psf->dataoffset = psf->headindex ;
-       if (current < psf->dataoffset)
-               psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-       else if (current > 0)
-               psf_fseek (psf, current, SEEK_SET) ;
-
-       return psf->error ;
-} /* caf_write_header */
-
-static int
-caf_read_chanmap (SF_PRIVATE * psf, sf_count_t chunk_size)
-{      const AIFF_CAF_CHANNEL_MAP * map_info ;
-       unsigned channel_bitmap, channel_decriptions, bytesread ;
-       int layout_tag ;
-
-       bytesread = psf_binheader_readf (psf, "E444", &layout_tag, &channel_bitmap, &channel_decriptions) ;
-
-       map_info = aiff_caf_of_channel_layout_tag (layout_tag) ;
-
-       psf_log_printf (psf, "  Tag    : %x\n", layout_tag) ;
-       if (map_info)
-               psf_log_printf (psf, "  Layout : %s\n", map_info->name) ;
-
-       if (bytesread < chunk_size)
-               psf_binheader_readf (psf, "j", chunk_size - bytesread) ;
-
-       if (map_info->channel_map != NULL)
-       {       size_t chanmap_size = psf->sf.channels * sizeof (psf->channel_map [0]) ;
-
-               free (psf->channel_map) ;
-
-               if ((psf->channel_map = malloc (chanmap_size)) == NULL)
-                       return SFE_MALLOC_FAILED ;
-
-               memcpy (psf->channel_map, map_info->channel_map, chanmap_size) ;
-               } ;
-
-       return 0 ;
-} /* caf_read_chanmap */
-
-/*==============================================================================
-*/
-
-static int
-caf_set_chunk (SF_PRIVATE *psf, const SF_CHUNK_INFO * chunk_info)
-{      return psf_save_write_chunk (&psf->wchunks, chunk_info) ;
-} /* caf_set_chunk */
-
-static SF_CHUNK_ITERATOR *
-caf_next_chunk_iterator (SF_PRIVATE *psf, SF_CHUNK_ITERATOR * iterator)
-{      return psf_next_chunk_iterator (&psf->rchunks, iterator) ;
-} /* caf_next_chunk_iterator */
-
-static int
-caf_get_chunk_size (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info)
-{      int indx ;
-
-       if ((indx = psf_find_read_chunk_iterator (&psf->rchunks, iterator)) < 0)
-               return SFE_UNKNOWN_CHUNK ;
-
-       chunk_info->datalen = psf->rchunks.chunks [indx].len ;
-
-       return SFE_NO_ERROR ;
-} /* caf_get_chunk_size */
-
-static int
-caf_get_chunk_data (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info)
-{      int indx ;
-       sf_count_t pos ;
-
-       if ((indx = psf_find_read_chunk_iterator (&psf->rchunks, iterator)) < 0)
-               return SFE_UNKNOWN_CHUNK ;
-
-       if (chunk_info->data == NULL)
-               return SFE_BAD_CHUNK_DATA_PTR ;
-
-       chunk_info->id_size = psf->rchunks.chunks [indx].id_size ;
-       memcpy (chunk_info->id, psf->rchunks.chunks [indx].id, sizeof (chunk_info->id) / sizeof (*chunk_info->id)) ;
-
-       pos = psf_ftell (psf) ;
-       psf_fseek (psf, psf->rchunks.chunks [indx].offset, SEEK_SET) ;
-       psf_fread (chunk_info->data, SF_MIN (chunk_info->datalen, psf->rchunks.chunks [indx].len), 1, psf) ;
-       psf_fseek (psf, pos, SEEK_SET) ;
-
-       return SFE_NO_ERROR ;
-} /* caf_get_chunk_data */
diff --git a/libs/libsndfile/src/cart.c b/libs/libsndfile/src/cart.c
deleted file mode 100644 (file)
index a56ed60..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-** Copyright (C) 2012 Chris Roberts <c.roberts@csrfm.com>
-** Copyright (C) 2006-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2006 Paul Davis <paul@linuxaudiosystems.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stddef.h>
-#include <string.h>
-#include <stdlib.h>
-#include "common.h"
-
-
-
-static inline size_t
-cart_min_size (const SF_CART_INFO* info)
-{      if (info == NULL)
-               return 0 ;
-
-       return offsetof (SF_CART_INFO, tag_text) + info->tag_text_size ;
-} /* cart_min_size */
-
-SF_CART_INFO_16K*
-cart_var_alloc (void)
-{      SF_CART_INFO_16K* thing ;
-       thing = malloc (sizeof (SF_CART_INFO_16K)) ;
-       return thing ;
-} /* cart_var_alloc */
-
-int
-cart_var_set (SF_PRIVATE *psf, const SF_CART_INFO * info, size_t datasize)
-{      size_t len ;
-
-       if (info == NULL)
-               return SF_FALSE ;
-
-       if (cart_min_size (info) > datasize)
-       {       psf->error = SFE_BAD_CART_INFO_SIZE ;
-               return SF_FALSE ;
-               } ;
-
-       if (datasize >= sizeof (SF_CART_INFO_16K))
-       {       psf->error = SFE_BAD_CART_INFO_TOO_BIG ;
-               return SF_FALSE ;
-               } ;
-
-       if (psf->cart_16k == NULL)
-       {       if ((psf->cart_16k = cart_var_alloc ()) == NULL)
-               {       psf->error = SFE_MALLOC_FAILED ;
-                       return SF_FALSE ;
-                       } ;
-               } ;
-
-       memcpy (psf->cart_16k, info, offsetof (SF_CART_INFO, tag_text)) ;
-       psf_strlcpy_crlf (psf->cart_16k->tag_text, info->tag_text, sizeof (psf->cart_16k->tag_text), datasize - offsetof (SF_CART_INFO, tag_text)) ;
-
-       len = strlen (psf->cart_16k->tag_text) ;
-
-       if (len > 0 && psf->cart_16k->tag_text [len - 1] != '\n')
-               psf_strlcat (psf->cart_16k->tag_text, sizeof (psf->cart_16k->tag_text), "\r\n") ;
-
-       /* Force tag_text_size to be even. */
-       len = strlen (psf->cart_16k->tag_text) ;
-       len += (len & 1) ? 1 : 2 ;
-
-       psf->cart_16k->tag_text_size = len ;
-
-       return SF_TRUE ;
-} /* cart_var_set */
-
-
-int
-cart_var_get (SF_PRIVATE *psf, SF_CART_INFO * data, size_t datasize)
-{      size_t size ;
-       if (psf->cart_16k == NULL)
-               return SF_FALSE ;
-
-       size = SF_MIN (datasize, cart_min_size ((const SF_CART_INFO *) psf->cart_16k)) ;
-
-       memcpy (data, psf->cart_16k, size) ;
-
-       return SF_TRUE ;
-} /* cart_var_get */
-
-
diff --git a/libs/libsndfile/src/chanmap.c b/libs/libsndfile/src/chanmap.c
deleted file mode 100644 (file)
index 9a9f7f0..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
-** Copyright (C) 2009-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**     Mostly from "Apple Core Audio Format Specification 1.0":
-**
-**             http://developer.apple.com/documentation/MusicAudio/Reference/CAFSpec/CAFSpec.pdf
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "sndfile.h"
-#include "common.h"
-#include "chanmap.h"
-
-
-static const AIFF_CAF_CHANNEL_MAP zero_chan [] =
-{      {       (0 << 16) | 0, NULL, "Use channel descriptions." },
-       {       (1 << 16) | 0, NULL, "Use channel bitmap." }
-} ; /* zero_chan */
-
-
-static const int one_chan_mono [1] = { SF_CHANNEL_MAP_MONO } ;
-
-static const AIFF_CAF_CHANNEL_MAP one_chan [] =
-{      {       (100 << 16) | 1, one_chan_mono, "mono" }
-} ; /* one_chan */
-
-
-static const int two_channel_stereo [2] = {    SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT } ;
-
-static const AIFF_CAF_CHANNEL_MAP two_chan [] =
-{      {       (101 << 16) | 2, two_channel_stereo, "stereo (L, R)" },
-       {       (102 << 16) | 2, two_channel_stereo, "stereo headphones (L, R)" },
-#if 0
-       {       (103 << 16) | 2, NULL, "matrix stereo (Lt, Rt)" },
-       {       (104 << 16) | 2, NULL, "2 channels (mid, side)" },
-       {       (105 << 16) | 2, NULL, "coincident mic pair" },
-       {       (106 << 16) | 2, NULL, "binaural stereo (L, R)"
-               }
-#endif
-} ; /* two_chan */
-
-
-static const int three_channel_mpeg_30a [3] =
-       {       SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_CENTER } ;
-static const int three_channel_mpeg_30b [3] =
-       {       SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT } ;
-static const int three_channel_itu_21 [3] =
-       {       SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_CENTER } ;
-static const int three_channel_dvd_4 [3] =
-       {       SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_LFE } ;
-
-static const AIFF_CAF_CHANNEL_MAP three_chan [] =
-{      {       (113 << 16) | 3, three_channel_mpeg_30a, "MPEG 3 0 A (L, R, C)" },
-       {       (114 << 16) | 3, three_channel_mpeg_30b, "MPEG 3 0 B (C, L, R)" },
-       {       (131 << 16) | 3, three_channel_itu_21, "ITU 2.1 (L, R, Cs)" },
-       {       (133 << 16) | 3, three_channel_dvd_4, "DVD 4 (L, R, LFE)" }
-} ; /* three_chan */
-
-
-static const int four_channel_ambisonc_b [4] =
-       {       SF_CHANNEL_MAP_AMBISONIC_B_W, SF_CHANNEL_MAP_AMBISONIC_B_X, SF_CHANNEL_MAP_AMBISONIC_B_Y, SF_CHANNEL_MAP_AMBISONIC_B_Z } ;
-static const int four_channel_quad [4] =
-       {       SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT } ;
-static const int four_channel_mpeg_40a [4] =
-       {       SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_REAR_CENTER } ;
-static const int four_channel_mpeg_40b [4] =
-       {       SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_CENTER } ;
-static const int four_channel_itu_23 [4] =
-       {       SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT } ;
-static const int four_channel_dvd_5 [4] =
-       {       SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_LFE, SF_CHANNEL_MAP_REAR_CENTER } ;
-static const int four_channel_dvd_10 [4] =
-       {       SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LFE } ;
-
-static const AIFF_CAF_CHANNEL_MAP four_chan [] =
-{      {       (107 << 16) | 4, four_channel_ambisonc_b, "ambisonic B (W,  X, Y, Z)" },
-       {       (108 << 16) | 4, four_channel_quad, "quad (Lfront, Rfront, Lrear, Rrear)" },
-       {       (115 << 16) | 4, four_channel_mpeg_40a, "MPEG 4.0 A (L, R, C, Cs)" },
-       {       (116 << 16) | 4, four_channel_mpeg_40b, "MPEG 4.0 B (C, L, R, Cs)" },
-       {       (132 << 16) | 4, four_channel_itu_23, "ITU 2.3 (L, R, Ls, Rs)" },
-       {       (134 << 16) | 4, four_channel_dvd_5, "DVD 5 (L, R, LFE, Cs)" },
-       {       (136 << 16) | 4, four_channel_dvd_10, "DVD 10 (L, R, C, LFE)" }
-} ; /* four_chan */
-
-
-static const int five_channel_pentagonal [5] =
-       {       SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT, SF_CHANNEL_MAP_CENTER } ;
-static const int five_channel_mpeg_50_a [5] =
-       {       SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT } ;
-static const int five_channel_mpeg_50_b [5] =
-       {       SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT, SF_CHANNEL_MAP_CENTER } ;
-static const int five_channel_mpeg_50_c [5] =
-       {       SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT } ;
-static const int five_channel_mpeg_50_d [5] =
-       {       SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT } ;
-static const int five_channel_dvd_6 [5] =
-       {       SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_LFE, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT } ;
-static const int five_channel_dvd_11 [5] =
-       {       SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LFE, SF_CHANNEL_MAP_REAR_CENTER } ;
-static const int five_channel_dvd_18 [5] =
-       {       SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT, SF_CHANNEL_MAP_LFE } ;
-
-static const AIFF_CAF_CHANNEL_MAP five_chan [] =
-{      {       (109 << 16) | 5, five_channel_pentagonal, "pentagonal (L,  R, Lrear, Rrear, C)" },
-       {       (117 << 16) | 5, five_channel_mpeg_50_a, "MPEG 5.0 A (L, R, C, Ls, Rs)" },
-       {       (118 << 16) | 5, five_channel_mpeg_50_b, "MPEG 5.0 B (L, R, Ls, Rs, C)" },
-       {       (119 << 16) | 5, five_channel_mpeg_50_c, "MPEG 5.0 C (L, C, R, Ls, Rs,)" },
-       {       (120 << 16) | 5, five_channel_mpeg_50_d, "MPEG 5.0 D (C, L, R, Ls, Rs)" },
-       {       (135 << 16) | 5, five_channel_dvd_6, "DVD 6 (L, R, LFE, Ls, Rs)" },
-       {       (137 << 16) | 5, five_channel_dvd_11, "DVD 11 (L, R, C, LFE, Cs)" },
-       {       (138 << 16) | 5, five_channel_dvd_18, "DVD 18 (L, R, Ls, Rs, LFE)" }
-} ; /* five_chan */
-
-
-static const int six_channel_mpeg_51_a [6] =
-       {       SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LFE, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT } ;
-static const int six_channel_mpeg_51_b [6] =
-       {       SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT, SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LFE } ;
-static const int six_channel_mpeg_51_c [6] =
-       {       SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT, SF_CHANNEL_MAP_LFE } ;
-static const int six_channel_mpeg_51_d [6] =
-       {       SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT, SF_CHANNEL_MAP_LFE } ;
-static const int six_channel_audio_unit_60 [6] =
-       {       SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT, SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_REAR_CENTER } ;
-static const int six_channel_aac_60 [6] =
-       {       SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT, SF_CHANNEL_MAP_REAR_CENTER } ;
-
-static const AIFF_CAF_CHANNEL_MAP six_chan [] =
-{      {       (110 << 16) | 6, NULL, "hexagonal (L, R, Lr, Rr, C, Rear)" },
-       {       (121 << 16) | 6, six_channel_mpeg_51_a, "MPEG 5.1 A (L, R, C, LFE, Ls, Rs)" },
-       {       (122 << 16) | 6, six_channel_mpeg_51_b, "MPEG 5.1 B (L, R, Ls, Rs, C, LFE)" },
-       {       (123 << 16) | 6, six_channel_mpeg_51_c, "MPEG 5.1 C (L, C, R, Ls, Rs, LFE)" },
-       {       (124 << 16) | 6, six_channel_mpeg_51_d, "MPEG 5.1 D (C, L, R, Ls, Rs, LFE)" },
-       {       (139 << 16) | 6, six_channel_audio_unit_60, "AudioUnit 6.0 (L, R, Ls, Rs, C, Cs)" },
-       {       (141 << 16) | 6, six_channel_aac_60, "AAC 6.0 (C, L, R, Ls, Rs, Cs)" }
-} ; /* six_chan */
-
-
-static const int six_channel_mpeg_61a [7] =
-       {       SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LFE, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT, SF_CHANNEL_MAP_REAR_CENTER } ;
-static const int six_channel_aac_61 [7] =
-       {       SF_CHANNEL_MAP_CENTER, SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_REAR_LEFT, SF_CHANNEL_MAP_REAR_RIGHT, SF_CHANNEL_MAP_REAR_CENTER, SF_CHANNEL_MAP_LFE } ;
-
-static const AIFF_CAF_CHANNEL_MAP seven_chan [] =
-{      {       (125 << 16) | 7, six_channel_mpeg_61a, "MPEG 6.1 A (L, R, C, LFE, Ls, Rs, Cs)" },
-       {       (140 << 16) | 7, NULL, "AudioUnit 7.0 (L, R, Ls, Rs, C, Rls, Rrs)" },
-       {       (142 << 16) | 7, six_channel_aac_61, "AAC 6.1 (C, L, R, Ls, Rs, Cs, Lfe)" },
-       {       (143 << 16) | 7, NULL, "AAC 7.0 (C, L, R, Ls, Rs, Rls, Rrs,)" }
-} ; /* seven_chan */
-
-
-static const AIFF_CAF_CHANNEL_MAP eight_chan [] =
-{      {       (111 << 16) | 8, NULL,
-               // front left, front right, rear left, rear right,
-               // front center, rear center, side left, side right
-               "octagonal (Lf, Rf, Lr, Rr, Cf, Cr, Ls, Rs)"
-               },
-       {       (112 << 16) | 8, NULL,
-               // left, right, rear left, rear right
-               // top left, top right, top rear left, top rear right
-               "cube (L, R, Lrear, Rrear, Ltop, Rtop, Ltoprear, Rtoprear)"
-               },
-       {       (126 << 16) | 8, NULL, "MPEG 7.1 A (L, R, C, LFE, Ls, Rs, Lc, Rc)" },
-       {       (127 << 16) | 8, NULL, "MPEG 7.1 B (C, Lc, Rc, L, R, Ls, Rs, LFE)" },
-       {       (128 << 16) | 8, NULL, "MPEG 7.1 C (L, R, C, LFE, Ls, R, Rls, Rrs)" },
-       {       (129 << 16) | 8, NULL, "Emagic Default 7.1 (L, R, Ls, Rs, C, LFE, Lc, Rc)" },
-       {       (130 << 16) | 8, NULL,
-               // (ITU_5_1 plus a matrix encoded stereo mix)
-               "SMPTE DTV (L, R, C, LFE, Ls, Rs, Lt, Rt)"
-               },
-       {       (144 << 16) | 8, NULL, "AAC octagonal (C, L, R, Ls, Rs, Rls, Rrs, Cs)" }
-} ; /* eight_chan */
-
-
-
-#if 0
-
-TMH_10_2_std = (145 << 16) | 16,
-// L R C Vhc Lsd Rsd Ls Rs Vhl Vhr Lw Rw Csd Cs LFE1 LFE2
-
-TMH_10_2_full = (146 << 16) | 21,
-// TMH_10_2_std plus: Lc Rc HI VI Haptic
-
-#endif
-
-
-typedef struct
-{      const AIFF_CAF_CHANNEL_MAP * map ;
-       int len ;
-} MAP_MAP ;
-
-static const MAP_MAP map [] =
-{      { zero_chan,    ARRAY_LEN (zero_chan) },
-       { one_chan,             ARRAY_LEN (one_chan) },
-       { two_chan,             ARRAY_LEN (two_chan) },
-       { three_chan,   ARRAY_LEN (three_chan) },
-       { four_chan,    ARRAY_LEN (four_chan) },
-       { five_chan,    ARRAY_LEN (five_chan) },
-       { six_chan,             ARRAY_LEN (six_chan) },
-       { seven_chan,   ARRAY_LEN (seven_chan) },
-       { eight_chan,   ARRAY_LEN (eight_chan) }
-} ; /* map */
-
-
-int
-aiff_caf_find_channel_layout_tag (const int *chan_map, int channels)
-{      const AIFF_CAF_CHANNEL_MAP * curr_map ;
-       unsigned k, len ;
-
-       if (channels < 1 || channels > ARRAY_LEN (map))
-               return 0 ;
-
-       curr_map = map [channels].map ;
-       len = map [channels].len ;
-
-       for (k = 0 ; k < len ; k++)
-               if (curr_map [k].channel_map != NULL)
-                       if (memcmp (chan_map, curr_map [k].channel_map, channels * sizeof (chan_map [0])) == 0)
-                               return curr_map [k].channel_layout_tag ;
-
-       return 0 ;
-} /* aiff_caf_find_channel_layout_tag */
-
-const AIFF_CAF_CHANNEL_MAP *
-aiff_caf_of_channel_layout_tag (int tag)
-{      const AIFF_CAF_CHANNEL_MAP * curr_map ;
-       unsigned k, len ;
-       int channels = tag & 0xffff ;
-
-       if (channels < 0 || channels > ARRAY_LEN (map))
-               return NULL ;
-
-       curr_map = map [channels].map ;
-       len = map [channels].len ;
-
-       for (k = 0 ; k < len ; k++)
-               if (curr_map [k].channel_layout_tag == tag)
-                       return curr_map + k ;
-
-       return NULL ;
-} /* aiff_caf_of_channel_layout_tag */
diff --git a/libs/libsndfile/src/chanmap.h b/libs/libsndfile/src/chanmap.h
deleted file mode 100644 (file)
index 8af409d..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-** Copyright (C) 2009-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-typedef struct
-{      /* The tag in the AIFF or CAF file. */
-       int channel_layout_tag ;
-
-       /* The equivalent array of SF_CHANNEL_MAP_* entries. */
-       const int * channel_map ;
-
-       const char * name ;
-} AIFF_CAF_CHANNEL_MAP ;
-
-
-int aiff_caf_find_channel_layout_tag (const int *chan_map, int channels) ;
-
-const AIFF_CAF_CHANNEL_MAP * aiff_caf_of_channel_layout_tag (int tag) ;
diff --git a/libs/libsndfile/src/chunk.c b/libs/libsndfile/src/chunk.c
deleted file mode 100644 (file)
index b661ce5..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
-** Copyright (C) 2008-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2012 IOhannes m zmoelnig, IEM <zmoelnig@iem.at>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdlib.h>
-#include       <string.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-static int64_t
-hash_of_str (const char * str)
-{      int64_t marker = 0 ;
-       int k ;
-
-       for (k = 0 ; str [k] ; k++)
-               marker = marker * 0x7f + ((const uint8_t *) str) [k] ;
-
-       return marker ;
-} /* hash_of_str */
-
-SF_CHUNK_ITERATOR *
-psf_get_chunk_iterator (SF_PRIVATE * psf, const char * marker_str)
-{      const READ_CHUNKS * pchk = &psf->rchunks ;
-       int idx ;
-
-       if (marker_str)
-               idx = psf_find_read_chunk_str (pchk, marker_str) ;
-       else
-               idx = pchk->used > 0 ? 0 : -1 ;
-
-       if (idx < 0)
-               return NULL ;
-
-       if (psf->iterator == NULL)
-       {       psf->iterator = calloc (1, sizeof (SF_CHUNK_ITERATOR)) ;
-               if (psf->iterator == NULL)
-                       return NULL ;
-               } ;
-
-       psf->iterator->sndfile = (SNDFILE *) psf ;
-
-       if (marker_str)
-       {       int64_t hash ;
-               size_t marker_len ;
-               union
-               {       uint32_t marker ;
-                       char str [5] ;
-               } u ;
-
-               snprintf (u.str, sizeof (u.str), "%s", marker_str) ;
-
-               marker_len = strlen (marker_str) ;
-               if (marker_len > 64)
-                       marker_len = 64 ;
-
-               hash = marker_len > 4 ? hash_of_str (marker_str) : u.marker ;
-
-               memcpy (psf->iterator->id, marker_str, marker_len) ;
-               psf->iterator->id_size = marker_len ;
-               psf->iterator->hash = hash ;
-               }
-
-       psf->iterator->current = idx ;
-
-       return psf->iterator ;
-} /* psf_get_chunk_iterator */
-
-SF_CHUNK_ITERATOR *
-psf_next_chunk_iterator (const READ_CHUNKS * pchk , SF_CHUNK_ITERATOR * iterator)
-{      int64_t hash = iterator->hash ;
-       uint32_t k ;
-
-       iterator->current++ ;
-
-       if (hash)
-       {       for (k = iterator->current ; k < pchk->used ; k++)
-                       if (pchk->chunks [k].hash == hash)
-                       {       iterator->current = k ;
-                               return iterator ;
-                               }
-               }
-       else if (iterator->current < pchk->used)
-               return iterator ;
-
-       /* No match, clear iterator and return NULL */
-       memset (iterator, 0, sizeof (*iterator)) ;
-       return NULL ;
-} /* psf_next_chunk_iterator */
-
-static int
-psf_store_read_chunk (READ_CHUNKS * pchk, const READ_CHUNK * rchunk)
-{      if (pchk->count == 0)
-       {       pchk->used = 0 ;
-               pchk->count = 20 ;
-               pchk->chunks = calloc (pchk->count, sizeof (READ_CHUNK)) ;
-               }
-       else if (pchk->used > pchk->count)
-               return SFE_INTERNAL ;
-       else if (pchk->used == pchk->count)
-       {       READ_CHUNK * old_ptr = pchk->chunks ;
-               int new_count = 3 * (pchk->count + 1) / 2 ;
-
-               pchk->chunks = realloc (old_ptr, new_count * sizeof (READ_CHUNK)) ;
-               if (pchk->chunks == NULL)
-               {       pchk->chunks = old_ptr ;
-                       return SFE_MALLOC_FAILED ;
-                       } ;
-               pchk->count = new_count ;
-               } ;
-
-       pchk->chunks [pchk->used] = *rchunk ;
-
-       pchk->used ++ ;
-
-       return SFE_NO_ERROR ;
-} /* psf_store_read_chunk */
-
-int
-psf_store_read_chunk_u32 (READ_CHUNKS * pchk, uint32_t marker, sf_count_t offset, uint32_t len)
-{      READ_CHUNK rchunk ;
-
-       memset (&rchunk, 0, sizeof (rchunk)) ;
-
-       rchunk.hash = marker ;
-       rchunk.mark32 = marker ;
-       rchunk.offset = offset ;
-       rchunk.len = len ;
-
-       rchunk.id_size = 4 ;
-       memcpy (rchunk.id, &marker, rchunk.id_size) ;
-
-       return psf_store_read_chunk (pchk, &rchunk) ;
-} /* psf_store_read_chunk_u32 */
-
-int
-psf_find_read_chunk_str (const READ_CHUNKS * pchk, const char * marker_str)
-{      int64_t hash ;
-       uint32_t k ;
-       union
-       {       uint32_t marker ;
-               char str [5] ;
-       } u ;
-
-       snprintf (u.str, sizeof (u.str), "%s", marker_str) ;
-
-       hash = strlen (marker_str) > 4 ? hash_of_str (marker_str) : u.marker ;
-
-       for (k = 0 ; k < pchk->used ; k++)
-               if (pchk->chunks [k].hash == hash)
-                       return k ;
-
-       return -1 ;
-} /* psf_find_read_chunk_str */
-
-int
-psf_find_read_chunk_m32 (const READ_CHUNKS * pchk, uint32_t marker)
-{      uint32_t k ;
-
-       for (k = 0 ; k < pchk->used ; k++)
-               if (pchk->chunks [k].mark32 == marker)
-                       return k ;
-
-       return -1 ;
-} /* psf_find_read_chunk_m32 */
-int
-psf_find_read_chunk_iterator (const READ_CHUNKS * pchk, const SF_CHUNK_ITERATOR * marker)
-{      if (marker->current < pchk->used)
-               return marker->current ;
-
-       return -1 ;
-} /* psf_find_read_chunk_iterator */
-
-int
-psf_store_read_chunk_str (READ_CHUNKS * pchk, const char * marker_str, sf_count_t offset, uint32_t len)
-{      READ_CHUNK rchunk ;
-       union
-       {       uint32_t marker ;
-               char str [5] ;
-       } u ;
-       size_t marker_len ;
-
-       memset (&rchunk, 0, sizeof (rchunk)) ;
-       snprintf (u.str, sizeof (u.str), "%s", marker_str) ;
-
-       marker_len = strlen (marker_str) ;
-
-       rchunk.hash = marker_len > 4 ? hash_of_str (marker_str) : u.marker ;
-       rchunk.mark32 = u.marker ;
-       rchunk.offset = offset ;
-       rchunk.len = len ;
-
-       rchunk.id_size = marker_len > 64 ? 64 : marker_len ;
-       memcpy (rchunk.id, marker_str, rchunk.id_size) ;
-
-       return psf_store_read_chunk (pchk, &rchunk) ;
-} /* psf_store_read_chunk_str */
-
-int
-psf_save_write_chunk (WRITE_CHUNKS * pchk, const SF_CHUNK_INFO * chunk_info)
-{      union
-       {       uint32_t marker ;
-               char str [5] ;
-       } u ;
-       uint32_t len ;
-
-       if (pchk->count == 0)
-       {       pchk->used = 0 ;
-               pchk->count = 20 ;
-               pchk->chunks = calloc (pchk->count, sizeof (WRITE_CHUNK)) ;
-               }
-       else if (pchk->used >= pchk->count)
-       {       WRITE_CHUNK * old_ptr = pchk->chunks ;
-               int new_count = 3 * (pchk->count + 1) / 2 ;
-
-               pchk->chunks = realloc (old_ptr, new_count * sizeof (WRITE_CHUNK)) ;
-               if (pchk->chunks == NULL)
-               {       pchk->chunks = old_ptr ;
-                       return SFE_MALLOC_FAILED ;
-                       } ;
-               } ;
-
-       len = chunk_info->datalen ;
-       while (len & 3) len ++ ;
-
-       snprintf (u.str, sizeof (u.str), "%s", chunk_info->id) ;
-
-       pchk->chunks [pchk->used].hash = strlen (chunk_info->id) > 4 ? hash_of_str (chunk_info->id) : u.marker ;
-       pchk->chunks [pchk->used].mark32 = u.marker ;
-       pchk->chunks [pchk->used].len = len ;
-       pchk->chunks [pchk->used].data = psf_memdup (chunk_info->data, chunk_info->datalen) ;
-
-       pchk->used ++ ;
-
-       return SFE_NO_ERROR ;
-} /* psf_save_write_chunk */
-
diff --git a/libs/libsndfile/src/command.c b/libs/libsndfile/src/command.c
deleted file mode 100644 (file)
index 6db7315..0000000
+++ /dev/null
@@ -1,390 +0,0 @@
-/*
-** Copyright (C) 2001-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <string.h>
-#include       <math.h>
-
-#include       "sndfile.h"
-#include       "common.h"
-
-static SF_FORMAT_INFO const simple_formats [] =
-{
-       {       SF_FORMAT_AIFF | SF_FORMAT_PCM_16,
-               "AIFF (Apple/SGI 16 bit PCM)", "aiff"
-               },
-
-       {       SF_FORMAT_AIFF | SF_FORMAT_FLOAT,
-               "AIFF (Apple/SGI 32 bit float)", "aifc"
-               },
-
-       {       SF_FORMAT_AIFF | SF_FORMAT_PCM_S8,
-               "AIFF (Apple/SGI 8 bit PCM)", "aiff"
-               },
-
-       {       SF_FORMAT_AU | SF_FORMAT_PCM_16,
-               "AU (Sun/Next 16 bit PCM)", "au"
-               },
-
-       {       SF_FORMAT_AU | SF_FORMAT_ULAW,
-               "AU (Sun/Next 8-bit u-law)", "au"
-               },
-
-       {       SF_FORMAT_CAF | SF_FORMAT_ALAC_16,
-               "CAF (Apple 16 bit ALAC)", "caf"
-               },
-
-       {       SF_FORMAT_CAF | SF_FORMAT_PCM_16,
-               "CAF (Apple 16 bit PCM)", "caf"
-               },
-
-#if HAVE_EXTERNAL_LIBS
-       {       SF_FORMAT_FLAC | SF_FORMAT_PCM_16,
-               "FLAC 16 bit", "flac"
-               },
-#endif
-
-       {       SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM,
-               "OKI Dialogic VOX ADPCM", "vox"
-               },
-
-#if HAVE_EXTERNAL_LIBS
-       {       SF_FORMAT_OGG | SF_FORMAT_VORBIS,
-               "Ogg Vorbis (Xiph Foundation)", "oga"
-               },
-#endif
-
-       {       SF_FORMAT_WAV | SF_FORMAT_PCM_16,
-               "WAV (Microsoft 16 bit PCM)", "wav"
-               },
-
-       {       SF_FORMAT_WAV | SF_FORMAT_FLOAT,
-               "WAV (Microsoft 32 bit float)", "wav"
-               },
-
-       {       SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM,
-               "WAV (Microsoft 4 bit IMA ADPCM)", "wav"
-               },
-
-       {       SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM,
-               "WAV (Microsoft 4 bit MS ADPCM)", "wav"
-               },
-
-       {       SF_FORMAT_WAV | SF_FORMAT_PCM_U8,
-               "WAV (Microsoft 8 bit PCM)", "wav"
-               },
-
-} ; /* simple_formats */
-
-int
-psf_get_format_simple_count    (void)
-{      return (sizeof (simple_formats) / sizeof (SF_FORMAT_INFO)) ;
-} /* psf_get_format_simple_count */
-
-int
-psf_get_format_simple (SF_FORMAT_INFO *data)
-{      int indx ;
-
-       if (data->format < 0 || data->format >= (SIGNED_SIZEOF (simple_formats) / SIGNED_SIZEOF (SF_FORMAT_INFO)))
-               return SFE_BAD_COMMAND_PARAM ;
-
-       indx = data->format ;
-       memcpy (data, &(simple_formats [indx]), SIGNED_SIZEOF (SF_FORMAT_INFO)) ;
-
-       return 0 ;
-} /* psf_get_format_simple */
-
-/*============================================================================
-** Major format info.
-*/
-
-static SF_FORMAT_INFO const major_formats [] =
-{
-       {       SF_FORMAT_AIFF,         "AIFF (Apple/SGI)",                                             "aiff"  },
-       {       SF_FORMAT_AU,           "AU (Sun/NeXT)",                                                "au"    },
-       {       SF_FORMAT_AVR,          "AVR (Audio Visual Research)",                  "avr"   },
-       {       SF_FORMAT_CAF,          "CAF (Apple Core Audio File)",                  "caf"   },
-#if HAVE_EXTERNAL_LIBS
-       {       SF_FORMAT_FLAC,         "FLAC (Free Lossless Audio Codec)",             "flac"  },
-#endif
-       {       SF_FORMAT_HTK,          "HTK (HMM Tool Kit)",                                   "htk"   },
-       {       SF_FORMAT_SVX,          "IFF (Amiga IFF/SVX8/SV16)",                    "iff"   },
-       {       SF_FORMAT_MAT4,         "MAT4 (GNU Octave 2.0 / Matlab 4.2)",   "mat"   },
-       {       SF_FORMAT_MAT5,         "MAT5 (GNU Octave 2.1 / Matlab 5.0)",   "mat"   },
-       {       SF_FORMAT_MPC2K,        "MPC (Akai MPC 2k)",                                    "mpc"   },
-#if HAVE_EXTERNAL_LIBS
-       {       SF_FORMAT_OGG,          "OGG (OGG Container format)",                   "oga"   },
-#endif
-       {       SF_FORMAT_PAF,          "PAF (Ensoniq PARIS)",                                  "paf"   },
-       {       SF_FORMAT_PVF,          "PVF (Portable Voice Format)",                  "pvf"   },
-       {       SF_FORMAT_RAW,          "RAW (header-less)",                                    "raw"   },
-       {       SF_FORMAT_RF64,         "RF64 (RIFF 64)",                                               "rf64"  },
-       {       SF_FORMAT_SD2,          "SD2 (Sound Designer II)",                              "sd2"   },
-       {       SF_FORMAT_SDS,          "SDS (Midi Sample Dump Standard)",              "sds"   },
-       {       SF_FORMAT_IRCAM,        "SF (Berkeley/IRCAM/CARL)",                             "sf"    },
-       {       SF_FORMAT_VOC,          "VOC (Creative Labs)",                                  "voc"   },
-       {       SF_FORMAT_W64,          "W64 (SoundFoundry WAVE 64)",                   "w64"   },
-       {       SF_FORMAT_WAV,          "WAV (Microsoft)",                                              "wav"   },
-       {       SF_FORMAT_NIST,         "WAV (NIST Sphere)",                                    "wav"   },
-       {       SF_FORMAT_WAVEX,        "WAVEX (Microsoft)",                                    "wav"   },
-       {       SF_FORMAT_WVE,          "WVE (Psion Series 3)",                                 "wve"   },
-       {       SF_FORMAT_XI,           "XI (FastTracker 2)",                                   "xi"    },
-
-} ; /* major_formats */
-
-int
-psf_get_format_major_count     (void)
-{      return (sizeof (major_formats) / sizeof (SF_FORMAT_INFO)) ;
-} /* psf_get_format_major_count */
-
-int
-psf_get_format_major (SF_FORMAT_INFO *data)
-{      int indx ;
-
-       if (data->format < 0 || data->format >= (SIGNED_SIZEOF (major_formats) / SIGNED_SIZEOF (SF_FORMAT_INFO)))
-               return SFE_BAD_COMMAND_PARAM ;
-
-       indx = data->format ;
-       memcpy (data, &(major_formats [indx]), SIGNED_SIZEOF (SF_FORMAT_INFO)) ;
-
-       return 0 ;
-} /* psf_get_format_major */
-
-/*============================================================================
-** Subtype format info.
-*/
-
-static SF_FORMAT_INFO subtype_formats [] =
-{
-       {       SF_FORMAT_PCM_S8,               "Signed 8 bit PCM",             NULL    },
-       {       SF_FORMAT_PCM_16,               "Signed 16 bit PCM",    NULL    },
-       {       SF_FORMAT_PCM_24,               "Signed 24 bit PCM",    NULL    },
-       {       SF_FORMAT_PCM_32,               "Signed 32 bit PCM",    NULL    },
-
-       {       SF_FORMAT_PCM_U8,               "Unsigned 8 bit PCM",   NULL    },
-
-       {       SF_FORMAT_FLOAT,                "32 bit float",                 NULL    },
-       {       SF_FORMAT_DOUBLE,               "64 bit float",                 NULL    },
-
-       {       SF_FORMAT_ULAW,                 "U-Law",                                NULL    },
-       {       SF_FORMAT_ALAW,                 "A-Law",                                NULL    },
-       {       SF_FORMAT_IMA_ADPCM,    "IMA ADPCM",                    NULL    },
-       {       SF_FORMAT_MS_ADPCM,             "Microsoft ADPCM",              NULL    },
-
-       {       SF_FORMAT_GSM610,               "GSM 6.10",                             NULL    },
-
-       {       SF_FORMAT_G721_32,              "32kbs G721 ADPCM",             NULL    },
-       {       SF_FORMAT_G723_24,              "24kbs G723 ADPCM",             NULL    },
-
-       {       SF_FORMAT_DWVW_12,              "12 bit DWVW",                  NULL    },
-       {       SF_FORMAT_DWVW_16,              "16 bit DWVW",                  NULL    },
-       {       SF_FORMAT_DWVW_24,              "24 bit DWVW",                  NULL    },
-       {       SF_FORMAT_VOX_ADPCM,    "VOX ADPCM",                    "vox"   },
-
-       {       SF_FORMAT_DPCM_16,              "16 bit DPCM",                  NULL    },
-       {       SF_FORMAT_DPCM_8,               "8 bit DPCM",                   NULL    },
-
-#if HAVE_EXTERNAL_LIBS
-       {       SF_FORMAT_VORBIS,               "Vorbis",                               NULL    },
-#endif
-
-       {       SF_FORMAT_ALAC_16,              "16 bit ALAC",                  NULL    },
-       {       SF_FORMAT_ALAC_20,              "20 bit ALAC",                  NULL    },
-       {       SF_FORMAT_ALAC_24,              "24 bit ALAC",                  NULL    },
-       {       SF_FORMAT_ALAC_32,              "32 bit ALAC",                  NULL    },
-} ; /* subtype_formats */
-
-int
-psf_get_format_subtype_count   (void)
-{      return (sizeof (subtype_formats) / sizeof (SF_FORMAT_INFO)) ;
-} /* psf_get_format_subtype_count */
-
-int
-psf_get_format_subtype (SF_FORMAT_INFO *data)
-{      int indx ;
-
-       if (data->format < 0 || data->format >= (SIGNED_SIZEOF (subtype_formats) / SIGNED_SIZEOF (SF_FORMAT_INFO)))
-       {       data->format = 0 ;
-               return SFE_BAD_COMMAND_PARAM ;
-               } ;
-
-       indx = data->format ;
-       memcpy (data, &(subtype_formats [indx]), sizeof (SF_FORMAT_INFO)) ;
-
-       return 0 ;
-} /* psf_get_format_subtype */
-
-/*==============================================================================
-*/
-
-int
-psf_get_format_info (SF_FORMAT_INFO *data)
-{      int k, format ;
-
-       if (SF_CONTAINER (data->format))
-       {       format = SF_CONTAINER (data->format) ;
-
-               for (k = 0 ; k < (SIGNED_SIZEOF (major_formats) / SIGNED_SIZEOF (SF_FORMAT_INFO)) ; k++)
-               {       if (format == major_formats [k].format)
-                       {       memcpy (data, &(major_formats [k]), sizeof (SF_FORMAT_INFO)) ;
-                               return 0 ;
-                               } ;
-                       } ;
-               }
-       else if (SF_CODEC (data->format))
-       {       format = SF_CODEC (data->format) ;
-
-               for (k = 0 ; k < (SIGNED_SIZEOF (subtype_formats) / SIGNED_SIZEOF (SF_FORMAT_INFO)) ; k++)
-               {       if (format == subtype_formats [k].format)
-                       {       memcpy (data, &(subtype_formats [k]), sizeof (SF_FORMAT_INFO)) ;
-                               return 0 ;
-                               } ;
-                       } ;
-               } ;
-
-       memset (data, 0, sizeof (SF_FORMAT_INFO)) ;
-
-       return SFE_BAD_COMMAND_PARAM ;
-} /* psf_get_format_info */
-
-/*==============================================================================
-*/
-
-double
-psf_calc_signal_max (SF_PRIVATE *psf, int normalize)
-{      BUF_UNION       ubuf ;
-       sf_count_t      position ;
-       double          max_val, temp, *data ;
-       int                     k, len, readcount, save_state ;
-
-       /* If the file is not seekable, there is nothing we can do. */
-       if (! psf->sf.seekable)
-       {       psf->error = SFE_NOT_SEEKABLE ;
-               return  0.0 ;
-               } ;
-
-       if (! psf->read_double)
-       {       psf->error = SFE_UNIMPLEMENTED ;
-               return  0.0 ;
-               } ;
-
-       save_state = sf_command ((SNDFILE*) psf, SFC_GET_NORM_DOUBLE, NULL, 0) ;
-       sf_command ((SNDFILE*) psf, SFC_SET_NORM_DOUBLE, NULL, normalize) ;
-
-       /* Brute force. Read the whole file and find the biggest sample. */
-       /* Get current position in file */
-       position = sf_seek ((SNDFILE*) psf, 0, SEEK_CUR) ;
-       /* Go to start of file. */
-       sf_seek ((SNDFILE*) psf, 0, SEEK_SET) ;
-
-       data = ubuf.dbuf ;
-       /* Make sure len is an integer multiple of the channel count. */
-       len = ARRAY_LEN (ubuf.dbuf) - (ARRAY_LEN (ubuf.dbuf) % psf->sf.channels) ;
-
-       for (readcount = 1, max_val = 0.0 ; readcount > 0 ; /* nothing */)
-       {       readcount = sf_read_double ((SNDFILE*) psf, data, len) ;
-               for (k = 0 ; k < readcount ; k++)
-               {       temp = fabs (data [k]) ;
-                       max_val = temp > max_val ? temp : max_val ;
-                       } ;
-               } ;
-
-       /* Return to SNDFILE to original state. */
-       sf_seek ((SNDFILE*) psf, position, SEEK_SET) ;
-       sf_command ((SNDFILE*) psf, SFC_SET_NORM_DOUBLE, NULL, save_state) ;
-
-       return  max_val ;
-} /* psf_calc_signal_max */
-
-int
-psf_calc_max_all_channels (SF_PRIVATE *psf, double *peaks, int normalize)
-{      BUF_UNION       ubuf ;
-       sf_count_t      position ;
-       double          temp, *data ;
-       int                     k, len, readcount, save_state ;
-       int                     chan ;
-
-       /* If the file is not seekable, there is nothing we can do. */
-       if (! psf->sf.seekable)
-               return (psf->error = SFE_NOT_SEEKABLE) ;
-
-       if (! psf->read_double)
-               return (psf->error = SFE_UNIMPLEMENTED) ;
-
-       save_state = sf_command ((SNDFILE*) psf, SFC_GET_NORM_DOUBLE, NULL, 0) ;
-       sf_command ((SNDFILE*) psf, SFC_SET_NORM_DOUBLE, NULL, normalize) ;
-
-       memset (peaks, 0, sizeof (double) * psf->sf.channels) ;
-
-       /* Brute force. Read the whole file and find the biggest sample for each channel. */
-       position = sf_seek ((SNDFILE*) psf, 0, SEEK_CUR) ; /* Get current position in file */
-       sf_seek ((SNDFILE*) psf, 0, SEEK_SET) ;                 /* Go to start of file. */
-
-       len = ARRAY_LEN (ubuf.dbuf) ;
-
-       data = ubuf.dbuf ;
-
-       chan = 0 ;
-       readcount = len ;
-       while (readcount > 0)
-       {       readcount = sf_read_double ((SNDFILE*) psf, data, len) ;
-               for (k = 0 ; k < readcount ; k++)
-               {       temp = fabs (data [k]) ;
-                       peaks [chan] = temp > peaks [chan] ? temp : peaks [chan] ;
-                       chan = (chan + 1) % psf->sf.channels ;
-                       } ;
-               } ;
-
-       sf_seek ((SNDFILE*) psf, position, SEEK_SET) ;          /* Return to original position. */
-
-       sf_command ((SNDFILE*) psf, SFC_SET_NORM_DOUBLE, NULL, save_state) ;
-
-       return  0 ;
-} /* psf_calc_max_all_channels */
-
-int
-psf_get_signal_max (SF_PRIVATE *psf, double *peak)
-{      int k ;
-
-       if (psf->peak_info == NULL)
-               return SF_FALSE ;
-
-       peak [0] = psf->peak_info->peaks [0].value ;
-
-       for (k = 1 ; k < psf->sf.channels ; k++)
-               peak [0] = SF_MAX (peak [0], psf->peak_info->peaks [k].value) ;
-
-       return SF_TRUE ;
-} /* psf_get_signal_max */
-
-int
-psf_get_max_all_channels (SF_PRIVATE *psf, double *peaks)
-{      int k ;
-
-       if (psf->peak_info == NULL)
-               return SF_FALSE ;
-
-       for (k = 0 ; k < psf->sf.channels ; k++)
-               peaks [k] = psf->peak_info->peaks [k].value ;
-
-       return SF_TRUE ;
-} /* psf_get_max_all_channels */
-
-
diff --git a/libs/libsndfile/src/common.c b/libs/libsndfile/src/common.c
deleted file mode 100644 (file)
index f42bc91..0000000
+++ /dev/null
@@ -1,1662 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       <config.h>
-
-#include       <stdarg.h>
-#include       <string.h>
-
-#ifndef _MSC_VER
-#include       <unistd.h>
-#endif
-#include       <ctype.h>
-#include       <math.h>
-#include       <time.h>
-#ifndef _MSC_VER
-#include       <sys/time.h>
-#endif
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-/*-----------------------------------------------------------------------------------------------
-** psf_log_printf allows libsndfile internal functions to print to an internal parselog which
-** can later be displayed.
-** The format specifiers are as for printf but without the field width and other modifiers.
-** Printing is performed to the parselog char array of the SF_PRIVATE struct.
-** Printing is done in such a way as to guarantee that the log never overflows the end of the
-** parselog array.
-*/
-
-static inline void
-log_putchar (SF_PRIVATE *psf, char ch)
-{      if (psf->parselog.indx < SIGNED_SIZEOF (psf->parselog.buf) - 1)
-       {       psf->parselog.buf [psf->parselog.indx++] = ch ;
-               psf->parselog.buf [psf->parselog.indx] = 0 ;
-               } ;
-       return ;
-} /* log_putchar */
-
-void
-psf_log_printf (SF_PRIVATE *psf, const char *format, ...)
-{      va_list                 ap ;
-       unsigned int    u ;
-       int                             d, tens, shift, width, width_specifier, left_align ;
-       char                    c, *strptr, istr [5], lead_char, sign_char ;
-
-       va_start (ap, format) ;
-
-       while ((c = *format++))
-       {       if (c != '%')
-               {       log_putchar (psf, c) ;
-                       continue ;
-                       } ;
-
-               if (format [0] == '%') /* Handle %% */
-               {       log_putchar (psf, '%') ;
-                       format ++ ;
-                       continue ;
-                       } ;
-
-               sign_char = 0 ;
-               left_align = SF_FALSE ;
-               while (1)
-               {       switch (format [0])
-                       {       case ' ' :
-                               case '+' :
-                                       sign_char = format [0] ;
-                                       format ++ ;
-                                       continue ;
-
-                               case '-' :
-                                       left_align = SF_TRUE ;
-                                       format ++ ;
-                                       continue ;
-
-                               default : break ;
-                               } ;
-
-                       break ;
-                       } ;
-
-               if (format [0] == 0)
-                       break ;
-
-               lead_char = ' ' ;
-               if (format [0] == '0')
-                       lead_char = '0' ;
-
-               width_specifier = 0 ;
-               while ((c = *format++) && isdigit (c))
-                       width_specifier = width_specifier * 10 + (c - '0') ;
-
-               switch (c)
-               {       case 0 : /* NULL character. */
-                                       va_end (ap) ;
-                                       return ;
-
-                       case 's': /* string */
-                                       strptr = va_arg (ap, char *) ;
-                                       if (strptr == NULL)
-                                               break ;
-                                       width_specifier -= strlen (strptr) ;
-                                       if (left_align == SF_FALSE)
-                                               while (width_specifier -- > 0)
-                                                       log_putchar (psf, ' ') ;
-                                       while (*strptr)
-                                               log_putchar (psf, *strptr++) ;
-                                       while (width_specifier -- > 0)
-                                               log_putchar (psf, ' ') ;
-                                       break ;
-
-                       case 'd': /* int */
-                                       d = va_arg (ap, int) ;
-
-                                       if (d < 0)
-                                       {       d = -d ;
-                                               sign_char = '-' ;
-                                               if (lead_char != '0' && left_align == SF_FALSE)
-                                                       width_specifier -- ;
-                                               } ;
-
-                                       tens = 1 ;
-                                       width = 1 ;
-                                       while (d / tens >= 10)
-                                       {       tens *= 10 ;
-                                               width ++ ;
-                                               } ;
-
-                                       width_specifier -= width ;
-
-                                       if (sign_char == ' ')
-                                       {       log_putchar (psf, ' ') ;
-                                               width_specifier -- ;
-                                               } ;
-
-                                       if (left_align == SF_FALSE && lead_char != '0')
-                                       {       if (sign_char == '+')
-                                                       width_specifier -- ;
-
-                                               while (width_specifier -- > 0)
-                                                       log_putchar (psf, lead_char) ;
-                                               } ;
-
-                                       if (sign_char == '+' || sign_char == '-')
-                                       {       log_putchar (psf, sign_char) ;
-                                               width_specifier -- ;
-                                               } ;
-
-                                       if (left_align == SF_FALSE)
-                                               while (width_specifier -- > 0)
-                                                       log_putchar (psf, lead_char) ;
-
-                                       while (tens > 0)
-                                       {       log_putchar (psf, '0' + d / tens) ;
-                                               d %= tens ;
-                                               tens /= 10 ;
-                                               } ;
-
-                                       while (width_specifier -- > 0)
-                                               log_putchar (psf, lead_char) ;
-                                       break ;
-
-                       case 'D': /* sf_count_t */
-                                       {       sf_count_t              D, Tens ;
-
-                                               D = va_arg (ap, sf_count_t) ;
-
-                                               if (D == 0)
-                                               {       while (-- width_specifier > 0)
-                                                               log_putchar (psf, lead_char) ;
-                                                       log_putchar (psf, '0') ;
-                                                       break ;
-                                                       }
-                                               if (D < 0)
-                                               {       log_putchar (psf, '-') ;
-                                                       D = -D ;
-                                                       } ;
-                                               Tens = 1 ;
-                                               width = 1 ;
-                                               while (D / Tens >= 10)
-                                               {       Tens *= 10 ;
-                                                       width ++ ;
-                                                       } ;
-
-                                               while (width_specifier > width)
-                                               {       log_putchar (psf, lead_char) ;
-                                                       width_specifier-- ;
-                                                       } ;
-
-                                               while (Tens > 0)
-                                               {       log_putchar (psf, '0' + D / Tens) ;
-                                                       D %= Tens ;
-                                                       Tens /= 10 ;
-                                                       } ;
-                                               } ;
-                                       break ;
-
-                       case 'u': /* unsigned int */
-                                       u = va_arg (ap, unsigned int) ;
-
-                                       tens = 1 ;
-                                       width = 1 ;
-                                       while (u / tens >= 10)
-                                       {       tens *= 10 ;
-                                               width ++ ;
-                                               } ;
-
-                                       width_specifier -= width ;
-
-                                       if (sign_char == ' ')
-                                       {       log_putchar (psf, ' ') ;
-                                               width_specifier -- ;
-                                               } ;
-
-                                       if (left_align == SF_FALSE && lead_char != '0')
-                                       {       if (sign_char == '+')
-                                                       width_specifier -- ;
-
-                                               while (width_specifier -- > 0)
-                                                       log_putchar (psf, lead_char) ;
-                                               } ;
-
-                                       if (sign_char == '+' || sign_char == '-')
-                                       {       log_putchar (psf, sign_char) ;
-                                               width_specifier -- ;
-                                               } ;
-
-                                       if (left_align == SF_FALSE)
-                                               while (width_specifier -- > 0)
-                                                       log_putchar (psf, lead_char) ;
-
-                                       while (tens > 0)
-                                       {       log_putchar (psf, '0' + u / tens) ;
-                                               u %= tens ;
-                                               tens /= 10 ;
-                                               } ;
-
-                                       while (width_specifier -- > 0)
-                                               log_putchar (psf, lead_char) ;
-                                       break ;
-
-                       case 'c': /* char */
-                                       c = va_arg (ap, int) & 0xFF ;
-                                       log_putchar (psf, c) ;
-                                       break ;
-
-                       case 'x': /* hex */
-                       case 'X': /* hex */
-                                       d = va_arg (ap, int) ;
-
-                                       if (d == 0)
-                                       {       while (--width_specifier > 0)
-                                                       log_putchar (psf, lead_char) ;
-                                               log_putchar (psf, '0') ;
-                                               break ;
-                                               } ;
-                                       shift = 28 ;
-                                       width = (width_specifier < 8) ? 8 : width_specifier ;
-                                       while (! ((0xF << shift) & d))
-                                       {       shift -= 4 ;
-                                               width -- ;
-                                               } ;
-
-                                       while (width > 0 && width_specifier > width)
-                                       {       log_putchar (psf, lead_char) ;
-                                               width_specifier-- ;
-                                               } ;
-
-                                       while (shift >= 0)
-                                       {       c = (d >> shift) & 0xF ;
-                                               log_putchar (psf, (c > 9) ? c + 'A' - 10 : c + '0') ;
-                                               shift -= 4 ;
-                                               } ;
-                                       break ;
-
-                       case 'M': /* int2str */
-                                       d = va_arg (ap, int) ;
-                                       if (CPU_IS_LITTLE_ENDIAN)
-                                       {       istr [0] = d & 0xFF ;
-                                               istr [1] = (d >> 8) & 0xFF ;
-                                               istr [2] = (d >> 16) & 0xFF ;
-                                               istr [3] = (d >> 24) & 0xFF ;
-                                               }
-                                       else
-                                       {       istr [3] = d & 0xFF ;
-                                               istr [2] = (d >> 8) & 0xFF ;
-                                               istr [1] = (d >> 16) & 0xFF ;
-                                               istr [0] = (d >> 24) & 0xFF ;
-                                               } ;
-                                       istr [4] = 0 ;
-                                       strptr = istr ;
-                                       while (*strptr)
-                                       {       c = *strptr++ ;
-                                               log_putchar (psf, c) ;
-                                               } ;
-                                       break ;
-
-                       default :
-                                       log_putchar (psf, '*') ;
-                                       log_putchar (psf, c) ;
-                                       log_putchar (psf, '*') ;
-                                       break ;
-                       } /* switch */
-               } /* while */
-
-       va_end (ap) ;
-       return ;
-} /* psf_log_printf */
-
-/*-----------------------------------------------------------------------------------------------
-**  ASCII header printf functions.
-**  Some formats (ie NIST) use ascii text in their headers.
-**  Format specifiers are the same as the standard printf specifiers (uses vsnprintf).
-**  If this generates a compile error on any system, the author should be notified
-**  so an alternative vsnprintf can be provided.
-*/
-
-void
-psf_asciiheader_printf (SF_PRIVATE *psf, const char *format, ...)
-{      va_list argptr ;
-       int             maxlen ;
-       char    *start ;
-
-       maxlen = strlen ((char*) psf->header) ;
-       start   = ((char*) psf->header) + maxlen ;
-       maxlen  = sizeof (psf->header) - maxlen ;
-
-       va_start (argptr, format) ;
-       vsnprintf (start, maxlen, format, argptr) ;
-       va_end (argptr) ;
-
-       /* Make sure the string is properly terminated. */
-       start [maxlen - 1] = 0 ;
-
-       psf->headindex = strlen ((char*) psf->header) ;
-
-       return ;
-} /* psf_asciiheader_printf */
-
-/*-----------------------------------------------------------------------------------------------
-**  Binary header writing functions. Returns number of bytes written.
-**
-**  Format specifiers for psf_binheader_writef are as follows
-**             m       - marker - four bytes - no endian manipulation
-**
-**             e   - all following numerical values will be little endian
-**             E   - all following numerical values will be big endian
-**
-**             t   - all following O types will be truncated to 4 bytes
-**             T   - switch off truncation of all following O types
-**
-**             1       - single byte value
-**             2       - two byte value
-**             3       - three byte value
-**             4       - four byte value
-**             8       - eight byte value (sometimes written as 4 bytes)
-**
-**             s   - string preceded by a four byte length
-**             S   - string including null terminator
-**             f       - floating point data
-**             d       - double precision floating point data
-**             h       - 16 binary bytes value
-**
-**             b       - binary data (see below)
-**             z   - zero bytes (ses below)
-**             j       - jump forwards or backwards
-**
-**     To write a word followed by an int (both little endian) use:
-**             psf_binheader_writef ("e24", wordval, longval) ;
-**
-**     To write binary data use:
-**             psf_binheader_writef ("b", &bindata, sizeof (bindata)) ;
-**
-**     To write N zero bytes use:
-**                     NOTE: due to platform issues (ie x86-64) you should cast the
-**                     argument to size_t or ensure the variable type is size_t.
-**             psf_binheader_writef ("z", N) ;
-*/
-
-/* These macros may seem a bit messy but do prevent problems with processors which
-** seg. fault when asked to write an int or short to a non-int/short aligned address.
-*/
-
-static inline void
-header_put_byte (SF_PRIVATE *psf, char x)
-{      if (psf->headindex < SIGNED_SIZEOF (psf->header) - 1)
-               psf->header [psf->headindex++] = x ;
-} /* header_put_byte */
-
-#if (CPU_IS_BIG_ENDIAN == 1)
-static inline void
-header_put_marker (SF_PRIVATE *psf, int x)
-{      if (psf->headindex < SIGNED_SIZEOF (psf->header) - 4)
-       {       psf->header [psf->headindex++] = (x >> 24) ;
-               psf->header [psf->headindex++] = (x >> 16) ;
-               psf->header [psf->headindex++] = (x >> 8) ;
-               psf->header [psf->headindex++] = x ;
-               } ;
-} /* header_put_marker */
-
-#elif (CPU_IS_LITTLE_ENDIAN == 1)
-static inline void
-header_put_marker (SF_PRIVATE *psf, int x)
-{      if (psf->headindex < SIGNED_SIZEOF (psf->header) - 4)
-       {       psf->header [psf->headindex++] = x ;
-               psf->header [psf->headindex++] = (x >> 8) ;
-               psf->header [psf->headindex++] = (x >> 16) ;
-               psf->header [psf->headindex++] = (x >> 24) ;
-               } ;
-} /* header_put_marker */
-
-#else
-#      error "Cannot determine endian-ness of processor."
-#endif
-
-
-static inline void
-header_put_be_short (SF_PRIVATE *psf, int x)
-{      if (psf->headindex < SIGNED_SIZEOF (psf->header) - 2)
-       {       psf->header [psf->headindex++] = (x >> 8) ;
-               psf->header [psf->headindex++] = x ;
-               } ;
-} /* header_put_be_short */
-
-static inline void
-header_put_le_short (SF_PRIVATE *psf, int x)
-{      if (psf->headindex < SIGNED_SIZEOF (psf->header) - 2)
-       {       psf->header [psf->headindex++] = x ;
-               psf->header [psf->headindex++] = (x >> 8) ;
-               } ;
-} /* header_put_le_short */
-
-static inline void
-header_put_be_3byte (SF_PRIVATE *psf, int x)
-{      if (psf->headindex < SIGNED_SIZEOF (psf->header) - 3)
-       {       psf->header [psf->headindex++] = (x >> 16) ;
-               psf->header [psf->headindex++] = (x >> 8) ;
-               psf->header [psf->headindex++] = x ;
-               } ;
-} /* header_put_be_3byte */
-
-static inline void
-header_put_le_3byte (SF_PRIVATE *psf, int x)
-{      if (psf->headindex < SIGNED_SIZEOF (psf->header) - 3)
-       {       psf->header [psf->headindex++] = x ;
-               psf->header [psf->headindex++] = (x >> 8) ;
-               psf->header [psf->headindex++] = (x >> 16) ;
-               } ;
-} /* header_put_le_3byte */
-
-static inline void
-header_put_be_int (SF_PRIVATE *psf, int x)
-{      if (psf->headindex < SIGNED_SIZEOF (psf->header) - 4)
-       {       psf->header [psf->headindex++] = (x >> 24) ;
-               psf->header [psf->headindex++] = (x >> 16) ;
-               psf->header [psf->headindex++] = (x >> 8) ;
-               psf->header [psf->headindex++] = x ;
-               } ;
-} /* header_put_be_int */
-
-static inline void
-header_put_le_int (SF_PRIVATE *psf, int x)
-{      if (psf->headindex < SIGNED_SIZEOF (psf->header) - 4)
-       {       psf->header [psf->headindex++] = x ;
-               psf->header [psf->headindex++] = (x >> 8) ;
-               psf->header [psf->headindex++] = (x >> 16) ;
-               psf->header [psf->headindex++] = (x >> 24) ;
-               } ;
-} /* header_put_le_int */
-
-#if (SIZEOF_SF_COUNT_T == 4)
-
-static inline void
-header_put_be_8byte (SF_PRIVATE *psf, sf_count_t x)
-{      if (psf->headindex < SIGNED_SIZEOF (psf->header) - 8)
-       {       psf->header [psf->headindex++] = 0 ;
-               psf->header [psf->headindex++] = 0 ;
-               psf->header [psf->headindex++] = 0 ;
-               psf->header [psf->headindex++] = 0 ;
-               psf->header [psf->headindex++] = (x >> 24) ;
-               psf->header [psf->headindex++] = (x >> 16) ;
-               psf->header [psf->headindex++] = (x >> 8) ;
-               psf->header [psf->headindex++] = x ;
-               } ;
-} /* header_put_be_8byte */
-
-static inline void
-header_put_le_8byte (SF_PRIVATE *psf, sf_count_t x)
-{      if (psf->headindex < SIGNED_SIZEOF (psf->header) - 8)
-       {       psf->header [psf->headindex++] = x ;
-               psf->header [psf->headindex++] = (x >> 8) ;
-               psf->header [psf->headindex++] = (x >> 16) ;
-               psf->header [psf->headindex++] = (x >> 24) ;
-               psf->header [psf->headindex++] = 0 ;
-               psf->header [psf->headindex++] = 0 ;
-               psf->header [psf->headindex++] = 0 ;
-               psf->header [psf->headindex++] = 0 ;
-               } ;
-} /* header_put_le_8byte */
-
-#elif (SIZEOF_SF_COUNT_T == 8)
-
-static inline void
-header_put_be_8byte (SF_PRIVATE *psf, sf_count_t x)
-{      if (psf->headindex < SIGNED_SIZEOF (psf->header) - 8)
-       {       psf->header [psf->headindex++] = (x >> 56) ;
-               psf->header [psf->headindex++] = (x >> 48) ;
-               psf->header [psf->headindex++] = (x >> 40) ;
-               psf->header [psf->headindex++] = (x >> 32) ;
-               psf->header [psf->headindex++] = (x >> 24) ;
-               psf->header [psf->headindex++] = (x >> 16) ;
-               psf->header [psf->headindex++] = (x >> 8) ;
-               psf->header [psf->headindex++] = x ;
-               } ;
-} /* header_put_be_8byte */
-
-static inline void
-header_put_le_8byte (SF_PRIVATE *psf, sf_count_t x)
-{      if (psf->headindex < SIGNED_SIZEOF (psf->header) - 8)
-       {       psf->header [psf->headindex++] = x ;
-               psf->header [psf->headindex++] = (x >> 8) ;
-               psf->header [psf->headindex++] = (x >> 16) ;
-               psf->header [psf->headindex++] = (x >> 24) ;
-               psf->header [psf->headindex++] = (x >> 32) ;
-               psf->header [psf->headindex++] = (x >> 40) ;
-               psf->header [psf->headindex++] = (x >> 48) ;
-               psf->header [psf->headindex++] = (x >> 56) ;
-               } ;
-} /* header_put_le_8byte */
-
-#else
-#error "SIZEOF_SF_COUNT_T is not defined."
-#endif
-
-int
-psf_binheader_writef (SF_PRIVATE *psf, const char *format, ...)
-{      va_list argptr ;
-       sf_count_t              countdata ;
-       unsigned long   longdata ;
-       unsigned int    data ;
-       float                   floatdata ;
-       double                  doubledata ;
-       void                    *bindata ;
-       size_t                  size ;
-       char                    c, *strptr ;
-       int                             count = 0, trunc_8to4 ;
-
-       trunc_8to4 = SF_FALSE ;
-
-       va_start (argptr, format) ;
-
-       while ((c = *format++))
-       {       switch (c)
-               {       case ' ' : /* Do nothing. Just used to space out format string. */
-                                       break ;
-
-                       case 'e' : /* All conversions are now from LE to host. */
-                                       psf->rwf_endian = SF_ENDIAN_LITTLE ;
-                                       break ;
-
-                       case 'E' : /* All conversions are now from BE to host. */
-                                       psf->rwf_endian = SF_ENDIAN_BIG ;
-                                       break ;
-
-                       case 't' : /* All 8 byte values now get written as 4 bytes. */
-                                       trunc_8to4 = SF_TRUE ;
-                                       break ;
-
-                       case 'T' : /* All 8 byte values now get written as 8 bytes. */
-                                       trunc_8to4 = SF_FALSE ;
-                                       break ;
-
-                       case 'm' :
-                                       data = va_arg (argptr, unsigned int) ;
-                                       header_put_marker (psf, data) ;
-                                       count += 4 ;
-                                       break ;
-
-                       case '1' :
-                                       data = va_arg (argptr, unsigned int) ;
-                                       header_put_byte (psf, data) ;
-                                       count += 1 ;
-                                       break ;
-
-                       case '2' :
-                                       data = va_arg (argptr, unsigned int) ;
-                                       if (psf->rwf_endian == SF_ENDIAN_BIG)
-                                       {       header_put_be_short (psf, data) ;
-                                               }
-                                       else
-                                       {       header_put_le_short (psf, data) ;
-                                               } ;
-                                       count += 2 ;
-                                       break ;
-
-                       case '3' : /* tribyte */
-                                       data = va_arg (argptr, unsigned int) ;
-                                       if (psf->rwf_endian == SF_ENDIAN_BIG)
-                                       {       header_put_be_3byte (psf, data) ;
-                                               }
-                                       else
-                                       {       header_put_le_3byte (psf, data) ;
-                                               } ;
-                                       count += 3 ;
-                                       break ;
-
-                       case '4' :
-                                       data = va_arg (argptr, unsigned int) ;
-                                       if (psf->rwf_endian == SF_ENDIAN_BIG)
-                                       {       header_put_be_int (psf, data) ;
-                                               }
-                                       else
-                                       {       header_put_le_int (psf, data) ;
-                                               } ;
-                                       count += 4 ;
-                                       break ;
-
-                       case '8' :
-                                       countdata = va_arg (argptr, sf_count_t) ;
-                                       if (psf->rwf_endian == SF_ENDIAN_BIG && trunc_8to4 == SF_FALSE)
-                                       {       header_put_be_8byte (psf, countdata) ;
-                                               count += 8 ;
-                                               }
-                                       else if (psf->rwf_endian == SF_ENDIAN_LITTLE && trunc_8to4 == SF_FALSE)
-                                       {       header_put_le_8byte (psf, countdata) ;
-                                               count += 8 ;
-                                               }
-                                       else if (psf->rwf_endian == SF_ENDIAN_BIG && trunc_8to4 == SF_TRUE)
-                                       {       longdata = countdata & 0xFFFFFFFF ;
-                                               header_put_be_int (psf, longdata) ;
-                                               count += 4 ;
-                                               }
-                                       else if (psf->rwf_endian == SF_ENDIAN_LITTLE && trunc_8to4 == SF_TRUE)
-                                       {       longdata = countdata & 0xFFFFFFFF ;
-                                               header_put_le_int (psf, longdata) ;
-                                               count += 4 ;
-                                               }
-                                       break ;
-
-                       case 'f' :
-                                       /* Floats are passed as doubles. Is this always true? */
-                                       floatdata = (float) va_arg (argptr, double) ;
-                                       if (psf->rwf_endian == SF_ENDIAN_BIG)
-                                               float32_be_write (floatdata, psf->header + psf->headindex) ;
-                                       else
-                                               float32_le_write (floatdata, psf->header + psf->headindex) ;
-                                       psf->headindex += 4 ;
-                                       count += 4 ;
-                                       break ;
-
-                       case 'd' :
-                                       doubledata = va_arg (argptr, double) ;
-                                       if (psf->rwf_endian == SF_ENDIAN_BIG)
-                                               double64_be_write (doubledata, psf->header + psf->headindex) ;
-                                       else
-                                               double64_le_write (doubledata, psf->header + psf->headindex) ;
-                                       psf->headindex += 8 ;
-                                       count += 8 ;
-                                       break ;
-
-                       case 's' :
-                                       /* Write a C string (guaranteed to have a zero terminator). */
-                                       strptr = va_arg (argptr, char *) ;
-                                       size = strlen (strptr) + 1 ;
-                                       size += (size & 1) ;
-                                       if (psf->rwf_endian == SF_ENDIAN_BIG)
-                                               header_put_be_int (psf, size) ;
-                                       else
-                                               header_put_le_int (psf, size) ;
-                                       memcpy (&(psf->header [psf->headindex]), strptr, size) ;
-                                       psf->headindex += size ;
-                                       psf->header [psf->headindex - 1] = 0 ;
-                                       count += 4 + size ;
-                                       break ;
-
-                       case 'S' :
-                                       /*
-                                       **      Write an AIFF style string (no zero terminator but possibly
-                                       **      an extra pad byte if the string length is odd).
-                                       */
-                                       strptr = va_arg (argptr, char *) ;
-                                       size = strlen (strptr) ;
-                                       if (psf->rwf_endian == SF_ENDIAN_BIG)
-                                               header_put_be_int (psf, size) ;
-                                       else
-                                               header_put_le_int (psf, size) ;
-                                       memcpy (&(psf->header [psf->headindex]), strptr, size + 1) ;
-                                       size += (size & 1) ;
-                                       psf->headindex += size ;
-                                       psf->header [psf->headindex] = 0 ;
-                                       count += 4 + size ;
-                                       break ;
-
-                       case 'b' :
-                                       bindata = va_arg (argptr, void *) ;
-                                       size    = va_arg (argptr, size_t) ;
-                                       memcpy (&(psf->header [psf->headindex]), bindata, size) ;
-                                       psf->headindex += size ;
-                                       count += size ;
-                                       break ;
-
-                       case 'z' :
-                                       size = va_arg (argptr, size_t) ;
-                                       count += size ;
-                                       while (size)
-                                       {       psf->header [psf->headindex] = 0 ;
-                                               psf->headindex ++ ;
-                                               size -- ;
-                                               } ;
-                                       break ;
-
-                       case 'h' :
-                                       bindata = va_arg (argptr, void *) ;
-                                       memcpy (&(psf->header [psf->headindex]), bindata, 16) ;
-                                       psf->headindex += 16 ;
-                                       count += 16 ;
-                                       break ;
-
-                       case 'j' :
-                                       size = va_arg (argptr, size_t) ;
-                                       psf->headindex += size ;
-                                       count = size ;
-                                       break ;
-
-                       default :
-                               psf_log_printf (psf, "*** Invalid format specifier `%c'\n", c) ;
-                               psf->error = SFE_INTERNAL ;
-                               break ;
-                       } ;
-               } ;
-
-       va_end (argptr) ;
-       return count ;
-} /* psf_binheader_writef */
-
-/*-----------------------------------------------------------------------------------------------
-**  Binary header reading functions. Returns number of bytes read.
-**
-**     Format specifiers are the same as for header write function above with the following
-**     additions:
-**
-**             p   - jump a given number of position from start of file.
-**
-**     If format is NULL, psf_binheader_readf returns the current offset.
-*/
-
-#if (CPU_IS_BIG_ENDIAN == 1)
-#define        GET_MARKER(ptr) (       ((ptr) [0] << 24)       | ((ptr) [1] << 16) |   \
-                                                       ((ptr) [2] << 8)        | ((ptr) [3]))
-
-#elif (CPU_IS_LITTLE_ENDIAN == 1)
-#define        GET_MARKER(ptr) (       ((ptr) [0])                     | ((ptr) [1] << 8) |    \
-                                                       ((ptr) [2] << 16)       | ((ptr) [3] << 24))
-
-#else
-#      error "Cannot determine endian-ness of processor."
-#endif
-
-#define        GET_LE_SHORT(ptr)       (((ptr) [1] << 8) | ((ptr) [0]))
-#define        GET_BE_SHORT(ptr)       (((ptr) [0] << 8) | ((ptr) [1]))
-
-#define        GET_LE_3BYTE(ptr)       (       ((ptr) [2] << 16) | ((ptr) [1] << 8) | ((ptr) [0]))
-#define        GET_BE_3BYTE(ptr)       (       ((ptr) [0] << 16) | ((ptr) [1] << 8) | ((ptr) [2]))
-
-#define        GET_LE_INT(ptr)         (       ((ptr) [3] << 24)       | ((ptr) [2] << 16) |   \
-                                                               ((ptr) [1] << 8)        | ((ptr) [0]))
-
-#define        GET_BE_INT(ptr)         (       ((ptr) [0] << 24)       | ((ptr) [1] << 16) |   \
-                                                               ((ptr) [2] << 8)        | ((ptr) [3]))
-
-#define        GET_LE_8BYTE(ptr)       (       (((sf_count_t) (ptr) [7]) << 56)        | (((sf_count_t) (ptr) [6]) << 48) |    \
-                                                               (((sf_count_t) (ptr) [5]) << 40)        | (((sf_count_t) (ptr) [4]) << 32) |    \
-                                                               (((sf_count_t) (ptr) [3]) << 24)        | (((sf_count_t) (ptr) [2]) << 16) |    \
-                                                               (((sf_count_t) (ptr) [1]) << 8)         | ((ptr) [0]))
-
-#define        GET_BE_8BYTE(ptr)       (       (((sf_count_t) (ptr) [0]) << 56)        | (((sf_count_t) (ptr) [1]) << 48) |    \
-                                                               (((sf_count_t) (ptr) [2]) << 40)        | (((sf_count_t) (ptr) [3]) << 32) |    \
-                                                               (((sf_count_t) (ptr) [4]) << 24)        | (((sf_count_t) (ptr) [5]) << 16) |    \
-                                                               (((sf_count_t) (ptr) [6]) << 8)         | ((ptr) [7]))
-
-
-
-static int
-header_read (SF_PRIVATE *psf, void *ptr, int bytes)
-{      int count = 0 ;
-
-       if (psf->headindex >= SIGNED_SIZEOF (psf->header))
-       {       memset (ptr, 0, SIGNED_SIZEOF (psf->header) - psf->headindex) ;
-
-               /* This is the best that we can do. */
-               psf_fseek (psf, bytes, SEEK_CUR) ;
-               return bytes ;
-               } ;
-
-       if (psf->headindex + bytes > SIGNED_SIZEOF (psf->header))
-       {       int most ;
-
-               most = SIGNED_SIZEOF (psf->header) - psf->headindex ;
-               psf_fread (psf->header + psf->headend, 1, most, psf) ;
-               memset ((char *) ptr + most, 0, bytes - most) ;
-
-               psf_fseek (psf, bytes - most, SEEK_CUR) ;
-               return bytes ;
-               } ;
-
-       if (psf->headindex + bytes > psf->headend)
-       {       count = psf_fread (psf->header + psf->headend, 1, bytes - (psf->headend - psf->headindex), psf) ;
-               if (count != bytes - (int) (psf->headend - psf->headindex))
-               {       psf_log_printf (psf, "Error : psf_fread returned short count.\n") ;
-                       return 0 ;
-                       } ;
-               psf->headend += count ;
-               } ;
-
-       memcpy (ptr, psf->header + psf->headindex, bytes) ;
-       psf->headindex += bytes ;
-
-       return bytes ;
-} /* header_read */
-
-static void
-header_seek (SF_PRIVATE *psf, sf_count_t position, int whence)
-{
-
-       switch (whence)
-       {       case SEEK_SET :
-                       if (position > SIGNED_SIZEOF (psf->header))
-                       {       /* Too much header to cache so just seek instead. */
-                               psf_fseek (psf, position, whence) ;
-                               return ;
-                               } ;
-                       if (position > psf->headend)
-                               psf->headend += psf_fread (psf->header + psf->headend, 1, position - psf->headend, psf) ;
-                       psf->headindex = position ;
-                       break ;
-
-               case SEEK_CUR :
-                       if (psf->headindex + position < 0)
-                               break ;
-
-                       if (psf->headindex >= SIGNED_SIZEOF (psf->header))
-                       {       psf_fseek (psf, position, whence) ;
-                               return ;
-                               } ;
-
-                       if (psf->headindex + position <= psf->headend)
-                       {       psf->headindex += position ;
-                               break ;
-                               } ;
-
-                       if (psf->headindex + position > SIGNED_SIZEOF (psf->header))
-                       {       /* Need to jump this without caching it. */
-                               psf->headindex = psf->headend ;
-                               psf_fseek (psf, position, SEEK_CUR) ;
-                               break ;
-                               } ;
-
-                       psf->headend += psf_fread (psf->header + psf->headend, 1, position - (psf->headend - psf->headindex), psf) ;
-                       psf->headindex = psf->headend ;
-                       break ;
-
-               case SEEK_END :
-               default :
-                       psf_log_printf (psf, "Bad whence param in header_seek().\n") ;
-                       break ;
-               } ;
-
-       return ;
-} /* header_seek */
-
-static int
-header_gets (SF_PRIVATE *psf, char *ptr, int bufsize)
-{
-       int             k ;
-
-       for (k = 0 ; k < bufsize - 1 ; k++)
-       {       if (psf->headindex < psf->headend)
-               {       ptr [k] = psf->header [psf->headindex] ;
-                       psf->headindex ++ ;
-                       }
-               else
-               {       psf->headend += psf_fread (psf->header + psf->headend, 1, 1, psf) ;
-                       ptr [k] = psf->header [psf->headindex] ;
-                       psf->headindex = psf->headend ;
-                       } ;
-
-               if (ptr [k] == '\n')
-                       break ;
-               } ;
-
-       ptr [k] = 0 ;
-
-       return k ;
-} /* header_gets */
-
-int
-psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
-{      va_list                 argptr ;
-       sf_count_t              *countptr, countdata ;
-       unsigned char   *ucptr, sixteen_bytes [16] ;
-       unsigned int    *intptr, intdata ;
-       unsigned short  *shortptr ;
-       char                    *charptr ;
-       float                   *floatptr ;
-       double                  *doubleptr ;
-       char                    c ;
-       int                             byte_count = 0, count ;
-
-       if (! format)
-               return psf_ftell (psf) ;
-
-       va_start (argptr, format) ;
-
-       while ((c = *format++))
-       {       switch (c)
-               {       case 'e' : /* All conversions are now from LE to host. */
-                                       psf->rwf_endian = SF_ENDIAN_LITTLE ;
-                                       break ;
-
-                       case 'E' : /* All conversions are now from BE to host. */
-                                       psf->rwf_endian = SF_ENDIAN_BIG ;
-                                       break ;
-
-                       case 'm' :
-                                       intptr = va_arg (argptr, unsigned int*) ;
-                                       ucptr = (unsigned char*) intptr ;
-                                       byte_count += header_read (psf, ucptr, sizeof (int)) ;
-                                       *intptr = GET_MARKER (ucptr) ;
-                                       break ;
-
-                       case 'h' :
-                                       intptr = va_arg (argptr, unsigned int*) ;
-                                       ucptr = (unsigned char*) intptr ;
-                                       byte_count += header_read (psf, sixteen_bytes, sizeof (sixteen_bytes)) ;
-                                       {       int k ;
-                                               intdata = 0 ;
-                                               for (k = 0 ; k < 16 ; k++)
-                                                       intdata ^= sixteen_bytes [k] << k ;
-                                               }
-                                       *intptr = intdata ;
-                                       break ;
-
-                       case '1' :
-                                       charptr = va_arg (argptr, char*) ;
-                                       *charptr = 0 ;
-                                       byte_count += header_read (psf, charptr, sizeof (char)) ;
-                                       break ;
-
-                       case '2' :
-                                       shortptr = va_arg (argptr, unsigned short*) ;
-                                       *shortptr = 0 ;
-                                       ucptr = (unsigned char*) shortptr ;
-                                       byte_count += header_read (psf, ucptr, sizeof (short)) ;
-                                       if (psf->rwf_endian == SF_ENDIAN_BIG)
-                                               *shortptr = GET_BE_SHORT (ucptr) ;
-                                       else
-                                               *shortptr = GET_LE_SHORT (ucptr) ;
-                                       break ;
-
-                       case '3' :
-                                       intptr = va_arg (argptr, unsigned int*) ;
-                                       *intptr = 0 ;
-                                       byte_count += header_read (psf, sixteen_bytes, 3) ;
-                                       if (psf->rwf_endian == SF_ENDIAN_BIG)
-                                               *intptr = GET_BE_3BYTE (sixteen_bytes) ;
-                                       else
-                                               *intptr = GET_LE_3BYTE (sixteen_bytes) ;
-                                       break ;
-
-                       case '4' :
-                                       intptr = va_arg (argptr, unsigned int*) ;
-                                       *intptr = 0 ;
-                                       ucptr = (unsigned char*) intptr ;
-                                       byte_count += header_read (psf, ucptr, sizeof (int)) ;
-                                       if (psf->rwf_endian == SF_ENDIAN_BIG)
-                                               *intptr = GET_BE_INT (ucptr) ;
-                                       else
-                                               *intptr = GET_LE_INT (ucptr) ;
-                                       break ;
-
-                       case '8' :
-                                       countptr = va_arg (argptr, sf_count_t *) ;
-                                       *countptr = 0 ;
-                                       byte_count += header_read (psf, sixteen_bytes, 8) ;
-                                       if (psf->rwf_endian == SF_ENDIAN_BIG)
-                                               countdata = GET_BE_8BYTE (sixteen_bytes) ;
-                                       else
-                                               countdata = GET_LE_8BYTE (sixteen_bytes) ;
-                                       *countptr = countdata ;
-                                       break ;
-
-                       case 'f' : /* Float conversion */
-                                       floatptr = va_arg (argptr, float *) ;
-                                       *floatptr = 0.0 ;
-                                       byte_count += header_read (psf, floatptr, sizeof (float)) ;
-                                       if (psf->rwf_endian == SF_ENDIAN_BIG)
-                                               *floatptr = float32_be_read ((unsigned char*) floatptr) ;
-                                       else
-                                               *floatptr = float32_le_read ((unsigned char*) floatptr) ;
-                                       break ;
-
-                       case 'd' : /* double conversion */
-                                       doubleptr = va_arg (argptr, double *) ;
-                                       *doubleptr = 0.0 ;
-                                       byte_count += header_read (psf, doubleptr, sizeof (double)) ;
-                                       if (psf->rwf_endian == SF_ENDIAN_BIG)
-                                               *doubleptr = double64_be_read ((unsigned char*) doubleptr) ;
-                                       else
-                                               *doubleptr = double64_le_read ((unsigned char*) doubleptr) ;
-                                       break ;
-
-                       case 's' :
-                                       psf_log_printf (psf, "Format conversion 's' not implemented yet.\n") ;
-                                       /*
-                                       strptr = va_arg (argptr, char *) ;
-                                       size   = strlen (strptr) + 1 ;
-                                       size  += (size & 1) ;
-                                       longdata = H2LE_32 (size) ;
-                                       get_int (psf, longdata) ;
-                                       memcpy (&(psf->header [psf->headindex]), strptr, size) ;
-                                       psf->headindex += size ;
-                                       */
-                                       break ;
-
-                       case 'b' :
-                                       charptr = va_arg (argptr, char*) ;
-                                       count = va_arg (argptr, size_t) ;
-                                       if (count > 0)
-                                               byte_count += header_read (psf, charptr, count) ;
-                                       break ;
-
-                       case 'G' :
-                                       charptr = va_arg (argptr, char*) ;
-                                       count = va_arg (argptr, size_t) ;
-                                       if (count > 0)
-                                               byte_count += header_gets (psf, charptr, count) ;
-                                       break ;
-
-                       case 'z' :
-                                       psf_log_printf (psf, "Format conversion 'z' not implemented yet.\n") ;
-                                       /*
-                                       size    = va_arg (argptr, size_t) ;
-                                       while (size)
-                                       {       psf->header [psf->headindex] = 0 ;
-                                               psf->headindex ++ ;
-                                               size -- ;
-                                               } ;
-                                       */
-                                       break ;
-
-                       case 'p' :
-                                       /* Get the seek position first. */
-                                       count = va_arg (argptr, size_t) ;
-                                       header_seek (psf, count, SEEK_SET) ;
-                                       byte_count = count ;
-                                       break ;
-
-                       case 'j' :
-                                       /* Get the seek position first. */
-                                       count = va_arg (argptr, size_t) ;
-                                       header_seek (psf, count, SEEK_CUR) ;
-                                       byte_count += count ;
-                                       break ;
-
-                       default :
-                               psf_log_printf (psf, "*** Invalid format specifier `%c'\n", c) ;
-                               psf->error = SFE_INTERNAL ;
-                               break ;
-                       } ;
-               } ;
-
-       va_end (argptr) ;
-
-       return byte_count ;
-} /* psf_binheader_readf */
-
-/*-----------------------------------------------------------------------------------------------
-*/
-
-sf_count_t
-psf_default_seek (SF_PRIVATE *psf, int UNUSED (mode), sf_count_t samples_from_start)
-{      sf_count_t position, retval ;
-
-       if (! (psf->blockwidth && psf->dataoffset >= 0))
-       {       psf->error = SFE_BAD_SEEK ;
-               return  PSF_SEEK_ERROR ;
-               } ;
-
-       if (! psf->sf.seekable)
-       {       psf->error = SFE_NOT_SEEKABLE ;
-               return  PSF_SEEK_ERROR ;
-               } ;
-
-       position = psf->dataoffset + psf->blockwidth * samples_from_start ;
-
-       if ((retval = psf_fseek (psf, position, SEEK_SET)) != position)
-       {       psf->error = SFE_SEEK_FAILED ;
-               return PSF_SEEK_ERROR ;
-               } ;
-
-       return samples_from_start ;
-} /* psf_default_seek */
-
-/*-----------------------------------------------------------------------------------------------
-*/
-
-void
-psf_hexdump (const void *ptr, int len)
-{      const char *data ;
-       char    ascii [17] ;
-       int             k, m ;
-
-       if ((data = ptr) == NULL)
-               return ;
-       if (len <= 0)
-               return ;
-
-       puts ("") ;
-       for (k = 0 ; k < len ; k += 16)
-       {       memset (ascii, ' ', sizeof (ascii)) ;
-
-               printf ("%08X: ", k) ;
-               for (m = 0 ; m < 16 && k + m < len ; m++)
-               {       printf (m == 8 ? " %02X " : "%02X ", data [k + m] & 0xFF) ;
-                       ascii [m] = psf_isprint (data [k + m]) ? data [k + m] : '.' ;
-                       } ;
-
-               if (m <= 8) printf (" ") ;
-               for ( ; m < 16 ; m++) printf ("   ") ;
-
-               ascii [16] = 0 ;
-               printf (" %s\n", ascii) ;
-               } ;
-
-       puts ("") ;
-} /* psf_hexdump */
-
-void
-psf_log_SF_INFO (SF_PRIVATE *psf)
-{      psf_log_printf (psf, "---------------------------------\n") ;
-
-       psf_log_printf (psf, " Sample rate :   %d\n", psf->sf.samplerate) ;
-       if (psf->sf.frames == SF_COUNT_MAX)
-               psf_log_printf (psf, " Frames      :   unknown\n") ;
-       else
-               psf_log_printf (psf, " Frames      :   %D\n", psf->sf.frames) ;
-       psf_log_printf (psf, " Channels    :   %d\n", psf->sf.channels) ;
-
-       psf_log_printf (psf, " Format      :   0x%X\n", psf->sf.format) ;
-       psf_log_printf (psf, " Sections    :   %d\n", psf->sf.sections) ;
-       psf_log_printf (psf, " Seekable    :   %s\n", psf->sf.seekable ? "TRUE" : "FALSE") ;
-
-       psf_log_printf (psf, "---------------------------------\n") ;
-} /* psf_dump_SFINFO */
-
-/*========================================================================================
-*/
-
-void*
-psf_memset (void *s, int c, sf_count_t len)
-{      char    *ptr ;
-       int     setcount ;
-
-       ptr = (char *) s ;
-
-       while (len > 0)
-       {       setcount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-               memset (ptr, c, setcount) ;
-
-               ptr += setcount ;
-               len -= setcount ;
-               } ;
-
-       return s ;
-} /* psf_memset */
-
-SF_INSTRUMENT *
-psf_instrument_alloc (void)
-{      SF_INSTRUMENT *instr ;
-
-       instr = calloc (1, sizeof (SF_INSTRUMENT)) ;
-
-       if (instr == NULL)
-               return NULL ;
-
-       /* Set non-zero default values. */
-       instr->basenote = -1 ;
-       instr->velocity_lo = -1 ;
-       instr->velocity_hi = -1 ;
-       instr->key_lo = -1 ;
-       instr->key_hi = -1 ;
-
-       return instr ;
-} /* psf_instrument_alloc */
-
-void
-psf_sanitize_string (char * cptr, int len)
-{
-       do
-       {
-               len -- ;
-               cptr [len] = psf_isprint (cptr [len]) ? cptr [len] : '.' ;
-       }
-       while (len > 0) ;
-} /* psf_sanitize_string */
-
-void
-psf_get_date_str (char *str, int maxlen)
-{      time_t          current ;
-       struct tm       timedata, *tmptr ;
-
-       time (&current) ;
-
-#if defined (HAVE_GMTIME_R)
-       /* If the re-entrant version is available, use it. */
-       tmptr = gmtime_r (&current, &timedata) ;
-#elif defined (HAVE_GMTIME)
-       /* Otherwise use the standard one and copy the data to local storage. */
-       tmptr = gmtime (&current) ;
-       memcpy (&timedata, tmptr, sizeof (timedata)) ;
-#else
-       tmptr = NULL ;
-#endif
-
-       if (tmptr)
-               snprintf (str, maxlen, "%4d-%02d-%02d %02d:%02d:%02d UTC",
-                       1900 + timedata.tm_year, timedata.tm_mon, timedata.tm_mday,
-                       timedata.tm_hour, timedata.tm_min, timedata.tm_sec) ;
-       else
-               snprintf (str, maxlen, "Unknown date") ;
-
-       return ;
-} /* psf_get_date_str */
-
-int
-subformat_to_bytewidth (int format)
-{
-       switch (format)
-       {       case SF_FORMAT_PCM_U8 :
-               case SF_FORMAT_PCM_S8 :
-                               return 1 ;
-               case SF_FORMAT_PCM_16 :
-                               return 2 ;
-               case SF_FORMAT_PCM_24 :
-                               return 3 ;
-               case SF_FORMAT_PCM_32 :
-               case SF_FORMAT_FLOAT :
-                               return 4 ;
-               case SF_FORMAT_DOUBLE :
-                               return 8 ;
-               } ;
-
-       return 0 ;
-} /* subformat_to_bytewidth */
-
-int
-s_bitwidth_to_subformat (int bits)
-{      static int array [] =
-       {       SF_FORMAT_PCM_S8, SF_FORMAT_PCM_16, SF_FORMAT_PCM_24, SF_FORMAT_PCM_32
-               } ;
-
-       if (bits < 8 || bits > 32)
-               return 0 ;
-
-       return array [((bits + 7) / 8) - 1] ;
-} /* bitwidth_to_subformat */
-
-int
-u_bitwidth_to_subformat (int bits)
-{      static int array [] =
-       {       SF_FORMAT_PCM_U8, SF_FORMAT_PCM_16, SF_FORMAT_PCM_24, SF_FORMAT_PCM_32
-               } ;
-
-       if (bits < 8 || bits > 32)
-               return 0 ;
-
-       return array [((bits + 7) / 8) - 1] ;
-} /* bitwidth_to_subformat */
-
-/*
-**     psf_rand_int32 : Not crypto quality, but more than adequate for things
-**     like stream serial numbers in Ogg files or the unique_id field of the
-**     SF_PRIVATE struct.
-*/
-
-int32_t
-psf_rand_int32 (void)
-{      static int32_t value = -1 ;
-       int k, count ;
-
-       if (value == -1)
-       {
-#if HAVE_GETTIMEOFDAY
-               struct timeval tv ;
-               gettimeofday (&tv, NULL) ;
-               value = tv.tv_sec + tv.tv_usec ;
-#else
-               value = time (NULL) ;
-#endif
-               } ;
-
-       count = 4 + (value & 7) ;
-       for (k = 0 ; k < count ; k++)
-               value = 11117 * value + 211231 ;
-
-       return value ;
-} /* psf_rand_int32 */
-
-void
-append_snprintf (char * dest, size_t maxlen, const char * fmt, ...)
-{      size_t len = strlen (dest) ;
-
-       if (len < maxlen)
-       {       va_list ap ;
-
-               va_start (ap, fmt) ;
-               vsnprintf (dest + len, maxlen - len, fmt, ap) ;
-               va_end (ap) ;
-               } ;
-
-       return ;
-} /* append_snprintf */
-
-
-void
-psf_strlcpy_crlf (char *dest, const char *src, size_t destmax, size_t srcmax)
-{      /* Must be minus 2 so it can still expand a single trailing '\n' or '\r'. */
-       char * destend = dest + destmax - 2 ;
-       const char * srcend = src + srcmax ;
-
-       while (dest < destend && src < srcend)
-       {       if ((src [0] == '\r' && src [1] == '\n') || (src [0] == '\n' && src [1] == '\r'))
-               {       *dest++ = '\r' ;
-                       *dest++ = '\n' ;
-                       src += 2 ;
-                       continue ;
-                       } ;
-
-               if (src [0] == '\r')
-               {       *dest++ = '\r' ;
-                       *dest++ = '\n' ;
-                       src += 1 ;
-                       continue ;
-                       } ;
-
-               if (src [0] == '\n')
-               {       *dest++ = '\r' ;
-                       *dest++ = '\n' ;
-                       src += 1 ;
-                       continue ;
-                       } ;
-
-               *dest++ = *src++ ;
-               } ;
-
-       /* Make sure dest is terminated. */
-       *dest = 0 ;
-} /* psf_strlcpy_crlf */
-
-sf_count_t
-psf_decode_frame_count (SF_PRIVATE *psf)
-{      sf_count_t count, readlen, total = 0 ;
-       BUF_UNION       ubuf ;
-
-       /* If we're reading from a pipe or the file is too long, just return SF_COUNT_MAX. */
-       if (psf_is_pipe (psf) || psf->datalength > 0x1000000)
-               return SF_COUNT_MAX ;
-
-       psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-       readlen = ARRAY_LEN (ubuf.ibuf) / psf->sf.channels ;
-       readlen *= psf->sf.channels ;
-
-       while ((count = psf->read_int (psf, ubuf.ibuf, readlen)) > 0)
-               total += count ;
-
-       psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-       return total / psf->sf.channels ;
-} /* psf_decode_frame_count */
-
-/*==============================================================================
-*/
-
-#define CASE_NAME(x)           case x : return #x ; break ;
-
-const char *
-str_of_major_format (int format)
-{      switch (SF_CONTAINER (format))
-       {       CASE_NAME (SF_FORMAT_WAV) ;
-               CASE_NAME (SF_FORMAT_AIFF) ;
-               CASE_NAME (SF_FORMAT_AU) ;
-               CASE_NAME (SF_FORMAT_RAW) ;
-               CASE_NAME (SF_FORMAT_PAF) ;
-               CASE_NAME (SF_FORMAT_SVX) ;
-               CASE_NAME (SF_FORMAT_NIST) ;
-               CASE_NAME (SF_FORMAT_VOC) ;
-               CASE_NAME (SF_FORMAT_IRCAM) ;
-               CASE_NAME (SF_FORMAT_W64) ;
-               CASE_NAME (SF_FORMAT_MAT4) ;
-               CASE_NAME (SF_FORMAT_MAT5) ;
-               CASE_NAME (SF_FORMAT_PVF) ;
-               CASE_NAME (SF_FORMAT_XI) ;
-               CASE_NAME (SF_FORMAT_HTK) ;
-               CASE_NAME (SF_FORMAT_SDS) ;
-               CASE_NAME (SF_FORMAT_AVR) ;
-               CASE_NAME (SF_FORMAT_WAVEX) ;
-               CASE_NAME (SF_FORMAT_SD2) ;
-               CASE_NAME (SF_FORMAT_FLAC) ;
-               CASE_NAME (SF_FORMAT_CAF) ;
-               CASE_NAME (SF_FORMAT_WVE) ;
-               CASE_NAME (SF_FORMAT_OGG) ;
-               default :
-                       break ;
-               } ;
-
-       return "BAD_MAJOR_FORMAT" ;
-} /* str_of_major_format */
-
-const char *
-str_of_minor_format (int format)
-{      switch (SF_CODEC (format))
-       {       CASE_NAME (SF_FORMAT_PCM_S8) ;
-               CASE_NAME (SF_FORMAT_PCM_16) ;
-               CASE_NAME (SF_FORMAT_PCM_24) ;
-               CASE_NAME (SF_FORMAT_PCM_32) ;
-               CASE_NAME (SF_FORMAT_PCM_U8) ;
-               CASE_NAME (SF_FORMAT_FLOAT) ;
-               CASE_NAME (SF_FORMAT_DOUBLE) ;
-               CASE_NAME (SF_FORMAT_ULAW) ;
-               CASE_NAME (SF_FORMAT_ALAW) ;
-               CASE_NAME (SF_FORMAT_IMA_ADPCM) ;
-               CASE_NAME (SF_FORMAT_MS_ADPCM) ;
-               CASE_NAME (SF_FORMAT_GSM610) ;
-               CASE_NAME (SF_FORMAT_VOX_ADPCM) ;
-               CASE_NAME (SF_FORMAT_G721_32) ;
-               CASE_NAME (SF_FORMAT_G723_24) ;
-               CASE_NAME (SF_FORMAT_G723_40) ;
-               CASE_NAME (SF_FORMAT_DWVW_12) ;
-               CASE_NAME (SF_FORMAT_DWVW_16) ;
-               CASE_NAME (SF_FORMAT_DWVW_24) ;
-               CASE_NAME (SF_FORMAT_DWVW_N) ;
-               CASE_NAME (SF_FORMAT_DPCM_8) ;
-               CASE_NAME (SF_FORMAT_DPCM_16) ;
-               CASE_NAME (SF_FORMAT_VORBIS) ;
-               default :
-                       break ;
-               } ;
-
-       return "BAD_MINOR_FORMAT" ;
-} /* str_of_minor_format */
-
-const char *
-str_of_open_mode (int mode)
-{      switch (mode)
-       {       CASE_NAME (SFM_READ) ;
-               CASE_NAME (SFM_WRITE) ;
-               CASE_NAME (SFM_RDWR) ;
-
-               default :
-                       break ;
-               } ;
-
-       return "BAD_MODE" ;
-} /* str_of_open_mode */
-
-const char *
-str_of_endianness (int end)
-{      switch (end)
-       {       CASE_NAME (SF_ENDIAN_BIG) ;
-               CASE_NAME (SF_ENDIAN_LITTLE) ;
-               CASE_NAME (SF_ENDIAN_CPU) ;
-               default :
-                       break ;
-               } ;
-
-       /* Zero length string for SF_ENDIAN_FILE. */
-       return "" ;
-} /* str_of_endianness */
-
-/*==============================================================================
-*/
-
-void
-psf_f2s_array (const float *src, short *dest, int count, int normalize)
-{      float                   normfact ;
-
-       normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ;
-       while (--count >= 0)
-               dest [count] = lrintf (src [count] * normfact) ;
-
-       return ;
-} /* psf_f2s_array */
-
-void
-psf_f2s_clip_array (const float *src, short *dest, int count, int normalize)
-{      float                   normfact, scaled_value ;
-
-       normfact = normalize ? (1.0 * 0x8000) : 1.0 ;
-
-       while (--count >= 0)
-       {       scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFF))
-               {       dest [count] = 0x7FFF ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x1000))
-               {       dest [count] = 0x8000 ;
-                       continue ;
-                       } ;
-
-               dest [count] = lrintf (scaled_value) ;
-               } ;
-
-       return ;
-} /* psf_f2s_clip_array */
-
-void
-psf_d2s_array (const double *src, short *dest, int count, int normalize)
-{      double                  normfact ;
-
-       normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ;
-       while (--count >= 0)
-               dest [count] = lrint (src [count] * normfact) ;
-
-       return ;
-} /* psf_f2s_array */
-
-void
-psf_d2s_clip_array (const double *src, short *dest, int count, int normalize)
-{      double                  normfact, scaled_value ;
-
-       normfact = normalize ? (1.0 * 0x8000) : 1.0 ;
-
-       while (--count >= 0)
-       {       scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFF))
-               {       dest [count] = 0x7FFF ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x1000))
-               {       dest [count] = 0x8000 ;
-                       continue ;
-                       } ;
-
-               dest [count] = lrint (scaled_value) ;
-               } ;
-
-       return ;
-} /* psf_d2s_clip_array */
-
-
-void
-psf_f2i_array (const float *src, int *dest, int count, int normalize)
-{      float                   normfact ;
-
-       normfact = normalize ? (1.0 * 0x7FFFFFFF) : 1.0 ;
-       while (--count >= 0)
-               dest [count] = lrintf (src [count] * normfact) ;
-
-       return ;
-} /* psf_f2i_array */
-
-void
-psf_f2i_clip_array (const float *src, int *dest, int count, int normalize)
-{      float                   normfact, scaled_value ;
-
-       normfact = normalize ? (8.0 * 0x10000000) : 1.0 ;
-
-       while (--count >= 0)
-       {       scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-               {       dest [count] = 0x7FFFFFFF ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-               {       dest [count] = 0x80000000 ;
-                       continue ;
-                       } ;
-
-               dest [count] = lrintf (scaled_value) ;
-               } ;
-
-       return ;
-} /* psf_f2i_clip_array */
-
-void
-psf_d2i_array (const double *src, int *dest, int count, int normalize)
-{      double                  normfact ;
-
-       normfact = normalize ? (1.0 * 0x7FFFFFFF) : 1.0 ;
-       while (--count >= 0)
-               dest [count] = lrint (src [count] * normfact) ;
-
-       return ;
-} /* psf_f2i_array */
-
-void
-psf_d2i_clip_array (const double *src, int *dest, int count, int normalize)
-{      double                  normfact, scaled_value ;
-
-       normfact = normalize ? (8.0 * 0x10000000) : 1.0 ;
-
-       while (--count >= 0)
-       {       scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-               {       dest [count] = 0x7FFFFFFF ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-               {       dest [count] = 0x80000000 ;
-                       continue ;
-                       } ;
-
-               dest [count] = lrint (scaled_value) ;
-               } ;
-
-       return ;
-} /* psf_d2i_clip_array */
-
-FILE *
-psf_open_tmpfile (char * fname, size_t fnamelen)
-{      const char * tmpdir ;
-       FILE * file ;
-
-       if (OS_IS_WIN32)
-               tmpdir = getenv ("TEMP") ;
-       else
-       {       tmpdir = getenv ("TMPDIR") ;
-               tmpdir = tmpdir == NULL ? "/tmp" : tmpdir ;
-               } ;
-
-//     if (tmpdir && access (tmpdir, R_OK | W_OK | X_OK) == 0)
-       {       snprintf (fname, fnamelen, "%s/%x%x-alac.tmp", tmpdir, psf_rand_int32 (), psf_rand_int32 ()) ;
-               if ((file = fopen (fname, "wb+")) != NULL)
-                       return file ;
-               } ;
-
-       snprintf (fname, fnamelen, "%x%x-alac.tmp", psf_rand_int32 (), psf_rand_int32 ()) ;
-       if ((file = fopen (fname, "wb+")) != NULL)
-               return file ;
-
-       memset (fname, 0, fnamelen) ;
-       return NULL ;
-} /* psf_open_tmpfile */
diff --git a/libs/libsndfile/src/common.h b/libs/libsndfile/src/common.h
deleted file mode 100644 (file)
index 4d61619..0000000
+++ /dev/null
@@ -1,1044 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef SNDFILE_COMMON_H
-#define SNDFILE_COMMON_H
-
-#include "sfconfig.h"
-
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_STDINT_H
-#include <stdint.h>
-#elif HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-
-#ifndef SNDFILE_H
-#include "sndfile.h"
-#endif
-
-#ifdef __cplusplus
-#error "This code is not designed to be compiled with a C++ compiler."
-#endif
-
-#if (SIZEOF_LONG == 8)
-#      define  SF_PLATFORM_S64(x)              x##l
-#elif (SIZEOF_LONG_LONG == 8)
-#      define  SF_PLATFORM_S64(x)              x##ll
-#elif COMPILER_IS_GCC
-#      define  SF_PLATFORM_S64(x)              x##ll
-#elif OS_IS_WIN32
-#      define  SF_PLATFORM_S64(x)              x##I64
-#else
-#      error "Don't know how to define a 64 bit integer constant."
-#endif
-
-
-
-/*
-** Inspiration : http://sourcefrog.net/weblog/software/languages/C/unused.html
-*/
-#ifdef UNUSED
-#elif defined (__GNUC__)
-#      define UNUSED(x) UNUSED_ ## x __attribute__ ((unused))
-#elif defined (__LCLINT__)
-#      define UNUSED(x) /*@unused@*/ x
-#else
-#      define UNUSED(x) x
-#endif
-
-#ifdef __GNUC__
-#      define WARN_UNUSED      __attribute__ ((warn_unused_result))
-#else
-#      define WARN_UNUSED
-#endif
-
-#define        SF_BUFFER_LEN                   (8192)
-#define        SF_FILENAME_LEN                 (512)
-#define SF_SYSERR_LEN                  (256)
-#define SF_MAX_STRINGS                 (32)
-#define        SF_HEADER_LEN                   (12292)
-#define        SF_PARSELOG_LEN                 (2048)
-
-#define        PSF_SEEK_ERROR                  ((sf_count_t) -1)
-
-#define        BITWIDTH2BYTES(x)       (((x) + 7) / 8)
-
-/*     For some reason sizeof returns an unsigned  value which causes
-**     a warning when that value is added or subtracted from a signed
-**     value. Use SIGNED_SIZEOF instead.
-*/
-#define                SIGNED_SIZEOF(x)        ((int) sizeof (x))
-
-#define                ARRAY_LEN(x)    ((int) (sizeof (x) / sizeof ((x) [0])))
-
-#define                NOT(x)                  (! (x))
-
-#if (COMPILER_IS_GCC == 1)
-#define                SF_MAX(x, y)    ({ \
-                                                               typeof (x) sf_max_x1 = (x) ; \
-                                                               typeof (y) sf_max_y1 = (y) ; \
-                                                               (void) (&sf_max_x1 == &sf_max_y1) ; \
-                                                               sf_max_x1 > sf_max_y1 ? sf_max_x1 : sf_max_y1 ; })
-
-#define                SF_MIN(x, y)    ({ \
-                                                               typeof (x) sf_min_x2 = (x) ; \
-                                                               typeof (y) sf_min_y2 = (y) ; \
-                                                               (void) (&sf_min_x2 == &sf_min_y2) ; \
-                                                               sf_min_x2 < sf_min_y2 ? sf_min_x2 : sf_min_y2 ; })
-#else
-#define                SF_MAX(a, b)    ((a) > (b) ? (a) : (b))
-#define                SF_MIN(a, b)    ((a) < (b) ? (a) : (b))
-#endif
-
-
-#define                COMPILE_TIME_ASSERT(e)  (sizeof (struct { int : - !! (e) ; }))
-
-
-#define                SF_MAX_CHANNELS 256
-
-
-/*
-*      Macros for spliting the format file of SF_INFO into container type,
-**     codec type and endian-ness.
-*/
-#define SF_CONTAINER(x)                ((x) & SF_FORMAT_TYPEMASK)
-#define SF_CODEC(x)                    ((x) & SF_FORMAT_SUBMASK)
-#define SF_ENDIAN(x)           ((x) & SF_FORMAT_ENDMASK)
-
-enum
-{      /* PEAK chunk location. */
-       SF_PEAK_START           = 42,
-       SF_PEAK_END                     = 43,
-
-       /* PEAK chunk location. */
-       SF_SCALE_MAX            = 52,
-       SF_SCALE_MIN            = 53,
-
-       /* str_flags values. */
-       SF_STR_ALLOW_START      = 0x0100,
-       SF_STR_ALLOW_END        = 0x0200,
-
-       /* Location of strings. */
-       SF_STR_LOCATE_START     = 0x0400,
-       SF_STR_LOCATE_END       = 0x0800,
-
-       SFD_TYPEMASK            = 0x0FFFFFFF
-} ;
-
-#define                SFM_MASK        (SFM_READ | SFM_WRITE | SFM_RDWR)
-#define                SFM_UNMASK      (~SFM_MASK)
-
-/*---------------------------------------------------------------------------------------
-** Formats that may be supported at some time in the future.
-** When support is finalised, these values move to src/sndfile.h.
-*/
-
-enum
-{      /* Work in progress. */
-       SF_FORMAT_SPEEX                 = 0x5000000,
-       SF_FORMAT_OGGFLAC               = 0x5000001,
-
-       /* Formats supported read only. */
-       SF_FORMAT_TXW                   = 0x4030000,            /* Yamaha TX16 sampler file */
-       SF_FORMAT_DWD                   = 0x4040000,            /* DiamondWare Digirized */
-
-       /* Following are detected but not supported. */
-       SF_FORMAT_REX                   = 0x40A0000,            /* Propellorheads Rex/Rcy */
-       SF_FORMAT_REX2                  = 0x40D0000,            /* Propellorheads Rex2 */
-       SF_FORMAT_KRZ                   = 0x40E0000,            /* Kurzweil sampler file */
-       SF_FORMAT_WMA                   = 0x4100000,            /* Windows Media Audio. */
-       SF_FORMAT_SHN                   = 0x4110000,            /* Shorten. */
-
-       /* Unsupported encodings. */
-       SF_FORMAT_SVX_FIB               = 0x1020,               /* SVX Fibonacci Delta encoding. */
-       SF_FORMAT_SVX_EXP               = 0x1021,               /* SVX Exponential Delta encoding. */
-
-       SF_FORMAT_PCM_N                 = 0x1030
-} ;
-
-/*---------------------------------------------------------------------------------------
-*/
-
-typedef struct
-{      unsigned        kuki_offset ;
-       unsigned        pakt_offset ;
-
-       unsigned        bits_per_sample ;
-       unsigned        frames_per_packet ;
-
-       int64_t         packets ;
-       int64_t         valid_frames ;
-       int32_t         priming_frames ;
-       int32_t         remainder_frames ;
-} ALAC_DECODER_INFO ;
-
-/*---------------------------------------------------------------------------------------
-**     PEAK_CHUNK - This chunk type is common to both AIFF and WAVE files although their
-**     endian encodings are different.
-*/
-
-typedef struct
-{      double          value ;         /* signed value of peak */
-       sf_count_t      position ;      /* the sample frame for the peak */
-} PEAK_POS ;
-
-typedef struct
-{      /* libsndfile internal : write a PEAK chunk at the start or end of the file? */
-       int                             peak_loc ;
-
-       /* WAV/AIFF */
-       unsigned int    version ;       /* version of the PEAK chunk */
-       unsigned int    timestamp ;     /* secs since 1/1/1970  */
-
-       /* CAF */
-       unsigned int    edit_number ;
-
-       /* the per channel peak info */
-       PEAK_POS                peaks [] ;
-} PEAK_INFO ;
-
-static inline PEAK_INFO *
-peak_info_calloc (int channels)
-{      return calloc (1, sizeof (PEAK_INFO) + channels * sizeof (PEAK_POS)) ;
-} /* peak_info_calloc */
-
-typedef struct
-{      int             type ;
-       int             flags ;
-       size_t  offset ;
-} STR_DATA ;
-
-typedef struct
-{      int64_t         hash ;
-       char            id [64] ;
-       unsigned        id_size ;
-       uint32_t        mark32 ;
-       sf_count_t      offset ;
-       uint32_t        len ;
-} READ_CHUNK ;
-
-typedef struct
-{      int64_t         hash ;
-       uint32_t        mark32 ;
-       uint32_t        len ;
-       void            *data ;
-} WRITE_CHUNK ;
-
-typedef struct
-{      uint32_t        count ;
-       uint32_t        used ;
-       READ_CHUNK      *chunks ;
-} READ_CHUNKS ;
-typedef struct
-{      uint32_t        count ;
-       uint32_t        used ;
-       WRITE_CHUNK     *chunks ;
-} WRITE_CHUNKS ;
-
-struct SF_CHUNK_ITERATOR
-{      uint32_t        current ;
-       int64_t         hash ;
-       char            id [64] ;
-       unsigned        id_size ;
-       SNDFILE         *sndfile ;
-} ;
-
-static inline size_t
-make_size_t (int x)
-{      return (size_t) x ;
-} /* size_t_of_int */
-
-typedef SF_BROADCAST_INFO_VAR (16 * 1024) SF_BROADCAST_INFO_16K ;
-
-typedef SF_CART_INFO_VAR (16 * 1024) SF_CART_INFO_16K ;
-
-#if SIZEOF_WCHAR_T == 2
-typedef wchar_t        sfwchar_t ;
-#else
-typedef int16_t sfwchar_t ;
-#endif
-
-
-static inline void *
-psf_memdup (const void *src, size_t n)
-{      void * mem = calloc (1, n & 3 ? n + 4 - (n & 3) : n) ;
-       return memcpy (mem, src, n) ;
-} /* psf_memdup */
-
-/*
-**     This version of isprint specifically ignores any locale info. Its used for
-**     determining which characters can be printed in things like hexdumps.
-*/
-static inline int
-psf_isprint (int ch)
-{      return (ch >= ' ' && ch <= '~') ;
-} /* psf_isprint */
-
-/*=======================================================================================
-**     SF_PRIVATE stuct - a pointer to this struct is passed back to the caller of the
-**     sf_open_XXXX functions. The caller however has no knowledge of the struct's
-**     contents.
-*/
-
-typedef struct
-{
-       union
-       {       char            c [SF_FILENAME_LEN] ;
-               sfwchar_t       wc [SF_FILENAME_LEN] ;
-       } path ;
-
-       union
-       {       char            c [SF_FILENAME_LEN] ;
-               sfwchar_t       wc [SF_FILENAME_LEN] ;
-       } dir ;
-
-       union
-       {       char            c [SF_FILENAME_LEN / 4] ;
-               sfwchar_t       wc [SF_FILENAME_LEN / 4] ;
-       } name ;
-
-#if USE_WINDOWS_API
-       /*
-       **      These fields can only be used in src/file_io.c.
-       **      They are basically the same as a windows file HANDLE.
-       */
-       void                    *handle, *hsaved ;
-
-       int                             use_wchar ;
-#else
-       /* These fields can only be used in src/file_io.c. */
-       int                     filedes, savedes ;
-#endif
-
-       int                             do_not_close_descriptor ;
-       int                             mode ;                  /* Open mode : SFM_READ, SFM_WRITE or SFM_RDWR. */
-} PSF_FILE ;
-
-
-
-typedef union
-{      double                  dbuf    [SF_BUFFER_LEN / sizeof (double)] ;
-#if (defined (SIZEOF_INT64_T) && (SIZEOF_INT64_T == 8))
-       int64_t                 lbuf    [SF_BUFFER_LEN / sizeof (int64_t)] ;
-#else
-       long                    lbuf    [SF_BUFFER_LEN / sizeof (double)] ;
-#endif
-       float                   fbuf    [SF_BUFFER_LEN / sizeof (float)] ;
-       int                             ibuf    [SF_BUFFER_LEN / sizeof (int)] ;
-       short                   sbuf    [SF_BUFFER_LEN / sizeof (short)] ;
-       char                    cbuf    [SF_BUFFER_LEN / sizeof (char)] ;
-       signed char             scbuf   [SF_BUFFER_LEN / sizeof (signed char)] ;
-       unsigned char   ucbuf   [SF_BUFFER_LEN / sizeof (signed char)] ;
-} BUF_UNION ;
-
-
-
-typedef struct sf_private_tag
-{
-       /* Canary in a coal mine. */
-       union
-       {       /* Place a double here to encourage double alignment. */
-               double d [2] ;
-               char c [16] ;
-               } canary ;
-
-       PSF_FILE                file, rsrc ;
-
-       char                    syserr          [SF_SYSERR_LEN] ;
-
-       /* parselog and indx should only be changed within the logging functions
-       ** of common.c
-       */
-       struct
-       {       char                    buf     [SF_PARSELOG_LEN] ;
-               int                             indx ;
-       } parselog ;
-
-       unsigned char   header          [SF_HEADER_LEN] ; /* Must be unsigned */
-       int                             rwf_endian ;    /* Header endian-ness flag. */
-
-       /* Storage and housekeeping data for adding/reading strings from
-       ** sound files.
-       */
-       struct
-       {       STR_DATA        data [SF_MAX_STRINGS] ;
-               char            *storage ;
-               size_t          storage_len ;
-               size_t          storage_used ;
-               uint32_t        flags ;
-       } strings ;
-
-       /* Guard value. If this changes the buffers above have overflowed. */
-       int                             Magick ;
-
-       unsigned                unique_id ;
-
-       /* Index variables for maintaining parselog and header above. */
-       int                             headindex, headend ;
-       int                             has_text ;
-
-       int                             error ;
-
-       int                             endian ;                /* File endianness : SF_ENDIAN_LITTLE or SF_ENDIAN_BIG. */
-       int                             data_endswap ;  /* Need to endswap data? */
-
-       /*
-       ** Maximum float value for calculating the multiplier for
-       ** float/double to short/int conversions.
-       */
-       int                             float_int_mult ;
-       float                   float_max ;
-
-       int                             scale_int_float ;
-
-       /* Vairables for handling pipes. */
-       int                             is_pipe ;               /* True if file is a pipe. */
-       sf_count_t              pipeoffset ;    /* Number of bytes read from a pipe. */
-
-       /* True if clipping must be performed on float->int conversions. */
-       int                             add_clipping ;
-
-       SF_INFO                 sf ;
-
-       int                             have_written ;  /* Has a single write been done to the file? */
-       PEAK_INFO               *peak_info ;
-
-       /* Loop Info */
-       SF_LOOP_INFO    *loop_info ;
-       SF_INSTRUMENT   *instrument ;
-
-       /* Broadcast (EBU) Info */
-       SF_BROADCAST_INFO_16K *broadcast_16k ;
-
-       /* Cart (AES46) Info */
-       SF_CART_INFO_16K *cart_16k ;
-
-       /* Channel map data (if present) : an array of ints. */
-       int                             *channel_map ;
-
-       sf_count_t              filelength ;    /* Overall length of (embedded) file. */
-       sf_count_t              fileoffset ;    /* Offset in number of bytes from beginning of file. */
-
-       sf_count_t              rsrclength ;    /* Length of the resource fork (if it exists). */
-
-       sf_count_t              dataoffset ;    /* Offset in number of bytes from beginning of file. */
-       sf_count_t              datalength ;    /* Length in bytes of the audio data. */
-       sf_count_t              dataend ;               /* Offset to file tailer. */
-
-       int                             blockwidth ;    /* Size in bytes of one set of interleaved samples. */
-       int                             bytewidth ;             /* Size in bytes of one sample (one channel). */
-
-       void                    *dither ;
-       void                    *interleave ;
-
-       int                             last_op ;               /* Last operation; either SFM_READ or SFM_WRITE */
-       sf_count_t              read_current ;
-       sf_count_t              write_current ;
-
-       void                    *container_data ;       /*      This is a pointer to dynamically allocated file
-                                                                               **      container format specific data.
-                                                                               */
-
-       void                    *codec_data ;           /*      This is a pointer to dynamically allocated file
-                                                                               **      codec format specific data.
-                                                                               */
-
-       SF_DITHER_INFO  write_dither ;
-       SF_DITHER_INFO  read_dither ;
-
-       int                             norm_double ;
-       int                             norm_float ;
-
-       int                             auto_header ;
-
-       int                             ieee_replace ;
-
-       /* A set of file specific function pointers */
-       sf_count_t              (*read_short)   (struct sf_private_tag*, short *ptr, sf_count_t len) ;
-       sf_count_t              (*read_int)             (struct sf_private_tag*, int *ptr, sf_count_t len) ;
-       sf_count_t              (*read_float)   (struct sf_private_tag*, float *ptr, sf_count_t len) ;
-       sf_count_t              (*read_double)  (struct sf_private_tag*, double *ptr, sf_count_t len) ;
-
-       sf_count_t              (*write_short)  (struct sf_private_tag*, const short *ptr, sf_count_t len) ;
-       sf_count_t              (*write_int)    (struct sf_private_tag*, const int *ptr, sf_count_t len) ;
-       sf_count_t              (*write_float)  (struct sf_private_tag*, const float *ptr, sf_count_t len) ;
-       sf_count_t              (*write_double) (struct sf_private_tag*, const double *ptr, sf_count_t len) ;
-
-       sf_count_t              (*seek)                 (struct sf_private_tag*, int mode, sf_count_t samples_from_start) ;
-       int                             (*write_header) (struct sf_private_tag*, int calc_length) ;
-       int                             (*command)              (struct sf_private_tag*, int command, void *data, int datasize) ;
-       int                             (*byterate)             (struct sf_private_tag*) ;
-
-       /*
-       **      Separate close functions for the codec and the container.
-       **      The codec close function is always called first.
-       */
-       int                             (*codec_close)          (struct sf_private_tag*) ;
-       int                             (*container_close)      (struct sf_private_tag*) ;
-
-       char                    *format_desc ;
-
-       /* Virtual I/O functions. */
-       int                                     virtual_io ;
-       SF_VIRTUAL_IO           vio ;
-       void                            *vio_user_data ;
-
-       /* Chunk get/set. */
-       SF_CHUNK_ITERATOR       *iterator ;
-
-       READ_CHUNKS                     rchunks ;
-       WRITE_CHUNKS            wchunks ;
-
-       int                                     (*set_chunk)            (struct sf_private_tag*, const SF_CHUNK_INFO * chunk_info) ;
-       SF_CHUNK_ITERATOR *     (*next_chunk_iterator)  (struct sf_private_tag*, SF_CHUNK_ITERATOR * iterator) ;
-       int                                     (*get_chunk_size)       (struct sf_private_tag*, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info) ;
-       int                                     (*get_chunk_data)       (struct sf_private_tag*, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info) ;
-} SF_PRIVATE ;
-
-
-
-enum
-{      SFE_NO_ERROR                            = SF_ERR_NO_ERROR,
-       SFE_BAD_OPEN_FORMAT                     = SF_ERR_UNRECOGNISED_FORMAT,
-       SFE_SYSTEM                                      = SF_ERR_SYSTEM,
-       SFE_MALFORMED_FILE                      = SF_ERR_MALFORMED_FILE,
-       SFE_UNSUPPORTED_ENCODING        = SF_ERR_UNSUPPORTED_ENCODING,
-
-       SFE_ZERO_MAJOR_FORMAT,
-       SFE_ZERO_MINOR_FORMAT,
-       SFE_BAD_FILE,
-       SFE_BAD_FILE_READ,
-       SFE_OPEN_FAILED,
-       SFE_BAD_SNDFILE_PTR,
-       SFE_BAD_SF_INFO_PTR,
-       SFE_BAD_SF_INCOMPLETE,
-       SFE_BAD_FILE_PTR,
-       SFE_BAD_INT_PTR,
-       SFE_BAD_STAT_SIZE,
-       SFE_NO_TEMP_DIR,
-       SFE_MALLOC_FAILED,
-       SFE_UNIMPLEMENTED,
-       SFE_BAD_READ_ALIGN,
-       SFE_BAD_WRITE_ALIGN,
-       SFE_UNKNOWN_FORMAT,
-       SFE_NOT_READMODE,
-       SFE_NOT_WRITEMODE,
-       SFE_BAD_MODE_RW,
-       SFE_BAD_SF_INFO,
-       SFE_BAD_OFFSET,
-       SFE_NO_EMBED_SUPPORT,
-       SFE_NO_EMBEDDED_RDWR,
-       SFE_NO_PIPE_WRITE,
-
-       SFE_INTERNAL,
-       SFE_BAD_COMMAND_PARAM,
-       SFE_BAD_ENDIAN,
-       SFE_CHANNEL_COUNT_ZERO,
-       SFE_CHANNEL_COUNT,
-
-       SFE_BAD_VIRTUAL_IO,
-
-       SFE_INTERLEAVE_MODE,
-       SFE_INTERLEAVE_SEEK,
-       SFE_INTERLEAVE_READ,
-
-       SFE_BAD_SEEK,
-       SFE_NOT_SEEKABLE,
-       SFE_AMBIGUOUS_SEEK,
-       SFE_WRONG_SEEK,
-       SFE_SEEK_FAILED,
-
-       SFE_BAD_OPEN_MODE,
-       SFE_OPEN_PIPE_RDWR,
-       SFE_RDWR_POSITION,
-       SFE_RDWR_BAD_HEADER,
-       SFE_CMD_HAS_DATA,
-       SFE_BAD_BROADCAST_INFO_SIZE,
-       SFE_BAD_BROADCAST_INFO_TOO_BIG,
-       SFE_BAD_CART_INFO_SIZE,
-       SFE_BAD_CART_INFO_TOO_BIG,
-
-       SFE_STR_NO_SUPPORT,
-       SFE_STR_NOT_WRITE,
-       SFE_STR_MAX_DATA,
-       SFE_STR_MAX_COUNT,
-       SFE_STR_BAD_TYPE,
-       SFE_STR_NO_ADD_END,
-       SFE_STR_BAD_STRING,
-       SFE_STR_WEIRD,
-
-       SFE_WAV_NO_RIFF,
-       SFE_WAV_NO_WAVE,
-       SFE_WAV_NO_FMT,
-       SFE_WAV_BAD_FMT,
-       SFE_WAV_FMT_SHORT,
-       SFE_WAV_BAD_FACT,
-       SFE_WAV_BAD_PEAK,
-       SFE_WAV_PEAK_B4_FMT,
-       SFE_WAV_BAD_FORMAT,
-       SFE_WAV_BAD_BLOCKALIGN,
-       SFE_WAV_NO_DATA,
-       SFE_WAV_BAD_LIST,
-       SFE_WAV_ADPCM_NOT4BIT,
-       SFE_WAV_ADPCM_CHANNELS,
-       SFE_WAV_GSM610_FORMAT,
-       SFE_WAV_UNKNOWN_CHUNK,
-       SFE_WAV_WVPK_DATA,
-
-       SFE_AIFF_NO_FORM,
-       SFE_AIFF_AIFF_NO_FORM,
-       SFE_AIFF_COMM_NO_FORM,
-       SFE_AIFF_SSND_NO_COMM,
-       SFE_AIFF_UNKNOWN_CHUNK,
-       SFE_AIFF_COMM_CHUNK_SIZE,
-       SFE_AIFF_BAD_COMM_CHUNK,
-       SFE_AIFF_PEAK_B4_COMM,
-       SFE_AIFF_BAD_PEAK,
-       SFE_AIFF_NO_SSND,
-       SFE_AIFF_NO_DATA,
-       SFE_AIFF_RW_SSND_NOT_LAST,
-
-       SFE_AU_UNKNOWN_FORMAT,
-       SFE_AU_NO_DOTSND,
-       SFE_AU_EMBED_BAD_LEN,
-
-       SFE_RAW_READ_BAD_SPEC,
-       SFE_RAW_BAD_BITWIDTH,
-       SFE_RAW_BAD_FORMAT,
-
-       SFE_PAF_NO_MARKER,
-       SFE_PAF_VERSION,
-       SFE_PAF_UNKNOWN_FORMAT,
-       SFE_PAF_SHORT_HEADER,
-       SFE_PAF_BAD_CHANNELS,
-
-       SFE_SVX_NO_FORM,
-       SFE_SVX_NO_BODY,
-       SFE_SVX_NO_DATA,
-       SFE_SVX_BAD_COMP,
-       SFE_SVX_BAD_NAME_LENGTH,
-
-       SFE_NIST_BAD_HEADER,
-       SFE_NIST_CRLF_CONVERISON,
-       SFE_NIST_BAD_ENCODING,
-
-       SFE_VOC_NO_CREATIVE,
-       SFE_VOC_BAD_FORMAT,
-       SFE_VOC_BAD_VERSION,
-       SFE_VOC_BAD_MARKER,
-       SFE_VOC_BAD_SECTIONS,
-       SFE_VOC_MULTI_SAMPLERATE,
-       SFE_VOC_MULTI_SECTION,
-       SFE_VOC_MULTI_PARAM,
-       SFE_VOC_SECTION_COUNT,
-       SFE_VOC_NO_PIPE,
-
-       SFE_IRCAM_NO_MARKER,
-       SFE_IRCAM_BAD_CHANNELS,
-       SFE_IRCAM_UNKNOWN_FORMAT,
-
-       SFE_W64_64_BIT,
-       SFE_W64_NO_RIFF,
-       SFE_W64_NO_WAVE,
-       SFE_W64_NO_DATA,
-       SFE_W64_ADPCM_NOT4BIT,
-       SFE_W64_ADPCM_CHANNELS,
-       SFE_W64_GSM610_FORMAT,
-
-       SFE_MAT4_BAD_NAME,
-       SFE_MAT4_NO_SAMPLERATE,
-
-       SFE_MAT5_BAD_ENDIAN,
-       SFE_MAT5_NO_BLOCK,
-       SFE_MAT5_SAMPLE_RATE,
-
-       SFE_PVF_NO_PVF1,
-       SFE_PVF_BAD_HEADER,
-       SFE_PVF_BAD_BITWIDTH,
-
-       SFE_DWVW_BAD_BITWIDTH,
-       SFE_G72X_NOT_MONO,
-
-       SFE_XI_BAD_HEADER,
-       SFE_XI_EXCESS_SAMPLES,
-       SFE_XI_NO_PIPE,
-
-       SFE_HTK_NO_PIPE,
-
-       SFE_SDS_NOT_SDS,
-       SFE_SDS_BAD_BIT_WIDTH,
-
-       SFE_SD2_FD_DISALLOWED,
-       SFE_SD2_BAD_DATA_OFFSET,
-       SFE_SD2_BAD_MAP_OFFSET,
-       SFE_SD2_BAD_DATA_LENGTH,
-       SFE_SD2_BAD_MAP_LENGTH,
-       SFE_SD2_BAD_RSRC,
-       SFE_SD2_BAD_SAMPLE_SIZE,
-
-       SFE_FLAC_BAD_HEADER,
-       SFE_FLAC_NEW_DECODER,
-       SFE_FLAC_INIT_DECODER,
-       SFE_FLAC_LOST_SYNC,
-       SFE_FLAC_BAD_SAMPLE_RATE,
-       SFE_FLAC_UNKOWN_ERROR,
-
-       SFE_WVE_NOT_WVE,
-       SFE_WVE_NO_PIPE,
-
-       SFE_VORBIS_ENCODER_BUG,
-
-       SFE_RF64_NOT_RF64,
-       SFE_BAD_CHUNK_PTR,
-       SFE_UNKNOWN_CHUNK,
-       SFE_BAD_CHUNK_FORMAT,
-       SFE_BAD_CHUNK_MARKER,
-       SFE_BAD_CHUNK_DATA_PTR,
-
-       SFE_ALAC_FAIL_TMPFILE,
-
-       SFE_MAX_ERROR                   /* This must be last in list. */
-} ;
-
-int subformat_to_bytewidth (int format) ;
-int s_bitwidth_to_subformat (int bits) ;
-int u_bitwidth_to_subformat (int bits) ;
-
-/*  Functions for reading and writing floats and doubles on processors
-**     with non-IEEE floats/doubles.
-*/
-float  float32_be_read         (const unsigned char *cptr) ;
-float  float32_le_read         (const unsigned char *cptr) ;
-void   float32_be_write        (float in, unsigned char *out) ;
-void   float32_le_write        (float in, unsigned char *out) ;
-
-double double64_be_read        (const unsigned char *cptr) ;
-double double64_le_read        (const unsigned char *cptr) ;
-void   double64_be_write       (double in, unsigned char *out) ;
-void   double64_le_write       (double in, unsigned char *out) ;
-
-/* Functions for writing to the internal logging buffer. */
-
-void   psf_log_printf          (SF_PRIVATE *psf, const char *format, ...) ;
-void   psf_log_SF_INFO         (SF_PRIVATE *psf) ;
-
-int32_t        psf_rand_int32 (void) ;
-
-void append_snprintf (char * dest, size_t maxlen, const char * fmt, ...) ;
-void psf_strlcpy_crlf (char *dest, const char *src, size_t destmax, size_t srcmax) ;
-
-sf_count_t psf_decode_frame_count (SF_PRIVATE *psf) ;
-
-/* Functions used when writing file headers. */
-
-int            psf_binheader_writef    (SF_PRIVATE *psf, const char *format, ...) ;
-void   psf_asciiheader_printf  (SF_PRIVATE *psf, const char *format, ...) ;
-
-/* Functions used when reading file headers. */
-
-int            psf_binheader_readf     (SF_PRIVATE *psf, char const *format, ...) ;
-
-/* Functions used in the write function for updating the peak chunk. */
-
-void   peak_update_short       (SF_PRIVATE *psf, short *ptr, size_t items) ;
-void   peak_update_int         (SF_PRIVATE *psf, int *ptr, size_t items) ;
-void   peak_update_double      (SF_PRIVATE *psf, double *ptr, size_t items) ;
-
-/* Functions defined in command.c. */
-
-int            psf_get_format_simple_count     (void) ;
-int            psf_get_format_simple           (SF_FORMAT_INFO *data) ;
-
-int            psf_get_format_info                     (SF_FORMAT_INFO *data) ;
-
-int            psf_get_format_major_count      (void) ;
-int            psf_get_format_major            (SF_FORMAT_INFO *data) ;
-
-int            psf_get_format_subtype_count    (void) ;
-int            psf_get_format_subtype          (SF_FORMAT_INFO *data) ;
-
-void   psf_generate_format_desc (SF_PRIVATE *psf) ;
-
-double psf_calc_signal_max                     (SF_PRIVATE *psf, int normalize) ;
-int            psf_calc_max_all_channels       (SF_PRIVATE *psf, double *peaks, int normalize) ;
-
-int            psf_get_signal_max                      (SF_PRIVATE *psf, double *peak) ;
-int            psf_get_max_all_channels        (SF_PRIVATE *psf, double *peaks) ;
-
-/* Functions in strings.c. */
-
-const char* psf_get_string (SF_PRIVATE *psf, int str_type) ;
-int psf_set_string (SF_PRIVATE *psf, int str_type, const char *str) ;
-int psf_store_string (SF_PRIVATE *psf, int str_type, const char *str) ;
-int psf_location_string_count (const SF_PRIVATE * psf, int location) ;
-
-/* Default seek function. Use for PCM and float encoded data. */
-sf_count_t     psf_default_seek (SF_PRIVATE *psf, int mode, sf_count_t samples_from_start) ;
-
-int macos_guess_file_type (SF_PRIVATE *psf, const char *filename) ;
-
-/*------------------------------------------------------------------------------------
-**     File I/O functions which will allow access to large files (> 2 Gig) on
-**     some 32 bit OSes. Implementation in file_io.c.
-*/
-
-int psf_fopen (SF_PRIVATE *psf) ;
-int psf_set_stdio (SF_PRIVATE *psf) ;
-int psf_file_valid (SF_PRIVATE *psf) ;
-void psf_set_file (SF_PRIVATE *psf, int fd) ;
-void psf_init_files (SF_PRIVATE *psf) ;
-void psf_use_rsrc (SF_PRIVATE *psf, int on_off) ;
-
-SNDFILE * psf_open_file (SF_PRIVATE *psf, SF_INFO *sfinfo) ;
-
-sf_count_t psf_fseek (SF_PRIVATE *psf, sf_count_t offset, int whence) ;
-sf_count_t psf_fread (void *ptr, sf_count_t bytes, sf_count_t count, SF_PRIVATE *psf) ;
-sf_count_t psf_fwrite (const void *ptr, sf_count_t bytes, sf_count_t count, SF_PRIVATE *psf) ;
-sf_count_t psf_fgets (char *buffer, sf_count_t bufsize, SF_PRIVATE *psf) ;
-sf_count_t psf_ftell (SF_PRIVATE *psf) ;
-sf_count_t psf_get_filelen (SF_PRIVATE *psf) ;
-
-void psf_fsync (SF_PRIVATE *psf) ;
-
-int psf_is_pipe (SF_PRIVATE *psf) ;
-
-int psf_ftruncate (SF_PRIVATE *psf, sf_count_t len) ;
-int psf_fclose (SF_PRIVATE *psf) ;
-
-/* Open and close the resource fork of a file. */
-int psf_open_rsrc (SF_PRIVATE *psf) ;
-int psf_close_rsrc (SF_PRIVATE *psf) ;
-
-/*
-void psf_fclearerr (SF_PRIVATE *psf) ;
-int psf_ferror (SF_PRIVATE *psf) ;
-*/
-
-/*------------------------------------------------------------------------------------
-** Functions for reading and writing different file formats.
-*/
-
-int            aiff_open       (SF_PRIVATE *psf) ;
-int            au_open         (SF_PRIVATE *psf) ;
-int            avr_open        (SF_PRIVATE *psf) ;
-int            htk_open        (SF_PRIVATE *psf) ;
-int            ircam_open      (SF_PRIVATE *psf) ;
-int            mat4_open       (SF_PRIVATE *psf) ;
-int            mat5_open       (SF_PRIVATE *psf) ;
-int            nist_open       (SF_PRIVATE *psf) ;
-int            paf_open        (SF_PRIVATE *psf) ;
-int            pvf_open        (SF_PRIVATE *psf) ;
-int            raw_open        (SF_PRIVATE *psf) ;
-int            sd2_open        (SF_PRIVATE *psf) ;
-int            sds_open        (SF_PRIVATE *psf) ;
-int            svx_open        (SF_PRIVATE *psf) ;
-int            voc_open        (SF_PRIVATE *psf) ;
-int            w64_open        (SF_PRIVATE *psf) ;
-int            wav_open        (SF_PRIVATE *psf) ;
-int            xi_open         (SF_PRIVATE *psf) ;
-int            flac_open       (SF_PRIVATE *psf) ;
-int            caf_open        (SF_PRIVATE *psf) ;
-int            mpc2k_open      (SF_PRIVATE *psf) ;
-int            rf64_open       (SF_PRIVATE *psf) ;
-
-int            ogg_vorbis_open (SF_PRIVATE *psf) ;
-int            ogg_speex_open  (SF_PRIVATE *psf) ;
-int            ogg_pcm_open    (SF_PRIVATE *psf) ;
-int            ogg_opus_open   (SF_PRIVATE *psf) ;
-int            ogg_open        (SF_PRIVATE *psf) ;
-
-
-/* In progress. Do not currently work. */
-
-int            mpeg_open       (SF_PRIVATE *psf) ;
-int            rx2_open        (SF_PRIVATE *psf) ;
-int            txw_open        (SF_PRIVATE *psf) ;
-int            wve_open        (SF_PRIVATE *psf) ;
-int            dwd_open        (SF_PRIVATE *psf) ;
-
-int            macbinary3_open (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------------
-**     Init functions for a number of common data encodings.
-*/
-
-int            pcm_init                (SF_PRIVATE *psf) ;
-int            ulaw_init               (SF_PRIVATE *psf) ;
-int            alaw_init               (SF_PRIVATE *psf) ;
-int            float32_init    (SF_PRIVATE *psf) ;
-int            double64_init   (SF_PRIVATE *psf) ;
-int            dwvw_init               (SF_PRIVATE *psf, int bitwidth) ;
-int            gsm610_init             (SF_PRIVATE *psf) ;
-int            vox_adpcm_init  (SF_PRIVATE *psf) ;
-int            flac_init               (SF_PRIVATE *psf) ;
-int            g72x_init               (SF_PRIVATE * psf) ;
-int            alac_init               (SF_PRIVATE *psf, const ALAC_DECODER_INFO * info) ;
-
-int    dither_init             (SF_PRIVATE *psf, int mode) ;
-
-int            wav_w64_ima_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) ;
-int            wav_w64_msadpcm_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) ;
-
-int            aiff_ima_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) ;
-
-int            interleave_init (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------------
-** Chunk logging functions.
-*/
-
-SF_CHUNK_ITERATOR * psf_get_chunk_iterator (SF_PRIVATE * psf, const char * marker_str) ;
-SF_CHUNK_ITERATOR * psf_next_chunk_iterator (const READ_CHUNKS * pchk , SF_CHUNK_ITERATOR *iterator) ;
-int            psf_store_read_chunk_u32 (READ_CHUNKS * pchk, uint32_t marker, sf_count_t offset, uint32_t len) ;
-int            psf_store_read_chunk_str (READ_CHUNKS * pchk, const char * marker, sf_count_t offset, uint32_t len) ;
-int            psf_save_write_chunk (WRITE_CHUNKS * pchk, const SF_CHUNK_INFO * chunk_info) ;
-int            psf_find_read_chunk_str (const READ_CHUNKS * pchk, const char * marker) ;
-int            psf_find_read_chunk_m32 (const READ_CHUNKS * pchk, uint32_t marker) ;
-int            psf_find_read_chunk_iterator (const READ_CHUNKS * pchk, const SF_CHUNK_ITERATOR * marker) ;
-
-int            psf_find_write_chunk (WRITE_CHUNKS * pchk, const char * marker) ;
-
-static inline int
-fourcc_to_marker (const SF_CHUNK_INFO * chunk_info)
-{      const unsigned char * cptr ;
-
-       if (chunk_info->id_size != 4)
-               return 0 ;
-
-       cptr = (const unsigned char *) chunk_info->id ;
-       return (cptr [3] << 24) + (cptr [2] << 16) + (cptr [1] << 8) + cptr [0] ;
-} /* fourcc_to_marker */
-
-/*------------------------------------------------------------------------------------
-** Functions that work like OpenBSD's strlcpy/strlcat to replace strncpy/strncat.
-**
-** See : http://www.gratisoft.us/todd/papers/strlcpy.html
-**
-** These functions are available on *BSD, but are not avaialble everywhere so we
-** implement them here.
-**
-** The argument order has been changed to that of strncpy/strncat to cause
-** compiler errors if code is carelessly converted from one to the other.
-*/
-
-static inline void
-psf_strlcat (char *dest, size_t n, const char *src)
-{      strncat (dest, src, n - strlen (dest) - 1) ;
-       dest [n - 1] = 0 ;
-} /* psf_strlcat */
-
-static inline void
-psf_strlcpy (char *dest, size_t n, const char *src)
-{      strncpy (dest, src, n - 1) ;
-       dest [n - 1] = 0 ;
-} /* psf_strlcpy */
-
-/*------------------------------------------------------------------------------------
-** Other helper functions.
-*/
-
-void   *psf_memset (void *s, int c, sf_count_t n) ;
-
-SF_INSTRUMENT * psf_instrument_alloc (void) ;
-
-void   psf_sanitize_string (char * cptr, int len) ;
-
-/* Generate the current date as a string. */
-void   psf_get_date_str (char *str, int maxlen) ;
-
-SF_BROADCAST_INFO_16K * broadcast_var_alloc (void) ;
-int            broadcast_var_set (SF_PRIVATE *psf, const SF_BROADCAST_INFO * data, size_t datasize) ;
-int            broadcast_var_get (SF_PRIVATE *psf, SF_BROADCAST_INFO * data, size_t datasize) ;
-
-
-SF_CART_INFO_16K * cart_var_alloc (void) ;
-int            cart_var_set (SF_PRIVATE *psf, const SF_CART_INFO * date, size_t datasize) ;
-int            cart_var_get (SF_PRIVATE *psf, SF_CART_INFO * data, size_t datasize) ;
-
-typedef struct
-{      int channels ;
-       int endianness ;
-} AUDIO_DETECT ;
-
-int audio_detect (SF_PRIVATE * psf, AUDIO_DETECT *ad, const unsigned char * data, int datalen) ;
-int id3_skip (SF_PRIVATE * psf) ;
-
-void   alac_get_desc_chunk_items (int subformat, uint32_t *fmt_flags, uint32_t *frames_per_packet) ;
-
-FILE * psf_open_tmpfile (char * fname, size_t fnamelen) ;
-
-/*------------------------------------------------------------------------------------
-** Helper/debug functions.
-*/
-
-void   psf_hexdump (const void *ptr, int len) ;
-
-const char * str_of_major_format (int format) ;
-const char * str_of_minor_format (int format) ;
-const char * str_of_open_mode (int mode) ;
-const char * str_of_endianness (int end) ;
-
-/*------------------------------------------------------------------------------------
-** Extra commands for sf_command(). Not for public use yet.
-*/
-
-enum
-{      SFC_TEST_AIFF_ADD_INST_CHUNK    = 0x2000,
-       SFC_TEST_WAV_ADD_INFO_CHUNK             = 0x2010
-} ;
-
-/*
-** Maybe, one day, make these functions or something like them, public.
-**
-** Buffer to buffer dithering. Pointer in and out are allowed to point
-** to the same buffer for in-place dithering.
-*/
-
-#if 0
-int sf_dither_short            (const SF_DITHER_INFO *dither, const short *in, short *out, int count) ;
-int sf_dither_int              (const SF_DITHER_INFO *dither, const int *in, int *out, int count) ;
-int sf_dither_float            (const SF_DITHER_INFO *dither, const float *in, float *out, int count) ;
-int sf_dither_double   (const SF_DITHER_INFO *dither, const double *in, double *out, int count) ;
-#endif
-
-/*------------------------------------------------------------------------------------
-** Data conversion functions.
-*/
-
-static inline short
-psf_short_of_int (int x)
-{      return (x >> 16) ;
-}
-
-void psf_f2s_array (const float *src, short *dest, int count, int normalize) ;
-void psf_f2s_clip_array (const float *src, short *dest, int count, int normalize) ;
-
-void psf_d2s_array (const double *src, short *dest, int count, int normalize) ;
-void psf_d2s_clip_array (const double *src, short *dest, int count, int normalize) ;
-
-void psf_f2i_array (const float *src, int *dest, int count, int normalize) ;
-void psf_f2i_clip_array (const float *src, int *dest, int count, int normalize) ;
-
-void psf_d2i_array (const double *src, int *dest, int count, int normalize) ;
-void psf_d2i_clip_array (const double *src, int *dest, int count, int normalize) ;
-
-#endif /* SNDFILE_COMMON_H */
-
diff --git a/libs/libsndfile/src/create_symbols_file.py b/libs/libsndfile/src/create_symbols_file.py
deleted file mode 100755 (executable)
index 15b1cca..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-#!/usr/bin/python
-
-# Copyright (C) 2003-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-#       notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above copyright
-#       notice, this list of conditions and the following disclaimer in
-#       the documentation and/or other materials provided with the
-#       distribution.
-#     * Neither the author nor the names of any contributors may be used
-#       to endorse or promote products derived from this software without
-#       specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-import re, sys
-
-#----------------------------------------------------------------
-# These are all of the public functions exported from libsndfile.
-#
-# Its important not to change the order they are listed in or
-# the ordinal values in the second column.
-
-ALL_SYMBOLS = (
-       (       "sf_command",                   1       ),
-       (       "sf_open",                              2       ),
-       (       "sf_close",                             3       ),
-       (       "sf_seek",                              4       ),
-       (       "sf_error",                             7       ),
-       (       "sf_perror",                    8       ),
-       (       "sf_error_str",                 9       ),
-       (       "sf_error_number",              10      ),
-       (       "sf_format_check",              11      ),
-       (       "sf_read_raw",                  16      ),
-       (       "sf_readf_short",               17      ),
-       (       "sf_readf_int",                 18      ),
-       (       "sf_readf_float",               19      ),
-       (       "sf_readf_double",              20      ),
-       (       "sf_read_short",                21      ),
-       (       "sf_read_int",                  22      ),
-       (       "sf_read_float",                23      ),
-       (       "sf_read_double",               24      ),
-       (       "sf_write_raw",                 32      ),
-       (       "sf_writef_short",              33      ),
-       (       "sf_writef_int",                34      ),
-       (       "sf_writef_float",              35      ),
-       (       "sf_writef_double",             36      ),
-       (       "sf_write_short",               37      ),
-       (       "sf_write_int",                 38      ),
-       (       "sf_write_float",               39      ),
-       (       "sf_write_double",              40      ),
-       (       "sf_strerror",                  50      ),
-       (       "sf_get_string",                60      ),
-       (       "sf_set_string",                61      ),
-       (       "sf_version_string",    68      ),
-       (       "sf_open_fd",                   70      ),
-       (       "sf_wchar_open",                71  ),
-       (       "sf_open_virtual",              80      ),
-       (       "sf_write_sync",                90      ),
-       (       "sf_set_chunk",                 100     ),
-       (       "sf_get_chunk_size",    101 ),
-       (       "sf_get_chunk_data",    102 ),
-       (       "sf_get_chunk_iterator",        103 ),
-       (       "sf_next_chunk_iterator",       104 ),
-       (       "sf_current_byterate",  110 )
-       )
-
-#-------------------------------------------------------------------------------
-
-def linux_symbols (progname, version):
-       print ("# Auto-generated by %s\n" %progname)
-       print ("libsndfile.so.%s" % version)
-       print ("{")
-       print ("  global:")
-       for name, ordinal in ALL_SYMBOLS:
-               if  name == "sf_wchar_open":
-                       continue
-               print ("    %s ;" % name)
-       print ("  local:")
-       print ("    * ;")
-       print ("} ;")
-       sys.stdout.write ("\n")
-       return
-
-def darwin_symbols (progname, version):
-       print ("# Auto-generated by %s\n" %progname)
-       for name, ordinal in ALL_SYMBOLS:
-               if  name == "sf_wchar_open":
-                       continue
-               print ("_%s" % name)
-       sys.stdout.write ("\n")
-       return
-
-def win32_symbols (progname, version, name):
-       print ("; Auto-generated by %s\n" %progname)
-       print ("LIBRARY %s-%s.dll" % (name, re.sub ("\..*", "", version)))
-       print ("EXPORTS\n")
-       for name, ordinal in ALL_SYMBOLS:
-               print ("%-20s @%s" % (name, ordinal))
-       sys.stdout.write ("\n")
-       return
-
-def os2_symbols (progname, version, name):
-       print ("; Auto-generated by %s\n" %progname)
-       print ("LIBRARY %s%s" % (name, re.sub ("\..*", "", version)))
-       print ("INITINSTANCE TERMINSTANCE")
-       print ("CODE PRELOAD MOVEABLE DISCARDABLE")
-       print ("DATA PRELOAD MOVEABLE MULTIPLE NONSHARED")
-       print ("EXPORTS\n")
-       for name, ordinal in ALL_SYMBOLS:
-               if  name == "sf_wchar_open":
-                       continue
-               print ("_%-20s @%s" % (name, ordinal))
-       sys.stdout.write ("\n")
-       return
-
-def plain_symbols (progname, version, name):
-       for name, ordinal in ALL_SYMBOLS:
-               print (name)
-
-def no_symbols (os_name):
-       sys.stdout.write ("\n")
-       print ("No known way of restricting exported symbols on '%s'." % os_name)
-       print ("If you know a way, please contact the author.")
-       sys.stdout.write ("\n")
-       return
-
-#-------------------------------------------------------------------------------
-
-progname = re.sub (".*[\\/]", "", sys.argv [0])
-
-if len (sys.argv) != 3:
-       sys.stdout.write ("\n")
-       print ("Usage : %s <target OS name> <libsndfile version>." % progname)
-       sys.stdout.write ("\n")
-       print ("    Currently supported values for target OS are:")
-       print ("          linux")
-       print ("          darwin     (ie MacOSX)")
-       print ("          win32      (ie wintendo)")
-       print ("          cygwin     (Cygwin on wintendo)")
-       print ("          os2        (OS/2)")
-       print ("          plain      (plain list of symbols)")
-       sys.stdout.write ("\n")
-       sys.exit (1)
-
-os_name = sys.argv [1]
-version = re.sub ("\.[a-z0-9]+$", "", sys.argv [2])
-
-if os_name == "linux" or os_name == "gnu" or os_name == "binutils":
-       linux_symbols (progname, version)
-elif os_name == "darwin":
-       darwin_symbols (progname, version)
-elif os_name == "win32":
-       win32_symbols (progname, version, "libsndfile")
-elif os_name == "cygwin":
-       win32_symbols (progname, version, "cygsndfile")
-elif os_name == "os2":
-       os2_symbols (progname, version, "sndfile")
-elif os_name == "static":
-       plain_symbols (progname, version, "")
-else:
-       no_symbols (os_name)
-
-sys.exit (0)
-
diff --git a/libs/libsndfile/src/cygsndfile.def b/libs/libsndfile/src/cygsndfile.def
deleted file mode 100644 (file)
index 510aa8e..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-; Auto-generated by create_symbols_file.py
-
-LIBRARY cygsndfile-1.dll
-EXPORTS
-
-sf_command           @1
-sf_open              @2
-sf_close             @3
-sf_seek              @4
-sf_error             @7
-sf_perror            @8
-sf_error_str         @9
-sf_error_number      @10
-sf_format_check      @11
-sf_read_raw          @16
-sf_readf_short       @17
-sf_readf_int         @18
-sf_readf_float       @19
-sf_readf_double      @20
-sf_read_short        @21
-sf_read_int          @22
-sf_read_float        @23
-sf_read_double       @24
-sf_write_raw         @32
-sf_writef_short      @33
-sf_writef_int        @34
-sf_writef_float      @35
-sf_writef_double     @36
-sf_write_short       @37
-sf_write_int         @38
-sf_write_float       @39
-sf_write_double      @40
-sf_strerror          @50
-sf_get_string        @60
-sf_set_string        @61
-sf_open_fd           @70
-sf_open_virtual      @80
-sf_write_sync        @90
-
diff --git a/libs/libsndfile/src/dither.c b/libs/libsndfile/src/dither.c
deleted file mode 100644 (file)
index d149bc1..0000000
+++ /dev/null
@@ -1,534 +0,0 @@
-/*
-** Copyright (C) 2003-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdlib.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-/*============================================================================
-**     Rule number 1 is to only apply dither when going from a larger bitwidth
-**     to a smaller bitwidth. This can happen on both read and write.
-**
-**     Need to apply dither on all conversions marked X below.
-**
-**     Dither on write:
-**
-**                                                                             Input
-**                                     |       short           int                     float           double
-**                     --------+-----------------------------------------------
-**             O       8 bit   |       X                       X                       X                       X
-**             u       16 bit  |       none            X                       X                       X
-**             t       24 bit  |       none            X                       X                       X
-**             p       32 bit  |       none            none            X                       X
-**             u       float   |       none            none            none            none
-**             t       double  |       none            none            none            none
-**
-**     Dither on read:
-**
-**                                                                             Input
-**             O                       |       8 bit   16 bit  24 bit  32 bit  float   double
-**             u       --------+-------------------------------------------------
-**             t       short   |       none    none    X               X               X               X
-**             p       int             |       none    none    none    X               X               X
-**             u       float   |       none    none    none    none    none    none
-**             t       double  |       none    none    none    none    none    none
-*/
-
-#define        SFE_DITHER_BAD_PTR      666
-#define        SFE_DITHER_BAD_TYPE     667
-
-typedef struct
-{      int                     read_short_dither_bits, read_int_dither_bits ;
-       int                     write_short_dither_bits, write_int_dither_bits ;
-       double          read_float_dither_scale, read_double_dither_bits ;
-       double          write_float_dither_scale, write_double_dither_bits ;
-
-       sf_count_t      (*read_short)   (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-       sf_count_t      (*read_int)             (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-       sf_count_t      (*read_float)   (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-       sf_count_t      (*read_double)  (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-       sf_count_t      (*write_short)  (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-       sf_count_t      (*write_int)    (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-       sf_count_t      (*write_float)  (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-       sf_count_t      (*write_double) (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-       double buffer [SF_BUFFER_LEN / sizeof (double)] ;
-} DITHER_DATA ;
-
-static sf_count_t dither_read_short            (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t dither_read_int              (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-
-static sf_count_t dither_write_short   (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t dither_write_int             (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t dither_write_float   (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t dither_write_double  (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-int
-dither_init (SF_PRIVATE *psf, int mode)
-{      DITHER_DATA *pdither ;
-
-       pdither = psf->dither ; /* This may be NULL. */
-
-       /* Turn off dither on read. */
-       if (mode == SFM_READ && psf->read_dither.type == SFD_NO_DITHER)
-       {       if (pdither == NULL)
-                       return 0 ; /* Dither is already off, so just return. */
-
-               if (pdither->read_short)
-                       psf->read_short = pdither->read_short ;
-               if (pdither->read_int)
-                       psf->read_int = pdither->read_int ;
-               if (pdither->read_float)
-                       psf->read_float = pdither->read_float ;
-               if (pdither->read_double)
-                       psf->read_double = pdither->read_double ;
-               return 0 ;
-               } ;
-
-       /* Turn off dither on write. */
-       if (mode == SFM_WRITE && psf->write_dither.type == SFD_NO_DITHER)
-       {       if (pdither == NULL)
-                       return 0 ; /* Dither is already off, so just return. */
-
-               if (pdither->write_short)
-                       psf->write_short = pdither->write_short ;
-               if (pdither->write_int)
-                       psf->write_int = pdither->write_int ;
-               if (pdither->write_float)
-                       psf->write_float = pdither->write_float ;
-               if (pdither->write_double)
-                       psf->write_double = pdither->write_double ;
-               return 0 ;
-               } ;
-
-       /* Turn on dither on read if asked. */
-       if (mode == SFM_READ && psf->read_dither.type != 0)
-       {       if (pdither == NULL)
-                       pdither = psf->dither = calloc (1, sizeof (DITHER_DATA)) ;
-               if (pdither == NULL)
-                       return SFE_MALLOC_FAILED ;
-
-               switch (SF_CODEC (psf->sf.format))
-               {       case SF_FORMAT_DOUBLE :
-                       case SF_FORMAT_FLOAT :
-                                       pdither->read_int = psf->read_int ;
-                                       psf->read_int = dither_read_int ;
-                                       break ;
-
-                       case SF_FORMAT_PCM_32 :
-                       case SF_FORMAT_PCM_24 :
-                       case SF_FORMAT_PCM_16 :
-                       case SF_FORMAT_PCM_S8 :
-                       case SF_FORMAT_PCM_U8 :
-                                       pdither->read_short = psf->read_short ;
-                                       psf->read_short = dither_read_short ;
-                                       break ;
-
-                       default : break ;
-                       } ;
-               } ;
-
-       /* Turn on dither on write if asked. */
-       if (mode == SFM_WRITE && psf->write_dither.type != 0)
-       {       if (pdither == NULL)
-                       pdither = psf->dither = calloc (1, sizeof (DITHER_DATA)) ;
-               if (pdither == NULL)
-                       return SFE_MALLOC_FAILED ;
-
-               switch (SF_CODEC (psf->sf.format))
-               {       case SF_FORMAT_DOUBLE :
-                       case SF_FORMAT_FLOAT :
-                                       pdither->write_int = psf->write_int ;
-                                       psf->write_int = dither_write_int ;
-                                       break ;
-
-                       case SF_FORMAT_PCM_32 :
-                       case SF_FORMAT_PCM_24 :
-                       case SF_FORMAT_PCM_16 :
-                       case SF_FORMAT_PCM_S8 :
-                       case SF_FORMAT_PCM_U8 :
-                                       break ;
-
-                       default : break ;
-                       } ;
-
-               pdither->write_short = psf->write_short ;
-               psf->write_short = dither_write_short ;
-
-               pdither->write_int = psf->write_int ;
-               psf->write_int = dither_write_int ;
-
-               pdither->write_float = psf->write_float ;
-               psf->write_float = dither_write_float ;
-
-               pdither->write_double = psf->write_double ;
-               psf->write_double = dither_write_double ;
-               } ;
-
-       return 0 ;
-} /* dither_init */
-
-/*==============================================================================
-*/
-
-static void dither_short       (const short *in, short *out, int frames, int channels) ;
-static void dither_int         (const int *in, int *out, int frames, int channels) ;
-
-static void dither_float       (const float *in, float *out, int frames, int channels) ;
-static void dither_double      (const double *in, double *out, int frames, int channels) ;
-
-static sf_count_t
-dither_read_short (SF_PRIVATE * UNUSED (psf), short * UNUSED (ptr), sf_count_t len)
-{
-       return len ;
-} /* dither_read_short */
-
-static sf_count_t
-dither_read_int (SF_PRIVATE * UNUSED (psf), int * UNUSED (ptr), sf_count_t len)
-{
-       return len ;
-} /* dither_read_int */
-
-/*------------------------------------------------------------------------------
-*/
-
-static sf_count_t
-dither_write_short     (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      DITHER_DATA *pdither ;
-       int                     bufferlen, writecount, thiswrite ;
-       sf_count_t      total = 0 ;
-
-       if ((pdither = psf->dither) == NULL)
-       {       psf->error = SFE_DITHER_BAD_PTR ;
-               return 0 ;
-               } ;
-
-       switch (SF_CODEC (psf->sf.format))
-       {       case SF_FORMAT_PCM_S8 :
-               case SF_FORMAT_PCM_U8 :
-               case SF_FORMAT_DPCM_8 :
-                               break ;
-
-               default :
-                       return pdither->write_short (psf, ptr, len) ;
-               } ;
-
-       bufferlen = sizeof (pdither->buffer) / sizeof (short) ;
-
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-               writecount /= psf->sf.channels ;
-               writecount *= psf->sf.channels ;
-
-               dither_short (ptr, (short*) pdither->buffer, writecount / psf->sf.channels, psf->sf.channels) ;
-
-               thiswrite = pdither->write_short (psf, (short*) pdither->buffer, writecount) ;
-               total += thiswrite ;
-               len -= thiswrite ;
-               if (thiswrite < writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* dither_write_short */
-
-static sf_count_t
-dither_write_int       (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      DITHER_DATA *pdither ;
-       int                     bufferlen, writecount, thiswrite ;
-       sf_count_t      total = 0 ;
-
-       if ((pdither = psf->dither) == NULL)
-       {       psf->error = SFE_DITHER_BAD_PTR ;
-               return 0 ;
-               } ;
-
-       switch (SF_CODEC (psf->sf.format))
-       {       case SF_FORMAT_PCM_S8 :
-               case SF_FORMAT_PCM_U8 :
-               case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_PCM_24 :
-                               break ;
-
-               case SF_FORMAT_DPCM_8 :
-               case SF_FORMAT_DPCM_16 :
-                               break ;
-
-               default :
-                       return pdither->write_int (psf, ptr, len) ;
-               } ;
-
-
-       bufferlen = sizeof (pdither->buffer) / sizeof (int) ;
-
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-               writecount /= psf->sf.channels ;
-               writecount *= psf->sf.channels ;
-
-               dither_int (ptr, (int*) pdither->buffer, writecount / psf->sf.channels, psf->sf.channels) ;
-
-               thiswrite = pdither->write_int (psf, (int*) pdither->buffer, writecount) ;
-               total += thiswrite ;
-               len -= thiswrite ;
-               if (thiswrite < writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* dither_write_int */
-
-static sf_count_t
-dither_write_float     (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      DITHER_DATA *pdither ;
-       int                     bufferlen, writecount, thiswrite ;
-       sf_count_t      total = 0 ;
-
-       if ((pdither = psf->dither) == NULL)
-       {       psf->error = SFE_DITHER_BAD_PTR ;
-               return 0 ;
-               } ;
-
-       switch (SF_CODEC (psf->sf.format))
-       {       case SF_FORMAT_PCM_S8 :
-               case SF_FORMAT_PCM_U8 :
-               case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_PCM_24 :
-                               break ;
-
-               case SF_FORMAT_DPCM_8 :
-               case SF_FORMAT_DPCM_16 :
-                               break ;
-
-               default :
-                       return pdither->write_float (psf, ptr, len) ;
-               } ;
-
-       bufferlen = sizeof (pdither->buffer) / sizeof (float) ;
-
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : (float) len ;
-               writecount /= psf->sf.channels ;
-               writecount *= psf->sf.channels ;
-
-               dither_float (ptr, (float*) pdither->buffer, writecount / psf->sf.channels, psf->sf.channels) ;
-
-               thiswrite = pdither->write_float (psf, (float*) pdither->buffer, writecount) ;
-               total += thiswrite ;
-               len -= thiswrite ;
-               if (thiswrite < writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* dither_write_float */
-
-static sf_count_t
-dither_write_double    (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      DITHER_DATA *pdither ;
-       int                     bufferlen, writecount, thiswrite ;
-       sf_count_t      total = 0 ;
-
-       if ((pdither = psf->dither) == NULL)
-       {       psf->error = SFE_DITHER_BAD_PTR ;
-               return 0 ;
-               } ;
-
-       switch (SF_CODEC (psf->sf.format))
-       {       case SF_FORMAT_PCM_S8 :
-               case SF_FORMAT_PCM_U8 :
-               case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_PCM_24 :
-                               break ;
-
-               case SF_FORMAT_DPCM_8 :
-               case SF_FORMAT_DPCM_16 :
-                               break ;
-
-               default :
-                       return pdither->write_double (psf, ptr, len) ;
-               } ;
-
-
-       bufferlen = sizeof (pdither->buffer) / sizeof (double) ;
-
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : (double) len ;
-               writecount /= psf->sf.channels ;
-               writecount *= psf->sf.channels ;
-
-               dither_double (ptr, (double*) pdither->buffer, writecount / psf->sf.channels, psf->sf.channels) ;
-
-               thiswrite = pdither->write_double (psf, (double*) pdither->buffer, writecount) ;
-               total += thiswrite ;
-               len -= thiswrite ;
-               if (thiswrite < writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* dither_write_double */
-
-/*==============================================================================
-*/
-
-static void
-dither_short (const short *in, short *out, int frames, int channels)
-{      int ch, k ;
-
-       for (ch = 0 ; ch < channels ; ch++)
-               for (k = ch ; k < channels * frames ; k += channels)
-                       out [k] = in [k] ;
-
-} /* dither_short */
-
-static void
-dither_int (const int *in, int *out, int frames, int channels)
-{      int ch, k ;
-
-       for (ch = 0 ; ch < channels ; ch++)
-               for (k = ch ; k < channels * frames ; k += channels)
-                       out [k] = in [k] ;
-
-} /* dither_int */
-
-static void
-dither_float (const float *in, float *out, int frames, int channels)
-{      int ch, k ;
-
-       for (ch = 0 ; ch < channels ; ch++)
-               for (k = ch ; k < channels * frames ; k += channels)
-                       out [k] = in [k] ;
-
-} /* dither_float */
-
-static void
-dither_double (const double *in, double *out, int frames, int channels)
-{      int ch, k ;
-
-       for (ch = 0 ; ch < channels ; ch++)
-               for (k = ch ; k < channels * frames ; k += channels)
-                       out [k] = in [k] ;
-
-} /* dither_double */
-
-/*==============================================================================
-*/
-#if 0
-
-/*
-** Not made public because this (maybe) requires storage of state information.
-**
-** Also maybe need separate state info for each channel!!!!
-*/
-
-int
-DO_NOT_USE_sf_dither_short (const SF_DITHER_INFO *dither, const short *in, short *out, int frames, int channels)
-{      int ch, k ;
-
-       if (! dither)
-               return SFE_DITHER_BAD_PTR ;
-
-       switch (dither->type & SFD_TYPEMASK)
-       {       case SFD_WHITE :
-               case SFD_TRIANGULAR_PDF :
-                               for (ch = 0 ; ch < channels ; ch++)
-                                       for (k = ch ; k < channels * frames ; k += channels)
-                                               out [k] = in [k] ;
-                               break ;
-
-               default :
-                       return SFE_DITHER_BAD_TYPE ;
-               } ;
-
-       return 0 ;
-} /* DO_NOT_USE_sf_dither_short */
-
-int
-DO_NOT_USE_sf_dither_int (const SF_DITHER_INFO *dither, const int *in, int *out, int frames, int channels)
-{      int ch, k ;
-
-       if (! dither)
-               return SFE_DITHER_BAD_PTR ;
-
-       switch (dither->type & SFD_TYPEMASK)
-       {       case SFD_WHITE :
-               case SFD_TRIANGULAR_PDF :
-                               for (ch = 0 ; ch < channels ; ch++)
-                                       for (k = ch ; k < channels * frames ; k += channels)
-                                               out [k] = in [k] ;
-                               break ;
-
-               default :
-                       return SFE_DITHER_BAD_TYPE ;
-               } ;
-
-       return 0 ;
-} /* DO_NOT_USE_sf_dither_int */
-
-int
-DO_NOT_USE_sf_dither_float (const SF_DITHER_INFO *dither, const float *in, float *out, int frames, int channels)
-{      int ch, k ;
-
-       if (! dither)
-               return SFE_DITHER_BAD_PTR ;
-
-       switch (dither->type & SFD_TYPEMASK)
-       {       case SFD_WHITE :
-               case SFD_TRIANGULAR_PDF :
-                               for (ch = 0 ; ch < channels ; ch++)
-                                       for (k = ch ; k < channels * frames ; k += channels)
-                                               out [k] = in [k] ;
-                               break ;
-
-               default :
-                       return SFE_DITHER_BAD_TYPE ;
-               } ;
-
-       return 0 ;
-} /* DO_NOT_USE_sf_dither_float */
-
-int
-DO_NOT_USE_sf_dither_double (const SF_DITHER_INFO *dither, const double *in, double *out, int frames, int channels)
-{      int ch, k ;
-
-       if (! dither)
-               return SFE_DITHER_BAD_PTR ;
-
-       switch (dither->type & SFD_TYPEMASK)
-       {       case SFD_WHITE :
-               case SFD_TRIANGULAR_PDF :
-                               for (ch = 0 ; ch < channels ; ch++)
-                                       for (k = ch ; k < channels * frames ; k += channels)
-                                               out [k] = in [k] ;
-                               break ;
-
-               default :
-                       return SFE_DITHER_BAD_TYPE ;
-               } ;
-
-       return 0 ;
-} /* DO_NOT_USE_sf_dither_double */
-
-#endif
-
diff --git a/libs/libsndfile/src/double64.c b/libs/libsndfile/src/double64.c
deleted file mode 100644 (file)
index ce60699..0000000
+++ /dev/null
@@ -1,1058 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <stdlib.h>
-#include       <string.h>
-#include       <limits.h>
-#include       <math.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-#if CPU_IS_LITTLE_ENDIAN
-       #define DOUBLE64_READ   double64_le_read
-       #define DOUBLE64_WRITE  double64_le_write
-#elif CPU_IS_BIG_ENDIAN
-       #define DOUBLE64_READ   double64_be_read
-       #define DOUBLE64_WRITE  double64_be_write
-#endif
-
-/* A 32 number which will not overflow when multiplied by sizeof (double). */
-#define SENSIBLE_LEN   (0x8000000)
-
-/*--------------------------------------------------------------------------------------------
-**     Processor floating point capabilities. double64_get_capability () returns one of the
-**     latter three values.
-*/
-
-enum
-{      DOUBLE_UNKNOWN          = 0x00,
-       DOUBLE_CAN_RW_LE        = 0x23,
-       DOUBLE_CAN_RW_BE        = 0x34,
-       DOUBLE_BROKEN_LE        = 0x45,
-       DOUBLE_BROKEN_BE        = 0x56
-} ;
-
-/*--------------------------------------------------------------------------------------------
-**     Prototypes for private functions.
-*/
-
-static sf_count_t              host_read_d2s   (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t              host_read_d2i   (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t              host_read_d2f   (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t              host_read_d             (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t              host_write_s2d  (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t              host_write_i2d  (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t              host_write_f2d  (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t              host_write_d    (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static void            double64_peak_update    (SF_PRIVATE *psf, const double *buffer, int count, sf_count_t indx) ;
-
-static int             double64_get_capability (SF_PRIVATE *psf) ;
-
-static sf_count_t      replace_read_d2s        (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t      replace_read_d2i        (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t      replace_read_d2f        (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t      replace_read_d  (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t      replace_write_s2d       (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t      replace_write_i2d       (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t      replace_write_f2d       (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t      replace_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static void    d2bd_read (double *buffer, int count) ;
-static void    bd2d_write (double *buffer, int count) ;
-
-/*--------------------------------------------------------------------------------------------
-**     Exported functions.
-*/
-
-int
-double64_init  (SF_PRIVATE *psf)
-{      static int double64_caps ;
-
-       double64_caps = double64_get_capability (psf) ;
-
-       psf->blockwidth = sizeof (double) * psf->sf.channels ;
-
-       if (psf->file.mode == SFM_READ || psf->file.mode == SFM_RDWR)
-       {       switch (psf->endian + double64_caps)
-               {       case (SF_ENDIAN_BIG + DOUBLE_CAN_RW_BE) :
-                                       psf->data_endswap = SF_FALSE ;
-                                       psf->read_short         = host_read_d2s ;
-                                       psf->read_int           = host_read_d2i ;
-                                       psf->read_float         = host_read_d2f ;
-                                       psf->read_double        = host_read_d ;
-                                       break ;
-
-                       case (SF_ENDIAN_LITTLE + DOUBLE_CAN_RW_LE) :
-                                       psf->data_endswap = SF_FALSE ;
-                                       psf->read_short         = host_read_d2s ;
-                                       psf->read_int           = host_read_d2i ;
-                                       psf->read_float         = host_read_d2f ;
-                                       psf->read_double        = host_read_d ;
-                                       break ;
-
-                       case (SF_ENDIAN_BIG + DOUBLE_CAN_RW_LE) :
-                                       psf->data_endswap = SF_TRUE ;
-                                       psf->read_short         = host_read_d2s ;
-                                       psf->read_int           = host_read_d2i ;
-                                       psf->read_float         = host_read_d2f ;
-                                       psf->read_double        = host_read_d ;
-                                       break ;
-
-                       case (SF_ENDIAN_LITTLE + DOUBLE_CAN_RW_BE) :
-                                       psf->data_endswap = SF_TRUE ;
-                                       psf->read_short         = host_read_d2s ;
-                                       psf->read_int           = host_read_d2i ;
-                                       psf->read_float         = host_read_d2f ;
-                                       psf->read_double        = host_read_d ;
-                                       break ;
-
-                       /* When the CPU is not IEEE compatible. */
-                       case (SF_ENDIAN_BIG + DOUBLE_BROKEN_BE) :
-                                       psf->data_endswap = SF_FALSE ;
-                                       psf->read_short         = replace_read_d2s ;
-                                       psf->read_int           = replace_read_d2i ;
-                                       psf->read_float         = replace_read_d2f ;
-                                       psf->read_double        = replace_read_d ;
-                                       break ;
-
-                       case (SF_ENDIAN_LITTLE + DOUBLE_BROKEN_LE) :
-                                       psf->data_endswap = SF_FALSE ;
-                                       psf->read_short         = replace_read_d2s ;
-                                       psf->read_int           = replace_read_d2i ;
-                                       psf->read_float         = replace_read_d2f ;
-                                       psf->read_double        = replace_read_d ;
-                                       break ;
-
-                       case (SF_ENDIAN_BIG + DOUBLE_BROKEN_LE) :
-                                       psf->data_endswap = SF_TRUE ;
-                                       psf->read_short         = replace_read_d2s ;
-                                       psf->read_int           = replace_read_d2i ;
-                                       psf->read_float         = replace_read_d2f ;
-                                       psf->read_double        = replace_read_d ;
-                                       break ;
-
-                       case (SF_ENDIAN_LITTLE + DOUBLE_BROKEN_BE) :
-                                       psf->data_endswap = SF_TRUE ;
-                                       psf->read_short         = replace_read_d2s ;
-                                       psf->read_int           = replace_read_d2i ;
-                                       psf->read_float         = replace_read_d2f ;
-                                       psf->read_double        = replace_read_d ;
-                                       break ;
-
-                       default : break ;
-                       } ;
-               } ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       switch (psf->endian + double64_caps)
-               {       case (SF_ENDIAN_LITTLE + DOUBLE_CAN_RW_LE) :
-                                       psf->data_endswap = SF_FALSE ;
-                                       psf->write_short        = host_write_s2d ;
-                                       psf->write_int          = host_write_i2d ;
-                                       psf->write_float        = host_write_f2d ;
-                                       psf->write_double       = host_write_d ;
-                                       break ;
-
-                       case (SF_ENDIAN_BIG + DOUBLE_CAN_RW_BE) :
-                                       psf->data_endswap = SF_FALSE ;
-                                       psf->write_short        = host_write_s2d ;
-                                       psf->write_int          = host_write_i2d ;
-                                       psf->write_float        = host_write_f2d ;
-                                       psf->write_double       = host_write_d ;
-                                       break ;
-
-                       case (SF_ENDIAN_BIG + DOUBLE_CAN_RW_LE) :
-                                       psf->data_endswap = SF_TRUE ;
-                                       psf->write_short        = host_write_s2d ;
-                                       psf->write_int          = host_write_i2d ;
-                                       psf->write_float        = host_write_f2d ;
-                                       psf->write_double       = host_write_d ;
-                                       break ;
-
-                       case (SF_ENDIAN_LITTLE + DOUBLE_CAN_RW_BE) :
-                                       psf->data_endswap = SF_TRUE ;
-                                       psf->write_short        = host_write_s2d ;
-                                       psf->write_int          = host_write_i2d ;
-                                       psf->write_float        = host_write_f2d ;
-                                       psf->write_double       = host_write_d ;
-                                       break ;
-
-                       /* When the CPU is not IEEE compatible. */
-                       case (SF_ENDIAN_LITTLE + DOUBLE_BROKEN_LE) :
-                                       psf->data_endswap = SF_FALSE ;
-                                       psf->write_short        = replace_write_s2d ;
-                                       psf->write_int          = replace_write_i2d ;
-                                       psf->write_float        = replace_write_f2d ;
-                                       psf->write_double       = replace_write_d ;
-                                       break ;
-
-                       case (SF_ENDIAN_BIG + DOUBLE_BROKEN_BE) :
-                                       psf->data_endswap = SF_FALSE ;
-                                       psf->write_short        = replace_write_s2d ;
-                                       psf->write_int          = replace_write_i2d ;
-                                       psf->write_float        = replace_write_f2d ;
-                                       psf->write_double       = replace_write_d ;
-                                       break ;
-
-                       case (SF_ENDIAN_BIG + DOUBLE_BROKEN_LE) :
-                                       psf->data_endswap = SF_TRUE ;
-                                       psf->write_short        = replace_write_s2d ;
-                                       psf->write_int          = replace_write_i2d ;
-                                       psf->write_float        = replace_write_f2d ;
-                                       psf->write_double       = replace_write_d ;
-                                       break ;
-
-                       case (SF_ENDIAN_LITTLE + DOUBLE_BROKEN_BE) :
-                                       psf->data_endswap = SF_TRUE ;
-                                       psf->write_short        = replace_write_s2d ;
-                                       psf->write_int          = replace_write_i2d ;
-                                       psf->write_float        = replace_write_f2d ;
-                                       psf->write_double       = replace_write_d ;
-                                       break ;
-
-                       default : break ;
-                       } ;
-               } ;
-
-       if (psf->filelength > psf->dataoffset)
-       {       psf->datalength = (psf->dataend > 0) ? psf->dataend - psf->dataoffset :
-                                                       psf->filelength - psf->dataoffset ;
-               }
-       else
-               psf->datalength = 0 ;
-
-       psf->sf.frames = psf->datalength / psf->blockwidth ;
-
-       return 0 ;
-} /* double64_init */
-
-/*----------------------------------------------------------------------------
-** From : http://www.hpcf.cam.ac.uk/fp_formats.html
-**
-** 64 bit double precision layout (big endian)
-**       Sign                          bit 0
-**       Exponent                      bits 1-11
-**       Mantissa                      bits 12-63
-**       Exponent Offset       1023
-**
-**            double             single
-**
-** +INF     7FF0000000000000     7F800000
-** -INF     FFF0000000000000     FF800000
-**  NaN     7FF0000000000001     7F800001
-**                to               to
-**          7FFFFFFFFFFFFFFF     7FFFFFFF
-**                and              and
-**          FFF0000000000001     FF800001
-**                to               to
-**          FFFFFFFFFFFFFFFF     FFFFFFFF
-** +OVER    7FEFFFFFFFFFFFFF     7F7FFFFF
-** -OVER    FFEFFFFFFFFFFFFF     FF7FFFFF
-** +UNDER   0010000000000000     00800000
-** -UNDER   8010000000000000     80800000
-*/
-
-double
-double64_be_read (const unsigned char *cptr)
-{      int             exponent, negative, upper, lower ;
-       double  dvalue ;
-
-       negative = (cptr [0] & 0x80) ? 1 : 0 ;
-       exponent = ((cptr [0] & 0x7F) << 4) | ((cptr [1] >> 4) & 0xF) ;
-
-       /* Might not have a 64 bit long, so load the mantissa into a double. */
-       upper = (((cptr [1] & 0xF) << 24) | (cptr [2] << 16) | (cptr [3] << 8) | cptr [4]) ;
-       lower = (cptr [5] << 16) | (cptr [6] << 8) | cptr [7] ;
-
-       if (exponent == 0 && upper == 0 && lower == 0)
-               return 0.0 ;
-
-       dvalue = upper + lower / ((double) 0x1000000) ;
-       dvalue += 0x10000000 ;
-
-       exponent = exponent - 0x3FF ;
-
-       dvalue = dvalue / ((double) 0x10000000) ;
-
-       if (negative)
-               dvalue *= -1 ;
-
-       if (exponent > 0)
-               dvalue *= pow (2.0, exponent) ;
-       else if (exponent < 0)
-               dvalue /= pow (2.0, abs (exponent)) ;
-
-       return dvalue ;
-} /* double64_be_read */
-
-double
-double64_le_read (const unsigned char *cptr)
-{      int             exponent, negative, upper, lower ;
-       double  dvalue ;
-
-       negative = (cptr [7] & 0x80) ? 1 : 0 ;
-       exponent = ((cptr [7] & 0x7F) << 4) | ((cptr [6] >> 4) & 0xF) ;
-
-       /* Might not have a 64 bit long, so load the mantissa into a double. */
-       upper = ((cptr [6] & 0xF) << 24) | (cptr [5] << 16) | (cptr [4] << 8) | cptr [3] ;
-       lower = (cptr [2] << 16) | (cptr [1] << 8) | cptr [0] ;
-
-       if (exponent == 0 && upper == 0 && lower == 0)
-               return 0.0 ;
-
-       dvalue = upper + lower / ((double) 0x1000000) ;
-       dvalue += 0x10000000 ;
-
-       exponent = exponent - 0x3FF ;
-
-       dvalue = dvalue / ((double) 0x10000000) ;
-
-       if (negative)
-               dvalue *= -1 ;
-
-       if (exponent > 0)
-               dvalue *= pow (2.0, exponent) ;
-       else if (exponent < 0)
-               dvalue /= pow (2.0, abs (exponent)) ;
-
-       return dvalue ;
-} /* double64_le_read */
-
-void
-double64_be_write (double in, unsigned char *out)
-{      int             exponent, mantissa ;
-
-       memset (out, 0, sizeof (double)) ;
-
-       if (fabs (in) < 1e-30)
-               return ;
-
-       if (in < 0.0)
-       {       in *= -1.0 ;
-               out [0] |= 0x80 ;
-               } ;
-
-       in = frexp (in, &exponent) ;
-
-       exponent += 1022 ;
-
-       out [0] |= (exponent >> 4) & 0x7F ;
-       out [1] |= (exponent << 4) & 0xF0 ;
-
-       in *= 0x20000000 ;
-       mantissa = lrint (floor (in)) ;
-
-       out [1] |= (mantissa >> 24) & 0xF ;
-       out [2] = (mantissa >> 16) & 0xFF ;
-       out [3] = (mantissa >> 8) & 0xFF ;
-       out [4] = mantissa & 0xFF ;
-
-       in = fmod (in, 1.0) ;
-       in *= 0x1000000 ;
-       mantissa = lrint (floor (in)) ;
-
-       out [5] = (mantissa >> 16) & 0xFF ;
-       out [6] = (mantissa >> 8) & 0xFF ;
-       out [7] = mantissa & 0xFF ;
-
-       return ;
-} /* double64_be_write */
-
-void
-double64_le_write (double in, unsigned char *out)
-{      int             exponent, mantissa ;
-
-       memset (out, 0, sizeof (double)) ;
-
-       if (fabs (in) < 1e-30)
-               return ;
-
-       if (in < 0.0)
-       {       in *= -1.0 ;
-               out [7] |= 0x80 ;
-               } ;
-
-       in = frexp (in, &exponent) ;
-
-       exponent += 1022 ;
-
-       out [7] |= (exponent >> 4) & 0x7F ;
-       out [6] |= (exponent << 4) & 0xF0 ;
-
-       in *= 0x20000000 ;
-       mantissa = lrint (floor (in)) ;
-
-       out [6] |= (mantissa >> 24) & 0xF ;
-       out [5] = (mantissa >> 16) & 0xFF ;
-       out [4] = (mantissa >> 8) & 0xFF ;
-       out [3] = mantissa & 0xFF ;
-
-       in = fmod (in, 1.0) ;
-       in *= 0x1000000 ;
-       mantissa = lrint (floor (in)) ;
-
-       out [2] = (mantissa >> 16) & 0xFF ;
-       out [1] = (mantissa >> 8) & 0xFF ;
-       out [0] = mantissa & 0xFF ;
-
-       return ;
-} /* double64_le_write */
-
-/*==============================================================================================
-**     Private functions.
-*/
-
-static void
-double64_peak_update   (SF_PRIVATE *psf, const double *buffer, int count, sf_count_t indx)
-{      int     chan ;
-       int             k, position ;
-       float   fmaxval ;
-
-       for (chan = 0 ; chan < psf->sf.channels ; chan++)
-       {       fmaxval = fabs (buffer [chan]) ;
-               position = 0 ;
-               for (k = chan ; k < count ; k += psf->sf.channels)
-                       if (fmaxval < fabs (buffer [k]))
-                       {       fmaxval = fabs (buffer [k]) ;
-                               position = k ;
-                               } ;
-
-               if (fmaxval > psf->peak_info->peaks [chan].value)
-               {       psf->peak_info->peaks [chan].value = fmaxval ;
-                       psf->peak_info->peaks [chan].position = psf->write_current + indx + (position / psf->sf.channels) ;
-                       } ;
-               } ;
-
-       return ;
-} /* double64_peak_update */
-
-static int
-double64_get_capability        (SF_PRIVATE *psf)
-{      union
-       {       double                  d ;
-               unsigned char   c [8] ;
-       } data ;
-
-       data.d = 1.234567890123456789 ; /* Some abitrary value. */
-
-       if (! psf->ieee_replace)
-       {       /* If this test is true ints and floats are compatible and little endian. */
-               if (data.c [0] == 0xfb && data.c [1] == 0x59 && data.c [2] == 0x8c && data.c [3] == 0x42 &&
-                       data.c [4] == 0xca && data.c [5] == 0xc0 && data.c [6] == 0xf3 && data.c [7] == 0x3f)
-                       return DOUBLE_CAN_RW_LE ;
-
-               /* If this test is true ints and floats are compatible and big endian. */
-               if (data.c [0] == 0x3f && data.c [1] == 0xf3 && data.c [2] == 0xc0 && data.c [3] == 0xca &&
-                       data.c [4] == 0x42 && data.c [5] == 0x8c && data.c [6] == 0x59 && data.c [7] == 0xfb)
-                       return DOUBLE_CAN_RW_BE ;
-               } ;
-
-       /* Doubles are broken. Don't expect reading or writing to be fast. */
-       psf_log_printf (psf, "Using IEEE replacement code for double.\n") ;
-
-       return (CPU_IS_LITTLE_ENDIAN) ? DOUBLE_BROKEN_LE : DOUBLE_BROKEN_BE ;
-} /* double64_get_capability */
-
-/*=======================================================================================
-*/
-
-static void
-d2s_array (const double *src, int count, short *dest, double scale)
-{      while (--count >= 0)
-       {       dest [count] = lrint (scale * src [count]) ;
-               } ;
-} /* d2s_array */
-
-static void
-d2s_clip_array (const double *src, int count, short *dest, double scale)
-{      while (--count >= 0)
-       {       double tmp = scale * src [count] ;
-
-               if (CPU_CLIPS_POSITIVE == 0 && tmp > 32767.0)
-                       dest [count] = SHRT_MAX ;
-               else if (CPU_CLIPS_NEGATIVE == 0 && tmp < -32768.0)
-                       dest [count] = SHRT_MIN ;
-               else
-                       dest [count] = lrint (tmp) ;
-               } ;
-} /* d2s_clip_array */
-
-static void
-d2i_array (const double *src, int count, int *dest, double scale)
-{      while (--count >= 0)
-       {       dest [count] = lrint (scale * src [count]) ;
-               } ;
-} /* d2i_array */
-
-static void
-d2i_clip_array (const double *src, int count, int *dest, double scale)
-{      while (--count >= 0)
-       {       float tmp = scale * src [count] ;
-
-               if (CPU_CLIPS_POSITIVE == 0 && tmp > (1.0 * INT_MAX))
-                       dest [count] = INT_MAX ;
-               else if (CPU_CLIPS_NEGATIVE == 0 && tmp < (-1.0 * INT_MAX))
-                       dest [count] = INT_MIN ;
-               else
-                       dest [count] = lrint (tmp) ;
-               } ;
-} /* d2i_clip_array */
-
-static inline void
-d2f_array (const double *src, int count, float *dest)
-{      while (--count >= 0)
-       {       dest [count] = src [count] ;
-               } ;
-} /* d2f_array */
-
-static inline void
-s2d_array (const short *src, double *dest, int count, double scale)
-{      while (--count >= 0)
-       {       dest [count] = scale * src [count] ;
-               } ;
-} /* s2d_array */
-
-static inline void
-i2d_array (const int *src, double *dest, int count, double scale)
-{      while (--count >= 0)
-       {       dest [count] = scale * src [count] ;
-               } ;
-} /* i2d_array */
-
-static inline void
-f2d_array (const float *src, double *dest, int count)
-{      while (--count >= 0)
-       {       dest [count] = src [count] ;
-               } ;
-} /* f2d_array */
-
-/*----------------------------------------------------------------------------------------------
-*/
-
-static sf_count_t
-host_read_d2s  (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       void            (*convert) (const double *, int, short *, double) ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       double          scale ;
-
-       convert = (psf->add_clipping) ? d2s_clip_array : d2s_array ;
-       bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-       scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFF / psf->float_max ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_double_array (ubuf.dbuf, readcount) ;
-
-               convert (ubuf.dbuf, readcount, ptr + total, scale) ;
-               total += readcount ;
-               len -= readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               } ;
-
-       return total ;
-} /* host_read_d2s */
-
-static sf_count_t
-host_read_d2i  (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       void            (*convert) (const double *, int, int *, double) ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       double          scale ;
-
-       convert = (psf->add_clipping) ? d2i_clip_array : d2i_array ;
-       bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-       scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFFFFFF / psf->float_max ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-               convert (ubuf.dbuf, readcount, ptr + total, scale) ;
-               total += readcount ;
-               len -= readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               } ;
-
-       return total ;
-} /* host_read_d2i */
-
-static sf_count_t
-host_read_d2f  (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-               d2f_array (ubuf.dbuf, readcount, ptr + total) ;
-               total += readcount ;
-               len -= readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               } ;
-
-       return total ;
-} /* host_read_d2f */
-
-static sf_count_t
-host_read_d    (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      int                     bufferlen ;
-       sf_count_t      readcount, total = 0 ;
-
-       readcount = psf_fread (ptr, sizeof (double), len, psf) ;
-
-       if (psf->data_endswap != SF_TRUE)
-               return readcount ;
-
-       /* If the read length was sensible, endswap output in one go. */
-       if (readcount < SENSIBLE_LEN)
-       {       endswap_double_array (ptr, readcount) ;
-               return readcount ;
-               } ;
-
-       bufferlen = SENSIBLE_LEN ;
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-
-               endswap_double_array (ptr + total, bufferlen) ;
-
-               total += bufferlen ;
-               len -= bufferlen ;
-               } ;
-
-       return total ;
-} /* host_read_d */
-
-static sf_count_t
-host_write_s2d (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-       double          scale ;
-
-       scale = (psf->scale_int_float == 0) ? 1.0 : 1.0 / 0x8000 ;
-       bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-
-               s2d_array (ptr + total, ubuf.dbuf, bufferlen, scale) ;
-
-               if (psf->peak_info)
-                       double64_peak_update (psf, ubuf.dbuf, bufferlen, total / psf->sf.channels) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-               writecount = psf_fwrite (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* host_write_s2d */
-
-static sf_count_t
-host_write_i2d (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-       double          scale ;
-
-       scale = (psf->scale_int_float == 0) ? 1.0 : 1.0 / (8.0 * 0x10000000) ;
-       bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               i2d_array (ptr + total, ubuf.dbuf, bufferlen, scale) ;
-
-               if (psf->peak_info)
-                       double64_peak_update (psf, ubuf.dbuf, bufferlen, total / psf->sf.channels) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-               writecount = psf_fwrite (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* host_write_i2d */
-
-static sf_count_t
-host_write_f2d (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               f2d_array (ptr + total, ubuf.dbuf, bufferlen) ;
-
-               if (psf->peak_info)
-                       double64_peak_update (psf, ubuf.dbuf, bufferlen, total / psf->sf.channels) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-               writecount = psf_fwrite (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* host_write_f2d */
-
-static sf_count_t
-host_write_d   (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       if (psf->peak_info)
-               double64_peak_update (psf, ptr, len, 0) ;
-
-       if (psf->data_endswap != SF_TRUE)
-               return psf_fwrite (ptr, sizeof (double), len, psf) ;
-
-       bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-
-               endswap_double_copy (ubuf.dbuf, ptr + total, bufferlen) ;
-
-               writecount = psf_fwrite (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* host_write_d */
-
-/*=======================================================================================
-*/
-
-static sf_count_t
-replace_read_d2s       (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       double          scale ;
-
-       bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-       scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFF / psf->float_max ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-               d2bd_read (ubuf.dbuf, bufferlen) ;
-
-               d2s_array (ubuf.dbuf, readcount, ptr + total, scale) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* replace_read_d2s */
-
-static sf_count_t
-replace_read_d2i       (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       double          scale ;
-
-       bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-       scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFFFFFF / psf->float_max ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-               d2bd_read (ubuf.dbuf, bufferlen) ;
-
-               d2i_array (ubuf.dbuf, readcount, ptr + total, scale) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* replace_read_d2i */
-
-static sf_count_t
-replace_read_d2f       (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-               d2bd_read (ubuf.dbuf, bufferlen) ;
-
-               memcpy (ptr + total, ubuf.dbuf, bufferlen * sizeof (double)) ;
-
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* replace_read_d2f */
-
-static sf_count_t
-replace_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       /* FIXME : This is probably nowhere near optimal. */
-       bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_double_array (ubuf.dbuf, readcount) ;
-
-               d2bd_read (ubuf.dbuf, readcount) ;
-
-               memcpy (ptr + total, ubuf.dbuf, readcount * sizeof (double)) ;
-
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* replace_read_d */
-
-static sf_count_t
-replace_write_s2d      (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-       double          scale ;
-
-       scale = (psf->scale_int_float == 0) ? 1.0 : 1.0 / 0x8000 ;
-       bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               s2d_array (ptr + total, ubuf.dbuf, bufferlen, scale) ;
-
-               if (psf->peak_info)
-                       double64_peak_update (psf, ubuf.dbuf, bufferlen, total / psf->sf.channels) ;
-
-               bd2d_write (ubuf.dbuf, bufferlen) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-               writecount = psf_fwrite (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* replace_write_s2d */
-
-static sf_count_t
-replace_write_i2d      (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-       double          scale ;
-
-       scale = (psf->scale_int_float == 0) ? 1.0 : 1.0 / (8.0 * 0x10000000) ;
-       bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               i2d_array (ptr + total, ubuf.dbuf, bufferlen, scale) ;
-
-               if (psf->peak_info)
-                       double64_peak_update (psf, ubuf.dbuf, bufferlen, total / psf->sf.channels) ;
-
-               bd2d_write (ubuf.dbuf, bufferlen) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-               writecount = psf_fwrite (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* replace_write_i2d */
-
-static sf_count_t
-replace_write_f2d      (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               f2d_array (ptr + total, ubuf.dbuf, bufferlen) ;
-
-               bd2d_write (ubuf.dbuf, bufferlen) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-               writecount = psf_fwrite (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* replace_write_f2d */
-
-static sf_count_t
-replace_write_d        (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       /* FIXME : This is probably nowhere near optimal. */
-       if (psf->peak_info)
-               double64_peak_update (psf, ptr, len, 0) ;
-
-       bufferlen = ARRAY_LEN (ubuf.dbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-
-               memcpy (ubuf.dbuf, ptr + total, bufferlen * sizeof (double)) ;
-
-               bd2d_write (ubuf.dbuf, bufferlen) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_double_array (ubuf.dbuf, bufferlen) ;
-
-               writecount = psf_fwrite (ubuf.dbuf, sizeof (double), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* replace_write_d */
-
-/*----------------------------------------------------------------------------------------------
-*/
-
-static void
-d2bd_read (double *buffer, int count)
-{      while (--count >= 0)
-       {       buffer [count] = DOUBLE64_READ ((unsigned char *) (buffer + count)) ;
-               } ;
-} /* d2bd_read */
-
-static void
-bd2d_write (double *buffer, int count)
-{      while (--count >= 0)
-       {       DOUBLE64_WRITE (buffer [count], (unsigned char*) (buffer + count)) ;
-               } ;
-} /* bd2d_write */
-
diff --git a/libs/libsndfile/src/dwd.c b/libs/libsndfile/src/dwd.c
deleted file mode 100644 (file)
index af4d9f0..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <fcntl.h>
-#include       <string.h>
-#include       <ctype.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-#if (ENABLE_EXPERIMENTAL_CODE == 0)
-
-int
-dwd_open       (SF_PRIVATE *psf)
-{      if (psf)
-               return SFE_UNIMPLEMENTED ;
-       return 0 ;
-} /* dwd_open */
-
-#else
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-
-#define SFE_DWD_NO_DWD                 1666
-#define SFE_DWD_BAND_BIT_WIDTH         1667
-#define SFE_DWD_COMPRESSION            1668
-
-#define        DWD_IDENTIFIER          "DiamondWare Digitized\n\0\x1a"
-#define        DWD_IDENTIFIER_LEN      24
-
-#define        DWD_HEADER_LEN          57
-
-/*------------------------------------------------------------------------------
-** Typedefs.
-*/
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int     dwd_read_header (SF_PRIVATE *psf) ;
-
-static int     dwd_close               (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-dwd_open (SF_PRIVATE *psf)
-{      int     error = 0 ;
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-       {       if ((error = dwd_read_header (psf)))
-                       return error ;
-               } ;
-
-       if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_DWD)
-               return  SFE_BAD_OPEN_FORMAT ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {
-               /*-psf->endian = SF_ENDIAN (psf->sf.format) ;
-               if (CPU_IS_LITTLE_ENDIAN && psf->endian == SF_ENDIAN_CPU)
-                       psf->endian = SF_ENDIAN_LITTLE ;
-               else if (psf->endian != SF_ENDIAN_LITTLE)
-                       psf->endian = SF_ENDIAN_BIG ;
-
-               if (! (encoding = dwd_write_header (psf, SF_FALSE)))
-                       return psf->error ;
-
-               psf->write_header = dwd_write_header ;
-               -*/
-               } ;
-
-       psf->container_close = dwd_close ;
-
-       /*-psf->blockwidth = psf->bytewidth * psf->sf.channels ;-*/
-
-       return error ;
-} /* dwd_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-dwd_close      (SF_PRIVATE * UNUSED (psf))
-{
-       return 0 ;
-} /* dwd_close */
-
-/* This struct contains all the fields of interest om the DWD header, but does not
-** do so in the same order and layout as the actual file, header.
-** No assumptions are made about the packing of this struct.
-*/
-typedef struct
-{      unsigned char major, minor, compression, channels, bitwidth ;
-       unsigned short srate, maxval ;
-       unsigned int id, datalen, frames, offset ;
-} DWD_HEADER ;
-
-static int
-dwd_read_header (SF_PRIVATE *psf)
-{      BUF_UNION       ubuf ;
-       DWD_HEADER      dwdh ;
-
-       memset (ubuf.cbuf, 0, sizeof (ubuf.cbuf)) ;
-       /* Set position to start of file to begin reading header. */
-       psf_binheader_readf (psf, "pb", 0, ubuf.cbuf, DWD_IDENTIFIER_LEN) ;
-
-       if (memcmp (ubuf.cbuf, DWD_IDENTIFIER, DWD_IDENTIFIER_LEN) != 0)
-               return SFE_DWD_NO_DWD ;
-
-       psf_log_printf (psf, "Read only : DiamondWare Digitized (.dwd)\n", ubuf.cbuf) ;
-
-       psf_binheader_readf (psf, "11", &dwdh.major, &dwdh.minor) ;
-       psf_binheader_readf (psf, "e4j1", &dwdh.id, 1, &dwdh.compression) ;
-       psf_binheader_readf (psf, "e211", &dwdh.srate, &dwdh.channels, &dwdh.bitwidth) ;
-       psf_binheader_readf (psf, "e24", &dwdh.maxval, &dwdh.datalen) ;
-       psf_binheader_readf (psf, "e44", &dwdh.frames, &dwdh.offset) ;
-
-       psf_log_printf (psf, "  Version Major : %d\n  Version Minor : %d\n  Unique ID     : %08X\n",
-                                               dwdh.major, dwdh.minor, dwdh.id) ;
-       psf_log_printf (psf, "  Compression   : %d => ", dwdh.compression) ;
-
-       if (dwdh.compression != 0)
-       {       psf_log_printf (psf, "Unsupported compression\n") ;
-               return SFE_DWD_COMPRESSION ;
-               }
-       else
-               psf_log_printf (psf, "None\n") ;
-
-       psf_log_printf (psf,    "  Sample Rate   : %d\n  Channels      : %d\n"
-                                                       "  Bit Width     : %d\n",
-                                               dwdh.srate, dwdh.channels, dwdh.bitwidth) ;
-
-       switch (dwdh.bitwidth)
-       {       case 8 :
-                               psf->sf.format = SF_FORMAT_DWD | SF_FORMAT_PCM_S8 ;
-                               psf->bytewidth = 1 ;
-                               break ;
-
-               case 16 :
-                               psf->sf.format = SF_FORMAT_DWD | SF_FORMAT_PCM_16 ;
-                               psf->bytewidth = 2 ;
-                               break ;
-
-               default :
-                               psf_log_printf (psf, "*** Bad bit width %d\n", dwdh.bitwidth) ;
-                               return SFE_DWD_BAND_BIT_WIDTH ;
-                               } ;
-
-       if (psf->filelength != dwdh.offset + dwdh.datalen)
-       {       psf_log_printf (psf, "  Data Length   : %d (should be %D)\n", dwdh.datalen, psf->filelength - dwdh.offset) ;
-               dwdh.datalen = (unsigned int) (psf->filelength - dwdh.offset) ;
-               }
-       else
-               psf_log_printf (psf, "  Data Length   : %d\n", dwdh.datalen) ;
-
-       psf_log_printf (psf, "  Max Value     : %d\n", dwdh.maxval) ;
-       psf_log_printf (psf, "  Frames        : %d\n", dwdh.frames) ;
-       psf_log_printf (psf, "  Data Offset   : %d\n", dwdh.offset) ;
-
-       psf->datalength = dwdh.datalen ;
-       psf->dataoffset = dwdh.offset ;
-
-       psf->endian = SF_ENDIAN_LITTLE ;
-
-       psf->sf.samplerate = dwdh.srate ;
-       psf->sf.channels = dwdh.channels ;
-       psf->sf.sections = 1 ;
-
-       return pcm_init (psf) ;
-} /* dwd_read_header */
-
-/*------------------------------------------------------------------------------
-*/
-
-#endif
-
diff --git a/libs/libsndfile/src/dwvw.c b/libs/libsndfile/src/dwvw.c
deleted file mode 100644 (file)
index ddf86f6..0000000
+++ /dev/null
@@ -1,674 +0,0 @@
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*===========================================================================
-** Delta Word Variable Width
-**
-** This decoder and encoder were implemented using information found in this
-** document : http://home.swbell.net/rubywand/R011SNDFMTS.TXT
-**
-** According to the document, the algorithm "was invented 1991 by Magnus
-** Lidstrom and is copyright 1993 by NuEdge Development".
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <stdlib.h>
-#include       <string.h>
-#include       <math.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-typedef struct
-{      int             bit_width, dwm_maxsize, max_delta, span ;
-       int             samplecount ;
-       int             bit_count, bits, last_delta_width, last_sample ;
-       struct
-       {       int                             index, end ;
-               unsigned char   buffer [256] ;
-       } b ;
-} DWVW_PRIVATE ;
-
-/*============================================================================================
-*/
-
-static sf_count_t dwvw_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t dwvw_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t dwvw_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t dwvw_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t dwvw_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t dwvw_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t dwvw_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t dwvw_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static sf_count_t      dwvw_seek       (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-static int     dwvw_close              (SF_PRIVATE *psf) ;
-static int     dwvw_byterate   (SF_PRIVATE *psf) ;
-
-static int     dwvw_decode_data (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, int *ptr, int len) ;
-static int     dwvw_decode_load_bits (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, int bit_count) ;
-
-static int     dwvw_encode_data (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, const int *ptr, int len) ;
-static void dwvw_encode_store_bits (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, int data, int new_bits) ;
-static void dwvw_read_reset (DWVW_PRIVATE *pdwvw) ;
-
-/*============================================================================================
-** DWVW initialisation function.
-*/
-
-int
-dwvw_init (SF_PRIVATE *psf, int bitwidth)
-{      DWVW_PRIVATE    *pdwvw ;
-
-       if (psf->codec_data != NULL)
-       {       psf_log_printf (psf, "*** psf->codec_data is not NULL.\n") ;
-               return SFE_INTERNAL ;
-               } ;
-
-       if (bitwidth > 24)
-               return SFE_DWVW_BAD_BITWIDTH ;
-
-       if (psf->file.mode == SFM_RDWR)
-               return SFE_BAD_MODE_RW ;
-
-       if ((pdwvw = calloc (1, sizeof (DWVW_PRIVATE))) == NULL)
-               return SFE_MALLOC_FAILED ;
-
-       psf->codec_data = (void*) pdwvw ;
-       pdwvw->bit_width        = bitwidth ;
-       dwvw_read_reset (pdwvw) ;
-
-       if (psf->file.mode == SFM_READ)
-       {       psf->read_short         = dwvw_read_s ;
-               psf->read_int           = dwvw_read_i ;
-               psf->read_float         = dwvw_read_f ;
-               psf->read_double        = dwvw_read_d ;
-               } ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       psf->write_short        = dwvw_write_s ;
-               psf->write_int          = dwvw_write_i ;
-               psf->write_float        = dwvw_write_f ;
-               psf->write_double       = dwvw_write_d ;
-               } ;
-
-       psf->codec_close = dwvw_close ;
-       psf->seek = dwvw_seek ;
-       psf->byterate = dwvw_byterate ;
-
-       if (psf->file.mode == SFM_READ)
-       {       psf->sf.frames = psf_decode_frame_count (psf) ;
-               dwvw_read_reset (pdwvw) ;
-               } ;
-
-       return 0 ;
-} /* dwvw_init */
-
-/*--------------------------------------------------------------------------------------------
-*/
-
-static int
-dwvw_close (SF_PRIVATE *psf)
-{      DWVW_PRIVATE *pdwvw ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       pdwvw = (DWVW_PRIVATE*) psf->codec_data ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       static int last_values [12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ;
-
-               /* Write 8 zero samples to fully flush output. */
-               dwvw_encode_data (psf, pdwvw, last_values, 12) ;
-
-               /* Write the last buffer worth of data to disk. */
-               psf_fwrite (pdwvw->b.buffer, 1, pdwvw->b.index, psf) ;
-
-               if (psf->write_header)
-                       psf->write_header (psf, SF_TRUE) ;
-               } ;
-
-       return 0 ;
-} /* dwvw_close */
-
-static sf_count_t
-dwvw_seek      (SF_PRIVATE *psf, int UNUSED (mode), sf_count_t offset)
-{      DWVW_PRIVATE *pdwvw ;
-
-       if (! psf->codec_data)
-       {       psf->error = SFE_INTERNAL ;
-               return PSF_SEEK_ERROR ;
-               } ;
-
-       pdwvw = (DWVW_PRIVATE*) psf->codec_data ;
-
-       if (offset == 0)
-       {       psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-               dwvw_read_reset (pdwvw) ;
-               return 0 ;
-               } ;
-
-       psf->error = SFE_BAD_SEEK ;
-       return  PSF_SEEK_ERROR ;
-} /* dwvw_seek */
-
-static int
-dwvw_byterate  (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_READ)
-               return (psf->datalength * psf->sf.samplerate) / psf->sf.frames ;
-
-       return -1 ;
-} /* dwvw_byterate */
-
-/*==============================================================================
-*/
-
-static sf_count_t
-dwvw_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      DWVW_PRIVATE *pdwvw ;
-       BUF_UNION       ubuf ;
-       int             *iptr ;
-       int             k, bufferlen, readcount = 0, count ;
-       sf_count_t      total = 0 ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pdwvw = (DWVW_PRIVATE*) psf->codec_data ;
-
-       iptr = ubuf.ibuf ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = dwvw_decode_data (psf, pdwvw, iptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = iptr [k] >> 16 ;
-
-               total += count ;
-               len -= readcount ;
-               if (count != readcount)
-                       break ;
-               } ;
-
-       return total ;
-} /* dwvw_read_s */
-
-static sf_count_t
-dwvw_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      DWVW_PRIVATE *pdwvw ;
-       int                     readcount, count ;
-       sf_count_t      total = 0 ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pdwvw = (DWVW_PRIVATE*) psf->codec_data ;
-
-       while (len > 0)
-       {       readcount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-               count = dwvw_decode_data (psf, pdwvw, ptr, readcount) ;
-
-               total += count ;
-               len -= count ;
-
-               if (count != readcount)
-                       break ;
-               } ;
-
-       return total ;
-} /* dwvw_read_i */
-
-static sf_count_t
-dwvw_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      DWVW_PRIVATE *pdwvw ;
-       BUF_UNION       ubuf ;
-       int                     *iptr ;
-       int                     k, bufferlen, readcount = 0, count ;
-       sf_count_t      total = 0 ;
-       float   normfact ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pdwvw = (DWVW_PRIVATE*) psf->codec_data ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80000000) : 1.0 ;
-
-       iptr = ubuf.ibuf ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = dwvw_decode_data (psf, pdwvw, iptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = normfact * (float) (iptr [k]) ;
-
-               total += count ;
-               len -= readcount ;
-               if (count != readcount)
-                       break ;
-               } ;
-
-       return total ;
-} /* dwvw_read_f */
-
-static sf_count_t
-dwvw_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      DWVW_PRIVATE *pdwvw ;
-       BUF_UNION       ubuf ;
-       int                     *iptr ;
-       int                     k, bufferlen, readcount = 0, count ;
-       sf_count_t      total = 0 ;
-       double  normfact ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pdwvw = (DWVW_PRIVATE*) psf->codec_data ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80000000) : 1.0 ;
-
-       iptr = ubuf.ibuf ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = dwvw_decode_data (psf, pdwvw, iptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = normfact * (double) (iptr [k]) ;
-
-               total += count ;
-               len -= readcount ;
-               if (count != readcount)
-                       break ;
-               } ;
-
-       return total ;
-} /* dwvw_read_d */
-
-static int
-dwvw_decode_data (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, int *ptr, int len)
-{      int     count ;
-       int delta_width_modifier, delta_width, delta_negative, delta, sample ;
-
-       /* Restore state from last decode call. */
-       delta_width = pdwvw->last_delta_width ;
-       sample = pdwvw->last_sample ;
-
-       for (count = 0 ; count < len ; count++)
-       {       /* If bit_count parameter is zero get the delta_width_modifier. */
-               delta_width_modifier = dwvw_decode_load_bits (psf, pdwvw, -1) ;
-
-               /* Check for end of input bit stream. Break loop if end. */
-               if (delta_width_modifier < 0 || (pdwvw->b.end == 0 && count == 0))
-                       break ;
-
-               if (delta_width_modifier && dwvw_decode_load_bits (psf, pdwvw, 1))
-                       delta_width_modifier = - delta_width_modifier ;
-
-               /* Calculate the current word width. */
-               delta_width = (delta_width + delta_width_modifier + pdwvw->bit_width) % pdwvw->bit_width ;
-
-               /* Load the delta. */
-               delta = 0 ;
-               if (delta_width)
-               {       delta = dwvw_decode_load_bits (psf, pdwvw, delta_width - 1) | (1 << (delta_width - 1)) ;
-                       delta_negative = dwvw_decode_load_bits (psf, pdwvw, 1) ;
-                       if (delta == pdwvw->max_delta - 1)
-                               delta += dwvw_decode_load_bits (psf, pdwvw, 1) ;
-                       if (delta_negative)
-                               delta = -delta ;
-                       } ;
-
-               /* Calculate the sample */
-               sample += delta ;
-
-               if (sample >= pdwvw->max_delta)
-                       sample -= pdwvw->span ;
-               else if (sample < - pdwvw->max_delta)
-                       sample += pdwvw->span ;
-
-               /* Store the sample justifying to the most significant bit. */
-               ptr [count] = sample << (32 - pdwvw->bit_width) ;
-
-               if (pdwvw->b.end == 0 && pdwvw->bit_count == 0)
-                       break ;
-               } ;
-
-       pdwvw->last_delta_width = delta_width ;
-       pdwvw->last_sample = sample ;
-
-       pdwvw->samplecount += count ;
-
-       return count ;
-} /* dwvw_decode_data */
-
-static int
-dwvw_decode_load_bits (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, int bit_count)
-{      int output = 0, get_dwm = SF_FALSE ;
-
-       /*
-       **      Depending on the value of parameter bit_count, either get the
-       **      required number of bits (ie bit_count > 0) or the
-       **      delta_width_modifier (otherwise).
-       */
-
-       if (bit_count < 0)
-       {       get_dwm = SF_TRUE ;
-               /* modify bit_count to ensure we have enought bits for finding dwm. */
-               bit_count = pdwvw->dwm_maxsize ;
-               } ;
-
-       /* Load bits in bit reseviour. */
-       while (pdwvw->bit_count < bit_count)
-       {       if (pdwvw->b.index >= pdwvw->b.end)
-               {       pdwvw->b.end = psf_fread (pdwvw->b.buffer, 1, sizeof (pdwvw->b.buffer), psf) ;
-                       pdwvw->b.index = 0 ;
-                       } ;
-
-               /* Check for end of input stream. */
-               if (bit_count < 8 && pdwvw->b.end == 0)
-                       return -1 ;
-
-               pdwvw->bits = (pdwvw->bits << 8) ;
-
-               if (pdwvw->b.index < pdwvw->b.end)
-               {       pdwvw->bits |= pdwvw->b.buffer [pdwvw->b.index] ;
-                       pdwvw->b.index ++ ;
-                       } ;
-               pdwvw->bit_count += 8 ;
-               } ;
-
-       /* If asked to get bits do so. */
-       if (! get_dwm)
-       {       output = (pdwvw->bits >> (pdwvw->bit_count - bit_count)) & ((1 << bit_count) - 1) ;
-               pdwvw->bit_count -= bit_count ;
-               return output ;
-               } ;
-
-       /* Otherwise must have been asked to get delta_width_modifier. */
-       while (output < (pdwvw->dwm_maxsize))
-       {       pdwvw->bit_count -= 1 ;
-               if (pdwvw->bits & (1 << pdwvw->bit_count))
-                       break ;
-               output += 1 ;
-               } ;
-
-       return output ;
-} /* dwvw_decode_load_bits */
-
-static void
-dwvw_read_reset (DWVW_PRIVATE *pdwvw)
-{      int bitwidth = pdwvw->bit_width ;
-
-       memset (pdwvw, 0, sizeof (DWVW_PRIVATE)) ;
-
-       pdwvw->bit_width        = bitwidth ;
-       pdwvw->dwm_maxsize      = bitwidth / 2 ;
-       pdwvw->max_delta        = 1 << (bitwidth - 1) ;
-       pdwvw->span                     = 1 << bitwidth ;
-} /* dwvw_read_reset */
-
-static void
-dwvw_encode_store_bits (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, int data, int new_bits)
-{      int     byte ;
-
-       /* Shift the bits into the resevoir. */
-       pdwvw->bits = (pdwvw->bits << new_bits) | (data & ((1 << new_bits) - 1)) ;
-       pdwvw->bit_count += new_bits ;
-
-       /* Transfer bit to buffer. */
-       while (pdwvw->bit_count >= 8)
-       {       byte = pdwvw->bits >> (pdwvw->bit_count -       8) ;
-               pdwvw->bit_count -= 8 ;
-               pdwvw->b.buffer [pdwvw->b.index] = byte & 0xFF ;
-               pdwvw->b.index ++ ;
-               } ;
-
-       if (pdwvw->b.index > SIGNED_SIZEOF (pdwvw->b.buffer) - 4)
-       {       psf_fwrite (pdwvw->b.buffer, 1, pdwvw->b.index, psf) ;
-               pdwvw->b.index = 0 ;
-               } ;
-
-       return ;
-} /* dwvw_encode_store_bits */
-
-#if 0
-/* Debigging routine. */
-static void
-dump_bits (DWVW_PRIVATE *pdwvw)
-{      int k, mask ;
-
-       for (k = 0 ; k < 10 && k < pdwvw->b.index ; k++)
-       {       mask = 0x80 ;
-               while (mask)
-               {       putchar (mask & pdwvw->b.buffer [k] ? '1' : '0') ;
-                       mask >>= 1 ;
-                       } ;
-               putchar (' ') ;
-               }
-
-       for (k = pdwvw->bit_count - 1 ; k >= 0 ; k --)
-               putchar (pdwvw->bits & (1 << k) ? '1' : '0') ;
-
-       putchar ('\n') ;
-} /* dump_bits */
-#endif
-
-#define HIGHEST_BIT(x, count)          \
-                       {       int y = x ;                     \
-                               (count) = 0 ;           \
-                               while (y)                       \
-                               {       (count) ++ ;    \
-                                       y >>= 1 ;               \
-                                       } ;                             \
-                               } ;
-
-static int
-dwvw_encode_data (SF_PRIVATE *psf, DWVW_PRIVATE *pdwvw, const int *ptr, int len)
-{      int     count ;
-       int delta_width_modifier, delta, delta_negative, delta_width, extra_bit ;
-
-       for (count = 0 ; count < len ; count++)
-       {       delta = (ptr [count] >> (32 - pdwvw->bit_width)) - pdwvw->last_sample ;
-
-               /* Calculate extra_bit if needed. */
-               extra_bit = -1 ;
-               delta_negative = 0 ;
-               if (delta < -pdwvw->max_delta)
-                       delta = pdwvw->max_delta + (delta % pdwvw->max_delta) ;
-               else if (delta == -pdwvw->max_delta)
-               {       extra_bit = 1 ;
-                       delta_negative = 1 ;
-                       delta = pdwvw->max_delta - 1 ;
-                       }
-               else if (delta > pdwvw->max_delta)
-               {       delta_negative = 1 ;
-                       delta = pdwvw->span - delta ;
-                       delta = abs (delta) ;
-                       }
-               else if (delta == pdwvw->max_delta)
-               {       extra_bit = 1 ;
-                       delta = pdwvw->max_delta - 1 ;
-                       }
-               else if (delta < 0)
-               {       delta_negative = 1 ;
-                       delta = abs (delta) ;
-                       } ;
-
-               if (delta == pdwvw->max_delta - 1 && extra_bit == -1)
-                       extra_bit = 0 ;
-
-               /* Find width in bits of delta */
-               HIGHEST_BIT (delta, delta_width) ;
-
-               /* Calculate the delta_width_modifier */
-               delta_width_modifier = (delta_width - pdwvw->last_delta_width) % pdwvw->bit_width ;
-               if (delta_width_modifier > pdwvw->dwm_maxsize)
-                       delta_width_modifier -= pdwvw->bit_width ;
-               if (delta_width_modifier < -pdwvw->dwm_maxsize)
-                       delta_width_modifier += pdwvw->bit_width ;
-
-               /* Write delta_width_modifier zeros, followed by terminating '1'. */
-               dwvw_encode_store_bits (psf, pdwvw, 0, abs (delta_width_modifier)) ;
-               if (abs (delta_width_modifier) != pdwvw->dwm_maxsize)
-                       dwvw_encode_store_bits (psf, pdwvw, 1, 1) ;
-
-               /*  Write delta_width_modifier sign. */
-               if (delta_width_modifier < 0)
-                       dwvw_encode_store_bits (psf, pdwvw, 1, 1) ;
-               if (delta_width_modifier > 0)
-                       dwvw_encode_store_bits (psf, pdwvw, 0, 1) ;
-
-               /* Write delta and delta sign bit. */
-               if (delta_width)
-               {       dwvw_encode_store_bits (psf, pdwvw, delta, abs (delta_width) - 1) ;
-                       dwvw_encode_store_bits (psf, pdwvw, (delta_negative ? 1 : 0), 1) ;
-                       } ;
-
-               /* Write extra bit!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
-               if (extra_bit >= 0)
-                       dwvw_encode_store_bits (psf, pdwvw, extra_bit, 1) ;
-
-               pdwvw->last_sample = ptr [count] >> (32 - pdwvw->bit_width) ;
-               pdwvw->last_delta_width = delta_width ;
-               } ;
-
-       pdwvw->samplecount += count ;
-
-       return count ;
-} /* dwvw_encode_data */
-
-static sf_count_t
-dwvw_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      DWVW_PRIVATE *pdwvw ;
-       BUF_UNION       ubuf ;
-       int             *iptr ;
-       int             k, bufferlen, writecount = 0, count ;
-       sf_count_t      total = 0 ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pdwvw = (DWVW_PRIVATE*) psf->codec_data ;
-
-       iptr = ubuf.ibuf ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : len ;
-               for (k = 0 ; k < writecount ; k++)
-                       iptr [k] = ptr [total + k] << 16 ;
-               count = dwvw_encode_data (psf, pdwvw, iptr, writecount) ;
-
-               total += count ;
-               len -= writecount ;
-               if (count != writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* dwvw_write_s */
-
-static sf_count_t
-dwvw_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      DWVW_PRIVATE *pdwvw ;
-       int                     writecount, count ;
-       sf_count_t      total = 0 ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pdwvw = (DWVW_PRIVATE*) psf->codec_data ;
-
-       while (len > 0)
-       {       writecount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-               count = dwvw_encode_data (psf, pdwvw, ptr, writecount) ;
-
-               total += count ;
-               len -= count ;
-
-               if (count != writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* dwvw_write_i */
-
-static sf_count_t
-dwvw_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      DWVW_PRIVATE *pdwvw ;
-       BUF_UNION       ubuf ;
-       int                     *iptr ;
-       int                     k, bufferlen, writecount = 0, count ;
-       sf_count_t      total = 0 ;
-       float           normfact ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pdwvw = (DWVW_PRIVATE*) psf->codec_data ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFFFFFF) : 1.0 ;
-
-       iptr = ubuf.ibuf ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : len ;
-               for (k = 0 ; k < writecount ; k++)
-                       iptr [k] = lrintf (normfact * ptr [total + k]) ;
-               count = dwvw_encode_data (psf, pdwvw, iptr, writecount) ;
-
-               total += count ;
-               len -= writecount ;
-               if (count != writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* dwvw_write_f */
-
-static sf_count_t
-dwvw_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      DWVW_PRIVATE *pdwvw ;
-       BUF_UNION       ubuf ;
-       int                     *iptr ;
-       int                     k, bufferlen, writecount = 0, count ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pdwvw = (DWVW_PRIVATE*) psf->codec_data ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7FFFFFFF) : 1.0 ;
-
-       iptr = ubuf.ibuf ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : len ;
-               for (k = 0 ; k < writecount ; k++)
-                       iptr [k] = lrint (normfact * ptr [total + k]) ;
-               count = dwvw_encode_data (psf, pdwvw, iptr, writecount) ;
-
-               total += count ;
-               len -= writecount ;
-               if (count != writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* dwvw_write_d */
-
diff --git a/libs/libsndfile/src/file_io.c b/libs/libsndfile/src/file_io.c
deleted file mode 100644 (file)
index 26d3d6d..0000000
+++ /dev/null
@@ -1,1550 +0,0 @@
-/*
-** Copyright (C) 2002-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2003 Ross Bencina <rbencina@iprimus.com.au>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**     The file is split into three sections as follows:
-**             - The top section (USE_WINDOWS_API == 0) for Linux, Unix and MacOSX
-**                     systems (including Cygwin).
-**             - The middle section (USE_WINDOWS_API == 1) for microsoft windows
-**                     (including MinGW) using the native windows API.
-**             - A legacy windows section which attempted to work around grevious
-**                     bugs in microsoft's POSIX implementation.
-*/
-
-/*
-**     The header file sfconfig.h MUST be included before the others to ensure
-**     that large file support is enabled correctly on Unix systems.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#include <string.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <sys/stat.h>
-
-#include "sndfile.h"
-#include "common.h"
-
-#define        SENSIBLE_SIZE   (0x40000000)
-
-/*
-**     Neat solution to the Win32/OS2 binary file flage requirement.
-**     If O_BINARY isn't already defined by the inclusion of the system
-**     headers, set it to zero.
-*/
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-static void psf_log_syserr (SF_PRIVATE *psf, int error) ;
-
-#if (USE_WINDOWS_API == 0)
-
-/*------------------------------------------------------------------------------
-** Win32 stuff at the bottom of the file. Unix and other sensible OSes here.
-*/
-
-static int psf_close_fd (int fd) ;
-static int psf_open_fd (PSF_FILE * pfile) ;
-static sf_count_t psf_get_filelen_fd (int fd) ;
-
-int
-psf_fopen (SF_PRIVATE *psf)
-{
-       psf->error = 0 ;
-       psf->file.filedes = psf_open_fd (&psf->file) ;
-
-       if (psf->file.filedes == - SFE_BAD_OPEN_MODE)
-       {       psf->error = SFE_BAD_OPEN_MODE ;
-               psf->file.filedes = -1 ;
-               return psf->error ;
-               } ;
-
-       if (psf->file.filedes == -1)
-               psf_log_syserr (psf, errno) ;
-
-       return psf->error ;
-} /* psf_fopen */
-
-int
-psf_fclose (SF_PRIVATE *psf)
-{      int retval ;
-
-       if (psf->virtual_io)
-               return 0 ;
-
-       if (psf->file.do_not_close_descriptor)
-       {       psf->file.filedes = -1 ;
-               return 0 ;
-               } ;
-
-       if ((retval = psf_close_fd (psf->file.filedes)) == -1)
-               psf_log_syserr (psf, errno) ;
-
-       psf->file.filedes = -1 ;
-
-       return retval ;
-} /* psf_fclose */
-
-int
-psf_open_rsrc (SF_PRIVATE *psf)
-{
-       if (psf->rsrc.filedes > 0)
-               return 0 ;
-
-       /* Test for MacOSX style resource fork on HPFS or HPFS+ filesystems. */
-       snprintf (psf->rsrc.path.c, sizeof (psf->rsrc.path.c), "%s/..namedfork/rsrc", psf->file.path.c) ;
-       psf->error = SFE_NO_ERROR ;
-       if ((psf->rsrc.filedes = psf_open_fd (&psf->rsrc)) >= 0)
-       {       psf->rsrclength = psf_get_filelen_fd (psf->rsrc.filedes) ;
-               if (psf->rsrclength > 0 || (psf->rsrc.mode & SFM_WRITE))
-                       return SFE_NO_ERROR ;
-               psf_close_fd (psf->rsrc.filedes) ;
-               psf->rsrc.filedes = -1 ;
-               } ;
-
-       if (psf->rsrc.filedes == - SFE_BAD_OPEN_MODE)
-       {       psf->error = SFE_BAD_OPEN_MODE ;
-               return psf->error ;
-               } ;
-
-       /*
-       ** Now try for a resource fork stored as a separate file in the same
-       ** directory, but preceded with a dot underscore.
-       */
-       snprintf (psf->rsrc.path.c, sizeof (psf->rsrc.path.c), "%s._%s", psf->file.dir.c, psf->file.name.c) ;
-       psf->error = SFE_NO_ERROR ;
-       if ((psf->rsrc.filedes = psf_open_fd (&psf->rsrc)) >= 0)
-       {       psf->rsrclength = psf_get_filelen_fd (psf->rsrc.filedes) ;
-               return SFE_NO_ERROR ;
-               } ;
-
-       /*
-       ** Now try for a resource fork stored in a separate file in the
-       ** .AppleDouble/ directory.
-       */
-       snprintf (psf->rsrc.path.c, sizeof (psf->rsrc.path.c), "%s.AppleDouble/%s", psf->file.dir.c, psf->file.name.c) ;
-       psf->error = SFE_NO_ERROR ;
-       if ((psf->rsrc.filedes = psf_open_fd (&psf->rsrc)) >= 0)
-       {       psf->rsrclength = psf_get_filelen_fd (psf->rsrc.filedes) ;
-               return SFE_NO_ERROR ;
-               } ;
-
-       /* No resource file found. */
-       if (psf->rsrc.filedes == -1)
-               psf_log_syserr (psf, errno) ;
-
-       psf->rsrc.filedes = -1 ;
-
-       return psf->error ;
-} /* psf_open_rsrc */
-
-sf_count_t
-psf_get_filelen (SF_PRIVATE *psf)
-{      sf_count_t      filelen ;
-
-       if (psf->virtual_io)
-               return psf->vio.get_filelen (psf->vio_user_data) ;
-
-       filelen = psf_get_filelen_fd (psf->file.filedes) ;
-
-       if (filelen == -1)
-       {       psf_log_syserr (psf, errno) ;
-               return (sf_count_t) -1 ;
-               } ;
-
-       if (filelen == -SFE_BAD_STAT_SIZE)
-       {       psf->error = SFE_BAD_STAT_SIZE ;
-               return (sf_count_t) -1 ;
-               } ;
-
-       switch (psf->file.mode)
-       {       case SFM_WRITE :
-                       filelen = filelen - psf->fileoffset ;
-                       break ;
-
-               case SFM_READ :
-                       if (psf->fileoffset > 0 && psf->filelength > 0)
-                               filelen = psf->filelength ;
-                       break ;
-
-               case SFM_RDWR :
-                       /*
-                       ** Cannot open embedded files SFM_RDWR so we don't need to
-                       ** subtract psf->fileoffset. We already have the answer we
-                       ** need.
-                       */
-                       break ;
-
-               default :
-                       /* Shouldn't be here, so return error. */
-                       filelen = -1 ;
-               } ;
-
-       return filelen ;
-} /* psf_get_filelen */
-
-int
-psf_close_rsrc (SF_PRIVATE *psf)
-{      psf_close_fd (psf->rsrc.filedes) ;
-       psf->rsrc.filedes = -1 ;
-       return 0 ;
-} /* psf_close_rsrc */
-
-int
-psf_set_stdio (SF_PRIVATE *psf)
-{      int     error = 0 ;
-
-       switch (psf->file.mode)
-       {       case SFM_RDWR :
-                               error = SFE_OPEN_PIPE_RDWR ;
-                               break ;
-
-               case SFM_READ :
-                               psf->file.filedes = 0 ;
-                               break ;
-
-               case SFM_WRITE :
-                               psf->file.filedes = 1 ;
-                               break ;
-
-               default :
-                               error = SFE_BAD_OPEN_MODE ;
-                               break ;
-               } ;
-       psf->filelength = 0 ;
-
-       return error ;
-} /* psf_set_stdio */
-
-void
-psf_set_file (SF_PRIVATE *psf, int fd)
-{      psf->file.filedes = fd ;
-} /* psf_set_file */
-
-int
-psf_file_valid (SF_PRIVATE *psf)
-{      return (psf->file.filedes >= 0) ? SF_TRUE : SF_FALSE ;
-} /* psf_set_file */
-
-sf_count_t
-psf_fseek (SF_PRIVATE *psf, sf_count_t offset, int whence)
-{      sf_count_t      current_pos, new_position ;
-
-       if (psf->virtual_io)
-               return psf->vio.seek (offset, whence, psf->vio_user_data) ;
-
-       current_pos = psf_ftell (psf) ;
-
-       switch (whence)
-       {       case SEEK_SET :
-                               offset += psf->fileoffset ;
-                               break ;
-
-               case SEEK_END :
-                               if (psf->file.mode == SFM_WRITE)
-                               {       new_position = lseek (psf->file.filedes, offset, whence) ;
-
-                                       if (new_position < 0)
-                                               psf_log_syserr (psf, errno) ;
-
-                                       return new_position - psf->fileoffset ;
-                                       } ;
-
-                               /* Transform SEEK_END into a SEEK_SET, ie find the file
-                               ** length add the requested offset (should be <= 0) to
-                               ** get the offset wrt the start of file.
-                               */
-                               whence = SEEK_SET ;
-                               offset = lseek (psf->file.filedes, 0, SEEK_END) + offset ;
-                               break ;
-
-               case SEEK_CUR :
-                               /* Translate a SEEK_CUR into a SEEK_SET. */
-                               offset += current_pos ;
-                               whence = SEEK_SET ;
-                               break ;
-
-               default :
-                               /* We really should not be here. */
-                               psf_log_printf (psf, "psf_fseek : whence is %d *****.\n", whence) ;
-                               return 0 ;
-               } ;
-
-       if (current_pos != offset)
-               new_position = lseek (psf->file.filedes, offset, whence) ;
-       else
-               new_position = offset ;
-
-       if (new_position < 0)
-               psf_log_syserr (psf, errno) ;
-
-       new_position -= psf->fileoffset ;
-
-       return new_position ;
-} /* psf_fseek */
-
-sf_count_t
-psf_fread (void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf)
-{      sf_count_t total = 0 ;
-       ssize_t count ;
-
-       if (psf->virtual_io)
-               return psf->vio.read (ptr, bytes*items, psf->vio_user_data) / bytes ;
-
-       items *= bytes ;
-
-       /* Do this check after the multiplication above. */
-       if (items <= 0)
-               return 0 ;
-
-       while (items > 0)
-       {       /* Break the read down to a sensible size. */
-               count = (items > SENSIBLE_SIZE) ? SENSIBLE_SIZE : (ssize_t) items ;
-
-               count = read (psf->file.filedes, ((char*) ptr) + total, (size_t) count) ;
-
-               if (count == -1)
-               {       if (errno == EINTR)
-                               continue ;
-
-                       psf_log_syserr (psf, errno) ;
-                       break ;
-                       } ;
-
-               if (count == 0)
-                       break ;
-
-               total += count ;
-               items -= count ;
-               } ;
-
-       if (psf->is_pipe)
-               psf->pipeoffset += total ;
-
-       return total / bytes ;
-} /* psf_fread */
-
-sf_count_t
-psf_fwrite (const void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf)
-{      sf_count_t total = 0 ;
-       ssize_t count ;
-
-       if (psf->virtual_io)
-               return psf->vio.write (ptr, bytes*items, psf->vio_user_data) / bytes ;
-
-       items *= bytes ;
-
-       /* Do this check after the multiplication above. */
-       if (items <= 0)
-               return 0 ;
-
-       while (items > 0)
-       {       /* Break the writes down to a sensible size. */
-               count = (items > SENSIBLE_SIZE) ? SENSIBLE_SIZE : items ;
-
-               count = write (psf->file.filedes, ((const char*) ptr) + total, count) ;
-
-               if (count == -1)
-               {       if (errno == EINTR)
-                               continue ;
-
-                       psf_log_syserr (psf, errno) ;
-                       break ;
-                       } ;
-
-               if (count == 0)
-                       break ;
-
-               total += count ;
-               items -= count ;
-               } ;
-
-       if (psf->is_pipe)
-               psf->pipeoffset += total ;
-
-       return total / bytes ;
-} /* psf_fwrite */
-
-sf_count_t
-psf_ftell (SF_PRIVATE *psf)
-{      sf_count_t pos ;
-
-       if (psf->virtual_io)
-               return psf->vio.tell (psf->vio_user_data) ;
-
-       if (psf->is_pipe)
-               return psf->pipeoffset ;
-
-       pos = lseek (psf->file.filedes, 0, SEEK_CUR) ;
-
-       if (pos == ((sf_count_t) -1))
-       {       psf_log_syserr (psf, errno) ;
-               return -1 ;
-               } ;
-
-       return pos - psf->fileoffset ;
-} /* psf_ftell */
-
-static int
-psf_close_fd (int fd)
-{      int retval ;
-
-       if (fd < 0)
-               return 0 ;
-
-       while ((retval = close (fd)) == -1 && errno == EINTR)
-               /* Do nothing. */ ;
-
-       return retval ;
-} /* psf_close_fd */
-
-sf_count_t
-psf_fgets (char *buffer, sf_count_t bufsize, SF_PRIVATE *psf)
-{      sf_count_t      k = 0 ;
-       sf_count_t              count ;
-
-       while (k < bufsize - 1)
-       {       count = read (psf->file.filedes, &(buffer [k]), 1) ;
-
-               if (count == -1)
-               {       if (errno == EINTR)
-                               continue ;
-
-                       psf_log_syserr (psf, errno) ;
-                       break ;
-                       } ;
-
-               if (count == 0 || buffer [k++] == '\n')
-                       break ;
-               } ;
-
-       buffer [k] = 0 ;
-
-       return k ;
-} /* psf_fgets */
-
-int
-psf_is_pipe (SF_PRIVATE *psf)
-{      struct stat statbuf ;
-
-       if (psf->virtual_io)
-               return SF_FALSE ;
-
-       if (fstat (psf->file.filedes, &statbuf) == -1)
-       {       psf_log_syserr (psf, errno) ;
-               /* Default to maximum safety. */
-               return SF_TRUE ;
-               } ;
-
-       if (S_ISFIFO (statbuf.st_mode) || S_ISSOCK (statbuf.st_mode))
-               return SF_TRUE ;
-
-       return SF_FALSE ;
-} /* psf_is_pipe */
-
-static sf_count_t
-psf_get_filelen_fd (int fd)
-{
-#if (SIZEOF_OFF_T == 4 && SIZEOF_SF_COUNT_T == 8 && HAVE_FSTAT64)
-       struct stat64 statbuf ;
-
-       if (fstat64 (fd, &statbuf) == -1)
-               return (sf_count_t) -1 ;
-
-       return statbuf.st_size ;
-#else
-       struct stat statbuf ;
-
-       if (fstat (fd, &statbuf) == -1)
-               return (sf_count_t) -1 ;
-
-       return statbuf.st_size ;
-#endif
-} /* psf_get_filelen_fd */
-
-int
-psf_ftruncate (SF_PRIVATE *psf, sf_count_t len)
-{      int retval ;
-
-       /* Returns 0 on success, non-zero on failure. */
-       if (len < 0)
-               return -1 ;
-
-       if ((sizeof (off_t) < sizeof (sf_count_t)) && len > 0x7FFFFFFF)
-               return -1 ;
-
-       retval = ftruncate (psf->file.filedes, len) ;
-
-       if (retval == -1)
-               psf_log_syserr (psf, errno) ;
-
-       return retval ;
-} /* psf_ftruncate */
-
-void
-psf_init_files (SF_PRIVATE *psf)
-{      psf->file.filedes = -1 ;
-       psf->rsrc.filedes = -1 ;
-       psf->file.savedes = -1 ;
-} /* psf_init_files */
-
-void
-psf_use_rsrc (SF_PRIVATE *psf, int on_off)
-{
-       if (on_off)
-       {       if (psf->file.filedes != psf->rsrc.filedes)
-               {       psf->file.savedes = psf->file.filedes ;
-                       psf->file.filedes = psf->rsrc.filedes ;
-                       } ;
-               }
-       else if (psf->file.filedes == psf->rsrc.filedes)
-               psf->file.filedes = psf->file.savedes ;
-
-       return ;
-} /* psf_use_rsrc */
-
-static int
-psf_open_fd (PSF_FILE * pfile)
-{      int fd, oflag, mode ;
-
-       /*
-       ** Sanity check. If everything is OK, this test and the printfs will
-       ** be optimised out. This is meant to catch the problems caused by
-       ** "sfconfig.h" being included after <stdio.h>.
-       */
-       if (sizeof (sf_count_t) != 8)
-       {       puts ("\n\n*** Fatal error : sizeof (sf_count_t) != 8") ;
-               puts ("*** This means that libsndfile was not configured correctly.\n") ;
-               exit (1) ;
-               } ;
-
-       switch (pfile->mode)
-       {       case SFM_READ :
-                               oflag = O_RDONLY | O_BINARY ;
-                               mode = 0 ;
-                               break ;
-
-               case SFM_WRITE :
-                               oflag = O_WRONLY | O_CREAT | O_TRUNC | O_BINARY ;
-                               mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ;
-                               break ;
-
-               case SFM_RDWR :
-                               oflag = O_RDWR | O_CREAT | O_BINARY ;
-                               mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ;
-                               break ;
-
-               default :
-                               return - SFE_BAD_OPEN_MODE ;
-                               break ;
-               } ;
-
-       if (mode == 0)
-               fd = open (pfile->path.c, oflag) ;
-       else
-               fd = open (pfile->path.c, oflag, mode) ;
-
-       return fd ;
-} /* psf_open_fd */
-
-static void
-psf_log_syserr (SF_PRIVATE *psf, int error)
-{
-       /* Only log an error if no error has been set yet. */
-       if (psf->error == 0)
-       {       psf->error = SFE_SYSTEM ;
-               snprintf (psf->syserr, sizeof (psf->syserr), "System error : %s.", strerror (error)) ;
-               } ;
-
-       return ;
-} /* psf_log_syserr */
-
-void
-psf_fsync (SF_PRIVATE *psf)
-{
-#if HAVE_FSYNC
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-               fsync (psf->file.filedes) ;
-#else
-       psf = NULL ;
-#endif
-} /* psf_fsync */
-
-#elif  USE_WINDOWS_API
-
-/* Win32 file i/o functions implemented using native Win32 API */
-
-#include <windows.h>
-#include <io.h>
-
-static int psf_close_handle (HANDLE handle) ;
-static HANDLE psf_open_handle (PSF_FILE * pfile) ;
-static sf_count_t psf_get_filelen_handle (HANDLE handle) ;
-
-/* USE_WINDOWS_API */ int
-psf_fopen (SF_PRIVATE *psf)
-{
-       psf->error = 0 ;
-       psf->file.handle = psf_open_handle (&psf->file) ;
-
-       if (psf->file.handle == NULL)
-               psf_log_syserr (psf, GetLastError ()) ;
-
-       return psf->error ;
-} /* psf_fopen */
-
-/* USE_WINDOWS_API */ int
-psf_fclose (SF_PRIVATE *psf)
-{      int retval ;
-
-       if (psf->virtual_io)
-               return 0 ;
-
-       if (psf->file.do_not_close_descriptor)
-       {       psf->file.handle = NULL ;
-               return 0 ;
-               } ;
-
-       if ((retval = psf_close_handle (psf->file.handle)) == -1)
-               psf_log_syserr (psf, GetLastError ()) ;
-
-       psf->file.handle = NULL ;
-
-       return retval ;
-} /* psf_fclose */
-
-/* USE_WINDOWS_API */ int
-psf_open_rsrc (SF_PRIVATE *psf)
-{
-       if (psf->rsrc.handle != NULL)
-               return 0 ;
-
-       /* Test for MacOSX style resource fork on HPFS or HPFS+ filesystems. */
-       snprintf (psf->rsrc.path.c, sizeof (psf->rsrc.path.c), "%s/rsrc", psf->file.path.c) ;
-       psf->error = SFE_NO_ERROR ;
-       if ((psf->rsrc.handle = psf_open_handle (&psf->rsrc)) != NULL)
-       {       psf->rsrclength = psf_get_filelen_handle (psf->rsrc.handle) ;
-               return SFE_NO_ERROR ;
-               } ;
-
-       /*
-       ** Now try for a resource fork stored as a separate file in the same
-       ** directory, but preceded with a dot underscore.
-       */
-       snprintf (psf->rsrc.path.c, sizeof (psf->rsrc.path.c), "%s._%s", psf->file.dir.c, psf->file.name.c) ;
-       psf->error = SFE_NO_ERROR ;
-       if ((psf->rsrc.handle = psf_open_handle (&psf->rsrc)) != NULL)
-       {       psf->rsrclength = psf_get_filelen_handle (psf->rsrc.handle) ;
-               return SFE_NO_ERROR ;
-               } ;
-
-       /*
-       ** Now try for a resource fork stored in a separate file in the
-       ** .AppleDouble/ directory.
-       */
-       snprintf (psf->rsrc.path.c, sizeof (psf->rsrc.path.c), "%s.AppleDouble/%s", psf->file.dir.c, psf->file.name.c) ;
-       psf->error = SFE_NO_ERROR ;
-       if ((psf->rsrc.handle = psf_open_handle (&psf->rsrc)) != NULL)
-       {       psf->rsrclength = psf_get_filelen_handle (psf->rsrc.handle) ;
-               return SFE_NO_ERROR ;
-               } ;
-
-       /* No resource file found. */
-       if (psf->rsrc.handle == NULL)
-               psf_log_syserr (psf, GetLastError ()) ;
-
-       psf->rsrc.handle = NULL ;
-
-       return psf->error ;
-} /* psf_open_rsrc */
-
-/* USE_WINDOWS_API */ sf_count_t
-psf_get_filelen (SF_PRIVATE *psf)
-{      sf_count_t      filelen ;
-
-       if (psf->virtual_io)
-               return psf->vio.get_filelen (psf->vio_user_data) ;
-
-       filelen = psf_get_filelen_handle (psf->file.handle) ;
-
-       if (filelen == -1)
-       {       psf_log_syserr (psf, errno) ;
-               return (sf_count_t) -1 ;
-               } ;
-
-       if (filelen == -SFE_BAD_STAT_SIZE)
-       {       psf->error = SFE_BAD_STAT_SIZE ;
-               return (sf_count_t) -1 ;
-               } ;
-
-       switch (psf->file.mode)
-       {       case SFM_WRITE :
-                       filelen = filelen - psf->fileoffset ;
-                       break ;
-
-               case SFM_READ :
-                       if (psf->fileoffset > 0 && psf->filelength > 0)
-                               filelen = psf->filelength ;
-                       break ;
-
-               case SFM_RDWR :
-                       /*
-                       ** Cannot open embedded files SFM_RDWR so we don't need to
-                       ** subtract psf->fileoffset. We already have the answer we
-                       ** need.
-                       */
-                       break ;
-
-               default :
-                       /* Shouldn't be here, so return error. */
-                       filelen = -1 ;
-               } ;
-
-       return filelen ;
-} /* psf_get_filelen */
-
-/* USE_WINDOWS_API */ void
-psf_init_files (SF_PRIVATE *psf)
-{      psf->file.handle = NULL ;
-       psf->rsrc.handle = NULL ;
-       psf->file.hsaved = NULL ;
-} /* psf_init_files */
-
-/* USE_WINDOWS_API */ void
-psf_use_rsrc (SF_PRIVATE *psf, int on_off)
-{
-       if (on_off)
-       {       if (psf->file.handle != psf->rsrc.handle)
-               {       psf->file.hsaved = psf->file.handle ;
-                       psf->file.handle = psf->rsrc.handle ;
-                       } ;
-               }
-       else if (psf->file.handle == psf->rsrc.handle)
-               psf->file.handle = psf->file.hsaved ;
-
-       return ;
-} /* psf_use_rsrc */
-
-/* USE_WINDOWS_API */ static HANDLE
-psf_open_handle (PSF_FILE * pfile)
-{      DWORD dwDesiredAccess ;
-       DWORD dwShareMode ;
-       DWORD dwCreationDistribution ;
-       HANDLE handle ;
-
-       switch (pfile->mode)
-       {       case SFM_READ :
-                               dwDesiredAccess = GENERIC_READ ;
-                               dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE ;
-                               dwCreationDistribution = OPEN_EXISTING ;
-                               break ;
-
-               case SFM_WRITE :
-                               dwDesiredAccess = GENERIC_WRITE ;
-                               dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE ;
-                               dwCreationDistribution = CREATE_ALWAYS ;
-                               break ;
-
-               case SFM_RDWR :
-                               dwDesiredAccess = GENERIC_READ | GENERIC_WRITE ;
-                               dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE ;
-                               dwCreationDistribution = OPEN_ALWAYS ;
-                               break ;
-
-               default :
-                               return NULL ;
-               } ;
-
-       if (pfile->use_wchar)
-               handle = CreateFileW (
-                                       pfile->path.wc,                         /* pointer to name of the file */
-                                       dwDesiredAccess,                        /* access (read-write) mode */
-                                       dwShareMode,                            /* share mode */
-                                       0,                                                      /* pointer to security attributes */
-                                       dwCreationDistribution,         /* how to create */
-                                       FILE_ATTRIBUTE_NORMAL,          /* file attributes (could use FILE_FLAG_SEQUENTIAL_SCAN) */
-                                       NULL                                            /* handle to file with attributes to copy */
-                                       ) ;
-       else
-               handle = CreateFile (
-                                       pfile->path.c,                          /* pointer to name of the file */
-                                       dwDesiredAccess,                        /* access (read-write) mode */
-                                       dwShareMode,                            /* share mode */
-                                       0,                                                      /* pointer to security attributes */
-                                       dwCreationDistribution,         /* how to create */
-                                       FILE_ATTRIBUTE_NORMAL,          /* file attributes (could use FILE_FLAG_SEQUENTIAL_SCAN) */
-                                       NULL                                            /* handle to file with attributes to copy */
-                                       ) ;
-
-       if (handle == INVALID_HANDLE_VALUE)
-               return NULL ;
-
-       return handle ;
-} /* psf_open_handle */
-
-/* USE_WINDOWS_API */ static void
-psf_log_syserr (SF_PRIVATE *psf, int error)
-{      LPVOID lpMsgBuf ;
-
-       /* Only log an error if no error has been set yet. */
-       if (psf->error == 0)
-       {       psf->error = SFE_SYSTEM ;
-
-               FormatMessage (
-                       FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
-                       NULL,
-                       error,
-                       MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
-                       (LPTSTR) &lpMsgBuf,
-                       0,
-                       NULL
-                       ) ;
-
-               snprintf (psf->syserr, sizeof (psf->syserr), "System error : %s", (char*) lpMsgBuf) ;
-               LocalFree (lpMsgBuf) ;
-               } ;
-
-       return ;
-} /* psf_log_syserr */
-
-
-/* USE_WINDOWS_API */ int
-psf_close_rsrc (SF_PRIVATE *psf)
-{      psf_close_handle (psf->rsrc.handle) ;
-       psf->rsrc.handle = NULL ;
-       return 0 ;
-} /* psf_close_rsrc */
-
-
-/* USE_WINDOWS_API */ int
-psf_set_stdio (SF_PRIVATE *psf)
-{      HANDLE  handle = NULL ;
-       int     error = 0 ;
-
-       switch (psf->file.mode)
-       {       case SFM_RDWR :
-                               error = SFE_OPEN_PIPE_RDWR ;
-                               break ;
-
-               case SFM_READ :
-                               handle = GetStdHandle (STD_INPUT_HANDLE) ;
-                               psf->file.do_not_close_descriptor = 1 ;
-                               break ;
-
-               case SFM_WRITE :
-                               handle = GetStdHandle (STD_OUTPUT_HANDLE) ;
-                               psf->file.do_not_close_descriptor = 1 ;
-                               break ;
-
-               default :
-                               error = SFE_BAD_OPEN_MODE ;
-                               break ;
-               } ;
-
-       psf->file.handle = handle ;
-       psf->filelength = 0 ;
-
-       return error ;
-} /* psf_set_stdio */
-
-/* USE_WINDOWS_API */ void
-psf_set_file (SF_PRIVATE *psf, int fd)
-{      HANDLE handle ;
-       intptr_t osfhandle ;
-
-       osfhandle = _get_osfhandle (fd) ;
-       handle = (HANDLE) osfhandle ;
-
-       psf->file.handle = handle ;
-} /* psf_set_file */
-
-/* USE_WINDOWS_API */ int
-psf_file_valid (SF_PRIVATE *psf)
-{      if (psf->file.handle == NULL)
-               return SF_FALSE ;
-       if (psf->file.handle == INVALID_HANDLE_VALUE)
-               return SF_FALSE ;
-       return SF_TRUE ;
-} /* psf_set_file */
-
-/* USE_WINDOWS_API */ sf_count_t
-psf_fseek (SF_PRIVATE *psf, sf_count_t offset, int whence)
-{      sf_count_t new_position ;
-       LONG lDistanceToMove, lDistanceToMoveHigh ;
-       DWORD dwMoveMethod ;
-       DWORD dwResult, dwError ;
-
-       if (psf->virtual_io)
-               return psf->vio.seek (offset, whence, psf->vio_user_data) ;
-
-       switch (whence)
-       {       case SEEK_SET :
-                               offset += psf->fileoffset ;
-                               dwMoveMethod = FILE_BEGIN ;
-                               break ;
-
-               case SEEK_END :
-                               dwMoveMethod = FILE_END ;
-                               break ;
-
-               default :
-                               dwMoveMethod = FILE_CURRENT ;
-                               break ;
-               } ;
-
-       lDistanceToMove = (DWORD) (offset & 0xFFFFFFFF) ;
-       lDistanceToMoveHigh = (DWORD) ((offset >> 32) & 0xFFFFFFFF) ;
-
-       dwResult = SetFilePointer (psf->file.handle, lDistanceToMove, &lDistanceToMoveHigh, dwMoveMethod) ;
-
-       if (dwResult == 0xFFFFFFFF)
-               dwError = GetLastError () ;
-       else
-               dwError = NO_ERROR ;
-
-       if (dwError != NO_ERROR)
-       {       psf_log_syserr (psf, dwError) ;
-               return -1 ;
-               } ;
-
-       new_position = (dwResult + ((__int64) lDistanceToMoveHigh << 32)) - psf->fileoffset ;
-
-       return new_position ;
-} /* psf_fseek */
-
-/* USE_WINDOWS_API */ sf_count_t
-psf_fread (void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf)
-{      sf_count_t total = 0 ;
-       ssize_t count ;
-       DWORD dwNumberOfBytesRead ;
-
-       if (psf->virtual_io)
-               return psf->vio.read (ptr, bytes*items, psf->vio_user_data) / bytes ;
-
-       items *= bytes ;
-
-       /* Do this check after the multiplication above. */
-       if (items <= 0)
-               return 0 ;
-
-       while (items > 0)
-       {       /* Break the writes down to a sensible size. */
-               count = (items > SENSIBLE_SIZE) ? SENSIBLE_SIZE : (ssize_t) items ;
-
-               if (ReadFile (psf->file.handle, ((char*) ptr) + total, count, &dwNumberOfBytesRead, 0) == 0)
-               {       psf_log_syserr (psf, GetLastError ()) ;
-                       break ;
-                       }
-               else
-                       count = dwNumberOfBytesRead ;
-
-               if (count == 0)
-                       break ;
-
-               total += count ;
-               items -= count ;
-               } ;
-
-       if (psf->is_pipe)
-               psf->pipeoffset += total ;
-
-       return total / bytes ;
-} /* psf_fread */
-
-/* USE_WINDOWS_API */ sf_count_t
-psf_fwrite (const void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf)
-{      sf_count_t total = 0 ;
-       ssize_t count ;
-       DWORD dwNumberOfBytesWritten ;
-
-       if (psf->virtual_io)
-               return psf->vio.write (ptr, bytes * items, psf->vio_user_data) / bytes ;
-
-       items *= bytes ;
-
-       /* Do this check after the multiplication above. */
-       if (items <= 0)
-               return 0 ;
-
-       while (items > 0)
-       {       /* Break the writes down to a sensible size. */
-               count = (items > SENSIBLE_SIZE) ? SENSIBLE_SIZE : (ssize_t) items ;
-
-               if (WriteFile (psf->file.handle, ((const char*) ptr) + total, count, &dwNumberOfBytesWritten, 0) == 0)
-               {       psf_log_syserr (psf, GetLastError ()) ;
-                       break ;
-                       }
-               else
-                       count = dwNumberOfBytesWritten ;
-
-               if (count == 0)
-                       break ;
-
-               total += count ;
-               items -= count ;
-               } ;
-
-       if (psf->is_pipe)
-               psf->pipeoffset += total ;
-
-       return total / bytes ;
-} /* psf_fwrite */
-
-/* USE_WINDOWS_API */ sf_count_t
-psf_ftell (SF_PRIVATE *psf)
-{      sf_count_t pos ;
-       LONG lDistanceToMoveLow, lDistanceToMoveHigh ;
-       DWORD dwResult, dwError ;
-
-       if (psf->virtual_io)
-               return psf->vio.tell (psf->vio_user_data) ;
-
-       if (psf->is_pipe)
-               return psf->pipeoffset ;
-
-       lDistanceToMoveLow = 0 ;
-       lDistanceToMoveHigh = 0 ;
-
-       dwResult = SetFilePointer (psf->file.handle, lDistanceToMoveLow, &lDistanceToMoveHigh, FILE_CURRENT) ;
-
-       if (dwResult == 0xFFFFFFFF)
-               dwError = GetLastError () ;
-       else
-               dwError = NO_ERROR ;
-
-       if (dwError != NO_ERROR)
-       {       psf_log_syserr (psf, dwError) ;
-               return -1 ;
-               } ;
-
-       pos = (dwResult + ((__int64) lDistanceToMoveHigh << 32)) ;
-
-       return pos - psf->fileoffset ;
-} /* psf_ftell */
-
-/* USE_WINDOWS_API */ static int
-psf_close_handle (HANDLE handle)
-{      if (handle == NULL)
-               return 0 ;
-
-       if (CloseHandle (handle) == 0)
-               return -1 ;
-
-       return 0 ;
-} /* psf_close_handle */
-
-/* USE_WINDOWS_API */ sf_count_t
-psf_fgets (char *buffer, sf_count_t bufsize, SF_PRIVATE *psf)
-{      sf_count_t k = 0 ;
-       sf_count_t count ;
-       DWORD dwNumberOfBytesRead ;
-
-       while (k < bufsize - 1)
-       {       if (ReadFile (psf->file.handle, &(buffer [k]), 1, &dwNumberOfBytesRead, 0) == 0)
-               {       psf_log_syserr (psf, GetLastError ()) ;
-                       break ;
-                       }
-               else
-               {       count = dwNumberOfBytesRead ;
-                       /* note that we only check for '\n' not other line endings such as CRLF */
-                       if (count == 0 || buffer [k++] == '\n')
-                               break ;
-                       } ;
-               } ;
-
-       buffer [k] = 0 ;
-
-       return k ;
-} /* psf_fgets */
-
-/* USE_WINDOWS_API */ int
-psf_is_pipe (SF_PRIVATE *psf)
-{
-       if (psf->virtual_io)
-               return SF_FALSE ;
-
-       if (GetFileType (psf->file.handle) == FILE_TYPE_DISK)
-               return SF_FALSE ;
-
-       /* Default to maximum safety. */
-       return SF_TRUE ;
-} /* psf_is_pipe */
-
-/* USE_WINDOWS_API */ sf_count_t
-psf_get_filelen_handle (HANDLE handle)
-{      sf_count_t filelen ;
-       DWORD dwFileSizeLow, dwFileSizeHigh, dwError = NO_ERROR ;
-
-       dwFileSizeLow = GetFileSize (handle, &dwFileSizeHigh) ;
-
-       if (dwFileSizeLow == 0xFFFFFFFF)
-               dwError = GetLastError () ;
-
-       if (dwError != NO_ERROR)
-               return (sf_count_t) -1 ;
-
-       filelen = dwFileSizeLow + ((__int64) dwFileSizeHigh << 32) ;
-
-       return filelen ;
-} /* psf_get_filelen_handle */
-
-/* USE_WINDOWS_API */ void
-psf_fsync (SF_PRIVATE *psf)
-{      FlushFileBuffers (psf->file.handle) ;
-} /* psf_fsync */
-
-
-/* USE_WINDOWS_API */ int
-psf_ftruncate (SF_PRIVATE *psf, sf_count_t len)
-{      int retval = 0 ;
-       LONG lDistanceToMoveLow, lDistanceToMoveHigh ;
-       DWORD dwResult, dwError = NO_ERROR ;
-
-       /* This implementation trashes the current file position.
-       ** should it save and restore it? what if the current position is past
-       ** the new end of file?
-       */
-
-       /* Returns 0 on success, non-zero on failure. */
-       if (len < 0)
-               return 1 ;
-
-       lDistanceToMoveLow = (DWORD) (len & 0xFFFFFFFF) ;
-       lDistanceToMoveHigh = (DWORD) ((len >> 32) & 0xFFFFFFFF) ;
-
-       dwResult = SetFilePointer (psf->file.handle, lDistanceToMoveLow, &lDistanceToMoveHigh, FILE_BEGIN) ;
-
-       if (dwResult == 0xFFFFFFFF)
-               dwError = GetLastError () ;
-
-       if (dwError != NO_ERROR)
-       {       retval = -1 ;
-               psf_log_syserr (psf, dwError) ;
-               }
-       else
-       {       /* Note: when SetEndOfFile is used to extend a file, the contents of the
-               ** new portion of the file is undefined. This is unlike chsize(),
-               ** which guarantees that the new portion of the file will be zeroed.
-               ** Not sure if this is important or not.
-               */
-               if (SetEndOfFile (psf->file.handle) == 0)
-               {       retval = -1 ;
-                       psf_log_syserr (psf, GetLastError ()) ;
-                       } ;
-               } ;
-
-       return retval ;
-} /* psf_ftruncate */
-
-
-#else
-/* Win32 file i/o functions implemented using Unix-style file i/o API */
-
-/* Win32 has a 64 file offset seek function:
-**
-**             __int64 _lseeki64 (int handle, __int64 offset, int origin) ;
-**
-** It also has a 64 bit fstat function:
-**
-**             int fstati64 (int, struct _stati64) ;
-**
-** but the fscking thing doesn't work!!!!! The file size parameter returned
-** by this function is only valid up until more data is written at the end of
-** the file. That makes this function completely 100% useless.
-*/
-
-#include <io.h>
-#include <direct.h>
-
-/* Win32 */ int
-psf_fopen (SF_PRIVATE *psf, const char *pathname, int open_mode)
-{      int oflag, mode ;
-
-       switch (open_mode)
-       {       case SFM_READ :
-                               oflag = O_RDONLY | O_BINARY ;
-                               mode = 0 ;
-                               break ;
-
-               case SFM_WRITE :
-                               oflag = O_WRONLY | O_CREAT | O_TRUNC | O_BINARY ;
-                               mode = S_IRUSR | S_IWUSR | S_IRGRP ;
-                               break ;
-
-               case SFM_RDWR :
-                               oflag = O_RDWR | O_CREAT | O_BINARY ;
-                               mode = S_IRUSR | S_IWUSR | S_IRGRP ;
-                               break ;
-
-               default :
-                               psf->error = SFE_BAD_OPEN_MODE ;
-                               return -1 ;
-                               break ;
-               } ;
-
-       if (mode == 0)
-               psf->file.filedes = open (pathname, oflag) ;
-       else
-               psf->file.filedes = open (pathname, oflag, mode) ;
-
-       if (psf->file.filedes == -1)
-               psf_log_syserr (psf, errno) ;
-
-       return psf->file.filedes ;
-} /* psf_fopen */
-
-/* Win32 */ sf_count_t
-psf_fseek (SF_PRIVATE *psf, sf_count_t offset, int whence)
-{      sf_count_t      new_position ;
-
-       if (psf->virtual_io)
-               return psf->vio.seek (offset, whence, psf->vio_user_data) ;
-
-       switch (whence)
-       {       case SEEK_SET :
-                               offset += psf->fileoffset ;
-                               break ;
-
-               case SEEK_END :
-                               if (psf->file.mode == SFM_WRITE)
-                               {       new_position = _lseeki64 (psf->file.filedes, offset, whence) ;
-
-                                       if (new_position < 0)
-                                               psf_log_syserr (psf, errno) ;
-
-                                       return new_position - psf->fileoffset ;
-                                       } ;
-
-                               /* Transform SEEK_END into a SEEK_SET, ie find the file
-                               ** length add the requested offset (should be <= 0) to
-                               ** get the offset wrt the start of file.
-                               */
-                               whence = SEEK_SET ;
-                               offset = _lseeki64 (psf->file.filedes, 0, SEEK_END) + offset ;
-                               break ;
-
-               default :
-                               /* No need to do anything about SEEK_CUR. */
-                               break ;
-               } ;
-
-       /*
-       ** Bypass weird Win32-ism if necessary.
-       ** _lseeki64() returns an "invalid parameter" error if called with the
-       ** offset == 0 and whence == SEEK_CUR.
-       *** Use the _telli64() function instead.
-       */
-       if (offset == 0 && whence == SEEK_CUR)
-               new_position = _telli64 (psf->file.filedes) ;
-       else
-               new_position = _lseeki64 (psf->file.filedes, offset, whence) ;
-
-       if (new_position < 0)
-               psf_log_syserr (psf, errno) ;
-
-       new_position -= psf->fileoffset ;
-
-       return new_position ;
-} /* psf_fseek */
-
-/* Win32 */ sf_count_t
-psf_fread (void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf)
-{      sf_count_t total = 0 ;
-       ssize_t count ;
-
-       if (psf->virtual_io)
-               return psf->vio.read (ptr, bytes*items, psf->vio_user_data) / bytes ;
-
-       items *= bytes ;
-
-       /* Do this check after the multiplication above. */
-       if (items <= 0)
-               return 0 ;
-
-       while (items > 0)
-       {       /* Break the writes down to a sensible size. */
-               count = (items > SENSIBLE_SIZE) ? SENSIBLE_SIZE : (ssize_t) items ;
-
-               count = read (psf->file.filedes, ((char*) ptr) + total, (size_t) count) ;
-
-               if (count == -1)
-               {       if (errno == EINTR)
-                               continue ;
-
-                       psf_log_syserr (psf, errno) ;
-                       break ;
-                       } ;
-
-               if (count == 0)
-                       break ;
-
-               total += count ;
-               items -= count ;
-               } ;
-
-       return total / bytes ;
-} /* psf_fread */
-
-/* Win32 */ sf_count_t
-psf_fwrite (const void *ptr, sf_count_t bytes, sf_count_t items, SF_PRIVATE *psf)
-{      sf_count_t total = 0 ;
-       ssize_t count ;
-
-       if (psf->virtual_io)
-               return psf->vio.write (ptr, bytes*items, psf->vio_user_data) / bytes ;
-
-       items *= bytes ;
-
-       /* Do this check after the multiplication above. */
-       if (items <= 0)
-               return 0 ;
-
-       while (items > 0)
-       {       /* Break the writes down to a sensible size. */
-               count = (items > SENSIBLE_SIZE) ? SENSIBLE_SIZE : items ;
-
-               count = write (psf->file.filedes, ((const char*) ptr) + total, count) ;
-
-               if (count == -1)
-               {       if (errno == EINTR)
-                               continue ;
-
-                       psf_log_syserr (psf, errno) ;
-                       break ;
-                       } ;
-
-               if (count == 0)
-                       break ;
-
-               total += count ;
-               items -= count ;
-               } ;
-
-       return total / bytes ;
-} /* psf_fwrite */
-
-/* Win32 */ sf_count_t
-psf_ftell (SF_PRIVATE *psf)
-{      sf_count_t pos ;
-
-       if (psf->virtual_io)
-               return psf->vio.tell (psf->vio_user_data) ;
-
-       pos = _telli64 (psf->file.filedes) ;
-
-       if (pos == ((sf_count_t) -1))
-       {       psf_log_syserr (psf, errno) ;
-               return -1 ;
-               } ;
-
-       return pos - psf->fileoffset ;
-} /* psf_ftell */
-
-/* Win32 */ int
-psf_fclose (SF_PRIVATE *psf)
-{      int retval ;
-
-       while ((retval = close (psf->file.filedes)) == -1 && errno == EINTR)
-               /* Do nothing. */ ;
-
-       if (retval == -1)
-               psf_log_syserr (psf, errno) ;
-
-       psf->file.filedes = -1 ;
-
-       return retval ;
-} /* psf_fclose */
-
-/* Win32 */ sf_count_t
-psf_fgets (char *buffer, sf_count_t bufsize, SF_PRIVATE *psf)
-{      sf_count_t      k = 0 ;
-       sf_count_t      count ;
-
-       while (k < bufsize - 1)
-       {       count = read (psf->file.filedes, &(buffer [k]), 1) ;
-
-               if (count == -1)
-               {       if (errno == EINTR)
-                               continue ;
-
-                       psf_log_syserr (psf, errno) ;
-                       break ;
-                       } ;
-
-               if (count == 0 || buffer [k++] == '\n')
-                       break ;
-               } ;
-
-       buffer [k] = 0 ;
-
-       return k ;
-} /* psf_fgets */
-
-/* Win32 */ int
-psf_is_pipe (SF_PRIVATE *psf)
-{      struct stat statbuf ;
-
-       if (psf->virtual_io)
-               return SF_FALSE ;
-
-       /* Not sure if this works. */
-       if (fstat (psf->file.filedes, &statbuf) == -1)
-       {       psf_log_syserr (psf, errno) ;
-               /* Default to maximum safety. */
-               return SF_TRUE ;
-               } ;
-
-       /* These macros are defined in Win32/unistd.h. */
-       if (S_ISFIFO (statbuf.st_mode) || S_ISSOCK (statbuf.st_mode))
-               return SF_TRUE ;
-
-       return SF_FALSE ;
-} /* psf_checkpipe */
-
-/* Win32 */ sf_count_t
-psf_get_filelen (SF_PRIVATE *psf)
-{
-#if 0
-       /*
-       ** Windoze is SOOOOO FUCKED!!!!!!!
-       ** This code should work but doesn't. Why?
-       ** Code below does work.
-       */
-       struct _stati64 statbuf ;
-
-       if (_fstati64 (psf->file.filedes, &statbuf))
-       {       psf_log_syserr (psf, errno) ;
-               return (sf_count_t) -1 ;
-               } ;
-
-       return statbuf.st_size ;
-#else
-       sf_count_t current, filelen ;
-
-       if (psf->virtual_io)
-               return psf->vio.get_filelen (psf->vio_user_data) ;
-
-       if ((current = _telli64 (psf->file.filedes)) < 0)
-       {       psf_log_syserr (psf, errno) ;
-               return (sf_count_t) -1 ;
-               } ;
-
-       /*
-       ** Lets face it, windoze if FUBAR!!!
-       **
-       ** For some reason, I have to call _lseeki64() TWICE to get to the
-       ** end of the file.
-       **
-       ** This might have been avoided if windows had implemented the POSIX
-       ** standard function fsync() but NO, that would have been too easy.
-       **
-       ** I am VERY close to saying that windoze will no longer be supported
-       ** by libsndfile and changing the license to GPL at the same time.
-       */
-
-       _lseeki64 (psf->file.filedes, 0, SEEK_END) ;
-
-       if ((filelen = _lseeki64 (psf->file.filedes, 0, SEEK_END)) < 0)
-       {       psf_log_syserr (psf, errno) ;
-               return (sf_count_t) -1 ;
-               } ;
-
-       if (filelen > current)
-               _lseeki64 (psf->file.filedes, current, SEEK_SET) ;
-
-       switch (psf->file.mode)
-       {       case SFM_WRITE :
-                       filelen = filelen - psf->fileoffset ;
-                       break ;
-
-               case SFM_READ :
-                       if (psf->fileoffset > 0 && psf->filelength > 0)
-                               filelen = psf->filelength ;
-                       break ;
-
-               case SFM_RDWR :
-                       /*
-                       ** Cannot open embedded files SFM_RDWR so we don't need to
-                       ** subtract psf->fileoffset. We already have the answer we
-                       ** need.
-                       */
-                       break ;
-
-               default :
-                       filelen = 0 ;
-               } ;
-
-       return filelen ;
-#endif
-} /* psf_get_filelen */
-
-/* Win32 */ int
-psf_ftruncate (SF_PRIVATE *psf, sf_count_t len)
-{      int retval ;
-
-       /* Returns 0 on success, non-zero on failure. */
-       if (len < 0)
-               return 1 ;
-
-       /* The global village idiots at micorsoft decided to implement
-       ** nearly all the required 64 bit file offset functions except
-       ** for one, truncate. The fscking morons!
-       **
-       ** This is not 64 bit file offset clean. Somone needs to clean
-       ** this up.
-       */
-       if (len > 0x7FFFFFFF)
-               return -1 ;
-
-       retval = chsize (psf->file.filedes, len) ;
-
-       if (retval == -1)
-               psf_log_syserr (psf, errno) ;
-
-       return retval ;
-} /* psf_ftruncate */
-
-
-static void
-psf_log_syserr (SF_PRIVATE *psf, int error)
-{
-       /* Only log an error if no error has been set yet. */
-       if (psf->error == 0)
-       {       psf->error = SFE_SYSTEM ;
-               snprintf (psf->syserr, sizeof (psf->syserr), "System error : %s", strerror (error)) ;
-               } ;
-
-       return ;
-} /* psf_log_syserr */
-
-#endif
-
diff --git a/libs/libsndfile/src/flac.c b/libs/libsndfile/src/flac.c
deleted file mode 100644 (file)
index bb74e94..0000000
+++ /dev/null
@@ -1,1385 +0,0 @@
-/*
-** Copyright (C) 2004-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2004 Tobias Gehrig <tgehrig@ira.uka.de>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation ; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <stdlib.h>
-#include       <fcntl.h>
-#include       <string.h>
-#include       <ctype.h>
-#include       <math.h>
-
-#include       "sndfile.h"
-#include       "common.h"
-
-#if HAVE_EXTERNAL_LIBS
-
-#include       <FLAC/stream_decoder.h>
-#include       <FLAC/stream_encoder.h>
-#include       <FLAC/metadata.h>
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-#define        FLAC_DEFAULT_COMPRESSION_LEVEL  5
-
-#define ENC_BUFFER_SIZE 8192
-
-typedef enum
-{      PFLAC_PCM_SHORT = 50,
-       PFLAC_PCM_INT = 51,
-       PFLAC_PCM_FLOAT = 52,
-       PFLAC_PCM_DOUBLE = 53
-} PFLAC_PCM ;
-
-typedef struct
-{
-       FLAC__StreamDecoder *fsd ;
-       FLAC__StreamEncoder *fse ;
-
-       PFLAC_PCM pcmtype ;
-       void* ptr ;
-       unsigned pos, len, remain ;
-
-       FLAC__StreamMetadata *metadata ;
-
-       const FLAC__int32 * const * wbuffer ;
-       FLAC__int32 * rbuffer [FLAC__MAX_CHANNELS] ;
-
-       FLAC__int32* encbuffer ;
-       unsigned bufferpos ;
-
-       const FLAC__Frame *frame ;
-       FLAC__bool bufferbackup ;
-
-       unsigned compression ;
-} FLAC_PRIVATE ;
-
-typedef struct
-{      const char *tag ;
-       int type ;
-} FLAC_TAG ;
-
-static sf_count_t      flac_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-static int                     flac_byterate (SF_PRIVATE *psf) ;
-static int                     flac_close (SF_PRIVATE *psf) ;
-
-static int                     flac_enc_init (SF_PRIVATE *psf) ;
-static int                     flac_read_header (SF_PRIVATE *psf) ;
-
-static sf_count_t      flac_read_flac2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t      flac_read_flac2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t      flac_read_flac2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t      flac_read_flac2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t      flac_write_s2flac (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t      flac_write_i2flac (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t      flac_write_f2flac (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t      flac_write_d2flac (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static void            f2flac8_array (const float *src, FLAC__int32 *dest, int count, int normalize) ;
-static void            f2flac16_array (const float *src, FLAC__int32 *dest, int count, int normalize) ;
-static void            f2flac24_array (const float *src, FLAC__int32 *dest, int count, int normalize) ;
-static void            f2flac8_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize) ;
-static void            f2flac16_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize) ;
-static void            f2flac24_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize) ;
-static void            d2flac8_array (const double *src, FLAC__int32 *dest, int count, int normalize) ;
-static void            d2flac16_array (const double *src, FLAC__int32 *dest, int count, int normalize) ;
-static void            d2flac24_array (const double *src, FLAC__int32 *dest, int count, int normalize) ;
-static void            d2flac8_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize) ;
-static void            d2flac16_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize) ;
-static void            d2flac24_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize) ;
-
-static int flac_command (SF_PRIVATE *psf, int command, void *data, int datasize) ;
-
-/* Decoder Callbacks */
-static FLAC__StreamDecoderReadStatus sf_flac_read_callback (const FLAC__StreamDecoder *decoder, FLAC__byte buffer [], size_t *bytes, void *client_data) ;
-static FLAC__StreamDecoderSeekStatus sf_flac_seek_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data) ;
-static FLAC__StreamDecoderTellStatus sf_flac_tell_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ;
-static FLAC__StreamDecoderLengthStatus sf_flac_length_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data) ;
-static FLAC__bool sf_flac_eof_callback (const FLAC__StreamDecoder *decoder, void *client_data) ;
-static FLAC__StreamDecoderWriteStatus sf_flac_write_callback (const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data) ;
-static void sf_flac_meta_callback (const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data) ;
-static void sf_flac_error_callback (const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data) ;
-
-/* Encoder Callbacks */
-static FLAC__StreamEncoderSeekStatus sf_flac_enc_seek_callback (const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data) ;
-static FLAC__StreamEncoderTellStatus sf_flac_enc_tell_callback (const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ;
-static FLAC__StreamEncoderWriteStatus sf_flac_enc_write_callback (const FLAC__StreamEncoder *encoder, const FLAC__byte buffer [], size_t bytes, unsigned samples, unsigned current_frame, void *client_data) ;
-
-static void
-s2flac8_array (const short *src, FLAC__int32 *dest, int count)
-{      while (--count >= 0)
-               dest [count] = src [count] >> 8 ;
-} /* s2flac8_array */
-
-static void
-s2flac16_array (const short *src, FLAC__int32 *dest, int count)
-{      while (--count >= 0)
-               dest [count] = src [count] ;
-} /* s2flac16_array */
-
-static void
-s2flac24_array (const short *src, FLAC__int32 *dest, int count)
-{      while (--count >= 0)
-               dest [count] = src [count] << 8 ;
-} /* s2flac24_array */
-
-static void
-i2flac8_array (const int *src, FLAC__int32 *dest, int count)
-{      while (--count >= 0)
-               dest [count] = src [count] >> 24 ;
-} /* i2flac8_array */
-
-static void
-i2flac16_array (const int *src, FLAC__int32 *dest, int count)
-{
-       while (--count >= 0)
-               dest [count] = src [count] >> 16 ;
-} /* i2flac16_array */
-
-static void
-i2flac24_array (const int *src, FLAC__int32 *dest, int count)
-{      while (--count >= 0)
-               dest [count] = src [count] >> 8 ;
-} /* i2flac24_array */
-
-static sf_count_t
-flac_buffer_copy (SF_PRIVATE *psf)
-{      FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-       const FLAC__Frame *frame = pflac->frame ;
-       const FLAC__int32* const *buffer = pflac->wbuffer ;
-       unsigned i = 0, j, offset ;
-
-       /*
-       **      frame->header.blocksize is variable and we're using a constant blocksize
-       **      of FLAC__MAX_BLOCK_SIZE.
-       **      Check our assumptions here.
-       */
-       if (frame->header.blocksize > FLAC__MAX_BLOCK_SIZE)
-       {       psf_log_printf (psf, "Ooops : frame->header.blocksize (%d) > FLAC__MAX_BLOCK_SIZE (%d)\n", __func__, __LINE__, frame->header.blocksize, FLAC__MAX_BLOCK_SIZE) ;
-               psf->error = SFE_INTERNAL ;
-               return 0 ;
-               } ;
-
-       if (pflac->ptr == NULL)
-       {       /*
-               **      Not sure why this code is here and not elsewhere.
-               **      Removing it causes valgrind errors.
-               */
-               pflac->bufferbackup = SF_TRUE ;
-               for (i = 0 ; i < frame->header.channels ; i++)
-               {
-                       if (pflac->rbuffer [i] == NULL)
-                               pflac->rbuffer [i] = calloc (FLAC__MAX_BLOCK_SIZE, sizeof (FLAC__int32)) ;
-
-                       memcpy (pflac->rbuffer [i], buffer [i], frame->header.blocksize * sizeof (FLAC__int32)) ;
-                       } ;
-               pflac->wbuffer = (const FLAC__int32* const*) pflac->rbuffer ;
-
-               return 0 ;
-               } ;
-
-       switch (pflac->pcmtype)
-       {       case PFLAC_PCM_SHORT :
-                       {       short *retpcm = (short*) pflac->ptr ;
-                               int shift = 16 - frame->header.bits_per_sample ;
-                               if (shift < 0)
-                               {       shift = abs (shift) ;
-                                       for (i = 0 ; i < frame->header.blocksize && pflac->remain > 0 ; i++)
-                                       {       offset = pflac->pos + i * frame->header.channels ;
-
-                                               if (pflac->bufferpos >= frame->header.blocksize)
-                                                       break ;
-
-                                               for (j = 0 ; j < frame->header.channels ; j++)
-                                                       retpcm [offset + j] = buffer [j][pflac->bufferpos] >> shift ;
-                                               pflac->remain -= frame->header.channels ;
-                                               pflac->bufferpos++ ;
-                                               }
-                                       }
-                               else
-                               {       for (i = 0 ; i < frame->header.blocksize && pflac->remain > 0 ; i++)
-                                       {       offset = pflac->pos + i * frame->header.channels ;
-
-                                               if (pflac->bufferpos >= frame->header.blocksize)
-                                                       break ;
-
-                                               for (j = 0 ; j < frame->header.channels ; j++)
-                                                       retpcm [offset + j] = (buffer [j][pflac->bufferpos]) << shift ;
-
-                                               pflac->remain -= frame->header.channels ;
-                                               pflac->bufferpos++ ;
-                                               } ;
-                                       } ;
-                               } ;
-                       break ;
-
-               case PFLAC_PCM_INT :
-                       {       int *retpcm = (int*) pflac->ptr ;
-                               int shift = 32 - frame->header.bits_per_sample ;
-                               for (i = 0 ; i < frame->header.blocksize && pflac->remain > 0 ; i++)
-                               {       offset = pflac->pos + i * frame->header.channels ;
-
-                                       if (pflac->bufferpos >= frame->header.blocksize)
-                                               break ;
-
-                                       for (j = 0 ; j < frame->header.channels ; j++)
-                                               retpcm [offset + j] = buffer [j][pflac->bufferpos] << shift ;
-                                       pflac->remain -= frame->header.channels ;
-                                       pflac->bufferpos++ ;
-                                       } ;
-                               } ;
-                       break ;
-
-               case PFLAC_PCM_FLOAT :
-                       {       float *retpcm = (float*) pflac->ptr ;
-                               float norm = (psf->norm_float == SF_TRUE) ? 1.0 / (1 << (frame->header.bits_per_sample - 1)) : 1.0 ;
-
-                               for (i = 0 ; i < frame->header.blocksize && pflac->remain > 0 ; i++)
-                               {       offset = pflac->pos + i * frame->header.channels ;
-
-                                       if (pflac->bufferpos >= frame->header.blocksize)
-                                               break ;
-
-                                       for (j = 0 ; j < frame->header.channels ; j++)
-                                               retpcm [offset + j] = buffer [j][pflac->bufferpos] * norm ;
-                                       pflac->remain -= frame->header.channels ;
-                                       pflac->bufferpos++ ;
-                                       } ;
-                               } ;
-                       break ;
-
-               case PFLAC_PCM_DOUBLE :
-                       {       double *retpcm = (double*) pflac->ptr ;
-                               double norm = (psf->norm_double == SF_TRUE) ? 1.0 / (1 << (frame->header.bits_per_sample - 1)) : 1.0 ;
-
-                               for (i = 0 ; i < frame->header.blocksize && pflac->remain > 0 ; i++)
-                               {       offset = pflac->pos + i * frame->header.channels ;
-
-                                       if (pflac->bufferpos >= frame->header.blocksize)
-                                               break ;
-
-                                       for (j = 0 ; j < frame->header.channels ; j++)
-                                               retpcm [offset + j] = buffer [j][pflac->bufferpos] * norm ;
-                                       pflac->remain -= frame->header.channels ;
-                                       pflac->bufferpos++ ;
-                                       } ;
-                               } ;
-                       break ;
-
-               default :
-                       return 0 ;
-               } ;
-
-       offset = i * frame->header.channels ;
-       pflac->pos += i * frame->header.channels ;
-
-       return offset ;
-} /* flac_buffer_copy */
-
-
-static FLAC__StreamDecoderReadStatus
-sf_flac_read_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__byte buffer [], size_t *bytes, void *client_data)
-{      SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-
-       *bytes = psf_fread (buffer, 1, *bytes, psf) ;
-       if (*bytes > 0 && psf->error == 0)
-               return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE ;
-
-       return FLAC__STREAM_DECODER_READ_STATUS_ABORT ;
-} /* sf_flac_read_callback */
-
-static FLAC__StreamDecoderSeekStatus
-sf_flac_seek_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__uint64 absolute_byte_offset, void *client_data)
-{      SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-
-       psf_fseek (psf, absolute_byte_offset, SEEK_SET) ;
-       if (psf->error)
-               return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR ;
-
-       return FLAC__STREAM_DECODER_SEEK_STATUS_OK ;
-} /* sf_flac_seek_callback */
-
-static FLAC__StreamDecoderTellStatus
-sf_flac_tell_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__uint64 *absolute_byte_offset, void *client_data)
-{      SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-
-       *absolute_byte_offset = psf_ftell (psf) ;
-       if (psf->error)
-               return FLAC__STREAM_DECODER_TELL_STATUS_ERROR ;
-
-       return FLAC__STREAM_DECODER_TELL_STATUS_OK ;
-} /* sf_flac_tell_callback */
-
-static FLAC__StreamDecoderLengthStatus
-sf_flac_length_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__uint64 *stream_length, void *client_data)
-{      SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-
-       if ((*stream_length = psf->filelength) == 0)
-               return FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR ;
-
-       return FLAC__STREAM_DECODER_LENGTH_STATUS_OK ;
-} /* sf_flac_length_callback */
-
-static FLAC__bool
-sf_flac_eof_callback (const FLAC__StreamDecoder *UNUSED (decoder), void *client_data)
-{      SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-
-       if (psf_ftell (psf) == psf->filelength)
-               return SF_TRUE ;
-
-       return SF_FALSE ;
-} /* sf_flac_eof_callback */
-
-static FLAC__StreamDecoderWriteStatus
-sf_flac_write_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data)
-{      SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-       FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-
-       pflac->frame = frame ;
-       pflac->bufferpos = 0 ;
-
-       pflac->bufferbackup = SF_FALSE ;
-       pflac->wbuffer = buffer ;
-
-       flac_buffer_copy (psf) ;
-
-       return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE ;
-} /* sf_flac_write_callback */
-
-static void
-sf_flac_meta_get_vorbiscomments (SF_PRIVATE *psf, const FLAC__StreamMetadata *metadata)
-{      FLAC_TAG tags [] =
-       {       { "title", SF_STR_TITLE },
-               { "copyright", SF_STR_COPYRIGHT },
-               { "software", SF_STR_SOFTWARE },
-               { "artist", SF_STR_ARTIST },
-               { "comment", SF_STR_COMMENT },
-               { "date", SF_STR_DATE },
-               { "album", SF_STR_ALBUM },
-               { "license", SF_STR_LICENSE },
-               { "tracknumber", SF_STR_TRACKNUMBER },
-               { "genre", SF_STR_GENRE }
-               } ;
-
-       const char *value, *cptr ;
-       int k, tag_num ;
-
-       for (k = 0 ; k < ARRAY_LEN (tags) ; k++)
-       {       tag_num = FLAC__metadata_object_vorbiscomment_find_entry_from (metadata, 0, tags [k].tag) ;
-
-               if (tag_num < 0)
-                       continue ;
-
-               value = (const char*) metadata->data.vorbis_comment.comments [tag_num].entry ;
-               if ((cptr = strchr (value, '=')) != NULL)
-                       value = cptr + 1 ;
-
-               psf_log_printf (psf, "  %-10s : %s\n", tags [k].tag, value) ;
-               psf_store_string (psf, tags [k].type, value) ;
-               } ;
-
-       return ;
-} /* sf_flac_meta_get_vorbiscomments */
-
-static void
-sf_flac_meta_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC__StreamMetadata *metadata, void *client_data)
-{      SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-       int bitwidth = 0 ;
-
-       switch (metadata->type)
-       {       case FLAC__METADATA_TYPE_STREAMINFO :
-                       psf->sf.channels = metadata->data.stream_info.channels ;
-                       psf->sf.samplerate = metadata->data.stream_info.sample_rate ;
-                       psf->sf.frames = metadata->data.stream_info.total_samples ;
-
-                       psf_log_printf (psf, "FLAC Stream Metadata\n  Channels    : %d\n  Sample rate : %d\n", psf->sf.channels, psf->sf.samplerate) ;
-
-                       if (psf->sf.frames == 0)
-                       {       psf_log_printf (psf, "  Frames      : 0 (bumping to SF_COUNT_MAX)\n") ;
-                               psf->sf.frames = SF_COUNT_MAX ;
-                               }
-                       else
-                               psf_log_printf (psf, "  Frames      : %D\n", psf->sf.frames) ;
-
-                       switch (metadata->data.stream_info.bits_per_sample)
-                       {       case 8 :
-                                       psf->sf.format |= SF_FORMAT_PCM_S8 ;
-                                       bitwidth = 8 ;
-                                       break ;
-                               case 16 :
-                                       psf->sf.format |= SF_FORMAT_PCM_16 ;
-                                       bitwidth = 16 ;
-                                       break ;
-                               case 24 :
-                                       psf->sf.format |= SF_FORMAT_PCM_24 ;
-                                       bitwidth = 24 ;
-                                       break ;
-                               default :
-                                       psf_log_printf (psf, "sf_flac_meta_callback : bits_per_sample %d not yet implemented.\n", metadata->data.stream_info.bits_per_sample) ;
-                                       break ;
-                               } ;
-
-                       if (bitwidth > 0)
-                               psf_log_printf (psf, "  Bit width   : %d\n", bitwidth) ;
-                       break ;
-
-               case FLAC__METADATA_TYPE_VORBIS_COMMENT :
-                       psf_log_printf (psf, "Vorbis Comment Metadata\n") ;
-                       sf_flac_meta_get_vorbiscomments (psf, metadata) ;
-                       break ;
-
-               case FLAC__METADATA_TYPE_PADDING :
-                       psf_log_printf (psf, "Padding Metadata\n") ;
-                       break ;
-
-               case FLAC__METADATA_TYPE_APPLICATION :
-                       psf_log_printf (psf, "Application Metadata\n") ;
-                       break ;
-
-               case FLAC__METADATA_TYPE_SEEKTABLE :
-                       psf_log_printf (psf, "Seektable Metadata\n") ;
-                       break ;
-
-               case FLAC__METADATA_TYPE_CUESHEET :
-                       psf_log_printf (psf, "Cuesheet Metadata\n") ;
-                       break ;
-
-               case FLAC__METADATA_TYPE_PICTURE :
-                       psf_log_printf (psf, "Picture Metadata\n") ;
-                       break ;
-
-               case FLAC__METADATA_TYPE_UNDEFINED :
-                       psf_log_printf (psf, "Undefined Metadata\n") ;
-                       break ;
-
-               default :
-                       psf_log_printf (psf, "sf_flac_meta_callback : metadata-type %d not yet implemented.\n", metadata->type) ;
-                       break ;
-               } ;
-
-       return ;
-} /* sf_flac_meta_callback */
-
-static void
-sf_flac_error_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__StreamDecoderErrorStatus status, void *client_data)
-{      SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-
-       psf_log_printf (psf, "ERROR : %s\n", FLAC__StreamDecoderErrorStatusString [status]) ;
-
-       switch (status)
-       {       case FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC :
-                       psf->error = SFE_FLAC_LOST_SYNC ;
-                       break ;
-               case FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER :
-                       psf->error = SFE_FLAC_BAD_HEADER ;
-                       break ;
-               default :
-                       psf->error = SFE_FLAC_UNKOWN_ERROR ;
-                       break ;
-               } ;
-
-       return ;
-} /* sf_flac_error_callback */
-
-static FLAC__StreamEncoderSeekStatus
-sf_flac_enc_seek_callback (const FLAC__StreamEncoder * UNUSED (encoder), FLAC__uint64 absolute_byte_offset, void *client_data)
-{      SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-
-       psf_fseek (psf, absolute_byte_offset, SEEK_SET) ;
-       if (psf->error)
-               return FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR ;
-
-       return FLAC__STREAM_ENCODER_SEEK_STATUS_OK ;
-} /* sf_flac_enc_seek_callback */
-
-static FLAC__StreamEncoderTellStatus
-sf_flac_enc_tell_callback (const FLAC__StreamEncoder *UNUSED (encoder), FLAC__uint64 *absolute_byte_offset, void *client_data)
-{      SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-
-       *absolute_byte_offset = psf_ftell (psf) ;
-       if (psf->error)
-               return FLAC__STREAM_ENCODER_TELL_STATUS_ERROR ;
-
-       return FLAC__STREAM_ENCODER_TELL_STATUS_OK ;
-} /* sf_flac_enc_tell_callback */
-
-static FLAC__StreamEncoderWriteStatus
-sf_flac_enc_write_callback (const FLAC__StreamEncoder * UNUSED (encoder), const FLAC__byte buffer [], size_t bytes, unsigned UNUSED (samples), unsigned UNUSED (current_frame), void *client_data)
-{      SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
-
-       if (psf_fwrite (buffer, 1, bytes, psf) == (sf_count_t) bytes && psf->error == 0)
-               return FLAC__STREAM_ENCODER_WRITE_STATUS_OK ;
-
-       return FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR ;
-} /* sf_flac_enc_write_callback */
-
-static void
-flac_write_strings (SF_PRIVATE *psf, FLAC_PRIVATE* pflac)
-{      FLAC__StreamMetadata_VorbisComment_Entry entry ;
-       int     k, string_count = 0 ;
-
-       for (k = 0 ; k < SF_MAX_STRINGS ; k++)
-       {       if (psf->strings.data [k].type != 0)
-                       string_count ++ ;
-               } ;
-
-       if (string_count == 0)
-               return ;
-
-       if (pflac->metadata == NULL && (pflac->metadata = FLAC__metadata_object_new (FLAC__METADATA_TYPE_VORBIS_COMMENT)) == NULL)
-       {       psf_log_printf (psf, "FLAC__metadata_object_new returned NULL\n") ;
-               return ;
-               } ;
-
-       for (k = 0 ; k < SF_MAX_STRINGS && psf->strings.data [k].type != 0 ; k++)
-       {       const char * key, * value ;
-
-               switch (psf->strings.data [k].type)
-               {       case SF_STR_SOFTWARE :
-                               key = "software" ;
-                               break ;
-                       case SF_STR_TITLE :
-                               key = "title" ;
-                               break ;
-                       case SF_STR_COPYRIGHT :
-                               key = "copyright" ;
-                               break ;
-                       case SF_STR_ARTIST :
-                               key = "artist" ;
-                               break ;
-                       case SF_STR_COMMENT :
-                               key = "comment" ;
-                               break ;
-                       case SF_STR_DATE :
-                               key = "date" ;
-                               break ;
-                       case SF_STR_ALBUM :
-                               key = "album" ;
-                               break ;
-                       case SF_STR_LICENSE :
-                               key = "license" ;
-                               break ;
-                       case SF_STR_TRACKNUMBER :
-                               key = "tracknumber" ;
-                               break ;
-                       case SF_STR_GENRE :
-                               key = "genre" ;
-                               break ;
-                       default :
-                               continue ;
-                       } ;
-
-               value = psf->strings.storage + psf->strings.data [k].offset ;
-
-               FLAC__metadata_object_vorbiscomment_entry_from_name_value_pair (&entry, key, value) ;
-               FLAC__metadata_object_vorbiscomment_append_comment (pflac->metadata, entry, /* copy */ SF_FALSE) ;
-               } ;
-
-       if (! FLAC__stream_encoder_set_metadata (pflac->fse, &pflac->metadata, 1))
-       {       printf ("%s %d : fail\n", __func__, __LINE__) ;
-               return ;
-               } ;
-
-       return ;
-} /* flac_write_strings */
-
-static int
-flac_write_header (SF_PRIVATE *psf, int UNUSED (calc_length))
-{      FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-       int err ;
-
-       flac_write_strings (psf, pflac) ;
-
-       if ((err = FLAC__stream_encoder_init_stream (pflac->fse, sf_flac_enc_write_callback, sf_flac_enc_seek_callback, sf_flac_enc_tell_callback, NULL, psf)) != FLAC__STREAM_DECODER_INIT_STATUS_OK)
-       {       psf_log_printf (psf, "Error : FLAC encoder init returned error : %s\n", FLAC__StreamEncoderInitStatusString [err]) ;
-               return SFE_FLAC_INIT_DECODER ;
-               } ;
-
-       if (psf->error == 0)
-               psf->dataoffset = psf_ftell (psf) ;
-       pflac->encbuffer = calloc (ENC_BUFFER_SIZE, sizeof (FLAC__int32)) ;
-
-       return psf->error ;
-} /* flac_write_header */
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-flac_open      (SF_PRIVATE *psf)
-{      int             subformat ;
-       int             error = 0 ;
-
-       FLAC_PRIVATE* pflac = calloc (1, sizeof (FLAC_PRIVATE)) ;
-       psf->codec_data = pflac ;
-
-       /* Set the default value here. Over-ridden later if necessary. */
-       pflac->compression = FLAC_DEFAULT_COMPRESSION_LEVEL ;
-
-
-       if (psf->file.mode == SFM_RDWR)
-               return SFE_BAD_MODE_RW ;
-
-       if (psf->file.mode == SFM_READ)
-       {       if ((error = flac_read_header (psf)))
-                       return error ;
-               } ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_FLAC)
-                       return  SFE_BAD_OPEN_FORMAT ;
-
-               psf->endian = SF_ENDIAN_BIG ;
-               psf->sf.seekable = 0 ;
-
-               psf->strings.flags = SF_STR_ALLOW_START ;
-
-               if ((error = flac_enc_init (psf)))
-                       return error ;
-
-               psf->write_header = flac_write_header ;
-               } ;
-
-       psf->datalength = psf->filelength ;
-       psf->dataoffset = 0 ;
-
-       psf->container_close = flac_close ;
-       psf->seek = flac_seek ;
-       psf->byterate = flac_byterate ;
-
-       psf->command = flac_command ;
-
-       switch (subformat)
-       {       case SF_FORMAT_PCM_S8 : /* 8-bit FLAC.  */
-               case SF_FORMAT_PCM_16 : /* 16-bit FLAC. */
-               case SF_FORMAT_PCM_24 : /* 24-bit FLAC. */
-                       error = flac_init (psf) ;
-                       break ;
-
-               default : return SFE_UNIMPLEMENTED ;
-               } ;
-
-       return error ;
-} /* flac_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-flac_close     (SF_PRIVATE *psf)
-{      FLAC_PRIVATE* pflac ;
-       int k ;
-
-       if ((pflac = (FLAC_PRIVATE*) psf->codec_data) == NULL)
-               return 0 ;
-
-       if (pflac->metadata != NULL)
-               FLAC__metadata_object_delete (pflac->metadata) ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       FLAC__stream_encoder_finish (pflac->fse) ;
-               FLAC__stream_encoder_delete (pflac->fse) ;
-
-               if (pflac->encbuffer)
-                       free (pflac->encbuffer) ;
-               } ;
-
-       if (psf->file.mode == SFM_READ)
-       {       FLAC__stream_decoder_finish (pflac->fsd) ;
-               FLAC__stream_decoder_delete (pflac->fsd) ;
-               } ;
-
-       for (k = 0 ; k < ARRAY_LEN (pflac->rbuffer) ; k++)
-               free (pflac->rbuffer [k]) ;
-
-       free (pflac) ;
-       psf->codec_data = NULL ;
-
-       return 0 ;
-} /* flac_close */
-
-static int
-flac_enc_init (SF_PRIVATE *psf)
-{      FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-       unsigned bps ;
-
-       /* To cite the flac FAQ at
-       ** http://flac.sourceforge.net/faq.html#general__samples
-       **     "FLAC supports linear sample rates from 1Hz - 655350Hz in 1Hz
-       **     increments."
-       */
-       if (psf->sf.samplerate < 1 || psf->sf.samplerate > 655350)
-       {       psf_log_printf (psf, "flac sample rate out of range.\n", psf->sf.samplerate) ;
-               return SFE_FLAC_BAD_SAMPLE_RATE ;
-               } ;
-
-       psf_fseek (psf, 0, SEEK_SET) ;
-
-       switch (SF_CODEC (psf->sf.format))
-       {       case SF_FORMAT_PCM_S8 :
-                       bps = 8 ;
-                       break ;
-               case SF_FORMAT_PCM_16 :
-                       bps = 16 ;
-                       break ;
-               case SF_FORMAT_PCM_24 :
-                       bps = 24 ;
-                       break ;
-
-               default :
-                       bps = 0 ;
-                       break ;
-               } ;
-
-       if (pflac->fse)
-               FLAC__stream_encoder_delete (pflac->fse) ;
-       if ((pflac->fse = FLAC__stream_encoder_new ()) == NULL)
-               return SFE_FLAC_NEW_DECODER ;
-
-       if (! FLAC__stream_encoder_set_channels (pflac->fse, psf->sf.channels))
-       {       psf_log_printf (psf, "FLAC__stream_encoder_set_channels (%d) return false.\n", psf->sf.channels) ;
-               return SFE_FLAC_INIT_DECODER ;
-               } ;
-
-       if (! FLAC__stream_encoder_set_sample_rate (pflac->fse, psf->sf.samplerate))
-       {       psf_log_printf (psf, "FLAC__stream_encoder_set_sample_rate (%d) returned false.\n", psf->sf.samplerate) ;
-               return SFE_FLAC_BAD_SAMPLE_RATE ;
-               } ;
-
-       if (! FLAC__stream_encoder_set_bits_per_sample (pflac->fse, bps))
-       {       psf_log_printf (psf, "FLAC__stream_encoder_set_bits_per_sample (%d) return false.\n", bps) ;
-               return SFE_FLAC_INIT_DECODER ;
-               } ;
-
-       if (! FLAC__stream_encoder_set_compression_level (pflac->fse, pflac->compression))
-       {       psf_log_printf (psf, "FLAC__stream_encoder_set_compression_level (%d) return false.\n", pflac->compression) ;
-               return SFE_FLAC_INIT_DECODER ;
-               } ;
-
-       return 0 ;
-} /* flac_enc_init */
-
-static int
-flac_read_header (SF_PRIVATE *psf)
-{      FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-
-       psf_fseek (psf, 0, SEEK_SET) ;
-       if (pflac->fsd)
-               FLAC__stream_decoder_delete (pflac->fsd) ;
-       if ((pflac->fsd = FLAC__stream_decoder_new ()) == NULL)
-               return SFE_FLAC_NEW_DECODER ;
-
-       FLAC__stream_decoder_set_metadata_respond_all (pflac->fsd) ;
-
-       if (FLAC__stream_decoder_init_stream (pflac->fsd, sf_flac_read_callback, sf_flac_seek_callback, sf_flac_tell_callback, sf_flac_length_callback, sf_flac_eof_callback, sf_flac_write_callback, sf_flac_meta_callback, sf_flac_error_callback, psf) != FLAC__STREAM_DECODER_INIT_STATUS_OK)
-               return SFE_FLAC_INIT_DECODER ;
-
-       FLAC__stream_decoder_process_until_end_of_metadata (pflac->fsd) ;
-
-       psf_log_printf (psf, "End\n") ;
-
-       if (psf->error == 0)
-       {       FLAC__uint64 position ;
-
-               FLAC__stream_decoder_get_decode_position (pflac->fsd, &position) ;
-               psf->dataoffset = position ;
-               } ;
-
-       return psf->error ;
-} /* flac_read_header */
-
-static int
-flac_command (SF_PRIVATE * psf, int command, void * data, int datasize)
-{      FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-       double quality ;
-
-       switch (command)
-       {       case SFC_SET_COMPRESSION_LEVEL :
-                       if (data == NULL || datasize != sizeof (double))
-                               return SF_FALSE ;
-
-                       if (psf->have_written)
-                               return SF_FALSE ;
-
-                       /* FLAC compression level is in the range [0, 8] while libsndfile takes
-                       ** values in the range [0.0, 1.0]. Massage the libsndfile value here.
-                       */
-                       quality = (*((double *) data)) * 8.0 ;
-                       /* Clip range. */
-                       pflac->compression = lrint (SF_MAX (0.0, SF_MIN (8.0, quality))) ;
-
-                       psf_log_printf (psf, "%s : Setting SFC_SET_COMPRESSION_LEVEL to %u.\n", __func__, pflac->compression) ;
-
-                       if (flac_enc_init (psf))
-                               return SF_FALSE ;
-
-                       return SF_TRUE ;
-
-               default :
-                       return SF_FALSE ;
-               } ;
-
-       return SF_FALSE ;
-} /* flac_command */
-
-int
-flac_init (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_RDWR)
-               return SFE_BAD_MODE_RW ;
-
-       if (psf->file.mode == SFM_READ)
-       {       psf->read_short         = flac_read_flac2s ;
-               psf->read_int           = flac_read_flac2i ;
-               psf->read_float         = flac_read_flac2f ;
-               psf->read_double        = flac_read_flac2d ;
-               } ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       psf->write_short        = flac_write_s2flac ;
-               psf->write_int          = flac_write_i2flac ;
-               psf->write_float        = flac_write_f2flac ;
-               psf->write_double       = flac_write_d2flac ;
-               } ;
-
-       if (psf->filelength > psf->dataoffset)
-               psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset : psf->filelength - psf->dataoffset ;
-       else
-               psf->datalength = 0 ;
-
-       return 0 ;
-} /* flac_init */
-
-static unsigned
-flac_read_loop (SF_PRIVATE *psf, unsigned len)
-{      FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-
-       pflac->pos = 0 ;
-       pflac->len = len ;
-       pflac->remain = len ;
-       if (pflac->frame != NULL && pflac->bufferpos < pflac->frame->header.blocksize)
-               flac_buffer_copy (psf) ;
-
-       while (pflac->pos < pflac->len)
-       {       if (FLAC__stream_decoder_process_single (pflac->fsd) == 0)
-                       break ;
-               if (FLAC__stream_decoder_get_state (pflac->fsd) >= FLAC__STREAM_DECODER_END_OF_STREAM)
-                       break ;
-               } ;
-
-       pflac->ptr = NULL ;
-
-       return pflac->pos ;
-} /* flac_read_loop */
-
-static sf_count_t
-flac_read_flac2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-       sf_count_t total = 0, current ;
-       unsigned readlen ;
-
-       pflac->pcmtype = PFLAC_PCM_SHORT ;
-
-       while (total < len)
-       {       pflac->ptr = ptr + total ;
-               readlen = (len - total > 0x1000000) ? 0x1000000 : (unsigned) (len - total) ;
-               current = flac_read_loop (psf, readlen) ;
-               if (current == 0)
-                       break ;
-               total += current ;
-               } ;
-
-       return total ;
-} /* flac_read_flac2s */
-
-static sf_count_t
-flac_read_flac2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-       sf_count_t total = 0, current ;
-       unsigned readlen ;
-
-       pflac->pcmtype = PFLAC_PCM_INT ;
-
-       while (total < len)
-       {       pflac->ptr = ptr + total ;
-               readlen = (len - total > 0x1000000) ? 0x1000000 : (unsigned) (len - total) ;
-               current = flac_read_loop (psf, readlen) ;
-               if (current == 0)
-                       break ;
-               total += current ;
-               } ;
-
-       return total ;
-} /* flac_read_flac2i */
-
-static sf_count_t
-flac_read_flac2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-       sf_count_t total = 0, current ;
-       unsigned readlen ;
-
-       pflac->pcmtype = PFLAC_PCM_FLOAT ;
-
-       while (total < len)
-       {       pflac->ptr = ptr + total ;
-               readlen = (len - total > 0x1000000) ? 0x1000000 : (unsigned) (len - total) ;
-               current = flac_read_loop (psf, readlen) ;
-               if (current == 0)
-                       break ;
-               total += current ;
-               } ;
-
-       return total ;
-} /* flac_read_flac2f */
-
-static sf_count_t
-flac_read_flac2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-       sf_count_t total = 0, current ;
-       unsigned readlen ;
-
-       pflac->pcmtype = PFLAC_PCM_DOUBLE ;
-
-       while (total < len)
-       {       pflac->ptr = ptr + total ;
-               readlen = (len - total > 0x1000000) ? 0x1000000 : (unsigned) (len - total) ;
-               current = flac_read_loop (psf, readlen) ;
-               if (current == 0)
-                       break ;
-               total += current ;
-               } ;
-
-       return total ;
-} /* flac_read_flac2d */
-
-static sf_count_t
-flac_write_s2flac (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-       void (*convert) (const short *, FLAC__int32 *, int) ;
-       int bufferlen, writecount, thiswrite ;
-       sf_count_t      total = 0 ;
-       FLAC__int32* buffer = pflac->encbuffer ;
-
-       switch (SF_CODEC (psf->sf.format))
-       {       case SF_FORMAT_PCM_S8 :
-                       convert = s2flac8_array ;
-                       break ;
-               case SF_FORMAT_PCM_16 :
-                       convert = s2flac16_array ;
-                       break ;
-                       case SF_FORMAT_PCM_24 :
-                       convert = s2flac24_array ;
-                       break ;
-               default :
-                       return -1 ;
-               } ;
-
-       bufferlen = ENC_BUFFER_SIZE / (sizeof (FLAC__int32) * psf->sf.channels) ;
-       bufferlen *= psf->sf.channels ;
-
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-               convert (ptr + total, buffer, writecount) ;
-               if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount / psf->sf.channels))
-                       thiswrite = writecount ;
-               else
-                       break ;
-               total += thiswrite ;
-               if (thiswrite < writecount)
-                       break ;
-
-               len -= thiswrite ;
-               } ;
-
-       return total ;
-} /* flac_write_s2flac */
-
-static sf_count_t
-flac_write_i2flac (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-       void (*convert) (const int *, FLAC__int32 *, int) ;
-       int bufferlen, writecount, thiswrite ;
-       sf_count_t      total = 0 ;
-       FLAC__int32* buffer = pflac->encbuffer ;
-
-       switch (SF_CODEC (psf->sf.format))
-       {       case SF_FORMAT_PCM_S8 :
-                       convert = i2flac8_array ;
-                       break ;
-               case SF_FORMAT_PCM_16 :
-                       convert = i2flac16_array ;
-                       break ;
-               case SF_FORMAT_PCM_24 :
-                       convert = i2flac24_array ;
-                       break ;
-               default :
-                       return -1 ;
-               } ;
-
-       bufferlen = ENC_BUFFER_SIZE / (sizeof (FLAC__int32) * psf->sf.channels) ;
-       bufferlen *= psf->sf.channels ;
-
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-               convert (ptr + total, buffer, writecount) ;
-               if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount / psf->sf.channels))
-                       thiswrite = writecount ;
-               else
-                       break ;
-               total += thiswrite ;
-               if (thiswrite < writecount)
-                       break ;
-
-               len -= thiswrite ;
-               } ;
-
-       return total ;
-} /* flac_write_i2flac */
-
-static sf_count_t
-flac_write_f2flac (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-       void (*convert) (const float *, FLAC__int32 *, int, int) ;
-       int bufferlen, writecount, thiswrite ;
-       sf_count_t      total = 0 ;
-       FLAC__int32* buffer = pflac->encbuffer ;
-
-       switch (SF_CODEC (psf->sf.format))
-       {       case SF_FORMAT_PCM_S8 :
-                       convert = (psf->add_clipping) ? f2flac8_clip_array : f2flac8_array ;
-                       break ;
-               case SF_FORMAT_PCM_16 :
-                       convert = (psf->add_clipping) ? f2flac16_clip_array : f2flac16_array ;
-                       break ;
-               case SF_FORMAT_PCM_24 :
-                       convert = (psf->add_clipping) ? f2flac24_clip_array : f2flac24_array ;
-                       break ;
-               default :
-                       return -1 ;
-               } ;
-
-       bufferlen = ENC_BUFFER_SIZE / (sizeof (FLAC__int32) * psf->sf.channels) ;
-       bufferlen *= psf->sf.channels ;
-
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-               convert (ptr + total, buffer, writecount, psf->norm_float) ;
-               if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount / psf->sf.channels))
-                       thiswrite = writecount ;
-               else
-                       break ;
-               total += thiswrite ;
-               if (thiswrite < writecount)
-                       break ;
-
-               len -= thiswrite ;
-               } ;
-
-       return total ;
-} /* flac_write_f2flac */
-
-static void
-f2flac8_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize)
-{      float normfact, scaled_value ;
-
-       normfact = normalize ? (8.0 * 0x10) : 1.0 ;
-
-       while (--count >= 0)
-       {       scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7F))
-               {       dest [count] = 0x7F ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10))
-               {       dest [count] = 0x80 ;
-                       continue ;
-                       } ;
-               dest [count] = lrintf (scaled_value) ;
-               } ;
-
-       return ;
-} /* f2flac8_clip_array */
-
-static void
-f2flac16_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize)
-{      float normfact, scaled_value ;
-
-       normfact = normalize ? (8.0 * 0x1000) : 1.0 ;
-
-       while (--count >= 0)
-       {       scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFF))
-               {       dest [count] = 0x7FFF ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x1000))
-               {       dest [count] = 0x8000 ;
-                       continue ;
-                       } ;
-               dest [count] = lrintf (scaled_value) ;
-               } ;
-} /* f2flac16_clip_array */
-
-static void
-f2flac24_clip_array (const float *src, FLAC__int32 *dest, int count, int normalize)
-{      float normfact, scaled_value ;
-
-       normfact = normalize ? (8.0 * 0x100000) : 1.0 ;
-
-       while (--count >= 0)
-       {       scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFF))
-               {       dest [count] = 0x7FFFFF ;
-                       continue ;
-                       } ;
-
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x100000))
-               {       dest [count] = 0x800000 ;
-                       continue ;
-                       }
-               dest [count] = lrintf (scaled_value) ;
-               } ;
-
-       return ;
-} /* f2flac24_clip_array */
-
-static void
-f2flac8_array (const float *src, FLAC__int32 *dest, int count, int normalize)
-{      float normfact = normalize ? (1.0 * 0x7F) : 1.0 ;
-
-       while (--count >= 0)
-               dest [count] = lrintf (src [count] * normfact) ;
-} /* f2flac8_array */
-
-static void
-f2flac16_array (const float *src, FLAC__int32 *dest, int count, int normalize)
-{      float normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ;
-
-       while (--count >= 0)
-               dest [count] = lrintf (src [count] * normfact) ;
-} /* f2flac16_array */
-
-static void
-f2flac24_array (const float *src, FLAC__int32 *dest, int count, int normalize)
-{      float normfact = normalize ? (1.0 * 0x7FFFFF) : 1.0 ;
-
-       while (--count >= 0)
-               dest [count] = lrintf (src [count] * normfact) ;
-} /* f2flac24_array */
-
-static sf_count_t
-flac_write_d2flac (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-       void (*convert) (const double *, FLAC__int32 *, int, int) ;
-       int bufferlen, writecount, thiswrite ;
-       sf_count_t      total = 0 ;
-       FLAC__int32* buffer = pflac->encbuffer ;
-
-       switch (SF_CODEC (psf->sf.format))
-       {       case SF_FORMAT_PCM_S8 :
-                       convert = (psf->add_clipping) ? d2flac8_clip_array : d2flac8_array ;
-                       break ;
-               case SF_FORMAT_PCM_16 :
-                       convert = (psf->add_clipping) ? d2flac16_clip_array : d2flac16_array ;
-                       break ;
-               case SF_FORMAT_PCM_24 :
-                       convert = (psf->add_clipping) ? d2flac24_clip_array : d2flac24_array ;
-                       break ;
-               default :
-                       return -1 ;
-               } ;
-
-       bufferlen = ENC_BUFFER_SIZE / (sizeof (FLAC__int32) * psf->sf.channels) ;
-       bufferlen *= psf->sf.channels ;
-
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-               convert (ptr + total, buffer, writecount, psf->norm_double) ;
-               if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount / psf->sf.channels))
-                       thiswrite = writecount ;
-               else
-                       break ;
-               total += thiswrite ;
-               if (thiswrite < writecount)
-                       break ;
-
-               len -= thiswrite ;
-               } ;
-
-       return total ;
-} /* flac_write_d2flac */
-
-static void
-d2flac8_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize)
-{      double normfact, scaled_value ;
-
-       normfact = normalize ? (8.0 * 0x10) : 1.0 ;
-
-       while (--count >= 0)
-       {       scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7F))
-               {       dest [count] = 0x7F ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10))
-               {       dest [count] = 0x80 ;
-                       continue ;
-                       } ;
-               dest [count] = lrint (scaled_value) ;
-               } ;
-
-       return ;
-} /* d2flac8_clip_array */
-
-static void
-d2flac16_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize)
-{      double normfact, scaled_value ;
-
-       normfact = normalize ? (8.0 * 0x1000) : 1.0 ;
-
-       while (--count >= 0)
-       {       scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFF))
-               {       dest [count] = 0x7FFF ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x1000))
-               {       dest [count] = 0x8000 ;
-                       continue ;
-                       } ;
-               dest [count] = lrint (scaled_value) ;
-               } ;
-
-       return ;
-} /* d2flac16_clip_array */
-
-static void
-d2flac24_clip_array (const double *src, FLAC__int32 *dest, int count, int normalize)
-{      double normfact, scaled_value ;
-
-       normfact = normalize ? (8.0 * 0x100000) : 1.0 ;
-
-       while (--count >= 0)
-       {       scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFF))
-               {       dest [count] = 0x7FFFFF ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x100000))
-               {       dest [count] = 0x800000 ;
-                       continue ;
-                       } ;
-               dest [count] = lrint (scaled_value) ;
-               } ;
-
-       return ;
-} /* d2flac24_clip_array */
-
-static void
-d2flac8_array (const double *src, FLAC__int32 *dest, int count, int normalize)
-{      double normfact = normalize ? (1.0 * 0x7F) : 1.0 ;
-
-       while (--count >= 0)
-               dest [count] = lrint (src [count] * normfact) ;
-} /* d2flac8_array */
-
-static void
-d2flac16_array (const double *src, FLAC__int32 *dest, int count, int normalize)
-{      double normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ;
-
-       while (--count >= 0)
-               dest [count] = lrint (src [count] * normfact) ;
-} /* d2flac16_array */
-
-static void
-d2flac24_array (const double *src, FLAC__int32 *dest, int count, int normalize)
-{      double normfact = normalize ? (1.0 * 0x7FFFFF) : 1.0 ;
-
-       while (--count >= 0)
-               dest [count] = lrint (src [count] * normfact) ;
-} /* d2flac24_array */
-
-static sf_count_t
-flac_seek (SF_PRIVATE *psf, int UNUSED (mode), sf_count_t offset)
-{      FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
-
-       if (pflac == NULL)
-               return 0 ;
-
-       if (psf->dataoffset < 0)
-       {       psf->error = SFE_BAD_SEEK ;
-               return ((sf_count_t) -1) ;
-               } ;
-
-       pflac->frame = NULL ;
-
-       if (psf->file.mode == SFM_READ)
-       {       FLAC__uint64 position ;
-
-               if (FLAC__stream_decoder_seek_absolute (pflac->fsd, offset))
-               {       FLAC__stream_decoder_get_decode_position (pflac->fsd, &position) ;
-                       return offset ;
-                       } ;
-
-               if (offset == psf->sf.frames)
-               {       /*
-                       ** If we've been asked to seek to the very end of the file, libFLAC
-                       ** will return an error. However, we know the length of the file so
-                       ** instead of returning an error, we can return the offset.
-                       */
-                       return offset ;
-                       } ;
-
-               psf->error = SFE_BAD_SEEK ;
-               return ((sf_count_t) -1) ;
-               } ;
-
-       /* Seeking in write mode not yet supported. */
-       psf->error = SFE_BAD_SEEK ;
-
-       return ((sf_count_t) -1) ;
-} /* flac_seek */
-
-static int
-flac_byterate (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_READ)
-               return (psf->datalength * psf->sf.samplerate) / psf->sf.frames ;
-
-       return -1 ;
-} /* flac_byterate */
-
-
-#else /* HAVE_EXTERNAL_LIBS */
-
-int
-flac_open      (SF_PRIVATE *psf)
-{
-       psf_log_printf (psf, "This version of libsndfile was compiled without FLAC support.\n") ;
-       return SFE_UNIMPLEMENTED ;
-} /* flac_open */
-
-#endif
diff --git a/libs/libsndfile/src/float32.c b/libs/libsndfile/src/float32.c
deleted file mode 100644 (file)
index 89bcf6b..0000000
+++ /dev/null
@@ -1,1012 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <stdlib.h>
-#include       <string.h>
-#include       <limits.h>
-#include       <math.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-#if CPU_IS_LITTLE_ENDIAN
-       #define FLOAT32_READ    float32_le_read
-       #define FLOAT32_WRITE   float32_le_write
-#elif CPU_IS_BIG_ENDIAN
-       #define FLOAT32_READ    float32_be_read
-       #define FLOAT32_WRITE   float32_be_write
-#endif
-
-/*--------------------------------------------------------------------------------------------
-**     Processor floating point capabilities. float32_get_capability () returns one of the
-**     latter four values.
-*/
-
-enum
-{      FLOAT_UNKNOWN           = 0x00,
-       FLOAT_CAN_RW_LE         = 0x12,
-       FLOAT_CAN_RW_BE         = 0x23,
-       FLOAT_BROKEN_LE         = 0x34,
-       FLOAT_BROKEN_BE         = 0x45
-} ;
-
-/*--------------------------------------------------------------------------------------------
-**     Prototypes for private functions.
-*/
-
-static sf_count_t      host_read_f2s   (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t      host_read_f2i   (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t      host_read_f     (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t      host_read_f2d   (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t      host_write_s2f  (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t      host_write_i2f  (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t      host_write_f    (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t      host_write_d2f  (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static void            float32_peak_update     (SF_PRIVATE *psf, const float *buffer, int count, sf_count_t indx) ;
-
-static sf_count_t      replace_read_f2s        (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t      replace_read_f2i        (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t      replace_read_f  (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t      replace_read_f2d        (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t      replace_write_s2f       (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t      replace_write_i2f       (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t      replace_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t      replace_write_d2f       (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static void    bf2f_array (float *buffer, int count) ;
-static void    f2bf_array (float *buffer, int count) ;
-
-static int             float32_get_capability  (SF_PRIVATE *psf) ;
-
-/*--------------------------------------------------------------------------------------------
-**     Exported functions.
-*/
-
-int
-float32_init   (SF_PRIVATE *psf)
-{      static int float_caps ;
-
-       float_caps = float32_get_capability (psf) ;
-
-       psf->blockwidth = sizeof (float) * psf->sf.channels ;
-
-       if (psf->file.mode == SFM_READ || psf->file.mode == SFM_RDWR)
-       {       switch (psf->endian + float_caps)
-               {       case (SF_ENDIAN_BIG + FLOAT_CAN_RW_BE) :
-                                       psf->data_endswap = SF_FALSE ;
-                                       psf->read_short         = host_read_f2s ;
-                                       psf->read_int           = host_read_f2i ;
-                                       psf->read_float         = host_read_f ;
-                                       psf->read_double        = host_read_f2d ;
-                                       break ;
-
-                       case (SF_ENDIAN_LITTLE + FLOAT_CAN_RW_LE) :
-                                       psf->data_endswap = SF_FALSE ;
-                                       psf->read_short         = host_read_f2s ;
-                                       psf->read_int           = host_read_f2i ;
-                                       psf->read_float         = host_read_f ;
-                                       psf->read_double        = host_read_f2d ;
-                                       break ;
-
-                       case (SF_ENDIAN_BIG + FLOAT_CAN_RW_LE) :
-                                       psf->data_endswap = SF_TRUE ;
-                                       psf->read_short         = host_read_f2s ;
-                                       psf->read_int           = host_read_f2i ;
-                                       psf->read_float         = host_read_f ;
-                                       psf->read_double        = host_read_f2d ;
-                                       break ;
-
-                       case (SF_ENDIAN_LITTLE + FLOAT_CAN_RW_BE) :
-                                       psf->data_endswap = SF_TRUE ;
-                                       psf->read_short         = host_read_f2s ;
-                                       psf->read_int           = host_read_f2i ;
-                                       psf->read_float         = host_read_f ;
-                                       psf->read_double        = host_read_f2d ;
-                                       break ;
-
-                       /* When the CPU is not IEEE compatible. */
-                       case (SF_ENDIAN_BIG + FLOAT_BROKEN_LE) :
-                                       psf->data_endswap = SF_TRUE ;
-                                       psf->read_short         = replace_read_f2s ;
-                                       psf->read_int           = replace_read_f2i ;
-                                       psf->read_float         = replace_read_f ;
-                                       psf->read_double        = replace_read_f2d ;
-                                       break ;
-
-                       case (SF_ENDIAN_LITTLE + FLOAT_BROKEN_LE) :
-                                       psf->data_endswap = SF_FALSE ;
-                                       psf->read_short         = replace_read_f2s ;
-                                       psf->read_int           = replace_read_f2i ;
-                                       psf->read_float         = replace_read_f ;
-                                       psf->read_double        = replace_read_f2d ;
-                                       break ;
-
-                       case (SF_ENDIAN_BIG + FLOAT_BROKEN_BE) :
-                                       psf->data_endswap = SF_FALSE ;
-                                       psf->read_short         = replace_read_f2s ;
-                                       psf->read_int           = replace_read_f2i ;
-                                       psf->read_float         = replace_read_f ;
-                                       psf->read_double        = replace_read_f2d ;
-                                       break ;
-
-                       case (SF_ENDIAN_LITTLE + FLOAT_BROKEN_BE) :
-                                       psf->data_endswap = SF_TRUE ;
-                                       psf->read_short         = replace_read_f2s ;
-                                       psf->read_int           = replace_read_f2i ;
-                                       psf->read_float         = replace_read_f ;
-                                       psf->read_double        = replace_read_f2d ;
-                                       break ;
-
-                       default : break ;
-                       } ;
-               } ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       switch (psf->endian + float_caps)
-               {       case (SF_ENDIAN_LITTLE + FLOAT_CAN_RW_LE) :
-                                       psf->data_endswap = SF_FALSE ;
-                                       psf->write_short        = host_write_s2f ;
-                                       psf->write_int          = host_write_i2f ;
-                                       psf->write_float        = host_write_f ;
-                                       psf->write_double       = host_write_d2f ;
-                                       break ;
-
-                       case (SF_ENDIAN_BIG + FLOAT_CAN_RW_BE) :
-                                       psf->data_endswap = SF_FALSE ;
-                                       psf->write_short        = host_write_s2f ;
-                                       psf->write_int          = host_write_i2f ;
-                                       psf->write_float        = host_write_f ;
-                                       psf->write_double       = host_write_d2f ;
-                                       break ;
-
-                       case (SF_ENDIAN_BIG + FLOAT_CAN_RW_LE) :
-                                       psf->data_endswap = SF_TRUE ;
-                                       psf->write_short        = host_write_s2f ;
-                                       psf->write_int          = host_write_i2f ;
-                                       psf->write_float        = host_write_f ;
-                                       psf->write_double       = host_write_d2f ;
-                                       break ;
-
-                       case (SF_ENDIAN_LITTLE + FLOAT_CAN_RW_BE) :
-                                       psf->data_endswap = SF_TRUE ;
-                                       psf->write_short        = host_write_s2f ;
-                                       psf->write_int          = host_write_i2f ;
-                                       psf->write_float        = host_write_f ;
-                                       psf->write_double       = host_write_d2f ;
-                                       break ;
-
-                       /* When the CPU is not IEEE compatible. */
-                       case (SF_ENDIAN_BIG + FLOAT_BROKEN_LE) :
-                                       psf->data_endswap = SF_TRUE ;
-                                       psf->write_short        = replace_write_s2f ;
-                                       psf->write_int          = replace_write_i2f ;
-                                       psf->write_float        = replace_write_f ;
-                                       psf->write_double       = replace_write_d2f ;
-                                       break ;
-
-                       case (SF_ENDIAN_LITTLE + FLOAT_BROKEN_LE) :
-                                       psf->data_endswap = SF_FALSE ;
-                                       psf->write_short        = replace_write_s2f ;
-                                       psf->write_int          = replace_write_i2f ;
-                                       psf->write_float        = replace_write_f ;
-                                       psf->write_double       = replace_write_d2f ;
-                                       break ;
-
-                       case (SF_ENDIAN_BIG + FLOAT_BROKEN_BE) :
-                                       psf->data_endswap = SF_FALSE ;
-                                       psf->write_short        = replace_write_s2f ;
-                                       psf->write_int          = replace_write_i2f ;
-                                       psf->write_float        = replace_write_f ;
-                                       psf->write_double       = replace_write_d2f ;
-                                       break ;
-
-                       case (SF_ENDIAN_LITTLE + FLOAT_BROKEN_BE) :
-                                       psf->data_endswap = SF_TRUE ;
-                                       psf->write_short        = replace_write_s2f ;
-                                       psf->write_int          = replace_write_i2f ;
-                                       psf->write_float        = replace_write_f ;
-                                       psf->write_double       = replace_write_d2f ;
-                                       break ;
-
-                       default : break ;
-                       } ;
-               } ;
-
-       if (psf->filelength > psf->dataoffset)
-       {       psf->datalength = (psf->dataend > 0) ? psf->dataend - psf->dataoffset :
-                                                       psf->filelength - psf->dataoffset ;
-               }
-       else
-               psf->datalength = 0 ;
-
-       psf->sf.frames = psf->blockwidth > 0 ? psf->datalength / psf->blockwidth : 0 ;
-
-       return 0 ;
-} /* float32_init */
-
-float
-float32_be_read (const unsigned char *cptr)
-{      int             exponent, mantissa, negative ;
-       float   fvalue ;
-
-       negative = cptr [0] & 0x80 ;
-       exponent = ((cptr [0] & 0x7F) << 1) | ((cptr [1] & 0x80) ? 1 : 0) ;
-       mantissa = ((cptr [1] & 0x7F) << 16) | (cptr [2] << 8) | (cptr [3]) ;
-
-       if (! (exponent || mantissa))
-               return 0.0 ;
-
-       mantissa |= 0x800000 ;
-       exponent = exponent ? exponent - 127 : 0 ;
-
-       fvalue = mantissa ? ((float) mantissa) / ((float) 0x800000) : 0.0 ;
-
-       if (negative)
-               fvalue *= -1 ;
-
-       if (exponent > 0)
-               fvalue *= pow (2.0, exponent) ;
-       else if (exponent < 0)
-               fvalue /= pow (2.0, abs (exponent)) ;
-
-       return fvalue ;
-} /* float32_be_read */
-
-float
-float32_le_read (const unsigned char *cptr)
-{      int             exponent, mantissa, negative ;
-       float   fvalue ;
-
-       negative = cptr [3] & 0x80 ;
-       exponent = ((cptr [3] & 0x7F) << 1) | ((cptr [2] & 0x80) ? 1 : 0) ;
-       mantissa = ((cptr [2] & 0x7F) << 16) | (cptr [1] << 8) | (cptr [0]) ;
-
-       if (! (exponent || mantissa))
-               return 0.0 ;
-
-       mantissa |= 0x800000 ;
-       exponent = exponent ? exponent - 127 : 0 ;
-
-       fvalue = mantissa ? ((float) mantissa) / ((float) 0x800000) : 0.0 ;
-
-       if (negative)
-               fvalue *= -1 ;
-
-       if (exponent > 0)
-               fvalue *= pow (2.0, exponent) ;
-       else if (exponent < 0)
-               fvalue /= pow (2.0, abs (exponent)) ;
-
-       return fvalue ;
-} /* float32_le_read */
-
-void
-float32_le_write (float in, unsigned char *out)
-{      int             exponent, mantissa, negative = 0 ;
-
-       memset (out, 0, sizeof (int)) ;
-
-       if (fabs (in) < 1e-30)
-               return ;
-
-       if (in < 0.0)
-       {       in *= -1.0 ;
-               negative = 1 ;
-               } ;
-
-       in = frexp (in, &exponent) ;
-
-       exponent += 126 ;
-
-       in *= (float) 0x1000000 ;
-       mantissa = (((int) in) & 0x7FFFFF) ;
-
-       if (negative)
-               out [3] |= 0x80 ;
-
-       if (exponent & 0x01)
-               out [2] |= 0x80 ;
-
-       out [0] = mantissa & 0xFF ;
-       out [1] = (mantissa >> 8) & 0xFF ;
-       out [2] |= (mantissa >> 16) & 0x7F ;
-       out [3] |= (exponent >> 1) & 0x7F ;
-
-       return ;
-} /* float32_le_write */
-
-void
-float32_be_write (float in, unsigned char *out)
-{      int             exponent, mantissa, negative = 0 ;
-
-       memset (out, 0, sizeof (int)) ;
-
-       if (fabs (in) < 1e-30)
-               return ;
-
-       if (in < 0.0)
-       {       in *= -1.0 ;
-               negative = 1 ;
-               } ;
-
-       in = frexp (in, &exponent) ;
-
-       exponent += 126 ;
-
-       in *= (float) 0x1000000 ;
-       mantissa = (((int) in) & 0x7FFFFF) ;
-
-       if (negative)
-               out [0] |= 0x80 ;
-
-       if (exponent & 0x01)
-               out [1] |= 0x80 ;
-
-       out [3] = mantissa & 0xFF ;
-       out [2] = (mantissa >> 8) & 0xFF ;
-       out [1] |= (mantissa >> 16) & 0x7F ;
-       out [0] |= (exponent >> 1) & 0x7F ;
-
-       return ;
-} /* float32_be_write */
-
-/*==============================================================================================
-**     Private functions.
-*/
-
-static void
-float32_peak_update    (SF_PRIVATE *psf, const float *buffer, int count, sf_count_t indx)
-{      int     chan ;
-       int             k, position ;
-       float   fmaxval ;
-
-       for (chan = 0 ; chan < psf->sf.channels ; chan++)
-       {       fmaxval = fabs (buffer [chan]) ;
-               position = 0 ;
-               for (k = chan ; k < count ; k += psf->sf.channels)
-                       if (fmaxval < fabs (buffer [k]))
-                       {       fmaxval = fabs (buffer [k]) ;
-                               position = k ;
-                               } ;
-
-               if (fmaxval > psf->peak_info->peaks [chan].value)
-               {       psf->peak_info->peaks [chan].value = fmaxval ;
-                       psf->peak_info->peaks [chan].position = psf->write_current + indx + (position / psf->sf.channels) ;
-                       } ;
-               } ;
-
-       return ;
-} /* float32_peak_update */
-
-static int
-float32_get_capability (SF_PRIVATE *psf)
-{      union
-       {       float                   f ;
-               int                             i ;
-               unsigned char   c [4] ;
-       } data ;
-
-       data.f = (float) 1.23456789 ; /* Some abitrary value. */
-
-       if (! psf->ieee_replace)
-       {       /* If this test is true ints and floats are compatible and little endian. */
-               if (data.c [0] == 0x52 && data.c [1] == 0x06 && data.c [2] == 0x9e && data.c [3] == 0x3f)
-                       return FLOAT_CAN_RW_LE ;
-
-               /* If this test is true ints and floats are compatible and big endian. */
-               if (data.c [3] == 0x52 && data.c [2] == 0x06 && data.c [1] == 0x9e && data.c [0] == 0x3f)
-                       return FLOAT_CAN_RW_BE ;
-               } ;
-
-       /* Floats are broken. Don't expect reading or writing to be fast. */
-       psf_log_printf (psf, "Using IEEE replacement code for float.\n") ;
-
-       return (CPU_IS_LITTLE_ENDIAN) ? FLOAT_BROKEN_LE : FLOAT_BROKEN_BE ;
-} /* float32_get_capability */
-
-/*=======================================================================================
-*/
-
-static void
-f2s_array (const float *src, int count, short *dest, float scale)
-{
-       while (--count >= 0)
-       {       dest [count] = lrintf (scale * src [count]) ;
-               } ;
-} /* f2s_array */
-
-static void
-f2s_clip_array (const float *src, int count, short *dest, float scale)
-{      while (--count >= 0)
-       {       float tmp = scale * src [count] ;
-
-               if (CPU_CLIPS_POSITIVE == 0 && tmp > 32767.0)
-                       dest [count] = SHRT_MAX ;
-               else if (CPU_CLIPS_NEGATIVE == 0 && tmp < -32768.0)
-                       dest [count] = SHRT_MIN ;
-               else
-                       dest [count] = lrintf (tmp) ;
-               } ;
-} /* f2s_clip_array */
-
-static inline void
-f2i_array (const float *src, int count, int *dest, float scale)
-{      while (--count >= 0)
-       {       dest [count] = lrintf (scale * src [count]) ;
-               } ;
-} /* f2i_array */
-
-static inline void
-f2i_clip_array (const float *src, int count, int *dest, float scale)
-{      while (--count >= 0)
-       {       float tmp = scale * src [count] ;
-
-               if (CPU_CLIPS_POSITIVE == 0 && tmp > (1.0 * INT_MAX))
-                       dest [count] = INT_MAX ;
-               else if (CPU_CLIPS_NEGATIVE == 0 && tmp < (-1.0 * INT_MAX))
-                       dest [count] = INT_MIN ;
-               else
-                       dest [count] = lrintf (tmp) ;
-               } ;
-} /* f2i_clip_array */
-
-static inline void
-f2d_array (const float *src, int count, double *dest)
-{      while (--count >= 0)
-       {       dest [count] = src [count] ;
-               } ;
-} /* f2d_array */
-
-static inline void
-s2f_array (const short *src, float *dest, int count, float scale)
-{      while (--count >= 0)
-       {       dest [count] = scale * src [count] ;
-               } ;
-} /* s2f_array */
-
-static inline void
-i2f_array (const int *src, float *dest, int count, float scale)
-{      while (--count >= 0)
-       {       dest [count] = scale * src [count] ;
-               } ;
-} /* i2f_array */
-
-static inline void
-d2f_array (const double *src, float *dest, int count)
-{      while (--count >= 0)
-       {       dest [count] = src [count] ;
-               } ;
-} /* d2f_array */
-
-/*----------------------------------------------------------------------------------------------
-*/
-
-static sf_count_t
-host_read_f2s  (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       void            (*convert) (const float *, int, short *, float) ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       float           scale ;
-
-       convert = (psf->add_clipping) ? f2s_clip_array : f2s_array ;
-       bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-       scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFF / psf->float_max ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-
-/* Fix me : Need lef2s_array */
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-               convert (ubuf.fbuf, readcount, ptr + total, scale) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* host_read_f2s */
-
-static sf_count_t
-host_read_f2i  (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       void            (*convert) (const float *, int, int *, float) ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       float           scale ;
-
-       convert = (psf->add_clipping) ? f2i_clip_array : f2i_array ;
-       bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-       scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFFFFFF / psf->float_max ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-               convert (ubuf.fbuf, readcount, ptr + total, scale) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* host_read_f2i */
-
-static sf_count_t
-host_read_f    (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       if (psf->data_endswap != SF_TRUE)
-               return psf_fread (ptr, sizeof (float), len, psf) ;
-
-       bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-
-               endswap_int_copy ((int*) (ptr + total), ubuf.ibuf, readcount) ;
-
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* host_read_f */
-
-static sf_count_t
-host_read_f2d  (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-/* Fix me : Need lef2d_array */
-               f2d_array (ubuf.fbuf, readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* host_read_f2d */
-
-static sf_count_t
-host_write_s2f (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-       float           scale ;
-
-/* Erik */
-       scale = (psf->scale_int_float == 0) ? 1.0 : 1.0 / 0x8000 ;
-       bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               s2f_array (ptr + total, ubuf.fbuf, bufferlen, scale) ;
-
-               if (psf->peak_info)
-                       float32_peak_update (psf, ubuf.fbuf, bufferlen, total / psf->sf.channels) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-               writecount = psf_fwrite (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* host_write_s2f */
-
-static sf_count_t
-host_write_i2f (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-       float           scale ;
-
-       scale = (psf->scale_int_float == 0) ? 1.0 : 1.0 / (8.0 * 0x10000000) ;
-       bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               i2f_array (ptr + total, ubuf.fbuf, bufferlen, scale) ;
-
-               if (psf->peak_info)
-                       float32_peak_update (psf, ubuf.fbuf, bufferlen, total / psf->sf.channels) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-               writecount = psf_fwrite (ubuf.fbuf, sizeof (float) , bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* host_write_i2f */
-
-static sf_count_t
-host_write_f   (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       if (psf->peak_info)
-               float32_peak_update (psf, ptr, len, 0) ;
-
-       if (psf->data_endswap != SF_TRUE)
-               return psf_fwrite (ptr, sizeof (float), len, psf) ;
-
-       bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-
-               endswap_int_copy (ubuf.ibuf, (const int*) (ptr + total), bufferlen) ;
-
-               writecount = psf_fwrite (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* host_write_f */
-
-static sf_count_t
-host_write_d2f (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-
-               d2f_array (ptr + total, ubuf.fbuf, bufferlen) ;
-
-               if (psf->peak_info)
-                       float32_peak_update (psf, ubuf.fbuf, bufferlen, total / psf->sf.channels) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-               writecount = psf_fwrite (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* host_write_d2f */
-
-/*=======================================================================================
-*/
-
-static sf_count_t
-replace_read_f2s       (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       float           scale ;
-
-       bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-       scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFF / psf->float_max ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-               bf2f_array (ubuf.fbuf, bufferlen) ;
-
-               f2s_array (ubuf.fbuf, readcount, ptr + total, scale) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* replace_read_f2s */
-
-static sf_count_t
-replace_read_f2i       (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       float           scale ;
-
-       bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-       scale = (psf->float_int_mult == 0) ? 1.0 : 0x7FFF / psf->float_max ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-               bf2f_array (ubuf.fbuf, bufferlen) ;
-
-               f2i_array (ubuf.fbuf, readcount, ptr + total, scale) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* replace_read_f2i */
-
-static sf_count_t
-replace_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       /* FIX THIS */
-
-       bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-               bf2f_array (ubuf.fbuf, bufferlen) ;
-
-               memcpy (ptr + total, ubuf.fbuf, bufferlen * sizeof (float)) ;
-
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* replace_read_f */
-
-static sf_count_t
-replace_read_f2d       (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-               bf2f_array (ubuf.fbuf, bufferlen) ;
-
-               f2d_array (ubuf.fbuf, readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* replace_read_f2d */
-
-static sf_count_t
-replace_write_s2f      (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-       float           scale ;
-
-       scale = (psf->scale_int_float == 0) ? 1.0 : 1.0 / 0x8000 ;
-       bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               s2f_array (ptr + total, ubuf.fbuf, bufferlen, scale) ;
-
-               if (psf->peak_info)
-                       float32_peak_update (psf, ubuf.fbuf, bufferlen, total / psf->sf.channels) ;
-
-               f2bf_array (ubuf.fbuf, bufferlen) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-               writecount = psf_fwrite (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* replace_write_s2f */
-
-static sf_count_t
-replace_write_i2f      (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-       float           scale ;
-
-       scale = (psf->scale_int_float == 0) ? 1.0 : 1.0 / (8.0 * 0x10000000) ;
-       bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               i2f_array (ptr + total, ubuf.fbuf, bufferlen, scale) ;
-
-               if (psf->peak_info)
-                       float32_peak_update (psf, ubuf.fbuf, bufferlen, total / psf->sf.channels) ;
-
-               f2bf_array (ubuf.fbuf, bufferlen) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-               writecount = psf_fwrite (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* replace_write_i2f */
-
-static sf_count_t
-replace_write_f        (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       /* FIX THIS */
-       if (psf->peak_info)
-               float32_peak_update (psf, ptr, len, 0) ;
-
-       bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-
-               memcpy (ubuf.fbuf, ptr + total, bufferlen * sizeof (float)) ;
-
-               f2bf_array (ubuf.fbuf, bufferlen) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-               writecount = psf_fwrite (ubuf.fbuf, sizeof (float) , bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* replace_write_f */
-
-static sf_count_t
-replace_write_d2f      (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.fbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               d2f_array (ptr + total, ubuf.fbuf, bufferlen) ;
-
-               if (psf->peak_info)
-                       float32_peak_update (psf, ubuf.fbuf, bufferlen, total / psf->sf.channels) ;
-
-               f2bf_array (ubuf.fbuf, bufferlen) ;
-
-               if (psf->data_endswap == SF_TRUE)
-                       endswap_int_array (ubuf.ibuf, bufferlen) ;
-
-               writecount = psf_fwrite (ubuf.fbuf, sizeof (float), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* replace_write_d2f */
-
-/*----------------------------------------------------------------------------------------------
-*/
-
-static void
-bf2f_array (float *buffer, int count)
-{      while (--count >= 0)
-       {       buffer [count] = FLOAT32_READ ((unsigned char *) (buffer + count)) ;
-               } ;
-} /* bf2f_array */
-
-static void
-f2bf_array (float *buffer, int count)
-{      while (--count >= 0)
-       {       FLOAT32_WRITE (buffer [count], (unsigned char*) (buffer + count)) ;
-               } ;
-} /* f2bf_array */
-
diff --git a/libs/libsndfile/src/float_cast.h b/libs/libsndfile/src/float_cast.h
deleted file mode 100644 (file)
index 98c7de7..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
-** Copyright (C) 2001-2004 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/* Version 1.4 */
-
-#ifndef FLOAT_CAST_HEADER
-#define FLOAT_CAST_HEADER
-
-/*============================================================================
-**     On Intel Pentium processors (especially PIII and probably P4), converting
-**     from float to int is very slow. To meet the C specs, the code produced by
-**     most C compilers targeting Pentium needs to change the FPU rounding mode
-**     before the float to int conversion is performed.
-**
-**     Changing the FPU rounding mode causes the FPU pipeline to be flushed. It
-**     is this flushing of the pipeline which is so slow.
-**
-**     Fortunately the ISO C99 specifications define the functions lrint, lrintf,
-**     llrint and llrintf which fix this problem as a side effect.
-**
-**     On Unix-like systems, the configure process should have detected the
-**     presence of these functions. If they weren't found we have to replace them
-**     here with a standard C cast.
-*/
-
-/*
-**     The C99 prototypes for lrint and lrintf are as follows:
-**
-**             long int lrintf (float x) ;
-**             long int lrint  (double x) ;
-*/
-
-#include "sfconfig.h"
-
-/*
-**     The presence of the required functions are detected during the configure
-**     process and the values HAVE_LRINT and HAVE_LRINTF are set accordingly in
-**     the sfconfig.h file.
-*/
-
-#define                HAVE_LRINT_REPLACEMENT  0
-
-#if (HAVE_LRINT && HAVE_LRINTF)
-
-       /*
-       **      These defines enable functionality introduced with the 1999 ISO C
-       **      standard. They must be defined before the inclusion of math.h to
-       **      engage them. If optimisation is enabled, these functions will be
-       **      inlined. With optimisation switched off, you have to link in the
-       **      maths library using -lm.
-       */
-
-       #define _ISOC9X_SOURCE  1
-       #define _ISOC99_SOURCE  1
-
-       #define __USE_ISOC9X    1
-       #define __USE_ISOC99    1
-
-       #include        <math.h>
-
-#elif (defined (__CYGWIN__))
-
-       #include        <math.h>
-
-       #undef          HAVE_LRINT_REPLACEMENT
-       #define         HAVE_LRINT_REPLACEMENT  1
-
-       #undef  lrint
-       #undef  lrintf
-
-       #define lrint   double2int
-       #define lrintf  float2int
-
-       /*
-       **      The native CYGWIN lrint and lrintf functions are buggy:
-       **              http://sourceware.org/ml/cygwin/2005-06/msg00153.html
-       **              http://sourceware.org/ml/cygwin/2005-09/msg00047.html
-       **      and slow.
-       **      These functions (pulled from the Public Domain MinGW math.h header)
-       **      replace the native versions.
-       */
-
-       static inline long double2int (double in)
-       {       long retval ;
-
-               __asm__ __volatile__
-               (       "fistpl %0"
-                       : "=m" (retval)
-                       : "t" (in)
-                       : "st"
-                       ) ;
-
-               return retval ;
-       } /* double2int */
-
-       static inline long float2int (float in)
-       {       long retval ;
-
-               __asm__ __volatile__
-               (       "fistpl %0"
-                       : "=m" (retval)
-                       : "t" (in)
-                       : "st"
-                       ) ;
-
-               return retval ;
-       } /* float2int */
-
-#elif (defined (WIN32) || defined (_WIN32)) && !defined(_WIN64)
-
-       #undef          HAVE_LRINT_REPLACEMENT
-       #define         HAVE_LRINT_REPLACEMENT  1
-
-       #include        <math.h>
-
-       /*
-       **      Win32 doesn't seem to have these functions.
-       **      Therefore implement inline versions of these functions here.
-       */
-
-       __inline long int
-       lrint (double flt)
-       {       int intgr ;
-
-               _asm
-               {       fld flt
-                       fistp intgr
-                       } ;
-
-               return intgr ;
-       }
-
-       __inline long int
-       lrintf (float flt)
-       {       int intgr ;
-
-               _asm
-               {       fld flt
-                       fistp intgr
-                       } ;
-
-               return intgr ;
-       }
-
-#elif defined(_WIN64)
-#if (_MSC_VER < 1800)
-    __inline long int lrint(double x)
-    {
-        return (long int) (x);
-    }
-    __inline long int lrintf(float x)
-    {
-        return (long int) (x);
-    }
-#endif
-#elif (defined (__MWERKS__) && defined (macintosh))
-
-       /* This MacOS 9 solution was provided by Stephane Letz */
-
-       #undef          HAVE_LRINT_REPLACEMENT
-       #define         HAVE_LRINT_REPLACEMENT  1
-       #include        <math.h>
-
-       #undef  lrint
-       #undef  lrintf
-
-       #define lrint   double2int
-       #define lrintf  float2int
-
-       inline int
-       float2int (register float in)
-       {       long res [2] ;
-
-               asm
-               {       fctiw   in, in
-                       stfd     in, res
-               }
-               return res [1] ;
-       } /* float2int */
-
-       inline int
-       double2int (register double in)
-       {       long res [2] ;
-
-               asm
-               {       fctiw   in, in
-                       stfd     in, res
-               }
-               return res [1] ;
-       } /* double2int */
-
-#elif (defined (__MACH__) && defined (__APPLE__))
-
-       /* For Apple MacOSX. */
-
-       #undef          HAVE_LRINT_REPLACEMENT
-       #define         HAVE_LRINT_REPLACEMENT  1
-       #include        <math.h>
-
-       #undef lrint
-       #undef lrintf
-
-       #define lrint   double2int
-       #define lrintf  float2int
-
-       inline static long
-       float2int (register float in)
-       {       int res [2] ;
-
-               __asm__ __volatile__
-               (       "fctiw  %1, %1\n\t"
-                       "stfd   %1, %0"
-                       : "=m" (res)    /* Output */
-                       : "f" (in)              /* Input */
-                       : "memory"
-                       ) ;
-
-               return res [1] ;
-       } /* lrintf */
-
-       inline static long
-       double2int (register double in)
-       {       int res [2] ;
-
-               __asm__ __volatile__
-               (       "fctiw  %1, %1\n\t"
-                       "stfd   %1, %0"
-                       : "=m" (res)    /* Output */
-                       : "f" (in)              /* Input */
-                       : "memory"
-                       ) ;
-
-               return res [1] ;
-       } /* lrint */
-
-#else
-       #ifndef __sgi
-       #warning "Don't have the functions lrint() and lrintf()."
-       #warning "Replacing these functions with a standard C cast."
-       #endif
-
-       #include        <math.h>
-
-       #define lrint(dbl)              ((long) (dbl))
-       #define lrintf(flt)             ((long) (flt))
-
-#endif
-
-
-#endif /* FLOAT_CAST_HEADER */
-
-/*
-** Do not edit or modify anything in this comment block.
-** The arch-tag line is a file identity tag for the GNU Arch
-** revision control system.
-**
-** arch-tag: 42db1693-ff61-4051-bac1-e4d24c4e30b7
-*/
diff --git a/libs/libsndfile/src/g72x.c b/libs/libsndfile/src/g72x.c
deleted file mode 100644 (file)
index fec5d3f..0000000
+++ /dev/null
@@ -1,608 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-#include "G72x/g72x.h"
-
-/* This struct is private to the G72x code. */
-struct g72x_state ;
-typedef struct g72x_state G72x_STATE ;
-
-typedef struct
-{      /* Private data. Don't mess with it. */
-       struct g72x_state * private ;
-
-       /* Public data. Read only. */
-       int                             blocksize, samplesperblock, bytesperblock ;
-
-       /* Public data. Read and write. */
-       int                             blocks_total, block_curr, sample_curr ;
-       unsigned char   block   [G72x_BLOCK_SIZE] ;
-       short                   samples [G72x_BLOCK_SIZE] ;
-} G72x_PRIVATE ;
-
-static int     psf_g72x_decode_block (SF_PRIVATE *psf, G72x_PRIVATE *pg72x) ;
-static int     psf_g72x_encode_block (SF_PRIVATE *psf, G72x_PRIVATE *pg72x) ;
-
-static sf_count_t      g72x_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t      g72x_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t      g72x_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t      g72x_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t      g72x_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t      g72x_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t      g72x_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t      g72x_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static sf_count_t g72x_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-
-static int     g72x_close (SF_PRIVATE *psf) ;
-
-
-/*============================================================================================
-** WAV G721 Reader initialisation function.
-*/
-
-int
-g72x_init (SF_PRIVATE * psf)
-{      G72x_PRIVATE    *pg72x ;
-       int     bitspersample, bytesperblock, codec ;
-
-       if (psf->codec_data != NULL)
-       {       psf_log_printf (psf, "*** psf->codec_data is not NULL.\n") ;
-               return SFE_INTERNAL ;
-               } ;
-
-       psf->sf.seekable = SF_FALSE ;
-
-       if (psf->sf.channels != 1)
-               return SFE_G72X_NOT_MONO ;
-
-       if ((pg72x = calloc (1, sizeof (G72x_PRIVATE))) == NULL)
-               return SFE_MALLOC_FAILED ;
-
-       psf->codec_data = (void*) pg72x ;
-
-       pg72x->block_curr = 0 ;
-       pg72x->sample_curr = 0 ;
-
-       switch (SF_CODEC (psf->sf.format))
-       {       case SF_FORMAT_G721_32 :
-                               codec = G721_32_BITS_PER_SAMPLE ;
-                               bytesperblock = G721_32_BYTES_PER_BLOCK ;
-                               bitspersample = G721_32_BITS_PER_SAMPLE ;
-                               break ;
-
-               case SF_FORMAT_G723_24:
-                               codec = G723_24_BITS_PER_SAMPLE ;
-                               bytesperblock = G723_24_BYTES_PER_BLOCK ;
-                               bitspersample = G723_24_BITS_PER_SAMPLE ;
-                               break ;
-
-               case SF_FORMAT_G723_40:
-                               codec = G723_40_BITS_PER_SAMPLE ;
-                               bytesperblock = G723_40_BYTES_PER_BLOCK ;
-                               bitspersample = G723_40_BITS_PER_SAMPLE ;
-                               break ;
-
-               default : return SFE_UNIMPLEMENTED ;
-               } ;
-
-       psf->filelength = psf_get_filelen (psf) ;
-       if (psf->filelength < psf->dataoffset)
-               psf->filelength = psf->dataoffset ;
-
-       psf->datalength = psf->filelength - psf->dataoffset ;
-       if (psf->dataend > 0)
-               psf->datalength -= psf->filelength - psf->dataend ;
-
-       if (psf->file.mode == SFM_READ)
-       {       pg72x->private = g72x_reader_init (codec, &(pg72x->blocksize), &(pg72x->samplesperblock)) ;
-               if (pg72x->private == NULL)
-                       return SFE_MALLOC_FAILED ;
-
-               pg72x->bytesperblock = bytesperblock ;
-
-               psf->read_short         = g72x_read_s ;
-               psf->read_int           = g72x_read_i ;
-               psf->read_float         = g72x_read_f ;
-               psf->read_double        = g72x_read_d ;
-
-               psf->seek = g72x_seek ;
-
-               if (psf->datalength % pg72x->blocksize)
-               {       psf_log_printf (psf, "*** Odd psf->datalength (%D) should be a multiple of %d\n", psf->datalength, pg72x->blocksize) ;
-                       pg72x->blocks_total = (psf->datalength / pg72x->blocksize) + 1 ;
-                       }
-               else
-                       pg72x->blocks_total = psf->datalength / pg72x->blocksize ;
-
-               psf->sf.frames = pg72x->blocks_total * pg72x->samplesperblock ;
-
-               psf_g72x_decode_block (psf, pg72x) ;
-               }
-       else if (psf->file.mode == SFM_WRITE)
-       {       pg72x->private = g72x_writer_init (codec, &(pg72x->blocksize), &(pg72x->samplesperblock)) ;
-               if (pg72x->private == NULL)
-                       return SFE_MALLOC_FAILED ;
-
-               pg72x->bytesperblock = bytesperblock ;
-
-               psf->write_short        = g72x_write_s ;
-               psf->write_int          = g72x_write_i ;
-               psf->write_float        = g72x_write_f ;
-               psf->write_double       = g72x_write_d ;
-
-               if (psf->datalength % pg72x->blocksize)
-                       pg72x->blocks_total = (psf->datalength / pg72x->blocksize) + 1 ;
-               else
-                       pg72x->blocks_total = psf->datalength / pg72x->blocksize ;
-
-               if (psf->datalength > 0)
-                       psf->sf.frames = (8 * psf->datalength) / bitspersample ;
-
-               if ((psf->sf.frames * bitspersample) / 8 != psf->datalength)
-                       psf_log_printf (psf, "*** Warning : weird psf->datalength.\n") ;
-               } ;
-
-       psf->codec_close        = g72x_close ;
-
-       return 0 ;
-} /* g72x_init */
-
-/*============================================================================================
-** G721 Read Functions.
-*/
-
-static int
-psf_g72x_decode_block (SF_PRIVATE *psf, G72x_PRIVATE *pg72x)
-{      int     k ;
-
-       pg72x->block_curr ++ ;
-       pg72x->sample_curr = 0 ;
-
-       if (pg72x->block_curr > pg72x->blocks_total)
-       {       memset (pg72x->samples, 0, G72x_BLOCK_SIZE * sizeof (short)) ;
-               return 1 ;
-               } ;
-
-       if ((k = psf_fread (pg72x->block, 1, pg72x->bytesperblock, psf)) != pg72x->bytesperblock)
-               psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, pg72x->bytesperblock) ;
-
-       pg72x->blocksize = k ;
-       g72x_decode_block (pg72x->private, pg72x->block, pg72x->samples) ;
-
-       return 1 ;
-} /* psf_g72x_decode_block */
-
-static int
-g72x_read_block (SF_PRIVATE *psf, G72x_PRIVATE *pg72x, short *ptr, int len)
-{      int     count, total = 0, indx = 0 ;
-
-       while (indx < len)
-       {       if (pg72x->block_curr > pg72x->blocks_total)
-               {       memset (&(ptr [indx]), 0, (len - indx) * sizeof (short)) ;
-                       return total ;
-                       } ;
-
-               if (pg72x->sample_curr >= pg72x->samplesperblock)
-                       psf_g72x_decode_block (psf, pg72x) ;
-
-               count = pg72x->samplesperblock - pg72x->sample_curr ;
-               count = (len - indx > count) ? count : len - indx ;
-
-               memcpy (&(ptr [indx]), &(pg72x->samples [pg72x->sample_curr]), count * sizeof (short)) ;
-               indx += count ;
-               pg72x->sample_curr += count ;
-               total = indx ;
-               } ;
-
-       return total ;
-} /* g72x_read_block */
-
-static sf_count_t
-g72x_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      G72x_PRIVATE    *pg72x ;
-       int                     readcount, count ;
-       sf_count_t      total = 0 ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       pg72x = (G72x_PRIVATE*) psf->codec_data ;
-
-       while (len > 0)
-       {       readcount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-               count = g72x_read_block (psf, pg72x, ptr, readcount) ;
-
-               total += count ;
-               len -= count ;
-
-               if (count != readcount)
-                       break ;
-               } ;
-
-       return total ;
-} /* g72x_read_s */
-
-static sf_count_t
-g72x_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       G72x_PRIVATE *pg72x ;
-       short           *sptr ;
-       int                     k, bufferlen, readcount = 0, count ;
-       sf_count_t      total = 0 ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       pg72x = (G72x_PRIVATE*) psf->codec_data ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = SF_BUFFER_LEN / sizeof (short) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = g72x_read_block (psf, pg72x, sptr, readcount) ;
-
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = sptr [k] << 16 ;
-
-               total += count ;
-               len -= readcount ;
-               if (count != readcount)
-                       break ;
-               } ;
-
-       return total ;
-} /* g72x_read_i */
-
-static sf_count_t
-g72x_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       G72x_PRIVATE *pg72x ;
-       short           *sptr ;
-       int                     k, bufferlen, readcount = 0, count ;
-       sf_count_t      total = 0 ;
-       float           normfact ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       pg72x = (G72x_PRIVATE*) psf->codec_data ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = SF_BUFFER_LEN / sizeof (short) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = g72x_read_block (psf, pg72x, sptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = normfact * sptr [k] ;
-
-               total += count ;
-               len -= readcount ;
-               if (count != readcount)
-                       break ;
-               } ;
-
-       return total ;
-} /* g72x_read_f */
-
-static sf_count_t
-g72x_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       G72x_PRIVATE *pg72x ;
-       short           *sptr ;
-       int                     k, bufferlen, readcount = 0, count ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       pg72x = (G72x_PRIVATE*) psf->codec_data ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = SF_BUFFER_LEN / sizeof (short) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = g72x_read_block (psf, pg72x, sptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = normfact * (double) (sptr [k]) ;
-
-               total += count ;
-               len -= readcount ;
-               if (count != readcount)
-                       break ;
-               } ;
-
-       return total ;
-} /* g72x_read_d */
-
-static sf_count_t
-g72x_seek (SF_PRIVATE *psf, int UNUSED (mode), sf_count_t UNUSED (offset))
-{
-       psf_log_printf (psf, "seek unsupported\n") ;
-
-       /*      No simple solution. To do properly, would need to seek
-       **      to start of file and decode everything up to seek position.
-       **      Maybe implement SEEK_SET to 0 only?
-       */
-       return 0 ;
-
-/*
-**             G72x_PRIVATE    *pg72x ;
-**             int                     newblock, newsample, sample_curr ;
-**
-**             if (psf->codec_data == NULL)
-**                     return 0 ;
-**             pg72x = (G72x_PRIVATE*) psf->codec_data ;
-**
-**             if (! (psf->datalength && psf->dataoffset))
-**             {       psf->error = SFE_BAD_SEEK ;
-**                     return  PSF_SEEK_ERROR ;
-**                     } ;
-**
-**             sample_curr = (8 * psf->datalength) / G721_32_BITS_PER_SAMPLE ;
-**
-**             switch (whence)
-**             {       case SEEK_SET :
-**                                     if (offset < 0 || offset > sample_curr)
-**                                     {       psf->error = SFE_BAD_SEEK ;
-**                                             return  PSF_SEEK_ERROR ;
-**                                             } ;
-**                                     newblock  = offset / pg72x->samplesperblock ;
-**                                     newsample = offset % pg72x->samplesperblock ;
-**                                     break ;
-**
-**                     case SEEK_CUR :
-**                                     if (psf->current + offset < 0 || psf->current + offset > sample_curr)
-**                                     {       psf->error = SFE_BAD_SEEK ;
-**                                             return  PSF_SEEK_ERROR ;
-**                                             } ;
-**                                     newblock  = (8 * (psf->current + offset)) / pg72x->samplesperblock ;
-**                                     newsample = (8 * (psf->current + offset)) % pg72x->samplesperblock ;
-**                                     break ;
-**
-**                     case SEEK_END :
-**                                     if (offset > 0 || sample_curr + offset < 0)
-**                                     {       psf->error = SFE_BAD_SEEK ;
-**                                             return  PSF_SEEK_ERROR ;
-**                                             } ;
-**                                     newblock  = (sample_curr + offset) / pg72x->samplesperblock ;
-**                                     newsample = (sample_curr + offset) % pg72x->samplesperblock ;
-**                                     break ;
-**
-**                     default :
-**                                     psf->error = SFE_BAD_SEEK ;
-**                                     return  PSF_SEEK_ERROR ;
-**                     } ;
-**
-**             if (psf->file.mode == SFM_READ)
-**             {       psf_fseek (psf, psf->dataoffset + newblock * pg72x->blocksize, SEEK_SET) ;
-**                     pg72x->block_curr  = newblock ;
-**                     psf_g72x_decode_block (psf, pg72x) ;
-**                     pg72x->sample_curr = newsample ;
-**                     }
-**             else
-**             {       /+* What to do about write??? *+/
-**                     psf->error = SFE_BAD_SEEK ;
-**                     return  PSF_SEEK_ERROR ;
-**                     } ;
-**
-**             psf->current = newblock * pg72x->samplesperblock + newsample ;
-**             return psf->current ;
-**
-*/
-} /* g72x_seek */
-
-/*==========================================================================================
-** G72x Write Functions.
-*/
-
-static int
-psf_g72x_encode_block (SF_PRIVATE *psf, G72x_PRIVATE *pg72x)
-{      int k ;
-
-       /* Encode the samples. */
-       g72x_encode_block (pg72x->private, pg72x->samples, pg72x->block) ;
-
-       /* Write the block to disk. */
-       if ((k = psf_fwrite (pg72x->block, 1, pg72x->blocksize, psf)) != pg72x->blocksize)
-               psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, pg72x->blocksize) ;
-
-       pg72x->sample_curr = 0 ;
-       pg72x->block_curr ++ ;
-
-       /* Set samples to zero for next block. */
-       memset (pg72x->samples, 0, G72x_BLOCK_SIZE * sizeof (short)) ;
-
-       return 1 ;
-} /* psf_g72x_encode_block */
-
-static int
-g72x_write_block (SF_PRIVATE *psf, G72x_PRIVATE *pg72x, const short *ptr, int len)
-{      int     count, total = 0, indx = 0 ;
-
-       while (indx < len)
-       {       count = pg72x->samplesperblock - pg72x->sample_curr ;
-
-               if (count > len - indx)
-                       count = len - indx ;
-
-               memcpy (&(pg72x->samples [pg72x->sample_curr]), &(ptr [indx]), count * sizeof (short)) ;
-               indx += count ;
-               pg72x->sample_curr += count ;
-               total = indx ;
-
-               if (pg72x->sample_curr >= pg72x->samplesperblock)
-                       psf_g72x_encode_block (psf, pg72x) ;
-               } ;
-
-       return total ;
-} /* g72x_write_block */
-
-static sf_count_t
-g72x_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      G72x_PRIVATE    *pg72x ;
-       int                     writecount, count ;
-       sf_count_t      total = 0 ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       pg72x = (G72x_PRIVATE*) psf->codec_data ;
-
-       while (len > 0)
-       {       writecount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-               count = g72x_write_block (psf, pg72x, ptr, writecount) ;
-
-               total += count ;
-               len -= count ;
-               if (count != writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* g72x_write_s */
-
-static sf_count_t
-g72x_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       G72x_PRIVATE *pg72x ;
-       short           *sptr ;
-       int                     k, bufferlen, writecount = 0, count ;
-       sf_count_t      total = 0 ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       pg72x = (G72x_PRIVATE*) psf->codec_data ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = SF_BUFFER_LEN / sizeof (short) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : len ;
-               for (k = 0 ; k < writecount ; k++)
-                       sptr [k] = ptr [total + k] >> 16 ;
-               count = g72x_write_block (psf, pg72x, sptr, writecount) ;
-
-               total += count ;
-               len -= writecount ;
-               if (count != writecount)
-                       break ;
-               } ;
-       return total ;
-} /* g72x_write_i */
-
-static sf_count_t
-g72x_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       G72x_PRIVATE *pg72x ;
-       short           *sptr ;
-       int                     k, bufferlen, writecount = 0, count ;
-       sf_count_t      total = 0 ;
-       float           normfact ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       pg72x = (G72x_PRIVATE*) psf->codec_data ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x8000) : 1.0 ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = SF_BUFFER_LEN / sizeof (short) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : len ;
-               for (k = 0 ; k < writecount ; k++)
-                       sptr [k] = lrintf (normfact * ptr [total + k]) ;
-               count = g72x_write_block (psf, pg72x, sptr, writecount) ;
-
-               total += count ;
-               len -= writecount ;
-               if (count != writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* g72x_write_f */
-
-static sf_count_t
-g72x_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       G72x_PRIVATE *pg72x ;
-       short           *sptr ;
-       int                     k, bufferlen, writecount = 0, count ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       pg72x = (G72x_PRIVATE*) psf->codec_data ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x8000) : 1.0 ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = SF_BUFFER_LEN / sizeof (short) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : len ;
-               for (k = 0 ; k < writecount ; k++)
-                       sptr [k] = lrint (normfact * ptr [total + k]) ;
-               count = g72x_write_block (psf, pg72x, sptr, writecount) ;
-
-               total += count ;
-               len -= writecount ;
-               if (count != writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* g72x_write_d */
-
-static int
-g72x_close (SF_PRIVATE *psf)
-{      G72x_PRIVATE *pg72x ;
-
-       pg72x = (G72x_PRIVATE*) psf->codec_data ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       /*      If a block has been partially assembled, write it out
-               **      as the final block.
-               */
-
-               if (pg72x->sample_curr && pg72x->sample_curr < G72x_BLOCK_SIZE)
-                       psf_g72x_encode_block (psf, pg72x) ;
-
-               if (psf->write_header)
-                       psf->write_header (psf, SF_FALSE) ;
-               } ;
-
-       /* Only free the pointer allocated by g72x_(reader|writer)_init. */
-       free (pg72x->private) ;
-
-       return 0 ;
-} /* g72x_close */
-
diff --git a/libs/libsndfile/src/gsm610.c b/libs/libsndfile/src/gsm610.c
deleted file mode 100644 (file)
index 0d2800d..0000000
+++ /dev/null
@@ -1,627 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-#include "wav_w64.h"
-#include "GSM610/gsm.h"
-
-#define        GSM610_BLOCKSIZE                33
-#define        GSM610_SAMPLES                  160
-
-typedef struct gsm610_tag
-{      int                             blocks ;
-       int                             blockcount, samplecount ;
-       int                             samplesperblock, blocksize ;
-
-       int                             (*decode_block) (SF_PRIVATE *psf, struct gsm610_tag *pgsm610) ;
-       int                             (*encode_block) (SF_PRIVATE *psf, struct gsm610_tag *pgsm610) ;
-
-       short                   samples [WAV_W64_GSM610_SAMPLES] ;
-       unsigned char   block [WAV_W64_GSM610_BLOCKSIZE] ;
-
-       /* Damn I hate typedef-ed pointers; yes, gsm is a pointer type. */
-       gsm                             gsm_data ;
-} GSM610_PRIVATE ;
-
-static sf_count_t      gsm610_read_s   (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t      gsm610_read_i   (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t      gsm610_read_f   (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t      gsm610_read_d   (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t      gsm610_write_s  (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t      gsm610_write_i  (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t      gsm610_write_f  (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t      gsm610_write_d  (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static int gsm610_read_block   (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610, short *ptr, int len) ;
-static int gsm610_write_block  (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610, const short *ptr, int len) ;
-
-static int     gsm610_decode_block     (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610) ;
-static int     gsm610_encode_block     (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610) ;
-
-static int     gsm610_wav_decode_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610) ;
-static int     gsm610_wav_encode_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610) ;
-
-static sf_count_t      gsm610_seek     (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-
-static int     gsm610_close    (SF_PRIVATE *psf) ;
-
-/*============================================================================================
-** WAV GSM610 initialisation function.
-*/
-
-int
-gsm610_init    (SF_PRIVATE *psf)
-{      GSM610_PRIVATE  *pgsm610 ;
-       int             true_flag = 1 ;
-
-       if (psf->codec_data != NULL)
-       {       psf_log_printf (psf, "*** psf->codec_data is not NULL.\n") ;
-               return SFE_INTERNAL ;
-               } ;
-
-       if (psf->file.mode == SFM_RDWR)
-               return SFE_BAD_MODE_RW ;
-
-       psf->sf.seekable = SF_FALSE ;
-
-       if ((pgsm610 = calloc (1, sizeof (GSM610_PRIVATE))) == NULL)
-               return SFE_MALLOC_FAILED ;
-
-       psf->codec_data = pgsm610 ;
-
-       memset (pgsm610, 0, sizeof (GSM610_PRIVATE)) ;
-
-/*============================================================
-
-Need separate gsm_data structs for encode and decode.
-
-============================================================*/
-
-       if ((pgsm610->gsm_data = gsm_create ()) == NULL)
-               return SFE_MALLOC_FAILED ;
-
-       switch (SF_CONTAINER (psf->sf.format))
-       {       case SF_FORMAT_WAV :
-               case SF_FORMAT_WAVEX :
-               case SF_FORMAT_W64 :
-                       gsm_option (pgsm610->gsm_data, GSM_OPT_WAV49, &true_flag) ;
-
-                       pgsm610->encode_block = gsm610_wav_encode_block ;
-                       pgsm610->decode_block = gsm610_wav_decode_block ;
-
-                       pgsm610->samplesperblock = WAV_W64_GSM610_SAMPLES ;
-                       pgsm610->blocksize = WAV_W64_GSM610_BLOCKSIZE ;
-                       break ;
-
-               case SF_FORMAT_AIFF :
-               case SF_FORMAT_RAW :
-                       pgsm610->encode_block = gsm610_encode_block ;
-                       pgsm610->decode_block = gsm610_decode_block ;
-
-                       pgsm610->samplesperblock = GSM610_SAMPLES ;
-                       pgsm610->blocksize = GSM610_BLOCKSIZE ;
-                       break ;
-
-               default :
-                       return SFE_INTERNAL ;
-                       break ;
-               } ;
-
-       if (psf->file.mode == SFM_READ)
-       {       if (psf->datalength % pgsm610->blocksize == 0)
-                       pgsm610->blocks = psf->datalength / pgsm610->blocksize ;
-               else if (psf->datalength % pgsm610->blocksize == 1 && pgsm610->blocksize == GSM610_BLOCKSIZE)
-               {       /*
-                       **      Weird AIFF specific case.
-                       **      AIFF chunks must be at an even offset from the start of file and
-                       **      GSM610_BLOCKSIZE is odd which can result in an odd length SSND
-                       **      chunk. The SSND chunk then gets padded on write which means that
-                       **      when it is read the datalength is too big by 1.
-                       */
-                       pgsm610->blocks = psf->datalength / pgsm610->blocksize ;
-                       }
-               else
-               {       psf_log_printf (psf, "*** Warning : data chunk seems to be truncated.\n") ;
-                       pgsm610->blocks = psf->datalength / pgsm610->blocksize + 1 ;
-                       } ;
-
-               psf->sf.frames = pgsm610->samplesperblock * pgsm610->blocks ;
-
-               psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-               pgsm610->decode_block (psf, pgsm610) ;  /* Read first block. */
-
-               psf->read_short         = gsm610_read_s ;
-               psf->read_int           = gsm610_read_i ;
-               psf->read_float         = gsm610_read_f ;
-               psf->read_double        = gsm610_read_d ;
-               } ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       pgsm610->blockcount = 0 ;
-               pgsm610->samplecount = 0 ;
-
-               psf->write_short        = gsm610_write_s ;
-               psf->write_int          = gsm610_write_i ;
-               psf->write_float        = gsm610_write_f ;
-               psf->write_double       = gsm610_write_d ;
-               } ;
-
-       psf->codec_close = gsm610_close ;
-
-       psf->seek = gsm610_seek ;
-
-       psf->filelength = psf_get_filelen (psf) ;
-       psf->datalength = psf->filelength - psf->dataoffset ;
-
-       return 0 ;
-} /* gsm610_init */
-
-/*============================================================================================
-** GSM 6.10 Read Functions.
-*/
-
-static int
-gsm610_wav_decode_block        (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610)
-{      int     k ;
-
-       pgsm610->blockcount ++ ;
-       pgsm610->samplecount = 0 ;
-
-       if (pgsm610->blockcount > pgsm610->blocks)
-       {       memset (pgsm610->samples, 0, sizeof (pgsm610->samples)) ;
-               return 1 ;
-               } ;
-
-       if ((k = psf_fread (pgsm610->block, 1, WAV_W64_GSM610_BLOCKSIZE, psf)) != WAV_W64_GSM610_BLOCKSIZE)
-               psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, WAV_W64_GSM610_BLOCKSIZE) ;
-
-       if (gsm_decode (pgsm610->gsm_data, pgsm610->block, pgsm610->samples) < 0)
-       {       psf_log_printf (psf, "Error from WAV gsm_decode() on frame : %d\n", pgsm610->blockcount) ;
-               return 0 ;
-               } ;
-
-       if (gsm_decode (pgsm610->gsm_data, pgsm610->block + (WAV_W64_GSM610_BLOCKSIZE + 1) / 2, pgsm610->samples + WAV_W64_GSM610_SAMPLES / 2) < 0)
-       {       psf_log_printf (psf, "Error from WAV gsm_decode() on frame : %d.5\n", pgsm610->blockcount) ;
-               return 0 ;
-               } ;
-
-       return 1 ;
-} /* gsm610_wav_decode_block */
-
-static int
-gsm610_decode_block    (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610)
-{      int     k ;
-
-       pgsm610->blockcount ++ ;
-       pgsm610->samplecount = 0 ;
-
-       if (pgsm610->blockcount > pgsm610->blocks)
-       {       memset (pgsm610->samples, 0, sizeof (pgsm610->samples)) ;
-               return 1 ;
-               } ;
-
-       if ((k = psf_fread (pgsm610->block, 1, GSM610_BLOCKSIZE, psf)) != GSM610_BLOCKSIZE)
-               psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, GSM610_BLOCKSIZE) ;
-
-       if (gsm_decode (pgsm610->gsm_data, pgsm610->block, pgsm610->samples) < 0)
-       {       psf_log_printf (psf, "Error from standard gsm_decode() on frame : %d\n", pgsm610->blockcount) ;
-               return 0 ;
-               } ;
-
-       return 1 ;
-} /* gsm610_decode_block */
-
-static int
-gsm610_read_block      (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610, short *ptr, int len)
-{      int     count, total = 0, indx = 0 ;
-
-       while (indx < len)
-       {       if (pgsm610->blockcount >= pgsm610->blocks && pgsm610->samplecount >= pgsm610->samplesperblock)
-               {       memset (ptr + indx, 0, (len - indx) * sizeof (short)) ;
-                       return total ;
-                       } ;
-
-               if (pgsm610->samplecount >= pgsm610->samplesperblock)
-                       pgsm610->decode_block (psf, pgsm610) ;
-
-               count = pgsm610->samplesperblock - pgsm610->samplecount ;
-               count = (len - indx > count) ? count : len - indx ;
-
-               memcpy (&(ptr [indx]), &(pgsm610->samples [pgsm610->samplecount]), count * sizeof (short)) ;
-               indx += count ;
-               pgsm610->samplecount += count ;
-               total = indx ;
-               } ;
-
-       return total ;
-} /* gsm610_read_block */
-
-static sf_count_t
-gsm610_read_s  (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      GSM610_PRIVATE  *pgsm610 ;
-       int                     readcount, count ;
-       sf_count_t      total = 0 ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       pgsm610 = (GSM610_PRIVATE*) psf->codec_data ;
-
-       while (len > 0)
-       {       readcount = (len > 0x10000000) ? 0x1000000 : (int) len ;
-
-               count = gsm610_read_block (psf, pgsm610, ptr, readcount) ;
-
-               total += count ;
-               len -= count ;
-
-               if (count != readcount)
-                       break ;
-               } ;
-
-       return total ;
-} /* gsm610_read_s */
-
-static sf_count_t
-gsm610_read_i  (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      GSM610_PRIVATE *pgsm610 ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, readcount = 0, count ;
-       sf_count_t      total = 0 ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       pgsm610 = (GSM610_PRIVATE*) psf->codec_data ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = gsm610_read_block (psf, pgsm610, sptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = sptr [k] << 16 ;
-
-               total += count ;
-               len -= readcount ;
-               } ;
-       return total ;
-} /* gsm610_read_i */
-
-static sf_count_t
-gsm610_read_f  (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      GSM610_PRIVATE *pgsm610 ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, readcount = 0, count ;
-       sf_count_t      total = 0 ;
-       float           normfact ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       pgsm610 = (GSM610_PRIVATE*) psf->codec_data ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = gsm610_read_block (psf, pgsm610, sptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = normfact * sptr [k] ;
-
-               total += count ;
-               len -= readcount ;
-               } ;
-       return total ;
-} /* gsm610_read_f */
-
-static sf_count_t
-gsm610_read_d  (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      GSM610_PRIVATE *pgsm610 ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, readcount = 0, count ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       pgsm610 = (GSM610_PRIVATE*) psf->codec_data ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = gsm610_read_block (psf, pgsm610, sptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = normfact * sptr [k] ;
-
-               total += count ;
-               len -= readcount ;
-               } ;
-       return total ;
-} /* gsm610_read_d */
-
-static sf_count_t
-gsm610_seek    (SF_PRIVATE *psf, int UNUSED (mode), sf_count_t offset)
-{      GSM610_PRIVATE *pgsm610 ;
-       int                     newblock, newsample ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       pgsm610 = (GSM610_PRIVATE*) psf->codec_data ;
-
-       if (psf->dataoffset < 0)
-       {       psf->error = SFE_BAD_SEEK ;
-               return  PSF_SEEK_ERROR ;
-               } ;
-
-       if (offset == 0)
-       {       int true_flag = 1 ;
-
-               psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-               pgsm610->blockcount = 0 ;
-
-               gsm_init (pgsm610->gsm_data) ;
-               if ((SF_CONTAINER (psf->sf.format)) == SF_FORMAT_WAV ||
-                               (SF_CONTAINER (psf->sf.format)) == SF_FORMAT_W64)
-                       gsm_option (pgsm610->gsm_data, GSM_OPT_WAV49, &true_flag) ;
-
-               pgsm610->decode_block (psf, pgsm610) ;
-               pgsm610->samplecount = 0 ;
-               return 0 ;
-               } ;
-
-       if (offset < 0 || offset > pgsm610->blocks * pgsm610->samplesperblock)
-       {       psf->error = SFE_BAD_SEEK ;
-               return  PSF_SEEK_ERROR ;
-               } ;
-
-       newblock        = offset / pgsm610->samplesperblock ;
-       newsample       = offset % pgsm610->samplesperblock ;
-
-       if (psf->file.mode == SFM_READ)
-       {       if (psf->read_current != newblock * pgsm610->samplesperblock + newsample)
-               {       psf_fseek (psf, psf->dataoffset + newblock * pgsm610->samplesperblock, SEEK_SET) ;
-                       pgsm610->blockcount = newblock ;
-                       pgsm610->decode_block (psf, pgsm610) ;
-                       pgsm610->samplecount = newsample ;
-                       } ;
-
-               return newblock * pgsm610->samplesperblock + newsample ;
-               } ;
-
-       /* What to do about write??? */
-       psf->error = SFE_BAD_SEEK ;
-       return  PSF_SEEK_ERROR ;
-} /* gsm610_seek */
-
-/*==========================================================================================
-** GSM 6.10 Write Functions.
-*/
-
-static int
-gsm610_encode_block    (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610)
-{      int k ;
-
-       /* Encode the samples. */
-       gsm_encode (pgsm610->gsm_data, pgsm610->samples, pgsm610->block) ;
-
-       /* Write the block to disk. */
-       if ((k = psf_fwrite (pgsm610->block, 1, GSM610_BLOCKSIZE, psf)) != GSM610_BLOCKSIZE)
-               psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, GSM610_BLOCKSIZE) ;
-
-       pgsm610->samplecount = 0 ;
-       pgsm610->blockcount ++ ;
-
-       /* Set samples to zero for next block. */
-       memset (pgsm610->samples, 0, sizeof (pgsm610->samples)) ;
-
-       return 1 ;
-} /* gsm610_encode_block */
-
-static int
-gsm610_wav_encode_block        (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610)
-{      int k ;
-
-       /* Encode the samples. */
-       gsm_encode (pgsm610->gsm_data, pgsm610->samples, pgsm610->block) ;
-       gsm_encode (pgsm610->gsm_data, pgsm610->samples+WAV_W64_GSM610_SAMPLES / 2, pgsm610->block+WAV_W64_GSM610_BLOCKSIZE / 2) ;
-
-       /* Write the block to disk. */
-       if ((k = psf_fwrite (pgsm610->block, 1, WAV_W64_GSM610_BLOCKSIZE, psf)) != WAV_W64_GSM610_BLOCKSIZE)
-               psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, WAV_W64_GSM610_BLOCKSIZE) ;
-
-       pgsm610->samplecount = 0 ;
-       pgsm610->blockcount ++ ;
-
-       /* Set samples to zero for next block. */
-       memset (pgsm610->samples, 0, sizeof (pgsm610->samples)) ;
-
-       return 1 ;
-} /* gsm610_wav_encode_block */
-
-static int
-gsm610_write_block     (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610, const short *ptr, int len)
-{      int             count, total = 0, indx = 0 ;
-
-       while (indx < len)
-       {       count = pgsm610->samplesperblock - pgsm610->samplecount ;
-
-               if (count > len - indx)
-                       count = len - indx ;
-
-               memcpy (&(pgsm610->samples [pgsm610->samplecount]), &(ptr [indx]), count * sizeof (short)) ;
-               indx += count ;
-               pgsm610->samplecount += count ;
-               total = indx ;
-
-               if (pgsm610->samplecount >= pgsm610->samplesperblock)
-                       pgsm610->encode_block (psf, pgsm610) ;
-               } ;
-
-       return total ;
-} /* gsm610_write_block */
-
-static sf_count_t
-gsm610_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      GSM610_PRIVATE  *pgsm610 ;
-       int                     writecount, count ;
-       sf_count_t      total = 0 ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       pgsm610 = (GSM610_PRIVATE*) psf->codec_data ;
-
-       while (len > 0)
-       {       writecount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-               count = gsm610_write_block (psf, pgsm610, ptr, writecount) ;
-
-               total += count ;
-               len -= count ;
-
-               if (count != writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* gsm610_write_s */
-
-static sf_count_t
-gsm610_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      GSM610_PRIVATE *pgsm610 ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, writecount = 0, count ;
-       sf_count_t      total = 0 ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       pgsm610 = (GSM610_PRIVATE*) psf->codec_data ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : len ;
-               for (k = 0 ; k < writecount ; k++)
-                       sptr [k] = ptr [total + k] >> 16 ;
-               count = gsm610_write_block (psf, pgsm610, sptr, writecount) ;
-
-               total += count ;
-               len -= writecount ;
-               } ;
-       return total ;
-} /* gsm610_write_i */
-
-static sf_count_t
-gsm610_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      GSM610_PRIVATE *pgsm610 ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, writecount = 0, count ;
-       sf_count_t      total = 0 ;
-       float           normfact ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       pgsm610 = (GSM610_PRIVATE*) psf->codec_data ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : len ;
-               for (k = 0 ; k < writecount ; k++)
-                       sptr [k] = lrintf (normfact * ptr [total + k]) ;
-               count = gsm610_write_block (psf, pgsm610, sptr, writecount) ;
-
-               total += count ;
-               len -= writecount ;
-               } ;
-       return total ;
-} /* gsm610_write_f */
-
-static sf_count_t
-gsm610_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      GSM610_PRIVATE *pgsm610 ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, writecount = 0, count ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       pgsm610 = (GSM610_PRIVATE*) psf->codec_data ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : len ;
-               for (k = 0 ; k < writecount ; k++)
-                       sptr [k] = lrint (normfact * ptr [total + k]) ;
-               count = gsm610_write_block (psf, pgsm610, sptr, writecount) ;
-
-               total += count ;
-               len -= writecount ;
-               } ;
-       return total ;
-} /* gsm610_write_d */
-
-static int
-gsm610_close   (SF_PRIVATE *psf)
-{      GSM610_PRIVATE *pgsm610 ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-
-       pgsm610 = (GSM610_PRIVATE*) psf->codec_data ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       /*      If a block has been partially assembled, write it out
-               **      as the final block.
-               */
-
-               if (pgsm610->samplecount && pgsm610->samplecount < pgsm610->samplesperblock)
-                       pgsm610->encode_block (psf, pgsm610) ;
-               } ;
-
-       if (pgsm610->gsm_data)
-               gsm_destroy (pgsm610->gsm_data) ;
-
-       return 0 ;
-} /* gsm610_close */
-
diff --git a/libs/libsndfile/src/htk.c b/libs/libsndfile/src/htk.c
deleted file mode 100644 (file)
index 25390f1..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <fcntl.h>
-#include       <string.h>
-#include       <ctype.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-
-#define        SFE_HTK_BAD_FILE_LEN    1666
-#define        SFE_HTK_NOT_WAVEFORM    1667
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int             htk_close               (SF_PRIVATE *psf) ;
-
-static int             htk_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int             htk_read_header (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-htk_open       (SF_PRIVATE *psf)
-{      int             subformat ;
-       int             error = 0 ;
-
-       if (psf->is_pipe)
-               return SFE_HTK_NO_PIPE ;
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-       {       if ((error = htk_read_header (psf)))
-                       return error ;
-               } ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_HTK)
-                       return  SFE_BAD_OPEN_FORMAT ;
-
-               psf->endian = SF_ENDIAN_BIG ;
-
-               if (htk_write_header (psf, SF_FALSE))
-                       return psf->error ;
-
-               psf->write_header = htk_write_header ;
-               } ;
-
-       psf->container_close = htk_close ;
-
-       psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-       switch (subformat)
-       {       case SF_FORMAT_PCM_16 : /* 16-bit linear PCM. */
-                               error = pcm_init (psf) ;
-                               break ;
-
-               default : break ;
-               } ;
-
-       return error ;
-} /* htk_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-htk_close      (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-               htk_write_header (psf, SF_TRUE) ;
-
-       return 0 ;
-} /* htk_close */
-
-static int
-htk_write_header (SF_PRIVATE *psf, int calc_length)
-{      sf_count_t      current ;
-       int                     sample_count, sample_period ;
-
-       current = psf_ftell (psf) ;
-
-       if (calc_length)
-               psf->filelength = psf_get_filelen (psf) ;
-
-       /* Reset the current header length to zero. */
-       psf->header [0] = 0 ;
-       psf->headindex = 0 ;
-       psf_fseek (psf, 0, SEEK_SET) ;
-
-       if (psf->filelength > 12)
-               sample_count = (psf->filelength - 12) / 2 ;
-       else
-               sample_count = 0 ;
-
-       sample_period = 10000000 / psf->sf.samplerate ;
-
-       psf_binheader_writef (psf, "E444", sample_count, sample_period, 0x20000) ;
-
-       /* Header construction complete so write it out. */
-       psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-       if (psf->error)
-               return psf->error ;
-
-       psf->dataoffset = psf->headindex ;
-
-       if (current > 0)
-               psf_fseek (psf, current, SEEK_SET) ;
-
-       return psf->error ;
-} /* htk_write_header */
-
-/*
-** Found the following info in a comment block within Bill Schottstaedt's
-** sndlib library.
-**
-** HTK format files consist of a contiguous sequence of samples preceded by a
-** header. Each sample is a vector of either 2-byte integers or 4-byte floats.
-** 2-byte integers are used for compressed forms as described below and for
-** vector quantised data as described later in section 5.11. HTK format data
-** files can also be used to store speech waveforms as described in section 5.8.
-**
-** The HTK file format header is 12 bytes long and contains the following data
-**   nSamples   -- number of samples in file (4-byte integer)
-**   sampPeriod -- sample period in 100ns units (4-byte integer)
-**   sampSize   -- number of bytes per sample (2-byte integer)
-**   parmKind   -- a code indicating the sample kind (2-byte integer)
-**
-** The parameter kind  consists of a 6 bit code representing the basic
-** parameter kind plus additional bits for each of the possible qualifiers.
-** The basic parameter kind codes are
-**
-**  0    WAVEFORM    sampled waveform
-**  1    LPC         linear prediction filter coefficients
-**  2    LPREFC      linear prediction reflection coefficients
-**  3    LPCEPSTRA   LPC cepstral coefficients
-**  4    LPDELCEP    LPC cepstra plus delta coefficients
-**  5    IREFC       LPC reflection coef in 16 bit integer format
-**  6    MFCC        mel-frequency cepstral coefficients
-**  7    FBANK       log mel-filter bank channel outputs
-**  8    MELSPEC     linear mel-filter bank channel outputs
-**  9    USER        user defined sample kind
-**  10   DISCRETE    vector quantised data
-**
-** and the bit-encoding for the qualifiers (in octal) is
-**   _E   000100      has energy
-**   _N   000200      absolute energy suppressed
-**   _D   000400      has delta coefficients
-**   _A   001000      has acceleration coefficients
-**   _C   002000      is compressed
-**   _Z   004000      has zero mean static coef.
-**   _K   010000      has CRC checksum
-**   _O   020000      has 0'th cepstral coef.
-*/
-
-static int
-htk_read_header (SF_PRIVATE *psf)
-{      int             sample_count, sample_period, marker ;
-
-       psf_binheader_readf (psf, "pE444", 0, &sample_count, &sample_period, &marker) ;
-
-       if (2 * sample_count + 12 != psf->filelength)
-               return SFE_HTK_BAD_FILE_LEN ;
-
-       if (marker != 0x20000)
-               return SFE_HTK_NOT_WAVEFORM ;
-
-       psf->sf.channels = 1 ;
-
-       if (sample_period > 0)
-       {       psf->sf.samplerate = 10000000 / sample_period ;
-               psf_log_printf (psf, "HTK Waveform file\n  Sample Count  : %d\n  Sample Period : %d => %d Hz\n",
-                                       sample_count, sample_period, psf->sf.samplerate) ;
-               }
-       else
-       {       psf->sf.samplerate = 16000 ;
-               psf_log_printf (psf, "HTK Waveform file\n  Sample Count  : %d\n  Sample Period : %d (should be > 0) => Guessed sample rate %d Hz\n",
-                                       sample_count, sample_period, psf->sf.samplerate) ;
-               } ;
-
-       psf->sf.format = SF_FORMAT_HTK | SF_FORMAT_PCM_16 ;
-       psf->bytewidth = 2 ;
-
-       /* HTK always has a 12 byte header. */
-       psf->dataoffset = 12 ;
-       psf->endian = SF_ENDIAN_BIG ;
-
-       psf->datalength = psf->filelength - psf->dataoffset ;
-
-       psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
-       if (! psf->sf.frames && psf->blockwidth)
-               psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ;
-
-       return 0 ;
-} /* htk_read_header */
-
diff --git a/libs/libsndfile/src/id3.c b/libs/libsndfile/src/id3.c
deleted file mode 100644 (file)
index 2fd0a0b..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
-** Copyright (C) 2010-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <fcntl.h>
-#include       <string.h>
-#include       <ctype.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-int
-id3_skip (SF_PRIVATE * psf)
-{      unsigned char   buf [10] ;
-
-       memset (buf, 0, sizeof (buf)) ;
-       psf_binheader_readf (psf, "pb", 0, buf, 10) ;
-
-       if (buf [0] == 'I' && buf [1] == 'D' && buf [2] == '3')
-       {       int     offset = buf [6] & 0x7f ;
-               offset = (offset << 7) | (buf [7] & 0x7f) ;
-               offset = (offset << 7) | (buf [8] & 0x7f) ;
-               offset = (offset << 7) | (buf [9] & 0x7f) ;
-
-               psf_log_printf (psf, "ID3 length : %d\n--------------------\n", offset) ;
-
-               /* Never want to jump backwards in a file. */
-               if (offset < 0)
-                       return 0 ;
-
-               /* Calculate new file offset and position ourselves there. */
-               psf->fileoffset += offset + 10 ;
-               psf_binheader_readf (psf, "p", psf->fileoffset) ;
-
-               return 1 ;
-               } ;
-
-       return 0 ;
-} /* id3_skip */
diff --git a/libs/libsndfile/src/ima_adpcm.c b/libs/libsndfile/src/ima_adpcm.c
deleted file mode 100644 (file)
index 0ba4513..0000000
+++ /dev/null
@@ -1,948 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <stdlib.h>
-#include       <string.h>
-#include       <math.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-typedef struct IMA_ADPCM_PRIVATE_tag
-{      int                     (*decode_block) (SF_PRIVATE *psf, struct IMA_ADPCM_PRIVATE_tag *pima) ;
-       int                     (*encode_block) (SF_PRIVATE *psf, struct IMA_ADPCM_PRIVATE_tag *pima) ;
-
-       int                             channels, blocksize, samplesperblock, blocks ;
-       int                             blockcount, samplecount ;
-       int                             previous [2] ;
-       int                             stepindx [2] ;
-       unsigned char   *block ;
-       short                   *samples ;
-       short                   data    [] ; /* ISO C99 struct flexible array. */
-} IMA_ADPCM_PRIVATE ;
-
-/*============================================================================================
-** Predefined IMA ADPCM data.
-*/
-
-static int ima_indx_adjust [16] =
-{      -1, -1, -1, -1,         /* +0 - +3, decrease the step size */
-       +2, +4, +6, +8,         /* +4 - +7, increase the step size */
-       -1, -1, -1, -1,         /* -0 - -3, decrease the step size */
-       +2, +4, +6, +8,         /* -4 - -7, increase the step size */
-} ;
-
-static int ima_step_size [89] =
-{      7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 21, 23, 25, 28, 31, 34, 37, 41, 45,
-       50, 55, 60, 66, 73, 80, 88, 97, 107, 118, 130, 143, 157, 173, 190, 209, 230,
-       253, 279, 307, 337, 371, 408, 449, 494, 544, 598, 658, 724, 796, 876, 963,
-       1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066, 2272, 2499, 2749, 3024, 3327,
-       3660, 4026, 4428, 4871, 5358, 5894, 6484, 7132, 7845, 8630, 9493, 10442,
-       11487, 12635, 13899, 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794,
-       32767
-} ;
-
-static int ima_reader_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) ;
-static int ima_writer_init (SF_PRIVATE *psf, int blockalign) ;
-
-static int ima_read_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima, short *ptr, int len) ;
-static int ima_write_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima, const short *ptr, int len) ;
-
-static sf_count_t ima_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t ima_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t ima_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t ima_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t ima_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t ima_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t ima_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t ima_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static sf_count_t      ima_seek        (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-
-static int     ima_close       (SF_PRIVATE *psf) ;
-
-static int wav_w64_ima_decode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima) ;
-static int wav_w64_ima_encode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima) ;
-
-/*-static int aiff_ima_reader_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) ;-*/
-static int aiff_ima_decode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima) ;
-static int aiff_ima_encode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima) ;
-
-
-static inline int
-clamp_ima_step_index (int indx)
-{      if (indx < 0)
-               return 0 ;
-       if (indx >= ARRAY_LEN (ima_step_size))
-               return ARRAY_LEN (ima_step_size) - 1 ;
-
-       return indx ;
-} /* clamp_ima_step_index */
-
-/*============================================================================================
-** IMA ADPCM Reader initialisation function.
-*/
-
-int
-wav_w64_ima_init (SF_PRIVATE *psf, int blockalign, int samplesperblock)
-{      int error ;
-
-       if (psf->codec_data != NULL)
-       {       psf_log_printf (psf, "*** psf->codec_data is not NULL.\n") ;
-               return SFE_INTERNAL ;
-               } ;
-
-       if (psf->file.mode == SFM_RDWR)
-               return SFE_BAD_MODE_RW ;
-
-       if (psf->file.mode == SFM_READ)
-               if ((error = ima_reader_init (psf, blockalign, samplesperblock)))
-                       return error ;
-
-       if (psf->file.mode == SFM_WRITE)
-               if ((error = ima_writer_init (psf, blockalign)))
-                       return error ;
-
-       psf->codec_close = ima_close ;
-       psf->seek = ima_seek ;
-
-       return 0 ;
-} /* wav_w64_ima_init */
-
-int
-aiff_ima_init (SF_PRIVATE *psf, int blockalign, int samplesperblock)
-{      int error ;
-
-       if (psf->file.mode == SFM_RDWR)
-               return SFE_BAD_MODE_RW ;
-
-       if (psf->file.mode == SFM_READ)
-               if ((error = ima_reader_init (psf, blockalign, samplesperblock)))
-                       return error ;
-
-       if (psf->file.mode == SFM_WRITE)
-               if ((error = ima_writer_init (psf, blockalign)))
-                       return error ;
-
-       psf->codec_close = ima_close ;
-
-       return 0 ;
-} /* aiff_ima_init */
-
-static int
-ima_close      (SF_PRIVATE *psf)
-{      IMA_ADPCM_PRIVATE *pima ;
-
-       pima = (IMA_ADPCM_PRIVATE*) psf->codec_data ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       /*      If a block has been partially assembled, write it out
-               **      as the final block.
-               */
-               if (pima->samplecount && pima->samplecount < pima->samplesperblock)
-                       pima->encode_block (psf, pima) ;
-
-               psf->sf.frames = pima->samplesperblock * pima->blockcount / psf->sf.channels ;
-               } ;
-
-       return 0 ;
-} /* ima_close */
-
-/*============================================================================================
-** IMA ADPCM Read Functions.
-*/
-
-static int
-ima_reader_init (SF_PRIVATE *psf, int blockalign, int samplesperblock)
-{      IMA_ADPCM_PRIVATE       *pima ;
-       int             pimasize, count ;
-
-       if (psf->file.mode != SFM_READ)
-               return SFE_BAD_MODE_RW ;
-
-       pimasize = sizeof (IMA_ADPCM_PRIVATE) + blockalign * psf->sf.channels + 3 * psf->sf.channels * samplesperblock ;
-
-       if (! (pima = calloc (1, pimasize)))
-               return SFE_MALLOC_FAILED ;
-
-       psf->codec_data = (void*) pima ;
-
-       pima->samples   = pima->data ;
-       pima->block             = (unsigned char*) (pima->data + samplesperblock * psf->sf.channels) ;
-
-       pima->channels                  = psf->sf.channels ;
-       pima->blocksize                 = blockalign ;
-       pima->samplesperblock   = samplesperblock ;
-
-       psf->filelength = psf_get_filelen (psf) ;
-       psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset :
-                                                       psf->filelength - psf->dataoffset ;
-
-       if (pima->blocksize == 0)
-       {       psf_log_printf (psf, "*** Error : pima->blocksize should not be zero.\n") ;
-               return SFE_INTERNAL ;
-               } ;
-
-       if (psf->datalength % pima->blocksize)
-               pima->blocks = psf->datalength / pima->blocksize + 1 ;
-       else
-               pima->blocks = psf->datalength / pima->blocksize ;
-
-       switch (SF_CONTAINER (psf->sf.format))
-       {       case SF_FORMAT_WAV :
-               case SF_FORMAT_W64 :
-                               count = 2 * (pima->blocksize - 4 * pima->channels) / pima->channels + 1 ;
-
-                               if (pima->samplesperblock != count)
-                               {       psf_log_printf (psf, "*** Error : samplesperblock should be %d.\n", count) ;
-                                       return SFE_INTERNAL ;
-                                       } ;
-
-                               pima->decode_block = wav_w64_ima_decode_block ;
-
-                               psf->sf.frames = pima->samplesperblock * pima->blocks ;
-                               break ;
-
-               case SF_FORMAT_AIFF :
-                               psf_log_printf (psf, "still need to check block count\n") ;
-                               pima->decode_block = aiff_ima_decode_block ;
-                               psf->sf.frames = pima->samplesperblock * pima->blocks / pima->channels ;
-                               break ;
-
-               default :
-                               psf_log_printf (psf, "ima_reader_init: bad psf->sf.format\n") ;
-                               return SFE_INTERNAL ;
-               } ;
-
-       pima->decode_block (psf, pima) ;        /* Read first block. */
-
-       psf->read_short         = ima_read_s ;
-       psf->read_int           = ima_read_i ;
-       psf->read_float         = ima_read_f ;
-       psf->read_double        = ima_read_d ;
-
-       return 0 ;
-} /* ima_reader_init */
-
-static int
-aiff_ima_decode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima)
-{      unsigned char *blockdata ;
-       int             chan, k, diff, bytecode, predictor ;
-       short   step, stepindx, *sampledata ;
-
-static int count = 0 ;
-count ++ ;
-
-       pima->blockcount += pima->channels ;
-       pima->samplecount = 0 ;
-
-       if (pima->blockcount > pima->blocks)
-       {       memset (pima->samples, 0, pima->samplesperblock * pima->channels * sizeof (short)) ;
-               return 1 ;
-               } ;
-
-       if ((k = psf_fread (pima->block, 1, pima->blocksize * pima->channels, psf)) != pima->blocksize * pima->channels)
-               psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, pima->blocksize) ;
-
-       /* Read and check the block header. */
-       for (chan = 0 ; chan < pima->channels ; chan++)
-       {       blockdata = pima->block + chan * 34 ;
-               sampledata = pima->samples + chan ;
-
-               predictor = (blockdata [0] << 8) | (blockdata [1] & 0x80) ;
-
-               stepindx = blockdata [1] & 0x7F ;
-               stepindx = clamp_ima_step_index (stepindx) ;
-
-               /*
-               **      Pull apart the packed 4 bit samples and store them in their
-               **      correct sample positions.
-               */
-               for (k = 0 ; k < pima->blocksize - 2 ; k++)
-               {       bytecode = blockdata [k + 2] ;
-                       sampledata [pima->channels * (2 * k + 0)] = bytecode & 0xF ;
-                       sampledata [pima->channels * (2 * k + 1)] = (bytecode >> 4) & 0xF ;
-                       } ;
-
-               /* Decode the encoded 4 bit samples. */
-               for (k = 0 ; k < pima->samplesperblock ; k ++)
-               {       step = ima_step_size [stepindx] ;
-
-                       bytecode = pima->samples [pima->channels * k + chan] ;
-
-                       stepindx += ima_indx_adjust [bytecode] ;
-                       stepindx = clamp_ima_step_index (stepindx) ;
-
-                       diff = step >> 3 ;
-                       if (bytecode & 1)       diff += step >> 2 ;
-                       if (bytecode & 2)       diff += step >> 1 ;
-                       if (bytecode & 4)       diff += step ;
-                       if (bytecode & 8)       diff = -diff ;
-
-                       predictor += diff ;
-                       if (predictor < -32768)
-                               predictor = -32768 ;
-                       else if (predictor > 32767)
-                               predictor = 32767 ;
-
-                       pima->samples [pima->channels * k + chan] = predictor ;
-                       } ;
-               } ;
-
-       return 1 ;
-} /* aiff_ima_decode_block */
-
-static int
-aiff_ima_encode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima)
-{      int             chan, k, step, diff, vpdiff, blockindx, indx ;
-       short   bytecode, mask ;
-
-       /* Encode the block header. */
-       for (chan = 0 ; chan < pima->channels ; chan ++)
-       {       blockindx = chan * pima->blocksize ;
-
-               pima->block [blockindx] = (pima->samples [chan] >> 8) & 0xFF ;
-               pima->block [blockindx + 1] = (pima->samples [chan] & 0x80) + (pima->stepindx [chan] & 0x7F) ;
-
-               pima->previous [chan] = pima->samples [chan] ;
-               } ;
-
-       /* Encode second and later samples for every block as a 4 bit value. */
-       for (k = pima->channels ; k < (pima->samplesperblock * pima->channels) ; k ++)
-       {       chan = (pima->channels > 1) ? (k % 2) : 0 ;
-
-               diff = pima->samples [k] - pima->previous [chan] ;
-
-               bytecode = 0 ;
-               step = ima_step_size [pima->stepindx [chan]] ;
-               vpdiff = step >> 3 ;
-               if (diff < 0)
-               {       bytecode = 8 ;
-                       diff = -diff ;
-                       } ;
-               mask = 4 ;
-               while (mask)
-               {       if (diff >= step)
-                       {       bytecode |= mask ;
-                               diff -= step ;
-                               vpdiff += step ;
-                               } ;
-                       step >>= 1 ;
-                       mask >>= 1 ;
-                       } ;
-
-               if (bytecode & 8)
-                       pima->previous [chan] -= vpdiff ;
-               else
-                       pima->previous [chan] += vpdiff ;
-
-               if (pima->previous [chan] > 32767)
-                       pima->previous [chan] = 32767 ;
-               else if (pima->previous [chan] < -32768)
-                       pima->previous [chan] = -32768 ;
-
-               pima->stepindx [chan] += ima_indx_adjust [bytecode] ;
-
-               pima->stepindx [chan] = clamp_ima_step_index (pima->stepindx [chan]) ;
-               pima->samples [k] = bytecode ;
-               } ;
-
-       /* Pack the 4 bit encoded samples. */
-
-       for (chan = 0 ; chan < pima->channels ; chan ++)
-       {       for (indx = pima->channels ; indx < pima->channels * pima->samplesperblock ; indx += 2 * pima->channels)
-               {       blockindx = chan * pima->blocksize + 2 + indx / 2 ;
-
-                       pima->block [blockindx] = pima->samples [indx] & 0x0F ;
-                       pima->block [blockindx] |= (pima->samples [indx + chan] << 4) & 0xF0 ;
-                       } ;
-               } ;
-
-       /* Write the block to disk. */
-
-       if ((k = psf_fwrite (pima->block, 1, pima->channels * pima->blocksize, psf)) != pima->channels * pima->blocksize)
-               psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, pima->channels * pima->blocksize) ;
-
-       memset (pima->samples, 0, pima->channels * pima->samplesperblock * sizeof (short)) ;
-       pima->samplecount = 0 ;
-       pima->blockcount ++ ;
-
-       return 1 ;
-} /* aiff_ima_encode_block */
-
-static int
-wav_w64_ima_decode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima)
-{      int             chan, k, predictor, blockindx, indx, indxstart, diff ;
-       short   step, bytecode, stepindx [2] ;
-
-       pima->blockcount ++ ;
-       pima->samplecount = 0 ;
-
-       if (pima->blockcount > pima->blocks)
-       {       memset (pima->samples, 0, pima->samplesperblock * pima->channels * sizeof (short)) ;
-               return 1 ;
-               } ;
-
-       if ((k = psf_fread (pima->block, 1, pima->blocksize, psf)) != pima->blocksize)
-               psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, pima->blocksize) ;
-
-       /* Read and check the block header. */
-
-       for (chan = 0 ; chan < pima->channels ; chan++)
-       {       predictor = pima->block [chan*4] | (pima->block [chan*4+1] << 8) ;
-               if (predictor & 0x8000)
-                       predictor -= 0x10000 ;
-
-               stepindx [chan] = pima->block [chan*4+2] ;
-               stepindx [chan] = clamp_ima_step_index (stepindx [chan]) ;
-
-
-               if (pima->block [chan*4+3] != 0)
-                       psf_log_printf (psf, "IMA ADPCM synchronisation error.\n") ;
-
-               pima->samples [chan] = predictor ;
-               } ;
-
-       /*
-       **      Pull apart the packed 4 bit samples and store them in their
-       **      correct sample positions.
-       */
-
-       blockindx = 4 * pima->channels ;
-
-       indxstart = pima->channels ;
-       while (blockindx < pima->blocksize)
-       {       for (chan = 0 ; chan < pima->channels ; chan++)
-               {       indx = indxstart + chan ;
-                       for (k = 0 ; k < 4 ; k++)
-                       {       bytecode = pima->block [blockindx++] ;
-                               pima->samples [indx] = bytecode & 0x0F ;
-                               indx += pima->channels ;
-                               pima->samples [indx] = (bytecode >> 4) & 0x0F ;
-                               indx += pima->channels ;
-                               } ;
-                       } ;
-               indxstart += 8 * pima->channels ;
-               } ;
-
-       /* Decode the encoded 4 bit samples. */
-
-       for (k = pima->channels ; k < (pima->samplesperblock * pima->channels) ; k ++)
-       {       chan = (pima->channels > 1) ? (k % 2) : 0 ;
-
-               bytecode = pima->samples [k] & 0xF ;
-
-               step = ima_step_size [stepindx [chan]] ;
-               predictor = pima->samples [k - pima->channels] ;
-
-               diff = step >> 3 ;
-               if (bytecode & 1)
-                       diff += step >> 2 ;
-               if (bytecode & 2)
-                       diff += step >> 1 ;
-               if (bytecode & 4)
-                       diff += step ;
-               if (bytecode & 8)
-                       diff = -diff ;
-
-               predictor += diff ;
-
-               if (predictor > 32767)
-                       predictor = 32767 ;
-               else if (predictor < -32768)
-                       predictor = -32768 ;
-
-               stepindx [chan] += ima_indx_adjust [bytecode] ;
-               stepindx [chan] = clamp_ima_step_index (stepindx [chan]) ;
-
-               pima->samples [k] = predictor ;
-               } ;
-
-       return 1 ;
-} /* wav_w64_ima_decode_block */
-
-static int
-wav_w64_ima_encode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima)
-{      int             chan, k, step, diff, vpdiff, blockindx, indx, indxstart ;
-       short   bytecode, mask ;
-
-       /* Encode the block header. */
-       for (chan = 0 ; chan < pima->channels ; chan++)
-       {       pima->block [chan*4]    = pima->samples [chan] & 0xFF ;
-               pima->block [chan*4+1]  = (pima->samples [chan] >> 8) & 0xFF ;
-
-               pima->block [chan*4+2] = pima->stepindx [chan] ;
-               pima->block [chan*4+3] = 0 ;
-
-               pima->previous [chan] = pima->samples [chan] ;
-               } ;
-
-       /* Encode the samples as 4 bit. */
-
-       for (k = pima->channels ; k < (pima->samplesperblock * pima->channels) ; k ++)
-       {       chan = (pima->channels > 1) ? (k % 2) : 0 ;
-
-               diff = pima->samples [k] - pima->previous [chan] ;
-
-               bytecode = 0 ;
-               step = ima_step_size [pima->stepindx [chan]] ;
-               vpdiff = step >> 3 ;
-               if (diff < 0)
-               {       bytecode = 8 ;
-                       diff = -diff ;
-                       } ;
-               mask = 4 ;
-               while (mask)
-               {       if (diff >= step)
-                       {       bytecode |= mask ;
-                               diff -= step ;
-                               vpdiff += step ;
-                               } ;
-                       step >>= 1 ;
-                       mask >>= 1 ;
-                       } ;
-
-               if (bytecode & 8)
-                       pima->previous [chan] -= vpdiff ;
-               else
-                       pima->previous [chan] += vpdiff ;
-
-               if (pima->previous [chan] > 32767)
-                       pima->previous [chan] = 32767 ;
-               else if (pima->previous [chan] < -32768)
-                       pima->previous [chan] = -32768 ;
-
-               pima->stepindx [chan] += ima_indx_adjust [bytecode] ;
-               pima->stepindx [chan] = clamp_ima_step_index (pima->stepindx [chan]) ;
-
-               pima->samples [k] = bytecode ;
-               } ;
-
-       /* Pack the 4 bit encoded samples. */
-
-       blockindx = 4 * pima->channels ;
-
-       indxstart = pima->channels ;
-       while (blockindx < pima->blocksize)
-       {       for (chan = 0 ; chan < pima->channels ; chan++)
-               {       indx = indxstart + chan ;
-                       for (k = 0 ; k < 4 ; k++)
-                       {       pima->block [blockindx] = pima->samples [indx] & 0x0F ;
-                               indx += pima->channels ;
-                               pima->block [blockindx] |= (pima->samples [indx] << 4) & 0xF0 ;
-                               indx += pima->channels ;
-                               blockindx ++ ;
-                               } ;
-                       } ;
-               indxstart += 8 * pima->channels ;
-               } ;
-
-       /* Write the block to disk. */
-
-       if ((k = psf_fwrite (pima->block, 1, pima->blocksize, psf)) != pima->blocksize)
-               psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, pima->blocksize) ;
-
-       memset (pima->samples, 0, pima->samplesperblock * sizeof (short)) ;
-       pima->samplecount = 0 ;
-       pima->blockcount ++ ;
-
-       return 1 ;
-} /* wav_w64_ima_encode_block */
-
-static int
-ima_read_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima, short *ptr, int len)
-{      int             count, total = 0, indx = 0 ;
-
-       while (indx < len)
-       {       if (pima->blockcount >= pima->blocks && pima->samplecount >= pima->samplesperblock)
-               {       memset (&(ptr [indx]), 0, (size_t) ((len - indx) * sizeof (short))) ;
-                       return total ;
-                       } ;
-
-               if (pima->samplecount >= pima->samplesperblock)
-                       pima->decode_block (psf, pima) ;
-
-               count = (pima->samplesperblock - pima->samplecount) * pima->channels ;
-               count = (len - indx > count) ? count : len - indx ;
-
-               memcpy (&(ptr [indx]), &(pima->samples [pima->samplecount * pima->channels]), count * sizeof (short)) ;
-               indx += count ;
-               pima->samplecount += count / pima->channels ;
-               total = indx ;
-               } ;
-
-       return total ;
-} /* ima_read_block */
-
-static sf_count_t
-ima_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      IMA_ADPCM_PRIVATE       *pima ;
-       int                     readcount, count ;
-       sf_count_t      total = 0 ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pima = (IMA_ADPCM_PRIVATE*) psf->codec_data ;
-
-       while (len > 0)
-       {       readcount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-               count = ima_read_block (psf, pima, ptr, readcount) ;
-
-               total += count ;
-               len -= count ;
-               if (count != readcount)
-                       break ;
-               } ;
-
-       return total ;
-} /* ima_read_s */
-
-static sf_count_t
-ima_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      IMA_ADPCM_PRIVATE *pima ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, readcount, count ;
-       sf_count_t      total = 0 ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pima = (IMA_ADPCM_PRIVATE*) psf->codec_data ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : (int) len ;
-               count = ima_read_block (psf, pima, sptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = ((int) sptr [k]) << 16 ;
-               total += count ;
-               len -= readcount ;
-               if (count != readcount)
-                       break ;
-               } ;
-
-       return total ;
-} /* ima_read_i */
-
-static sf_count_t
-ima_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      IMA_ADPCM_PRIVATE *pima ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, readcount, count ;
-       sf_count_t      total = 0 ;
-       float           normfact ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pima = (IMA_ADPCM_PRIVATE*) psf->codec_data ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : (int) len ;
-               count = ima_read_block (psf, pima, sptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = normfact * (float) (sptr [k]) ;
-               total += count ;
-               len -= readcount ;
-               if (count != readcount)
-                       break ;
-               } ;
-
-       return total ;
-} /* ima_read_f */
-
-static sf_count_t
-ima_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      IMA_ADPCM_PRIVATE *pima ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, readcount, count ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pima = (IMA_ADPCM_PRIVATE*) psf->codec_data ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : (int) len ;
-               count = ima_read_block (psf, pima, sptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = normfact * (double) (sptr [k]) ;
-               total += count ;
-               len -= readcount ;
-               if (count != readcount)
-                       break ;
-               } ;
-
-       return total ;
-} /* ima_read_d */
-
-static sf_count_t
-ima_seek (SF_PRIVATE *psf, int mode, sf_count_t offset)
-{      IMA_ADPCM_PRIVATE *pima ;
-       int                     newblock, newsample ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pima = (IMA_ADPCM_PRIVATE*) psf->codec_data ;
-
-       if (psf->datalength < 0 || psf->dataoffset < 0)
-       {       psf->error = SFE_BAD_SEEK ;
-               return PSF_SEEK_ERROR ;
-               } ;
-
-       if (offset == 0)
-       {       psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-               pima->blockcount = 0 ;
-               pima->decode_block (psf, pima) ;
-               pima->samplecount = 0 ;
-               return 0 ;
-               } ;
-
-       if (offset < 0 || offset > pima->blocks * pima->samplesperblock)
-       {       psf->error = SFE_BAD_SEEK ;
-               return  PSF_SEEK_ERROR ;
-               } ;
-
-       newblock        = offset / pima->samplesperblock ;
-       newsample       = offset % pima->samplesperblock ;
-
-       if (mode == SFM_READ)
-       {       psf_fseek (psf, psf->dataoffset + newblock * pima->blocksize, SEEK_SET) ;
-               pima->blockcount = newblock ;
-               pima->decode_block (psf, pima) ;
-               pima->samplecount = newsample ;
-               }
-       else
-       {       /* What to do about write??? */
-               psf->error = SFE_BAD_SEEK ;
-               return  PSF_SEEK_ERROR ;
-               } ;
-
-       return newblock * pima->samplesperblock + newsample ;
-} /* ima_seek */
-
-/*==========================================================================================
-** IMA ADPCM Write Functions.
-*/
-
-static int
-ima_writer_init (SF_PRIVATE *psf, int blockalign)
-{      IMA_ADPCM_PRIVATE       *pima ;
-       int                                     samplesperblock ;
-       unsigned int            pimasize ;
-
-       if (psf->file.mode != SFM_WRITE)
-               return SFE_BAD_MODE_RW ;
-
-       samplesperblock = 2 * (blockalign - 4 * psf->sf.channels) / psf->sf.channels + 1 ;
-
-       pimasize = sizeof (IMA_ADPCM_PRIVATE) + blockalign + 3 * psf->sf.channels * samplesperblock ;
-
-       if ((pima = calloc (1, pimasize)) == NULL)
-               return SFE_MALLOC_FAILED ;
-
-       psf->codec_data = (void*) pima ;
-
-       pima->channels                  = psf->sf.channels ;
-       pima->blocksize                 = blockalign ;
-       pima->samplesperblock   = samplesperblock ;
-
-       pima->block             = (unsigned char*) pima->data ;
-       pima->samples   = (short*) (pima->data + blockalign) ;
-
-       pima->samplecount = 0 ;
-
-       switch (SF_CONTAINER (psf->sf.format))
-       {       case SF_FORMAT_WAV :
-               case SF_FORMAT_W64 :
-                               pima->encode_block = wav_w64_ima_encode_block ;
-                               break ;
-
-               case SF_FORMAT_AIFF :
-                               pima->encode_block = aiff_ima_encode_block ;
-                               break ;
-
-               default :
-                               psf_log_printf (psf, "ima_reader_init: bad psf->sf.format\n") ;
-                               return SFE_INTERNAL ;
-               } ;
-
-       psf->write_short        = ima_write_s ;
-       psf->write_int          = ima_write_i ;
-       psf->write_float        = ima_write_f ;
-       psf->write_double       = ima_write_d ;
-
-       return 0 ;
-} /* ima_writer_init */
-
-/*==========================================================================================
-*/
-
-static int
-ima_write_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima, const short *ptr, int len)
-{      int             count, total = 0, indx = 0 ;
-
-       while (indx < len)
-       {       count = (pima->samplesperblock - pima->samplecount) * pima->channels ;
-
-               if (count > len - indx)
-                       count = len - indx ;
-
-               memcpy (&(pima->samples [pima->samplecount * pima->channels]), &(ptr [total]), count * sizeof (short)) ;
-               indx += count ;
-               pima->samplecount += count / pima->channels ;
-               total = indx ;
-
-               if (pima->samplecount >= pima->samplesperblock)
-                       pima->encode_block (psf, pima) ;
-               } ;
-
-       return total ;
-} /* ima_write_block */
-
-static sf_count_t
-ima_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      IMA_ADPCM_PRIVATE       *pima ;
-       int                     writecount, count ;
-       sf_count_t      total = 0 ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pima = (IMA_ADPCM_PRIVATE*) psf->codec_data ;
-
-       while (len)
-       {       writecount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-               count = ima_write_block (psf, pima, ptr, writecount) ;
-
-               total += count ;
-               len -= count ;
-               if (count != writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* ima_write_s */
-
-static sf_count_t
-ima_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      IMA_ADPCM_PRIVATE *pima ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, writecount, count ;
-       sf_count_t      total = 0 ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pima = (IMA_ADPCM_PRIVATE*) psf->codec_data ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-               for (k = 0 ; k < writecount ; k++)
-                       sptr [k] = ptr [total + k] >> 16 ;
-               count = ima_write_block (psf, pima, sptr, writecount) ;
-               total += count ;
-               len -= writecount ;
-               if (count != writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* ima_write_i */
-
-static sf_count_t
-ima_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      IMA_ADPCM_PRIVATE *pima ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, writecount, count ;
-       sf_count_t      total = 0 ;
-       float           normfact ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pima = (IMA_ADPCM_PRIVATE*) psf->codec_data ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-               for (k = 0 ; k < writecount ; k++)
-                       sptr [k] = lrintf (normfact * ptr [total + k]) ;
-               count = ima_write_block (psf, pima, sptr, writecount) ;
-               total += count ;
-               len -= writecount ;
-               if (count != writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* ima_write_f */
-
-static sf_count_t
-ima_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      IMA_ADPCM_PRIVATE *pima ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, writecount, count ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pima = (IMA_ADPCM_PRIVATE*) psf->codec_data ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-               for (k = 0 ; k < writecount ; k++)
-                       sptr [k] = lrint (normfact * ptr [total + k]) ;
-               count = ima_write_block (psf, pima, sptr, writecount) ;
-               total += count ;
-               len -= writecount ;
-               if (count != writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* ima_write_d */
-
diff --git a/libs/libsndfile/src/ima_oki_adpcm.c b/libs/libsndfile/src/ima_oki_adpcm.c
deleted file mode 100644 (file)
index 26db9f6..0000000
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
-** Copyright (C) 2007-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (c) 2007 <robs@users.sourceforge.net>
-**
-** This library is free software; you can redistribute it and/or modify it
-** under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or (at
-** your option) any later version.
-**
-** This library is distributed in the hope that it will be useful, but
-** WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
-** General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this library.  If not, write to the Free Software Foundation,
-** Fifth Floor, 51 Franklin Street, Boston, MA 02111-1301, USA.
-*/
-
-/* ADPCM: IMA, OKI <==> 16-bit PCM. */
-
-#include "sfconfig.h"
-
-#include <string.h>
-
-/* Set up for libsndfile environment: */
-#include "common.h"
-
-#include "ima_oki_adpcm.h"
-
-#define MIN_SAMPLE     -0x8000
-#define MAX_SAMPLE     0x7fff
-
-static int const ima_steps [] =        /* ~16-bit precision */
-{      7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 21, 23, 25, 28, 31, 34, 37, 41, 45,
-       50, 55, 60, 66, 73, 80, 88, 97, 107, 118, 130, 143, 157, 173, 190, 209, 230,
-       253, 279, 307, 337, 371, 408, 449, 494, 544, 598, 658, 724, 796, 876, 963,
-       1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066, 2272, 2499, 2749, 3024, 3327,
-       3660, 4026, 4428, 4871, 5358, 5894, 6484, 7132, 7845, 8630, 9493, 10442,
-       11487, 12635, 13899, 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794,
-       32767
-} ;
-
-static int const oki_steps [] =        /* ~12-bit precision */
-{      256, 272, 304, 336, 368, 400, 448, 496, 544, 592, 656, 720, 800, 880, 960,
-       1056, 1168, 1280, 1408, 1552, 1712, 1888, 2080, 2288, 2512, 2768, 3040, 3344,
-       3680, 4048, 4464, 4912, 5392, 5936, 6528, 7184, 7904, 8704, 9568, 10528,
-       11584, 12736, 14016, 15408, 16960, 18656, 20512, 22576, 24832
-} ;
-
-static int const step_changes [] = { -1, -1, -1, -1, 2, 4, 6, 8 } ;
-
-void
-ima_oki_adpcm_init (IMA_OKI_ADPCM * state, IMA_OKI_ADPCM_TYPE type)
-{
-       memset (state, 0, sizeof (*state)) ;
-
-       if (type == IMA_OKI_ADPCM_TYPE_IMA)
-       {       state->max_step_index = ARRAY_LEN (ima_steps) - 1 ;
-               state->steps = ima_steps ;
-               state->mask = (~0) ;
-               }
-       else
-       {       state->max_step_index = ARRAY_LEN (oki_steps) - 1 ;
-               state->steps = oki_steps ;
-               state->mask = (~0) << 4 ;
-               } ;
-
-} /* ima_oki_adpcm_init */
-
-
-int
-adpcm_decode (IMA_OKI_ADPCM * state, int code)
-{      int s ;
-
-       s = ((code & 7) << 1) | 1 ;
-       s = ((state->steps [state->step_index] * s) >> 3) & state->mask ;
-
-       if (code & 8)
-               s = -s ;
-       s += state->last_output ;
-
-       if (s < MIN_SAMPLE || s > MAX_SAMPLE)
-       {       int grace ;
-
-               grace = (state->steps [state->step_index] >> 3) & state->mask ;
-
-               if (s < MIN_SAMPLE - grace || s > MAX_SAMPLE + grace)
-                       state->errors ++ ;
-
-               s = s < MIN_SAMPLE ? MIN_SAMPLE : MAX_SAMPLE ;
-               } ;
-
-       state->step_index += step_changes [code & 7] ;
-       state->step_index = SF_MIN (SF_MAX (state->step_index, 0), state->max_step_index) ;
-       state->last_output = s ;
-
-       return s ;
-} /* adpcm_decode */
-
-int
-adpcm_encode (IMA_OKI_ADPCM * state, int sample)
-{      int delta, sign = 0, code ;
-
-       delta = sample - state->last_output ;
-
-       if (delta < 0)
-       {       sign = 8 ;
-               delta = -delta ;
-               } ;
-
-       code = 4 * delta / state->steps [state->step_index] ;
-       code = sign | SF_MIN (code, 7) ;
-       adpcm_decode (state, code) ; /* Update encoder state */
-
-       return code ;
-} /* adpcm_encode */
-
-
-void
-ima_oki_adpcm_decode_block     (IMA_OKI_ADPCM * state)
-{      unsigned char code ;
-       int k ;
-
-       for (k = 0 ; k < state->code_count ; k++)
-       {       code = state->codes [k] ;
-               state->pcm [2 * k] = adpcm_decode (state, code >> 4) ;
-               state->pcm [2 * k + 1] = adpcm_decode (state, code) ;
-               } ;
-
-       state->pcm_count = 2 * k ;
-} /* ima_oki_adpcm_decode_block */
-
-
-void
-ima_oki_adpcm_encode_block (IMA_OKI_ADPCM * state)
-{      unsigned char code ;
-       int k ;
-
-       /*
-       **      The codec expects an even number of input samples.
-       **
-       **      Samples should always be passed in even length blocks. If the last block to
-       **      be encoded is odd length, extend that block by one zero valued sample.
-       */
-       if (state->pcm_count % 2 == 1)
-               state->pcm [state->pcm_count ++] = 0 ;
-
-       for (k = 0 ; k < state->pcm_count / 2 ; k++)
-       {       code = adpcm_encode (state, state->pcm [2 * k]) << 4 ;
-               code |= adpcm_encode (state, state->pcm [2 * k + 1]) ;
-               state->codes [k] = code ;
-               } ;
-
-       state->code_count = k ;
-} /* ima_oki_adpcm_encode_block */
-
-
-#ifdef TEST
-
-static const unsigned char test_codes [] =
-{      0x08, 0x08, 0x04, 0x7f, 0x72, 0xf7, 0x9f, 0x7c, 0xd7, 0xbc, 0x7a, 0xa7, 0xb8,
-       0x4b, 0x0b, 0x38, 0xf6, 0x9d, 0x7a, 0xd7, 0xbc, 0x7a, 0xd7, 0xa8, 0x6c, 0x81,
-       0x98, 0xe4, 0x0e, 0x7a, 0xd7, 0x9e, 0x7b, 0xc7, 0xab, 0x7a, 0x85, 0xc0, 0xb3,
-       0x8f, 0x58, 0xd7, 0xad, 0x7a, 0xd7, 0xad, 0x7a, 0x87, 0xd0, 0x2b, 0x0e, 0x48,
-       0xd7, 0xad, 0x78, 0xf7, 0xbc, 0x7a, 0xb7, 0xa8, 0x4b, 0x88, 0x18, 0xd5, 0x8d,
-       0x6a, 0xa4, 0x98, 0x08, 0x00, 0x80, 0x88,
-} ;
-
-static const short test_pcm [] =
-{      32, 0, 32, 0, 32, 320, 880, -336, 2304, 4192, -992, 10128, 5360, -16352,
-       30208, 2272, -31872, 14688, -7040, -32432, 14128, -1392, -15488, 22960,
-       1232, -1584, 21488, -240, 2576, -15360, 960, -1152, -30032, 10320, 1008,
-       -30032, 16528, 1008, -30032, 16528, -5200, -30592, 15968, 448, -30592,
-       15968, 448, -2368, 30960, 3024, -80, 8384, 704, -1616, -29168, -1232, 1872,
-       -32768, 13792, -1728, -32768, 13792, 4480, -32192, 14368, -7360, -32752,
-       13808, -1712, -21456, 16992, 1472, -1344, 26848, -1088, 2016, -17728, 208,
-       -2112, -32768, 1376, -1728, -32768, 13792, -1728, -32768, 13792, -1728,
-       -32768, 13792, -1728, -32768, 13792, -1728, -4544, 32767, -1377, 1727,
-       15823, -2113, 207, -27345, 591, -2513, -32768, 13792, -1728, -32768, 13792,
-       10688, -31632, 14928, -6800, -32192, 14368, -1152, -20896, 17552, 2032,
-       -784, 22288, 560, -2256, -4816, 2176, 64, -21120, 9920, 6816, -24224, 16128,
-       608, -13488, 9584, 272, -2544, 16, -2304, -192, 1728, -16, 1568, 128, -1184,
-} ;
-
-
-static void
-test_oki_adpcm (void)
-{
-       IMA_OKI_ADPCM adpcm ;
-       unsigned char code ;
-       int i, j ;
-
-       printf ("    Testing encoder          : ") ;
-       fflush (stdout) ;
-
-       ima_oki_adpcm_init (&adpcm, IMA_OKI_ADPCM_TYPE_OKI) ;
-       for (i = 0 ; i < ARRAY_LEN (test_codes) ; i++)
-               for (j = 0, code = test_codes [i] ; j < 2 ; j++, code <<= 4)
-                       if (adpcm_decode (&adpcm, code >> 4) != test_pcm [2 * i + j])
-                       {       printf ("\n\nFail at i = %d, j = %d.\n\n", i, j) ;
-                               exit (1) ;
-                               } ;
-
-       puts ("ok") ;
-
-       printf ("    Testing decoder          : ") ;
-       fflush (stdout) ;
-
-       ima_oki_adpcm_init (&adpcm, IMA_OKI_ADPCM_TYPE_OKI) ;
-       for (i = 0 ; i < ARRAY_LEN (test_pcm) ; i += j)
-       {       code = adpcm_encode (&adpcm, test_pcm [i]) ;
-               code = (code << 4) | adpcm_encode (&adpcm, test_pcm [i + 1]) ;
-               if (code != test_codes [i / 2])
-                       {       printf ("\n\nFail at i = %d, %d should be %d\n\n", i, code, test_codes [i / 2]) ;
-                               exit (1) ;
-                               } ;
-               } ;
-
-       puts ("ok") ;
-} /* test_oki_adpcm */
-
-static void
-test_oki_adpcm_block (void)
-{
-       IMA_OKI_ADPCM adpcm ;
-       int k ;
-
-       if (ARRAY_LEN (adpcm.pcm) < ARRAY_LEN (test_pcm))
-       {       printf ("\n\nLine %d : ARRAY_LEN (adpcm->pcm) > ARRAY_LEN (test_pcm) (%d > %d).\n\n", __LINE__, ARRAY_LEN (adpcm.pcm), ARRAY_LEN (test_pcm)) ;
-               exit (1) ;
-               } ;
-
-       if (ARRAY_LEN (adpcm.codes) < ARRAY_LEN (test_codes))
-       {       printf ("\n\nLine %d : ARRAY_LEN (adcodes->codes) > ARRAY_LEN (test_codes).n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       printf ("    Testing block encoder    : ") ;
-       fflush (stdout) ;
-
-       ima_oki_adpcm_init (&adpcm, IMA_OKI_ADPCM_TYPE_OKI) ;
-
-       memcpy (adpcm.pcm, test_pcm, sizeof (adpcm.pcm [0]) * ARRAY_LEN (test_pcm)) ;
-       adpcm.pcm_count = ARRAY_LEN (test_pcm) ;
-       adpcm.code_count = 13 ;
-
-       ima_oki_adpcm_encode_block (&adpcm) ;
-
-       if (adpcm.code_count * 2 != ARRAY_LEN (test_pcm))
-       {       printf ("\n\nLine %d : %d * 2 != %d\n\n", __LINE__, adpcm.code_count * 2, ARRAY_LEN (test_pcm)) ;
-               exit (1) ;
-               } ;
-
-       for (k = 0 ; k < ARRAY_LEN (test_codes) ; k++)
-               if (adpcm.codes [k] != test_codes [k])
-               {       printf ("\n\nLine %d : Fail at k = %d, %d should be %d\n\n", __LINE__, k, adpcm.codes [k], test_codes [k]) ;
-                       exit (1) ;
-                       } ;
-
-       puts ("ok") ;
-
-       printf ("    Testing block decoder    : ") ;
-       fflush (stdout) ;
-
-       ima_oki_adpcm_init (&adpcm, IMA_OKI_ADPCM_TYPE_OKI) ;
-
-       memcpy (adpcm.codes, test_codes, sizeof (adpcm.codes [0]) * ARRAY_LEN (test_codes)) ;
-       adpcm.code_count = ARRAY_LEN (test_codes) ;
-       adpcm.pcm_count = 13 ;
-
-       ima_oki_adpcm_decode_block (&adpcm) ;
-
-       if (adpcm.pcm_count != 2 * ARRAY_LEN (test_codes))
-       {       printf ("\n\nLine %d : %d * 2 != %d\n\n", __LINE__, adpcm.pcm_count, 2 * ARRAY_LEN (test_codes)) ;
-               exit (1) ;
-               } ;
-
-       for (k = 0 ; k < ARRAY_LEN (test_pcm) ; k++)
-               if (adpcm.pcm [k] != test_pcm [k])
-               {       printf ("\n\nLine %d : Fail at i = %d, %d should be %d.\n\n", __LINE__, k, adpcm.pcm [k], test_pcm [k]) ;
-                       exit (1) ;
-                       } ;
-
-       puts ("ok") ;
-} /* test_oki_adpcm_block */
-
-int
-main (void)
-{
-       test_oki_adpcm () ;
-       test_oki_adpcm_block () ;
-
-       return 0 ;
-} /* main */
-
-#endif
diff --git a/libs/libsndfile/src/ima_oki_adpcm.h b/libs/libsndfile/src/ima_oki_adpcm.h
deleted file mode 100644 (file)
index 86241e7..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-** Copyright (C) 2007-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (c) 2007 <robs@users.sourceforge.net>
-**
-** This library is free software; you can redistribute it and/or modify it
-** under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or (at
-** your option) any later version.
-**
-** This library is distributed in the hope that it will be useful, but
-** WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
-** General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this library.  If not, write to the Free Software Foundation,
-** Fifth Floor, 51 Franklin Street, Boston, MA 02111-1301, USA.
-*/
-
-/* ADPCM: IMA, OKI <==> 16-bit PCM. */
-
-
-#define                IMA_OKI_ADPCM_CODE_LEN  256
-#define                IMA_OKI_ADPCM_PCM_LEN   (IMA_OKI_ADPCM_CODE_LEN *2)
-
-typedef struct
-{
-       /* private: */
-       int mask ;
-       int last_output ;
-       int step_index ;
-       int max_step_index ;
-       int const * steps ;
-
-       /* public: */
-       int errors ;
-       int     code_count, pcm_count ;
-
-       unsigned char   codes [IMA_OKI_ADPCM_CODE_LEN] ;
-       short                   pcm [IMA_OKI_ADPCM_PCM_LEN] ;
-} IMA_OKI_ADPCM ;
-
-typedef enum
-{      IMA_OKI_ADPCM_TYPE_IMA,
-       IMA_OKI_ADPCM_TYPE_OKI
-} IMA_OKI_ADPCM_TYPE ;
-
-void ima_oki_adpcm_init                (IMA_OKI_ADPCM * state, IMA_OKI_ADPCM_TYPE type) ;
-
-int    adpcm_decode    (IMA_OKI_ADPCM * state, int /* 0..15 */ code) ;
-int    adpcm_encode    (IMA_OKI_ADPCM * state, int /* -32768..32767 */ sample) ;
-
-void   ima_oki_adpcm_decode_block      (IMA_OKI_ADPCM * state) ;
-void   ima_oki_adpcm_encode_block      (IMA_OKI_ADPCM * state) ;
diff --git a/libs/libsndfile/src/interleave.c b/libs/libsndfile/src/interleave.c
deleted file mode 100644 (file)
index 5f79944..0000000
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
-** Copyright (C) 2002-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfendian.h"
-
-#include       <stdlib.h>
-
-#include       "sndfile.h"
-#include       "common.h"
-
-#define                INTERLEAVE_CHANNELS             6
-
-typedef struct
-{      double  buffer [SF_BUFFER_LEN / sizeof (double)] ;
-
-       sf_count_t              channel_len ;
-
-       sf_count_t              (*read_short)   (SF_PRIVATE*, short *ptr, sf_count_t len) ;
-       sf_count_t              (*read_int)     (SF_PRIVATE*, int *ptr, sf_count_t len) ;
-       sf_count_t              (*read_float)   (SF_PRIVATE*, float *ptr, sf_count_t len) ;
-       sf_count_t              (*read_double)  (SF_PRIVATE*, double *ptr, sf_count_t len) ;
-
-} INTERLEAVE_DATA ;
-
-
-
-static sf_count_t      interleave_read_short   (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t      interleave_read_int     (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t      interleave_read_float   (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t      interleave_read_double  (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t      interleave_seek (SF_PRIVATE*, int mode, sf_count_t samples_from_start) ;
-
-
-
-
-int
-interleave_init        (SF_PRIVATE *psf)
-{      INTERLEAVE_DATA *pdata ;
-
-       if (psf->file.mode != SFM_READ)
-               return SFE_INTERLEAVE_MODE ;
-
-       if (psf->interleave)
-       {       psf_log_printf (psf, "*** Weird, already have interleave.\n") ;
-               return 666 ;
-               } ;
-
-       /* Free this in sf_close() function. */
-       if (! (pdata = malloc (sizeof (INTERLEAVE_DATA))))
-               return SFE_MALLOC_FAILED ;
-
-puts ("interleave_init") ;
-
-       psf->interleave = pdata ;
-
-       /* Save the existing methods. */
-       pdata->read_short       = psf->read_short ;
-       pdata->read_int         = psf->read_int ;
-       pdata->read_float       = psf->read_float ;
-       pdata->read_double      = psf->read_double ;
-
-       pdata->channel_len = psf->sf.frames * psf->bytewidth ;
-
-       /* Insert our new methods. */
-       psf->read_short         = interleave_read_short ;
-       psf->read_int           = interleave_read_int ;
-       psf->read_float         = interleave_read_float ;
-       psf->read_double        = interleave_read_double ;
-
-       psf->seek = interleave_seek ;
-
-       return 0 ;
-} /* pcm_interleave_init */
-
-/*------------------------------------------------------------------------------
-*/
-
-static sf_count_t
-interleave_read_short  (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      INTERLEAVE_DATA *pdata ;
-       sf_count_t      offset, templen ;
-       int                     chan, count, k ;
-       short           *inptr, *outptr ;
-
-       if (! (pdata = psf->interleave))
-               return 0 ;
-
-       inptr = (short*) pdata->buffer ;
-
-       for (chan = 0 ; chan < psf->sf.channels ; chan++)
-       {       outptr = ptr + chan ;
-
-               offset = psf->dataoffset + chan * psf->bytewidth * psf->read_current ;
-
-               if (psf_fseek (psf, offset, SEEK_SET) != offset)
-               {       psf->error = SFE_INTERLEAVE_SEEK ;
-                       return 0 ;
-                       } ;
-
-               templen = len / psf->sf.channels ;
-
-               while (templen > 0)
-               {       if (templen > SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (short))
-                               count = SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (short) ;
-                       else
-                               count = (int) templen ;
-
-                       if (pdata->read_short (psf, inptr, count) != count)
-                       {       psf->error = SFE_INTERLEAVE_READ ;
-                               return 0 ;
-                               } ;
-
-                       for (k = 0 ; k < count ; k++)
-                       {       *outptr = inptr [k] ;
-                               outptr += psf->sf.channels ;
-                               } ;
-
-                       templen -= count ;
-                       } ;
-               } ;
-
-       return len ;
-} /* interleave_read_short */
-
-static sf_count_t
-interleave_read_int    (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      INTERLEAVE_DATA *pdata ;
-       sf_count_t      offset, templen ;
-       int                     chan, count, k ;
-       int             *inptr, *outptr ;
-
-       if (! (pdata = psf->interleave))
-               return 0 ;
-
-       inptr = (int*) pdata->buffer ;
-
-       for (chan = 0 ; chan < psf->sf.channels ; chan++)
-       {       outptr = ptr + chan ;
-
-               offset = psf->dataoffset + chan * psf->bytewidth * psf->read_current ;
-
-               if (psf_fseek (psf, offset, SEEK_SET) != offset)
-               {       psf->error = SFE_INTERLEAVE_SEEK ;
-                       return 0 ;
-                       } ;
-
-               templen = len / psf->sf.channels ;
-
-               while (templen > 0)
-               {       if (templen > SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (int))
-                               count = SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (int) ;
-                       else
-                               count = (int) templen ;
-
-                       if (pdata->read_int (psf, inptr, count) != count)
-                       {       psf->error = SFE_INTERLEAVE_READ ;
-                               return 0 ;
-                               } ;
-
-                       for (k = 0 ; k < count ; k++)
-                       {       *outptr = inptr [k] ;
-                               outptr += psf->sf.channels ;
-                               } ;
-
-                       templen -= count ;
-                       } ;
-               } ;
-
-       return len ;
-} /* interleave_read_int */
-
-static sf_count_t
-interleave_read_float  (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      INTERLEAVE_DATA *pdata ;
-       sf_count_t      offset, templen ;
-       int                     chan, count, k ;
-       float           *inptr, *outptr ;
-
-       if (! (pdata = psf->interleave))
-               return 0 ;
-
-       inptr = (float*) pdata->buffer ;
-
-       for (chan = 0 ; chan < psf->sf.channels ; chan++)
-       {       outptr = ptr + chan ;
-
-               offset = psf->dataoffset + pdata->channel_len * chan + psf->read_current * psf->bytewidth ;
-
-/*-printf ("chan : %d     read_current : %6lld    offset : %6lld\n", chan, psf->read_current, offset) ;-*/
-
-               if (psf_fseek (psf, offset, SEEK_SET) != offset)
-               {       psf->error = SFE_INTERLEAVE_SEEK ;
-/*-puts ("interleave_seek error") ; exit (1) ;-*/
-                       return 0 ;
-                       } ;
-
-               templen = len / psf->sf.channels ;
-
-               while (templen > 0)
-               {       if (templen > SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (float))
-                               count = SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (float) ;
-                       else
-                               count = (int) templen ;
-
-                       if (pdata->read_float (psf, inptr, count) != count)
-                       {       psf->error = SFE_INTERLEAVE_READ ;
-/*-puts ("interleave_read error") ; exit (1) ;-*/
-                               return 0 ;
-                               } ;
-
-                       for (k = 0 ; k < count ; k++)
-                       {       *outptr = inptr [k] ;
-                               outptr += psf->sf.channels ;
-                               } ;
-
-                       templen -= count ;
-                       } ;
-               } ;
-
-       return len ;
-} /* interleave_read_float */
-
-static sf_count_t
-interleave_read_double (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      INTERLEAVE_DATA *pdata ;
-       sf_count_t      offset, templen ;
-       int                     chan, count, k ;
-       double          *inptr, *outptr ;
-
-       if (! (pdata = psf->interleave))
-               return 0 ;
-
-       inptr = (double*) pdata->buffer ;
-
-       for (chan = 0 ; chan < psf->sf.channels ; chan++)
-       {       outptr = ptr + chan ;
-
-               offset = psf->dataoffset + chan * psf->bytewidth * psf->read_current ;
-
-               if (psf_fseek (psf, offset, SEEK_SET) != offset)
-               {       psf->error = SFE_INTERLEAVE_SEEK ;
-                       return 0 ;
-                       } ;
-
-               templen = len / psf->sf.channels ;
-
-               while (templen > 0)
-               {       if (templen > SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (double))
-                               count = SIGNED_SIZEOF (pdata->buffer) / SIGNED_SIZEOF (double) ;
-                       else
-                               count = (int) templen ;
-
-                       if (pdata->read_double (psf, inptr, count) != count)
-                       {       psf->error = SFE_INTERLEAVE_READ ;
-                               return 0 ;
-                               } ;
-
-                       for (k = 0 ; k < count ; k++)
-                       {       *outptr = inptr [k] ;
-                               outptr += psf->sf.channels ;
-                               } ;
-
-                       templen -= count ;
-                       } ;
-               } ;
-
-       return len ;
-} /* interleave_read_double */
-
-/*------------------------------------------------------------------------------
-*/
-
-static sf_count_t
-interleave_seek        (SF_PRIVATE * UNUSED (psf), int UNUSED (mode), sf_count_t samples_from_start)
-{
-       /*
-       ** Do nothing here. This is a place holder to prevent the default
-       ** seek function from being called.
-       */
-
-       return samples_from_start ;
-} /* interleave_seek */
-
diff --git a/libs/libsndfile/src/ircam.c b/libs/libsndfile/src/ircam.c
deleted file mode 100644 (file)
index 6a6c7fc..0000000
+++ /dev/null
@@ -1,323 +0,0 @@
-/*
-** Copyright (C) 2001-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <fcntl.h>
-#include       <string.h>
-#include       <ctype.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-
-/* The IRCAM magic number is weird in that one byte in the number can have
-** values of 0x1, 0x2, 0x03 or 0x04. Hence the need for a marker and a mask.
-*/
-
-#define IRCAM_BE_MASK          (MAKE_MARKER (0xFF, 0xFF, 0x00, 0xFF))
-#define IRCAM_BE_MARKER                (MAKE_MARKER (0x64, 0xA3, 0x00, 0x00))
-
-#define IRCAM_LE_MASK          (MAKE_MARKER (0xFF, 0x00, 0xFF, 0xFF))
-#define IRCAM_LE_MARKER                (MAKE_MARKER (0x00, 0x00, 0xA3, 0x64))
-
-#define IRCAM_02B_MARKER       (MAKE_MARKER (0x64, 0xA3, 0x02, 0x00))
-#define IRCAM_03L_MARKER       (MAKE_MARKER (0x64, 0xA3, 0x03, 0x00))
-
-#define IRCAM_DATA_OFFSET      (1024)
-
-/*------------------------------------------------------------------------------
-** Typedefs.
-*/
-
-enum
-{      IRCAM_PCM_16    = 0x00002,
-       IRCAM_FLOAT             = 0x00004,
-       IRCAM_ALAW              = 0x10001,
-       IRCAM_ULAW              = 0x20001,
-       IRCAM_PCM_32    = 0x40004
-} ;
-
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int             ircam_close                     (SF_PRIVATE *psf) ;
-static int             ircam_write_header      (SF_PRIVATE *psf, int calc_length) ;
-static int             ircam_read_header       (SF_PRIVATE *psf) ;
-
-static int             get_encoding (int subformat) ;
-
-static const char*     get_encoding_str (int encoding) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-ircam_open     (SF_PRIVATE *psf)
-{      int             subformat ;
-       int             error = SFE_NO_ERROR ;
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-       {       if ((error = ircam_read_header (psf)))
-                       return error ;
-               } ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_IRCAM)
-                       return  SFE_BAD_OPEN_FORMAT ;
-
-               psf->endian = SF_ENDIAN (psf->sf.format) ;
-               if (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU)
-                       psf->endian = (CPU_IS_BIG_ENDIAN) ? SF_ENDIAN_BIG : SF_ENDIAN_LITTLE ;
-
-               psf->dataoffset = IRCAM_DATA_OFFSET ;
-
-               if ((error = ircam_write_header (psf, SF_FALSE)))
-                       return error ;
-
-               psf->write_header = ircam_write_header ;
-               } ;
-
-       psf->container_close = ircam_close ;
-
-       switch (subformat)
-       {       case SF_FORMAT_ULAW :           /* 8-bit Ulaw encoding. */
-                               error = ulaw_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_ALAW :           /* 8-bit Alaw encoding. */
-                               error = alaw_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_PCM_16 : /* 16-bit linear PCM. */
-               case SF_FORMAT_PCM_32 : /* 32-bit linear PCM. */
-                               error = pcm_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_FLOAT :  /* 32-bit linear PCM. */
-                               error = float32_init (psf) ;
-                               break ;
-
-               default : break ;
-               } ;
-
-       return error ;
-} /* ircam_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-ircam_read_header      (SF_PRIVATE *psf)
-{      unsigned int    marker, encoding ;
-       float                   samplerate ;
-       int                             error = SFE_NO_ERROR ;
-
-       psf_binheader_readf (psf, "epmf44", 0, &marker, &samplerate, &(psf->sf.channels), &encoding) ;
-
-       if (((marker & IRCAM_BE_MASK) != IRCAM_BE_MARKER) && ((marker & IRCAM_LE_MASK) != IRCAM_LE_MARKER))
-       {       psf_log_printf (psf, "marker: 0x%X\n", marker) ;
-               return SFE_IRCAM_NO_MARKER ;
-               } ;
-
-       psf->endian = SF_ENDIAN_LITTLE ;
-
-       if (psf->sf.channels > 256)
-       {       psf_binheader_readf (psf, "Epmf44", 0, &marker, &samplerate, &(psf->sf.channels), &encoding) ;
-
-               /* Sanity checking for endian-ness detection. */
-               if (psf->sf.channels > 256)
-               {       psf_log_printf (psf, "marker: 0x%X\n", marker) ;
-                       return SFE_IRCAM_BAD_CHANNELS ;
-                       } ;
-
-               psf->endian = SF_ENDIAN_BIG ;
-               } ;
-
-       psf_log_printf (psf, "marker: 0x%X\n", marker) ;
-
-       psf->sf.samplerate = (int) samplerate ;
-
-       psf_log_printf (psf,    "  Sample Rate : %d\n"
-                                                       "  Channels    : %d\n"
-                                                       "  Encoding    : %X => %s\n",
-                                               psf->sf.samplerate, psf->sf.channels, encoding, get_encoding_str (encoding)) ;
-
-       switch (encoding)
-       {       case IRCAM_PCM_16 :
-                               psf->bytewidth = 2 ;
-                               psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
-                               psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_PCM_16 ;
-                               break ;
-
-               case IRCAM_PCM_32 :
-                               psf->bytewidth = 4 ;
-                               psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
-                               psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_PCM_32 ;
-                               break ;
-
-               case IRCAM_FLOAT :
-                               psf->bytewidth = 4 ;
-                               psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
-                               psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_FLOAT ;
-                               break ;
-
-               case IRCAM_ALAW :
-                               psf->bytewidth = 1 ;
-                               psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
-                               psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_ALAW ;
-                               break ;
-
-               case IRCAM_ULAW :
-                               psf->bytewidth = 1 ;
-                               psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
-                               psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_ULAW ;
-                               break ;
-
-               default :
-                               error = SFE_IRCAM_UNKNOWN_FORMAT ;
-                               break ;
-               } ;
-
-       if (psf->endian == SF_ENDIAN_BIG)
-               psf->sf.format |= SF_ENDIAN_BIG ;
-       else
-               psf->sf.format |= SF_ENDIAN_LITTLE ;
-
-       if (error)
-               return error ;
-
-       psf->dataoffset = IRCAM_DATA_OFFSET ;
-       psf->datalength = psf->filelength - psf->dataoffset ;
-
-       if (psf->sf.frames == 0 && psf->blockwidth)
-               psf->sf.frames = psf->datalength / psf->blockwidth ;
-
-       psf_log_printf (psf, "  Samples     : %d\n", psf->sf.frames) ;
-
-       psf_binheader_readf (psf, "p", IRCAM_DATA_OFFSET) ;
-
-       return 0 ;
-} /* ircam_read_header */
-
-static int
-ircam_close    (SF_PRIVATE *psf)
-{
-       psf_log_printf (psf, "close\n") ;
-
-       return 0 ;
-} /* ircam_close */
-
-static int
-ircam_write_header (SF_PRIVATE *psf, int UNUSED (calc_length))
-{      int                     encoding ;
-       float           samplerate ;
-       sf_count_t      current ;
-
-       if (psf->pipeoffset > 0)
-               return 0 ;
-
-       current = psf_ftell (psf) ;
-
-       /* This also sets psf->endian. */
-       encoding = get_encoding (SF_CODEC (psf->sf.format)) ;
-
-       if (encoding == 0)
-               return SFE_BAD_OPEN_FORMAT ;
-
-       /* Reset the current header length to zero. */
-       psf->header [0] = 0 ;
-       psf->headindex = 0 ;
-
-       if (psf->is_pipe == SF_FALSE)
-               psf_fseek (psf, 0, SEEK_SET) ;
-
-       samplerate = psf->sf.samplerate ;
-
-       switch (psf->endian)
-       {       case SF_ENDIAN_BIG :
-                       psf_binheader_writef (psf, "Emf", IRCAM_02B_MARKER, samplerate) ;
-                       psf_binheader_writef (psf, "E44", psf->sf.channels, encoding) ;
-                       break ;
-
-               case SF_ENDIAN_LITTLE :
-                       psf_binheader_writef (psf, "emf", IRCAM_03L_MARKER, samplerate) ;
-                       psf_binheader_writef (psf, "e44", psf->sf.channels, encoding) ;
-                       break ;
-
-               default : return SFE_BAD_OPEN_FORMAT ;
-               } ;
-
-       psf_binheader_writef (psf, "z", (size_t) (IRCAM_DATA_OFFSET - psf->headindex)) ;
-
-       /* Header construction complete so write it out. */
-       psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-       if (psf->error)
-               return psf->error ;
-
-       if (current > 0)
-               psf_fseek (psf, current, SEEK_SET) ;
-
-       return psf->error ;
-} /* ircam_write_header */
-
-static int
-get_encoding (int subformat)
-{      switch (subformat)
-       {       case SF_FORMAT_PCM_16 : return IRCAM_PCM_16 ;
-               case SF_FORMAT_PCM_32 : return IRCAM_PCM_32 ;
-
-               case SF_FORMAT_FLOAT :  return IRCAM_FLOAT ;
-
-               case SF_FORMAT_ULAW :   return IRCAM_ULAW ;
-               case SF_FORMAT_ALAW :   return IRCAM_ALAW ;
-
-               default : break ;
-               } ;
-
-       return 0 ;
-} /* get_encoding */
-
-static const char*
-get_encoding_str (int encoding)
-{      switch (encoding)
-       {       case IRCAM_PCM_16       : return "16 bit PCM" ;
-               case IRCAM_FLOAT        : return "32 bit float" ;
-               case IRCAM_ALAW         : return "A law" ;
-               case IRCAM_ULAW         : return "u law" ;
-               case IRCAM_PCM_32       : return "32 bit PCM" ;
-               } ;
-       return "Unknown encoding" ;
-} /* get_encoding_str */
-
diff --git a/libs/libsndfile/src/libsndfile-1.def b/libs/libsndfile/src/libsndfile-1.def
deleted file mode 100644 (file)
index 93cab02..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-; Auto-generated by create_symbols_file.py
-
-LIBRARY libsndfile-1.dll
-EXPORTS
-
-sf_command           @1
-sf_open              @2
-sf_close             @3
-sf_seek              @4
-sf_error             @7
-sf_perror            @8
-sf_error_str         @9
-sf_error_number      @10
-sf_format_check      @11
-sf_read_raw          @16
-sf_readf_short       @17
-sf_readf_int         @18
-sf_readf_float       @19
-sf_readf_double      @20
-sf_read_short        @21
-sf_read_int          @22
-sf_read_float        @23
-sf_read_double       @24
-sf_write_raw         @32
-sf_writef_short      @33
-sf_writef_int        @34
-sf_writef_float      @35
-sf_writef_double     @36
-sf_write_short       @37
-sf_write_int         @38
-sf_write_float       @39
-sf_write_double      @40
-sf_strerror          @50
-sf_get_string        @60
-sf_set_string        @61
-sf_version_string    @68
-sf_open_fd           @70
-sf_wchar_open        @71
-sf_open_virtual      @80
-sf_write_sync        @90
-
diff --git a/libs/libsndfile/src/libsndfile.def b/libs/libsndfile/src/libsndfile.def
deleted file mode 100644 (file)
index 7b14453..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-; Auto-generated by create_symbols_file.py
-
-LIBRARY libsndfile-1.dll
-EXPORTS
-
-sf_command           @1
-sf_open              @2
-sf_close             @3
-sf_seek              @4
-sf_error             @7
-sf_perror            @8
-sf_error_str         @9
-sf_error_number      @10
-sf_format_check      @11
-sf_read_raw          @16
-sf_readf_short       @17
-sf_readf_int         @18
-sf_readf_float       @19
-sf_readf_double      @20
-sf_read_short        @21
-sf_read_int          @22
-sf_read_float        @23
-sf_read_double       @24
-sf_write_raw         @32
-sf_writef_short      @33
-sf_writef_int        @34
-sf_writef_float      @35
-sf_writef_double     @36
-sf_write_short       @37
-sf_write_int         @38
-sf_write_float       @39
-sf_write_double      @40
-sf_strerror          @50
-sf_get_string        @60
-sf_set_string        @61
-sf_open_fd           @70
-sf_open_virtual      @80
-sf_write_sync        @90
-
diff --git a/libs/libsndfile/src/macbinary3.c b/libs/libsndfile/src/macbinary3.c
deleted file mode 100644 (file)
index 3ad71e6..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-** Copyright (C) 2003-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdlib.h>
-#include       <string.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-#if (OSX_DARWIN_VERSION >= 1)
-
-int
-macbinary3_open (SF_PRIVATE * UNUSED (psf))
-{
-       return 0 ;
-} /* macbinary3_open */
-
-#else
-
-int
-macbinary3_open (SF_PRIVATE * UNUSED (psf))
-{
-       return 0 ;
-} /* macbinary3_open */
-
-#endif /* OSX_DARWIN_VERSION */
-
diff --git a/libs/libsndfile/src/macos.c b/libs/libsndfile/src/macos.c
deleted file mode 100644 (file)
index 5f6c531..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-** Copyright (C) 2003-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdlib.h>
-#include       <string.h>
-#include       <sys/stat.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-#define        STR_MARKER      MAKE_MARKER ('S', 'T', 'R', ' ')
-
-int
-macos_guess_file_type (SF_PRIVATE * psf, const char *filename)
-{      static char rsrc_name [1024] ;
-       struct stat statbuf ;
-
-       snprintf (rsrc_name, sizeof (rsrc_name), "%s/rsrc", filename) ;
-
-       /* If there is no resource fork, just return. */
-       if (stat (rsrc_name, &statbuf) != 0)
-       {       psf_log_printf (psf, "No resource fork.\n") ;
-               return 0 ;
-               } ;
-
-       if (statbuf.st_size == 0)
-       {       psf_log_printf (psf, "Have zero size resource fork.\n") ;
-               return 0 ;
-               } ;
-
-       return 0 ;
-} /* macos_guess_file_type */
-
diff --git a/libs/libsndfile/src/make-static-lib-hidden-privates.sh b/libs/libsndfile/src/make-static-lib-hidden-privates.sh
deleted file mode 100644 (file)
index 5bfd485..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash -e
-
-# This script takes a static library and removes all non-public symbols.
-# Ie, it makes a static lib whose symbols are far less likely to clash with
-# the symbols of another shared or static library.
-
-grep sf_ Symbols.gnu-binutils | sed -e "s/[ ;]//g" > Symbols.static
-
-ld -r --whole-archive .libs/libsndfile.a -o libsndfile_a.o
-
-objcopy --keep-global-symbols=Symbols.static libsndfile_a.o libsndfile.o
-
-rm -f libsndfile.a
-ar cru libsndfile.a libsndfile.o
diff --git a/libs/libsndfile/src/mat4.c b/libs/libsndfile/src/mat4.c
deleted file mode 100644 (file)
index 77ece26..0000000
+++ /dev/null
@@ -1,390 +0,0 @@
-/*
-** Copyright (C) 2002-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <fcntl.h>
-#include       <string.h>
-#include       <ctype.h>
-#include       <math.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-/*------------------------------------------------------------------------------
-** Information on how to decode and encode this file was obtained in a PDF
-** file which I found on http://www.wotsit.org/.
-** Also did a lot of testing with GNU Octave but do not have access to
-** Matlab (tm) and so could not test it there.
-*/
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-
-#define MAT4_BE_DOUBLE (MAKE_MARKER (0, 0, 0x03, 0xE8))
-#define MAT4_LE_DOUBLE (MAKE_MARKER (0, 0, 0, 0))
-
-#define MAT4_BE_FLOAT  (MAKE_MARKER (0, 0, 0x03, 0xF2))
-#define MAT4_LE_FLOAT  (MAKE_MARKER (0x0A, 0, 0, 0))
-
-#define MAT4_BE_PCM_32 (MAKE_MARKER (0, 0, 0x03, 0xFC))
-#define MAT4_LE_PCM_32 (MAKE_MARKER (0x14, 0, 0, 0))
-
-#define MAT4_BE_PCM_16 (MAKE_MARKER (0, 0, 0x04, 0x06))
-#define MAT4_LE_PCM_16 (MAKE_MARKER (0x1E, 0, 0, 0))
-
-/* Can't see any reason to ever implement this. */
-#define MAT4_BE_PCM_U8 (MAKE_MARKER (0, 0, 0x04, 0x1A))
-#define MAT4_LE_PCM_U8 (MAKE_MARKER (0x32, 0, 0, 0))
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int             mat4_close              (SF_PRIVATE *psf) ;
-
-static int     mat4_format_to_encoding (int format, int endian) ;
-
-static int             mat4_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int             mat4_read_header (SF_PRIVATE *psf) ;
-
-static const char * mat4_marker_to_str (int marker) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-mat4_open      (SF_PRIVATE *psf)
-{      int             subformat, error = 0 ;
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-       {       if ((error = mat4_read_header (psf)))
-                       return error ;
-               } ;
-
-       if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_MAT4)
-               return  SFE_BAD_OPEN_FORMAT ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       if (psf->is_pipe)
-                       return SFE_NO_PIPE_WRITE ;
-
-               psf->endian = SF_ENDIAN (psf->sf.format) ;
-               if (CPU_IS_LITTLE_ENDIAN && (psf->endian == SF_ENDIAN_CPU || psf->endian == 0))
-                       psf->endian = SF_ENDIAN_LITTLE ;
-               else if (CPU_IS_BIG_ENDIAN && (psf->endian == SF_ENDIAN_CPU || psf->endian == 0))
-                       psf->endian = SF_ENDIAN_BIG ;
-
-               if ((error = mat4_write_header (psf, SF_FALSE)))
-                       return error ;
-
-               psf->write_header = mat4_write_header ;
-               } ;
-
-       psf->container_close = mat4_close ;
-
-       psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-       switch (subformat)
-       {       case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_PCM_32 :
-                               error = pcm_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_FLOAT :
-                               error = float32_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_DOUBLE :
-                               error = double64_init (psf) ;
-                               break ;
-
-               default : break ;
-               } ;
-
-       if (error)
-               return error ;
-
-       return error ;
-} /* mat4_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-mat4_close     (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-               mat4_write_header (psf, SF_TRUE) ;
-
-       return 0 ;
-} /* mat4_close */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-mat4_write_header (SF_PRIVATE *psf, int calc_length)
-{      sf_count_t      current ;
-       int                     encoding ;
-       double          samplerate ;
-
-       current = psf_ftell (psf) ;
-
-       if (calc_length)
-       {       psf->filelength = psf_get_filelen (psf) ;
-
-               psf->datalength = psf->filelength - psf->dataoffset ;
-               if (psf->dataend)
-                       psf->datalength -= psf->filelength - psf->dataend ;
-
-               psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-               } ;
-
-       encoding = mat4_format_to_encoding (SF_CODEC (psf->sf.format), psf->endian) ;
-
-       if (encoding == -1)
-               return SFE_BAD_OPEN_FORMAT ;
-
-       /* Reset the current header length to zero. */
-       psf->header [0] = 0 ;
-       psf->headindex = 0 ;
-       psf_fseek (psf, 0, SEEK_SET) ;
-
-       /* Need sample rate as a double for writing to the header. */
-       samplerate = psf->sf.samplerate ;
-
-       if (psf->endian == SF_ENDIAN_BIG)
-       {       psf_binheader_writef (psf, "Em444", MAT4_BE_DOUBLE, 1, 1, 0) ;
-               psf_binheader_writef (psf, "E4bd", 11, "samplerate", make_size_t (11), samplerate) ;
-               psf_binheader_writef (psf, "tEm484", encoding, psf->sf.channels, psf->sf.frames, 0) ;
-               psf_binheader_writef (psf, "E4b", 9, "wavedata", make_size_t (9)) ;
-               }
-       else if (psf->endian == SF_ENDIAN_LITTLE)
-       {       psf_binheader_writef (psf, "em444", MAT4_LE_DOUBLE, 1, 1, 0) ;
-               psf_binheader_writef (psf, "e4bd", 11, "samplerate", make_size_t (11), samplerate) ;
-               psf_binheader_writef (psf, "tem484", encoding, psf->sf.channels, psf->sf.frames, 0) ;
-               psf_binheader_writef (psf, "e4b", 9, "wavedata", make_size_t (9)) ;
-               }
-       else
-               return SFE_BAD_OPEN_FORMAT ;
-
-       /* Header construction complete so write it out. */
-       psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-       if (psf->error)
-               return psf->error ;
-
-       psf->dataoffset = psf->headindex ;
-
-       if (current > 0)
-               psf_fseek (psf, current, SEEK_SET) ;
-
-       return psf->error ;
-} /* mat4_write_header */
-
-static int
-mat4_read_header (SF_PRIVATE *psf)
-{      char    buffer [256] ;
-       uint32_t marker, namesize ;
-       int             rows, cols, imag ;
-       double  value ;
-       const char *marker_str ;
-       char    name [64] ;
-
-       psf_binheader_readf (psf, "pm", 0, &marker) ;
-
-       /* MAT4 file must start with a double for the samplerate. */
-       if (marker == MAT4_BE_DOUBLE)
-       {       psf->endian = psf->rwf_endian = SF_ENDIAN_BIG ;
-               marker_str = "big endian double" ;
-               }
-       else if (marker == MAT4_LE_DOUBLE)
-       {       psf->endian = psf->rwf_endian = SF_ENDIAN_LITTLE ;
-               marker_str = "little endian double" ;
-               }
-       else
-               return SFE_UNIMPLEMENTED ;
-
-       psf_log_printf (psf, "GNU Octave 2.0 / MATLAB v4.2 format\nMarker : %s\n", marker_str) ;
-
-       psf_binheader_readf (psf, "444", &rows, &cols, &imag) ;
-
-       psf_log_printf (psf, " Rows  : %d\n Cols  : %d\n Imag  : %s\n", rows, cols, imag ? "True" : "False") ;
-
-       psf_binheader_readf (psf, "4", &namesize) ;
-
-       if (namesize >= SIGNED_SIZEOF (name))
-               return SFE_MAT4_BAD_NAME ;
-
-       psf_binheader_readf (psf, "b", name, namesize) ;
-       name [namesize] = 0 ;
-
-       psf_log_printf (psf, " Name  : %s\n", name) ;
-
-       psf_binheader_readf (psf, "d", &value) ;
-
-       snprintf (buffer, sizeof (buffer), " Value : %f\n", value) ;
-       psf_log_printf (psf, buffer) ;
-
-       if ((rows != 1) || (cols != 1))
-               return SFE_MAT4_NO_SAMPLERATE ;
-
-       psf->sf.samplerate = lrint (value) ;
-
-       /* Now write out the audio data. */
-
-       psf_binheader_readf (psf, "m", &marker) ;
-
-       psf_log_printf (psf, "Marker : %s\n", mat4_marker_to_str (marker)) ;
-
-       psf_binheader_readf (psf, "444", &rows, &cols, &imag) ;
-
-       psf_log_printf (psf, " Rows  : %d\n Cols  : %d\n Imag  : %s\n", rows, cols, imag ? "True" : "False") ;
-
-       psf_binheader_readf (psf, "4", &namesize) ;
-
-       if (namesize >= SIGNED_SIZEOF (name))
-               return SFE_MAT4_BAD_NAME ;
-
-       psf_binheader_readf (psf, "b", name, namesize) ;
-       name [namesize] = 0 ;
-
-       psf_log_printf (psf, " Name  : %s\n", name) ;
-
-       psf->dataoffset = psf_ftell (psf) ;
-
-       if (rows == 0 && cols == 0)
-       {       psf_log_printf (psf, "*** Error : zero channel count.\n") ;
-               return SFE_CHANNEL_COUNT_ZERO ;
-               } ;
-
-       psf->sf.channels        = rows ;
-       psf->sf.frames          = cols ;
-
-       psf->sf.format = psf->endian | SF_FORMAT_MAT4 ;
-       switch (marker)
-       {       case MAT4_BE_DOUBLE :
-               case MAT4_LE_DOUBLE :
-                               psf->sf.format |= SF_FORMAT_DOUBLE ;
-                               psf->bytewidth = 8 ;
-                               break ;
-
-               case MAT4_BE_FLOAT :
-               case MAT4_LE_FLOAT :
-                               psf->sf.format |= SF_FORMAT_FLOAT ;
-                               psf->bytewidth = 4 ;
-                               break ;
-
-               case MAT4_BE_PCM_32     :
-               case MAT4_LE_PCM_32     :
-                               psf->sf.format |= SF_FORMAT_PCM_32 ;
-                               psf->bytewidth = 4 ;
-                               break ;
-
-               case MAT4_BE_PCM_16     :
-               case MAT4_LE_PCM_16     :
-                               psf->sf.format |= SF_FORMAT_PCM_16 ;
-                               psf->bytewidth = 2 ;
-                               break ;
-
-               default :
-                               psf_log_printf (psf, "*** Error : Bad marker %08X\n", marker) ;
-                               return SFE_UNIMPLEMENTED ;
-               } ;
-
-       if ((psf->filelength - psf->dataoffset) < psf->sf.channels * psf->sf.frames * psf->bytewidth)
-       {       psf_log_printf (psf, "*** File seems to be truncated. %D <--> %D\n",
-                               psf->filelength - psf->dataoffset, psf->sf.channels * psf->sf.frames * psf->bytewidth) ;
-               }
-       else if ((psf->filelength - psf->dataoffset) > psf->sf.channels * psf->sf.frames * psf->bytewidth)
-               psf->dataend = psf->dataoffset + rows * cols * psf->bytewidth ;
-
-       psf->datalength = psf->filelength - psf->dataoffset - psf->dataend ;
-
-       psf->sf.sections = 1 ;
-
-       return 0 ;
-} /* mat4_read_header */
-
-static int
-mat4_format_to_encoding (int format, int endian)
-{
-       switch (format | endian)
-       {       case (SF_FORMAT_PCM_16 | SF_ENDIAN_BIG) :
-                               return MAT4_BE_PCM_16 ;
-
-               case (SF_FORMAT_PCM_16 | SF_ENDIAN_LITTLE) :
-                               return MAT4_LE_PCM_16 ;
-
-               case (SF_FORMAT_PCM_32 | SF_ENDIAN_BIG) :
-                               return MAT4_BE_PCM_32 ;
-
-               case (SF_FORMAT_PCM_32 | SF_ENDIAN_LITTLE) :
-                               return MAT4_LE_PCM_32 ;
-
-               case (SF_FORMAT_FLOAT | SF_ENDIAN_BIG) :
-                               return MAT4_BE_FLOAT ;
-
-               case (SF_FORMAT_FLOAT | SF_ENDIAN_LITTLE) :
-                               return MAT4_LE_FLOAT ;
-
-               case (SF_FORMAT_DOUBLE | SF_ENDIAN_BIG) :
-                               return MAT4_BE_DOUBLE ;
-
-               case (SF_FORMAT_DOUBLE | SF_ENDIAN_LITTLE) :
-                               return MAT4_LE_DOUBLE ;
-
-               default : break ;
-               } ;
-
-       return -1 ;
-} /* mat4_format_to_encoding */
-
-static const char *
-mat4_marker_to_str (int marker)
-{      static char str [32] ;
-
-       switch (marker)
-       {
-               case MAT4_BE_PCM_16     :       return "big endian 16 bit PCM" ;
-               case MAT4_LE_PCM_16     :       return "little endian 16 bit PCM" ;
-
-               case MAT4_BE_PCM_32     :       return "big endian 32 bit PCM" ;
-               case MAT4_LE_PCM_32     :       return "little endian 32 bit PCM" ;
-
-
-               case MAT4_BE_FLOAT :    return "big endian float" ;
-               case MAT4_LE_FLOAT :    return "big endian float" ;
-
-               case MAT4_BE_DOUBLE     :       return "big endian double" ;
-               case MAT4_LE_DOUBLE     :       return "little endian double" ;
-               } ;
-
-       /* This is a little unsafe but is really only for debugging. */
-       str [sizeof (str) - 1] = 0 ;
-       snprintf (str, sizeof (str) - 1, "%08X", marker) ;
-       return str ;
-} /* mat4_marker_to_str */
-
diff --git a/libs/libsndfile/src/mat5.c b/libs/libsndfile/src/mat5.c
deleted file mode 100644 (file)
index 164fb29..0000000
+++ /dev/null
@@ -1,509 +0,0 @@
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <fcntl.h>
-#include       <string.h>
-#include       <ctype.h>
-#include       <math.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-/*------------------------------------------------------------------------------
-** Information on how to decode and encode this file was obtained in a PDF
-** file which I found on http://www.wotsit.org/.
-** Also did a lot of testing with GNU Octave but do not have access to
-** Matlab (tm) and so could not test it there.
-*/
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-
-#define MATL_MARKER    (MAKE_MARKER ('M', 'A', 'T', 'L'))
-
-#define IM_MARKER      (('I' << 8) + 'M')
-#define MI_MARKER      (('M' << 8) + 'I')
-
-/*------------------------------------------------------------------------------
-** Enums and typedefs.
-*/
-
-enum
-{      MAT5_TYPE_SCHAR                 = 0x1,
-       MAT5_TYPE_UCHAR                 = 0x2,
-       MAT5_TYPE_INT16                 = 0x3,
-       MAT5_TYPE_UINT16                = 0x4,
-       MAT5_TYPE_INT32                 = 0x5,
-       MAT5_TYPE_UINT32                = 0x6,
-       MAT5_TYPE_FLOAT                 = 0x7,
-       MAT5_TYPE_DOUBLE                = 0x9,
-       MAT5_TYPE_ARRAY                 = 0xE,
-
-       MAT5_TYPE_COMP_USHORT   = 0x00020004,
-       MAT5_TYPE_COMP_UINT             = 0x00040006
-} ;
-
-typedef struct
-{      sf_count_t      size ;
-       int                     rows, cols ;
-       char            name [32] ;
-} MAT5_MATRIX ;
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int             mat5_close              (SF_PRIVATE *psf) ;
-
-static int             mat5_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int             mat5_read_header (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-mat5_open      (SF_PRIVATE *psf)
-{      int             subformat, error = 0 ;
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-       {       if ((error = mat5_read_header (psf)))
-                       return error ;
-               } ;
-
-       if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_MAT5)
-               return  SFE_BAD_OPEN_FORMAT ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       if (psf->is_pipe)
-                       return SFE_NO_PIPE_WRITE ;
-
-               psf->endian = SF_ENDIAN (psf->sf.format) ;
-               if (CPU_IS_LITTLE_ENDIAN && (psf->endian == SF_ENDIAN_CPU || psf->endian == 0))
-                       psf->endian = SF_ENDIAN_LITTLE ;
-               else if (CPU_IS_BIG_ENDIAN && (psf->endian == SF_ENDIAN_CPU || psf->endian == 0))
-                       psf->endian = SF_ENDIAN_BIG ;
-
-               if ((error = mat5_write_header (psf, SF_FALSE)))
-                       return error ;
-
-               psf->write_header = mat5_write_header ;
-               } ;
-
-       psf->container_close = mat5_close ;
-
-       psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-       switch (subformat)
-       {       case SF_FORMAT_PCM_U8 :
-               case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_PCM_32 :
-                               error = pcm_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_FLOAT :
-                               error = float32_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_DOUBLE :
-                               error = double64_init (psf) ;
-                               break ;
-
-               default : break ;
-               } ;
-
-       return error ;
-} /* mat5_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-mat5_close     (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-               mat5_write_header (psf, SF_TRUE) ;
-
-       return 0 ;
-} /* mat5_close */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-mat5_write_header (SF_PRIVATE *psf, int calc_length)
-{      static const char       *filename = "MATLAB 5.0 MAT-file, written by " PACKAGE "-" VERSION ", " ;
-       static const char       *sr_name = "samplerate\0\0\0\0\0\0\0\0\0\0\0" ;
-       static const char       *wd_name = "wavedata\0" ;
-       char            buffer [256] ;
-       sf_count_t      current, datasize ;
-       int                     encoding ;
-
-       current = psf_ftell (psf) ;
-
-       if (calc_length)
-       {       psf_fseek (psf, 0, SEEK_END) ;
-               psf->filelength = psf_ftell (psf) ;
-               psf_fseek (psf, 0, SEEK_SET) ;
-
-               psf->datalength = psf->filelength - psf->dataoffset ;
-               if (psf->dataend)
-                       psf->datalength -= psf->filelength - psf->dataend ;
-
-               psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-               } ;
-
-       switch (SF_CODEC (psf->sf.format))
-       {       case SF_FORMAT_PCM_U8 :
-                               encoding = MAT5_TYPE_UCHAR ;
-                               break ;
-
-               case SF_FORMAT_PCM_16 :
-                               encoding = MAT5_TYPE_INT16 ;
-                               break ;
-
-               case SF_FORMAT_PCM_32 :
-                               encoding = MAT5_TYPE_INT32 ;
-                               break ;
-
-               case SF_FORMAT_FLOAT :
-                               encoding = MAT5_TYPE_FLOAT ;
-                               break ;
-
-               case SF_FORMAT_DOUBLE :
-                               encoding = MAT5_TYPE_DOUBLE ;
-                               break ;
-
-               default :
-                               return SFE_BAD_OPEN_FORMAT ;
-               } ;
-
-       /* Reset the current header length to zero. */
-       psf->header [0] = 0 ;
-       psf->headindex = 0 ;
-       psf_fseek (psf, 0, SEEK_SET) ;
-
-       psf_get_date_str (buffer, sizeof (buffer)) ;
-       psf_binheader_writef (psf, "bb", filename, strlen (filename), buffer, strlen (buffer) + 1) ;
-
-       memset (buffer, ' ', 124 - psf->headindex) ;
-       psf_binheader_writef (psf, "b", buffer, make_size_t (124 - psf->headindex)) ;
-
-       psf->rwf_endian = psf->endian ;
-
-       if (psf->rwf_endian == SF_ENDIAN_BIG)
-               psf_binheader_writef (psf, "2b", 0x0100, "MI", make_size_t (2)) ;
-       else
-               psf_binheader_writef (psf, "2b", 0x0100, "IM", make_size_t (2)) ;
-
-       psf_binheader_writef (psf, "444444", MAT5_TYPE_ARRAY, 64, MAT5_TYPE_UINT32, 8, 6, 0) ;
-       psf_binheader_writef (psf, "4444", MAT5_TYPE_INT32, 8, 1, 1) ;
-       psf_binheader_writef (psf, "44b", MAT5_TYPE_SCHAR, strlen (sr_name), sr_name, make_size_t (16)) ;
-
-       if (psf->sf.samplerate > 0xFFFF)
-               psf_binheader_writef (psf, "44", MAT5_TYPE_COMP_UINT, psf->sf.samplerate) ;
-       else
-       {       unsigned short samplerate = psf->sf.samplerate ;
-
-               psf_binheader_writef (psf, "422", MAT5_TYPE_COMP_USHORT, samplerate, 0) ;
-               } ;
-
-       datasize = psf->sf.frames * psf->sf.channels * psf->bytewidth ;
-
-       psf_binheader_writef (psf, "t484444", MAT5_TYPE_ARRAY, datasize + 64, MAT5_TYPE_UINT32, 8, 6, 0) ;
-       psf_binheader_writef (psf, "t4448", MAT5_TYPE_INT32, 8, psf->sf.channels, psf->sf.frames) ;
-       psf_binheader_writef (psf, "44b", MAT5_TYPE_SCHAR, strlen (wd_name), wd_name, strlen (wd_name)) ;
-
-       datasize = psf->sf.frames * psf->sf.channels * psf->bytewidth ;
-       if (datasize > 0x7FFFFFFF)
-               datasize = 0x7FFFFFFF ;
-
-       psf_binheader_writef (psf, "t48", encoding, datasize) ;
-
-       /* Header construction complete so write it out. */
-       psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-       if (psf->error)
-               return psf->error ;
-
-       psf->dataoffset = psf->headindex ;
-
-       if (current > 0)
-               psf_fseek (psf, current, SEEK_SET) ;
-
-       return psf->error ;
-} /* mat5_write_header */
-
-static int
-mat5_read_header (SF_PRIVATE *psf)
-{      char    buffer [256], name [32] ;
-       short   version, endian ;
-       int             type, flags1, flags2, rows, cols ;
-       unsigned size ;
-       int             have_samplerate = 1 ;
-
-       psf_binheader_readf (psf, "pb", 0, buffer, 124) ;
-
-       buffer [125] = 0 ;
-
-       if (strlen (buffer) >= 124)
-               return SFE_UNIMPLEMENTED ;
-
-       if (strstr (buffer, "MATLAB 5.0 MAT-file") == buffer)
-               psf_log_printf (psf, "%s\n", buffer) ;
-
-
-       psf_binheader_readf (psf, "E22", &version, &endian) ;
-
-       if (endian == MI_MARKER)
-       {       psf->endian = psf->rwf_endian = SF_ENDIAN_BIG ;
-               if (CPU_IS_LITTLE_ENDIAN) version = ENDSWAP_16 (version) ;
-               }
-       else if (endian == IM_MARKER)
-       {       psf->endian = psf->rwf_endian = SF_ENDIAN_LITTLE ;
-               if (CPU_IS_BIG_ENDIAN) version = ENDSWAP_16 (version) ;
-               }
-       else
-               return SFE_MAT5_BAD_ENDIAN ;
-
-       if ((CPU_IS_LITTLE_ENDIAN && endian == IM_MARKER) ||
-                       (CPU_IS_BIG_ENDIAN && endian == MI_MARKER))
-               version = ENDSWAP_16 (version) ;
-
-       psf_log_printf (psf, "Version : 0x%04X\n", version) ;
-       psf_log_printf (psf, "Endian  : 0x%04X => %s\n", endian,
-                               (psf->endian == SF_ENDIAN_LITTLE) ? "Little" : "Big") ;
-
-       /*========================================================*/
-       psf_binheader_readf (psf, "44", &type, &size) ;
-       psf_log_printf (psf, "Block\n Type : %X    Size : %d\n", type, size) ;
-
-       if (type != MAT5_TYPE_ARRAY)
-               return SFE_MAT5_NO_BLOCK ;
-
-       psf_binheader_readf (psf, "44", &type, &size) ;
-       psf_log_printf (psf, "    Type : %X    Size : %d\n", type, size) ;
-
-       if (type != MAT5_TYPE_UINT32)
-               return SFE_MAT5_NO_BLOCK ;
-
-       psf_binheader_readf (psf, "44", &flags1, &flags2) ;
-       psf_log_printf (psf, "    Flg1 : %X    Flg2 : %d\n", flags1, flags2) ;
-
-       psf_binheader_readf (psf, "44", &type, &size) ;
-       psf_log_printf (psf, "    Type : %X    Size : %d\n", type, size) ;
-
-       if (type != MAT5_TYPE_INT32)
-               return SFE_MAT5_NO_BLOCK ;
-
-       psf_binheader_readf (psf, "44", &rows, &cols) ;
-       psf_log_printf (psf, "    Rows : %d    Cols : %d\n", rows, cols) ;
-
-       if (rows != 1 || cols != 1)
-       {       if (psf->sf.samplerate == 0)
-                       psf->sf.samplerate = 44100 ;
-               have_samplerate = 0 ;
-               }
-       psf_binheader_readf (psf, "4", &type) ;
-
-       if (type == MAT5_TYPE_SCHAR)
-       {       psf_binheader_readf (psf, "4", &size) ;
-               psf_log_printf (psf, "    Type : %X    Size : %d\n", type, size) ;
-               if (size > SIGNED_SIZEOF (name) - 1)
-               {       psf_log_printf (psf, "Error : Bad name length.\n") ;
-                       return SFE_MAT5_NO_BLOCK ;
-                       } ;
-
-               psf_binheader_readf (psf, "bj", name, size, (8 - (size % 8)) % 8) ;
-               name [size] = 0 ;
-               }
-       else if ((type & 0xFFFF) == MAT5_TYPE_SCHAR)
-       {       size = type >> 16 ;
-               if (size > 4)
-               {       psf_log_printf (psf, "Error : Bad name length.\n") ;
-                       return SFE_MAT5_NO_BLOCK ;
-                       } ;
-
-               psf_log_printf (psf, "    Type : %X\n", type) ;
-               psf_binheader_readf (psf, "4", &name) ;
-               name [size] = 0 ;
-               }
-       else
-               return SFE_MAT5_NO_BLOCK ;
-
-       psf_log_printf (psf, "    Name : %s\n", name) ;
-
-       /*-----------------------------------------*/
-
-       psf_binheader_readf (psf, "44", &type, &size) ;
-
-       if (!have_samplerate)
-               goto skip_samplerate ;
-
-       switch (type)
-       {       case MAT5_TYPE_DOUBLE :
-                               {       double  samplerate ;
-
-                                       psf_binheader_readf (psf, "d", &samplerate) ;
-                                       snprintf (name, sizeof (name), "%f\n", samplerate) ;
-                                       psf_log_printf (psf, "    Val  : %s\n", name) ;
-
-                                       psf->sf.samplerate = lrint (samplerate) ;
-                                       } ;
-                               break ;
-
-               case MAT5_TYPE_COMP_USHORT :
-                               {       unsigned short samplerate ;
-
-                                       psf_binheader_readf (psf, "j2j", -4, &samplerate, 2) ;
-                                       psf_log_printf (psf, "    Val  : %u\n", samplerate) ;
-                                       psf->sf.samplerate = samplerate ;
-                                       }
-                               break ;
-
-               case MAT5_TYPE_COMP_UINT :
-                               psf_log_printf (psf, "    Val  : %u\n", size) ;
-                               psf->sf.samplerate = size ;
-                               break ;
-
-               default :
-                       psf_log_printf (psf, "    Type : %X    Size : %d  ***\n", type, size) ;
-                       return SFE_MAT5_SAMPLE_RATE ;
-               } ;
-
-       /*-----------------------------------------*/
-
-
-       psf_binheader_readf (psf, "44", &type, &size) ;
-       psf_log_printf (psf, " Type : %X    Size : %d\n", type, size) ;
-
-       if (type != MAT5_TYPE_ARRAY)
-               return SFE_MAT5_NO_BLOCK ;
-
-       psf_binheader_readf (psf, "44", &type, &size) ;
-       psf_log_printf (psf, "    Type : %X    Size : %d\n", type, size) ;
-
-       if (type != MAT5_TYPE_UINT32)
-               return SFE_MAT5_NO_BLOCK ;
-
-       psf_binheader_readf (psf, "44", &flags1, &flags2) ;
-       psf_log_printf (psf, "    Flg1 : %X    Flg2 : %d\n", flags1, flags2) ;
-
-       psf_binheader_readf (psf, "44", &type, &size) ;
-       psf_log_printf (psf, "    Type : %X    Size : %d\n", type, size) ;
-
-       if (type != MAT5_TYPE_INT32)
-               return SFE_MAT5_NO_BLOCK ;
-
-       psf_binheader_readf (psf, "44", &rows, &cols) ;
-       psf_log_printf (psf, "    Rows : %X    Cols : %d\n", rows, cols) ;
-
-       psf_binheader_readf (psf, "4", &type) ;
-
-       if (type == MAT5_TYPE_SCHAR)
-       {       psf_binheader_readf (psf, "4", &size) ;
-               psf_log_printf (psf, "    Type : %X    Size : %d\n", type, size) ;
-               if (size > SIGNED_SIZEOF (name) - 1)
-               {       psf_log_printf (psf, "Error : Bad name length.\n") ;
-                       return SFE_MAT5_NO_BLOCK ;
-                       } ;
-
-               psf_binheader_readf (psf, "bj", name, size, (8 - (size % 8)) % 8) ;
-               name [size] = 0 ;
-               }
-       else if ((type & 0xFFFF) == MAT5_TYPE_SCHAR)
-       {       size = type >> 16 ;
-               if (size > 4)
-               {       psf_log_printf (psf, "Error : Bad name length.\n") ;
-                       return SFE_MAT5_NO_BLOCK ;
-                       } ;
-
-               psf_log_printf (psf, "    Type : %X\n", type) ;
-               psf_binheader_readf (psf, "4", &name) ;
-               name [size] = 0 ;
-               }
-       else
-               return SFE_MAT5_NO_BLOCK ;
-
-       psf_log_printf (psf, "    Name : %s\n", name) ;
-
-       psf_binheader_readf (psf, "44", &type, &size) ;
-       psf_log_printf (psf, "    Type : %X    Size : %d\n", type, size) ;
-
-skip_samplerate :
-       /*++++++++++++++++++++++++++++++++++++++++++++++++++*/
-
-       if (rows == 0 && cols == 0)
-       {       psf_log_printf (psf, "*** Error : zero channel count.\n") ;
-               return SFE_CHANNEL_COUNT_ZERO ;
-               } ;
-
-       psf->sf.channels        = rows ;
-       psf->sf.frames          = cols ;
-
-       psf->sf.format = psf->endian | SF_FORMAT_MAT5 ;
-
-       switch (type)
-       {       case MAT5_TYPE_DOUBLE :
-                               psf_log_printf (psf, "Data type : double\n") ;
-                               psf->sf.format |= SF_FORMAT_DOUBLE ;
-                               psf->bytewidth = 8 ;
-                               break ;
-
-               case MAT5_TYPE_FLOAT :
-                               psf_log_printf (psf, "Data type : float\n") ;
-                               psf->sf.format |= SF_FORMAT_FLOAT ;
-                               psf->bytewidth = 4 ;
-                               break ;
-
-               case MAT5_TYPE_INT32 :
-                               psf_log_printf (psf, "Data type : 32 bit PCM\n") ;
-                               psf->sf.format |= SF_FORMAT_PCM_32 ;
-                               psf->bytewidth = 4 ;
-                               break ;
-
-               case MAT5_TYPE_INT16 :
-                               psf_log_printf (psf, "Data type : 16 bit PCM\n") ;
-                               psf->sf.format |= SF_FORMAT_PCM_16 ;
-                               psf->bytewidth = 2 ;
-                               break ;
-
-               case MAT5_TYPE_UCHAR :
-                               psf_log_printf (psf, "Data type : unsigned 8 bit PCM\n") ;
-                               psf->sf.format |= SF_FORMAT_PCM_U8 ;
-                               psf->bytewidth = 1 ;
-                               break ;
-
-               default :
-                               psf_log_printf (psf, "*** Error : Bad marker %08X\n", type) ;
-                               return SFE_UNIMPLEMENTED ;
-               } ;
-
-       psf->dataoffset = psf_ftell (psf) ;
-       psf->datalength = psf->filelength - psf->dataoffset ;
-
-       return 0 ;
-} /* mat5_read_header */
-
diff --git a/libs/libsndfile/src/mpc2k.c b/libs/libsndfile/src/mpc2k.c
deleted file mode 100644 (file)
index 0170f7c..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
-** Copyright (C) 2008-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <string.h>
-#include <ctype.h>
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-/*
-**     Info from Olivier Tristan <o.tristan@ultimatesoundbank.com>
-**
-**     HEADER
-**     2 magic bytes: 1 and 4.
-**     17 char for the name of the sample.
-**     3 bytes: level, tune and channels (0 for channels is mono while 1 is stereo)
-**     4 uint32: sampleStart, loopEnd, sampleFrames and loopLength
-**     1 byte: loopMode (0 no loop, 1 forward looping)
-**     1 byte: number of beat in loop
-**     1 uint16: sampleRate
-**
-**     DATA
-**     Data are always non compressed 16 bits interleaved
-*/
-
-#define HEADER_LENGTH          42      /* Sum of above data fields. */
-#define HEADER_NAME_LEN                17      /* Length of name string. */
-
-#define        SFE_MPC_NO_MARKER       666
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int             mpc2k_close             (SF_PRIVATE *psf) ;
-
-static int             mpc2k_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int             mpc2k_read_header (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-mpc2k_open     (SF_PRIVATE *psf)
-{      int             error = 0 ;
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-       {       if ((error = mpc2k_read_header (psf)))
-                       return error ;
-               } ;
-
-       if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_MPC2K)
-               return  SFE_BAD_OPEN_FORMAT ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       if (mpc2k_write_header (psf, SF_FALSE))
-                       return psf->error ;
-
-               psf->write_header = mpc2k_write_header ;
-               } ;
-
-       psf->container_close = mpc2k_close ;
-
-       psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-       error = pcm_init (psf) ;
-
-       return error ;
-} /* mpc2k_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-mpc2k_close    (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-               mpc2k_write_header (psf, SF_TRUE) ;
-
-       return 0 ;
-} /* mpc2k_close */
-
-static int
-mpc2k_write_header (SF_PRIVATE *psf, int calc_length)
-{      char sample_name [HEADER_NAME_LEN + 1] ;
-       sf_count_t      current ;
-
-       if (psf->pipeoffset > 0)
-               return 0 ;
-
-       current = psf_ftell (psf) ;
-
-       if (calc_length)
-       {       psf->filelength = psf_get_filelen (psf) ;
-
-               psf->dataoffset = HEADER_LENGTH ;
-               psf->datalength = psf->filelength - psf->dataoffset ;
-
-               psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-               } ;
-
-       /* Reset the current header length to zero. */
-       psf->header [0] = 0 ;
-       psf->headindex = 0 ;
-
-       /*
-       ** Only attempt to seek if we are not writng to a pipe. If we are
-       ** writing to a pipe we shouldn't be here anyway.
-       */
-       if (psf->is_pipe == SF_FALSE)
-               psf_fseek (psf, 0, SEEK_SET) ;
-
-       snprintf (sample_name, sizeof (sample_name), "%s                    ", psf->file.name.c) ;
-
-       psf_binheader_writef (psf, "e11b", 1, 4, sample_name, make_size_t (HEADER_NAME_LEN)) ;
-       psf_binheader_writef (psf, "e111", 100, 0, (psf->sf.channels - 1) & 1) ;
-       psf_binheader_writef (psf, "et4888", 0, psf->sf.frames, psf->sf.frames, psf->sf.frames) ;
-       psf_binheader_writef (psf, "e112", 0, 1, (uint16_t) psf->sf.samplerate) ;
-
-       /* Always 16 bit little endian data. */
-       psf->bytewidth = 2 ;
-       psf->endian = SF_ENDIAN_LITTLE ;
-
-       psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-       if (psf->error)
-               return psf->error ;
-
-       psf->dataoffset = psf->headindex ;
-
-       if (current > 0)
-               psf_fseek (psf, current, SEEK_SET) ;
-
-       return psf->error ;
-} /* mpc2k_write_header */
-
-static int
-mpc2k_read_header (SF_PRIVATE *psf)
-{      char sample_name [HEADER_NAME_LEN + 1] ;
-       unsigned char bytes [4] ;
-       uint32_t sample_start, loop_end, sample_frames, loop_length ;
-       uint16_t sample_rate ;
-
-       psf_binheader_readf (psf, "pebb", 0, bytes, 2, sample_name, make_size_t (HEADER_NAME_LEN)) ;
-
-       if (bytes [0] != 1 || bytes [1] != 4)
-               return SFE_MPC_NO_MARKER ;
-
-       sample_name [HEADER_NAME_LEN] = 0 ;
-
-       psf_log_printf (psf, "MPC2000\n  Name         : %s\n", sample_name) ;
-
-       psf_binheader_readf (psf, "eb4444", bytes, 3, &sample_start, &loop_end, &sample_frames, &loop_length) ;
-
-       psf->sf.channels = bytes [2] ? 2 : 1 ;
-
-       psf_log_printf (psf, "  Level        : %d\n  Tune         : %d\n  Stereo       : %s\n", bytes [0], bytes [1], bytes [2] ? "Yes" : "No") ;
-
-       psf_log_printf (psf, "  Sample start : %d\n  Loop end     : %d\n  Frames       : %d\n  Length       : %d\n", sample_start, loop_end, sample_frames, loop_length) ;
-
-       psf_binheader_readf (psf, "eb2", bytes, 2, &sample_rate) ;
-
-       psf_log_printf (psf, "  Loop mode    : %s\n  Beats        : %d\n  Sample rate  : %d\nEnd\n", bytes [0] ? "None" : "Fwd", bytes [1], sample_rate) ;
-
-       psf->sf.samplerate = sample_rate ;
-
-       psf->sf.format = SF_FORMAT_MPC2K | SF_FORMAT_PCM_16 ;
-
-       psf->dataoffset = psf_ftell (psf) ;
-
-       /* Always 16 bit little endian data. */
-       psf->bytewidth = 2 ;
-       psf->endian = SF_ENDIAN_LITTLE ;
-
-       psf->datalength = psf->filelength - psf->dataoffset ;
-       psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-       psf->sf.frames = psf->datalength / psf->blockwidth ;
-
-       psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ;
-
-       return 0 ;
-} /* mpc2k_read_header */
-
diff --git a/libs/libsndfile/src/ms_adpcm.c b/libs/libsndfile/src/ms_adpcm.c
deleted file mode 100644 (file)
index 1643ddf..0000000
+++ /dev/null
@@ -1,836 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <stdlib.h>
-#include       <string.h>
-#include       <math.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-#include       "wav_w64.h"
-
-/* These required here because we write the header in this file. */
-
-#define RIFF_MARKER    (MAKE_MARKER ('R', 'I', 'F', 'F'))
-#define WAVE_MARKER    (MAKE_MARKER ('W', 'A', 'V', 'E'))
-#define fmt_MARKER     (MAKE_MARKER ('f', 'm', 't', ' '))
-#define fact_MARKER    (MAKE_MARKER ('f', 'a', 'c', 't'))
-#define data_MARKER    (MAKE_MARKER ('d', 'a', 't', 'a'))
-
-#define WAVE_FORMAT_MS_ADPCM   0x0002
-
-typedef struct
-{      int                             channels, blocksize, samplesperblock, blocks, dataremaining ;
-       int                             blockcount ;
-       sf_count_t              samplecount ;
-       short                   *samples ;
-       unsigned char   *block ;
-       short                   dummydata [] ; /* ISO C99 struct flexible array. */
-} MSADPCM_PRIVATE ;
-
-/*============================================================================================
-** MS ADPCM static data and functions.
-*/
-
-static int AdaptationTable [] =
-{      230, 230, 230, 230, 307, 409, 512, 614,
-       768, 614, 512, 409, 307, 230, 230, 230
-} ;
-
-/* TODO : The first 7 coef's are are always hardcode and must
-   appear in the actual WAVE file.  They should be read in
-   in case a sound program added extras to the list. */
-
-static int AdaptCoeff1 [MSADPCM_ADAPT_COEFF_COUNT] =
-{      256, 512, 0, 192, 240, 460, 392
-} ;
-
-static int AdaptCoeff2 [MSADPCM_ADAPT_COEFF_COUNT] =
-{      0, -256, 0, 64, 0, -208, -232
-} ;
-
-/*============================================================================================
-**     MS ADPCM Block Layout.
-**     ======================
-**     Block is usually 256, 512 or 1024 bytes depending on sample rate.
-**     For a mono file, the block is laid out as follows:
-**             byte    purpose
-**             0               block predictor [0..6]
-**             1,2             initial idelta (positive)
-**             3,4             sample 1
-**             5,6             sample 0
-**             7..n    packed bytecodes
-**
-**     For a stereo file, the block is laid out as follows:
-**             byte    purpose
-**             0               block predictor [0..6] for left channel
-**             1               block predictor [0..6] for right channel
-**             2,3             initial idelta (positive) for left channel
-**             4,5             initial idelta (positive) for right channel
-**             6,7             sample 1 for left channel
-**             8,9             sample 1 for right channel
-**             10,11   sample 0 for left channel
-**             12,13   sample 0 for right channel
-**             14..n   packed bytecodes
-*/
-
-/*============================================================================================
-** Static functions.
-*/
-
-static int     msadpcm_decode_block    (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms) ;
-static sf_count_t msadpcm_read_block   (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms, short *ptr, int len) ;
-
-static int     msadpcm_encode_block    (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms) ;
-static sf_count_t msadpcm_write_block  (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms, const short *ptr, int len) ;
-
-static sf_count_t      msadpcm_read_s  (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t      msadpcm_read_i  (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t      msadpcm_read_f  (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t      msadpcm_read_d  (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t      msadpcm_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t      msadpcm_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t      msadpcm_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t      msadpcm_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static sf_count_t msadpcm_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-static int     msadpcm_close   (SF_PRIVATE *psf) ;
-
-static void    choose_predictor (unsigned int channels, short *data, int *bpred, int *idelta) ;
-
-/*============================================================================================
-** MS ADPCM Read Functions.
-*/
-
-int
-wav_w64_msadpcm_init   (SF_PRIVATE *psf, int blockalign, int samplesperblock)
-{      MSADPCM_PRIVATE *pms ;
-       unsigned int    pmssize ;
-       int                             count ;
-
-       if (psf->codec_data != NULL)
-       {       psf_log_printf (psf, "*** psf->codec_data is not NULL.\n") ;
-               return SFE_INTERNAL ;
-               } ;
-
-       if (psf->file.mode == SFM_WRITE)
-               samplesperblock = 2 + 2 * (blockalign - 7 * psf->sf.channels) / psf->sf.channels ;
-
-       pmssize = sizeof (MSADPCM_PRIVATE) + blockalign + 3 * psf->sf.channels * samplesperblock ;
-
-       if (! (psf->codec_data = calloc (1, pmssize)))
-               return SFE_MALLOC_FAILED ;
-       pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-       pms->samples    = pms->dummydata ;
-       pms->block              = (unsigned char*) (pms->dummydata + psf->sf.channels * samplesperblock) ;
-
-       pms->channels   = psf->sf.channels ;
-       pms->blocksize  = blockalign ;
-       pms->samplesperblock = samplesperblock ;
-
-       if (pms->blocksize == 0)
-       {       psf_log_printf (psf, "*** Error : pms->blocksize should not be zero.\n") ;
-               return SFE_INTERNAL ;
-               } ;
-
-       if (psf->file.mode == SFM_READ)
-       {       pms->dataremaining = psf->datalength ;
-
-               if (psf->datalength % pms->blocksize)
-                       pms->blocks = psf->datalength / pms->blocksize + 1 ;
-               else
-                       pms->blocks = psf->datalength / pms->blocksize ;
-
-               count = 2 * (pms->blocksize - 6 * pms->channels) / pms->channels ;
-               if (pms->samplesperblock != count)
-               {       psf_log_printf (psf, "*** Error : samplesperblock should be %d.\n", count) ;
-                       return SFE_INTERNAL ;
-                       } ;
-
-               psf->sf.frames = (psf->datalength / pms->blocksize) * pms->samplesperblock ;
-
-               psf_log_printf (psf, " bpred   idelta\n") ;
-
-               msadpcm_decode_block (psf, pms) ;
-
-               psf->read_short         = msadpcm_read_s ;
-               psf->read_int           = msadpcm_read_i ;
-               psf->read_float         = msadpcm_read_f ;
-               psf->read_double        = msadpcm_read_d ;
-               } ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       pms->samples = pms->dummydata ;
-
-               pms->samplecount = 0 ;
-
-               psf->write_short        = msadpcm_write_s ;
-               psf->write_int          = msadpcm_write_i ;
-               psf->write_float        = msadpcm_write_f ;
-               psf->write_double       = msadpcm_write_d ;
-               } ;
-
-       psf->codec_close = msadpcm_close ;
-       psf->seek = msadpcm_seek ;
-
-       return 0 ;
-} /* wav_w64_msadpcm_init */
-
-static int
-msadpcm_decode_block   (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms)
-{      int             chan, k, blockindx, sampleindx ;
-       short   bytecode, bpred [2], chan_idelta [2] ;
-
-       int predict ;
-       int current ;
-       int idelta ;
-
-       pms->blockcount ++ ;
-       pms->samplecount = 0 ;
-
-       if (pms->blockcount > pms->blocks)
-       {       memset (pms->samples, 0, pms->samplesperblock * pms->channels) ;
-               return 1 ;
-               } ;
-
-       if ((k = psf_fread (pms->block, 1, pms->blocksize, psf)) != pms->blocksize)
-               psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, pms->blocksize) ;
-
-       /* Read and check the block header. */
-
-       if (pms->channels == 1)
-       {       bpred [0] = pms->block [0] ;
-
-               if (bpred [0] >= 7)
-                       psf_log_printf (psf, "MS ADPCM synchronisation error (%d).\n", bpred [0]) ;
-
-               chan_idelta [0] = pms->block [1] | (pms->block [2] << 8) ;
-               chan_idelta [1] = 0 ;
-
-               psf_log_printf (psf, "(%d) (%d)\n", bpred [0], chan_idelta [0]) ;
-
-               pms->samples [1] = pms->block [3] | (pms->block [4] << 8) ;
-               pms->samples [0] = pms->block [5] | (pms->block [6] << 8) ;
-               blockindx = 7 ;
-               }
-       else
-       {       bpred [0] = pms->block [0] ;
-               bpred [1] = pms->block [1] ;
-
-               if (bpred [0] >= 7 || bpred [1] >= 7)
-                       psf_log_printf (psf, "MS ADPCM synchronisation error (%d %d).\n", bpred [0], bpred [1]) ;
-
-               chan_idelta [0] = pms->block [2] | (pms->block [3] << 8) ;
-               chan_idelta [1] = pms->block [4] | (pms->block [5] << 8) ;
-
-               psf_log_printf (psf, "(%d, %d) (%d, %d)\n", bpred [0], bpred [1], chan_idelta [0], chan_idelta [1]) ;
-
-               pms->samples [2] = pms->block [6] | (pms->block [7] << 8) ;
-               pms->samples [3] = pms->block [8] | (pms->block [9] << 8) ;
-
-               pms->samples [0] = pms->block [10] | (pms->block [11] << 8) ;
-               pms->samples [1] = pms->block [12] | (pms->block [13] << 8) ;
-
-               blockindx = 14 ;
-               } ;
-
-       /*--------------------------------------------------------
-       This was left over from a time when calculations were done
-       as ints rather than shorts. Keep this around as a reminder
-       in case I ever find a file which decodes incorrectly.
-
-    if (chan_idelta [0] & 0x8000)
-               chan_idelta [0] -= 0x10000 ;
-    if (chan_idelta [1] & 0x8000)
-               chan_idelta [1] -= 0x10000 ;
-       --------------------------------------------------------*/
-
-       /* Pull apart the packed 4 bit samples and store them in their
-       ** correct sample positions.
-       */
-
-       sampleindx = 2 * pms->channels ;
-       while (blockindx < pms->blocksize)
-       {       bytecode = pms->block [blockindx++] ;
-               pms->samples [sampleindx++] = (bytecode >> 4) & 0x0F ;
-               pms->samples [sampleindx++] = bytecode & 0x0F ;
-               } ;
-
-       /* Decode the encoded 4 bit samples. */
-
-       for (k = 2 * pms->channels ; k < (pms->samplesperblock * pms->channels) ; k ++)
-       {       chan = (pms->channels > 1) ? (k % 2) : 0 ;
-
-               bytecode = pms->samples [k] & 0xF ;
-
-               /* Compute next Adaptive Scale Factor (ASF) */
-               idelta = chan_idelta [chan] ;
-               chan_idelta [chan] = (AdaptationTable [bytecode] * idelta) >> 8 ;       /* => / 256 => FIXED_POINT_ADAPTATION_BASE == 256 */
-               if (chan_idelta [chan] < 16)
-                       chan_idelta [chan] = 16 ;
-               if (bytecode & 0x8)
-                       bytecode -= 0x10 ;
-
-               predict = ((pms->samples [k - pms->channels] * AdaptCoeff1 [bpred [chan]])
-                                       + (pms->samples [k - 2 * pms->channels] * AdaptCoeff2 [bpred [chan]])) >> 8 ; /* => / 256 => FIXED_POINT_COEFF_BASE == 256 */
-               current = (bytecode * idelta) + predict ;
-
-               if (current > 32767)
-                       current = 32767 ;
-               else if (current < -32768)
-                       current = -32768 ;
-
-               pms->samples [k] = current ;
-               } ;
-
-       return 1 ;
-} /* msadpcm_decode_block */
-
-static sf_count_t
-msadpcm_read_block     (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms, short *ptr, int len)
-{      int     count, total = 0, indx = 0 ;
-
-       while (indx < len)
-       {       if (pms->blockcount >= pms->blocks && pms->samplecount >= pms->samplesperblock)
-               {       memset (&(ptr [indx]), 0, (size_t) ((len - indx) * sizeof (short))) ;
-                       return total ;
-                       } ;
-
-               if (pms->samplecount >= pms->samplesperblock)
-                       msadpcm_decode_block (psf, pms) ;
-
-               count = (pms->samplesperblock - pms->samplecount) * pms->channels ;
-               count = (len - indx > count) ? count : len - indx ;
-
-               memcpy (&(ptr [indx]), &(pms->samples [pms->samplecount * pms->channels]), count * sizeof (short)) ;
-               indx += count ;
-               pms->samplecount += count / pms->channels ;
-               total = indx ;
-               } ;
-
-       return total ;
-} /* msadpcm_read_block */
-
-static sf_count_t
-msadpcm_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      MSADPCM_PRIVATE         *pms ;
-       int                     readcount, count ;
-       sf_count_t      total = 0 ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-       while (len > 0)
-       {       readcount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-               count = msadpcm_read_block (psf, pms, ptr, readcount) ;
-
-               total += count ;
-               len -= count ;
-               if (count != readcount)
-                       break ;
-               } ;
-
-       return total ;
-} /* msadpcm_read_s */
-
-static sf_count_t
-msadpcm_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      MSADPCM_PRIVATE *pms ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, readcount = 0, count ;
-       sf_count_t      total = 0 ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = msadpcm_read_block (psf, pms, sptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = sptr [k] << 16 ;
-               total += count ;
-               len -= readcount ;
-               if (count != readcount)
-                       break ;
-               } ;
-       return total ;
-} /* msadpcm_read_i */
-
-static sf_count_t
-msadpcm_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      MSADPCM_PRIVATE *pms ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, readcount = 0, count ;
-       sf_count_t      total = 0 ;
-       float           normfact ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = msadpcm_read_block (psf, pms, sptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = normfact * (float) (sptr [k]) ;
-               total += count ;
-               len -= readcount ;
-               if (count != readcount)
-                       break ;
-               } ;
-       return total ;
-} /* msadpcm_read_f */
-
-static sf_count_t
-msadpcm_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      MSADPCM_PRIVATE *pms ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, readcount = 0, count ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = msadpcm_read_block (psf, pms, sptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = normfact * (double) (sptr [k]) ;
-               total += count ;
-               len -= readcount ;
-               if (count != readcount)
-                       break ;
-               } ;
-       return total ;
-} /* msadpcm_read_d */
-
-static sf_count_t
-msadpcm_seek   (SF_PRIVATE *psf, int mode, sf_count_t offset)
-{      MSADPCM_PRIVATE *pms ;
-       int                     newblock, newsample ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-       if (psf->datalength < 0 || psf->dataoffset < 0)
-       {       psf->error = SFE_BAD_SEEK ;
-               return  PSF_SEEK_ERROR ;
-               } ;
-
-       if (offset == 0)
-       {       psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-               pms->blockcount = 0 ;
-               msadpcm_decode_block (psf, pms) ;
-               pms->samplecount = 0 ;
-               return 0 ;
-               } ;
-
-       if (offset < 0 || offset > pms->blocks * pms->samplesperblock)
-       {       psf->error = SFE_BAD_SEEK ;
-               return  PSF_SEEK_ERROR ;
-               } ;
-
-       newblock        = offset / pms->samplesperblock ;
-       newsample       = offset % pms->samplesperblock ;
-
-       if (mode == SFM_READ)
-       {       psf_fseek (psf, psf->dataoffset + newblock * pms->blocksize, SEEK_SET) ;
-               pms->blockcount = newblock ;
-               msadpcm_decode_block (psf, pms) ;
-               pms->samplecount = newsample ;
-               }
-       else
-       {       /* What to do about write??? */
-               psf->error = SFE_BAD_SEEK ;
-               return  PSF_SEEK_ERROR ;
-               } ;
-
-       return newblock * pms->samplesperblock + newsample ;
-} /* msadpcm_seek */
-
-/*==========================================================================================
-** MS ADPCM Write Functions.
-*/
-
-void
-msadpcm_write_adapt_coeffs     (SF_PRIVATE *psf)
-{      int k ;
-
-       for (k = 0 ; k < MSADPCM_ADAPT_COEFF_COUNT ; k++)
-               psf_binheader_writef (psf, "22", AdaptCoeff1 [k], AdaptCoeff2 [k]) ;
-} /* msadpcm_write_adapt_coeffs */
-
-/*==========================================================================================
-*/
-
-static int
-msadpcm_encode_block   (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms)
-{      unsigned int    blockindx ;
-       unsigned char   byte ;
-       int                             chan, k, predict, bpred [2], idelta [2], errordelta, newsamp ;
-
-       choose_predictor (pms->channels, pms->samples, bpred, idelta) ;
-
-       /* Write the block header. */
-
-       if (pms->channels == 1)
-       {       pms->block [0]  = bpred [0] ;
-               pms->block [1]  = idelta [0] & 0xFF ;
-               pms->block [2]  = idelta [0] >> 8 ;
-               pms->block [3]  = pms->samples [1] & 0xFF ;
-               pms->block [4]  = pms->samples [1] >> 8 ;
-               pms->block [5]  = pms->samples [0] & 0xFF ;
-               pms->block [6]  = pms->samples [0] >> 8 ;
-
-               blockindx = 7 ;
-               byte = 0 ;
-
-               /* Encode the samples as 4 bit. */
-
-               for (k = 2 ; k < pms->samplesperblock ; k++)
-               {       predict = (pms->samples [k-1] * AdaptCoeff1 [bpred [0]] + pms->samples [k-2] * AdaptCoeff2 [bpred [0]]) >> 8 ;
-                       errordelta = (pms->samples [k] - predict) / idelta [0] ;
-                       if (errordelta < -8)
-                               errordelta = -8 ;
-                       else if (errordelta > 7)
-                               errordelta = 7 ;
-                       newsamp = predict + (idelta [0] * errordelta) ;
-                       if (newsamp > 32767)
-                               newsamp = 32767 ;
-                       else if (newsamp < -32768)
-                               newsamp = -32768 ;
-                       if (errordelta < 0)
-                               errordelta += 0x10 ;
-
-                       byte = (byte << 4) | (errordelta & 0xF) ;
-                       if (k % 2)
-                       {       pms->block [blockindx++] = byte ;
-                               byte = 0 ;
-                               } ;
-
-                       idelta [0] = (idelta [0] * AdaptationTable [errordelta]) >> 8 ;
-                       if (idelta [0] < 16)
-                               idelta [0] = 16 ;
-                       pms->samples [k] = newsamp ;
-                       } ;
-               }
-       else
-       {       /* Stereo file. */
-               pms->block [0]  = bpred [0] ;
-               pms->block [1]  = bpred [1] ;
-
-               pms->block [2]  = idelta [0] & 0xFF ;
-               pms->block [3]  = idelta [0] >> 8 ;
-               pms->block [4]  = idelta [1] & 0xFF ;
-               pms->block [5]  = idelta [1] >> 8 ;
-
-               pms->block [6]  = pms->samples [2] & 0xFF ;
-               pms->block [7]  = pms->samples [2] >> 8 ;
-               pms->block [8]  = pms->samples [3] & 0xFF ;
-               pms->block [9]  = pms->samples [3] >> 8 ;
-
-               pms->block [10] = pms->samples [0] & 0xFF ;
-               pms->block [11] = pms->samples [0] >> 8 ;
-               pms->block [12] = pms->samples [1] & 0xFF ;
-               pms->block [13] = pms->samples [1] >> 8 ;
-
-               blockindx = 14 ;
-               byte = 0 ;
-               chan = 1 ;
-
-               for (k = 4 ; k < 2 * pms->samplesperblock ; k++)
-               {       chan = k & 1 ;
-
-                       predict = (pms->samples [k-2] * AdaptCoeff1 [bpred [chan]] + pms->samples [k-4] * AdaptCoeff2 [bpred [chan]]) >> 8 ;
-                       errordelta = (pms->samples [k] - predict) / idelta [chan] ;
-
-
-                       if (errordelta < -8)
-                               errordelta = -8 ;
-                       else if (errordelta > 7)
-                               errordelta = 7 ;
-                       newsamp = predict + (idelta [chan] * errordelta) ;
-                       if (newsamp > 32767)
-                               newsamp = 32767 ;
-                       else if (newsamp < -32768)
-                               newsamp = -32768 ;
-                       if (errordelta < 0)
-                               errordelta += 0x10 ;
-
-                       byte = (byte << 4) | (errordelta & 0xF) ;
-
-                       if (chan)
-                       {       pms->block [blockindx++] = byte ;
-                               byte = 0 ;
-                               } ;
-
-                       idelta [chan] = (idelta [chan] * AdaptationTable [errordelta]) >> 8 ;
-                       if (idelta [chan] < 16)
-                               idelta [chan] = 16 ;
-                       pms->samples [k] = newsamp ;
-                       } ;
-               } ;
-
-       /* Write the block to disk. */
-
-       if ((k = psf_fwrite (pms->block, 1, pms->blocksize, psf)) != pms->blocksize)
-               psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, pms->blocksize) ;
-
-       memset (pms->samples, 0, pms->samplesperblock * sizeof (short)) ;
-
-       pms->blockcount ++ ;
-       pms->samplecount = 0 ;
-
-       return 1 ;
-} /* msadpcm_encode_block */
-
-static sf_count_t
-msadpcm_write_block    (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms, const short *ptr, int len)
-{      int             count, total = 0, indx = 0 ;
-
-       while (indx < len)
-       {       count = (pms->samplesperblock - pms->samplecount) * pms->channels ;
-
-               if (count > len - indx)
-                       count = len - indx ;
-
-               memcpy (&(pms->samples [pms->samplecount * pms->channels]), &(ptr [total]), count * sizeof (short)) ;
-               indx += count ;
-               pms->samplecount += count / pms->channels ;
-               total = indx ;
-
-               if (pms->samplecount >= pms->samplesperblock)
-                       msadpcm_encode_block (psf, pms) ;
-               } ;
-
-       return total ;
-} /* msadpcm_write_block */
-
-static sf_count_t
-msadpcm_write_s        (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      MSADPCM_PRIVATE *pms ;
-       int                     writecount, count ;
-       sf_count_t      total = 0 ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-       while (len > 0)
-       {       writecount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-               count = msadpcm_write_block (psf, pms, ptr, writecount) ;
-
-               total += count ;
-               len -= count ;
-               if (count != writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* msadpcm_write_s */
-
-static sf_count_t
-msadpcm_write_i        (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      MSADPCM_PRIVATE *pms ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, writecount, count ;
-       sf_count_t      total = 0 ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : len ;
-               for (k = 0 ; k < writecount ; k++)
-                       sptr [k] = ptr [total + k] >> 16 ;
-               count = msadpcm_write_block (psf, pms, sptr, writecount) ;
-               total += count ;
-               len -= writecount ;
-               if (count != writecount)
-                       break ;
-               } ;
-       return total ;
-} /* msadpcm_write_i */
-
-static sf_count_t
-msadpcm_write_f        (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      MSADPCM_PRIVATE *pms ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, writecount, count ;
-       sf_count_t      total = 0 ;
-       float           normfact ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : len ;
-               for (k = 0 ; k < writecount ; k++)
-                       sptr [k] = lrintf (normfact * ptr [total + k]) ;
-               count = msadpcm_write_block (psf, pms, sptr, writecount) ;
-               total += count ;
-               len -= writecount ;
-               if (count != writecount)
-                       break ;
-               } ;
-       return total ;
-} /* msadpcm_write_f */
-
-static sf_count_t
-msadpcm_write_d        (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      MSADPCM_PRIVATE *pms ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, writecount, count ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : len ;
-               for (k = 0 ; k < writecount ; k++)
-                       sptr [k] = lrint (normfact * ptr [total + k]) ;
-               count = msadpcm_write_block (psf, pms, sptr, writecount) ;
-               total += count ;
-               len -= writecount ;
-               if (count != writecount)
-                       break ;
-               } ;
-       return total ;
-} /* msadpcm_write_d */
-
-/*========================================================================================
-*/
-
-static int
-msadpcm_close  (SF_PRIVATE *psf)
-{      MSADPCM_PRIVATE *pms ;
-
-       pms = (MSADPCM_PRIVATE*) psf->codec_data ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       /*  Now we know static int for certain the length of the file we can
-               **  re-write the header.
-               */
-
-               if (pms->samplecount && pms->samplecount < pms->samplesperblock)
-                       msadpcm_encode_block (psf, pms) ;
-               } ;
-
-       return 0 ;
-} /* msadpcm_close */
-
-/*========================================================================================
-** Static functions.
-*/
-
-/*----------------------------------------------------------------------------------------
-**     Choosing the block predictor.
-**     Each block requires a predictor and an idelta for each channel.
-**     The predictor is in the range [0..6] which is an indx into the  two AdaptCoeff tables.
-**     The predictor is chosen by trying all of the possible predictors on a small set of
-**     samples at the beginning of the block. The predictor with the smallest average
-**     abs (idelta) is chosen as the best predictor for this block.
-**     The value of idelta is chosen to to give a 4 bit code value of +/- 4 (approx. half the
-**     max. code value). If the average abs (idelta) is zero, the sixth predictor is chosen.
-**     If the value of idelta is less then 16 it is set to 16.
-**
-**     Microsoft uses an IDELTA_COUNT (number of sample pairs used to choose best predictor)
-**     value of 3. The best possible results would be obtained by using all the samples to
-**     choose the predictor.
-*/
-
-#define                IDELTA_COUNT    3
-
-static void
-choose_predictor (unsigned int channels, short *data, int *block_pred, int *idelta)
-{      unsigned int    chan, k, bpred, idelta_sum, best_bpred, best_idelta ;
-
-       for (chan = 0 ; chan < channels ; chan++)
-       {       best_bpred = best_idelta = 0 ;
-
-               for (bpred = 0 ; bpred < 7 ; bpred++)
-               {       idelta_sum = 0 ;
-                       for (k = 2 ; k < 2 + IDELTA_COUNT ; k++)
-                               idelta_sum += abs (data [k * channels] - ((data [(k - 1) * channels] * AdaptCoeff1 [bpred] + data [(k - 2) * channels] * AdaptCoeff2 [bpred]) >> 8)) ;
-                       idelta_sum /= (4 * IDELTA_COUNT) ;
-
-                       if (bpred == 0 || idelta_sum < best_idelta)
-                       {       best_bpred = bpred ;
-                               best_idelta = idelta_sum ;
-                               } ;
-
-                       if (! idelta_sum)
-                       {       best_bpred = bpred ;
-                               best_idelta = 16 ;
-                               break ;
-                               } ;
-
-                       } ; /* for bpred ... */
-               if (best_idelta < 16)
-                       best_idelta = 16 ;
-
-               block_pred [chan]       = best_bpred ;
-               idelta [chan]           = best_idelta ;
-               } ;
-
-       return ;
-} /* choose_predictor */
-
diff --git a/libs/libsndfile/src/new.c b/libs/libsndfile/src/new.c
deleted file mode 100644 (file)
index 23f3087..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <fcntl.h>
-#include       <string.h>
-#include       <ctype.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-#if (ENABLE_EXPERIMENTAL_CODE == 0)
-
-int
-new_open       (SF_PRIVATE *psf)
-{      if (psf)
-               return SFE_UNIMPLEMENTED ;
-       return (psf && 0) ;
-} /* new_open */
-
-#else
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-
-/*------------------------------------------------------------------------------
-** Typedefs.
-*/
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int     new_read_header (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-new_open (SF_PRIVATE *psf)
-{      int     subformat, error = 0 ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-               return SFE_UNIMPLEMENTED ;
-
-       if ((error = new_read_header (psf)))
-                       return error ;
-
-       if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_WVE)
-               return  SFE_BAD_OPEN_FORMAT ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-
-       return error ;
-} /* new_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-new_read_header (SF_PRIVATE *psf)
-{      int marker ;
-
-       /* Set position to start of file to begin reading header. */
-       psf_binheader_readf (psf, "pm", 0, &marker) ;
-       if (marker != ALAW_MARKER)
-               return SFE_WVE_NOT_WVE ;
-
-       psf_binheader_readf (psf, "m", &marker) ;
-       if (marker != SOUN_MARKER)
-               return SFE_WVE_NOT_WVE ;
-
-       psf_binheader_readf (psf, "m", &marker) ;
-       if (marker != DFIL_MARKER)
-               return SFE_WVE_NOT_WVE ;
-
-       psf_log_printf (psf, "Read only : Psion Alaw\n"
-                       "  Sample Rate : 8000\n"
-                       "  Channels    : 1\n"
-                       "  Encoding    : A-law\n") ;
-
-       psf->dataoffset = 0x20 ;
-       psf->datalength = psf->filelength - psf->dataoffset ;
-
-       psf->sf.format          = SF_FORMAT_WVE | SF_FORMAT_ALAW ;
-       psf->sf.samplerate      = 8000 ;
-       psf->sf.frames          = psf->datalength ;
-       psf->sf.channels        = 1 ;
-
-       return alaw_init (psf) ;
-} /* new_read_header */
-
-/*------------------------------------------------------------------------------
-*/
-
-#endif
diff --git a/libs/libsndfile/src/nist.c b/libs/libsndfile/src/nist.c
deleted file mode 100644 (file)
index 2aa679e..0000000
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**     Some of the information used to read NIST files was gleaned from
-**     reading the code of Bill Schottstaedt's sndlib library
-**             ftp://ccrma-ftp.stanford.edu/pub/Lisp/sndlib.tar.gz
-**     However, no code from that package was used.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <fcntl.h>
-#include       <string.h>
-#include       <ctype.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-/*------------------------------------------------------------------------------
-*/
-
-#define        NIST_HEADER_LENGTH      1024
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int     nist_close      (SF_PRIVATE *psf) ;
-static int nist_write_header   (SF_PRIVATE *psf, int calc_length) ;
-static int nist_read_header    (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-*/
-
-int
-nist_open      (SF_PRIVATE *psf)
-{      int error ;
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-       {       if ((error = nist_read_header (psf)))
-                       return error ;
-               } ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       if (psf->is_pipe)
-                       return SFE_NO_PIPE_WRITE ;
-
-               if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_NIST)
-                       return  SFE_BAD_OPEN_FORMAT ;
-
-               psf->endian = SF_ENDIAN (psf->sf.format) ;
-               if (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU)
-                       psf->endian = (CPU_IS_BIG_ENDIAN) ? SF_ENDIAN_BIG : SF_ENDIAN_LITTLE ;
-
-               psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-               psf->sf.frames = 0 ;
-
-               if ((error = nist_write_header (psf, SF_FALSE)))
-                       return error ;
-
-               psf->write_header = nist_write_header ;
-               } ;
-
-       psf->container_close = nist_close ;
-
-       switch (SF_CODEC (psf->sf.format))
-       {       case SF_FORMAT_PCM_S8 :
-                               error = pcm_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_PCM_24 :
-               case SF_FORMAT_PCM_32 :
-                               error = pcm_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_ULAW :
-                               error = ulaw_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_ALAW :
-                               error = alaw_init (psf) ;
-                               break ;
-
-               default : error = SFE_UNIMPLEMENTED ;
-                               break ;
-               } ;
-
-       return error ;
-} /* nist_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static char bad_header [] =
-{      'N', 'I', 'S', 'T', '_', '1', 'A', 0x0d, 0x0a,
-       ' ', ' ', ' ', '1', '0', '2', '4', 0x0d, 0x0a,
-       0
-} ;
-
-       static int
-nist_read_header (SF_PRIVATE *psf)
-{      char    psf_header [NIST_HEADER_LENGTH + 2] ;
-       int             bitwidth = 0, count, encoding ;
-       unsigned bytes = 0 ;
-       char    str [64], *cptr ;
-       long    samples ;
-
-       if (sizeof (psf->header) <= NIST_HEADER_LENGTH)
-               return SFE_INTERNAL ;
-
-       /* Go to start of file and read in the whole header. */
-       psf_binheader_readf (psf, "pb", 0, psf_header, NIST_HEADER_LENGTH) ;
-
-       /* Header is a string, so make sure it is null terminated. */
-       psf_header [NIST_HEADER_LENGTH] = 0 ;
-
-       /* Now trim the header after the end marker. */
-       if ((cptr = strstr (psf_header, "end_head")))
-       {       cptr += strlen ("end_head") + 1 ;
-               cptr [0] = 0 ;
-               } ;
-
-       if (strstr (psf_header, bad_header) == psf_header)
-               return SFE_NIST_CRLF_CONVERISON ;
-
-       /* Make sure its a NIST file. */
-       if (strstr (psf_header, "NIST_1A\n") != psf_header)
-       {       psf_log_printf (psf, "Not a NIST file.\n") ;
-               return SFE_NIST_BAD_HEADER ;
-               } ;
-
-       if (sscanf (psf_header, "NIST_1A\n%d\n", &count) == 1)
-               psf->dataoffset = count ;
-       else
-       {       psf_log_printf (psf, "*** Suspicious header length.\n") ;
-               psf->dataoffset = NIST_HEADER_LENGTH ;
-               } ;
-
-       /* Determine sample encoding, start by assuming PCM. */
-       encoding = SF_FORMAT_PCM_U8 ;
-       if ((cptr = strstr (psf_header, "sample_coding -s")))
-       {       sscanf (cptr, "sample_coding -s%d %63s", &count, str) ;
-
-               if (strcmp (str, "pcm") == 0)
-               {       /* Correct this later when we find out the bitwidth. */
-                       encoding = SF_FORMAT_PCM_U8 ;
-                       }
-               else if (strcmp (str, "alaw") == 0)
-                       encoding = SF_FORMAT_ALAW ;
-               else if ((strcmp (str, "ulaw") == 0) || (strcmp (str, "mu-law") == 0))
-                       encoding = SF_FORMAT_ULAW ;
-               else
-               {       psf_log_printf (psf, "*** Unknown encoding : %s\n", str) ;
-                       encoding = 0 ;
-                       } ;
-               } ;
-
-       if ((cptr = strstr (psf_header, "channel_count -i ")) != NULL)
-               sscanf (cptr, "channel_count -i %d", &(psf->sf.channels)) ;
-
-       if ((cptr = strstr (psf_header, "sample_rate -i ")) != NULL)
-               sscanf (cptr, "sample_rate -i %d", &(psf->sf.samplerate)) ;
-
-       if ((cptr = strstr (psf_header, "sample_count -i ")) != NULL)
-       {       sscanf (cptr, "sample_count -i %ld", &samples) ;
-               psf->sf.frames = samples ;
-               } ;
-
-       if ((cptr = strstr (psf_header, "sample_n_bytes -i ")) != NULL)
-               sscanf (cptr, "sample_n_bytes -i %d", &(psf->bytewidth)) ;
-
-       /* Default endian-ness (for 8 bit, u-law, A-law. */
-       psf->endian = (CPU_IS_BIG_ENDIAN) ? SF_ENDIAN_BIG : SF_ENDIAN_LITTLE ;
-
-       /* This is where we figure out endian-ness. */
-       if ((cptr = strstr (psf_header, "sample_byte_format -s"))
-               && sscanf (cptr, "sample_byte_format -s%u %8s", &bytes, str) == 2)
-       {
-               if (bytes != strlen (str))
-                       psf_log_printf (psf, "Weird sample_byte_format : strlen '%s' != %d\n", str, bytes) ;
-
-               if (bytes > 1)
-               {       if (psf->bytewidth == 0)
-                               psf->bytewidth = bytes ;
-                       else if (psf->bytewidth - bytes != 0)
-                       {       psf_log_printf (psf, "psf->bytewidth (%d) != bytes (%d)\n", psf->bytewidth, bytes) ;
-                               return SFE_NIST_BAD_ENCODING ;
-                               } ;
-
-                       if (strcmp (str, "01") == 0)
-                               psf->endian = SF_ENDIAN_LITTLE ;
-                       else if (strcmp (str, "10") == 0)
-                               psf->endian = SF_ENDIAN_BIG ;
-                       else
-                       {       psf_log_printf (psf, "Weird endian-ness : %s\n", str) ;
-                               return SFE_NIST_BAD_ENCODING ;
-                               } ;
-                       } ;
-
-               psf->sf.format |= psf->endian ;
-               } ;
-
-       if ((cptr = strstr (psf_header, "sample_sig_bits -i ")))
-               sscanf (cptr, "sample_sig_bits -i %d", &bitwidth) ;
-
-       if (strstr (psf_header, "channels_interleaved -s5 FALSE"))
-       {       psf_log_printf (psf, "Non-interleaved data unsupported.\n", str) ;
-               return SFE_NIST_BAD_ENCODING ;
-               } ;
-
-       psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-       psf->datalength = psf->filelength - psf->dataoffset ;
-
-       psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-       if (encoding == SF_FORMAT_PCM_U8)
-       {       switch (psf->bytewidth)
-               {       case 1 :
-                                       psf->sf.format |= SF_FORMAT_PCM_S8 ;
-                                       break ;
-
-                       case 2 :
-                                       psf->sf.format |= SF_FORMAT_PCM_16 ;
-                                       break ;
-
-                       case 3 :
-                                       psf->sf.format |= SF_FORMAT_PCM_24 ;
-                                       break ;
-
-                       case 4 :
-                                       psf->sf.format |= SF_FORMAT_PCM_32 ;
-                                       break ;
-
-                       default : break ;
-                       } ;
-               }
-       else if (encoding != 0)
-               psf->sf.format |= encoding ;
-       else
-               return SFE_UNIMPLEMENTED ;
-
-       /* Sanitize psf->sf.format. */
-       switch (SF_CODEC (psf->sf.format))
-       {       case SF_FORMAT_ULAW :
-               case SF_FORMAT_ALAW :
-               case SF_FORMAT_PCM_U8 :
-                       /* Blank out endian bits. */
-                       psf->sf.format = SF_FORMAT_NIST | SF_CODEC (psf->sf.format) ;
-                       break ;
-
-               default :
-                       break ;
-               } ;
-
-       return 0 ;
-} /* nist_read_header */
-
-static int
-nist_close     (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-               nist_write_header (psf, SF_TRUE) ;
-
-       return 0 ;
-} /* nist_close */
-
-/*=========================================================================
-*/
-
-static int
-nist_write_header (SF_PRIVATE *psf, int calc_length)
-{      const char      *end_str ;
-       long            samples ;
-       sf_count_t      current ;
-
-       current = psf_ftell (psf) ;
-
-       if (calc_length)
-       {       psf->filelength = psf_get_filelen (psf) ;
-
-               psf->datalength = psf->filelength - psf->dataoffset ;
-
-               if (psf->dataend)
-                       psf->datalength -= psf->filelength - psf->dataend ;
-
-               if (psf->bytewidth > 0)
-                       psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-               } ;
-
-       if (psf->endian == SF_ENDIAN_BIG)
-               end_str = "10" ;
-       else if (psf->endian == SF_ENDIAN_LITTLE)
-               end_str = "01" ;
-       else
-               end_str = "error" ;
-
-       /* Clear the whole header. */
-       memset (psf->header, 0, sizeof (psf->header)) ;
-       psf->headindex = 0 ;
-
-       psf_fseek (psf, 0, SEEK_SET) ;
-
-       psf_asciiheader_printf (psf, "NIST_1A\n   1024\n") ;
-       psf_asciiheader_printf (psf, "channel_count -i %d\n", psf->sf.channels) ;
-       psf_asciiheader_printf (psf, "sample_rate -i %d\n", psf->sf.samplerate) ;
-
-       switch (SF_CODEC (psf->sf.format))
-       {       case SF_FORMAT_PCM_S8 :
-                               psf_asciiheader_printf (psf, "sample_coding -s3 pcm\n") ;
-                               psf_asciiheader_printf (psf, "sample_n_bytes -i 1\n"
-                                                                                       "sample_sig_bits -i 8\n") ;
-                               break ;
-
-               case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_PCM_24 :
-               case SF_FORMAT_PCM_32 :
-                               psf_asciiheader_printf (psf, "sample_n_bytes -i %d\n", psf->bytewidth) ;
-                               psf_asciiheader_printf (psf, "sample_sig_bits -i %d\n", psf->bytewidth * 8) ;
-                               psf_asciiheader_printf (psf, "sample_coding -s3 pcm\n"
-                                                               "sample_byte_format -s%d %s\n", psf->bytewidth, end_str) ;
-                               break ;
-
-               case SF_FORMAT_ALAW :
-                               psf_asciiheader_printf (psf, "sample_coding -s4 alaw\n") ;
-                               psf_asciiheader_printf (psf, "sample_n_bytes -s1 1\n") ;
-                               break ;
-
-               case SF_FORMAT_ULAW :
-                               psf_asciiheader_printf (psf, "sample_coding -s4 ulaw\n") ;
-                               psf_asciiheader_printf (psf, "sample_n_bytes -s1 1\n") ;
-                               break ;
-
-               default : return SFE_UNIMPLEMENTED ;
-               } ;
-
-       psf->dataoffset = NIST_HEADER_LENGTH ;
-
-       /* Fix this */
-       samples = psf->sf.frames ;
-       psf_asciiheader_printf (psf, "sample_count -i %ld\n", samples) ;
-       psf_asciiheader_printf (psf, "end_head\n") ;
-
-       /* Zero fill to dataoffset. */
-       psf_binheader_writef (psf, "z", (size_t) (NIST_HEADER_LENGTH - psf->headindex)) ;
-
-       psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-       if (psf->error)
-               return psf->error ;
-
-       if (current > 0)
-               psf_fseek (psf, current, SEEK_SET) ;
-
-       return psf->error ;
-} /* nist_write_header */
-
diff --git a/libs/libsndfile/src/ogg.c b/libs/libsndfile/src/ogg.c
deleted file mode 100644 (file)
index 7bc4b31..0000000
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2007 John ffitch
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation ; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <string.h>
-#include <ctype.h>
-#include <time.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-#if HAVE_EXTERNAL_LIBS
-
-#include <ogg/ogg.h>
-
-#include "ogg.h"
-
-static int     ogg_close (SF_PRIVATE *psf) ;
-static int     ogg_stream_classify (SF_PRIVATE *psf, OGG_PRIVATE * odata) ;
-static int     ogg_page_classify (SF_PRIVATE * psf, const ogg_page * og) ;
-
-int
-ogg_open (SF_PRIVATE *psf)
-{      OGG_PRIVATE* odata = calloc (1, sizeof (OGG_PRIVATE)) ;
-       sf_count_t pos = psf_ftell (psf) ;
-       int     error = 0 ;
-
-       psf->container_data = odata ;
-       psf->container_close = ogg_close ;
-
-       if (psf->file.mode == SFM_RDWR)
-               return SFE_BAD_MODE_RW ;
-
-       if (psf->file.mode == SFM_READ)
-               if ((error = ogg_stream_classify (psf, odata)) != 0)
-                       return error ;
-
-       /* Reset everything to an initial state. */
-       ogg_sync_clear (&odata->osync) ;
-       ogg_stream_clear (&odata->ostream) ;
-       psf_fseek (psf, pos, SEEK_SET) ;
-
-       if (SF_ENDIAN (psf->sf.format) != 0)
-               return SFE_BAD_ENDIAN ;
-
-       switch (psf->sf.format)
-       {       case SF_FORMAT_OGG | SF_FORMAT_VORBIS :
-                       return ogg_vorbis_open (psf) ;
-
-               case SF_FORMAT_OGGFLAC :
-                       free (psf->container_data) ;
-                       psf->container_data = NULL ;
-                       psf->container_close = NULL ;
-                       return flac_open (psf) ;
-
-#if ENABLE_EXPERIMENTAL_CODE
-               case SF_FORMAT_OGG | SF_FORMAT_SPEEX :
-                       return ogg_speex_open (psf) ;
-
-               case SF_FORMAT_OGG | SF_FORMAT_PCM_16 :
-               case SF_FORMAT_OGG | SF_FORMAT_PCM_24 :
-                       return ogg_pcm_open (psf) ;
-#endif
-
-               default :
-                       break ;
-               } ;
-
-       psf_log_printf (psf, "%s : bad psf->sf.format 0x%x.\n", __func__, psf->sf.format) ;
-       return SFE_INTERNAL ;
-} /* ogg_open */
-
-
-static int
-ogg_close (SF_PRIVATE *psf)
-{      OGG_PRIVATE* odata = psf->container_data ;
-
-       ogg_sync_clear (&odata->osync) ;
-       ogg_stream_clear (&odata->ostream) ;
-
-       return 0 ;
-} /* ogg_close */
-
-static int
-ogg_stream_classify (SF_PRIVATE *psf, OGG_PRIVATE* odata)
-{      char *buffer ;
-       int     bytes, nn ;
-
-       /* Call this here so it only gets called once, so no memory is leaked. */
-       ogg_sync_init (&odata->osync) ;
-
-       odata->eos = 0 ;
-
-       /* Weird stuff happens if these aren't called. */
-       ogg_stream_reset (&odata->ostream) ;
-       ogg_sync_reset (&odata->osync) ;
-
-       /*
-       **      Grab some data at the head of the stream.  We want the first page
-       **      (which is guaranteed to be small and only contain the Vorbis
-       **      stream initial header) We need the first page to get the stream
-       **      serialno.
-       */
-
-       /* Expose the buffer */
-       buffer = ogg_sync_buffer (&odata->osync, 4096L) ;
-
-       /* Grab the part of the header that has already been read. */
-       memcpy (buffer, psf->header, psf->headindex) ;
-       bytes = psf->headindex ;
-
-       /* Submit a 4k block to libvorbis' Ogg layer */
-       bytes += psf_fread (buffer + psf->headindex, 1, 4096 - psf->headindex, psf) ;
-       ogg_sync_wrote (&odata->osync, bytes) ;
-
-       /* Get the first page. */
-       if ((nn = ogg_sync_pageout (&odata->osync, &odata->opage)) != 1)
-       {
-               /* Have we simply run out of data?  If so, we're done. */
-               if (bytes < 4096)
-                       return 0 ;
-
-               /* Error case.  Must not be Vorbis data */
-               psf_log_printf (psf, "Input does not appear to be an Ogg bitstream.\n") ;
-               return SFE_MALFORMED_FILE ;
-               } ;
-
-       /*
-       **      Get the serial number and set up the rest of decode.
-       **      Serialno first ; use it to set up a logical stream.
-       */
-       ogg_stream_clear (&odata->ostream) ;
-       ogg_stream_init (&odata->ostream, ogg_page_serialno (&odata->opage)) ;
-
-       if (ogg_stream_pagein (&odata->ostream, &odata->opage) < 0)
-       {       /* Error ; stream version mismatch perhaps. */
-               psf_log_printf (psf, "Error reading first page of Ogg bitstream data\n") ;
-               return SFE_MALFORMED_FILE ;
-               } ;
-
-       if (ogg_stream_packetout (&odata->ostream, &odata->opacket) != 1)
-       {       /* No page? must not be vorbis. */
-               psf_log_printf (psf, "Error reading initial header packet.\n") ;
-               return SFE_MALFORMED_FILE ;
-               } ;
-
-       odata->codec = ogg_page_classify (psf, &odata->opage) ;
-
-       switch (odata->codec)
-       {       case OGG_VORBIS :
-                       psf->sf.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS ;
-                       return 0 ;
-
-               case OGG_FLAC :
-               case OGG_FLAC0 :
-                       psf->sf.format = SF_FORMAT_OGGFLAC ;
-                       return 0 ;
-
-               case OGG_SPEEX :
-                       psf->sf.format = SF_FORMAT_OGG | SF_FORMAT_SPEEX ;
-                       return 0 ;
-
-               case OGG_PCM :
-                       psf_log_printf (psf, "Detected Ogg/PCM data. This is not supported yet.\n") ;
-                       return SFE_UNIMPLEMENTED ;
-
-               default :
-                       break ;
-               } ;
-
-       psf_log_printf (psf, "This Ogg bitstream contains some uknown data type.\n") ;
-       return SFE_UNIMPLEMENTED ;
-} /* ogg_stream_classify */
-
-/*==============================================================================
-*/
-
-static struct
-{      const char *str, *name ;
-       int len, codec ;
-} codec_lookup [] =
-{      {       "Annodex",              "Annodex",      8, OGG_ANNODEX },
-       {       "AnxData",              "AnxData",      7, OGG_ANXDATA },
-       {       "\177FLAC",             "Flac1",        5, OGG_FLAC },
-       {       "fLaC",                 "Flac0",        4, OGG_FLAC0 },
-       {       "PCM     ",             "PCM",          8, OGG_PCM },
-       {       "Speex",                "Speex",        5, OGG_SPEEX },
-       {       "\001vorbis",   "Vorbis",       7, OGG_VORBIS },
-} ;
-
-static int
-ogg_page_classify (SF_PRIVATE * psf, const ogg_page * og)
-{      int k, len ;
-
-       for (k = 0 ; k < ARRAY_LEN (codec_lookup) ; k++)
-       {       if (codec_lookup [k].len > og->body_len)
-                       continue ;
-
-               if (memcmp (og->body, codec_lookup [k].str, codec_lookup [k].len) == 0)
-               {       psf_log_printf (psf, "Ogg stream data : %s\n", codec_lookup [k].name) ;
-                       psf_log_printf (psf, "Stream serialno : %u\n", (uint32_t) ogg_page_serialno (og)) ;
-                       return codec_lookup [k].codec ;
-                       } ;
-               } ;
-
-       len = og->body_len < 8 ? og->body_len : 8 ;
-
-       psf_log_printf (psf, "Ogg_stream data : '") ;
-       for (k = 0 ; k < len ; k++)
-               psf_log_printf (psf, "%c", isprint (og->body [k]) ? og->body [k] : '.') ;
-       psf_log_printf (psf, "'     ") ;
-       for (k = 0 ; k < len ; k++)
-               psf_log_printf (psf, " %02x", og->body [k] & 0xff) ;
-       psf_log_printf (psf, "\n") ;
-
-       return 0 ;
-} /* ogg_page_classify */
-
-#else /* HAVE_EXTERNAL_LIBS */
-
-int
-ogg_open       (SF_PRIVATE *psf)
-{
-       psf_log_printf (psf, "This version of libsndfile was compiled without Ogg/Vorbis support.\n") ;
-       return SFE_UNIMPLEMENTED ;
-} /* ogg_open */
-
-#endif
diff --git a/libs/libsndfile/src/ogg.h b/libs/libsndfile/src/ogg.h
deleted file mode 100644 (file)
index 88544bb..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-** Copyright (C) 2008-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation ; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef SF_SRC_OGG_H
-
-enum
-{      OGG_ANNODEX = 300,
-       OGG_ANXDATA,
-       OGG_FLAC,
-       OGG_FLAC0,
-       OGG_PCM,
-       OGG_SPEEX,
-       OGG_VORBIS,
-} ;
-
-typedef struct
-{      /* Sync and verify incoming physical bitstream */
-       ogg_sync_state osync ;
-       /* Take physical pages, weld into a logical stream of packets */
-       ogg_stream_state ostream ;
-       /* One Ogg bitstream page.  Vorbis packets are inside */
-       ogg_page opage ;
-       /* One raw packet of data for decode */
-       ogg_packet opacket ;
-       int eos ;
-       int codec ;
-} OGG_PRIVATE ;
-
-
-#define readint(buf, base) (((buf [base + 3] << 24) & 0xff000000) | \
-                                                               ((buf [base + 2] <<16) & 0xff0000) | \
-                                                               ((buf [base + 1] << 8) & 0xff00) | \
-                                                               (buf [base] & 0xff))
-
-
-
-#endif /* SF_SRC_OGG_H */
diff --git a/libs/libsndfile/src/ogg_opus.c b/libs/libsndfile/src/ogg_opus.c
deleted file mode 100644 (file)
index 0824810..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
-** Copyright (C) 2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation ; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <string.h>
-#include <ctype.h>
-#include <time.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-#if (ENABLE_EXPERIMENTAL_CODE && HAVE_EXTERNAL_LIBS)
-
-#include <ogg/ogg.h>
-
-#include "ogg.h"
-
-typedef struct
-{      int32_t serialno ;
-
-
-       void * state ;
-} OPUS_PRIVATE ;
-
-static int     ogg_opus_read_header (SF_PRIVATE * psf) ;
-static int     ogg_opus_close (SF_PRIVATE *psf) ;
-
-int
-ogg_opus_open (SF_PRIVATE *psf)
-{      OGG_PRIVATE* odata = psf->container_data ;
-       OPUS_PRIVATE* oopus = calloc (1, sizeof (OPUS_PRIVATE)) ;
-       int     error = 0 ;
-
-       if (odata == NULL)
-       {       psf_log_printf (psf, "%s : odata is NULL???\n", __func__) ;
-               return SFE_INTERNAL ;
-               } ;
-
-       psf->codec_data = oopus ;
-       if (oopus == NULL)
-               return SFE_MALLOC_FAILED ;
-
-       if (psf->file.mode == SFM_RDWR)
-               return SFE_BAD_MODE_RW ;
-
-       if (psf->file.mode == SFM_READ)
-       {       /* Call this here so it only gets called once, so no memory is leaked. */
-               ogg_sync_init (&odata->osync) ;
-
-               if ((error = ogg_opus_read_header (psf)))
-                       return error ;
-
-#if 0
-               psf->read_short         = ogg_opus_read_s ;
-               psf->read_int           = ogg_opus_read_i ;
-               psf->read_float         = ogg_opus_read_f ;
-               psf->read_double        = ogg_opus_read_d ;
-               psf->sf.frames          = ogg_opus_length (psf) ;
-#endif
-               } ;
-
-       psf->codec_close = ogg_opus_close ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {
-#if 0
-               /* Set the default oopus quality here. */
-               vdata->quality = 0.4 ;
-
-               psf->write_header       = ogg_opus_write_header ;
-               psf->write_short        = ogg_opus_write_s ;
-               psf->write_int          = ogg_opus_write_i ;
-               psf->write_float        = ogg_opus_write_f ;
-               psf->write_double       = ogg_opus_write_d ;
-#endif
-
-               psf->sf.frames = SF_COUNT_MAX ; /* Unknown really */
-               psf->strings.flags = SF_STR_ALLOW_START ;
-               } ;
-
-       psf->bytewidth = 1 ;
-       psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-#if 0
-       psf->seek = ogg_opus_seek ;
-       psf->command = ogg_opus_command ;
-#endif
-
-       /* FIXME, FIXME, FIXME : Hack these here for now and correct later. */
-       psf->sf.format = SF_FORMAT_OGG | SF_FORMAT_SPEEX ;
-       psf->sf.sections = 1 ;
-
-       psf->datalength = 1 ;
-       psf->dataoffset = 0 ;
-       /* End FIXME. */
-
-       return error ;
-} /* ogg_opus_open */
-
-static int
-ogg_opus_read_header (SF_PRIVATE * UNUSED (psf))
-{
-       return 0 ;
-} /* ogg_opus_read_header */
-
-static int
-ogg_opus_close (SF_PRIVATE * UNUSED (psf))
-{
-
-
-       return 0 ;
-} /* ogg_opus_close */
-
-
-#else /* ENABLE_EXPERIMENTAL_CODE && HAVE_EXTERNAL_LIBS */
-
-int
-ogg_opus_open (SF_PRIVATE *psf)
-{
-       psf_log_printf (psf, "This version of libsndfile was compiled without Ogg/Opus support.\n") ;
-       return SFE_UNIMPLEMENTED ;
-} /* ogg_opus_open */
-
-#endif
diff --git a/libs/libsndfile/src/ogg_pcm.c b/libs/libsndfile/src/ogg_pcm.c
deleted file mode 100644 (file)
index 2e3b7f2..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
-** Copyright (C) 2008-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation ; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <string.h>
-#include <ctype.h>
-#include <time.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-#if (ENABLE_EXPERIMENTAL_CODE && HAVE_EXTERNAL_LIBS)
-
-#include <ogg/ogg.h>
-
-#include "ogg.h"
-
-typedef struct
-{      int32_t serialno ;
-
-
-       void * state ;
-} OPCM_PRIVATE ;
-
-static int     opcm_read_header (SF_PRIVATE * psf) ;
-static int     opcm_close (SF_PRIVATE *psf) ;
-
-int
-ogg_pcm_open (SF_PRIVATE *psf)
-{      OGG_PRIVATE* odata = psf->container_data ;
-       OPCM_PRIVATE* opcm = calloc (1, sizeof (OPCM_PRIVATE)) ;
-       int     error = 0 ;
-
-       if (odata == NULL)
-       {       psf_log_printf (psf, "%s : odata is NULL???\n", __func__) ;
-               return SFE_INTERNAL ;
-               } ;
-
-       psf->codec_data = opcm ;
-       if (opcm == NULL)
-               return SFE_MALLOC_FAILED ;
-
-       if (psf->file.mode == SFM_RDWR)
-               return SFE_BAD_MODE_RW ;
-
-       if (psf->file.mode == SFM_READ)
-       {       /* Call this here so it only gets called once, so no memory is leaked. */
-               ogg_sync_init (&odata->osync) ;
-
-               if ((error = opcm_read_header (psf)))
-                       return error ;
-
-#if 0
-               psf->read_short         = opcm_read_s ;
-               psf->read_int           = opcm_read_i ;
-               psf->read_float         = opcm_read_f ;
-               psf->read_double        = opcm_read_d ;
-               psf->sf.frames          = opcm_length (psf) ;
-#endif
-               } ;
-
-       psf->codec_close = opcm_close ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {
-#if 0
-               /* Set the default opcm quality here. */
-               vdata->quality = 0.4 ;
-
-               psf->write_header       = opcm_write_header ;
-               psf->write_short        = opcm_write_s ;
-               psf->write_int          = opcm_write_i ;
-               psf->write_float        = opcm_write_f ;
-               psf->write_double       = opcm_write_d ;
-#endif
-
-               psf->sf.frames = SF_COUNT_MAX ; /* Unknown really */
-               psf->strings.flags = SF_STR_ALLOW_START ;
-               } ;
-
-       psf->bytewidth = 1 ;
-       psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-#if 0
-       psf->seek = opcm_seek ;
-       psf->command = opcm_command ;
-#endif
-
-       /* FIXME, FIXME, FIXME : Hack these here for now and correct later. */
-       psf->sf.format = SF_FORMAT_OGG | SF_FORMAT_SPEEX ;
-       psf->sf.sections = 1 ;
-
-       psf->datalength = 1 ;
-       psf->dataoffset = 0 ;
-       /* End FIXME. */
-
-       return error ;
-} /* ogg_pcm_open */
-
-static int
-opcm_read_header (SF_PRIVATE * UNUSED (psf))
-{
-       return 0 ;
-} /* opcm_read_header */
-
-static int
-opcm_close (SF_PRIVATE * UNUSED (psf))
-{
-
-
-       return 0 ;
-} /* opcm_close */
-
-
-
-/*
-encoded_speex_frames = (frames_per_packet * Packets)
-                     = 1 * 272
-                     = 272
-
-audio_samples = encoded_speex_frames * frame_size
-              = 272 * 640
-              = 174080
-
-duration = audio_samples / rate
-         = 174080 / 44100
-         = 3.947
-*/
-
-#else /* ENABLE_EXPERIMENTAL_CODE && HAVE_EXTERNAL_LIBS */
-
-int
-ogg_pcm_open (SF_PRIVATE *psf)
-{
-       psf_log_printf (psf, "This version of libsndfile was compiled without Ogg/Speex support.\n") ;
-       return SFE_UNIMPLEMENTED ;
-} /* ogg_pcm_open */
-
-#endif
diff --git a/libs/libsndfile/src/ogg_speex.c b/libs/libsndfile/src/ogg_speex.c
deleted file mode 100644 (file)
index f24e242..0000000
+++ /dev/null
@@ -1,425 +0,0 @@
-/*
-** Copyright (C) 2008-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation ; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <string.h>
-#include <ctype.h>
-#include <time.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-#if (ENABLE_EXPERIMENTAL_CODE && HAVE_EXTERNAL_LIBS)
-
-#include <ogg/ogg.h>
-
-#include <speex/speex.h>
-#include <speex/speex_stereo.h>
-#include <speex/speex_header.h>
-#include <speex/speex_callbacks.h>
-
-#include "ogg.h"
-
-#define        OGG_SPX_READ_SIZE       200
-
-typedef struct
-{      SpeexBits bits ;
-
-       int32_t serialno ;
-
-       int frame_size, granule_frame_size, nframes ;
-       int force_mode ;
-
-       SpeexStereoState stereo ;
-       SpeexHeader header ;
-
-       void * state ;
-} SPX_PRIVATE ;
-
-static int     spx_read_header (SF_PRIVATE * psf) ;
-static int     spx_close (SF_PRIVATE *psf) ;
-static void *spx_header_read (SF_PRIVATE * psf, ogg_packet *op, spx_int32_t enh_enabled, int force_mode) ;
-static void spx_print_comments (const char *comments, int length) ;
-
-int
-ogg_speex_open (SF_PRIVATE *psf)
-{      OGG_PRIVATE* odata = psf->container_data ;
-       SPX_PRIVATE* spx = calloc (1, sizeof (SPX_PRIVATE)) ;
-       int     error = 0 ;
-
-       if (odata == NULL)
-       {       psf_log_printf (psf, "%s : odata is NULL???\n", __func__) ;
-               return SFE_INTERNAL ;
-               } ;
-
-       psf->codec_data = spx ;
-       if (spx == NULL)
-               return SFE_MALLOC_FAILED ;
-
-       if (psf->file.mode == SFM_RDWR)
-               return SFE_BAD_MODE_RW ;
-
-       if (psf->file.mode == SFM_READ)
-       {       /* Call this here so it only gets called once, so no memory is leaked. */
-               ogg_sync_init (&odata->osync) ;
-
-               if ((error = spx_read_header (psf)))
-                       return error ;
-
-#if 0
-               psf->read_short         = spx_read_s ;
-               psf->read_int           = spx_read_i ;
-               psf->read_float         = spx_read_f ;
-               psf->read_double        = spx_read_d ;
-               psf->sf.frames          = spx_length (psf) ;
-#endif
-               } ;
-
-       psf->codec_close = spx_close ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {
-#if 0
-               /* Set the default spx quality here. */
-               vdata->quality = 0.4 ;
-
-               psf->write_header       = spx_write_header ;
-               psf->write_short        = spx_write_s ;
-               psf->write_int          = spx_write_i ;
-               psf->write_float        = spx_write_f ;
-               psf->write_double       = spx_write_d ;
-#endif
-
-               psf->sf.frames = SF_COUNT_MAX ; /* Unknown really */
-               psf->strings.flags = SF_STR_ALLOW_START ;
-               } ;
-
-       psf->bytewidth = 1 ;
-       psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-#if 0
-       psf->seek = spx_seek ;
-       psf->command = spx_command ;
-#endif
-
-       /* FIXME, FIXME, FIXME : Hack these here for now and correct later. */
-       psf->sf.format = SF_FORMAT_OGG | SF_FORMAT_SPEEX ;
-       psf->sf.sections = 1 ;
-
-       psf->datalength = 1 ;
-       psf->dataoffset = 0 ;
-       /* End FIXME. */
-
-       return error ;
-} /* ogg_speex_open */
-
-#define le_short (x)   (x)
-
-static int
-spx_read_header (SF_PRIVATE * psf)
-{      static SpeexStereoState STEREO_INIT = SPEEX_STEREO_STATE_INIT ;
-
-       OGG_PRIVATE* odata = psf->container_data ;
-       SPX_PRIVATE* spx = psf->codec_data ;
-
-       ogg_int64_t page_granule = 0 ;
-       int stream_init = 0 ;
-       int     page_nb_packets = 0 ;
-       int packet_count = 0 ;
-       int enh_enabled = 1 ;
-       int force_mode = -1 ;
-       char * data ;
-       int nb_read ;
-       int lookahead ;
-
-printf ("%s %d\n", __func__, __LINE__) ;
-
-       psf_log_printf (psf, "Speex header\n") ;
-       odata->eos = 0 ;
-
-       /* Reset ogg stuff which has already been used in src/ogg.c. */
-       ogg_stream_reset (&odata->ostream) ;
-       ogg_sync_reset (&odata->osync) ;
-
-       /* Seek to start of stream. */
-       psf_fseek (psf, 0, SEEK_SET) ;
-
-       /* Initialize. */
-       ogg_sync_init (&odata->osync) ;
-       speex_bits_init (&spx->bits) ;
-
-       /* Set defaults. */
-       psf->sf.channels = -1 ;
-       psf->sf.samplerate = 0 ;
-       spx->stereo = STEREO_INIT ;
-
-       /* Get a pointer to the ogg buffer and read data into it. */
-       data = ogg_sync_buffer (&odata->osync, OGG_SPX_READ_SIZE) ;
-       nb_read = psf_fread (data, 1, OGG_SPX_READ_SIZE, psf) ;
-       ogg_sync_wrote (&odata->osync, nb_read) ;
-
-       /* Now we chew on Ogg packets. */
-       while (ogg_sync_pageout (&odata->osync, &odata->opage) == 1)
-       {       if (stream_init == 0)
-               {       ogg_stream_init (&odata->ostream, ogg_page_serialno (&odata->opage)) ;
-                       stream_init = 1 ;
-                       } ;
-
-               if (ogg_page_serialno (&odata->opage) != odata->ostream.serialno)
-               {       /* so all streams are read. */
-                       ogg_stream_reset_serialno (&odata->ostream, ogg_page_serialno (&odata->opage)) ;
-                       } ;
-
-               /*Add page to the bitstream*/
-               ogg_stream_pagein (&odata->ostream, &odata->opage) ;
-               page_granule = ogg_page_granulepos (&odata->opage) ;
-               page_nb_packets = ogg_page_packets (&odata->opage) ;
-
-               /*Extract all available packets*/
-               while (odata->eos == 0 && ogg_stream_packetout (&odata->ostream, &odata->opacket) == 1)
-               {       if (odata->opacket.bytes >= 8 && memcmp (odata->opacket.packet, "Speex   ", 8) == 0)
-                       {       spx->serialno = odata->ostream.serialno ;
-                               } ;
-
-                       if (spx->serialno == -1 || odata->ostream.serialno != spx->serialno)
-                               break ;
-
-                       if (packet_count == 0)
-                       {       spx->state = spx_header_read (psf, &odata->opacket, enh_enabled, force_mode) ;
-                               if (! spx->state)
-                                       break ;
-
-                               speex_decoder_ctl (spx->state, SPEEX_GET_LOOKAHEAD, &lookahead) ;
-                               if (spx->nframes == 0)
-                                       spx->nframes = 1 ;
-                               }
-                       else if (packet_count == 1)
-                       {       spx_print_comments ((const char*) odata->opacket.packet, odata->opacket.bytes) ;
-                               }
-                       else if (packet_count < 2 + spx->header.extra_headers)
-                       {       /* Ignore extra headers */
-                               }
-                       packet_count ++ ;
-                       } ;
-               } ;
-
-       psf_log_printf (psf, "End\n") ;
-
-       psf_log_printf (psf, "packet_count %d\n", packet_count) ;
-       psf_log_printf (psf, "page_nb_packets %d\n", page_nb_packets) ;
-       psf_log_printf (psf, "page_granule %lld\n", page_granule) ;
-
-       return 0 ;
-} /* spx_read_header */
-
-static int
-spx_close (SF_PRIVATE *psf)
-{      SPX_PRIVATE* spx = psf->codec_data ;
-
-       if (spx->state)
-               speex_decoder_destroy (spx->state) ;
-
-       if (spx)
-               speex_bits_destroy (&spx->bits) ;
-
-       return 0 ;
-} /* spx_close */
-
-
-
-static void *
-spx_header_read (SF_PRIVATE * psf, ogg_packet *op, spx_int32_t enh_enabled, int force_mode)
-{      SPX_PRIVATE* spx = psf->codec_data ;
-       void *st ;
-       const SpeexMode *mode ;
-       SpeexHeader *tmp_header ;
-       int modeID ;
-       SpeexCallback callback ;
-
-       tmp_header = speex_packet_to_header ((char*) op->packet, op->bytes) ;
-       if (tmp_header == NULL)
-       {       psf_log_printf (psf, "Cannot read Speex header\n") ;
-               return NULL ;
-               } ;
-
-       memcpy (&spx->header, tmp_header, sizeof (spx->header)) ;
-       free (tmp_header) ;
-       tmp_header = NULL ;
-
-       if (spx->header.mode >= SPEEX_NB_MODES || spx->header.mode < 0)
-       {       psf_log_printf (psf, "Mode number %d does not (yet/any longer) exist in this version\n", spx->header.mode) ;
-               return NULL ;
-               } ;
-
-       modeID = spx->header.mode ;
-       if (force_mode != -1)
-               modeID = force_mode ;
-
-       mode = speex_lib_get_mode (modeID) ;
-
-       if (spx->header.speex_version_id > 1)
-       {       psf_log_printf (psf, "This file was encoded with Speex bit-stream version %d, which I don't know how to decode\n", spx->header.speex_version_id) ;
-               return NULL ;
-               } ;
-
-       if (mode->bitstream_version < spx->header.mode_bitstream_version)
-       {       psf_log_printf (psf, "The file was encoded with a newer version of Speex. You need to upgrade in order to play it.\n") ;
-               return NULL ;
-               } ;
-
-       if (mode->bitstream_version > spx->header.mode_bitstream_version)
-       {       psf_log_printf (psf, "The file was encoded with an older version of Speex. You would need to downgrade the version in order to play it.\n") ;
-               return NULL ;
-               } ;
-
-       st = speex_decoder_init (mode) ;
-       if (!st)
-       {       psf_log_printf (psf, "Decoder initialization failed.\n") ;
-               return NULL ;
-               } ;
-
-       speex_decoder_ctl (st, SPEEX_SET_ENH, &enh_enabled) ;
-       speex_decoder_ctl (st, SPEEX_GET_FRAME_SIZE, &spx->frame_size) ;
-       spx->granule_frame_size = spx->frame_size ;
-
-       if (!psf->sf.samplerate)
-               psf->sf.samplerate = spx->header.rate ;
-       /* Adjust rate if --force-* options are used */
-       if (force_mode != -1)
-       {       if (spx->header.mode < force_mode)
-               {       psf->sf.samplerate <<= (force_mode - spx->header.mode) ;
-                       spx->granule_frame_size >>= (force_mode - spx->header.mode) ;
-                       } ;
-               if (spx->header.mode > force_mode)
-               {       psf->sf.samplerate >>= (spx->header.mode - force_mode) ;
-                       spx->granule_frame_size <<= (spx->header.mode - force_mode) ;
-                       } ;
-               } ;
-
-       speex_decoder_ctl (st, SPEEX_SET_SAMPLING_RATE, &psf->sf.samplerate) ;
-
-       spx->nframes = spx->header.frames_per_packet ;
-
-       if (psf->sf.channels == -1)
-               psf->sf.channels = spx->header.nb_channels ;
-
-       if (! (psf->sf.channels == 1))
-       {       psf->sf.channels = 2 ;
-               callback.callback_id = SPEEX_INBAND_STEREO ;
-               callback.func = speex_std_stereo_request_handler ;
-               callback.data = &spx->stereo ;
-               speex_decoder_ctl (st, SPEEX_SET_HANDLER, &callback) ;
-               } ;
-
-       spx->header.speex_version [sizeof (spx->header.speex_version) - 1] = 0 ;
-
-       psf_log_printf (psf, "  Encoder ver   : %s\n  Frames/packet : %d\n",
-                                       spx->header.speex_version, spx->header.frames_per_packet) ;
-
-       if (spx->header.bitrate > 0)
-               psf_log_printf (psf, "  Bit rate          : %d\n", spx->header.bitrate) ;
-
-       psf_log_printf (psf, "  Sample rate   : %d\n  Mode                : %s\n  VBR              : %s\n  Channels       : %d\n",
-                                       psf->sf.samplerate, mode->modeName, (spx->header.vbr ? "yes" : "no"), psf->sf.channels) ;
-
-       psf_log_printf (psf, "  Extra headers : %d\n", spx->header.extra_headers) ;
-
-       return st ;
-} /* spx_header_read */
-
-
-static void
-spx_print_comments (const char *c, int length)
-{
-       const char *end ;
-       int len, i, nb_fields ;
-
-printf ("%s %d\n", __func__, __LINE__) ;
-       if (length < 8)
-       {       fprintf (stderr, "Invalid/corrupted comments\n") ;
-               return ;
-               }
-       end = c + length ;
-       len = readint (c, 0) ;
-       c += 4 ;
-       if (len < 0 || c + len > end)
-       {       fprintf (stderr, "Invalid/corrupted comments\n") ;
-               return ;
-               }
-       (void) fwrite (c, 1, len, stderr) ;
-       c += len ;
-       fprintf (stderr, "\n") ;
-       if (c + 4 > end)
-       {       fprintf (stderr, "Invalid/corrupted comments\n") ;
-               return ;
-               }
-       nb_fields = readint (c, 0) ;
-       c += 4 ;
-       for (i = 0 ; i < nb_fields ; i++)
-       {       if (c + 4 > end)
-               {       fprintf (stderr, "Invalid/corrupted comments\n") ;
-                       return ;
-                       } ;
-               len = readint (c, 0) ;
-               c += 4 ;
-               if (len < 0 || c + len > end)
-               {       fprintf (stderr, "Invalid/corrupted comments\n") ;
-                       return ;
-                       }
-               (void) fwrite (c, 1, len, stderr) ;
-               c += len ;
-               fprintf (stderr, "\n") ;
-               } ;
-       return ;
-} /* spx_print_comments */
-
-
-/*
-encoded_speex_frames = (frames_per_packet * Packets)
-                                        = 1 * 272
-                                        = 272
-
-audio_samples = encoded_speex_frames * frame_size
-                         = 272 * 640
-                         = 174080
-
-duration = audio_samples / rate
-                = 174080 / 44100
-                = 3.947
-*/
-
-#else /* ENABLE_EXPERIMENTAL_CODE && HAVE_EXTERNAL_LIBS */
-
-int
-ogg_speex_open (SF_PRIVATE *psf)
-{
-       psf_log_printf (psf, "This version of libsndfile was compiled without Ogg/Speex support.\n") ;
-       return SFE_UNIMPLEMENTED ;
-} /* ogg_speex_open */
-
-#endif
diff --git a/libs/libsndfile/src/ogg_vorbis.c b/libs/libsndfile/src/ogg_vorbis.c
deleted file mode 100644 (file)
index 4d1adef..0000000
+++ /dev/null
@@ -1,1172 +0,0 @@
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2002-2005 Michael Smith <msmith@xiph.org>
-** Copyright (C) 2007 John ffitch
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation ; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**  Much of this code is based on the examples in libvorbis from the
-** XIPHOPHORUS Company http://www.xiph.org/ which has a BSD-style Licence
-** Copyright (c) 2002, Xiph.org Foundation
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions
-** are met:
-**
-** - Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-**
-** - Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in the
-** documentation and/or other materials provided with the distribution.
-**
-** - Neither the name of the Xiph.org Foundation nor the names of its
-** contributors may be used to endorse or promote products derived from
-** this software without specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION
-** OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE,
-** DATA, OR PROFITS ; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <fcntl.h>
-#include <string.h>
-#include <ctype.h>
-#include <time.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-#if HAVE_EXTERNAL_LIBS
-
-#include <ogg/ogg.h>
-#include <vorbis/codec.h>
-#include <vorbis/vorbisenc.h>
-
-#include "ogg.h"
-
-typedef int convert_func (SF_PRIVATE *psf, int, void *, int, int, float **) ;
-
-static int     vorbis_read_header (SF_PRIVATE *psf, int log_data) ;
-static int     vorbis_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int     vorbis_close (SF_PRIVATE *psf) ;
-static int     vorbis_command (SF_PRIVATE *psf, int command, void *data, int datasize) ;
-static int     vorbis_byterate (SF_PRIVATE *psf) ;
-static sf_count_t      vorbis_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-static sf_count_t      vorbis_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t      vorbis_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t      vorbis_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t      vorbis_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static sf_count_t      vorbis_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t      vorbis_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t      vorbis_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t      vorbis_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-static sf_count_t      vorbis_read_sample (SF_PRIVATE *psf, void *ptr, sf_count_t lens, convert_func *transfn) ;
-static sf_count_t      vorbis_length (SF_PRIVATE *psf) ;
-
-typedef struct
-{      int id ;
-       const char *name ;
-} STR_PAIRS ;
-
-static STR_PAIRS vorbis_metatypes [] =
-{      {       SF_STR_TITLE,           "Title" },
-       {       SF_STR_COPYRIGHT,       "Copyright" },
-       {       SF_STR_SOFTWARE,        "Software" },
-       {       SF_STR_ARTIST,          "Artist" },
-       {       SF_STR_COMMENT,         "Comment" },
-       {       SF_STR_DATE,            "Date" },
-       {       SF_STR_ALBUM,           "Album" },
-       {       SF_STR_LICENSE,         "License" },
-} ;
-
-typedef struct
-{      /* Count current location */
-       sf_count_t loc ;
-       /* Struct that stores all the static vorbis bitstream settings */
-       vorbis_info     vinfo ;
-       /* Struct that stores all the bitstream user comments */
-       vorbis_comment vcomment ;
-       /* Ventral working state for the packet->PCM decoder */
-       vorbis_dsp_state vdsp ;
-       /* Local working space for packet->PCM decode */
-       vorbis_block vblock ;
-
-       /* Encoding quality in range [0.0, 1.0]. */
-       double quality ;
-} VORBIS_PRIVATE ;
-
-static int
-vorbis_read_header (SF_PRIVATE *psf, int log_data)
-{
-       OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
-       VORBIS_PRIVATE *vdata = (VORBIS_PRIVATE *) psf->codec_data ;
-       char *buffer ;
-       int     bytes ;
-       int i, nn ;
-
-       odata->eos = 0 ;
-
-       /* Weird stuff happens if these aren't called. */
-       ogg_stream_reset (&odata->ostream) ;
-       ogg_sync_reset (&odata->osync) ;
-
-       /*
-       **      Grab some data at the head of the stream.  We want the first page
-       **      (which is guaranteed to be small and only contain the Vorbis
-       **      stream initial header) We need the first page to get the stream
-       **      serialno.
-       */
-
-       /* Expose the buffer */
-       buffer = ogg_sync_buffer (&odata->osync, 4096L) ;
-
-       /* Grab the part of the header that has already been read. */
-       memcpy (buffer, psf->header, psf->headindex) ;
-       bytes = psf->headindex ;
-
-       /* Submit a 4k block to libvorbis' Ogg layer */
-       bytes += psf_fread (buffer + psf->headindex, 1, 4096 - psf->headindex, psf) ;
-       ogg_sync_wrote (&odata->osync, bytes) ;
-
-       /* Get the first page. */
-       if ((nn = ogg_sync_pageout (&odata->osync, &odata->opage)) != 1)
-       {
-               /* Have we simply run out of data?  If so, we're done. */
-               if (bytes < 4096)
-                       return 0 ;
-
-               /* Error case.  Must not be Vorbis data */
-               psf_log_printf (psf, "Input does not appear to be an Ogg bitstream.\n") ;
-               return SFE_MALFORMED_FILE ;
-               } ;
-
-       /*
-       **      Get the serial number and set up the rest of decode.
-       **      Serialno first ; use it to set up a logical stream.
-       */
-       ogg_stream_clear (&odata->ostream) ;
-       ogg_stream_init (&odata->ostream, ogg_page_serialno (&odata->opage)) ;
-
-       if (ogg_stream_pagein (&odata->ostream, &odata->opage) < 0)
-       {       /* Error ; stream version mismatch perhaps. */
-               psf_log_printf (psf, "Error reading first page of Ogg bitstream data\n") ;
-               return SFE_MALFORMED_FILE ;
-               } ;
-
-       if (ogg_stream_packetout (&odata->ostream, &odata->opacket) != 1)
-       {       /* No page? must not be vorbis. */
-               psf_log_printf (psf, "Error reading initial header packet.\n") ;
-               return SFE_MALFORMED_FILE ;
-               } ;
-
-       /*
-       **      This function (vorbis_read_header) gets called multiple times, so the OGG
-       **      and vorbis structs have to be cleared every time we pass through to
-       **      prevent memory leaks.
-       */
-       vorbis_block_clear (&vdata->vblock) ;
-       vorbis_dsp_clear (&vdata->vdsp) ;
-       vorbis_comment_clear (&vdata->vcomment) ;
-       vorbis_info_clear (&vdata->vinfo) ;
-
-       /*
-       **      Extract the initial header from the first page and verify that the
-       **      Ogg bitstream is in fact Vorbis data.
-       **
-       **      I handle the initial header first instead of just having the code
-       **      read all three Vorbis headers at once because reading the initial
-       **      header is an easy way to identify a Vorbis bitstream and it's
-       **      useful to see that functionality seperated out.
-       */
-       vorbis_info_init (&vdata->vinfo) ;
-       vorbis_comment_init (&vdata->vcomment) ;
-
-       if (vorbis_synthesis_headerin (&vdata->vinfo, &vdata->vcomment, &odata->opacket) < 0)
-       {       /* Error case ; not a vorbis header. */
-               psf_log_printf (psf, "Found Vorbis in stream header, but vorbis_synthesis_headerin failed.\n") ;
-               return SFE_MALFORMED_FILE ;
-               } ;
-
-       /*
-       **      Common Ogg metadata fields?
-       **      TITLE, VERSION, ALBUM, TRACKNUMBER, ARTIST, PERFORMER, COPYRIGHT, LICENSE,
-       **      ORGANIZATION, DESCRIPTION, GENRE, DATE, LOCATION, CONTACT, ISRC,
-       */
-
-       if (log_data)
-       {       int k ;
-
-               for (k = 0 ; k < ARRAY_LEN (vorbis_metatypes) ; k++)
-               {       char *dd ;
-
-                       dd = vorbis_comment_query (&vdata->vcomment, vorbis_metatypes [k].name, 0) ;
-                       if (dd == NULL)
-                               continue ;
-                       psf_store_string (psf, vorbis_metatypes [k].id, dd) ;
-                       } ;
-               } ;
-
-       /*
-       **      At this point, we're sure we're Vorbis. We've set up the logical (Ogg)
-       **      bitstream decoder. Get the comment and codebook headers and set up the
-       **      Vorbis decoder.
-       **
-       **      The next two packets in order are the comment and codebook headers.
-       **      They're likely large and may span multiple pages.  Thus we reead
-       **      and submit data until we get our two pacakets, watching that no
-       **      pages are missing.  If a page is missing, error out ; losing a
-       **      header page is the only place where missing data is fatal.
-       */
-
-       i = 0 ;                 /* Count of number of packets read */
-       while (i < 2)
-       {       int result = ogg_sync_pageout (&odata->osync, &odata->opage) ;
-               if (result == 0)
-               {       /* Need more data */
-                       buffer = ogg_sync_buffer (&odata->osync, 4096) ;
-                       bytes = psf_fread (buffer, 1, 4096, psf) ;
-
-                       if (bytes == 0 && i < 2)
-                       {       psf_log_printf (psf, "End of file before finding all Vorbis headers!\n") ;
-                               return SFE_MALFORMED_FILE ;
-                               } ;
-                       nn = ogg_sync_wrote (&odata->osync, bytes) ;
-                       }
-               else if (result == 1)
-               {       /*
-                       **      Don't complain about missing or corrupt data yet. We'll
-                       **      catch it at the packet output phase.
-                       **
-                       **      We can ignore any errors here as they'll also become apparent
-                       **      at packetout.
-                       */
-                       nn = ogg_stream_pagein (&odata->ostream, &odata->opage) ;
-                       while (i < 2)
-                       {       result = ogg_stream_packetout (&odata->ostream, &odata->opacket) ;
-                               if (result == 0)
-                                       break ;
-                               if (result < 0)
-                               {       /*      Uh oh ; data at some point was corrupted or missing!
-                                       **      We can't tolerate that in a header. Die. */
-                                       psf_log_printf (psf, "Corrupt secondary header. Exiting.\n") ;
-                                       return SFE_MALFORMED_FILE ;
-                                       } ;
-
-                               vorbis_synthesis_headerin (&vdata->vinfo, &vdata->vcomment, &odata->opacket) ;
-                               i++ ;
-                               } ;
-                       } ;
-               } ;
-
-       if (log_data)
-       {       int printed_metadata_msg = 0 ;
-               int k ;
-
-               psf_log_printf (psf, "Bitstream is %d channel, %D Hz\n", vdata->vinfo.channels, vdata->vinfo.rate) ;
-               psf_log_printf (psf, "Encoded by : %s\n", vdata->vcomment.vendor) ;
-
-               /* Throw the comments plus a few lines about the bitstream we're decoding. */
-               for (k = 0 ; k < ARRAY_LEN (vorbis_metatypes) ; k++)
-               {       char *dd ;
-
-                       dd = vorbis_comment_query (&vdata->vcomment, vorbis_metatypes [k].name, 0) ;
-                       if (dd == NULL)
-                               continue ;
-
-                       if (printed_metadata_msg == 0)
-                       {       psf_log_printf (psf, "Metadata :\n") ;
-                               printed_metadata_msg = 1 ;
-                               } ;
-
-                       psf_store_string (psf, vorbis_metatypes [k].id, dd) ;
-                       psf_log_printf (psf, "  %-10s : %s\n", vorbis_metatypes [k].name, dd) ;
-                       } ;
-
-               psf_log_printf (psf, "End\n") ;
-               } ;
-
-       psf->sf.samplerate      = vdata->vinfo.rate ;
-       psf->sf.channels        = vdata->vinfo.channels ;
-       psf->sf.format          = SF_FORMAT_OGG | SF_FORMAT_VORBIS ;
-
-       /*      OK, got and parsed all three headers. Initialize the Vorbis
-       **      packet->PCM decoder.
-       **      Central decode state. */
-       vorbis_synthesis_init (&vdata->vdsp, &vdata->vinfo) ;
-
-       /*      Local state for most of the decode so multiple block decodes can
-       **      proceed in parallel. We could init multiple vorbis_block structures
-       **      for vd here. */
-       vorbis_block_init (&vdata->vdsp, &vdata->vblock) ;
-
-       vdata->loc = 0 ;
-
-       return 0 ;
-} /* vorbis_read_header */
-
-static int
-vorbis_write_header (SF_PRIVATE *psf, int UNUSED (calc_length))
-{
-       OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
-       VORBIS_PRIVATE *vdata = (VORBIS_PRIVATE *) psf->codec_data ;
-       int k, ret ;
-
-       vorbis_info_init (&vdata->vinfo) ;
-
-       /* The style of encoding should be selectable here, VBR quality mode. */
-       ret = vorbis_encode_init_vbr (&vdata->vinfo, psf->sf.channels, psf->sf.samplerate, vdata->quality) ;
-
-#if 0
-       ret = vorbis_encode_init (&vdata->vinfo, psf->sf.channels, psf->sf.samplerate, -1, 128000, -1) ; /* average bitrate mode */
-       ret = ( vorbis_encode_setup_managed (&vdata->vinfo, psf->sf.channels, psf->sf.samplerate, -1, 128000, -1)
-                       || vorbis_encode_ctl (&vdata->vinfo, OV_ECTL_RATEMANAGE_AVG, NULL)
-                       || vorbis_encode_setup_init (&vdata->vinfo)
-                       ) ;
-#endif
-       if (ret)
-               return SFE_BAD_OPEN_FORMAT ;
-
-       vdata->loc = 0 ;
-
-       /* add a comment */
-       vorbis_comment_init (&vdata->vcomment) ;
-
-       vorbis_comment_add_tag (&vdata->vcomment, "ENCODER", "libsndfile") ;
-       for (k = 0 ; k < SF_MAX_STRINGS ; k++)
-       {       const char * name ;
-
-               if (psf->strings.data [k].type == 0)
-                       break ;
-
-               switch (psf->strings.data [k].type)
-               {       case SF_STR_TITLE :             name = "TITLE" ; break ;
-                       case SF_STR_COPYRIGHT : name = "COPYRIGHT" ; break ;
-                       case SF_STR_SOFTWARE :  name = "SOFTWARE" ; break ;
-                       case SF_STR_ARTIST :    name = "ARTIST" ; break ;
-                       case SF_STR_COMMENT :   name = "COMMENT" ; break ;
-                       case SF_STR_DATE :              name = "DATE" ; break ;
-                       case SF_STR_ALBUM :             name = "ALBUM" ; break ;
-                       case SF_STR_LICENSE :   name = "LICENSE" ; break ;
-                       default : continue ;
-                       } ;
-
-               vorbis_comment_add_tag (&vdata->vcomment, name, psf->strings.storage + psf->strings.data [k].offset) ;
-               } ;
-
-       /* set up the analysis state and auxiliary encoding storage */
-       vorbis_analysis_init (&vdata->vdsp, &vdata->vinfo) ;
-       vorbis_block_init (&vdata->vdsp, &vdata->vblock) ;
-
-       /*
-       **      Set up our packet->stream encoder.
-       **      Pick a random serial number ; that way we can more likely build
-       **      chained streams just by concatenation.
-       */
-
-       ogg_stream_init (&odata->ostream, psf_rand_int32 ()) ;
-
-       /* Vorbis streams begin with three headers ; the initial header (with
-          most of the codec setup parameters) which is mandated by the Ogg
-          bitstream spec.  The second header holds any comment fields.  The
-          third header holds the bitstream codebook.  We merely need to
-          make the headers, then pass them to libvorbis one at a time ;
-          libvorbis handles the additional Ogg bitstream constraints */
-
-       {       ogg_packet header ;
-               ogg_packet header_comm ;
-               ogg_packet header_code ;
-               int result ;
-
-               vorbis_analysis_headerout (&vdata->vdsp, &vdata->vcomment, &header, &header_comm, &header_code) ;
-               ogg_stream_packetin (&odata->ostream, &header) ; /* automatically placed in its own page */
-               ogg_stream_packetin (&odata->ostream, &header_comm) ;
-               ogg_stream_packetin (&odata->ostream, &header_code) ;
-
-               /* This ensures the actual
-                * audio data will start on a new page, as per spec
-                */
-               while ((result = ogg_stream_flush (&odata->ostream, &odata->opage)) != 0)
-               {       psf_fwrite (odata->opage.header, 1, odata->opage.header_len, psf) ;
-                       psf_fwrite (odata->opage.body, 1, odata->opage.body_len, psf) ;
-                       } ;
-       }
-
-       return 0 ;
-} /* vorbis_write_header */
-
-static int
-vorbis_close (SF_PRIVATE *psf)
-{      OGG_PRIVATE* odata = psf->container_data ;
-       VORBIS_PRIVATE *vdata = psf->codec_data ;
-
-       if (odata == NULL || vdata == NULL)
-               return 0 ;
-
-       /*      Clean up this logical bitstream ; before exit we shuld see if we're
-       **      followed by another [chained]. */
-
-       if (psf->file.mode == SFM_WRITE)
-       {
-               if (psf->write_current <= 0)
-                       vorbis_write_header (psf, 0) ;
-
-               vorbis_analysis_wrote (&vdata->vdsp, 0) ;
-               while (vorbis_analysis_blockout (&vdata->vdsp, &vdata->vblock) == 1)
-               {
-
-               /* analysis, assume we want to use bitrate management */
-                       vorbis_analysis (&vdata->vblock, NULL) ;
-                       vorbis_bitrate_addblock (&vdata->vblock) ;
-
-                       while (vorbis_bitrate_flushpacket (&vdata->vdsp, &odata->opacket))
-                       {       /* weld the packet into the bitstream */
-                               ogg_stream_packetin (&odata->ostream, &odata->opacket) ;
-
-                               /* write out pages (if any) */
-                               while (!odata->eos)
-                               {       int result = ogg_stream_pageout (&odata->ostream, &odata->opage) ;
-                                       if (result == 0) break ;
-                                       psf_fwrite (odata->opage.header, 1, odata->opage.header_len, psf) ;
-                                       psf_fwrite (odata->opage.body, 1, odata->opage.body_len, psf) ;
-
-               /* this could be set above, but for illustrative purposes, I do
-                  it here (to show that vorbis does know where the stream ends) */
-
-                                       if (ogg_page_eos (&odata->opage)) odata->eos = 1 ;
-                               }
-                       }
-               }
-       }
-
-       /* ogg_page and ogg_packet structs always point to storage in
-          libvorbis.  They are never freed or manipulated directly */
-
-       vorbis_block_clear (&vdata->vblock) ;
-       vorbis_dsp_clear (&vdata->vdsp) ;
-       vorbis_comment_clear (&vdata->vcomment) ;
-       vorbis_info_clear (&vdata->vinfo) ;
-
-       return 0 ;
-} /* vorbis_close */
-
-int
-ogg_vorbis_open (SF_PRIVATE *psf)
-{      OGG_PRIVATE* odata = psf->container_data ;
-       VORBIS_PRIVATE* vdata = calloc (1, sizeof (VORBIS_PRIVATE)) ;
-       int     error = 0 ;
-
-       if (odata == NULL)
-       {       psf_log_printf (psf, "%s : odata is NULL???\n", __func__) ;
-               return SFE_INTERNAL ;
-               } ;
-
-       psf->codec_data = vdata ;
-
-       if (psf->file.mode == SFM_RDWR)
-               return SFE_BAD_MODE_RW ;
-
-       psf_log_printf (psf, "Vorbis library version : %s\n", vorbis_version_string ()) ;
-
-       if (psf->file.mode == SFM_READ)
-       {       /* Call this here so it only gets called once, so no memory is leaked. */
-               ogg_sync_init (&odata->osync) ;
-
-               if ((error = vorbis_read_header (psf, 1)))
-                       return error ;
-
-               psf->read_short         = vorbis_read_s ;
-               psf->read_int           = vorbis_read_i ;
-               psf->read_float         = vorbis_read_f ;
-               psf->read_double        = vorbis_read_d ;
-               psf->sf.frames          = vorbis_length (psf) ;
-               } ;
-
-       psf->codec_close = vorbis_close ;
-       if (psf->file.mode == SFM_WRITE)
-       {
-               /* Set the default vorbis quality here. */
-               vdata->quality = 0.4 ;
-
-               psf->write_header       = vorbis_write_header ;
-               psf->write_short        = vorbis_write_s ;
-               psf->write_int          = vorbis_write_i ;
-               psf->write_float        = vorbis_write_f ;
-               psf->write_double       = vorbis_write_d ;
-
-               psf->sf.frames = SF_COUNT_MAX ; /* Unknown really */
-               psf->strings.flags = SF_STR_ALLOW_START ;
-               } ;
-
-       psf->seek = vorbis_seek ;
-       psf->command = vorbis_command ;
-       psf->byterate = vorbis_byterate ;
-
-       /* FIXME, FIXME, FIXME : Hack these here for now and correct later. */
-       psf->sf.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS ;
-       psf->sf.sections = 1 ;
-
-       psf->datalength = 1 ;
-       psf->dataoffset = 0 ;
-       /* End FIXME. */
-
-       return error ;
-} /* ogg_vorbis_open */
-
-static int
-vorbis_command (SF_PRIVATE *psf, int command, void * data, int datasize)
-{      VORBIS_PRIVATE *vdata = (VORBIS_PRIVATE *) psf->codec_data ;
-
-       switch (command)
-       {       case SFC_SET_COMPRESSION_LEVEL :
-                       if (data == NULL || datasize != sizeof (double))
-                               return SF_FALSE ;
-
-                       if (psf->have_written)
-                               return SF_FALSE ;
-
-                       vdata->quality = 1.0 - *((double *) data) ;
-
-                       /* Clip range. */
-                       vdata->quality = SF_MAX (0.0, SF_MIN (1.0, vdata->quality)) ;
-
-                       psf_log_printf (psf, "%s : Setting SFC_SET_VBR_ENCODING_QUALITY to %f.\n", __func__, vdata->quality) ;
-                       return SF_TRUE ;
-
-               default :
-                       return SF_FALSE ;
-               } ;
-
-       return SF_FALSE ;
-} /* vorbis_command */
-
-static int
-vorbis_rnull (SF_PRIVATE *UNUSED (psf), int samples, void *UNUSED (vptr), int UNUSED (off) , int channels, float **UNUSED (pcm))
-{
-       return samples * channels ;
-} /* vorbis_rnull */
-
-static int
-vorbis_rshort (SF_PRIVATE *psf, int samples, void *vptr, int off, int channels, float **pcm)
-{
-       short *ptr = (short*) vptr + off ;
-       int i = 0, j, n ;
-       if (psf->float_int_mult)
-       {
-               float inverse = 1.0 / psf->float_max ;
-               for (j = 0 ; j < samples ; j++)
-                       for (n = 0 ; n < channels ; n++)
-                               ptr [i++] = lrintf ((pcm [n][j] * inverse) * 32767.0f) ;
-       }
-       else
-       {
-               for (j = 0 ; j < samples ; j++)
-                       for (n = 0 ; n < channels ; n++)
-                               ptr [i++] = lrintf (pcm [n][j] * 32767.0f) ;
-       }
-       return i ;
-} /* vorbis_rshort */
-
-static int
-vorbis_rint (SF_PRIVATE *psf, int samples, void *vptr, int off, int channels, float **pcm)
-{
-       int *ptr = (int*) vptr + off ;
-       int i = 0, j, n ;
-
-       if (psf->float_int_mult)
-       {
-               float inverse = 1.0 / psf->float_max ;
-               for (j = 0 ; j < samples ; j++)
-                       for (n = 0 ; n < channels ; n++)
-                               ptr [i++] = lrintf ((pcm [n][j] * inverse) * 2147483647.0f) ;
-       }
-       else
-       {
-               for (j = 0 ; j < samples ; j++)
-                       for (n = 0 ; n < channels ; n++)
-                               ptr [i++] = lrintf (pcm [n][j] * 2147483647.0f) ;
-       }
-       return i ;
-} /* vorbis_rint */
-
-static int
-vorbis_rfloat (SF_PRIVATE *UNUSED (psf), int samples, void *vptr, int off, int channels, float **pcm)
-{
-       float *ptr = (float*) vptr + off ;
-       int i = 0, j, n ;
-       for (j = 0 ; j < samples ; j++)
-               for (n = 0 ; n < channels ; n++)
-                       ptr [i++] = pcm [n][j] ;
-       return i ;
-} /* vorbis_rfloat */
-
-static int
-vorbis_rdouble (SF_PRIVATE *UNUSED (psf), int samples, void *vptr, int off, int channels, float **pcm)
-{
-       double *ptr = (double*) vptr + off ;
-       int i = 0, j, n ;
-       for (j = 0 ; j < samples ; j++)
-               for (n = 0 ; n < channels ; n++)
-                       ptr [i++] = pcm [n][j] ;
-       return i ;
-} /* vorbis_rdouble */
-
-
-static sf_count_t
-vorbis_read_sample (SF_PRIVATE *psf, void *ptr, sf_count_t lens, convert_func *transfn)
-{
-       VORBIS_PRIVATE *vdata = psf->codec_data ;
-       OGG_PRIVATE *odata = psf->container_data ;
-       int len, samples, i = 0 ;
-       float **pcm ;
-
-       len = lens / psf->sf.channels ;
-
-       while ((samples = vorbis_synthesis_pcmout (&vdata->vdsp, &pcm)) > 0)
-       {       if (samples > len) samples = len ;
-               i += transfn (psf, samples, ptr, i, psf->sf.channels, pcm) ;
-               len -= samples ;
-               /* tell libvorbis how many samples we actually consumed */
-               vorbis_synthesis_read (&vdata->vdsp, samples) ;
-               vdata->loc += samples ;
-               if (len == 0)
-                       return i ; /* Is this necessary */
-       }
-       goto start0 ;           /* Jump into the nasty nest */
-       while (len > 0 && !odata->eos)
-       {
-               while (len > 0 && !odata->eos)
-               {       int result = ogg_sync_pageout (&odata->osync, &odata->opage) ;
-                       if (result == 0) break ; /* need more data */
-                       if (result < 0)
-                       {       /* missing or corrupt data at this page position */
-                               psf_log_printf (psf, "Corrupt or missing data in bitstream ; continuing...\n") ;
-                               }
-                       else
-                       {       /* can safely ignore errors at this point */
-                               ogg_stream_pagein (&odata->ostream, &odata->opage) ;
-                       start0:
-                               while (1)
-                               {       result = ogg_stream_packetout (&odata->ostream, &odata->opacket) ;
-                                       if (result == 0)
-                                               break ; /* need more data */
-                                       if (result < 0)
-                                       {       /* missing or corrupt data at this page position */
-                                               /* no reason to complain ; already complained above */
-                                               }
-                                       else
-                                       {       /* we have a packet.    Decode it */
-                                               if (vorbis_synthesis (&vdata->vblock, &odata->opacket) == 0) /* test for success! */
-                                                       vorbis_synthesis_blockin (&vdata->vdsp, &vdata->vblock) ;
-                                               /*
-                                               ** pcm is a multichannel float vector.   In stereo, for
-                                               ** example, pcm [0] is left, and pcm [1] is right.       samples is
-                                               ** the size of each channel.     Convert the float values
-                                               ** (-1.<=range<=1.) to whatever PCM format and write it out.
-                                               */
-
-                                               while ((samples = vorbis_synthesis_pcmout (&vdata->vdsp, &pcm)) > 0)
-                                               {       if (samples > len) samples = len ;
-                                                       i += transfn (psf, samples, ptr, i, psf->sf.channels, pcm) ;
-                                                       len -= samples ;
-                                                       /* tell libvorbis how many samples we actually consumed */
-                                                       vorbis_synthesis_read (&vdata->vdsp, samples) ;
-                                                       vdata->loc += samples ;
-                                                       if (len == 0)
-                                                               return i ; /* Is this necessary */
-                                                       } ;
-                                       }
-                               }
-                               if (ogg_page_eos (&odata->opage)) odata->eos = 1 ;
-                       }
-               }
-               if (!odata->eos)
-               {       char *buffer ;
-                       int bytes ;
-                       buffer = ogg_sync_buffer (&odata->osync, 4096) ;
-                       bytes = psf_fread (buffer, 1, 4096, psf) ;
-                       ogg_sync_wrote (&odata->osync, bytes) ;
-                       if (bytes == 0) odata->eos = 1 ;
-               }
-       }
-       return i ;
-} /* vorbis_read_sample */
-
-static sf_count_t
-vorbis_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t lens)
-{      return vorbis_read_sample (psf, (void*) ptr, lens, vorbis_rshort) ;
-} /* vorbis_read_s */
-
-static sf_count_t
-vorbis_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t lens)
-{      return vorbis_read_sample (psf, (void*) ptr, lens, vorbis_rint) ;
-} /* vorbis_read_i */
-
-static sf_count_t
-vorbis_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t lens)
-{      return vorbis_read_sample (psf, (void*) ptr, lens, vorbis_rfloat) ;
-} /* vorbis_read_f */
-
-static sf_count_t
-vorbis_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t lens)
-{      return vorbis_read_sample (psf, (void*) ptr, lens, vorbis_rdouble) ;
-} /* vorbis_read_d */
-
-/*==============================================================================
-*/
-
-static void
-vorbis_write_samples (SF_PRIVATE *psf, OGG_PRIVATE *odata, VORBIS_PRIVATE *vdata, int in_frames)
-{
-       vorbis_analysis_wrote (&vdata->vdsp, in_frames) ;
-
-       /*
-       **      Vorbis does some data preanalysis, then divvies up blocks for
-       **      more involved (potentially parallel) processing. Get a single
-       **      block for encoding now.
-       */
-       while (vorbis_analysis_blockout (&vdata->vdsp, &vdata->vblock) == 1)
-       {
-               /* analysis, assume we want to use bitrate management */
-               vorbis_analysis (&vdata->vblock, NULL) ;
-               vorbis_bitrate_addblock (&vdata->vblock) ;
-
-               while (vorbis_bitrate_flushpacket (&vdata->vdsp, &odata->opacket))
-               {
-                       /* weld the packet into the bitstream */
-                       ogg_stream_packetin (&odata->ostream, &odata->opacket) ;
-
-                       /* write out pages (if any) */
-                       while (!odata->eos)
-                       {       int result = ogg_stream_pageout (&odata->ostream, &odata->opage) ;
-                               if (result == 0)
-                                       break ;
-                               psf_fwrite (odata->opage.header, 1, odata->opage.header_len, psf) ;
-                               psf_fwrite (odata->opage.body, 1, odata->opage.body_len, psf) ;
-
-                               /*      This could be set above, but for illustrative purposes, I do
-                               **      it here (to show that vorbis does know where the stream ends) */
-                               if (ogg_page_eos (&odata->opage))
-                                       odata->eos = 1 ;
-                               } ;
-                       } ;
-               } ;
-
-       vdata->loc += in_frames ;
-} /* vorbis_write_data */
-
-
-static sf_count_t
-vorbis_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t lens)
-{
-       int i, m, j = 0 ;
-       OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
-       VORBIS_PRIVATE *vdata = (VORBIS_PRIVATE *) psf->codec_data ;
-       int in_frames = lens / psf->sf.channels ;
-       float **buffer = vorbis_analysis_buffer (&vdata->vdsp, in_frames) ;
-       for (i = 0 ; i < in_frames ; i++)
-               for (m = 0 ; m < psf->sf.channels ; m++)
-                       buffer [m][i] = (float) (ptr [j++]) / 32767.0f ;
-
-       vorbis_write_samples (psf, odata, vdata, in_frames) ;
-
-       return lens ;
-} /* vorbis_write_s */
-
-static sf_count_t
-vorbis_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t lens)
-{      int i, m, j = 0 ;
-       OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
-       VORBIS_PRIVATE *vdata = (VORBIS_PRIVATE *) psf->codec_data ;
-       int in_frames = lens / psf->sf.channels ;
-       float **buffer = vorbis_analysis_buffer (&vdata->vdsp, in_frames) ;
-       for (i = 0 ; i < in_frames ; i++)
-               for (m = 0 ; m < psf->sf.channels ; m++)
-                       buffer [m][i] = (float) (ptr [j++]) / 2147483647.0f ;
-
-       vorbis_write_samples (psf, odata, vdata, in_frames) ;
-
-       return lens ;
-} /* vorbis_write_i */
-
-static sf_count_t
-vorbis_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t lens)
-{      int i, m, j = 0 ;
-       OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
-       VORBIS_PRIVATE *vdata = (VORBIS_PRIVATE *) psf->codec_data ;
-       int in_frames = lens / psf->sf.channels ;
-       float **buffer = vorbis_analysis_buffer (&vdata->vdsp, in_frames) ;
-       for (i = 0 ; i < in_frames ; i++)
-               for (m = 0 ; m < psf->sf.channels ; m++)
-                       buffer [m][i] = ptr [j++] ;
-
-       vorbis_write_samples (psf, odata, vdata, in_frames) ;
-
-       return lens ;
-} /* vorbis_write_f */
-
-static sf_count_t
-vorbis_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t lens)
-{      int i, m, j = 0 ;
-       OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
-       VORBIS_PRIVATE *vdata = (VORBIS_PRIVATE *) psf->codec_data ;
-       int in_frames = lens / psf->sf.channels ;
-       float **buffer = vorbis_analysis_buffer (&vdata->vdsp, in_frames) ;
-       for (i = 0 ; i < in_frames ; i++)
-               for (m = 0 ; m < psf->sf.channels ; m++)
-                       buffer [m][i] = (float) ptr [j++] ;
-
-       vorbis_write_samples (psf, odata, vdata, in_frames) ;
-
-       return lens ;
-} /* vorbis_write_d */
-
-static sf_count_t
-vorbis_seek (SF_PRIVATE *psf, int UNUSED (mode), sf_count_t offset)
-{
-       OGG_PRIVATE *odata = (OGG_PRIVATE *) psf->container_data ;
-       VORBIS_PRIVATE *vdata = (VORBIS_PRIVATE *) psf->codec_data ;
-
-       if (odata == NULL || vdata == NULL)
-               return 0 ;
-
-       if (offset < 0)
-       {       psf->error = SFE_BAD_SEEK ;
-               return ((sf_count_t) -1) ;
-               } ;
-
-       if (psf->file.mode == SFM_READ)
-       {       sf_count_t target = offset - vdata->loc ;
-
-               if (target < 0)
-               {       /* 12 to allow for OggS bit */
-                       psf_fseek (psf, 12, SEEK_SET) ;
-                       vorbis_read_header (psf, 0) ; /* Reset state */
-                       target = offset ;
-                       } ;
-
-               while (target > 0)
-               {       sf_count_t m = target > 4096 ? 4096 : target ;
-
-                       /*
-                       **      Need to multiply by channels here because the seek is done in
-                       **      terms of frames and the read function is done in terms of
-                       **      samples.
-                       */
-                       vorbis_read_sample (psf, (void *) NULL, m * psf->sf.channels, vorbis_rnull) ;
-
-                       target -= m ;
-                       } ;
-
-               return vdata->loc ;
-               } ;
-
-       return 0 ;
-} /* vorbis_seek */
-
-
-static int
-vorbis_byterate (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_READ)
-               return (psf->datalength * psf->sf.samplerate) / psf->sf.frames ;
-
-       return -1 ;
-} /* vorbis_byterate */
-
-/*==============================================================================
-**     Most of the following code was snipped from Mike Smith's ogginfo utility
-**     which is part of vorbis-tools.
-**     Vorbis tools is released under the GPL but Mike has kindly allowed the
-**     following to be relicensed as LGPL for libsndfile.
-*/
-
-typedef struct
-{
-       int isillegal ;
-       int shownillegal ;
-       int isnew ;
-       int end ;
-
-       uint32_t serial ; /* must be 32 bit unsigned */
-       ogg_stream_state ostream ;
-
-       vorbis_info vinfo ;
-       vorbis_comment vcomment ;
-       sf_count_t lastgranulepos ;
-       int doneheaders ;
-} stream_processor ;
-
-typedef struct
-{
-       stream_processor *streams ;
-       int allocated ;
-       int used ;
-       int in_headers ;
-} stream_set ;
-
-static stream_set *
-create_stream_set (void)
-{      stream_set *set = calloc (1, sizeof (stream_set)) ;
-
-       set->streams = calloc (5, sizeof (stream_processor)) ;
-       set->allocated = 5 ;
-       set->used = 0 ;
-
-       return set ;
-} /* create_stream_set */
-
-static void
-vorbis_end (stream_processor *stream, sf_count_t * len)
-{      *len += stream->lastgranulepos ;
-       vorbis_comment_clear (&stream->vcomment) ;
-       vorbis_info_clear (&stream->vinfo) ;
-} /* vorbis_end */
-
-static void
-free_stream_set (stream_set *set, sf_count_t * len)
-{      int i ;
-
-       for (i = 0 ; i < set->used ; i++)
-       {       if (!set->streams [i].end)
-                       vorbis_end (&set->streams [i], len) ;
-               ogg_stream_clear (&set->streams [i].ostream) ;
-               } ;
-
-       free (set->streams) ;
-       free (set) ;
-} /* free_stream_set */
-
-static int
-streams_open (stream_set *set)
-{      int i, res = 0 ;
-
-       for (i = 0 ; i < set->used ; i++)
-               if (!set->streams [i].end)
-                       res ++ ;
-       return res ;
-} /* streams_open */
-
-static stream_processor *
-find_stream_processor (stream_set *set, ogg_page *page)
-{      uint32_t serial = ogg_page_serialno (page) ;
-       int i, invalid = 0 ;
-
-       stream_processor *stream ;
-
-       for (i = 0 ; i < set->used ; i++)
-       {
-               if (serial == set->streams [i].serial)
-               {       /* We have a match! */
-                       stream = & (set->streams [i]) ;
-
-                       set->in_headers = 0 ;
-                       /* if we have detected EOS, then this can't occur here. */
-                       if (stream->end)
-                       {       stream->isillegal = 1 ;
-                               return stream ;
-                               }
-
-                       stream->isnew = 0 ;
-                       stream->end = ogg_page_eos (page) ;
-                       stream->serial = serial ;
-                       return stream ;
-                       } ;
-               } ;
-
-       /* If there are streams open, and we've reached the end of the
-       ** headers, then we can't be starting a new stream.
-       ** XXX: might this sometimes catch ok streams if EOS flag is missing,
-       ** but the stream is otherwise ok?
-       */
-       if (streams_open (set) && !set->in_headers)
-               invalid = 1 ;
-
-       set->in_headers = 1 ;
-
-       if (set->allocated < set->used)
-               stream = &set->streams [set->used] ;
-       else
-       {       set->allocated += 5 ;
-               set->streams = realloc (set->streams, sizeof (stream_processor) * set->allocated) ;
-               stream = &set->streams [set->used] ;
-               } ;
-
-       set->used++ ;
-
-       stream->isnew = 1 ;
-       stream->isillegal = invalid ;
-
-       {
-               int res ;
-               ogg_packet packet ;
-
-               /* We end up processing the header page twice, but that's ok. */
-               ogg_stream_init (&stream->ostream, serial) ;
-               ogg_stream_pagein (&stream->ostream, page) ;
-               res = ogg_stream_packetout (&stream->ostream, &packet) ;
-               if (res <= 0)
-                       return NULL ;
-               else if (packet.bytes >= 7 && memcmp (packet.packet, "\x01vorbis", 7) == 0)
-               {
-                       stream->lastgranulepos = 0 ;
-                       vorbis_comment_init (&stream->vcomment) ;
-                       vorbis_info_init (&stream->vinfo) ;
-                       } ;
-
-               res = ogg_stream_packetout (&stream->ostream, &packet) ;
-
-               /* re-init, ready for processing */
-               ogg_stream_clear (&stream->ostream) ;
-               ogg_stream_init (&stream->ostream, serial) ;
-       }
-
-       stream->end = ogg_page_eos (page) ;
-       stream->serial = serial ;
-
-       return stream ;
-} /* find_stream_processor */
-
-static int
-vorbis_length_get_next_page (SF_PRIVATE *psf, ogg_sync_state * osync, ogg_page *page)
-{      static const int CHUNK_SIZE = 4500 ;
-
-       while (ogg_sync_pageout (osync, page) <= 0)
-       {       char * buffer = ogg_sync_buffer (osync, CHUNK_SIZE) ;
-               int bytes = psf_fread (buffer, 1, 4096, psf) ;
-
-               if (bytes <= 0)
-               {       ogg_sync_wrote (osync, 0) ;
-                       return 0 ;
-                       } ;
-
-               ogg_sync_wrote (osync, bytes) ;
-               } ;
-
-       return 1 ;
-} /* vorbis_length_get_next_page */
-
-static sf_count_t
-vorbis_length_aux (SF_PRIVATE * psf)
-{
-       ogg_sync_state osync ;
-       ogg_page page ;
-       sf_count_t len = 0 ;
-       stream_set *processors ;
-
-       processors = create_stream_set () ;
-       if (processors == NULL)
-               return 0 ;      // out of memory?
-
-       ogg_sync_init (&osync) ;
-
-       while (vorbis_length_get_next_page (psf, &osync, &page))
-       {
-               stream_processor *p = find_stream_processor (processors, &page) ;
-
-               if (!p)
-               {       len = 0 ;
-                       break ;
-                       } ;
-
-               if (p->isillegal && !p->shownillegal)
-               {
-                       p->shownillegal = 1 ;
-                       /* If it's a new stream, we want to continue processing this page
-                       ** anyway to suppress additional spurious errors
-                       */
-                       if (!p->isnew) continue ;
-                       } ;
-
-               if (!p->isillegal)
-               {       ogg_packet packet ;
-                       int header = 0 ;
-
-                       ogg_stream_pagein (&p->ostream, &page) ;
-                       if (p->doneheaders < 3)
-                               header = 1 ;
-
-                       while (ogg_stream_packetout (&p->ostream, &packet) > 0)
-                       {
-                               if (p->doneheaders < 3)
-                               {       if (vorbis_synthesis_headerin (&p->vinfo, &p->vcomment, &packet) < 0)
-                                               continue ;
-                                       p->doneheaders ++ ;
-                                       } ;
-                               } ;
-                       if (!header)
-                       {       sf_count_t gp = ogg_page_granulepos (&page) ;
-                               if (gp > 0) p->lastgranulepos = gp ;
-                               } ;
-                       if (p->end)
-                       {       vorbis_end (p, &len) ;
-                               p->isillegal = 1 ;
-                               } ;
-                       } ;
-               } ;
-
-       ogg_sync_clear (&osync) ;
-       free_stream_set (processors, &len) ;
-
-       return len ;
-} /* vorbis_length_aux */
-
-static sf_count_t
-vorbis_length (SF_PRIVATE *psf)
-{      sf_count_t length ;
-       int error ;
-
-       if (psf->sf.seekable == 0)
-               return SF_COUNT_MAX ;
-
-       psf_fseek (psf, 0, SEEK_SET) ;
-       length = vorbis_length_aux (psf) ;
-
-       psf_fseek (psf, 12, SEEK_SET) ;
-       if ((error = vorbis_read_header (psf, 0)) != 0)
-               psf->error = error ;
-
-       return length ;
-} /* vorbis_length */
-
-#else /* HAVE_EXTERNAL_LIBS */
-
-int
-ogg_vorbis_open        (SF_PRIVATE *psf)
-{
-       psf_log_printf (psf, "This version of libsndfile was compiled without Ogg/Vorbis support.\n") ;
-       return SFE_UNIMPLEMENTED ;
-} /* ogg_vorbis_open */
-
-#endif
diff --git a/libs/libsndfile/src/paf.c b/libs/libsndfile/src/paf.c
deleted file mode 100644 (file)
index 1360c33..0000000
+++ /dev/null
@@ -1,819 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-
-#define FAP_MARKER     (MAKE_MARKER ('f', 'a', 'p', ' '))
-#define PAF_MARKER     (MAKE_MARKER (' ', 'p', 'a', 'f'))
-
-/*------------------------------------------------------------------------------
-** Other defines.
-*/
-
-#define        PAF_HEADER_LENGTH                       2048
-
-#define        PAF24_SAMPLES_PER_BLOCK         10
-#define        PAF24_BLOCK_SIZE                        32
-
-/*------------------------------------------------------------------------------
-** Typedefs.
-*/
-
-typedef        struct
-{      int     version ;
-       int     endianness ;
-       int     samplerate ;
-       int     format ;
-       int     channels ;
-       int     source ;
-} PAF_FMT ;
-
-typedef struct
-{      int                             max_blocks, channels, blocksize ;
-       int                             read_block, write_block, read_count, write_count ;
-       sf_count_t              sample_count ;
-       int                             *samples ;
-       unsigned char   *block ;
-       int                             data [] ; /* ISO C99 struct flexible array. */
-} PAF24_PRIVATE ;
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int paf24_init (SF_PRIVATE *psf) ;
-
-static int     paf_read_header (SF_PRIVATE *psf) ;
-static int     paf_write_header (SF_PRIVATE *psf, int calc_length) ;
-
-static sf_count_t paf24_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t paf24_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t paf24_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t paf24_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t paf24_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t paf24_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t paf24_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t paf24_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static sf_count_t paf24_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-
-enum
-{      PAF_PCM_16 = 0,
-       PAF_PCM_24 = 1,
-       PAF_PCM_S8 = 2
-} ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-paf_open       (SF_PRIVATE *psf)
-{      int             subformat, error, endian ;
-
-       psf->dataoffset = PAF_HEADER_LENGTH ;
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-       {       if ((error = paf_read_header (psf)))
-                       return error ;
-               } ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_PAF)
-                       return  SFE_BAD_OPEN_FORMAT ;
-
-               endian = SF_ENDIAN (psf->sf.format) ;
-
-               /* PAF is by default big endian. */
-               psf->endian = SF_ENDIAN_BIG ;
-
-               if (endian == SF_ENDIAN_LITTLE || (CPU_IS_LITTLE_ENDIAN && (endian == SF_ENDIAN_CPU)))
-                       psf->endian = SF_ENDIAN_LITTLE ;
-
-               if ((error = paf_write_header (psf, SF_FALSE)))
-                       return error ;
-
-               psf->write_header = paf_write_header ;
-               } ;
-
-       switch (subformat)
-       {       case SF_FORMAT_PCM_S8 :
-                                       psf->bytewidth = 1 ;
-                                       error = pcm_init (psf) ;
-                                       break ;
-
-               case SF_FORMAT_PCM_16 :
-                                       psf->bytewidth = 2 ;
-                                       error = pcm_init (psf) ;
-                                       break ;
-
-               case SF_FORMAT_PCM_24 :
-                                       /* No bytewidth because of whacky 24 bit encoding. */
-                                       error = paf24_init (psf) ;
-                                       break ;
-
-               default : return SFE_PAF_UNKNOWN_FORMAT ;
-               } ;
-
-       return error ;
-} /* paf_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-paf_read_header        (SF_PRIVATE *psf)
-{      PAF_FMT         paf_fmt ;
-       int                     marker ;
-
-       if (psf->filelength < PAF_HEADER_LENGTH)
-               return SFE_PAF_SHORT_HEADER ;
-
-       memset (&paf_fmt, 0, sizeof (paf_fmt)) ;
-       psf_binheader_readf (psf, "pm", 0, &marker) ;
-
-       psf_log_printf (psf, "Signature   : '%M'\n", marker) ;
-
-       if (marker == PAF_MARKER)
-       {       psf_binheader_readf (psf, "E444444", &(paf_fmt.version), &(paf_fmt.endianness),
-                       &(paf_fmt.samplerate), &(paf_fmt.format), &(paf_fmt.channels), &(paf_fmt.source)) ;
-               }
-       else if (marker == FAP_MARKER)
-       {       psf_binheader_readf (psf, "e444444", &(paf_fmt.version), &(paf_fmt.endianness),
-                       &(paf_fmt.samplerate), &(paf_fmt.format), &(paf_fmt.channels), &(paf_fmt.source)) ;
-               }
-       else
-               return SFE_PAF_NO_MARKER ;
-
-       psf_log_printf (psf, "Version     : %d\n", paf_fmt.version) ;
-
-       if (paf_fmt.version != 0)
-       {       psf_log_printf (psf, "*** Bad version number. should be zero.\n") ;
-               return SFE_PAF_VERSION ;
-               } ;
-
-       psf_log_printf (psf, "Sample Rate : %d\n", paf_fmt.samplerate) ;
-       psf_log_printf (psf, "Channels    : %d\n", paf_fmt.channels) ;
-
-       psf_log_printf (psf, "Endianness  : %d => ", paf_fmt.endianness) ;
-       if (paf_fmt.endianness)
-       {       psf_log_printf (psf, "Little\n", paf_fmt.endianness) ;
-               psf->endian = SF_ENDIAN_LITTLE ;
-               }
-       else
-       {       psf_log_printf (psf, "Big\n", paf_fmt.endianness) ;
-               psf->endian = SF_ENDIAN_BIG ;
-               } ;
-
-       if (paf_fmt.channels < 1 || paf_fmt.channels > SF_MAX_CHANNELS)
-               return SFE_PAF_BAD_CHANNELS ;
-
-       psf->datalength = psf->filelength - psf->dataoffset ;
-
-       psf_binheader_readf (psf, "p", (int) psf->dataoffset) ;
-
-       psf->sf.samplerate      = paf_fmt.samplerate ;
-       psf->sf.channels        = paf_fmt.channels ;
-
-       /* Only fill in type major. */
-       psf->sf.format = SF_FORMAT_PAF ;
-
-       psf_log_printf (psf, "Format      : %d => ", paf_fmt.format) ;
-
-       /* PAF is by default big endian. */
-       psf->sf.format |= paf_fmt.endianness ? SF_ENDIAN_LITTLE : SF_ENDIAN_BIG ;
-
-       switch (paf_fmt.format)
-       {       case PAF_PCM_S8 :
-                                       psf_log_printf (psf, "8 bit linear PCM\n") ;
-                                       psf->bytewidth = 1 ;
-
-                                       psf->sf.format |= SF_FORMAT_PCM_S8 ;
-
-                                       psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-                                       psf->sf.frames = psf->datalength / psf->blockwidth ;
-                                       break ;
-
-               case PAF_PCM_16 :
-                                       psf_log_printf (psf, "16 bit linear PCM\n") ;
-                                       psf->bytewidth = 2 ;
-
-                                       psf->sf.format |= SF_FORMAT_PCM_16 ;
-
-                                       psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-                                       psf->sf.frames = psf->datalength / psf->blockwidth ;
-                                       break ;
-
-               case PAF_PCM_24 :
-                                       psf_log_printf (psf, "24 bit linear PCM\n") ;
-                                       psf->bytewidth = 3 ;
-
-                                       psf->sf.format |= SF_FORMAT_PCM_24 ;
-
-                                       psf->blockwidth = 0 ;
-                                       psf->sf.frames = PAF24_SAMPLES_PER_BLOCK * psf->datalength /
-                                                                                       (PAF24_BLOCK_SIZE * psf->sf.channels) ;
-                                       break ;
-
-               default :       psf_log_printf (psf, "Unknown\n") ;
-                                       return SFE_PAF_UNKNOWN_FORMAT ;
-                                       break ;
-               } ;
-
-       psf_log_printf (psf, "Source      : %d => ", paf_fmt.source) ;
-
-       switch (paf_fmt.source)
-       {       case 1 : psf_log_printf (psf, "Analog Recording\n") ;
-                                       break ;
-               case 2 : psf_log_printf (psf, "Digital Transfer\n") ;
-                                       break ;
-               case 3 : psf_log_printf (psf, "Multi-track Mixdown\n") ;
-                                       break ;
-               case 5 : psf_log_printf (psf, "Audio Resulting From DSP Processing\n") ;
-                                       break ;
-               default : psf_log_printf (psf, "Unknown\n") ;
-                                       break ;
-               } ;
-
-       return 0 ;
-} /* paf_read_header */
-
-static int
-paf_write_header (SF_PRIVATE *psf, int UNUSED (calc_length))
-{      int                     paf_format ;
-
-       /* PAF header already written so no need to re-write. */
-       if (psf_ftell (psf) >= PAF_HEADER_LENGTH)
-               return 0 ;
-
-       psf->dataoffset = PAF_HEADER_LENGTH ;
-
-       switch (SF_CODEC (psf->sf.format))
-       {       case SF_FORMAT_PCM_S8 :
-                                       paf_format = PAF_PCM_S8 ;
-                                       break ;
-
-               case SF_FORMAT_PCM_16 :
-                                       paf_format = PAF_PCM_16 ;
-                                       break ;
-
-               case SF_FORMAT_PCM_24 :
-                                       paf_format = PAF_PCM_24 ;
-                                       break ;
-
-               default : return SFE_PAF_UNKNOWN_FORMAT ;
-               } ;
-
-       /* Reset the current header length to zero. */
-       psf->header [0] = 0 ;
-       psf->headindex = 0 ;
-
-       if (psf->endian == SF_ENDIAN_BIG)
-       {       /* Marker, version, endianness, samplerate */
-               psf_binheader_writef (psf, "Em444", PAF_MARKER, 0, 0, psf->sf.samplerate) ;
-               /* format, channels, source */
-               psf_binheader_writef (psf, "E444", paf_format, psf->sf.channels, 0) ;
-               }
-       else if (psf->endian == SF_ENDIAN_LITTLE)
-       {       /* Marker, version, endianness, samplerate */
-               psf_binheader_writef (psf, "em444", FAP_MARKER, 0, 1, psf->sf.samplerate) ;
-               /* format, channels, source */
-               psf_binheader_writef (psf, "e444", paf_format, psf->sf.channels, 0) ;
-               } ;
-
-       /* Zero fill to dataoffset. */
-       psf_binheader_writef (psf, "z", (size_t) (psf->dataoffset - psf->headindex)) ;
-
-       psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-       return psf->error ;
-} /* paf_write_header */
-
-/*===============================================================================
-**     24 bit PAF files have a really weird encoding.
-**  For a mono file, 10 samples (each being 3 bytes) are packed into a 32 byte
-**     block. The 8 ints in this 32 byte block are then endian swapped (as ints)
-**     if necessary before being written to disk.
-**  For a stereo file, blocks of 10 samples from the same channel are encoded
-**  into 32 bytes as for the mono case. The 32 byte blocks are then interleaved
-**     on disk.
-**     Reading has to reverse the above process :-).
-**     Weird!!!
-**
-**     The code below attempts to gain efficiency while maintaining readability.
-*/
-
-static int paf24_read_block (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24) ;
-static int paf24_write_block (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24) ;
-static int paf24_close (SF_PRIVATE *psf) ;
-
-
-static int
-paf24_init (SF_PRIVATE *psf)
-{      PAF24_PRIVATE   *ppaf24 ;
-       int     paf24size ;
-
-       paf24size = sizeof (PAF24_PRIVATE) + psf->sf.channels *
-                                       (PAF24_BLOCK_SIZE + PAF24_SAMPLES_PER_BLOCK * sizeof (int)) ;
-
-       /*
-       **      Not exatly sure why this needs to be here but the tests
-       **      fail without it.
-       */
-       psf->last_op = 0 ;
-
-       if (! (psf->codec_data = calloc (1, paf24size)))
-               return SFE_MALLOC_FAILED ;
-
-       ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-       ppaf24->channels        = psf->sf.channels ;
-       ppaf24->samples         = ppaf24->data ;
-       ppaf24->block           = (unsigned char*) (ppaf24->data + PAF24_SAMPLES_PER_BLOCK * ppaf24->channels) ;
-
-       ppaf24->blocksize = PAF24_BLOCK_SIZE * ppaf24->channels ;
-
-       if (psf->file.mode == SFM_READ || psf->file.mode == SFM_RDWR)
-       {       paf24_read_block (psf, ppaf24) ;        /* Read first block. */
-
-               psf->read_short         = paf24_read_s ;
-               psf->read_int           = paf24_read_i ;
-               psf->read_float         = paf24_read_f ;
-               psf->read_double        = paf24_read_d ;
-               } ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       psf->write_short        = paf24_write_s ;
-               psf->write_int          = paf24_write_i ;
-               psf->write_float        = paf24_write_f ;
-               psf->write_double       = paf24_write_d ;
-               } ;
-
-       psf->seek       = paf24_seek ;
-       psf->container_close    = paf24_close ;
-
-       psf->filelength = psf_get_filelen (psf) ;
-       psf->datalength = psf->filelength - psf->dataoffset ;
-
-       if (psf->datalength % PAF24_BLOCK_SIZE)
-       {       if (psf->file.mode == SFM_READ)
-                       psf_log_printf (psf, "*** Warning : file seems to be truncated.\n") ;
-               ppaf24->max_blocks = psf->datalength / ppaf24->blocksize + 1 ;
-               }
-       else
-               ppaf24->max_blocks = psf->datalength / ppaf24->blocksize ;
-
-       ppaf24->read_block = 0 ;
-       if (psf->file.mode == SFM_RDWR)
-               ppaf24->write_block = ppaf24->max_blocks ;
-       else
-               ppaf24->write_block = 0 ;
-
-       psf->sf.frames = PAF24_SAMPLES_PER_BLOCK * ppaf24->max_blocks ;
-       ppaf24->sample_count = psf->sf.frames ;
-
-       return 0 ;
-} /* paf24_init */
-
-static sf_count_t
-paf24_seek (SF_PRIVATE *psf, int mode, sf_count_t offset)
-{      PAF24_PRIVATE   *ppaf24 ;
-       int                             newblock, newsample ;
-
-       if (psf->codec_data == NULL)
-       {       psf->error = SFE_INTERNAL ;
-               return PSF_SEEK_ERROR ;
-               } ;
-
-       ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-       if (mode == SFM_READ && ppaf24->write_count > 0)
-               paf24_write_block (psf, ppaf24) ;
-
-       newblock        = offset / PAF24_SAMPLES_PER_BLOCK ;
-       newsample       = offset % PAF24_SAMPLES_PER_BLOCK ;
-
-       switch (mode)
-       {       case SFM_READ :
-                               if (psf->last_op == SFM_WRITE && ppaf24->write_count)
-                                       paf24_write_block (psf, ppaf24) ;
-
-                               psf_fseek (psf, psf->dataoffset + newblock * ppaf24->blocksize, SEEK_SET) ;
-                               ppaf24->read_block = newblock ;
-                               paf24_read_block (psf, ppaf24) ;
-                               ppaf24->read_count = newsample ;
-                               break ;
-
-               case SFM_WRITE :
-                               if (offset > ppaf24->sample_count)
-                               {       psf->error = SFE_BAD_SEEK ;
-                                       return PSF_SEEK_ERROR ;
-                                       } ;
-
-                               if (psf->last_op == SFM_WRITE && ppaf24->write_count)
-                                       paf24_write_block (psf, ppaf24) ;
-
-                               psf_fseek (psf, psf->dataoffset + newblock * ppaf24->blocksize, SEEK_SET) ;
-                               ppaf24->write_block = newblock ;
-                               paf24_read_block (psf, ppaf24) ;
-                               ppaf24->write_count = newsample ;
-                               break ;
-
-               default :
-                               psf->error = SFE_BAD_SEEK ;
-                               return PSF_SEEK_ERROR ;
-               } ;
-
-       return newblock * PAF24_SAMPLES_PER_BLOCK + newsample ;
-} /* paf24_seek */
-
-static int
-paf24_close (SF_PRIVATE *psf)
-{      PAF24_PRIVATE *ppaf24 ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-
-       ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       if (ppaf24->write_count > 0)
-                       paf24_write_block (psf, ppaf24) ;
-               } ;
-
-       return 0 ;
-} /* paf24_close */
-
-/*---------------------------------------------------------------------------
-*/
-static int
-paf24_read_block (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24)
-{      int                             k, channel ;
-       unsigned char   *cptr ;
-
-       ppaf24->read_block ++ ;
-       ppaf24->read_count = 0 ;
-
-       if (ppaf24->read_block * PAF24_SAMPLES_PER_BLOCK > ppaf24->sample_count)
-       {       memset (ppaf24->samples, 0, PAF24_SAMPLES_PER_BLOCK * ppaf24->channels) ;
-               return 1 ;
-               } ;
-
-       /* Read the block. */
-       if ((k = psf_fread (ppaf24->block, 1, ppaf24->blocksize, psf)) != ppaf24->blocksize)
-               psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, ppaf24->blocksize) ;
-
-
-       /* Do endian swapping if necessary. */
-       if (psf->endian == SF_ENDIAN_BIG)
-               endswap_int_array       (ppaf24->data, 8 * ppaf24->channels) ;
-
-       /* Unpack block. */
-       for (k = 0 ; k < PAF24_SAMPLES_PER_BLOCK * ppaf24->channels ; k++)
-       {       channel = k % ppaf24->channels ;
-               cptr = ppaf24->block + PAF24_BLOCK_SIZE * channel + 3 * (k / ppaf24->channels) ;
-               ppaf24->samples [k] = (cptr [0] << 8) | (cptr [1] << 16) | (cptr [2] << 24) ;
-               } ;
-
-       return 1 ;
-} /* paf24_read_block */
-
-static int
-paf24_read (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24, int *ptr, int len)
-{      int     count, total = 0 ;
-
-       while (total < len)
-       {       if (ppaf24->read_block * PAF24_SAMPLES_PER_BLOCK >= ppaf24->sample_count)
-               {       memset (&(ptr [total]), 0, (len - total) * sizeof (int)) ;
-                       return total ;
-                       } ;
-
-               if (ppaf24->read_count >= PAF24_SAMPLES_PER_BLOCK)
-                       paf24_read_block (psf, ppaf24) ;
-
-               count = (PAF24_SAMPLES_PER_BLOCK - ppaf24->read_count) * ppaf24->channels ;
-               count = (len - total > count) ? count : len - total ;
-
-               memcpy (&(ptr [total]), &(ppaf24->samples [ppaf24->read_count * ppaf24->channels]), count * sizeof (int)) ;
-               total += count ;
-               ppaf24->read_count += count / ppaf24->channels ;
-               } ;
-
-       return total ;
-} /* paf24_read */
-
-static sf_count_t
-paf24_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      BUF_UNION               ubuf ;
-       PAF24_PRIVATE   *ppaf24 ;
-       int                             *iptr ;
-       int                             k, bufferlen, readcount, count ;
-       sf_count_t              total = 0 ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-       iptr = ubuf.ibuf ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = paf24_read (psf, ppaf24, iptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = iptr [k] >> 16 ;
-               total += count ;
-               len -= readcount ;
-               } ;
-       return total ;
-} /* paf24_read_s */
-
-static sf_count_t
-paf24_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      PAF24_PRIVATE *ppaf24 ;
-       int                             total ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-       total = paf24_read (psf, ppaf24, ptr, len) ;
-
-       return total ;
-} /* paf24_read_i */
-
-static sf_count_t
-paf24_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      BUF_UNION               ubuf ;
-       PAF24_PRIVATE   *ppaf24 ;
-       int                             *iptr ;
-       int                             k, bufferlen, readcount, count ;
-       sf_count_t              total = 0 ;
-       float                   normfact ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? (1.0 / 0x80000000) : (1.0 / 0x100) ;
-
-       iptr = ubuf.ibuf ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = paf24_read (psf, ppaf24, iptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = normfact * iptr [k] ;
-               total += count ;
-               len -= readcount ;
-               } ;
-       return total ;
-} /* paf24_read_f */
-
-static sf_count_t
-paf24_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      BUF_UNION               ubuf ;
-       PAF24_PRIVATE   *ppaf24 ;
-       int                             *iptr ;
-       int                             k, bufferlen, readcount, count ;
-       sf_count_t              total = 0 ;
-       double                  normfact ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? (1.0 / 0x80000000) : (1.0 / 0x100) ;
-
-       iptr = ubuf.ibuf ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = paf24_read (psf, ppaf24, iptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = normfact * iptr [k] ;
-               total += count ;
-               len -= readcount ;
-               } ;
-       return total ;
-} /* paf24_read_d */
-
-/*---------------------------------------------------------------------------
-*/
-
-static int
-paf24_write_block (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24)
-{      int                             k, nextsample, channel ;
-       unsigned char   *cptr ;
-
-       /* First pack block. */
-
-       if (CPU_IS_LITTLE_ENDIAN)
-       {       for (k = 0 ; k < PAF24_SAMPLES_PER_BLOCK * ppaf24->channels ; k++)
-               {       channel = k % ppaf24->channels ;
-                       cptr = ppaf24->block + PAF24_BLOCK_SIZE * channel + 3 * (k / ppaf24->channels) ;
-                       nextsample = ppaf24->samples [k] >> 8 ;
-                       cptr [0] = nextsample ;
-                       cptr [1] = nextsample >> 8 ;
-                       cptr [2] = nextsample >> 16 ;
-                       } ;
-
-               /* Do endian swapping if necessary. */
-               if (psf->endian == SF_ENDIAN_BIG)
-                       endswap_int_array (ppaf24->data, 8 * ppaf24->channels) ;
-               }
-       else if (CPU_IS_BIG_ENDIAN)
-       {       /* This is correct. */
-               for (k = 0 ; k < PAF24_SAMPLES_PER_BLOCK * ppaf24->channels ; k++)
-               {       channel = k % ppaf24->channels ;
-                       cptr = ppaf24->block + PAF24_BLOCK_SIZE * channel + 3 * (k / ppaf24->channels) ;
-                       nextsample = ppaf24->samples [k] >> 8 ;
-                       cptr [0] = nextsample ;
-                       cptr [1] = nextsample >> 8 ;
-                       cptr [2] = nextsample >> 16 ;
-                       } ;
-               if (psf->endian == SF_ENDIAN_BIG)
-                       endswap_int_array (ppaf24->data, 8 * ppaf24->channels) ;
-               } ;
-
-       /* Write block to disk. */
-       if ((k = psf_fwrite (ppaf24->block, 1, ppaf24->blocksize, psf)) != ppaf24->blocksize)
-               psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, ppaf24->blocksize) ;
-
-       if (ppaf24->sample_count < ppaf24->write_block * PAF24_SAMPLES_PER_BLOCK + ppaf24->write_count)
-               ppaf24->sample_count = ppaf24->write_block * PAF24_SAMPLES_PER_BLOCK + ppaf24->write_count ;
-
-       if (ppaf24->write_count == PAF24_SAMPLES_PER_BLOCK)
-       {       ppaf24->write_block ++ ;
-               ppaf24->write_count = 0 ;
-               } ;
-
-       return 1 ;
-} /* paf24_write_block */
-
-static int
-paf24_write (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24, const int *ptr, int len)
-{      int             count, total = 0 ;
-
-       while (total < len)
-       {       count = (PAF24_SAMPLES_PER_BLOCK - ppaf24->write_count) * ppaf24->channels ;
-
-               if (count > len - total)
-                       count = len - total ;
-
-               memcpy (&(ppaf24->samples [ppaf24->write_count * ppaf24->channels]), &(ptr [total]), count * sizeof (int)) ;
-               total += count ;
-               ppaf24->write_count += count / ppaf24->channels ;
-
-               if (ppaf24->write_count >= PAF24_SAMPLES_PER_BLOCK)
-                       paf24_write_block (psf, ppaf24) ;
-               } ;
-
-       return total ;
-} /* paf24_write */
-
-static sf_count_t
-paf24_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      BUF_UNION               ubuf ;
-       PAF24_PRIVATE   *ppaf24 ;
-       int                             *iptr ;
-       int                             k, bufferlen, writecount = 0, count ;
-       sf_count_t              total = 0 ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-       iptr = ubuf.ibuf ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : len ;
-               for (k = 0 ; k < writecount ; k++)
-                       iptr [k] = ptr [total + k] << 16 ;
-               count = paf24_write (psf, ppaf24, iptr, writecount) ;
-               total += count ;
-               len -= writecount ;
-               if (count != writecount)
-                       break ;
-               } ;
-       return total ;
-} /* paf24_write_s */
-
-static sf_count_t
-paf24_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      PAF24_PRIVATE   *ppaf24 ;
-       int                             writecount, count ;
-       sf_count_t              total = 0 ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-       while (len > 0)
-       {       writecount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-               count = paf24_write (psf, ppaf24, ptr, writecount) ;
-
-               total += count ;
-               len -= count ;
-               if (count != writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* paf24_write_i */
-
-static sf_count_t
-paf24_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      BUF_UNION               ubuf ;
-       PAF24_PRIVATE   *ppaf24 ;
-       int                             *iptr ;
-       int                             k, bufferlen, writecount = 0, count ;
-       sf_count_t              total = 0 ;
-       float                   normfact ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFFFFFF) : (1.0 / 0x100) ;
-
-       iptr = ubuf.ibuf ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : len ;
-               for (k = 0 ; k < writecount ; k++)
-                       iptr [k] = lrintf (normfact * ptr [total + k]) ;
-               count = paf24_write (psf, ppaf24, iptr, writecount) ;
-               total += count ;
-               len -= writecount ;
-               if (count != writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* paf24_write_f */
-
-static sf_count_t
-paf24_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      BUF_UNION               ubuf ;
-       PAF24_PRIVATE   *ppaf24 ;
-       int                             *iptr ;
-       int                             k, bufferlen, writecount = 0, count ;
-       sf_count_t              total = 0 ;
-       double                  normfact ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       ppaf24 = (PAF24_PRIVATE*) psf->codec_data ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7FFFFFFF) : (1.0 / 0x100) ;
-
-       iptr = ubuf.ibuf ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : len ;
-               for (k = 0 ; k < writecount ; k++)
-                       iptr [k] = lrint (normfact * ptr [total+k]) ;
-               count = paf24_write (psf, ppaf24, iptr, writecount) ;
-               total += count ;
-               len -= writecount ;
-               if (count != writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* paf24_write_d */
-
diff --git a/libs/libsndfile/src/pcm.c b/libs/libsndfile/src/pcm.c
deleted file mode 100644 (file)
index 8a06858..0000000
+++ /dev/null
@@ -1,2961 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include <math.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-/* Need to be able to handle 3 byte (24 bit) integers. So defined a
-** type and use SIZEOF_TRIBYTE instead of (tribyte).
-*/
-
-typedef        void    tribyte ;
-
-#define        SIZEOF_TRIBYTE  3
-
-static sf_count_t      pcm_read_sc2s   (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_uc2s   (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_bes2s  (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_les2s  (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_bet2s  (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_let2s  (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_bei2s  (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_lei2s  (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-
-static sf_count_t      pcm_read_sc2i   (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_uc2i   (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_bes2i  (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_les2i  (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_bet2i  (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_let2i  (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_bei2i  (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_lei2i  (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-
-static sf_count_t      pcm_read_sc2f   (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_uc2f   (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_bes2f  (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_les2f  (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_bet2f  (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_let2f  (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_bei2f  (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_lei2f  (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-
-static sf_count_t      pcm_read_sc2d   (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_uc2d   (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_bes2d  (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_les2d  (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_bet2d  (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_let2d  (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_bei2d  (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static sf_count_t      pcm_read_lei2d  (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t      pcm_write_s2sc  (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_s2uc  (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_s2bes (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_s2les (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_s2bet (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_s2let (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_s2bei (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_s2lei (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-
-static sf_count_t      pcm_write_i2sc  (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_i2uc  (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_i2bes (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_i2les (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_i2bet (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_i2let (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_i2bei (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_i2lei (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-
-static sf_count_t      pcm_write_f2sc  (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_f2uc  (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_f2bes (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_f2les (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_f2bet (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_f2let (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_f2bei (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_f2lei (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-
-static sf_count_t      pcm_write_d2sc  (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_d2uc  (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_d2bes (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_d2les (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_d2bet (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_d2let (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_d2bei (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-static sf_count_t      pcm_write_d2lei (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-/*-----------------------------------------------------------------------------------------------
-*/
-
-enum
-{      /* Char type for 8 bit files. */
-       SF_CHARS_SIGNED         = 200,
-       SF_CHARS_UNSIGNED       = 201
-} ;
-
-/*-----------------------------------------------------------------------------------------------
-*/
-
-int
-pcm_init (SF_PRIVATE *psf)
-{      int chars = 0 ;
-
-       if (psf->bytewidth == 0 || psf->sf.channels == 0)
-       {       psf_log_printf (psf, "pcm_init : internal error : bytewitdh = %d, channels = %d\n", psf->bytewidth, psf->sf.channels) ;
-               return SFE_INTERNAL ;
-               } ;
-
-       psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-       if ((SF_CODEC (psf->sf.format)) == SF_FORMAT_PCM_S8)
-               chars = SF_CHARS_SIGNED ;
-       else if ((SF_CODEC (psf->sf.format)) == SF_FORMAT_PCM_U8)
-               chars = SF_CHARS_UNSIGNED ;
-
-       if (CPU_IS_BIG_ENDIAN)
-               psf->data_endswap = (psf->endian == SF_ENDIAN_BIG) ? SF_FALSE : SF_TRUE ;
-       else
-               psf->data_endswap = (psf->endian == SF_ENDIAN_LITTLE) ? SF_FALSE : SF_TRUE ;
-
-       if (psf->file.mode == SFM_READ || psf->file.mode == SFM_RDWR)
-       {       switch (psf->bytewidth * 0x10000 + psf->endian + chars)
-               {       case (0x10000 + SF_ENDIAN_BIG + SF_CHARS_SIGNED) :
-                       case (0x10000 + SF_ENDIAN_LITTLE + SF_CHARS_SIGNED) :
-                                       psf->read_short         = pcm_read_sc2s ;
-                                       psf->read_int           = pcm_read_sc2i ;
-                                       psf->read_float         = pcm_read_sc2f ;
-                                       psf->read_double        = pcm_read_sc2d ;
-                                       break ;
-                       case (0x10000 + SF_ENDIAN_BIG + SF_CHARS_UNSIGNED) :
-                       case (0x10000 + SF_ENDIAN_LITTLE + SF_CHARS_UNSIGNED) :
-                                       psf->read_short         = pcm_read_uc2s ;
-                                       psf->read_int           = pcm_read_uc2i ;
-                                       psf->read_float         = pcm_read_uc2f ;
-                                       psf->read_double        = pcm_read_uc2d ;
-                                       break ;
-
-                       case (2 * 0x10000 + SF_ENDIAN_BIG) :
-                                       psf->read_short         = pcm_read_bes2s ;
-                                       psf->read_int           = pcm_read_bes2i ;
-                                       psf->read_float         = pcm_read_bes2f ;
-                                       psf->read_double        = pcm_read_bes2d ;
-                                       break ;
-                       case (3 * 0x10000 + SF_ENDIAN_BIG) :
-                                       psf->read_short         = pcm_read_bet2s ;
-                                       psf->read_int           = pcm_read_bet2i ;
-                                       psf->read_float         = pcm_read_bet2f ;
-                                       psf->read_double        = pcm_read_bet2d ;
-                                       break ;
-                       case (4 * 0x10000 + SF_ENDIAN_BIG) :
-
-                                       psf->read_short         = pcm_read_bei2s ;
-                                       psf->read_int           = pcm_read_bei2i ;
-                                       psf->read_float         = pcm_read_bei2f ;
-                                       psf->read_double        = pcm_read_bei2d ;
-                                       break ;
-
-                       case (2 * 0x10000 + SF_ENDIAN_LITTLE) :
-                                       psf->read_short         = pcm_read_les2s ;
-                                       psf->read_int           = pcm_read_les2i ;
-                                       psf->read_float         = pcm_read_les2f ;
-                                       psf->read_double        = pcm_read_les2d ;
-                                       break ;
-                       case (3 * 0x10000 + SF_ENDIAN_LITTLE) :
-                                       psf->read_short         = pcm_read_let2s ;
-                                       psf->read_int           = pcm_read_let2i ;
-                                       psf->read_float         = pcm_read_let2f ;
-                                       psf->read_double        = pcm_read_let2d ;
-                                       break ;
-                       case (4 * 0x10000 + SF_ENDIAN_LITTLE) :
-                                       psf->read_short         = pcm_read_lei2s ;
-                                       psf->read_int           = pcm_read_lei2i ;
-                                       psf->read_float         = pcm_read_lei2f ;
-                                       psf->read_double        = pcm_read_lei2d ;
-                                       break ;
-                       default :
-                               psf_log_printf (psf, "pcm.c returning SFE_UNIMPLEMENTED\nbytewidth %d    endian %d\n", psf->bytewidth, psf->endian) ;
-                               return SFE_UNIMPLEMENTED ;
-                       } ;
-               } ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       switch (psf->bytewidth * 0x10000 + psf->endian + chars)
-               {       case (0x10000 + SF_ENDIAN_BIG + SF_CHARS_SIGNED) :
-                       case (0x10000 + SF_ENDIAN_LITTLE + SF_CHARS_SIGNED) :
-                                       psf->write_short        = pcm_write_s2sc ;
-                                       psf->write_int          = pcm_write_i2sc ;
-                                       psf->write_float        = pcm_write_f2sc ;
-                                       psf->write_double       = pcm_write_d2sc ;
-                                       break ;
-                       case (0x10000 + SF_ENDIAN_BIG + SF_CHARS_UNSIGNED) :
-                       case (0x10000 + SF_ENDIAN_LITTLE + SF_CHARS_UNSIGNED) :
-                                       psf->write_short        = pcm_write_s2uc ;
-                                       psf->write_int          = pcm_write_i2uc ;
-                                       psf->write_float        = pcm_write_f2uc ;
-                                       psf->write_double       = pcm_write_d2uc ;
-                                       break ;
-
-                       case (2 * 0x10000 + SF_ENDIAN_BIG) :
-                                       psf->write_short        = pcm_write_s2bes ;
-                                       psf->write_int          = pcm_write_i2bes ;
-                                       psf->write_float        = pcm_write_f2bes ;
-                                       psf->write_double       = pcm_write_d2bes ;
-                                       break ;
-
-                       case (3 * 0x10000 + SF_ENDIAN_BIG) :
-                                       psf->write_short        = pcm_write_s2bet ;
-                                       psf->write_int          = pcm_write_i2bet ;
-                                       psf->write_float        = pcm_write_f2bet ;
-                                       psf->write_double       = pcm_write_d2bet ;
-                                       break ;
-
-                       case (4 * 0x10000 + SF_ENDIAN_BIG) :
-                                       psf->write_short        = pcm_write_s2bei ;
-                                       psf->write_int          = pcm_write_i2bei ;
-                                       psf->write_float        = pcm_write_f2bei ;
-                                       psf->write_double       = pcm_write_d2bei ;
-                                       break ;
-
-                       case (2 * 0x10000 + SF_ENDIAN_LITTLE) :
-                                       psf->write_short        = pcm_write_s2les ;
-                                       psf->write_int          = pcm_write_i2les ;
-                                       psf->write_float        = pcm_write_f2les ;
-                                       psf->write_double       = pcm_write_d2les ;
-                                       break ;
-
-                       case (3 * 0x10000 + SF_ENDIAN_LITTLE) :
-                                       psf->write_short        = pcm_write_s2let ;
-                                       psf->write_int          = pcm_write_i2let ;
-                                       psf->write_float        = pcm_write_f2let ;
-                                       psf->write_double       = pcm_write_d2let ;
-                                       break ;
-
-                       case (4 * 0x10000 + SF_ENDIAN_LITTLE) :
-                                       psf->write_short        = pcm_write_s2lei ;
-                                       psf->write_int          = pcm_write_i2lei ;
-                                       psf->write_float        = pcm_write_f2lei ;
-                                       psf->write_double       = pcm_write_d2lei ;
-                                       break ;
-
-                       default :
-                               psf_log_printf (psf, "pcm.c returning SFE_UNIMPLEMENTED\nbytewidth %s    endian %d\n", psf->bytewidth, psf->endian) ;
-                               return SFE_UNIMPLEMENTED ;
-                       } ;
-
-               } ;
-
-       if (psf->filelength > psf->dataoffset)
-       {       psf->datalength = (psf->dataend > 0) ? psf->dataend - psf->dataoffset :
-                                                       psf->filelength - psf->dataoffset ;
-               }
-       else
-               psf->datalength = 0 ;
-
-       psf->sf.frames = psf->blockwidth > 0 ? psf->datalength / psf->blockwidth : 0 ;
-
-       return 0 ;
-} /* pcm_init */
-
-/*==============================================================================
-*/
-
-static inline void
-sc2s_array     (signed char *src, int count, short *dest)
-{      while (--count >= 0)
-       {       dest [count] = src [count] << 8 ;
-               } ;
-} /* sc2s_array */
-
-static inline void
-uc2s_array     (unsigned char *src, int count, short *dest)
-{      while (--count >= 0)
-       {       dest [count] = (((short) src [count]) - 0x80) << 8 ;
-               } ;
-} /* uc2s_array */
-
-static inline void
-let2s_array (tribyte *src, int count, short *dest)
-{      unsigned char   *ucptr ;
-
-       ucptr = ((unsigned char*) src) + 3 * count ;
-       while (--count >= 0)
-       {       ucptr -= 3 ;
-               dest [count] = LET2H_16_PTR (ucptr) ;
-               } ;
-} /* let2s_array */
-
-static inline void
-bet2s_array (tribyte *src, int count, short *dest)
-{      unsigned char   *ucptr ;
-
-       ucptr = ((unsigned char*) src) + 3 * count ;
-       while (--count >= 0)
-       {       ucptr -= 3 ;
-               dest [count] = BET2H_16_PTR (ucptr) ;
-                       } ;
-} /* bet2s_array */
-
-static inline void
-lei2s_array (int *src, int count, short *dest)
-{      int value ;
-
-       while (--count >= 0)
-       {       value = LE2H_32 (src [count]) ;
-               dest [count] = value >> 16 ;
-               } ;
-} /* lei2s_array */
-
-static inline void
-bei2s_array (int *src, int count, short *dest)
-{      int value ;
-
-       while (--count >= 0)
-       {       value = BE2H_32 (src [count]) ;
-               dest [count] = value >> 16 ;
-               } ;
-} /* bei2s_array */
-
-/*--------------------------------------------------------------------------
-*/
-
-static inline void
-sc2i_array     (signed char *src, int count, int *dest)
-{      while (--count >= 0)
-       {       dest [count] = ((int) src [count]) << 24 ;
-               } ;
-} /* sc2i_array */
-
-static inline void
-uc2i_array     (unsigned char *src, int count, int *dest)
-{      while (--count >= 0)
-       {       dest [count] = (((int) src [count]) - 128) << 24 ;
-               } ;
-} /* uc2i_array */
-
-static inline void
-bes2i_array (short *src, int count, int *dest)
-{      short value ;
-
-       while (--count >= 0)
-       {       value = BE2H_16 (src [count]) ;
-               dest [count] = value << 16 ;
-               } ;
-} /* bes2i_array */
-
-static inline void
-les2i_array (short *src, int count, int *dest)
-{      short value ;
-
-       while (--count >= 0)
-       {       value = LE2H_16 (src [count]) ;
-               dest [count] = value << 16 ;
-               } ;
-} /* les2i_array */
-
-static inline void
-bet2i_array (tribyte *src, int count, int *dest)
-{      unsigned char   *ucptr ;
-
-       ucptr = ((unsigned char*) src) + 3 * count ;
-       while (--count >= 0)
-       {       ucptr -= 3 ;
-               dest [count] = BET2H_32_PTR (ucptr) ;
-                       } ;
-} /* bet2i_array */
-
-static inline void
-let2i_array (tribyte *src, int count, int *dest)
-{      unsigned char   *ucptr ;
-
-       ucptr = ((unsigned char*) src) + 3 * count ;
-       while (--count >= 0)
-       {       ucptr -= 3 ;
-               dest [count] = LET2H_32_PTR (ucptr) ;
-               } ;
-} /* let2i_array */
-
-/*--------------------------------------------------------------------------
-*/
-
-static inline void
-sc2f_array     (signed char *src, int count, float *dest, float normfact)
-{      while (--count >= 0)
-               dest [count] = ((float) src [count]) * normfact ;
-} /* sc2f_array */
-
-static inline void
-uc2f_array     (unsigned char *src, int count, float *dest, float normfact)
-{      while (--count >= 0)
-               dest [count] = (((int) src [count]) - 128) * normfact ;
-} /* uc2f_array */
-
-static inline void
-les2f_array (short *src, int count, float *dest, float normfact)
-{      short   value ;
-
-       while (--count >= 0)
-       {       value = src [count] ;
-               value = LE2H_16 (value) ;
-               dest [count] = ((float) value) * normfact ;
-               } ;
-} /* les2f_array */
-
-static inline void
-bes2f_array (short *src, int count, float *dest, float normfact)
-{      short                   value ;
-
-       while (--count >= 0)
-       {       value = src [count] ;
-               value = BE2H_16 (value) ;
-               dest [count] = ((float) value) * normfact ;
-               } ;
-} /* bes2f_array */
-
-static inline void
-let2f_array (tribyte *src, int count, float *dest, float normfact)
-{      unsigned char   *ucptr ;
-       int                     value ;
-
-       ucptr = ((unsigned char*) src) + 3 * count ;
-       while (--count >= 0)
-       {       ucptr -= 3 ;
-               value = LET2H_32_PTR (ucptr) ;
-               dest [count] = ((float) value) * normfact ;
-               } ;
-} /* let2f_array */
-
-static inline void
-bet2f_array (tribyte *src, int count, float *dest, float normfact)
-{      unsigned char   *ucptr ;
-       int                             value ;
-
-       ucptr = ((unsigned char*) src) + 3 * count ;
-       while (--count >= 0)
-       {       ucptr -= 3 ;
-               value = BET2H_32_PTR (ucptr) ;
-               dest [count] = ((float) value) * normfact ;
-                       } ;
-} /* bet2f_array */
-
-static inline void
-lei2f_array (int *src, int count, float *dest, float normfact)
-{      int                     value ;
-
-       while (--count >= 0)
-       {       value = src [count] ;
-               value = LE2H_32 (value) ;
-               dest [count] = ((float) value) * normfact ;
-               } ;
-} /* lei2f_array */
-
-static inline void
-bei2f_array (int *src, int count, float *dest, float normfact)
-{      int                     value ;
-
-       while (--count >= 0)
-       {       value = src [count] ;
-               value = BE2H_32 (value) ;
-               dest [count] = ((float) value) * normfact ;
-               } ;
-} /* bei2f_array */
-
-/*--------------------------------------------------------------------------
-*/
-
-static inline void
-sc2d_array     (signed char *src, int count, double *dest, double normfact)
-{      while (--count >= 0)
-               dest [count] = ((double) src [count]) * normfact ;
-} /* sc2d_array */
-
-static inline void
-uc2d_array     (unsigned char *src, int count, double *dest, double normfact)
-{      while (--count >= 0)
-               dest [count] = (((int) src [count]) - 128) * normfact ;
-} /* uc2d_array */
-
-static inline void
-les2d_array (short *src, int count, double *dest, double normfact)
-{      short   value ;
-
-       while (--count >= 0)
-       {       value = src [count] ;
-               value = LE2H_16 (value) ;
-               dest [count] = ((double) value) * normfact ;
-               } ;
-} /* les2d_array */
-
-static inline void
-bes2d_array (short *src, int count, double *dest, double normfact)
-{      short   value ;
-
-       while (--count >= 0)
-       {       value = src [count] ;
-               value = BE2H_16 (value) ;
-               dest [count] = ((double) value) * normfact ;
-               } ;
-} /* bes2d_array */
-
-static inline void
-let2d_array (tribyte *src, int count, double *dest, double normfact)
-{      unsigned char   *ucptr ;
-       int                             value ;
-
-       ucptr = ((unsigned char*) src) + 3 * count ;
-       while (--count >= 0)
-       {       ucptr -= 3 ;
-               value = LET2H_32_PTR (ucptr) ;
-               dest [count] = ((double) value) * normfact ;
-               } ;
-} /* let2d_array */
-
-static inline void
-bet2d_array (tribyte *src, int count, double *dest, double normfact)
-{      unsigned char   *ucptr ;
-       int                             value ;
-
-       ucptr = ((unsigned char*) src) + 3 * count ;
-       while (--count >= 0)
-       {       ucptr -= 3 ;
-               value = (ucptr [0] << 24) | (ucptr [1] << 16) | (ucptr [2] << 8) ;
-               dest [count] = ((double) value) * normfact ;
-               } ;
-} /* bet2d_array */
-
-static inline void
-lei2d_array (int *src, int count, double *dest, double normfact)
-{      int     value ;
-
-       while (--count >= 0)
-       {       value = src [count] ;
-               value = LE2H_32 (value) ;
-               dest [count] = ((double) value) * normfact ;
-               } ;
-} /* lei2d_array */
-
-static inline void
-bei2d_array (int *src, int count, double *dest, double normfact)
-{      int     value ;
-
-       while (--count >= 0)
-       {       value = src [count] ;
-               value = BE2H_32 (value) ;
-               dest [count] = ((double) value) * normfact ;
-               } ;
-} /* bei2d_array */
-
-/*--------------------------------------------------------------------------
-*/
-
-static inline void
-s2sc_array     (const short *src, signed char *dest, int count)
-{      while (--count >= 0)
-               dest [count] = src [count] >> 8 ;
-} /* s2sc_array */
-
-static inline void
-s2uc_array     (const short *src, unsigned char *dest, int count)
-{      while (--count >= 0)
-               dest [count] = (src [count] >> 8) + 0x80 ;
-} /* s2uc_array */
-
-static inline void
-s2let_array (const short *src, tribyte *dest, int count)
-{      unsigned char   *ucptr ;
-
-       ucptr = ((unsigned char*) dest) + 3 * count ;
-       while (--count >= 0)
-       {       ucptr -= 3 ;
-               ucptr [0] = 0 ;
-               ucptr [1] = src [count] ;
-               ucptr [2] = src [count] >> 8 ;
-               } ;
-} /* s2let_array */
-
-static inline void
-s2bet_array (const short *src, tribyte *dest, int count)
-{      unsigned char   *ucptr ;
-
-       ucptr = ((unsigned char*) dest) + 3 * count ;
-       while (--count >= 0)
-       {       ucptr -= 3 ;
-               ucptr [2] = 0 ;
-               ucptr [1] = src [count] ;
-               ucptr [0] = src [count] >> 8 ;
-               } ;
-} /* s2bet_array */
-
-static inline void
-s2lei_array (const short *src, int *dest, int count)
-{      unsigned char   *ucptr ;
-
-       ucptr = ((unsigned char*) dest) + 4 * count ;
-       while (--count >= 0)
-       {       ucptr -= 4 ;
-               ucptr [0] = 0 ;
-               ucptr [1] = 0 ;
-               ucptr [2] = src [count] ;
-               ucptr [3] = src [count] >> 8 ;
-               } ;
-} /* s2lei_array */
-
-static inline void
-s2bei_array (const short *src, int *dest, int count)
-{      unsigned char   *ucptr ;
-
-       ucptr = ((unsigned char*) dest) + 4 * count ;
-       while (--count >= 0)
-       {       ucptr -= 4 ;
-               ucptr [0] = src [count] >> 8 ;
-               ucptr [1] = src [count] ;
-               ucptr [2] = 0 ;
-               ucptr [3] = 0 ;
-               } ;
-} /* s2bei_array */
-
-/*--------------------------------------------------------------------------
-*/
-
-static inline void
-i2sc_array     (const int *src, signed char *dest, int count)
-{      while (--count >= 0)
-               dest [count] = (src [count] >> 24) ;
-} /* i2sc_array */
-
-static inline void
-i2uc_array     (const int *src, unsigned char *dest, int count)
-{      while (--count >= 0)
-               dest [count] = ((src [count] >> 24) + 128) ;
-} /* i2uc_array */
-
-static inline void
-i2bes_array (const int *src, short *dest, int count)
-{      unsigned char   *ucptr ;
-
-       ucptr = ((unsigned char*) dest) + 2 * count ;
-       while (--count >= 0)
-       {       ucptr -= 2 ;
-               ucptr [0] = src [count] >> 24 ;
-               ucptr [1] = src [count] >> 16 ;
-               } ;
-} /* i2bes_array */
-
-static inline void
-i2les_array (const int *src, short *dest, int count)
-{      unsigned char   *ucptr ;
-
-       ucptr = ((unsigned char*) dest) + 2 * count ;
-       while (--count >= 0)
-       {       ucptr -= 2 ;
-               ucptr [0] = src [count] >> 16 ;
-               ucptr [1] = src [count] >> 24 ;
-               } ;
-} /* i2les_array */
-
-static inline void
-i2let_array (const int *src, tribyte *dest, int count)
-{      unsigned char   *ucptr ;
-       int                             value ;
-
-       ucptr = ((unsigned char*) dest) + 3 * count ;
-       while (--count >= 0)
-       {       ucptr -= 3 ;
-               value = src [count] >> 8 ;
-               ucptr [0] = value ;
-               ucptr [1] = value >> 8 ;
-               ucptr [2] = value >> 16 ;
-               } ;
-} /* i2let_array */
-
-static inline void
-i2bet_array (const int *src, tribyte *dest, int count)
-{      unsigned char   *ucptr ;
-       int                             value ;
-
-       ucptr = ((unsigned char*) dest) + 3 * count ;
-       while (--count >= 0)
-       {       ucptr -= 3 ;
-               value = src [count] >> 8 ;
-               ucptr [2] = value ;
-               ucptr [1] = value >> 8 ;
-               ucptr [0] = value >> 16 ;
-               } ;
-} /* i2bet_array */
-
-/*===============================================================================================
-*/
-
-static sf_count_t
-pcm_read_sc2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.scbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-               sc2s_array (ubuf.scbuf, readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_sc2s */
-
-static sf_count_t
-pcm_read_uc2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ucbuf, sizeof (unsigned char), bufferlen, psf) ;
-               uc2s_array (ubuf.ucbuf, readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_uc2s */
-
-static sf_count_t
-pcm_read_bes2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      int             total ;
-
-       total = psf_fread (ptr, sizeof (short), len, psf) ;
-       if (CPU_IS_LITTLE_ENDIAN)
-               endswap_short_array (ptr, len) ;
-
-       return total ;
-} /* pcm_read_bes2s */
-
-static sf_count_t
-pcm_read_les2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      int             total ;
-
-       total = psf_fread (ptr, sizeof (short), len, psf) ;
-       if (CPU_IS_BIG_ENDIAN)
-               endswap_short_array (ptr, len) ;
-
-       return total ;
-} /* pcm_read_les2s */
-
-static sf_count_t
-pcm_read_bet2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-               bet2s_array ((tribyte*) (ubuf.ucbuf), readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_bet2s */
-
-static sf_count_t
-pcm_read_let2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-               let2s_array ((tribyte*) (ubuf.ucbuf), readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_let2s */
-
-static sf_count_t
-pcm_read_bei2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-               bei2s_array (ubuf.ibuf, readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_bei2s */
-
-static sf_count_t
-pcm_read_lei2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-               lei2s_array (ubuf.ibuf, readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_lei2s */
-
-/*-----------------------------------------------------------------------------------------------
-*/
-
-static sf_count_t
-pcm_read_sc2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.scbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-               sc2i_array (ubuf.scbuf, readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_sc2i */
-
-static sf_count_t
-pcm_read_uc2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ucbuf, sizeof (unsigned char), bufferlen, psf) ;
-               uc2i_array (ubuf.ucbuf, readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_uc2i */
-
-static sf_count_t
-pcm_read_bes2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               bes2i_array (ubuf.sbuf, readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_bes2i */
-
-static sf_count_t
-pcm_read_les2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               les2i_array (ubuf.sbuf, readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_les2i */
-
-static sf_count_t
-pcm_read_bet2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-               bet2i_array ((tribyte*) (ubuf.ucbuf), readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_bet2i */
-
-static sf_count_t
-pcm_read_let2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-               let2i_array ((tribyte*) (ubuf.ucbuf), readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_let2i */
-
-static sf_count_t
-pcm_read_bei2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      int             total ;
-
-       total = psf_fread (ptr, sizeof (int), len, psf) ;
-       if (CPU_IS_LITTLE_ENDIAN)
-               endswap_int_array       (ptr, len) ;
-
-       return total ;
-} /* pcm_read_bei2i */
-
-static sf_count_t
-pcm_read_lei2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      int             total ;
-
-       total = psf_fread (ptr, sizeof (int), len, psf) ;
-       if (CPU_IS_BIG_ENDIAN)
-               endswap_int_array       (ptr, len) ;
-
-       return total ;
-} /* pcm_read_lei2i */
-
-/*-----------------------------------------------------------------------------------------------
-*/
-
-static sf_count_t
-pcm_read_sc2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       float   normfact ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.scbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-               sc2f_array (ubuf.scbuf, readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_sc2f */
-
-static sf_count_t
-pcm_read_uc2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       float   normfact ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ucbuf, sizeof (unsigned char), bufferlen, psf) ;
-               uc2f_array (ubuf.ucbuf, readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_uc2f */
-
-static sf_count_t
-pcm_read_bes2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       float   normfact ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               bes2f_array (ubuf.sbuf, readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_bes2f */
-
-static sf_count_t
-pcm_read_les2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       float   normfact ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               les2f_array (ubuf.sbuf, readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_les2f */
-
-static sf_count_t
-pcm_read_bet2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       float   normfact ;
-
-       /* Special normfactor because tribyte value is read into an int. */
-       normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80000000) : 1.0 / 256.0 ;
-
-       bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-               bet2f_array ((tribyte*) (ubuf.ucbuf), readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_bet2f */
-
-static sf_count_t
-pcm_read_let2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       float   normfact ;
-
-       /* Special normfactor because tribyte value is read into an int. */
-       normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80000000) : 1.0 / 256.0 ;
-
-       bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-               let2f_array ((tribyte*) (ubuf.ucbuf), readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_let2f */
-
-static sf_count_t
-pcm_read_bei2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       float   normfact ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80000000) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-               bei2f_array (ubuf.ibuf, readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_bei2f */
-
-static sf_count_t
-pcm_read_lei2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       float   normfact ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80000000) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-               lei2f_array (ubuf.ibuf, readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_lei2f */
-
-/*-----------------------------------------------------------------------------------------------
-*/
-
-static sf_count_t
-pcm_read_sc2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.scbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-               sc2d_array (ubuf.scbuf, readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_sc2d */
-
-static sf_count_t
-pcm_read_uc2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ucbuf, sizeof (unsigned char), bufferlen, psf) ;
-               uc2d_array (ubuf.ucbuf, readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_uc2d */
-
-static sf_count_t
-pcm_read_bes2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               bes2d_array (ubuf.sbuf, readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_bes2d */
-
-static sf_count_t
-pcm_read_les2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               les2d_array (ubuf.sbuf, readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_les2d */
-
-static sf_count_t
-pcm_read_bet2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80000000) : 1.0 / 256.0 ;
-
-       bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-               bet2d_array ((tribyte*) (ubuf.ucbuf), readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_bet2d */
-
-static sf_count_t
-pcm_read_let2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       /* Special normfactor because tribyte value is read into an int. */
-       normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80000000) : 1.0 / 256.0 ;
-
-       bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-               let2d_array ((tribyte*) (ubuf.ucbuf), readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_let2d */
-
-static sf_count_t
-pcm_read_bei2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80000000) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-               bei2d_array (ubuf.ibuf, readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_bei2d */
-
-static sf_count_t
-pcm_read_lei2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80000000) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-               lei2d_array (ubuf.ibuf, readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* pcm_read_lei2d */
-
-/*===============================================================================================
-**-----------------------------------------------------------------------------------------------
-**===============================================================================================
-*/
-
-static sf_count_t
-pcm_write_s2sc (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.scbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               s2sc_array (ptr + total, ubuf.scbuf, bufferlen) ;
-               writecount = psf_fwrite (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_s2sc */
-
-static sf_count_t
-pcm_write_s2uc (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               s2uc_array (ptr + total, ubuf.ucbuf, bufferlen) ;
-               writecount = psf_fwrite (ubuf.ucbuf, sizeof (unsigned char), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_s2uc */
-
-static sf_count_t
-pcm_write_s2bes        (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       if (CPU_IS_BIG_ENDIAN)
-               return psf_fwrite (ptr, sizeof (short), len, psf) ;
-       else
-
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               endswap_short_copy (ubuf.sbuf, ptr + total, bufferlen) ;
-               writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_s2bes */
-
-static sf_count_t
-pcm_write_s2les        (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       if (CPU_IS_LITTLE_ENDIAN)
-               return psf_fwrite (ptr, sizeof (short), len, psf) ;
-
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               endswap_short_copy (ubuf.sbuf, ptr + total, bufferlen) ;
-               writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_s2les */
-
-static sf_count_t
-pcm_write_s2bet        (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               s2bet_array (ptr + total, (tribyte*) (ubuf.ucbuf), bufferlen) ;
-               writecount = psf_fwrite (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_s2bet */
-
-static sf_count_t
-pcm_write_s2let        (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               s2let_array (ptr + total, (tribyte*) (ubuf.ucbuf), bufferlen) ;
-               writecount = psf_fwrite (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_s2let */
-
-static sf_count_t
-pcm_write_s2bei        (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               s2bei_array (ptr + total, ubuf.ibuf, bufferlen) ;
-               writecount = psf_fwrite (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_s2bei */
-
-static sf_count_t
-pcm_write_s2lei        (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               s2lei_array (ptr + total, ubuf.ibuf, bufferlen) ;
-               writecount = psf_fwrite (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_s2lei */
-
-/*-----------------------------------------------------------------------------------------------
-*/
-
-static sf_count_t
-pcm_write_i2sc (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.scbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               i2sc_array (ptr + total, ubuf.scbuf, bufferlen) ;
-               writecount = psf_fwrite (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_i2sc */
-
-static sf_count_t
-pcm_write_i2uc (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               i2uc_array (ptr + total, ubuf.ucbuf, bufferlen) ;
-               writecount = psf_fwrite (ubuf.ucbuf, sizeof (signed char), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_i2uc */
-
-static sf_count_t
-pcm_write_i2bes        (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               i2bes_array (ptr + total, ubuf.sbuf, bufferlen) ;
-               writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_i2bes */
-
-static sf_count_t
-pcm_write_i2les        (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               i2les_array (ptr + total, ubuf.sbuf, bufferlen) ;
-               writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_i2les */
-
-static sf_count_t
-pcm_write_i2bet        (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               i2bet_array (ptr + total, (tribyte*) (ubuf.ucbuf), bufferlen) ;
-               writecount = psf_fwrite (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_i2bet */
-
-static sf_count_t
-pcm_write_i2let        (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               i2let_array (ptr + total, (tribyte*) (ubuf.ucbuf), bufferlen) ;
-               writecount = psf_fwrite (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_i2les */
-
-static sf_count_t
-pcm_write_i2bei        (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       if (CPU_IS_BIG_ENDIAN)
-               return psf_fwrite (ptr, sizeof (int), len, psf) ;
-
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               endswap_int_copy (ubuf.ibuf, ptr + total, bufferlen) ;
-               writecount = psf_fwrite (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_i2bei */
-
-static sf_count_t
-pcm_write_i2lei        (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       if (CPU_IS_LITTLE_ENDIAN)
-               return psf_fwrite (ptr, sizeof (int), len, psf) ;
-
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               endswap_int_copy (ubuf.ibuf, ptr + total, bufferlen) ;
-               writecount = psf_fwrite (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_i2lei */
-
-/*------------------------------------------------------------------------------
-**==============================================================================
-**------------------------------------------------------------------------------
-*/
-
-static void
-f2sc_array (const float *src, signed char *dest, int count, int normalize)
-{      float normfact ;
-
-       normfact = normalize ? (1.0 * 0x7F) : 1.0 ;
-
-       while (--count >= 0)
-       {       dest [count] = lrintf (src [count] * normfact) ;
-               } ;
-} /* f2sc_array */
-
-static void
-f2sc_clip_array (const float *src, signed char *dest, int count, int normalize)
-{      float   normfact, scaled_value ;
-
-       normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x1000000) ;
-
-       while (--count >= 0)
-       {       scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-               {       dest [count] = 127 ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-               {       dest [count] = -128 ;
-                       continue ;
-                       } ;
-
-               dest [count] = lrintf (scaled_value) >> 24 ;
-               } ;
-} /* f2sc_clip_array */
-
-static sf_count_t
-pcm_write_f2sc (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       void            (*convert) (const float *, signed char *, int, int) ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       convert = (psf->add_clipping) ? f2sc_clip_array : f2sc_array ;
-       bufferlen = ARRAY_LEN (ubuf.scbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               convert (ptr + total, ubuf.scbuf, bufferlen, psf->norm_float) ;
-               writecount = psf_fwrite (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_f2sc */
-
-/*==============================================================================
-*/
-
-static void
-f2uc_array     (const float *src, unsigned char *dest, int count, int normalize)
-{      float normfact ;
-
-       normfact = normalize ? (1.0 * 0x7F) : 1.0 ;
-
-       while (--count >= 0)
-       {       dest [count] = lrintf (src [count] * normfact) + 128 ;
-               } ;
-} /* f2uc_array */
-
-static void
-f2uc_clip_array        (const float *src, unsigned char *dest, int count, int normalize)
-{      float   normfact, scaled_value ;
-
-       normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x1000000) ;
-
-       while (--count >= 0)
-       {       scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-               {       dest [count] = 0xFF ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-               {       dest [count] = 0 ;
-                       continue ;
-                       } ;
-
-               dest [count] = (lrintf (scaled_value) >> 24) + 128 ;
-               } ;
-} /* f2uc_clip_array */
-
-static sf_count_t
-pcm_write_f2uc (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       void            (*convert) (const float *, unsigned char *, int, int) ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       convert = (psf->add_clipping) ? f2uc_clip_array : f2uc_array ;
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               convert (ptr + total, ubuf.ucbuf, bufferlen, psf->norm_float) ;
-               writecount = psf_fwrite (ubuf.ucbuf, sizeof (unsigned char), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_f2uc */
-
-/*==============================================================================
-*/
-
-static void
-f2bes_array (const float *src, short *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       float                   normfact ;
-       short                   value ;
-
-       normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ;
-       ucptr = ((unsigned char*) dest) + 2 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 2 ;
-               value = lrintf (src [count] * normfact) ;
-               ucptr [1] = value ;
-               ucptr [0] = value >> 8 ;
-                       } ;
-} /* f2bes_array */
-
-static void
-f2bes_clip_array (const float *src, short *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       float                   normfact, scaled_value ;
-       int                             value ;
-
-       normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x10000) ;
-       ucptr = ((unsigned char*) dest) + 2 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 2 ;
-               scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-               {       ucptr [1] = 0xFF ;
-                       ucptr [0] = 0x7F ;
-                       continue ;
-               } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-               {       ucptr [1] = 0x00 ;
-                       ucptr [0] = 0x80 ;
-                       continue ;
-                       } ;
-
-               value = lrintf (scaled_value) ;
-               ucptr [1] = value >> 16 ;
-               ucptr [0] = value >> 24 ;
-               } ;
-} /* f2bes_clip_array */
-
-static sf_count_t
-pcm_write_f2bes        (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       void            (*convert) (const float *, short *t, int, int) ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       convert = (psf->add_clipping) ? f2bes_clip_array : f2bes_array ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               convert (ptr + total, ubuf.sbuf, bufferlen, psf->norm_float) ;
-               writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                               break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_f2bes */
-
-/*==============================================================================
-*/
-
-static void
-f2les_array (const float *src, short *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       float                   normfact ;
-       int                             value ;
-
-       normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ;
-       ucptr = ((unsigned char*) dest) + 2 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 2 ;
-               value = lrintf (src [count] * normfact) ;
-               ucptr [0] = value ;
-               ucptr [1] = value >> 8 ;
-               } ;
-} /* f2les_array */
-
-static void
-f2les_clip_array (const float *src, short *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       float                   normfact, scaled_value ;
-       int                             value ;
-
-       normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x10000) ;
-       ucptr = ((unsigned char*) dest) + 2 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 2 ;
-               scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-               {       ucptr [0] = 0xFF ;
-                       ucptr [1] = 0x7F ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-               {       ucptr [0] = 0x00 ;
-                       ucptr [1] = 0x80 ;
-                       continue ;
-                       } ;
-
-               value = lrintf (scaled_value) ;
-               ucptr [0] = value >> 16 ;
-               ucptr [1] = value >> 24 ;
-               } ;
-} /* f2les_clip_array */
-
-static sf_count_t
-pcm_write_f2les        (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       void            (*convert) (const float *, short *t, int, int) ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       convert = (psf->add_clipping) ? f2les_clip_array : f2les_array ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               convert (ptr + total, ubuf.sbuf, bufferlen, psf->norm_float) ;
-               writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_f2les */
-
-/*==============================================================================
-*/
-
-static void
-f2let_array (const float *src, tribyte *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       float                   normfact ;
-       int                             value ;
-
-       normfact = normalize ? (1.0 * 0x7FFFFF) : 1.0 ;
-       ucptr = ((unsigned char*) dest) + 3 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 3 ;
-               value = lrintf (src [count] * normfact) ;
-               ucptr [0] = value ;
-               ucptr [1] = value >> 8 ;
-               ucptr [2] = value >> 16 ;
-               } ;
-} /* f2let_array */
-
-static void
-f2let_clip_array (const float *src, tribyte *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       float                   normfact, scaled_value ;
-       int                             value ;
-
-       normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x100) ;
-       ucptr = ((unsigned char*) dest) + 3 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 3 ;
-               scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-               {       ucptr [0] = 0xFF ;
-                       ucptr [1] = 0xFF ;
-                       ucptr [2] = 0x7F ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-               {       ucptr [0] = 0x00 ;
-                       ucptr [1] = 0x00 ;
-                       ucptr [2] = 0x80 ;
-                       continue ;
-               } ;
-
-               value = lrintf (scaled_value) ;
-               ucptr [0] = value >> 8 ;
-               ucptr [1] = value >> 16 ;
-               ucptr [2] = value >> 24 ;
-               } ;
-} /* f2let_clip_array */
-
-static sf_count_t
-pcm_write_f2let        (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       void            (*convert) (const float *, tribyte *, int, int) ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       convert = (psf->add_clipping) ? f2let_clip_array : f2let_array ;
-       bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               convert (ptr + total, (tribyte*) (ubuf.ucbuf), bufferlen, psf->norm_float) ;
-               writecount = psf_fwrite (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_f2let */
-
-/*==============================================================================
-*/
-
-static void
-f2bet_array (const float *src, tribyte *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       float                   normfact ;
-       int                             value ;
-
-       normfact = normalize ? (1.0 * 0x7FFFFF) : 1.0 ;
-       ucptr = ((unsigned char*) dest) + 3 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 3 ;
-               value = lrintf (src [count] * normfact) ;
-               ucptr [0] = value >> 16 ;
-               ucptr [1] = value >> 8 ;
-               ucptr [2] = value ;
-               } ;
-} /* f2bet_array */
-
-static void
-f2bet_clip_array (const float *src, tribyte *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       float                   normfact, scaled_value ;
-       int                             value ;
-
-       normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x100) ;
-       ucptr = ((unsigned char*) dest) + 3 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 3 ;
-               scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-               {       ucptr [0] = 0x7F ;
-                       ucptr [1] = 0xFF ;
-                       ucptr [2] = 0xFF ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-               {       ucptr [0] = 0x80 ;
-                       ucptr [1] = 0x00 ;
-                       ucptr [2] = 0x00 ;
-                       continue ;
-               } ;
-
-               value = lrint (scaled_value) ;
-               ucptr [0] = value >> 24 ;
-               ucptr [1] = value >> 16 ;
-               ucptr [2] = value >> 8 ;
-               } ;
-} /* f2bet_clip_array */
-
-static sf_count_t
-pcm_write_f2bet        (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       void            (*convert) (const float *, tribyte *, int, int) ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       convert = (psf->add_clipping) ? f2bet_clip_array : f2bet_array ;
-       bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               convert (ptr + total, (tribyte*) (ubuf.ucbuf), bufferlen, psf->norm_float) ;
-               writecount = psf_fwrite (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_f2bet */
-
-/*==============================================================================
-*/
-
-static void
-f2bei_array (const float *src, int *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       float                   normfact ;
-       int                             value ;
-
-       normfact = normalize ? (1.0 * 0x7FFFFFFF) : 1.0 ;
-       ucptr = ((unsigned char*) dest) + 4 * count ;
-       while (--count >= 0)
-       {       ucptr -= 4 ;
-               value = lrintf (src [count] * normfact) ;
-               ucptr [0] = value >> 24 ;
-               ucptr [1] = value >> 16 ;
-               ucptr [2] = value >> 8 ;
-               ucptr [3] = value ;
-               } ;
-} /* f2bei_array */
-
-static void
-f2bei_clip_array (const float *src, int *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       float                   normfact, scaled_value ;
-       int                             value ;
-
-       normfact = normalize ? (8.0 * 0x10000000) : 1.0 ;
-       ucptr = ((unsigned char*) dest) + 4 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 4 ;
-               scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= 1.0 * 0x7FFFFFFF)
-               {       ucptr [0] = 0x7F ;
-                       ucptr [1] = 0xFF ;
-                       ucptr [2] = 0xFF ;
-                       ucptr [3] = 0xFF ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-               {       ucptr [0] = 0x80 ;
-                       ucptr [1] = 0x00 ;
-                       ucptr [2] = 0x00 ;
-                       ucptr [3] = 0x00 ;
-                       continue ;
-               } ;
-
-               value = lrintf (scaled_value) ;
-               ucptr [0] = value >> 24 ;
-               ucptr [1] = value >> 16 ;
-               ucptr [2] = value >> 8 ;
-               ucptr [3] = value ;
-               } ;
-} /* f2bei_clip_array */
-
-static sf_count_t
-pcm_write_f2bei        (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       void            (*convert) (const float *, int *, int, int) ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       convert = (psf->add_clipping) ? f2bei_clip_array : f2bei_array ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               convert (ptr + total, ubuf.ibuf, bufferlen, psf->norm_float) ;
-               writecount = psf_fwrite (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_f2bei */
-
-/*==============================================================================
-*/
-
-static void
-f2lei_array (const float *src, int *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       float                   normfact ;
-       int                             value ;
-
-       normfact = normalize ? (1.0 * 0x7FFFFFFF) : 1.0 ;
-       ucptr = ((unsigned char*) dest) + 4 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 4 ;
-               value = lrintf (src [count] * normfact) ;
-               ucptr [0] = value ;
-               ucptr [1] = value >> 8 ;
-               ucptr [2] = value >> 16 ;
-               ucptr [3] = value >> 24 ;
-               } ;
-} /* f2lei_array */
-
-static void
-f2lei_clip_array (const float *src, int *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       float                   normfact, scaled_value ;
-       int                             value ;
-
-       normfact = normalize ? (8.0 * 0x10000000) : 1.0 ;
-       ucptr = ((unsigned char*) dest) + 4 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 4 ;
-               scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-               {       ucptr [0] = 0xFF ;
-                       ucptr [1] = 0xFF ;
-                       ucptr [2] = 0xFF ;
-                       ucptr [3] = 0x7F ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-               {       ucptr [0] = 0x00 ;
-                       ucptr [1] = 0x00 ;
-                       ucptr [2] = 0x00 ;
-                       ucptr [3] = 0x80 ;
-                       continue ;
-                       } ;
-
-               value = lrintf (scaled_value) ;
-               ucptr [0] = value ;
-               ucptr [1] = value >> 8 ;
-               ucptr [2] = value >> 16 ;
-               ucptr [3] = value >> 24 ;
-               } ;
-} /* f2lei_clip_array */
-
-static sf_count_t
-pcm_write_f2lei        (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       void            (*convert) (const float *, int *, int, int) ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       convert = (psf->add_clipping) ? f2lei_clip_array : f2lei_array ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               convert (ptr + total, ubuf.ibuf, bufferlen, psf->norm_float) ;
-               writecount = psf_fwrite (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_f2lei */
-
-/*==============================================================================
-*/
-
-static void
-d2sc_array     (const double *src, signed char *dest, int count, int normalize)
-{      double  normfact ;
-
-       normfact = normalize ? (1.0 * 0x7F) : 1.0 ;
-
-       while (--count >= 0)
-       {       dest [count] = lrint (src [count] * normfact) ;
-               } ;
-} /* d2sc_array */
-
-static void
-d2sc_clip_array        (const double *src, signed char *dest, int count, int normalize)
-{      double  normfact, scaled_value ;
-
-       normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x1000000) ;
-
-       while (--count >= 0)
-       {       scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-               {       dest [count] = 127 ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-               {       dest [count] = -128 ;
-                       continue ;
-                       } ;
-
-               dest [count] = lrintf (scaled_value) >> 24 ;
-               } ;
-} /* d2sc_clip_array */
-
-static sf_count_t
-pcm_write_d2sc (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       void            (*convert) (const double *, signed char *, int, int) ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       convert = (psf->add_clipping) ? d2sc_clip_array : d2sc_array ;
-       bufferlen = ARRAY_LEN (ubuf.scbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               convert (ptr + total, ubuf.scbuf, bufferlen, psf->norm_double) ;
-               writecount = psf_fwrite (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_d2sc */
-
-/*==============================================================================
-*/
-
-static void
-d2uc_array     (const double *src, unsigned char *dest, int count, int normalize)
-{      double normfact ;
-
-       normfact = normalize ? (1.0 * 0x7F) : 1.0 ;
-
-       while (--count >= 0)
-       {       dest [count] = lrint (src [count] * normfact) + 128 ;
-               } ;
-} /* d2uc_array */
-
-static void
-d2uc_clip_array        (const double *src, unsigned char *dest, int count, int normalize)
-{      double  normfact, scaled_value ;
-
-       normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x1000000) ;
-
-       while (--count >= 0)
-       {       scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-               {       dest [count] = 255 ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-               {       dest [count] = 0 ;
-                       continue ;
-                       } ;
-
-               dest [count] = (lrint (src [count] * normfact) >> 24) + 128 ;
-               } ;
-} /* d2uc_clip_array */
-
-static sf_count_t
-pcm_write_d2uc (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       void            (*convert) (const double *, unsigned char *, int, int) ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       convert = (psf->add_clipping) ? d2uc_clip_array : d2uc_array ;
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               convert (ptr + total, ubuf.ucbuf, bufferlen, psf->norm_double) ;
-               writecount = psf_fwrite (ubuf.ucbuf, sizeof (unsigned char), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_d2uc */
-
-/*==============================================================================
-*/
-
-static void
-d2bes_array (const double *src, short *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       short                   value ;
-       double                  normfact ;
-
-       normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ;
-       ucptr = ((unsigned char*) dest) + 2 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 2 ;
-               value = lrint (src [count] * normfact) ;
-               ucptr [1] = value ;
-               ucptr [0] = value >> 8 ;
-               } ;
-} /* d2bes_array */
-
-static void
-d2bes_clip_array (const double *src, short *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       double                  normfact, scaled_value ;
-       int                             value ;
-
-       normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x10000) ;
-       ucptr = ((unsigned char*) dest) + 2 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 2 ;
-               scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-               {       ucptr [1] = 0xFF ;
-                       ucptr [0] = 0x7F ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-               {       ucptr [1] = 0x00 ;
-                       ucptr [0] = 0x80 ;
-                       continue ;
-                       } ;
-
-               value = lrint (scaled_value) ;
-               ucptr [1] = value >> 16 ;
-               ucptr [0] = value >> 24 ;
-               } ;
-} /* d2bes_clip_array */
-
-static sf_count_t
-pcm_write_d2bes        (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       void            (*convert) (const double *, short *, int, int) ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       convert = (psf->add_clipping) ? d2bes_clip_array : d2bes_array ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               convert (ptr + total, ubuf.sbuf, bufferlen, psf->norm_double) ;
-               writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_d2bes */
-
-/*==============================================================================
-*/
-
-static void
-d2les_array (const double *src, short *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       short                   value ;
-       double                  normfact ;
-
-       normfact = normalize ? (1.0 * 0x7FFF) : 1.0 ;
-       ucptr = ((unsigned char*) dest) + 2 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 2 ;
-               value = lrint (src [count] * normfact) ;
-               ucptr [0] = value ;
-               ucptr [1] = value >> 8 ;
-               } ;
-} /* d2les_array */
-
-static void
-d2les_clip_array (const double *src, short *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       int                             value ;
-       double                  normfact, scaled_value ;
-
-       normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x10000) ;
-       ucptr = ((unsigned char*) dest) + 2 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 2 ;
-               scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-               {       ucptr [0] = 0xFF ;
-                       ucptr [1] = 0x7F ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-               {       ucptr [0] = 0x00 ;
-                       ucptr [1] = 0x80 ;
-                       continue ;
-                       } ;
-
-               value = lrint (scaled_value) ;
-               ucptr [0] = value >> 16 ;
-               ucptr [1] = value >> 24 ;
-               } ;
-} /* d2les_clip_array */
-
-static sf_count_t
-pcm_write_d2les        (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       void            (*convert) (const double *, short *, int, int) ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       convert = (psf->add_clipping) ? d2les_clip_array : d2les_array ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               convert (ptr + total, ubuf.sbuf, bufferlen, psf->norm_double) ;
-               writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_d2les */
-
-/*==============================================================================
-*/
-
-static void
-d2let_array (const double *src, tribyte *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       int                             value ;
-       double                  normfact ;
-
-       normfact = normalize ? (1.0 * 0x7FFFFF) : 1.0 ;
-       ucptr = ((unsigned char*) dest) + 3 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 3 ;
-               value = lrint (src [count] * normfact) ;
-               ucptr [0] = value ;
-               ucptr [1] = value >> 8 ;
-               ucptr [2] = value >> 16 ;
-               } ;
-} /* d2let_array */
-
-static void
-d2let_clip_array (const double *src, tribyte *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       int                             value ;
-       double                  normfact, scaled_value ;
-
-       normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x100) ;
-       ucptr = ((unsigned char*) dest) + 3 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 3 ;
-               scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-               {       ucptr [0] = 0xFF ;
-                       ucptr [1] = 0xFF ;
-                       ucptr [2] = 0x7F ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-               {       ucptr [0] = 0x00 ;
-                       ucptr [1] = 0x00 ;
-                       ucptr [2] = 0x80 ;
-                       continue ;
-                       } ;
-
-               value = lrint (scaled_value) ;
-               ucptr [0] = value >> 8 ;
-               ucptr [1] = value >> 16 ;
-               ucptr [2] = value >> 24 ;
-               } ;
-} /* d2let_clip_array */
-
-static sf_count_t
-pcm_write_d2let        (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       void            (*convert) (const double *, tribyte *, int, int) ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       convert = (psf->add_clipping) ? d2let_clip_array : d2let_array ;
-       bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               convert (ptr + total, (tribyte*) (ubuf.ucbuf), bufferlen, psf->norm_double) ;
-               writecount = psf_fwrite (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_d2let */
-
-/*==============================================================================
-*/
-
-static void
-d2bet_array (const double *src, tribyte *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       int                             value ;
-       double                  normfact ;
-
-       normfact = normalize ? (1.0 * 0x7FFFFF) : 1.0 ;
-       ucptr = ((unsigned char*) dest) + 3 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 3 ;
-               value = lrint (src [count] * normfact) ;
-               ucptr [2] = value ;
-               ucptr [1] = value >> 8 ;
-               ucptr [0] = value >> 16 ;
-               } ;
-} /* d2bet_array */
-
-static void
-d2bet_clip_array (const double *src, tribyte *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       int                             value ;
-       double                  normfact, scaled_value ;
-
-       normfact = normalize ? (8.0 * 0x10000000) : (1.0 * 0x100) ;
-       ucptr = ((unsigned char*) dest) + 3 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 3 ;
-               scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-               {       ucptr [2] = 0xFF ;
-                       ucptr [1] = 0xFF ;
-                       ucptr [0] = 0x7F ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-               {       ucptr [2] = 0x00 ;
-                       ucptr [1] = 0x00 ;
-                       ucptr [0] = 0x80 ;
-                       continue ;
-                       } ;
-
-               value = lrint (scaled_value) ;
-               ucptr [2] = value >> 8 ;
-               ucptr [1] = value >> 16 ;
-               ucptr [0] = value >> 24 ;
-               } ;
-} /* d2bet_clip_array */
-
-static sf_count_t
-pcm_write_d2bet        (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       void            (*convert) (const double *, tribyte *, int, int) ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       convert = (psf->add_clipping) ? d2bet_clip_array : d2bet_array ;
-       bufferlen = sizeof (ubuf.ucbuf) / SIZEOF_TRIBYTE ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               convert (ptr + total, (tribyte*) (ubuf.ucbuf), bufferlen, psf->norm_double) ;
-               writecount = psf_fwrite (ubuf.ucbuf, SIZEOF_TRIBYTE, bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_d2bet */
-
-/*==============================================================================
-*/
-
-static void
-d2bei_array (const double *src, int *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       int                             value ;
-       double                  normfact ;
-
-       normfact = normalize ? (1.0 * 0x7FFFFFFF) : 1.0 ;
-       ucptr = ((unsigned char*) dest) + 4 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 4 ;
-               value = lrint (src [count] * normfact) ;
-               ucptr [0] = value >> 24 ;
-               ucptr [1] = value >> 16 ;
-               ucptr [2] = value >> 8 ;
-               ucptr [3] = value ;
-               } ;
-} /* d2bei_array */
-
-static void
-d2bei_clip_array (const double *src, int *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       int                             value ;
-       double                  normfact, scaled_value ;
-
-       normfact = normalize ? (8.0 * 0x10000000) : 1.0 ;
-       ucptr = ((unsigned char*) dest) + 4 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 4 ;
-               scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-               {       ucptr [3] = 0xFF ;
-                       ucptr [2] = 0xFF ;
-                       ucptr [1] = 0xFF ;
-                       ucptr [0] = 0x7F ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-               {       ucptr [3] = 0x00 ;
-                       ucptr [2] = 0x00 ;
-                       ucptr [1] = 0x00 ;
-                       ucptr [0] = 0x80 ;
-                       continue ;
-                       } ;
-
-               value = lrint (scaled_value) ;
-               ucptr [0] = value >> 24 ;
-               ucptr [1] = value >> 16 ;
-               ucptr [2] = value >> 8 ;
-               ucptr [3] = value ;
-               } ;
-} /* d2bei_clip_array */
-
-static sf_count_t
-pcm_write_d2bei        (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       void            (*convert) (const double *, int *, int, int) ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       convert = (psf->add_clipping) ? d2bei_clip_array : d2bei_array ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               convert (ptr + total, ubuf.ibuf, bufferlen, psf->norm_double) ;
-               writecount = psf_fwrite (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_d2bei */
-
-/*==============================================================================
-*/
-
-static void
-d2lei_array (const double *src, int *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       int                             value ;
-       double                  normfact ;
-
-       normfact = normalize ? (1.0 * 0x7FFFFFFF) : 1.0 ;
-       ucptr = ((unsigned char*) dest) + 4 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 4 ;
-               value = lrint (src [count] * normfact) ;
-               ucptr [0] = value ;
-               ucptr [1] = value >> 8 ;
-               ucptr [2] = value >> 16 ;
-               ucptr [3] = value >> 24 ;
-               } ;
-} /* d2lei_array */
-
-static void
-d2lei_clip_array (const double *src, int *dest, int count, int normalize)
-{      unsigned char   *ucptr ;
-       int                             value ;
-       double                  normfact, scaled_value ;
-
-       normfact = normalize ? (8.0 * 0x10000000) : 1.0 ;
-       ucptr = ((unsigned char*) dest) + 4 * count ;
-
-       while (--count >= 0)
-       {       ucptr -= 4 ;
-               scaled_value = src [count] * normfact ;
-               if (CPU_CLIPS_POSITIVE == 0 && scaled_value >= (1.0 * 0x7FFFFFFF))
-               {       ucptr [0] = 0xFF ;
-                       ucptr [1] = 0xFF ;
-                       ucptr [2] = 0xFF ;
-                       ucptr [3] = 0x7F ;
-                       continue ;
-                       } ;
-               if (CPU_CLIPS_NEGATIVE == 0 && scaled_value <= (-8.0 * 0x10000000))
-               {       ucptr [0] = 0x00 ;
-                       ucptr [1] = 0x00 ;
-                       ucptr [2] = 0x00 ;
-                       ucptr [3] = 0x80 ;
-                       continue ;
-                       } ;
-
-               value = lrint (scaled_value) ;
-               ucptr [0] = value ;
-               ucptr [1] = value >> 8 ;
-               ucptr [2] = value >> 16 ;
-               ucptr [3] = value >> 24 ;
-               } ;
-} /* d2lei_clip_array */
-
-static sf_count_t
-pcm_write_d2lei        (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       void            (*convert) (const double *, int *, int, int) ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       convert = (psf->add_clipping) ? d2lei_clip_array : d2lei_array ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               convert (ptr + total, ubuf.ibuf, bufferlen, psf->norm_double) ;
-               writecount = psf_fwrite (ubuf.ibuf, sizeof (int), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* pcm_write_d2lei */
-
diff --git a/libs/libsndfile/src/pvf.c b/libs/libsndfile/src/pvf.c
deleted file mode 100644 (file)
index 4ea24b6..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <fcntl.h>
-#include       <string.h>
-#include       <ctype.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-
-#define PVF1_MARKER            (MAKE_MARKER ('P', 'V', 'F', '1'))
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int             pvf_close               (SF_PRIVATE *psf) ;
-
-static int             pvf_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int             pvf_read_header (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-pvf_open       (SF_PRIVATE *psf)
-{      int             subformat ;
-       int             error = 0 ;
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-       {       if ((error = pvf_read_header (psf)))
-                       return error ;
-               } ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_PVF)
-                       return  SFE_BAD_OPEN_FORMAT ;
-
-               psf->endian = SF_ENDIAN_BIG ;
-
-               if (pvf_write_header (psf, SF_FALSE))
-                       return psf->error ;
-
-               psf->write_header = pvf_write_header ;
-               } ;
-
-       psf->container_close = pvf_close ;
-
-       psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-       switch (subformat)
-       {       case SF_FORMAT_PCM_S8 : /* 8-bit linear PCM. */
-               case SF_FORMAT_PCM_16 : /* 16-bit linear PCM. */
-               case SF_FORMAT_PCM_32 : /* 32-bit linear PCM. */
-                               error = pcm_init (psf) ;
-                               break ;
-
-               default :       break ;
-               } ;
-
-       return error ;
-} /* pvf_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-pvf_close      (SF_PRIVATE * UNUSED (psf))
-{
-       return 0 ;
-} /* pvf_close */
-
-static int
-pvf_write_header (SF_PRIVATE *psf, int UNUSED (calc_length))
-{      sf_count_t      current ;
-
-       if (psf->pipeoffset > 0)
-               return 0 ;
-
-       current = psf_ftell (psf) ;
-
-       /* Reset the current header length to zero. */
-       psf->header [0] = 0 ;
-       psf->headindex = 0 ;
-
-       if (psf->is_pipe == SF_FALSE)
-               psf_fseek (psf, 0, SEEK_SET) ;
-
-       snprintf ((char*) psf->header, sizeof (psf->header), "PVF1\n%d %d %d\n",
-               psf->sf.channels, psf->sf.samplerate, psf->bytewidth * 8) ;
-
-       psf->headindex = strlen ((char*) psf->header) ;
-
-       /* Header construction complete so write it out. */
-       psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-       if (psf->error)
-               return psf->error ;
-
-       psf->dataoffset = psf->headindex ;
-
-       if (current > 0)
-               psf_fseek (psf, current, SEEK_SET) ;
-
-       return psf->error ;
-} /* pvf_write_header */
-
-static int
-pvf_read_header (SF_PRIVATE *psf)
-{      char    buffer [32] ;
-       int             marker, channels, samplerate, bitwidth ;
-
-       psf_binheader_readf (psf, "pmj", 0, &marker, 1) ;
-       psf_log_printf (psf, "%M\n", marker) ;
-
-       if (marker != PVF1_MARKER)
-               return SFE_PVF_NO_PVF1 ;
-
-       /* Grab characters up until a newline which is replaced by an EOS. */
-       psf_binheader_readf (psf, "G", buffer, sizeof (buffer)) ;
-
-       if (sscanf (buffer, "%d %d %d", &channels, &samplerate, &bitwidth) != 3)
-               return SFE_PVF_BAD_HEADER ;
-
-       psf_log_printf (psf, " Channels    : %d\n Sample rate : %d\n Bit width   : %d\n",
-                               channels, samplerate, bitwidth) ;
-
-       psf->sf.channels = channels ;
-       psf->sf.samplerate = samplerate ;
-
-       switch (bitwidth)
-       {       case 8 :
-                               psf->sf.format = SF_FORMAT_PVF | SF_FORMAT_PCM_S8 ;
-                               psf->bytewidth = 1 ;
-                               break ;
-
-               case 16 :
-                               psf->sf.format = SF_FORMAT_PVF | SF_FORMAT_PCM_16 ;
-                               psf->bytewidth = 2 ;
-                               break ;
-               case 32 :
-                               psf->sf.format = SF_FORMAT_PVF | SF_FORMAT_PCM_32 ;
-                               psf->bytewidth = 4 ;
-                               break ;
-
-               default :
-                               return SFE_PVF_BAD_BITWIDTH ;
-               } ;
-
-       psf->dataoffset = psf_ftell (psf) ;
-       psf_log_printf (psf, " Data Offset : %D\n", psf->dataoffset) ;
-
-       psf->endian = SF_ENDIAN_BIG ;
-
-       psf->datalength = psf->filelength - psf->dataoffset ;
-       psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
-       if (! psf->sf.frames && psf->blockwidth)
-               psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ;
-
-       return 0 ;
-} /* pvf_read_header */
diff --git a/libs/libsndfile/src/raw.c b/libs/libsndfile/src/raw.c
deleted file mode 100644 (file)
index e5dc49e..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-
-#include       "sndfile.h"
-#include       "common.h"
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-raw_open       (SF_PRIVATE *psf)
-{      int     subformat, error = SFE_NO_ERROR ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-
-       psf->endian = SF_ENDIAN (psf->sf.format) ;
-
-       if (CPU_IS_BIG_ENDIAN && (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU))
-               psf->endian = SF_ENDIAN_BIG ;
-       else if (CPU_IS_LITTLE_ENDIAN && (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU))
-               psf->endian = SF_ENDIAN_LITTLE ;
-
-       psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-       psf->dataoffset = 0 ;
-       psf->datalength = psf->filelength ;
-
-       switch (subformat)
-       {       case SF_FORMAT_PCM_S8 :
-                               error = pcm_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_PCM_U8 :
-                               error = pcm_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_PCM_24 :
-               case SF_FORMAT_PCM_32 :
-                               error = pcm_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_ULAW :
-                               error = ulaw_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_ALAW :
-                               error = alaw_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_GSM610 :
-                               error = gsm610_init (psf) ;
-                               break ;
-
-               /* Lite remove start */
-               case SF_FORMAT_FLOAT :
-                               error = float32_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_DOUBLE :
-                               error = double64_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_DWVW_12 :
-                               error = dwvw_init (psf, 12) ;
-                               break ;
-
-               case SF_FORMAT_DWVW_16 :
-                               error = dwvw_init (psf, 16) ;
-                               break ;
-
-               case SF_FORMAT_DWVW_24 :
-                               error = dwvw_init (psf, 24) ;
-                               break ;
-
-               case SF_FORMAT_VOX_ADPCM :
-                               error = vox_adpcm_init (psf) ;
-                               break ;
-               /* Lite remove end */
-
-               default : return SFE_BAD_OPEN_FORMAT ;
-               } ;
-
-       return error ;
-} /* raw_open */
diff --git a/libs/libsndfile/src/rf64.c b/libs/libsndfile/src/rf64.c
deleted file mode 100644 (file)
index 7f14ef8..0000000
+++ /dev/null
@@ -1,726 +0,0 @@
-/*
-** Copyright (C) 2008-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2009      Uli Franke <cls@nebadje.org>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**     This format documented at:
-**     http://www.sr.se/utveckling/tu/bwf/prog/RF_64v1_4.pdf
-**
-**     But this may be a better reference:
-**     http://www.ebu.ch/CMSimages/en/tec_doc_t3306-2007_tcm6-42570.pdf
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <fcntl.h>
-#include       <string.h>
-#include       <ctype.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-#include       "wav_w64.h"
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues.
-*/
-#define        RF64_MARKER             MAKE_MARKER ('R', 'F', '6', '4')
-#define        FFFF_MARKER             MAKE_MARKER (0xff, 0xff, 0xff, 0xff)
-#define        WAVE_MARKER             MAKE_MARKER ('W', 'A', 'V', 'E')
-#define        ds64_MARKER             MAKE_MARKER ('d', 's', '6', '4')
-#define        fmt_MARKER              MAKE_MARKER ('f', 'm', 't', ' ')
-#define        fact_MARKER             MAKE_MARKER ('f', 'a', 'c', 't')
-#define        data_MARKER             MAKE_MARKER ('d', 'a', 't', 'a')
-
-#define bext_MARKER            MAKE_MARKER ('b', 'e', 'x', 't')
-#define cart_MARKER            MAKE_MARKER ('c', 'a', 'r', 't')
-#define OggS_MARKER            MAKE_MARKER ('O', 'g', 'g', 'S')
-#define wvpk_MARKER    MAKE_MARKER ('w', 'v', 'p', 'k')
-
-/*------------------------------------------------------------------------------
-** Typedefs.
-*/
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int     rf64_read_header (SF_PRIVATE *psf, int *blockalign, int *framesperblock) ;
-static int     rf64_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int     rf64_close (SF_PRIVATE *psf) ;
-static int     rf64_command (SF_PRIVATE *psf, int command, void * UNUSED (data), int datasize) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-rf64_open (SF_PRIVATE *psf)
-{      WAV_PRIVATE *wpriv ;
-       int     subformat, error = 0 ;
-       int blockalign, framesperblock ;
-
-       if ((wpriv = calloc (1, sizeof (WAV_PRIVATE))) == NULL)
-               return SFE_MALLOC_FAILED ;
-       psf->container_data = wpriv ;
-       wpriv->wavex_ambisonic = SF_AMBISONIC_NONE ;
-
-       /* All RF64 files are little endian. */
-       psf->endian = SF_ENDIAN_LITTLE ;
-
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-       {       if ((error = rf64_read_header (psf, &blockalign, &framesperblock)) != 0)
-                       return error ;
-               } ;
-
-       if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RF64)
-               return  SFE_BAD_OPEN_FORMAT ;
-
-       subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       if (psf->is_pipe)
-                       return SFE_NO_PIPE_WRITE ;
-
-               psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-               if ((error = rf64_write_header (psf, SF_FALSE)))
-                       return error ;
-
-               psf->write_header = rf64_write_header ;
-               } ;
-
-       psf->container_close = rf64_close ;
-       psf->command = rf64_command ;
-
-       switch (subformat)
-       {       case SF_FORMAT_PCM_U8 :
-               case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_PCM_24 :
-               case SF_FORMAT_PCM_32 :
-                                       error = pcm_init (psf) ;
-                                       break ;
-
-               case SF_FORMAT_ULAW :
-                                       error = ulaw_init (psf) ;
-                                       break ;
-
-               case SF_FORMAT_ALAW :
-                                       error = alaw_init (psf) ;
-                                       break ;
-
-               /* Lite remove start */
-               case SF_FORMAT_FLOAT :
-                                       error = float32_init (psf) ;
-                                       break ;
-
-               case SF_FORMAT_DOUBLE :
-                                       error = double64_init (psf) ;
-                                       break ;
-
-               /* Lite remove end */
-
-               default :       return SFE_UNIMPLEMENTED ;
-               } ;
-
-       return error ;
-} /* rf64_open */
-
-/*------------------------------------------------------------------------------
-*/
-enum
-{      HAVE_ds64       = 0x01,
-       HAVE_fmt        = 0x02,
-       HAVE_bext       = 0x04,
-       HAVE_data       = 0x08,
-       HAVE_cart       = 0x10
-} ;
-
-#define HAVE_CHUNK(CHUNK)      ((parsestage & CHUNK) != 0)
-
-static int
-rf64_read_header (SF_PRIVATE *psf, int *blockalign, int *framesperblock)
-{      WAV_PRIVATE     *wpriv ;
-       WAV_FMT         *wav_fmt ;
-       sf_count_t riff_size = 0, frame_count = 0, ds64_datalength = 0 ;
-       uint32_t marks [2], size32, parsestage = 0 ;
-       int marker, error, done = 0, format = 0 ;
-
-       if ((wpriv = psf->container_data) == NULL)
-               return SFE_INTERNAL ;
-       wav_fmt = &wpriv->wav_fmt ;
-
-       /* Set position to start of file to begin reading header. */
-       psf_binheader_readf (psf, "pmmm", 0, &marker, marks, marks + 1) ;
-       if (marker != RF64_MARKER || marks [1] != WAVE_MARKER)
-               return SFE_RF64_NOT_RF64 ;
-
-       if (marks [0] == FFFF_MARKER)
-               psf_log_printf (psf, "%M\n  %M\n", RF64_MARKER, WAVE_MARKER) ;
-       else
-               psf_log_printf (psf, "%M : 0x%x (should be 0xFFFFFFFF)\n  %M\n", RF64_MARKER, WAVE_MARKER) ;
-
-       while (NOT (done))
-       {       psf_binheader_readf (psf, "em4", &marker, &size32) ;
-
-               switch (marker)
-               {       case ds64_MARKER :
-                               {       unsigned int table_len, bytesread ;
-
-                                       /* Read ds64 sizes (3 8-byte words). */
-                                       bytesread = psf_binheader_readf (psf, "888", &riff_size, &ds64_datalength, &frame_count) ;
-
-                                       /* Read table length. */
-                                       bytesread += psf_binheader_readf (psf, "4", &table_len) ;
-                                       /* Skip table for now. (this was "table_len + 4", why?) */
-                                       bytesread += psf_binheader_readf (psf, "j", table_len) ;
-
-                                       if (size32 == bytesread)
-                                               psf_log_printf (psf, "%M : %u\n", marker, size32) ;
-                                       else if (size32 >= bytesread + 4)
-                                       {       unsigned int next ;
-                                               psf_binheader_readf (psf, "m", &next) ;
-                                               if (next == fmt_MARKER)
-                                               {       psf_log_printf (psf, "%M : %u (should be %u)\n", marker, size32, bytesread) ;
-                                                       psf_binheader_readf (psf, "j", -4) ;
-                                                       }
-                                               else
-                                               {       psf_log_printf (psf, "%M : %u\n", marker, size32) ;
-                                                       psf_binheader_readf (psf, "j", size32 - bytesread - 4) ;
-                                                       } ;
-                                               } ;
-
-                                       if (psf->filelength != riff_size + 8)
-                                               psf_log_printf (psf, "  Riff size : %D (should be %D)\n", riff_size, psf->filelength - 8) ;
-                                       else
-                                               psf_log_printf (psf, "  Riff size : %D\n", riff_size) ;
-
-                                       psf_log_printf (psf, "  Data size : %D\n", ds64_datalength) ;
-
-                                       psf_log_printf (psf, "  Frames    : %D\n", frame_count) ;
-                                       psf_log_printf (psf, "  Table length : %u\n", table_len) ;
-
-                                       } ;
-                               parsestage |= HAVE_ds64 ;
-                               break ;
-
-                       case fmt_MARKER:
-                                       psf_log_printf (psf, "%M : %u\n", marker, size32) ;
-                                       if ((error = wav_w64_read_fmt_chunk (psf, size32)) != 0)
-                                               return error ;
-                                       format = wav_fmt->format ;
-                                       parsestage |= HAVE_fmt ;
-                                       break ;
-
-                       case bext_MARKER :
-                                       if ((error = wav_read_bext_chunk (psf, size32)) != 0)
-                                               return error ;
-                                       parsestage |= HAVE_bext ;
-                                       break ;
-
-                       case cart_MARKER :
-                                       if ((error = wav_read_cart_chunk (psf, size32)) != 0)
-                                               return error ;
-                                       parsestage |= HAVE_cart ;
-                                       break ;
-
-                       case data_MARKER :
-                               /* see wav for more sophisticated parsing -> implement state machine with parsestage */
-
-                               if (HAVE_CHUNK (HAVE_ds64))
-                               {       if (size32 == 0xffffffff)
-                                               psf_log_printf (psf, "%M : 0x%x\n", marker, size32) ;
-                                       else
-                                               psf_log_printf (psf, "%M : 0x%x (should be 0xffffffff\n", marker, size32) ;
-                                       psf->datalength = ds64_datalength ;
-                                       }
-                               else
-                               {       if (size32 == 0xffffffff)
-                                       {       psf_log_printf (psf, "%M : 0x%x\n", marker, size32) ;
-                                               psf_log_printf (psf, "  *** Data length not specified no 'ds64' chunk.\n") ;
-                                               }
-                                       else
-                                       {       psf_log_printf (psf, "%M : 0x%x\n**** Weird, RF64 file without a 'ds64' chunk and no valid 'data' size.\n", marker, size32) ;
-                                               psf->datalength = size32 ;
-                                               } ;
-                                       } ;
-
-                               psf->dataoffset = psf_ftell (psf) ;
-
-                               if (psf->dataoffset > 0)
-                               {       if (size32 == 0 && riff_size == 8 && psf->filelength > 44)
-                                       {       psf_log_printf (psf, "  *** Looks like a WAV file which wasn't closed properly. Fixing it.\n") ;
-                                               psf->datalength = psf->filelength - psf->dataoffset ;
-                                               } ;
-
-                                       /* Only set dataend if there really is data at the end. */
-                                       if (psf->datalength + psf->dataoffset < psf->filelength)
-                                               psf->dataend = psf->datalength + psf->dataoffset ;
-
-                                       if (NOT (psf->sf.seekable) || psf->dataoffset < 0)
-                                               break ;
-
-                                       /* Seek past data and continue reading header. */
-                                       psf_fseek (psf, psf->datalength, SEEK_CUR) ;
-
-                                       if (psf_ftell (psf) != psf->datalength + psf->dataoffset)
-                                               psf_log_printf (psf, "  *** psf_fseek past end error ***\n") ;
-                                               break ;
-                                       } ;
-                               break ;
-
-                       default :
-                                       if (isprint ((marker >> 24) & 0xFF) && isprint ((marker >> 16) & 0xFF)
-                                               && isprint ((marker >> 8) & 0xFF) && isprint (marker & 0xFF))
-                                       {       psf_log_printf (psf, "*** %M : %d (unknown marker)\n", marker, size32) ;
-                                               if (size32 < 8)
-                                                       done = SF_TRUE ;
-                                               psf_binheader_readf (psf, "j", size32) ;
-                                               break ;
-                                               } ;
-                                       if (psf_ftell (psf) & 0x03)
-                                       {       psf_log_printf (psf, "  Unknown chunk marker at position 0x%x. Resynching.\n", size32 - 4) ;
-                                               psf_binheader_readf (psf, "j", -3) ;
-                                               break ;
-                                               } ;
-                                       psf_log_printf (psf, "*** Unknown chunk marker (0x%X) at position 0x%X. Exiting parser.\n", marker, psf_ftell (psf) - 4) ;
-                                       done = SF_TRUE ;
-                               break ;
-                       } ;     /* switch (marker) */
-
-               if (psf_ftell (psf) >= psf->filelength - SIGNED_SIZEOF (marker))
-               {       psf_log_printf (psf, "End\n") ;
-                       break ;
-                       } ;
-               } ;
-
-       if (psf->dataoffset <= 0)
-               return SFE_WAV_NO_DATA ;
-
-       /* WAVs can be little or big endian */
-       psf->endian = psf->rwf_endian ;
-
-       psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-       if (psf->is_pipe == 0)
-       {       /*
-               ** Check for 'wvpk' at the start of the DATA section. Not able to
-               ** handle this.
-               */
-               psf_binheader_readf (psf, "4", &marker) ;
-               if (marker == wvpk_MARKER || marker == OggS_MARKER)
-                       return SFE_WAV_WVPK_DATA ;
-               } ;
-
-       /* Seek to start of DATA section. */
-       psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-       if (psf->blockwidth)
-       {       if (psf->filelength - psf->dataoffset < psf->datalength)
-                       psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ;
-               else
-                       psf->sf.frames = psf->datalength / psf->blockwidth ;
-               } ;
-
-       if (frame_count != psf->sf.frames)
-               psf_log_printf (psf, "*** Calculated frame count %d does not match value from 'ds64' chunk of %d.\n", psf->sf.frames, frame_count) ;
-
-       switch (format)
-       {
-               case WAVE_FORMAT_EXTENSIBLE :
-
-                       /* with WAVE_FORMAT_EXTENSIBLE the psf->sf.format field is already set. We just have to set the major to rf64 */
-                       psf->sf.format = (psf->sf.format & ~SF_FORMAT_TYPEMASK) | SF_FORMAT_RF64 ;
-
-                       if (psf->sf.format == (SF_FORMAT_WAVEX | SF_FORMAT_MS_ADPCM))
-                       {       *blockalign = wav_fmt->msadpcm.blockalign ;
-                               *framesperblock = wav_fmt->msadpcm.samplesperblock ;
-                               } ;
-                       break ;
-
-               case WAVE_FORMAT_PCM :
-                                       psf->sf.format = SF_FORMAT_RF64 | u_bitwidth_to_subformat (psf->bytewidth * 8) ;
-                                       break ;
-
-               case WAVE_FORMAT_MULAW :
-               case IBM_FORMAT_MULAW :
-                                       psf->sf.format = (SF_FORMAT_RF64 | SF_FORMAT_ULAW) ;
-                                       break ;
-
-               case WAVE_FORMAT_ALAW :
-               case IBM_FORMAT_ALAW :
-                                       psf->sf.format = (SF_FORMAT_RF64 | SF_FORMAT_ALAW) ;
-                                       break ;
-
-               case WAVE_FORMAT_MS_ADPCM :
-                                       psf->sf.format = (SF_FORMAT_RF64 | SF_FORMAT_MS_ADPCM) ;
-                                       *blockalign = wav_fmt->msadpcm.blockalign ;
-                                       *framesperblock = wav_fmt->msadpcm.samplesperblock ;
-                                       break ;
-
-               case WAVE_FORMAT_IMA_ADPCM :
-                                       psf->sf.format = (SF_FORMAT_RF64 | SF_FORMAT_IMA_ADPCM) ;
-                                       *blockalign = wav_fmt->ima.blockalign ;
-                                       *framesperblock = wav_fmt->ima.samplesperblock ;
-                                       break ;
-
-               case WAVE_FORMAT_GSM610 :
-                                       psf->sf.format = (SF_FORMAT_RF64 | SF_FORMAT_GSM610) ;
-                                       break ;
-
-               case WAVE_FORMAT_IEEE_FLOAT :
-                                       psf->sf.format = SF_FORMAT_RF64 ;
-                                       psf->sf.format |= (psf->bytewidth == 8) ? SF_FORMAT_DOUBLE : SF_FORMAT_FLOAT ;
-                                       break ;
-
-               case WAVE_FORMAT_G721_ADPCM :
-                                       psf->sf.format = SF_FORMAT_RF64 | SF_FORMAT_G721_32 ;
-                                       break ;
-
-               default : return SFE_UNIMPLEMENTED ;
-               } ;
-
-       if (wpriv->fmt_is_broken)
-               wav_w64_analyze (psf) ;
-
-       /* Only set the format endian-ness if its non-standard big-endian. */
-       if (psf->endian == SF_ENDIAN_BIG)
-               psf->sf.format |= SF_ENDIAN_BIG ;
-
-       return 0 ;
-} /* rf64_read_header */
-
-/*  known WAVEFORMATEXTENSIBLE GUIDS  */
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_PCM =
-{      0x00000001, 0x0000, 0x0010, {   0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_MS_ADPCM =
-{      0x00000002, 0x0000, 0x0010, {   0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_IEEE_FLOAT =
-{      0x00000003, 0x0000, 0x0010, {   0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_ALAW =
-{      0x00000006, 0x0000, 0x0010, {   0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_MULAW =
-{      0x00000007, 0x0000, 0x0010, {   0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-/*
-** the next two are from
-** http://dream.cs.bath.ac.uk/researchdev/wave-ex/bformat.html
-*/
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_PCM =
-{      0x00000001, 0x0721, 0x11d3, {   0x86, 0x44, 0xC8, 0xC1, 0xCA, 0x00, 0x00, 0x00 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_IEEE_FLOAT =
-{      0x00000003, 0x0721, 0x11d3, {   0x86, 0x44, 0xC8, 0xC1, 0xCA, 0x00, 0x00, 0x00 }
-} ;
-
-
-static int
-rf64_write_fmt_chunk (SF_PRIVATE *psf)
-{      WAV_PRIVATE     *wpriv ;
-       int subformat, fmt_size ;
-
-       if ((wpriv = psf->container_data) == NULL)
-               return SFE_INTERNAL ;
-
-       subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
-
-       /* initial section (same for all, it appears) */
-       switch (subformat)
-       {       case SF_FORMAT_PCM_U8 :
-               case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_PCM_24 :
-               case SF_FORMAT_PCM_32 :
-               case SF_FORMAT_FLOAT :
-               case SF_FORMAT_DOUBLE :
-               case SF_FORMAT_ULAW :
-               case SF_FORMAT_ALAW :
-                       fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 + 4 + 4 + 2 + 2 + 8 ;
-
-                       /* fmt : format, channels, samplerate */
-                       psf_binheader_writef (psf, "4224", fmt_size, WAVE_FORMAT_EXTENSIBLE, psf->sf.channels, psf->sf.samplerate) ;
-                       /*  fmt : bytespersec */
-                       psf_binheader_writef (psf, "4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
-                       /*  fmt : blockalign, bitwidth */
-                       psf_binheader_writef (psf, "22", psf->bytewidth * psf->sf.channels, psf->bytewidth * 8) ;
-
-                       /* cbSize 22 is sizeof (WAVEFORMATEXTENSIBLE) - sizeof (WAVEFORMATEX) */
-                       psf_binheader_writef (psf, "2", 22) ;
-
-                       /* wValidBitsPerSample, for our use same as bitwidth as we use it fully */
-                       psf_binheader_writef (psf, "2", psf->bytewidth * 8) ;
-
-                       /* For an Ambisonic file set the channel mask to zero.
-                       ** Otherwise use a default based on the channel count.
-                       */
-                       if (wpriv->wavex_ambisonic != SF_AMBISONIC_NONE)
-                               psf_binheader_writef (psf, "4", 0) ;
-                       else if (wpriv->wavex_channelmask != 0)
-                               psf_binheader_writef (psf, "4", wpriv->wavex_channelmask) ;
-                       else
-                       {       /*
-                               ** Ok some liberty is taken here to use the most commonly used channel masks
-                               ** instead of "no mapping". If you really want to use "no mapping" for 8 channels and less
-                               ** please don't use wavex. (otherwise we'll have to create a new SF_COMMAND)
-                               */
-                               switch (psf->sf.channels)
-                               {       case 1 :        /* center channel mono */
-                                               psf_binheader_writef (psf, "4", 0x4) ;
-                                               break ;
-
-                                       case 2 :        /* front left and right */
-                                               psf_binheader_writef (psf, "4", 0x1 | 0x2) ;
-                                               break ;
-
-                                       case 4 :        /* Quad */
-                                               psf_binheader_writef (psf, "4", 0x1 | 0x2 | 0x10 | 0x20) ;
-                                               break ;
-
-                                       case 6 :        /* 5.1 */
-                                               psf_binheader_writef (psf, "4", 0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20) ;
-                                               break ;
-
-                                       case 8 :        /* 7.1 */
-                                               psf_binheader_writef (psf, "4", 0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20 | 0x40 | 0x80) ;
-                                               break ;
-
-                                       default :       /* 0 when in doubt , use direct out, ie NO mapping*/
-                                               psf_binheader_writef (psf, "4", 0x0) ;
-                                               break ;
-                                       } ;
-                               } ;
-                       break ;
-
-               case SF_FORMAT_MS_ADPCM : /* Todo, GUID exists might have different header as per wav_write_header */
-               default :
-                       return SFE_UNIMPLEMENTED ;
-               } ;
-
-       /* GUID section, different for each */
-
-       switch (subformat)
-       {       case SF_FORMAT_PCM_U8 :
-               case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_PCM_24 :
-               case SF_FORMAT_PCM_32 :
-                       wavex_write_guid (psf, wpriv->wavex_ambisonic == SF_AMBISONIC_NONE ?
-                                               &MSGUID_SUBTYPE_PCM : &MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_PCM) ;
-                       break ;
-
-               case SF_FORMAT_FLOAT :
-               case SF_FORMAT_DOUBLE :
-                       wavex_write_guid (psf, wpriv->wavex_ambisonic == SF_AMBISONIC_NONE ?
-                                               &MSGUID_SUBTYPE_IEEE_FLOAT : &MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_IEEE_FLOAT) ;
-                       break ;
-
-               case SF_FORMAT_ULAW :
-                       wavex_write_guid (psf, &MSGUID_SUBTYPE_MULAW) ;
-                       break ;
-
-               case SF_FORMAT_ALAW :
-                       wavex_write_guid (psf, &MSGUID_SUBTYPE_ALAW) ;
-                       break ;
-
-               default : return SFE_UNIMPLEMENTED ;
-               } ;
-
-       return 0 ;
-} /* rf64_write_fmt_chunk */
-
-
-static int
-rf64_write_header (SF_PRIVATE *psf, int calc_length)
-{      sf_count_t      current ;
-       int             error = 0, has_data = SF_FALSE ;
-
-       current = psf_ftell (psf) ;
-
-       if (psf->dataoffset > 0 && current > psf->dataoffset)
-               has_data = SF_TRUE ;
-
-       if (calc_length)
-       {       psf->filelength = psf_get_filelen (psf) ;
-               psf->datalength = psf->filelength - psf->dataoffset ;
-
-               if (psf->dataend)
-                       psf->datalength -= psf->filelength - psf->dataend ;
-
-               if (psf->bytewidth > 0)
-                       psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-               } ;
-
-       /* Reset the current header length to zero. */
-       psf->header [0] = 0 ;
-       psf->headindex = 0 ;
-       psf_fseek (psf, 0, SEEK_SET) ;
-
-       psf_binheader_writef (psf, "em4m", RF64_MARKER, 0xffffffff, WAVE_MARKER) ;
-
-       /* Currently no table. */
-       psf_binheader_writef (psf, "m48884", ds64_MARKER, 28, psf->filelength - 8, psf->datalength, psf->sf.frames, 0) ;
-
-       /* WAVE and 'fmt ' markers. */
-       psf_binheader_writef (psf, "m", fmt_MARKER) ;
-
-       /* Write the 'fmt ' chunk. */
-       switch (psf->sf.format & SF_FORMAT_TYPEMASK)
-       {       case SF_FORMAT_WAV :
-                               psf_log_printf (psf, "ooops SF_FORMAT_WAV\n") ;
-                               return SFE_UNIMPLEMENTED ;
-                               break ;
-
-               case SF_FORMAT_WAVEX :
-               case SF_FORMAT_RF64 :
-                               if ((error = rf64_write_fmt_chunk (psf)) != 0)
-                                       return error ;
-                               break ;
-
-               default :
-                               return SFE_UNIMPLEMENTED ;
-               } ;
-
-       if (psf->broadcast_16k != NULL)
-               wav_write_bext_chunk (psf) ;
-
-       if (psf->cart_16k != NULL)
-               wav_write_cart_chunk (psf) ;
-#if 0
-       /* The LIST/INFO chunk. */
-       if (psf->strings.flags & SF_STR_LOCATE_START)
-               wav_write_strings (psf, SF_STR_LOCATE_START) ;
-
-       if (psf->peak_info != NULL && psf->peak_info->peak_loc == SF_PEAK_START)
-       {       psf_binheader_writef (psf, "m4", PEAK_MARKER, WAV_PEAK_CHUNK_SIZE (psf->sf.channels)) ;
-               psf_binheader_writef (psf, "44", 1, time (NULL)) ;
-               for (k = 0 ; k < psf->sf.channels ; k++)
-                       psf_binheader_writef (psf, "ft8", (float) psf->peak_info->peaks [k].value, psf->peak_info->peaks [k].position) ;
-               } ;
-
-//     if (psf->broadcast_info != NULL)
-//             wav_write_bext_chunk (psf) ;
-
-       if (psf->instrument != NULL)
-       {       int             tmp ;
-               double  dtune = (double) (0x40000000) / 25.0 ;
-
-               psf_binheader_writef (psf, "m4", smpl_MARKER, 9 * 4 + psf->instrument->loop_count * 6 * 4) ;
-               psf_binheader_writef (psf, "44", 0, 0) ; /* Manufacturer zero is everyone */
-               tmp = (int) (1.0e9 / psf->sf.samplerate) ; /* Sample period in nano seconds */
-               psf_binheader_writef (psf, "44", tmp, psf->instrument->basenote) ;
-               tmp = (unsigned int) (psf->instrument->detune * dtune + 0.5) ;
-               psf_binheader_writef (psf, "4", tmp) ;
-               psf_binheader_writef (psf, "44", 0, 0) ; /* SMTPE format */
-               psf_binheader_writef (psf, "44", psf->instrument->loop_count, 0) ;
-
-               for (tmp = 0 ; tmp < psf->instrument->loop_count ; tmp++)
-               {       int type ;
-
-                       type = psf->instrument->loops [tmp].mode ;
-                       type = (type == SF_LOOP_FORWARD ? 0 : type == SF_LOOP_BACKWARD ? 2 : type == SF_LOOP_ALTERNATING ? 1 : 32) ;
-
-                       psf_binheader_writef (psf, "44", tmp, type) ;
-                       psf_binheader_writef (psf, "44", psf->instrument->loops [tmp].start, psf->instrument->loops [tmp].end) ;
-                       psf_binheader_writef (psf, "44", 0, psf->instrument->loops [tmp].count) ;
-                       } ;
-               } ;
-
-       if (psf->headindex + 8 < psf->dataoffset)
-       {       /* Add PAD data if necessary. */
-               k = psf->dataoffset - 16 - psf->headindex ;
-               psf_binheader_writef (psf, "m4z", PAD_MARKER, k, make_size_t (k)) ;
-               } ;
-
-#endif
-
-       psf_binheader_writef (psf, "m4", data_MARKER, 0xffffffff) ;
-
-       psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-       if (psf->error)
-               return psf->error ;
-
-       if (has_data && psf->dataoffset != psf->headindex)
-       {       printf ("Oooops : has_data && psf->dataoffset != psf->headindex\n") ;
-               return psf->error = SFE_INTERNAL ;
-               } ;
-
-       psf->dataoffset = psf->headindex ;
-
-       if (NOT (has_data))
-               psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-       else if (current > 0)
-               psf_fseek (psf, current, SEEK_SET) ;
-
-       return psf->error ;
-} /* rf64_write_header */
-
-static int
-rf64_close (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       // rf64_write_tailer (psf) ;
-
-               psf->write_header (psf, SF_TRUE) ;
-               } ;
-
-       return 0 ;
-} /* rf64_close */
-
-static int
-rf64_command (SF_PRIVATE *psf, int command, void * UNUSED (data), int datasize)
-{      WAV_PRIVATE     *wpriv ;
-
-       if ((wpriv = psf->container_data) == NULL)
-               return SFE_INTERNAL ;
-
-       switch (command)
-       {       case SFC_WAVEX_SET_AMBISONIC :
-                       if ((SF_CONTAINER (psf->sf.format)) == SF_FORMAT_WAVEX)
-                       {       if (datasize == SF_AMBISONIC_NONE)
-                                       wpriv->wavex_ambisonic = SF_AMBISONIC_NONE ;
-                               else if (datasize == SF_AMBISONIC_B_FORMAT)
-                                       wpriv->wavex_ambisonic = SF_AMBISONIC_B_FORMAT ;
-                               else
-                                       return 0 ;
-                               } ;
-                       return wpriv->wavex_ambisonic ;
-
-               case SFC_WAVEX_GET_AMBISONIC :
-                       return wpriv->wavex_ambisonic ;
-
-               case SFC_SET_CHANNEL_MAP_INFO :
-                       wpriv->wavex_channelmask = wavex_gen_channel_mask (psf->channel_map, psf->sf.channels) ;
-                       return (wpriv->wavex_channelmask != 0) ;
-
-               default :
-                       break ;
-       } ;
-
-       return 0 ;
-} /* rf64_command */
-
diff --git a/libs/libsndfile/src/rx2.c b/libs/libsndfile/src/rx2.c
deleted file mode 100644 (file)
index 0a73048..0000000
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
-** Copyright (C) 2001-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <string.h>
-#include       <ctype.h>
-#include       <stdarg.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-#if (ENABLE_EXPERIMENTAL_CODE == 0)
-
-int
-rx2_open       (SF_PRIVATE *psf)
-{      if (psf)
-               return SFE_UNIMPLEMENTED ;
-       return 0 ;
-} /* rx2_open */
-
-#else
-
-/*------------------------------------------------------------------------------
- * Macros to handle big/little endian issues.
-*/
-
-#define        CAT_MARKER      (MAKE_MARKER ('C', 'A', 'T', ' '))
-#define        GLOB_MARKER (MAKE_MARKER ('G', 'L', 'O', 'B'))
-
-#define        RECY_MARKER (MAKE_MARKER ('R', 'E', 'C', 'Y'))
-
-#define        SLCL_MARKER (MAKE_MARKER ('S', 'L', 'C', 'L'))
-#define        SLCE_MARKER (MAKE_MARKER ('S', 'L', 'C', 'E'))
-
-#define        DEVL_MARKER     (MAKE_MARKER ('D', 'E', 'V', 'L'))
-#define        TRSH_MARKER     (MAKE_MARKER ('T', 'R', 'S', 'H'))
-
-#define        EQ_MARKER       (MAKE_MARKER ('E', 'Q', ' ', ' '))
-#define        COMP_MARKER (MAKE_MARKER ('C', 'O', 'M', 'P'))
-
-#define        SINF_MARKER (MAKE_MARKER ('S', 'I', 'N', 'F'))
-#define        SDAT_MARKER (MAKE_MARKER ('S', 'D', 'A', 'T'))
-
-/*------------------------------------------------------------------------------
- * Typedefs for file chunks.
-*/
-
-
-/*------------------------------------------------------------------------------
- * Private static functions.
-*/
-static int     rx2_close       (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public functions.
-*/
-
-int
-rx2_open       (SF_PRIVATE *psf)
-{      static const char *marker_type [4] =
-       {       "Original Enabled", "Enabled Hidden",
-               "Additional/PencilTool", "Disabled"
-               } ;
-
-       BUF_UNION       ubuf ;
-       int error, marker, length, glob_offset, slce_count, frames ;
-       int sdat_length = 0, slce_total = 0 ;
-       int n_channels ;
-
-
-       /* So far only doing read. */
-
-       psf_binheader_readf (psf, "Epm4", 0, &marker, &length) ;
-
-       if (marker != CAT_MARKER)
-       {       psf_log_printf (psf, "length : %d\n", length) ;
-               return -1000 ;
-               } ;
-
-       if (length != psf->filelength - 8)
-               psf_log_printf (psf, "%M : %d (should be %d)\n", marker, length, psf->filelength - 8) ;
-       else
-               psf_log_printf (psf, "%M : %d\n", marker, length) ;
-
-       /* 'REX2' marker */
-       psf_binheader_readf (psf, "m", &marker) ;
-       psf_log_printf (psf, "%M", marker) ;
-
-       /* 'HEAD' marker */
-       psf_binheader_readf (psf, "m", &marker) ;
-       psf_log_printf (psf, "%M\n", marker) ;
-
-       /* Grab 'GLOB' offset. */
-       psf_binheader_readf (psf, "E4", &glob_offset) ;
-       glob_offset += 0x14 ;   /* Add the current file offset. */
-
-       /* Jump to offset 0x30 */
-       psf_binheader_readf (psf, "p", 0x30) ;
-
-       /* Get name length */
-       length = 0 ;
-       psf_binheader_readf (psf, "1", &length) ;
-       if (length >= SIGNED_SIZEOF (ubuf.cbuf))
-       {       psf_log_printf (psf, "  Text : %d *** Error : Too sf_count_t!\n") ;
-               return -1001 ;
-               }
-
-       memset (ubuf.cbuf, 0, sizeof (ubuf.cbuf)) ;
-       psf_binheader_readf (psf, "b", ubuf.cbuf, length) ;
-       psf_log_printf (psf, " Text : \"%s\"\n", ubuf.cbuf) ;
-
-       /* Jump to GLOB offset position. */
-       if (glob_offset & 1)
-               glob_offset ++ ;
-
-       psf_binheader_readf (psf, "p", glob_offset) ;
-
-       slce_count = 0 ;
-       /* GLOB */
-       while (1)
-       {       psf_binheader_readf (psf, "m", &marker) ;
-
-               if (marker != SLCE_MARKER && slce_count > 0)
-               {       psf_log_printf (psf, "   SLCE count : %d\n", slce_count) ;
-                       slce_count = 0 ;
-                       }
-               switch (marker)
-               {       case GLOB_MARKER:
-                                       psf_binheader_readf (psf, "E4", &length) ;
-                                       psf_log_printf (psf, " %M : %d\n", marker, length) ;
-                                       psf_binheader_readf (psf, "j", length) ;
-                                       break ;
-
-                       case RECY_MARKER:
-                                       psf_binheader_readf (psf, "E4", &length) ;
-                                       psf_log_printf (psf, " %M : %d\n", marker, length) ;
-                                       psf_binheader_readf (psf, "j", (length+1) & 0xFFFFFFFE) ; /* ?????? */
-                                       break ;
-
-                       case CAT_MARKER:
-                                       psf_binheader_readf (psf, "E4", &length) ;
-                                       psf_log_printf (psf, " %M : %d\n", marker, length) ;
-                                       /*-psf_binheader_readf (psf, "j", length) ;-*/
-                                       break ;
-
-                       case DEVL_MARKER:
-                                       psf_binheader_readf (psf, "mE4", &marker, &length) ;
-                                       psf_log_printf (psf, "  DEVL%M : %d\n", marker, length) ;
-                                       if (length & 1)
-                                               length ++ ;
-                                       psf_binheader_readf (psf, "j", length) ;
-                                       break ;
-
-                       case EQ_MARKER:
-                       case COMP_MARKER:
-                                       psf_binheader_readf (psf, "E4", &length) ;
-                                       psf_log_printf (psf, "   %M : %d\n", marker, length) ;
-                                       /* This is weird!!!! why make this (length - 1) */
-                                       if (length & 1)
-                                               length ++ ;
-                                       psf_binheader_readf (psf, "j", length) ;
-                                       break ;
-
-                       case SLCL_MARKER:
-                                       psf_log_printf (psf, "  %M\n    (Offset, Next Offset, Type)\n", marker) ;
-                                       slce_count = 0 ;
-                                       break ;
-
-                       case SLCE_MARKER:
-                                       {       int len [4], indx ;
-
-                                               psf_binheader_readf (psf, "E4444", &len [0], &len [1], &len [2], &len [3]) ;
-
-                                               indx = ((len [3] & 0x0000FFFF) >> 8) & 3 ;
-
-                                               if (len [2] == 1)
-                                               {       if (indx != 1)
-                                                               indx = 3 ;      /* 2 cases, where next slice offset = 1 -> disabled & enabled/hidden */
-
-                                                       psf_log_printf (psf, "   %M : (%6d, ?: 0x%X, %s)\n", marker, len [1], (len [3] & 0xFFFF0000) >> 16, marker_type [indx]) ;
-                                                       }
-                                               else
-                                               {       slce_total += len [2] ;
-
-                                                       psf_log_printf (psf, "   %M : (%6d, SLCE_next_ofs:%d, ?: 0x%X, %s)\n", marker, len [1], len [2], (len [3] & 0xFFFF0000) >> 16, marker_type [indx]) ;
-                                                       } ;
-
-                                               slce_count ++ ;
-                                               } ;
-                                       break ;
-
-                       case SINF_MARKER:
-                                       psf_binheader_readf (psf, "E4", &length) ;
-                                       psf_log_printf (psf, " %M : %d\n", marker, length) ;
-
-                                       psf_binheader_readf (psf, "E2", &n_channels) ;
-                                       n_channels = (n_channels & 0x0000FF00) >> 8 ;
-                                       psf_log_printf (psf, "  Channels    : %d\n", n_channels) ;
-
-                                       psf_binheader_readf (psf, "E44", &psf->sf.samplerate, &frames) ;
-                                       psf->sf.frames = frames ;
-                                       psf_log_printf (psf, "  Sample Rate : %d\n", psf->sf.samplerate) ;
-                                       psf_log_printf (psf, "  Frames      : %D\n", psf->sf.frames) ;
-
-                                       psf_binheader_readf (psf, "E4", &length) ;
-                                       psf_log_printf (psf, "  ??????????? : %d\n", length) ;
-
-                                       psf_binheader_readf (psf, "E4", &length) ;
-                                       psf_log_printf (psf, "  ??????????? : %d\n", length) ;
-                                       break ;
-
-                       case SDAT_MARKER:
-                                       psf_binheader_readf (psf, "E4", &length) ;
-
-                               sdat_length = length ;
-
-                                       /* Get the current offset. */
-                                       psf->dataoffset = psf_binheader_readf (psf, NULL) ;
-
-                                       if (psf->dataoffset + length != psf->filelength)
-                                               psf_log_printf (psf, " %M : %d (should be %d)\n", marker, length, psf->dataoffset + psf->filelength) ;
-                                       else
-                                               psf_log_printf (psf, " %M : %d\n", marker, length) ;
-                                       break ;
-
-                       default :
-                                       psf_log_printf (psf, "Unknown marker : 0x%X %M", marker, marker) ;
-                                       return -1003 ;
-                                       break ;
-                       } ;
-
-               /* SDAT always last marker in file. */
-               if (marker == SDAT_MARKER)
-                       break ;
-               } ;
-
-       puts (psf->parselog.buf) ;
-       puts ("-----------------------------------") ;
-
-       printf ("SDAT length  : %d\n", sdat_length) ;
-       printf ("SLCE count   : %d\n", slce_count) ;
-
-       /* Hack for zero slice count. */
-       if (slce_count == 0 && slce_total == 1)
-               slce_total = frames ;
-
-       printf ("SLCE samples : %d\n", slce_total) ;
-
-       /* Two bytes per sample. */
-       printf ("Comp Ratio   : %f:1\n", (2.0 * slce_total * n_channels) / sdat_length) ;
-
-       puts (" ") ;
-
-       psf->parselog.buf [0] = 0 ;
-
-       /* OK, have the header although not too sure what it all means. */
-
-       psf->endian = SF_ENDIAN_BIG ;
-
-       psf->datalength = psf->filelength - psf->dataoffset ;
-
-       if (psf_fseek (psf, psf->dataoffset, SEEK_SET))
-               return SFE_BAD_SEEK ;
-
-       psf->sf.format = (SF_FORMAT_REX2 | SF_FORMAT_DWVW_12) ;
-
-       psf->sf.channels        = 1 ;
-       psf->bytewidth          = 2 ;
-       psf->blockwidth         = psf->sf.channels * psf->bytewidth ;
-
-       if ((error = dwvw_init (psf, 16)))
-               return error ;
-
-       psf->container_close = rx2_close ;
-
-       if (! psf->sf.frames && psf->blockwidth)
-               psf->sf.frames = psf->datalength / psf->blockwidth ;
-
-       /* All done. */
-
-       return 0 ;
-} /* rx2_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-rx2_close      (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_WRITE)
-       {       /*  Now we know for certain the length of the file we can re-write
-               **      correct values for the FORM, 8SVX and BODY chunks.
-               */
-
-               } ;
-
-       return 0 ;
-} /* rx2_close */
-
-#endif
diff --git a/libs/libsndfile/src/sd2.c b/libs/libsndfile/src/sd2.c
deleted file mode 100644 (file)
index 6be150c..0000000
+++ /dev/null
@@ -1,654 +0,0 @@
-/*
-** Copyright (C) 2001-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2004 Paavo Jumppanen
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-** The sd2 support implemented in this file was partially sponsored
-** (financially) by Paavo Jumppanen.
-*/
-
-/*
-** Documentation on the Mac resource fork was obtained here :
-** http://developer.apple.com/documentation/mac/MoreToolbox/MoreToolbox-99.html
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <stdlib.h>
-#include       <string.h>
-#include       <ctype.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-/*------------------------------------------------------------------------------
- * Markers.
-*/
-
-#define        Sd2f_MARKER                     MAKE_MARKER ('S', 'd', '2', 'f')
-#define        Sd2a_MARKER                     MAKE_MARKER ('S', 'd', '2', 'a')
-#define        ALCH_MARKER                     MAKE_MARKER ('A', 'L', 'C', 'H')
-#define lsf1_MARKER                    MAKE_MARKER ('l', 's', 'f', '1')
-
-#define STR_MARKER                     MAKE_MARKER ('S', 'T', 'R', ' ')
-#define sdML_MARKER                    MAKE_MARKER ('s', 'd', 'M', 'L')
-
-enum
-{      RSRC_STR = 111,
-       RSRC_BIN
-} ;
-
-typedef struct
-{      unsigned char * rsrc_data ;
-       int rsrc_len ;
-       int need_to_free_rsrc_data ;
-
-       int data_offset, data_length ;
-       int map_offset, map_length ;
-
-       int type_count, type_offset ;
-       int item_offset ;
-
-       int str_index, str_count ;
-
-       int string_offset ;
-
-       /* All the above just to get these three. */
-       int sample_size, sample_rate, channels ;
-} SD2_RSRC ;
-
-typedef struct
-{      int type ;
-       int id ;
-       char name [32] ;
-       char value [32] ;
-       int value_len ;
-} STR_RSRC ;
-
-/*------------------------------------------------------------------------------
- * Private static functions.
-*/
-
-static int sd2_close   (SF_PRIVATE *psf) ;
-
-static int sd2_parse_rsrc_fork (SF_PRIVATE *psf) ;
-static int parse_str_rsrc (SF_PRIVATE *psf, SD2_RSRC * rsrc) ;
-
-static int sd2_write_rsrc_fork (SF_PRIVATE *psf, int calc_length) ;
-
-/*------------------------------------------------------------------------------
-** Public functions.
-*/
-
-int
-sd2_open (SF_PRIVATE *psf)
-{      int subformat, error = 0, valid ;
-
-       /* SD2 is always big endian. */
-       psf->endian = SF_ENDIAN_BIG ;
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->rsrclength > 0))
-       {       psf_use_rsrc (psf, SF_TRUE) ;
-               valid = psf_file_valid (psf) ;
-               psf_use_rsrc (psf, SF_FALSE) ;
-               if (! valid)
-               {       psf_log_printf (psf, "sd2_open : psf->rsrc.filedes < 0\n") ;
-                       return SFE_SD2_BAD_RSRC ;
-                       } ;
-
-               error = sd2_parse_rsrc_fork (psf) ;
-
-               if (error)
-                       goto error_cleanup ;
-               } ;
-
-       if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_SD2)
-       {       error = SFE_BAD_OPEN_FORMAT ;
-               goto error_cleanup ;
-               } ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-       psf->dataoffset = 0 ;
-
-       /* Only open and write the resource in RDWR mode is its current length is zero. */
-       if (psf->file.mode == SFM_WRITE || (psf->file.mode == SFM_RDWR && psf->rsrclength == 0))
-       {       psf->rsrc.mode = psf->file.mode ;
-               psf_open_rsrc (psf) ;
-
-               error = sd2_write_rsrc_fork (psf, SF_FALSE) ;
-
-               if (error)
-                       goto error_cleanup ;
-
-               /* Not needed. */
-               psf->write_header = NULL ;
-               } ;
-
-       psf->container_close = sd2_close ;
-
-       psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-       switch (subformat)
-       {       case SF_FORMAT_PCM_S8 : /* 8-bit linear PCM. */
-               case SF_FORMAT_PCM_16 : /* 16-bit linear PCM. */
-               case SF_FORMAT_PCM_24 : /* 24-bit linear PCM */
-               case SF_FORMAT_PCM_32 : /* 32-bit linear PCM */
-                               error = pcm_init (psf) ;
-                               break ;
-
-               default :
-                               error = SFE_UNIMPLEMENTED ;
-                               break ;
-               } ;
-
-       psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-error_cleanup:
-
-       /* Close the resource fork regardless. We won't need it again. */
-       psf_close_rsrc (psf) ;
-
-       return error ;
-} /* sd2_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-sd2_close      (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_WRITE)
-       {       /*  Now we know for certain the audio_length of the file we can re-write
-               **      correct values for the FORM, 8SVX and BODY chunks.
-               */
-
-               } ;
-
-       return 0 ;
-} /* sd2_close */
-
-/*------------------------------------------------------------------------------
-*/
-
-static inline void
-write_char (unsigned char * data, int offset, char value)
-{      data [offset] = value ;
-} /* write_char */
-
-static inline void
-write_short (unsigned char * data, int offset, short value)
-{      data [offset] = value >> 8 ;
-       data [offset + 1] = value ;
-} /* write_char */
-
-static inline void
-write_int (unsigned char * data, int offset, int value)
-{      data [offset] = value >> 24 ;
-       data [offset + 1] = value >> 16 ;
-       data [offset + 2] = value >> 8 ;
-       data [offset + 3] = value ;
-} /* write_int */
-
-static inline void
-write_marker (unsigned char * data, int offset, int value)
-{
-       if (CPU_IS_BIG_ENDIAN)
-       {       data [offset] = value >> 24 ;
-               data [offset + 1] = value >> 16 ;
-               data [offset + 2] = value >> 8 ;
-               data [offset + 3] = value ;
-               }
-       else
-       {       data [offset] = value ;
-               data [offset + 1] = value >> 8 ;
-               data [offset + 2] = value >> 16 ;
-               data [offset + 3] = value >> 24 ;
-               } ;
-} /* write_marker */
-
-static void
-write_str (unsigned char * data, int offset, const char * buffer, int buffer_len)
-{      memcpy (data + offset, buffer, buffer_len) ;
-} /* write_str */
-
-static int
-sd2_write_rsrc_fork (SF_PRIVATE *psf, int UNUSED (calc_length))
-{      SD2_RSRC rsrc ;
-       STR_RSRC str_rsrc [] =
-       {       { RSRC_STR, 1000, "_sample-size", "", 0 },
-               { RSRC_STR, 1001, "_sample-rate", "", 0 },
-               { RSRC_STR, 1002, "_channels", "", 0 },
-               { RSRC_BIN, 1000, "_Markers", "", 8 }
-               } ;
-
-       int k, str_offset, data_offset, next_str ;
-
-       psf_use_rsrc (psf, SF_TRUE) ;
-
-       memset (&rsrc, 0, sizeof (rsrc)) ;
-
-       rsrc.sample_rate = psf->sf.samplerate ;
-       rsrc.sample_size = psf->bytewidth ;
-       rsrc.channels = psf->sf.channels ;
-
-       rsrc.rsrc_data = psf->header ;
-       rsrc.rsrc_len = sizeof (psf->header) ;
-       memset (rsrc.rsrc_data, 0xea, rsrc.rsrc_len) ;
-
-       snprintf (str_rsrc [0].value, sizeof (str_rsrc [0].value), "_%d", rsrc.sample_size) ;
-       snprintf (str_rsrc [1].value, sizeof (str_rsrc [1].value), "_%d.000000", rsrc.sample_rate) ;
-       snprintf (str_rsrc [2].value, sizeof (str_rsrc [2].value), "_%d", rsrc.channels) ;
-
-       for (k = 0 ; k < ARRAY_LEN (str_rsrc) ; k++)
-       {       if (str_rsrc [k].value_len == 0)
-               {       str_rsrc [k].value_len = strlen (str_rsrc [k].value) ;
-                       str_rsrc [k].value [0] = str_rsrc [k].value_len - 1 ;
-                       } ;
-
-               /* Turn name string into a pascal string. */
-               str_rsrc [k].name [0] = strlen (str_rsrc [k].name) - 1 ;
-               } ;
-
-       rsrc.data_offset = 0x100 ;
-
-       /*
-       ** Calculate data length :
-       **              length of strings, plus the length of the sdML chunk.
-       */
-       rsrc.data_length = 0 ;
-       for (k = 0 ; k < ARRAY_LEN (str_rsrc) ; k++)
-               rsrc.data_length += str_rsrc [k].value_len + 4 ;
-
-       rsrc.map_offset = rsrc.data_offset + rsrc.data_length ;
-
-       /* Very start of resource fork. */
-       write_int (rsrc.rsrc_data, 0, rsrc.data_offset) ;
-       write_int (rsrc.rsrc_data, 4, rsrc.map_offset) ;
-       write_int (rsrc.rsrc_data, 8, rsrc.data_length) ;
-
-       write_char (rsrc.rsrc_data, 0x30, strlen (psf->file.name.c)) ;
-       write_str (rsrc.rsrc_data, 0x31, psf->file.name.c, strlen (psf->file.name.c)) ;
-
-       write_short (rsrc.rsrc_data, 0x50, 0) ;
-       write_marker (rsrc.rsrc_data, 0x52, Sd2f_MARKER) ;
-       write_marker (rsrc.rsrc_data, 0x56, lsf1_MARKER) ;
-
-       /* Very start of resource map. */
-       write_int (rsrc.rsrc_data, rsrc.map_offset + 0, rsrc.data_offset) ;
-       write_int (rsrc.rsrc_data, rsrc.map_offset + 4, rsrc.map_offset) ;
-       write_int (rsrc.rsrc_data, rsrc.map_offset + 8, rsrc.data_length) ;
-
-       /* These I don't currently understand. */
-       if (1)
-       {       write_char (rsrc.rsrc_data, rsrc.map_offset+ 16, 1) ;
-               /* Next resource map. */
-               write_int (rsrc.rsrc_data, rsrc.map_offset + 17, 0x12345678) ;
-               /* File ref number. */
-               write_short (rsrc.rsrc_data, rsrc.map_offset + 21, 0xabcd) ;
-               /* Fork attributes. */
-               write_short (rsrc.rsrc_data, rsrc.map_offset + 23, 0) ;
-               } ;
-
-       /* Resource type offset. */
-       rsrc.type_offset = rsrc.map_offset + 30 ;
-       write_short (rsrc.rsrc_data, rsrc.map_offset + 24, rsrc.type_offset - rsrc.map_offset - 2) ;
-
-       /* Type index max. */
-       rsrc.type_count = 2 ;
-       write_short (rsrc.rsrc_data, rsrc.map_offset + 28, rsrc.type_count - 1) ;
-
-       rsrc.item_offset = rsrc.type_offset + rsrc.type_count * 8 ;
-
-       rsrc.str_count = ARRAY_LEN (str_rsrc) ;
-       rsrc.string_offset = rsrc.item_offset + (rsrc.str_count + 1) * 12 - rsrc.map_offset ;
-       write_short (rsrc.rsrc_data, rsrc.map_offset + 26, rsrc.string_offset) ;
-
-       /* Write 'STR ' resource type. */
-       rsrc.str_count = 3 ;
-       write_marker (rsrc.rsrc_data, rsrc.type_offset, STR_MARKER) ;
-       write_short (rsrc.rsrc_data, rsrc.type_offset + 4, rsrc.str_count - 1) ;
-       write_short (rsrc.rsrc_data, rsrc.type_offset + 6, 0x12) ;
-
-       /* Write 'sdML' resource type. */
-       write_marker (rsrc.rsrc_data, rsrc.type_offset + 8, sdML_MARKER) ;
-       write_short (rsrc.rsrc_data, rsrc.type_offset + 12, 0) ;
-       write_short (rsrc.rsrc_data, rsrc.type_offset + 14, 0x36) ;
-
-       str_offset = rsrc.map_offset + rsrc.string_offset ;
-       next_str = 0 ;
-       data_offset = rsrc.data_offset ;
-       for (k = 0 ; k < ARRAY_LEN (str_rsrc) ; k++)
-       {       write_str (rsrc.rsrc_data, str_offset, str_rsrc [k].name, strlen (str_rsrc [k].name)) ;
-
-               write_short (rsrc.rsrc_data, rsrc.item_offset + k * 12, str_rsrc [k].id) ;
-               write_short (rsrc.rsrc_data, rsrc.item_offset + k * 12 + 2, next_str) ;
-
-               str_offset += strlen (str_rsrc [k].name) ;
-               next_str += strlen (str_rsrc [k].name) ;
-
-               write_int (rsrc.rsrc_data, rsrc.item_offset + k * 12 + 4, data_offset - rsrc.data_offset) ;
-
-               write_int (rsrc.rsrc_data, data_offset, str_rsrc [k].value_len) ;
-               write_str (rsrc.rsrc_data, data_offset + 4, str_rsrc [k].value, str_rsrc [k].value_len) ;
-               data_offset += 4 + str_rsrc [k].value_len ;
-               } ;
-
-       /* Finally, calculate and set map length. */
-       rsrc.map_length = str_offset - rsrc.map_offset ;
-       write_int (rsrc.rsrc_data, 12, rsrc.map_length) ;
-       write_int (rsrc.rsrc_data, rsrc.map_offset + 12, rsrc.map_length) ;
-
-       rsrc.rsrc_len = rsrc.map_offset + rsrc.map_length ;
-
-       psf_fwrite (rsrc.rsrc_data, rsrc.rsrc_len, 1, psf) ;
-
-       psf_use_rsrc (psf, SF_FALSE) ;
-
-       if (psf->error)
-               return psf->error ;
-
-       return 0 ;
-} /* sd2_write_rsrc_fork */
-
-/*------------------------------------------------------------------------------
-*/
-
-static inline int
-read_rsrc_char (const SD2_RSRC *prsrc, int offset)
-{      const unsigned char * data = prsrc->rsrc_data ;
-       if (offset < 0 || offset >= prsrc->rsrc_len)
-               return 0 ;
-       return data [offset] ;
-} /* read_rsrc_char */
-
-static inline int
-read_rsrc_short (const SD2_RSRC *prsrc, int offset)
-{      const unsigned char * data = prsrc->rsrc_data ;
-       if (offset < 0 || offset + 1 >= prsrc->rsrc_len)
-               return 0 ;
-       return (data [offset] << 8) + data [offset + 1] ;
-} /* read_rsrc_short */
-
-static inline int
-read_rsrc_int (const SD2_RSRC *prsrc, int offset)
-{      const unsigned char * data = prsrc->rsrc_data ;
-       if (offset < 0 || offset + 3 >= prsrc->rsrc_len)
-               return 0 ;
-       return (data [offset] << 24) + (data [offset + 1] << 16) + (data [offset + 2] << 8) + data [offset + 3] ;
-} /* read_rsrc_int */
-
-static inline int
-read_rsrc_marker (const SD2_RSRC *prsrc, int offset)
-{      const unsigned char * data = prsrc->rsrc_data ;
-
-       if (offset < 0 || offset + 3 >= prsrc->rsrc_len)
-               return 0 ;
-
-       if (CPU_IS_BIG_ENDIAN)
-               return (data [offset] << 24) + (data [offset + 1] << 16) + (data [offset + 2] << 8) + data [offset + 3] ;
-       if (CPU_IS_LITTLE_ENDIAN)
-               return data [offset] + (data [offset + 1] << 8) + (data [offset + 2] << 16) + (data [offset + 3] << 24) ;
-
-       return 0 ;
-} /* read_rsrc_marker */
-
-static void
-read_rsrc_str (const SD2_RSRC *prsrc, int offset, char * buffer, int buffer_len)
-{      const unsigned char * data = prsrc->rsrc_data ;
-       int k ;
-
-       memset (buffer, 0, buffer_len) ;
-
-       if (offset < 0 || offset + buffer_len >= prsrc->rsrc_len)
-               return ;
-
-       for (k = 0 ; k < buffer_len - 1 ; k++)
-       {       if (psf_isprint (data [offset + k]) == 0)
-                       return ;
-               buffer [k] = data [offset + k] ;
-               } ;
-       return ;
-} /* read_rsrc_str */
-
-static int
-sd2_parse_rsrc_fork (SF_PRIVATE *psf)
-{      SD2_RSRC rsrc ;
-       int k, marker, error = 0 ;
-
-       psf_use_rsrc (psf, SF_TRUE) ;
-
-       memset (&rsrc, 0, sizeof (rsrc)) ;
-
-       rsrc.rsrc_len = psf_get_filelen (psf) ;
-       psf_log_printf (psf, "Resource length : %d (0x%04X)\n", rsrc.rsrc_len, rsrc.rsrc_len) ;
-
-       if (rsrc.rsrc_len > SIGNED_SIZEOF (psf->header))
-       {       rsrc.rsrc_data = calloc (1, rsrc.rsrc_len) ;
-               rsrc.need_to_free_rsrc_data = SF_TRUE ;
-               }
-       else
-               rsrc.rsrc_data = psf->header ;
-
-       /* Read in the whole lot. */
-       psf_fread (rsrc.rsrc_data, rsrc.rsrc_len, 1, psf) ;
-
-       /* Reset the header storage because we have changed to the rsrcdes. */
-       psf->headindex = psf->headend = rsrc.rsrc_len ;
-
-       rsrc.data_offset = read_rsrc_int (&rsrc, 0) ;
-       rsrc.map_offset = read_rsrc_int (&rsrc, 4) ;
-       rsrc.data_length = read_rsrc_int (&rsrc, 8) ;
-       rsrc.map_length = read_rsrc_int (&rsrc, 12) ;
-
-       if (rsrc.data_offset == 0x51607 && rsrc.map_offset == 0x20000)
-       {       psf_log_printf (psf, "Trying offset of 0x52 bytes.\n") ;
-               rsrc.data_offset = read_rsrc_int (&rsrc, 0x52 + 0) + 0x52 ;
-               rsrc.map_offset = read_rsrc_int (&rsrc, 0x52 + 4) + 0x52 ;
-               rsrc.data_length = read_rsrc_int (&rsrc, 0x52 + 8) ;
-               rsrc.map_length = read_rsrc_int (&rsrc, 0x52 + 12) ;
-               } ;
-
-       psf_log_printf (psf, "  data offset : 0x%04X\n  map  offset : 0x%04X\n"
-                               "  data length : 0x%04X\n  map  length : 0x%04X\n",
-                               rsrc.data_offset, rsrc.map_offset, rsrc.data_length, rsrc.map_length) ;
-
-       if (rsrc.data_offset > rsrc.rsrc_len)
-       {       psf_log_printf (psf, "Error : rsrc.data_offset (%d, 0x%x) > len\n", rsrc.data_offset, rsrc.data_offset) ;
-               error = SFE_SD2_BAD_DATA_OFFSET ;
-               goto parse_rsrc_fork_cleanup ;
-               } ;
-
-       if (rsrc.map_offset > rsrc.rsrc_len)
-       {       psf_log_printf (psf, "Error : rsrc.map_offset > len\n") ;
-               error = SFE_SD2_BAD_MAP_OFFSET ;
-               goto parse_rsrc_fork_cleanup ;
-               } ;
-
-       if (rsrc.data_length > rsrc.rsrc_len)
-       {       psf_log_printf (psf, "Error : rsrc.data_length > len\n") ;
-               error = SFE_SD2_BAD_DATA_LENGTH ;
-               goto parse_rsrc_fork_cleanup ;
-               } ;
-
-       if (rsrc.map_length > rsrc.rsrc_len)
-       {       psf_log_printf (psf, "Error : rsrc.map_length > len\n") ;
-               error = SFE_SD2_BAD_MAP_LENGTH ;
-               goto parse_rsrc_fork_cleanup ;
-               } ;
-
-       if (rsrc.data_offset + rsrc.data_length != rsrc.map_offset || rsrc.map_offset + rsrc.map_length != rsrc.rsrc_len)
-       {       psf_log_printf (psf, "Error : This does not look like a MacOSX resource fork.\n") ;
-               error = SFE_SD2_BAD_RSRC ;
-               goto parse_rsrc_fork_cleanup ;
-               } ;
-
-       if (rsrc.map_offset + 28 >= rsrc.rsrc_len)
-       {       psf_log_printf (psf, "Bad map offset (%d + 28 > %d).\n", rsrc.map_offset, rsrc.rsrc_len) ;
-               error = SFE_SD2_BAD_RSRC ;
-               goto parse_rsrc_fork_cleanup ;
-               } ;
-
-       rsrc.string_offset = rsrc.map_offset + read_rsrc_short (&rsrc, rsrc.map_offset + 26) ;
-       if (rsrc.string_offset > rsrc.rsrc_len)
-       {       psf_log_printf (psf, "Bad string offset (%d).\n", rsrc.string_offset) ;
-               error = SFE_SD2_BAD_RSRC ;
-               goto parse_rsrc_fork_cleanup ;
-               } ;
-
-       rsrc.type_offset = rsrc.map_offset + 30 ;
-
-       rsrc.type_count = read_rsrc_short (&rsrc, rsrc.map_offset + 28) + 1 ;
-       if (rsrc.type_count < 1)
-       {       psf_log_printf (psf, "Bad type count.\n") ;
-               error = SFE_SD2_BAD_RSRC ;
-               goto parse_rsrc_fork_cleanup ;
-               } ;
-
-       rsrc.item_offset = rsrc.type_offset + rsrc.type_count * 8 ;
-       if (rsrc.item_offset < 0 || rsrc.item_offset > rsrc.rsrc_len)
-       {       psf_log_printf (psf, "Bad item offset (%d).\n", rsrc.item_offset) ;
-               error = SFE_SD2_BAD_RSRC ;
-               goto parse_rsrc_fork_cleanup ;
-               } ;
-
-       rsrc.str_index = -1 ;
-       for (k = 0 ; k < rsrc.type_count ; k ++)
-       {       marker = read_rsrc_marker (&rsrc, rsrc.type_offset + k * 8) ;
-
-               if (marker == STR_MARKER)
-               {       rsrc.str_index = k ;
-                       rsrc.str_count = read_rsrc_short (&rsrc, rsrc.type_offset + k * 8 + 4) + 1 ;
-                       error = parse_str_rsrc (psf, &rsrc) ;
-                       goto parse_rsrc_fork_cleanup ;
-                       } ;
-               } ;
-
-       psf_log_printf (psf, "No 'STR ' resource.\n") ;
-       error = SFE_SD2_BAD_RSRC ;
-
-parse_rsrc_fork_cleanup :
-
-       psf_use_rsrc (psf, SF_FALSE) ;
-
-       if (rsrc.need_to_free_rsrc_data)
-               free (rsrc.rsrc_data) ;
-
-       return error ;
-} /* sd2_parse_rsrc_fork */
-
-static int
-parse_str_rsrc (SF_PRIVATE *psf, SD2_RSRC * rsrc)
-{      char name [32], value [32] ;
-       int k, str_offset, rsrc_id, data_offset = 0, data_len = 0 ;
-
-       psf_log_printf (psf, "Finding parameters :\n") ;
-
-       str_offset = rsrc->string_offset ;
-       psf_log_printf (psf, "  Offset    RsrcId    dlen    slen    Value\n") ;
-
-       for (k = 0 ; data_offset + data_len < rsrc->rsrc_len ; k++)
-       {       int slen ;
-
-               slen = read_rsrc_char (rsrc, str_offset) ;
-               read_rsrc_str (rsrc, str_offset + 1, name, SF_MIN (SIGNED_SIZEOF (name), slen + 1)) ;
-               str_offset += slen + 1 ;
-
-               rsrc_id = read_rsrc_short (rsrc, rsrc->item_offset + k * 12) ;
-
-               data_offset = rsrc->data_offset + read_rsrc_int (rsrc, rsrc->item_offset + k * 12 + 4) ;
-               if (data_offset < 0 || data_offset > rsrc->rsrc_len)
-               {       psf_log_printf (psf, "Exiting parser on data offset of %d.\n", data_offset) ;
-                       break ;
-                       } ;
-
-               data_len = read_rsrc_int (rsrc, data_offset) ;
-               if (data_len < 0 || data_len > rsrc->rsrc_len)
-               {       psf_log_printf (psf, "Exiting parser on data length of %d.\n", data_len) ;
-                       break ;
-                       } ;
-
-               slen = read_rsrc_char (rsrc, data_offset + 4) ;
-               read_rsrc_str (rsrc, data_offset + 5, value, SF_MIN (SIGNED_SIZEOF (value), slen + 1)) ;
-
-               psf_log_printf (psf, "  0x%04x     %4d     %4d     %3d    '%s'\n", data_offset, rsrc_id, data_len, slen, value) ;
-
-               if (rsrc_id == 1000 && rsrc->sample_size == 0)
-                       rsrc->sample_size = strtol (value, NULL, 10) ;
-               else if (rsrc_id == 1001 && rsrc->sample_rate == 0)
-                       rsrc->sample_rate = strtol (value, NULL, 10) ;
-               else if (rsrc_id == 1002 && rsrc->channels == 0)
-                       rsrc->channels = strtol (value, NULL, 10) ;
-               } ;
-
-       psf_log_printf (psf, "Found Parameters :\n") ;
-       psf_log_printf (psf, "  sample-size : %d\n", rsrc->sample_size) ;
-       psf_log_printf (psf, "  sample-rate : %d\n", rsrc->sample_rate) ;
-       psf_log_printf (psf, "  channels    : %d\n", rsrc->channels) ;
-
-       if (rsrc->sample_rate <= 4 && rsrc->sample_size > 4)
-       {       int temp ;
-
-               psf_log_printf (psf, "Geez!! Looks like sample rate and sample size got switched.\nCorrecting this screw up.\n") ;
-               temp = rsrc->sample_rate ;
-               rsrc->sample_rate = rsrc->sample_size ;
-               rsrc->sample_size = temp ;
-               } ;
-
-       if (rsrc->sample_rate < 0)
-       {       psf_log_printf (psf, "Bad sample rate (%d)\n", rsrc->sample_rate) ;
-               return SFE_SD2_BAD_RSRC ;
-               } ;
-
-       if (rsrc->channels < 0)
-       {       psf_log_printf (psf, "Bad channel count (%d)\n", rsrc->channels) ;
-               return SFE_SD2_BAD_RSRC ;
-               } ;
-
-       psf->sf.samplerate = rsrc->sample_rate ;
-       psf->sf.channels = rsrc->channels ;
-       psf->bytewidth = rsrc->sample_size ;
-
-       switch (rsrc->sample_size)
-       {       case 1 :
-                       psf->sf.format = SF_FORMAT_SD2 | SF_FORMAT_PCM_S8 ;
-                       break ;
-
-               case 2 :
-                       psf->sf.format = SF_FORMAT_SD2 | SF_FORMAT_PCM_16 ;
-                       break ;
-
-               case 3 :
-                       psf->sf.format = SF_FORMAT_SD2 | SF_FORMAT_PCM_24 ;
-                       break ;
-
-               case 4 :
-                       psf->sf.format = SF_FORMAT_SD2 | SF_FORMAT_PCM_32 ;
-                       break ;
-
-               default :
-                       psf_log_printf (psf, "Bad sample size (%d)\n", rsrc->sample_size) ;
-                       return SFE_SD2_BAD_SAMPLE_SIZE ;
-               } ;
-
-       psf_log_printf (psf, "ok\n") ;
-
-       return 0 ;
-} /* parse_str_rsrc */
-
diff --git a/libs/libsndfile/src/sds.c b/libs/libsndfile/src/sds.c
deleted file mode 100644 (file)
index 7dd1d9d..0000000
+++ /dev/null
@@ -1,1022 +0,0 @@
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-/*------------------------------------------------------------------------------
-*/
-
-#define        SDS_DATA_OFFSET                         0x15
-#define SDS_BLOCK_SIZE                         127
-
-#define SDS_AUDIO_BYTES_PER_BLOCK      120
-
-#define SDS_3BYTE_TO_INT_DECODE(x) (((x) & 0x7F) | (((x) & 0x7F00) >> 1) | (((x) & 0x7F0000) >> 2))
-#define SDS_INT_TO_3BYTE_ENCODE(x) (((x) & 0x7F) | (((x) << 1) & 0x7F00) | (((x) << 2) & 0x7F0000))
-
-/*------------------------------------------------------------------------------
-** Typedefs.
-*/
-
-typedef struct tag_SDS_PRIVATE
-{      int bitwidth, frames ;
-       int     samplesperblock, total_blocks ;
-
-       int (*reader) (SF_PRIVATE *psf, struct tag_SDS_PRIVATE *psds) ;
-       int (*writer) (SF_PRIVATE *psf, struct tag_SDS_PRIVATE *psds) ;
-
-       int read_block, read_count ;
-       unsigned char read_data [SDS_BLOCK_SIZE] ;
-       int     read_samples [SDS_BLOCK_SIZE / 2] ; /* Maximum samples per block */
-
-       int write_block, write_count ;
-       int total_written ;
-       unsigned char write_data [SDS_BLOCK_SIZE] ;
-       int     write_samples [SDS_BLOCK_SIZE / 2] ; /* Maximum samples per block */
-} SDS_PRIVATE ;
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int     sds_close       (SF_PRIVATE *psf) ;
-
-static int     sds_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int     sds_read_header (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
-
-static int     sds_init (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
-
-static sf_count_t sds_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t sds_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t sds_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t sds_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t sds_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t sds_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t sds_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t sds_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static sf_count_t sds_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-static int sds_byterate (SF_PRIVATE * psf) ;
-
-static int sds_2byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
-static int sds_3byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
-static int sds_4byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
-
-static int sds_read (SF_PRIVATE *psf, SDS_PRIVATE *psds, int *iptr, int readcount) ;
-
-static int sds_2byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
-static int sds_3byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
-static int sds_4byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
-
-static int sds_write (SF_PRIVATE *psf, SDS_PRIVATE *psds, const int *iptr, int writecount) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-sds_open       (SF_PRIVATE *psf)
-{      SDS_PRIVATE     *psds ;
-       int                     error = 0 ;
-
-       /* Hmmmm, need this here to pass update_header_test. */
-       psf->sf.frames = 0 ;
-
-       if (! (psds = calloc (1, sizeof (SDS_PRIVATE))))
-               return SFE_MALLOC_FAILED ;
-       psf->codec_data = psds ;
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-       {       if ((error = sds_read_header (psf, psds)))
-                       return error ;
-               } ;
-
-       if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_SDS)
-               return  SFE_BAD_OPEN_FORMAT ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       if (sds_write_header (psf, SF_FALSE))
-                       return psf->error ;
-
-               psf->write_header = sds_write_header ;
-
-               psf_fseek (psf, SDS_DATA_OFFSET, SEEK_SET) ;
-               } ;
-
-       if ((error = sds_init (psf, psds)) != 0)
-               return error ;
-
-       psf->container_close = sds_close ;
-       psf->seek = sds_seek ;
-       psf->byterate = sds_byterate ;
-
-       psf->blockwidth = 0 ;
-
-       return error ;
-} /* sds_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-sds_close      (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       SDS_PRIVATE *psds ;
-
-               if ((psds = (SDS_PRIVATE *) psf->codec_data) == NULL)
-               {       psf_log_printf (psf, "*** Bad psf->codec_data ptr.\n") ;
-                       return SFE_INTERNAL ;
-                       } ;
-
-               if (psds->write_count > 0)
-               {       memset (&(psds->write_data [psds->write_count]), 0, (psds->samplesperblock - psds->write_count) * sizeof (int)) ;
-                       psds->writer (psf, psds) ;
-                       } ;
-
-               sds_write_header (psf, SF_TRUE) ;
-               } ;
-
-       return 0 ;
-} /* sds_close */
-
-static int
-sds_init (SF_PRIVATE *psf, SDS_PRIVATE *psds)
-{
-       if (psds->bitwidth < 8 || psds->bitwidth > 28)
-               return (psf->error = SFE_SDS_BAD_BIT_WIDTH) ;
-
-       if (psds->bitwidth < 14)
-       {       psds->reader = sds_2byte_read ;
-               psds->writer = sds_2byte_write ;
-               psds->samplesperblock = SDS_AUDIO_BYTES_PER_BLOCK / 2 ;
-               }
-       else if (psds->bitwidth < 21)
-       {       psds->reader = sds_3byte_read ;
-               psds->writer = sds_3byte_write ;
-               psds->samplesperblock = SDS_AUDIO_BYTES_PER_BLOCK / 3 ;
-               }
-       else
-       {       psds->reader = sds_4byte_read ;
-               psds->writer = sds_4byte_write ;
-               psds->samplesperblock = SDS_AUDIO_BYTES_PER_BLOCK / 4 ;
-               } ;
-
-       if (psf->file.mode == SFM_READ || psf->file.mode == SFM_RDWR)
-       {       psf->read_short         = sds_read_s ;
-               psf->read_int           = sds_read_i ;
-               psf->read_float         = sds_read_f ;
-               psf->read_double        = sds_read_d ;
-
-               /* Read first block. */
-               psds->reader (psf, psds) ;
-               } ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       psf->write_short        = sds_write_s ;
-               psf->write_int          = sds_write_i ;
-               psf->write_float        = sds_write_f ;
-               psf->write_double       = sds_write_d ;
-               } ;
-
-       return 0 ;
-} /* sds_init */
-
-static int
-sds_read_header (SF_PRIVATE *psf, SDS_PRIVATE *psds)
-{      unsigned char   channel, bitwidth, loop_type, byte ;
-       unsigned short  sample_no, marker ;
-       unsigned int    samp_period, data_length, sustain_loop_start, sustain_loop_end ;
-       int             bytesread, blockcount ;
-
-       /* Set position to start of file to begin reading header. */
-       bytesread = psf_binheader_readf (psf, "pE211", 0, &marker, &channel, &byte) ;
-
-       if (marker != 0xF07E || byte != 0x01)
-               return SFE_SDS_NOT_SDS ;
-
-       bytesread += psf_binheader_readf (psf, "e2", &sample_no) ;
-       sample_no = SDS_3BYTE_TO_INT_DECODE (sample_no) ;
-
-       psf_log_printf (psf, "Midi Sample Dump Standard (.sds)\nF07E\n"
-                                               " Midi Channel  : %d\n Sample Number : %d\n",
-                                               channel, sample_no) ;
-
-       bytesread += psf_binheader_readf (psf, "e13", &bitwidth, &samp_period) ;
-
-       samp_period = SDS_3BYTE_TO_INT_DECODE (samp_period) ;
-
-       psds->bitwidth = bitwidth ;
-
-       if (psds->bitwidth > 1)
-               psf_log_printf (psf, " Bit Width     : %d\n", psds->bitwidth) ;
-       else
-       {       psf_log_printf (psf, " Bit Width     : %d (should be > 1)\n", psds->bitwidth) ;
-               return SFE_SDS_BAD_BIT_WIDTH ;
-               } ;
-
-       if (samp_period > 0)
-       {       psf->sf.samplerate = 1000000000 / samp_period ;
-
-               psf_log_printf (psf, " Sample Period : %d\n"
-                                                       " Sample Rate   : %d\n",
-                                                       samp_period, psf->sf.samplerate) ;
-               }
-       else
-       {       psf->sf.samplerate = 16000 ;
-
-               psf_log_printf (psf, " Sample Period : %d (should be > 0)\n"
-                                                       " Sample Rate   : %d (guessed)\n",
-                                                       samp_period, psf->sf.samplerate) ;
-               } ;
-
-       bytesread += psf_binheader_readf (psf, "e3331", &data_length, &sustain_loop_start, &sustain_loop_end, &loop_type) ;
-
-       data_length = SDS_3BYTE_TO_INT_DECODE (data_length) ;
-
-       psf->sf.frames = psds->frames = data_length ;
-
-       sustain_loop_start = SDS_3BYTE_TO_INT_DECODE (sustain_loop_start) ;
-       sustain_loop_end = SDS_3BYTE_TO_INT_DECODE (sustain_loop_end) ;
-
-       psf_log_printf (psf,    " Sustain Loop\n"
-                                                       "     Start     : %d\n"
-                                                       "     End       : %d\n"
-                                                       "     Loop Type : %d\n",
-                       sustain_loop_start, sustain_loop_end, loop_type) ;
-
-       psf->dataoffset = SDS_DATA_OFFSET ;
-       psf->datalength = psf->filelength - psf->dataoffset ;
-
-       bytesread += psf_binheader_readf (psf, "1", &byte) ;
-       if (byte != 0xF7)
-               psf_log_printf (psf, "bad end : %X\n", byte & 0xFF) ;
-
-       for (blockcount = 0 ; bytesread < psf->filelength ; blockcount++)
-       {
-               bytesread += psf_fread (&marker, 1, 2, psf) ;
-
-               if (marker == 0)
-                       break ;
-
-               psf_fseek (psf, SDS_BLOCK_SIZE - 2, SEEK_CUR) ;
-               bytesread += SDS_BLOCK_SIZE - 2 ;
-               } ;
-
-       psf_log_printf (psf, "\nBlocks         : %d\n", blockcount) ;
-       psds->total_blocks = blockcount ;
-
-       psds->samplesperblock = SDS_AUDIO_BYTES_PER_BLOCK / ((psds->bitwidth + 6) / 7) ;
-       psf_log_printf (psf, "Samples/Block  : %d\n", psds->samplesperblock) ;
-
-       psf_log_printf (psf, "Frames         : %d\n", blockcount * psds->samplesperblock) ;
-
-       /* Always Mono */
-       psf->sf.channels = 1 ;
-       psf->sf.sections = 1 ;
-
-       /*
-       ** Lie to the user about PCM bit width. Always round up to
-       ** the next multiple of 8.
-       */
-       switch ((psds->bitwidth + 7) / 8)
-       {       case 1 :
-                       psf->sf.format = SF_FORMAT_SDS | SF_FORMAT_PCM_S8 ;
-                       break ;
-
-               case 2 :
-                       psf->sf.format = SF_FORMAT_SDS | SF_FORMAT_PCM_16 ;
-                       break ;
-
-               case 3 :
-                       psf->sf.format = SF_FORMAT_SDS | SF_FORMAT_PCM_24 ;
-                       break ;
-
-               case 4 :
-                       psf->sf.format = SF_FORMAT_SDS | SF_FORMAT_PCM_32 ;
-                       break ;
-
-               default :
-                       psf_log_printf (psf, "*** Weird byte width (%d)\n", (psds->bitwidth + 7) / 8) ;
-                       return SFE_SDS_BAD_BIT_WIDTH ;
-               } ;
-
-       psf_fseek (psf, SDS_DATA_OFFSET, SEEK_SET) ;
-
-       return 0 ;
-} /* sds_read_header */
-
-static int
-sds_write_header (SF_PRIVATE *psf, int calc_length)
-{      SDS_PRIVATE *psds ;
-       sf_count_t      current ;
-       int samp_period, data_length, sustain_loop_start, sustain_loop_end ;
-       unsigned char loop_type = 0 ;
-
-       if ((psds = (SDS_PRIVATE *) psf->codec_data) == NULL)
-       {       psf_log_printf (psf, "*** Bad psf->codec_data ptr.\n") ;
-               return SFE_INTERNAL ;
-               } ;
-
-       if (psf->pipeoffset > 0)
-               return 0 ;
-
-       current = psf_ftell (psf) ;
-
-       if (calc_length)
-               psf->sf.frames = psds->total_written ;
-
-       if (psds->write_count > 0)
-       {       int current_count = psds->write_count ;
-               int current_block = psds->write_block ;
-
-               psds->writer (psf, psds) ;
-
-               psf_fseek (psf, -1 * SDS_BLOCK_SIZE, SEEK_CUR) ;
-
-               psds->write_count = current_count ;
-               psds->write_block = current_block ;
-               } ;
-
-       /* Reset the current header length to zero. */
-       psf->header [0] = 0 ;
-       psf->headindex = 0 ;
-
-       if (psf->is_pipe == SF_FALSE)
-               psf_fseek (psf, 0, SEEK_SET) ;
-
-       psf_binheader_writef (psf, "E211", 0xF07E, 0, 1) ;
-
-       switch (SF_CODEC (psf->sf.format))
-       {       case SF_FORMAT_PCM_S8 :
-                               psds->bitwidth = 8 ;
-                               break ;
-               case SF_FORMAT_PCM_16 :
-                               psds->bitwidth = 16 ;
-                               break ;
-               case SF_FORMAT_PCM_24 :
-                               psds->bitwidth = 24 ;
-                               break ;
-               default:
-                       return SFE_SDS_BAD_BIT_WIDTH ;
-               } ;
-
-       samp_period = SDS_INT_TO_3BYTE_ENCODE (1000000000 / psf->sf.samplerate) ;
-
-       psf_binheader_writef (psf, "e213", 0, psds->bitwidth, samp_period) ;
-
-       data_length                     = SDS_INT_TO_3BYTE_ENCODE (psds->total_written) ;
-       sustain_loop_start      = SDS_INT_TO_3BYTE_ENCODE (0) ;
-       sustain_loop_end        = SDS_INT_TO_3BYTE_ENCODE (0) ;
-
-       psf_binheader_writef (psf, "e33311", data_length, sustain_loop_start, sustain_loop_end, loop_type, 0xF7) ;
-
-       /* Header construction complete so write it out. */
-       psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-       if (psf->error)
-               return psf->error ;
-
-       psf->dataoffset = psf->headindex ;
-       psf->datalength = psds->write_block * SDS_BLOCK_SIZE ;
-
-       if (current > 0)
-               psf_fseek (psf, current, SEEK_SET) ;
-
-       return psf->error ;
-} /* sds_write_header */
-
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-sds_2byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds)
-{      unsigned char *ucptr, checksum ;
-       unsigned int sample ;
-       int     k ;
-
-       psds->read_block ++ ;
-       psds->read_count = 0 ;
-
-       if (psds->read_block * psds->samplesperblock > psds->frames)
-       {       memset (psds->read_samples, 0, psds->samplesperblock * sizeof (int)) ;
-               return 1 ;
-               } ;
-
-       if ((k = psf_fread (psds->read_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
-               psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, SDS_BLOCK_SIZE) ;
-
-       if (psds->read_data [0] != 0xF0)
-       {       printf ("Error A : %02X\n", psds->read_data [0] & 0xFF) ;
-               } ;
-
-       checksum = psds->read_data [1] ;
-       if (checksum != 0x7E)
-       {       printf ("Error 1 : %02X\n", checksum & 0xFF) ;
-               }
-
-       for (k = 2 ; k <= SDS_BLOCK_SIZE - 3 ; k ++)
-               checksum ^= psds->read_data [k] ;
-
-       checksum &= 0x7F ;
-
-       if (checksum != psds->read_data [SDS_BLOCK_SIZE - 2])
-       {       psf_log_printf (psf, "Block %d : checksum is %02X should be %02X\n", psds->read_data [4], checksum, psds->read_data [SDS_BLOCK_SIZE - 2]) ;
-               } ;
-
-       ucptr = psds->read_data + 5 ;
-       for (k = 0 ; k < 120 ; k += 2)
-       {       sample = (ucptr [k] << 25) + (ucptr [k + 1] << 18) ;
-               psds->read_samples [k / 2] = (int) (sample - 0x80000000) ;
-               } ;
-
-       return 1 ;
-} /* sds_2byte_read */
-
-static int
-sds_3byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds)
-{      unsigned char *ucptr, checksum ;
-       unsigned int sample ;
-       int     k ;
-
-       psds->read_block ++ ;
-       psds->read_count = 0 ;
-
-       if (psds->read_block * psds->samplesperblock > psds->frames)
-       {       memset (psds->read_samples, 0, psds->samplesperblock * sizeof (int)) ;
-               return 1 ;
-               } ;
-
-       if ((k = psf_fread (psds->read_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
-               psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, SDS_BLOCK_SIZE) ;
-
-       if (psds->read_data [0] != 0xF0)
-       {       printf ("Error A : %02X\n", psds->read_data [0] & 0xFF) ;
-               } ;
-
-       checksum = psds->read_data [1] ;
-       if (checksum != 0x7E)
-       {       printf ("Error 1 : %02X\n", checksum & 0xFF) ;
-               }
-
-       for (k = 2 ; k <= SDS_BLOCK_SIZE - 3 ; k ++)
-               checksum ^= psds->read_data [k] ;
-
-       checksum &= 0x7F ;
-
-       if (checksum != psds->read_data [SDS_BLOCK_SIZE - 2])
-       {       psf_log_printf (psf, "Block %d : checksum is %02X should be %02X\n", psds->read_data [4], checksum, psds->read_data [SDS_BLOCK_SIZE - 2]) ;
-               } ;
-
-       ucptr = psds->read_data + 5 ;
-       for (k = 0 ; k < 120 ; k += 3)
-       {       sample = (ucptr [k] << 25) + (ucptr [k + 1] << 18) + (ucptr [k + 2] << 11) ;
-               psds->read_samples [k / 3] = (int) (sample - 0x80000000) ;
-               } ;
-
-       return 1 ;
-} /* sds_3byte_read */
-
-static int
-sds_4byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds)
-{      unsigned char *ucptr, checksum ;
-       unsigned int sample ;
-       int     k ;
-
-       psds->read_block ++ ;
-       psds->read_count = 0 ;
-
-       if (psds->read_block * psds->samplesperblock > psds->frames)
-       {       memset (psds->read_samples, 0, psds->samplesperblock * sizeof (int)) ;
-               return 1 ;
-               } ;
-
-       if ((k = psf_fread (psds->read_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
-               psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, SDS_BLOCK_SIZE) ;
-
-       if (psds->read_data [0] != 0xF0)
-       {       printf ("Error A : %02X\n", psds->read_data [0] & 0xFF) ;
-               } ;
-
-       checksum = psds->read_data [1] ;
-       if (checksum != 0x7E)
-       {       printf ("Error 1 : %02X\n", checksum & 0xFF) ;
-               }
-
-       for (k = 2 ; k <= SDS_BLOCK_SIZE - 3 ; k ++)
-               checksum ^= psds->read_data [k] ;
-
-       checksum &= 0x7F ;
-
-       if (checksum != psds->read_data [SDS_BLOCK_SIZE - 2])
-       {       psf_log_printf (psf, "Block %d : checksum is %02X should be %02X\n", psds->read_data [4], checksum, psds->read_data [SDS_BLOCK_SIZE - 2]) ;
-               } ;
-
-       ucptr = psds->read_data + 5 ;
-       for (k = 0 ; k < 120 ; k += 4)
-       {       sample = (ucptr [k] << 25) + (ucptr [k + 1] << 18) + (ucptr [k + 2] << 11) + (ucptr [k + 3] << 4) ;
-               psds->read_samples [k / 4] = (int) (sample - 0x80000000) ;
-               } ;
-
-       return 1 ;
-} /* sds_4byte_read */
-
-
-static sf_count_t
-sds_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       SDS_PRIVATE     *psds ;
-       int                     *iptr ;
-       int                     k, bufferlen, readcount, count ;
-       sf_count_t      total = 0 ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       psds = (SDS_PRIVATE*) psf->codec_data ;
-
-       iptr = ubuf.ibuf ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = sds_read (psf, psds, iptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = iptr [k] >> 16 ;
-               total += count ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* sds_read_s */
-
-static sf_count_t
-sds_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      SDS_PRIVATE *psds ;
-       int                     total ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       psds = (SDS_PRIVATE*) psf->codec_data ;
-
-       total = sds_read (psf, psds, ptr, len) ;
-
-       return total ;
-} /* sds_read_i */
-
-static sf_count_t
-sds_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       SDS_PRIVATE     *psds ;
-       int                     *iptr ;
-       int                     k, bufferlen, readcount, count ;
-       sf_count_t      total = 0 ;
-       float           normfact ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       psds = (SDS_PRIVATE*) psf->codec_data ;
-
-       if (psf->norm_float == SF_TRUE)
-               normfact = 1.0 / 0x80000000 ;
-       else
-               normfact = 1.0 / (1 << psds->bitwidth) ;
-
-       iptr = ubuf.ibuf ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = sds_read (psf, psds, iptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = normfact * iptr [k] ;
-               total += count ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* sds_read_f */
-
-static sf_count_t
-sds_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       SDS_PRIVATE     *psds ;
-       int                     *iptr ;
-       int                     k, bufferlen, readcount, count ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       psds = (SDS_PRIVATE*) psf->codec_data ;
-
-       if (psf->norm_double == SF_TRUE)
-               normfact = 1.0 / 0x80000000 ;
-       else
-               normfact = 1.0 / (1 << psds->bitwidth) ;
-
-       iptr = ubuf.ibuf ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = sds_read (psf, psds, iptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = normfact * iptr [k] ;
-               total += count ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* sds_read_d */
-
-static int
-sds_read (SF_PRIVATE *psf, SDS_PRIVATE *psds, int *ptr, int len)
-{      int     count, total = 0 ;
-
-       while (total < len)
-       {       if (psds->read_block * psds->samplesperblock >= psds->frames)
-               {       memset (&(ptr [total]), 0, (len - total) * sizeof (int)) ;
-                       return total ;
-                       } ;
-
-               if (psds->read_count >= psds->samplesperblock)
-                       psds->reader (psf, psds) ;
-
-               count = (psds->samplesperblock - psds->read_count) ;
-               count = (len - total > count) ? count : len - total ;
-
-               memcpy (&(ptr [total]), &(psds->read_samples [psds->read_count]), count * sizeof (int)) ;
-               total += count ;
-               psds->read_count += count ;
-               } ;
-
-       return total ;
-} /* sds_read */
-
-/*==============================================================================
-*/
-
-static sf_count_t
-sds_seek (SF_PRIVATE *psf, int mode, sf_count_t seek_from_start)
-{      SDS_PRIVATE     *psds ;
-       sf_count_t      file_offset ;
-       int                     newblock, newsample ;
-
-       if ((psds = psf->codec_data) == NULL)
-       {       psf->error = SFE_INTERNAL ;
-               return PSF_SEEK_ERROR ;
-               } ;
-
-       if (psf->datalength < 0 || psf->dataoffset < 0)
-       {       psf->error = SFE_BAD_SEEK ;
-               return PSF_SEEK_ERROR ;
-               } ;
-
-       if (seek_from_start < 0 || seek_from_start > psf->sf.frames)
-       {       psf->error = SFE_BAD_SEEK ;
-               return PSF_SEEK_ERROR ;
-               } ;
-
-       if (mode == SFM_READ && psds->write_count > 0)
-               psds->writer (psf, psds) ;
-
-       newblock = seek_from_start / psds->samplesperblock ;
-       newsample = seek_from_start % psds->samplesperblock ;
-
-       switch (mode)
-       {       case SFM_READ :
-                       if (newblock > psds->total_blocks)
-                       {       psf->error = SFE_BAD_SEEK ;
-                               return PSF_SEEK_ERROR ;
-                               } ;
-
-                       file_offset = psf->dataoffset + newblock * SDS_BLOCK_SIZE ;
-
-                       if (psf_fseek (psf, file_offset, SEEK_SET) != file_offset)
-                       {       psf->error = SFE_SEEK_FAILED ;
-                               return PSF_SEEK_ERROR ;
-                               } ;
-
-                       psds->read_block = newblock ;
-                       psds->reader (psf, psds) ;
-                       psds->read_count = newsample ;
-                       break ;
-
-               case SFM_WRITE :
-                       if (newblock > psds->total_blocks)
-                       {       psf->error = SFE_BAD_SEEK ;
-                               return PSF_SEEK_ERROR ;
-                               } ;
-
-                       file_offset = psf->dataoffset + newblock * SDS_BLOCK_SIZE ;
-
-                       if (psf_fseek (psf, file_offset, SEEK_SET) != file_offset)
-                       {       psf->error = SFE_SEEK_FAILED ;
-                               return PSF_SEEK_ERROR ;
-                               } ;
-
-                       psds->write_block = newblock ;
-                       psds->reader (psf, psds) ;
-                       psds->write_count = newsample ;
-                       break ;
-
-               default :
-                       psf->error = SFE_BAD_SEEK ;
-                       return PSF_SEEK_ERROR ;
-                       break ;
-               } ;
-
-       return seek_from_start ;
-} /* sds_seek */
-
-static int
-sds_byterate (SF_PRIVATE * psf)
-{
-       if (psf->file.mode == SFM_READ)
-               return (psf->datalength * psf->sf.samplerate) / psf->sf.frames ;
-
-       return -1 ;
-} /* sds_byterate */
-
-/*==============================================================================
-*/
-
-static int
-sds_2byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds)
-{      unsigned char *ucptr, checksum ;
-       unsigned int sample ;
-       int     k ;
-
-       psds->write_data [0] = 0xF0 ;
-       psds->write_data [1] = 0x7E ;
-       psds->write_data [2] = 0 ;                                                      /* Channel number */
-       psds->write_data [3] = 2 ;
-       psds->write_data [4] = psds->write_block & 0x7F ;       /* Packet number */
-
-       ucptr = psds->write_data + 5 ;
-       for (k = 0 ; k < 120 ; k += 2)
-       {       sample = psds->write_samples [k / 2] ;
-               sample += 0x80000000 ;
-               ucptr [k] = (sample >> 25) & 0x7F ;
-               ucptr [k + 1] = (sample >> 18) & 0x7F ;
-               } ;
-
-       checksum = psds->write_data [1] ;
-       for (k = 2 ; k <= SDS_BLOCK_SIZE - 3 ; k ++)
-               checksum ^= psds->write_data [k] ;
-       checksum &= 0x7F ;
-
-       psds->write_data [SDS_BLOCK_SIZE - 2] = checksum ;
-       psds->write_data [SDS_BLOCK_SIZE - 1] = 0xF7 ;
-
-       if ((k = psf_fwrite (psds->write_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
-               psf_log_printf (psf, "*** Warning : psf_fwrite (%d != %d).\n", k, SDS_BLOCK_SIZE) ;
-
-       psds->write_block ++ ;
-       psds->write_count = 0 ;
-
-       if (psds->write_block > psds->total_blocks)
-               psds->total_blocks = psds->write_block ;
-       psds->frames = psds->total_blocks * psds->samplesperblock ;
-
-       return 1 ;
-} /* sds_2byte_write */
-
-static int
-sds_3byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds)
-{      unsigned char *ucptr, checksum ;
-       unsigned int sample ;
-       int     k ;
-
-       psds->write_data [0] = 0xF0 ;
-       psds->write_data [1] = 0x7E ;
-       psds->write_data [2] = 0 ;                                                      /* Channel number */
-       psds->write_data [3] = 2 ;
-       psds->write_data [4] = psds->write_block & 0x7F ;       /* Packet number */
-
-       ucptr = psds->write_data + 5 ;
-       for (k = 0 ; k < 120 ; k += 3)
-       {       sample = psds->write_samples [k / 3] ;
-               sample += 0x80000000 ;
-               ucptr [k] = (sample >> 25) & 0x7F ;
-               ucptr [k + 1] = (sample >> 18) & 0x7F ;
-               ucptr [k + 2] = (sample >> 11) & 0x7F ;
-               } ;
-
-       checksum = psds->write_data [1] ;
-       for (k = 2 ; k <= SDS_BLOCK_SIZE - 3 ; k ++)
-               checksum ^= psds->write_data [k] ;
-       checksum &= 0x7F ;
-
-       psds->write_data [SDS_BLOCK_SIZE - 2] = checksum ;
-       psds->write_data [SDS_BLOCK_SIZE - 1] = 0xF7 ;
-
-       if ((k = psf_fwrite (psds->write_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
-               psf_log_printf (psf, "*** Warning : psf_fwrite (%d != %d).\n", k, SDS_BLOCK_SIZE) ;
-
-       psds->write_block ++ ;
-       psds->write_count = 0 ;
-
-       if (psds->write_block > psds->total_blocks)
-               psds->total_blocks = psds->write_block ;
-       psds->frames = psds->total_blocks * psds->samplesperblock ;
-
-       return 1 ;
-} /* sds_3byte_write */
-
-static int
-sds_4byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds)
-{      unsigned char *ucptr, checksum ;
-       unsigned int sample ;
-       int     k ;
-
-       psds->write_data [0] = 0xF0 ;
-       psds->write_data [1] = 0x7E ;
-       psds->write_data [2] = 0 ;                                                      /* Channel number */
-       psds->write_data [3] = 2 ;
-       psds->write_data [4] = psds->write_block & 0x7F ;       /* Packet number */
-
-       ucptr = psds->write_data + 5 ;
-       for (k = 0 ; k < 120 ; k += 4)
-       {       sample = psds->write_samples [k / 4] ;
-               sample += 0x80000000 ;
-               ucptr [k] = (sample >> 25) & 0x7F ;
-               ucptr [k + 1] = (sample >> 18) & 0x7F ;
-               ucptr [k + 2] = (sample >> 11) & 0x7F ;
-               ucptr [k + 3] = (sample >> 4) & 0x7F ;
-               } ;
-
-       checksum = psds->write_data [1] ;
-       for (k = 2 ; k <= SDS_BLOCK_SIZE - 3 ; k ++)
-               checksum ^= psds->write_data [k] ;
-       checksum &= 0x7F ;
-
-       psds->write_data [SDS_BLOCK_SIZE - 2] = checksum ;
-       psds->write_data [SDS_BLOCK_SIZE - 1] = 0xF7 ;
-
-       if ((k = psf_fwrite (psds->write_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
-               psf_log_printf (psf, "*** Warning : psf_fwrite (%d != %d).\n", k, SDS_BLOCK_SIZE) ;
-
-       psds->write_block ++ ;
-       psds->write_count = 0 ;
-
-       if (psds->write_block > psds->total_blocks)
-               psds->total_blocks = psds->write_block ;
-       psds->frames = psds->total_blocks * psds->samplesperblock ;
-
-       return 1 ;
-} /* sds_4byte_write */
-
-static sf_count_t
-sds_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       SDS_PRIVATE     *psds ;
-       int                     *iptr ;
-       int                     k, bufferlen, writecount, count ;
-       sf_count_t      total = 0 ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       psds = (SDS_PRIVATE*) psf->codec_data ;
-       psds->total_written += len ;
-
-       iptr = ubuf.ibuf ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : len ;
-               for (k = 0 ; k < writecount ; k++)
-                       iptr [k] = ptr [total + k] << 16 ;
-               count = sds_write (psf, psds, iptr, writecount) ;
-               total += count ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* sds_write_s */
-
-static sf_count_t
-sds_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      SDS_PRIVATE *psds ;
-       int                     total ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       psds = (SDS_PRIVATE*) psf->codec_data ;
-       psds->total_written += len ;
-
-       total = sds_write (psf, psds, ptr, len) ;
-
-       return total ;
-} /* sds_write_i */
-
-static sf_count_t
-sds_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       SDS_PRIVATE     *psds ;
-       int                     *iptr ;
-       int                     k, bufferlen, writecount, count ;
-       sf_count_t      total = 0 ;
-       float           normfact ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       psds = (SDS_PRIVATE*) psf->codec_data ;
-       psds->total_written += len ;
-
-       if (psf->norm_float == SF_TRUE)
-               normfact = 1.0 * 0x80000000 ;
-       else
-               normfact = 1.0 * (1 << psds->bitwidth) ;
-
-       iptr = ubuf.ibuf ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : len ;
-               for (k = 0 ; k < writecount ; k++)
-                       iptr [k] = normfact * ptr [total + k] ;
-               count = sds_write (psf, psds, iptr, writecount) ;
-               total += count ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* sds_write_f */
-
-static sf_count_t
-sds_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       SDS_PRIVATE     *psds ;
-       int                     *iptr ;
-       int                     k, bufferlen, writecount, count ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       if (psf->codec_data == NULL)
-               return 0 ;
-       psds = (SDS_PRIVATE*) psf->codec_data ;
-       psds->total_written += len ;
-
-       if (psf->norm_double == SF_TRUE)
-               normfact = 1.0 * 0x80000000 ;
-       else
-               normfact = 1.0 * (1 << psds->bitwidth) ;
-
-       iptr = ubuf.ibuf ;
-       bufferlen = ARRAY_LEN (ubuf.ibuf) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : len ;
-               for (k = 0 ; k < writecount ; k++)
-                       iptr [k] = normfact * ptr [total + k] ;
-               count = sds_write (psf, psds, iptr, writecount) ;
-               total += count ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* sds_write_d */
-
-static int
-sds_write (SF_PRIVATE *psf, SDS_PRIVATE *psds, const int *ptr, int len)
-{      int     count, total = 0 ;
-
-       while (total < len)
-       {       count = psds->samplesperblock - psds->write_count ;
-               if (count > len - total)
-                       count = len - total ;
-
-               memcpy (&(psds->write_samples [psds->write_count]), &(ptr [total]), count * sizeof (int)) ;
-               total += count ;
-               psds->write_count += count ;
-
-               if (psds->write_count >= psds->samplesperblock)
-                       psds->writer (psf, psds) ;
-               } ;
-
-       return total ;
-} /* sds_write */
-
diff --git a/libs/libsndfile/src/sf_unistd.h b/libs/libsndfile/src/sf_unistd.h
deleted file mode 100644 (file)
index 9fca68e..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/* Some defines that microsoft 'forgot' to implement. */
-
-#ifndef S_IRWXU
-#define        S_IRWXU         0000700 /* rwx, owner */
-#endif
-
-#ifndef                S_IRUSR
-#define                S_IRUSR 0000400 /* read permission, owner */
-#endif
-
-#ifndef                S_IWUSR
-#define                S_IWUSR 0000200 /* write permission, owner */
-#endif
-
-#ifndef                S_IXUSR
-#define                S_IXUSR 0000100 /* execute/search permission, owner */
-#endif
-
-/* Windows doesn't have group permissions so set all these to zero. */
-#define        S_IRWXG         0       /* rwx, group */
-#define                S_IRGRP 0       /* read permission, group */
-#define                S_IWGRP 0       /* write permission, grougroup */
-#define                S_IXGRP 0       /* execute/search permission, group */
-
-/* Windows doesn't have others permissions so set all these to zero. */
-#define        S_IRWXO         0       /* rwx, other */
-#define                S_IROTH 0       /* read permission, other */
-#define                S_IWOTH 0       /* write permission, other */
-#define                S_IXOTH 0       /* execute/search permission, other */
-
-#ifndef S_ISFIFO
-#define S_ISFIFO(mode) (((mode) & _S_IFMT) == _S_IFIFO)
-#endif
-
-#ifndef S_ISREG
-#define        S_ISREG(mode)   (((mode) & _S_IFREG) == _S_IFREG)
-#endif
-
-/*
-**     Don't know if these are still needed.
-**
-**     #define _IFMT           _S_IFMT
-**     #define _IFREG          _S_IFREG
-*/
-
diff --git a/libs/libsndfile/src/sfconfig.h b/libs/libsndfile/src/sfconfig.h
deleted file mode 100644 (file)
index b9b2dbd..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-** Copyright (C) 2005-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**     Autoconf leaves many config parameters undefined.
-**     Here we change then from being undefined to defining them to 0.
-**     This allows things like:
-**
-**             #if HAVE_CONFIG_PARAM
-**
-**     and
-**
-**             if (HAVE_CONFIG_PARAM)
-**                     do_something () ;
-*/
-
-#ifndef SFCONFIG_H
-#define SFCONFIG_H
-
-/* Include the Autoconf generated file. */
-#include "config.h"
-
-/* Now fiddle the values. */
-
-#ifndef HAVE_ALSA_ASOUNDLIB_H
-#define HAVE_ALSA_ASOUNDLIB_H 0
-#endif
-
-#ifndef HAVE_BYTESWAP_H
-#define HAVE_BYTESWAP_H 0
-#endif
-
-#ifndef HAVE_DECL_S_IRGRP
-#define        HAVE_DECL_S_IRGRP 0
-#endif
-
-#ifndef HAVE_ENDIAN_H
-#define HAVE_ENDIAN_H 0
-#endif
-
-#ifndef HAVE_FSTAT64
-#define HAVE_FSTAT64 0
-#endif
-
-#ifndef HAVE_FSYNC
-#define HAVE_FSYNC 0
-#endif
-
-#ifndef HAVE_LOCALE_H
-#define HAVE_LOCALE_H 0
-#endif
-
-#ifndef HAVE_LRINT
-#define HAVE_LRINT 0
-#endif
-
-#ifndef HAVE_LRINTF
-#define HAVE_LRINTF 0
-#endif
-
-#ifndef HAVE_MMAP
-#define HAVE_MMAP 0
-#endif
-
-#ifndef HAVE_SETLOCALE
-#define HAVE_SETLOCALE 0
-#endif
-
-#ifndef HAVE_SQLITE3
-#define HAVE_SQLITE3 0
-#endif
-
-#ifndef HAVE_STDINT_H
-#define HAVE_STDINT_H 0
-#endif
-
-#ifndef HAVE_SYS_WAIT_H
-#define HAVE_SYS_WAIT_H 0
-#endif
-
-#ifndef HAVE_UNISTD_H
-#define HAVE_UNISTD_H 0
-#endif
-
-#ifndef HAVE_PIPE
-#define HAVE_PIPE 0
-#endif
-
-#ifndef HAVE_WAITPID
-#define        HAVE_WAITPID 0
-#endif
-
-#ifndef HAVE_X86INTRIN_H
-#define HAVE_X86INTRIN_H 0
-#endif
-
-#define CPU_IS_X86             (defined __i486__ || defined __i586__ || defined __i686__ || defined __x86_64__)
-#define CPU_IS_X86_64  (defined __x86_64__)
-
-#endif
diff --git a/libs/libsndfile/src/sfendian.h b/libs/libsndfile/src/sfendian.h
deleted file mode 100644 (file)
index 044fa3a..0000000
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef SFENDIAN_INCLUDED
-#define SFENDIAN_INCLUDED
-
-#include "sfconfig.h"
-
-#include <stdint.h>
-#ifndef WIN32
-#include <inttypes.h>
-#endif
-
-
-#if COMPILER_IS_GCC && CPU_IS_X86
-
-static inline int16_t
-ENDSWAP_16 (int16_t x)
-{      int16_t y ;
-       __asm__ ("rorw $8, %w0" : "=r" (y) : "0" (x) : "cc") ;
-       return y ;
-} /* ENDSWAP_16 */
-
-static inline int32_t
-ENDSWAP_32 (int32_t x)
-{      int32_t y ;
-       __asm__ ("bswap %0" : "=r" (y) : "0" (x)) ;
-       return y ;
-} /* ENDSWAP_32 */
-
-#if CPU_IS_X86_64
-
-static inline int64_t
-ENDSWAP_64X (int64_t x)
-{      int64_t y ;
-       __asm__ ("bswap %q0" : "=r" (y) : "0" (x)) ;
-       return y ;
-} /* ENDSWAP_64X */
-
-#define ENDSWAP_64 ENDSWAP_64X
-
-#endif
-
-#elif HAVE_BYTESWAP_H                  /* Linux, any CPU */
-#include <byteswap.h>
-
-#define        ENDSWAP_16(x)           (bswap_16 (x))
-#define        ENDSWAP_32(x)           (bswap_32 (x))
-#define        ENDSWAP_64(x)           (bswap_64 (x))
-
-#else
-
-#define        ENDSWAP_16(x)           ((((x) >> 8) & 0xFF) + (((x) & 0xFF) << 8))
-#define        ENDSWAP_32(x)           ((((x) >> 24) & 0xFF) + (((x) >> 8) & 0xFF00) + (((x) & 0xFF00) << 8) + (((x) & 0xFF) << 24))
-
-#endif
-
-#ifndef ENDSWAP_64
-static inline uint64_t
-ENDSWAP_64 (uint64_t x)
-{      union
-       {       uint32_t parts [2] ;
-               uint64_t whole ;
-       } u ;
-       uint32_t temp ;
-
-       u.whole = x ;
-       temp = u.parts [0] ;
-       u.parts [0] = ENDSWAP_32 (u.parts [1]) ;
-       u.parts [1] = ENDSWAP_32 (temp) ;
-       return u.whole ;
-}
-#endif
-
-/*
-** Many file types (ie WAV, AIFF) use sets of four consecutive bytes as a
-** marker indicating different sections of the file.
-** The following MAKE_MARKER macro allows th creation of integer constants
-** for these markers.
-*/
-
-#if (CPU_IS_LITTLE_ENDIAN == 1)
-       #define MAKE_MARKER(a, b, c, d)         ((uint32_t) ((a) | ((b) << 8) | ((c) << 16) | (((uint32_t) (d)) << 24)))
-#elif (CPU_IS_BIG_ENDIAN == 1)
-       #define MAKE_MARKER(a, b, c, d)         ((uint32_t) ((((uint32_t) (a)) << 24) | ((b) << 16) | ((c) << 8) | (d)))
-#else
-       #error "Target CPU endian-ness unknown. May need to hand edit src/sfconfig.h"
-#endif
-
-/*
-** Macros to handle reading of data of a specific endian-ness into host endian
-** shorts and ints. The single input is an unsigned char* pointer to the start
-** of the object. There are two versions of each macro as we need to deal with
-** both big and little endian CPUs.
-*/
-
-#if (CPU_IS_LITTLE_ENDIAN == 1)
-       #define LE2H_16(x)                      (x)
-       #define LE2H_32(x)                      (x)
-
-       #define BE2H_16(x)                      ENDSWAP_16 (x)
-       #define BE2H_32(x)                      ENDSWAP_32 (x)
-       #define BE2H_64(x)                      ENDSWAP_64 (x)
-
-       #define H2BE_16(x)                      ENDSWAP_16 (x)
-       #define H2BE_32(x)                      ENDSWAP_32 (x)
-
-#elif (CPU_IS_BIG_ENDIAN == 1)
-       #define LE2H_16(x)                      ENDSWAP_16 (x)
-       #define LE2H_32(x)                      ENDSWAP_32 (x)
-
-       #define BE2H_16(x)                      (x)
-       #define BE2H_32(x)                      (x)
-       #define BE2H_64(x)                      (x)
-
-       #define H2BE_16(x)                      (x)
-       #define H2BE_32(x)                      (x)
-
-       #define H2LE_16(x)                      ENDSWAP_16 (x)
-       #define H2LE_32(x)                      ENDSWAP_32 (x)
-
-#else
-       #error "Target CPU endian-ness unknown. May need to hand edit src/sfconfig.h"
-#endif
-
-#define LET2H_16_PTR(x)                        ((x) [1] + ((x) [2] << 8))
-#define LET2H_32_PTR(x)                        (((x) [0] << 8) + ((x) [1] << 16) + ((x) [2] << 24))
-
-#define BET2H_16_PTR(x)                        (((x) [0] << 8) + (x) [1])
-#define BET2H_32_PTR(x)                        (((x) [0] << 24) + ((x) [1] << 16) + ((x) [2] << 8))
-
-static inline void
-psf_put_be64 (uint8_t *ptr, int offset, int64_t value)
-{
-       ptr [offset] = value >> 56 ;
-       ptr [offset + 1] = value >> 48 ;
-       ptr [offset + 2] = value >> 40 ;
-       ptr [offset + 3] = value >> 32 ;
-       ptr [offset + 4] = value >> 24 ;
-       ptr [offset + 5] = value >> 16 ;
-       ptr [offset + 6] = value >> 8 ;
-       ptr [offset + 7] = value ;
-} /* psf_put_be64 */
-
-static inline void
-psf_put_be32 (uint8_t *ptr, int offset, int32_t value)
-{
-       ptr [offset] = value >> 24 ;
-       ptr [offset + 1] = value >> 16 ;
-       ptr [offset + 2] = value >> 8 ;
-       ptr [offset + 3] = value ;
-} /* psf_put_be32 */
-
-static inline void
-psf_put_be16 (uint8_t *ptr, int offset, int16_t value)
-{
-       ptr [offset] = value >> 8 ;
-       ptr [offset + 1] = value ;
-} /* psf_put_be16 */
-
-static inline int64_t
-psf_get_be64 (uint8_t *ptr, int offset)
-{      int64_t value ;
-
-       value = ptr [offset] << 24 ;
-       value += ptr [offset + 1] << 16 ;
-       value += ptr [offset + 2] << 8 ;
-       value += ptr [offset + 3] ;
-
-       value <<= 32 ;
-
-       value += ptr [offset + 4] << 24 ;
-       value += ptr [offset + 5] << 16 ;
-       value += ptr [offset + 6] << 8 ;
-       value += ptr [offset + 7] ;
-       return value ;
-} /* psf_get_be64 */
-
-static inline int32_t
-psf_get_be32 (uint8_t *ptr, int offset)
-{      int32_t value ;
-
-       value = ptr [offset] << 24 ;
-       value += ptr [offset + 1] << 16 ;
-       value += ptr [offset + 2] << 8 ;
-       value += ptr [offset + 3] ;
-       return value ;
-} /* psf_get_be32 */
-
-static inline int16_t
-psf_get_be16 (uint8_t *ptr, int offset)
-{      return (ptr [offset] << 8) + ptr [offset + 1] ;
-} /* psf_get_be16 */
-
-/*-----------------------------------------------------------------------------------------------
-** Generic functions for performing endian swapping on integer arrays.
-*/
-
-static inline void
-endswap_short_array (short *ptr, int len)
-{      short   temp ;
-
-       while (--len >= 0)
-       {       temp = ptr [len] ;
-               ptr [len] = ENDSWAP_16 (temp) ;
-               } ;
-} /* endswap_short_array */
-
-static inline void
-endswap_short_copy (short *dest, const short *src, int len)
-{
-       while (--len >= 0)
-       {       dest [len] = ENDSWAP_16 (src [len]) ;
-               } ;
-} /* endswap_short_copy */
-
-static inline void
-endswap_int_array (int *ptr, int len)
-{      int temp ;
-
-       while (--len >= 0)
-       {       temp = ptr [len] ;
-               ptr [len] = ENDSWAP_32 (temp) ;
-               } ;
-} /* endswap_int_array */
-
-static inline void
-endswap_int_copy (int *dest, const int *src, int len)
-{
-       while (--len >= 0)
-       {       dest [len] = ENDSWAP_32 (src [len]) ;
-               } ;
-} /* endswap_int_copy */
-
-/*========================================================================================
-*/
-
-static inline void
-endswap_int64_t_array (int64_t *ptr, int len)
-{      int64_t value ;
-
-       while (--len >= 0)
-       {       value = ptr [len] ;
-               ptr [len] = ENDSWAP_64 (value) ;
-               } ;
-} /* endswap_int64_t_array */
-
-static inline void
-endswap_int64_t_copy (int64_t *dest, const int64_t *src, int len)
-{      int64_t value ;
-
-       while (--len >= 0)
-       {       value = src [len] ;
-               dest [len] = ENDSWAP_64 (value) ;
-               } ;
-} /* endswap_int64_t_copy */
-
-/* A couple of wrapper functions. */
-
-static inline void
-endswap_float_array (float *ptr, int len)
-{      endswap_int_array ((int *) ptr, len) ;
-} /* endswap_float_array */
-
-static inline void
-endswap_double_array (double *ptr, int len)
-{      endswap_int64_t_array ((int64_t *) ptr, len) ;
-} /* endswap_double_array */
-
-static inline void
-endswap_float_copy (float *dest, const float *src, int len)
-{      endswap_int_copy ((int *) dest, (const int *) src, len) ;
-} /* endswap_float_copy */
-
-static inline void
-endswap_double_copy (double *dest, const double *src, int len)
-{      endswap_int64_t_copy ((int64_t *) dest, (const int64_t *) src, len) ;
-} /* endswap_double_copy */
-
-#endif /* SFENDIAN_INCLUDED */
-
diff --git a/libs/libsndfile/src/sndfile.c b/libs/libsndfile/src/sndfile.c
deleted file mode 100644 (file)
index cfe75ac..0000000
+++ /dev/null
@@ -1,3093 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdlib.h>
-#include       <string.h>
-#include       <ctype.h>
-#include       <assert.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-#define                SNDFILE_MAGICK  0x1234C0DE
-
-#ifdef __APPLE__
-       /*
-       **      Detect if a compile for a universal binary is being attempted and barf if it is.
-       **      See the URL below for the rationale.
-       */
-       #ifdef __BIG_ENDIAN__
-               #if (CPU_IS_LITTLE_ENDIAN == 1)
-                       #error "Universal binary compile detected. See http://www.mega-nerd.com/libsndfile/FAQ.html#Q018"
-               #endif
-       #endif
-
-       #ifdef __LITTLE_ENDIAN__
-               #if (CPU_IS_BIG_ENDIAN == 1)
-                       #error "Universal binary compile detected. See http://www.mega-nerd.com/libsndfile/FAQ.html#Q018"
-               #endif
-       #endif
-#endif
-
-
-typedef struct
-{      int             error ;
-       const char      *str ;
-} ErrorStruct ;
-
-static
-ErrorStruct SndfileErrors [] =
-{
-       /* Public error values and their associated strings. */
-       {       SF_ERR_NO_ERROR                         , "No Error." },
-       {       SF_ERR_UNRECOGNISED_FORMAT      , "Format not recognised." },
-       {       SF_ERR_SYSTEM                           , "System error." /* Often replaced. */         },
-       {       SF_ERR_MALFORMED_FILE           , "Supported file format but file is malformed." },
-       {       SF_ERR_UNSUPPORTED_ENCODING     , "Supported file format but unsupported encoding." },
-
-       /* Private error values and their associated strings. */
-       {       SFE_ZERO_MAJOR_FORMAT   , "Error : major format is 0." },
-       {       SFE_ZERO_MINOR_FORMAT   , "Error : minor format is 0." },
-       {       SFE_BAD_FILE                    , "File does not exist or is not a regular file (possibly a pipe?)." },
-       {       SFE_BAD_FILE_READ               , "File exists but no data could be read." },
-       {       SFE_OPEN_FAILED                 , "Could not open file." },
-       {       SFE_BAD_SNDFILE_PTR             , "Not a valid SNDFILE* pointer." },
-       {       SFE_BAD_SF_INFO_PTR             , "NULL SF_INFO pointer passed to libsndfile." },
-       {       SFE_BAD_SF_INCOMPLETE   , "SF_PRIVATE struct incomplete and end of header parsing." },
-       {       SFE_BAD_FILE_PTR                , "Bad FILE pointer." },
-       {       SFE_BAD_INT_PTR                 , "Internal error, Bad pointer." },
-       {       SFE_BAD_STAT_SIZE               , "Error : software was misconfigured at compile time (sizeof statbuf.st_size)." },
-       {       SFE_NO_TEMP_DIR                 , "Error : Could not file temp dir." },
-
-       {       SFE_MALLOC_FAILED               , "Internal malloc () failed." },
-       {       SFE_UNIMPLEMENTED               , "File contains data in an unimplemented format." },
-       {       SFE_BAD_READ_ALIGN              , "Attempt to read a non-integer number of channels." },
-       {       SFE_BAD_WRITE_ALIGN     , "Attempt to write a non-integer number of channels." },
-       {       SFE_UNKNOWN_FORMAT              , "File contains data in an unknown format." },
-       {       SFE_NOT_READMODE                , "Read attempted on file currently open for write." },
-       {       SFE_NOT_WRITEMODE               , "Write attempted on file currently open for read." },
-       {       SFE_BAD_MODE_RW                 , "Error : This file format does not support read/write mode." },
-       {       SFE_BAD_SF_INFO                 , "Internal error : SF_INFO struct incomplete." },
-       {       SFE_BAD_OFFSET                  , "Error : supplied offset beyond end of file." },
-       {       SFE_NO_EMBED_SUPPORT    , "Error : embedding not supported for this file format." },
-       {       SFE_NO_EMBEDDED_RDWR    , "Error : cannot open embedded file read/write." },
-       {       SFE_NO_PIPE_WRITE               , "Error : this file format does not support pipe write." },
-       {       SFE_BAD_VIRTUAL_IO              , "Error : bad pointer on SF_VIRTUAL_IO struct." },
-       {       SFE_BAD_BROADCAST_INFO_SIZE
-                                                               , "Error : bad coding_history_size in SF_BROADCAST_INFO struct." },
-       {       SFE_BAD_BROADCAST_INFO_TOO_BIG
-                                                               , "Error : SF_BROADCAST_INFO struct too large." },
-       {       SFE_BAD_CART_INFO_SIZE                          , "Error: SF_CART_INFO struct too large." },
-       {       SFE_BAD_CART_INFO_TOO_BIG                       , "Error: bag tag_text_size in SF_CART_INFO struct." },
-       {       SFE_INTERLEAVE_MODE             , "Attempt to write to file with non-interleaved data." },
-       {       SFE_INTERLEAVE_SEEK             , "Bad karma in seek during interleave read operation." },
-       {       SFE_INTERLEAVE_READ             , "Bad karma in read during interleave read operation." },
-
-       {       SFE_INTERNAL                    , "Unspecified internal error." },
-       {       SFE_BAD_COMMAND_PARAM   , "Bad parameter passed to function sf_command." },
-       {       SFE_BAD_ENDIAN                  , "Bad endian-ness. Try default endian-ness" },
-       {       SFE_CHANNEL_COUNT_ZERO  , "Channel count is zero." },
-       {       SFE_CHANNEL_COUNT               , "Too many channels specified." },
-
-       {       SFE_BAD_SEEK                    , "Internal psf_fseek() failed." },
-       {       SFE_NOT_SEEKABLE                , "Seek attempted on unseekable file type." },
-       {       SFE_AMBIGUOUS_SEEK              , "Error : combination of file open mode and seek command is ambiguous." },
-       {       SFE_WRONG_SEEK                  , "Error : invalid seek parameters." },
-       {       SFE_SEEK_FAILED                 , "Error : parameters OK, but psf_seek() failed." },
-
-       {       SFE_BAD_OPEN_MODE               , "Error : bad mode parameter for file open." },
-       {       SFE_OPEN_PIPE_RDWR              , "Error : attempt to open a pipe in read/write mode." },
-       {       SFE_RDWR_POSITION               , "Error on RDWR position (cryptic)." },
-       {       SFE_RDWR_BAD_HEADER             , "Error : Cannot open file in read/write mode due to string data in header." },
-       {       SFE_CMD_HAS_DATA                , "Error : Command fails because file already has audio data." },
-
-       {       SFE_STR_NO_SUPPORT              , "Error : File type does not support string data." },
-       {       SFE_STR_NOT_WRITE               , "Error : Trying to set a string when file is not in write mode." },
-       {       SFE_STR_MAX_DATA                , "Error : Maximum string data storage reached." },
-       {       SFE_STR_MAX_COUNT               , "Error : Maximum string data count reached." },
-       {       SFE_STR_BAD_TYPE                , "Error : Bad string data type." },
-       {       SFE_STR_NO_ADD_END              , "Error : file type does not support strings added at end of file." },
-       {       SFE_STR_BAD_STRING              , "Error : bad string." },
-       {       SFE_STR_WEIRD                   , "Error : Weird string error." },
-
-       {       SFE_WAV_NO_RIFF                 , "Error in WAV file. No 'RIFF' chunk marker." },
-       {       SFE_WAV_NO_WAVE                 , "Error in WAV file. No 'WAVE' chunk marker." },
-       {       SFE_WAV_NO_FMT                  , "Error in WAV/W64/RF64 file. No 'fmt ' chunk marker." },
-       {       SFE_WAV_BAD_FMT                 , "Error in WAV/W64/RF64 file. Malformed 'fmt ' chunk." },
-       {       SFE_WAV_FMT_SHORT               , "Error in WAV/W64/RF64 file. Short 'fmt ' chunk." },
-
-       {       SFE_WAV_BAD_FACT                , "Error in WAV file. 'fact' chunk out of place." },
-       {       SFE_WAV_BAD_PEAK                , "Error in WAV file. Bad 'PEAK' chunk." },
-       {       SFE_WAV_PEAK_B4_FMT             , "Error in WAV file. 'PEAK' chunk found before 'fmt ' chunk." },
-
-       {       SFE_WAV_BAD_FORMAT              , "Error in WAV file. Errors in 'fmt ' chunk." },
-       {       SFE_WAV_BAD_BLOCKALIGN  , "Error in WAV file. Block alignment in 'fmt ' chunk is incorrect." },
-       {       SFE_WAV_NO_DATA                 , "Error in WAV file. No 'data' chunk marker." },
-       {       SFE_WAV_BAD_LIST                , "Error in WAV file. Malformed LIST chunk." },
-       {       SFE_WAV_UNKNOWN_CHUNK   , "Error in WAV file. File contains an unknown chunk marker." },
-       {       SFE_WAV_WVPK_DATA               , "Error in WAV file. Data is in WAVPACK format." },
-
-       {       SFE_WAV_ADPCM_NOT4BIT   , "Error in ADPCM WAV file. Invalid bit width." },
-       {       SFE_WAV_ADPCM_CHANNELS  , "Error in ADPCM WAV file. Invalid number of channels." },
-       {       SFE_WAV_GSM610_FORMAT   , "Error in GSM610 WAV file. Invalid format chunk." },
-
-       {       SFE_AIFF_NO_FORM                , "Error in AIFF file, bad 'FORM' marker." },
-       {       SFE_AIFF_AIFF_NO_FORM   , "Error in AIFF file, 'AIFF' marker without 'FORM'." },
-       {       SFE_AIFF_COMM_NO_FORM   , "Error in AIFF file, 'COMM' marker without 'FORM'." },
-       {       SFE_AIFF_SSND_NO_COMM   , "Error in AIFF file, 'SSND' marker without 'COMM'." },
-       {       SFE_AIFF_UNKNOWN_CHUNK  , "Error in AIFF file, unknown chunk." },
-       {       SFE_AIFF_COMM_CHUNK_SIZE, "Error in AIFF file, bad 'COMM' chunk size." },
-       {       SFE_AIFF_BAD_COMM_CHUNK , "Error in AIFF file, bad 'COMM' chunk." },
-       {       SFE_AIFF_PEAK_B4_COMM   , "Error in AIFF file. 'PEAK' chunk found before 'COMM' chunk." },
-       {       SFE_AIFF_BAD_PEAK               , "Error in AIFF file. Bad 'PEAK' chunk." },
-       {       SFE_AIFF_NO_SSND                , "Error in AIFF file, bad 'SSND' chunk." },
-       {       SFE_AIFF_NO_DATA                , "Error in AIFF file, no sound data." },
-       {       SFE_AIFF_RW_SSND_NOT_LAST, "Error in AIFF file, RDWR only possible if SSND chunk at end of file." },
-
-       {       SFE_AU_UNKNOWN_FORMAT   , "Error in AU file, unknown format." },
-       {       SFE_AU_NO_DOTSND                , "Error in AU file, missing '.snd' or 'dns.' marker." },
-       {       SFE_AU_EMBED_BAD_LEN    , "Embedded AU file with unknown length." },
-
-       {       SFE_RAW_READ_BAD_SPEC   , "Error while opening RAW file for read. Must specify format and channels.\n"
-                                                                       "Possibly trying to open unsupported format." },
-       {       SFE_RAW_BAD_BITWIDTH    , "Error. RAW file bitwidth must be a multiple of 8." },
-       {       SFE_RAW_BAD_FORMAT              , "Error. Bad format field in SF_INFO struct when openning a RAW file for read." },
-
-       {       SFE_PAF_NO_MARKER               , "Error in PAF file, no marker." },
-       {       SFE_PAF_VERSION                 , "Error in PAF file, bad version." },
-       {       SFE_PAF_UNKNOWN_FORMAT  , "Error in PAF file, unknown format." },
-       {       SFE_PAF_SHORT_HEADER    , "Error in PAF file. File shorter than minimal header." },
-       {       SFE_PAF_BAD_CHANNELS    , "Error in PAF file. Bad channel count." },
-
-       {       SFE_SVX_NO_FORM                 , "Error in 8SVX / 16SV file, no 'FORM' marker." },
-       {       SFE_SVX_NO_BODY                 , "Error in 8SVX / 16SV file, no 'BODY' marker." },
-       {       SFE_SVX_NO_DATA                 , "Error in 8SVX / 16SV file, no sound data." },
-       {       SFE_SVX_BAD_COMP                , "Error in 8SVX / 16SV file, unsupported compression format." },
-       {       SFE_SVX_BAD_NAME_LENGTH , "Error in 8SVX / 16SV file, NAME chunk too long." },
-
-       {       SFE_NIST_BAD_HEADER             , "Error in NIST file, bad header." },
-       {       SFE_NIST_CRLF_CONVERISON, "Error : NIST file damaged by Windows CR -> CRLF conversion process." },
-       {       SFE_NIST_BAD_ENCODING   , "Error in NIST file, unsupported compression format." },
-
-       {       SFE_VOC_NO_CREATIVE             , "Error in VOC file, no 'Creative Voice File' marker." },
-       {       SFE_VOC_BAD_FORMAT              , "Error in VOC file, bad format." },
-       {       SFE_VOC_BAD_VERSION             , "Error in VOC file, bad version number." },
-       {       SFE_VOC_BAD_MARKER              , "Error in VOC file, bad marker in file." },
-       {       SFE_VOC_BAD_SECTIONS    , "Error in VOC file, incompatible VOC sections." },
-       {       SFE_VOC_MULTI_SAMPLERATE, "Error in VOC file, more than one sample rate defined." },
-       {       SFE_VOC_MULTI_SECTION   , "Unimplemented VOC file feature, file contains multiple sound sections." },
-       {       SFE_VOC_MULTI_PARAM             , "Error in VOC file, file contains multiple bit or channel widths." },
-       {       SFE_VOC_SECTION_COUNT   , "Error in VOC file, too many sections." },
-       {       SFE_VOC_NO_PIPE                 , "Error : not able to operate on VOC files over a pipe." },
-
-       {       SFE_IRCAM_NO_MARKER             , "Error in IRCAM file, bad IRCAM marker." },
-       {       SFE_IRCAM_BAD_CHANNELS  , "Error in IRCAM file, bad channel count." },
-       {       SFE_IRCAM_UNKNOWN_FORMAT, "Error in IRCAM file, unknow encoding format." },
-
-       {       SFE_W64_64_BIT                  , "Error in W64 file, file contains 64 bit offset." },
-       {       SFE_W64_NO_RIFF                 , "Error in W64 file. No 'riff' chunk marker." },
-       {       SFE_W64_NO_WAVE                 , "Error in W64 file. No 'wave' chunk marker." },
-       {       SFE_W64_NO_DATA                 , "Error in W64 file. No 'data' chunk marker." },
-       {       SFE_W64_ADPCM_NOT4BIT   , "Error in ADPCM W64 file. Invalid bit width." },
-       {       SFE_W64_ADPCM_CHANNELS  , "Error in ADPCM W64 file. Invalid number of channels." },
-       {       SFE_W64_GSM610_FORMAT   , "Error in GSM610 W64 file. Invalid format chunk." },
-
-       {       SFE_MAT4_BAD_NAME               , "Error in MAT4 file. No variable name." },
-       {       SFE_MAT4_NO_SAMPLERATE  , "Error in MAT4 file. No sample rate." },
-
-       {       SFE_MAT5_BAD_ENDIAN             , "Error in MAT5 file. Not able to determine endian-ness." },
-       {       SFE_MAT5_NO_BLOCK               , "Error in MAT5 file. Bad block structure." },
-       {       SFE_MAT5_SAMPLE_RATE    , "Error in MAT5 file. Not able to determine sample rate." },
-
-       {       SFE_PVF_NO_PVF1                 , "Error in PVF file. No PVF1 marker." },
-       {       SFE_PVF_BAD_HEADER              , "Error in PVF file. Bad header." },
-       {       SFE_PVF_BAD_BITWIDTH    , "Error in PVF file. Bad bit width." },
-
-       {       SFE_XI_BAD_HEADER               , "Error in XI file. Bad header." },
-       {       SFE_XI_EXCESS_SAMPLES   , "Error in XI file. Excess samples in file." },
-       {       SFE_XI_NO_PIPE                  , "Error : not able to operate on XI files over a pipe." },
-
-       {       SFE_HTK_NO_PIPE                 , "Error : not able to operate on HTK files over a pipe." },
-
-       {       SFE_SDS_NOT_SDS                 , "Error : not an SDS file." },
-       {       SFE_SDS_BAD_BIT_WIDTH   , "Error : bad bit width for SDS file." },
-
-       {       SFE_SD2_FD_DISALLOWED   , "Error : cannot open SD2 file without a file name." },
-       {       SFE_SD2_BAD_DATA_OFFSET , "Error : bad data offset." },
-       {       SFE_SD2_BAD_MAP_OFFSET  , "Error : bad map offset." },
-       {       SFE_SD2_BAD_DATA_LENGTH , "Error : bad data length." },
-       {       SFE_SD2_BAD_MAP_LENGTH  , "Error : bad map length." },
-       {       SFE_SD2_BAD_RSRC                , "Error : bad resource fork." },
-       {       SFE_SD2_BAD_SAMPLE_SIZE , "Error : bad sample size." },
-
-       {       SFE_FLAC_BAD_HEADER             , "Error : bad flac header." },
-       {       SFE_FLAC_NEW_DECODER    , "Error : problem while creating flac decoder." },
-       {       SFE_FLAC_INIT_DECODER   , "Error : problem while initialization of the flac decoder." },
-       {       SFE_FLAC_LOST_SYNC              , "Error : flac decoder lost sync." },
-       {       SFE_FLAC_BAD_SAMPLE_RATE, "Error : flac does not support this sample rate." },
-       {       SFE_FLAC_UNKOWN_ERROR   , "Error : unknown error in flac decoder." },
-
-       {       SFE_WVE_NOT_WVE                 , "Error : not a WVE file." },
-       {       SFE_WVE_NO_PIPE                 , "Error : not able to operate on WVE files over a pipe." },
-
-       {       SFE_DWVW_BAD_BITWIDTH   , "Error : Bad bit width for DWVW encoding. Must be 12, 16 or 24." },
-       {       SFE_G72X_NOT_MONO               , "Error : G72x encoding does not support more than 1 channel." },
-
-       {       SFE_VORBIS_ENCODER_BUG  , "Error : Sample rate chosen is known to trigger a Vorbis encoder bug on this CPU." },
-
-       {       SFE_RF64_NOT_RF64               , "Error : Not an RF64 file." },
-       {       SFE_ALAC_FAIL_TMPFILE   , "Error : Failed to open tmp file for ALAC encoding." },
-
-       {       SFE_BAD_CHUNK_PTR               , "Error : Bad SF_CHUNK_INFO pointer." },
-       {       SFE_UNKNOWN_CHUNK               , "Error : Unknown chunk marker." },
-       {       SFE_BAD_CHUNK_FORMAT    , "Error : Reading/writing chunks from this file format is not supported." },
-       {       SFE_BAD_CHUNK_MARKER    , "Error : Bad chunk marker." },
-       {       SFE_BAD_CHUNK_DATA_PTR  , "Error : Bad data pointer in SF_CHUNK_INFO struct." },
-
-       {       SFE_MAX_ERROR                   , "Maximum error number." },
-       {       SFE_MAX_ERROR + 1               , NULL }
-} ;
-
-/*------------------------------------------------------------------------------
-*/
-
-static int     format_from_extension (SF_PRIVATE *psf) ;
-static int     guess_file_type (SF_PRIVATE *psf) ;
-static int     validate_sfinfo (SF_INFO *sfinfo) ;
-static int     validate_psf (SF_PRIVATE *psf) ;
-static void    save_header_info (SF_PRIVATE *psf) ;
-static void    copy_filename (SF_PRIVATE *psf, const char *path) ;
-static int     psf_close (SF_PRIVATE *psf) ;
-
-static int     try_resource_fork (SF_PRIVATE * psf) ;
-
-/*------------------------------------------------------------------------------
-** Private (static) variables.
-*/
-
-int    sf_errno = 0 ;
-static char    sf_parselog [SF_BUFFER_LEN] = { 0 } ;
-static char    sf_syserr [SF_SYSERR_LEN] = { 0 } ;
-
-/*------------------------------------------------------------------------------
-*/
-
-#define        VALIDATE_SNDFILE_AND_ASSIGN_PSF(a, b, c)        \
-               {       if ((a) == NULL)                                                \
-                       {       sf_errno = SFE_BAD_SNDFILE_PTR ;        \
-                               return 0 ;                                                      \
-                               } ;                                                                     \
-                       (b) = (SF_PRIVATE*) (a) ;                               \
-                       if ((b)->virtual_io == SF_FALSE &&              \
-                               psf_file_valid (b) == 0)                        \
-                       {       (b)->error = SFE_BAD_FILE_PTR ;         \
-                               return 0 ;                                                      \
-                               } ;                                                                     \
-                       if ((b)->Magick != SNDFILE_MAGICK)              \
-                       {       (b)->error = SFE_BAD_SNDFILE_PTR ;      \
-                               return 0 ;                                                      \
-                               } ;                                                                     \
-                       if (c) (b)->error = 0 ;                                 \
-                       }
-
-/*------------------------------------------------------------------------------
-**     Public functions.
-*/
-
-SNDFILE*
-sf_open        (const char *path, int mode, SF_INFO *sfinfo)
-{      SF_PRIVATE      *psf ;
-
-       /* Ultimate sanity check. */
-       assert (sizeof (sf_count_t) == 8) ;
-
-       if ((psf = calloc (1, sizeof (SF_PRIVATE))) == NULL)
-       {       sf_errno = SFE_MALLOC_FAILED ;
-               return  NULL ;
-               } ;
-
-       psf_init_files (psf) ;
-
-       psf_log_printf (psf, "File : %s\n", path) ;
-
-       copy_filename (psf, path) ;
-
-       psf->file.mode = mode ;
-       if (strcmp (path, "-") == 0)
-               psf->error = psf_set_stdio (psf) ;
-       else
-               psf->error = psf_fopen (psf) ;
-
-       return psf_open_file (psf, sfinfo) ;
-} /* sf_open */
-
-SNDFILE*
-sf_open_fd     (int fd, int mode, SF_INFO *sfinfo, int close_desc)
-{      SF_PRIVATE      *psf ;
-
-       if ((SF_CONTAINER (sfinfo->format)) == SF_FORMAT_SD2)
-       {       sf_errno = SFE_SD2_FD_DISALLOWED ;
-               return  NULL ;
-               } ;
-
-       if ((psf = calloc (1, sizeof (SF_PRIVATE))) == NULL)
-       {       sf_errno = SFE_MALLOC_FAILED ;
-               return  NULL ;
-               } ;
-
-       psf_init_files (psf) ;
-       copy_filename (psf, "") ;
-
-       psf->file.mode = mode ;
-       psf_set_file (psf, fd) ;
-       psf->is_pipe = psf_is_pipe (psf) ;
-       psf->fileoffset = psf_ftell (psf) ;
-
-       if (! close_desc)
-               psf->file.do_not_close_descriptor = SF_TRUE ;
-
-       return psf_open_file (psf, sfinfo) ;
-} /* sf_open_fd */
-
-SNDFILE*
-sf_open_virtual        (SF_VIRTUAL_IO *sfvirtual, int mode, SF_INFO *sfinfo, void *user_data)
-{      SF_PRIVATE      *psf ;
-
-       /* Make sure we have a valid set ot virtual pointers. */
-       if (sfvirtual->get_filelen == NULL || sfvirtual->seek == NULL || sfvirtual->tell == NULL)
-       {       sf_errno = SFE_BAD_VIRTUAL_IO ;
-               snprintf (sf_parselog, sizeof (sf_parselog), "Bad vio_get_filelen / vio_seek / vio_tell in SF_VIRTUAL_IO struct.\n") ;
-               return NULL ;
-               } ;
-
-       if ((mode == SFM_READ || mode == SFM_RDWR) && sfvirtual->read == NULL)
-       {       sf_errno = SFE_BAD_VIRTUAL_IO ;
-               snprintf (sf_parselog, sizeof (sf_parselog), "Bad vio_read in SF_VIRTUAL_IO struct.\n") ;
-               return NULL ;
-               } ;
-
-       if ((mode == SFM_WRITE || mode == SFM_RDWR) && sfvirtual->write == NULL)
-       {       sf_errno = SFE_BAD_VIRTUAL_IO ;
-               snprintf (sf_parselog, sizeof (sf_parselog), "Bad vio_write in SF_VIRTUAL_IO struct.\n") ;
-               return NULL ;
-               } ;
-
-       if ((psf = calloc (1, sizeof (SF_PRIVATE))) == NULL)
-       {       sf_errno = SFE_MALLOC_FAILED ;
-               return  NULL ;
-               } ;
-
-       psf_init_files (psf) ;
-
-       psf->virtual_io = SF_TRUE ;
-       psf->vio = *sfvirtual ;
-       psf->vio_user_data = user_data ;
-
-       psf->file.mode = mode ;
-
-       return psf_open_file (psf, sfinfo) ;
-} /* sf_open_virtual */
-
-int
-sf_close       (SNDFILE *sndfile)
-{      SF_PRIVATE      *psf ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       return psf_close (psf) ;
-} /* sf_close */
-
-void
-sf_write_sync  (SNDFILE *sndfile)
-{      SF_PRIVATE      *psf ;
-
-       if ((psf = (SF_PRIVATE *) sndfile) == NULL)
-               return ;
-
-       psf_fsync (psf) ;
-
-       return ;
-} /* sf_write_sync */
-
-/*==============================================================================
-*/
-
-const char*
-sf_error_number        (int errnum)
-{      static const char *bad_errnum =
-               "No error defined for this error number. This is a bug in libsndfile." ;
-       int     k ;
-
-       if (errnum == SFE_MAX_ERROR)
-               return SndfileErrors [0].str ;
-
-       if (errnum < 0 || errnum > SFE_MAX_ERROR)
-       {       /* This really shouldn't happen in release versions. */
-               printf ("Not a valid error number (%d).\n", errnum) ;
-               return bad_errnum ;
-               } ;
-
-       for (k = 0 ; SndfileErrors [k].str ; k++)
-               if (errnum == SndfileErrors [k].error)
-                       return SndfileErrors [k].str ;
-
-       return bad_errnum ;
-} /* sf_error_number */
-
-const char*
-sf_strerror (SNDFILE *sndfile)
-{      SF_PRIVATE      *psf = NULL ;
-       int errnum ;
-
-       if (sndfile == NULL)
-       {       errnum = sf_errno ;
-               if (errnum == SFE_SYSTEM && sf_syserr [0])
-                       return sf_syserr ;
-               }
-       else
-       {       psf = (SF_PRIVATE *) sndfile ;
-
-               if (psf->Magick != SNDFILE_MAGICK)
-                       return  "sf_strerror : Bad magic number." ;
-
-               errnum = psf->error ;
-
-               if (errnum == SFE_SYSTEM && psf->syserr [0])
-                       return psf->syserr ;
-               } ;
-
-       return sf_error_number (errnum) ;
-} /* sf_strerror */
-
-/*------------------------------------------------------------------------------
-*/
-
-int
-sf_error (SNDFILE *sndfile)
-{      SF_PRIVATE      *psf ;
-
-       if (sndfile == NULL)
-               return sf_errno ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 0) ;
-
-       if (psf->error)
-               return psf->error ;
-
-       return 0 ;
-} /* sf_error */
-
-/*------------------------------------------------------------------------------
-*/
-
-int
-sf_perror (SNDFILE *sndfile)
-{      SF_PRIVATE      *psf ;
-       int             errnum ;
-
-       if (sndfile == NULL)
-       {       errnum = sf_errno ;
-               }
-       else
-       {       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 0) ;
-               errnum = psf->error ;
-               } ;
-
-       fprintf (stderr, "%s\n", sf_error_number (errnum)) ;
-       return SFE_NO_ERROR ;
-} /* sf_perror */
-
-
-/*------------------------------------------------------------------------------
-*/
-
-int
-sf_error_str (SNDFILE *sndfile, char *str, size_t maxlen)
-{      SF_PRIVATE      *psf ;
-       int             errnum ;
-
-       if (str == NULL)
-               return SFE_INTERNAL ;
-
-       if (sndfile == NULL)
-               errnum = sf_errno ;
-       else
-       {       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 0) ;
-               errnum = psf->error ;
-               } ;
-
-       snprintf (str, maxlen, "%s", sf_error_number (errnum)) ;
-
-       return SFE_NO_ERROR ;
-} /* sf_error_str */
-
-/*==============================================================================
-*/
-
-int
-sf_format_check        (const SF_INFO *info)
-{      int     subformat, endian ;
-
-       subformat = SF_CODEC (info->format) ;
-       endian = SF_ENDIAN (info->format) ;
-
-       /* This is the place where each file format can check if the suppiled
-       ** SF_INFO struct is valid.
-       ** Return 0 on failure, 1 ons success.
-       */
-
-       if (info->channels < 1 || info->channels > SF_MAX_CHANNELS)
-               return 0 ;
-
-       if (info->samplerate < 0)
-               return 0 ;
-
-       switch (SF_CONTAINER (info->format))
-       {       case SF_FORMAT_WAV :
-                               /* WAV now allows both endian, RIFF or RIFX (little or big respectively) */
-                               if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_16)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
-                                       return 1 ;
-                               if ((subformat == SF_FORMAT_IMA_ADPCM || subformat == SF_FORMAT_MS_ADPCM) && info->channels <= 2)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_GSM610 && info->channels == 1)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_G721_32 && info->channels == 1)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_WAVEX :
-                               if (endian == SF_ENDIAN_BIG || endian == SF_ENDIAN_CPU)
-                                       return 0 ;
-                               if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_16)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_AIFF :
-                               /* AIFF does allow both endian-nesses for PCM data.*/
-                               if (subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
-                                       return 1 ;
-                               /* For other encodings reject any endian-ness setting. */
-                               if (endian != 0)
-                                       return 0 ;
-                               if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_S8)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)
-                                       return 1 ;
-                               if ((subformat == SF_FORMAT_DWVW_12 || subformat == SF_FORMAT_DWVW_16 ||
-                                                       subformat == SF_FORMAT_DWVW_24) && info-> channels == 1)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_GSM610 && info->channels == 1)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_IMA_ADPCM && (info->channels == 1 || info->channels == 2))
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_AU :
-                               if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_G721_32 && info->channels == 1)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_G723_24 && info->channels == 1)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_G723_40 && info->channels == 1)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_CAF :
-                               if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_ALAC_16 || subformat == SF_FORMAT_ALAC_20)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_ALAC_24 || subformat == SF_FORMAT_ALAC_32)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_RAW :
-                               if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_ALAW || subformat == SF_FORMAT_ULAW)
-                                       return 1 ;
-                               if ((subformat == SF_FORMAT_DWVW_12 || subformat == SF_FORMAT_DWVW_16 ||
-                                                       subformat == SF_FORMAT_DWVW_24) && info-> channels == 1)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_GSM610 && info->channels == 1)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_VOX_ADPCM && info->channels == 1)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_PAF :
-                               if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_24)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_SVX :
-                               /* SVX only supports writing mono SVX files. */
-                               if (info->channels > 1)
-                                       return 0 ;
-                               /* Always big endian. */
-                               if (endian == SF_ENDIAN_LITTLE || endian == SF_ENDIAN_CPU)
-                                       return 0 ;
-
-                               if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_NIST :
-                               if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_IRCAM :
-                               if (subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_32)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW || subformat == SF_FORMAT_FLOAT)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_VOC :
-                               /* VOC is strictly little endian. */
-                               if (endian == SF_ENDIAN_BIG || endian == SF_ENDIAN_CPU)
-                                       return 0 ;
-                               if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_16)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_W64 :
-                               /* W64 is strictly little endian. */
-                               if (endian == SF_ENDIAN_BIG || endian == SF_ENDIAN_CPU)
-                                       return 0 ;
-                               if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_16)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
-                                       return 1 ;
-                               if ((subformat == SF_FORMAT_IMA_ADPCM || subformat == SF_FORMAT_MS_ADPCM) && info->channels <= 2)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_GSM610 && info->channels == 1)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_MAT4 :
-                               if (subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_32)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_MAT5 :
-                               if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_32)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_PVF :
-                               if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_32)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_XI :
-                               if (info->channels != 1)
-                                       return 0 ;
-                               if (subformat == SF_FORMAT_DPCM_8 || subformat == SF_FORMAT_DPCM_16)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_HTK :
-                               /* HTK is strictly big endian. */
-                               if (endian == SF_ENDIAN_LITTLE || endian == SF_ENDIAN_CPU)
-                                       return 0 ;
-                               if (info->channels != 1)
-                                       return 0 ;
-                               if (subformat == SF_FORMAT_PCM_16)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_SDS :
-                               /* SDS is strictly big endian. */
-                               if (endian == SF_ENDIAN_LITTLE || endian == SF_ENDIAN_CPU)
-                                       return 0 ;
-                               if (info->channels != 1)
-                                       return 0 ;
-                               if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_24)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_AVR :
-                               /* SDS is strictly big endian. */
-                               if (endian == SF_ENDIAN_LITTLE || endian == SF_ENDIAN_CPU)
-                                       return 0 ;
-                               if (info->channels > 2)
-                                       return 0 ;
-                               if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_FLAC :
-                               /* FLAC can't do more than 8 channels. */
-                               if (info->channels > 8)
-                                       return 0 ;
-                               if (endian != SF_ENDIAN_FILE)
-                                       return 0 ;
-                               if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_24)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_SD2 :
-                               /* SD2 is strictly big endian. */
-                               if (endian == SF_ENDIAN_LITTLE || endian == SF_ENDIAN_CPU)
-                                       return 0 ;
-                               if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_WVE :
-                               /* WVE is strictly big endian. */
-                               if (endian == SF_ENDIAN_BIG || endian == SF_ENDIAN_CPU)
-                                       return 0 ;
-                               if (info->channels > 1)
-                                       return 0 ;
-                               if (subformat == SF_FORMAT_ALAW)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_OGG :
-                               if (endian != SF_ENDIAN_FILE)
-                                       return 0 ;
-                               if (subformat == SF_FORMAT_VORBIS)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_MPC2K :
-                               /* MPC2000 is strictly little endian. */
-                               if (endian == SF_ENDIAN_BIG || endian == SF_ENDIAN_CPU)
-                                       return 0 ;
-                               if (info->channels > 2)
-                                       return 0 ;
-                               if (subformat == SF_FORMAT_PCM_16)
-                                       return 1 ;
-                               break ;
-
-               case SF_FORMAT_RF64 :
-                               if (endian == SF_ENDIAN_BIG || endian == SF_ENDIAN_CPU)
-                                       return 0 ;
-                               if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_16)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)
-                                       return 1 ;
-                               if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
-                                       return 1 ;
-                               break ;
-               default : break ;
-               } ;
-
-       return 0 ;
-} /* sf_format_check */
-
-/*------------------------------------------------------------------------------
-*/
-
-const char *
-sf_version_string (void)
-{
-#if    ENABLE_EXPERIMENTAL_CODE
-       return PACKAGE_NAME "-" PACKAGE_VERSION "-exp" ;
-#else
-       return PACKAGE_NAME "-" PACKAGE_VERSION ;
-#endif
-}
-
-
-/*------------------------------------------------------------------------------
-*/
-
-int
-sf_command     (SNDFILE *sndfile, int command, void *data, int datasize)
-{      SF_PRIVATE *psf = (SF_PRIVATE *) sndfile ;
-       double quality ;
-       int old_value ;
-
-       /* This set of commands do not need the sndfile parameter. */
-       switch (command)
-       {       case SFC_GET_LIB_VERSION :
-                       if (data == NULL)
-                       {       if (psf)
-                                       psf->error = SFE_BAD_COMMAND_PARAM ;
-                               return SFE_BAD_COMMAND_PARAM ;
-                               } ;
-                       snprintf (data, datasize, "%s", sf_version_string ()) ;
-                       return strlen (data) ;
-
-               case SFC_GET_SIMPLE_FORMAT_COUNT :
-                       if (data == NULL || datasize != SIGNED_SIZEOF (int))
-                               return (sf_errno = SFE_BAD_COMMAND_PARAM) ;
-                       *((int*) data) = psf_get_format_simple_count () ;
-                       return 0 ;
-
-               case SFC_GET_SIMPLE_FORMAT :
-                       if (data == NULL || datasize != SIGNED_SIZEOF (SF_FORMAT_INFO))
-                               return (sf_errno = SFE_BAD_COMMAND_PARAM) ;
-                       return psf_get_format_simple (data) ;
-
-               case SFC_GET_FORMAT_MAJOR_COUNT :
-                       if (data == NULL || datasize != SIGNED_SIZEOF (int))
-                               return (sf_errno = SFE_BAD_COMMAND_PARAM) ;
-                       *((int*) data) = psf_get_format_major_count () ;
-                       return 0 ;
-
-               case SFC_GET_FORMAT_MAJOR :
-                       if (data == NULL || datasize != SIGNED_SIZEOF (SF_FORMAT_INFO))
-                               return (sf_errno = SFE_BAD_COMMAND_PARAM) ;
-                       return psf_get_format_major (data) ;
-
-               case SFC_GET_FORMAT_SUBTYPE_COUNT :
-                       if (data == NULL || datasize != SIGNED_SIZEOF (int))
-                               return (sf_errno = SFE_BAD_COMMAND_PARAM) ;
-                       *((int*) data) = psf_get_format_subtype_count () ;
-                       return 0 ;
-
-               case SFC_GET_FORMAT_SUBTYPE :
-                       if (data == NULL || datasize != SIGNED_SIZEOF (SF_FORMAT_INFO))
-                               return (sf_errno = SFE_BAD_COMMAND_PARAM) ;
-                       return psf_get_format_subtype (data) ;
-
-               case SFC_GET_FORMAT_INFO :
-                       if (data == NULL || datasize != SIGNED_SIZEOF (SF_FORMAT_INFO))
-                               return (sf_errno = SFE_BAD_COMMAND_PARAM) ;
-                       return psf_get_format_info (data) ;
-               } ;
-
-       if (sndfile == NULL && command == SFC_GET_LOG_INFO)
-       {       if (data == NULL)
-                       return (sf_errno = SFE_BAD_COMMAND_PARAM) ;
-               snprintf (data, datasize, "%s", sf_parselog) ;
-               return strlen (data) ;
-               } ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       switch (command)
-       {       case SFC_SET_NORM_FLOAT :
-                       old_value = psf->norm_float ;
-                       psf->norm_float = (datasize) ? SF_TRUE : SF_FALSE ;
-                       return old_value ;
-
-               case SFC_GET_CURRENT_SF_INFO :
-                       if (data == NULL || datasize != SIGNED_SIZEOF (SF_INFO))
-                               return (sf_errno = SFE_BAD_COMMAND_PARAM) ;
-                       memcpy (data, &psf->sf, sizeof (SF_INFO)) ;
-                       break ;
-
-               case SFC_SET_NORM_DOUBLE :
-                       old_value = psf->norm_double ;
-                       psf->norm_double = (datasize) ? SF_TRUE : SF_FALSE ;
-                       return old_value ;
-
-               case SFC_GET_NORM_FLOAT :
-                       return psf->norm_float ;
-
-               case SFC_GET_NORM_DOUBLE :
-                       return psf->norm_double ;
-
-               case SFC_SET_SCALE_FLOAT_INT_READ :
-                       old_value = psf->float_int_mult ;
-
-                       psf->float_int_mult = (datasize != 0) ? SF_TRUE : SF_FALSE ;
-                       if (psf->float_int_mult && psf->float_max < 0.0)
-                               psf->float_max = psf_calc_signal_max (psf, SF_FALSE) ;
-                       return old_value ;
-
-               case SFC_SET_SCALE_INT_FLOAT_WRITE :
-                       old_value = psf->scale_int_float ;
-                       psf->scale_int_float = (datasize != 0) ? SF_TRUE : SF_FALSE ;
-                       return old_value ;
-
-               case SFC_SET_ADD_PEAK_CHUNK :
-                       {       int format = SF_CONTAINER (psf->sf.format) ;
-
-                               /* Only WAV and AIFF support the PEAK chunk. */
-                               switch (format)
-                               {       case SF_FORMAT_AIFF :
-                                       case SF_FORMAT_CAF :
-                                       case SF_FORMAT_WAV :
-                                       case SF_FORMAT_WAVEX :
-                                               break ;
-
-                                       default :
-                                               return SF_FALSE ;
-                                       } ;
-
-                               format = SF_CODEC (psf->sf.format) ;
-
-                               /* Only files containg the following data types support the PEAK chunk. */
-                               if (format != SF_FORMAT_FLOAT && format != SF_FORMAT_DOUBLE)
-                                       return SF_FALSE ;
-
-                               } ;
-                       /* Can only do this is in SFM_WRITE mode. */
-                       if (psf->file.mode != SFM_WRITE && psf->file.mode != SFM_RDWR)
-                               return SF_FALSE ;
-                       /* If data has already been written this must fail. */
-                       if (psf->have_written)
-                       {       psf->error = SFE_CMD_HAS_DATA ;
-                               return SF_FALSE ;
-                               } ;
-                       /* Everything seems OK, so set psf->has_peak and re-write header. */
-                       if (datasize == SF_FALSE && psf->peak_info != NULL)
-                       {       free (psf->peak_info) ;
-                               psf->peak_info = NULL ;
-                               }
-                       else if (psf->peak_info == NULL)
-                       {       psf->peak_info = peak_info_calloc (psf->sf.channels) ;
-                               if (psf->peak_info != NULL)
-                                       psf->peak_info->peak_loc = SF_PEAK_START ;
-                               } ;
-
-                       if (psf->write_header)
-                               psf->write_header (psf, SF_TRUE) ;
-                       return datasize ;
-
-               case SFC_SET_ADD_HEADER_PAD_CHUNK :
-                       return SF_FALSE ;
-
-               case SFC_GET_LOG_INFO :
-                       if (data == NULL)
-                               return SFE_BAD_COMMAND_PARAM ;
-                       snprintf (data, datasize, "%s", psf->parselog.buf) ;
-                       break ;
-
-               case SFC_CALC_SIGNAL_MAX :
-                       if (data == NULL || datasize != sizeof (double))
-                               return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-                       *((double*) data) = psf_calc_signal_max (psf, SF_FALSE) ;
-                       break ;
-
-               case SFC_CALC_NORM_SIGNAL_MAX :
-                       if (data == NULL || datasize != sizeof (double))
-                               return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-                       *((double*) data) = psf_calc_signal_max (psf, SF_TRUE) ;
-                       break ;
-
-               case SFC_CALC_MAX_ALL_CHANNELS :
-                       if (data == NULL || datasize != SIGNED_SIZEOF (double) * psf->sf.channels)
-                               return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-                       return psf_calc_max_all_channels (psf, (double*) data, SF_FALSE) ;
-
-               case SFC_CALC_NORM_MAX_ALL_CHANNELS :
-                       if (data == NULL || datasize != SIGNED_SIZEOF (double) * psf->sf.channels)
-                               return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-                       return psf_calc_max_all_channels (psf, (double*) data, SF_TRUE) ;
-
-               case SFC_GET_SIGNAL_MAX :
-                       if (data == NULL || datasize != sizeof (double))
-                       {       psf->error = SFE_BAD_COMMAND_PARAM ;
-                               return SF_FALSE ;
-                               } ;
-                       return psf_get_signal_max (psf, (double *) data) ;
-
-               case SFC_GET_MAX_ALL_CHANNELS :
-                       if (data == NULL || datasize != SIGNED_SIZEOF (double) * psf->sf.channels)
-                       {       psf->error = SFE_BAD_COMMAND_PARAM ;
-                               return SF_FALSE ;
-                               } ;
-                       return psf_get_max_all_channels (psf, (double*) data) ;
-
-               case SFC_UPDATE_HEADER_NOW :
-                       if (psf->write_header)
-                               psf->write_header (psf, SF_TRUE) ;
-                       break ;
-
-               case SFC_SET_UPDATE_HEADER_AUTO :
-                       psf->auto_header = datasize ? SF_TRUE : SF_FALSE ;
-                       return psf->auto_header ;
-                       break ;
-
-               case SFC_SET_ADD_DITHER_ON_WRITE :
-               case SFC_SET_ADD_DITHER_ON_READ :
-                       /*
-                       ** FIXME !
-                       ** These are obsolete. Just return.
-                       ** Remove some time after version 1.0.8.
-                       */
-                       break ;
-
-               case SFC_SET_DITHER_ON_WRITE :
-                       if (data == NULL || datasize != SIGNED_SIZEOF (SF_DITHER_INFO))
-                               return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-                       memcpy (&psf->write_dither, data, sizeof (psf->write_dither)) ;
-                       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-                               dither_init (psf, SFM_WRITE) ;
-                       break ;
-
-               case SFC_SET_DITHER_ON_READ :
-                       if (data == NULL || datasize != SIGNED_SIZEOF (SF_DITHER_INFO))
-                               return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-                       memcpy (&psf->read_dither, data, sizeof (psf->read_dither)) ;
-                       if (psf->file.mode == SFM_READ || psf->file.mode == SFM_RDWR)
-                               dither_init (psf, SFM_READ) ;
-                       break ;
-
-               case SFC_FILE_TRUNCATE :
-                       if (psf->file.mode != SFM_WRITE && psf->file.mode != SFM_RDWR)
-                               return SF_TRUE ;
-                       if (datasize != sizeof (sf_count_t))
-                               return SF_TRUE ;
-                       if (data == NULL || datasize != sizeof (sf_count_t))
-                       {       psf->error = SFE_BAD_COMMAND_PARAM ;
-                               return SF_FALSE ;
-                               }
-                       else
-                       {       sf_count_t position ;
-
-                               position = *((sf_count_t*) data) ;
-
-                               if (sf_seek (sndfile, position, SEEK_SET) != position)
-                                       return SF_TRUE ;
-
-                               psf->sf.frames = position ;
-
-                               position = psf_fseek (psf, 0, SEEK_CUR) ;
-
-                               return psf_ftruncate (psf, position) ;
-                               } ;
-                       break ;
-
-               case SFC_SET_RAW_START_OFFSET :
-                       if (data == NULL || datasize != sizeof (sf_count_t))
-                               return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-
-                       if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_RAW)
-                               return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-
-                       psf->dataoffset = *((sf_count_t*) data) ;
-                       sf_seek (sndfile, 0, SEEK_CUR) ;
-                       break ;
-
-               case SFC_GET_EMBED_FILE_INFO :
-                       if (data == NULL || datasize != sizeof (SF_EMBED_FILE_INFO))
-                               return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-
-                       ((SF_EMBED_FILE_INFO*) data)->offset = psf->fileoffset ;
-                       ((SF_EMBED_FILE_INFO*) data)->length = psf->filelength ;
-                       break ;
-
-               /* Lite remove start */
-               case SFC_TEST_IEEE_FLOAT_REPLACE :
-                       psf->ieee_replace = (datasize) ? SF_TRUE : SF_FALSE ;
-                       if ((SF_CODEC (psf->sf.format)) == SF_FORMAT_FLOAT)
-                               float32_init (psf) ;
-                       else if ((SF_CODEC (psf->sf.format)) == SF_FORMAT_DOUBLE)
-                               double64_init (psf) ;
-                       else
-                               return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-                       break ;
-               /* Lite remove end */
-
-               case SFC_SET_CLIPPING :
-                       psf->add_clipping = (datasize) ? SF_TRUE : SF_FALSE ;
-                       return psf->add_clipping ;
-
-               case SFC_GET_CLIPPING :
-                       return psf->add_clipping ;
-
-               case SFC_GET_LOOP_INFO :
-                       if (datasize != sizeof (SF_LOOP_INFO) || data == NULL)
-                       {       psf->error = SFE_BAD_COMMAND_PARAM ;
-                               return SF_FALSE ;
-                               } ;
-                       if (psf->loop_info == NULL)
-                               return SF_FALSE ;
-                       memcpy (data, psf->loop_info, sizeof (SF_LOOP_INFO)) ;
-                       return SF_TRUE ;
-
-               case SFC_SET_BROADCAST_INFO :
-                       {       int format = SF_CONTAINER (psf->sf.format) ;
-
-                               /* Only WAV and RF64 supports the BEXT (Broadcast) chunk. */
-                               if (format != SF_FORMAT_WAV && format != SF_FORMAT_WAVEX && format != SF_FORMAT_RF64)
-                                       return SF_FALSE ;
-                               } ;
-
-                       /* Only makes sense in SFM_WRITE or SFM_RDWR mode. */
-                       if ((psf->file.mode != SFM_WRITE) && (psf->file.mode != SFM_RDWR))
-                               return SF_FALSE ;
-                       /* If data has already been written this must fail. */
-                       if (psf->broadcast_16k == NULL && psf->have_written)
-                       {       psf->error = SFE_CMD_HAS_DATA ;
-                               return SF_FALSE ;
-                               } ;
-
-                       if (NOT (broadcast_var_set (psf, data, datasize)))
-                               return SF_FALSE ;
-
-                       if (psf->write_header)
-                               psf->write_header (psf, SF_TRUE) ;
-                       return SF_TRUE ;
-
-               case SFC_GET_BROADCAST_INFO :
-                       if (data == NULL)
-                       {       psf->error = SFE_BAD_COMMAND_PARAM ;
-                               return SF_FALSE ;
-                               } ;
-                       return broadcast_var_get (psf, data, datasize) ;
-
-               case SFC_SET_CART_INFO :
-                       {       int format = SF_CONTAINER (psf->sf.format) ;
-                               /* Only WAV and RF64 support cart chunk format */
-                               if (format != SF_FORMAT_WAV && format != SF_FORMAT_RF64)
-                                       return SF_FALSE ;
-                               } ;
-
-                       /* Only makes sense in SFM_WRITE or SFM_RDWR mode */
-                       if ((psf->file.mode != SFM_WRITE) && (psf->file.mode != SFM_RDWR))
-                               return SF_FALSE ;
-                       /* If data has already been written this must fail. */
-                       if (psf->cart_16k == NULL && psf->have_written)
-                       {       psf->error = SFE_CMD_HAS_DATA ;
-                               return SF_FALSE ;
-                               } ;
-                       if (NOT (cart_var_set (psf, data, datasize)))
-                               return SF_FALSE ;
-                       if (psf->write_header)
-                               psf->write_header (psf, SF_TRUE) ;
-                       return SF_TRUE ;
-
-               case SFC_GET_CART_INFO :
-                       if (data == NULL)
-                       {       psf->error = SFE_BAD_COMMAND_PARAM ;
-                               return SF_FALSE ;
-                               } ;
-                       return cart_var_get (psf, data, datasize) ;
-
-               case SFC_GET_INSTRUMENT :
-                       if (datasize != sizeof (SF_INSTRUMENT) || data == NULL)
-                       {       psf->error = SFE_BAD_COMMAND_PARAM ;
-                               return SF_FALSE ;
-                               } ;
-                       if (psf->instrument == NULL)
-                               return SF_FALSE ;
-                       memcpy (data, psf->instrument, sizeof (SF_INSTRUMENT)) ;
-                       return SF_TRUE ;
-
-               case SFC_SET_INSTRUMENT :
-                       /* If data has already been written this must fail. */
-                       if (psf->have_written)
-                       {       psf->error = SFE_CMD_HAS_DATA ;
-                               return SF_FALSE ;
-                               } ;
-                       if (datasize != sizeof (SF_INSTRUMENT) || data == NULL)
-                       {       psf->error = SFE_BAD_COMMAND_PARAM ;
-                               return SF_FALSE ;
-                               } ;
-
-                       if (psf->instrument == NULL && (psf->instrument = psf_instrument_alloc ()) == NULL)
-                       {       psf->error = SFE_MALLOC_FAILED ;
-                               return SF_FALSE ;
-                               } ;
-                       memcpy (psf->instrument, data, sizeof (SF_INSTRUMENT)) ;
-                       return SF_TRUE ;
-
-               case SFC_RAW_DATA_NEEDS_ENDSWAP :
-                       return psf->data_endswap ;
-
-               case SFC_GET_CHANNEL_MAP_INFO :
-                       if (psf->channel_map == NULL)
-                               return SF_FALSE ;
-
-                       if (data == NULL || datasize != SIGNED_SIZEOF (psf->channel_map [0]) * psf->sf.channels)
-                       {       psf->error = SFE_BAD_COMMAND_PARAM ;
-                               return SF_FALSE ;
-                               } ;
-
-                       memcpy (data, psf->channel_map, datasize) ;
-                       return SF_TRUE ;
-
-               case SFC_SET_CHANNEL_MAP_INFO :
-                       if (psf->have_written)
-                       {       psf->error = SFE_CMD_HAS_DATA ;
-                               return SF_FALSE ;
-                               } ;
-                       if (data == NULL || datasize != SIGNED_SIZEOF (psf->channel_map [0]) * psf->sf.channels)
-                       {       psf->error = SFE_BAD_COMMAND_PARAM ;
-                               return SF_FALSE ;
-                               } ;
-
-                       {       int *iptr ;
-
-                               for (iptr = data ; iptr < (int*) data + psf->sf.channels ; iptr++)
-                               {       if (*iptr <= SF_CHANNEL_MAP_INVALID || *iptr >= SF_CHANNEL_MAP_MAX)
-                                       {       psf->error = SFE_BAD_COMMAND_PARAM ;
-                                               return SF_FALSE ;
-                                               } ;
-                                       } ;
-                               } ;
-
-                       free (psf->channel_map) ;
-                       if ((psf->channel_map = malloc (datasize)) == NULL)
-                       {       psf->error = SFE_MALLOC_FAILED ;
-                               return SF_FALSE ;
-                               } ;
-
-                       memcpy (psf->channel_map, data, datasize) ;
-
-                       /*
-                       **      Pass the command down to the container's command handler.
-                       **      Don't pass user data, use validated psf->channel_map data instead.
-                       */
-                       if (psf->command)
-                               return psf->command (psf, command, NULL, 0) ;
-                       return SF_FALSE ;
-
-               case SFC_SET_VBR_ENCODING_QUALITY :
-                       if (data == NULL || datasize != sizeof (double))
-                               return SF_FALSE ;
-
-                       quality = *((double *) data) ;
-                       quality = 1.0 - SF_MAX (0.0, SF_MIN (1.0, quality)) ;
-                       return sf_command (sndfile, SFC_SET_COMPRESSION_LEVEL, &quality, sizeof (quality)) ;
-
-
-               default :
-                       /* Must be a file specific command. Pass it on. */
-                       if (psf->command)
-                               return psf->command (psf, command, data, datasize) ;
-
-                       psf_log_printf (psf, "*** sf_command : cmd = 0x%X\n", command) ;
-                       return (psf->error = SFE_BAD_COMMAND_PARAM) ;
-               } ;
-
-       return 0 ;
-} /* sf_command */
-
-/*------------------------------------------------------------------------------
-*/
-
-sf_count_t
-sf_seek        (SNDFILE *sndfile, sf_count_t offset, int whence)
-{      SF_PRIVATE      *psf ;
-       sf_count_t      seek_from_start = 0, retval ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (! psf->sf.seekable)
-       {       psf->error = SFE_NOT_SEEKABLE ;
-               return  PSF_SEEK_ERROR ;
-               } ;
-
-       /* If the whence parameter has a mode ORed in, check to see that
-       ** it makes sense.
-       */
-       if (((whence & SFM_MASK) == SFM_WRITE && psf->file.mode == SFM_READ) ||
-                       ((whence & SFM_MASK) == SFM_READ && psf->file.mode == SFM_WRITE))
-       {       psf->error = SFE_WRONG_SEEK ;
-               return PSF_SEEK_ERROR ;
-               } ;
-
-       /* Convert all SEEK_CUR and SEEK_END into seek_from_start to be
-       ** used with SEEK_SET.
-       */
-       switch (whence)
-       {       /* The SEEK_SET behaviour is independant of mode. */
-               case SEEK_SET :
-               case SEEK_SET | SFM_READ :
-               case SEEK_SET | SFM_WRITE :
-               case SEEK_SET | SFM_RDWR :
-                               seek_from_start = offset ;
-                               break ;
-
-               /* The SEEK_CUR is a little more tricky. */
-               case SEEK_CUR :
-                               if (offset == 0)
-                               {       if (psf->file.mode == SFM_READ)
-                                               return psf->read_current ;
-                                       if (psf->file.mode == SFM_WRITE)
-                                               return psf->write_current ;
-                                       } ;
-                               if (psf->file.mode == SFM_READ)
-                                       seek_from_start = psf->read_current + offset ;
-                               else if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-                                       seek_from_start = psf->write_current + offset ;
-                               else
-                                       psf->error = SFE_AMBIGUOUS_SEEK ;
-                               break ;
-
-               case SEEK_CUR | SFM_READ :
-                               if (offset == 0)
-                                       return psf->read_current ;
-                               seek_from_start = psf->read_current + offset ;
-                               break ;
-
-               case SEEK_CUR | SFM_WRITE :
-                               if (offset == 0)
-                                       return psf->write_current ;
-                               seek_from_start = psf->write_current + offset ;
-                               break ;
-
-               /* The SEEK_END */
-               case SEEK_END :
-               case SEEK_END | SFM_READ :
-               case SEEK_END | SFM_WRITE :
-                               seek_from_start = psf->sf.frames + offset ;
-                               break ;
-
-               default :
-                               psf->error = SFE_BAD_SEEK ;
-                               break ;
-               } ;
-
-       if (psf->error)
-               return PSF_SEEK_ERROR ;
-
-       if (psf->file.mode == SFM_RDWR || psf->file.mode == SFM_WRITE)
-       {       if (seek_from_start < 0)
-               {       psf->error = SFE_BAD_SEEK ;
-                       return PSF_SEEK_ERROR ;
-                       } ;
-               }
-       else if (seek_from_start < 0 || seek_from_start > psf->sf.frames)
-       {       psf->error = SFE_BAD_SEEK ;
-               return PSF_SEEK_ERROR ;
-               } ;
-
-       if (psf->seek)
-       {       int new_mode = (whence & SFM_MASK) ? (whence & SFM_MASK) : psf->file.mode ;
-
-               retval = psf->seek (psf, new_mode, seek_from_start) ;
-
-               switch (new_mode)
-               {       case SFM_READ :
-                                       psf->read_current = retval ;
-                                       break ;
-                       case SFM_WRITE :
-                                       psf->write_current = retval ;
-                                       break ;
-                       case SFM_RDWR :
-                                       psf->read_current = retval ;
-                                       psf->write_current = retval ;
-                                       new_mode = SFM_READ ;
-                                       break ;
-                       } ;
-
-               psf->last_op = new_mode ;
-
-               return retval ;
-               } ;
-
-       psf->error = SFE_AMBIGUOUS_SEEK ;
-       return PSF_SEEK_ERROR ;
-} /* sf_seek */
-
-/*------------------------------------------------------------------------------
-*/
-
-const char*
-sf_get_string (SNDFILE *sndfile, int str_type)
-{      SF_PRIVATE      *psf ;
-
-       if ((psf = (SF_PRIVATE*) sndfile) == NULL)
-               return NULL ;
-       if (psf->Magick != SNDFILE_MAGICK)
-               return NULL ;
-
-       return psf_get_string (psf, str_type) ;
-} /* sf_get_string */
-
-int
-sf_set_string (SNDFILE *sndfile, int str_type, const char* str)
-{      SF_PRIVATE      *psf ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       return psf_set_string (psf, str_type, str) ;
-} /* sf_get_string */
-
-/*------------------------------------------------------------------------------
-*/
-
-int
-sf_current_byterate (SNDFILE *sndfile)
-{      SF_PRIVATE      *psf ;
-
-       if ((psf = (SF_PRIVATE*) sndfile) == NULL)
-               return -1 ;
-       if (psf->Magick != SNDFILE_MAGICK)
-               return -1 ;
-
-       /* This should cover all PCM and floating point formats. */
-       if (psf->bytewidth)
-               return psf->sf.samplerate * psf->sf.channels * psf->bytewidth ;
-
-       if (psf->byterate)
-               return psf->byterate (psf) ;
-
-       switch (SF_CODEC (psf->sf.format))
-       {       case SF_FORMAT_IMA_ADPCM :
-               case SF_FORMAT_MS_ADPCM :
-               case SF_FORMAT_VOX_ADPCM :
-                       return (psf->sf.samplerate * psf->sf.channels) / 2 ;
-
-               case SF_FORMAT_GSM610 :
-                       return (psf->sf.samplerate * psf->sf.channels * 13000) / 8000 ;
-
-               case SF_FORMAT_G721_32 :        /* 32kbs G721 ADPCM encoding. */
-                       return (psf->sf.samplerate * psf->sf.channels) / 2 ;
-
-               case SF_FORMAT_G723_24 :        /* 24kbs G723 ADPCM encoding. */
-                       return (psf->sf.samplerate * psf->sf.channels * 3) / 8 ;
-
-               case SF_FORMAT_G723_40 :        /* 40kbs G723 ADPCM encoding. */
-                       return (psf->sf.samplerate * psf->sf.channels * 5) / 8 ;
-
-               default :
-                       break ;
-               } ;
-
-       return -1 ;
-} /* sf_current_byterate */
-
-/*==============================================================================
-*/
-
-sf_count_t
-sf_read_raw            (SNDFILE *sndfile, void *ptr, sf_count_t bytes)
-{      SF_PRIVATE      *psf ;
-       sf_count_t      count, extra ;
-       int                     bytewidth, blockwidth ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       bytewidth = (psf->bytewidth > 0) ? psf->bytewidth : 1 ;
-       blockwidth = (psf->blockwidth > 0) ? psf->blockwidth : 1 ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       psf->error = SFE_NOT_READMODE ;
-               return  0 ;
-               } ;
-
-       if (bytes < 0 || psf->read_current >= psf->sf.frames)
-       {       psf_memset (ptr, 0, bytes) ;
-               return 0 ;
-               } ;
-
-       if (bytes % (psf->sf.channels * bytewidth))
-       {       psf->error = SFE_BAD_READ_ALIGN ;
-               return 0 ;
-               } ;
-
-       if (psf->last_op != SFM_READ)
-               if (psf->seek (psf, SFM_READ, psf->read_current) < 0)
-                       return 0 ;
-
-       count = psf_fread (ptr, 1, bytes, psf) ;
-
-       if (psf->read_current + count / blockwidth <= psf->sf.frames)
-               psf->read_current += count / blockwidth ;
-       else
-       {       count = (psf->sf.frames - psf->read_current) * blockwidth ;
-               extra = bytes - count ;
-               psf_memset (((char *) ptr) + count, 0, extra) ;
-               psf->read_current = psf->sf.frames ;
-               } ;
-
-       psf->last_op = SFM_READ ;
-
-       return count ;
-} /* sf_read_raw */
-
-/*------------------------------------------------------------------------------
-*/
-
-sf_count_t
-sf_read_short  (SNDFILE *sndfile, short *ptr, sf_count_t len)
-{      SF_PRIVATE      *psf ;
-       sf_count_t      count, extra ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       psf->error = SFE_NOT_READMODE ;
-               return 0 ;
-               } ;
-
-       if (len % psf->sf.channels)
-       {       psf->error = SFE_BAD_READ_ALIGN ;
-               return 0 ;
-               } ;
-
-       if (len <= 0 || psf->read_current >= psf->sf.frames)
-       {       psf_memset (ptr, 0, len * sizeof (short)) ;
-               return 0 ; /* End of file. */
-               } ;
-
-       if (psf->read_short == NULL || psf->seek == NULL)
-       {       psf->error = SFE_UNIMPLEMENTED ;
-               return  0 ;
-               } ;
-
-       if (psf->last_op != SFM_READ)
-               if (psf->seek (psf, SFM_READ, psf->read_current) < 0)
-                       return 0 ;
-
-       count = psf->read_short (psf, ptr, len) ;
-
-       if (psf->read_current + count / psf->sf.channels <= psf->sf.frames)
-               psf->read_current += count / psf->sf.channels ;
-       else
-       {       count = (psf->sf.frames - psf->read_current) * psf->sf.channels ;
-               extra = len - count ;
-               psf_memset (ptr + count, 0, extra * sizeof (short)) ;
-               psf->read_current = psf->sf.frames ;
-               } ;
-
-       psf->last_op = SFM_READ ;
-
-       return count ;
-} /* sf_read_short */
-
-sf_count_t
-sf_readf_short         (SNDFILE *sndfile, short *ptr, sf_count_t frames)
-{      SF_PRIVATE      *psf ;
-       sf_count_t      count, extra ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       psf->error = SFE_NOT_READMODE ;
-               return 0 ;
-               } ;
-
-       if (frames <= 0 || psf->read_current >= psf->sf.frames)
-       {       psf_memset (ptr, 0, frames * psf->sf.channels * sizeof (short)) ;
-               return 0 ; /* End of file. */
-               } ;
-
-       if (psf->read_short == NULL || psf->seek == NULL)
-       {       psf->error = SFE_UNIMPLEMENTED ;
-               return 0 ;
-               } ;
-
-       if (psf->last_op != SFM_READ)
-               if (psf->seek (psf, SFM_READ, psf->read_current) < 0)
-                       return 0 ;
-
-       count = psf->read_short (psf, ptr, frames * psf->sf.channels) ;
-
-       if (psf->read_current + count / psf->sf.channels <= psf->sf.frames)
-               psf->read_current += count / psf->sf.channels ;
-       else
-       {       count = (psf->sf.frames - psf->read_current) * psf->sf.channels ;
-               extra = frames * psf->sf.channels - count ;
-               psf_memset (ptr + count, 0, extra * sizeof (short)) ;
-               psf->read_current = psf->sf.frames ;
-               } ;
-
-       psf->last_op = SFM_READ ;
-
-       return count / psf->sf.channels ;
-} /* sf_readf_short */
-
-/*------------------------------------------------------------------------------
-*/
-
-sf_count_t
-sf_read_int            (SNDFILE *sndfile, int *ptr, sf_count_t len)
-{      SF_PRIVATE      *psf ;
-       sf_count_t      count, extra ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       psf->error = SFE_NOT_READMODE ;
-               return 0 ;
-               } ;
-
-       if (len % psf->sf.channels)
-       {       psf->error = SFE_BAD_READ_ALIGN ;
-               return 0 ;
-               } ;
-
-       if (len <= 0 || psf->read_current >= psf->sf.frames)
-       {       psf_memset (ptr, 0, len * sizeof (int)) ;
-               return 0 ;
-               } ;
-
-       if (psf->read_int == NULL || psf->seek == NULL)
-       {       psf->error = SFE_UNIMPLEMENTED ;
-               return 0 ;
-               } ;
-
-       if (psf->last_op != SFM_READ)
-               if (psf->seek (psf, SFM_READ, psf->read_current) < 0)
-                       return 0 ;
-
-       count = psf->read_int (psf, ptr, len) ;
-
-       if (psf->read_current + count / psf->sf.channels <= psf->sf.frames)
-               psf->read_current += count / psf->sf.channels ;
-       else
-       {       count = (psf->sf.frames - psf->read_current) * psf->sf.channels ;
-               extra = len - count ;
-               psf_memset (ptr + count, 0, extra * sizeof (int)) ;
-               psf->read_current = psf->sf.frames ;
-               } ;
-
-       psf->last_op = SFM_READ ;
-
-       return count ;
-} /* sf_read_int */
-
-sf_count_t
-sf_readf_int   (SNDFILE *sndfile, int *ptr, sf_count_t frames)
-{      SF_PRIVATE      *psf ;
-       sf_count_t      count, extra ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       psf->error = SFE_NOT_READMODE ;
-               return 0 ;
-               } ;
-
-       if (frames <= 0 || psf->read_current >= psf->sf.frames)
-       {       psf_memset (ptr, 0, frames * psf->sf.channels * sizeof (int)) ;
-               return 0 ;
-               } ;
-
-       if (psf->read_int == NULL || psf->seek == NULL)
-       {       psf->error = SFE_UNIMPLEMENTED ;
-               return  0 ;
-               } ;
-
-       if (psf->last_op != SFM_READ)
-               if (psf->seek (psf, SFM_READ, psf->read_current) < 0)
-                       return 0 ;
-
-       count = psf->read_int (psf, ptr, frames * psf->sf.channels) ;
-
-       if (psf->read_current + count / psf->sf.channels <= psf->sf.frames)
-               psf->read_current += count / psf->sf.channels ;
-       else
-       {       count = (psf->sf.frames - psf->read_current) * psf->sf.channels ;
-               extra = frames * psf->sf.channels - count ;
-               psf_memset (ptr + count, 0, extra * sizeof (int)) ;
-               psf->read_current = psf->sf.frames ;
-               } ;
-
-       psf->last_op = SFM_READ ;
-
-       return count / psf->sf.channels ;
-} /* sf_readf_int */
-
-/*------------------------------------------------------------------------------
-*/
-
-sf_count_t
-sf_read_float  (SNDFILE *sndfile, float *ptr, sf_count_t len)
-{      SF_PRIVATE      *psf ;
-       sf_count_t      count, extra ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       psf->error = SFE_NOT_READMODE ;
-               return 0 ;
-               } ;
-
-       if (len % psf->sf.channels)
-       {       psf->error = SFE_BAD_READ_ALIGN ;
-               return 0 ;
-               } ;
-
-       if (len <= 0 || psf->read_current >= psf->sf.frames)
-       {       psf_memset (ptr, 0, len * sizeof (float)) ;
-               return 0 ;
-               } ;
-
-       if (psf->read_float == NULL || psf->seek == NULL)
-       {       psf->error = SFE_UNIMPLEMENTED ;
-               return  0 ;
-               } ;
-
-       if (psf->last_op != SFM_READ)
-               if (psf->seek (psf, SFM_READ, psf->read_current) < 0)
-                       return 0 ;
-
-       count = psf->read_float (psf, ptr, len) ;
-
-       if (psf->read_current + count / psf->sf.channels <= psf->sf.frames)
-               psf->read_current += count / psf->sf.channels ;
-       else
-       {       count = (psf->sf.frames - psf->read_current) * psf->sf.channels ;
-               extra = len - count ;
-               psf_memset (ptr + count, 0, extra * sizeof (float)) ;
-               psf->read_current = psf->sf.frames ;
-               } ;
-
-       psf->last_op = SFM_READ ;
-
-       return count ;
-} /* sf_read_float */
-
-sf_count_t
-sf_readf_float (SNDFILE *sndfile, float *ptr, sf_count_t frames)
-{      SF_PRIVATE      *psf ;
-       sf_count_t      count, extra ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       psf->error = SFE_NOT_READMODE ;
-               return 0 ;
-               } ;
-
-       if (frames <= 0 || psf->read_current >= psf->sf.frames)
-       {       psf_memset (ptr, 0, frames * psf->sf.channels * sizeof (float)) ;
-               return 0 ;
-               } ;
-
-       if (psf->read_float == NULL || psf->seek == NULL)
-       {       psf->error = SFE_UNIMPLEMENTED ;
-               return  0 ;
-               } ;
-
-       if (psf->last_op != SFM_READ)
-               if (psf->seek (psf, SFM_READ, psf->read_current) < 0)
-                       return 0 ;
-
-       count = psf->read_float (psf, ptr, frames * psf->sf.channels) ;
-
-       if (psf->read_current + count / psf->sf.channels <= psf->sf.frames)
-               psf->read_current += count / psf->sf.channels ;
-       else
-       {       count = (psf->sf.frames - psf->read_current) * psf->sf.channels ;
-               extra = frames * psf->sf.channels - count ;
-               psf_memset (ptr + count, 0, extra * sizeof (float)) ;
-               psf->read_current = psf->sf.frames ;
-               } ;
-
-       psf->last_op = SFM_READ ;
-
-       return count / psf->sf.channels ;
-} /* sf_readf_float */
-
-/*------------------------------------------------------------------------------
-*/
-
-sf_count_t
-sf_read_double (SNDFILE *sndfile, double *ptr, sf_count_t len)
-{      SF_PRIVATE      *psf ;
-       sf_count_t      count, extra ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       psf->error = SFE_NOT_READMODE ;
-               return 0 ;
-               } ;
-
-       if (len % psf->sf.channels)
-       {       psf->error = SFE_BAD_READ_ALIGN ;
-               return 0 ;
-               } ;
-
-       if (len <= 0 || psf->read_current >= psf->sf.frames)
-       {       psf_memset (ptr, 0, len * sizeof (double)) ;
-               return 0 ;
-               } ;
-
-       if (psf->read_double == NULL || psf->seek == NULL)
-       {       psf->error = SFE_UNIMPLEMENTED ;
-               return  0 ;
-               } ;
-
-       if (psf->last_op != SFM_READ)
-               if (psf->seek (psf, SFM_READ, psf->read_current) < 0)
-                       return 0 ;
-
-       count = psf->read_double (psf, ptr, len) ;
-
-       if (psf->read_current + count / psf->sf.channels <= psf->sf.frames)
-               psf->read_current += count / psf->sf.channels ;
-       else
-       {       count = (psf->sf.frames - psf->read_current) * psf->sf.channels ;
-               extra = len - count ;
-               psf_memset (ptr + count, 0, extra * sizeof (double)) ;
-               psf->read_current = psf->sf.frames ;
-               } ;
-
-       psf->last_op = SFM_READ ;
-
-       return count ;
-} /* sf_read_double */
-
-sf_count_t
-sf_readf_double        (SNDFILE *sndfile, double *ptr, sf_count_t frames)
-{      SF_PRIVATE      *psf ;
-       sf_count_t      count, extra ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       psf->error = SFE_NOT_READMODE ;
-               return 0 ;
-               } ;
-
-       if (frames <= 0 || psf->read_current >= psf->sf.frames)
-       {       psf_memset (ptr, 0, frames * psf->sf.channels * sizeof (double)) ;
-               return 0 ;
-               } ;
-
-       if (psf->read_double == NULL || psf->seek == NULL)
-       {       psf->error = SFE_UNIMPLEMENTED ;
-               return  0 ;
-               } ;
-
-       if (psf->last_op != SFM_READ)
-               if (psf->seek (psf, SFM_READ, psf->read_current) < 0)
-                       return 0 ;
-
-       count = psf->read_double (psf, ptr, frames * psf->sf.channels) ;
-
-       if (psf->read_current + count / psf->sf.channels <= psf->sf.frames)
-               psf->read_current += count / psf->sf.channels ;
-       else
-       {       count = (psf->sf.frames - psf->read_current) * psf->sf.channels ;
-               extra = frames * psf->sf.channels - count ;
-               psf_memset (ptr + count, 0, extra * sizeof (double)) ;
-               psf->read_current = psf->sf.frames ;
-               } ;
-
-       psf->last_op = SFM_READ ;
-
-       return count / psf->sf.channels ;
-} /* sf_readf_double */
-
-/*------------------------------------------------------------------------------
-*/
-
-sf_count_t
-sf_write_raw   (SNDFILE *sndfile, const void *ptr, sf_count_t len)
-{      SF_PRIVATE      *psf ;
-       sf_count_t      count ;
-       int                     bytewidth, blockwidth ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       bytewidth = (psf->bytewidth > 0) ? psf->bytewidth : 1 ;
-       blockwidth = (psf->blockwidth > 0) ? psf->blockwidth : 1 ;
-
-       if (psf->file.mode == SFM_READ)
-       {       psf->error = SFE_NOT_WRITEMODE ;
-               return 0 ;
-               } ;
-
-       if (len % (psf->sf.channels * bytewidth))
-       {       psf->error = SFE_BAD_WRITE_ALIGN ;
-               return 0 ;
-               } ;
-
-       if (psf->last_op != SFM_WRITE)
-               if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0)
-                       return 0 ;
-
-       if (psf->have_written == SF_FALSE && psf->write_header != NULL)
-               psf->write_header (psf, SF_FALSE) ;
-       psf->have_written = SF_TRUE ;
-
-       count = psf_fwrite (ptr, 1, len, psf) ;
-
-       psf->write_current += count / blockwidth ;
-
-       psf->last_op = SFM_WRITE ;
-
-       if (psf->write_current > psf->sf.frames)
-       {       psf->sf.frames = psf->write_current ;
-               psf->dataend = 0 ;
-               } ;
-
-       if (psf->auto_header && psf->write_header != NULL)
-               psf->write_header (psf, SF_TRUE) ;
-
-       return count ;
-} /* sf_write_raw */
-
-/*------------------------------------------------------------------------------
-*/
-
-sf_count_t
-sf_write_short (SNDFILE *sndfile, const short *ptr, sf_count_t len)
-{      SF_PRIVATE      *psf ;
-       sf_count_t      count ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (psf->file.mode == SFM_READ)
-       {       psf->error = SFE_NOT_WRITEMODE ;
-               return 0 ;
-               } ;
-
-       if (len % psf->sf.channels)
-       {       psf->error = SFE_BAD_WRITE_ALIGN ;
-               return 0 ;
-               } ;
-
-       if (psf->write_short == NULL || psf->seek == NULL)
-       {       psf->error = SFE_UNIMPLEMENTED ;
-               return 0 ;
-               } ;
-
-       if (psf->last_op != SFM_WRITE)
-               if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0)
-                       return 0 ;
-
-       if (psf->have_written == SF_FALSE && psf->write_header != NULL)
-               psf->write_header (psf, SF_FALSE) ;
-       psf->have_written = SF_TRUE ;
-
-       count = psf->write_short (psf, ptr, len) ;
-
-       psf->write_current += count / psf->sf.channels ;
-
-       psf->last_op = SFM_WRITE ;
-
-       if (psf->write_current > psf->sf.frames)
-       {       psf->sf.frames = psf->write_current ;
-               psf->dataend = 0 ;
-               } ;
-
-       if (psf->auto_header && psf->write_header != NULL)
-               psf->write_header (psf, SF_TRUE) ;
-
-       return count ;
-} /* sf_write_short */
-
-sf_count_t
-sf_writef_short        (SNDFILE *sndfile, const short *ptr, sf_count_t frames)
-{      SF_PRIVATE      *psf ;
-       sf_count_t      count ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (psf->file.mode == SFM_READ)
-       {       psf->error = SFE_NOT_WRITEMODE ;
-               return 0 ;
-               } ;
-
-       if (psf->write_short == NULL || psf->seek == NULL)
-       {       psf->error = SFE_UNIMPLEMENTED ;
-               return 0 ;
-               } ;
-
-       if (psf->last_op != SFM_WRITE)
-               if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0)
-                       return 0 ;
-
-       if (psf->have_written == SF_FALSE && psf->write_header != NULL)
-               psf->write_header (psf, SF_FALSE) ;
-       psf->have_written = SF_TRUE ;
-
-       count = psf->write_short (psf, ptr, frames * psf->sf.channels) ;
-
-       psf->write_current += count / psf->sf.channels ;
-
-       psf->last_op = SFM_WRITE ;
-
-       if (psf->write_current > psf->sf.frames)
-       {       psf->sf.frames = psf->write_current ;
-               psf->dataend = 0 ;
-               } ;
-
-       if (psf->auto_header && psf->write_header != NULL)
-               psf->write_header (psf, SF_TRUE) ;
-
-       return count / psf->sf.channels ;
-} /* sf_writef_short */
-
-/*------------------------------------------------------------------------------
-*/
-
-sf_count_t
-sf_write_int   (SNDFILE *sndfile, const int *ptr, sf_count_t len)
-{      SF_PRIVATE      *psf ;
-       sf_count_t      count ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (psf->file.mode == SFM_READ)
-       {       psf->error = SFE_NOT_WRITEMODE ;
-               return 0 ;
-               } ;
-
-       if (len % psf->sf.channels)
-       {       psf->error = SFE_BAD_WRITE_ALIGN ;
-               return 0 ;
-               } ;
-
-       if (psf->write_int == NULL || psf->seek == NULL)
-       {       psf->error = SFE_UNIMPLEMENTED ;
-               return 0 ;
-               } ;
-
-       if (psf->last_op != SFM_WRITE)
-               if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0)
-                       return 0 ;
-
-       if (psf->have_written == SF_FALSE && psf->write_header != NULL)
-               psf->write_header (psf, SF_FALSE) ;
-       psf->have_written = SF_TRUE ;
-
-       count = psf->write_int (psf, ptr, len) ;
-
-       psf->write_current += count / psf->sf.channels ;
-
-       psf->last_op = SFM_WRITE ;
-
-       if (psf->write_current > psf->sf.frames)
-       {       psf->sf.frames = psf->write_current ;
-               psf->dataend = 0 ;
-               } ;
-
-       if (psf->auto_header && psf->write_header != NULL)
-               psf->write_header (psf, SF_TRUE) ;
-
-       return count ;
-} /* sf_write_int */
-
-sf_count_t
-sf_writef_int  (SNDFILE *sndfile, const int *ptr, sf_count_t frames)
-{      SF_PRIVATE      *psf ;
-       sf_count_t      count ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (psf->file.mode == SFM_READ)
-       {       psf->error = SFE_NOT_WRITEMODE ;
-               return 0 ;
-               } ;
-
-       if (psf->write_int == NULL || psf->seek == NULL)
-       {       psf->error = SFE_UNIMPLEMENTED ;
-               return 0 ;
-               } ;
-
-       if (psf->last_op != SFM_WRITE)
-               if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0)
-                       return 0 ;
-
-       if (psf->have_written == SF_FALSE && psf->write_header != NULL)
-               psf->write_header (psf, SF_FALSE) ;
-       psf->have_written = SF_TRUE ;
-
-       count = psf->write_int (psf, ptr, frames * psf->sf.channels) ;
-
-       psf->write_current += count / psf->sf.channels ;
-
-       psf->last_op = SFM_WRITE ;
-
-       if (psf->write_current > psf->sf.frames)
-       {       psf->sf.frames = psf->write_current ;
-               psf->dataend = 0 ;
-               } ;
-
-       if (psf->auto_header && psf->write_header != NULL)
-               psf->write_header (psf, SF_TRUE) ;
-
-       return count / psf->sf.channels ;
-} /* sf_writef_int */
-
-/*------------------------------------------------------------------------------
-*/
-
-sf_count_t
-sf_write_float (SNDFILE *sndfile, const float *ptr, sf_count_t len)
-{      SF_PRIVATE      *psf ;
-       sf_count_t      count ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (psf->file.mode == SFM_READ)
-       {       psf->error = SFE_NOT_WRITEMODE ;
-               return 0 ;
-               } ;
-
-       if (len % psf->sf.channels)
-       {       psf->error = SFE_BAD_WRITE_ALIGN ;
-               return 0 ;
-               } ;
-
-       if (psf->write_float == NULL || psf->seek == NULL)
-       {       psf->error = SFE_UNIMPLEMENTED ;
-               return 0 ;
-               } ;
-
-       if (psf->last_op != SFM_WRITE)
-               if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0)
-                       return 0 ;
-
-       if (psf->have_written == SF_FALSE && psf->write_header != NULL)
-               psf->write_header (psf, SF_FALSE) ;
-       psf->have_written = SF_TRUE ;
-
-       count = psf->write_float (psf, ptr, len) ;
-
-       psf->write_current += count / psf->sf.channels ;
-
-       psf->last_op = SFM_WRITE ;
-
-       if (psf->write_current > psf->sf.frames)
-       {       psf->sf.frames = psf->write_current ;
-               psf->dataend = 0 ;
-               } ;
-
-       if (psf->auto_header && psf->write_header != NULL)
-               psf->write_header (psf, SF_TRUE) ;
-
-       return count ;
-} /* sf_write_float */
-
-sf_count_t
-sf_writef_float        (SNDFILE *sndfile, const float *ptr, sf_count_t frames)
-{      SF_PRIVATE      *psf ;
-       sf_count_t      count ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (psf->file.mode == SFM_READ)
-       {       psf->error = SFE_NOT_WRITEMODE ;
-               return 0 ;
-               } ;
-
-       if (psf->write_float == NULL || psf->seek == NULL)
-       {       psf->error = SFE_UNIMPLEMENTED ;
-               return 0 ;
-               } ;
-
-       if (psf->last_op != SFM_WRITE)
-               if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0)
-                       return 0 ;
-
-       if (psf->have_written == SF_FALSE && psf->write_header != NULL)
-               psf->write_header (psf, SF_FALSE) ;
-       psf->have_written = SF_TRUE ;
-
-       count = psf->write_float (psf, ptr, frames * psf->sf.channels) ;
-
-       psf->write_current += count / psf->sf.channels ;
-
-       psf->last_op = SFM_WRITE ;
-
-       if (psf->write_current > psf->sf.frames)
-       {       psf->sf.frames = psf->write_current ;
-               psf->dataend = 0 ;
-               } ;
-
-       if (psf->auto_header && psf->write_header != NULL)
-               psf->write_header (psf, SF_TRUE) ;
-
-       return count / psf->sf.channels ;
-} /* sf_writef_float */
-
-/*------------------------------------------------------------------------------
-*/
-
-sf_count_t
-sf_write_double        (SNDFILE *sndfile, const double *ptr, sf_count_t len)
-{      SF_PRIVATE      *psf ;
-       sf_count_t      count ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (psf->file.mode == SFM_READ)
-       {       psf->error = SFE_NOT_WRITEMODE ;
-               return 0 ;
-               } ;
-
-       if (len % psf->sf.channels)
-       {       psf->error = SFE_BAD_WRITE_ALIGN ;
-               return  0 ;
-               } ;
-
-       if (psf->write_double == NULL || psf->seek == NULL)
-       {       psf->error = SFE_UNIMPLEMENTED ;
-               return 0 ;
-               } ;
-
-       if (psf->last_op != SFM_WRITE)
-               if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0)
-                       return 0 ;
-
-       if (psf->have_written == SF_FALSE && psf->write_header != NULL)
-               psf->write_header (psf, SF_FALSE) ;
-       psf->have_written = SF_TRUE ;
-
-       count = psf->write_double (psf, ptr, len) ;
-
-       psf->write_current += count / psf->sf.channels ;
-
-       psf->last_op = SFM_WRITE ;
-
-       if (psf->write_current > psf->sf.frames)
-       {       psf->sf.frames = psf->write_current ;
-               psf->dataend = 0 ;
-               } ;
-
-       if (psf->auto_header && psf->write_header != NULL)
-               psf->write_header (psf, SF_TRUE) ;
-
-       return count ;
-} /* sf_write_double */
-
-sf_count_t
-sf_writef_double       (SNDFILE *sndfile, const double *ptr, sf_count_t frames)
-{      SF_PRIVATE      *psf ;
-       sf_count_t      count ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (psf->file.mode == SFM_READ)
-       {       psf->error = SFE_NOT_WRITEMODE ;
-               return 0 ;
-               } ;
-
-       if (psf->write_double == NULL || psf->seek == NULL)
-       {       psf->error = SFE_UNIMPLEMENTED ;
-               return 0 ;
-               } ;
-
-       if (psf->last_op != SFM_WRITE)
-               if (psf->seek (psf, SFM_WRITE, psf->write_current) < 0)
-                       return 0 ;
-
-       if (psf->have_written == SF_FALSE && psf->write_header != NULL)
-               psf->write_header (psf, SF_FALSE) ;
-       psf->have_written = SF_TRUE ;
-
-       count = psf->write_double (psf, ptr, frames * psf->sf.channels) ;
-
-       psf->write_current += count / psf->sf.channels ;
-
-       psf->last_op = SFM_WRITE ;
-
-       if (psf->write_current > psf->sf.frames)
-       {       psf->sf.frames = psf->write_current ;
-               psf->dataend = 0 ;
-               } ;
-
-       if (psf->auto_header && psf->write_header != NULL)
-               psf->write_header (psf, SF_TRUE) ;
-
-       return count / psf->sf.channels ;
-} /* sf_writef_double */
-
-/*=========================================================================
-** Private functions.
-*/
-
-static int
-try_resource_fork (SF_PRIVATE * psf)
-{      int old_error = psf->error ;
-
-       /* Set READ mode now, to see if resource fork exists. */
-       psf->rsrc.mode = SFM_READ ;
-       if (psf_open_rsrc (psf) != 0)
-       {       psf->error = old_error ;
-               return 0 ;
-               } ;
-
-       /* More checking here. */
-       psf_log_printf (psf, "Resource fork : %s\n", psf->rsrc.path.c) ;
-
-       return SF_FORMAT_SD2 ;
-} /* try_resource_fork */
-
-static int
-format_from_extension (SF_PRIVATE *psf)
-{      char *cptr ;
-       char buffer [16] ;
-       int format = 0 ;
-
-       if ((cptr = strrchr (psf->file.name.c, '.')) == NULL)
-               return 0 ;
-
-       cptr ++ ;
-       if (strlen (cptr) > sizeof (buffer) - 1)
-               return 0 ;
-
-       psf_strlcpy (buffer, sizeof (buffer), cptr) ;
-       buffer [sizeof (buffer) - 1] = 0 ;
-
-       /* Convert everything in the buffer to lower case. */
-       cptr = buffer ;
-       while (*cptr)
-       {       *cptr = tolower (*cptr) ;
-               cptr ++ ;
-               } ;
-
-       cptr = buffer ;
-
-       if (strcmp (cptr, "au") == 0)
-       {       psf->sf.channels = 1 ;
-               psf->sf.samplerate = 8000 ;
-               format = SF_FORMAT_RAW | SF_FORMAT_ULAW ;
-               }
-       else if (strcmp (cptr, "snd") == 0)
-       {       psf->sf.channels = 1 ;
-               psf->sf.samplerate = 8000 ;
-               format = SF_FORMAT_RAW | SF_FORMAT_ULAW ;
-               }
-
-       else if (strcmp (cptr, "vox") == 0 || strcmp (cptr, "vox8") == 0)
-       {       psf->sf.channels = 1 ;
-               psf->sf.samplerate = 8000 ;
-               format = SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM ;
-               }
-       else if (strcmp (cptr, "vox6") == 0)
-       {       psf->sf.channels = 1 ;
-               psf->sf.samplerate = 6000 ;
-               format = SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM ;
-               }
-       else if (strcmp (cptr, "gsm") == 0)
-       {       psf->sf.channels = 1 ;
-               psf->sf.samplerate = 8000 ;
-               format = SF_FORMAT_RAW | SF_FORMAT_GSM610 ;
-               }
-
-       /* For RAW files, make sure the dataoffset if set correctly. */
-       if ((SF_CONTAINER (format)) == SF_FORMAT_RAW)
-               psf->dataoffset = 0 ;
-
-       return format ;
-} /* format_from_extension */
-
-static int
-guess_file_type (SF_PRIVATE *psf)
-{      uint32_t buffer [3], format ;
-
-       if (psf_binheader_readf (psf, "b", &buffer, SIGNED_SIZEOF (buffer)) != SIGNED_SIZEOF (buffer))
-       {       psf->error = SFE_BAD_FILE_READ ;
-               return 0 ;
-               } ;
-
-       if ((buffer [0] == MAKE_MARKER ('R', 'I', 'F', 'F') || buffer [0] == MAKE_MARKER ('R', 'I', 'F', 'X'))
-                       && buffer [2] == MAKE_MARKER ('W', 'A', 'V', 'E'))
-               return SF_FORMAT_WAV ;
-
-       if (buffer [0] == MAKE_MARKER ('F', 'O', 'R', 'M'))
-       {       if (buffer [2] == MAKE_MARKER ('A', 'I', 'F', 'F') || buffer [2] == MAKE_MARKER ('A', 'I', 'F', 'C'))
-                       return SF_FORMAT_AIFF ;
-               if (buffer [2] == MAKE_MARKER ('8', 'S', 'V', 'X') || buffer [2] == MAKE_MARKER ('1', '6', 'S', 'V'))
-                       return SF_FORMAT_SVX ;
-               return 0 ;
-               } ;
-
-       if (buffer [0] == MAKE_MARKER ('.', 's', 'n', 'd') || buffer [0] == MAKE_MARKER ('d', 'n', 's', '.'))
-               return SF_FORMAT_AU ;
-
-       if ((buffer [0] == MAKE_MARKER ('f', 'a', 'p', ' ') || buffer [0] == MAKE_MARKER (' ', 'p', 'a', 'f')))
-               return SF_FORMAT_PAF ;
-
-       if (buffer [0] == MAKE_MARKER ('N', 'I', 'S', 'T'))
-               return SF_FORMAT_NIST ;
-
-       if (buffer [0] == MAKE_MARKER ('C', 'r', 'e', 'a') && buffer [1] == MAKE_MARKER ('t', 'i', 'v', 'e'))
-               return SF_FORMAT_VOC ;
-
-       if ((buffer [0] & MAKE_MARKER (0xFF, 0xFF, 0xF8, 0xFF)) == MAKE_MARKER (0x64, 0xA3, 0x00, 0x00) ||
-               (buffer [0] & MAKE_MARKER (0xFF, 0xF8, 0xFF, 0xFF)) == MAKE_MARKER (0x00, 0x00, 0xA3, 0x64))
-               return SF_FORMAT_IRCAM ;
-
-       if (buffer [0] == MAKE_MARKER ('r', 'i', 'f', 'f'))
-               return SF_FORMAT_W64 ;
-
-       if (buffer [0] == MAKE_MARKER (0, 0, 0x03, 0xE8) && buffer [1] == MAKE_MARKER (0, 0, 0, 1) &&
-                                                               buffer [2] == MAKE_MARKER (0, 0, 0, 1))
-               return SF_FORMAT_MAT4 ;
-
-       if (buffer [0] == MAKE_MARKER (0, 0, 0, 0) && buffer [1] == MAKE_MARKER (1, 0, 0, 0) &&
-                                                               buffer [2] == MAKE_MARKER (1, 0, 0, 0))
-               return SF_FORMAT_MAT4 ;
-
-       if (buffer [0] == MAKE_MARKER ('M', 'A', 'T', 'L') && buffer [1] == MAKE_MARKER ('A', 'B', ' ', '5'))
-               return SF_FORMAT_MAT5 ;
-
-       if (buffer [0] == MAKE_MARKER ('P', 'V', 'F', '1'))
-               return SF_FORMAT_PVF ;
-
-       if (buffer [0] == MAKE_MARKER ('E', 'x', 't', 'e') && buffer [1] == MAKE_MARKER ('n', 'd', 'e', 'd') &&
-                                                               buffer [2] == MAKE_MARKER (' ', 'I', 'n', 's'))
-               return SF_FORMAT_XI ;
-
-       if (buffer [0] == MAKE_MARKER ('c', 'a', 'f', 'f') && buffer [2] == MAKE_MARKER ('d', 'e', 's', 'c'))
-               return SF_FORMAT_CAF ;
-
-       if (buffer [0] == MAKE_MARKER ('O', 'g', 'g', 'S'))
-               return SF_FORMAT_OGG ;
-
-       if (buffer [0] == MAKE_MARKER ('A', 'L', 'a', 'w') && buffer [1] == MAKE_MARKER ('S', 'o', 'u', 'n')
-                       && buffer [2] == MAKE_MARKER ('d', 'F', 'i', 'l'))
-               return SF_FORMAT_WVE ;
-
-       if (buffer [0] == MAKE_MARKER ('D', 'i', 'a', 'm') && buffer [1] == MAKE_MARKER ('o', 'n', 'd', 'W')
-                       && buffer [2] == MAKE_MARKER ('a', 'r', 'e', ' '))
-               return SF_FORMAT_DWD ;
-
-       if (buffer [0] == MAKE_MARKER ('L', 'M', '8', '9') || buffer [0] == MAKE_MARKER ('5', '3', 0, 0))
-               return SF_FORMAT_TXW ;
-
-       if ((buffer [0] & MAKE_MARKER (0xFF, 0xFF, 0x80, 0xFF)) == MAKE_MARKER (0xF0, 0x7E, 0, 0x01))
-               return SF_FORMAT_SDS ;
-
-       if ((buffer [0] & MAKE_MARKER (0xFF, 0xFF, 0, 0)) == MAKE_MARKER (1, 4, 0, 0))
-               return SF_FORMAT_MPC2K ;
-
-       if (buffer [0] == MAKE_MARKER ('C', 'A', 'T', ' ') && buffer [2] == MAKE_MARKER ('R', 'E', 'X', '2'))
-               return SF_FORMAT_REX2 ;
-
-       if (buffer [0] == MAKE_MARKER (0x30, 0x26, 0xB2, 0x75) && buffer [1] == MAKE_MARKER (0x8E, 0x66, 0xCF, 0x11))
-               return 0 /*-SF_FORMAT_WMA-*/ ;
-
-       /* HMM (Hidden Markov Model) Tool Kit. */
-       if (2 * BE2H_32 (buffer [0]) + 12 == psf->filelength && buffer [2] == MAKE_MARKER (0, 2, 0, 0))
-               return SF_FORMAT_HTK ;
-
-       if (buffer [0] == MAKE_MARKER ('f', 'L', 'a', 'C'))
-               return SF_FORMAT_FLAC ;
-
-       if (buffer [0] == MAKE_MARKER ('2', 'B', 'I', 'T'))
-               return SF_FORMAT_AVR ;
-
-       if (buffer [0] == MAKE_MARKER ('R', 'F', '6', '4') && buffer [2] == MAKE_MARKER ('W', 'A', 'V', 'E'))
-               return SF_FORMAT_RF64 ;
-
-       if (buffer [0] == MAKE_MARKER ('I', 'D', '3', 3))
-       {       psf_log_printf (psf, "Found 'ID3' marker.\n") ;
-               if (id3_skip (psf))
-                       return guess_file_type (psf) ;
-               return 0 ;
-               } ;
-
-       /* Turtle Beach SMP 16-bit */
-       if (buffer [0] == MAKE_MARKER ('S', 'O', 'U', 'N') && buffer [1] == MAKE_MARKER ('D', ' ', 'S', 'A'))
-               return 0 ;
-
-       /* Yamaha sampler format. */
-       if (buffer [0] == MAKE_MARKER ('S', 'Y', '8', '0') || buffer [0] == MAKE_MARKER ('S', 'Y', '8', '5'))
-               return 0 ;
-
-       if (buffer [0] == MAKE_MARKER ('a', 'j', 'k', 'g'))
-               return 0 /*-SF_FORMAT_SHN-*/ ;
-
-       /* This must be the last one. */
-       if (psf->filelength > 0 && (format = try_resource_fork (psf)) != 0)
-               return format ;
-
-       return 0 ;
-} /* guess_file_type */
-
-
-static int
-validate_sfinfo (SF_INFO *sfinfo)
-{      if (sfinfo->samplerate < 1)
-               return 0 ;
-       if (sfinfo->frames < 0)
-               return 0 ;
-       if (sfinfo->channels < 1)
-               return 0 ;
-       if ((SF_CONTAINER (sfinfo->format)) == 0)
-               return 0 ;
-       if ((SF_CODEC (sfinfo->format)) == 0)
-               return 0 ;
-       if (sfinfo->sections < 1)
-               return 0 ;
-       return 1 ;
-} /* validate_sfinfo */
-
-static int
-validate_psf (SF_PRIVATE *psf)
-{
-       if (psf->datalength < 0)
-       {       psf_log_printf (psf, "Invalid SF_PRIVATE field : datalength == %D.\n", psf->datalength) ;
-               return 0 ;
-               } ;
-       if (psf->dataoffset < 0)
-       {       psf_log_printf (psf, "Invalid SF_PRIVATE field : dataoffset == %D.\n", psf->dataoffset) ;
-               return 0 ;
-               } ;
-       if (psf->blockwidth && psf->blockwidth != psf->sf.channels * psf->bytewidth)
-       {       psf_log_printf (psf, "Invalid SF_PRIVATE field : channels * bytewidth == %d.\n",
-                                                               psf->sf.channels * psf->bytewidth) ;
-               return 0 ;
-               } ;
-       return 1 ;
-} /* validate_psf */
-
-static void
-save_header_info (SF_PRIVATE *psf)
-{      snprintf (sf_parselog, sizeof (sf_parselog), "%s", psf->parselog.buf) ;
-} /* save_header_info */
-
-static void
-copy_filename (SF_PRIVATE *psf, const char *path)
-{      const char *ccptr ;
-       char *cptr ;
-
-       snprintf (psf->file.path.c, sizeof (psf->file.path.c), "%s", path) ;
-       if ((ccptr = strrchr (path, '/')) || (ccptr = strrchr (path, '\\')))
-               ccptr ++ ;
-       else
-               ccptr = path ;
-
-       snprintf (psf->file.name.c, sizeof (psf->file.name.c), "%s", ccptr) ;
-
-       /* Now grab the directory. */
-       snprintf (psf->file.dir.c, sizeof (psf->file.dir.c), "%s", path) ;
-       if ((cptr = strrchr (psf->file.dir.c, '/')) || (cptr = strrchr (psf->file.dir.c, '\\')))
-               cptr [1] = 0 ;
-       else
-               psf->file.dir.c [0] = 0 ;
-
-       return ;
-} /* copy_filename */
-
-/*==============================================================================
-*/
-
-static int
-psf_close (SF_PRIVATE *psf)
-{      uint32_t k ;
-       int     error = 0 ;
-
-       if (psf->codec_close)
-       {       error = psf->codec_close (psf) ;
-               /* To prevent it being called in psf->container_close(). */
-               psf->codec_close = NULL ;
-               } ;
-
-       if (psf->container_close)
-               error = psf->container_close (psf) ;
-
-       error = psf_fclose (psf) ;
-       psf_close_rsrc (psf) ;
-
-       /* For an ISO C compliant implementation it is ok to free a NULL pointer. */
-       free (psf->container_data) ;
-       free (psf->codec_data) ;
-       free (psf->interleave) ;
-       free (psf->dither) ;
-       free (psf->peak_info) ;
-       free (psf->broadcast_16k) ;
-       free (psf->loop_info) ;
-       free (psf->instrument) ;
-       free (psf->channel_map) ;
-       free (psf->format_desc) ;
-       free (psf->strings.storage) ;
-
-       if (psf->wchunks.chunks)
-               for (k = 0 ; k < psf->wchunks.used ; k++)
-                       free (psf->wchunks.chunks [k].data) ;
-       free (psf->rchunks.chunks) ;
-       free (psf->wchunks.chunks) ;
-       free (psf->iterator) ;
-       free (psf->cart_16k) ;
-
-       memset (psf, 0, sizeof (SF_PRIVATE)) ;
-       free (psf) ;
-
-       return error ;
-} /* psf_close */
-
-SNDFILE *
-psf_open_file (SF_PRIVATE *psf, SF_INFO *sfinfo)
-{      int             error, format ;
-
-       sf_errno = error = 0 ;
-       sf_parselog [0] = 0 ;
-
-       if (psf->error)
-       {       error = psf->error ;
-               goto error_exit ;
-               } ;
-
-       if (psf->file.mode != SFM_READ && psf->file.mode != SFM_WRITE && psf->file.mode != SFM_RDWR)
-       {       error = SFE_BAD_OPEN_MODE ;
-               goto error_exit ;
-               } ;
-
-       if (sfinfo == NULL)
-       {       error = SFE_BAD_SF_INFO_PTR ;
-               goto error_exit ;
-               } ;
-
-       /* Zero out these fields. */
-       sfinfo->frames = 0 ;
-       sfinfo->sections = 0 ;
-       sfinfo->seekable = 0 ;
-
-       if (psf->file.mode == SFM_READ)
-       {       if ((SF_CONTAINER (sfinfo->format)) == SF_FORMAT_RAW)
-               {       if (sf_format_check (sfinfo) == 0)
-                       {       error = SFE_RAW_BAD_FORMAT ;
-                               goto error_exit ;
-                               } ;
-                       }
-               else
-                       memset (sfinfo, 0, sizeof (SF_INFO)) ;
-               } ;
-
-       memcpy (&psf->sf, sfinfo, sizeof (SF_INFO)) ;
-
-       psf->Magick             = SNDFILE_MAGICK ;
-       psf->norm_float         = SF_TRUE ;
-       psf->norm_double        = SF_TRUE ;
-       psf->dataoffset         = -1 ;
-       psf->datalength         = -1 ;
-       psf->read_current       = -1 ;
-       psf->write_current      = -1 ;
-       psf->auto_header        = SF_FALSE ;
-       psf->rwf_endian         = SF_ENDIAN_LITTLE ;
-       psf->seek                       = psf_default_seek ;
-       psf->float_int_mult = 0 ;
-       psf->float_max          = -1.0 ;
-
-       /* An attempt at a per SF_PRIVATE unique id. */
-       psf->unique_id          = psf_rand_int32 () ;
-
-       psf->sf.sections = 1 ;
-
-       psf->is_pipe = psf_is_pipe (psf) ;
-
-       if (psf->is_pipe)
-       {       psf->sf.seekable = SF_FALSE ;
-               psf->filelength = SF_COUNT_MAX ;
-               }
-       else
-       {       psf->sf.seekable = SF_TRUE ;
-
-               /* File is open, so get the length. */
-               psf->filelength = psf_get_filelen (psf) ;
-               } ;
-
-       if (psf->fileoffset > 0)
-       {       switch (psf->file.mode)
-               {       case SFM_READ :
-                               if (psf->filelength < 44)
-                               {       psf_log_printf (psf, "Short filelength: %D (fileoffset: %D)\n", psf->filelength, psf->fileoffset) ;
-                                       error = SFE_BAD_OFFSET ;
-                                       goto error_exit ;
-                                       } ;
-                               break ;
-
-                       case SFM_WRITE :
-                               psf->fileoffset = 0 ;
-                               psf_fseek (psf, 0, SEEK_END) ;
-                               psf->fileoffset = psf_ftell (psf) ;
-                               break ;
-
-                       case SFM_RDWR :
-                               error = SFE_NO_EMBEDDED_RDWR ;
-                               goto error_exit ;
-                       } ;
-
-               psf_log_printf (psf, "Embedded file offset : %D\n", psf->fileoffset) ;
-               } ;
-
-       if (psf->filelength == SF_COUNT_MAX)
-               psf_log_printf (psf, "Length : unknown\n") ;
-       else
-               psf_log_printf (psf, "Length : %D\n", psf->filelength) ;
-
-       if (psf->file.mode == SFM_WRITE || (psf->file.mode == SFM_RDWR && psf->filelength == 0))
-       {       /* If the file is being opened for write or RDWR and the file is currently
-               ** empty, then the SF_INFO struct must contain valid data.
-               */
-               if ((SF_CONTAINER (psf->sf.format)) == 0)
-               {       error = SFE_ZERO_MAJOR_FORMAT ;
-                       goto error_exit ;
-                       } ;
-               if ((SF_CODEC (psf->sf.format)) == 0)
-               {       error = SFE_ZERO_MINOR_FORMAT ;
-                       goto error_exit ;
-                       } ;
-
-               if (sf_format_check (&psf->sf) == 0)
-               {       error = SFE_BAD_OPEN_FORMAT ;
-                       goto error_exit ;
-                       } ;
-               }
-       else if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_RAW)
-       {       /* If type RAW has not been specified then need to figure out file type. */
-               psf->sf.format = guess_file_type (psf) ;
-
-               if (psf->sf.format == 0)
-                       psf->sf.format = format_from_extension (psf) ;
-               } ;
-
-       /* Prevent unnecessary seeks */
-       psf->last_op = psf->file.mode ;
-
-       /* Set bytewidth if known. */
-       switch (SF_CODEC (psf->sf.format))
-       {       case SF_FORMAT_PCM_S8 :
-               case SF_FORMAT_PCM_U8 :
-               case SF_FORMAT_ULAW :
-               case SF_FORMAT_ALAW :
-               case SF_FORMAT_DPCM_8 :
-                               psf->bytewidth = 1 ;
-                               break ;
-
-               case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_DPCM_16 :
-                               psf->bytewidth = 2 ;
-                               break ;
-
-               case SF_FORMAT_PCM_24 :
-                               psf->bytewidth = 3 ;
-                               break ;
-
-               case SF_FORMAT_PCM_32 :
-               case SF_FORMAT_FLOAT :
-                               psf->bytewidth = 4 ;
-                               break ;
-
-               case SF_FORMAT_DOUBLE :
-                               psf->bytewidth = 8 ;
-                               break ;
-               } ;
-
-       /* Call the initialisation function for the relevant file type. */
-       switch (SF_CONTAINER (psf->sf.format))
-       {       case    SF_FORMAT_WAV :
-               case    SF_FORMAT_WAVEX :
-                               error = wav_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_AIFF :
-                               error = aiff_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_AU :
-                               error = au_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_RAW :
-                               error = raw_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_W64 :
-                               error = w64_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_RF64 :
-                               error = rf64_open (psf) ;
-                               break ;
-
-               /* Lite remove start */
-               case    SF_FORMAT_PAF :
-                               error = paf_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_SVX :
-                               error = svx_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_NIST :
-                               error = nist_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_IRCAM :
-                               error = ircam_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_VOC :
-                               error = voc_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_SDS :
-                               error = sds_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_OGG :
-                               error = ogg_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_TXW :
-                               error = txw_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_WVE :
-                               error = wve_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_DWD :
-                               error = dwd_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_MAT4 :
-                               error = mat4_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_MAT5 :
-                               error = mat5_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_PVF :
-                               error = pvf_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_XI :
-                               error = xi_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_HTK :
-                               error = htk_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_SD2 :
-                               error = sd2_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_REX2 :
-                               error = rx2_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_AVR :
-                               error = avr_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_FLAC :
-                               error = flac_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_CAF :
-                               error = caf_open (psf) ;
-                               break ;
-
-               case    SF_FORMAT_MPC2K :
-                               error = mpc2k_open (psf) ;
-                               break ;
-
-               /* Lite remove end */
-
-               default :
-                               error = SFE_UNKNOWN_FORMAT ;
-               } ;
-
-       if (error)
-               goto error_exit ;
-
-       /* For now, check whether embedding is supported. */
-       format = SF_CONTAINER (psf->sf.format) ;
-       if (psf->fileoffset > 0)
-       {       switch (format)
-               {       case SF_FORMAT_WAV :
-                       case SF_FORMAT_WAVEX :
-                       case SF_FORMAT_AIFF :
-                       case SF_FORMAT_AU :
-                               /* Actual embedded files. */
-                               break ;
-
-                       case SF_FORMAT_FLAC :
-                               /* Flac with an ID3v2 header? */
-                               break ;
-
-                       default :
-                               error = SFE_NO_EMBED_SUPPORT ;
-                               goto error_exit ;
-                       } ;
-               } ;
-
-       if (psf->fileoffset > 0)
-               psf_log_printf (psf, "Embedded file length : %D\n", psf->filelength) ;
-
-       if (psf->file.mode == SFM_RDWR && sf_format_check (&psf->sf) == 0)
-       {       error = SFE_BAD_MODE_RW ;
-               goto error_exit ;
-               } ;
-
-       if (validate_sfinfo (&psf->sf) == 0)
-       {       psf_log_SF_INFO (psf) ;
-               save_header_info (psf) ;
-               error = SFE_BAD_SF_INFO ;
-               goto error_exit ;
-               } ;
-
-       if (validate_psf (psf) == 0)
-       {       save_header_info (psf) ;
-               error = SFE_INTERNAL ;
-               goto error_exit ;
-               } ;
-
-       psf->read_current = 0 ;
-       psf->write_current = 0 ;
-       if (psf->file.mode == SFM_RDWR)
-       {       psf->write_current = psf->sf.frames ;
-               psf->have_written = psf->sf.frames > 0 ? SF_TRUE : SF_FALSE ;
-               } ;
-
-       memcpy (sfinfo, &psf->sf, sizeof (SF_INFO)) ;
-
-       return (SNDFILE *) psf ;
-
-error_exit :
-       sf_errno = error ;
-
-       if (error == SFE_SYSTEM)
-               snprintf (sf_syserr, sizeof (sf_syserr), "%s", psf->syserr) ;
-       snprintf (sf_parselog, sizeof (sf_parselog), "%s", psf->parselog.buf) ;
-
-       switch (error)
-       {       case SF_ERR_SYSTEM :
-               case SF_ERR_UNSUPPORTED_ENCODING :
-               case SFE_UNIMPLEMENTED :
-                       break ;
-
-               case SFE_RAW_BAD_FORMAT :
-                       break ;
-
-               default :
-                       if (psf->file.mode == SFM_READ)
-                       {       psf_log_printf (psf, "Parse error : %s\n", sf_error_number (error)) ;
-                               error = SF_ERR_MALFORMED_FILE ;
-                               } ;
-               } ;
-
-       psf_close (psf) ;
-       return NULL ;
-} /* psf_open_file */
-
-/*==============================================================================
-** Chunk getting and setting.
-*/
-
-int
-sf_set_chunk (SNDFILE * sndfile, const SF_CHUNK_INFO * chunk_info)
-{      SF_PRIVATE      *psf ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (chunk_info == NULL || chunk_info->data == NULL)
-               return SFE_BAD_CHUNK_PTR ;
-
-       if (psf->set_chunk)
-               return psf->set_chunk (psf, chunk_info) ;
-
-       return SFE_BAD_CHUNK_FORMAT ;
-} /* sf_set_chunk */
-
-SF_CHUNK_ITERATOR *
-sf_get_chunk_iterator (SNDFILE * sndfile, const SF_CHUNK_INFO * chunk_info)
-{      SF_PRIVATE      *psf ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (chunk_info)
-               return psf_get_chunk_iterator (psf, chunk_info->id) ;
-
-       return psf_get_chunk_iterator (psf, NULL) ;
-} /* sf_get_chunk_iterator */
-
-SF_CHUNK_ITERATOR *
-sf_next_chunk_iterator (SF_CHUNK_ITERATOR * iterator)
-{      SF_PRIVATE      *psf ;
-       SNDFILE *sndfile = iterator ? iterator->sndfile : NULL ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (psf->next_chunk_iterator)
-               return psf->next_chunk_iterator (psf, iterator) ;
-
-       return NULL ;
-} /* sf_get_chunk_iterator_next */
-
-int
-sf_get_chunk_size (const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info)
-{      SF_PRIVATE      *psf ;
-       SNDFILE *sndfile = iterator ? iterator->sndfile : NULL ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (chunk_info == NULL)
-               return SFE_BAD_CHUNK_PTR ;
-
-       if (psf->get_chunk_size)
-               return psf->get_chunk_size (psf, iterator, chunk_info) ;
-
-       return SFE_BAD_CHUNK_FORMAT ;
-       return 0 ;
-} /* sf_get_chunk_size */
-
-int
-sf_get_chunk_data (const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info)
-{      SF_PRIVATE      *psf ;
-       SNDFILE *sndfile = iterator ? iterator->sndfile : NULL ;
-
-       VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf, 1) ;
-
-       if (chunk_info == NULL || chunk_info->data == NULL)
-               return SFE_BAD_CHUNK_PTR ;
-
-       if (psf->get_chunk_data)
-               return psf->get_chunk_data (psf, iterator, chunk_info) ;
-
-       return SFE_BAD_CHUNK_FORMAT ;
-} /* sf_get_chunk_data */
diff --git a/libs/libsndfile/src/sndfile.h.in b/libs/libsndfile/src/sndfile.h.in
deleted file mode 100644 (file)
index b1e32d7..0000000
+++ /dev/null
@@ -1,824 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-** sndfile.h -- system-wide definitions
-**
-** API documentation is in the doc/ directory of the source code tarball
-** and at http://www.mega-nerd.com/libsndfile/api.html.
-*/
-
-#ifndef SNDFILE_H
-#define SNDFILE_H
-
-/* This is the version 1.0.X header file. */
-#define        SNDFILE_1
-
-#include <stdio.h>
-#include <stdint.h>
-#include <sys/types.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* The following file types can be read and written.
-** A file type would consist of a major type (ie SF_FORMAT_WAV) bitwise
-** ORed with a minor type (ie SF_FORMAT_PCM). SF_FORMAT_TYPEMASK and
-** SF_FORMAT_SUBMASK can be used to separate the major and minor file
-** types.
-*/
-
-enum
-{      /* Major formats. */
-       SF_FORMAT_WAV                   = 0x010000,             /* Microsoft WAV format (little endian default). */
-       SF_FORMAT_AIFF                  = 0x020000,             /* Apple/SGI AIFF format (big endian). */
-       SF_FORMAT_AU                    = 0x030000,             /* Sun/NeXT AU format (big endian). */
-       SF_FORMAT_RAW                   = 0x040000,             /* RAW PCM data. */
-       SF_FORMAT_PAF                   = 0x050000,             /* Ensoniq PARIS file format. */
-       SF_FORMAT_SVX                   = 0x060000,             /* Amiga IFF / SVX8 / SV16 format. */
-       SF_FORMAT_NIST                  = 0x070000,             /* Sphere NIST format. */
-       SF_FORMAT_VOC                   = 0x080000,             /* VOC files. */
-       SF_FORMAT_IRCAM                 = 0x0A0000,             /* Berkeley/IRCAM/CARL */
-       SF_FORMAT_W64                   = 0x0B0000,             /* Sonic Foundry's 64 bit RIFF/WAV */
-       SF_FORMAT_MAT4                  = 0x0C0000,             /* Matlab (tm) V4.2 / GNU Octave 2.0 */
-       SF_FORMAT_MAT5                  = 0x0D0000,             /* Matlab (tm) V5.0 / GNU Octave 2.1 */
-       SF_FORMAT_PVF                   = 0x0E0000,             /* Portable Voice Format */
-       SF_FORMAT_XI                    = 0x0F0000,             /* Fasttracker 2 Extended Instrument */
-       SF_FORMAT_HTK                   = 0x100000,             /* HMM Tool Kit format */
-       SF_FORMAT_SDS                   = 0x110000,             /* Midi Sample Dump Standard */
-       SF_FORMAT_AVR                   = 0x120000,             /* Audio Visual Research */
-       SF_FORMAT_WAVEX                 = 0x130000,             /* MS WAVE with WAVEFORMATEX */
-       SF_FORMAT_SD2                   = 0x160000,             /* Sound Designer 2 */
-       SF_FORMAT_FLAC                  = 0x170000,             /* FLAC lossless file format */
-       SF_FORMAT_CAF                   = 0x180000,             /* Core Audio File format */
-       SF_FORMAT_WVE                   = 0x190000,             /* Psion WVE format */
-       SF_FORMAT_OGG                   = 0x200000,             /* Xiph OGG container */
-       SF_FORMAT_MPC2K                 = 0x210000,             /* Akai MPC 2000 sampler */
-       SF_FORMAT_RF64                  = 0x220000,             /* RF64 WAV file */
-
-       /* Subtypes from here on. */
-
-       SF_FORMAT_PCM_S8                = 0x0001,               /* Signed 8 bit data */
-       SF_FORMAT_PCM_16                = 0x0002,               /* Signed 16 bit data */
-       SF_FORMAT_PCM_24                = 0x0003,               /* Signed 24 bit data */
-       SF_FORMAT_PCM_32                = 0x0004,               /* Signed 32 bit data */
-
-       SF_FORMAT_PCM_U8                = 0x0005,               /* Unsigned 8 bit data (WAV and RAW only) */
-
-       SF_FORMAT_FLOAT                 = 0x0006,               /* 32 bit float data */
-       SF_FORMAT_DOUBLE                = 0x0007,               /* 64 bit float data */
-
-       SF_FORMAT_ULAW                  = 0x0010,               /* U-Law encoded. */
-       SF_FORMAT_ALAW                  = 0x0011,               /* A-Law encoded. */
-       SF_FORMAT_IMA_ADPCM             = 0x0012,               /* IMA ADPCM. */
-       SF_FORMAT_MS_ADPCM              = 0x0013,               /* Microsoft ADPCM. */
-
-       SF_FORMAT_GSM610                = 0x0020,               /* GSM 6.10 encoding. */
-       SF_FORMAT_VOX_ADPCM             = 0x0021,               /* OKI / Dialogix ADPCM */
-
-       SF_FORMAT_G721_32               = 0x0030,               /* 32kbs G721 ADPCM encoding. */
-       SF_FORMAT_G723_24               = 0x0031,               /* 24kbs G723 ADPCM encoding. */
-       SF_FORMAT_G723_40               = 0x0032,               /* 40kbs G723 ADPCM encoding. */
-
-       SF_FORMAT_DWVW_12               = 0x0040,               /* 12 bit Delta Width Variable Word encoding. */
-       SF_FORMAT_DWVW_16               = 0x0041,               /* 16 bit Delta Width Variable Word encoding. */
-       SF_FORMAT_DWVW_24               = 0x0042,               /* 24 bit Delta Width Variable Word encoding. */
-       SF_FORMAT_DWVW_N                = 0x0043,               /* N bit Delta Width Variable Word encoding. */
-
-       SF_FORMAT_DPCM_8                = 0x0050,               /* 8 bit differential PCM (XI only) */
-       SF_FORMAT_DPCM_16               = 0x0051,               /* 16 bit differential PCM (XI only) */
-
-       SF_FORMAT_VORBIS                = 0x0060,               /* Xiph Vorbis encoding. */
-
-       SF_FORMAT_ALAC_16               = 0x0070,               /* Apple Lossless Audio Codec (16 bit). */
-       SF_FORMAT_ALAC_20               = 0x0071,               /* Apple Lossless Audio Codec (20 bit). */
-       SF_FORMAT_ALAC_24               = 0x0072,               /* Apple Lossless Audio Codec (24 bit). */
-       SF_FORMAT_ALAC_32               = 0x0073,               /* Apple Lossless Audio Codec (32 bit). */
-
-       /* Endian-ness options. */
-
-       SF_ENDIAN_FILE                  = 0x00000000,   /* Default file endian-ness. */
-       SF_ENDIAN_LITTLE                = 0x10000000,   /* Force little endian-ness. */
-       SF_ENDIAN_BIG                   = 0x20000000,   /* Force big endian-ness. */
-       SF_ENDIAN_CPU                   = 0x30000000,   /* Force CPU endian-ness. */
-
-       SF_FORMAT_SUBMASK               = 0x0000FFFF,
-       SF_FORMAT_TYPEMASK              = 0x0FFF0000,
-       SF_FORMAT_ENDMASK               = 0x30000000
-} ;
-
-/*
-** The following are the valid command numbers for the sf_command()
-** interface.  The use of these commands is documented in the file
-** command.html in the doc directory of the source code distribution.
-*/
-
-enum
-{      SFC_GET_LIB_VERSION                             = 0x1000,
-       SFC_GET_LOG_INFO                                = 0x1001,
-       SFC_GET_CURRENT_SF_INFO                 = 0x1002,
-
-
-       SFC_GET_NORM_DOUBLE                             = 0x1010,
-       SFC_GET_NORM_FLOAT                              = 0x1011,
-       SFC_SET_NORM_DOUBLE                             = 0x1012,
-       SFC_SET_NORM_FLOAT                              = 0x1013,
-       SFC_SET_SCALE_FLOAT_INT_READ    = 0x1014,
-       SFC_SET_SCALE_INT_FLOAT_WRITE   = 0x1015,
-
-       SFC_GET_SIMPLE_FORMAT_COUNT             = 0x1020,
-       SFC_GET_SIMPLE_FORMAT                   = 0x1021,
-
-       SFC_GET_FORMAT_INFO                             = 0x1028,
-
-       SFC_GET_FORMAT_MAJOR_COUNT              = 0x1030,
-       SFC_GET_FORMAT_MAJOR                    = 0x1031,
-       SFC_GET_FORMAT_SUBTYPE_COUNT    = 0x1032,
-       SFC_GET_FORMAT_SUBTYPE                  = 0x1033,
-
-       SFC_CALC_SIGNAL_MAX                             = 0x1040,
-       SFC_CALC_NORM_SIGNAL_MAX                = 0x1041,
-       SFC_CALC_MAX_ALL_CHANNELS               = 0x1042,
-       SFC_CALC_NORM_MAX_ALL_CHANNELS  = 0x1043,
-       SFC_GET_SIGNAL_MAX                              = 0x1044,
-       SFC_GET_MAX_ALL_CHANNELS                = 0x1045,
-
-       SFC_SET_ADD_PEAK_CHUNK                  = 0x1050,
-       SFC_SET_ADD_HEADER_PAD_CHUNK    = 0x1051,
-
-       SFC_UPDATE_HEADER_NOW                   = 0x1060,
-       SFC_SET_UPDATE_HEADER_AUTO              = 0x1061,
-
-       SFC_FILE_TRUNCATE                               = 0x1080,
-
-       SFC_SET_RAW_START_OFFSET                = 0x1090,
-
-       SFC_SET_DITHER_ON_WRITE                 = 0x10A0,
-       SFC_SET_DITHER_ON_READ                  = 0x10A1,
-
-       SFC_GET_DITHER_INFO_COUNT               = 0x10A2,
-       SFC_GET_DITHER_INFO                             = 0x10A3,
-
-       SFC_GET_EMBED_FILE_INFO                 = 0x10B0,
-
-       SFC_SET_CLIPPING                                = 0x10C0,
-       SFC_GET_CLIPPING                                = 0x10C1,
-
-       SFC_GET_INSTRUMENT                              = 0x10D0,
-       SFC_SET_INSTRUMENT                              = 0x10D1,
-
-       SFC_GET_LOOP_INFO                               = 0x10E0,
-
-       SFC_GET_BROADCAST_INFO                  = 0x10F0,
-       SFC_SET_BROADCAST_INFO                  = 0x10F1,
-
-       SFC_GET_CHANNEL_MAP_INFO                = 0x1100,
-       SFC_SET_CHANNEL_MAP_INFO                = 0x1101,
-
-       SFC_RAW_DATA_NEEDS_ENDSWAP              = 0x1110,
-
-       /* Support for Wavex Ambisonics Format */
-       SFC_WAVEX_SET_AMBISONIC                 = 0x1200,
-       SFC_WAVEX_GET_AMBISONIC                 = 0x1201,
-
-       SFC_SET_VBR_ENCODING_QUALITY    = 0x1300,
-       SFC_SET_COMPRESSION_LEVEL               = 0x1301,
-
-       /* Cart Chunk support */
-       SFC_SET_CART_INFO                               = 0x1400,
-       SFC_GET_CART_INFO                               = 0x1401,
-
-       /* Following commands for testing only. */
-       SFC_TEST_IEEE_FLOAT_REPLACE             = 0x6001,
-
-       /*
-       ** SFC_SET_ADD_* values are deprecated and will disappear at some
-       ** time in the future. They are guaranteed to be here up to and
-       ** including version 1.0.8 to avoid breakage of existing software.
-       ** They currently do nothing and will continue to do nothing.
-       */
-       SFC_SET_ADD_DITHER_ON_WRITE             = 0x1070,
-       SFC_SET_ADD_DITHER_ON_READ              = 0x1071
-} ;
-
-
-/*
-** String types that can be set and read from files. Not all file types
-** support this and even the file types which support one, may not support
-** all string types.
-*/
-
-enum
-{      SF_STR_TITLE                                    = 0x01,
-       SF_STR_COPYRIGHT                                = 0x02,
-       SF_STR_SOFTWARE                                 = 0x03,
-       SF_STR_ARTIST                                   = 0x04,
-       SF_STR_COMMENT                                  = 0x05,
-       SF_STR_DATE                                             = 0x06,
-       SF_STR_ALBUM                                    = 0x07,
-       SF_STR_LICENSE                                  = 0x08,
-       SF_STR_TRACKNUMBER                              = 0x09,
-       SF_STR_GENRE                                    = 0x10
-} ;
-
-/*
-** Use the following as the start and end index when doing metadata
-** transcoding.
-*/
-
-#define        SF_STR_FIRST    SF_STR_TITLE
-#define        SF_STR_LAST             SF_STR_GENRE
-
-enum
-{      /* True and false */
-       SF_FALSE        = 0,
-       SF_TRUE         = 1,
-
-       /* Modes for opening files. */
-       SFM_READ        = 0x10,
-       SFM_WRITE       = 0x20,
-       SFM_RDWR        = 0x30,
-
-       SF_AMBISONIC_NONE               = 0x40,
-       SF_AMBISONIC_B_FORMAT   = 0x41
-} ;
-
-/* Public error values. These are guaranteed to remain unchanged for the duration
-** of the library major version number.
-** There are also a large number of private error numbers which are internal to
-** the library which can change at any time.
-*/
-
-enum
-{      SF_ERR_NO_ERROR                         = 0,
-       SF_ERR_UNRECOGNISED_FORMAT      = 1,
-       SF_ERR_SYSTEM                           = 2,
-       SF_ERR_MALFORMED_FILE           = 3,
-       SF_ERR_UNSUPPORTED_ENCODING     = 4
-} ;
-
-
-/* Channel map values (used with SFC_SET/GET_CHANNEL_MAP).
-*/
-
-enum
-{      SF_CHANNEL_MAP_INVALID = 0,
-       SF_CHANNEL_MAP_MONO = 1,
-       SF_CHANNEL_MAP_LEFT,                                    /* Apple calls this 'Left' */
-       SF_CHANNEL_MAP_RIGHT,                                   /* Apple calls this 'Right' */
-       SF_CHANNEL_MAP_CENTER,                                  /* Apple calls this 'Center' */
-       SF_CHANNEL_MAP_FRONT_LEFT,
-       SF_CHANNEL_MAP_FRONT_RIGHT,
-       SF_CHANNEL_MAP_FRONT_CENTER,
-       SF_CHANNEL_MAP_REAR_CENTER,                             /* Apple calls this 'Center Surround', Msft calls this 'Back Center' */
-       SF_CHANNEL_MAP_REAR_LEFT,                               /* Apple calls this 'Left Surround', Msft calls this 'Back Left' */
-       SF_CHANNEL_MAP_REAR_RIGHT,                              /* Apple calls this 'Right Surround', Msft calls this 'Back Right' */
-       SF_CHANNEL_MAP_LFE,                                             /* Apple calls this 'LFEScreen', Msft calls this 'Low Frequency'  */
-       SF_CHANNEL_MAP_FRONT_LEFT_OF_CENTER,    /* Apple calls this 'Left Center' */
-       SF_CHANNEL_MAP_FRONT_RIGHT_OF_CENTER,   /* Apple calls this 'Right Center */
-       SF_CHANNEL_MAP_SIDE_LEFT,                               /* Apple calls this 'Left Surround Direct' */
-       SF_CHANNEL_MAP_SIDE_RIGHT,                              /* Apple calls this 'Right Surround Direct' */
-       SF_CHANNEL_MAP_TOP_CENTER,                              /* Apple calls this 'Top Center Surround' */
-       SF_CHANNEL_MAP_TOP_FRONT_LEFT,                  /* Apple calls this 'Vertical Height Left' */
-       SF_CHANNEL_MAP_TOP_FRONT_RIGHT,                 /* Apple calls this 'Vertical Height Right' */
-       SF_CHANNEL_MAP_TOP_FRONT_CENTER,                /* Apple calls this 'Vertical Height Center' */
-       SF_CHANNEL_MAP_TOP_REAR_LEFT,                   /* Apple and MS call this 'Top Back Left' */
-       SF_CHANNEL_MAP_TOP_REAR_RIGHT,                  /* Apple and MS call this 'Top Back Right' */
-       SF_CHANNEL_MAP_TOP_REAR_CENTER,                 /* Apple and MS call this 'Top Back Center' */
-
-       SF_CHANNEL_MAP_AMBISONIC_B_W,
-       SF_CHANNEL_MAP_AMBISONIC_B_X,
-       SF_CHANNEL_MAP_AMBISONIC_B_Y,
-       SF_CHANNEL_MAP_AMBISONIC_B_Z,
-
-       SF_CHANNEL_MAP_MAX
-} ;
-
-
-/* A SNDFILE* pointer can be passed around much like stdio.h's FILE* pointer. */
-
-typedef        struct SNDFILE_tag      SNDFILE ;
-
-/* The following typedef is system specific and is defined when libsndfile is
-** compiled. sf_count_t will be a 64 bit value when the underlying OS allows
-** 64 bit file offsets.
-** On windows, we need to allow the same header file to be compiler by both GCC
-** and the Microsoft compiler.
-*/
-
-#if (defined (_MSCVER) || defined (_MSC_VER))
-typedef __int64                sf_count_t ;
-#define SF_COUNT_MAX           0x7fffffffffffffffi64
-#else
-typedef @TYPEOF_SF_COUNT_T@    sf_count_t ;
-#define SF_COUNT_MAX           @SF_COUNT_MAX@
-#endif
-
-
-/* A pointer to a SF_INFO structure is passed to sf_open () and filled in.
-** On write, the SF_INFO structure is filled in by the user and passed into
-** sf_open ().
-*/
-
-struct SF_INFO
-{      sf_count_t      frames ;                /* Used to be called samples.  Changed to avoid confusion. */
-       int                     samplerate ;
-       int                     channels ;
-       int                     format ;
-       int                     sections ;
-       int                     seekable ;
-} ;
-
-typedef        struct SF_INFO SF_INFO ;
-
-/* The SF_FORMAT_INFO struct is used to retrieve information about the sound
-** file formats libsndfile supports using the sf_command () interface.
-**
-** Using this interface will allow applications to support new file formats
-** and encoding types when libsndfile is upgraded, without requiring
-** re-compilation of the application.
-**
-** Please consult the libsndfile documentation (particularly the information
-** on the sf_command () interface) for examples of its use.
-*/
-
-typedef struct
-{      int                     format ;
-       const char      *name ;
-       const char      *extension ;
-} SF_FORMAT_INFO ;
-
-/*
-** Enums and typedefs for adding dither on read and write.
-** See the html documentation for sf_command(), SFC_SET_DITHER_ON_WRITE
-** and SFC_SET_DITHER_ON_READ.
-*/
-
-enum
-{      SFD_DEFAULT_LEVEL       = 0,
-       SFD_CUSTOM_LEVEL        = 0x40000000,
-
-       SFD_NO_DITHER           = 500,
-       SFD_WHITE                       = 501,
-       SFD_TRIANGULAR_PDF      = 502
-} ;
-
-typedef struct
-{      int                     type ;
-       double          level ;
-       const char      *name ;
-} SF_DITHER_INFO ;
-
-/* Struct used to retrieve information about a file embedded within a
-** larger file. See SFC_GET_EMBED_FILE_INFO.
-*/
-
-typedef struct
-{      sf_count_t      offset ;
-       sf_count_t      length ;
-} SF_EMBED_FILE_INFO ;
-
-/*
-**     Structs used to retrieve music sample information from a file.
-*/
-
-enum
-{      /*
-       **      The loop mode field in SF_INSTRUMENT will be one of the following.
-       */
-       SF_LOOP_NONE = 800,
-       SF_LOOP_FORWARD,
-       SF_LOOP_BACKWARD,
-       SF_LOOP_ALTERNATING
-} ;
-
-typedef struct
-{      int gain ;
-       char basenote, detune ;
-       char velocity_lo, velocity_hi ;
-       char key_lo, key_hi ;
-       int loop_count ;
-
-       struct
-       {       int mode ;
-               uint32_t start ;
-               uint32_t end ;
-               uint32_t count ;
-       } loops [16] ; /* make variable in a sensible way */
-} SF_INSTRUMENT ;
-
-
-
-/* Struct used to retrieve loop information from a file.*/
-typedef struct
-{
-       short   time_sig_num ;  /* any positive integer    > 0  */
-       short   time_sig_den ;  /* any positive power of 2 > 0  */
-       int             loop_mode ;             /* see SF_LOOP enum             */
-
-       int             num_beats ;             /* this is NOT the amount of quarter notes !!!*/
-                                                       /* a full bar of 4/4 is 4 beats */
-                                                       /* a full bar of 7/8 is 7 beats */
-
-       float   bpm ;                   /* suggestion, as it can be calculated using other fields:*/
-                                                       /* file's length, file's sampleRate and our time_sig_den*/
-                                                       /* -> bpms are always the amount of _quarter notes_ per minute */
-
-       int     root_key ;                      /* MIDI note, or -1 for None */
-       int future [6] ;
-} SF_LOOP_INFO ;
-
-
-/*     Struct used to retrieve broadcast (EBU) information from a file.
-**     Strongly (!) based on EBU "bext" chunk format used in Broadcast WAVE.
-*/
-#define        SF_BROADCAST_INFO_VAR(coding_hist_size) \
-                       struct \
-                       {       char            description [256] ; \
-                               char            originator [32] ; \
-                               char            originator_reference [32] ; \
-                               char            origination_date [10] ; \
-                               char            origination_time [8] ; \
-                               uint32_t        time_reference_low ; \
-                               uint32_t        time_reference_high ; \
-                               short           version ; \
-                               char            umid [64] ; \
-                               char            reserved [190] ; \
-                               uint32_t        coding_history_size ; \
-                               char            coding_history [coding_hist_size] ; \
-                       }
-
-/* SF_BROADCAST_INFO is the above struct with coding_history field of 256 bytes. */
-typedef SF_BROADCAST_INFO_VAR (256) SF_BROADCAST_INFO ;
-
-struct SF_CART_TIMER
-{      char    usage[4] ;
-       int32_t value ;
-} ;
-
-typedef struct SF_CART_TIMER SF_CART_TIMER ;
-
-#define        SF_CART_INFO_VAR(p_tag_text_size) \
-                       struct \
-                       {       char            version [4] ; \
-                               char            title [64] ; \
-                               char            artist [64] ; \
-                               char            cut_id [64] ; \
-                               char            client_id [64] ; \
-                               char            category [64] ; \
-                               char            classification [64] ; \
-                               char            out_cue [64] ; \
-                               char            start_date [10] ; \
-                               char            start_time [8] ; \
-                               char            end_date [10] ; \
-                               char            end_time [8] ; \
-                               char            producer_app_id [64] ; \
-                               char            producer_app_version [64] ; \
-                               char            user_def [64] ; \
-                               int32_t         level_reference ; \
-                               SF_CART_TIMER   post_timers [8] ; \
-                               char            reserved [276] ; \
-                               char            url [1024] ; \
-                               uint32_t        tag_text_size ; \
-                               char            tag_text[p_tag_text_size] ; \
-                       }
-
-typedef SF_CART_INFO_VAR (256) SF_CART_INFO ;
-
-/*     Virtual I/O functionality. */
-
-typedef sf_count_t             (*sf_vio_get_filelen)   (void *user_data) ;
-typedef sf_count_t             (*sf_vio_seek)          (sf_count_t offset, int whence, void *user_data) ;
-typedef sf_count_t             (*sf_vio_read)          (void *ptr, sf_count_t count, void *user_data) ;
-typedef sf_count_t             (*sf_vio_write)         (const void *ptr, sf_count_t count, void *user_data) ;
-typedef sf_count_t             (*sf_vio_tell)          (void *user_data) ;
-
-struct SF_VIRTUAL_IO
-{      sf_vio_get_filelen      get_filelen ;
-       sf_vio_seek                     seek ;
-       sf_vio_read                     read ;
-       sf_vio_write            write ;
-       sf_vio_tell                     tell ;
-} ;
-
-typedef        struct SF_VIRTUAL_IO SF_VIRTUAL_IO ;
-
-
-/* Open the specified file for read, write or both. On error, this will
-** return a NULL pointer. To find the error number, pass a NULL SNDFILE
-** to sf_strerror ().
-** All calls to sf_open() should be matched with a call to sf_close().
-*/
-
-SNDFILE*       sf_open         (const char *path, int mode, SF_INFO *sfinfo) ;
-
-
-/* Use the existing file descriptor to create a SNDFILE object. If close_desc
-** is TRUE, the file descriptor will be closed when sf_close() is called. If
-** it is FALSE, the descriptor will not be closed.
-** When passed a descriptor like this, the library will assume that the start
-** of file header is at the current file offset. This allows sound files within
-** larger container files to be read and/or written.
-** On error, this will return a NULL pointer. To find the error number, pass a
-** NULL SNDFILE to sf_strerror ().
-** All calls to sf_open_fd() should be matched with a call to sf_close().
-
-*/
-
-SNDFILE*       sf_open_fd      (int fd, int mode, SF_INFO *sfinfo, int close_desc) ;
-
-SNDFILE*       sf_open_virtual (SF_VIRTUAL_IO *sfvirtual, int mode, SF_INFO *sfinfo, void *user_data) ;
-
-
-/* sf_error () returns a error number which can be translated to a text
-** string using sf_error_number().
-*/
-
-int            sf_error                (SNDFILE *sndfile) ;
-
-
-/* sf_strerror () returns to the caller a pointer to the current error message for
-** the given SNDFILE.
-*/
-
-const char* sf_strerror (SNDFILE *sndfile) ;
-
-
-/* sf_error_number () allows the retrieval of the error string for each internal
-** error number.
-**
-*/
-
-const char*    sf_error_number (int errnum) ;
-
-
-/* The following two error functions are deprecated but they will remain in the
-** library for the foreseeable future. The function sf_strerror() should be used
-** in their place.
-*/
-
-int            sf_perror               (SNDFILE *sndfile) ;
-int            sf_error_str    (SNDFILE *sndfile, char* str, size_t len) ;
-
-
-/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */
-
-int            sf_command      (SNDFILE *sndfile, int command, void *data, int datasize) ;
-
-
-/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */
-
-int            sf_format_check (const SF_INFO *info) ;
-
-
-/* Seek within the waveform data chunk of the SNDFILE. sf_seek () uses
-** the same values for whence (SEEK_SET, SEEK_CUR and SEEK_END) as
-** stdio.h function fseek ().
-** An offset of zero with whence set to SEEK_SET will position the
-** read / write pointer to the first data sample.
-** On success sf_seek returns the current position in (multi-channel)
-** samples from the start of the file.
-** Please see the libsndfile documentation for moving the read pointer
-** separately from the write pointer on files open in mode SFM_RDWR.
-** On error all of these functions return -1.
-*/
-
-enum
-{      SF_SEEK_SET = SEEK_SET,
-       SF_SEEK_CUR = SEEK_CUR,
-       SF_SEEK_END = SEEK_END
-} ;
-
-sf_count_t     sf_seek                 (SNDFILE *sndfile, sf_count_t frames, int whence) ;
-
-
-/* Functions for retrieving and setting string data within sound files.
-** Not all file types support this features; AIFF and WAV do. For both
-** functions, the str_type parameter must be one of the SF_STR_* values
-** defined above.
-** On error, sf_set_string() returns non-zero while sf_get_string()
-** returns NULL.
-*/
-
-int sf_set_string (SNDFILE *sndfile, int str_type, const char* str) ;
-
-const char* sf_get_string (SNDFILE *sndfile, int str_type) ;
-
-
-/* Return the library version string. */
-
-const char * sf_version_string (void) ;
-
-/* Return the current byterate at this point in the file. The byte rate in this
-** case is the number of bytes per second of audio data. For instance, for a
-** stereo, 18 bit PCM encoded file with an 16kHz sample rate, the byte rate
-** would be 2 (stereo) * 2 (two bytes per sample) * 16000 => 64000 bytes/sec.
-** For some file formats the returned value will be accurate and exact, for some
-** it will be a close approximation, for some it will be the average bitrate for
-** the whole file and for some it will be a time varying value that was accurate
-** when the file was most recently read or written.
-** To get the bitrate, multiple this value by 8.
-** Returns -1 for unknown.
-*/
-int sf_current_byterate (SNDFILE *sndfile) ;
-
-/* Functions for reading/writing the waveform data of a sound file.
-*/
-
-sf_count_t     sf_read_raw             (SNDFILE *sndfile, void *ptr, sf_count_t bytes) ;
-sf_count_t     sf_write_raw    (SNDFILE *sndfile, const void *ptr, sf_count_t bytes) ;
-
-
-/* Functions for reading and writing the data chunk in terms of frames.
-** The number of items actually read/written = frames * number of channels.
-**     sf_xxxx_raw             read/writes the raw data bytes from/to the file
-**     sf_xxxx_short   passes data in the native short format
-**     sf_xxxx_int             passes data in the native int format
-**     sf_xxxx_float   passes data in the native float format
-**     sf_xxxx_double  passes data in the native double format
-** All of these read/write function return number of frames read/written.
-*/
-
-sf_count_t     sf_readf_short  (SNDFILE *sndfile, short *ptr, sf_count_t frames) ;
-sf_count_t     sf_writef_short (SNDFILE *sndfile, const short *ptr, sf_count_t frames) ;
-
-sf_count_t     sf_readf_int    (SNDFILE *sndfile, int *ptr, sf_count_t frames) ;
-sf_count_t     sf_writef_int   (SNDFILE *sndfile, const int *ptr, sf_count_t frames) ;
-
-sf_count_t     sf_readf_float  (SNDFILE *sndfile, float *ptr, sf_count_t frames) ;
-sf_count_t     sf_writef_float (SNDFILE *sndfile, const float *ptr, sf_count_t frames) ;
-
-sf_count_t     sf_readf_double         (SNDFILE *sndfile, double *ptr, sf_count_t frames) ;
-sf_count_t     sf_writef_double        (SNDFILE *sndfile, const double *ptr, sf_count_t frames) ;
-
-
-/* Functions for reading and writing the data chunk in terms of items.
-** Otherwise similar to above.
-** All of these read/write function return number of items read/written.
-*/
-
-sf_count_t     sf_read_short   (SNDFILE *sndfile, short *ptr, sf_count_t items) ;
-sf_count_t     sf_write_short  (SNDFILE *sndfile, const short *ptr, sf_count_t items) ;
-
-sf_count_t     sf_read_int             (SNDFILE *sndfile, int *ptr, sf_count_t items) ;
-sf_count_t     sf_write_int    (SNDFILE *sndfile, const int *ptr, sf_count_t items) ;
-
-sf_count_t     sf_read_float   (SNDFILE *sndfile, float *ptr, sf_count_t items) ;
-sf_count_t     sf_write_float  (SNDFILE *sndfile, const float *ptr, sf_count_t items) ;
-
-sf_count_t     sf_read_double  (SNDFILE *sndfile, double *ptr, sf_count_t items) ;
-sf_count_t     sf_write_double (SNDFILE *sndfile, const double *ptr, sf_count_t items) ;
-
-
-/* Close the SNDFILE and clean up all memory allocations associated with this
-** file.
-** Returns 0 on success, or an error number.
-*/
-
-int            sf_close                (SNDFILE *sndfile) ;
-
-
-/* If the file is opened SFM_WRITE or SFM_RDWR, call fsync() on the file
-** to force the writing of data to disk. If the file is opened SFM_READ
-** no action is taken.
-*/
-
-void   sf_write_sync   (SNDFILE *sndfile) ;
-
-
-
-/* The function sf_wchar_open() is Windows Only!
-** Open a file passing in a Windows Unicode filename. Otherwise, this is
-** the same as sf_open().
-**
-** In order for this to work, you need to do the following:
-**
-**             #include <windows.h>
-**             #define ENABLE_SNDFILE_WINDOWS_PROTOTYPES 1
-**             #including <sndfile.h>
-*/
-
-#if (defined (ENABLE_SNDFILE_WINDOWS_PROTOTYPES) && ENABLE_SNDFILE_WINDOWS_PROTOTYPES)
-SNDFILE* sf_wchar_open (LPCWSTR wpath, int mode, SF_INFO *sfinfo) ;
-#endif
-
-
-
-
-/* Getting and setting of chunks from within a sound file.
-**
-** These functions allow the getting and setting of chunks within a sound file
-** (for those formats which allow it).
-**
-** These functions fail safely. Specifically, they will not allow you to overwrite
-** existing chunks or add extra versions of format specific reserved chunks but
-** should allow you to retrieve any and all chunks (may not be implemented for
-** all chunks or all file formats).
-*/
-
-struct SF_CHUNK_INFO
-{      char            id [64] ;       /* The chunk identifier. */
-       unsigned        id_size ;       /* The size of the chunk identifier. */
-       unsigned        datalen ;       /* The size of that data. */
-       void            *data ;         /* Pointer to the data. */
-} ;
-
-typedef struct SF_CHUNK_INFO SF_CHUNK_INFO ;
-
-/* Set the specified chunk info (must be done before any audio data is written
-** to the file). This will fail for format specific reserved chunks.
-** The chunk_info->data pointer must be valid until the file is closed.
-** Returns SF_ERR_NO_ERROR on success or non-zero on failure.
-*/
-int sf_set_chunk (SNDFILE * sndfile, const SF_CHUNK_INFO * chunk_info) ;
-
-/*
-** An opaque structure to an iterator over the all chunks of a given id
-*/
-typedef        struct SF_CHUNK_ITERATOR SF_CHUNK_ITERATOR ;
-
-/* Get an iterator for all chunks matching chunk_info.
-** The iterator will point to the first chunk matching chunk_info.
-** Chunks are matching, if (chunk_info->id) matches the first
-**     (chunk_info->id_size) bytes of a chunk found in the SNDFILE* handle.
-** If chunk_info is NULL, an iterator to all chunks in the SNDFILE* handle
-**     is returned.
-** The values of chunk_info->datalen and chunk_info->data are ignored.
-** If no matching chunks are found in the sndfile, NULL is returned.
-** The returned iterator will stay valid until one of the following occurs:
-**     a) The sndfile is closed.
-**     b) A new chunk is added using sf_set_chunk().
-**     c) Another chunk iterator function is called on the same SNDFILE* handle
-**        that causes the iterator to be modified.
-** The memory for the iterator belongs to the SNDFILE* handle and is freed when
-** sf_close() is called.
-*/
-SF_CHUNK_ITERATOR *
-sf_get_chunk_iterator (SNDFILE * sndfile, const SF_CHUNK_INFO * chunk_info) ;
-
-/* Iterate through chunks by incrementing the iterator.
-** Increments the iterator and returns a handle to the new one.
-** After this call, iterator will no longer be valid, and you must use the
-**      newly returned handle from now on.
-** The returned handle can be used to access the next chunk matching
-**      the criteria as defined in sf_get_chunk_iterator().
-** If iterator points to the last chunk, this will free all resources
-**      associated with iterator and return NULL.
-** The returned iterator will stay valid until sf_get_chunk_iterator_next
-**      is called again, the sndfile is closed or a new chunk us added.
-*/
-SF_CHUNK_ITERATOR *
-sf_next_chunk_iterator (SF_CHUNK_ITERATOR * iterator) ;
-
-
-/* Get the size of the specified chunk.
-** If the specified chunk exists, the size will be returned in the
-**      datalen field of the SF_CHUNK_INFO struct.
-**      Additionally, the id of the chunk will be copied to the id
-**      field of the SF_CHUNK_INFO struct and it's id_size field will
-**      be updated accordingly.
-** If the chunk doesn't exist chunk_info->datalen will be zero, and the
-**      id and id_size fields will be undefined.
-** The function will return SF_ERR_NO_ERROR on success or non-zero on
-** failure.
-*/
-int
-sf_get_chunk_size (const SF_CHUNK_ITERATOR * it, SF_CHUNK_INFO * chunk_info) ;
-
-/* Get the specified chunk data.
-** If the specified chunk exists, up to chunk_info->datalen bytes of
-**      the chunk data will be copied into the chunk_info->data buffer
-**      (allocated by the caller) and the chunk_info->datalen field
-**      updated to reflect the size of the data. The id and id_size
-**      field will be updated according to the retrieved chunk
-** If the chunk doesn't exist chunk_info->datalen will be zero, and the
-**      id and id_size fields will be undefined.
-** The function will return SF_ERR_NO_ERROR on success or non-zero on
-** failure.
-*/
-int
-sf_get_chunk_data (const SF_CHUNK_ITERATOR * it, SF_CHUNK_INFO * chunk_info) ;
-
-
-#ifdef __cplusplus
-}              /* extern "C" */
-#endif /* __cplusplus */
-
-#endif /* SNDFILE_H */
-
diff --git a/libs/libsndfile/src/sndfile.hh b/libs/libsndfile/src/sndfile.hh
deleted file mode 100644 (file)
index 0a0c62d..0000000
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
-** Copyright (C) 2005-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** All rights reserved.
-**
-** Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-**
-**     * Redistributions of source code must retain the above copyright
-**       notice, this list of conditions and the following disclaimer.
-**     * Redistributions in binary form must reproduce the above copyright
-**       notice, this list of conditions and the following disclaimer in
-**       the documentation and/or other materials provided with the
-**       distribution.
-**     * Neither the author nor the names of any contributors may be used
-**       to endorse or promote products derived from this software without
-**       specific prior written permission.
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-** TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-** OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-** OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-** ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*
-** The above modified BSD style license (GPL and LGPL compatible) applies to
-** this file. It does not apply to libsndfile itself which is released under
-** the GNU LGPL or the libsndfile test suite which is released under the GNU
-** GPL.
-** This means that this header file can be used under this modified BSD style
-** license, but the LGPL still holds for the libsndfile library itself.
-*/
-
-/*
-** sndfile.hh -- A lightweight C++ wrapper for the libsndfile API.
-**
-** All the methods are inlines and all functionality is contained in this
-** file. There is no separate implementation file.
-**
-** API documentation is in the doc/ directory of the source code tarball
-** and at http://www.mega-nerd.com/libsndfile/api.html.
-*/
-
-#ifndef SNDFILE_HH
-#define SNDFILE_HH
-
-#include <sndfile.h>
-
-#include <string>
-#include <new> // for std::nothrow
-
-class SndfileHandle
-{      private :
-               struct SNDFILE_ref
-               {       SNDFILE_ref (void) ;
-                       ~SNDFILE_ref (void) ;
-
-                       SNDFILE *sf ;
-                       SF_INFO sfinfo ;
-                       int ref ;
-                       } ;
-
-               SNDFILE_ref *p ;
-
-       public :
-                       /* Default constructor */
-                       SndfileHandle (void) : p (NULL) {} ;
-                       SndfileHandle (const char *path, int mode = SFM_READ,
-                                                       int format = 0, int channels = 0, int samplerate = 0) ;
-                       SndfileHandle (std::string const & path, int mode = SFM_READ,
-                                                       int format = 0, int channels = 0, int samplerate = 0) ;
-                       SndfileHandle (int fd, bool close_desc, int mode = SFM_READ,
-                                                       int format = 0, int channels = 0, int samplerate = 0) ;
-                       SndfileHandle (SF_VIRTUAL_IO &sfvirtual, void *user_data, int mode = SFM_READ,
-                                                       int format = 0, int channels = 0, int samplerate = 0) ;
-
-#ifdef ENABLE_SNDFILE_WINDOWS_PROTOTYPES
-                       SndfileHandle (LPCWSTR wpath, int mode = SFM_READ,
-                                                       int format = 0, int channels = 0, int samplerate = 0) ;
-#endif
-
-                       ~SndfileHandle (void) ;
-
-                       SndfileHandle (const SndfileHandle &orig) ;
-                       SndfileHandle & operator = (const SndfileHandle &rhs) ;
-
-               /* Mainly for debugging/testing. */
-               int refCount (void) const { return (p == NULL) ? 0 : p->ref ; }
-
-               operator bool () const { return (p != NULL) ; }
-
-               bool operator == (const SndfileHandle &rhs) const { return (p == rhs.p) ; }
-
-               sf_count_t      frames (void) const             { return p ? p->sfinfo.frames : 0 ; }
-               int                     format (void) const             { return p ? p->sfinfo.format : 0 ; }
-               int                     channels (void) const   { return p ? p->sfinfo.channels : 0 ; }
-               int                     samplerate (void) const { return p ? p->sfinfo.samplerate : 0 ; }
-
-               int error (void) const ;
-               const char * strError (void) const ;
-
-               int command (int cmd, void *data, int datasize) ;
-
-               sf_count_t      seek (sf_count_t frames, int whence) ;
-
-               void writeSync (void) ;
-
-               int setString (int str_type, const char* str) ;
-
-               const char* getString (int str_type) const ;
-
-               static int formatCheck (int format, int channels, int samplerate) ;
-
-               sf_count_t read (short *ptr, sf_count_t items) ;
-               sf_count_t read (int *ptr, sf_count_t items) ;
-               sf_count_t read (float *ptr, sf_count_t items) ;
-               sf_count_t read (double *ptr, sf_count_t items) ;
-
-               sf_count_t write (const short *ptr, sf_count_t items) ;
-               sf_count_t write (const int *ptr, sf_count_t items) ;
-               sf_count_t write (const float *ptr, sf_count_t items) ;
-               sf_count_t write (const double *ptr, sf_count_t items) ;
-
-               sf_count_t readf (short *ptr, sf_count_t frames) ;
-               sf_count_t readf (int *ptr, sf_count_t frames) ;
-               sf_count_t readf (float *ptr, sf_count_t frames) ;
-               sf_count_t readf (double *ptr, sf_count_t frames) ;
-
-               sf_count_t writef (const short *ptr, sf_count_t frames) ;
-               sf_count_t writef (const int *ptr, sf_count_t frames) ;
-               sf_count_t writef (const float *ptr, sf_count_t frames) ;
-               sf_count_t writef (const double *ptr, sf_count_t frames) ;
-
-               sf_count_t      readRaw         (void *ptr, sf_count_t bytes) ;
-               sf_count_t      writeRaw        (const void *ptr, sf_count_t bytes) ;
-
-               /**< Raw access to the handle. SndfileHandle keeps ownership. */
-               SNDFILE * rawHandle (void) ;
-
-               /**< Take ownership of handle, if reference count is 1. */
-               SNDFILE * takeOwnership (void) ;
-} ;
-
-/*==============================================================================
-**     Nothing but implementation below.
-*/
-
-inline
-SndfileHandle::SNDFILE_ref::SNDFILE_ref (void)
-: ref (1)
-{}
-
-inline
-SndfileHandle::SNDFILE_ref::~SNDFILE_ref (void)
-{      if (sf != NULL) sf_close (sf) ; }
-
-inline
-SndfileHandle::SndfileHandle (const char *path, int mode, int fmt, int chans, int srate)
-: p (NULL)
-{
-       p = new (std::nothrow) SNDFILE_ref () ;
-
-       if (p != NULL)
-       {       p->ref = 1 ;
-
-               p->sfinfo.frames = 0 ;
-               p->sfinfo.channels = chans ;
-               p->sfinfo.format = fmt ;
-               p->sfinfo.samplerate = srate ;
-               p->sfinfo.sections = 0 ;
-               p->sfinfo.seekable = 0 ;
-
-               p->sf = sf_open (path, mode, &p->sfinfo) ;
-               } ;
-
-       return ;
-} /* SndfileHandle const char * constructor */
-
-inline
-SndfileHandle::SndfileHandle (std::string const & path, int mode, int fmt, int chans, int srate)
-: p (NULL)
-{
-       p = new (std::nothrow) SNDFILE_ref () ;
-
-       if (p != NULL)
-       {       p->ref = 1 ;
-
-               p->sfinfo.frames = 0 ;
-               p->sfinfo.channels = chans ;
-               p->sfinfo.format = fmt ;
-               p->sfinfo.samplerate = srate ;
-               p->sfinfo.sections = 0 ;
-               p->sfinfo.seekable = 0 ;
-
-               p->sf = sf_open (path.c_str (), mode, &p->sfinfo) ;
-               } ;
-
-       return ;
-} /* SndfileHandle std::string constructor */
-
-inline
-SndfileHandle::SndfileHandle (int fd, bool close_desc, int mode, int fmt, int chans, int srate)
-: p (NULL)
-{
-       if (fd < 0)
-               return ;
-
-       p = new (std::nothrow) SNDFILE_ref () ;
-
-       if (p != NULL)
-       {       p->ref = 1 ;
-
-               p->sfinfo.frames = 0 ;
-               p->sfinfo.channels = chans ;
-               p->sfinfo.format = fmt ;
-               p->sfinfo.samplerate = srate ;
-               p->sfinfo.sections = 0 ;
-               p->sfinfo.seekable = 0 ;
-
-               p->sf = sf_open_fd (fd, mode, &p->sfinfo, close_desc) ;
-               } ;
-
-       return ;
-} /* SndfileHandle fd constructor */
-
-inline
-SndfileHandle::SndfileHandle (SF_VIRTUAL_IO &sfvirtual, void *user_data, int mode, int fmt, int chans, int srate)
-: p (NULL)
-{
-       p = new (std::nothrow) SNDFILE_ref () ;
-
-       if (p != NULL)
-       {       p->ref = 1 ;
-
-               p->sfinfo.frames = 0 ;
-               p->sfinfo.channels = chans ;
-               p->sfinfo.format = fmt ;
-               p->sfinfo.samplerate = srate ;
-               p->sfinfo.sections = 0 ;
-               p->sfinfo.seekable = 0 ;
-
-               p->sf = sf_open_virtual (&sfvirtual, mode, &p->sfinfo, user_data) ;
-               } ;
-
-       return ;
-} /* SndfileHandle std::string constructor */
-
-inline
-SndfileHandle::~SndfileHandle (void)
-{      if (p != NULL && --p->ref == 0)
-               delete p ;
-} /* SndfileHandle destructor */
-
-
-inline
-SndfileHandle::SndfileHandle (const SndfileHandle &orig)
-: p (orig.p)
-{      if (p != NULL)
-               ++p->ref ;
-} /* SndfileHandle copy constructor */
-
-inline SndfileHandle &
-SndfileHandle::operator = (const SndfileHandle &rhs)
-{
-       if (&rhs == this)
-               return *this ;
-       if (p != NULL && --p->ref == 0)
-               delete p ;
-
-       p = rhs.p ;
-       if (p != NULL)
-               ++p->ref ;
-
-       return *this ;
-} /* SndfileHandle assignment operator */
-
-inline int
-SndfileHandle::error (void) const
-{      return sf_error (p->sf) ; }
-
-inline const char *
-SndfileHandle::strError (void) const
-{      return sf_strerror (p->sf) ; }
-
-inline int
-SndfileHandle::command (int cmd, void *data, int datasize)
-{      return sf_command (p->sf, cmd, data, datasize) ; }
-
-inline sf_count_t
-SndfileHandle::seek (sf_count_t frame_count, int whence)
-{      return sf_seek (p->sf, frame_count, whence) ; }
-
-inline void
-SndfileHandle::writeSync (void)
-{      sf_write_sync (p->sf) ; }
-
-inline int
-SndfileHandle::setString (int str_type, const char* str)
-{      return sf_set_string (p->sf, str_type, str) ; }
-
-inline const char*
-SndfileHandle::getString (int str_type) const
-{      return sf_get_string (p->sf, str_type) ; }
-
-inline int
-SndfileHandle::formatCheck (int fmt, int chans, int srate)
-{
-       SF_INFO sfinfo ;
-
-       sfinfo.frames = 0 ;
-       sfinfo.channels = chans ;
-       sfinfo.format = fmt ;
-       sfinfo.samplerate = srate ;
-       sfinfo.sections = 0 ;
-       sfinfo.seekable = 0 ;
-
-       return sf_format_check (&sfinfo) ;
-}
-
-/*---------------------------------------------------------------------*/
-
-inline sf_count_t
-SndfileHandle::read (short *ptr, sf_count_t items)
-{      return sf_read_short (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::read (int *ptr, sf_count_t items)
-{      return sf_read_int (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::read (float *ptr, sf_count_t items)
-{      return sf_read_float (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::read (double *ptr, sf_count_t items)
-{      return sf_read_double (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::write (const short *ptr, sf_count_t items)
-{      return sf_write_short (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::write (const int *ptr, sf_count_t items)
-{      return sf_write_int (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::write (const float *ptr, sf_count_t items)
-{      return sf_write_float (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::write (const double *ptr, sf_count_t items)
-{      return sf_write_double (p->sf, ptr, items) ; }
-
-inline sf_count_t
-SndfileHandle::readf (short *ptr, sf_count_t frame_count)
-{      return sf_readf_short (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::readf (int *ptr, sf_count_t frame_count)
-{      return sf_readf_int (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::readf (float *ptr, sf_count_t frame_count)
-{      return sf_readf_float (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::readf (double *ptr, sf_count_t frame_count)
-{      return sf_readf_double (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::writef (const short *ptr, sf_count_t frame_count)
-{      return sf_writef_short (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::writef (const int *ptr, sf_count_t frame_count)
-{      return sf_writef_int (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::writef (const float *ptr, sf_count_t frame_count)
-{      return sf_writef_float (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::writef (const double *ptr, sf_count_t frame_count)
-{      return sf_writef_double (p->sf, ptr, frame_count) ; }
-
-inline sf_count_t
-SndfileHandle::readRaw (void *ptr, sf_count_t bytes)
-{      return sf_read_raw (p->sf, ptr, bytes) ; }
-
-inline sf_count_t
-SndfileHandle::writeRaw (const void *ptr, sf_count_t bytes)
-{      return sf_write_raw (p->sf, ptr, bytes) ; }
-
-inline SNDFILE *
-SndfileHandle::rawHandle (void)
-{      return (p ? p->sf : NULL) ; }
-
-inline SNDFILE *
-SndfileHandle::takeOwnership (void)
-{
-       if (p == NULL || (p->ref != 1))
-               return NULL ;
-
-       SNDFILE * sf = p->sf ;
-       p->sf = NULL ;
-       delete p ;
-       p = NULL ;
-       return sf ;
-}
-
-#ifdef ENABLE_SNDFILE_WINDOWS_PROTOTYPES
-
-inline
-SndfileHandle::SndfileHandle (LPCWSTR wpath, int mode, int fmt, int chans, int srate)
-: p (NULL)
-{
-       p = new (std::nothrow) SNDFILE_ref () ;
-
-       if (p != NULL)
-       {       p->ref = 1 ;
-
-               p->sfinfo.frames = 0 ;
-               p->sfinfo.channels = chans ;
-               p->sfinfo.format = fmt ;
-               p->sfinfo.samplerate = srate ;
-               p->sfinfo.sections = 0 ;
-               p->sfinfo.seekable = 0 ;
-
-               p->sf = sf_wchar_open (wpath, mode, &p->sfinfo) ;
-               } ;
-
-       return ;
-} /* SndfileHandle const wchar_t * constructor */
-
-#endif
-
-#endif /* SNDFILE_HH */
-
diff --git a/libs/libsndfile/src/strings.c b/libs/libsndfile/src/strings.c
deleted file mode 100644 (file)
index c587e9b..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
-** Copyright (C) 2001-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <string.h>
-#include       <math.h>
-
-#include       "sndfile.h"
-#include       "common.h"
-
-#define STRINGS_DEBUG 0
-#if STRINGS_DEBUG
-static void hexdump (void *data, int len) ;
-#endif
-
-int
-psf_store_string (SF_PRIVATE *psf, int str_type, const char *str)
-{      char    new_str [128] ;
-       size_t  str_len ;
-       int             k, str_flags ;
-
-       if (str == NULL)
-               return SFE_STR_BAD_STRING ;
-
-       str_len = strlen (str) ;
-
-       /* A few extra checks for write mode. */
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       if ((psf->strings.flags & SF_STR_ALLOW_START) == 0)
-                       return SFE_STR_NO_SUPPORT ;
-               if (psf->have_written && (psf->strings.flags & SF_STR_ALLOW_END) == 0)
-                       return SFE_STR_NO_SUPPORT ;
-               /* Only allow zero length strings for software. */
-               if (str_type != SF_STR_SOFTWARE && str_len == 0)
-                       return SFE_STR_BAD_STRING ;
-               } ;
-
-       /* Find the next free slot in table. */
-       for (k = 0 ; k < SF_MAX_STRINGS ; k++)
-       {       /* If we find a matching entry clear it. */
-               if (psf->strings.data [k].type == str_type)
-                       psf->strings.data [k].type = -1 ;
-
-               if (psf->strings.data [k].type == 0)
-                       break ;
-               } ;
-
-       /* Determine flags */
-       str_flags = SF_STR_LOCATE_START ;
-       if (psf->file.mode == SFM_RDWR || psf->have_written)
-       {       if ((psf->strings.flags & SF_STR_ALLOW_END) == 0)
-                       return SFE_STR_NO_ADD_END ;
-               str_flags = SF_STR_LOCATE_END ;
-               } ;
-
-       /* More sanity checking. */
-       if (k >= SF_MAX_STRINGS)
-               return SFE_STR_MAX_COUNT ;
-
-       if (k == 0 && psf->strings.storage_used != 0)
-       {       psf_log_printf (psf, "SFE_STR_WEIRD : k == 0 && psf->strings.storage_used != 0\n") ;
-               return SFE_STR_WEIRD ;
-               } ;
-
-       if (k != 0 && psf->strings.storage_used == 0)
-       {       psf_log_printf (psf, "SFE_STR_WEIRD : k != 0 && psf->strings.storage_used == 0\n") ;
-               return SFE_STR_WEIRD ;
-               } ;
-
-       /* Special case for the first string. */
-       if (k == 0)
-               psf->strings.storage_used = 0 ;
-
-       switch (str_type)
-       {       case SF_STR_SOFTWARE :
-                               /* In write mode, want to append libsndfile-version to string. */
-                               if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-                               {       if (strstr (str, PACKAGE) == NULL)
-                                       {       /*
-                                               ** If the supplied string does not already contain a
-                                               ** libsndfile-X.Y.Z component, then add it.
-                                               */
-                                               if (strlen (str) == 0)
-                                                       snprintf (new_str, sizeof (new_str), "%s-%s", PACKAGE, VERSION) ;
-                                               else
-                                                       snprintf (new_str, sizeof (new_str), "%s (%s-%s)", str, PACKAGE, VERSION) ;
-                                               }
-                                       else
-                                               snprintf (new_str, sizeof (new_str), "%s", str) ;
-
-                                       str = new_str ;
-                                       } ;
-                               break ;
-
-               case SF_STR_TITLE :
-               case SF_STR_COPYRIGHT :
-               case SF_STR_ARTIST :
-               case SF_STR_COMMENT :
-               case SF_STR_DATE :
-               case SF_STR_ALBUM :
-               case SF_STR_LICENSE :
-               case SF_STR_TRACKNUMBER :
-               case SF_STR_GENRE :
-                               break ;
-
-               default :
-                       psf_log_printf (psf, "%s : SFE_STR_BAD_TYPE\n", __func__) ;
-                       return SFE_STR_BAD_TYPE ;
-               } ;
-
-       /* Plus one to catch string terminator. */
-       str_len = strlen (str) + 1 ;
-
-       if (psf->strings.storage_used + str_len + 1 > psf->strings.storage_len)
-       {       char * temp = psf->strings.storage ;
-               size_t newlen = 2 * psf->strings.storage_len + str_len + 1 ;
-
-               newlen = newlen < 256 ? 256 : newlen ;
-
-               if ((psf->strings.storage = realloc (temp, newlen)) == NULL)
-               {       psf->strings.storage = temp ;
-                       return SFE_MALLOC_FAILED ;
-                       } ;
-
-               psf->strings.storage_len = newlen ;
-               } ;
-
-       psf->strings.data [k].type = str_type ;
-       psf->strings.data [k].offset = psf->strings.storage_used ;
-       psf->strings.data [k].flags = str_flags ;
-
-       memcpy (psf->strings.storage + psf->strings.storage_used, str, str_len) ;
-       psf->strings.storage_used += str_len ;
-
-       psf->strings.flags |= str_flags ;
-
-#if STRINGS_DEBUG
-       psf_log_printf (psf, "str_storage          : %p\n", psf->strings.storage) ;
-       psf_log_printf (psf, "storage_used             : %u\n", psf->strings.storage_used) ;
-       psf_log_printf (psf, "used                 : %d\n", psf->strings.storage_used) ;
-       psf_log_printf (psf, "remaining            : %d\n", psf->strings.storage_len - psf->strings.storage_used ;
-
-       hexdump (psf->strings.storage, 300) ;
-#endif
-
-       return 0 ;
-} /* psf_store_string */
-
-int
-psf_set_string (SF_PRIVATE *psf, int str_type, const char *str)
-{      if (psf->file.mode == SFM_READ)
-               return SFE_STR_NOT_WRITE ;
-
-       return psf_store_string (psf, str_type, str) ;
-} /* psf_set_string */
-
-const char*
-psf_get_string (SF_PRIVATE *psf, int str_type)
-{      int k ;
-
-       for (k = 0 ; k < SF_MAX_STRINGS ; k++)
-               if (str_type == psf->strings.data [k].type)
-                       return psf->strings.storage + psf->strings.data [k].offset ;
-
-       return NULL ;
-} /* psf_get_string */
-
-int
-psf_location_string_count (const SF_PRIVATE * psf, int location)
-{      int k, count = 0 ;
-
-       for (k = 0 ; k < SF_MAX_STRINGS ; k++)
-               if (psf->strings.data [k].type > 0 && psf->strings.data [k].flags & location)
-                       count ++ ;
-
-       return count ;
-} /* psf_location_string_count */
-
-/*==============================================================================
-*/
-
-#if STRINGS_DEBUG
-
-#include <ctype.h>
-static void
-hexdump (void *data, int len)
-{      unsigned char *ptr ;
-       int k ;
-
-       ptr = data ;
-
-       puts ("---------------------------------------------------------") ;
-       while (len >= 16)
-       {       for (k = 0 ; k < 16 ; k++)
-                       printf ("%02X ", ptr [k] & 0xFF) ;
-               printf ("   ") ;
-               for (k = 0 ; k < 16 ; k++)
-                       printf ("%c", psf_isprint (ptr [k]) ? ptr [k] : '.') ;
-               puts ("") ;
-               ptr += 16 ;
-               len -= 16 ;
-               } ;
-} /* hexdump */
-
-#endif
diff --git a/libs/libsndfile/src/svx.c b/libs/libsndfile/src/svx.c
deleted file mode 100644 (file)
index b611f76..0000000
+++ /dev/null
@@ -1,416 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdarg.h>
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-
-/*------------------------------------------------------------------------------
- * Macros to handle big/little endian issues.
-*/
-
-#define FORM_MARKER    (MAKE_MARKER ('F', 'O', 'R', 'M'))
-#define SVX8_MARKER    (MAKE_MARKER ('8', 'S', 'V', 'X'))
-#define SV16_MARKER    (MAKE_MARKER ('1', '6', 'S', 'V'))
-#define VHDR_MARKER    (MAKE_MARKER ('V', 'H', 'D', 'R'))
-#define BODY_MARKER    (MAKE_MARKER ('B', 'O', 'D', 'Y'))
-
-#define ATAK_MARKER    (MAKE_MARKER ('A', 'T', 'A', 'K'))
-#define RLSE_MARKER    (MAKE_MARKER ('R', 'L', 'S', 'E'))
-
-#define c_MARKER       (MAKE_MARKER ('(', 'c', ')', ' '))
-#define NAME_MARKER    (MAKE_MARKER ('N', 'A', 'M', 'E'))
-#define AUTH_MARKER    (MAKE_MARKER ('A', 'U', 'T', 'H'))
-#define ANNO_MARKER    (MAKE_MARKER ('A', 'N', 'N', 'O'))
-#define CHAN_MARKER    (MAKE_MARKER ('C', 'H', 'A', 'N'))
-
-/*------------------------------------------------------------------------------
- * Typedefs for file chunks.
-*/
-
-typedef struct
-{      unsigned int    oneShotHiSamples, repeatHiSamples, samplesPerHiCycle ;
-       unsigned short  samplesPerSec ;
-       unsigned char   octave, compression ;
-       unsigned int    volume ;
-} VHDR_CHUNK ;
-
-enum {
-       HAVE_FORM       = 0x01,
-
-       HAVE_SVX        = 0x02,
-       HAVE_VHDR       = 0x04,
-       HAVE_BODY       = 0x08
-} ;
-
-/*------------------------------------------------------------------------------
- * Private static functions.
-*/
-
-static int     svx_close       (SF_PRIVATE *psf) ;
-static int     svx_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int     svx_read_header (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-svx_open       (SF_PRIVATE *psf)
-{      int error ;
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-       {       if ((error = svx_read_header (psf)))
-                       return error ;
-
-               psf->endian = SF_ENDIAN_BIG ;                   /* All SVX files are big endian. */
-
-               psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-               if (psf->blockwidth)
-                       psf->sf.frames = psf->datalength / psf->blockwidth ;
-
-               psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-               } ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       if (psf->is_pipe)
-                       return SFE_NO_PIPE_WRITE ;
-
-               if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_SVX)
-                       return  SFE_BAD_OPEN_FORMAT ;
-
-               psf->endian = SF_ENDIAN (psf->sf.format) ;
-
-               if (psf->endian == SF_ENDIAN_LITTLE || (CPU_IS_LITTLE_ENDIAN && psf->endian == SF_ENDIAN_CPU))
-                       return SFE_BAD_ENDIAN ;
-
-               psf->endian = SF_ENDIAN_BIG ;                   /* All SVX files are big endian. */
-
-               error = svx_write_header (psf, SF_FALSE) ;
-               if (error)
-                       return error ;
-
-               psf->write_header = svx_write_header ;
-               } ;
-
-       psf->container_close = svx_close ;
-
-       if ((error = pcm_init (psf)))
-               return error ;
-
-       return 0 ;
-} /* svx_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-svx_read_header        (SF_PRIVATE *psf)
-{      VHDR_CHUNK              vhdr ;
-       unsigned int    FORMsize, vhdrsize, dword, marker ;
-       int                             filetype = 0, parsestage = 0, done = 0 ;
-       int                     bytecount = 0, channels ;
-
-       if (psf->filelength > SF_PLATFORM_S64 (0xffffffff))
-               psf_log_printf (psf, "Warning : filelength > 0xffffffff. This is bad!!!!\n") ;
-
-       memset (&vhdr, 0, sizeof (vhdr)) ;
-       psf_binheader_readf (psf, "p", 0) ;
-
-       /* Set default number of channels. Modify later if necessary */
-       psf->sf.channels = 1 ;
-
-       psf->sf.format = SF_FORMAT_SVX ;
-
-       while (! done)
-       {       psf_binheader_readf (psf, "m", &marker) ;
-               switch (marker)
-               {       case FORM_MARKER :
-                                       if (parsestage)
-                                               return SFE_SVX_NO_FORM ;
-
-                                       psf_binheader_readf (psf, "E4", &FORMsize) ;
-
-                                       if (FORMsize != psf->filelength - 2 * sizeof (dword))
-                                       {       dword = psf->filelength - 2 * sizeof (dword) ;
-                                               psf_log_printf (psf, "FORM : %d (should be %d)\n", FORMsize, dword) ;
-                                               FORMsize = dword ;
-                                               }
-                                       else
-                                               psf_log_printf (psf, "FORM : %d\n", FORMsize) ;
-                                       parsestage |= HAVE_FORM ;
-                                       break ;
-
-                       case SVX8_MARKER :
-                       case SV16_MARKER :
-                                       if (! (parsestage & HAVE_FORM))
-                                               return SFE_SVX_NO_FORM ;
-                                       filetype = marker ;
-                                       psf_log_printf (psf, " %M\n", marker) ;
-                                       parsestage |= HAVE_SVX ;
-                                       break ;
-
-                       case VHDR_MARKER :
-                                       if (! (parsestage & (HAVE_FORM | HAVE_SVX)))
-                                               return SFE_SVX_NO_FORM ;
-
-                                       psf_binheader_readf (psf, "E4", &vhdrsize) ;
-
-                                       psf_log_printf (psf, " VHDR : %d\n", vhdrsize) ;
-
-                                       psf_binheader_readf (psf, "E4442114", &(vhdr.oneShotHiSamples), &(vhdr.repeatHiSamples),
-                                               &(vhdr.samplesPerHiCycle), &(vhdr.samplesPerSec), &(vhdr.octave), &(vhdr.compression),
-                                               &(vhdr.volume)) ;
-
-                                       psf_log_printf (psf, "  OneShotHiSamples  : %d\n", vhdr.oneShotHiSamples) ;
-                                       psf_log_printf (psf, "  RepeatHiSamples   : %d\n", vhdr.repeatHiSamples) ;
-                                       psf_log_printf (psf, "  samplesPerHiCycle : %d\n", vhdr.samplesPerHiCycle) ;
-                                       psf_log_printf (psf, "  Sample Rate       : %d\n", vhdr.samplesPerSec) ;
-                                       psf_log_printf (psf, "  Octave            : %d\n", vhdr.octave) ;
-
-                                       psf_log_printf (psf, "  Compression       : %d => ", vhdr.compression) ;
-
-                                       switch (vhdr.compression)
-                                       {       case 0 : psf_log_printf (psf, "None.\n") ;
-                                                               break ;
-                                               case 1 : psf_log_printf (psf, "Fibonacci delta\n") ;
-                                                               break ;
-                                               case 2 : psf_log_printf (psf, "Exponential delta\n") ;
-                                                               break ;
-                                               } ;
-
-                                       psf_log_printf (psf, "  Volume            : %d\n", vhdr.volume) ;
-
-                                       psf->sf.samplerate      = vhdr.samplesPerSec ;
-
-                                       if (filetype == SVX8_MARKER)
-                                       {       psf->sf.format |= SF_FORMAT_PCM_S8 ;
-                                               psf->bytewidth = 1 ;
-                                               }
-                                       else if (filetype == SV16_MARKER)
-                                       {       psf->sf.format |= SF_FORMAT_PCM_16 ;
-                                               psf->bytewidth = 2 ;
-                                               } ;
-
-                                       parsestage |= HAVE_VHDR ;
-                                       break ;
-
-                       case BODY_MARKER :
-                                       if (! (parsestage & HAVE_VHDR))
-                                               return SFE_SVX_NO_BODY ;
-
-                                       psf_binheader_readf (psf, "E4", &dword) ;
-                                       psf->datalength = dword ;
-
-                                       psf->dataoffset = psf_ftell (psf) ;
-                                       if (psf->dataoffset < 0)
-                                               return SFE_SVX_NO_BODY ;
-
-                                       if (psf->datalength > psf->filelength - psf->dataoffset)
-                                       {       psf_log_printf (psf, " BODY : %D (should be %D)\n", psf->datalength, psf->filelength - psf->dataoffset) ;
-                                               psf->datalength = psf->filelength - psf->dataoffset ;
-                                               }
-                                       else
-                                               psf_log_printf (psf, " BODY : %D\n", psf->datalength) ;
-
-                                       parsestage |= HAVE_BODY ;
-
-                                       if (! psf->sf.seekable)
-                                               break ;
-
-                                       psf_fseek (psf, psf->datalength, SEEK_CUR) ;
-                                       break ;
-
-                       case NAME_MARKER :
-                                       if (! (parsestage & HAVE_SVX))
-                                               return SFE_SVX_NO_FORM ;
-
-                                       psf_binheader_readf (psf, "E4", &dword) ;
-
-                                       psf_log_printf (psf, " %M : %d\n", marker, dword) ;
-
-                                       if (strlen (psf->file.name.c) != dword)
-                                       {       if (dword > sizeof (psf->file.name.c) - 1)
-                                                       return SFE_SVX_BAD_NAME_LENGTH ;
-
-                                               psf_binheader_readf (psf, "b", psf->file.name.c, dword) ;
-                                               psf->file.name.c [dword] = 0 ;
-                                               }
-                                       else
-                                               psf_binheader_readf (psf, "j", dword) ;
-                                       break ;
-
-                       case ANNO_MARKER :
-                                       if (! (parsestage & HAVE_SVX))
-                                               return SFE_SVX_NO_FORM ;
-
-                                       psf_binheader_readf (psf, "E4", &dword) ;
-
-                                       psf_log_printf (psf, " %M : %d\n", marker, dword) ;
-
-                                       psf_binheader_readf (psf, "j", dword) ;
-                                       break ;
-
-                       case CHAN_MARKER :
-                                       if (! (parsestage & HAVE_SVX))
-                                               return SFE_SVX_NO_FORM ;
-
-                                       psf_binheader_readf (psf, "E4", &dword) ;
-
-                                       psf_log_printf (psf, " %M : %d\n", marker, dword) ;
-
-                                       bytecount += psf_binheader_readf (psf, "E4", &channels) ;
-
-                                       if (channels == 2 || channels == 4)
-                                               psf_log_printf (psf, "  Channels : %d => mono\n", channels) ;
-                                       else if (channels == 6)
-                                       {       psf->sf.channels = 2 ;
-                                               psf_log_printf (psf, "  Channels : %d => stereo\n", channels) ;
-                                               }
-                                       else
-                                               psf_log_printf (psf, "  Channels : %d *** assuming mono\n", channels) ;
-
-                                       psf_binheader_readf (psf, "j", dword - bytecount) ;
-                                       break ;
-
-
-                       case AUTH_MARKER :
-                       case c_MARKER :
-                                       if (! (parsestage & HAVE_SVX))
-                                               return SFE_SVX_NO_FORM ;
-
-                                       psf_binheader_readf (psf, "E4", &dword) ;
-
-                                       psf_log_printf (psf, " %M : %d\n", marker, dword) ;
-
-                                       psf_binheader_readf (psf, "j", dword) ;
-                                       break ;
-
-                       default :
-                                       if (psf_isprint ((marker >> 24) & 0xFF) && psf_isprint ((marker >> 16) & 0xFF)
-                                               && psf_isprint ((marker >> 8) & 0xFF) && psf_isprint (marker & 0xFF))
-                                       {       psf_binheader_readf (psf, "E4", &dword) ;
-
-                                               psf_log_printf (psf, "%M : %d (unknown marker)\n", marker, dword) ;
-
-                                               psf_binheader_readf (psf, "j", dword) ;
-                                               break ;
-                                               } ;
-                                       if ((dword = psf_ftell (psf)) & 0x03)
-                                       {       psf_log_printf (psf, "  Unknown chunk marker at position %d. Resynching.\n", dword - 4) ;
-
-                                               psf_binheader_readf (psf, "j", -3) ;
-                                               break ;
-                                               } ;
-                                       psf_log_printf (psf, "*** Unknown chunk marker : %X. Exiting parser.\n", marker) ;
-                                       done = 1 ;
-                       } ;     /* switch (marker) */
-
-               if (! psf->sf.seekable && (parsestage & HAVE_BODY))
-                       break ;
-
-               if (psf_ftell (psf) >= psf->filelength - SIGNED_SIZEOF (dword))
-                       break ;
-               } ; /* while (1) */
-
-       if (vhdr.compression)
-               return SFE_SVX_BAD_COMP ;
-
-       if (psf->dataoffset <= 0)
-               return SFE_SVX_NO_DATA ;
-
-       return 0 ;
-} /* svx_read_header */
-
-static int
-svx_close (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-               svx_write_header (psf, SF_TRUE) ;
-
-       return 0 ;
-} /* svx_close */
-
-static int
-svx_write_header (SF_PRIVATE *psf, int calc_length)
-{      static  char    annotation      [] = "libsndfile by Erik de Castro Lopo\0\0\0" ;
-       sf_count_t      current ;
-
-       current = psf_ftell (psf) ;
-
-       if (calc_length)
-       {       psf->filelength = psf_get_filelen (psf) ;
-
-               psf->datalength = psf->filelength - psf->dataoffset ;
-
-               if (psf->dataend)
-                       psf->datalength -= psf->filelength - psf->dataend ;
-
-               psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-               } ;
-
-       psf->header [0] = 0 ;
-       psf->headindex = 0 ;
-       psf_fseek (psf, 0, SEEK_SET) ;
-
-       /* FORM marker and FORM size. */
-       psf_binheader_writef (psf, "Etm8", FORM_MARKER, (psf->filelength < 8) ?
-                       psf->filelength * 0 : psf->filelength - 8) ;
-
-       psf_binheader_writef (psf, "m", (psf->bytewidth == 1) ? SVX8_MARKER : SV16_MARKER) ;
-
-       /* VHDR chunk. */
-       psf_binheader_writef (psf, "Em4", VHDR_MARKER, sizeof (VHDR_CHUNK)) ;
-       /* VHDR : oneShotHiSamples, repeatHiSamples, samplesPerHiCycle */
-       psf_binheader_writef (psf, "E444", psf->sf.frames, 0, 0) ;
-       /* VHDR : samplesPerSec, octave, compression */
-       psf_binheader_writef (psf, "E211", psf->sf.samplerate, 1, 0) ;
-       /* VHDR : volume */
-       psf_binheader_writef (psf, "E4", (psf->bytewidth == 1) ? 0xFF : 0xFFFF) ;
-
-       if (psf->sf.channels == 2)
-               psf_binheader_writef (psf, "Em44", CHAN_MARKER, 4, 6) ;
-
-       /* Filename and annotation strings. */
-       psf_binheader_writef (psf, "Emsms", NAME_MARKER, psf->file.name.c, ANNO_MARKER, annotation) ;
-
-       /* BODY marker and size. */
-       psf_binheader_writef (psf, "Etm8", BODY_MARKER, (psf->datalength < 0) ?
-                       psf->datalength * 0 : psf->datalength) ;
-
-       psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-       if (psf->error)
-               return psf->error ;
-
-       psf->dataoffset = psf->headindex ;
-
-       if (current > 0)
-               psf_fseek (psf, current, SEEK_SET) ;
-
-       return psf->error ;
-} /* svx_write_header */
-
diff --git a/libs/libsndfile/src/test_audio_detect.c b/libs/libsndfile/src/test_audio_detect.c
deleted file mode 100644 (file)
index 9706249..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
-** Copyright (C) 2007-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <string.h>
-#include <errno.h>
-
-#include "common.h"
-#include "sfendian.h"
-
-#include "test_main.h"
-
-static unsigned char float_le_mono [] =
-{      0x36, 0x86, 0x21, 0x44, 0xB5, 0xB4, 0x49, 0x44, 0xA2, 0xC0, 0x71, 0x44, 0x7B, 0xD1, 0x8C, 0x44,
-       0x54, 0xAA, 0xA0, 0x44, 0x60, 0x67, 0xB4, 0x44, 0x22, 0x05, 0xC8, 0x44, 0x29, 0x80, 0xDB, 0x44,
-       0x04, 0xD5, 0xEE, 0x44, 0x27, 0x00, 0x01, 0x45, 0x50, 0x7F, 0x0A, 0x45, 0x53, 0xE6, 0x13, 0x45,
-       0x85, 0x33, 0x1D, 0x45, 0x43, 0x65, 0x26, 0x45, 0xEC, 0x79, 0x2F, 0x45, 0xE3, 0x6F, 0x38, 0x45,
-       0x98, 0x45, 0x41, 0x45, 0x77, 0xF9, 0x49, 0x45, 0xF6, 0x89, 0x52, 0x45, 0x8F, 0xF5, 0x5A, 0x45,
-       0xC9, 0x3A, 0x63, 0x45, 0x28, 0x58, 0x6B, 0x45, 0x3C, 0x4C, 0x73, 0x45, 0x9F, 0x15, 0x7B, 0x45,
-       0x75, 0x59, 0x81, 0x45, 0x64, 0x11, 0x85, 0x45, 0xF1, 0xB1, 0x88, 0x45, 0x78, 0x3A, 0x8C, 0x45,
-       0x58, 0xAA, 0x8F, 0x45, 0xF2, 0x00, 0x93, 0x45, 0xB2, 0x3D, 0x96, 0x45, 0x01, 0x60, 0x99, 0x45,
-       0x50, 0x67, 0x9C, 0x45, 0x15, 0x53, 0x9F, 0x45, 0xCC, 0x22, 0xA2, 0x45, 0xF0, 0xD5, 0xA4, 0x45,
-       0x07, 0x6C, 0xA7, 0x45, 0x9C, 0xE4, 0xA9, 0x45, 0x3D, 0x3F, 0xAC, 0x45, 0x7A, 0x7B, 0xAE, 0x45,
-       0xF2, 0x98, 0xB0, 0x45, 0x3C, 0x97, 0xB2, 0x45, 0x02, 0x76, 0xB4, 0x45, 0xEC, 0x34, 0xB6, 0x45,
-       0xA8, 0xD3, 0xB7, 0x45, 0xEB, 0x51, 0xB9, 0x45, 0x6F, 0xAF, 0xBA, 0x45, 0xF5, 0xEB, 0xBB, 0x45,
-       0x41, 0x07, 0xBD, 0x45, 0x21, 0x01, 0xBE, 0x45, 0x64, 0xD9, 0xBE, 0x45, 0xE3, 0x8F, 0xBF, 0x45,
-       0x7E, 0x24, 0xC0, 0x45, 0x15, 0x97, 0xC0, 0x45, 0x92, 0xE7, 0xC0, 0x45, 0xE8, 0x15, 0xC1, 0x45,
-       0x7E, 0x24, 0xC0, 0x45, 0x15, 0x97, 0xC0, 0x45, 0x92, 0xE7, 0xC0, 0x45, 0xE8, 0x15, 0xC1, 0x45,
-       0x7E, 0x24, 0xC0, 0x45, 0x15, 0x97, 0xC0, 0x45, 0x92, 0xE7, 0xC0, 0x45, 0xE8, 0x15, 0xC1, 0x45,
-} ;
-
-static unsigned char int24_32_le_stereo [] =
-{
-       0x00, 0xE7, 0xFB, 0xFF, 0x00, 0x7C, 0xFD, 0xFF, 0x00, 0xA2, 0xFC, 0xFF, 0x00, 0x2B, 0xFC, 0xFF,
-       0x00, 0xF3, 0xFD, 0xFF, 0x00, 0x19, 0xFB, 0xFF, 0x00, 0xA5, 0xFE, 0xFF, 0x00, 0x8D, 0xFA, 0xFF,
-       0x00, 0x91, 0xFF, 0xFF, 0x00, 0xB5, 0xFA, 0xFF, 0x00, 0x91, 0x00, 0x00, 0x00, 0x5E, 0xFB, 0xFF,
-       0x00, 0xD9, 0x01, 0x00, 0x00, 0x82, 0xFB, 0xFF, 0x00, 0xDF, 0x03, 0x00, 0x00, 0x44, 0xFC, 0xFF,
-       0x00, 0x1C, 0x05, 0x00, 0x00, 0x77, 0xFC, 0xFF, 0x00, 0x8D, 0x06, 0x00, 0x00, 0x4F, 0xFC, 0xFF,
-       0x00, 0x84, 0x07, 0x00, 0x00, 0x74, 0xFC, 0xFF, 0x00, 0x98, 0x08, 0x00, 0x00, 0x33, 0xFD, 0xFF,
-       0x00, 0xB9, 0x09, 0x00, 0x00, 0x48, 0xFF, 0xFF, 0x00, 0xD1, 0x0A, 0x00, 0x00, 0x10, 0x02, 0x00,
-       0x00, 0x28, 0x0C, 0x00, 0x00, 0xA2, 0x05, 0x00, 0x00, 0xA7, 0x0C, 0x00, 0x00, 0x45, 0x08, 0x00,
-       0x00, 0x44, 0x0D, 0x00, 0x00, 0x1A, 0x0A, 0x00, 0x00, 0x65, 0x0D, 0x00, 0x00, 0x51, 0x0B, 0x00,
-       0x00, 0x8B, 0x0D, 0x00, 0x00, 0x18, 0x0B, 0x00, 0x00, 0x37, 0x0E, 0x00, 0x00, 0x24, 0x0B, 0x00,
-       0x00, 0x00, 0x0F, 0x00, 0x00, 0xDD, 0x0A, 0x00, 0x00, 0x83, 0x10, 0x00, 0x00, 0x31, 0x0A, 0x00,
-       0x00, 0x07, 0x12, 0x00, 0x00, 0xC0, 0x08, 0x00, 0x00, 0xF7, 0x12, 0x00, 0x00, 0x47, 0x06, 0x00,
-       0x00, 0xDD, 0x12, 0x00, 0x00, 0x6A, 0x03, 0x00, 0x00, 0xD5, 0x11, 0x00, 0x00, 0x99, 0x00, 0x00,
-       0x00, 0x01, 0x10, 0x00, 0x00, 0xC5, 0xFE, 0xFF, 0x00, 0xF4, 0x0D, 0x00, 0x00, 0x97, 0xFD, 0xFF,
-       0x00, 0x62, 0x0B, 0x00, 0x00, 0x75, 0xFC, 0xFF, 0x00, 0xE9, 0x08, 0x00, 0x00, 0xC0, 0xFB, 0xFF,
-       0x00, 0x80, 0x06, 0x00, 0x00, 0x3C, 0xFB, 0xFF, 0x00, 0xDA, 0x03, 0x00, 0x00, 0xE4, 0xFA, 0xFF,
-       0x00, 0xEB, 0x01, 0x00, 0x00, 0x21, 0xFB, 0xFF, 0x00, 0x20, 0x00, 0x00, 0x00, 0xE7, 0xFB, 0xFF,
-} ;
-
-
-void
-test_audio_detect (void)
-{
-       SF_PRIVATE psf ;
-       AUDIO_DETECT ad ;
-       int errors = 0 ;
-
-       print_test_name ("Testing audio detect") ;
-
-       memset (&psf, 0, sizeof (psf)) ;
-
-       ad.endianness = SF_ENDIAN_LITTLE ;
-       ad.channels = 1 ;
-       if (audio_detect (&psf, &ad, float_le_mono, sizeof (float_le_mono)) != SF_FORMAT_FLOAT)
-       {       puts ("    float_le_mono") ;
-               errors ++ ;
-               } ;
-
-       ad.endianness = SF_ENDIAN_LITTLE ;
-       ad.channels = 2 ;
-       if (audio_detect (&psf, &ad, int24_32_le_stereo, sizeof (int24_32_le_stereo)) != SF_FORMAT_PCM_32)
-       {       if (errors == 0) puts ("\nFailed tests :\n") ;
-               puts ("    int24_32_le_stereo") ;
-               errors ++ ;
-               } ;
-
-       if (errors != 0)
-       {       printf ("\n    Errors : %d\n\n", errors) ;
-               exit (1) ;
-               } ;
-
-       puts ("ok") ;
-
-       return ;
-} /* test_audio_detect */
diff --git a/libs/libsndfile/src/test_broadcast_var.c b/libs/libsndfile/src/test_broadcast_var.c
deleted file mode 100644 (file)
index dbea943..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-** Copyright (C) 2010-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "common.h"
-
-#include "test_main.h"
-
-#define        BCAST_MAX       512
-
-typedef SF_BROADCAST_INFO_VAR (BCAST_MAX) SF_BROADCAST_INFO_512 ;
-
-static void
-fill_coding_history (SF_BROADCAST_INFO_512 * bi)
-{      static const char *lines [] =
-       {       "Lorem ipsum dolor sit amet,\nconsectetur adipiscing elit.",
-               "Donec dignissim erat\nvehicula libero condimentum\ndictum porta augue faucibus.",
-               "Maecenas nec turpis\nsit amet quam\nfaucibus adipiscing.",
-               "Mauris aliquam,\nlectus interdum\ntincidunt luctus.",
-               "\n\n\n\n\n\n\n\n\n\n\n\n",
-               "In auctor lorem\nvel est euismod\ncondimentum.",
-               "\n\n\n\n\n\n\n\n\n\n\n\n",
-               "Ut vitae magna\nid dui placerat vehicula\nin id lectus.",
-               "\n\n\n\n\n\n\n\n\n\n\n\n",
-               "Sed lacus leo,\nmolestie et luctus ac,\ntincidunt sit amet nisi.",
-               "\n\n\n\n\n\n\n\n\n\n\n\n",
-               "Sed ligula neque,\ngravida semper vulputate laoreet,\ngravida eu tellus.",
-               "Donec dolor dolor,\nscelerisque in consequat ornare,\ntempor nec nisl."
-       } ;
-       int k ;
-
-       bi->coding_history [0] = 0 ;
-
-       for (k = 0 ; strlen (bi->coding_history) < bi->coding_history_size - 1 ; k ++)
-               append_snprintf (bi->coding_history, bi->coding_history_size, "%s\n", lines [k % ARRAY_LEN (lines)]) ;
-
-       return ;
-} /* fill_coding_listory */
-
-static void
-test_broadcast_var_set (void)
-{      SF_PRIVATE      sf_private, *psf ;
-       int k ;
-
-       psf = &sf_private ;
-       memset (psf, 0, sizeof (sf_private)) ;
-
-       print_test_name ("Testing broadcast_var_set ") ;
-
-       for (k = 64 ; k < BCAST_MAX ; k++)
-       {
-               SF_BROADCAST_INFO_512 bi ;
-
-               memset (&bi, 0, sizeof (bi)) ;
-
-               bi.coding_history_size = k ;
-               fill_coding_history (&bi) ;
-               bi.coding_history_size -- ;
-
-               broadcast_var_set (psf, (SF_BROADCAST_INFO*) &bi, sizeof (bi)) ;
-               } ;
-
-       if (psf->broadcast_16k != NULL)
-               free (psf->broadcast_16k) ;
-
-       puts ("ok") ;
-} /* test_broadcast_var_set */
-
-static void
-test_broadcast_var_zero (void)
-{      SF_PRIVATE      sf_private, *psf ;
-       SF_BROADCAST_INFO_VAR (0) bi ;
-
-       psf = &sf_private ;
-       memset (psf, 0, sizeof (sf_private)) ;
-       psf->file.mode = SFM_RDWR ;
-
-       print_test_name ("Testing broadcast_var_zero ") ;
-
-       memset (&bi, 0, sizeof (bi)) ;
-
-       broadcast_var_set (psf, (SF_BROADCAST_INFO*) &bi, sizeof (bi)) ;
-
-       if (psf->broadcast_16k->coding_history_size != 0)
-       {       printf ("\n\nLine %d: coding_history_size %d should be zero.\n\n", __LINE__, psf->broadcast_16k->coding_history_size) ;
-               exit (1) ;
-               } ;
-
-       if (psf->broadcast_16k != NULL)
-               free (psf->broadcast_16k) ;
-
-       puts ("ok") ;
-} /* test_broadcast_var_zero */
-
-void
-test_broadcast_var (void)
-{      test_broadcast_var_set () ;
-       test_broadcast_var_zero () ;
-} /* test_broadcast_var */
diff --git a/libs/libsndfile/src/test_cart_var.c b/libs/libsndfile/src/test_cart_var.c
deleted file mode 100644 (file)
index 532a755..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
-** Copyright (C) 2010-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "common.h"
-
-#include "test_main.h"
-
-#define        CART_MAX        512
-
-typedef SF_CART_INFO_VAR (CART_MAX) SF_CART_INFO_512 ;
-
-static void
-fill_tag_text (SF_CART_INFO_512 * ci)
-{      static const char *lines [] =
-       {       "Lorem ipsum dolor sit amet,\nconsectetur adipiscing elit.",
-               "Donec dignissim erat\nvehicula libero condimentum\ndictum porta augue faucibus.",
-               "Maecenas nec turpis\nsit amet quam\nfaucibus adipiscing.",
-               "Mauris aliquam,\nlectus interdum\ntincidunt luctus.",
-               "\n\n\n\n\n\n\n\n\n\n\n\n",
-               "In auctor lorem\nvel est euismod\ncondimentum.",
-               "\n\n\n\n\n\n\n\n\n\n\n\n",
-               "Ut vitae magna\nid dui placerat vehicula\nin id lectus.",
-               "\n\n\n\n\n\n\n\n\n\n\n\n",
-               "Sed lacus leo,\nmolestie et luctus ac,\ntincidunt sit amet nisi.",
-               "\n\n\n\n\n\n\n\n\n\n\n\n",
-               "Sed ligula neque,\ngravida semper vulputate laoreet,\ngravida eu tellus.",
-               "Donec dolor dolor,\nscelerisque in consequat ornare,\ntempor nec nisl."
-       } ;
-       int k ;
-
-       ci->tag_text [0] = 0 ;
-
-       for (k = 0 ; strlen (ci->tag_text) < ci->tag_text_size - 1 ; k ++)
-               append_snprintf (ci->tag_text, ci->tag_text_size, "%s\n", lines [k % ARRAY_LEN (lines)]) ;
-
-       return ;
-} /* fill_tag_text */
-
-void
-test_cart_var (void)
-{      SF_PRIVATE      sf_private, *psf ;
-       SF_CART_TIMER timer ;
-       int k ;
-
-       psf = &sf_private ;
-       memset (psf, 0, sizeof (sf_private)) ;
-
-       print_test_name ("Testing cart_var_set ") ;
-
-       for (k = 64 ; k < CART_MAX ; k++)
-       {
-               SF_CART_INFO_512 ci ;
-
-               memset (&ci, 0, sizeof (ci)) ;
-
-               memset (&timer, 0, sizeof (timer)) ;
-               memcpy (ci.post_timers, &timer, sizeof (timer)) ;
-
-               ci.tag_text_size = k ;
-               fill_tag_text (&ci) ;
-               ci.tag_text_size -- ;
-
-               cart_var_set (psf, (SF_CART_INFO*) &ci, sizeof (ci)) ;
-               } ;
-
-       if (psf->cart_16k != NULL)
-               free (psf->cart_16k) ;
-
-       puts ("ok") ;
-} /* test_cart_var */
diff --git a/libs/libsndfile/src/test_conversions.c b/libs/libsndfile/src/test_conversions.c
deleted file mode 100644 (file)
index 7e8c2ed..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
-** Copyright (C) 2006-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <inttypes.h>
-
-#include "common.h"
-#include "test_main.h"
-
-
-/*
-** This is a bit rough, but it is the nicest way to do it.
-*/
-
-#define cmp_test(line, ival, tval, str) \
-       if (ival != tval) \
-       {       printf (str, line, ival, tval) ; \
-               exit (1) ; \
-               } ;
-
-static void
-conversion_test (char endian)
-{
-       SF_PRIVATE      sf_private, *psf ;
-       const char * filename = "conversion.bin" ;
-       int64_t i64 = SF_PLATFORM_S64 (0x0123456789abcdef), t64 = 0 ;
-       char format_str [16] ;
-       char test_name [64] ;
-       char i8 = 12, t8 = 0 ;
-       short i16 = 0x123, t16 = 0 ;
-       int i24 = 0x23456, t24 = 0 ;
-       int i32 = 0x0a0b0c0d, t32 = 0 ;
-       int bytes ;
-
-       snprintf (format_str, sizeof (format_str), "%c12348", endian) ;
-
-       snprintf (test_name, sizeof (test_name), "Testing %s conversions", endian == 'e' ? "little endian" : "big endian") ;
-       print_test_name (test_name) ;
-
-       psf = &sf_private ;
-       memset (psf, 0, sizeof (sf_private)) ;
-
-       psf->file.mode = SFM_WRITE ;
-       snprintf (psf->file.path.c, sizeof (psf->file.path.c), "%s", filename) ;
-
-       if (psf_fopen (psf) != 0)
-       {       printf ("\n\nError : failed to open file '%s' for write.\n\n", filename) ;
-               exit (1) ;
-               } ;
-
-       psf_binheader_writef (psf, format_str, i8, i16, i24, i32, i64) ;
-       psf_fwrite (psf->header, 1, psf->headindex, psf) ;
-       psf_fclose (psf) ;
-
-       memset (psf, 0, sizeof (sf_private)) ;
-
-       psf->file.mode = SFM_READ ;
-       snprintf (psf->file.path.c, sizeof (psf->file.path.c), "%s", filename) ;
-
-       if (psf_fopen (psf) != 0)
-       {       printf ("\n\nError : failed to open file '%s' for read.\n\n", filename) ;
-               exit (1) ;
-               } ;
-
-       bytes = psf_binheader_readf (psf, format_str, &t8, &t16, &t24, &t32, &t64) ;
-       psf_fclose (psf) ;
-
-       if (bytes != 18)
-       {       printf ("\n\nLine %d : read %d bytes.\n\n", __LINE__, bytes) ;
-               exit (1) ;
-               } ;
-
-       cmp_test (__LINE__, i8, t8, "\n\nLine %d : 8 bit int failed %d -> %d.\n\n") ;
-       cmp_test (__LINE__, i16, t16, "\n\nLine %d : 16 bit int failed 0x%x -> 0x%x.\n\n") ;
-       cmp_test (__LINE__, i24, t24, "\n\nLine %d : 24 bit int failed 0x%x -> 0x%x.\n\n") ;
-       cmp_test (__LINE__, i32, t32, "\n\nLine %d : 32 bit int failed 0x%x -> 0x%x.\n\n") ;
-       cmp_test (__LINE__, i64, t64, "\n\nLine %d : 64 bit int failed 0x%" PRIx64 "x -> 0x%" PRIx64 "x.\n\n") ;
-
-       remove (filename) ;
-       puts ("ok") ;
-} /* conversion_test */
-
-void
-test_conversions (void)
-{
-       conversion_test ('E') ;
-       conversion_test ('e') ;
-} /* test_conversion */
-
diff --git a/libs/libsndfile/src/test_endswap.c b/libs/libsndfile/src/test_endswap.c
deleted file mode 100644 (file)
index 4931650..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "common.h"
-#include "sfendian.h"
-
-#include "test_main.h"
-
-#define        FMT_SHORT       "0x%04x\n"
-#define        FMT_INT         "0x%08x\n"
-#define        FMT_INT64       "0x%016" PRIx64 "\n"
-
-/*==============================================================================
-** Test functions.
-*/
-
-
-static void
-dump_short_array (const char * name, short * data, int datalen)
-{      int k ;
-
-       printf ("%-6s : ", name) ;
-       for (k = 0 ; k < datalen ; k++)
-               printf (FMT_SHORT, data [k]) ;
-       putchar ('\n') ;
-} /* dump_short_array */
-
-static void
-test_endswap_short (void)
-{      short orig [4], first [4], second [4] ;
-       int k ;
-
-       printf ("    %-40s : ", "test_endswap_short") ;
-       fflush (stdout) ;
-
-       for (k = 0 ; k < ARRAY_LEN (orig) ; k++)
-               orig [k] = 0x3210 + k ;
-
-       endswap_short_copy (first, orig, ARRAY_LEN (first)) ;
-       endswap_short_copy (second, first, ARRAY_LEN (second)) ;
-
-       if (memcmp (orig, first, sizeof (orig)) == 0)
-       {       printf ("\n\nLine %d : test 1 : these two array should not be the same:\n\n", __LINE__) ;
-               dump_short_array ("orig", orig, ARRAY_LEN (orig)) ;
-               dump_short_array ("first", first, ARRAY_LEN (first)) ;
-               exit (1) ;
-               } ;
-
-       if (memcmp (orig, second, sizeof (orig)) != 0)
-       {       printf ("\n\nLine %d : test 2 : these two array should be the same:\n\n", __LINE__) ;
-               dump_short_array ("orig", orig, ARRAY_LEN (orig)) ;
-               dump_short_array ("second", second, ARRAY_LEN (second)) ;
-               exit (1) ;
-               } ;
-
-       endswap_short_array (first, ARRAY_LEN (first)) ;
-
-       if (memcmp (orig, first, sizeof (orig)) != 0)
-       {       printf ("\n\nLine %d : test 3 : these two array should be the same:\n\n", __LINE__) ;
-               dump_short_array ("orig", orig, ARRAY_LEN (orig)) ;
-               dump_short_array ("first", first, ARRAY_LEN (first)) ;
-               exit (1) ;
-               } ;
-
-       endswap_short_copy (first, orig, ARRAY_LEN (first)) ;
-       endswap_short_copy (first, first, ARRAY_LEN (first)) ;
-
-       if (memcmp (orig, first, sizeof (orig)) != 0)
-       {       printf ("\n\nLine %d : test 4 : these two array should be the same:\n\n", __LINE__) ;
-               dump_short_array ("orig", orig, ARRAY_LEN (orig)) ;
-               dump_short_array ("first", first, ARRAY_LEN (first)) ;
-               exit (1) ;
-               } ;
-
-       puts ("ok") ;
-} /* test_endswap_short */
-
-static void
-dump_int_array (const char * name, int * data, int datalen)
-{      int k ;
-
-       printf ("%-6s : ", name) ;
-       for (k = 0 ; k < datalen ; k++)
-               printf (FMT_INT, data [k]) ;
-       putchar ('\n') ;
-} /* dump_int_array */
-
-static void
-test_endswap_int (void)
-{      int orig [4], first [4], second [4] ;
-       int k ;
-
-       printf ("    %-40s : ", "test_endswap_int") ;
-       fflush (stdout) ;
-
-       for (k = 0 ; k < ARRAY_LEN (orig) ; k++)
-               orig [k] = 0x76543210 + k ;
-
-       endswap_int_copy (first, orig, ARRAY_LEN (first)) ;
-       endswap_int_copy (second, first, ARRAY_LEN (second)) ;
-
-       if (memcmp (orig, first, sizeof (orig)) == 0)
-       {       printf ("\n\nLine %d : test 1 : these two array should not be the same:\n\n", __LINE__) ;
-               dump_int_array ("orig", orig, ARRAY_LEN (orig)) ;
-               dump_int_array ("first", first, ARRAY_LEN (first)) ;
-               exit (1) ;
-               } ;
-
-       if (memcmp (orig, second, sizeof (orig)) != 0)
-       {       printf ("\n\nLine %d : test 2 : these two array should be the same:\n\n", __LINE__) ;
-               dump_int_array ("orig", orig, ARRAY_LEN (orig)) ;
-               dump_int_array ("second", second, ARRAY_LEN (second)) ;
-               exit (1) ;
-               } ;
-
-       endswap_int_array (first, ARRAY_LEN (first)) ;
-
-       if (memcmp (orig, first, sizeof (orig)) != 0)
-       {       printf ("\n\nLine %d : test 3 : these two array should be the same:\n\n", __LINE__) ;
-               dump_int_array ("orig", orig, ARRAY_LEN (orig)) ;
-               dump_int_array ("first", first, ARRAY_LEN (first)) ;
-               exit (1) ;
-               } ;
-
-       endswap_int_copy (first, orig, ARRAY_LEN (first)) ;
-       endswap_int_copy (first, first, ARRAY_LEN (first)) ;
-
-       if (memcmp (orig, first, sizeof (orig)) != 0)
-       {       printf ("\n\nLine %d : test 4 : these two array should be the same:\n\n", __LINE__) ;
-               dump_int_array ("orig", orig, ARRAY_LEN (orig)) ;
-               dump_int_array ("first", first, ARRAY_LEN (first)) ;
-               exit (1) ;
-               } ;
-
-       puts ("ok") ;
-} /* test_endswap_int */
-
-static void
-dump_int64_t_array (const char * name, int64_t * data, int datalen)
-{      int k ;
-
-       printf ("%-6s : ", name) ;
-       for (k = 0 ; k < datalen ; k++)
-               printf (FMT_INT64, data [k]) ;
-       putchar ('\n') ;
-} /* dump_int64_t_array */
-
-static void
-test_endswap_int64_t (void)
-{      int64_t orig [4], first [4], second [4] ;
-       int k ;
-
-       printf ("    %-40s : ", "test_endswap_int64_t") ;
-       fflush (stdout) ;
-
-       for (k = 0 ; k < ARRAY_LEN (orig) ; k++)
-               orig [k] = 0x0807050540302010LL + k ;
-
-       endswap_int64_t_copy (first, orig, ARRAY_LEN (first)) ;
-       endswap_int64_t_copy (second, first, ARRAY_LEN (second)) ;
-
-       if (memcmp (orig, first, sizeof (orig)) == 0)
-       {       printf ("\n\nLine %d : test 1 : these two array should not be the same:\n\n", __LINE__) ;
-               dump_int64_t_array ("orig", orig, ARRAY_LEN (orig)) ;
-               dump_int64_t_array ("first", first, ARRAY_LEN (first)) ;
-               exit (1) ;
-               } ;
-
-       if (memcmp (orig, second, sizeof (orig)) != 0)
-       {       printf ("\n\nLine %d : test 2 : these two array should be the same:\n\n", __LINE__) ;
-               dump_int64_t_array ("orig", orig, ARRAY_LEN (orig)) ;
-               dump_int64_t_array ("second", second, ARRAY_LEN (second)) ;
-               exit (1) ;
-               } ;
-
-       endswap_int64_t_array (first, ARRAY_LEN (first)) ;
-
-       if (memcmp (orig, first, sizeof (orig)) != 0)
-       {       printf ("\n\nLine %d : test 3 : these two array should be the same:\n\n", __LINE__) ;
-               dump_int64_t_array ("orig", orig, ARRAY_LEN (orig)) ;
-               dump_int64_t_array ("first", first, ARRAY_LEN (first)) ;
-               exit (1) ;
-               } ;
-
-       endswap_int64_t_copy (first, orig, ARRAY_LEN (first)) ;
-       endswap_int64_t_copy (first, first, ARRAY_LEN (first)) ;
-
-       if (memcmp (orig, first, sizeof (orig)) != 0)
-       {       printf ("\n\nLine %d : test 4 : these two array should be the same:\n\n", __LINE__) ;
-               dump_int64_t_array ("orig", orig, ARRAY_LEN (orig)) ;
-               dump_int64_t_array ("first", first, ARRAY_LEN (first)) ;
-               exit (1) ;
-               } ;
-
-       puts ("ok") ;
-} /* test_endswap_int64_t */
-
-
-
-void
-test_endswap (void)
-{
-       test_endswap_short () ;
-       test_endswap_int () ;
-       test_endswap_int64_t () ;
-
-} /* test_endswap */
-
diff --git a/libs/libsndfile/src/test_endswap.def b/libs/libsndfile/src/test_endswap.def
deleted file mode 100644 (file)
index 9516e4d..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-autogen definitions test_endswap.tpl;
-
-int_type = {
-       name            = short ;
-       value           = 0x3210 ;
-       format          = FMT_SHORT ;
-       } ;
-
-int_type = {
-       name            = int ;
-       value           = 0x76543210 ;
-       format          = FMT_INT ;
-       } ;
-
-int_type = {
-       name            = int64_t ;
-       value           = "0x0807050540302010LL" ;
-       format          = FMT_INT64 ;
-       } ;
-
-int_size = {
-       name            = 16 ;
-       typename        = int16_t ;
-       value           = 0x4142 ;
-       strval          = "AB" ;
-       } ;
-
-int_size = {
-       name            = 32 ;
-       typename        = int32_t ;
-       value           = 0x30313233 ;
-       strval          = "0123" ;
-       } ;
-
-int_size = {
-       name            = 64 ;
-       typename        = int64_t ;
-       value           = 0x3031323334353637 ;
-       strval          = "01234567" ;
-       } ;
diff --git a/libs/libsndfile/src/test_endswap.tpl b/libs/libsndfile/src/test_endswap.tpl
deleted file mode 100644 (file)
index 89b7d14..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-[+ AutoGen5 template c +]
-/*
-** Copyright (C) 2002-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "common.h"
-#include "sfendian.h"
-
-#include "test_main.h"
-
-#define        FMT_SHORT       "0x%04x\n"
-#define        FMT_INT         "0x%08x\n"
-#define        FMT_INT64       "0x%016" PRIx64 "\n"
-
-/*==============================================================================
-** Test functions.
-*/
-
-[+ FOR int_type +]
-static void
-dump_[+ (get "name") +]_array (const char * name, [+ (get "name") +] * data, int datalen)
-{      int k ;
-
-       printf ("%-6s : ", name) ;
-       for (k = 0 ; k < datalen ; k++)
-               printf ([+ (get "format") +], data [k]) ;
-       putchar ('\n') ;
-} /* dump_[+ (get "name") +]_array */
-
-static void
-test_endswap_[+ (get "name") +] (void)
-{      [+ (get "name") +] orig [4], first [4], second [4] ;
-       int k ;
-
-       printf ("    %-40s : ", "test_endswap_[+ (get "name") +]") ;
-       fflush (stdout) ;
-
-       for (k = 0 ; k < ARRAY_LEN (orig) ; k++)
-               orig [k] = [+ (get "value") +] + k ;
-
-       endswap_[+ (get "name") +]_copy (first, orig, ARRAY_LEN (first)) ;
-       endswap_[+ (get "name") +]_copy (second, first, ARRAY_LEN (second)) ;
-
-       if (memcmp (orig, first, sizeof (orig)) == 0)
-       {       printf ("\n\nLine %d : test 1 : these two array should not be the same:\n\n", __LINE__) ;
-               dump_[+ (get "name") +]_array ("orig", orig, ARRAY_LEN (orig)) ;
-               dump_[+ (get "name") +]_array ("first", first, ARRAY_LEN (first)) ;
-               exit (1) ;
-               } ;
-
-       if (memcmp (orig, second, sizeof (orig)) != 0)
-       {       printf ("\n\nLine %d : test 2 : these two array should be the same:\n\n", __LINE__) ;
-               dump_[+ (get "name") +]_array ("orig", orig, ARRAY_LEN (orig)) ;
-               dump_[+ (get "name") +]_array ("second", second, ARRAY_LEN (second)) ;
-               exit (1) ;
-               } ;
-
-       endswap_[+ (get "name") +]_array (first, ARRAY_LEN (first)) ;
-
-       if (memcmp (orig, first, sizeof (orig)) != 0)
-       {       printf ("\n\nLine %d : test 3 : these two array should be the same:\n\n", __LINE__) ;
-               dump_[+ (get "name") +]_array ("orig", orig, ARRAY_LEN (orig)) ;
-               dump_[+ (get "name") +]_array ("first", first, ARRAY_LEN (first)) ;
-               exit (1) ;
-               } ;
-
-       endswap_[+ (get "name") +]_copy (first, orig, ARRAY_LEN (first)) ;
-       endswap_[+ (get "name") +]_copy (first, first, ARRAY_LEN (first)) ;
-
-       if (memcmp (orig, first, sizeof (orig)) != 0)
-       {       printf ("\n\nLine %d : test 4 : these two array should be the same:\n\n", __LINE__) ;
-               dump_[+ (get "name") +]_array ("orig", orig, ARRAY_LEN (orig)) ;
-               dump_[+ (get "name") +]_array ("first", first, ARRAY_LEN (first)) ;
-               exit (1) ;
-               } ;
-
-       puts ("ok") ;
-} /* test_endswap_[+ (get "name") +] */
-[+ ENDFOR int_type
-+]
-
-[+ FOR int_size +]
-static void
-test_psf_put_be[+ (get "name") +] (void)
-{      const char *test = "[+ (get "strval") +]" ;
-       uint8_t array [32] ;
-       int k ;
-
-       printf ("    %-40s : ", __func__) ;
-       fflush (stdout) ;
-
-       for (k = 0 ; k < 10 ; k++)
-       {       memset (array, 0, sizeof (array)) ;
-
-               psf_put_be[+ (get "name") +] (array, k, [+ (get "value") +]) ;
-               if (memcmp (array + k, test, sizeof ([+ (get "typename") +])) != 0)
-               {       printf ("\n\nLine %d : Put failed at index %d.\n", __LINE__, k) ;
-                       exit (1) ;
-                       } ;
-               if (psf_get_be[+ (get "name") +] (array, k) != [+ (get "value") +])
-               {       printf ("\n\nLine %d : Get failed at index %d.\n", __LINE__, k) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       puts ("ok") ;
-} /* test_psf_put_be[+ (get "name") +] */
-[+ ENDFOR int_size
-+]
-
-void
-test_endswap (void)
-{
-[+ FOR int_type
-+]     test_endswap_[+ (get "name") +] () ;
-[+ ENDFOR int_type
-+]
-
-[+ FOR int_size
-+]     test_psf_put_be[+ (get "name") +] () ;
-[+ ENDFOR int_endsize
-+]
-
-} /* test_endswap */
-
diff --git a/libs/libsndfile/src/test_file_io.c b/libs/libsndfile/src/test_file_io.c
deleted file mode 100644 (file)
index 08fcceb..0000000
+++ /dev/null
@@ -1,438 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <string.h>
-#include <errno.h>
-#include <inttypes.h>
-
-#include "common.h"
-
-#include "test_main.h"
-
-static void make_data (int *data, int len, int seed) ;
-
-static void file_open_test (const char *filename) ;
-static void file_read_write_test (const char *filename) ;
-static void file_truncate_test (const char *filename) ;
-
-static void test_open_or_die (SF_PRIVATE *psf, int linenum) ;
-static void test_close_or_die (SF_PRIVATE *psf, int linenum) ;
-
-static void test_write_or_die  (SF_PRIVATE *psf, void *data, sf_count_t bytes, sf_count_t items, sf_count_t new_position, int linenum) ;
-static void test_read_or_die   (SF_PRIVATE *psf, void *data, sf_count_t bytes, sf_count_t items, sf_count_t new_position, int linenum) ;
-static void test_equal_or_die  (int *array1, int *array2, int len, int linenum) ;
-static void test_seek_or_die (SF_PRIVATE *psf, sf_count_t offset, int whence, sf_count_t new_position, int linenum) ;
-
-
-
-/*==============================================================================
-** Actual test functions.
-*/
-
-static void
-file_open_test (const char *filename)
-{      SF_PRIVATE sf_data, *psf ;
-       int             error ;
-
-       print_test_name ("Testing file open") ;
-
-       memset (&sf_data, 0, sizeof (sf_data)) ;
-       psf = &sf_data ;
-
-       /* Ensure that the file doesn't already exist. */
-       if (unlink (filename) != 0 && errno != ENOENT)
-       {       printf ("\n\nLine %d: unlink failed (%d) : %s\n\n", __LINE__, errno, strerror (errno)) ;
-               exit (1) ;
-               } ;
-
-       psf->file.mode = SFM_READ ;
-       snprintf (psf->file.path.c, sizeof (psf->file.path.c), "%s", filename) ;
-
-       /* Test that open for read fails if the file doesn't exist. */
-       error = psf_fopen (psf) ;
-       if (error == 0)
-       {       printf ("\n\nLine %d: psf_fopen() should have failed.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       /* Reset error to zero. */
-       psf->error = SFE_NO_ERROR ;
-
-       /* Test file open in write mode. */
-       psf->file.mode = SFM_WRITE ;
-       test_open_or_die (psf, __LINE__) ;
-
-       test_close_or_die (psf, __LINE__) ;
-
-       unlink (psf->file.path.c) ;
-
-       /* Test file open in read/write mode for a non-existant file. */
-       psf->file.mode = SFM_RDWR ;
-       test_open_or_die (psf, __LINE__) ;
-
-       test_close_or_die (psf, __LINE__) ;
-
-       /* Test file open in read/write mode for an existing file. */
-       psf->file.mode = SFM_RDWR ;
-       test_open_or_die (psf, __LINE__) ;
-
-       test_close_or_die (psf, __LINE__) ;
-
-       unlink (psf->file.path.c) ;
-       puts ("ok") ;
-} /* file_open_test */
-
-static void
-file_read_write_test (const char *filename)
-{      static int data_out     [512] ;
-       static int data_in      [512] ;
-
-       SF_PRIVATE sf_data, *psf ;
-       sf_count_t retval ;
-
-       /*
-       ** Open a new file and write two blocks of data to the file. After each
-       ** write, test that psf_get_filelen() returns the new length.
-       */
-
-       print_test_name ("Testing file write") ;
-
-       memset (&sf_data, 0, sizeof (sf_data)) ;
-       psf = &sf_data ;
-       snprintf (psf->file.path.c, sizeof (psf->file.path.c), "%s", filename) ;
-
-       /* Test file open in write mode. */
-       psf->file.mode = SFM_WRITE ;
-       test_open_or_die (psf, __LINE__) ;
-
-       make_data (data_out, ARRAY_LEN (data_out), 1) ;
-       test_write_or_die (psf, data_out, sizeof (data_out [0]), ARRAY_LEN (data_out), sizeof (data_out), __LINE__) ;
-
-       if ((retval = psf_get_filelen (psf)) != sizeof (data_out))
-       {       printf ("\n\nLine %d: file length after write is not correct (%" PRId64 " should be %zd).\n\n", __LINE__, retval, sizeof (data_out)) ;
-               if (retval == 0)
-                       printf ("An fsync() may be necessary before fstat() in psf_get_filelen().\n\n") ;
-               exit (1) ;
-               } ;
-
-       make_data (data_out, ARRAY_LEN (data_out), 2) ;
-       test_write_or_die (psf, data_out, ARRAY_LEN (data_out), sizeof (data_out [0]), 2 * sizeof (data_out), __LINE__) ;
-
-       if ((retval = psf_get_filelen (psf)) != 2 * sizeof (data_out))
-       {       printf ("\n\nLine %d: file length after write is not correct. (%" PRId64 " should be %zd)\n\n", __LINE__, retval, 2 * sizeof (data_out)) ;
-               exit (1) ;
-               } ;
-
-       test_close_or_die (psf, __LINE__) ;
-       puts ("ok") ;
-
-       /*
-       ** Now open the file in read mode, check the file length and check
-       ** that the data is correct.
-       */
-
-       print_test_name ("Testing file read") ;
-
-       /* Test file open in write mode. */
-       psf->file.mode = SFM_READ ;
-       test_open_or_die (psf, __LINE__) ;
-
-       make_data (data_out, ARRAY_LEN (data_out), 1) ;
-       test_read_or_die (psf, data_in, 1, sizeof (data_in), sizeof (data_in), __LINE__) ;
-       test_equal_or_die       (data_out, data_in, ARRAY_LEN (data_out), __LINE__) ;
-
-       make_data (data_out, ARRAY_LEN (data_out), 2) ;
-       test_read_or_die (psf, data_in, sizeof (data_in [0]), ARRAY_LEN (data_in), 2 * sizeof (data_in), __LINE__) ;
-       test_equal_or_die       (data_out, data_in, ARRAY_LEN (data_out), __LINE__) ;
-
-       test_close_or_die (psf, __LINE__) ;
-
-       puts ("ok") ;
-
-       /*
-       ** Open the file in read/write mode, seek around a bit and then seek to
-       ** the end of the file and write another block of data (3rd block). Then
-       ** go back and check that all three blocks are correct.
-       */
-
-       print_test_name ("Testing file seek") ;
-
-       /* Test file open in read/write mode. */
-       psf->file.mode = SFM_RDWR ;
-       test_open_or_die (psf, __LINE__) ;
-
-       test_seek_or_die (psf, 0, SEEK_SET, 0, __LINE__) ;
-       test_seek_or_die (psf, 0, SEEK_END, 2 * SIGNED_SIZEOF (data_out), __LINE__) ;
-       test_seek_or_die (psf, -1 * SIGNED_SIZEOF (data_out), SEEK_CUR, (sf_count_t) sizeof (data_out), __LINE__) ;
-
-       test_seek_or_die (psf, SIGNED_SIZEOF (data_out), SEEK_CUR, 2 * SIGNED_SIZEOF (data_out), __LINE__) ;
-       make_data (data_out, ARRAY_LEN (data_out), 3) ;
-       test_write_or_die (psf, data_out, sizeof (data_out [0]), ARRAY_LEN (data_out), 3 * sizeof (data_out), __LINE__) ;
-
-       test_seek_or_die (psf, 0, SEEK_SET, 0, __LINE__) ;
-       make_data (data_out, ARRAY_LEN (data_out), 1) ;
-       test_read_or_die (psf, data_in, 1, sizeof (data_in), sizeof (data_in), __LINE__) ;
-       test_equal_or_die       (data_out, data_in, ARRAY_LEN (data_out), __LINE__) ;
-
-       test_seek_or_die (psf, 2 * SIGNED_SIZEOF (data_out), SEEK_SET, 2 * SIGNED_SIZEOF (data_out), __LINE__) ;
-       make_data (data_out, ARRAY_LEN (data_out), 3) ;
-       test_read_or_die (psf, data_in, 1, sizeof (data_in), 3 * sizeof (data_in), __LINE__) ;
-       test_equal_or_die       (data_out, data_in, ARRAY_LEN (data_out), __LINE__) ;
-
-       test_seek_or_die (psf, SIGNED_SIZEOF (data_out), SEEK_SET, SIGNED_SIZEOF (data_out), __LINE__) ;
-       make_data (data_out, ARRAY_LEN (data_out), 2) ;
-       test_read_or_die (psf, data_in, 1, sizeof (data_in), 2 * sizeof (data_in), __LINE__) ;
-       test_equal_or_die       (data_out, data_in, ARRAY_LEN (data_out), __LINE__) ;
-
-       test_close_or_die (psf, __LINE__) ;
-       puts ("ok") ;
-
-       /*
-       ** Now test operations with a non-zero psf->fileoffset field. This field
-       ** sets an artificial file start positions so that a seek to the start of
-       ** the file will actually be a seek to the value given by psf->fileoffset.
-       */
-
-       print_test_name ("Testing file offset") ;
-
-       /* Test file open in read/write mode. */
-       psf->file.mode = SFM_RDWR ;
-       psf->fileoffset = sizeof (data_out [0]) * ARRAY_LEN (data_out) ;
-       test_open_or_die (psf, __LINE__) ;
-
-       if ((retval = psf_get_filelen (psf)) != 3 * sizeof (data_out))
-       {       printf ("\n\nLine %d: file length after write is not correct. (%" PRId64 " should be %zd)\n\n", __LINE__, retval, 3 * sizeof (data_out)) ;
-               exit (1) ;
-               } ;
-
-       test_seek_or_die (psf, SIGNED_SIZEOF (data_out), SEEK_SET, SIGNED_SIZEOF (data_out), __LINE__) ;
-       make_data (data_out, ARRAY_LEN (data_out), 5) ;
-       test_write_or_die (psf, data_out, sizeof (data_out [0]), ARRAY_LEN (data_out), 2 * sizeof (data_out), __LINE__) ;
-       test_close_or_die (psf, __LINE__) ;
-
-       /* final test with psf->fileoffset == 0. */
-
-       psf->file.mode = SFM_RDWR ;
-       psf->fileoffset = 0 ;
-       test_open_or_die (psf, __LINE__) ;
-
-       if ((retval = psf_get_filelen (psf)) != 3 * sizeof (data_out))
-       {       printf ("\n\nLine %d: file length after write is not correct. (%" PRId64 " should be %zd)\n\n", __LINE__, retval, 3 * sizeof (data_out)) ;
-               exit (1) ;
-               } ;
-
-       make_data (data_out, ARRAY_LEN (data_out), 1) ;
-       test_read_or_die (psf, data_in, 1, sizeof (data_in), sizeof (data_in), __LINE__) ;
-       test_equal_or_die       (data_out, data_in, ARRAY_LEN (data_out), __LINE__) ;
-
-       make_data (data_out, ARRAY_LEN (data_out), 2) ;
-       test_read_or_die (psf, data_in, 1, sizeof (data_in), 2 * sizeof (data_in), __LINE__) ;
-       test_equal_or_die       (data_out, data_in, ARRAY_LEN (data_out), __LINE__) ;
-
-       make_data (data_out, ARRAY_LEN (data_out), 5) ;
-       test_read_or_die (psf, data_in, 1, sizeof (data_in), 3 * sizeof (data_in), __LINE__) ;
-       test_equal_or_die       (data_out, data_in, ARRAY_LEN (data_out), __LINE__) ;
-
-       test_close_or_die (psf, __LINE__) ;
-
-       puts ("ok") ;
-} /* file_read_write_test */
-
-static void
-file_truncate_test (const char *filename)
-{      SF_PRIVATE sf_data, *psf ;
-       unsigned char buffer [256] ;
-       int k ;
-
-       /*
-       ** Open a new file and write two blocks of data to the file. After each
-       ** write, test that psf_get_filelen() returns the new length.
-       */
-
-       print_test_name ("Testing file truncate") ;
-
-       memset (&sf_data, 0, sizeof (sf_data)) ;
-       memset (buffer, 0xEE, sizeof (buffer)) ;
-
-       psf = &sf_data ;
-       snprintf (psf->file.path.c, sizeof (psf->file.path.c), "%s", filename) ;
-
-       /*
-       ** Open the file write mode, write 0xEE data and then extend the file
-       ** using truncate (the extended data should be 0x00).
-       */
-       psf->file.mode = SFM_WRITE ;
-       test_open_or_die (psf, __LINE__) ;
-       test_write_or_die (psf, buffer, sizeof (buffer) / 2, 1, sizeof (buffer) / 2, __LINE__) ;
-       psf_ftruncate (psf, sizeof (buffer)) ;
-       test_close_or_die (psf, __LINE__) ;
-
-       /* Open the file in read mode and check the data. */
-       psf->file.mode = SFM_READ ;
-       test_open_or_die (psf, __LINE__) ;
-       test_read_or_die (psf, buffer, sizeof (buffer), 1, sizeof (buffer), __LINE__) ;
-       test_close_or_die (psf, __LINE__) ;
-
-       for (k = 0 ; k < SIGNED_SIZEOF (buffer) / 2 ; k++)
-               if (buffer [k] != 0xEE)
-               {       printf ("\n\nLine %d : buffer [%d] = %d (should be 0xEE)\n\n", __LINE__, k, buffer [k]) ;
-                       exit (1) ;
-                       } ;
-
-       for (k = SIGNED_SIZEOF (buffer) / 2 ; k < SIGNED_SIZEOF (buffer) ; k++)
-               if (buffer [k] != 0)
-               {       printf ("\n\nLine %d : buffer [%d] = %d (should be 0)\n\n", __LINE__, k, buffer [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Open the file in read/write and shorten the file using truncate. */
-       psf->file.mode = SFM_RDWR ;
-       test_open_or_die (psf, __LINE__) ;
-       psf_ftruncate (psf, sizeof (buffer) / 4) ;
-       test_close_or_die (psf, __LINE__) ;
-
-       /* Check the file length. */
-       psf->file.mode = SFM_READ ;
-       test_open_or_die (psf, __LINE__) ;
-       test_seek_or_die (psf, 0, SEEK_END, SIGNED_SIZEOF (buffer) / 4, __LINE__) ;
-       test_close_or_die (psf, __LINE__) ;
-
-       puts ("ok") ;
-} /* file_truncate_test */
-
-/*==============================================================================
-** Testing helper functions.
-*/
-
-static void
-test_open_or_die (SF_PRIVATE *psf, int linenum)
-{      int             error ;
-
-       /* Test that open for read fails if the file doesn't exist. */
-       error = psf_fopen (psf) ;
-       if (error)
-       {       printf ("\n\nLine %d: psf_fopen() failed : %s\n\n", linenum, strerror (errno)) ;
-               exit (1) ;
-               } ;
-
-} /* test_open_or_die */
-
-static void
-test_close_or_die (SF_PRIVATE *psf, int linenum)
-{
-       psf_fclose (psf) ;
-       if (psf_file_valid (psf))
-       {       printf ("\n\nLine %d: psf->file.filedes should not be valid.\n\n", linenum) ;
-               exit (1) ;
-               } ;
-
-} /* test_close_or_die */
-
-static void
-test_write_or_die (SF_PRIVATE *psf, void *data, sf_count_t bytes, sf_count_t items, sf_count_t new_position, int linenum)
-{      sf_count_t      retval ;
-
-       retval = psf_fwrite (data, bytes, items, psf) ;
-       if (retval != items)
-       {       printf ("\n\nLine %d: psf_write() returned %" PRId64 " (should be %" PRId64 ")\n\n", linenum, retval, items) ;
-               exit (1) ;
-               } ;
-
-       if ((retval = psf_ftell (psf)) != new_position)
-       {       printf ("\n\nLine %d: file length after write is not correct. (%" PRId64 " should be %" PRId64 ")\n\n", linenum, retval, new_position) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_write_or_die */
-
-static void
-test_read_or_die (SF_PRIVATE *psf, void *data, sf_count_t bytes, sf_count_t items, sf_count_t new_position, int linenum)
-{      sf_count_t      retval ;
-
-       retval = psf_fread (data, bytes, items, psf) ;
-       if (retval != items)
-       {       printf ("\n\nLine %d: psf_write() returned %" PRId64 " (should be %" PRId64 ")\n\n", linenum, retval, items) ;
-               exit (1) ;
-               } ;
-
-       if ((retval = psf_ftell (psf)) != new_position)
-       {       printf ("\n\nLine %d: file length after write is not correct. (%" PRId64 " should be %" PRId64 ")\n\n", linenum, retval, new_position) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_write_or_die */
-
-static void
-test_seek_or_die (SF_PRIVATE *psf, sf_count_t offset, int whence, sf_count_t new_position, int linenum)
-{      sf_count_t retval ;
-
-       retval = psf_fseek (psf, offset, whence) ;
-
-       if (retval != new_position)
-       {       printf ("\n\nLine %d: psf_fseek() failed. New position is %" PRId64 " (should be %" PRId64 ").\n\n",
-                       linenum, retval, new_position) ;
-               exit (1) ;
-               } ;
-
-} /* test_seek_or_die */
-
-static void
-test_equal_or_die      (int *array1, int *array2, int len, int linenum)
-{      int k ;
-
-       for (k = 0 ; k < len ; k++)
-               if (array1 [k] != array2 [k])
-                       printf ("\n\nLine %d: error at index %d (%d != %d).\n\n",
-                               linenum, k, array1 [k], array2 [k]) ;
-
-       return ;
-} /* test_equal_or_die */
-
-static void
-make_data (int *data, int len, int seed)
-{      int k ;
-
-       srand (seed * 3333333 + 14756123) ;
-
-       for (k = 0 ; k < len ; k++)
-               data [k] = rand () ;
-
-} /* make_data */
-
-void
-test_file_io (void)
-{      const char *filename = "file_io.dat" ;
-
-       file_open_test  (filename) ;
-       file_read_write_test    (filename) ;
-       file_truncate_test (filename) ;
-
-       unlink (filename) ;
-} /* main */
-
diff --git a/libs/libsndfile/src/test_float.c b/libs/libsndfile/src/test_float.c
deleted file mode 100644 (file)
index 0787989..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-** Copyright (C) 2006-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <errno.h>
-#include <math.h>
-
-#include "common.h"
-#include "test_main.h"
-
-void
-test_float_convert (void)
-{      static float data [] =
-       {       0.0, 1.0, -1.0, 1.0 * M_PI, -1.0 * M_PI,
-               1e9, -1e9, 1e-9, -1e-9, 1e-10, -1e-10,
-               1e-19, -1e-19, 1e19, -1e19, 1e-20, -1e-20,
-               } ;
-
-       int k ;
-
-       print_test_name (__func__) ;
-
-       for (k = 0 ; k < ARRAY_LEN (data) ; k++)
-       {       unsigned char bytes [4] ;
-               float test ;
-
-               float32_le_write (data [k], bytes) ;
-               test = float32_le_read (bytes) ;
-
-               if (fabs (data [k] - test) > 1e-20)
-               {       printf ("\n\nLine %d : Test %d, little endian error %.15g -> %.15g.\n\n", __LINE__, k, data [k], test) ;
-                       exit (1) ;
-                       } ;
-
-               float32_be_write (data [k], bytes) ;
-               test = float32_be_read (bytes) ;
-
-               if (fabs (data [k] - test) > 1e-20)
-               {       printf ("\n\nLine %d : Test %d, big endian error %.15g -> %.15g.\n\n", __LINE__, k, data [k], test) ;
-                       exit (1) ;
-                       } ;
-
-               } ;
-
-       puts ("ok") ;
-} /* test_float_convert */
-
-void
-test_double_convert (void)
-{      static double data [] =
-       {       0.0, 1.0, -1.0, 1.0 * M_PI, -1.0 * M_PI,
-               1e9, -1e9, 1e-9, -1e-9, 1e-10, -1e-10,
-               1e-19, -1e-19, 1e19, -1e19, 1e-20, -1e-20,
-               } ;
-
-       int k ;
-
-       print_test_name (__func__) ;
-
-       for (k = 0 ; k < ARRAY_LEN (data) ; k++)
-       {       unsigned char bytes [8] ;
-               double test ;
-
-               double64_le_write (data [k], bytes) ;
-               test = double64_le_read (bytes) ;
-
-               if (fabs (data [k] - test) > 1e-20)
-               {       printf ("\n\nLine %d : Test %d, little endian error %.15g -> %.15g.\n\n", __LINE__, k, data [k], test) ;
-                       exit (1) ;
-                       } ;
-
-               double64_be_write (data [k], bytes) ;
-               test = double64_be_read (bytes) ;
-
-               if (fabs (data [k] - test) > 1e-20)
-               {       printf ("\n\nLine %d : Test %d, big endian error %.15g -> %.15g.\n\n", __LINE__, k, data [k], test) ;
-                       exit (1) ;
-                       } ;
-
-               } ;
-
-       puts ("ok") ;
-} /* test_double_convert */
-
diff --git a/libs/libsndfile/src/test_ima_oki_adpcm.c b/libs/libsndfile/src/test_ima_oki_adpcm.c
deleted file mode 100644 (file)
index 6c937d1..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
-** Copyright (C) 2007-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (c) 2007 <robs@users.sourceforge.net>
-**
-** This library is free software; you can redistribute it and/or modify it
-** under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or (at
-** your option) any later version.
-**
-** This library is distributed in the hope that it will be useful, but
-** WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
-** General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this library.  If not, write to the Free Software Foundation,
-** Fifth Floor, 51 Franklin Street, Boston, MA 02111-1301, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-
-#include "test_main.h"
-
-#include "ima_oki_adpcm.c"
-
-static const unsigned char test_codes [] =
-{      0x08, 0x08, 0x04, 0x7f, 0x72, 0xf7, 0x9f, 0x7c, 0xd7, 0xbc, 0x7a, 0xa7, 0xb8,
-       0x4b, 0x0b, 0x38, 0xf6, 0x9d, 0x7a, 0xd7, 0xbc, 0x7a, 0xd7, 0xa8, 0x6c, 0x81,
-       0x98, 0xe4, 0x0e, 0x7a, 0xd7, 0x9e, 0x7b, 0xc7, 0xab, 0x7a, 0x85, 0xc0, 0xb3,
-       0x8f, 0x58, 0xd7, 0xad, 0x7a, 0xd7, 0xad, 0x7a, 0x87, 0xd0, 0x2b, 0x0e, 0x48,
-       0xd7, 0xad, 0x78, 0xf7, 0xbc, 0x7a, 0xb7, 0xa8, 0x4b, 0x88, 0x18, 0xd5, 0x8d,
-       0x6a, 0xa4, 0x98, 0x08, 0x00, 0x80, 0x88,
-} ;
-
-static const short test_pcm [] =
-{      32, 0, 32, 0, 32, 320, 880, -336, 2304, 4192, -992, 10128, 5360, -16352,
-       30208, 2272, -31872, 14688, -7040, -32432, 14128, -1392, -15488, 22960,
-       1232, -1584, 21488, -240, 2576, -15360, 960, -1152, -30032, 10320, 1008,
-       -30032, 16528, 1008, -30032, 16528, -5200, -30592, 15968, 448, -30592,
-       15968, 448, -2368, 30960, 3024, -80, 8384, 704, -1616, -29168, -1232, 1872,
-       -32768, 13792, -1728, -32768, 13792, 4480, -32192, 14368, -7360, -32752,
-       13808, -1712, -21456, 16992, 1472, -1344, 26848, -1088, 2016, -17728, 208,
-       -2112, -32768, 1376, -1728, -32768, 13792, -1728, -32768, 13792, -1728,
-       -32768, 13792, -1728, -32768, 13792, -1728, -4544, 32767, -1377, 1727,
-       15823, -2113, 207, -27345, 591, -2513, -32768, 13792, -1728, -32768, 13792,
-       10688, -31632, 14928, -6800, -32192, 14368, -1152, -20896, 17552, 2032,
-       -784, 22288, 560, -2256, -4816, 2176, 64, -21120, 9920, 6816, -24224, 16128,
-       608, -13488, 9584, 272, -2544, 16, -2304, -192, 1728, -16, 1568, 128, -1184,
-} ;
-
-
-static void
-test_oki_adpcm (void)
-{
-       IMA_OKI_ADPCM adpcm ;
-       unsigned char code ;
-       int i, j ;
-
-       print_test_name ("Testing ima/oki encoder") ;
-
-       ima_oki_adpcm_init (&adpcm, IMA_OKI_ADPCM_TYPE_OKI) ;
-       for (i = 0 ; i < ARRAY_LEN (test_codes) ; i++)
-               for (j = 0, code = test_codes [i] ; j < 2 ; j++, code <<= 4)
-                       if (adpcm_decode (&adpcm, code >> 4) != test_pcm [2 * i + j])
-                       {       printf ("\n\nFail at i = %d, j = %d.\n\n", i, j) ;
-                               exit (1) ;
-                               } ;
-
-       puts ("ok") ;
-
-       print_test_name ("Testing ima/oki decoder") ;
-
-       ima_oki_adpcm_init (&adpcm, IMA_OKI_ADPCM_TYPE_OKI) ;
-       for (i = 0 ; i < ARRAY_LEN (test_pcm) - 1 ; i += 2)
-       {       code = adpcm_encode (&adpcm, test_pcm [i]) ;
-               code = (code << 4) | adpcm_encode (&adpcm, test_pcm [i + 1]) ;
-               if (code != test_codes [i / 2])
-                       {       printf ("\n\nFail at i = %d, %d should be %d\n\n", i, code, test_codes [i / 2]) ;
-                               exit (1) ;
-                               } ;
-               } ;
-
-       puts ("ok") ;
-} /* test_oki_adpcm */
-
-static void
-test_oki_adpcm_block (void)
-{
-       IMA_OKI_ADPCM adpcm ;
-       int k ;
-
-       if (ARRAY_LEN (adpcm.pcm) < ARRAY_LEN (test_pcm))
-       {       printf ("\n\nLine %d : ARRAY_LEN (adpcm->pcm) > ARRAY_LEN (test_pcm) (%d > %d).\n\n", __LINE__, ARRAY_LEN (adpcm.pcm), ARRAY_LEN (test_pcm)) ;
-               exit (1) ;
-               } ;
-
-       if (ARRAY_LEN (adpcm.codes) < ARRAY_LEN (test_codes))
-       {       printf ("\n\nLine %d : ARRAY_LEN (adcodes->codes) > ARRAY_LEN (test_codes).n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       print_test_name ("Testing ima/oki block encoder") ;
-
-       ima_oki_adpcm_init (&adpcm, IMA_OKI_ADPCM_TYPE_OKI) ;
-
-       memcpy (adpcm.pcm, test_pcm, sizeof (adpcm.pcm [0]) * ARRAY_LEN (test_pcm)) ;
-       adpcm.pcm_count = ARRAY_LEN (test_pcm) ;
-       adpcm.code_count = 13 ;
-
-       ima_oki_adpcm_encode_block (&adpcm) ;
-
-       if (adpcm.code_count * 2 != ARRAY_LEN (test_pcm))
-       {       printf ("\n\nLine %d : %d * 2 != %d\n\n", __LINE__, adpcm.code_count * 2, ARRAY_LEN (test_pcm)) ;
-               exit (1) ;
-               } ;
-
-       for (k = 0 ; k < ARRAY_LEN (test_codes) ; k++)
-               if (adpcm.codes [k] != test_codes [k])
-               {       printf ("\n\nLine %d : Fail at k = %d, %d should be %d\n\n", __LINE__, k, adpcm.codes [k], test_codes [k]) ;
-                       exit (1) ;
-                       } ;
-
-       puts ("ok") ;
-
-       print_test_name ("Testing ima/oki block decoder") ;
-
-       ima_oki_adpcm_init (&adpcm, IMA_OKI_ADPCM_TYPE_OKI) ;
-
-       memcpy (adpcm.codes, test_codes, sizeof (adpcm.codes [0]) * ARRAY_LEN (test_codes)) ;
-       adpcm.code_count = ARRAY_LEN (test_codes) ;
-       adpcm.pcm_count = 13 ;
-
-       ima_oki_adpcm_decode_block (&adpcm) ;
-
-       if (adpcm.pcm_count != 2 * ARRAY_LEN (test_codes))
-       {       printf ("\n\nLine %d : %d * 2 != %d\n\n", __LINE__, adpcm.pcm_count, 2 * ARRAY_LEN (test_codes)) ;
-               exit (1) ;
-               } ;
-
-       for (k = 0 ; k < ARRAY_LEN (test_pcm) ; k++)
-               if (adpcm.pcm [k] != test_pcm [k])
-               {       printf ("\n\nLine %d : Fail at i = %d, %d should be %d.\n\n", __LINE__, k, adpcm.pcm [k], test_pcm [k]) ;
-                       exit (1) ;
-                       } ;
-
-       puts ("ok") ;
-} /* test_oki_adpcm_block */
-
-void
-test_ima_oki_adpcm (void)
-{
-       test_oki_adpcm () ;
-       test_oki_adpcm_block () ;
-} /* main */
-
diff --git a/libs/libsndfile/src/test_log_printf.c b/libs/libsndfile/src/test_log_printf.c
deleted file mode 100644 (file)
index e1806a1..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
-** Copyright (C) 2003-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <errno.h>
-
-#include "common.h"
-
-#include "test_main.h"
-
-#define        CMP_0_ARGS(line, err, fmt)      \
-       {       psf->parselog.indx = 0 ;                        \
-               snprintf (buffer, sizeof (buffer), (fmt)) ;     \
-               psf_log_printf (psf, (fmt)) ;                           \
-               err += compare_strings_or_die (line, fmt, buffer, psf->parselog.buf) ;  \
-               }
-
-#define        CMP_2_ARGS(line, err, fmt, a)   \
-       {       psf->parselog.indx = 0 ;                                \
-               snprintf (buffer, sizeof (buffer), (fmt), (a), (a)) ;   \
-               psf_log_printf (psf, (fmt), (a), (a)) ;                                 \
-               err += compare_strings_or_die (line, fmt, buffer, psf->parselog.buf) ;  \
-               }
-
-#define        CMP_4_ARGS(line, err, fmt, a)   \
-       {       psf->parselog.indx = 0 ;                                \
-               snprintf (buffer, sizeof (buffer), (fmt), (a), (a), (a), (a)) ; \
-               psf_log_printf (psf, (fmt), (a), (a), (a), (a)) ;                               \
-               err += compare_strings_or_die (line, fmt, buffer, psf->parselog.buf) ;  \
-               }
-
-#define        CMP_5_ARGS(line, err, fmt, a)   \
-       {       psf->parselog.indx = 0 ;                                \
-               snprintf (buffer, sizeof (buffer), (fmt), (a), (a), (a), (a), (a)) ;    \
-               psf_log_printf (psf, (fmt), (a), (a), (a), (a), (a)) ;                                  \
-               err += compare_strings_or_die (line, fmt, buffer, psf->parselog.buf) ;          \
-               }
-
-#define        CMP_6_ARGS(line, err, fmt, a)   \
-       {       psf->parselog.indx = 0 ;                                \
-               snprintf (buffer, sizeof (buffer), (fmt), (a), (a), (a), (a), (a), (a)) ;       \
-               psf_log_printf (psf, (fmt), (a), (a), (a), (a), (a), (a)) ;                                     \
-               err += compare_strings_or_die (line, fmt, buffer, psf->parselog.buf) ;                  \
-               }
-
-static int
-compare_strings_or_die (int linenum, const char *fmt, const char* s1, const char* s2)
-{      int errors = 0 ;
-/*-puts (s1) ;puts (s2) ;-*/
-
-       if (strcmp (s1, s2) != 0)
-       {       printf ("\n\nLine %d: string compare mismatch:\n\t", linenum) ;
-               printf ("\"%s\"\n", fmt) ;
-               printf ("\t\"%s\"\n\t\"%s\"\n", s1, s2) ;
-               errors ++ ;
-               } ;
-
-       return errors ;
-} /* compare_strings_or_die */
-
-void
-test_log_printf (void)
-{      static char buffer [2048] ;
-       SF_PRIVATE      sf_private, *psf ;
-       int                     k, errors = 0 ;
-       int                     int_values [] = { 0, 1, 12, 123, 1234, 123456, -1, -12, -123, -1234, -123456 } ;
-
-       print_test_name ("Testing psf_log_printf") ;
-
-       psf = &sf_private ;
-       memset (psf, 0, sizeof (sf_private)) ;
-
-       CMP_0_ARGS (__LINE__, errors, " ->%%<- ") ;
-
-       /* Test printing of ints. */
-       for (k = 0 ; k < ARRAY_LEN (int_values) ; k++)
-               CMP_6_ARGS (__LINE__, errors, "int A : %d, % d, %4d, % 4d, %04d, % 04d", int_values [k]) ;
-
-       for (k = 0 ; k < ARRAY_LEN (int_values) ; k++)
-               CMP_5_ARGS (__LINE__, errors, "int B : %+d, %+4d, %+04d, %-d, %-4d", int_values [k]) ;
-
-       for (k = 0 ; k < ARRAY_LEN (int_values) ; k++)
-               CMP_2_ARGS (__LINE__, errors, "int C : %- d, %- 4d", int_values [k]) ;
-
-       /* Test printing of unsigned ints. */
-       for (k = 0 ; k < ARRAY_LEN (int_values) ; k++)
-               CMP_4_ARGS (__LINE__, errors, "D : %u, %4u, %04u, %0u", int_values [k]) ;
-
-       /* Test printing of hex ints. */
-       for (k = 0 ; k < ARRAY_LEN (int_values) ; k++)
-               CMP_4_ARGS (__LINE__, errors, "E : %X, %4X, %04X, %0X", int_values [k]) ;
-
-       /* Test printing of strings. */
-       CMP_4_ARGS (__LINE__, errors, "B %s, %3s, %8s, %-8s", "str") ;
-
-       if (errors)
-       {       puts ("\nExiting due to errors.\n") ;
-               exit (1) ;
-               } ;
-
-       puts ("ok") ;
-} /* test_log_printf */
-
diff --git a/libs/libsndfile/src/test_main.c b/libs/libsndfile/src/test_main.c
deleted file mode 100644 (file)
index f51f7c9..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-** Copyright (C) 2008-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <errno.h>
-
-#include "test_main.h"
-
-int
-main (void)
-{
-       test_conversions () ;
-       test_endswap () ;
-       test_float_convert () ;
-       test_double_convert () ;
-
-       test_log_printf () ;
-       test_file_io () ;
-
-       test_audio_detect () ;
-       test_ima_oki_adpcm () ;
-
-       test_psf_strlcpy_crlf () ;
-       test_broadcast_var () ;
-       test_cart_var () ;
-
-       return 0 ;
-} /* main */
-
diff --git a/libs/libsndfile/src/test_main.h b/libs/libsndfile/src/test_main.h
deleted file mode 100644 (file)
index 6b2f28f..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-** Copyright (C) 2008-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-static inline void
-print_test_name (const char * name)
-{      printf ("    %-40s : ", name) ;
-       fflush (stdout) ;
-} /* print_test_name */
-
-
-
-void test_conversions (void) ;
-void test_endswap (void) ;
-void test_log_printf (void) ;
-void test_file_io (void) ;
-
-void test_float_convert (void) ;
-void test_double_convert (void) ;
-
-void test_audio_detect (void) ;
-void test_ima_oki_adpcm (void) ;
-
-void test_psf_strlcpy_crlf (void) ;
-void test_broadcast_var (void) ;
-
-void test_cart_var (void) ;
diff --git a/libs/libsndfile/src/test_strncpy_crlf.c b/libs/libsndfile/src/test_strncpy_crlf.c
deleted file mode 100644 (file)
index 774ced1..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-** Copyright (C) 2010-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "common.h"
-
-#include "test_main.h"
-
-void
-test_psf_strlcpy_crlf (void)
-{      const char *src = "a\nb\nc\n" ;
-       char *dest ;
-       int dest_len ;
-
-       print_test_name ("Testing psf_strlcpy_crlf") ;
-
-       for (dest_len = 3 ; dest_len < 30 ; dest_len++)
-       {       dest = calloc (1, dest_len + 1) ;
-               if (dest == NULL)
-               {       printf ("\n\nLine %d: calloc failed!\n\n", __LINE__) ;
-                       exit (1) ;
-                       } ;
-
-               dest [dest_len] = '\xea' ;
-
-               psf_strlcpy_crlf (dest, src, dest_len, sizeof (*src)) ;
-
-               if (dest [dest_len] != '\xea')
-               {       printf ("\n\nLine %d: buffer overrun for dest_len == %d\n\n", __LINE__, dest_len) ;
-                       exit (1) ;
-                       } ;
-
-               free (dest) ;
-               } ;
-
-       puts ("ok") ;
-} /* test_psf_strlcpy_crlf */
diff --git a/libs/libsndfile/src/txw.c b/libs/libsndfile/src/txw.c
deleted file mode 100644 (file)
index 16525df..0000000
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*===========================================================================
-** Yamaha TX16 Sampler Files.
-**
-** This header parser was written using information from the SoX source code
-** and trial and error experimentation. The code here however is all original.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <fcntl.h>
-#include       <string.h>
-#include       <ctype.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-#if (ENABLE_EXPERIMENTAL_CODE == 0)
-
-int
-txw_open       (SF_PRIVATE *psf)
-{      if (psf)
-               return SFE_UNIMPLEMENTED ;
-       return 0 ;
-} /* txw_open */
-
-#else
-
-/*------------------------------------------------------------------------------
-** Markers.
-*/
-
-#define TXW_DATA_OFFSET                32
-
-#define        TXW_LOOPED                      0x49
-#define        TXW_NO_LOOP                     0xC9
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int txw_read_header (SF_PRIVATE *psf) ;
-
-static sf_count_t txw_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t txw_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t txw_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t txw_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t txw_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-
-/*------------------------------------------------------------------------------
-** Public functions.
-*/
-
-/*
- * ftp://ftp.t0.or.at/pub/sound/tx16w/samples.yamaha
- * ftp://ftp.t0.or.at/pub/sound/tx16w/faq/tx16w.tec
- * http://www.t0.or.at/~mpakesch/tx16w/
- *
- * from tx16w.c sox 12.15: (7-Oct-98) (Mark Lakata and Leigh Smith)
- *  char filetype[6] "LM8953"
- *  nulls[10],
- *  dummy_aeg[6]
- *  format 0x49 = looped, 0xC9 = non-looped
- *  sample_rate 1 = 33 kHz, 2 = 50 kHz, 3 = 16 kHz
- *  atc_length[3] if sample rate 0, [2]&0xfe = 6: 33kHz, 0x10:50, 0xf6: 16,
- *                                     depending on [5] but to heck with it
- *  rpt_length[3] (these are for looped samples, attack and loop lengths)
- *  unused[2]
- */
-
-typedef struct
-{      unsigned char   format, srate, sr2, sr3 ;
-       unsigned short  srhash ;
-       unsigned int    attacklen, repeatlen ;
-} TXW_HEADER ;
-
-#define        ERROR_666       666
-
-int
-txw_open       (SF_PRIVATE *psf)
-{      int error ;
-
-       if (psf->file.mode != SFM_READ)
-               return SFE_UNIMPLEMENTED ;
-
-       if ((error = txw_read_header (psf)))
-                       return error ;
-
-       if (psf_fseek (psf, psf->dataoffset, SEEK_SET) != psf->dataoffset)
-               return SFE_BAD_SEEK ;
-
-       psf->read_short         = txw_read_s ;
-       psf->read_int           = txw_read_i ;
-       psf->read_float         = txw_read_f ;
-       psf->read_double        = txw_read_d ;
-
-       psf->seek = txw_seek ;
-
-       return 0 ;
-} /* txw_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-txw_read_header        (SF_PRIVATE *psf)
-{      BUF_UNION       ubuf ;
-       TXW_HEADER txwh ;
-       const char      *strptr ;
-
-       memset (&txwh, 0, sizeof (txwh)) ;
-       memset (ubuf.cbuf, 0, sizeof (ubuf.cbuf)) ;
-       psf_binheader_readf (psf, "pb", 0, ubuf.cbuf, 16) ;
-
-       if (memcmp (ubuf.cbuf, "LM8953\0\0\0\0\0\0\0\0\0\0", 16) != 0)
-               return ERROR_666 ;
-
-       psf_log_printf (psf, "Read only : Yamaha TX-16 Sampler (.txw)\nLM8953\n") ;
-
-       /* Jump 6 bytes (dummp_aeg), read format, read sample rate. */
-       psf_binheader_readf (psf, "j11", 6, &txwh.format, &txwh.srate) ;
-
-       /* 8 bytes (atc_length[3], rpt_length[3], unused[2]). */
-       psf_binheader_readf (psf, "e33j", &txwh.attacklen, &txwh.repeatlen, 2) ;
-       txwh.sr2 = (txwh.attacklen >> 16) & 0xFE ;
-       txwh.sr3 = (txwh.repeatlen >> 16) & 0xFE ;
-       txwh.attacklen &= 0x1FFFF ;
-       txwh.repeatlen &= 0x1FFFF ;
-
-       switch (txwh.format)
-       {       case TXW_LOOPED :
-                               strptr = "looped" ;
-                               break ;
-
-               case TXW_NO_LOOP :
-                               strptr = "non-looped" ;
-                               break ;
-
-               default :
-                               psf_log_printf (psf, " Format      : 0x%02x => ?????\n", txwh.format) ;
-                               return ERROR_666 ;
-               } ;
-
-       psf_log_printf (psf, " Format      : 0x%02X => %s\n", txwh.format, strptr) ;
-
-       strptr = NULL ;
-
-       switch (txwh.srate)
-       {       case 1 :
-                               psf->sf.samplerate = 33333 ;
-                               break ;
-
-               case 2 :
-                               psf->sf.samplerate = 50000 ;
-                               break ;
-
-               case 3 :
-                               psf->sf.samplerate = 16667 ;
-                               break ;
-
-               default :
-                       /* This is ugly and braindead. */
-                       txwh.srhash = ((txwh.sr2 & 0xFE) << 8) | (txwh.sr3 & 0xFE) ;
-                       switch (txwh.srhash)
-                       {       case ((0x6 << 8) | 0x52) :
-                                               psf->sf.samplerate = 33333 ;
-                                               break ;
-
-                               case ((0x10 << 8) | 0x52) :
-                                               psf->sf.samplerate = 50000 ;
-                                               break ;
-
-                               case ((0xF6 << 8) | 0x52) :
-                                               psf->sf.samplerate = 166667 ;
-                                               break ;
-
-                               default :
-                                               strptr = " Sample Rate : Unknown : forcing to 33333\n" ;
-                                               psf->sf.samplerate = 33333 ;
-                                               break ;
-                               } ;
-               } ;
-
-
-       if (strptr)
-               psf_log_printf (psf, strptr) ;
-       else if (txwh.srhash)
-               psf_log_printf (psf, " Sample Rate : %d (0x%X) => %d\n", txwh.srate, txwh.srhash, psf->sf.samplerate) ;
-       else
-               psf_log_printf (psf, " Sample Rate : %d => %d\n", txwh.srate, psf->sf.samplerate) ;
-
-       if (txwh.format == TXW_LOOPED)
-       {       psf_log_printf (psf, " Attack Len  : %d\n", txwh.attacklen) ;
-               psf_log_printf (psf, " Repeat Len  : %d\n", txwh.repeatlen) ;
-               } ;
-
-       psf->dataoffset = TXW_DATA_OFFSET ;
-       psf->datalength = psf->filelength - TXW_DATA_OFFSET ;
-       psf->sf.frames  = 2 * psf->datalength / 3 ;
-
-
-       if (psf->datalength % 3 == 1)
-               psf_log_printf (psf, "*** File seems to be truncated, %d extra bytes.\n",
-                       (int) (psf->datalength % 3)) ;
-
-       if (txwh.attacklen + txwh.repeatlen > psf->sf.frames)
-               psf_log_printf (psf, "*** File has been truncated.\n") ;
-
-       psf->sf.format = SF_FORMAT_TXW | SF_FORMAT_PCM_16 ;
-       psf->sf.channels = 1 ;
-       psf->sf.sections = 1 ;
-       psf->sf.seekable = SF_TRUE ;
-
-       return 0 ;
-} /* txw_read_header */
-
-static sf_count_t
-txw_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      BUF_UNION               ubuf ;
-       unsigned char   *ucptr ;
-       short                   sample ;
-       int                             k, bufferlen, readcount, count ;
-       sf_count_t              total = 0 ;
-
-       bufferlen = sizeof (ubuf.cbuf) / 3 ;
-       bufferlen -= (bufferlen & 1) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = psf_fread (ubuf.cbuf, 3, readcount, psf) ;
-
-               ucptr = ubuf.ucbuf ;
-               for (k = 0 ; k < readcount ; k += 2)
-               {       sample = (ucptr [0] << 8) | (ucptr [1] & 0xF0) ;
-                       ptr [total + k] = sample ;
-                       sample = (ucptr [2] << 8) | ((ucptr [1] & 0xF) << 4) ;
-                       ptr [total + k + 1] = sample ;
-                       ucptr += 3 ;
-                       } ;
-
-               total += count ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* txw_read_s */
-
-static sf_count_t
-txw_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      BUF_UNION               ubuf ;
-       unsigned char   *ucptr ;
-       short                   sample ;
-       int                             k, bufferlen, readcount, count ;
-       sf_count_t              total = 0 ;
-
-       bufferlen = sizeof (ubuf.cbuf) / 3 ;
-       bufferlen -= (bufferlen & 1) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = psf_fread (ubuf.cbuf, 3, readcount, psf) ;
-
-               ucptr = ubuf.ucbuf ;
-               for (k = 0 ; k < readcount ; k += 2)
-               {       sample = (ucptr [0] << 8) | (ucptr [1] & 0xF0) ;
-                       ptr [total + k] = sample << 16 ;
-                       sample = (ucptr [2] << 8) | ((ucptr [1] & 0xF) << 4) ;
-                       ptr [total + k + 1] = sample << 16 ;
-                       ucptr += 3 ;
-                       } ;
-
-               total += count ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* txw_read_i */
-
-static sf_count_t
-txw_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      BUF_UNION               ubuf ;
-       unsigned char   *ucptr ;
-       short                   sample ;
-       int                             k, bufferlen, readcount, count ;
-       sf_count_t              total = 0 ;
-       float                   normfact ;
-
-       if (psf->norm_float == SF_TRUE)
-               normfact = 1.0 / 0x8000 ;
-       else
-               normfact = 1.0 / 0x10 ;
-
-       bufferlen = sizeof (ubuf.cbuf) / 3 ;
-       bufferlen -= (bufferlen & 1) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = psf_fread (ubuf.cbuf, 3, readcount, psf) ;
-
-               ucptr = ubuf.ucbuf ;
-               for (k = 0 ; k < readcount ; k += 2)
-               {       sample = (ucptr [0] << 8) | (ucptr [1] & 0xF0) ;
-                       ptr [total + k] = normfact * sample ;
-                       sample = (ucptr [2] << 8) | ((ucptr [1] & 0xF) << 4) ;
-                       ptr [total + k + 1] = normfact * sample ;
-                       ucptr += 3 ;
-                       } ;
-
-               total += count ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* txw_read_f */
-
-static sf_count_t
-txw_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      BUF_UNION               ubuf ;
-       unsigned char   *ucptr ;
-       short                   sample ;
-       int                             k, bufferlen, readcount, count ;
-       sf_count_t              total = 0 ;
-       double                  normfact ;
-
-       if (psf->norm_double == SF_TRUE)
-               normfact = 1.0 / 0x8000 ;
-       else
-               normfact = 1.0 / 0x10 ;
-
-       bufferlen = sizeof (ubuf.cbuf) / 3 ;
-       bufferlen -= (bufferlen & 1) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : len ;
-               count = psf_fread (ubuf.cbuf, 3, readcount, psf) ;
-
-               ucptr = ubuf.ucbuf ;
-               for (k = 0 ; k < readcount ; k += 2)
-               {       sample = (ucptr [0] << 8) | (ucptr [1] & 0xF0) ;
-                       ptr [total + k] = normfact * sample ;
-                       sample = (ucptr [2] << 8) | ((ucptr [1] & 0xF) << 4) ;
-                       ptr [total + k + 1] = normfact * sample ;
-                       ucptr += 3 ;
-                       } ;
-
-               total += count ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* txw_read_d */
-
-static sf_count_t
-txw_seek (SF_PRIVATE *psf, int mode, sf_count_t offset)
-{      if (psf && mode)
-               return offset ;
-
-       return 0 ;
-} /* txw_seek */
-
-#endif
diff --git a/libs/libsndfile/src/ulaw.c b/libs/libsndfile/src/ulaw.c
deleted file mode 100644 (file)
index ded46e9..0000000
+++ /dev/null
@@ -1,1051 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <math.h>
-
-#include       "sndfile.h"
-#include       "common.h"
-
-static sf_count_t ulaw_read_ulaw2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t ulaw_read_ulaw2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t ulaw_read_ulaw2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t ulaw_read_ulaw2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t ulaw_write_s2ulaw (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t ulaw_write_i2ulaw (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t ulaw_write_f2ulaw (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t ulaw_write_d2ulaw (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-int
-ulaw_init (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_READ || psf->file.mode == SFM_RDWR)
-       {       psf->read_short         = ulaw_read_ulaw2s ;
-               psf->read_int           = ulaw_read_ulaw2i ;
-               psf->read_float         = ulaw_read_ulaw2f ;
-               psf->read_double        = ulaw_read_ulaw2d ;
-               } ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       psf->write_short        = ulaw_write_s2ulaw ;
-               psf->write_int          = ulaw_write_i2ulaw ;
-               psf->write_float        = ulaw_write_f2ulaw ;
-               psf->write_double       = ulaw_write_d2ulaw ;
-               } ;
-
-       psf->bytewidth = 1 ;
-       psf->blockwidth = psf->sf.channels ;
-
-       if (psf->filelength > psf->dataoffset)
-               psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset :
-                                                       psf->filelength - psf->dataoffset ;
-       else
-               psf->datalength = 0 ;
-
-       psf->sf.frames = psf->blockwidth > 0 ? psf->datalength / psf->blockwidth : 0 ;
-
-       return 0 ;
-} /* ulaw_init */
-
-/*==============================================================================
-*/
-
-static short ulaw_decode [256] =
-{      -32124, -31100, -30076, -29052, -28028, -27004, -25980, -24956,
-       -23932, -22908, -21884, -20860, -19836, -18812, -17788, -16764,
-       -15996, -15484, -14972, -14460, -13948, -13436, -12924, -12412,
-       -11900, -11388, -10876, -10364, -9852,  -9340,  -8828,  -8316,
-       -7932,  -7676,  -7420,  -7164,  -6908,  -6652,  -6396,  -6140,
-       -5884,  -5628,  -5372,  -5116,  -4860,  -4604,  -4348,  -4092,
-       -3900,  -3772,  -3644,  -3516,  -3388,  -3260,  -3132,  -3004,
-       -2876,  -2748,  -2620,  -2492,  -2364,  -2236,  -2108,  -1980,
-       -1884,  -1820,  -1756,  -1692,  -1628,  -1564,  -1500,  -1436,
-       -1372,  -1308,  -1244,  -1180,  -1116,  -1052,  -988,   -924,
-       -876,   -844,   -812,   -780,   -748,   -716,   -684,   -652,
-       -620,   -588,   -556,   -524,   -492,   -460,   -428,   -396,
-       -372,   -356,   -340,   -324,   -308,   -292,   -276,   -260,
-       -244,   -228,   -212,   -196,   -180,   -164,   -148,   -132,
-       -120,   -112,   -104,   -96,    -88,    -80,    -72,    -64,
-       -56,    -48,    -40,    -32,    -24,    -16,    -8,             0,
-
-       32124,  31100,  30076,  29052,  28028,  27004,  25980,  24956,
-       23932,  22908,  21884,  20860,  19836,  18812,  17788,  16764,
-       15996,  15484,  14972,  14460,  13948,  13436,  12924,  12412,
-       11900,  11388,  10876,  10364,  9852,   9340,   8828,   8316,
-       7932,   7676,   7420,   7164,   6908,   6652,   6396,   6140,
-       5884,   5628,   5372,   5116,   4860,   4604,   4348,   4092,
-       3900,   3772,   3644,   3516,   3388,   3260,   3132,   3004,
-       2876,   2748,   2620,   2492,   2364,   2236,   2108,   1980,
-       1884,   1820,   1756,   1692,   1628,   1564,   1500,   1436,
-       1372,   1308,   1244,   1180,   1116,   1052,   988,    924,
-       876,    844,    812,    780,    748,    716,    684,    652,
-       620,    588,    556,    524,    492,    460,    428,    396,
-       372,    356,    340,    324,    308,    292,    276,    260,
-       244,    228,    212,    196,    180,    164,    148,    132,
-       120,    112,    104,    96,             88,             80,             72,             64,
-       56,             48,             40,             32,             24,             16,             8,              0
-} ;
-
-static
-unsigned char ulaw_encode [8193] =
-{      0xff, 0xfe, 0xfe, 0xfd, 0xfd, 0xfc, 0xfc, 0xfb, 0xfb, 0xfa, 0xfa, 0xf9,
-       0xf9, 0xf8, 0xf8, 0xf7, 0xf7, 0xf6, 0xf6, 0xf5, 0xf5, 0xf4, 0xf4, 0xf3,
-       0xf3, 0xf2, 0xf2, 0xf1, 0xf1, 0xf0, 0xf0, 0xef, 0xef, 0xef, 0xef, 0xee,
-       0xee, 0xee, 0xee, 0xed, 0xed, 0xed, 0xed, 0xec, 0xec, 0xec, 0xec, 0xeb,
-       0xeb, 0xeb, 0xeb, 0xea, 0xea, 0xea, 0xea, 0xe9, 0xe9, 0xe9, 0xe9, 0xe8,
-       0xe8, 0xe8, 0xe8, 0xe7, 0xe7, 0xe7, 0xe7, 0xe6, 0xe6, 0xe6, 0xe6, 0xe5,
-       0xe5, 0xe5, 0xe5, 0xe4, 0xe4, 0xe4, 0xe4, 0xe3, 0xe3, 0xe3, 0xe3, 0xe2,
-       0xe2, 0xe2, 0xe2, 0xe1, 0xe1, 0xe1, 0xe1, 0xe0, 0xe0, 0xe0, 0xe0, 0xdf,
-       0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xde, 0xde, 0xde, 0xde, 0xde,
-       0xde, 0xde, 0xde, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdc,
-       0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
-       0xdb, 0xdb, 0xdb, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xd9,
-       0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
-       0xd8, 0xd8, 0xd8, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd6,
-       0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5,
-       0xd5, 0xd5, 0xd5, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd3,
-       0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2,
-       0xd2, 0xd2, 0xd2, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd0,
-       0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
-       0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xce,
-       0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
-       0xce, 0xce, 0xce, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
-       0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
-       0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcb,
-       0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
-       0xcb, 0xcb, 0xcb, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca,
-       0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xca, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9,
-       0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc8,
-       0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8,
-       0xc8, 0xc8, 0xc8, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
-       0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
-       0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc5,
-       0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5,
-       0xc5, 0xc5, 0xc5, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
-       0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
-       0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc2,
-       0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2,
-       0xc2, 0xc2, 0xc2, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
-       0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
-       0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xbf,
-       0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
-       0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
-       0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
-       0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
-       0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
-       0xbe, 0xbe, 0xbe, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
-       0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
-       0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbc,
-       0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
-       0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
-       0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
-       0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
-       0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
-       0xbb, 0xbb, 0xbb, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
-       0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba,
-       0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xba, 0xb9,
-       0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
-       0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9,
-       0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
-       0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
-       0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
-       0xb8, 0xb8, 0xb8, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
-       0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
-       0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb6,
-       0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
-       0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6,
-       0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
-       0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
-       0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5,
-       0xb5, 0xb5, 0xb5, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
-       0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
-       0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb3,
-       0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
-       0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
-       0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
-       0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
-       0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
-       0xb2, 0xb2, 0xb2, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
-       0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1,
-       0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb0,
-       0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
-       0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
-       0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
-       0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
-       0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
-       0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
-       0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
-       0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xae,
-       0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
-       0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
-       0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
-       0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
-       0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae, 0xae,
-       0xae, 0xae, 0xae, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
-       0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
-       0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
-       0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
-       0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
-       0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xac, 0xac, 0xac, 0xac, 0xac,
-       0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
-       0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
-       0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
-       0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,
-       0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xab,
-       0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
-       0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
-       0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
-       0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
-       0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab, 0xab,
-       0xab, 0xab, 0xab, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
-       0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
-       0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
-       0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
-       0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
-       0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9,
-       0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa8,
-       0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
-       0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
-       0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
-       0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
-       0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
-       0xa8, 0xa8, 0xa8, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7,
-       0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7,
-       0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7,
-       0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7,
-       0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7,
-       0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa7, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
-       0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
-       0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
-       0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
-       0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6,
-       0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa5,
-       0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
-       0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
-       0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
-       0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
-       0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
-       0xa5, 0xa5, 0xa5, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
-       0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
-       0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
-       0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
-       0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
-       0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
-       0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
-       0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
-       0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
-       0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
-       0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa2,
-       0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
-       0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
-       0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
-       0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
-       0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2,
-       0xa2, 0xa2, 0xa2, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1,
-       0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1,
-       0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1,
-       0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1,
-       0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1,
-       0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
-       0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
-       0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
-       0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
-       0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
-       0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0x9f,
-       0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-       0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-       0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-       0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-       0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-       0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-       0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-       0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-       0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-       0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f,
-       0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-       0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-       0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-       0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-       0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-       0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-       0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-       0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-       0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-       0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-       0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
-       0x9e, 0x9e, 0x9e, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d,
-       0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d,
-       0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d,
-       0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d,
-       0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d,
-       0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d,
-       0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d,
-       0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d,
-       0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d,
-       0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d,
-       0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9c,
-       0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c,
-       0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c,
-       0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c,
-       0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c,
-       0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c,
-       0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c,
-       0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c,
-       0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c,
-       0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c,
-       0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c,
-       0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-       0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-       0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-       0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-       0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-       0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-       0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-       0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-       0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-       0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-       0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
-       0x9b, 0x9b, 0x9b, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a,
-       0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a,
-       0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a,
-       0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a,
-       0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a,
-       0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a,
-       0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a,
-       0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a,
-       0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a,
-       0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a,
-       0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x99,
-       0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
-       0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
-       0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
-       0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
-       0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
-       0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
-       0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
-       0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
-       0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
-       0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
-       0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x98, 0x98,
-       0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-       0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-       0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-       0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-       0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-       0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-       0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-       0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-       0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-       0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
-       0x98, 0x98, 0x98, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
-       0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
-       0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
-       0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
-       0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
-       0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
-       0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
-       0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
-       0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
-       0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
-       0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x96,
-       0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
-       0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
-       0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
-       0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
-       0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
-       0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
-       0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
-       0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
-       0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
-       0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
-       0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x95, 0x95, 0x95, 0x95, 0x95,
-       0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
-       0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
-       0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
-       0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
-       0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
-       0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
-       0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
-       0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
-       0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
-       0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
-       0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-       0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-       0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-       0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-       0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-       0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-       0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-       0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-       0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-       0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
-       0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x93,
-       0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
-       0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
-       0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
-       0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
-       0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
-       0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
-       0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
-       0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
-       0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
-       0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
-       0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x92, 0x92,
-       0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-       0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-       0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-       0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-       0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-       0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-       0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-       0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-       0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-       0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
-       0x92, 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-       0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-       0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-       0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-       0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-       0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-       0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-       0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-       0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-       0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
-       0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x90,
-       0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-       0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-       0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-       0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-       0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-       0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-       0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-       0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-       0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-       0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
-       0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f,
-       0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
-       0x8e, 0x8e, 0x8e, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d,
-       0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8d, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c,
-       0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8c, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b,
-       0x8b, 0x8b, 0x8b, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a,
-       0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
-       0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
-       0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
-       0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
-       0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
-       0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
-       0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
-       0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
-       0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
-       0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
-       0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80
-} ;
-
-static inline void
-ulaw2s_array (unsigned char *buffer, int count, short *ptr)
-{      while (--count >= 0)
-               ptr [count] = ulaw_decode [(int) buffer [count]] ;
-} /* ulaw2s_array */
-
-static inline void
-ulaw2i_array (unsigned char *buffer, int count, int *ptr)
-{      while (--count >= 0)
-               ptr [count] = ulaw_decode [buffer [count]] << 16 ;
-} /* ulaw2i_array */
-
-static inline void
-ulaw2f_array (unsigned char *buffer, int count, float *ptr, float normfact)
-{      while (--count >= 0)
-               ptr [count] = normfact * ulaw_decode [(int) buffer [count]] ;
-} /* ulaw2f_array */
-
-static inline void
-ulaw2d_array (const unsigned char *buffer, int count, double *ptr, double normfact)
-{      while (--count >= 0)
-               ptr [count] = normfact * ulaw_decode [(int) buffer [count]] ;
-} /* ulaw2d_array */
-
-static inline void
-s2ulaw_array (const short *ptr, int count, unsigned char *buffer)
-{      while (--count >= 0)
-       {       if (ptr [count] >= 0)
-                       buffer [count] = ulaw_encode [ptr [count] / 4] ;
-               else
-                       buffer [count] = 0x7F & ulaw_encode [ptr [count] / -4] ;
-               } ;
-} /* s2ulaw_array */
-
-static inline void
-i2ulaw_array (const int *ptr, int count, unsigned char *buffer)
-{      while (--count >= 0)
-       {       if (ptr [count] >= 0)
-                       buffer [count] = ulaw_encode [ptr [count] >> (16 + 2)] ;
-               else
-                       buffer [count] = 0x7F & ulaw_encode [-ptr [count] >> (16 + 2)] ;
-               } ;
-} /* i2ulaw_array */
-
-static inline void
-f2ulaw_array (const float *ptr, int count, unsigned char *buffer, float normfact)
-{      while (--count >= 0)
-       {       if (ptr [count] >= 0)
-                       buffer [count] = ulaw_encode [lrintf (normfact * ptr [count])] ;
-               else
-                       buffer [count] = 0x7F & ulaw_encode [- lrintf (normfact * ptr [count])] ;
-               } ;
-} /* f2ulaw_array */
-
-static inline void
-d2ulaw_array (const double *ptr, int count, unsigned char *buffer, double normfact)
-{      while (--count >= 0)
-       {       if (ptr [count] >= 0)
-                       buffer [count] = ulaw_encode [lrint (normfact * ptr [count])] ;
-               else
-                       buffer [count] = 0x7F & ulaw_encode [- lrint (normfact * ptr [count])] ;
-               } ;
-} /* d2ulaw_array */
-
-/*==============================================================================
-*/
-
-static sf_count_t
-ulaw_read_ulaw2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ucbuf, 1, bufferlen, psf) ;
-               ulaw2s_array (ubuf.ucbuf, readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* ulaw_read_ulaw2s */
-
-static sf_count_t
-ulaw_read_ulaw2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ucbuf, 1, bufferlen, psf) ;
-               ulaw2i_array (ubuf.ucbuf, readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* ulaw_read_ulaw2i */
-
-static sf_count_t
-ulaw_read_ulaw2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       float   normfact ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ucbuf, 1, bufferlen, psf) ;
-               ulaw2f_array (ubuf.ucbuf, readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* ulaw_read_ulaw2f */
-
-static sf_count_t
-ulaw_read_ulaw2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       double  normfact ;
-
-       normfact = (psf->norm_double) ? 1.0 / ((double) 0x8000) : 1.0 ;
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.ucbuf, 1, bufferlen, psf) ;
-               ulaw2d_array (ubuf.ucbuf, readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* ulaw_read_ulaw2d */
-
-/*=============================================================================================
-*/
-
-static sf_count_t
-ulaw_write_s2ulaw      (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               s2ulaw_array (ptr + total, bufferlen, ubuf.ucbuf) ;
-               writecount = psf_fwrite (ubuf.ucbuf, 1, bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* ulaw_write_s2ulaw */
-
-static sf_count_t
-ulaw_write_i2ulaw      (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               i2ulaw_array (ptr + total, bufferlen, ubuf.ucbuf) ;
-               writecount = psf_fwrite (ubuf.ucbuf, 1, bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* ulaw_write_i2ulaw */
-
-static sf_count_t
-ulaw_write_f2ulaw      (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-       float   normfact ;
-
-       /* Factor in a divide by 4. */
-       normfact = (psf->norm_float == SF_TRUE) ? (0.25 * 0x7FFF) : 0.25 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               f2ulaw_array (ptr + total, bufferlen, ubuf.ucbuf, normfact) ;
-               writecount = psf_fwrite (ubuf.ucbuf, 1, bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* ulaw_write_f2ulaw */
-
-static sf_count_t
-ulaw_write_d2ulaw      (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-       double  normfact ;
-
-       /* Factor in a divide by 4. */
-       normfact = (psf->norm_double) ? (0.25 * 0x7FFF) : 0.25 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               d2ulaw_array (ptr + total, bufferlen, ubuf.ucbuf, normfact) ;
-               writecount = psf_fwrite (ubuf.ucbuf, 1, bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* ulaw_write_d2ulaw */
-
diff --git a/libs/libsndfile/src/version-metadata.rc.in b/libs/libsndfile/src/version-metadata.rc.in
deleted file mode 100644 (file)
index ed79b22..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#include <windows.h>
-
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_AUS
-1 VERSIONINFO
-       FILEVERSION             @WIN_RC_VERSION@,0
-       PRODUCTVERSION  @WIN_RC_VERSION@,0
-       FILEOS                  VOS__WINDOWS32
-       FILETYPE                VFT_DLL
-       FILESUBTYPE             VFT2_UNKNOWN
-       FILEFLAGSMASK   0x00000000
-       FILEFLAGS               0x00000000
-{
-       BLOCK "StringFileInfo"
-       {
-               BLOCK "040904e4"
-               {
-                       VALUE "FileDescription", "A library for reading and writing audio files."
-                       VALUE "FileVersion", "@CLEAN_VERSION@.0\0"
-                       VALUE "Full Version", "@PACKAGE_VERSION@"
-                       VALUE "InternalName", "libsndfile"
-                       VALUE "LegalCopyright", "Copyright (C) 1999-2012, Licensed LGPL"
-                       VALUE "OriginalFilename", "libsndfile-1.dll"
-                       VALUE "ProductName", "libsndfile-1 DLL"
-                       VALUE "ProductVersion", "@CLEAN_VERSION@.0\0"
-                       VALUE "Language", "Language Neutral"
-               }
-       }
-       BLOCK "VarFileInfo"
-       {
-               VALUE "Translation", 0x0409, 0x04E4
-       }
-}
diff --git a/libs/libsndfile/src/voc.c b/libs/libsndfile/src/voc.c
deleted file mode 100644 (file)
index d13b033..0000000
+++ /dev/null
@@ -1,882 +0,0 @@
-/*
-** Copyright (C) 2001-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*     RANT:
-**     The VOC file format is the most brain damaged format I have yet had to deal
-**     with. No one programmer could have bee stupid enough to put this together.
-**     Instead it looks like a series of manic, dyslexic assembly language programmers
-**     hacked it to fit their needs.
-**     Utterly woeful.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-
-/*------------------------------------------------------------------------------
- * Typedefs for file chunks.
-*/
-
-#define        VOC_MAX_SECTIONS        200
-
-enum
-{      VOC_TERMINATOR          = 0,
-       VOC_SOUND_DATA          = 1,
-       VOC_SOUND_CONTINUE      = 2,
-       VOC_SILENCE                     = 3,
-       VOC_MARKER                      = 4,
-       VOC_ASCII                       = 5,
-       VOC_REPEAT                      = 6,
-       VOC_END_REPEAT          = 7,
-       VOC_EXTENDED            = 8,
-       VOC_EXTENDED_II         = 9
-} ;
-
-typedef struct
-{      int     samples ;
-       int             offset ;        /* Offset of zero => silence. */
-} SND_DATA_BLOCKS ;
-
-typedef struct
-{      unsigned int    sections, section_types ;
-       int                             samplerate, channels, bitwidth ;
-       SND_DATA_BLOCKS blocks [VOC_MAX_SECTIONS] ;
-} VOC_DATA ;
-
-/*------------------------------------------------------------------------------
- * Private static functions.
-*/
-
-static int     voc_close       (SF_PRIVATE *psf) ;
-static int voc_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int voc_read_header     (SF_PRIVATE *psf) ;
-
-static const char* voc_encoding2str (int encoding) ;
-
-#if 0
-
-/*     These functions would be required for files with more than one VOC_SOUND_DATA
-**     segment. Not sure whether to bother implementing this.
-*/
-
-static int     voc_multi_init (SF_PRIVATE *psf, VOC_DATA *pvoc) ;
-
-static int     voc_multi_read_uc2s             (SF_PRIVATE *psf, short *ptr, int len) ;
-static int     voc_multi_read_les2s    (SF_PRIVATE *psf, short *ptr, int len) ;
-
-static int     voc_multi_read_uc2i             (SF_PRIVATE *psf, int *ptr, int len) ;
-static int     voc_multi_read_les2i    (SF_PRIVATE *psf, int *ptr, int len) ;
-
-static int     voc_multi_read_uc2f             (SF_PRIVATE *psf, float *ptr, int len) ;
-static int     voc_multi_read_les2f    (SF_PRIVATE *psf, float *ptr, int len) ;
-
-static int     voc_multi_read_uc2d             (SF_PRIVATE *psf, double *ptr, int len) ;
-static int     voc_multi_read_les2d    (SF_PRIVATE *psf, double *ptr, int len) ;
-#endif
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-voc_open       (SF_PRIVATE *psf)
-{      int subformat, error = 0 ;
-
-       if (psf->is_pipe)
-               return SFE_VOC_NO_PIPE ;
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-       {       if ((error = voc_read_header (psf)))
-                       return error ;
-               } ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_VOC)
-                       return  SFE_BAD_OPEN_FORMAT ;
-
-               psf->endian = SF_ENDIAN_LITTLE ;
-
-               if ((error = voc_write_header (psf, SF_FALSE)))
-                       return error ;
-
-               psf->write_header = voc_write_header ;
-               } ;
-
-       psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-       psf->container_close = voc_close ;
-
-       switch (subformat)
-       {       case SF_FORMAT_PCM_U8 :
-               case SF_FORMAT_PCM_16 :
-                               error = pcm_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_ALAW :
-                               error = alaw_init (psf) ;
-                               break ;
-
-               case SF_FORMAT_ULAW :
-                               error = ulaw_init (psf) ;
-                               break ;
-
-               default : return SFE_UNIMPLEMENTED ;
-               } ;
-
-       return error ;
-} /* voc_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-voc_read_header        (SF_PRIVATE *psf)
-{      VOC_DATA        *pvoc ;
-       char    creative [20] ;
-       unsigned char block_type, rate_byte ;
-       short   version, checksum, encoding, dataoffset ;
-       int             offset ;
-
-       /* Set position to start of file to begin reading header. */
-       offset = psf_binheader_readf (psf, "pb", 0, creative, SIGNED_SIZEOF (creative)) ;
-
-       if (creative [sizeof (creative) - 1] != 0x1A)
-               return SFE_VOC_NO_CREATIVE ;
-
-       /* Terminate the string. */
-       creative [sizeof (creative) - 1] = 0 ;
-
-       if (strcmp ("Creative Voice File", creative))
-               return SFE_VOC_NO_CREATIVE ;
-
-       psf_log_printf (psf, "%s\n", creative) ;
-
-       offset += psf_binheader_readf (psf, "e222", &dataoffset, &version, &checksum) ;
-
-       psf->dataoffset = dataoffset ;
-
-       psf_log_printf (psf,    "dataoffset : %d\n"
-                                                       "version    : 0x%X\n"
-                                                       "checksum   : 0x%X\n", psf->dataoffset, version, checksum) ;
-
-       if (version != 0x010A && version != 0x0114)
-               return SFE_VOC_BAD_VERSION ;
-
-       if (! (psf->codec_data = malloc (sizeof (VOC_DATA))))
-               return SFE_MALLOC_FAILED ;
-
-       pvoc = (VOC_DATA*) psf->codec_data ;
-
-       memset (pvoc, 0, sizeof (VOC_DATA)) ;
-
-       /* Set the default encoding now. */
-       psf->sf.format = SF_FORMAT_VOC ; /* Major format */
-       encoding = SF_FORMAT_PCM_U8 ; /* Minor format */
-       psf->endian = SF_ENDIAN_LITTLE ;
-
-       while (1)
-       {       unsigned size ;
-               short count ;
-
-               block_type = 0 ;
-               offset += psf_binheader_readf (psf, "1", &block_type) ;
-
-               switch (block_type)
-               {       case VOC_ASCII :
-                                       offset += psf_binheader_readf (psf, "e3", &size) ;
-
-                                       psf_log_printf (psf, " ASCII : %d\n", size) ;
-
-                                       if (size < sizeof (psf->header) - 1)
-                                       {       offset += psf_binheader_readf (psf, "b", psf->header, size) ;
-                                               psf->header [size] = 0 ;
-                                               psf_log_printf (psf, "  text : %s\n", psf->header) ;
-                                               continue ;
-                                               }
-
-                                       offset += psf_binheader_readf (psf, "j", size) ;
-                                       continue ;
-
-                       case VOC_REPEAT :
-                                       offset += psf_binheader_readf (psf, "e32", &size, &count) ;
-                                       psf_log_printf (psf, " Repeat : %d\n", count) ;
-                                       continue ;
-
-                       case VOC_SOUND_DATA :
-                       case VOC_EXTENDED :
-                       case VOC_EXTENDED_II :
-                                       break ;
-
-                       default : psf_log_printf (psf, "*** Weird block marker (%d)\n", block_type) ;
-                       } ;
-
-               break ;
-               } ;
-
-       if (block_type == VOC_SOUND_DATA)
-       {       unsigned char compression ;
-               int     size ;
-
-               offset += psf_binheader_readf (psf, "e311", &size, &rate_byte, &compression) ;
-
-               psf->sf.samplerate = 1000000 / (256 - (rate_byte & 0xFF)) ;
-
-               psf_log_printf (psf, " Sound Data : %d\n  sr   : %d => %dHz\n  comp : %d\n",
-                                                               size, rate_byte, psf->sf.samplerate, compression) ;
-
-               if (offset + size - 1 > psf->filelength)
-               {       psf_log_printf (psf, "Seems to be a truncated file.\n") ;
-                       psf_log_printf (psf, "offset: %d    size: %d    sum: %d    filelength: %D\n", offset, size, offset + size, psf->filelength) ;
-                       return SFE_VOC_BAD_SECTIONS ;
-                       }
-               else if (psf->filelength - offset - size > 4)
-               {       psf_log_printf (psf, "Seems to be a multi-segment file (#1).\n") ;
-                       psf_log_printf (psf, "offset: %d    size: %d    sum: %d    filelength: %D\n", offset, size, offset + size, psf->filelength) ;
-                       return SFE_VOC_BAD_SECTIONS ;
-                       } ;
-
-               psf->dataoffset = offset ;
-               psf->dataend    = psf->filelength - 1 ;
-
-               psf->sf.channels = 1 ;
-               psf->bytewidth = 1 ;
-
-               psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_PCM_U8 ;
-
-               return 0 ;
-               } ;
-
-       if (block_type == VOC_EXTENDED)
-       {       unsigned char pack, stereo, compression ;
-               unsigned short rate_short ;
-               int             size ;
-
-               offset += psf_binheader_readf (psf, "e3211", &size, &rate_short, &pack, &stereo) ;
-
-               psf_log_printf (psf, " Extended : %d\n", size) ;
-               if (size == 4)
-                       psf_log_printf (psf, "  size   : 4\n") ;
-               else
-                       psf_log_printf (psf, "  size   : %d (should be 4)\n", size) ;
-
-               psf_log_printf (psf,    "  pack   : %d\n"
-                                                               "  stereo : %s\n", pack, (stereo ? "yes" : "no")) ;
-
-               if (stereo)
-               {       psf->sf.channels = 2 ;
-                       psf->sf.samplerate = 128000000 / (65536 - rate_short) ;
-                       }
-               else
-               {       psf->sf.channels = 1 ;
-                       psf->sf.samplerate = 256000000 / (65536 - rate_short) ;
-                       } ;
-
-               psf_log_printf (psf, "  sr     : %d => %dHz\n", (rate_short & 0xFFFF), psf->sf.samplerate) ;
-
-               offset += psf_binheader_readf (psf, "1", &block_type) ;
-
-               if (block_type != VOC_SOUND_DATA)
-               {       psf_log_printf (psf, "*** Expecting VOC_SOUND_DATA section.\n") ;
-                       return SFE_VOC_BAD_FORMAT ;
-                       } ;
-
-               offset += psf_binheader_readf (psf, "e311", &size, &rate_byte, &compression) ;
-
-               psf_log_printf (psf,    " Sound Data : %d\n"
-                                                               "  sr     : %d\n"
-                                                               "  comp   : %d\n", size, rate_byte, compression) ;
-
-
-               if (offset + size - 1 > psf->filelength)
-               {       psf_log_printf (psf, "Seems to be a truncated file.\n") ;
-                       psf_log_printf (psf, "offset: %d    size: %d    sum: %d    filelength: %D\n", offset, size, offset + size, psf->filelength) ;
-                       return SFE_VOC_BAD_SECTIONS ;
-                       }
-               else if (offset + size - 1 < psf->filelength)
-               {       psf_log_printf (psf, "Seems to be a multi-segment file (#2).\n") ;
-                       psf_log_printf (psf, "offset: %d    size: %d    sum: %d    filelength: %D\n", offset, size, offset + size, psf->filelength) ;
-                       return SFE_VOC_BAD_SECTIONS ;
-                       } ;
-
-               psf->dataoffset = offset ;
-               psf->dataend = psf->filelength - 1 ;
-
-               psf->bytewidth = 1 ;
-
-               psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_PCM_U8 ;
-
-               return 0 ;
-               }
-
-       if (block_type == VOC_EXTENDED_II)
-       {       unsigned char bitwidth, channels ;
-               int size, fourbytes ;
-
-               offset += psf_binheader_readf (psf, "e341124", &size, &psf->sf.samplerate,
-                                                               &bitwidth, &channels, &encoding, &fourbytes) ;
-
-               if (size * 2 == psf->filelength - 39)
-               {       int temp_size = psf->filelength - 31 ;
-
-                       psf_log_printf (psf, " Extended II : %d (SoX bug: should be %d)\n", size, temp_size) ;
-                       size = temp_size ;
-                       }
-               else
-                       psf_log_printf (psf, " Extended II : %d\n", size) ;
-
-               psf_log_printf (psf,    "  sample rate : %d\n"
-                                                               "  bit width   : %d\n"
-                                                               "  channels    : %d\n", psf->sf.samplerate, bitwidth, channels) ;
-
-               if (bitwidth == 16 && encoding == 0)
-               {       encoding = 4 ;
-                       psf_log_printf (psf, "  encoding    : 0 (SoX bug: should be 4 for 16 bit signed PCM)\n") ;
-                       }
-               else
-                       psf_log_printf (psf, "  encoding    : %d => %s\n", encoding, voc_encoding2str (encoding)) ;
-
-
-               psf_log_printf (psf, "  fourbytes   : %X\n", fourbytes) ;
-
-               psf->sf.channels = channels ;
-
-               psf->dataoffset = offset ;
-               psf->dataend    = psf->filelength - 1 ;
-
-               if (size + 31 == psf->filelength + 1)
-               {       /* Hack for reading files produced using
-                       ** sf_command (SFC_UPDATE_HEADER_NOW).
-                       */
-                       psf_log_printf (psf, "Missing zero byte at end of file.\n") ;
-                       size = psf->filelength - 30 ;
-                       psf->dataend = 0 ;
-                       }
-               else if (size + 31 > psf->filelength)
-               {       psf_log_printf (psf, "Seems to be a truncated file.\n") ;
-                       size = psf->filelength - 31 ;
-                       }
-               else if (size + 31 < psf->filelength)
-                       psf_log_printf (psf, "Seems to be a multi-segment file (#3).\n") ;
-
-               switch (encoding)
-               {       case 0 :
-                                       psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_PCM_U8 ;
-                                       psf->bytewidth = 1 ;
-                                       break ;
-
-                       case 4 :
-                                       psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_PCM_16 ;
-                                       psf->bytewidth = 2 ;
-                                       break ;
-
-                       case 6 :
-                                       psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_ALAW ;
-                                       psf->bytewidth = 1 ;
-                                       break ;
-
-                       case 7 :
-                                       psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_ULAW ;
-                                       psf->bytewidth = 1 ;
-                                       break ;
-
-                       default : /* Unknown */
-                                       return SFE_UNKNOWN_FORMAT ;
-                                       break ;
-                       } ;
-
-               } ;
-
-       return 0 ;
-} /* voc_read_header */
-
-/*====================================================================================
-*/
-
-static int
-voc_write_header (SF_PRIVATE *psf, int calc_length)
-{      sf_count_t      current ;
-       int                     rate_const, subformat ;
-
-       current = psf_ftell (psf) ;
-
-       if (calc_length)
-       {       psf->filelength = psf_get_filelen (psf) ;
-
-               psf->datalength = psf->filelength - psf->dataoffset ;
-               if (psf->dataend)
-                       psf->datalength -= psf->filelength - psf->dataend ;
-
-               psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-               } ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-       /* Reset the current header length to zero. */
-       psf->header [0] = 0 ;
-       psf->headindex = 0 ;
-       psf_fseek (psf, 0, SEEK_SET) ;
-
-       /* VOC marker and 0x1A byte. */
-       psf_binheader_writef (psf, "eb1", "Creative Voice File", make_size_t (19), 0x1A) ;
-
-       /* Data offset, version and other. */
-       psf_binheader_writef (psf, "e222", 26, 0x0114, 0x111F) ;
-
-       /*      Use same logic as SOX.
-       **      If the file is mono 8 bit data, use VOC_SOUND_DATA.
-       **      If the file is mono 16 bit data, use VOC_EXTENED.
-       **      Otherwise use VOC_EXTENED_2.
-       */
-
-       if (subformat == SF_FORMAT_PCM_U8 && psf->sf.channels == 1)
-       {       /* samplerate = 1000000 / (256 - rate_const) ; */
-               rate_const = 256 - 1000000 / psf->sf.samplerate ;
-
-               /* First type marker, length, rate_const and compression */
-               psf_binheader_writef (psf, "e1311", VOC_SOUND_DATA, (int) (psf->datalength + 1), rate_const, 0) ;
-               }
-       else if (subformat == SF_FORMAT_PCM_U8 && psf->sf.channels == 2)
-       {       /* sample_rate = 128000000 / (65536 - rate_short) ; */
-               rate_const = 65536 - 128000000 / psf->sf.samplerate ;
-
-               /* First write the VOC_EXTENDED section
-               **              marker, length, rate_const and compression
-               */
-               psf_binheader_writef (psf, "e13211", VOC_EXTENDED, 4, rate_const, 0, 1) ;
-
-               /* samplerate = 1000000 / (256 - rate_const) ; */
-               rate_const = 256 - 1000000 / psf->sf.samplerate ;
-
-               /*      Now write the VOC_SOUND_DATA section
-               **              marker, length, rate_const and compression
-               */
-               psf_binheader_writef (psf, "e1311", VOC_SOUND_DATA, (int) (psf->datalength + 1), rate_const, 0) ;
-               }
-       else
-       {       int length ;
-
-               if (psf->sf.channels < 1 || psf->sf.channels > 2)
-                       return SFE_CHANNEL_COUNT ;
-
-               switch (subformat)
-               {       case SF_FORMAT_PCM_U8 :
-                                       psf->bytewidth = 1 ;
-                                       length = psf->sf.frames * psf->sf.channels * psf->bytewidth + 12 ;
-                                       /* Marker, length, sample rate, bitwidth, stereo flag, encoding and fourt zero bytes. */
-                                       psf_binheader_writef (psf, "e1341124", VOC_EXTENDED_II, length, psf->sf.samplerate, 16, psf->sf.channels, 4, 0) ;
-                                       break ;
-
-                       case SF_FORMAT_PCM_16 :
-                                       psf->bytewidth = 2 ;
-                                       length = psf->sf.frames * psf->sf.channels * psf->bytewidth + 12 ;
-                                       /* Marker, length, sample rate, bitwidth, stereo flag, encoding and fourt zero bytes. */
-                                       psf_binheader_writef (psf, "e1341124", VOC_EXTENDED_II, length, psf->sf.samplerate, 16, psf->sf.channels, 4, 0) ;
-                                       break ;
-
-                       case SF_FORMAT_ALAW :
-                                       psf->bytewidth = 1 ;
-                                       length = psf->sf.frames * psf->sf.channels * psf->bytewidth + 12 ;
-                                       psf_binheader_writef (psf, "e1341124", VOC_EXTENDED_II, length, psf->sf.samplerate, 8, psf->sf.channels, 6, 0) ;
-                                       break ;
-
-                       case SF_FORMAT_ULAW :
-                                       psf->bytewidth = 1 ;
-                                       length = psf->sf.frames * psf->sf.channels * psf->bytewidth + 12 ;
-                                       psf_binheader_writef (psf, "e1341124", VOC_EXTENDED_II, length, psf->sf.samplerate, 8, psf->sf.channels, 7, 0) ;
-                                       break ;
-
-                       default : return SFE_UNIMPLEMENTED ;
-                       } ;
-               } ;
-
-       psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-       if (psf->error)
-               return psf->error ;
-
-       psf->dataoffset = psf->headindex ;
-
-       if (current > 0)
-               psf_fseek (psf, current, SEEK_SET) ;
-
-       return psf->error ;
-} /* voc_write_header */
-
-static int
-voc_close      (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       /*  Now we know for certain the length of the file we can re-write
-               **      correct values for the FORM, 8SVX and BODY chunks.
-               */
-               unsigned char byte = VOC_TERMINATOR ;
-
-
-               psf_fseek (psf, 0, SEEK_END) ;
-
-               /* Write terminator */
-               psf_fwrite (&byte, 1, 1, psf) ;
-
-               voc_write_header (psf, SF_TRUE) ;
-               } ;
-
-       return 0 ;
-} /* voc_close */
-
-static const   char*
-voc_encoding2str (int encoding)
-{
-       switch (encoding)
-       {       case 0 :        return "8 bit unsigned PCM" ;
-               case 4 :        return "16 bit signed PCM" ;
-               case 6 :        return "A-law" ;
-               case 7 :        return "u-law" ;
-               default :       break ;
-               }
-       return "*** Unknown ***" ;
-} /* voc_encoding2str */
-
-/*====================================================================================
-*/
-
-#if 0
-static int
-voc_multi_init (SF_PRIVATE *psf, VOC_DATA *pvoc)
-{
-       psf->sf.frames = 0 ;
-
-       if (pvoc->bitwidth == 8)
-       {       psf->read_short         = voc_multi_read_uc2s ;
-               psf->read_int           = voc_multi_read_uc2i ;
-               psf->read_float         = voc_multi_read_uc2f ;
-               psf->read_double        = voc_multi_read_uc2d ;
-               return 0 ;
-               } ;
-
-       if (pvoc->bitwidth == 16)
-       {       psf->read_short         = voc_multi_read_les2s ;
-               psf->read_int           = voc_multi_read_les2i ;
-               psf->read_float         = voc_multi_read_les2f ;
-               psf->read_double        = voc_multi_read_les2d ;
-               return 0 ;
-               } ;
-
-       psf_log_printf (psf, "Error : bitwith != 8 && bitwidth != 16.\n") ;
-
-       return SFE_UNIMPLEMENTED ;
-} /* voc_multi_read_int */
-
-/*------------------------------------------------------------------------------------
-*/
-
-static int
-voc_multi_read_uc2s (SF_PRIVATE *psf, short *ptr, int len)
-{
-
-       return 0 ;
-} /* voc_multi_read_uc2s */
-
-static int
-voc_multi_read_les2s (SF_PRIVATE *psf, short *ptr, int len)
-{
-
-       return 0 ;
-} /* voc_multi_read_les2s */
-
-
-static int
-voc_multi_read_uc2i (SF_PRIVATE *psf, int *ptr, int len)
-{
-
-       return 0 ;
-} /* voc_multi_read_uc2i */
-
-static int
-voc_multi_read_les2i (SF_PRIVATE *psf, int *ptr, int len)
-{
-
-       return 0 ;
-} /* voc_multi_read_les2i */
-
-
-static int
-voc_multi_read_uc2f (SF_PRIVATE *psf, float *ptr, int len)
-{
-
-       return 0 ;
-} /* voc_multi_read_uc2f */
-
-static int
-voc_multi_read_les2f (SF_PRIVATE *psf, float *ptr, int len)
-{
-
-       return 0 ;
-} /* voc_multi_read_les2f */
-
-
-static int
-voc_multi_read_uc2d (SF_PRIVATE *psf, double *ptr, int len)
-{
-
-       return 0 ;
-} /* voc_multi_read_uc2d */
-
-static int
-voc_multi_read_les2d (SF_PRIVATE *psf, double *ptr, int len)
-{
-
-       return 0 ;
-} /* voc_multi_read_les2d */
-
-#endif
-
-/*------------------------------------------------------------------------------------
-
-Creative Voice (VOC) file format
---------------------------------
-
-~From: galt@dsd.es.com
-
-(byte numbers are hex!)
-
-    HEADER (bytes 00-19)
-    Series of DATA BLOCKS (bytes 1A+) [Must end w/ Terminator Block]
-
-- ---------------------------------------------------------------
-
-HEADER:
-=======
-     byte #     Description
-     ------     ------------------------------------------
-     00-12      "Creative Voice File"
-     13         1A (eof to abort printing of file)
-     14-15      Offset of first datablock in .voc file (std 1A 00
-                in Intel Notation)
-     16-17      Version number (minor,major) (VOC-HDR puts 0A 01)
-     18-19      1's Comp of Ver. # + 1234h (VOC-HDR puts 29 11)
-
-- ---------------------------------------------------------------
-
-DATA BLOCK:
-===========
-
-   Data Block:  TYPE(1-byte), SIZE(3-bytes), INFO(0+ bytes)
-   NOTE: Terminator Block is an exception -- it has only the TYPE byte.
-
-      TYPE   Description     Size (3-byte int)   Info
-      ----   -----------     -----------------   -----------------------
-      00     Terminator      (NONE)              (NONE)
-      01     Sound data      2+length of data    *
-      02     Sound continue  length of data      Voice Data
-      03     Silence         3                   **
-      04     Marker          2                   Marker# (2 bytes)
-      05     ASCII           length of string    null terminated string
-      06     Repeat          2                   Count# (2 bytes)
-      07     End repeat      0                   (NONE)
-      08     Extended        4                   ***
-
-      *Sound Info Format:
-       ---------------------
-       00   Sample Rate
-       01   Compression Type
-       02+  Voice Data
-
-      **Silence Info Format:
-      ----------------------------
-      00-01  Length of silence - 1
-      02     Sample Rate
-
-
-    ***Extended Info Format:
-       ---------------------
-       00-01  Time Constant: Mono: 65536 - (256000000/sample_rate)
-                             Stereo: 65536 - (25600000/(2*sample_rate))
-       02     Pack
-       03     Mode: 0 = mono
-                    1 = stereo
-
-
-  Marker#           -- Driver keeps the most recent marker in a status byte
-  Count#            -- Number of repetitions + 1
-                         Count# may be 1 to FFFE for 0 - FFFD repetitions
-                         or FFFF for endless repetitions
-  Sample Rate       -- SR byte = 256-(1000000/sample_rate)
-  Length of silence -- in units of sampling cycle
-  Compression Type  -- of voice data
-                         8-bits    = 0
-                         4-bits    = 1
-                         2.6-bits  = 2
-                         2-bits    = 3
-                         Multi DAC = 3+(# of channels) [interesting--
-                                       this isn't in the developer's manual]
-
-
----------------------------------------------------------------------------------
-Addendum submitted by Votis Kokavessis:
-
-After some experimenting with .VOC files I found out that there is a Data Block
-Type 9, which is not covered in the VOC.TXT file. Here is what I was able to discover
-about this block type:
-
-
-TYPE: 09
-SIZE: 12 + length of data
-INFO: 12 (twelve) bytes
-
-INFO STRUCTURE:
-
-Bytes 0-1: (Word) Sample Rate (e.g. 44100)
-Bytes 2-3: zero (could be that bytes 0-3 are a DWord for Sample Rate)
-Byte 4: Sample Size in bits (e.g. 16)
-Byte 5: Number of channels (e.g. 1 for mono, 2 for stereo)
-Byte 6: Unknown (equal to 4 in all files I examined)
-Bytes 7-11: zero
-
-
--------------------------------------------------------------------------------------*/
-
-/*=====================================================================================
-**=====================================================================================
-**=====================================================================================
-**=====================================================================================
-*/
-
-/*------------------------------------------------------------------------
-The following is taken from the Audio File Formats FAQ dated 2-Jan-1995
-and submitted by Guido van Rossum <guido@cwi.nl>.
---------------------------------------------------------------------------
-Creative Voice (VOC) file format
---------------------------------
-
-From: galt@dsd.es.com
-
-(byte numbers are hex!)
-
-    HEADER (bytes 00-19)
-    Series of DATA BLOCKS (bytes 1A+) [Must end w/ Terminator Block]
-
-- ---------------------------------------------------------------
-
-HEADER:
--------
-     byte #     Description
-     ------     ------------------------------------------
-     00-12      "Creative Voice File"
-     13         1A (eof to abort printing of file)
-     14-15      Offset of first datablock in .voc file (std 1A 00
-                in Intel Notation)
-     16-17      Version number (minor,major) (VOC-HDR puts 0A 01)
-     18-19      2's Comp of Ver. # + 1234h (VOC-HDR puts 29 11)
-
-- ---------------------------------------------------------------
-
-DATA BLOCK:
------------
-
-   Data Block:  TYPE(1-byte), SIZE(3-bytes), INFO(0+ bytes)
-   NOTE: Terminator Block is an exception -- it has only the TYPE byte.
-
-      TYPE   Description     Size (3-byte int)   Info
-      ----   -----------     -----------------   -----------------------
-      00     Terminator      (NONE)              (NONE)
-      01     Sound data      2+length of data    *
-      02     Sound continue  length of data      Voice Data
-      03     Silence         3                   **
-      04     Marker          2                   Marker# (2 bytes)
-      05     ASCII           length of string    null terminated string
-      06     Repeat          2                   Count# (2 bytes)
-      07     End repeat      0                   (NONE)
-      08     Extended        4                   ***
-
-      *Sound Info Format:       **Silence Info Format:
-       ---------------------      ----------------------------
-       00   Sample Rate           00-01  Length of silence - 1
-       01   Compression Type      02     Sample Rate
-       02+  Voice Data
-
-    ***Extended Info Format:
-       ---------------------
-       00-01  Time Constant: Mono: 65536 - (256000000/sample_rate)
-                             Stereo: 65536 - (25600000/(2*sample_rate))
-       02     Pack
-       03     Mode: 0 = mono
-                    1 = stereo
-
-
-  Marker#           -- Driver keeps the most recent marker in a status byte
-  Count#            -- Number of repetitions + 1
-                         Count# may be 1 to FFFE for 0 - FFFD repetitions
-                         or FFFF for endless repetitions
-  Sample Rate       -- SR byte = 256-(1000000/sample_rate)
-  Length of silence -- in units of sampling cycle
-  Compression Type  -- of voice data
-                         8-bits    = 0
-                         4-bits    = 1
-                         2.6-bits  = 2
-                         2-bits    = 3
-                         Multi DAC = 3+(# of channels) [interesting--
-                                       this isn't in the developer's manual]
-
-Detailed description of new data blocks (VOC files version 1.20 and above):
-
-        (Source is fax from Barry Boone at Creative Labs, 405/742-6622)
-
-BLOCK 8 - digitized sound attribute extension, must preceed block 1.
-          Used to define stereo, 8 bit audio
-        BYTE bBlockID;       // = 8
-        BYTE nBlockLen[3];   // 3 byte length
-        WORD wTimeConstant;  // time constant = same as block 1
-        BYTE bPackMethod;    // same as in block 1
-        BYTE bVoiceMode;     // 0-mono, 1-stereo
-
-        Data is stored left, right
-
-BLOCK 9 - data block that supersedes blocks 1 and 8.
-          Used for stereo, 16 bit.
-
-        BYTE bBlockID;          // = 9
-        BYTE nBlockLen[3];      // length 12 plus length of sound
-        DWORD dwSamplesPerSec;  // samples per second, not time const.
-        BYTE bBitsPerSample;    // e.g., 8 or 16
-        BYTE bChannels;         // 1 for mono, 2 for stereo
-        WORD wFormat;           // see below
-        BYTE reserved[4];       // pad to make block w/o data
-                                // have a size of 16 bytes
-
-        Valid values of wFormat are:
-
-                0x0000  8-bit unsigned PCM
-                0x0001  Creative 8-bit to 4-bit ADPCM
-                0x0002  Creative 8-bit to 3-bit ADPCM
-                0x0003  Creative 8-bit to 2-bit ADPCM
-                0x0004  16-bit signed PCM
-                0x0006  CCITT a-Law
-                0x0007  CCITT u-Law
-                0x02000 Creative 16-bit to 4-bit ADPCM
-
-        Data is stored left, right
-
-------------------------------------------------------------------------*/
diff --git a/libs/libsndfile/src/vox_adpcm.c b/libs/libsndfile/src/vox_adpcm.c
deleted file mode 100644 (file)
index 9abd42b..0000000
+++ /dev/null
@@ -1,400 +0,0 @@
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**     This is the OKI / Dialogic ADPCM encoder/decoder. It converts from
-**     12 bit linear sample data to a 4 bit ADPCM.
-*/
-
-/*
- * Note: some early Dialogic hardware does not always reset the ADPCM encoder
- * at the start of each vox file. This can result in clipping and/or DC offset
- * problems when it comes to decoding the audio. Whilst little can be done
- * about the clipping, a DC offset can be removed by passing the decoded audio
- * through a high-pass filter at e.g. 10Hz.
- */
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <stdlib.h>
-#include       <string.h>
-#include       <math.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-#include       "ima_oki_adpcm.h"
-
-
-static sf_count_t vox_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t vox_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t vox_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t vox_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t vox_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t vox_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t vox_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t vox_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static int vox_read_block (SF_PRIVATE *psf, IMA_OKI_ADPCM *pvox, short *ptr, int len) ;
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-codec_close (SF_PRIVATE * psf)
-{
-       IMA_OKI_ADPCM * p = (IMA_OKI_ADPCM *) psf->codec_data ;
-
-       if (p->errors)
-               psf_log_printf (psf, "*** Warning : ADPCM state errors: %d\n", p->errors) ;
-       return p->errors ;
-} /* code_close */
-
-int
-vox_adpcm_init (SF_PRIVATE *psf)
-{      IMA_OKI_ADPCM *pvox = NULL ;
-
-       if (psf->file.mode == SFM_RDWR)
-               return SFE_BAD_MODE_RW ;
-
-       if (psf->file.mode == SFM_WRITE && psf->sf.channels != 1)
-               return SFE_CHANNEL_COUNT ;
-
-       if ((pvox = malloc (sizeof (IMA_OKI_ADPCM))) == NULL)
-               return SFE_MALLOC_FAILED ;
-
-       psf->codec_data = (void*) pvox ;
-       memset (pvox, 0, sizeof (IMA_OKI_ADPCM)) ;
-
-       if (psf->file.mode == SFM_WRITE)
-       {       psf->write_short        = vox_write_s ;
-               psf->write_int          = vox_write_i ;
-               psf->write_float        = vox_write_f ;
-               psf->write_double       = vox_write_d ;
-               }
-       else
-       {       psf_log_printf (psf, "Header-less OKI Dialogic ADPCM encoded file.\n") ;
-               psf_log_printf (psf, "Setting up for 8kHz, mono, Vox ADPCM.\n") ;
-
-               psf->read_short         = vox_read_s ;
-               psf->read_int           = vox_read_i ;
-               psf->read_float         = vox_read_f ;
-               psf->read_double        = vox_read_d ;
-               } ;
-
-       /* Standard sample rate chennels etc. */
-       if (psf->sf.samplerate < 1)
-               psf->sf.samplerate      = 8000 ;
-       psf->sf.channels        = 1 ;
-
-       psf->sf.frames = psf->filelength * 2 ;
-
-       psf->sf.seekable = SF_FALSE ;
-       psf->codec_close = codec_close ;
-
-       /* Seek back to start of data. */
-       if (psf_fseek (psf, 0 , SEEK_SET) == -1)
-               return SFE_BAD_SEEK ;
-
-       ima_oki_adpcm_init (pvox, IMA_OKI_ADPCM_TYPE_OKI) ;
-
-       return 0 ;
-} /* vox_adpcm_init */
-
-/*==============================================================================
-*/
-
-static int
-vox_read_block (SF_PRIVATE *psf, IMA_OKI_ADPCM *pvox, short *ptr, int len)
-{      int     indx = 0, k ;
-
-       while (indx < len)
-       {       pvox->code_count = (len - indx > IMA_OKI_ADPCM_PCM_LEN) ? IMA_OKI_ADPCM_CODE_LEN : (len - indx + 1) / 2 ;
-
-               if ((k = psf_fread (pvox->codes, 1, pvox->code_count, psf)) != pvox->code_count)
-               {       if (psf_ftell (psf) != psf->filelength)
-                               psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, pvox->code_count) ;
-                       if (k == 0)
-                               break ;
-                       } ;
-
-               pvox->code_count = k ;
-
-               ima_oki_adpcm_decode_block (pvox) ;
-
-               memcpy (&(ptr [indx]), pvox->pcm, pvox->pcm_count * sizeof (short)) ;
-               indx += pvox->pcm_count ;
-               } ;
-
-       return indx ;
-} /* vox_read_block */
-
-
-static sf_count_t
-vox_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      IMA_OKI_ADPCM   *pvox ;
-       int                     readcount, count ;
-       sf_count_t      total = 0 ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pvox = (IMA_OKI_ADPCM*) psf->codec_data ;
-
-       while (len > 0)
-       {       readcount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-               count = vox_read_block (psf, pvox, ptr, readcount) ;
-
-               total += count ;
-               len -= count ;
-               if (count != readcount)
-                       break ;
-               } ;
-
-       return total ;
-} /* vox_read_s */
-
-static sf_count_t
-vox_read_i     (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      IMA_OKI_ADPCM *pvox ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, readcount, count ;
-       sf_count_t      total = 0 ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pvox = (IMA_OKI_ADPCM*) psf->codec_data ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : (int) len ;
-               count = vox_read_block (psf, pvox, sptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = ((int) sptr [k]) << 16 ;
-               total += count ;
-               len -= readcount ;
-               if (count != readcount)
-                       break ;
-               } ;
-
-       return total ;
-} /* vox_read_i */
-
-static sf_count_t
-vox_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      IMA_OKI_ADPCM *pvox ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, readcount, count ;
-       sf_count_t      total = 0 ;
-       float           normfact ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pvox = (IMA_OKI_ADPCM*) psf->codec_data ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : (int) len ;
-               count = vox_read_block (psf, pvox, sptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = normfact * (float) (sptr [k]) ;
-               total += count ;
-               len -= readcount ;
-               if (count != readcount)
-                       break ;
-               } ;
-
-       return total ;
-} /* vox_read_f */
-
-static sf_count_t
-vox_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      IMA_OKI_ADPCM *pvox ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, readcount, count ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pvox = (IMA_OKI_ADPCM*) psf->codec_data ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       readcount = (len >= bufferlen) ? bufferlen : (int) len ;
-               count = vox_read_block (psf, pvox, sptr, readcount) ;
-               for (k = 0 ; k < readcount ; k++)
-                       ptr [total + k] = normfact * (double) (sptr [k]) ;
-               total += count ;
-               len -= readcount ;
-               if (count != readcount)
-                       break ;
-               } ;
-
-       return total ;
-} /* vox_read_d */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-vox_write_block (SF_PRIVATE *psf, IMA_OKI_ADPCM *pvox, const short *ptr, int len)
-{      int     indx = 0, k ;
-
-       while (indx < len)
-       {       pvox->pcm_count = (len - indx > IMA_OKI_ADPCM_PCM_LEN) ? IMA_OKI_ADPCM_PCM_LEN : len - indx ;
-
-               memcpy (pvox->pcm, &(ptr [indx]), pvox->pcm_count * sizeof (short)) ;
-
-               ima_oki_adpcm_encode_block (pvox) ;
-
-               if ((k = psf_fwrite (pvox->codes, 1, pvox->code_count, psf)) != pvox->code_count)
-                       psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, pvox->code_count) ;
-
-               indx += pvox->pcm_count ;
-               } ;
-
-       return indx ;
-} /* vox_write_block */
-
-static sf_count_t
-vox_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      IMA_OKI_ADPCM   *pvox ;
-       int                     writecount, count ;
-       sf_count_t      total = 0 ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pvox = (IMA_OKI_ADPCM*) psf->codec_data ;
-
-       while (len)
-       {       writecount = (len > 0x10000000) ? 0x10000000 : (int) len ;
-
-               count = vox_write_block (psf, pvox, ptr, writecount) ;
-
-               total += count ;
-               len -= count ;
-               if (count != writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* vox_write_s */
-
-static sf_count_t
-vox_write_i    (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      IMA_OKI_ADPCM *pvox ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, writecount, count ;
-       sf_count_t      total = 0 ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pvox = (IMA_OKI_ADPCM*) psf->codec_data ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-               for (k = 0 ; k < writecount ; k++)
-                       sptr [k] = ptr [total + k] >> 16 ;
-               count = vox_write_block (psf, pvox, sptr, writecount) ;
-               total += count ;
-               len -= writecount ;
-               if (count != writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* vox_write_i */
-
-static sf_count_t
-vox_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      IMA_OKI_ADPCM *pvox ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, writecount, count ;
-       sf_count_t      total = 0 ;
-       float           normfact ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pvox = (IMA_OKI_ADPCM*) psf->codec_data ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-               for (k = 0 ; k < writecount ; k++)
-                       sptr [k] = lrintf (normfact * ptr [total + k]) ;
-               count = vox_write_block (psf, pvox, sptr, writecount) ;
-               total += count ;
-               len -= writecount ;
-               if (count != writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* vox_write_f */
-
-static sf_count_t
-vox_write_d    (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      IMA_OKI_ADPCM *pvox ;
-       BUF_UNION       ubuf ;
-       short           *sptr ;
-       int                     k, bufferlen, writecount, count ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       if (! psf->codec_data)
-               return 0 ;
-       pvox = (IMA_OKI_ADPCM*) psf->codec_data ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ;
-
-       sptr = ubuf.sbuf ;
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-       while (len > 0)
-       {       writecount = (len >= bufferlen) ? bufferlen : (int) len ;
-               for (k = 0 ; k < writecount ; k++)
-                       sptr [k] = lrint (normfact * ptr [total + k]) ;
-               count = vox_write_block (psf, pvox, sptr, writecount) ;
-               total += count ;
-               len -= writecount ;
-               if (count != writecount)
-                       break ;
-               } ;
-
-       return total ;
-} /* vox_write_d */
-
diff --git a/libs/libsndfile/src/w64.c b/libs/libsndfile/src/w64.c
deleted file mode 100644 (file)
index 2dbc962..0000000
+++ /dev/null
@@ -1,639 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <string.h>
-#include       <ctype.h>
-#include       <time.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-#include       "wav_w64.h"
-
-/*------------------------------------------------------------------------------
-** W64 files use 16 byte markers as opposed to the four byte marker of
-** WAV files.
-** For comparison purposes, an integer is required, so make an integer
-** hash for the 16 bytes using MAKE_HASH16 macro, but also create a 16
-** byte array containing the complete 16 bytes required when writing the
-** header.
-*/
-
-#define MAKE_HASH16(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, xa, xb, xc, xd, xe, xf)    \
-                       (       (x0)                    ^ ((x1) << 1)   ^ ((x2) << 2)   ^ ((x3) << 3) ^ \
-                               ((x4) << 4)     ^ ((x5) << 5)   ^ ((x6) << 6)   ^ ((x7) << 7) ^ \
-                               ((x8) << 8)     ^ ((x9) << 9)   ^ ((xa) << 10)  ^ ((xb) << 11) ^ \
-                               ((xc) << 12)    ^ ((xd) << 13)  ^ ((xe) << 14)  ^ ((xf) << 15)  )
-
-#define MAKE_MARKER16(name, x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, xa, xb, xc, xd, xe, xf)    \
-                       static unsigned char name [16] = { (x0), (x1), (x2), (x3), (x4), (x5), \
-                               (x6), (x7), (x8), (x9), (xa), (xb), (xc), (xd), (xe), (xf) }
-
-#define        riff_HASH16 MAKE_HASH16 ('r', 'i', 'f', 'f', 0x2E, 0x91, 0xCF, 0x11, \
-                                                               0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00)
-
-#define        wave_HASH16     MAKE_HASH16 ('w', 'a', 'v', 'e', 0xF3, 0xAC, 0xD3, 0x11, \
-                                                               0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A)
-
-#define        fmt_HASH16              MAKE_HASH16 ('f', 'm', 't', ' ', 0xF3, 0xAC, 0xD3, 0x11, \
-                                                               0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A)
-
-#define        fact_HASH16     MAKE_HASH16 ('f', 'a', 'c', 't', 0xF3, 0xAC, 0xD3, 0x11, \
-                                                               0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A)
-
-#define        data_HASH16     MAKE_HASH16 ('d', 'a', 't', 'a', 0xF3, 0xAC, 0xD3, 0x11, \
-                                                               0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A)
-
-#define        ACID_HASH16     MAKE_HASH16 (0x6D, 0x07, 0x1C, 0xEA, 0xA3, 0xEF, 0x78, 0x4C, \
-                                                               0x90, 0x57, 0x7F, 0x79, 0xEE, 0x25, 0x2A, 0xAE)
-
-#define        levl_HASH16             MAKE_HASH16 (0x6c, 0x65, 0x76, 0x6c, 0xf3, 0xac, 0xd3, 0x11, \
-                                                               0xd1, 0x8c, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A)
-
-#define list_HASH16            MAKE_HASH16 (0x6C, 0x69, 0x73, 0x74, 0x2F, 0x91, 0xCF, 0x11, \
-                                                               0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00)
-
-#define junk_HASH16            MAKE_HASH16 (0x6A, 0x75, 0x6E, 0x6b, 0xF3, 0xAC, 0xD3, 0x11, \
-                                                               0x8C, 0xD1, 0x00, 0xC0, 0x4f, 0x8E, 0xDB, 0x8A)
-
-#define bext_MARKER            MAKE_HASH16 (0x62, 0x65, 0x78, 0x74, 0xf3, 0xac, 0xd3, 0xaa, \
-                                                               0xd1, 0x8c, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A)
-
-#define MARKER_HASH16  MAKE_HASH16 (0x56, 0x62, 0xf7, 0xab, 0x2d, 0x39, 0xd2, 0x11, \
-                                                               0x86, 0xc7, 0x00, 0xc0, 0x4f, 0x8e, 0xdb, 0x8a)
-
-#define        SUMLIST_HASH16  MAKE_HASH16 (0xBC, 0x94, 0x5F, 0x92, 0x5A, 0x52, 0xD2, 0x11, \
-                                                               0x86, 0xDC, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A)
-
-
-MAKE_MARKER16 (riff_MARKER16, 'r', 'i', 'f', 'f', 0x2E, 0x91, 0xCF, 0x11,
-                                                               0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00) ;
-
-
-MAKE_MARKER16 (wave_MARKER16, 'w', 'a', 'v', 'e', 0xF3, 0xAC, 0xD3, 0x11,
-                                                               0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A) ;
-
-MAKE_MARKER16 (fmt_MARKER16, 'f', 'm', 't', ' ', 0xF3, 0xAC, 0xD3, 0x11,
-                                                               0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A) ;
-
-MAKE_MARKER16 (fact_MARKER16, 'f', 'a', 'c', 't', 0xF3, 0xAC, 0xD3, 0x11,
-                                                               0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A) ;
-
-MAKE_MARKER16 (data_MARKER16, 'd', 'a', 't', 'a', 0xF3, 0xAC, 0xD3, 0x11,
-                                                               0x8C, 0xD1, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A) ;
-
-enum
-{      HAVE_riff       = 0x01,
-       HAVE_wave       = 0x02,
-       HAVE_fmt        = 0x04,
-       HAVE_fact       = 0x08,
-       HAVE_data       = 0x20
-} ;
-
-/*------------------------------------------------------------------------------
- * Private static functions.
- */
-
-static int     w64_read_header (SF_PRIVATE *psf, int *blockalign, int *framesperblock) ;
-static int     w64_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int     w64_close (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-w64_open       (SF_PRIVATE *psf)
-{      WAV_PRIVATE * wpriv ;
-       int     subformat, error, blockalign = 0, framesperblock = 0 ;
-
-       if ((wpriv = calloc (1, sizeof (WAV_PRIVATE))) == NULL)
-               return SFE_MALLOC_FAILED ;
-       psf->container_data = wpriv ;
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR &&psf->filelength > 0))
-       {       if ((error = w64_read_header (psf, &blockalign, &framesperblock)))
-                       return error ;
-               } ;
-
-       if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_W64)
-               return  SFE_BAD_OPEN_FORMAT ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       if (psf->is_pipe)
-                       return SFE_NO_PIPE_WRITE ;
-
-               psf->endian = SF_ENDIAN_LITTLE ;                /* All W64 files are little endian. */
-
-               psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-               if (subformat == SF_FORMAT_IMA_ADPCM || subformat == SF_FORMAT_MS_ADPCM)
-               {       blockalign = wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ;
-                       framesperblock = -1 ;
-
-                       /* FIXME : This block must go */
-                       psf->filelength = SF_COUNT_MAX ;
-                       psf->datalength = psf->filelength ;
-                       if (psf->sf.frames <= 0)
-                               psf->sf.frames = (psf->blockwidth) ? psf->filelength / psf->blockwidth : psf->filelength ;
-                       /* EMXIF : This block must go */
-                       } ;
-
-               if ((error = w64_write_header (psf, SF_FALSE)))
-                       return error ;
-
-               psf->write_header = w64_write_header ;
-               } ;
-
-       psf->container_close = w64_close ;
-
-       switch (subformat)
-       {       case SF_FORMAT_PCM_U8 :
-                                       error = pcm_init (psf) ;
-                                       break ;
-
-               case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_PCM_24 :
-               case SF_FORMAT_PCM_32 :
-                                       error = pcm_init (psf) ;
-                                       break ;
-
-               case SF_FORMAT_ULAW :
-                                       error = ulaw_init (psf) ;
-                                       break ;
-
-               case SF_FORMAT_ALAW :
-                                       error = alaw_init (psf) ;
-                                       break ;
-
-               /* Lite remove start */
-               case SF_FORMAT_FLOAT :
-                                       error = float32_init (psf) ;
-                                       break ;
-
-               case SF_FORMAT_DOUBLE :
-                                       error = double64_init (psf) ;
-                                       break ;
-
-               case SF_FORMAT_IMA_ADPCM :
-                                       error = wav_w64_ima_init (psf, blockalign, framesperblock) ;
-                                       break ;
-
-               case SF_FORMAT_MS_ADPCM :
-                                       error = wav_w64_msadpcm_init (psf, blockalign, framesperblock) ;
-                                       break ;
-               /* Lite remove end */
-
-               case SF_FORMAT_GSM610 :
-                                       error = gsm610_init (psf) ;
-                                       break ;
-
-               default :       return SFE_UNIMPLEMENTED ;
-               } ;
-
-       return error ;
-} /* w64_open */
-
-/*=========================================================================
-** Private functions.
-*/
-
-static int
-w64_read_header        (SF_PRIVATE *psf, int *blockalign, int *framesperblock)
-{      WAV_PRIVATE *wpriv ;
-       WAV_FMT         *wav_fmt ;
-       int                     dword = 0, marker, format = 0 ;
-       sf_count_t      chunk_size, bytesread = 0 ;
-       int                     parsestage = 0, error, done = 0 ;
-
-       if ((wpriv = psf->container_data) == NULL)
-               return SFE_INTERNAL ;
-       wav_fmt = &wpriv->wav_fmt ;
-
-       /* Set position to start of file to begin reading header. */
-       psf_binheader_readf (psf, "p", 0) ;
-
-       while (! done)
-       {       /* Each new chunk must start on an 8 byte boundary, so jump if needed. */
-               if (psf->headindex & 0x7)
-                       psf_binheader_readf (psf, "j", 8 - (psf->headindex & 0x7)) ;
-
-               /* Generate hash of 16 byte marker. */
-               bytesread += psf_binheader_readf (psf, "h", &marker) ;
-               chunk_size = 0 ;
-
-               switch (marker)
-               {       case riff_HASH16 :
-                                       if (parsestage)
-                                               return SFE_W64_NO_RIFF ;
-
-                                       bytesread += psf_binheader_readf (psf, "e8", &chunk_size) ;
-
-                                       if (psf->filelength != chunk_size)
-                                               psf_log_printf (psf, "riff : %D (should be %D)\n", chunk_size, psf->filelength) ;
-                                       else
-                                               psf_log_printf (psf, "riff : %D\n", chunk_size) ;
-
-                                       parsestage |= HAVE_riff ;
-                                       break ;
-
-                       case ACID_HASH16:
-                                       psf_log_printf (psf, "Looks like an ACID file. Exiting.\n") ;
-                                       return SFE_UNIMPLEMENTED ;
-
-                       case wave_HASH16 :
-                                       if ((parsestage & HAVE_riff) != HAVE_riff)
-                                               return SFE_W64_NO_WAVE ;
-                                       psf_log_printf (psf, "wave\n") ;
-                                       parsestage |= HAVE_wave ;
-                                       break ;
-
-                       case fmt_HASH16 :
-                                       if ((parsestage & (HAVE_riff | HAVE_wave)) != (HAVE_riff | HAVE_wave))
-                                               return SFE_WAV_NO_FMT ;
-
-                                       bytesread += psf_binheader_readf (psf, "e8", &chunk_size) ;
-                                       psf_log_printf (psf, " fmt : %D\n", chunk_size) ;
-
-                                       /* size of 16 byte marker and 8 byte chunk_size value. */
-                                       chunk_size -= 24 ;
-
-                                       if ((error = wav_w64_read_fmt_chunk (psf, (int) chunk_size)))
-                                               return error ;
-
-                                       if (chunk_size % 8)
-                                               psf_binheader_readf (psf, "j", 8 - (chunk_size % 8)) ;
-
-                                       format          = wav_fmt->format ;
-                                       parsestage |= HAVE_fmt ;
-                                       break ;
-
-                       case fact_HASH16:
-                                       {       sf_count_t frames ;
-
-                                               psf_binheader_readf (psf, "e88", &chunk_size, &frames) ;
-                                               psf_log_printf (psf, "   fact : %D\n     frames : %D\n",
-                                                                               chunk_size, frames) ;
-                                               } ;
-                                       break ;
-
-
-                       case data_HASH16 :
-                                       if ((parsestage & (HAVE_riff | HAVE_wave | HAVE_fmt)) != (HAVE_riff | HAVE_wave | HAVE_fmt))
-                                               return SFE_W64_NO_DATA ;
-
-                                       psf_binheader_readf (psf, "e8", &chunk_size) ;
-
-                                       psf->dataoffset = psf_ftell (psf) ;
-
-                                       psf->datalength = chunk_size - 24 ;
-
-                                       if (chunk_size % 8)
-                                               chunk_size += 8 - (chunk_size % 8) ;
-
-                                       psf_log_printf (psf, "data : %D\n", chunk_size) ;
-
-                                       parsestage |= HAVE_data ;
-
-                                       if (! psf->sf.seekable)
-                                               break ;
-
-                                       /* Seek past data and continue reading header. */
-                                       psf_fseek (psf, chunk_size, SEEK_CUR) ;
-                                       break ;
-
-                       case levl_HASH16 :
-                                       psf_binheader_readf (psf, "e8", &chunk_size) ;
-                                       psf_log_printf (psf, "levl : %D\n", chunk_size) ;
-                                       dword = chunk_size ;
-                                       psf_binheader_readf (psf, "j", dword - 24) ;
-                                       break ;
-
-                       case list_HASH16 :
-                                       psf_binheader_readf (psf, "e8", &chunk_size) ;
-                                       psf_log_printf (psf, "list : %D\n", chunk_size) ;
-                                       dword = chunk_size ;
-                                       psf_binheader_readf (psf, "j", dword - 24) ;
-                                       break ;
-
-                       case junk_HASH16 :
-                                       psf_binheader_readf (psf, "e8", &chunk_size) ;
-                                       psf_log_printf (psf, "junk : %D\n", chunk_size) ;
-                                       dword = chunk_size ;
-                                       psf_binheader_readf (psf, "j", dword - 24) ;
-                                       break ;
-
-                       case bext_MARKER :
-                                       psf_binheader_readf (psf, "e8", &chunk_size) ;
-                                       psf_log_printf (psf, "bext : %D\n", chunk_size) ;
-                                       dword = chunk_size ;
-                                       psf_binheader_readf (psf, "j", dword - 24) ;
-                                       break ;
-
-                       case MARKER_HASH16 :
-                                       psf_binheader_readf (psf, "e8", &chunk_size) ;
-                                       psf_log_printf (psf, "marker : %D\n", chunk_size) ;
-                                       dword = chunk_size ;
-                                       psf_binheader_readf (psf, "j", dword - 24) ;
-                                       break ;
-
-                       case SUMLIST_HASH16 :
-                                       psf_binheader_readf (psf, "e8", &chunk_size) ;
-                                       psf_log_printf (psf, "summary list : %D\n", chunk_size) ;
-                                       dword = chunk_size ;
-                                       psf_binheader_readf (psf, "j", dword - 24) ;
-                                       break ;
-
-                       default :
-                                       psf_log_printf (psf, "*** Unknown chunk marker : %X. Exiting parser.\n", marker) ;
-                                       done = SF_TRUE ;
-                                       break ;
-                       } ;     /* switch (dword) */
-
-               if (psf->sf.seekable == 0 && (parsestage & HAVE_data))
-                       break ;
-
-               if (psf_ftell (psf) >= (psf->filelength - (2 * SIGNED_SIZEOF (dword))))
-                       break ;
-               } ; /* while (1) */
-
-       if (psf->dataoffset <= 0)
-               return SFE_W64_NO_DATA ;
-
-       psf->endian = SF_ENDIAN_LITTLE ;                /* All W64 files are little endian. */
-
-       if (psf_ftell (psf) != psf->dataoffset)
-               psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-       if (psf->blockwidth)
-       {       if (psf->filelength - psf->dataoffset < psf->datalength)
-                       psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ;
-               else
-                       psf->sf.frames = psf->datalength / psf->blockwidth ;
-               } ;
-
-       switch (format)
-       {       case WAVE_FORMAT_PCM :
-               case WAVE_FORMAT_EXTENSIBLE :
-                                       /* extensible might be FLOAT, MULAW, etc as well! */
-                                       psf->sf.format = SF_FORMAT_W64 | u_bitwidth_to_subformat (psf->bytewidth * 8) ;
-                                       break ;
-
-               case WAVE_FORMAT_MULAW :
-                                       psf->sf.format = (SF_FORMAT_W64 | SF_FORMAT_ULAW) ;
-                                       break ;
-
-               case WAVE_FORMAT_ALAW :
-                                       psf->sf.format = (SF_FORMAT_W64 | SF_FORMAT_ALAW) ;
-                                       break ;
-
-               case WAVE_FORMAT_MS_ADPCM :
-                                       psf->sf.format = (SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM) ;
-                                       *blockalign = wav_fmt->msadpcm.blockalign ;
-                                       *framesperblock = wav_fmt->msadpcm.samplesperblock ;
-                                       break ;
-
-               case WAVE_FORMAT_IMA_ADPCM :
-                                       psf->sf.format = (SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM) ;
-                                       *blockalign = wav_fmt->ima.blockalign ;
-                                       *framesperblock = wav_fmt->ima.samplesperblock ;
-                                       break ;
-
-               case WAVE_FORMAT_GSM610 :
-                                       psf->sf.format = (SF_FORMAT_W64 | SF_FORMAT_GSM610) ;
-                                       break ;
-
-               case WAVE_FORMAT_IEEE_FLOAT :
-                                       psf->sf.format = SF_FORMAT_W64 ;
-                                       psf->sf.format |= (psf->bytewidth == 8) ? SF_FORMAT_DOUBLE : SF_FORMAT_FLOAT ;
-                                       break ;
-
-               default : return SFE_UNIMPLEMENTED ;
-               } ;
-
-       return 0 ;
-} /* w64_read_header */
-
-static int
-w64_write_header (SF_PRIVATE *psf, int calc_length)
-{      sf_count_t      fmt_size, current ;
-       size_t          fmt_pad = 0 ;
-       int             subformat, add_fact_chunk = SF_FALSE ;
-
-       current = psf_ftell (psf) ;
-
-       if (calc_length)
-       {       psf->filelength = psf_get_filelen (psf) ;
-
-               psf->datalength = psf->filelength - psf->dataoffset ;
-               if (psf->dataend)
-                       psf->datalength -= psf->filelength - psf->dataend ;
-
-               if (psf->bytewidth)
-                       psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-               } ;
-
-       /* Reset the current header length to zero. */
-       psf->header [0] = 0 ;
-       psf->headindex = 0 ;
-       psf_fseek (psf, 0, SEEK_SET) ;
-
-       /* riff marker, length, wave and 'fmt ' markers. */
-       psf_binheader_writef (psf, "eh8hh", riff_MARKER16, psf->filelength, wave_MARKER16, fmt_MARKER16) ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-
-       switch (subformat)
-       {       case    SF_FORMAT_PCM_U8 :
-               case    SF_FORMAT_PCM_16 :
-               case    SF_FORMAT_PCM_24 :
-               case    SF_FORMAT_PCM_32 :
-                                       fmt_size = 24 + 2 + 2 + 4 + 4 + 2 + 2 ;
-                                       fmt_pad = (size_t) (8 - (fmt_size & 0x7)) ;
-                                       fmt_size += fmt_pad ;
-
-                                       /* fmt : format, channels, samplerate */
-                                       psf_binheader_writef (psf, "e8224", fmt_size, WAVE_FORMAT_PCM, psf->sf.channels, psf->sf.samplerate) ;
-                                       /*  fmt : bytespersec */
-                                       psf_binheader_writef (psf, "e4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
-                                       /*  fmt : blockalign, bitwidth */
-                                       psf_binheader_writef (psf, "e22", psf->bytewidth * psf->sf.channels, psf->bytewidth * 8) ;
-                                       break ;
-
-               case SF_FORMAT_FLOAT :
-               case SF_FORMAT_DOUBLE :
-                                       fmt_size = 24 + 2 + 2 + 4 + 4 + 2 + 2 ;
-                                       fmt_pad = (size_t) (8 - (fmt_size & 0x7)) ;
-                                       fmt_size += fmt_pad ;
-
-                                       /* fmt : format, channels, samplerate */
-                                       psf_binheader_writef (psf, "e8224", fmt_size, WAVE_FORMAT_IEEE_FLOAT, psf->sf.channels, psf->sf.samplerate) ;
-                                       /*  fmt : bytespersec */
-                                       psf_binheader_writef (psf, "e4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
-                                       /*  fmt : blockalign, bitwidth */
-                                       psf_binheader_writef (psf, "e22", psf->bytewidth * psf->sf.channels, psf->bytewidth * 8) ;
-
-                                       add_fact_chunk = SF_TRUE ;
-                                       break ;
-
-               case SF_FORMAT_ULAW :
-                                       fmt_size = 24 + 2 + 2 + 4 + 4 + 2 + 2 ;
-                                       fmt_pad = (size_t) (8 - (fmt_size & 0x7)) ;
-                                       fmt_size += fmt_pad ;
-
-                                       /* fmt : format, channels, samplerate */
-                                       psf_binheader_writef (psf, "e8224", fmt_size, WAVE_FORMAT_MULAW, psf->sf.channels, psf->sf.samplerate) ;
-                                       /*  fmt : bytespersec */
-                                       psf_binheader_writef (psf, "e4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
-                                       /*  fmt : blockalign, bitwidth */
-                                       psf_binheader_writef (psf, "e22", psf->bytewidth * psf->sf.channels, 8) ;
-
-                                       add_fact_chunk = SF_TRUE ;
-                                       break ;
-
-               case SF_FORMAT_ALAW :
-                                       fmt_size = 24 + 2 + 2 + 4 + 4 + 2 + 2 ;
-                                       fmt_pad = (size_t) (8 - (fmt_size & 0x7)) ;
-                                       fmt_size += fmt_pad ;
-
-                                       /* fmt : format, channels, samplerate */
-                                       psf_binheader_writef (psf, "e8224", fmt_size, WAVE_FORMAT_ALAW, psf->sf.channels, psf->sf.samplerate) ;
-                                       /*  fmt : bytespersec */
-                                       psf_binheader_writef (psf, "e4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
-                                       /*  fmt : blockalign, bitwidth */
-                                       psf_binheader_writef (psf, "e22", psf->bytewidth * psf->sf.channels, 8) ;
-
-                                       add_fact_chunk = SF_TRUE ;
-                                       break ;
-
-               /* Lite remove start */
-               case SF_FORMAT_IMA_ADPCM :
-                                       {       int             blockalign, framesperblock, bytespersec ;
-
-                                               blockalign              = wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ;
-                                               framesperblock  = 2 * (blockalign - 4 * psf->sf.channels) / psf->sf.channels + 1 ;
-                                               bytespersec             = (psf->sf.samplerate * blockalign) / framesperblock ;
-
-                                               /* fmt chunk. */
-                                               fmt_size = 24 + 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 ;
-                                               fmt_pad = (size_t) (8 - (fmt_size & 0x7)) ;
-                                               fmt_size += fmt_pad ;
-
-                                               /* fmt : size, WAV format type, channels. */
-                                               psf_binheader_writef (psf, "e822", fmt_size, WAVE_FORMAT_IMA_ADPCM, psf->sf.channels) ;
-
-                                               /* fmt : samplerate, bytespersec. */
-                                               psf_binheader_writef (psf, "e44", psf->sf.samplerate, bytespersec) ;
-
-                                               /* fmt : blockalign, bitwidth, extrabytes, framesperblock. */
-                                               psf_binheader_writef (psf, "e2222", blockalign, 4, 2, framesperblock) ;
-                                               } ;
-
-                                       add_fact_chunk = SF_TRUE ;
-                                       break ;
-
-               case SF_FORMAT_MS_ADPCM :
-                                       {       int blockalign, framesperblock, bytespersec, extrabytes ;
-
-                                               blockalign              = wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ;
-                                               framesperblock  = 2 + 2 * (blockalign - 7 * psf->sf.channels) / psf->sf.channels ;
-                                               bytespersec             = (psf->sf.samplerate * blockalign) / framesperblock ;
-
-                                               /* fmt chunk. */
-                                               extrabytes      = 2 + 2 + MSADPCM_ADAPT_COEFF_COUNT * (2 + 2) ;
-                                               fmt_size        = 24 + 2 + 2 + 4 + 4 + 2 + 2 + 2 + extrabytes ;
-                                               fmt_pad = (size_t) (8 - (fmt_size & 0x7)) ;
-                                               fmt_size += fmt_pad ;
-
-                                               /* fmt : size, W64 format type, channels. */
-                                               psf_binheader_writef (psf, "e822", fmt_size, WAVE_FORMAT_MS_ADPCM, psf->sf.channels) ;
-
-                                               /* fmt : samplerate, bytespersec. */
-                                               psf_binheader_writef (psf, "e44", psf->sf.samplerate, bytespersec) ;
-
-                                               /* fmt : blockalign, bitwidth, extrabytes, framesperblock. */
-                                               psf_binheader_writef (psf, "e22222", blockalign, 4, extrabytes, framesperblock, 7) ;
-
-                                               msadpcm_write_adapt_coeffs (psf) ;
-                                               } ;
-
-                                       add_fact_chunk = SF_TRUE ;
-                                       break ;
-               /* Lite remove end */
-
-               case SF_FORMAT_GSM610 :
-                                       {       int bytespersec ;
-
-                                               bytespersec = (psf->sf.samplerate * WAV_W64_GSM610_BLOCKSIZE) / WAV_W64_GSM610_SAMPLES ;
-
-                                               /* fmt chunk. */
-                                               fmt_size = 24 + 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 ;
-                                               fmt_pad = (size_t) (8 - (fmt_size & 0x7)) ;
-                                               fmt_size += fmt_pad ;
-
-                                               /* fmt : size, WAV format type, channels. */
-                                               psf_binheader_writef (psf, "e822", fmt_size, WAVE_FORMAT_GSM610, psf->sf.channels) ;
-
-                                               /* fmt : samplerate, bytespersec. */
-                                               psf_binheader_writef (psf, "e44", psf->sf.samplerate, bytespersec) ;
-
-                                               /* fmt : blockalign, bitwidth, extrabytes, framesperblock. */
-                                               psf_binheader_writef (psf, "e2222", WAV_W64_GSM610_BLOCKSIZE, 0, 2, WAV_W64_GSM610_SAMPLES) ;
-                                               } ;
-
-                                       add_fact_chunk = SF_TRUE ;
-                                       break ;
-
-               default :       return SFE_UNIMPLEMENTED ;
-               } ;
-
-       /* Pad to 8 bytes with zeros. */
-       if (fmt_pad > 0)
-               psf_binheader_writef (psf, "z", fmt_pad) ;
-
-       if (add_fact_chunk)
-               psf_binheader_writef (psf, "eh88", fact_MARKER16, (sf_count_t) (16 + 8 + 8), psf->sf.frames) ;
-
-       psf_binheader_writef (psf, "eh8", data_MARKER16, psf->datalength + 24) ;
-       psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-       if (psf->error)
-               return psf->error ;
-
-       psf->dataoffset = psf->headindex ;
-
-       if (current > 0)
-               psf_fseek (psf, current, SEEK_SET) ;
-
-       return psf->error ;
-} /* w64_write_header */
-
-static int
-w64_close (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-               w64_write_header (psf, SF_TRUE) ;
-
-       return 0 ;
-} /* w64_close */
-
diff --git a/libs/libsndfile/src/wav.c b/libs/libsndfile/src/wav.c
deleted file mode 100644 (file)
index 6e616b7..0000000
+++ /dev/null
@@ -1,2048 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2004-2005 David Viens <davidv@plogue.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <stdlib.h>
-#include       <string.h>
-#include       <ctype.h>
-#include       <time.h>
-#ifdef HAVE_INTTYPES_H
-#include       <inttypes.h>
-#endif
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-#include       "wav_w64.h"
-
-/*------------------------------------------------------------------------------
- * Macros to handle big/little endian issues.
- */
-
-#define RIFF_MARKER            (MAKE_MARKER ('R', 'I', 'F', 'F'))
-#define RIFX_MARKER            (MAKE_MARKER ('R', 'I', 'F', 'X'))
-#define WAVE_MARKER            (MAKE_MARKER ('W', 'A', 'V', 'E'))
-#define fmt_MARKER             (MAKE_MARKER ('f', 'm', 't', ' '))
-#define data_MARKER            (MAKE_MARKER ('d', 'a', 't', 'a'))
-#define fact_MARKER            (MAKE_MARKER ('f', 'a', 'c', 't'))
-#define PEAK_MARKER            (MAKE_MARKER ('P', 'E', 'A', 'K'))
-
-#define cue_MARKER             (MAKE_MARKER ('c', 'u', 'e', ' '))
-#define LIST_MARKER            (MAKE_MARKER ('L', 'I', 'S', 'T'))
-#define slnt_MARKER            (MAKE_MARKER ('s', 'l', 'n', 't'))
-#define wavl_MARKER            (MAKE_MARKER ('w', 'a', 'v', 'l'))
-#define INFO_MARKER            (MAKE_MARKER ('I', 'N', 'F', 'O'))
-#define plst_MARKER            (MAKE_MARKER ('p', 'l', 's', 't'))
-#define adtl_MARKER            (MAKE_MARKER ('a', 'd', 't', 'l'))
-#define labl_MARKER            (MAKE_MARKER ('l', 'a', 'b', 'l'))
-#define ltxt_MARKER            (MAKE_MARKER ('l', 't', 'x', 't'))
-#define note_MARKER            (MAKE_MARKER ('n', 'o', 't', 'e'))
-#define smpl_MARKER            (MAKE_MARKER ('s', 'm', 'p', 'l'))
-#define bext_MARKER            (MAKE_MARKER ('b', 'e', 'x', 't'))
-#define iXML_MARKER            (MAKE_MARKER ('i', 'X', 'M', 'L'))
-#define levl_MARKER            (MAKE_MARKER ('l', 'e', 'v', 'l'))
-#define MEXT_MARKER            (MAKE_MARKER ('M', 'E', 'X', 'T'))
-#define DISP_MARKER            (MAKE_MARKER ('D', 'I', 'S', 'P'))
-#define acid_MARKER            (MAKE_MARKER ('a', 'c', 'i', 'd'))
-#define strc_MARKER            (MAKE_MARKER ('s', 't', 'r', 'c'))
-#define PAD_MARKER             (MAKE_MARKER ('P', 'A', 'D', ' '))
-#define afsp_MARKER            (MAKE_MARKER ('a', 'f', 's', 'p'))
-#define clm_MARKER             (MAKE_MARKER ('c', 'l', 'm', ' '))
-#define elmo_MARKER            (MAKE_MARKER ('e', 'l', 'm', 'o'))
-#define cart_MARKER            (MAKE_MARKER ('c', 'a', 'r', 't'))
-#define FLLR_MARKER            (MAKE_MARKER ('F', 'L', 'L', 'R'))
-
-#define exif_MARKER            (MAKE_MARKER ('e', 'x', 'i', 'f'))
-#define ever_MARKER            (MAKE_MARKER ('e', 'v', 'e', 'r'))
-#define etim_MARKER            (MAKE_MARKER ('e', 't', 'i', 'm'))
-#define ecor_MARKER            (MAKE_MARKER ('e', 'c', 'o', 'r'))
-#define emdl_MARKER            (MAKE_MARKER ('e', 'm', 'd', 'l'))
-#define emnt_MARKER            (MAKE_MARKER ('e', 'm', 'n', 't'))
-#define erel_MARKER            (MAKE_MARKER ('e', 'r', 'e', 'l'))
-#define eucm_MARKER            (MAKE_MARKER ('e', 'u', 'c', 'm'))
-#define olym_MARKER            (MAKE_MARKER ('o', 'l', 'y', 'm'))
-#define minf_MARKER            (MAKE_MARKER ('m', 'i', 'n', 'f'))
-#define elm1_MARKER            (MAKE_MARKER ('e', 'l', 'm', '1'))
-#define regn_MARKER            (MAKE_MARKER ('r', 'e', 'g', 'n'))
-#define ovwf_MARKER            (MAKE_MARKER ('o', 'v', 'w', 'f'))
-#define umid_MARKER            (MAKE_MARKER ('u', 'm', 'i', 'd'))
-#define SyLp_MARKER            (MAKE_MARKER ('S', 'y', 'L', 'p'))
-#define Cr8r_MARKER            (MAKE_MARKER ('C', 'r', '8', 'r'))
-#define JUNK_MARKER            (MAKE_MARKER ('J', 'U', 'N', 'K'))
-#define PMX_MARKER             (MAKE_MARKER ('_', 'P', 'M', 'X'))
-#define inst_MARKER            (MAKE_MARKER ('i', 'n', 's', 't'))
-#define AFAn_MARKER            (MAKE_MARKER ('A', 'F', 'A', 'n'))
-
-
-#define ISFT_MARKER            (MAKE_MARKER ('I', 'S', 'F', 'T'))
-#define ICRD_MARKER            (MAKE_MARKER ('I', 'C', 'R', 'D'))
-#define ICOP_MARKER            (MAKE_MARKER ('I', 'C', 'O', 'P'))
-#define IARL_MARKER            (MAKE_MARKER ('I', 'A', 'R', 'L'))
-#define IART_MARKER            (MAKE_MARKER ('I', 'A', 'R', 'T'))
-#define INAM_MARKER            (MAKE_MARKER ('I', 'N', 'A', 'M'))
-#define IENG_MARKER            (MAKE_MARKER ('I', 'E', 'N', 'G'))
-#define IGNR_MARKER            (MAKE_MARKER ('I', 'G', 'N', 'R'))
-#define ICOP_MARKER            (MAKE_MARKER ('I', 'C', 'O', 'P'))
-#define IPRD_MARKER            (MAKE_MARKER ('I', 'P', 'R', 'D'))
-#define ISRC_MARKER            (MAKE_MARKER ('I', 'S', 'R', 'C'))
-#define ISBJ_MARKER            (MAKE_MARKER ('I', 'S', 'B', 'J'))
-#define ICMT_MARKER            (MAKE_MARKER ('I', 'C', 'M', 'T'))
-#define IAUT_MARKER            (MAKE_MARKER ('I', 'A', 'U', 'T'))
-#define ITRK_MARKER            (MAKE_MARKER ('I', 'T', 'R', 'K'))
-
-/* Weird WAVPACK marker which can show up at the start of the DATA section. */
-#define wvpk_MARKER (MAKE_MARKER ('w', 'v', 'p', 'k'))
-#define OggS_MARKER (MAKE_MARKER ('O', 'g', 'g', 'S'))
-
-#define WAV_PEAK_CHUNK_SIZE(ch)        (2 * sizeof (int) + ch * (sizeof (float) + sizeof (int)))
-#define WAV_BEXT_MIN_CHUNK_SIZE                602
-#define WAV_BEXT_MAX_CHUNK_SIZE                (10 * 1024)
-
-#define WAV_CART_MIN_CHUNK_SIZE                2048
-#define WAV_CART_MAX_CHUNK_SIZE                0xffffffff
-
-
-enum
-{      HAVE_RIFF       = 0x01,
-       HAVE_WAVE       = 0x02,
-       HAVE_fmt        = 0x04,
-       HAVE_fact       = 0x08,
-       HAVE_PEAK       = 0x10,
-       HAVE_data       = 0x20,
-       HAVE_other      = 0x80000000
-} ;
-
-
-
-/*  known WAVEFORMATEXTENSIBLE GUIDS  */
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_PCM =
-{      0x00000001, 0x0000, 0x0010, {   0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_MS_ADPCM =
-{      0x00000002, 0x0000, 0x0010, {   0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_IEEE_FLOAT =
-{      0x00000003, 0x0000, 0x0010, {   0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_ALAW =
-{      0x00000006, 0x0000, 0x0010, {   0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_MULAW =
-{      0x00000007, 0x0000, 0x0010, {   0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-/*
-** the next two are from
-** http://dream.cs.bath.ac.uk/researchdev/wave-ex/bformat.html
-*/
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_PCM =
-{      0x00000001, 0x0721, 0x11d3, {   0x86, 0x44, 0xC8, 0xC1, 0xCA, 0x00, 0x00, 0x00 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_IEEE_FLOAT =
-{      0x00000003, 0x0721, 0x11d3, {   0x86, 0x44, 0xC8, 0xC1, 0xCA, 0x00, 0x00, 0x00 }
-} ;
-
-
-#if 0
-/* maybe interesting one day to read the following through sf_read_raw */
-/* http://www.bath.ac.uk/~masrwd/pvocex/pvocex.html */
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_PVOCEX =
-{      0x8312B9C2, 0x2E6E, 0x11d4, {   0xA8, 0x24, 0xDE, 0x5B, 0x96, 0xC3, 0xAB, 0x21 }
-} ;
-#endif
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int     wav_read_header         (SF_PRIVATE *psf, int *blockalign, int *framesperblock) ;
-static int     wav_write_header        (SF_PRIVATE *psf, int calc_length) ;
-
-static int     wav_write_tailer (SF_PRIVATE *psf) ;
-static void wav_write_strings (SF_PRIVATE *psf, int location) ;
-static int     wav_command (SF_PRIVATE *psf, int command, void *data, int datasize) ;
-static int     wav_close (SF_PRIVATE *psf) ;
-
-static int     wav_subchunk_parse      (SF_PRIVATE *psf, int chunk, uint32_t length) ;
-static int     exif_subchunk_parse     (SF_PRIVATE *psf, uint32_t length) ;
-static int     wav_read_smpl_chunk (SF_PRIVATE *psf, uint32_t chunklen) ;
-static int     wav_read_acid_chunk (SF_PRIVATE *psf, uint32_t chunklen) ;
-
-static int wav_set_chunk (SF_PRIVATE *psf, const SF_CHUNK_INFO * chunk_info) ;
-static SF_CHUNK_ITERATOR * wav_next_chunk_iterator (SF_PRIVATE *psf, SF_CHUNK_ITERATOR * iterator) ;
-static int wav_get_chunk_size (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info) ;
-static int wav_get_chunk_data (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-wav_open       (SF_PRIVATE *psf)
-{      WAV_PRIVATE * wpriv ;
-       int     format, subformat, error, blockalign = 0, framesperblock = 0 ;
-
-       if ((wpriv = calloc (1, sizeof (WAV_PRIVATE))) == NULL)
-               return SFE_MALLOC_FAILED ;
-       psf->container_data = wpriv ;
-
-       wpriv->wavex_ambisonic = SF_AMBISONIC_NONE ;
-       psf->strings.flags = SF_STR_ALLOW_START | SF_STR_ALLOW_END ;
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-       {       if ((error = wav_read_header (psf, &blockalign, &framesperblock)))
-                       return error ;
-
-               psf->next_chunk_iterator = wav_next_chunk_iterator ;
-               psf->get_chunk_size = wav_get_chunk_size ;
-               psf->get_chunk_data = wav_get_chunk_data ;
-               } ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       if (psf->is_pipe)
-                       return SFE_NO_PIPE_WRITE ;
-
-               wpriv->wavex_ambisonic = SF_AMBISONIC_NONE ;
-
-               format = SF_CONTAINER (psf->sf.format) ;
-               if (format != SF_FORMAT_WAV && format != SF_FORMAT_WAVEX)
-                       return  SFE_BAD_OPEN_FORMAT ;
-
-               psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-               /* RIFF WAVs are little-endian, RIFX WAVs are big-endian, default to little */
-               psf->endian = SF_ENDIAN (psf->sf.format) ;
-               if (CPU_IS_BIG_ENDIAN && psf->endian == SF_ENDIAN_CPU)
-                       psf->endian = SF_ENDIAN_BIG ;
-               else if (psf->endian != SF_ENDIAN_BIG)
-                       psf->endian = SF_ENDIAN_LITTLE ;
-
-               if (psf->file.mode != SFM_RDWR || psf->filelength < 44)
-               {       psf->filelength = 0 ;
-                       psf->datalength = 0 ;
-                       psf->dataoffset = 0 ;
-                       psf->sf.frames = 0 ;
-                       } ;
-
-               if (subformat == SF_FORMAT_IMA_ADPCM || subformat == SF_FORMAT_MS_ADPCM)
-               {       blockalign = wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ;
-                       framesperblock = -1 ; /* Corrected later. */
-                       } ;
-
-               /* By default, add the peak chunk to floating point files. Default behaviour
-               ** can be switched off using sf_command (SFC_SET_PEAK_CHUNK, SF_FALSE).
-               */
-               if (psf->file.mode == SFM_WRITE && (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE))
-               {       if ((psf->peak_info = peak_info_calloc (psf->sf.channels)) == NULL)
-                               return SFE_MALLOC_FAILED ;
-                       psf->peak_info->peak_loc = SF_PEAK_START ;
-                       } ;
-
-               psf->write_header       = wav_write_header ;
-               psf->set_chunk          = wav_set_chunk ;
-               } ;
-
-       psf->container_close = wav_close ;
-       psf->command = wav_command ;
-
-       switch (subformat)
-       {       case SF_FORMAT_PCM_U8 :
-               case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_PCM_24 :
-               case SF_FORMAT_PCM_32 :
-                                       error = pcm_init (psf) ;
-                                       break ;
-
-               case SF_FORMAT_ULAW :
-                                       error = ulaw_init (psf) ;
-                                       break ;
-
-               case SF_FORMAT_ALAW :
-                                       error = alaw_init (psf) ;
-                                       break ;
-
-               /* Lite remove start */
-               case SF_FORMAT_FLOAT :
-                                       error = float32_init (psf) ;
-                                       break ;
-
-               case SF_FORMAT_DOUBLE :
-                                       error = double64_init (psf) ;
-                                       break ;
-
-               case SF_FORMAT_IMA_ADPCM :
-                                       error = wav_w64_ima_init (psf, blockalign, framesperblock) ;
-                                       break ;
-
-               case SF_FORMAT_MS_ADPCM :
-                                       error = wav_w64_msadpcm_init (psf, blockalign, framesperblock) ;
-                                       break ;
-
-               case SF_FORMAT_G721_32 :
-                                       error = g72x_init (psf) ;
-                                       break ;
-               /* Lite remove end */
-
-               case SF_FORMAT_GSM610 :
-                                       error = gsm610_init (psf) ;
-                                       break ;
-
-               default :       return SFE_UNIMPLEMENTED ;
-               } ;
-
-       if (psf->file.mode == SFM_WRITE || (psf->file.mode == SFM_RDWR && psf->filelength == 0))
-               return psf->write_header (psf, SF_FALSE) ;
-
-       return error ;
-} /* wav_open */
-
-/*=========================================================================
-** Private functions.
-*/
-
-static int
-wav_read_header        (SF_PRIVATE *psf, int *blockalign, int *framesperblock)
-{      WAV_PRIVATE     *wpriv ;
-       WAV_FMT         *wav_fmt ;
-       FACT_CHUNK      fact_chunk ;
-       uint32_t        marker, chunk_size = 0, RIFFsize = 0, done = 0, uk ;
-       int                     parsestage = 0, error, format = 0 ;
-       char            buffer [256] ;
-
-       if (psf->filelength > SF_PLATFORM_S64 (0xffffffff))
-               psf_log_printf (psf, "Warning : filelength > 0xffffffff. This is bad!!!!\n") ;
-
-       if ((wpriv = psf->container_data) == NULL)
-               return SFE_INTERNAL ;
-       wav_fmt = &wpriv->wav_fmt ;
-
-       /* Set position to start of file to begin reading header. */
-       psf_binheader_readf (psf, "pmj", 0, &marker, -4) ;
-       psf->headindex = 0 ;
-
-       /* RIFX signifies big-endian format for all header and data  to prevent
-       ** lots of code copying here, we'll set the psf->rwf_endian flag once here,
-       ** and never specify endian-ness for all other header ops/
-       */
-       psf->rwf_endian = (marker == RIFF_MARKER) ? SF_ENDIAN_LITTLE : SF_ENDIAN_BIG ;
-
-       while (! done)
-       {       size_t jump = chunk_size & 1 ;
-
-               marker = chunk_size = 0 ;
-               psf_binheader_readf (psf, "jm4", jump, &marker, &chunk_size) ;
-               if (marker == 0)
-               {       psf_log_printf (psf, "Have 0 marker.\n") ;
-                       break ;
-                       } ;
-
-               psf_store_read_chunk_u32 (&psf->rchunks, marker, psf_ftell (psf), chunk_size) ;
-
-               switch (marker)
-               {       case RIFF_MARKER :
-                       case RIFX_MARKER :
-                                       if (parsestage)
-                                               return SFE_WAV_NO_RIFF ;
-
-                                       parsestage |= HAVE_RIFF ;
-
-                                       RIFFsize = chunk_size ;
-
-                                       if (psf->fileoffset > 0 && psf->filelength > RIFFsize + 8)
-                                       {       /* Set file length. */
-                                               psf->filelength = RIFFsize + 8 ;
-                                               if (marker == RIFF_MARKER)
-                                                       psf_log_printf (psf, "RIFF : %u\n", RIFFsize) ;
-                                               else
-                                                       psf_log_printf (psf, "RIFX : %u\n", RIFFsize) ;
-                                               }
-                                       else if (psf->filelength < RIFFsize + 2 * SIGNED_SIZEOF (marker))
-                                       {       if (marker == RIFF_MARKER)
-                                                       psf_log_printf (psf, "RIFF : %u (should be %D)\n", RIFFsize, psf->filelength - 2 * SIGNED_SIZEOF (marker)) ;
-                                               else
-                                                       psf_log_printf (psf, "RIFX : %u (should be %D)\n", RIFFsize, psf->filelength - 2 * SIGNED_SIZEOF (marker)) ;
-
-                                               RIFFsize = psf->filelength - 2 * SIGNED_SIZEOF (RIFFsize) ;
-                                               }
-                                       else
-                                       {       if (marker == RIFF_MARKER)
-                                                       psf_log_printf (psf, "RIFF : %u\n", RIFFsize) ;
-                                               else
-                                                       psf_log_printf (psf, "RIFX : %u\n", RIFFsize) ;
-                                       } ;
-
-                                       psf_binheader_readf (psf, "m", &marker) ;
-                                       if (marker != WAVE_MARKER)
-                                               return SFE_WAV_NO_WAVE ;
-                                       parsestage |= HAVE_WAVE ;
-                                       psf_log_printf (psf, "WAVE\n") ;
-                                       chunk_size = 0 ;
-                                       break ;
-
-                       case fmt_MARKER :
-                                       if ((parsestage & (HAVE_RIFF | HAVE_WAVE)) != (HAVE_RIFF | HAVE_WAVE))
-                                               return SFE_WAV_NO_FMT ;
-
-                                       /* If this file has a SECOND fmt chunk, I don't want to know about it. */
-                                       if (parsestage & HAVE_fmt)
-                                               break ;
-
-                                       parsestage |= HAVE_fmt ;
-
-                                       psf_log_printf (psf, "fmt  : %d\n", chunk_size) ;
-
-                                       if ((error = wav_w64_read_fmt_chunk (psf, chunk_size)))
-                                               return error ;
-
-                                       format = wav_fmt->format ;
-                                       break ;
-
-                       case data_MARKER :
-                                       if ((parsestage & (HAVE_RIFF | HAVE_WAVE | HAVE_fmt)) != (HAVE_RIFF | HAVE_WAVE | HAVE_fmt))
-                                               return SFE_WAV_NO_DATA ;
-
-                                       if (psf->file.mode == SFM_RDWR && (parsestage & HAVE_other) != 0)
-                                               return SFE_RDWR_BAD_HEADER ;
-
-                                       parsestage |= HAVE_data ;
-
-                                       psf->datalength = chunk_size ;
-                                       psf->dataoffset = psf_ftell (psf) ;
-
-                                       if (psf->dataoffset > 0)
-                                       {       if (chunk_size == 0 && RIFFsize == 8 && psf->filelength > 44)
-                                               {       psf_log_printf (psf, "*** Looks like a WAV file which wasn't closed properly. Fixing it.\n") ;
-                                                       psf->datalength = psf->filelength - psf->dataoffset ;
-                                                       } ;
-
-                                               if (psf->datalength > psf->filelength - psf->dataoffset)
-                                               {       psf_log_printf (psf, "data : %D (should be %D)\n", psf->datalength, psf->filelength - psf->dataoffset) ;
-                                                       psf->datalength = psf->filelength - psf->dataoffset ;
-                                                       }
-                                               else
-                                                       psf_log_printf (psf, "data : %D\n", psf->datalength) ;
-
-                                               /* Only set dataend if there really is data at the end. */
-                                               if (psf->datalength + psf->dataoffset < psf->filelength)
-                                                       psf->dataend = psf->datalength + psf->dataoffset ;
-
-                                               psf->datalength += chunk_size & 1 ;
-                                               chunk_size = 0 ;
-                                               } ;
-
-                                       if (! psf->sf.seekable || psf->dataoffset < 0)
-                                               break ;
-
-                                       /* Seek past data and continue reading header. */
-                                       psf_fseek (psf, psf->datalength, SEEK_CUR) ;
-
-                                       if (psf_ftell (psf) != psf->datalength + psf->dataoffset)
-                                               psf_log_printf (psf, "*** psf_fseek past end error ***\n") ;
-                                       break ;
-
-                       case fact_MARKER :
-                                       if ((parsestage & (HAVE_RIFF | HAVE_WAVE)) != (HAVE_RIFF | HAVE_WAVE))
-                                               return SFE_WAV_BAD_FACT ;
-
-                                       parsestage |= HAVE_fact ;
-
-                                       if ((parsestage & HAVE_fmt) != HAVE_fmt)
-                                               psf_log_printf (psf, "*** Should have 'fmt ' chunk before 'fact'\n") ;
-
-                                       psf_binheader_readf (psf, "4", & (fact_chunk.frames)) ;
-
-                                       if (chunk_size > SIGNED_SIZEOF (fact_chunk))
-                                               psf_binheader_readf (psf, "j", (int) (chunk_size - SIGNED_SIZEOF (fact_chunk))) ;
-
-                                       if (chunk_size)
-                                               psf_log_printf (psf, "%M : %d\n", marker, chunk_size) ;
-                                       else
-                                               psf_log_printf (psf, "%M : %d (should not be zero)\n", marker, chunk_size) ;
-
-                                       psf_log_printf (psf, "  frames  : %d\n", fact_chunk.frames) ;
-                                       break ;
-
-                       case PEAK_MARKER :
-                                       if ((parsestage & (HAVE_RIFF | HAVE_WAVE | HAVE_fmt)) != (HAVE_RIFF | HAVE_WAVE | HAVE_fmt))
-                                               return SFE_WAV_PEAK_B4_FMT ;
-
-                                       parsestage |= HAVE_PEAK ;
-
-                                       psf_log_printf (psf, "%M : %d\n", marker, chunk_size) ;
-                                       if (chunk_size != WAV_PEAK_CHUNK_SIZE (psf->sf.channels))
-                                       {       psf_binheader_readf (psf, "j", chunk_size) ;
-                                               psf_log_printf (psf, "*** File PEAK chunk size doesn't fit with number of channels (%d).\n", psf->sf.channels) ;
-                                               return SFE_WAV_BAD_PEAK ;
-                                               } ;
-
-                                       if ((psf->peak_info = peak_info_calloc (psf->sf.channels)) == NULL)
-                                               return SFE_MALLOC_FAILED ;
-
-                                       /* read in rest of PEAK chunk. */
-                                       psf_binheader_readf (psf, "44", & (psf->peak_info->version), & (psf->peak_info->timestamp)) ;
-
-                                       if (psf->peak_info->version != 1)
-                                               psf_log_printf (psf, "  version    : %d *** (should be version 1)\n", psf->peak_info->version) ;
-                                       else
-                                               psf_log_printf (psf, "  version    : %d\n", psf->peak_info->version) ;
-
-                                       psf_log_printf (psf, "  time stamp : %d\n", psf->peak_info->timestamp) ;
-                                       psf_log_printf (psf, "    Ch   Position       Value\n") ;
-
-                                       for (uk = 0 ; uk < (uint32_t) psf->sf.channels ; uk++)
-                                       {       float value ;
-                                               uint32_t position ;
-
-                                               psf_binheader_readf (psf, "f4", &value, &position) ;
-                                               psf->peak_info->peaks [uk].value = value ;
-                                               psf->peak_info->peaks [uk].position = position ;
-
-                                               snprintf (buffer, sizeof (buffer), "    %2d   %-12" PRId64 "   %g\n",
-                                                               uk, psf->peak_info->peaks [uk].position, psf->peak_info->peaks [uk].value) ;
-                                               buffer [sizeof (buffer) - 1] = 0 ;
-                                               psf_log_printf (psf, "%s", buffer) ;
-                                               } ;
-
-                                       psf->peak_info->peak_loc = ((parsestage & HAVE_data) == 0) ? SF_PEAK_START : SF_PEAK_END ;
-                                       break ;
-
-                       case cue_MARKER :
-                                       parsestage |= HAVE_other ;
-
-                                       {       uint32_t bytesread, cue_count ;
-                                               int id, position, chunk_id, chunk_start, block_start, offset ;
-
-                                               bytesread = psf_binheader_readf (psf, "4", &cue_count) ;
-                                               psf_log_printf (psf, "%M : %u\n", marker, chunk_size) ;
-
-                                               if (cue_count > 10)
-                                               {       psf_log_printf (psf, "  Count : %d (skipping)\n", cue_count) ;
-                                                       psf_binheader_readf (psf, "j", cue_count * 24) ;
-                                                       break ;
-                                                       } ;
-
-                                               psf_log_printf (psf, "  Count : %d\n", cue_count) ;
-
-                                               while (cue_count)
-                                               {       bytesread += psf_binheader_readf (psf, "444444", &id, &position,
-                                                                       &chunk_id, &chunk_start, &block_start, &offset) ;
-                                                       psf_log_printf (psf,    "   Cue ID : %2d"
-                                                                                                       "  Pos : %5u  Chunk : %M"
-                                                                                                       "  Chk Start : %d  Blk Start : %d"
-                                                                                                       "  Offset : %5d\n",
-                                                                       id, position, chunk_id, chunk_start, block_start, offset) ;
-                                                       cue_count -- ;
-                                                       } ;
-
-                                               if (bytesread != chunk_size)
-                                               {       psf_log_printf (psf, "**** Chunk size weirdness (%d != %d)\n", chunk_size, bytesread) ;
-                                                       psf_binheader_readf (psf, "j", chunk_size - bytesread) ;
-                                                       } ;
-                                               } ;
-                                       break ;
-
-                       case smpl_MARKER :
-                                       parsestage |= HAVE_other ;
-
-                                       psf_log_printf (psf, "smpl : %u\n", chunk_size) ;
-
-                                       if ((error = wav_read_smpl_chunk (psf, chunk_size)))
-                                               return error ;
-                                       break ;
-
-                       case acid_MARKER :
-                                       parsestage |= HAVE_other ;
-
-                                       psf_log_printf (psf, "acid : %u\n", chunk_size) ;
-
-                                       if ((error = wav_read_acid_chunk (psf, chunk_size)))
-                                               return error ;
-                                       break ;
-
-                       case INFO_MARKER :
-                       case LIST_MARKER :
-                                       parsestage |= HAVE_other ;
-
-                                       if ((error = wav_subchunk_parse (psf, marker, chunk_size)) != 0)
-                                               return error ;
-                                       break ;
-
-                       case bext_MARKER :
-                                       /*
-                                       The 'bext' chunk can actually be updated, so don't need to set this.
-                                       parsestage |= HAVE_other ;
-                                       */
-                                       if ((error = wav_read_bext_chunk (psf, chunk_size)))
-                                               return error ;
-                                       break ;
-
-                       case PAD_MARKER :
-                                       /*
-                                       We can eat into a 'PAD ' chunk if we need to.
-                                       parsestage |= HAVE_other ;
-                                       */
-                                       psf_log_printf (psf, "%M : %u\n", marker, chunk_size) ;
-                                       psf_binheader_readf (psf, "j", chunk_size) ;
-                                       break ;
-
-                       case cart_MARKER:
-                                       if ((error = wav_read_cart_chunk (psf, chunk_size)))
-                                               return error ;
-                                       break ;
-
-                       case iXML_MARKER : /* See http://en.wikipedia.org/wiki/IXML */
-                       case strc_MARKER : /* Multiple of 32 bytes. */
-                       case afsp_MARKER :
-                       case clm_MARKER :
-                       case elmo_MARKER :
-                       case levl_MARKER :
-                       case plst_MARKER :
-                       case minf_MARKER :
-                       case elm1_MARKER :
-                       case regn_MARKER :
-                       case ovwf_MARKER :
-                       case inst_MARKER :
-                       case AFAn_MARKER :
-                       case umid_MARKER :
-                       case SyLp_MARKER :
-                       case Cr8r_MARKER :
-                       case JUNK_MARKER :
-                       case PMX_MARKER :
-                       case DISP_MARKER :
-                       case MEXT_MARKER :
-                       case FLLR_MARKER :
-                                       psf_log_printf (psf, "%M : %u\n", marker, chunk_size) ;
-                                       psf_binheader_readf (psf, "j", chunk_size) ;
-                                       break ;
-
-                       default :
-                                       if (psf_isprint ((marker >> 24) & 0xFF) && psf_isprint ((marker >> 16) & 0xFF)
-                                               && psf_isprint ((marker >> 8) & 0xFF) && psf_isprint (marker & 0xFF))
-                                       {       psf_log_printf (psf, "*** %M : %d (unknown marker)\n", marker, chunk_size) ;
-                                               psf_binheader_readf (psf, "j", chunk_size) ;
-                                               break ;
-                                               } ;
-                                       if (psf_ftell (psf) & 0x03)
-                                       {       psf_log_printf (psf, "  Unknown chunk marker at position %D. Resynching.\n", psf_ftell (psf) - 8) ;
-                                               psf_binheader_readf (psf, "j", -3) ;
-                                               /* File is too messed up so we prevent editing in RDWR mode here. */
-                                               parsestage |= HAVE_other ;
-                                               break ;
-                                               } ;
-                                       psf_log_printf (psf, "*** Unknown chunk marker (%X) at position %D. Exiting parser.\n", marker, psf_ftell (psf) - 8) ;
-                                       done = SF_TRUE ;
-                                       break ;
-                       } ;     /* switch (marker) */
-
-               if (! psf->sf.seekable && (parsestage & HAVE_data))
-                       break ;
-
-               if (psf_ftell (psf) >= psf->filelength - SIGNED_SIZEOF (chunk_size))
-               {       psf_log_printf (psf, "End\n") ;
-                       break ;
-                       } ;
-               } ; /* while (1) */
-
-       if (psf->dataoffset <= 0)
-               return SFE_WAV_NO_DATA ;
-
-       /* WAVs can be little or big endian */
-       psf->endian = psf->rwf_endian ;
-
-       psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-       if (psf->is_pipe == 0)
-       {       /*
-               ** Check for 'wvpk' at the start of the DATA section. Not able to
-               ** handle this.
-               */
-               psf_binheader_readf (psf, "4", &marker) ;
-               if (marker == wvpk_MARKER || marker == OggS_MARKER)
-                       return SFE_WAV_WVPK_DATA ;
-               } ;
-
-       /* Seek to start of DATA section. */
-       psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-       if (psf->blockwidth)
-       {       if (psf->filelength - psf->dataoffset < psf->datalength)
-                       psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ;
-               else
-                       psf->sf.frames = psf->datalength / psf->blockwidth ;
-               } ;
-
-       switch (format)
-       {       case WAVE_FORMAT_EXTENSIBLE :
-                       if (psf->sf.format == (SF_FORMAT_WAVEX | SF_FORMAT_MS_ADPCM))
-                       {       *blockalign = wav_fmt->msadpcm.blockalign ;
-                               *framesperblock = wav_fmt->msadpcm.samplesperblock ;
-                               } ;
-                       break ;
-
-               case WAVE_FORMAT_PCM :
-                                       psf->sf.format = SF_FORMAT_WAV | u_bitwidth_to_subformat (psf->bytewidth * 8) ;
-                                       break ;
-
-               case WAVE_FORMAT_MULAW :
-               case IBM_FORMAT_MULAW :
-                                       psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_ULAW) ;
-                                       break ;
-
-               case WAVE_FORMAT_ALAW :
-               case IBM_FORMAT_ALAW :
-                                       psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_ALAW) ;
-                                       break ;
-
-               case WAVE_FORMAT_MS_ADPCM :
-                                       psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM) ;
-                                       *blockalign = wav_fmt->msadpcm.blockalign ;
-                                       *framesperblock = wav_fmt->msadpcm.samplesperblock ;
-                                       break ;
-
-               case WAVE_FORMAT_IMA_ADPCM :
-                                       psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM) ;
-                                       *blockalign = wav_fmt->ima.blockalign ;
-                                       *framesperblock = wav_fmt->ima.samplesperblock ;
-                                       break ;
-
-               case WAVE_FORMAT_GSM610 :
-                                       psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_GSM610) ;
-                                       break ;
-
-               case WAVE_FORMAT_IEEE_FLOAT :
-                                       psf->sf.format = SF_FORMAT_WAV ;
-                                       psf->sf.format |= (psf->bytewidth == 8) ? SF_FORMAT_DOUBLE : SF_FORMAT_FLOAT ;
-                                       break ;
-
-               case WAVE_FORMAT_G721_ADPCM :
-                                       psf->sf.format = SF_FORMAT_WAV | SF_FORMAT_G721_32 ;
-                                       break ;
-
-               default : return SFE_UNIMPLEMENTED ;
-               } ;
-
-       if (wpriv->fmt_is_broken)
-               wav_w64_analyze (psf) ;
-
-       /* Only set the format endian-ness if its non-standard big-endian. */
-       if (psf->endian == SF_ENDIAN_BIG)
-               psf->sf.format |= SF_ENDIAN_BIG ;
-
-       return 0 ;
-} /* wav_read_header */
-
-static int
-wav_write_fmt_chunk (SF_PRIVATE *psf)
-{      int subformat, fmt_size, add_fact_chunk = 0 ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-
-       switch (subformat)
-       {       case SF_FORMAT_PCM_U8 :
-               case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_PCM_24 :
-               case SF_FORMAT_PCM_32 :
-                                       fmt_size = 2 + 2 + 4 + 4 + 2 + 2 ;
-
-                                       /* fmt : format, channels, samplerate */
-                                       psf_binheader_writef (psf, "4224", fmt_size, WAVE_FORMAT_PCM, psf->sf.channels, psf->sf.samplerate) ;
-                                       /*  fmt : bytespersec */
-                                       psf_binheader_writef (psf, "4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
-                                       /*  fmt : blockalign, bitwidth */
-                                       psf_binheader_writef (psf, "22", psf->bytewidth * psf->sf.channels, psf->bytewidth * 8) ;
-                                       break ;
-
-               case SF_FORMAT_FLOAT :
-               case SF_FORMAT_DOUBLE :
-                                       fmt_size = 2 + 2 + 4 + 4 + 2 + 2 ;
-
-                                       /* fmt : format, channels, samplerate */
-                                       psf_binheader_writef (psf, "4224", fmt_size, WAVE_FORMAT_IEEE_FLOAT, psf->sf.channels, psf->sf.samplerate) ;
-                                       /*  fmt : bytespersec */
-                                       psf_binheader_writef (psf, "4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
-                                       /*  fmt : blockalign, bitwidth */
-                                       psf_binheader_writef (psf, "22", psf->bytewidth * psf->sf.channels, psf->bytewidth * 8) ;
-
-                                       add_fact_chunk = SF_TRUE ;
-                                       break ;
-
-               case SF_FORMAT_ULAW :
-                                       fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 ;
-
-                                       /* fmt : format, channels, samplerate */
-                                       psf_binheader_writef (psf, "4224", fmt_size, WAVE_FORMAT_MULAW, psf->sf.channels, psf->sf.samplerate) ;
-                                       /*  fmt : bytespersec */
-                                       psf_binheader_writef (psf, "4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
-                                       /*  fmt : blockalign, bitwidth, extrabytes */
-                                       psf_binheader_writef (psf, "222", psf->bytewidth * psf->sf.channels, 8, 0) ;
-
-                                       add_fact_chunk = SF_TRUE ;
-                                       break ;
-
-               case SF_FORMAT_ALAW :
-                                       fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 ;
-
-                                       /* fmt : format, channels, samplerate */
-                                       psf_binheader_writef (psf, "4224", fmt_size, WAVE_FORMAT_ALAW, psf->sf.channels, psf->sf.samplerate) ;
-                                       /*  fmt : bytespersec */
-                                       psf_binheader_writef (psf, "4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
-                                       /*  fmt : blockalign, bitwidth, extrabytes */
-                                       psf_binheader_writef (psf, "222", psf->bytewidth * psf->sf.channels, 8, 0) ;
-
-                                       add_fact_chunk = SF_TRUE ;
-                                       break ;
-
-               /* Lite remove start */
-               case SF_FORMAT_IMA_ADPCM :
-                                       {       int blockalign, framesperblock, bytespersec ;
-
-                                               blockalign              = wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ;
-                                               framesperblock  = 2 * (blockalign - 4 * psf->sf.channels) / psf->sf.channels + 1 ;
-                                               bytespersec             = (psf->sf.samplerate * blockalign) / framesperblock ;
-
-                                               /* fmt chunk. */
-                                               fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 ;
-
-                                               /* fmt : size, WAV format type, channels, samplerate, bytespersec */
-                                               psf_binheader_writef (psf, "42244", fmt_size, WAVE_FORMAT_IMA_ADPCM,
-                                                                       psf->sf.channels, psf->sf.samplerate, bytespersec) ;
-
-                                               /* fmt : blockalign, bitwidth, extrabytes, framesperblock. */
-                                               psf_binheader_writef (psf, "2222", blockalign, 4, 2, framesperblock) ;
-                                               } ;
-
-                                       add_fact_chunk = SF_TRUE ;
-                                       break ;
-
-               case SF_FORMAT_MS_ADPCM :
-                                       {       int     blockalign, framesperblock, bytespersec, extrabytes ;
-
-                                               blockalign              = wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ;
-                                               framesperblock  = 2 + 2 * (blockalign - 7 * psf->sf.channels) / psf->sf.channels ;
-                                               bytespersec             = (psf->sf.samplerate * blockalign) / framesperblock ;
-
-                                               /* fmt chunk. */
-                                               extrabytes      = 2 + 2 + MSADPCM_ADAPT_COEFF_COUNT * (2 + 2) ;
-                                               fmt_size        = 2 + 2 + 4 + 4 + 2 + 2 + 2 + extrabytes ;
-
-                                               /* fmt : size, WAV format type, channels. */
-                                               psf_binheader_writef (psf, "422", fmt_size, WAVE_FORMAT_MS_ADPCM, psf->sf.channels) ;
-
-                                               /* fmt : samplerate, bytespersec. */
-                                               psf_binheader_writef (psf, "44", psf->sf.samplerate, bytespersec) ;
-
-                                               /* fmt : blockalign, bitwidth, extrabytes, framesperblock. */
-                                               psf_binheader_writef (psf, "22222", blockalign, 4, extrabytes, framesperblock, 7) ;
-
-                                               msadpcm_write_adapt_coeffs (psf) ;
-                                               } ;
-
-                                       add_fact_chunk = SF_TRUE ;
-                                       break ;
-
-
-               case SF_FORMAT_G721_32 :
-                                       /* fmt chunk. */
-                                       fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 ;
-
-                                       /* fmt : size, WAV format type, channels, samplerate, bytespersec */
-                                       psf_binheader_writef (psf, "42244", fmt_size, WAVE_FORMAT_G721_ADPCM,
-                                                               psf->sf.channels, psf->sf.samplerate, psf->sf.samplerate * psf->sf.channels / 2) ;
-
-                                       /* fmt : blockalign, bitwidth, extrabytes, auxblocksize. */
-                                       psf_binheader_writef (psf, "2222", 64, 4, 2, 0) ;
-
-                                       add_fact_chunk = SF_TRUE ;
-                                       break ;
-
-               /* Lite remove end */
-
-               case SF_FORMAT_GSM610 :
-                                       {       int     blockalign, framesperblock, bytespersec ;
-
-                                               blockalign              = WAV_W64_GSM610_BLOCKSIZE ;
-                                               framesperblock  = WAV_W64_GSM610_SAMPLES ;
-                                               bytespersec             = (psf->sf.samplerate * blockalign) / framesperblock ;
-
-                                               /* fmt chunk. */
-                                               fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 ;
-
-                                               /* fmt : size, WAV format type, channels. */
-                                               psf_binheader_writef (psf, "422", fmt_size, WAVE_FORMAT_GSM610, psf->sf.channels) ;
-
-                                               /* fmt : samplerate, bytespersec. */
-                                               psf_binheader_writef (psf, "44", psf->sf.samplerate, bytespersec) ;
-
-                                               /* fmt : blockalign, bitwidth, extrabytes, framesperblock. */
-                                               psf_binheader_writef (psf, "2222", blockalign, 0, 2, framesperblock) ;
-                                               } ;
-
-                                       add_fact_chunk = SF_TRUE ;
-                                       break ;
-
-               default :       return SFE_UNIMPLEMENTED ;
-               } ;
-
-       if (add_fact_chunk)
-               psf_binheader_writef (psf, "tm48", fact_MARKER, 4, psf->sf.frames) ;
-
-       return 0 ;
-} /* wav_write_fmt_chunk */
-
-static int
-wavex_write_fmt_chunk (SF_PRIVATE *psf)
-{      WAV_PRIVATE     *wpriv ;
-       int subformat, fmt_size, add_fact_chunk = 0 ;
-
-       if ((wpriv = psf->container_data) == NULL)
-               return SFE_INTERNAL ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-
-       /* initial section (same for all, it appears) */
-       switch (subformat)
-       {       case SF_FORMAT_PCM_U8 :
-               case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_PCM_24 :
-               case SF_FORMAT_PCM_32 :
-               case SF_FORMAT_FLOAT :
-               case SF_FORMAT_DOUBLE :
-               case SF_FORMAT_ULAW :
-               case SF_FORMAT_ALAW :
-                       fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 + 4 + 4 + 2 + 2 + 8 ;
-
-                       /* fmt : format, channels, samplerate */
-                       psf_binheader_writef (psf, "4224", fmt_size, WAVE_FORMAT_EXTENSIBLE, psf->sf.channels, psf->sf.samplerate) ;
-                       /*  fmt : bytespersec */
-                       psf_binheader_writef (psf, "4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
-                       /*  fmt : blockalign, bitwidth */
-                       psf_binheader_writef (psf, "22", psf->bytewidth * psf->sf.channels, psf->bytewidth * 8) ;
-
-                       /* cbSize 22 is sizeof (WAVEFORMATEXTENSIBLE) - sizeof (WAVEFORMATEX) */
-                       psf_binheader_writef (psf, "2", 22) ;
-
-                       /* wValidBitsPerSample, for our use same as bitwidth as we use it fully */
-                       psf_binheader_writef (psf, "2", psf->bytewidth * 8) ;
-
-                       /* For an Ambisonic file set the channel mask to zero.
-                       ** Otherwise use a default based on the channel count.
-                       */
-                       if (wpriv->wavex_ambisonic != SF_AMBISONIC_NONE)
-                               psf_binheader_writef (psf, "4", 0) ;
-                       else if (wpriv->wavex_channelmask != 0)
-                               psf_binheader_writef (psf, "4", wpriv->wavex_channelmask) ;
-                       else
-                       {       /*
-                               ** Ok some liberty is taken here to use the most commonly used channel masks
-                               ** instead of "no mapping". If you really want to use "no mapping" for 8 channels and less
-                               ** please don't use wavex. (otherwise we'll have to create a new SF_COMMAND)
-                               */
-                               switch (psf->sf.channels)
-                               {       case 1 :        /* center channel mono */
-                                               psf_binheader_writef (psf, "4", 0x4) ;
-                                               break ;
-
-                                       case 2 :        /* front left and right */
-                                               psf_binheader_writef (psf, "4", 0x1 | 0x2) ;
-                                               break ;
-
-                                       case 4 :        /* Quad */
-                                               psf_binheader_writef (psf, "4", 0x1 | 0x2 | 0x10 | 0x20) ;
-                                               break ;
-
-                                       case 6 :        /* 5.1 */
-                                               psf_binheader_writef (psf, "4", 0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20) ;
-                                               break ;
-
-                                       case 8 :        /* 7.1 */
-                                               psf_binheader_writef (psf, "4", 0x1 | 0x2 | 0x4 | 0x8 | 0x10 | 0x20 | 0x40 | 0x80) ;
-                                               break ;
-
-                                       default :       /* 0 when in doubt , use direct out, ie NO mapping*/
-                                               psf_binheader_writef (psf, "4", 0x0) ;
-                                               break ;
-                                       } ;
-                               } ;
-                       break ;
-
-               case SF_FORMAT_MS_ADPCM : /* Todo, GUID exists might have different header as per wav_write_header */
-               default :
-                       return SFE_UNIMPLEMENTED ;
-               } ;
-
-       /* GUID section, different for each */
-
-       switch (subformat)
-       {       case SF_FORMAT_PCM_U8 :
-               case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_PCM_24 :
-               case SF_FORMAT_PCM_32 :
-                       wavex_write_guid (psf, wpriv->wavex_ambisonic == SF_AMBISONIC_NONE ?
-                                               &MSGUID_SUBTYPE_PCM : &MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_PCM) ;
-                       break ;
-
-               case SF_FORMAT_FLOAT :
-               case SF_FORMAT_DOUBLE :
-                       wavex_write_guid (psf, wpriv->wavex_ambisonic == SF_AMBISONIC_NONE ?
-                                               &MSGUID_SUBTYPE_IEEE_FLOAT : &MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_IEEE_FLOAT) ;
-                       add_fact_chunk = SF_TRUE ;
-                       break ;
-
-               case SF_FORMAT_ULAW :
-                       wavex_write_guid (psf, &MSGUID_SUBTYPE_MULAW) ;
-                       add_fact_chunk = SF_TRUE ;
-                       break ;
-
-               case SF_FORMAT_ALAW :
-                       wavex_write_guid (psf, &MSGUID_SUBTYPE_ALAW) ;
-                       add_fact_chunk = SF_TRUE ;
-                       break ;
-
-#if 0
-               /* This is dead code due to return in previous switch statement. */
-               case SF_FORMAT_MS_ADPCM : /* todo, GUID exists */
-                       wavex_write_guid (psf, &MSGUID_SUBTYPE_MS_ADPCM) ;
-                       add_fact_chunk = SF_TRUE ;
-                       break ;
-                       return SFE_UNIMPLEMENTED ;
-#endif
-
-               default : return SFE_UNIMPLEMENTED ;
-               } ;
-
-       if (add_fact_chunk)
-               psf_binheader_writef (psf, "tm48", fact_MARKER, 4, psf->sf.frames) ;
-
-       return 0 ;
-} /* wavex_write_fmt_chunk */
-
-
-static int
-wav_write_header (SF_PRIVATE *psf, int calc_length)
-{      sf_count_t      current ;
-       uint32_t        uk ;
-       int             k, error, has_data = SF_FALSE ;
-
-       current = psf_ftell (psf) ;
-
-       if (current > psf->dataoffset)
-               has_data = SF_TRUE ;
-
-       if (calc_length)
-       {       psf->filelength = psf_get_filelen (psf) ;
-
-               psf->datalength = psf->filelength - psf->dataoffset ;
-
-               if (psf->dataend)
-                       psf->datalength -= psf->filelength - psf->dataend ;
-               else if (psf->bytewidth > 0 && psf->sf.seekable == SF_TRUE)
-                       psf->datalength = psf->sf.frames * psf->bytewidth * psf->sf.channels ;
-               } ;
-
-       /* Reset the current header length to zero. */
-       psf->header [0] = 0 ;
-       psf->headindex = 0 ;
-       psf_fseek (psf, 0, SEEK_SET) ;
-
-       /*
-       ** RIFX signifies big-endian format for all header and data.
-       ** To prevent lots of code copying here, we'll set the psf->rwf_endian flag
-       ** once here, and never specify endian-ness for all other header operations.
-       */
-
-       /* RIFF/RIFX marker, length, WAVE and 'fmt ' markers. */
-
-       if (psf->endian == SF_ENDIAN_LITTLE)
-               psf_binheader_writef (psf, "etm8", RIFF_MARKER, (psf->filelength < 8) ? 8 : psf->filelength - 8) ;
-       else
-               psf_binheader_writef (psf, "Etm8", RIFX_MARKER, (psf->filelength < 8) ? 8 : psf->filelength - 8) ;
-
-       /* WAVE and 'fmt ' markers. */
-       psf_binheader_writef (psf, "mm", WAVE_MARKER, fmt_MARKER) ;
-
-       /* Write the 'fmt ' chunk. */
-       switch (SF_CONTAINER (psf->sf.format))
-       {       case SF_FORMAT_WAV :
-                               if ((error = wav_write_fmt_chunk (psf)) != 0)
-                                       return error ;
-                               break ;
-
-               case SF_FORMAT_WAVEX :
-                               if ((error = wavex_write_fmt_chunk (psf)) != 0)
-                                       return error ;
-                               break ;
-
-               default :
-                               return SFE_UNIMPLEMENTED ;
-               } ;
-
-       /* The LIST/INFO chunk. */
-       if (psf->strings.flags & SF_STR_LOCATE_START)
-               wav_write_strings (psf, SF_STR_LOCATE_START) ;
-
-       if (psf->peak_info != NULL && psf->peak_info->peak_loc == SF_PEAK_START)
-       {       psf_binheader_writef (psf, "m4", PEAK_MARKER, WAV_PEAK_CHUNK_SIZE (psf->sf.channels)) ;
-               psf_binheader_writef (psf, "44", 1, time (NULL)) ;
-               for (k = 0 ; k < psf->sf.channels ; k++)
-                       psf_binheader_writef (psf, "ft8", (float) psf->peak_info->peaks [k].value, psf->peak_info->peaks [k].position) ;
-               } ;
-
-       if (psf->broadcast_16k != NULL)
-               wav_write_bext_chunk (psf) ;
-
-       if (psf->cart_16k != NULL)
-               wav_write_cart_chunk (psf) ;
-
-       if (psf->instrument != NULL)
-       {       int             tmp ;
-               double  dtune = (double) (0x40000000) / 25.0 ;
-
-               psf_binheader_writef (psf, "m4", smpl_MARKER, 9 * 4 + psf->instrument->loop_count * 6 * 4) ;
-               psf_binheader_writef (psf, "44", 0, 0) ; /* Manufacturer zero is everyone */
-               tmp = (int) (1.0e9 / psf->sf.samplerate) ; /* Sample period in nano seconds */
-               psf_binheader_writef (psf, "44", tmp, psf->instrument->basenote) ;
-               tmp = (uint32_t) (psf->instrument->detune * dtune + 0.5) ;
-               psf_binheader_writef (psf, "4", tmp) ;
-               psf_binheader_writef (psf, "44", 0, 0) ; /* SMTPE format */
-               psf_binheader_writef (psf, "44", psf->instrument->loop_count, 0) ;
-
-               for (tmp = 0 ; tmp < psf->instrument->loop_count ; tmp++)
-               {       int type ;
-
-                       type = psf->instrument->loops [tmp].mode ;
-                       type = (type == SF_LOOP_FORWARD ? 0 : type == SF_LOOP_BACKWARD ? 2 : type == SF_LOOP_ALTERNATING ? 1 : 32) ;
-
-                       psf_binheader_writef (psf, "44", tmp, type) ;
-                       psf_binheader_writef (psf, "44", psf->instrument->loops [tmp].start, psf->instrument->loops [tmp].end - 1) ;
-                       psf_binheader_writef (psf, "44", 0, psf->instrument->loops [tmp].count) ;
-                       } ;
-               } ;
-
-       /* Write custom headers. */
-       for (uk = 0 ; uk < psf->wchunks.used ; uk++)
-               psf_binheader_writef (psf, "m4b", (int) psf->wchunks.chunks [uk].mark32, psf->wchunks.chunks [uk].len, psf->wchunks.chunks [uk].data, make_size_t (psf->wchunks.chunks [uk].len)) ;
-
-       if (psf->headindex + 16 < psf->dataoffset)
-       {       /* Add PAD data if necessary. */
-               k = psf->dataoffset - (psf->headindex + 16) ;
-               psf_binheader_writef (psf, "m4z", PAD_MARKER, k, make_size_t (k)) ;
-               } ;
-
-       psf_binheader_writef (psf, "tm8", data_MARKER, psf->datalength) ;
-       psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-       if (psf->error)
-               return psf->error ;
-
-       if (has_data && psf->dataoffset != psf->headindex)
-       {       psf_log_printf (psf, "Oooops : has_data && psf->dataoffset != psf->headindex\n") ;
-               return psf->error = SFE_INTERNAL ;
-               } ;
-
-       psf->dataoffset = psf->headindex ;
-
-       if (! has_data)
-               psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-       else if (current > 0)
-               psf_fseek (psf, current, SEEK_SET) ;
-
-       return psf->error ;
-} /* wav_write_header */
-
-
-static int
-wav_write_tailer (SF_PRIVATE *psf)
-{      int             k ;
-
-       /* Reset the current header buffer length to zero. */
-       psf->header [0] = 0 ;
-       psf->headindex = 0 ;
-
-       if (psf->bytewidth > 0 && psf->sf.seekable == SF_TRUE)
-       {       psf->datalength = psf->sf.frames * psf->bytewidth * psf->sf.channels ;
-               psf->dataend = psf->dataoffset + psf->datalength ;
-               } ;
-
-       if (psf->dataend > 0)
-               psf_fseek (psf, psf->dataend, SEEK_SET) ;
-       else
-               psf->dataend = psf_fseek (psf, 0, SEEK_END) ;
-
-       /* Add a PEAK chunk if requested. */
-       if (psf->peak_info != NULL && psf->peak_info->peak_loc == SF_PEAK_END)
-       {       psf_binheader_writef (psf, "m4", PEAK_MARKER, WAV_PEAK_CHUNK_SIZE (psf->sf.channels)) ;
-               psf_binheader_writef (psf, "44", 1, time (NULL)) ;
-               for (k = 0 ; k < psf->sf.channels ; k++)
-                       psf_binheader_writef (psf, "f4", psf->peak_info->peaks [k].value, psf->peak_info->peaks [k].position) ;
-               } ;
-
-       if (psf->strings.flags & SF_STR_LOCATE_END)
-               wav_write_strings (psf, SF_STR_LOCATE_END) ;
-
-       /* Write the tailer. */
-       if (psf->headindex > 0)
-               psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-       return 0 ;
-} /* wav_write_tailer */
-
-static void
-wav_write_strings (SF_PRIVATE *psf, int location)
-{      int     k, prev_head_index, saved_head_index ;
-
-       if (psf_location_string_count (psf, location) == 0)
-               return ;
-
-       prev_head_index = psf->headindex + 4 ;
-
-       psf_binheader_writef (psf, "m4m", LIST_MARKER, 0xBADBAD, INFO_MARKER) ;
-
-       for (k = 0 ; k < SF_MAX_STRINGS ; k++)
-       {       if (psf->strings.data [k].type == 0)
-                       break ;
-               if (psf->strings.data [k].type < 0 || psf->strings.data [k].flags != location)
-                       continue ;
-
-               switch (psf->strings.data [k].type)
-               {       case SF_STR_SOFTWARE :
-                               psf_binheader_writef (psf, "ms", ISFT_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-                               break ;
-
-                       case SF_STR_TITLE :
-                               psf_binheader_writef (psf, "ms", INAM_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-                               break ;
-
-                       case SF_STR_COPYRIGHT :
-                               psf_binheader_writef (psf, "ms", ICOP_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-                               break ;
-
-                       case SF_STR_ARTIST :
-                               psf_binheader_writef (psf, "ms", IART_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-                               break ;
-
-                       case SF_STR_COMMENT :
-                               psf_binheader_writef (psf, "ms", ICMT_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-                               break ;
-
-                       case SF_STR_DATE :
-                               psf_binheader_writef (psf, "ms", ICRD_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-                               break ;
-
-                       case SF_STR_GENRE :
-                               psf_binheader_writef (psf, "ms", IGNR_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-                               break ;
-
-                       case SF_STR_ALBUM :
-                               psf_binheader_writef (psf, "ms", IPRD_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-                               break ;
-
-                       case SF_STR_TRACKNUMBER :
-                               psf_binheader_writef (psf, "ms", ITRK_MARKER, psf->strings.storage + psf->strings.data [k].offset) ;
-                               break ;
-
-                       default :
-                               break ;
-                       } ;
-               } ;
-
-       saved_head_index = psf->headindex ;
-       psf->headindex = prev_head_index ;
-       psf_binheader_writef (psf, "4", saved_head_index - prev_head_index - 4) ;
-       psf->headindex = saved_head_index ;
-
-} /* wav_write_strings */
-
-static int
-wav_close (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       wav_write_tailer (psf) ;
-
-               if (psf->file.mode == SFM_RDWR)
-               {       sf_count_t current = psf_ftell (psf) ;
-
-                       /*
-                       **      If the mode is RDWR and the current position is less than the
-                       **      filelength, truncate the file.
-                       */
-
-                       if (current < psf->filelength)
-                       {       psf_ftruncate (psf, current) ;
-                               psf->filelength = current ;
-                               } ;
-                       } ;
-
-               psf->write_header (psf, SF_TRUE) ;
-               } ;
-
-       return 0 ;
-} /* wav_close */
-
-static int
-wav_command (SF_PRIVATE *psf, int command, void * UNUSED (data), int datasize)
-{      WAV_PRIVATE     *wpriv ;
-
-       if ((wpriv = psf->container_data) == NULL)
-               return SFE_INTERNAL ;
-
-       switch (command)
-       {       case SFC_WAVEX_SET_AMBISONIC :
-                       if ((SF_CONTAINER (psf->sf.format)) == SF_FORMAT_WAVEX)
-                       {       if (datasize == SF_AMBISONIC_NONE)
-                                       wpriv->wavex_ambisonic = SF_AMBISONIC_NONE ;
-                               else if (datasize == SF_AMBISONIC_B_FORMAT)
-                                       wpriv->wavex_ambisonic = SF_AMBISONIC_B_FORMAT ;
-                               else
-                                       return 0 ;
-                               } ;
-                       return wpriv->wavex_ambisonic ;
-
-               case SFC_WAVEX_GET_AMBISONIC :
-                       return wpriv->wavex_ambisonic ;
-
-               case SFC_SET_CHANNEL_MAP_INFO :
-                       wpriv->wavex_channelmask = wavex_gen_channel_mask (psf->channel_map, psf->sf.channels) ;
-                       return (wpriv->wavex_channelmask != 0) ;
-
-               default :
-                       break ;
-       } ;
-
-       return 0 ;
-} /* wav_command */
-
-static int
-wav_subchunk_parse (SF_PRIVATE *psf, int chunk, uint32_t chunk_length)
-{      sf_count_t      current_pos ;
-       char            buffer [512] ;
-       uint32_t        dword, bytesread ;
-
-       current_pos = psf_fseek (psf, 0, SEEK_CUR) - 4 ;
-
-       bytesread = sizeof (chunk_length) ;
-
-       if (chunk_length <= 8)
-       {       /* This case is for broken files generated by PEAK. */
-               psf_log_printf (psf, "%M : %d (weird length)\n", chunk, chunk_length) ;
-               psf_binheader_readf (psf, "mj", &chunk, chunk_length - 4) ;
-               psf_log_printf (psf, "  %M\n", chunk) ;
-               return 0 ;
-               } ;
-
-       if (psf->headindex + chunk_length > SIGNED_SIZEOF (psf->header))
-       {       psf_log_printf (psf, "%M : %d (too long)\n", chunk, chunk_length) ;
-               psf_binheader_readf (psf, "j", chunk_length) ;
-               return 0 ;
-               } ;
-
-       if (current_pos + chunk_length > psf->filelength)
-       {       psf_log_printf (psf, "%M : %d (should be %d)\n", chunk, chunk_length, (int) (psf->filelength - current_pos)) ;
-               chunk_length = psf->filelength - current_pos ;
-               }
-       else
-               psf_log_printf (psf, "%M : %d\n", chunk, chunk_length) ;
-
-       while (bytesread < chunk_length)
-       {       bytesread += psf_binheader_readf (psf, "m", &chunk) ;
-
-               switch (chunk)
-               {       case adtl_MARKER :
-                       case INFO_MARKER :
-                                       /* These markers don't contain anything, not even a chunk lebgth. */
-                                       psf_log_printf (psf, "  %M\n", chunk) ;
-                                       continue ;
-
-                       case exif_MARKER :
-                                       psf_log_printf (psf, "  %M\n", chunk) ;
-                                       bytesread += exif_subchunk_parse (psf, chunk_length - bytesread) ;
-                                       continue ;
-
-                       case data_MARKER :
-                                       psf_log_printf (psf, "  %M inside a LIST block??? Backing out.\n", chunk) ;
-                                       /* Jump back four bytes and return to caller. */
-                                       psf_binheader_readf (psf, "j", -4) ;
-                                       return 0 ;
-
-                       case 0 :
-                                       /*
-                                       **      Four zero bytes where a marker was expected. Assume this means
-                                       **      the rest of the chunk is garbage.
-                                       */
-                                       psf_log_printf (psf, "    *** Found weird-ass zero marker. Jumping to end of chunk.\n") ;
-                                       if (bytesread < chunk_length)
-                                               bytesread += psf_binheader_readf (psf, "j", chunk_length - bytesread + 4) ;
-                                       psf_log_printf (psf, "    *** Offset is now : 0x%X\n", psf_fseek (psf, 0, SEEK_CUR)) ;
-                                       return 0 ;
-
-                       default :
-                                       break ;
-                       } ;
-
-               switch (chunk)
-               {       case ISFT_MARKER :
-                       case ICOP_MARKER :
-                       case IARL_MARKER :
-                       case IART_MARKER :
-                       case ICMT_MARKER :
-                       case ICRD_MARKER :
-                       case IENG_MARKER :
-                       case IGNR_MARKER :
-                       case INAM_MARKER :
-                       case IPRD_MARKER :
-                       case ISBJ_MARKER :
-                       case ISRC_MARKER :
-                       case IAUT_MARKER :
-                       case ITRK_MARKER :
-                                       bytesread += psf_binheader_readf (psf, "4", &dword) ;
-                                       dword += (dword & 1) ;
-                                       if (dword >= SIGNED_SIZEOF (buffer))
-                                       {       psf_log_printf (psf, "  *** %M : %d (too big)\n", chunk, dword) ;
-                                               psf_binheader_readf (psf, "j", dword) ;
-                                               break ;
-                                               } ;
-
-                                       bytesread += psf_binheader_readf (psf, "b", buffer, dword) ;
-                                       buffer [dword] = 0 ;
-                                       psf_log_printf (psf, "    %M : %s\n", chunk, buffer) ;
-                                       break ;
-
-                       case labl_MARKER :
-                                       {       int mark_id ;
-
-                                               bytesread += psf_binheader_readf (psf, "44", &dword, &mark_id) ;
-                                               dword -= 4 ;
-                                               dword += (dword & 1) ;
-                                               if (dword < 1 || dword >= SIGNED_SIZEOF (buffer))
-                                               {       psf_log_printf (psf, "  *** %M : %d (too big)\n", chunk, dword) ;
-                                                       psf_binheader_readf (psf, "j", dword) ;
-                                                       break ;
-                                                       } ;
-
-                                               bytesread += psf_binheader_readf (psf, "b", buffer, dword) ;
-                                               buffer [dword] = 0 ;
-                                               psf_log_printf (psf, "    %M : %d : %s\n", chunk, mark_id, buffer) ;
-                                               } ;
-                                       break ;
-
-
-                       case DISP_MARKER :
-                       case ltxt_MARKER :
-                       case note_MARKER :
-                                       bytesread += psf_binheader_readf (psf, "4", &dword) ;
-                                       dword += (dword & 1) ;
-                                       bytesread += psf_binheader_readf (psf, "j", dword) ;
-                                       psf_log_printf (psf, "    %M : %d\n", chunk, dword) ;
-                                       break ;
-
-                       default :
-                                       bytesread += psf_binheader_readf (psf, "4", &dword) ;
-                                       dword += (dword & 1) ;
-                                       psf_log_printf (psf, "    *** %M : %d\n", chunk, dword) ;
-                                       if (bytesread + dword > chunk_length)
-                                       {       bytesread += psf_binheader_readf (psf, "j", chunk_length - bytesread + 4) ;
-                                               continue ;
-                                               }
-                                       else
-                                               bytesread += psf_binheader_readf (psf, "j", dword) ;
-
-                                       if (dword >= chunk_length)
-                                               return 0 ;
-                                       break ;
-                       } ;
-
-               switch (chunk)
-               {       case ISFT_MARKER :
-                                       psf_store_string (psf, SF_STR_SOFTWARE, buffer) ;
-                                       break ;
-                       case ICOP_MARKER :
-                                       psf_store_string (psf, SF_STR_COPYRIGHT, buffer) ;
-                                       break ;
-                       case INAM_MARKER :
-                                       psf_store_string (psf, SF_STR_TITLE, buffer) ;
-                                       break ;
-                       case IART_MARKER :
-                                       psf_store_string (psf, SF_STR_ARTIST, buffer) ;
-                                       break ;
-                       case ICMT_MARKER :
-                                       psf_store_string (psf, SF_STR_COMMENT, buffer) ;
-                                       break ;
-                       case ICRD_MARKER :
-                                       psf_store_string (psf, SF_STR_DATE, buffer) ;
-                                       break ;
-                       case IGNR_MARKER :
-                                       psf_store_string (psf, SF_STR_GENRE, buffer) ;
-                                       break ;
-                       case IPRD_MARKER :
-                                       psf_store_string (psf, SF_STR_ALBUM, buffer) ;
-                                       break ;
-                       case ITRK_MARKER :
-                                       psf_store_string (psf, SF_STR_TRACKNUMBER, buffer) ;
-                                       break ;
-                       } ;
-               } ;
-
-       current_pos = psf_fseek (psf, 0, SEEK_CUR) - current_pos ;
-
-       if (current_pos - 4 != chunk_length)
-               psf_log_printf (psf, "**** Bad chunk length %d sbould be %D\n", chunk_length, current_pos - 4) ;
-
-       return 0 ;
-} /* wav_subchunk_parse */
-
-static int
-wav_read_smpl_chunk (SF_PRIVATE *psf, uint32_t chunklen)
-{      char buffer [512] ;
-       uint32_t bytesread = 0, dword, sampler_data, loop_count ;
-       uint32_t note, start, end, type = -1, count ;
-       int j, k ;
-
-       chunklen += (chunklen & 1) ;
-
-       bytesread += psf_binheader_readf (psf, "4", &dword) ;
-       psf_log_printf (psf, "  Manufacturer : %X\n", dword) ;
-
-       bytesread += psf_binheader_readf (psf, "4", &dword) ;
-       psf_log_printf (psf, "  Product      : %u\n", dword) ;
-
-       bytesread += psf_binheader_readf (psf, "4", &dword) ;
-       psf_log_printf (psf, "  Period       : %u nsec\n", dword) ;
-
-       bytesread += psf_binheader_readf (psf, "4", &note) ;
-       psf_log_printf (psf, "  Midi Note    : %u\n", note) ;
-
-       bytesread += psf_binheader_readf (psf, "4", &dword) ;
-       if (dword != 0)
-       {       snprintf (buffer, sizeof (buffer), "%f",
-                                       (1.0 * 0x80000000) / ((uint32_t) dword)) ;
-               psf_log_printf (psf, "  Pitch Fract. : %s\n", buffer) ;
-               }
-       else
-               psf_log_printf (psf, "  Pitch Fract. : 0\n") ;
-
-       bytesread += psf_binheader_readf (psf, "4", &dword) ;
-       psf_log_printf (psf, "  SMPTE Format : %u\n", dword) ;
-
-       bytesread += psf_binheader_readf (psf, "4", &dword) ;
-       snprintf (buffer, sizeof (buffer), "%02d:%02d:%02d %02d",
-                               (dword >> 24) & 0x7F, (dword >> 16) & 0x7F, (dword >> 8) & 0x7F, dword & 0x7F) ;
-       psf_log_printf (psf, "  SMPTE Offset : %s\n", buffer) ;
-
-       bytesread += psf_binheader_readf (psf, "4", &loop_count) ;
-       psf_log_printf (psf, "  Loop Count   : %u\n", loop_count) ;
-
-       /* Sampler Data holds the number of data bytes after the CUE chunks which
-       ** is not actually CUE data. Display value after CUE data.
-       */
-       bytesread += psf_binheader_readf (psf, "4", &sampler_data) ;
-
-       if ((psf->instrument = psf_instrument_alloc ()) == NULL)
-               return SFE_MALLOC_FAILED ;
-
-       psf->instrument->loop_count = loop_count ;
-
-       for (j = 0 ; loop_count > 0 && chunklen - bytesread >= 24 ; j ++)
-       {       bytesread += psf_binheader_readf (psf, "4", &dword) ;
-               psf_log_printf (psf, "    Cue ID : %2u", dword) ;
-
-               bytesread += psf_binheader_readf (psf, "4", &type) ;
-               psf_log_printf (psf, "  Type : %2u", type) ;
-
-               bytesread += psf_binheader_readf (psf, "4", &start) ;
-               psf_log_printf (psf, "  Start : %5u", start) ;
-
-               bytesread += psf_binheader_readf (psf, "4", &end) ;
-               psf_log_printf (psf, "  End : %5u", end) ;
-
-               bytesread += psf_binheader_readf (psf, "4", &dword) ;
-               psf_log_printf (psf, "  Fraction : %5u", dword) ;
-
-               bytesread += psf_binheader_readf (psf, "4", &count) ;
-               psf_log_printf (psf, "  Count : %5u\n", count) ;
-
-               if (j < ARRAY_LEN (psf->instrument->loops))
-               {       psf->instrument->loops [j].start = start ;
-                       psf->instrument->loops [j].end = end + 1 ;
-                       psf->instrument->loops [j].count = count ;
-
-                       switch (type)
-                       {       case 0 :
-                                       psf->instrument->loops [j].mode = SF_LOOP_FORWARD ;
-                                       break ;
-                               case 1 :
-                                       psf->instrument->loops [j].mode = SF_LOOP_ALTERNATING ;
-                                       break ;
-                               case 2 :
-                                       psf->instrument->loops [j].mode = SF_LOOP_BACKWARD ;
-                                       break ;
-                               default:
-                                       psf->instrument->loops [j].mode = SF_LOOP_NONE ;
-                                       break ;
-                               } ;
-                       } ;
-
-               loop_count -- ;
-               } ;
-
-       if (chunklen - bytesread == 0)
-       {       if (sampler_data != 0)
-                       psf_log_printf (psf, "  Sampler Data : %u (should be 0)\n", sampler_data) ;
-               else
-                       psf_log_printf (psf, "  Sampler Data : %u\n", sampler_data) ;
-               }
-       else
-       {       if (sampler_data != chunklen - bytesread)
-               {       psf_log_printf (psf, "  Sampler Data : %u (should have been %u)\n", sampler_data, chunklen - bytesread) ;
-                       sampler_data = chunklen - bytesread ;
-                       }
-               else
-                       psf_log_printf (psf, "  Sampler Data : %u\n", sampler_data) ;
-
-               psf_log_printf (psf, "      ") ;
-               for (k = 0 ; k < (int) sampler_data ; k++)
-               {       char ch ;
-
-                       if (k > 0 && (k % 20) == 0)
-                               psf_log_printf (psf, "\n      ") ;
-
-                       bytesread += psf_binheader_readf (psf, "1", &ch) ;
-                       psf_log_printf (psf, "%02X ", ch & 0xFF) ;
-                       } ;
-
-               psf_log_printf (psf, "\n") ;
-               } ;
-
-       psf->instrument->basenote = note ;
-       psf->instrument->gain = 1 ;
-       psf->instrument->velocity_lo = psf->instrument->key_lo = 0 ;
-       psf->instrument->velocity_hi = psf->instrument->key_hi = 127 ;
-
-       return 0 ;
-} /* wav_read_smpl_chunk */
-
-/*
-** The acid chunk goes a little something like this:
-**
-** 4 bytes          'acid'
-** 4 bytes (int)     length of chunk starting at next byte
-**
-** 4 bytes (int)     type of file:
-**        this appears to be a bit mask,however some combinations
-**        are probably impossible and/or qualified as "errors"
-**
-**        0x01 On: One Shot         Off: Loop
-**        0x02 On: Root note is Set Off: No root
-**        0x04 On: Stretch is On,   Off: Strech is OFF
-**        0x08 On: Disk Based       Off: Ram based
-**        0x10 On: ??????????       Off: ????????? (Acidizer puts that ON)
-**
-** 2 bytes (short)      root note
-**        if type 0x10 is OFF : [C,C#,(...),B] -> [0x30 to 0x3B]
-**        if type 0x10 is ON  : [C,C#,(...),B] -> [0x3C to 0x47]
-**         (both types fit on same MIDI pitch albeit different octaves, so who cares)
-**
-** 2 bytes (short)      ??? always set to 0x8000
-** 4 bytes (float)      ??? seems to be always 0
-** 4 bytes (int)        number of beats
-** 2 bytes (short)      meter denominator   //always 4 in SF/ACID
-** 2 bytes (short)      meter numerator     //always 4 in SF/ACID
-**                      //are we sure about the order?? usually its num/denom
-** 4 bytes (float)      tempo
-**
-*/
-
-static int
-wav_read_acid_chunk (SF_PRIVATE *psf, uint32_t chunklen)
-{      char buffer [512] ;
-       uint32_t bytesread = 0 ;
-       int     beats, flags ;
-       short rootnote, q1, meter_denom, meter_numer ;
-       float q2, tempo ;
-
-       chunklen += (chunklen & 1) ;
-
-       bytesread += psf_binheader_readf (psf, "422f", &flags, &rootnote, &q1, &q2) ;
-
-       snprintf (buffer, sizeof (buffer), "%f", q2) ;
-
-       psf_log_printf (psf, "  Flags     : 0x%04x (%s,%s,%s,%s,%s)\n", flags,
-                       (flags & 0x01) ? "OneShot" : "Loop",
-                       (flags & 0x02) ? "RootNoteValid" : "RootNoteInvalid",
-                       (flags & 0x04) ? "StretchOn" : "StretchOff",
-                       (flags & 0x08) ? "DiskBased" : "RAMBased",
-                       (flags & 0x10) ? "??On" : "??Off") ;
-
-       psf_log_printf (psf, "  Root note : 0x%x\n  ????      : 0x%04x\n  ????      : %s\n",
-                               rootnote, q1, buffer) ;
-
-       bytesread += psf_binheader_readf (psf, "422f", &beats, &meter_denom, &meter_numer, &tempo) ;
-       snprintf (buffer, sizeof (buffer), "%f", tempo) ;
-       psf_log_printf (psf, "  Beats     : %d\n  Meter     : %d/%d\n  Tempo     : %s\n",
-                               beats, meter_numer, meter_denom, buffer) ;
-
-       psf_binheader_readf (psf, "j", chunklen - bytesread) ;
-
-       if ((psf->loop_info = calloc (1, sizeof (SF_LOOP_INFO))) == NULL)
-               return SFE_MALLOC_FAILED ;
-
-       psf->loop_info->time_sig_num    = meter_numer ;
-       psf->loop_info->time_sig_den    = meter_denom ;
-       psf->loop_info->loop_mode               = (flags & 0x01) ? SF_LOOP_NONE : SF_LOOP_FORWARD ;
-       psf->loop_info->num_beats               = beats ;
-       psf->loop_info->bpm                             = tempo ;
-       psf->loop_info->root_key                = (flags & 0x02) ? rootnote : -1 ;
-
-       return 0 ;
-} /* wav_read_acid_chunk */
-
-int
-wav_read_bext_chunk (SF_PRIVATE *psf, uint32_t chunksize)
-{
-       SF_BROADCAST_INFO_16K * b ;
-       uint32_t bytes = 0 ;
-
-       if (chunksize < WAV_BEXT_MIN_CHUNK_SIZE)
-       {       psf_log_printf (psf, "bext : %u (should be >= %d)\n", chunksize, WAV_BEXT_MIN_CHUNK_SIZE) ;
-               psf_binheader_readf (psf, "j", chunksize) ;
-               return 0 ;
-               } ;
-
-       if (chunksize > WAV_BEXT_MAX_CHUNK_SIZE)
-       {       psf_log_printf (psf, "bext : %u (should be < %d)\n", chunksize, WAV_BEXT_MAX_CHUNK_SIZE) ;
-               psf_binheader_readf (psf, "j", chunksize) ;
-               return 0 ;
-               } ;
-
-       if (chunksize >= sizeof (SF_BROADCAST_INFO_16K))
-       {       psf_log_printf (psf, "bext : %u too big to be handled\n", chunksize) ;
-               psf_binheader_readf (psf, "j", chunksize) ;
-               return 0 ;
-               } ;
-
-       psf_log_printf (psf, "bext : %u\n", chunksize) ;
-
-       if ((psf->broadcast_16k = broadcast_var_alloc ()) == NULL)
-       {       psf->error = SFE_MALLOC_FAILED ;
-               return psf->error ;
-               } ;
-
-       b = psf->broadcast_16k ;
-
-       bytes += psf_binheader_readf (psf, "b", b->description, sizeof (b->description)) ;
-       bytes += psf_binheader_readf (psf, "b", b->originator, sizeof (b->originator)) ;
-       bytes += psf_binheader_readf (psf, "b", b->originator_reference, sizeof (b->originator_reference)) ;
-       bytes += psf_binheader_readf (psf, "b", b->origination_date, sizeof (b->origination_date)) ;
-       bytes += psf_binheader_readf (psf, "b", b->origination_time, sizeof (b->origination_time)) ;
-       bytes += psf_binheader_readf (psf, "442", &b->time_reference_low, &b->time_reference_high, &b->version) ;
-       bytes += psf_binheader_readf (psf, "bj", &b->umid, sizeof (b->umid), 190) ;
-
-       if (chunksize > WAV_BEXT_MIN_CHUNK_SIZE)
-       {       /* File has coding history data. */
-
-               b->coding_history_size = chunksize - WAV_BEXT_MIN_CHUNK_SIZE ;
-
-               /* We do not parse the coding history */
-               bytes += psf_binheader_readf (psf, "b", b->coding_history, b->coding_history_size) ;
-               } ;
-
-       if (bytes < chunksize)
-               psf_binheader_readf (psf, "j", chunksize - bytes) ;
-
-       return 0 ;
-} /* wav_read_bext_chunk */
-
-int
-wav_write_bext_chunk (SF_PRIVATE *psf)
-{      SF_BROADCAST_INFO_16K *b ;
-
-       if (psf->broadcast_16k == NULL)
-               return -1 ;
-
-       b = psf->broadcast_16k ;
-
-       psf_binheader_writef (psf, "m4", bext_MARKER, WAV_BEXT_MIN_CHUNK_SIZE + b->coding_history_size) ;
-
-       /*
-       **      Note that it is very important the the field widths of the SF_BROADCAST_INFO
-       **      struct match those for the bext chunk fields.
-       */
-
-       psf_binheader_writef (psf, "b", b->description, sizeof (b->description)) ;
-       psf_binheader_writef (psf, "b", b->originator, sizeof (b->originator)) ;
-       psf_binheader_writef (psf, "b", b->originator_reference, sizeof (b->originator_reference)) ;
-       psf_binheader_writef (psf, "b", b->origination_date, sizeof (b->origination_date)) ;
-       psf_binheader_writef (psf, "b", b->origination_time, sizeof (b->origination_time)) ;
-       psf_binheader_writef (psf, "442", b->time_reference_low, b->time_reference_high, b->version) ;
-       psf_binheader_writef (psf, "b", b->umid, sizeof (b->umid)) ;
-       psf_binheader_writef (psf, "z", make_size_t (190)) ;
-
-       if (b->coding_history_size > 0)
-               psf_binheader_writef (psf, "b", b->coding_history, make_size_t (b->coding_history_size)) ;
-
-       return 0 ;
-} /* wav_write_bext_chunk */
-
-int
-wav_read_cart_chunk (SF_PRIVATE *psf, uint32_t chunksize)
-{      SF_CART_INFO_16K *c ;
-       uint32_t bytes = 0 ;
-       int k ;
-
-       if (chunksize < WAV_CART_MIN_CHUNK_SIZE)
-       {       psf_log_printf (psf, "cart : %u (should be >= %d)\n", chunksize, WAV_CART_MIN_CHUNK_SIZE) ;
-               psf_binheader_readf (psf, "j", chunksize) ;
-               return 0 ;
-               } ;
-       if (chunksize > WAV_CART_MAX_CHUNK_SIZE)
-       {       psf_log_printf (psf, "cart : %u (should be < %d)\n", chunksize, WAV_CART_MAX_CHUNK_SIZE) ;
-               psf_binheader_readf (psf, "j", chunksize) ;
-               return 0 ;
-               } ;
-
-       if (chunksize >= sizeof (SF_CART_INFO_16K))
-       {       psf_log_printf (psf, "cart : %u too big to be handled\n", chunksize) ;
-               psf_binheader_readf (psf, "j", chunksize) ;
-               return 0 ;
-               } ;
-
-       psf_log_printf (psf, "cart : %u\n", chunksize) ;
-
-       if ((psf->cart_16k = cart_var_alloc ()) == NULL)
-       {       psf->error = SFE_MALLOC_FAILED ;
-               return psf->error ;
-               } ;
-
-       c = psf->cart_16k ;
-       bytes += psf_binheader_readf (psf, "b", c->version, sizeof (c->version)) ;
-       bytes += psf_binheader_readf (psf, "b", c->title, sizeof (c->title)) ;
-       bytes += psf_binheader_readf (psf, "b", c->artist, sizeof (c->artist)) ;
-       bytes += psf_binheader_readf (psf, "b", c->cut_id, sizeof (c->cut_id)) ;
-       bytes += psf_binheader_readf (psf, "b", c->client_id, sizeof (c->client_id)) ;
-       bytes += psf_binheader_readf (psf, "b", c->category, sizeof (c->category)) ;
-       bytes += psf_binheader_readf (psf, "b", c->classification, sizeof (c->classification)) ;
-       bytes += psf_binheader_readf (psf, "b", c->out_cue, sizeof (c->out_cue)) ;
-       bytes += psf_binheader_readf (psf, "b", c->start_date, sizeof (c->start_date)) ;
-       bytes += psf_binheader_readf (psf, "b", c->start_time, sizeof (c->start_time)) ;
-       bytes += psf_binheader_readf (psf, "b", c->end_date, sizeof (c->end_date)) ;
-       bytes += psf_binheader_readf (psf, "b", c->end_time, sizeof (c->end_time)) ;
-       bytes += psf_binheader_readf (psf, "b", c->producer_app_id, sizeof (c->producer_app_id)) ;
-       bytes += psf_binheader_readf (psf, "b", c->producer_app_version, sizeof (c->producer_app_version)) ;
-       bytes += psf_binheader_readf (psf, "b", c->user_def, sizeof (c->user_def)) ;
-       bytes += psf_binheader_readf (psf, "e4", &c->level_reference, sizeof (c->level_reference)) ;
-
-       for (k = 0 ; k < ARRAY_LEN (c->post_timers) ; k++)
-               bytes += psf_binheader_readf (psf, "b4", &c->post_timers [k].usage, make_size_t (4), &c->post_timers [k].value) ;
-
-       bytes += psf_binheader_readf (psf, "b", c->reserved, sizeof (c->reserved)) ;
-       bytes += psf_binheader_readf (psf, "b", c->url, sizeof (c->url)) ;
-
-       if (chunksize > WAV_CART_MIN_CHUNK_SIZE)
-       {       /* File has tag text. */
-               c->tag_text_size = chunksize - WAV_CART_MIN_CHUNK_SIZE ;
-               bytes += psf_binheader_readf (psf, "b", c->tag_text, make_size_t (c->tag_text_size)) ;
-               } ;
-
-       return 0 ;
-} /* wav_read_cart_chunk */
-
-int
-wav_write_cart_chunk (SF_PRIVATE *psf)
-{      SF_CART_INFO_16K *c ;
-       int k ;
-
-       if (psf->cart_16k == NULL)
-               return -1 ;
-
-       c = psf->cart_16k ;
-       psf_binheader_writef (psf, "m4", cart_MARKER, WAV_CART_MIN_CHUNK_SIZE + c->tag_text_size) ;
-       /*
-       **      Note that it is very important the the field widths of the SF_CART_INFO
-       **      struct match those for the cart chunk fields.
-       */
-       psf_binheader_writef (psf, "b", c->version, sizeof (c->version)) ;
-       psf_binheader_writef (psf, "b", c->title, sizeof (c->title)) ;
-       psf_binheader_writef (psf, "b", c->artist, sizeof (c->artist)) ;
-       psf_binheader_writef (psf, "b", c->cut_id, sizeof (c->cut_id)) ;
-       psf_binheader_writef (psf, "b", c->client_id, sizeof (c->client_id)) ;
-       psf_binheader_writef (psf, "b", c->category, sizeof (c->category)) ;
-       psf_binheader_writef (psf, "b", c->classification, sizeof (c->classification)) ;
-       psf_binheader_writef (psf, "b", c->out_cue, sizeof (c->out_cue)) ;
-       psf_binheader_writef (psf, "b", c->start_date, sizeof (c->start_date)) ;
-       psf_binheader_writef (psf, "b", c->start_time, sizeof (c->start_time)) ;
-       psf_binheader_writef (psf, "b", c->end_date, sizeof (c->end_date)) ;
-       psf_binheader_writef (psf, "b", c->end_time, sizeof (c->end_time)) ;
-       psf_binheader_writef (psf, "b", c->producer_app_id, sizeof (c->producer_app_id)) ;
-       psf_binheader_writef (psf, "b", c->producer_app_version, sizeof (c->producer_app_version)) ;
-       psf_binheader_writef (psf, "b", c->user_def, sizeof (c->user_def)) ;
-       psf_binheader_writef (psf, "4", c->level_reference, sizeof (c->level_reference)) ;
-
-       for (k = 0 ; k < ARRAY_LEN (c->post_timers) ; k++)
-               psf_binheader_writef (psf, "b4", c->post_timers [k].usage, make_size_t (4), c->post_timers [k].value) ;
-
-       psf_binheader_writef (psf, "z", sizeof (c->reserved)) ; // just write zeros, we don't have any other use for it
-       psf_binheader_writef (psf, "b", c->url, sizeof (c->url)) ;
-
-       if (c->tag_text_size > 0)
-               psf_binheader_writef (psf, "b", c->tag_text, make_size_t (c->tag_text_size)) ;
-
-       return 0 ;
-} /* wav_write_cart_chunk */
-
-static int
-exif_fill_and_sink (SF_PRIVATE *psf, char* buf, size_t bufsz, size_t toread)
-{
-       size_t bytesread = 0 ;
-
-       buf [0] = 0 ;
-       bufsz -= 1 ;
-       if (toread < bufsz)
-               bufsz = toread ;
-       bytesread = psf_binheader_readf (psf, "b", buf, bufsz) ;
-       buf [bufsz] = 0 ;
-
-       if (bytesread == bufsz && toread > bufsz)
-               bytesread += psf_binheader_readf (psf, "j", toread - bufsz) ;
-
-       return bytesread ;
-} /* exif_fill_and_sink */
-
-/*
-** Exif specification for audio files, at JEITA CP-3451 Exif 2.2 section 5
-** (Exif Audio File Specification) http://www.exif.org/Exif2-2.PDF
-*/
-static int
-exif_subchunk_parse (SF_PRIVATE *psf, uint32_t length)
-{      uint32_t marker, dword, vmajor = -1, vminor = -1, bytesread = 0 ;
-       char buf [4096] ;
-
-       while (bytesread < length)
-       {
-               bytesread += psf_binheader_readf (psf, "m", &marker) ;
-
-               switch (marker)
-               {
-                       case 0 : /* camera padding? */
-                               break ;
-
-                       case ever_MARKER :
-                               bytesread += psf_binheader_readf (psf, "j4", 4, &dword) ;
-                               vmajor = 10 * (((dword >> 24) & 0xff) - '0') + (((dword >> 16) & 0xff) - '0') ;
-                               vminor = 10 * (((dword >> 8) & 0xff) - '0') + ((dword & 0xff) - '0') ;
-                               psf_log_printf (psf, "    EXIF Version : %u.%02u\n", vmajor, vminor) ;
-                               break ;
-
-                       case olym_MARKER :
-                               bytesread += psf_binheader_readf (psf, "4", &dword) ;
-                               psf_log_printf (psf, "%M : %u\n", marker, dword) ;
-                               dword += (dword & 1) ;
-                               bytesread += psf_binheader_readf (psf, "j", dword) ;
-                               break ;
-
-                       case emnt_MARKER : /* design information: null-terminated string */
-                       case emdl_MARKER : /* model name ; null-terminated string */
-                       case ecor_MARKER : /* manufacturer: null-terminated string */
-                       case etim_MARKER : /* creation time: null-terminated string in the format "hour:minute:second.subsecond" */
-                       case erel_MARKER : /* relation info: null-terminated string (filename) */
-                       case eucm_MARKER : /* user comment: 4-byte size follows, then possibly unicode data */
-                               bytesread += psf_binheader_readf (psf, "4", &dword) ;
-                               bytesread += sizeof (dword) ;
-                               dword += (dword & 1) ;
-
-                               if (dword >= sizeof (buf))
-                               {       psf_log_printf (psf, "*** Marker '%M' is too big %u\n\n", marker, dword) ;
-                                       return bytesread ;
-                                       } ;
-
-                               bytesread += exif_fill_and_sink (psf, buf, sizeof (buf), dword) ;
-
-                               /* BAD - don't know what's going on here -- maybe a bug in the camera */
-                               /* field should be NULL-terminated but there's no room for it with the reported number */
-                               /*  example output:     emdl : 8 (EX-Z1050) */
-                               if (marker == emdl_MARKER && dword == strlen (buf) /* should be >= strlen+1*/)
-                               {       psf_log_printf (psf, "    *** field size too small for string (sinking 2 bytes)\n") ;
-                                       bytesread += psf_binheader_readf (psf, "j", 2) ;
-                                       } ;
-
-                               psf_log_printf (psf, "    %M : %d (%s)\n", marker, dword, buf) ;
-                               if (dword > length)
-                                       return bytesread ;
-                               break ;
-
-                       default :
-                               psf_log_printf (psf, "    *** %M (%d): -- ignored --\n", marker, marker) ;
-                               break ;
-                       } ;
-               } ;
-
-       return bytesread ;
-} /* exif_subchunk_parse */
-
-/*==============================================================================
-*/
-
-static int
-wav_set_chunk (SF_PRIVATE *psf, const SF_CHUNK_INFO * chunk_info)
-{      return psf_save_write_chunk (&psf->wchunks, chunk_info) ;
-} /* wav_set_chunk */
-
-static SF_CHUNK_ITERATOR *
-wav_next_chunk_iterator (SF_PRIVATE *psf, SF_CHUNK_ITERATOR * iterator)
-{      return psf_next_chunk_iterator (&psf->rchunks, iterator) ;
-} /* wav_next_chunk_iterator */
-
-static int
-wav_get_chunk_size (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info)
-{      int indx ;
-
-       if ((indx = psf_find_read_chunk_iterator (&psf->rchunks, iterator)) < 0)
-               return SFE_UNKNOWN_CHUNK ;
-
-       chunk_info->datalen = psf->rchunks.chunks [indx].len ;
-
-       return SFE_NO_ERROR ;
-} /* wav_get_chunk_size */
-
-static int
-wav_get_chunk_data (SF_PRIVATE *psf, const SF_CHUNK_ITERATOR * iterator, SF_CHUNK_INFO * chunk_info)
-{      int indx ;
-       sf_count_t pos ;
-
-       if ((indx = psf_find_read_chunk_iterator (&psf->rchunks, iterator)) < 0)
-               return SFE_UNKNOWN_CHUNK ;
-
-       if (chunk_info->data == NULL)
-               return SFE_BAD_CHUNK_DATA_PTR ;
-
-       chunk_info->id_size = psf->rchunks.chunks [indx].id_size ;
-       memcpy (chunk_info->id, psf->rchunks.chunks [indx].id, sizeof (chunk_info->id) / sizeof (*chunk_info->id)) ;
-
-       pos = psf_ftell (psf) ;
-       psf_fseek (psf, psf->rchunks.chunks [indx].offset, SEEK_SET) ;
-       psf_fread (chunk_info->data, SF_MIN (chunk_info->datalen, psf->rchunks.chunks [indx].len), 1, psf) ;
-       psf_fseek (psf, pos, SEEK_SET) ;
-
-       return SFE_NO_ERROR ;
-} /* wav_get_chunk_data */
diff --git a/libs/libsndfile/src/wav_w64.c b/libs/libsndfile/src/wav_w64.c
deleted file mode 100644 (file)
index cf0d3ef..0000000
+++ /dev/null
@@ -1,678 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2004-2005 David Viens <davidv@plogue.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <string.h>
-#include       <ctype.h>
-#include       <time.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-#include       "wav_w64.h"
-
-/*  Known WAVEFORMATEXTENSIBLE GUIDS.  */
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_PCM =
-{      0x00000001, 0x0000, 0x0010, {   0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_MS_ADPCM =
-{      0x00000002, 0x0000, 0x0010, {   0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_IEEE_FLOAT =
-{      0x00000003, 0x0000, 0x0010, {   0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_ALAW =
-{      0x00000006, 0x0000, 0x0010, {   0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_MULAW =
-{      0x00000007, 0x0000, 0x0010, {   0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 }
-} ;
-
-/*
-** the next two are from
-** http://dream.cs.bath.ac.uk/researchdev/wave-ex/bformat.html
-*/
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_PCM =
-{      0x00000001, 0x0721, 0x11d3, {   0x86, 0x44, 0xc8, 0xc1, 0xca, 0x00, 0x00, 0x00 }
-} ;
-
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_IEEE_FLOAT =
-{      0x00000003, 0x0721, 0x11d3, {   0x86, 0x44, 0xc8, 0xc1, 0xca, 0x00, 0x00, 0x00 }
-} ;
-
-
-#if 0
-/* maybe interesting one day to read the following through sf_read_raw */
-/* http://www.bath.ac.uk/~masrwd/pvocex/pvocex.html */
-static const EXT_SUBFORMAT MSGUID_SUBTYPE_PVOCEX =
-{      0x8312b9c2, 0x2e6e, 0x11d4, {   0xa8, 0x24, 0xde, 0x5b, 0x96, 0xc3, 0xab, 0x21 }
-} ;
-#endif
-
-/* This stores which bit in dwChannelMask maps to which channel */
-static const struct chanmap_s
-{      int id ;
-       const char * name ;
-} channel_mask_bits [] =
-{      /* WAVEFORMATEXTENSIBLE doesn't distuingish FRONT_LEFT from LEFT */
-       {       SF_CHANNEL_MAP_LEFT, "L" },
-       {       SF_CHANNEL_MAP_RIGHT, "R" },
-       {       SF_CHANNEL_MAP_CENTER, "C" },
-       {       SF_CHANNEL_MAP_LFE, "LFE" },
-       {       SF_CHANNEL_MAP_REAR_LEFT, "Ls" },
-       {       SF_CHANNEL_MAP_REAR_RIGHT, "Rs" },
-       {       SF_CHANNEL_MAP_FRONT_LEFT_OF_CENTER, "Lc" },
-       {       SF_CHANNEL_MAP_FRONT_RIGHT_OF_CENTER, "Rc" },
-       {       SF_CHANNEL_MAP_REAR_CENTER, "Cs" },
-       {       SF_CHANNEL_MAP_SIDE_LEFT, "Sl" },
-       {       SF_CHANNEL_MAP_SIDE_RIGHT, "Sr" },
-       {       SF_CHANNEL_MAP_TOP_CENTER, "Tc" },
-       {       SF_CHANNEL_MAP_TOP_FRONT_LEFT, "Tfl" },
-       {       SF_CHANNEL_MAP_TOP_FRONT_CENTER, "Tfc" },
-       {       SF_CHANNEL_MAP_TOP_FRONT_RIGHT, "Tfr" },
-       {       SF_CHANNEL_MAP_TOP_REAR_LEFT, "Trl" },
-       {       SF_CHANNEL_MAP_TOP_REAR_CENTER, "Trc" },
-       {       SF_CHANNEL_MAP_TOP_REAR_RIGHT, "Trr" },
-} ;
-
-/*------------------------------------------------------------------------------
- * Private static functions.
- */
-
-static int
-wavex_guid_equal (const EXT_SUBFORMAT * first, const EXT_SUBFORMAT * second)
-{      return !memcmp (first, second, sizeof (EXT_SUBFORMAT)) ;
-} /* wavex_guid_equal */
-
-
-
-int
-wav_w64_read_fmt_chunk (SF_PRIVATE *psf, int fmtsize)
-{      WAV_PRIVATE * wpriv ;
-       WAV_FMT *wav_fmt ;
-       int     bytesread, k, bytespersec = 0 ;
-
-       if ((wpriv = psf->container_data) == NULL)
-               return SFE_INTERNAL ;
-       wav_fmt = &wpriv->wav_fmt ;
-
-       memset (wav_fmt, 0, sizeof (WAV_FMT)) ;
-
-       if (fmtsize < 16)
-               return SFE_WAV_FMT_SHORT ;
-
-       /* assume psf->rwf_endian is already properly set */
-
-       /* Read the minimal WAV file header here. */
-       bytesread = psf_binheader_readf (psf, "224422",
-                                       &(wav_fmt->format), &(wav_fmt->min.channels),
-                                       &(wav_fmt->min.samplerate), &(wav_fmt->min.bytespersec),
-                                       &(wav_fmt->min.blockalign), &(wav_fmt->min.bitwidth)) ;
-
-       psf_log_printf (psf, "  Format        : 0x%X => %s\n", wav_fmt->format, wav_w64_format_str (wav_fmt->format)) ;
-       psf_log_printf (psf, "  Channels      : %d\n", wav_fmt->min.channels) ;
-       psf_log_printf (psf, "  Sample Rate   : %d\n", wav_fmt->min.samplerate) ;
-
-       if (wav_fmt->format == WAVE_FORMAT_PCM && wav_fmt->min.blockalign == 0
-               && wav_fmt->min.bitwidth > 0 && wav_fmt->min.channels > 0)
-       {       wav_fmt->min.blockalign = wav_fmt->min.bitwidth / 8 + (wav_fmt->min.bitwidth % 8 > 0 ? 1 : 0) ;
-               wav_fmt->min.blockalign *= wav_fmt->min.channels ;
-               psf_log_printf (psf, "  Block Align   : 0 (should be %d)\n", wav_fmt->min.blockalign) ;
-               }
-       else
-               psf_log_printf (psf, "  Block Align   : %d\n", wav_fmt->min.blockalign) ;
-
-       if (wav_fmt->format == WAVE_FORMAT_PCM && wav_fmt->min.bitwidth == 24 &&
-                       wav_fmt->min.blockalign == 4 * wav_fmt->min.channels)
-       {       psf_log_printf (psf, "  Bit Width     : 24\n") ;
-
-               psf_log_printf (psf, "\n"
-                       "  Ambiguous information in 'fmt ' chunk. Possibile file types:\n"
-                       "    0) Invalid IEEE float file generated by Syntrillium's Cooledit!\n"
-                       "    1) File generated by ALSA's arecord containing 24 bit samples in 32 bit containers.\n"
-                       "    2) 24 bit file with incorrect Block Align value.\n"
-                       "\n") ;
-
-               wpriv->fmt_is_broken = 1 ;
-               }
-       else if (wav_fmt->min.bitwidth == 0)
-       {       switch (wav_fmt->format)
-               {       case WAVE_FORMAT_GSM610 :
-                       case WAVE_FORMAT_IPP_ITU_G_723_1 :
-                                       psf_log_printf (psf, "  Bit Width     : %d\n", wav_fmt->min.bitwidth) ;
-                                       break ;
-                       default :
-                                       psf_log_printf (psf, "  Bit Width     : %d (should not be 0)\n", wav_fmt->min.bitwidth) ;
-                       }
-               }
-       else
-       {       switch (wav_fmt->format)
-               {       case WAVE_FORMAT_GSM610 :
-                       case WAVE_FORMAT_IPP_ITU_G_723_1 :
-               psf_log_printf (psf, "  Bit Width     : %d (should be 0)\n", wav_fmt->min.bitwidth) ;
-                                       break ;
-                       default :
-                                       psf_log_printf (psf, "  Bit Width     : %d\n", wav_fmt->min.bitwidth) ;
-                       }
-               } ;
-
-       psf->sf.samplerate      = wav_fmt->min.samplerate ;
-       psf->sf.frames          = 0 ;                                   /* Correct this when reading data chunk. */
-       psf->sf.channels        = wav_fmt->min.channels ;
-
-       switch (wav_fmt->format)
-       {       case WAVE_FORMAT_PCM :
-               case WAVE_FORMAT_IEEE_FLOAT :
-                               bytespersec = wav_fmt->min.samplerate * wav_fmt->min.blockalign ;
-                               if (wav_fmt->min.bytespersec != (unsigned) bytespersec)
-                                       psf_log_printf (psf, "  Bytes/sec     : %d (should be %d)\n", wav_fmt->min.bytespersec, bytespersec) ;
-                               else
-                                       psf_log_printf (psf, "  Bytes/sec     : %d\n", wav_fmt->min.bytespersec) ;
-
-                               psf->bytewidth = BITWIDTH2BYTES (wav_fmt->min.bitwidth) ;
-                               break ;
-
-               case WAVE_FORMAT_ALAW :
-               case WAVE_FORMAT_MULAW :
-                               if (wav_fmt->min.bytespersec / wav_fmt->min.blockalign != wav_fmt->min.samplerate)
-                                       psf_log_printf (psf, "  Bytes/sec     : %d (should be %d)\n", wav_fmt->min.bytespersec, wav_fmt->min.samplerate * wav_fmt->min.blockalign) ;
-                               else
-                                       psf_log_printf (psf, "  Bytes/sec     : %d\n", wav_fmt->min.bytespersec) ;
-
-                               psf->bytewidth = 1 ;
-                               if (fmtsize >= 18)
-                               {       bytesread += psf_binheader_readf (psf, "2", &(wav_fmt->size20.extrabytes)) ;
-                                       psf_log_printf (psf, "  Extra Bytes   : %d\n", wav_fmt->size20.extrabytes) ;
-                                       } ;
-                               break ;
-
-               case WAVE_FORMAT_IMA_ADPCM :
-                               if (wav_fmt->min.bitwidth != 4)
-                                       return SFE_WAV_ADPCM_NOT4BIT ;
-                               if (wav_fmt->min.channels < 1 || wav_fmt->min.channels > 2)
-                                       return SFE_WAV_ADPCM_CHANNELS ;
-
-                               bytesread +=
-                               psf_binheader_readf (psf, "22", &(wav_fmt->ima.extrabytes), &(wav_fmt->ima.samplesperblock)) ;
-
-                               bytespersec = (wav_fmt->ima.samplerate * wav_fmt->ima.blockalign) / wav_fmt->ima.samplesperblock ;
-                               if (wav_fmt->ima.bytespersec != (unsigned) bytespersec)
-                                       psf_log_printf (psf, "  Bytes/sec     : %d (should be %d)\n", wav_fmt->ima.bytespersec, bytespersec) ;
-                               else
-                                       psf_log_printf (psf, "  Bytes/sec     : %d\n", wav_fmt->ima.bytespersec) ;
-
-                               psf_log_printf (psf, "  Extra Bytes   : %d\n", wav_fmt->ima.extrabytes) ;
-                               psf_log_printf (psf, "  Samples/Block : %d\n", wav_fmt->ima.samplesperblock) ;
-                               break ;
-
-               case WAVE_FORMAT_MS_ADPCM :
-                               if (wav_fmt->msadpcm.bitwidth != 4)
-                                       return SFE_WAV_ADPCM_NOT4BIT ;
-                               if (wav_fmt->msadpcm.channels < 1 || wav_fmt->msadpcm.channels > 2)
-                                       return SFE_WAV_ADPCM_CHANNELS ;
-
-                               bytesread +=
-                               psf_binheader_readf (psf, "222", &(wav_fmt->msadpcm.extrabytes),
-                                               &(wav_fmt->msadpcm.samplesperblock), &(wav_fmt->msadpcm.numcoeffs)) ;
-
-                               bytespersec = (wav_fmt->min.samplerate * wav_fmt->min.blockalign) / wav_fmt->msadpcm.samplesperblock ;
-                               if (wav_fmt->min.bytespersec == (unsigned) bytespersec)
-                                       psf_log_printf (psf, "  Bytes/sec     : %d\n", wav_fmt->min.bytespersec) ;
-                               else if (wav_fmt->min.bytespersec == (wav_fmt->min.samplerate / wav_fmt->msadpcm.samplesperblock) * wav_fmt->min.blockalign)
-                                       psf_log_printf (psf, "  Bytes/sec     : %d (should be %d (MS BUG!))\n", wav_fmt->min.bytespersec, bytespersec) ;
-                               else
-                                       psf_log_printf (psf, "  Bytes/sec     : %d (should be %d)\n", wav_fmt->min.bytespersec, bytespersec) ;
-
-                               psf_log_printf (psf, "  Extra Bytes   : %d\n", wav_fmt->msadpcm.extrabytes) ;
-                               psf_log_printf (psf, "  Samples/Block : %d\n", wav_fmt->msadpcm.samplesperblock) ;
-                               if (wav_fmt->msadpcm.numcoeffs > ARRAY_LEN (wav_fmt->msadpcm.coeffs))
-                               {       psf_log_printf (psf, "  No. of Coeffs : %d (should be <= %d)\n", wav_fmt->msadpcm.numcoeffs, ARRAY_LEN (wav_fmt->msadpcm.coeffs)) ;
-                                       wav_fmt->msadpcm.numcoeffs = ARRAY_LEN (wav_fmt->msadpcm.coeffs) ;
-                                       }
-                               else
-                                       psf_log_printf (psf, "  No. of Coeffs : %d\n", wav_fmt->msadpcm.numcoeffs) ;
-
-                               psf_log_printf (psf, "    Index   Coeffs1   Coeffs2\n") ;
-                               for (k = 0 ; k < wav_fmt->msadpcm.numcoeffs ; k++)
-                               {       char buffer [128] ;
-
-                                       bytesread +=
-                                               psf_binheader_readf (psf, "22", &(wav_fmt->msadpcm.coeffs [k].coeff1), &(wav_fmt->msadpcm.coeffs [k].coeff2)) ;
-                                       snprintf (buffer, sizeof (buffer), "     %2d     %7d   %7d\n", k, wav_fmt->msadpcm.coeffs [k].coeff1, wav_fmt->msadpcm.coeffs [k].coeff2) ;
-                                       psf_log_printf (psf, buffer) ;
-                                       } ;
-                               break ;
-
-               case WAVE_FORMAT_GSM610 :
-                               if (wav_fmt->gsm610.channels != 1 || wav_fmt->gsm610.blockalign != 65)
-                                       return SFE_WAV_GSM610_FORMAT ;
-
-                               bytesread +=
-                               psf_binheader_readf (psf, "22", &(wav_fmt->gsm610.extrabytes), &(wav_fmt->gsm610.samplesperblock)) ;
-
-                               if (wav_fmt->gsm610.samplesperblock != 320)
-                                       return SFE_WAV_GSM610_FORMAT ;
-
-                               bytespersec = (wav_fmt->gsm610.samplerate * wav_fmt->gsm610.blockalign) / wav_fmt->gsm610.samplesperblock ;
-                               if (wav_fmt->gsm610.bytespersec != (unsigned) bytespersec)
-                                       psf_log_printf (psf, "  Bytes/sec     : %d (should be %d)\n", wav_fmt->gsm610.bytespersec, bytespersec) ;
-                               else
-                                       psf_log_printf (psf, "  Bytes/sec     : %d\n", wav_fmt->gsm610.bytespersec) ;
-
-                               psf_log_printf (psf, "  Extra Bytes   : %d\n", wav_fmt->gsm610.extrabytes) ;
-                               psf_log_printf (psf, "  Samples/Block : %d\n", wav_fmt->gsm610.samplesperblock) ;
-                               break ;
-
-               case WAVE_FORMAT_EXTENSIBLE :
-                               if (wav_fmt->ext.bytespersec / wav_fmt->ext.blockalign != wav_fmt->ext.samplerate)
-                                       psf_log_printf (psf, "  Bytes/sec     : %d (should be %d)\n", wav_fmt->ext.bytespersec, wav_fmt->ext.samplerate * wav_fmt->ext.blockalign) ;
-                               else
-                                       psf_log_printf (psf, "  Bytes/sec     : %d\n", wav_fmt->ext.bytespersec) ;
-
-                               bytesread +=
-                               psf_binheader_readf (psf, "224", &(wav_fmt->ext.extrabytes), &(wav_fmt->ext.validbits),
-                                               &(wav_fmt->ext.channelmask)) ;
-
-                               psf_log_printf (psf, "  Valid Bits    : %d\n", wav_fmt->ext.validbits) ;
-
-                               if (wav_fmt->ext.channelmask == 0)
-                                       psf_log_printf (psf, "  Channel Mask  : 0x0 (should not be zero)\n") ;
-                               else
-                               {       char buffer [512] ;
-                                       unsigned bit ;
-
-                                       wpriv->wavex_channelmask = wav_fmt->ext.channelmask ;
-
-                                       /* It's probably wise to ignore the channel mask if it is all zero */
-                                       free (psf->channel_map) ;
-
-                                       if ((psf->channel_map = calloc (psf->sf.channels, sizeof (psf->channel_map [0]))) == NULL)
-                                               return SFE_MALLOC_FAILED ;
-
-                                       /* Terminate the buffer we're going to append_snprintf into. */
-                                       buffer [0] = 0 ;
-
-                                       for (bit = k = 0 ; bit < ARRAY_LEN (channel_mask_bits) ; bit++)
-                                       {
-                                               if (wav_fmt->ext.channelmask & (1 << bit))
-                                               {       if (k > psf->sf.channels)
-                                                       {       psf_log_printf (psf, "*** More channel map bits than there are channels.\n") ;
-                                                               break ;
-                                                               } ;
-
-                                                       psf->channel_map [k++] = channel_mask_bits [bit].id ;
-                                                       append_snprintf (buffer, sizeof (buffer), "%s, ", channel_mask_bits [bit].name) ;
-                                                       } ;
-                                               } ;
-
-                                       /* Remove trailing ", ". */
-                                       bit = strlen (buffer) ;
-                                       buffer [--bit] = 0 ;
-                                       buffer [--bit] = 0 ;
-
-                                       if (k != psf->sf.channels)
-                                       {       psf_log_printf (psf, "  Channel Mask  : 0x%X\n", wav_fmt->ext.channelmask) ;
-                                               psf_log_printf (psf, "*** Less channel map bits than there are channels.\n") ;
-                                               }
-                                       else
-                                               psf_log_printf (psf, "  Channel Mask  : 0x%X (%s)\n", wav_fmt->ext.channelmask, buffer) ;
-                                       } ;
-
-                               bytesread += psf_binheader_readf (psf, "422", &(wav_fmt->ext.esf.esf_field1), &(wav_fmt->ext.esf.esf_field2), &(wav_fmt->ext.esf.esf_field3)) ;
-
-                               /* compare the esf_fields with each known GUID? and print? */
-                               psf_log_printf (psf, "  Subformat\n") ;
-                               psf_log_printf (psf, "    esf_field1 : 0x%X\n", wav_fmt->ext.esf.esf_field1) ;
-                               psf_log_printf (psf, "    esf_field2 : 0x%X\n", wav_fmt->ext.esf.esf_field2) ;
-                               psf_log_printf (psf, "    esf_field3 : 0x%X\n", wav_fmt->ext.esf.esf_field3) ;
-                               psf_log_printf (psf, "    esf_field4 : ") ;
-                               for (k = 0 ; k < 8 ; k++)
-                               {       bytesread += psf_binheader_readf (psf, "1", &(wav_fmt->ext.esf.esf_field4 [k])) ;
-                                       psf_log_printf (psf, "0x%X ", wav_fmt->ext.esf.esf_field4 [k] & 0xFF) ;
-                                       } ;
-                               psf_log_printf (psf, "\n") ;
-                               psf->bytewidth = BITWIDTH2BYTES (wav_fmt->ext.bitwidth) ;
-
-                               /* Compare GUIDs for known ones. */
-                               if (wavex_guid_equal (&wav_fmt->ext.esf, &MSGUID_SUBTYPE_PCM))
-                               {       psf->sf.format = SF_FORMAT_WAVEX | u_bitwidth_to_subformat (psf->bytewidth * 8) ;
-                                       psf_log_printf (psf, "    format : pcm\n") ;
-                                       }
-                               else if (wavex_guid_equal (&wav_fmt->ext.esf, &MSGUID_SUBTYPE_MS_ADPCM))
-                               {       psf->sf.format = (SF_FORMAT_WAVEX | SF_FORMAT_MS_ADPCM) ;
-                                       psf_log_printf (psf, "    format : ms adpcm\n") ;
-                                       }
-                               else if (wavex_guid_equal (&wav_fmt->ext.esf, &MSGUID_SUBTYPE_IEEE_FLOAT))
-                               {       psf->sf.format = SF_FORMAT_WAVEX | ((psf->bytewidth == 8) ? SF_FORMAT_DOUBLE : SF_FORMAT_FLOAT) ;
-                                       psf_log_printf (psf, "    format : IEEE float\n") ;
-                                       }
-                               else if (wavex_guid_equal (&wav_fmt->ext.esf, &MSGUID_SUBTYPE_ALAW))
-                               {       psf->sf.format = (SF_FORMAT_WAVEX | SF_FORMAT_ALAW) ;
-                                       psf_log_printf (psf, "    format : A-law\n") ;
-                                       }
-                               else if (wavex_guid_equal (&wav_fmt->ext.esf, &MSGUID_SUBTYPE_MULAW))
-                               {       psf->sf.format = (SF_FORMAT_WAVEX | SF_FORMAT_ULAW) ;
-                                       psf_log_printf (psf, "    format : u-law\n") ;
-                                       }
-                               else if (wavex_guid_equal (&wav_fmt->ext.esf, &MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_PCM))
-                               {       psf->sf.format = SF_FORMAT_WAVEX | u_bitwidth_to_subformat (psf->bytewidth * 8) ;
-                                       psf_log_printf (psf, "    format : pcm (Ambisonic B)\n") ;
-                                       wpriv->wavex_ambisonic = SF_AMBISONIC_B_FORMAT ;
-                                       }
-                               else if (wavex_guid_equal (&wav_fmt->ext.esf, &MSGUID_SUBTYPE_AMBISONIC_B_FORMAT_IEEE_FLOAT))
-                               {       psf->sf.format = SF_FORMAT_WAVEX | ((psf->bytewidth == 8) ? SF_FORMAT_DOUBLE : SF_FORMAT_FLOAT) ;
-                                       psf_log_printf (psf, "    format : IEEE float (Ambisonic B)\n") ;
-                                       wpriv->wavex_ambisonic = SF_AMBISONIC_B_FORMAT ;
-                                       }
-                               else
-                                       return SFE_UNIMPLEMENTED ;
-
-                               break ;
-
-               case WAVE_FORMAT_G721_ADPCM :
-                               psf_log_printf (psf, "  Bytes/sec     : %d\n", wav_fmt->g72x.bytespersec) ;
-                               if (fmtsize >= 20)
-                               {       bytesread += psf_binheader_readf (psf, "22", &(wav_fmt->g72x.extrabytes), &(wav_fmt->g72x.auxblocksize)) ;
-                                       if (wav_fmt->g72x.extrabytes == 0)
-                                               psf_log_printf (psf, "  Extra Bytes   : %d (should be 2)\n", wav_fmt->g72x.extrabytes) ;
-                                       else
-                                               psf_log_printf (psf, "  Extra Bytes   : %d\n", wav_fmt->g72x.extrabytes) ;
-                                               psf_log_printf (psf, "  Aux Blk Size  : %d\n", wav_fmt->g72x.auxblocksize) ;
-                                       }
-                               else if (fmtsize == 18)
-                               {       bytesread += psf_binheader_readf (psf, "2", &(wav_fmt->g72x.extrabytes)) ;
-                                       psf_log_printf (psf, "  Extra Bytes   : %d%s\n", wav_fmt->g72x.extrabytes, wav_fmt->g72x.extrabytes != 0 ? " (should be 0)" : "") ;
-                                       }
-                               else
-                                       psf_log_printf (psf, "*** 'fmt ' chunk should be bigger than this!\n") ;
-                               break ;
-
-               default :
-                               psf_log_printf (psf, "*** No 'fmt ' chunk dumper for this format!\n") ;
-                               return SFE_WAV_BAD_FMT ;
-               } ;
-
-       if (bytesread > fmtsize)
-       {       psf_log_printf (psf, "*** wav_w64_read_fmt_chunk (bytesread > fmtsize)\n") ;
-               return SFE_WAV_BAD_FMT ;
-               }
-       else
-               psf_binheader_readf (psf, "j", fmtsize - bytesread) ;
-
-       psf->blockwidth = wav_fmt->min.channels * psf->bytewidth ;
-
-       return 0 ;
-} /* wav_w64_read_fmt_chunk */
-
-void
-wavex_write_guid (SF_PRIVATE *psf, const EXT_SUBFORMAT * subformat)
-{
-       psf_binheader_writef (psf, "422b", subformat->esf_field1,
-                                       subformat->esf_field2, subformat->esf_field3,
-                                       subformat->esf_field4, make_size_t (8)) ;
-} /* wavex_write_guid */
-
-
-int
-wavex_gen_channel_mask (const int *chan_map, int channels)
-{      int chan, mask = 0, bit = -1, last_bit = -1 ;
-
-       if (chan_map == NULL)
-               return 0 ;
-
-       for (chan = 0 ; chan < channels ; chan ++)
-       {       int k ;
-
-               for (k = bit + 1 ; k < ARRAY_LEN (channel_mask_bits) ; k++)
-                       if (chan_map [chan] == channel_mask_bits [k].id)
-                       {       bit = k ;
-                               break ;
-                               } ;
-
-               /* Check for bad sequence. */
-               if (bit <= last_bit)
-                       return 0 ;
-
-               mask += 1 << bit ;
-               last_bit = bit ;
-               } ;
-
-       return mask ;
-} /* wavex_gen_channel_mask */
-
-void
-wav_w64_analyze (SF_PRIVATE *psf)
-{      unsigned char buffer [4096] ;
-       AUDIO_DETECT ad ;
-       int format = 0 ;
-
-       if (psf->is_pipe)
-       {       psf_log_printf (psf, "*** Error : Reading from a pipe. Can't analyze data section to figure out real data format.\n\n") ;
-               return ;
-               } ;
-
-       psf_log_printf (psf, "---------------------------------------------------\n"
-                                               "Format is known to be broken. Using detection code.\n") ;
-
-       /* Code goes here. */
-       ad.endianness = SF_ENDIAN_LITTLE ;
-       ad.channels = psf->sf.channels ;
-
-       psf_fseek (psf, 3 * 4 * 50, SEEK_SET) ;
-
-       while (psf_fread (buffer, 1, sizeof (buffer), psf) == sizeof (buffer))
-       {       format = audio_detect (psf, &ad, buffer, sizeof (buffer)) ;
-               if (format != 0)
-                       break ;
-               } ;
-
-       /* Seek to start of DATA section. */
-       psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-       if (format == 0)
-       {       psf_log_printf (psf, "wav_w64_analyze : detection failed.\n") ;
-               return ;
-               } ;
-
-       switch (format)
-       {       case SF_FORMAT_PCM_32 :
-               case SF_FORMAT_FLOAT :
-                       psf_log_printf (psf, "wav_w64_analyze : found format : 0x%X\n", format) ;
-                       psf->sf.format = (psf->sf.format & ~SF_FORMAT_SUBMASK) + format ;
-                       psf->bytewidth = 4 ;
-                       psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-                       break ;
-
-               case SF_FORMAT_PCM_24 :
-                       psf_log_printf (psf, "wav_w64_analyze : found format : 0x%X\n", format) ;
-                       psf->sf.format = (psf->sf.format & ~SF_FORMAT_SUBMASK) + format ;
-                       psf->bytewidth = 3 ;
-                       psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-                       break ;
-
-               default :
-                       psf_log_printf (psf, "wav_w64_analyze : unhandled format : 0x%X\n", format) ;
-                       break ;
-               } ;
-
-       return ;
-} /* wav_w64_analyze */
-
-/*==============================================================================
-*/
-
-typedef struct
-{      int                     ID ;
-       const char      *name ;
-} WAV_FORMAT_DESC ;
-
-#define STR(x)                 #x
-#define FORMAT_TYPE(x) { x, STR (x) }
-
-static WAV_FORMAT_DESC wave_descs [] =
-{      FORMAT_TYPE     (WAVE_FORMAT_PCM),
-       FORMAT_TYPE (WAVE_FORMAT_MS_ADPCM),
-       FORMAT_TYPE (WAVE_FORMAT_IEEE_FLOAT),
-       FORMAT_TYPE (WAVE_FORMAT_VSELP),
-       FORMAT_TYPE (WAVE_FORMAT_IBM_CVSD),
-       FORMAT_TYPE (WAVE_FORMAT_ALAW),
-       FORMAT_TYPE (WAVE_FORMAT_MULAW),
-       FORMAT_TYPE (WAVE_FORMAT_OKI_ADPCM),
-       FORMAT_TYPE (WAVE_FORMAT_IMA_ADPCM),
-       FORMAT_TYPE (WAVE_FORMAT_MEDIASPACE_ADPCM),
-       FORMAT_TYPE (WAVE_FORMAT_SIERRA_ADPCM),
-       FORMAT_TYPE (WAVE_FORMAT_G723_ADPCM),
-       FORMAT_TYPE (WAVE_FORMAT_DIGISTD),
-       FORMAT_TYPE (WAVE_FORMAT_DIGIFIX),
-       FORMAT_TYPE (WAVE_FORMAT_DIALOGIC_OKI_ADPCM),
-       FORMAT_TYPE (WAVE_FORMAT_MEDIAVISION_ADPCM),
-       FORMAT_TYPE (WAVE_FORMAT_CU_CODEC),
-       FORMAT_TYPE (WAVE_FORMAT_YAMAHA_ADPCM),
-       FORMAT_TYPE (WAVE_FORMAT_SONARC),
-       FORMAT_TYPE (WAVE_FORMAT_DSPGROUP_TRUESPEECH),
-       FORMAT_TYPE (WAVE_FORMAT_ECHOSC1),
-       FORMAT_TYPE (WAVE_FORMAT_AUDIOFILE_AF36),
-       FORMAT_TYPE (WAVE_FORMAT_APTX),
-       FORMAT_TYPE (WAVE_FORMAT_AUDIOFILE_AF10),
-       FORMAT_TYPE (WAVE_FORMAT_PROSODY_1612),
-       FORMAT_TYPE (WAVE_FORMAT_LRC),
-       FORMAT_TYPE (WAVE_FORMAT_DOLBY_AC2),
-       FORMAT_TYPE (WAVE_FORMAT_GSM610),
-       FORMAT_TYPE (WAVE_FORMAT_MSNAUDIO),
-       FORMAT_TYPE (WAVE_FORMAT_ANTEX_ADPCME),
-       FORMAT_TYPE (WAVE_FORMAT_CONTROL_RES_VQLPC),
-       FORMAT_TYPE (WAVE_FORMAT_DIGIREAL),
-       FORMAT_TYPE (WAVE_FORMAT_DIGIADPCM),
-       FORMAT_TYPE (WAVE_FORMAT_CONTROL_RES_CR10),
-       FORMAT_TYPE (WAVE_FORMAT_NMS_VBXADPCM),
-       FORMAT_TYPE (WAVE_FORMAT_ROLAND_RDAC),
-       FORMAT_TYPE (WAVE_FORMAT_ECHOSC3),
-       FORMAT_TYPE (WAVE_FORMAT_ROCKWELL_ADPCM),
-       FORMAT_TYPE (WAVE_FORMAT_ROCKWELL_DIGITALK),
-       FORMAT_TYPE (WAVE_FORMAT_XEBEC),
-       FORMAT_TYPE (WAVE_FORMAT_G721_ADPCM),
-       FORMAT_TYPE (WAVE_FORMAT_G728_CELP),
-       FORMAT_TYPE (WAVE_FORMAT_MSG723),
-       FORMAT_TYPE (WAVE_FORMAT_MPEG),
-       FORMAT_TYPE (WAVE_FORMAT_RT24),
-       FORMAT_TYPE (WAVE_FORMAT_PAC),
-       FORMAT_TYPE (WAVE_FORMAT_MPEGLAYER3),
-       FORMAT_TYPE (WAVE_FORMAT_LUCENT_G723),
-       FORMAT_TYPE (WAVE_FORMAT_CIRRUS),
-       FORMAT_TYPE (WAVE_FORMAT_ESPCM),
-       FORMAT_TYPE (WAVE_FORMAT_VOXWARE),
-       FORMAT_TYPE (WAVE_FORMAT_CANOPUS_ATRAC),
-       FORMAT_TYPE (WAVE_FORMAT_G726_ADPCM),
-       FORMAT_TYPE (WAVE_FORMAT_G722_ADPCM),
-       FORMAT_TYPE (WAVE_FORMAT_DSAT),
-       FORMAT_TYPE (WAVE_FORMAT_DSAT_DISPLAY),
-       FORMAT_TYPE (WAVE_FORMAT_VOXWARE_BYTE_ALIGNED),
-       FORMAT_TYPE (WAVE_FORMAT_VOXWARE_AC8),
-       FORMAT_TYPE (WAVE_FORMAT_VOXWARE_AC10),
-       FORMAT_TYPE (WAVE_FORMAT_VOXWARE_AC16),
-       FORMAT_TYPE (WAVE_FORMAT_VOXWARE_AC20),
-       FORMAT_TYPE (WAVE_FORMAT_VOXWARE_RT24),
-       FORMAT_TYPE (WAVE_FORMAT_VOXWARE_RT29),
-       FORMAT_TYPE (WAVE_FORMAT_VOXWARE_RT29HW),
-       FORMAT_TYPE (WAVE_FORMAT_VOXWARE_VR12),
-       FORMAT_TYPE (WAVE_FORMAT_VOXWARE_VR18),
-       FORMAT_TYPE (WAVE_FORMAT_VOXWARE_TQ40),
-       FORMAT_TYPE (WAVE_FORMAT_SOFTSOUND),
-       FORMAT_TYPE (WAVE_FORMAT_VOXARE_TQ60),
-       FORMAT_TYPE (WAVE_FORMAT_MSRT24),
-       FORMAT_TYPE (WAVE_FORMAT_G729A),
-       FORMAT_TYPE (WAVE_FORMAT_MVI_MV12),
-       FORMAT_TYPE (WAVE_FORMAT_DF_G726),
-       FORMAT_TYPE (WAVE_FORMAT_DF_GSM610),
-       FORMAT_TYPE (WAVE_FORMAT_ONLIVE),
-       FORMAT_TYPE (WAVE_FORMAT_SBC24),
-       FORMAT_TYPE (WAVE_FORMAT_DOLBY_AC3_SPDIF),
-       FORMAT_TYPE (WAVE_FORMAT_ZYXEL_ADPCM),
-       FORMAT_TYPE (WAVE_FORMAT_PHILIPS_LPCBB),
-       FORMAT_TYPE (WAVE_FORMAT_PACKED),
-       FORMAT_TYPE (WAVE_FORMAT_RHETOREX_ADPCM),
-       FORMAT_TYPE (IBM_FORMAT_MULAW),
-       FORMAT_TYPE (IBM_FORMAT_ALAW),
-       FORMAT_TYPE (IBM_FORMAT_ADPCM),
-       FORMAT_TYPE (WAVE_FORMAT_VIVO_G723),
-       FORMAT_TYPE (WAVE_FORMAT_VIVO_SIREN),
-       FORMAT_TYPE (WAVE_FORMAT_DIGITAL_G723),
-       FORMAT_TYPE (WAVE_FORMAT_CREATIVE_ADPCM),
-       FORMAT_TYPE (WAVE_FORMAT_CREATIVE_FASTSPEECH8),
-       FORMAT_TYPE (WAVE_FORMAT_CREATIVE_FASTSPEECH10),
-       FORMAT_TYPE (WAVE_FORMAT_QUARTERDECK),
-       FORMAT_TYPE (WAVE_FORMAT_FM_TOWNS_SND),
-       FORMAT_TYPE (WAVE_FORMAT_BZV_DIGITAL),
-       FORMAT_TYPE (WAVE_FORMAT_VME_VMPCM),
-       FORMAT_TYPE (WAVE_FORMAT_OLIGSM),
-       FORMAT_TYPE (WAVE_FORMAT_OLIADPCM),
-       FORMAT_TYPE (WAVE_FORMAT_OLICELP),
-       FORMAT_TYPE (WAVE_FORMAT_OLISBC),
-       FORMAT_TYPE (WAVE_FORMAT_OLIOPR),
-       FORMAT_TYPE (WAVE_FORMAT_LH_CODEC),
-       FORMAT_TYPE (WAVE_FORMAT_NORRIS),
-       FORMAT_TYPE (WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESS),
-       FORMAT_TYPE (WAVE_FORMAT_DVM),
-       FORMAT_TYPE (WAVE_FORMAT_INTERWAV_VSC112),
-       FORMAT_TYPE (WAVE_FORMAT_IPP_ITU_G_723_1),
-       FORMAT_TYPE (WAVE_FORMAT_EXTENSIBLE),
-} ;
-
-char const*
-wav_w64_format_str (int k)
-{      int lower, upper, mid ;
-
-       lower = -1 ;
-       upper = sizeof (wave_descs) / sizeof (WAV_FORMAT_DESC) ;
-
-       /* binary search */
-       if ((wave_descs [0].ID <= k) && (k <= wave_descs [upper - 1].ID))
-       {
-               while (lower + 1 < upper)
-               {       mid = (upper + lower) / 2 ;
-
-                       if (k == wave_descs [mid].ID)
-                               return wave_descs [mid].name ;
-                       if (k < wave_descs [mid].ID)
-                               upper = mid ;
-                       else
-                               lower = mid ;
-                       } ;
-               } ;
-
-       return "Unknown format" ;
-} /* wav_w64_format_str */
-
-int
-wav_w64_srate2blocksize (int srate_chan_product)
-{      if (srate_chan_product < 12000)
-               return 256 ;
-       if (srate_chan_product < 23000)
-               return 512 ;
-       if (srate_chan_product < 44000)
-               return 1024 ;
-       return 2048 ;
-} /* srate2blocksize */
diff --git a/libs/libsndfile/src/wav_w64.h b/libs/libsndfile/src/wav_w64.h
deleted file mode 100644 (file)
index 7e18080..0000000
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/* This file contains definitions commong to WAV and W64 files. */
-
-
-#ifndef WAV_W64_H_INCLUDED
-#define WAV_W64_H_INCLUDED
-
-/*------------------------------------------------------------------------------
-** List of known WAV format tags
-*/
-
-enum
-{
-       /* keep sorted for wav_w64_format_str() */
-       WAVE_FORMAT_UNKNOWN                                     = 0x0000,               /* Microsoft Corporation */
-       WAVE_FORMAT_PCM                                         = 0x0001,               /* Microsoft PCM format */
-       WAVE_FORMAT_MS_ADPCM                            = 0x0002,               /* Microsoft ADPCM */
-       WAVE_FORMAT_IEEE_FLOAT                          = 0x0003,               /* Micrososft 32 bit float format */
-       WAVE_FORMAT_VSELP                                       = 0x0004,               /* Compaq Computer Corporation */
-       WAVE_FORMAT_IBM_CVSD                            = 0x0005,               /* IBM Corporation */
-       WAVE_FORMAT_ALAW                                        = 0x0006,               /* Microsoft Corporation */
-       WAVE_FORMAT_MULAW                                       = 0x0007,               /* Microsoft Corporation */
-       WAVE_FORMAT_OKI_ADPCM                           = 0x0010,               /* OKI */
-       WAVE_FORMAT_IMA_ADPCM                           = 0x0011,               /* Intel Corporation */
-       WAVE_FORMAT_MEDIASPACE_ADPCM            = 0x0012,               /* Videologic */
-       WAVE_FORMAT_SIERRA_ADPCM                        = 0x0013,               /* Sierra Semiconductor Corp */
-       WAVE_FORMAT_G723_ADPCM                          = 0x0014,               /* Antex Electronics Corporation */
-       WAVE_FORMAT_DIGISTD                                     = 0x0015,               /* DSP Solutions, Inc. */
-       WAVE_FORMAT_DIGIFIX                                     = 0x0016,               /* DSP Solutions, Inc. */
-       WAVE_FORMAT_DIALOGIC_OKI_ADPCM          = 0x0017,               /*  Dialogic Corporation  */
-       WAVE_FORMAT_MEDIAVISION_ADPCM           = 0x0018,               /*  Media Vision, Inc. */
-       WAVE_FORMAT_CU_CODEC                            = 0x0019,               /* Hewlett-Packard Company */
-       WAVE_FORMAT_YAMAHA_ADPCM                        = 0x0020,               /* Yamaha Corporation of America */
-       WAVE_FORMAT_SONARC                                      = 0x0021,               /* Speech Compression */
-       WAVE_FORMAT_DSPGROUP_TRUESPEECH         = 0x0022,               /* DSP Group, Inc */
-       WAVE_FORMAT_ECHOSC1                                     = 0x0023,               /* Echo Speech Corporation */
-       WAVE_FORMAT_AUDIOFILE_AF36                      = 0x0024,               /* Audiofile, Inc. */
-       WAVE_FORMAT_APTX                                        = 0x0025,               /* Audio Processing Technology */
-       WAVE_FORMAT_AUDIOFILE_AF10                      = 0x0026,               /* Audiofile, Inc. */
-       WAVE_FORMAT_PROSODY_1612                        = 0x0027,               /* Aculab plc */
-       WAVE_FORMAT_LRC                                         = 0x0028,               /* Merging Technologies S.A. */
-       WAVE_FORMAT_DOLBY_AC2                           = 0x0030,               /* Dolby Laboratories */
-       WAVE_FORMAT_GSM610                                      = 0x0031,               /* Microsoft Corporation */
-       WAVE_FORMAT_MSNAUDIO                            = 0x0032,               /* Microsoft Corporation */
-       WAVE_FORMAT_ANTEX_ADPCME                        = 0x0033,               /* Antex Electronics Corporation */
-       WAVE_FORMAT_CONTROL_RES_VQLPC           = 0x0034,               /* Control Resources Limited */
-       WAVE_FORMAT_DIGIREAL                            = 0x0035,               /* DSP Solutions, Inc. */
-       WAVE_FORMAT_DIGIADPCM                           = 0x0036,               /* DSP Solutions, Inc. */
-       WAVE_FORMAT_CONTROL_RES_CR10            = 0x0037,               /* Control Resources Limited */
-       WAVE_FORMAT_NMS_VBXADPCM                        = 0x0038,               /* Natural MicroSystems */
-       WAVE_FORMAT_ROLAND_RDAC                         = 0x0039,               /* Roland */
-       WAVE_FORMAT_ECHOSC3                                     = 0x003A,               /* Echo Speech Corporation */
-       WAVE_FORMAT_ROCKWELL_ADPCM                      = 0x003B,               /* Rockwell International */
-       WAVE_FORMAT_ROCKWELL_DIGITALK           = 0x003C,               /* Rockwell International */
-       WAVE_FORMAT_XEBEC                                       = 0x003D,               /* Xebec Multimedia Solutions Limited */
-       WAVE_FORMAT_G721_ADPCM                          = 0x0040,               /* Antex Electronics Corporation */
-       WAVE_FORMAT_G728_CELP                           = 0x0041,               /* Antex Electronics Corporation */
-       WAVE_FORMAT_MSG723                                      = 0x0042,               /* Microsoft Corporation */
-       WAVE_FORMAT_MPEG                                        = 0x0050,               /* Microsoft Corporation */
-       WAVE_FORMAT_RT24                                        = 0x0052,               /* InSoft Inc. */
-       WAVE_FORMAT_PAC                                         = 0x0053,               /* InSoft Inc. */
-       WAVE_FORMAT_MPEGLAYER3                          = 0x0055,               /* MPEG 3 Layer 1 */
-       WAVE_FORMAT_LUCENT_G723                         = 0x0059,               /* Lucent Technologies */
-       WAVE_FORMAT_CIRRUS                                      = 0x0060,               /* Cirrus Logic */
-       WAVE_FORMAT_ESPCM                                       = 0x0061,               /* ESS Technology */
-       WAVE_FORMAT_VOXWARE                                     = 0x0062,               /* Voxware Inc */
-       WAVE_FORMAT_CANOPUS_ATRAC                       = 0x0063,               /* Canopus, Co., Ltd. */
-       WAVE_FORMAT_G726_ADPCM                          = 0x0064,               /* APICOM */
-       WAVE_FORMAT_G722_ADPCM                          = 0x0065,               /* APICOM */
-       WAVE_FORMAT_DSAT                                        = 0x0066,               /* Microsoft Corporation */
-       WAVE_FORMAT_DSAT_DISPLAY                        = 0x0067,               /* Microsoft Corporation */
-       WAVE_FORMAT_VOXWARE_BYTE_ALIGNED        = 0x0069,               /* Voxware Inc. */
-       WAVE_FORMAT_VOXWARE_AC8                         = 0x0070,               /* Voxware Inc. */
-       WAVE_FORMAT_VOXWARE_AC10                        = 0x0071,               /* Voxware Inc. */
-       WAVE_FORMAT_VOXWARE_AC16                        = 0x0072,               /* Voxware Inc. */
-       WAVE_FORMAT_VOXWARE_AC20                        = 0x0073,               /* Voxware Inc. */
-       WAVE_FORMAT_VOXWARE_RT24                        = 0x0074,               /* Voxware Inc. */
-       WAVE_FORMAT_VOXWARE_RT29                        = 0x0075,               /* Voxware Inc. */
-       WAVE_FORMAT_VOXWARE_RT29HW                      = 0x0076,               /* Voxware Inc. */
-       WAVE_FORMAT_VOXWARE_VR12                        = 0x0077,               /* Voxware Inc. */
-       WAVE_FORMAT_VOXWARE_VR18                        = 0x0078,               /* Voxware Inc. */
-       WAVE_FORMAT_VOXWARE_TQ40                        = 0x0079,               /* Voxware Inc. */
-       WAVE_FORMAT_SOFTSOUND                           = 0x0080,               /* Softsound, Ltd. */
-       WAVE_FORMAT_VOXARE_TQ60                         = 0x0081,               /* Voxware Inc. */
-       WAVE_FORMAT_MSRT24                                      = 0x0082,               /* Microsoft Corporation */
-       WAVE_FORMAT_G729A                                       = 0x0083,               /* AT&T Laboratories */
-       WAVE_FORMAT_MVI_MV12                            = 0x0084,               /* Motion Pixels */
-       WAVE_FORMAT_DF_G726                                     = 0x0085,               /* DataFusion Systems (Pty) (Ltd) */
-       WAVE_FORMAT_DF_GSM610                           = 0x0086,               /* DataFusion Systems (Pty) (Ltd) */
-       /* removed because duplicate */
-       /* WAVE_FORMAT_ISIAUDIO                         = 0x0088, */    /* Iterated Systems, Inc. */
-       WAVE_FORMAT_ONLIVE                                      = 0x0089,               /* OnLive! Technologies, Inc. */
-       WAVE_FORMAT_SBC24                                       = 0x0091,               /* Siemens Business Communications Systems */
-       WAVE_FORMAT_DOLBY_AC3_SPDIF                     = 0x0092,               /* Sonic Foundry */
-       WAVE_FORMAT_ZYXEL_ADPCM                         = 0x0097,               /* ZyXEL Communications, Inc. */
-       WAVE_FORMAT_PHILIPS_LPCBB                       = 0x0098,               /* Philips Speech Processing */
-       WAVE_FORMAT_PACKED                                      = 0x0099,               /* Studer Professional Audio AG */
-       WAVE_FORMAT_RHETOREX_ADPCM                      = 0x0100,               /* Rhetorex, Inc. */
-
-       /* removed because of the following */
-       /* WAVE_FORMAT_IRAT                                     = 0x0101,*/             /* BeCubed Software Inc. */
-
-       /* these three are unofficial */
-       IBM_FORMAT_MULAW                                        = 0x0101,               /* IBM mu-law format */
-       IBM_FORMAT_ALAW                                         = 0x0102,               /* IBM a-law format */
-       IBM_FORMAT_ADPCM                                        = 0x0103,               /* IBM AVC Adaptive Differential PCM format */
-
-       WAVE_FORMAT_VIVO_G723                           = 0x0111,               /* Vivo Software */
-       WAVE_FORMAT_VIVO_SIREN                          = 0x0112,               /* Vivo Software */
-       WAVE_FORMAT_DIGITAL_G723                        = 0x0123,               /* Digital Equipment Corporation */
-       WAVE_FORMAT_CREATIVE_ADPCM                      = 0x0200,               /* Creative Labs, Inc */
-       WAVE_FORMAT_CREATIVE_FASTSPEECH8        = 0x0202,               /* Creative Labs, Inc */
-       WAVE_FORMAT_CREATIVE_FASTSPEECH10       = 0x0203,               /* Creative Labs, Inc */
-       WAVE_FORMAT_QUARTERDECK                         = 0x0220,               /* Quarterdeck Corporation */
-       WAVE_FORMAT_FM_TOWNS_SND                        = 0x0300,               /* Fujitsu Corporation */
-       WAVE_FORMAT_BZV_DIGITAL                         = 0x0400,               /* Brooktree Corporation */
-       WAVE_FORMAT_VME_VMPCM                           = 0x0680,               /* AT&T Labs, Inc. */
-       WAVE_FORMAT_OLIGSM                                      = 0x1000,               /* Ing C. Olivetti & C., S.p.A. */
-       WAVE_FORMAT_OLIADPCM                            = 0x1001,               /* Ing C. Olivetti & C., S.p.A. */
-       WAVE_FORMAT_OLICELP                                     = 0x1002,               /* Ing C. Olivetti & C., S.p.A. */
-       WAVE_FORMAT_OLISBC                                      = 0x1003,               /* Ing C. Olivetti & C., S.p.A. */
-       WAVE_FORMAT_OLIOPR                                      = 0x1004,               /* Ing C. Olivetti & C., S.p.A. */
-       WAVE_FORMAT_LH_CODEC                            = 0x1100,               /* Lernout & Hauspie */
-       WAVE_FORMAT_NORRIS                                      = 0x1400,               /* Norris Communications, Inc. */
-       /* removed because duplicate */
-       /* WAVE_FORMAT_ISIAUDIO                         = 0x1401, */    /* AT&T Labs, Inc. */
-       WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESS     = 0x1500,               /* AT&T Labs, Inc. */
-       WAVE_FORMAT_DVM                                         = 0x2000,               /* FAST Multimedia AG */
-       WAVE_FORMAT_INTERWAV_VSC112                     = 0x7150,               /* ????? */
-
-       WAVE_FORMAT_IPP_ITU_G_723_1                     = 0x7230,               /* Intel Performance Primitives g723 codec. */
-
-       WAVE_FORMAT_EXTENSIBLE                          = 0xFFFE
-} ;
-
-typedef        struct
-{      unsigned short  format ;
-       unsigned short  channels ;
-       unsigned int    samplerate ;
-       unsigned int    bytespersec ;
-       unsigned short  blockalign ;
-       unsigned short  bitwidth ;
-} MIN_WAV_FMT ;
-
-typedef        struct
-{      unsigned short  format ;
-       unsigned short  channels ;
-       unsigned int    samplerate ;
-       unsigned int    bytespersec ;
-       unsigned short  blockalign ;
-       unsigned short  bitwidth ;
-       unsigned short  extrabytes ;
-       unsigned short  dummy ;
-} WAV_FMT_SIZE20 ;
-
-typedef        struct
-{      unsigned short  format ;
-       unsigned short  channels ;
-       unsigned int    samplerate ;
-       unsigned int    bytespersec ;
-       unsigned short  blockalign ;
-       unsigned short  bitwidth ;
-       unsigned short  extrabytes ;
-       unsigned short  samplesperblock ;
-       unsigned short  numcoeffs ;
-       struct
-       {       short   coeff1 ;
-               short   coeff2 ;
-       }       coeffs [7] ;
-} MS_ADPCM_WAV_FMT ;
-
-typedef        struct
-{      unsigned short  format ;
-       unsigned short  channels ;
-       unsigned int    samplerate ;
-       unsigned int    bytespersec ;
-       unsigned short  blockalign ;
-       unsigned short  bitwidth ;
-       unsigned short  extrabytes ;
-       unsigned short  samplesperblock ;
-} IMA_ADPCM_WAV_FMT ;
-
-typedef        struct
-{      unsigned short  format ;
-       unsigned short  channels ;
-       unsigned int    samplerate ;
-       unsigned int    bytespersec ;
-       unsigned short  blockalign ;
-       unsigned short  bitwidth ;
-       unsigned short  extrabytes ;
-       unsigned short  auxblocksize ;
-} G72x_ADPCM_WAV_FMT ;
-
-
-typedef        struct
-{      unsigned short  format ;
-       unsigned short  channels ;
-       unsigned int    samplerate ;
-       unsigned int    bytespersec ;
-       unsigned short  blockalign ;
-       unsigned short  bitwidth ;
-       unsigned short  extrabytes ;
-       unsigned short  samplesperblock ;
-} GSM610_WAV_FMT ;
-
-typedef struct
-{      unsigned int    esf_field1 ;
-       unsigned short  esf_field2 ;
-       unsigned short  esf_field3 ;
-       char                    esf_field4 [8] ;
-} EXT_SUBFORMAT ;
-
-typedef        struct
-{      unsigned short  format ;
-       unsigned short  channels ;
-       unsigned int    samplerate ;
-       unsigned int    bytespersec ;
-       unsigned short  blockalign ;
-       unsigned short  bitwidth ;
-       unsigned short  extrabytes ;
-       unsigned short  validbits ;
-       unsigned int    channelmask ;
-       EXT_SUBFORMAT   esf ;
-} EXTENSIBLE_WAV_FMT ;
-
-typedef union
-{      unsigned short          format ;
-       MIN_WAV_FMT                     min ;
-       IMA_ADPCM_WAV_FMT       ima ;
-       MS_ADPCM_WAV_FMT        msadpcm ;
-       G72x_ADPCM_WAV_FMT      g72x ;
-       EXTENSIBLE_WAV_FMT      ext ;
-       GSM610_WAV_FMT          gsm610 ;
-       WAV_FMT_SIZE20          size20 ;
-       char                            padding [512] ;
-} WAV_FMT ;
-
-typedef struct
-{      int frames ;
-} FACT_CHUNK ;
-
-typedef struct
-{      /* For ambisonic commands */
-       int     wavex_ambisonic ;
-       unsigned wavex_channelmask ;
-
-       /* Set to true when 'fmt ' chunk is ambiguous.*/
-       int fmt_is_broken ;
-       WAV_FMT wav_fmt ;
-} WAV_PRIVATE ;
-
-#define                WAV_W64_GSM610_BLOCKSIZE        65
-#define                WAV_W64_GSM610_SAMPLES          320
-
-/*------------------------------------------------------------------------------------
-**     Functions defined in wav_ms_adpcm.c
-*/
-
-#define        MSADPCM_ADAPT_COEFF_COUNT       7
-
-void   msadpcm_write_adapt_coeffs (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------------
-**     Functions defined in wav_w64.c
-*/
-
-int    wav_w64_srate2blocksize (int srate_chan_product) ;
-char const* wav_w64_format_str (int k) ;
-int            wav_w64_read_fmt_chunk (SF_PRIVATE *psf, int fmtsize) ;
-void   wavex_write_guid (SF_PRIVATE *psf, const EXT_SUBFORMAT * subformat) ;
-void   wav_w64_analyze (SF_PRIVATE *psf) ;
-int            wavex_gen_channel_mask (const int *chan_map, int channels) ;
-
-int            wav_read_bext_chunk (SF_PRIVATE *psf, unsigned int chunksize) ;
-int            wav_write_bext_chunk (SF_PRIVATE *psf) ;
-
-int            wav_read_cart_chunk (SF_PRIVATE *psf, unsigned int chunksize) ;
-int            wav_write_cart_chunk (SF_PRIVATE *psf) ;
-
-#endif
-
diff --git a/libs/libsndfile/src/windows.c b/libs/libsndfile/src/windows.c
deleted file mode 100644 (file)
index 387afdd..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
-** Copyright (C) 2009-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**     This needs to be a separate file so that we don't have to include
-**     <windows.h> elsewhere (too many symbol clashes).
-*/
-
-
-#include "sfconfig.h"
-
-#if OS_IS_WIN32
-#include <windows.h>
-
-#define ENABLE_SNDFILE_WINDOWS_PROTOTYPES 1
-#include "sndfile.h"
-#include "common.h"
-
-extern int sf_errno ;
-
-static void copy_filename (SF_PRIVATE * psf, LPCWSTR wpath) ;
-
-SNDFILE*
-sf_wchar_open (LPCWSTR wpath, int mode, SF_INFO *sfinfo)
-{      SF_PRIVATE      *psf ;
-       char utf8name [512] ;
-
-       if ((psf = calloc (1, sizeof (SF_PRIVATE))) == NULL)
-       {       sf_errno = SFE_MALLOC_FAILED ;
-               return  NULL ;
-               } ;
-
-       memset (psf, 0, sizeof (SF_PRIVATE)) ;
-       psf_init_files (psf) ;
-
-       if (WideCharToMultiByte (CP_UTF8, 0, wpath, -1, utf8name, sizeof (utf8name), NULL, NULL) == 0)
-               psf->file.path.wc [0] = 0 ;
-
-       psf_log_printf (psf, "File : '%s' (utf-8 converted from ucs-2)\n", utf8name) ;
-
-       copy_filename (psf, wpath) ;
-       psf->file.use_wchar = SF_TRUE ;
-       psf->file.mode = mode ;
-
-       psf->error = psf_fopen (psf) ;
-
-       return psf_open_file (psf, sfinfo) ;
-} /* sf_wchar_open */
-
-
-static void
-copy_filename (SF_PRIVATE *psf, LPCWSTR wpath)
-{      const wchar_t *cwcptr ;
-       wchar_t *wcptr ;
-
-       wcsncpy (psf->file.path.wc, wpath, ARRAY_LEN (psf->file.path.wc)) ;
-       psf->file.path.wc [ARRAY_LEN (psf->file.path.wc) - 1] = 0 ;
-       if ((cwcptr = wcsrchr (wpath, '/')) || (cwcptr = wcsrchr (wpath, '\\')))
-               cwcptr ++ ;
-       else
-               cwcptr = wpath ;
-
-       wcsncpy (psf->file.name.wc, cwcptr, ARRAY_LEN (psf->file.name.wc)) ;
-       psf->file.name.wc [ARRAY_LEN (psf->file.name.wc) - 1] = 0 ;
-
-       /* Now grab the directory. */
-       wcsncpy (psf->file.dir.wc, wpath, ARRAY_LEN (psf->file.dir.wc)) ;
-       psf->file.dir.wc [ARRAY_LEN (psf->file.dir.wc) - 1] = 0 ;
-
-       if ((wcptr = wcsrchr (psf->file.dir.wc, '/')) || (wcptr = wcsrchr (psf->file.dir.wc, '\\')))
-               wcptr [1] = 0 ;
-       else
-               psf->file.dir.wc [0] = 0 ;
-
-       return ;
-} /* copy_filename */
-
-#endif
diff --git a/libs/libsndfile/src/wve.c b/libs/libsndfile/src/wve.c
deleted file mode 100644 (file)
index c13e7ab..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-** Copyright (C) 2007 Reuben Thomas
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       "sfconfig.h"
-
-#include       <stdio.h>
-#include       <fcntl.h>
-#include       <string.h>
-#include       <ctype.h>
-
-#include       "sndfile.h"
-#include       "sfendian.h"
-#include       "common.h"
-
-/*------------------------------------------------------------------------------
-** Macros to handle big/little endian issues, and other magic numbers.
-*/
-
-#define ALAW_MARKER                    MAKE_MARKER ('A', 'L', 'a', 'w')
-#define SOUN_MARKER                    MAKE_MARKER ('S', 'o', 'u', 'n')
-#define DFIL_MARKER                    MAKE_MARKER ('d', 'F', 'i', 'l')
-#define ESSN_MARKER                    MAKE_MARKER ('e', '*', '*', '\0')
-#define PSION_VERSION          ((unsigned short) 3856)
-#define PSION_DATAOFFSET       0x20
-
-/*------------------------------------------------------------------------------
-** Private static functions.
-*/
-
-static int     wve_read_header (SF_PRIVATE *psf) ;
-static int     wve_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int     wve_close (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-wve_open (SF_PRIVATE *psf)
-{      int     error = 0 ;
-
-       if (psf->is_pipe)
-               return SFE_WVE_NO_PIPE ;
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-       {       if ((error = wve_read_header (psf)))
-                       return error ;
-               } ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_WVE)
-                       return  SFE_BAD_OPEN_FORMAT ;
-
-               psf->endian = SF_ENDIAN_BIG ;
-
-               if ((error = wve_write_header (psf, SF_FALSE)))
-                       return error ;
-
-               psf->write_header = wve_write_header ;
-               } ;
-
-       psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-       psf->container_close = wve_close ;
-
-       error = alaw_init (psf) ;
-
-       return error ;
-} /* wve_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-wve_read_header (SF_PRIVATE *psf)
-{      int marker ;
-       unsigned short version, padding, repeats, trash ;
-       unsigned datalength ;
-
-       /* Set position to start of file to begin reading header. */
-       psf_binheader_readf (psf, "pm", 0, &marker) ;
-       if (marker != ALAW_MARKER)
-       {       psf_log_printf (psf, "Could not find '%M'\n", ALAW_MARKER) ;
-               return SFE_WVE_NOT_WVE ;
-               } ;
-
-       psf_binheader_readf (psf, "m", &marker) ;
-       if (marker != SOUN_MARKER)
-       {       psf_log_printf (psf, "Could not find '%M'\n", SOUN_MARKER) ;
-               return SFE_WVE_NOT_WVE ;
-               } ;
-
-       psf_binheader_readf (psf, "m", &marker) ;
-       if (marker != DFIL_MARKER)
-       {       psf_log_printf (psf, "Could not find '%M'\n", DFIL_MARKER) ;
-               return SFE_WVE_NOT_WVE ;
-               } ;
-
-       psf_binheader_readf (psf, "m", &marker) ;
-       if (marker != ESSN_MARKER)
-       {       psf_log_printf (psf, "Could not find '%M'\n", ESSN_MARKER) ;
-               return SFE_WVE_NOT_WVE ;
-               } ;
-
-       psf_binheader_readf (psf, "E2", &version) ;
-
-       psf_log_printf (psf, "Psion Palmtop Alaw (.wve)\n"
-                       "  Sample Rate : 8000\n"
-                       "  Channels    : 1\n"
-                       "  Encoding    : A-law\n") ;
-
-       if (version != PSION_VERSION)
-               psf_log_printf (psf, "Psion version %d should be %d\n", version, PSION_VERSION) ;
-
-       psf_binheader_readf (psf, "E4", &datalength) ;
-       psf->dataoffset = PSION_DATAOFFSET ;
-       if (datalength != psf->filelength - psf->dataoffset)
-       {       psf->datalength = psf->filelength - psf->dataoffset ;
-               psf_log_printf (psf, "Data length %d should be %D\n", datalength, psf->datalength) ;
-               }
-       else
-               psf->datalength = datalength ;
-
-       psf_binheader_readf (psf, "E22222", &padding, &repeats, &trash, &trash, &trash) ;
-
-       psf->sf.format          = SF_FORMAT_WVE | SF_FORMAT_ALAW ;
-       psf->sf.samplerate      = 8000 ;
-       psf->sf.frames          = psf->datalength ;
-       psf->sf.channels        = 1 ;
-
-       return SFE_NO_ERROR ;
-} /* wve_read_header */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-wve_write_header (SF_PRIVATE *psf, int calc_length)
-{      sf_count_t      current ;
-       unsigned datalen ;
-
-       current = psf_ftell (psf) ;
-
-       if (calc_length)
-       {       psf->filelength = psf_get_filelen (psf) ;
-
-               psf->datalength = psf->filelength - psf->dataoffset ;
-               if (psf->dataend)
-                       psf->datalength -= psf->filelength - psf->dataend ;
-
-               psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
-               } ;
-
-       /* Reset the current header length to zero. */
-       psf->header [0] = 0 ;
-       psf->headindex = 0 ;
-       psf_fseek (psf, 0, SEEK_SET) ;
-
-       /* Write header. */
-       datalen = psf->datalength ;
-       psf_binheader_writef (psf, "Emmmm", ALAW_MARKER, SOUN_MARKER, DFIL_MARKER, ESSN_MARKER) ;
-       psf_binheader_writef (psf, "E2422222", PSION_VERSION, datalen, 0, 0, 0, 0, 0) ;
-       psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-       if (psf->sf.channels != 1)
-               return SFE_CHANNEL_COUNT ;
-
-       if (psf->error)
-               return psf->error ;
-
-       psf->dataoffset = psf->headindex ;
-
-       if (current > 0)
-               psf_fseek (psf, current, SEEK_SET) ;
-
-       return psf->error ;
-} /* wve_write_header */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-wve_close (SF_PRIVATE *psf)
-{
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       /*  Now we know for certain the length of the file we can re-write
-               **      the header.
-               */
-               wve_write_header (psf, SF_TRUE) ;
-               } ;
-
-       return 0 ;
-} /* wve_close */
diff --git a/libs/libsndfile/src/xi.c b/libs/libsndfile/src/xi.c
deleted file mode 100644 (file)
index fc442d1..0000000
+++ /dev/null
@@ -1,1230 +0,0 @@
-/*
-** Copyright (C) 2003-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-
-#include "sndfile.h"
-#include "sfendian.h"
-#include "common.h"
-
-#define        MAX_XI_SAMPLES  16
-
-/*------------------------------------------------------------------------------
-** Private static functions and tyepdefs.
-*/
-
-typedef struct
-{      /* Warning, this filename is NOT nul terminated. */
-       char    filename [22] ;
-       char    software [20] ;
-       char    sample_name [22] ;
-
-       int             loop_begin, loop_end ;
-       int             sample_flags ;
-
-       /* Data for encoder and decoder. */
-       short   last_16 ;
-} XI_PRIVATE ;
-
-static int     xi_close                (SF_PRIVATE *psf) ;
-static int     xi_write_header (SF_PRIVATE *psf, int calc_length) ;
-static int     xi_read_header  (SF_PRIVATE *psf) ;
-static int     dpcm_init               (SF_PRIVATE *psf) ;
-
-
-static sf_count_t      dpcm_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-
-/*------------------------------------------------------------------------------
-** Public function.
-*/
-
-int
-xi_open        (SF_PRIVATE *psf)
-{      XI_PRIVATE *pxi ;
-       int             subformat, error = 0 ;
-
-       if (psf->is_pipe)
-               return SFE_XI_NO_PIPE ;
-
-       if (psf->codec_data)
-               pxi = psf->codec_data ;
-       else if ((pxi = calloc (1, sizeof (XI_PRIVATE))) == NULL)
-               return SFE_MALLOC_FAILED ;
-
-       psf->codec_data = pxi ;
-
-       if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
-       {       if ((error = xi_read_header (psf)))
-                       return error ;
-               } ;
-
-       subformat = SF_CODEC (psf->sf.format) ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_XI)
-                       return  SFE_BAD_OPEN_FORMAT ;
-
-               psf->endian = SF_ENDIAN_LITTLE ;
-               psf->sf.channels = 1 ; /* Always mono */
-               psf->sf.samplerate = 44100 ; /* Always */
-
-               /* Set up default instrument and software name. */
-               memcpy (pxi->filename, "Default Name            ", sizeof (pxi->filename)) ;
-               memcpy (pxi->software, PACKAGE "-" VERSION "               ", sizeof (pxi->software)) ;
-
-               memset (pxi->sample_name, 0, sizeof (pxi->sample_name)) ;
-               snprintf (pxi->sample_name, sizeof (pxi->sample_name), "%s", "Sample #1") ;
-
-               pxi->sample_flags = (subformat == SF_FORMAT_DPCM_16) ? 16 : 0 ;
-
-               if (xi_write_header (psf, SF_FALSE))
-                       return psf->error ;
-
-               psf->write_header = xi_write_header ;
-               } ;
-
-       psf->container_close = xi_close ;
-       psf->seek = dpcm_seek ;
-
-       psf->sf.seekable = SF_FALSE ;
-
-       psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-       switch (subformat)
-       {       case SF_FORMAT_DPCM_8 :         /* 8-bit differential PCM. */
-               case SF_FORMAT_DPCM_16 :        /* 16-bit differential PCM. */
-                               error = dpcm_init (psf) ;
-                               break ;
-
-               default : break ;
-               } ;
-
-       return error ;
-} /* xi_open */
-
-/*------------------------------------------------------------------------------
-*/
-
-static int
-xi_close       (SF_PRIVATE * UNUSED (psf))
-{
-       return 0 ;
-} /* xi_close */
-
-/*==============================================================================
-*/
-
-static sf_count_t dpcm_read_dsc2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t dpcm_read_dsc2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t dpcm_read_dsc2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t dpcm_read_dsc2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t dpcm_write_s2dsc (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t dpcm_write_i2dsc (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t dpcm_write_f2dsc (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t dpcm_write_d2dsc (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static sf_count_t dpcm_read_dles2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static sf_count_t dpcm_read_dles2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static sf_count_t dpcm_read_dles2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static sf_count_t dpcm_read_dles2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-
-static sf_count_t dpcm_write_s2dles (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
-static sf_count_t dpcm_write_i2dles (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
-static sf_count_t dpcm_write_f2dles (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
-static sf_count_t dpcm_write_d2dles (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
-
-static int
-dpcm_init (SF_PRIVATE *psf)
-{      if (psf->bytewidth == 0 || psf->sf.channels == 0)
-               return SFE_INTERNAL ;
-
-       psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
-       if (psf->file.mode == SFM_READ || psf->file.mode == SFM_RDWR)
-       {       switch (psf->bytewidth)
-               {       case 1 :
-                                       psf->read_short         = dpcm_read_dsc2s ;
-                                       psf->read_int           = dpcm_read_dsc2i ;
-                                       psf->read_float         = dpcm_read_dsc2f ;
-                                       psf->read_double        = dpcm_read_dsc2d ;
-                                       break ;
-                       case 2 :
-                                       psf->read_short         = dpcm_read_dles2s ;
-                                       psf->read_int           = dpcm_read_dles2i ;
-                                       psf->read_float         = dpcm_read_dles2f ;
-                                       psf->read_double        = dpcm_read_dles2d ;
-                                       break ;
-                       default :
-                               psf_log_printf (psf, "dpcm_init() returning SFE_UNIMPLEMENTED\n") ;
-                               return SFE_UNIMPLEMENTED ;
-                       } ;
-               } ;
-
-       if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
-       {       switch (psf->bytewidth)
-               {       case 1 :
-                                       psf->write_short        = dpcm_write_s2dsc ;
-                                       psf->write_int          = dpcm_write_i2dsc ;
-                                       psf->write_float        = dpcm_write_f2dsc ;
-                                       psf->write_double       = dpcm_write_d2dsc ;
-                                       break ;
-                       case 2 :
-                                       psf->write_short        = dpcm_write_s2dles ;
-                                       psf->write_int          = dpcm_write_i2dles ;
-                                       psf->write_float        = dpcm_write_f2dles ;
-                                       psf->write_double       = dpcm_write_d2dles ;
-                                       break ;
-                       default :
-                               psf_log_printf (psf, "dpcm_init() returning SFE_UNIMPLEMENTED\n") ;
-                               return SFE_UNIMPLEMENTED ;
-                       } ;
-               } ;
-
-       psf->filelength = psf_get_filelen (psf) ;
-       psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset :
-                                                       psf->filelength - psf->dataoffset ;
-       psf->sf.frames = psf->datalength / psf->blockwidth ;
-
-       return 0 ;
-} /* dpcm_init */
-
-/*==============================================================================
-*/
-
-static sf_count_t
-dpcm_seek (SF_PRIVATE *psf, int mode, sf_count_t offset)
-{      BUF_UNION       ubuf ;
-       XI_PRIVATE      *pxi ;
-       int                     total, bufferlen, len ;
-
-       if ((pxi = psf->codec_data) == NULL)
-               return SFE_INTERNAL ;
-
-       if (psf->datalength < 0 || psf->dataoffset < 0)
-       {       psf->error = SFE_BAD_SEEK ;
-               return  PSF_SEEK_ERROR ;
-               } ;
-
-       if (offset == 0)
-       {       psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-               pxi->last_16 = 0 ;
-               return 0 ;
-               } ;
-
-       if (offset < 0 || offset > psf->sf.frames)
-       {       psf->error = SFE_BAD_SEEK ;
-               return  PSF_SEEK_ERROR ;
-               } ;
-
-       if (mode != SFM_READ)
-       {       /* What to do about write??? */
-               psf->error = SFE_BAD_SEEK ;
-               return  PSF_SEEK_ERROR ;
-               } ;
-
-       psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
-
-       if ((SF_CODEC (psf->sf.format)) == SF_FORMAT_DPCM_16)
-       {       total = offset ;
-               bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-               while (total > 0)
-               {       len = (total > bufferlen) ? bufferlen : total ;
-                       total -= dpcm_read_dles2s (psf, ubuf.sbuf, len) ;
-                       } ;
-               }
-       else
-       {       total = offset ;
-               bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-               while (total > 0)
-               {       len = (total > bufferlen) ? bufferlen : total ;
-                       total -= dpcm_read_dsc2s (psf, ubuf.sbuf, len) ;
-                       } ;
-               } ;
-
-       return offset ;
-} /* dpcm_seek */
-
-
-static int
-xi_write_header (SF_PRIVATE *psf, int UNUSED (calc_length))
-{      XI_PRIVATE      *pxi ;
-       sf_count_t      current ;
-       const char      *string ;
-
-       if ((pxi = psf->codec_data) == NULL)
-               return SFE_INTERNAL ;
-
-       current = psf_ftell (psf) ;
-
-       /* Reset the current header length to zero. */
-       psf->header [0] = 0 ;
-       psf->headindex = 0 ;
-       psf_fseek (psf, 0, SEEK_SET) ;
-
-       string = "Extended Instrument: " ;
-       psf_binheader_writef (psf, "b", string, strlen (string)) ;
-       psf_binheader_writef (psf, "b1", pxi->filename, sizeof (pxi->filename), 0x1A) ;
-
-       /* Write software version and two byte XI version. */
-       psf_binheader_writef (psf, "eb2", pxi->software, sizeof (pxi->software), (1 << 8) + 2) ;
-
-       /*
-       ** Jump note numbers (96), volume envelope (48), pan envelope (48),
-       ** volume points (1), pan points (1)
-       */
-       psf_binheader_writef (psf, "z", (size_t) (96 + 48 + 48 + 1 + 1)) ;
-
-       /* Jump volume loop (3 bytes), pan loop (3), envelope flags (3), vibrato (3)
-       ** fade out (2), 22 unknown bytes, and then write sample_count (2 bytes).
-       */
-       psf_binheader_writef (psf, "ez2z2", (size_t) (4 * 3), 0x1234, make_size_t (22), 1) ;
-
-       pxi->loop_begin = 0 ;
-       pxi->loop_end = 0 ;
-
-       psf_binheader_writef (psf, "et844", psf->sf.frames, pxi->loop_begin, pxi->loop_end) ;
-
-       /* volume, fine tune, flags, pan, note, namelen */
-       psf_binheader_writef (psf, "111111", 128, 0, pxi->sample_flags, 128, 0, strlen (pxi->sample_name)) ;
-
-       psf_binheader_writef (psf, "b", pxi->sample_name, sizeof (pxi->sample_name)) ;
-
-
-
-
-
-       /* Header construction complete so write it out. */
-       psf_fwrite (psf->header, psf->headindex, 1, psf) ;
-
-       if (psf->error)
-               return psf->error ;
-
-       psf->dataoffset = psf->headindex ;
-
-       if (current > 0)
-               psf_fseek (psf, current, SEEK_SET) ;
-
-       return psf->error ;
-} /* xi_write_header */
-
-static int
-xi_read_header (SF_PRIVATE *psf)
-{      char    buffer [64], name [32] ;
-       short   version, fade_out, sample_count ;
-       int             k, loop_begin, loop_end ;
-       int     sample_sizes [MAX_XI_SAMPLES] ;
-
-       psf_binheader_readf (psf, "pb", 0, buffer, 21) ;
-
-       memset (sample_sizes, 0, sizeof (sample_sizes)) ;
-
-       buffer [20] = 0 ;
-       if (strcmp (buffer, "Extended Instrument:") != 0)
-               return SFE_XI_BAD_HEADER ;
-
-       memset (buffer, 0, sizeof (buffer)) ;
-       psf_binheader_readf (psf, "b", buffer, 23) ;
-
-       if (buffer [22] != 0x1A)
-               return SFE_XI_BAD_HEADER ;
-
-       buffer [22] = 0 ;
-       for (k = 21 ; k >= 0 && buffer [k] == ' ' ; k --)
-               buffer [k] = 0 ;
-
-       psf_log_printf (psf, "Extended Instrument : %s\n", buffer) ;
-       psf_store_string (psf, SF_STR_TITLE, buffer) ;
-
-       psf_binheader_readf (psf, "be2", buffer, 20, &version) ;
-       buffer [19] = 0 ;
-       for (k = 18 ; k >= 0 && buffer [k] == ' ' ; k --)
-               buffer [k] = 0 ;
-
-       psf_log_printf (psf, "Software : %s\nVersion  : %d.%02d\n", buffer, version / 256, version % 256) ;
-       psf_store_string (psf, SF_STR_SOFTWARE, buffer) ;
-
-       /* Jump note numbers (96), volume envelope (48), pan envelope (48),
-       ** volume points (1), pan points (1)
-       */
-       psf_binheader_readf (psf, "j", 96 + 48 + 48 + 1 + 1) ;
-
-       psf_binheader_readf (psf, "b", buffer, 12) ;
-       psf_log_printf (psf, "Volume Loop\n  sustain : %u\n  begin   : %u\n  end     : %u\n",
-                                               buffer [0], buffer [1], buffer [2]) ;
-       psf_log_printf (psf, "Pan Loop\n  sustain : %u\n  begin   : %u\n  end     : %u\n",
-                                               buffer [3], buffer [4], buffer [5]) ;
-       psf_log_printf (psf, "Envelope Flags\n  volume  : 0x%X\n  pan     : 0x%X\n",
-                               buffer [6] & 0xFF, buffer [7] & 0xFF) ;
-
-       psf_log_printf (psf, "Vibrato\n  type    : %u\n  sweep   : %u\n  depth   : %u\n  rate    : %u\n",
-                               buffer [8], buffer [9], buffer [10], buffer [11]) ;
-
-       /*
-       ** Read fade_out then jump reserved (2 bytes) and ???? (20 bytes) and
-       ** sample_count.
-       */
-       psf_binheader_readf (psf, "e2j2", &fade_out, 2 + 20, &sample_count) ;
-       psf_log_printf (psf, "Fade out  : %d\n", fade_out) ;
-
-       /* XI file can contain up to 16 samples. */
-       if (sample_count > MAX_XI_SAMPLES)
-               return SFE_XI_EXCESS_SAMPLES ;
-
-       if (psf->instrument == NULL && (psf->instrument = psf_instrument_alloc ()) == NULL)
-               return SFE_MALLOC_FAILED ;
-
-       psf->instrument->basenote = 0 ;
-       /* Log all data for each sample. */
-       for (k = 0 ; k < sample_count ; k++)
-       {       psf_binheader_readf (psf, "e444", &(sample_sizes [k]), &loop_begin, &loop_end) ;
-
-               /* Read 5 know bytes, 1 unknown byte and 22 name bytes. */
-               psf_binheader_readf (psf, "bb", buffer, 6, name, 22) ;
-               name [21] = 0 ;
-
-               psf_log_printf (psf, "Sample #%d\n  name    : %s\n", k + 1, name) ;
-
-               psf_log_printf (psf, "  size    : %d\n", sample_sizes [k]) ;
-
-
-
-               psf_log_printf (psf, "  loop\n    begin : %d\n    end   : %d\n", loop_begin, loop_end) ;
-
-               psf_log_printf (psf, "  volume  : %u\n  f. tune : %d\n  flags   : 0x%02X ",
-                                       buffer [0] & 0xFF, buffer [1] & 0xFF, buffer [2] & 0xFF) ;
-
-               psf_log_printf (psf, " (") ;
-               if (buffer [2] & 1)
-                       psf_log_printf (psf, " Loop") ;
-               if (buffer [2] & 2)
-                       psf_log_printf (psf, " PingPong") ;
-               psf_log_printf (psf, (buffer [2] & 16) ? " 16bit" : " 8bit") ;
-               psf_log_printf (psf, " )\n") ;
-
-               psf_log_printf (psf, "  pan     : %u\n  note    : %d\n  namelen : %d\n",
-                                       buffer [3] & 0xFF, buffer [4], buffer [5]) ;
-
-               psf->instrument->basenote = buffer [4] ;
-               if (buffer [2] & 1)
-               {       psf->instrument->loop_count = 1 ;
-                       psf->instrument->loops [0].mode = (buffer [2] & 2) ? SF_LOOP_ALTERNATING : SF_LOOP_FORWARD ;
-                       psf->instrument->loops [0].start = loop_begin ;
-                       psf->instrument->loops [0].end = loop_end ;
-                       } ;
-
-               if (k != 0)
-                       continue ;
-
-               if (buffer [2] & 16)
-               {       psf->sf.format = SF_FORMAT_XI | SF_FORMAT_DPCM_16 ;
-                       psf->bytewidth = 2 ;
-                       }
-               else
-               {       psf->sf.format = SF_FORMAT_XI | SF_FORMAT_DPCM_8 ;
-                       psf->bytewidth = 1 ;
-                       } ;
-               } ;
-
-       while (sample_count > 1 && sample_sizes [sample_count - 1] == 0)
-               sample_count -- ;
-
-       /* Currently, we can only handle 1 sample per file. */
-
-       if (sample_count > 2)
-       {       psf_log_printf (psf, "*** Sample count is less than 16 but more than 1.\n") ;
-               psf_log_printf (psf, "  sample count : %d    sample_sizes [%d] : %d\n",
-                                               sample_count, sample_count - 1, sample_sizes [sample_count - 1]) ;
-               return SFE_XI_EXCESS_SAMPLES ;
-               } ;
-
-       psf->datalength = sample_sizes [0] ;
-
-       psf->dataoffset = psf_ftell (psf) ;
-       if (psf->dataoffset < 0)
-       {       psf_log_printf (psf, "*** Bad Data Offset : %D\n", psf->dataoffset) ;
-               return SFE_BAD_OFFSET ;
-               } ;
-       psf_log_printf (psf, "Data Offset : %D\n", psf->dataoffset) ;
-
-       if (psf->dataoffset + psf->datalength > psf->filelength)
-       {       psf_log_printf (psf, "*** File seems to be truncated. Should be at least %D bytes long.\n",
-                               psf->dataoffset + sample_sizes [0]) ;
-               psf->datalength = psf->filelength - psf->dataoffset ;
-               } ;
-
-       if (psf_fseek (psf, psf->dataoffset, SEEK_SET) != psf->dataoffset)
-               return SFE_BAD_SEEK ;
-
-       psf->endian = SF_ENDIAN_LITTLE ;
-       psf->sf.channels = 1 ; /* Always mono */
-       psf->sf.samplerate = 44100 ; /* Always */
-
-       psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
-       if (! psf->sf.frames && psf->blockwidth)
-               psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ;
-
-       psf->instrument->gain = 1 ;
-       psf->instrument->velocity_lo = psf->instrument->key_lo = 0 ;
-       psf->instrument->velocity_hi = psf->instrument->key_hi = 127 ;
-
-       return 0 ;
-} /* xi_read_header */
-
-/*==============================================================================
-*/
-
-static void dsc2s_array (XI_PRIVATE *pxi, signed char *src, int count, short *dest) ;
-static void dsc2i_array (XI_PRIVATE *pxi, signed char *src, int count, int *dest) ;
-static void dsc2f_array (XI_PRIVATE *pxi, signed char *src, int count, float *dest, float normfact) ;
-static void dsc2d_array (XI_PRIVATE *pxi, signed char *src, int count, double *dest, double normfact) ;
-
-static void dles2s_array (XI_PRIVATE *pxi, short *src, int count, short *dest) ;
-static void dles2i_array (XI_PRIVATE *pxi, short *src, int count, int *dest) ;
-static void dles2f_array (XI_PRIVATE *pxi, short *src, int count, float *dest, float normfact) ;
-static void dles2d_array (XI_PRIVATE *pxi, short *src, int count, double *dest, double normfact) ;
-
-static sf_count_t
-dpcm_read_dsc2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       XI_PRIVATE      *pxi ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       if ((pxi = psf->codec_data) == NULL)
-               return 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-               dsc2s_array (pxi, ubuf.scbuf, readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* dpcm_read_dsc2s */
-
-static sf_count_t
-dpcm_read_dsc2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       XI_PRIVATE      *pxi ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       if ((pxi = psf->codec_data) == NULL)
-               return 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-               dsc2i_array (pxi, ubuf.scbuf, readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* dpcm_read_dsc2i */
-
-static sf_count_t
-dpcm_read_dsc2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       XI_PRIVATE      *pxi ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       float           normfact ;
-
-       if ((pxi = psf->codec_data) == NULL)
-               return 0 ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-               dsc2f_array (pxi, ubuf.scbuf, readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* dpcm_read_dsc2f */
-
-static sf_count_t
-dpcm_read_dsc2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       XI_PRIVATE      *pxi ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       if ((pxi = psf->codec_data) == NULL)
-               return 0 ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-               dsc2d_array (pxi, ubuf.scbuf, readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* dpcm_read_dsc2d */
-
-/*------------------------------------------------------------------------------
-*/
-
-static sf_count_t
-dpcm_read_dles2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       XI_PRIVATE      *pxi ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       if ((pxi = psf->codec_data) == NULL)
-               return 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               dles2s_array (pxi, ubuf.sbuf, readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* dpcm_read_dles2s */
-
-static sf_count_t
-dpcm_read_dles2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       XI_PRIVATE      *pxi ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-
-       if ((pxi = psf->codec_data) == NULL)
-               return 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               dles2i_array (pxi, ubuf.sbuf, readcount, ptr + total) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* dpcm_read_dles2i */
-
-static sf_count_t
-dpcm_read_dles2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       XI_PRIVATE      *pxi ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       float           normfact ;
-
-       if ((pxi = psf->codec_data) == NULL)
-               return 0 ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               dles2f_array (pxi, ubuf.sbuf, readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* dpcm_read_dles2f */
-
-static sf_count_t
-dpcm_read_dles2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       XI_PRIVATE      *pxi ;
-       int                     bufferlen, readcount ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       if ((pxi = psf->codec_data) == NULL)
-               return 0 ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               readcount = psf_fread (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               dles2d_array (pxi, ubuf.sbuf, readcount, ptr + total, normfact) ;
-               total += readcount ;
-               if (readcount < bufferlen)
-                       break ;
-               len -= readcount ;
-               } ;
-
-       return total ;
-} /* dpcm_read_dles2d */
-
-/*==============================================================================
-*/
-
-static void s2dsc_array (XI_PRIVATE *pxi, const short *src, signed char *dest, int count) ;
-static void i2dsc_array (XI_PRIVATE *pxi, const int *src, signed char *dest, int count) ;
-static void f2dsc_array (XI_PRIVATE *pxi, const float *src, signed char *dest, int count, float normfact) ;
-static void d2dsc_array (XI_PRIVATE *pxi, const double *src, signed char *dest, int count, double normfact) ;
-
-static void    s2dles_array (XI_PRIVATE *pxi, const short *src, short *dest, int count) ;
-static void i2dles_array (XI_PRIVATE *pxi, const int *src, short *dest, int count) ;
-static void f2dles_array (XI_PRIVATE *pxi, const float *src, short *dest, int count, float normfact) ;
-static void d2dles_array (XI_PRIVATE *pxi, const double *src, short *dest, int count, double normfact) ;
-
-
-static sf_count_t
-dpcm_write_s2dsc (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       XI_PRIVATE      *pxi ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       if ((pxi = psf->codec_data) == NULL)
-               return 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               s2dsc_array (pxi, ptr + total, ubuf.scbuf, bufferlen) ;
-               writecount = psf_fwrite (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* dpcm_write_s2dsc */
-
-static sf_count_t
-dpcm_write_i2dsc (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       XI_PRIVATE      *pxi ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       if ((pxi = psf->codec_data) == NULL)
-               return 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               i2dsc_array (pxi, ptr + total, ubuf.scbuf, bufferlen) ;
-               writecount = psf_fwrite (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* dpcm_write_i2dsc */
-
-static sf_count_t
-dpcm_write_f2dsc (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       XI_PRIVATE      *pxi ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-       float           normfact ;
-
-       if ((pxi = psf->codec_data) == NULL)
-               return 0 ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7F) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               f2dsc_array (pxi, ptr + total, ubuf.scbuf, bufferlen, normfact) ;
-               writecount = psf_fwrite (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* dpcm_write_f2dsc */
-
-static sf_count_t
-dpcm_write_d2dsc (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       XI_PRIVATE      *pxi ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       if ((pxi = psf->codec_data) == NULL)
-               return 0 ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7F) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.ucbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               d2dsc_array (pxi, ptr + total, ubuf.scbuf, bufferlen, normfact) ;
-               writecount = psf_fwrite (ubuf.scbuf, sizeof (signed char), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* dpcm_write_d2dsc */
-
-
-static sf_count_t
-dpcm_write_s2dles (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       XI_PRIVATE      *pxi ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       if ((pxi = psf->codec_data) == NULL)
-               return 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               s2dles_array (pxi, ptr + total, ubuf.sbuf, bufferlen) ;
-               writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* dpcm_write_s2dles */
-
-static sf_count_t
-dpcm_write_i2dles (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       XI_PRIVATE      *pxi ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-
-       if ((pxi = psf->codec_data) == NULL)
-               return 0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               i2dles_array (pxi, ptr + total, ubuf.sbuf, bufferlen) ;
-               writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* dpcm_write_i2dles */
-
-static sf_count_t
-dpcm_write_f2dles (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       XI_PRIVATE      *pxi ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-       float           normfact ;
-
-       if ((pxi = psf->codec_data) == NULL)
-               return 0 ;
-
-       normfact = (psf->norm_float == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               f2dles_array (pxi, ptr + total, ubuf.sbuf, bufferlen, normfact) ;
-               writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* dpcm_write_f2dles */
-
-static sf_count_t
-dpcm_write_d2dles (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
-{      BUF_UNION       ubuf ;
-       XI_PRIVATE      *pxi ;
-       int                     bufferlen, writecount ;
-       sf_count_t      total = 0 ;
-       double          normfact ;
-
-       if ((pxi = psf->codec_data) == NULL)
-               return 0 ;
-
-       normfact = (psf->norm_double == SF_TRUE) ? (1.0 * 0x7FFF) : 1.0 ;
-
-       bufferlen = ARRAY_LEN (ubuf.sbuf) ;
-
-       while (len > 0)
-       {       if (len < bufferlen)
-                       bufferlen = (int) len ;
-               d2dles_array (pxi, ptr + total, ubuf.sbuf, bufferlen, normfact) ;
-               writecount = psf_fwrite (ubuf.sbuf, sizeof (short), bufferlen, psf) ;
-               total += writecount ;
-               if (writecount < bufferlen)
-                       break ;
-               len -= writecount ;
-               } ;
-
-       return total ;
-} /* dpcm_write_d2dles */
-
-
-/*==============================================================================
-*/
-
-static void
-dsc2s_array (XI_PRIVATE *pxi, signed char *src, int count, short *dest)
-{      signed char     last_val ;
-       int                     k ;
-
-       last_val = pxi->last_16 >> 8 ;
-
-       for (k = 0 ; k < count ; k++)
-       {       last_val += src [k] ;
-               dest [k] = last_val << 8 ;
-               } ;
-
-       pxi->last_16 = last_val << 8 ;
-} /* dsc2s_array */
-
-static void
-dsc2i_array (XI_PRIVATE *pxi, signed char *src, int count, int *dest)
-{      signed char     last_val ;
-       int                     k ;
-
-       last_val = pxi->last_16 >> 8 ;
-
-       for (k = 0 ; k < count ; k++)
-       {       last_val += src [k] ;
-               dest [k] = last_val << 24 ;
-               } ;
-
-       pxi->last_16 = last_val << 8 ;
-} /* dsc2i_array */
-
-static void
-dsc2f_array (XI_PRIVATE *pxi, signed char *src, int count, float *dest, float normfact)
-{      signed char     last_val ;
-       int                     k ;
-
-       last_val = pxi->last_16 >> 8 ;
-
-       for (k = 0 ; k < count ; k++)
-       {       last_val += src [k] ;
-               dest [k] = last_val * normfact ;
-               } ;
-
-       pxi->last_16 = last_val << 8 ;
-} /* dsc2f_array */
-
-static void
-dsc2d_array (XI_PRIVATE *pxi, signed char *src, int count, double *dest, double normfact)
-{      signed char     last_val ;
-       int                     k ;
-
-       last_val = pxi->last_16 >> 8 ;
-
-       for (k = 0 ; k < count ; k++)
-       {       last_val += src [k] ;
-               dest [k] = last_val * normfact ;
-               } ;
-
-       pxi->last_16 = last_val << 8 ;
-} /* dsc2d_array */
-
-/*------------------------------------------------------------------------------
-*/
-
-static void
-s2dsc_array (XI_PRIVATE *pxi, const short *src, signed char *dest, int count)
-{      signed char     last_val, current ;
-       int                     k ;
-
-       last_val = pxi->last_16 >> 8 ;
-
-       for (k = 0 ; k < count ; k++)
-       {       current = src [k] >> 8 ;
-               dest [k] = current - last_val ;
-               last_val = current ;
-               } ;
-
-       pxi->last_16 = last_val << 8 ;
-} /* s2dsc_array */
-
-static void
-i2dsc_array (XI_PRIVATE *pxi, const int *src, signed char *dest, int count)
-{      signed char     last_val, current ;
-       int                     k ;
-
-       last_val = pxi->last_16 >> 8 ;
-
-       for (k = 0 ; k < count ; k++)
-       {       current = src [k] >> 24 ;
-               dest [k] = current - last_val ;
-               last_val = current ;
-               } ;
-
-       pxi->last_16 = last_val << 8 ;
-} /* i2dsc_array */
-
-static void
-f2dsc_array (XI_PRIVATE *pxi, const float *src, signed char *dest, int count, float normfact)
-{      signed char     last_val, current ;
-       int                     k ;
-
-       last_val = pxi->last_16 >> 8 ;
-
-       for (k = 0 ; k < count ; k++)
-       {       current = lrintf (src [k] * normfact) ;
-               dest [k] = current - last_val ;
-               last_val = current ;
-               } ;
-
-       pxi->last_16 = last_val << 8 ;
-} /* f2dsc_array */
-
-static void
-d2dsc_array (XI_PRIVATE *pxi, const double *src, signed char *dest, int count, double normfact)
-{      signed char     last_val, current ;
-       int                     k ;
-
-       last_val = pxi->last_16 >> 8 ;
-
-       for (k = 0 ; k < count ; k++)
-       {       current = lrint (src [k] * normfact) ;
-               dest [k] = current - last_val ;
-               last_val = current ;
-               } ;
-
-       pxi->last_16 = last_val << 8 ;
-} /* d2dsc_array */
-
-/*==============================================================================
-*/
-
-static void
-dles2s_array (XI_PRIVATE *pxi, short *src, int count, short *dest)
-{      short   last_val ;
-       int             k ;
-
-       last_val = pxi->last_16 ;
-
-       for (k = 0 ; k < count ; k++)
-       {       last_val += LE2H_16 (src [k]) ;
-               dest [k] = last_val ;
-               } ;
-
-       pxi->last_16 = last_val ;
-} /* dles2s_array */
-
-static void
-dles2i_array (XI_PRIVATE *pxi, short *src, int count, int *dest)
-{      short   last_val ;
-       int             k ;
-
-       last_val = pxi->last_16 ;
-
-       for (k = 0 ; k < count ; k++)
-       {       last_val += LE2H_16 (src [k]) ;
-               dest [k] = last_val << 16 ;
-               } ;
-
-       pxi->last_16 = last_val ;
-} /* dles2i_array */
-
-static void
-dles2f_array (XI_PRIVATE *pxi, short *src, int count, float *dest, float normfact)
-{      short   last_val ;
-       int             k ;
-
-       last_val = pxi->last_16 ;
-
-       for (k = 0 ; k < count ; k++)
-       {       last_val += LE2H_16 (src [k]) ;
-               dest [k] = last_val * normfact ;
-               } ;
-
-       pxi->last_16 = last_val ;
-} /* dles2f_array */
-
-static void
-dles2d_array (XI_PRIVATE *pxi, short *src, int count, double *dest, double normfact)
-{      short   last_val ;
-       int             k ;
-
-       last_val = pxi->last_16 ;
-
-       for (k = 0 ; k < count ; k++)
-       {       last_val += LE2H_16 (src [k]) ;
-               dest [k] = last_val * normfact ;
-               } ;
-
-       pxi->last_16 = last_val ;
-} /* dles2d_array */
-
-/*------------------------------------------------------------------------------
-*/
-
-static void
-s2dles_array (XI_PRIVATE *pxi, const short *src, short *dest, int count)
-{      short   diff, last_val ;
-       int             k ;
-
-       last_val = pxi->last_16 ;
-
-       for (k = 0 ; k < count ; k++)
-       {       diff = src [k] - last_val ;
-               dest [k] = LE2H_16 (diff) ;
-               last_val = src [k] ;
-               } ;
-
-       pxi->last_16 = last_val ;
-} /* s2dles_array */
-
-static void
-i2dles_array (XI_PRIVATE *pxi, const int *src, short *dest, int count)
-{      short   diff, last_val ;
-       int             k ;
-
-       last_val = pxi->last_16 ;
-
-       for (k = 0 ; k < count ; k++)
-       {       diff = (src [k] >> 16) - last_val ;
-               dest [k] = LE2H_16 (diff) ;
-               last_val = src [k] >> 16 ;
-               } ;
-
-       pxi->last_16 = last_val ;
-} /* i2dles_array */
-
-static void
-f2dles_array (XI_PRIVATE *pxi, const float *src, short *dest, int count, float normfact)
-{      short   diff, last_val, current ;
-       int             k ;
-
-       last_val = pxi->last_16 ;
-
-       for (k = 0 ; k < count ; k++)
-       {       current = lrintf (src [k] * normfact) ;
-               diff = current - last_val ;
-               dest [k] = LE2H_16 (diff) ;
-               last_val = current ;
-               } ;
-
-       pxi->last_16 = last_val ;
-} /* f2dles_array */
-
-static void
-d2dles_array (XI_PRIVATE *pxi, const double *src, short *dest, int count, double normfact)
-{      short   diff, last_val, current ;
-       int             k ;
-
-       last_val = pxi->last_16 ;
-
-       for (k = 0 ; k < count ; k++)
-       {       current = lrint (src [k] * normfact) ;
-               diff = current - last_val ;
-               dest [k] = LE2H_16 (diff) ;
-               last_val = current ;
-               } ;
-
-       pxi->last_16 = last_val ;
-} /* d2dles_array */
-
diff --git a/libs/libsndfile/tests/Makefile.am b/libs/libsndfile/tests/Makefile.am
deleted file mode 100644 (file)
index 089046b..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-if ENABLE_TEST_COVERAGE
-CPP_TEST =
-else
-CPP_TEST = cpp_test
-endif
-
-AM_CPPFLAGS = -I$(top_srcdir)/src
-
-check_PROGRAMS = sfversion floating_point_test write_read_test \
-       lossy_comp_test error_test ulaw_test alaw_test dwvw_test \
-       peak_chunk_test command_test stdin_test stdout_test stdio_test \
-       pcm_test headerless_test pipe_test benchmark header_test misc_test \
-       raw_test string_test multi_file_test dither_test chunk_test \
-       scale_clip_test win32_test fix_this aiff_rw_test virtual_io_test \
-       locale_test largefile_test win32_ordinal_test ogg_test compression_size_test \
-       checksum_test external_libs_test rdwr_test format_check_test $(CPP_TEST) \
-       channel_test
-
-noinst_HEADERS = dft_cmp.h utils.h generate.h
-
-autogen_sources = write_read_test.tpl write_read_test.def      \
-                                       pcm_test.tpl pcm_test.def                               \
-                                       header_test.tpl header_test.def                 \
-                                       utils.tpl utils.def                                             \
-                                       scale_clip_test.tpl scale_clip_test.def \
-                                       pipe_test.tpl pipe_test.def                             \
-                                       rdwr_test.tpl rdwr_test.def                             \
-                                       floating_point_test.tpl floating_point_test.def \
-                                       benchmark.tpl benchmark.def
-
-EXTRA_DIST = $(autogen_sources)
-
-CLEANFILES = *~ *.exe
-
-#===============================================================================
-# If we're cross compiling from Linux to Windows and running the test suite
-# under Wine, we need a symbolic link to the generated libsndfile DLL.
-
-if LINUX_MINGW_CROSS_TEST
-
-$(check_PROGRAMS) : libsndfile-1.dll
-
-libsndfile-1.dll :
-       ln -s $(top_builddir)/src/.libs/$@ $@
-
-clean-local :
-       -rm -f libsndfile-1.dll
-
-endif
-
-#===============================================================================
-
-check: test_wrapper.sh
-       sh test_wrapper.sh
-
-# Need this target to force building of test programs.
-checkprograms : $(check_PROGRAMS)
-
-#===============================================================================
-
-sfversion_SOURCES = sfversion.c
-sfversion_LDADD = $(top_builddir)/src/libsndfile.la
-
-write_read_test_SOURCES = utils.c generate.c write_read_test.c
-write_read_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-lossy_comp_test_SOURCES = utils.c lossy_comp_test.c
-lossy_comp_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-fix_this_SOURCES = utils.c fix_this.c
-fix_this_LDADD = $(top_builddir)/src/libsndfile.la
-
-error_test_SOURCES = error_test.c utils.c
-error_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-ulaw_test_SOURCES = utils.c ulaw_test.c
-ulaw_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-alaw_test_SOURCES = utils.c alaw_test.c
-alaw_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-aiff_rw_test_SOURCES = utils.c aiff_rw_test.c
-aiff_rw_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-command_test_SOURCES = command_test.c utils.c
-command_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-locale_test_SOURCES = locale_test.c utils.c
-locale_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-largefile_test_SOURCES = largefile_test.c utils.c
-largefile_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-pcm_test_SOURCES = pcm_test.c utils.c
-pcm_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-headerless_test_SOURCES = utils.c headerless_test.c
-headerless_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-stdin_test_SOURCES = stdin_test.c utils.c
-stdin_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-stdout_test_SOURCES = stdout_test.c
-stdout_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-stdio_test_SOURCES = stdio_test.c utils.c
-stdio_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-pipe_test_SOURCES = pipe_test.c utils.c
-pipe_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-benchmark_SOURCES = benchmark.c
-benchmark_LDADD = $(top_builddir)/src/libsndfile.la
-
-header_test_SOURCES = header_test.c utils.c
-header_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-misc_test_SOURCES = misc_test.c utils.c
-misc_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-raw_test_SOURCES = raw_test.c utils.c
-raw_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-string_test_SOURCES = string_test.c utils.c
-string_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-dither_test_SOURCES = dither_test.c utils.c
-dither_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-chunk_test_SOURCES = chunk_test.c utils.c
-chunk_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-multi_file_test_SOURCES = multi_file_test.c utils.c
-multi_file_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-virtual_io_test_SOURCES = virtual_io_test.c utils.c
-virtual_io_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-ogg_test_SOURCES = ogg_test.c utils.c
-ogg_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-compression_size_test_SOURCES = compression_size_test.c utils.c
-compression_size_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-rdwr_test_SOURCES = rdwr_test.c utils.c
-rdwr_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-win32_test_SOURCES = win32_test.c
-# Link lib here so that generating the testsuite tarball works correctly.
-win32_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-win32_ordinal_test_SOURCES = win32_ordinal_test.c utils.c
-win32_ordinal_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-external_libs_test_SOURCES = external_libs_test.c utils.c
-external_libs_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-format_check_test_SOURCES = format_check_test.c utils.c
-format_check_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-channel_test_SOURCES = channel_test.c utils.c
-channel_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-cpp_test_SOURCES = cpp_test.cc utils.c
-cpp_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-checksum_test_SOURCES = checksum_test.c utils.c
-checksum_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-# Lite remove start
-dwvw_test_SOURCES = utils.c dwvw_test.c
-dwvw_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-floating_point_test_SOURCES = utils.c dft_cmp.c floating_point_test.c
-floating_point_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-peak_chunk_test_SOURCES = peak_chunk_test.c utils.c
-peak_chunk_test_LDADD = $(top_builddir)/src/libsndfile.la
-
-scale_clip_test_SOURCES = scale_clip_test.c utils.c
-scale_clip_test_LDADD = $(top_builddir)/src/libsndfile.la
-# Lite remove end
-
-#===============================================================================
-
-write_read_test.c: write_read_test.def write_read_test.tpl
-       cd $(srcdir) && autogen --writable write_read_test.def && cd $(abs_builddir)
-
-pcm_test.c: pcm_test.def pcm_test.tpl
-       cd $(srcdir) && autogen --writable pcm_test.def && cd $(abs_builddir)
-
-header_test.c: header_test.def header_test.tpl
-       cd $(srcdir) && autogen --writable header_test.def && cd $(abs_builddir)
-
-utils.c utils.h : utils.def utils.tpl
-       cd $(srcdir) && autogen --writable utils.def && cd $(abs_builddir)
-
-scale_clip_test.c: scale_clip_test.def scale_clip_test.tpl
-       cd $(srcdir) && autogen --writable scale_clip_test.def && cd $(abs_builddir)
-
-pipe_test.c: pipe_test.def pipe_test.tpl
-       cd $(srcdir) && autogen --writable pipe_test.def && cd $(abs_builddir)
-
-rdwr_test.c: rdwr_test.def rdwr_test.tpl
-       cd $(srcdir) && autogen --writable rdwr_test.def && cd $(abs_builddir)
-
-floating_point_test.c: floating_point_test.def floating_point_test.tpl
-       cd $(srcdir) && autogen --writable floating_point_test.def && cd $(abs_builddir)
-
-benchmark.c: benchmark.def benchmark.tpl
-       cd $(srcdir) && autogen --writable benchmark.def && cd $(abs_builddir)
-
-genfiles : write_read_test.c pcm_test.c header_test.c utils.c \
-               scale_clip_test.c pipe_test.c floating_point_test.c rdwr_test.c \
-               benchmark.c
-
diff --git a/libs/libsndfile/tests/aiff_rw_test.c b/libs/libsndfile/tests/aiff_rw_test.c
deleted file mode 100644 (file)
index 43d34db..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
-** Copyright (C) 2003-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <math.h>
-#include <inttypes.h>
-
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-
-static unsigned char aifc_data [] =
-{      'F' , 'O' , 'R' , 'M' ,
-       0x00, 0x00, 0x01, 0xE8, /* FORM length */
-
-       'A' , 'I' , 'F' , 'C' ,
-       0x43, 0x4F, 0x4D, 0x4D, /* COMM */
-       0x00, 0x00, 0x00, 0x26, /* COMM length */
-       0x00, 0x01, 0x00, 0x00, 0x00, 0xAE, 0x00, 0x10, 0x40, 0x0D, 0xAC, 0x44,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x4F, 0x4E, 0x45, 0x0D, 'N' ,
-       'o' , 't' , ' ' , 'c' , 'o' , 'm' , 'p' , 'r' , 'e' , 's' , 's' , 'e' ,
-       'd' , 0x00,
-
-       'F' , 'V' , 'E' , 'R' , 0x00, 0x00, 0x00, 0x04, 0xA2, 0x80, 0x51, 0x40,
-
-       /* A 'MARK' chunk. */
-       'M' , 'A' , 'R' , 'K' , 0x00, 0x00, 0x00, 0x36, 0x00, 0x05,
-       0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 'A' ,
-       0x00, 0x02, 0x00, 0x00, 0x11, 0x3A, 0x02, 'B' , 'C' , 0x00,
-       0x00, 0x03, 0x00, 0x00, 0x22, 0x74, 0x03, 'D' , 'E' , 'F',
-       0x00, 0x04, 0x00, 0x00, 0x33, 0xAE, 0x04, 'G' , 'H' , 'I', 'J' , 0x00,
-       0x00, 0x05, 0x00, 0x00, 0x44, 0xE8, 0x05, 'K' , 'L' , 'M', 'N' , 'O' ,
-
-       'S' , 'S' , 'N' , 'D' ,
-       0x00, 0x00, 0x01, 0x64, /* SSND length */
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0xFF, 0xE0, 0xFF, 0xDB, 0xFF, 0xD0, 0xFF, 0xD5, 0xFF, 0xD6, 0xFF, 0xD0,
-       0xFF, 0xBF, 0xFF, 0xBE, 0xFF, 0xB9, 0xFF, 0xC8, 0xFF, 0xBF, 0xFF, 0xD5,
-       0xFF, 0xC3, 0xFF, 0xBF, 0xFF, 0xB3, 0xFF, 0xBE, 0xFF, 0xB4, 0xFF, 0xAD,
-       0xFF, 0xAC, 0xFF, 0xAF, 0xFF, 0xB9, 0xFF, 0xB3, 0xFF, 0xA4, 0xFF, 0xA5,
-       0xFF, 0x93, 0xFF, 0x95, 0xFF, 0x97, 0xFF, 0x98, 0xFF, 0x99, 0xFF, 0x9E,
-       0xFF, 0x90, 0xFF, 0x80, 0xFF, 0x81, 0xFF, 0x7C, 0xFF, 0x80, 0xFF, 0x7C,
-       0xFF, 0x72, 0xFF, 0x72, 0xFF, 0x6C, 0xFF, 0x75, 0xFF, 0x6E, 0xFF, 0x6F,
-       0xFF, 0x66, 0xFF, 0x62, 0xFF, 0x5C, 0xFF, 0x64, 0xFF, 0x50, 0xFF, 0x56,
-       0xFF, 0x56, 0xFF, 0x4A, 0xFF, 0x4A, 0xFF, 0x49, 0xFF, 0x44, 0xFF, 0x49,
-       0xFF, 0x3B, 0xFF, 0x3F, 0xFF, 0x48, 0xFF, 0x46, 0xFF, 0x42, 0xFF, 0x49,
-       0xFF, 0x43, 0xFF, 0x36, 0xFF, 0x40, 0xFF, 0x35, 0xFF, 0x3F, 0xFF, 0x36,
-       0xFF, 0x37, 0xFF, 0x2E, 0xFF, 0x23, 0xFF, 0x23, 0xFF, 0x21, 0xFF, 0x1F,
-       0xFF, 0x25, 0xFF, 0x2C, 0xFF, 0x1E, 0xFF, 0x22, 0xFF, 0x24, 0xFF, 0x2B,
-       0xFF, 0x35, 0xFF, 0x27, 0xFF, 0x2E, 0xFF, 0x21, 0xFF, 0x18, 0xFF, 0x21,
-       0xFF, 0x20, 0xFF, 0x0F, 0xFF, 0x21, 0xFF, 0x1A, 0xFF, 0x10, 0xFF, 0x09,
-       0xFF, 0x1E, 0xFF, 0x19, 0xFF, 0x21, 0xFF, 0x13, 0xFF, 0x1B, 0xFF, 0x18,
-       0xFF, 0x21, 0xFF, 0x0F, 0xFF, 0x1A, 0xFF, 0x16, 0xFF, 0x21, 0xFF, 0x1B,
-       0xFF, 0x1B, 0xFF, 0x23, 0xFF, 0x1A, 0xFF, 0x21, 0xFF, 0x26, 0xFF, 0x23,
-       0xFF, 0x26, 0xFF, 0x27, 0xFF, 0x30, 0xFF, 0x27, 0xFF, 0x2F, 0xFF, 0x28,
-       0xFF, 0x2C, 0xFF, 0x27, 0xFF, 0x33, 0xFF, 0x29, 0xFF, 0x33, 0xFF, 0x3A,
-       0xFF, 0x42, 0xFF, 0x3B, 0xFF, 0x4D, 0xFF, 0x4B, 0xFF, 0x4D, 0xFF, 0x4A,
-       0xFF, 0x67, 0xFF, 0x77, 0xFF, 0x73, 0xFF, 0x7B, 0xFF, 0xDE, 0xFF, 0xAD,
-       0x00, 0x4A, 0x00, 0x63, 0xEC, 0x8C, 0x03, 0xBB, 0x0E, 0xE4, 0x08, 0xF2,
-       0x00, 0x70, 0xE3, 0xD1, 0xE5, 0xE4, 0x01, 0x6E, 0x0A, 0x67, 0x1C, 0x74,
-       0xF8, 0x8E, 0x10, 0x7B, 0xEA, 0x3C, 0x09, 0x87, 0x1B, 0x24, 0xEF, 0x05,
-       0x17, 0x76, 0x0D, 0x5B, 0x02, 0x43, 0xF5, 0xEF, 0x0C, 0x1D, 0xF7, 0x61,
-       0x05, 0x95, 0x0B, 0xC2, 0xF1, 0x69, 0x1A, 0xA1, 0xEC, 0x75, 0xF4, 0x11,
-       0x13, 0x4F, 0x13, 0x71, 0xFA, 0x33, 0xEC, 0x32, 0xC8, 0xCF, 0x05, 0xB0,
-       0x0B, 0x61, 0x33, 0x19, 0xCE, 0x37, 0xEF, 0xD4, 0x21, 0x9D, 0xFA, 0xAE,
-} ;
-
-static void rw_test (const char *filename) ;
-
-int
-main (void)
-{      const char *filename = "rw.aifc" ;
-
-       print_test_name ("aiff_rw_test", filename) ;
-
-       dump_data_to_file (filename, aifc_data, sizeof (aifc_data)) ;
-
-       rw_test (filename) ;
-
-       unlink (filename) ;
-
-       puts ("ok") ;
-       return 0 ;
-} /* main */
-
-/*==============================================================================
-*/
-
-static void
-rw_test (const char *filename)
-{      SNDFILE *file ;
-       SF_INFO sfinfo_rd, sfinfo_rw ;
-
-       memset (&sfinfo_rd, 0, sizeof (sfinfo_rd)) ;
-       memset (&sfinfo_rw, 0, sizeof (sfinfo_rw)) ;
-
-       /* Open the file in read only mode and fill in the SF_INFO struct. */
-       if ((file = sf_open (filename, SFM_READ, &sfinfo_rd)) == NULL)
-       {       printf ("\n\nLine %d : sf_open SFM_READ failed : %s\n\n", __LINE__, sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-       check_log_buffer_or_die (file, __LINE__) ;
-       sf_close (file) ;
-
-       /* Now open read/write and close the file. */
-       if ((file = sf_open (filename, SFM_RDWR, &sfinfo_rw)) == NULL)
-       {       printf ("\n\nLine %d : sf_open SFM_RDWR failed : %s\n\n", __LINE__, sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-       check_log_buffer_or_die (file, __LINE__) ;
-       sf_close (file) ;
-
-       /* Open again as read only again and fill in a new SF_INFO struct.  */
-       memset (&sfinfo_rw, 0, sizeof (sfinfo_rw)) ;
-       if ((file = sf_open (filename, SFM_READ, &sfinfo_rw)) == NULL)
-       {       printf ("\n\nLine %d : sf_open SFM_RDWR failed : %s\n\n", __LINE__, sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-       check_log_buffer_or_die (file, __LINE__) ;
-       sf_close (file) ;
-
-       /* Now compare the two. */
-       if (sfinfo_rd.format != sfinfo_rw.format)
-       {       printf ("\n\nLine %d : format mismatch (0x%08X != 0x%08X).\n\n", __LINE__,
-                       sfinfo_rd.format, sfinfo_rw.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo_rd.channels != sfinfo_rw.channels)
-       {       printf ("\n\nLine %d : channel count mismatch (%d != %d).\n\n", __LINE__,
-                       sfinfo_rd.channels, sfinfo_rw.channels) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo_rd.frames != sfinfo_rw.frames)
-       {       printf ("\n\nLine %d : frame count mismatch (rd %" PRId64 " != rw %" PRId64 ").\n\n", __LINE__,
-                       sfinfo_rd.frames, sfinfo_rw.frames) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* rw_test */
-
diff --git a/libs/libsndfile/tests/alaw_test.c b/libs/libsndfile/tests/alaw_test.c
deleted file mode 100644 (file)
index 6d71ffe..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define        BUFFER_SIZE             (65536)
-
-static unsigned char   alaw_encode (int sample) ;
-static int                             alaw_decode (unsigned int alawbyte) ;
-
-static short                   short_buffer [BUFFER_SIZE] ;
-static unsigned char   alaw_buffer [BUFFER_SIZE] ;
-
-int
-main (void)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       const char      *filename ;
-       int                     k ;
-
-       print_test_name ("alaw_test", "encoder") ;
-
-       filename = "test.raw" ;
-
-       sf_info_setup (&sfinfo, SF_FORMAT_RAW | SF_FORMAT_ALAW, 44100, 1) ;
-
-       if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-       {       printf ("sf_open_write failed with error : ") ;
-               fflush (stdout) ;
-               puts (sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       /* Generate a file containing all possible 16 bit sample values
-       ** and write it to disk as alaw encoded.frames.
-       */
-
-       for (k = 0 ; k < 0x10000 ; k++)
-               short_buffer [k] = k & 0xFFFF ;
-
-       sf_write_short (file, short_buffer, BUFFER_SIZE) ;
-       sf_close (file) ;
-
-       /* Now open that file and compare the alaw encoded sample values
-       ** with what they should be.
-       */
-
-       if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-       {       printf ("sf_open_write failed with error : ") ;
-               puts (sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       if (sf_read_raw (file, alaw_buffer, BUFFER_SIZE) != BUFFER_SIZE)
-       {       printf ("sf_read_raw : ") ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       for (k = 0 ; k < 0x10000 ; k++)
-               if (alaw_encode (short_buffer [k]) != alaw_buffer [k])
-               {       printf ("Encoder error : sample #%d (0x%02X should be 0x%02X)\n", k, alaw_buffer [k], alaw_encode (short_buffer [k])) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       puts ("ok") ;
-
-       print_test_name ("alaw_test", "decoder") ;
-       /* Now generate a file containing all possible 8 bit encoded
-       ** sample values and write it to disk as alaw encoded.frames.
-       */
-
-       if (! (file = sf_open (filename, SFM_WRITE, &sfinfo)))
-       {       printf ("sf_open_write failed with error : ") ;
-               puts (sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       for (k = 0 ; k < 256 ; k++)
-               alaw_buffer [k] = k & 0xFF ;
-
-       sf_write_raw (file, alaw_buffer, 256) ;
-       sf_close (file) ;
-
-       /* Now open that file and compare the alaw decoded sample values
-       ** with what they should be.
-       */
-
-       if (! (file = sf_open (filename, SFM_READ, &sfinfo)))
-       {       printf ("sf_open_write failed with error : ") ;
-               puts (sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       if (sf_read_short (file, short_buffer, 256) != 256)
-       {       printf ("sf_read_short : ") ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-
-       for (k = 0 ; k < 256 ; k++)
-               if (short_buffer [k] != alaw_decode (alaw_buffer [k]))
-               {       printf ("Decoder error : sample #%d (0x%02X should be 0x%02X)\n", k, short_buffer [k], alaw_decode (alaw_buffer [k])) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       puts ("ok") ;
-
-       unlink (filename) ;
-
-       return 0 ;
-} /* main */
-
-
-/*=================================================================================
-**     The following routines came from the sox-12.15 (Sound eXcahcnge) distribution.
-**
-**     This code is not compiled into libsndfile. It is only used to test the
-**     libsndfile lookup tables for correctness.
-**
-**     I have included the original authors comments.
-*/
-
-/*
-** A-law routines by Graeme W. Gill.
-** Date: 93/5/7
-**
-** References:
-** 1) CCITT Recommendation G.711
-**
-*/
-
-#define ACLIP 31744
-
-static
-unsigned char alaw_encode (int sample)
-{      static int exp_lut [128] =
-       {       1, 1, 2, 2, 3, 3, 3, 3,
-               4, 4, 4, 4, 4, 4, 4, 4,
-               5, 5, 5, 5, 5, 5, 5, 5,
-               5, 5, 5, 5, 5, 5, 5, 5,
-               6, 6, 6, 6, 6, 6, 6, 6,
-               6, 6, 6, 6, 6, 6, 6, 6,
-               6, 6, 6, 6, 6, 6, 6, 6,
-               6, 6, 6, 6, 6, 6, 6, 6,
-               7, 7, 7, 7, 7, 7, 7, 7,
-               7, 7, 7, 7, 7, 7, 7, 7,
-               7, 7, 7, 7, 7, 7, 7, 7,
-               7, 7, 7, 7, 7, 7, 7, 7,
-               7, 7, 7, 7, 7, 7, 7, 7,
-               7, 7, 7, 7, 7, 7, 7, 7,
-               7, 7, 7, 7, 7, 7, 7, 7,
-               7, 7, 7, 7, 7, 7, 7, 7
-               } ;
-
-       int sign, exponent, mantissa ;
-       unsigned char Alawbyte ;
-
-       /* Get the sample into sign-magnitude. */
-       sign = ((~sample) >> 8) & 0x80 ;                        /* set aside the sign */
-       if (sign == 0)
-               sample = -sample ;              /* get magnitude */
-       if (sample > ACLIP)
-               sample = ACLIP ;                                                /* clip the magnitude */
-
-       /* Convert from 16 bit linear to ulaw. */
-       if (sample >= 256)
-       {       exponent = exp_lut [(sample >> 8) & 0x7F] ;
-               mantissa = (sample >> (exponent + 3)) & 0x0F ;
-               Alawbyte = ((exponent << 4) | mantissa) ;
-               }
-       else
-               Alawbyte = (sample >> 4) ;
-
-       Alawbyte ^= (sign ^ 0x55) ;
-
-       return Alawbyte ;
-} /* alaw_encode */
-
-static
-int alaw_decode (unsigned int Alawbyte)
-{      static int exp_lut [8] = { 0, 264, 528, 1056, 2112, 4224, 8448, 16896 } ;
-       int sign, exponent, mantissa, sample ;
-
-       Alawbyte ^= 0x55 ;
-       sign = (Alawbyte & 0x80) ;
-       Alawbyte &= 0x7f ;                      /* get magnitude */
-       if (Alawbyte >= 16)
-       {       exponent = (Alawbyte >> 4) & 0x07 ;
-               mantissa = Alawbyte & 0x0F ;
-               sample = exp_lut [exponent] + (mantissa << (exponent + 3)) ;
-               }
-       else
-               sample = (Alawbyte << 4) + 8 ;
-       if (sign == 0)
-               sample = -sample ;
-
-       return sample ;
-} /* alaw_decode */
-
diff --git a/libs/libsndfile/tests/benchmark-0.0.28 b/libs/libsndfile/tests/benchmark-0.0.28
deleted file mode 100644 (file)
index 2d2b06f..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-erikd@coltrane > tests/benchmark 
-Benchmarking libsndfile-0.0.28
-------------------------------
-Each test takes a little over 5 seconds.
-
-    Raw write PCM_16  :   30660117 samples per sec
-    Raw read  PCM_16  :   62788982 samples per sec
-
-Native endian I/O :
-    Write short   to  PCM_16 :  83.37% of raw write
-    Read  short  from PCM_16 :  83.17% of raw read
-    Write int     to  PCM_24 :  30.78% of raw write
-    Read  int    from PCM_24 :  32.96% of raw read
-    Write int     to  PCM_32 :  42.05% of raw write
-    Read  int    from PCM_32 :  41.11% of raw read
-    Write float   to  PCM_16 :  17.75% of raw write
-    Read  float  from PCM_16 :  43.27% of raw read
-    Write float   to  PCM_24 :  15.30% of raw write
-    Read  float  from PCM_24 :  28.09% of raw read
-    Write float   to  PCM_32 :  14.55% of raw write
-    Read  float  from PCM_32 :  34.65% of raw read
-    Write float   to  FLOAT  :  28.98% of raw write
-    Read  float  from FLOAT  :  56.71% of raw read
-
-Endian swapped I/O :
-    Write short   to  PCM_16 :  43.39% of raw write
-    Read  short  from PCM_16 :  49.12% of raw read
-    Write int     to  PCM_24 :  29.65% of raw write
-    Read  int    from PCM_24 :  33.66% of raw read
-    Write int     to  PCM_32 :  19.62% of raw write
-    Read  int    from PCM_32 :  21.97% of raw read
-    Write float   to  PCM_16 :  17.63% of raw write
-    Read  float  from PCM_16 :  31.43% of raw read
-    Write float   to  PCM_24 :  14.91% of raw write
-    Read  float  from PCM_24 :  27.99% of raw read
-    Write float   to  PCM_32 :  13.69% of raw write
-    Read  float  from PCM_32 :  22.23% of raw read
-    Write float   to  FLOAT  :  19.25% of raw write
-    Read  float  from FLOAT  :  25.66% of raw read
-
diff --git a/libs/libsndfile/tests/benchmark-1.0.0 b/libs/libsndfile/tests/benchmark-1.0.0
deleted file mode 100644 (file)
index 2922836..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-Benchmarking libsndfile-1.0.0
------------------------------
-Each test takes a little over 5 seconds.
-
-    Raw write PCM_16  :   31084269 samples per sec
-    Raw read  PCM_16  :   63597065 samples per sec
-
-Native endian I/O :
-    Write short   to  PCM_16 :  83.19% of raw write
-    Read  short  from PCM_16 :  82.93% of raw read
-    Write int     to  PCM_24 :  31.12% of raw write
-    Read  int    from PCM_24 :  37.90% of raw read
-    Write float   to  PCM_16 :  37.00% of raw write
-    Read  float  from PCM_16 :  45.53% of raw read
-    Write float   to  PCM_24 :  29.08% of raw write
-    Read  float  from PCM_24 :  28.48% of raw read
-    Write float   to  PCM_32 :  22.08% of raw write
-    Read  float  from PCM_32 :  31.21% of raw read
-    Write float   to  FLOAT  :  28.70% of raw write
-    Read  float  from FLOAT  :  56.32% of raw read
-
-Endian swapped I/O :
-    Write short   to  PCM_16 :  22.08% of raw write
-    Read  short  from PCM_16 :  23.20% of raw read
-    Write int     to  PCM_24 :  30.96% of raw write
-    Read  int    from PCM_24 :  37.76% of raw read
-    Write float   to  PCM_16 :  35.82% of raw write
-    Read  float  from PCM_16 :  22.61% of raw read
-    Write float   to  PCM_24 :  27.70% of raw write
-    Read  float  from PCM_24 :  28.37% of raw read
-    Write float   to  PCM_32 :  20.77% of raw write
-    Read  float  from PCM_32 :  23.46% of raw read
-    Write float   to  FLOAT  :  15.03% of raw write
-    Read  float  from FLOAT  :  15.43% of raw read
-
diff --git a/libs/libsndfile/tests/benchmark-1.0.0rc2 b/libs/libsndfile/tests/benchmark-1.0.0rc2
deleted file mode 100644 (file)
index 7702246..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-Benchmarking libsndfile-1.0.0rc2
---------------------------------
-Each test takes a little over 5 seconds.
-
-    Raw write PCM_16  :   31638069 samples per sec
-    Raw read  PCM_16  :   62788982 samples per sec
-
-Native endian I/O :
-    Write short   to  PCM_16 :  82.37% of raw write
-    Read  short  from PCM_16 :  82.17% of raw read
-    Write int     to  PCM_24 :  30.80% of raw write
-    Read  int    from PCM_24 :  37.95% of raw read
-    Write float   to  PCM_16 :  36.22% of raw write
-    Read  float  from PCM_16 :  23.32% of raw read
-    Write float   to  PCM_24 :  28.41% of raw write
-    Read  float  from PCM_24 :  28.41% of raw read
-    Write float   to  FLOAT  :  28.41% of raw write
-    Read  float  from FLOAT  :  57.50% of raw read
-
-Endian swapped I/O :
-    Write short   to  PCM_16 :  21.73% of raw write
-    Read  short  from PCM_16 :  23.37% of raw read
-    Write int     to  PCM_24 :  31.02% of raw write
-    Read  int    from PCM_24 :  38.24% of raw read
-    Write float   to  PCM_16 :  35.51% of raw write
-    Read  float  from PCM_16 :  19.16% of raw read
-    Write float   to  PCM_24 :  27.37% of raw write
-    Read  float  from PCM_24 :  28.74% of raw read
-    Write float   to  FLOAT  :  15.11% of raw write
-    Read  float  from FLOAT  :  15.60% of raw read
-
diff --git a/libs/libsndfile/tests/benchmark-1.0.18pre16-hendrix b/libs/libsndfile/tests/benchmark-1.0.18pre16-hendrix
deleted file mode 100644 (file)
index 951bc56..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-Benchmarking libsndfile-1.0.18pre15
------------------------------------
-Each test takes a little over 5 seconds.
-
-    Raw write PCM_16  :  103189885 samples per sec
-    Raw read  PCM_16  :  660854036 samples per sec
-
-Native endian I/O :
-    Write short   to  PCM_16 :  95.08% of raw write
-    Read  short  from PCM_16 :  96.39% of raw read
-    Write int     to  PCM_24 :  54.55% of raw write
-    Read  int    from PCM_24 :  28.50% of raw read
-    Write int     to  PCM_32 :  46.97% of raw write
-    Read  int    from PCM_32 :  39.98% of raw read
-    Write float   to  PCM_16 :  60.85% of raw write
-    Read  float  from PCM_16 :  27.79% of raw read
-    Write float   to  PCM_24 :  46.23% of raw write
-    Read  float  from PCM_24 :  22.62% of raw read
-    Write float   to  PCM_32 :  35.38% of raw write
-    Read  float  from PCM_32 :  24.18% of raw read
-    Write float   to  FLOAT  :  47.73% of raw write
-    Read  float  from FLOAT  :  40.62% of raw read
-
-Endian swapped I/O :
-    Write short   to  PCM_16 :  79.98% of raw write
-    Read  short  from PCM_16 :  49.27% of raw read
-    Write int     to  PCM_24 :  53.80% of raw write
-    Read  int    from PCM_24 :  28.50% of raw read
-    Write int     to  PCM_32 :  41.68% of raw write
-    Read  int    from PCM_32 :  25.89% of raw read
-    Write float   to  PCM_16 :  61.03% of raw write
-    Read  float  from PCM_16 :  27.74% of raw read
-    Write float   to  PCM_24 :  45.10% of raw write
-    Read  float  from PCM_24 :  22.43% of raw read
-    Write float   to  PCM_32 :  35.24% of raw write
-    Read  float  from PCM_32 :  22.37% of raw read
-    Write float   to  FLOAT  :  42.01% of raw write
-    Read  float  from FLOAT  :  28.98% of raw read
diff --git a/libs/libsndfile/tests/benchmark-1.0.18pre16-mingus b/libs/libsndfile/tests/benchmark-1.0.18pre16-mingus
deleted file mode 100644 (file)
index fa0584e..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-Benchmarking libsndfile-1.0.18pre15
------------------------------------
-Each test takes a little over 5 seconds.
-
-    Raw write PCM_16  :  178237074 samples per sec
-    Raw read  PCM_16  :  368885269 samples per sec
-
-Native endian I/O :
-    Write short   to  PCM_16 :  98.84% of raw write
-    Read  short  from PCM_16 : 147.10% of raw read
-    Write int     to  PCM_24 :  33.74% of raw write
-    Read  int    from PCM_24 :  30.82% of raw read
-    Write int     to  PCM_32 :  48.34% of raw write
-    Read  int    from PCM_32 :  62.43% of raw read
-    Write float   to  PCM_16 :  41.86% of raw write
-    Read  float  from PCM_16 :  36.73% of raw read
-    Write float   to  PCM_24 :  28.38% of raw write
-    Read  float  from PCM_24 :  19.50% of raw read
-    Write float   to  PCM_32 :  23.68% of raw write
-    Read  float  from PCM_32 :  28.76% of raw read
-    Write float   to  FLOAT  :  47.21% of raw write
-    Read  float  from FLOAT  :  60.85% of raw read
-
-Endian swapped I/O :
-    Write short   to  PCM_16 :  54.94% of raw write
-    Read  short  from PCM_16 :  59.03% of raw read
-    Write int     to  PCM_24 :  33.40% of raw write
-    Read  int    from PCM_24 :  31.98% of raw read
-    Write int     to  PCM_32 :  30.89% of raw write
-    Read  int    from PCM_32 :  33.68% of raw read
-    Write float   to  PCM_16 :  41.61% of raw write
-    Read  float  from PCM_16 :  26.76% of raw read
-    Write float   to  PCM_24 :  25.75% of raw write
-    Read  float  from PCM_24 :  19.84% of raw read
-    Write float   to  PCM_32 :  21.29% of raw write
-    Read  float  from PCM_32 :  21.78% of raw read
-    Write float   to  FLOAT  :  30.82% of raw write
-    Read  float  from FLOAT  :  35.04% of raw read
diff --git a/libs/libsndfile/tests/benchmark-1.0.6pre10-coltrane b/libs/libsndfile/tests/benchmark-1.0.6pre10-coltrane
deleted file mode 100644 (file)
index 12f71a8..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-Benchmarking libsndfile-1.0.6pre10
-----------------------------------
-Each test takes a little over 5 seconds.
-
-    Raw write PCM_16  :   28845961 samples per sec
-    Raw read  PCM_16  :   63471874 samples per sec
-
-Native endian I/O :
-    Write short   to  PCM_16 :  86.21% of raw write
-    Read  short  from PCM_16 :  82.60% of raw read
-    Write int     to  PCM_24 :  34.89% of raw write
-    Read  int    from PCM_24 :  37.26% of raw read
-    Write int     to  PCM_32 :  43.36% of raw write
-    Read  int    from PCM_32 :  41.30% of raw read
-    Write float   to  PCM_16 :  43.02% of raw write
-    Read  float  from PCM_16 :  43.99% of raw read
-    Write float   to  PCM_24 :  32.72% of raw write
-    Read  float  from PCM_24 :  28.21% of raw read
-    Write float   to  PCM_32 :  25.92% of raw write
-    Read  float  from PCM_32 :  30.98% of raw read
-    Write float   to  FLOAT  :  46.65% of raw write
-    Read  float  from FLOAT  :  56.66% of raw read
-
-Endian swapped I/O :
-    Write short   to  PCM_16 :  54.53% of raw write
-    Read  short  from PCM_16 :  56.32% of raw read
-    Write int     to  PCM_24 :  35.28% of raw write
-    Read  int    from PCM_24 :  37.33% of raw read
-    Write int     to  PCM_32 :  26.21% of raw write
-    Read  int    from PCM_32 :  23.51% of raw read
-    Write float   to  PCM_16 :  41.39% of raw write
-    Read  float  from PCM_16 :  23.56% of raw read
-    Write float   to  PCM_24 :  30.86% of raw write
-    Read  float  from PCM_24 :  28.27% of raw read
-    Write float   to  PCM_32 :  23.83% of raw write
-    Read  float  from PCM_32 :  20.54% of raw read
-    Write float   to  FLOAT  :  27.26% of raw write
-    Read  float  from FLOAT  :  29.04% of raw read
-
diff --git a/libs/libsndfile/tests/benchmark-1.0.6pre10-miles b/libs/libsndfile/tests/benchmark-1.0.6pre10-miles
deleted file mode 100644 (file)
index fffdb84..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-Benchmarking libsndfile-1.0.6pre10
-----------------------------------
-Each test takes a little over 5 seconds.
-
-    Raw write PCM_16  :   40092612 samples per sec
-    Raw read  PCM_16  :   42382563 samples per sec
-
-Native endian I/O :
-    Write short   to  PCM_16 :  61.90% of raw write
-    Read  short  from PCM_16 : 100.20% of raw read
-    Write int     to  PCM_24 :  28.69% of raw write
-    Read  int    from PCM_24 :  33.62% of raw read
-    Write int     to  PCM_32 :  31.14% of raw write
-    Read  int    from PCM_32 :  51.04% of raw read
-    Write float   to  PCM_16 :  25.57% of raw write
-    Read  float  from PCM_16 :  28.17% of raw read
-    Write float   to  PCM_24 :  23.59% of raw write
-    Read  float  from PCM_24 :  24.14% of raw read
-    Write float   to  PCM_32 :  18.00% of raw write
-    Read  float  from PCM_32 :  22.59% of raw read
-    Write float   to  FLOAT  :  31.32% of raw write
-    Read  float  from FLOAT  :  51.54% of raw read
-
-Endian swapped I/O :
-    Write short   to  PCM_16 :  42.81% of raw write
-    Read  short  from PCM_16 :  54.58% of raw read
-    Write int     to  PCM_24 :  29.28% of raw write
-    Read  int    from PCM_24 :  33.43% of raw read
-    Write int     to  PCM_32 :  22.21% of raw write
-    Read  int    from PCM_32 :  27.24% of raw read
-    Write float   to  PCM_16 :  25.76% of raw write
-    Read  float  from PCM_16 :  26.84% of raw read
-    Write float   to  PCM_24 :  23.71% of raw write
-    Read  float  from PCM_24 :  24.10% of raw read
-    Write float   to  PCM_32 :  18.47% of raw write
-    Read  float  from PCM_32 :  21.45% of raw read
-    Write float   to  FLOAT  :  22.46% of raw write
-    Read  float  from FLOAT  :  29.72% of raw read
-
diff --git a/libs/libsndfile/tests/benchmark-latest-coltrane b/libs/libsndfile/tests/benchmark-latest-coltrane
deleted file mode 100644 (file)
index 97ce29a..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-erikd@coltrane > cat tests/benchmark-0.0.28         
-Benchmarking libsndfile-0.0.28
-------------------------------
-Each test takes a little over 5 seconds.
-
-    Raw write PCM_16  :   31022959 samples per sec
-    Raw read  PCM_16  :   63471874 samples per sec
-
-Native endian I/O :
-    Write short   to  PCM_16 :  83.19% of raw write
-    Read  short  from PCM_16 :  82.28% of raw read
-    Write int     to  PCM_24 :  30.81% of raw write
-    Read  int    from PCM_24 :  32.92% of raw read
-    Write float   to  PCM_16 :  17.70% of raw write
-    Read  float  from PCM_16 :  43.64% of raw read
-    Write float   to  PCM_24 :  15.09% of raw write
-    Read  float  from PCM_24 :  27.79% of raw read
-    Write float   to  PCM_32 :  14.32% of raw write
-    Read  float  from PCM_32 :  34.42% of raw read
-    Write float   to  FLOAT  :  28.64% of raw write
-    Read  float  from FLOAT  :  56.77% of raw read
-
-Endian swapped I/O :
-    Write short   to  PCM_16 :  44.04% of raw write
-    Read  short  from PCM_16 :  49.46% of raw read
-    Write int     to  PCM_24 :  28.92% of raw write
-    Read  int    from PCM_24 :  33.10% of raw read
-    Write float   to  PCM_16 :  17.30% of raw write
-    Read  float  from PCM_16 :  31.46% of raw read
-    Write float   to  PCM_24 :  14.62% of raw write
-    Read  float  from PCM_24 :  27.64% of raw read
-    Write float   to  PCM_32 :  13.65% of raw write
-    Read  float  from PCM_32 :  22.41% of raw read
-    Write float   to  FLOAT  :  19.13% of raw write
-    Read  float  from FLOAT  :  26.21% of raw read
-
-erikd@coltrane > tests/benchmark 
-Benchmarking libsndfile-1.0.0
------------------------------
-Each test takes a little over 5 seconds.
-
-    Raw write PCM_16  :   29884416 samples per sec
-    Raw read  PCM_16  :   63347175 samples per sec
-
-Native endian I/O :
-    Write short   to  PCM_16 :  88.24% of raw write
-    Read  short  from PCM_16 :  82.76% of raw read
-    Write int     to  PCM_24 :  34.95% of raw write
-    Read  int    from PCM_24 :  37.17% of raw read
-    Write int     to  PCM_32 :  43.86% of raw write
-    Read  int    from PCM_32 :  41.22% of raw read
-    Write float   to  PCM_16 :  42.07% of raw write
-    Read  float  from PCM_16 :  44.25% of raw read
-    Write float   to  PCM_24 :  32.43% of raw write
-    Read  float  from PCM_24 :  28.93% of raw read
-    Write float   to  PCM_32 :  25.60% of raw write
-    Read  float  from PCM_32 :  31.10% of raw read
-    Write float   to  FLOAT  :  45.55% of raw write
-    Read  float  from FLOAT  :  57.41% of raw read
-
-Endian swapped I/O :
-    Write short   to  PCM_16 :  43.46% of raw write
-    Read  short  from PCM_16 :  43.99% of raw read
-    Write int     to  PCM_24 :  35.09% of raw write
-    Read  int    from PCM_24 :  37.34% of raw read
-    Write int     to  PCM_32 :  24.05% of raw write
-    Read  int    from PCM_32 :  19.74% of raw read
-    Write float   to  PCM_16 :  40.25% of raw write
-    Read  float  from PCM_16 :  32.15% of raw read
-    Write float   to  PCM_24 :  31.02% of raw write
-    Read  float  from PCM_24 :  28.82% of raw read
-    Write float   to  PCM_32 :  23.54% of raw write
-    Read  float  from PCM_32 :  23.65% of raw read
-    Write float   to  FLOAT  :  24.87% of raw write
-    Read  float  from FLOAT  :  20.28% of raw read
diff --git a/libs/libsndfile/tests/benchmark.c b/libs/libsndfile/tests/benchmark.c
deleted file mode 100644 (file)
index f33bfee..0000000
+++ /dev/null
@@ -1,545 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#include <string.h>
-#include <math.h>
-#include <time.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-
-#include <sndfile.h>
-
-#ifndef                M_PI
-#define                M_PI            3.14159265358979323846264338
-#endif
-
-/*
-**     Neat solution to the Win32/OS2 binary file flage requirement.
-**     If O_BINARY isn't already defined by the inclusion of the system
-**     headers, set it to zero.
-*/
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-#define        WRITE_FLAGS     (O_WRONLY | O_CREAT | O_TRUNC | O_BINARY)
-#define        READ_FLAGS      (O_RDONLY | O_BINARY)
-
-#if (defined (WIN32) || defined (_WIN32) || defined (__OS2__))
-       #define WRITE_PERMS     0777
-#else
-       #define WRITE_PERMS     (S_IRUSR | S_IWUSR | S_IRGRP)
-#endif
-
-#define        BUFFER_SIZE             (1<<18)
-#define        BLOCK_COUNT             (30)
-#define        TEST_DURATION   (5)             /* 5 Seconds. */
-
-typedef struct
-{      double  write_rate ;
-       double  read_rate ;
-} PERF_STATS ;
-
-static void    *data = NULL ;
-
-static void calc_raw_performance (PERF_STATS *stats) ;
-
-static void    calc_short_performance (int format, double read_rate, double write_rate) ;
-static void    calc_int_performance (int format, double read_rate, double write_rate) ;
-static void    calc_float_performance (int format, double read_rate, double write_rate) ;
-
-
-static int cpu_is_big_endian (void) ;
-
-static const char* get_subtype_str (int subtype) ;
-
-int
-main (int argc, char *argv [])
-{      PERF_STATS      stats ;
-       char            buffer [256] = "Benchmarking " ;
-       int                     format_major ;
-
-       if (! (data = malloc (BUFFER_SIZE * sizeof (double))))
-       {       perror ("Error : malloc failed") ;
-               exit (1) ;
-               } ;
-
-       sf_command (NULL, SFC_GET_LIB_VERSION, buffer + strlen (buffer), sizeof (buffer) - strlen (buffer)) ;
-
-       puts (buffer) ;
-       memset (buffer, '-', strlen (buffer)) ;
-       puts (buffer) ;
-       printf ("Each test takes a little over %d seconds.\n\n", TEST_DURATION) ;
-
-       calc_raw_performance (&stats) ;
-
-       if (argc < 2 || strcmp ("--native-only", argv [1]) == 0)
-       {       puts ("\nNative endian I/O :") ;
-               format_major = cpu_is_big_endian () ? SF_FORMAT_AIFF : SF_FORMAT_WAV ;
-
-               calc_short_performance  (format_major | SF_FORMAT_PCM_16, stats.read_rate, stats.write_rate) ;
-               calc_int_performance    (format_major | SF_FORMAT_PCM_24, stats.read_rate, stats.write_rate) ;
-               calc_int_performance    (format_major | SF_FORMAT_PCM_32, stats.read_rate, stats.write_rate) ;
-               calc_float_performance  (format_major | SF_FORMAT_PCM_16, stats.read_rate, stats.write_rate) ;
-               calc_float_performance  (format_major | SF_FORMAT_PCM_24, stats.read_rate, stats.write_rate) ;
-               calc_float_performance  (format_major | SF_FORMAT_PCM_32, stats.read_rate, stats.write_rate) ;
-               calc_float_performance  (format_major | SF_FORMAT_FLOAT , stats.read_rate, stats.write_rate) ;
-               } ;
-
-       if (argc < 2 || strcmp ("--swap-only", argv [1]) == 0)
-       {       puts ("\nEndian swapped I/O :") ;
-               format_major = cpu_is_big_endian () ? SF_FORMAT_WAV : SF_FORMAT_AIFF ;
-
-               calc_short_performance  (format_major | SF_FORMAT_PCM_16, stats.read_rate, stats.write_rate) ;
-               calc_int_performance    (format_major | SF_FORMAT_PCM_24, stats.read_rate, stats.write_rate) ;
-               calc_int_performance    (format_major | SF_FORMAT_PCM_32, stats.read_rate, stats.write_rate) ;
-               calc_float_performance  (format_major | SF_FORMAT_PCM_16, stats.read_rate, stats.write_rate) ;
-               calc_float_performance  (format_major | SF_FORMAT_PCM_24, stats.read_rate, stats.write_rate) ;
-               calc_float_performance  (format_major | SF_FORMAT_PCM_32, stats.read_rate, stats.write_rate) ;
-               calc_float_performance  (format_major | SF_FORMAT_FLOAT , stats.read_rate, stats.write_rate) ;
-               } ;
-
-       puts ("") ;
-
-       free (data) ;
-
-       return 0 ;
-} /* main */
-
-/*==============================================================================
-*/
-
-static void
-calc_raw_performance (PERF_STATS *stats)
-{      clock_t start_clock, clock_time ;
-       int fd, k, byte_count, retval, op_count ;
-       const char *filename ;
-
-       filename = "benchmark.dat" ;
-
-       byte_count = BUFFER_SIZE * sizeof (short) ;
-
-       /* Collect write stats */
-       printf ("    Raw write PCM_16  : ") ;
-       fflush (stdout) ;
-
-       clock_time = 0 ;
-       op_count = 0 ;
-       start_clock = clock () ;
-
-       while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-       {       if ((fd = open (filename, WRITE_FLAGS, WRITE_PERMS)) < 0)
-               {       printf ("Error : not able to open file : %s\n", filename) ;
-                       perror ("") ;
-                       exit (1) ;
-                       } ;
-
-               for (k = 0 ; k < BLOCK_COUNT ; k++)
-               {       if ((retval = write (fd, data, byte_count)) != byte_count)
-                       {       printf ("Error : write returned %d (should have been %d)\n", retval, byte_count) ;
-                               exit (1) ;
-                               } ;
-                       } ;
-
-               close (fd) ;
-
-               clock_time = clock () - start_clock ;
-               op_count ++ ;
-               } ;
-
-       stats->write_rate = (1.0 * BUFFER_SIZE) * BLOCK_COUNT * op_count ;
-       stats->write_rate *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-       printf ("%10.0f samples per sec\n", stats->write_rate) ;
-
-       /* Collect read stats */
-       printf ("    Raw read  PCM_16  : ") ;
-       fflush (stdout) ;
-
-       clock_time = 0 ;
-       op_count = 0 ;
-       start_clock = clock () ;
-
-       while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-       {       if ((fd = open (filename, READ_FLAGS)) < 0)
-               {       printf ("Error : not able to open file : %s\n", filename) ;
-                       perror ("") ;
-                       exit (1) ;
-                       } ;
-
-               for (k = 0 ; k < BLOCK_COUNT ; k++)
-               {       if ((retval = read (fd, data, byte_count)) != byte_count)
-                       {       printf ("Error : write returned %d (should have been %d)\n", retval, byte_count) ;
-                               exit (1) ;
-                               } ;
-                       } ;
-
-               close (fd) ;
-
-               clock_time = clock () - start_clock ;
-               op_count ++ ;
-               } ;
-
-       stats->read_rate = (1.0 * BUFFER_SIZE) * BLOCK_COUNT * op_count ;
-       stats->read_rate *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-       printf ("%10.0f samples per sec\n", stats->read_rate) ;
-
-       unlink (filename) ;
-} /* calc_raw_performance */
-
-/*------------------------------------------------------------------------------
-*/
-
-static void
-calc_short_performance (int format, double read_rate, double write_rate)
-{      SNDFILE *file ;
-       SF_INFO sfinfo ;
-       clock_t start_clock, clock_time ;
-       double  performance ;
-       int k, item_count, retval, op_count ;
-       const char* subtype ;
-       short *short_data ;
-       const char *filename ;
-
-       filename = "benchmark.dat" ;
-       subtype = get_subtype_str (format & SF_FORMAT_SUBMASK) ;
-
-       short_data = data ;
-       item_count = BUFFER_SIZE ;
-       for (k = 0 ; k < item_count ; k++)
-               short_data [k] = 32700.0 * sin (2 * M_PI * k / 32000.0) ;
-
-       /* Collect write stats */
-       printf ("    Write %-5s   to  %s : ", "short", subtype) ;
-       fflush (stdout) ;
-
-       sfinfo.channels = 1 ;
-       sfinfo.format = format ;
-       sfinfo.frames = 1 ;
-       sfinfo.samplerate = 32000 ;
-
-       clock_time = 0 ;
-       op_count = 0 ;
-       start_clock = clock () ;
-
-       while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-       {       if (! (file = sf_open (filename, SFM_WRITE, &sfinfo)))
-               {       printf ("Error : not able to open file : %s\n", filename) ;
-                       perror ("") ;
-                       exit (1) ;
-                       } ;
-
-               /* Turn off the addition of a PEAK chunk. */
-               sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ;
-
-               for (k = 0 ; k < BLOCK_COUNT ; k++)
-               {       if ((retval = sf_write_short (file, short_data, item_count)) != item_count)
-                       {       printf ("Error : sf_write_short returned %d (should have been %d)\n", retval, item_count) ;
-                               exit (1) ;
-                               } ;
-                       } ;
-
-               sf_close (file) ;
-
-               clock_time = clock () - start_clock ;
-               op_count ++ ;
-               } ;
-
-       performance = (1.0 * BUFFER_SIZE) * BLOCK_COUNT * op_count ;
-       performance *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-       printf ("%6.2f%% of raw write\n", 100.0 * performance / write_rate) ;
-
-       /* Collect read stats */
-       printf ("    Read  %-5s  from %s : ", "short", subtype) ;
-       fflush (stdout) ;
-
-       clock_time = 0 ;
-       op_count = 0 ;
-       start_clock = clock () ;
-
-       while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-       {       if (! (file = sf_open (filename, SFM_READ, &sfinfo)))
-               {       printf ("Error : not able to open file : %s\n", filename) ;
-                       perror ("") ;
-                       exit (1) ;
-                       } ;
-
-               for (k = 0 ; k < BLOCK_COUNT ; k++)
-               {       if ((retval = sf_read_short (file, short_data, item_count)) != item_count)
-                       {       printf ("Error : write returned %d (should have been %d)\n", retval, item_count) ;
-                               exit (1) ;
-                               } ;
-                       } ;
-
-               sf_close (file) ;
-
-               clock_time = clock () - start_clock ;
-               op_count ++ ;
-               } ;
-
-       performance = (1.0 * item_count) * BLOCK_COUNT * op_count ;
-       performance *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-       printf ("%6.2f%% of raw read\n", 100.0 * performance / read_rate) ;
-
-       unlink (filename) ;
-
-} /* calc_short_performance */
-static void
-calc_int_performance (int format, double read_rate, double write_rate)
-{      SNDFILE *file ;
-       SF_INFO sfinfo ;
-       clock_t start_clock, clock_time ;
-       double  performance ;
-       int k, item_count, retval, op_count ;
-       const char* subtype ;
-       int *int_data ;
-       const char *filename ;
-
-       filename = "benchmark.dat" ;
-       subtype = get_subtype_str (format & SF_FORMAT_SUBMASK) ;
-
-       int_data = data ;
-       item_count = BUFFER_SIZE ;
-       for (k = 0 ; k < item_count ; k++)
-               int_data [k] = 32700.0 * (1<<16) * sin (2 * M_PI * k / 32000.0) ;
-
-       /* Collect write stats */
-       printf ("    Write %-5s   to  %s : ", "int", subtype) ;
-       fflush (stdout) ;
-
-       sfinfo.channels = 1 ;
-       sfinfo.format = format ;
-       sfinfo.frames = 1 ;
-       sfinfo.samplerate = 32000 ;
-
-       clock_time = 0 ;
-       op_count = 0 ;
-       start_clock = clock () ;
-
-       while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-       {       if (! (file = sf_open (filename, SFM_WRITE, &sfinfo)))
-               {       printf ("Error : not able to open file : %s\n", filename) ;
-                       perror ("") ;
-                       exit (1) ;
-                       } ;
-
-               /* Turn off the addition of a PEAK chunk. */
-               sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ;
-
-               for (k = 0 ; k < BLOCK_COUNT ; k++)
-               {       if ((retval = sf_write_int (file, int_data, item_count)) != item_count)
-                       {       printf ("Error : sf_write_short returned %d (should have been %d)\n", retval, item_count) ;
-                               exit (1) ;
-                               } ;
-                       } ;
-
-               sf_close (file) ;
-
-               clock_time = clock () - start_clock ;
-               op_count ++ ;
-               } ;
-
-       performance = (1.0 * BUFFER_SIZE) * BLOCK_COUNT * op_count ;
-       performance *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-       printf ("%6.2f%% of raw write\n", 100.0 * performance / write_rate) ;
-
-       /* Collect read stats */
-       printf ("    Read  %-5s  from %s : ", "int", subtype) ;
-       fflush (stdout) ;
-
-       clock_time = 0 ;
-       op_count = 0 ;
-       start_clock = clock () ;
-
-       while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-       {       if (! (file = sf_open (filename, SFM_READ, &sfinfo)))
-               {       printf ("Error : not able to open file : %s\n", filename) ;
-                       perror ("") ;
-                       exit (1) ;
-                       } ;
-
-               for (k = 0 ; k < BLOCK_COUNT ; k++)
-               {       if ((retval = sf_read_int (file, int_data, item_count)) != item_count)
-                       {       printf ("Error : write returned %d (should have been %d)\n", retval, item_count) ;
-                               exit (1) ;
-                               } ;
-                       } ;
-
-               sf_close (file) ;
-
-               clock_time = clock () - start_clock ;
-               op_count ++ ;
-               } ;
-
-       performance = (1.0 * item_count) * BLOCK_COUNT * op_count ;
-       performance *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-       printf ("%6.2f%% of raw read\n", 100.0 * performance / read_rate) ;
-
-       unlink (filename) ;
-
-} /* calc_int_performance */
-static void
-calc_float_performance (int format, double read_rate, double write_rate)
-{      SNDFILE *file ;
-       SF_INFO sfinfo ;
-       clock_t start_clock, clock_time ;
-       double  performance ;
-       int k, item_count, retval, op_count ;
-       const char* subtype ;
-       float *float_data ;
-       const char *filename ;
-
-       filename = "benchmark.dat" ;
-       subtype = get_subtype_str (format & SF_FORMAT_SUBMASK) ;
-
-       float_data = data ;
-       item_count = BUFFER_SIZE ;
-       for (k = 0 ; k < item_count ; k++)
-               float_data [k] = 1.0 * sin (2 * M_PI * k / 32000.0) ;
-
-       /* Collect write stats */
-       printf ("    Write %-5s   to  %s : ", "float", subtype) ;
-       fflush (stdout) ;
-
-       sfinfo.channels = 1 ;
-       sfinfo.format = format ;
-       sfinfo.frames = 1 ;
-       sfinfo.samplerate = 32000 ;
-
-       clock_time = 0 ;
-       op_count = 0 ;
-       start_clock = clock () ;
-
-       while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-       {       if (! (file = sf_open (filename, SFM_WRITE, &sfinfo)))
-               {       printf ("Error : not able to open file : %s\n", filename) ;
-                       perror ("") ;
-                       exit (1) ;
-                       } ;
-
-               /* Turn off the addition of a PEAK chunk. */
-               sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ;
-
-               for (k = 0 ; k < BLOCK_COUNT ; k++)
-               {       if ((retval = sf_write_float (file, float_data, item_count)) != item_count)
-                       {       printf ("Error : sf_write_short returned %d (should have been %d)\n", retval, item_count) ;
-                               exit (1) ;
-                               } ;
-                       } ;
-
-               sf_close (file) ;
-
-               clock_time = clock () - start_clock ;
-               op_count ++ ;
-               } ;
-
-       performance = (1.0 * BUFFER_SIZE) * BLOCK_COUNT * op_count ;
-       performance *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-       printf ("%6.2f%% of raw write\n", 100.0 * performance / write_rate) ;
-
-       /* Collect read stats */
-       printf ("    Read  %-5s  from %s : ", "float", subtype) ;
-       fflush (stdout) ;
-
-       clock_time = 0 ;
-       op_count = 0 ;
-       start_clock = clock () ;
-
-       while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-       {       if (! (file = sf_open (filename, SFM_READ, &sfinfo)))
-               {       printf ("Error : not able to open file : %s\n", filename) ;
-                       perror ("") ;
-                       exit (1) ;
-                       } ;
-
-               for (k = 0 ; k < BLOCK_COUNT ; k++)
-               {       if ((retval = sf_read_float (file, float_data, item_count)) != item_count)
-                       {       printf ("Error : write returned %d (should have been %d)\n", retval, item_count) ;
-                               exit (1) ;
-                               } ;
-                       } ;
-
-               sf_close (file) ;
-
-               clock_time = clock () - start_clock ;
-               op_count ++ ;
-               } ;
-
-       performance = (1.0 * item_count) * BLOCK_COUNT * op_count ;
-       performance *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-       printf ("%6.2f%% of raw read\n", 100.0 * performance / read_rate) ;
-
-       unlink (filename) ;
-
-} /* calc_float_performance */
-
-
-/*==============================================================================
-*/
-
-static int
-cpu_is_big_endian (void)
-{      unsigned char   *cptr ;
-       int                     endtest ;
-
-       endtest = 0x12345678 ;
-
-       cptr = (unsigned char*) (&endtest) ;
-
-       if (cptr [0] == 0x12 && cptr [1] == 0x34 && cptr [3] == 0x78)
-               return SF_TRUE ;
-
-       return SF_FALSE ;
-} /* cpu_is_big_endian */
-
-static const char*
-get_subtype_str (int subtype)
-{      switch (subtype)
-       {       case SF_FORMAT_PCM_16 :
-                               return "PCM_16" ;
-
-               case SF_FORMAT_PCM_24 :
-                               return "PCM_24" ;
-
-               case SF_FORMAT_PCM_32 :
-                               return "PCM_32" ;
-
-               case SF_FORMAT_FLOAT :
-                               return "FLOAT " ;
-
-               case SF_FORMAT_DOUBLE :
-                               return "DOUBLE" ;
-
-               default : break ;
-               } ;
-
-       return "UNKNOWN" ;
-} /* get_subtype_str */
-
diff --git a/libs/libsndfile/tests/benchmark.def b/libs/libsndfile/tests/benchmark.def
deleted file mode 100644 (file)
index 382bf3b..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-autogen definitions benchmark.tpl;
-
-data_type = {
-       type_name               = short ;
-       multiplier              = "32700.0" ;
-       };
-
-data_type = {
-       type_name               = int ;
-       multiplier              = "32700.0 * (1 << 16)" ;
-       };
-
-data_type = {
-       type_name               = float ;
-       multiplier              = "1.0" ;
-       };
-
diff --git a/libs/libsndfile/tests/benchmark.tpl b/libs/libsndfile/tests/benchmark.tpl
deleted file mode 100644 (file)
index 14b22e2..0000000
+++ /dev/null
@@ -1,360 +0,0 @@
-[+ AutoGen5 template c +]
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#include <string.h>
-#include <math.h>
-#include <time.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-
-#include <sndfile.h>
-
-#ifndef                M_PI
-#define                M_PI            3.14159265358979323846264338
-#endif
-
-/*
-**     Neat solution to the Win32/OS2 binary file flage requirement.
-**     If O_BINARY isn't already defined by the inclusion of the system
-**     headers, set it to zero.
-*/
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-#define        WRITE_FLAGS     (O_WRONLY | O_CREAT | O_TRUNC | O_BINARY)
-#define        READ_FLAGS      (O_RDONLY | O_BINARY)
-
-#if (defined (WIN32) || defined (_WIN32) || defined (__OS2__))
-       #define WRITE_PERMS     0777
-#else
-       #define WRITE_PERMS     (S_IRUSR | S_IWUSR | S_IRGRP)
-#endif
-
-#define        BUFFER_SIZE             (1 << 18)
-#define        BLOCK_COUNT             (30)
-#define        TEST_DURATION   (5)             /* 5 Seconds. */
-
-typedef struct
-{      double  write_rate ;
-       double  read_rate ;
-} PERF_STATS ;
-
-static void    *data = NULL ;
-
-static void calc_raw_performance (PERF_STATS *stats) ;
-
-[+ FOR data_type
-+]static void  calc_[+ (get "type_name") +]_performance (int format, double read_rate, double write_rate) ;
-[+ ENDFOR data_type
-+]
-
-static int cpu_is_big_endian (void) ;
-
-static const char* get_subtype_str (int subtype) ;
-
-int
-main (int argc, char *argv [])
-{      PERF_STATS      stats ;
-       char            buffer [256] = "Benchmarking " ;
-       int                     format_major ;
-
-       if (! (data = malloc (BUFFER_SIZE * sizeof (double))))
-       {       perror ("Error : malloc failed") ;
-               exit (1) ;
-               } ;
-
-       sf_command (NULL, SFC_GET_LIB_VERSION, buffer + strlen (buffer), sizeof (buffer) - strlen (buffer)) ;
-
-       puts (buffer) ;
-       memset (buffer, '-', strlen (buffer)) ;
-       puts (buffer) ;
-       printf ("Each test takes a little over %d seconds.\n\n", TEST_DURATION) ;
-
-       calc_raw_performance (&stats) ;
-
-       if (argc < 2 || strcmp ("--native-only", argv [1]) == 0)
-       {       puts ("\nNative endian I/O :") ;
-               format_major = cpu_is_big_endian () ? SF_FORMAT_AIFF : SF_FORMAT_WAV ;
-
-               calc_short_performance  (format_major | SF_FORMAT_PCM_16, stats.read_rate, stats.write_rate) ;
-               calc_int_performance    (format_major | SF_FORMAT_PCM_24, stats.read_rate, stats.write_rate) ;
-               calc_int_performance    (format_major | SF_FORMAT_PCM_32, stats.read_rate, stats.write_rate) ;
-               calc_float_performance  (format_major | SF_FORMAT_PCM_16, stats.read_rate, stats.write_rate) ;
-               calc_float_performance  (format_major | SF_FORMAT_PCM_24, stats.read_rate, stats.write_rate) ;
-               calc_float_performance  (format_major | SF_FORMAT_PCM_32, stats.read_rate, stats.write_rate) ;
-               calc_float_performance  (format_major | SF_FORMAT_FLOAT , stats.read_rate, stats.write_rate) ;
-               } ;
-
-       if (argc < 2 || strcmp ("--swap-only", argv [1]) == 0)
-       {       puts ("\nEndian swapped I/O :") ;
-               format_major = cpu_is_big_endian () ? SF_FORMAT_WAV : SF_FORMAT_AIFF ;
-
-               calc_short_performance  (format_major | SF_FORMAT_PCM_16, stats.read_rate, stats.write_rate) ;
-               calc_int_performance    (format_major | SF_FORMAT_PCM_24, stats.read_rate, stats.write_rate) ;
-               calc_int_performance    (format_major | SF_FORMAT_PCM_32, stats.read_rate, stats.write_rate) ;
-               calc_float_performance  (format_major | SF_FORMAT_PCM_16, stats.read_rate, stats.write_rate) ;
-               calc_float_performance  (format_major | SF_FORMAT_PCM_24, stats.read_rate, stats.write_rate) ;
-               calc_float_performance  (format_major | SF_FORMAT_PCM_32, stats.read_rate, stats.write_rate) ;
-               calc_float_performance  (format_major | SF_FORMAT_FLOAT , stats.read_rate, stats.write_rate) ;
-               } ;
-
-       puts ("") ;
-
-       free (data) ;
-
-       return 0 ;
-} /* main */
-
-/*==============================================================================
-*/
-
-static void
-calc_raw_performance (PERF_STATS *stats)
-{      clock_t start_clock, clock_time ;
-       int fd, k, byte_count, retval, op_count ;
-       const char *filename ;
-
-       filename = "benchmark.dat" ;
-
-       byte_count = BUFFER_SIZE * sizeof (short) ;
-
-       /* Collect write stats */
-       printf ("    Raw write PCM_16  : ") ;
-       fflush (stdout) ;
-
-       clock_time = 0 ;
-       op_count = 0 ;
-       start_clock = clock () ;
-
-       while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-       {       if ((fd = open (filename, WRITE_FLAGS, WRITE_PERMS)) < 0)
-               {       printf ("Error : not able to open file : %s\n", filename) ;
-                       perror ("") ;
-                       exit (1) ;
-                       } ;
-
-               for (k = 0 ; k < BLOCK_COUNT ; k++)
-               {       if ((retval = write (fd, data, byte_count)) != byte_count)
-                       {       printf ("Error : write returned %d (should have been %d)\n", retval, byte_count) ;
-                               exit (1) ;
-                               } ;
-                       } ;
-
-               close (fd) ;
-
-               clock_time = clock () - start_clock ;
-               op_count ++ ;
-               } ;
-
-       stats->write_rate = (1.0 * BUFFER_SIZE) * BLOCK_COUNT * op_count ;
-       stats->write_rate *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-       printf ("%10.0f samples per sec\n", stats->write_rate) ;
-
-       /* Collect read stats */
-       printf ("    Raw read  PCM_16  : ") ;
-       fflush (stdout) ;
-
-       clock_time = 0 ;
-       op_count = 0 ;
-       start_clock = clock () ;
-
-       while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-       {       if ((fd = open (filename, READ_FLAGS)) < 0)
-               {       printf ("Error : not able to open file : %s\n", filename) ;
-                       perror ("") ;
-                       exit (1) ;
-                       } ;
-
-               for (k = 0 ; k < BLOCK_COUNT ; k++)
-               {       if ((retval = read (fd, data, byte_count)) != byte_count)
-                       {       printf ("Error : write returned %d (should have been %d)\n", retval, byte_count) ;
-                               exit (1) ;
-                               } ;
-                       } ;
-
-               close (fd) ;
-
-               clock_time = clock () - start_clock ;
-               op_count ++ ;
-               } ;
-
-       stats->read_rate = (1.0 * BUFFER_SIZE) * BLOCK_COUNT * op_count ;
-       stats->read_rate *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-       printf ("%10.0f samples per sec\n", stats->read_rate) ;
-
-       unlink (filename) ;
-} /* calc_raw_performance */
-
-/*------------------------------------------------------------------------------
-*/
-
-[+ FOR data_type
-+]static void
-calc_[+ (get "type_name") +]_performance (int format, double read_rate, double write_rate)
-{      SNDFILE *file ;
-       SF_INFO sfinfo ;
-       clock_t start_clock, clock_time ;
-       double  performance ;
-       int k, item_count, retval, op_count ;
-       const char* subtype ;
-       [+ (get "type_name") +] *[+ (get "type_name") +]_data ;
-       const char *filename ;
-
-       filename = "benchmark.dat" ;
-       subtype = get_subtype_str (format & SF_FORMAT_SUBMASK) ;
-
-       [+ (get "type_name") +]_data = data ;
-       item_count = BUFFER_SIZE ;
-       for (k = 0 ; k < item_count ; k++)
-               [+ (get "type_name") +]_data [k] = [+ (get "multiplier") +] * sin (2 * M_PI * k / 32000.0) ;
-
-       /* Collect write stats */
-       printf ("    Write %-5s   to  %s : ", "[+ (get "type_name") +]", subtype) ;
-       fflush (stdout) ;
-
-       sfinfo.channels = 1 ;
-       sfinfo.format = format ;
-       sfinfo.frames = 1 ;
-       sfinfo.samplerate = 32000 ;
-
-       clock_time = 0 ;
-       op_count = 0 ;
-       start_clock = clock () ;
-
-       while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-       {       if (! (file = sf_open (filename, SFM_WRITE, &sfinfo)))
-               {       printf ("Error : not able to open file : %s\n", filename) ;
-                       perror ("") ;
-                       exit (1) ;
-                       } ;
-
-               /* Turn off the addition of a PEAK chunk. */
-               sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ;
-
-               for (k = 0 ; k < BLOCK_COUNT ; k++)
-               {       if ((retval = sf_write_[+ (get "type_name") +] (file, [+ (get "type_name") +]_data, item_count)) != item_count)
-                       {       printf ("Error : sf_write_short returned %d (should have been %d)\n", retval, item_count) ;
-                               exit (1) ;
-                               } ;
-                       } ;
-
-               sf_close (file) ;
-
-               clock_time = clock () - start_clock ;
-               op_count ++ ;
-               } ;
-
-       performance = (1.0 * BUFFER_SIZE) * BLOCK_COUNT * op_count ;
-       performance *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-       printf ("%6.2f%% of raw write\n", 100.0 * performance / write_rate) ;
-
-       /* Collect read stats */
-       printf ("    Read  %-5s  from %s : ", "[+ (get "type_name") +]", subtype) ;
-       fflush (stdout) ;
-
-       clock_time = 0 ;
-       op_count = 0 ;
-       start_clock = clock () ;
-
-       while (clock_time < (CLOCKS_PER_SEC * TEST_DURATION))
-       {       if (! (file = sf_open (filename, SFM_READ, &sfinfo)))
-               {       printf ("Error : not able to open file : %s\n", filename) ;
-                       perror ("") ;
-                       exit (1) ;
-                       } ;
-
-               for (k = 0 ; k < BLOCK_COUNT ; k++)
-               {       if ((retval = sf_read_[+ (get "type_name") +] (file, [+ (get "type_name") +]_data, item_count)) != item_count)
-                       {       printf ("Error : write returned %d (should have been %d)\n", retval, item_count) ;
-                               exit (1) ;
-                               } ;
-                       } ;
-
-               sf_close (file) ;
-
-               clock_time = clock () - start_clock ;
-               op_count ++ ;
-               } ;
-
-       performance = (1.0 * item_count) * BLOCK_COUNT * op_count ;
-       performance *= (1.0 * CLOCKS_PER_SEC) / clock_time ;
-       printf ("%6.2f%% of raw read\n", 100.0 * performance / read_rate) ;
-
-       unlink (filename) ;
-
-} /* calc_[+ (get "type_name") +]_performance */
-[+ ENDFOR data_type
-+]
-
-/*==============================================================================
-*/
-
-static int
-cpu_is_big_endian (void)
-{      unsigned char   *cptr ;
-       int                     endtest ;
-
-       endtest = 0x12345678 ;
-
-       cptr = (unsigned char*) (&endtest) ;
-
-       if (cptr [0] == 0x12 && cptr [1] == 0x34 && cptr [3] == 0x78)
-               return SF_TRUE ;
-
-       return SF_FALSE ;
-} /* cpu_is_big_endian */
-
-static const char*
-get_subtype_str (int subtype)
-{      switch (subtype)
-       {       case SF_FORMAT_PCM_16 :
-                               return "PCM_16" ;
-
-               case SF_FORMAT_PCM_24 :
-                               return "PCM_24" ;
-
-               case SF_FORMAT_PCM_32 :
-                               return "PCM_32" ;
-
-               case SF_FORMAT_FLOAT :
-                               return "FLOAT " ;
-
-               case SF_FORMAT_DOUBLE :
-                               return "DOUBLE" ;
-
-               default : break ;
-               } ;
-
-       return "UNKNOWN" ;
-} /* get_subtype_str */
-
diff --git a/libs/libsndfile/tests/channel_test.c b/libs/libsndfile/tests/channel_test.c
deleted file mode 100644 (file)
index 8a69734..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
-** Copyright (C) 2001-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <inttypes.h>
-#include <string.h>
-#include <time.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <math.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define        BUFFER_LEN              (1 << 10)
-#define LOG_BUFFER_SIZE        1024
-
-static void    channel_test                    (void) ;
-static double  max_diff                (const float *a, const float *b, int len) ;
-
-int
-main (void) // int argc, char *argv [])
-{      channel_test () ;
-       return 0 ;
-} /* main */
-
-/*============================================================================================
-**     Here are the test functions.
-*/
-
-static void
-channel_test (void)
-{      static float    float_data [1024] ;
-       static float    read_float [1024] ;
-       static int              read_int [1024] ;
-       static short    read_short [1024] ;
-       unsigned int    ch, k ;
-
-       gen_windowed_sine_float (float_data, ARRAY_LEN (float_data), 0.9) ;
-
-       for (ch = 1 ; ch <= 8 ; ch++)
-       {       SNDFILE *file ;
-               SF_INFO wsfinfo, rsfinfo ;
-               sf_count_t wframes = ARRAY_LEN (float_data) / ch ;
-               double  maxdiff ;
-               char    filename [256] ;
-
-               snprintf (filename, sizeof (filename), "chan_%d.wav", ch) ;
-               print_test_name (__func__, filename) ;
-
-               sf_info_setup (&wsfinfo, SF_FORMAT_WAV | SF_FORMAT_FLOAT, 48000, ch) ;
-               sf_info_clear (&rsfinfo) ;
-
-               /* Write the test file. */
-               file = test_open_file_or_die (filename, SFM_WRITE, &wsfinfo, SF_FALSE, __LINE__) ;
-               test_writef_float_or_die (file, 0, float_data, wframes, __LINE__) ;
-               sf_close (file) ;
-
-               /* Read it as float and test. */
-               file = test_open_file_or_die (filename, SFM_READ, &rsfinfo, SF_FALSE, __LINE__) ;
-               exit_if_true (rsfinfo.frames == 0,
-                               "\n\nLine %d : Frames in file %" PRId64 ".\n\n", __LINE__, rsfinfo.frames) ;
-               exit_if_true (wframes != rsfinfo.frames,
-                               "\n\nLine %d : Wrote %" PRId64 ", read %" PRId64 " frames.\n\n", __LINE__, wframes, rsfinfo.frames) ;
-
-               sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-               test_readf_float_or_die (file, 0, read_float, rsfinfo.frames, __LINE__) ;
-               compare_float_or_die (float_data, read_float, ch * rsfinfo.frames, __LINE__) ;
-
-               /* Read it as short and test. */
-               test_seek_or_die (file, 0, SEEK_SET, 0, ch, __LINE__) ;
-               test_readf_short_or_die (file, 0, read_short, rsfinfo.frames, __LINE__) ;
-
-               for (k = 0 ; k < ARRAY_LEN (read_float) ; k++)
-                       read_float [k] = read_short [k] * (0.9 / 0x8000) ;
-
-               maxdiff = max_diff (float_data, read_float, ch * rsfinfo.frames) ;
-               exit_if_true (maxdiff > 0.5, "\n\nLine %d : Max diff is %f\n\n", __LINE__, maxdiff) ;
-
-               /* Read it as int and test. */
-               test_seek_or_die (file, 0, SEEK_SET, 0, ch, __LINE__) ;
-               test_readf_int_or_die (file, 0, read_int, rsfinfo.frames, __LINE__) ;
-
-               for (k = 0 ; k < ARRAY_LEN (read_float) ; k++)
-                       read_float [k] = read_int [k] * (0.9 / 0x80000000) ;
-
-               maxdiff = max_diff (float_data, read_float, ch * rsfinfo.frames) ;
-               exit_if_true (maxdiff > 0.5, "\n\nLine %d : Max diff is %f\n\n", __LINE__, maxdiff) ;
-
-               sf_close (file) ;
-               unlink (filename) ;
-               printf ("ok\n") ;
-               } ;
-
-       return ;
-} /* channel_test */
-
-static double
-max_diff (const float *a, const float *b, int len)
-{      double mdiff = 0.0, diff ;
-       int k ;
-
-       for (k = 0 ; k < len ; k++)
-       {       diff = fabs (a [k] - b [k]) ;
-               mdiff = diff > mdiff ? diff : mdiff ;
-               // printf ("%4d:     % f        % f          % f          % f\n", k, a [k], b [k], diff, mdiff) ;
-               } ;
-
-       return mdiff ;
-} /* max_diff */
diff --git a/libs/libsndfile/tests/checksum_test.c b/libs/libsndfile/tests/checksum_test.c
deleted file mode 100644 (file)
index 544da93..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
-** Copyright (C) 2008-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define        SAMPLE_RATE     8000
-
-typedef struct
-{      int     enc_fmt ;
-
-       const char * enc_name ;
-       const char * dec_name ;
-
-       uint64_t        enc_cksum ;
-       uint64_t        dec_cksum ;
-} CHECKSUM ;
-
-static CHECKSUM
-checksum_orig [] =
-{
-       {       SF_FORMAT_RAW | SF_FORMAT_ULAW,
-               "checksum.ulaw", "cksum_ulaw.pcm16",
-               0x33aefae029e0c888LL, 0x595cd6e47edd0cffLL
-               },
-       {       SF_FORMAT_RAW | SF_FORMAT_ALAW,
-               "checksum.alaw", "cksum_alaw.pcm16",
-               0x48c798da3572d468LL, 0x6837d74869af5bb6LL
-               },
-       {       SF_FORMAT_RAW | SF_FORMAT_GSM610,
-               "checksum.gsm", "cksum_gsm.pcm16",
-               0x1b1f64ff2acf858fLL, 0x504179dbadd4bce6LL
-               },
-       {       SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM,
-               "checksum.vox", "cksum_vox.pcm16",
-               0xf1147fb3a298f4dfLL, 0xfc9c0cb8b12cb0abLL
-               },
-} ;
-
-static void checksum_test (const CHECKSUM * cksum) ;
-
-static float orig [1 << 14] ;
-static short data [1 << 14] ;
-
-int
-main (void)
-{      unsigned k ;
-
-       gen_windowed_sine_float (orig, ARRAY_LEN (orig), 0.9) ;
-
-       for (k = 0 ; k < ARRAY_LEN (checksum_orig) ; k++)
-               checksum_test (&checksum_orig [k]) ;
-
-       return 0 ;
-} /* main */
-
-/*==============================================================================
-*/
-
-static void
-checksum_test (const CHECKSUM * cksum)
-{      SNDFILE * file ;
-       SF_INFO info ;
-
-       print_test_name (__func__, cksum->enc_name) ;
-
-       info.format = cksum->enc_fmt ;
-       info.channels = 1 ;
-       info.samplerate = SAMPLE_RATE ;
-
-       file = test_open_file_or_die (cksum->enc_name, SFM_WRITE, &info, 0, __LINE__) ;
-       test_write_float_or_die (file, 0, orig, ARRAY_LEN (orig), __LINE__) ;
-       sf_close (file) ;
-
-       check_file_hash_or_die (cksum->enc_name, cksum->enc_cksum, __LINE__) ;
-       puts ("ok") ;
-
-       /*------------------------------------------------------------------------*/
-
-       print_test_name (__func__, cksum->dec_name) ;
-
-       info.format = cksum->enc_fmt ;
-       info.channels = 1 ;
-       info.samplerate = SAMPLE_RATE ;
-
-       file = test_open_file_or_die (cksum->enc_name, SFM_READ, &info, 0, __LINE__) ;
-       test_read_short_or_die (file, 0, data, ARRAY_LEN (data), __LINE__) ;
-       sf_close (file) ;
-
-       info.format = SF_ENDIAN_LITTLE | SF_FORMAT_RAW | SF_FORMAT_PCM_16 ;
-       info.channels = 1 ;
-       info.samplerate = SAMPLE_RATE ;
-
-       file = test_open_file_or_die (cksum->dec_name, SFM_WRITE, &info, 0, __LINE__) ;
-       test_write_short_or_die (file, 0, data, ARRAY_LEN (data), __LINE__) ;
-       sf_close (file) ;
-
-       check_file_hash_or_die (cksum->dec_name, cksum->dec_cksum, __LINE__) ;
-
-       remove (cksum->enc_name) ;
-       remove (cksum->dec_name) ;
-
-       puts ("ok") ;
-} /* checksum_test */
-
diff --git a/libs/libsndfile/tests/chunk_test.c b/libs/libsndfile/tests/chunk_test.c
deleted file mode 100644 (file)
index 5a036b1..0000000
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
-** Copyright (C) 2003-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include       <sndfile.h>
-
-#include       "utils.h"
-
-#define        BUFFER_LEN                      (1 << 10)
-#define LOG_BUFFER_SIZE                1024
-
-static void    chunk_test (const char *filename, int format) ;
-
-static void
-chunk_test_helper (const char *filename, int format, const char * testdata) ;
-
-int
-main (int argc, char *argv [])
-{      int             do_all = 0 ;
-       int             test_count = 0 ;
-
-       if (argc != 2)
-       {       printf ("Usage : %s <test>\n", argv [0]) ;
-               printf ("    Where <test> is one of the following:\n") ;
-               printf ("           wav  - test adding chunks to WAV files\n") ;
-               printf ("           aiff - test adding chunks to AIFF files\n") ;
-               printf ("           all  - perform all tests\n") ;
-               exit (1) ;
-               } ;
-
-       do_all = ! strcmp (argv [1], "all") ;
-
-       if (do_all || ! strcmp (argv [1], "wav"))
-       {       chunk_test ("chunks_pcm16.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-               chunk_test ("chunks_pcm16.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-               chunk_test ("chunks_pcm16.wavex", SF_FORMAT_WAVEX | SF_FORMAT_PCM_16) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "aiff"))
-       {       chunk_test ("chunks_pcm16.aiff", SF_FORMAT_AIFF | SF_FORMAT_PCM_16) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "caf"))
-       {       chunk_test ("chunks_pcm16.caf", SF_FORMAT_CAF | SF_FORMAT_PCM_16) ;
-               chunk_test ("chunks_alac.caf", SF_FORMAT_CAF | SF_FORMAT_ALAC_16) ;
-               test_count++ ;
-               } ;
-
-       if (test_count == 0)
-       {       printf ("Mono : ************************************\n") ;
-               printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-               printf ("Mono : ************************************\n") ;
-               return 1 ;
-               } ;
-
-       return 0 ;
-} /* main */
-
-
-/*============================================================================================
-**     Here are the test functions.
-*/
-
-static void
-chunk_test_helper (const char *filename, int format, const char * testdata)
-{      SNDFILE                 *file ;
-       SF_INFO                 sfinfo ;
-       SF_CHUNK_INFO   chunk_info ;
-       SF_CHUNK_ITERATOR * iterator ;
-       uint32_t                length_before ;
-       int                             err, allow_fd ;
-
-       switch (format & SF_FORMAT_SUBMASK)
-       {       case SF_FORMAT_ALAC_16 :
-                       allow_fd = SF_FALSE ;
-                       break ;
-               default :
-                       allow_fd = SF_TRUE ;
-                       break ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.channels         = 1 ;
-       sfinfo.frames           = 0 ;
-       sfinfo.format           = format ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-       /* Set up the chunk to write. */
-       memset (&chunk_info, 0, sizeof (chunk_info)) ;
-       snprintf (chunk_info.id, sizeof (chunk_info.id), "Test") ;
-       chunk_info.id_size = 4 ;
-       chunk_info.data = strdup (testdata) ;
-       chunk_info.datalen = strlen (chunk_info.data) ;
-
-       length_before = chunk_info.datalen ;
-
-       err = sf_set_chunk (file, &chunk_info) ;
-       exit_if_true (
-               err != SF_ERR_NO_ERROR,
-               "\n\nLine %d : sf_set_chunk returned for testdata '%s' : %s\n\n", __LINE__, testdata, sf_error_number (err)
-               ) ;
-
-       memset (chunk_info.data, 0, chunk_info.datalen) ;
-       free (chunk_info.data) ;
-
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-       memset (&chunk_info, 0, sizeof (chunk_info)) ;
-       snprintf (chunk_info.id, sizeof (chunk_info.id), "Test") ;
-       chunk_info.id_size = 4 ;
-
-       iterator = sf_get_chunk_iterator (file, &chunk_info) ;
-       err = sf_get_chunk_size (iterator, &chunk_info) ;
-       exit_if_true (
-               err != SF_ERR_NO_ERROR,
-               "\n\nLine %d : sf_get_chunk_size returned for testdata '%s' : %s\n\n", __LINE__, testdata, sf_error_number (err)
-               ) ;
-
-       exit_if_true (
-               length_before > chunk_info.datalen || chunk_info.datalen - length_before > 4,
-               "\n\nLine %d : testdata '%s' : Bad chunk length %u (previous length %u)\n\n", __LINE__, testdata, chunk_info.datalen, length_before
-               ) ;
-
-       chunk_info.data = malloc (chunk_info.datalen) ;
-       err = sf_get_chunk_data (iterator, &chunk_info) ;
-       exit_if_true (
-               err != SF_ERR_NO_ERROR,
-               "\n\nLine %d : sf_get_chunk_size returned for testdata '%s' : %s\n\n", __LINE__, testdata, sf_error_number (err)
-               ) ;
-
-       exit_if_true (
-               memcmp (testdata, chunk_info.data, length_before),
-               "\n\nLine %d : Data compare failed.\n    %s\n    %s\n\n", __LINE__, testdata, (char*) chunk_info.data
-               ) ;
-
-       free (chunk_info.data) ;
-
-       sf_close (file) ;
-       unlink (filename) ;
-} /* chunk_test_helper */
-
-static void
-multichunk_test_helper (const char *filename, int format, const char * testdata [], size_t testdata_len)
-{      SNDFILE                 *file ;
-       SF_INFO                 sfinfo ;
-       SF_CHUNK_INFO   chunk_info ;
-       SF_CHUNK_ITERATOR * iterator ;
-       uint32_t                length_before [testdata_len] ;
-       int                             err, allow_fd ;
-       size_t                  i ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.channels         = 1 ;
-       sfinfo.frames           = 0 ;
-       sfinfo.format           = format ;
-
-       switch (format & SF_FORMAT_SUBMASK)
-       {       case SF_FORMAT_ALAC_16 :
-                       allow_fd = SF_FALSE ;
-                       break ;
-               default :
-                       allow_fd = SF_TRUE ;
-                       break ;
-               } ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-       /* Set up the chunk to write. */
-       for (i = 0 ; i < testdata_len ; i++)
-       {       memset (&chunk_info, 0, sizeof (chunk_info)) ;
-               snprintf (chunk_info.id, sizeof (chunk_info.id), "Test") ;
-               chunk_info.id_size = 4 ;
-
-               chunk_info.data = strdup (testdata [i]) ;
-               chunk_info.datalen = strlen (chunk_info.data) ;
-
-               length_before [i] = chunk_info.datalen ;
-
-               err = sf_set_chunk (file, &chunk_info) ;
-               exit_if_true (
-                       err != SF_ERR_NO_ERROR,
-                       "\n\nLine %d : sf_set_chunk returned for testdata[%d] '%s' : %s\n\n", __LINE__, (int) i, testdata [i], sf_error_number (err)
-                       ) ;
-
-               memset (chunk_info.data, 0, chunk_info.datalen) ;
-               free (chunk_info.data) ;
-       }
-
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-       memset (&chunk_info, 0, sizeof (chunk_info)) ;
-       snprintf (chunk_info.id, sizeof (chunk_info.id), "Test") ;
-       chunk_info.id_size = 4 ;
-
-       iterator = sf_get_chunk_iterator (file, &chunk_info) ;
-
-       i = 0 ;
-       while (iterator)
-       {       memset (&chunk_info, 0, sizeof (chunk_info)) ;
-               err = sf_get_chunk_size (iterator, &chunk_info) ;
-               exit_if_true (
-                       i > testdata_len,
-                       "\n\nLine %d : iterated to chunk #%d, but only %d chunks have been written\n\n", __LINE__, (int) i, (int) testdata_len
-                       ) ;
-
-               exit_if_true (
-                       err != SF_ERR_NO_ERROR,
-                       "\n\nLine %d : sf_get_chunk_size returned for testdata[%d] '%s' : %s\n\n", __LINE__, (int) i, testdata [i], sf_error_number (err)
-                       ) ;
-
-               exit_if_true (
-                       length_before [i] > chunk_info.datalen || chunk_info.datalen - length_before [i] > 4,
-                       "\n\nLine %d : testdata[%d] '%s' : Bad chunk length %u (previous length %u)\n\n", __LINE__, (int) i, testdata [i], chunk_info.datalen, length_before [i]
-                       ) ;
-
-               chunk_info.data = malloc (chunk_info.datalen) ;
-               err = sf_get_chunk_data (iterator, &chunk_info) ;
-               exit_if_true (
-                       err != SF_ERR_NO_ERROR,
-                       "\n\nLine %d : sf_get_chunk_size returned for testdata[%d] '%s' : %s\n\n", __LINE__, (int) i, testdata [i], sf_error_number (err)
-                       ) ;
-
-               exit_if_true (
-                       4 != chunk_info.id_size,
-                       "\n\nLine %d : testdata[%d] : Bad ID length %u (previous length %u)\n\n", __LINE__, (int) i, chunk_info.id_size, 4
-                       ) ;
-               exit_if_true (
-                       memcmp ("Test", chunk_info.id, 4),
-                       "\n\nLine %d : ID compare failed at %d.\n    %s\n    %s\n\n", __LINE__, (int) i, "Test", (char*) chunk_info.id
-                       ) ;
-
-               exit_if_true (
-                       memcmp (testdata [i], chunk_info.data, length_before [i]),
-                       "\n\nLine %d : Data compare failed at %d.\n    %s\n    %s\n\n", __LINE__, (int) i, testdata [i], (char*) chunk_info.data
-                       ) ;
-
-               free (chunk_info.data) ;
-               iterator = sf_next_chunk_iterator (iterator) ;
-               i++ ;
-       }
-
-       sf_close (file) ;
-       unlink (filename) ;
-} /* multichunk_test_helper */
-
-
-static void
-chunk_test (const char *filename, int format)
-{      const char*             testdata [] =
-       {       "There can be only one.", "", "A", "AB", "ABC", "ABCD", "ABCDE" } ;
-       uint32_t k ;
-
-       print_test_name (__func__, filename) ;
-
-       for (k = 0 ; k < ARRAY_LEN (testdata) ; k++)
-               chunk_test_helper (filename, format, testdata [k]) ;
-
-       multichunk_test_helper (filename, format, testdata, ARRAY_LEN (testdata)) ;
-
-       puts ("ok") ;
-} /* chunk_test */
diff --git a/libs/libsndfile/tests/command_test.c b/libs/libsndfile/tests/command_test.c
deleted file mode 100644 (file)
index 9e6bfd4..0000000
+++ /dev/null
@@ -1,1570 +0,0 @@
-/*
-** Copyright (C) 2001-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <inttypes.h>
-#include <string.h>
-#include <time.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <math.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define        BUFFER_LEN              (1 << 10)
-#define LOG_BUFFER_SIZE        1024
-
-static void    float_norm_test                 (const char *filename) ;
-static void    double_norm_test                (const char *filename) ;
-static void    format_tests                    (void) ;
-static void    calc_peak_test                  (int filetype, const char *filename) ;
-static void    truncate_test                   (const char *filename, int filetype) ;
-static void    instrument_test                 (const char *filename, int filetype) ;
-static void    channel_map_test                (const char *filename, int filetype) ;
-static void    current_sf_info_test    (const char *filename) ;
-static void    raw_needs_endswap_test  (const char *filename, int filetype) ;
-
-static void    broadcast_test                  (const char *filename, int filetype) ;
-static void    broadcast_rdwr_test             (const char *filename, int filetype) ;
-static void    broadcast_coding_history_test   (const char *filename) ;
-static void    broadcast_coding_history_size   (const char *filename) ;
-
-/* Cart Chunk tests */
-static void    cart_test                       (const char *filename, int filetype) ;
-static void    cart_rdwr_test                  (const char *filename, int filetype) ;
-
-/* Force the start of this buffer to be double aligned. Sparc-solaris will
-** choke if its not.
-*/
-
-static int             int_data        [BUFFER_LEN] ;
-static float   float_data      [BUFFER_LEN] ;
-static double  double_data     [BUFFER_LEN] ;
-
-int
-main (int argc, char *argv [])
-{      int             do_all = 0 ;
-       int             test_count = 0 ;
-
-       if (argc != 2)
-       {       printf ("Usage : %s <test>\n", argv [0]) ;
-               printf ("    Where <test> is one of the following:\n") ;
-               printf ("           ver     - test sf_command (SFC_GETLIB_VERSION)\n") ;
-               printf ("           norm    - test floating point normalisation\n") ;
-               printf ("           format  - test format string commands\n") ;
-               printf ("           peak    - test peak calculation\n") ;
-               printf ("           trunc   - test file truncation\n") ;
-               printf ("           inst    - test set/get of SF_INSTRUMENT.\n") ;
-               printf ("           chanmap - test set/get of channel map data..\n") ;
-               printf ("           bext    - test set/get of SF_BROADCAST_INFO.\n") ;
-               printf ("           bextch  - test set/get of SF_BROADCAST_INFO coding_history.\n") ;
-               printf ("           cart    - test set/get of SF_CART_INFO.\n") ;
-               printf ("           rawend  - test SFC_RAW_NEEDS_ENDSWAP.\n") ;
-               printf ("           all     - perform all tests\n") ;
-               exit (1) ;
-               } ;
-
-       do_all = ! strcmp (argv [1], "all") ;
-
-       if (do_all || strcmp (argv [1], "ver") == 0)
-       {       char buffer [128] ;
-
-               print_test_name ("version_test", "(none)") ;
-               buffer [0] = 0 ;
-               sf_command (NULL, SFC_GET_LIB_VERSION, buffer, sizeof (buffer)) ;
-               if (strlen (buffer) < 1)
-               {       printf ("Line %d: could not retrieve lib version.\n", __LINE__) ;
-                       exit (1) ;
-                       } ;
-               puts ("ok") ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "norm") == 0)
-       {       /*      Preliminary float/double normalisation tests. More testing
-               **      is done in the program 'floating_point_test'.
-               */
-               float_norm_test         ("float.wav") ;
-               double_norm_test        ("double.wav") ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "peak") == 0)
-       {       calc_peak_test (SF_ENDIAN_BIG           | SF_FORMAT_RAW, "be-peak.raw") ;
-               calc_peak_test (SF_ENDIAN_LITTLE        | SF_FORMAT_RAW, "le-peak.raw") ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "format"))
-       {       format_tests () ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "trunc") == 0)
-       {       truncate_test ("truncate.raw", SF_FORMAT_RAW | SF_FORMAT_PCM_32) ;
-               truncate_test ("truncate.au" , SF_FORMAT_AU | SF_FORMAT_PCM_16) ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "inst") == 0)
-       {       instrument_test ("instrument.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-               instrument_test ("instrument.aiff" , SF_FORMAT_AIFF | SF_FORMAT_PCM_24) ;
-               /*-instrument_test ("instrument.xi", SF_FORMAT_XI | SF_FORMAT_DPCM_16) ;-*/
-               test_count ++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "current_sf_info") == 0)
-       {       current_sf_info_test ("current.wav") ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "bext") == 0)
-       {       broadcast_test ("broadcast.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-               broadcast_rdwr_test     ("broadcast.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-
-               broadcast_test ("broadcast.wavex", SF_FORMAT_WAVEX | SF_FORMAT_PCM_16) ;
-               broadcast_rdwr_test     ("broadcast.wavex", SF_FORMAT_WAVEX | SF_FORMAT_PCM_16) ;
-
-               broadcast_test ("broadcast.rf64", SF_FORMAT_RF64 | SF_FORMAT_PCM_16) ;
-               broadcast_rdwr_test     ("broadcast.rf64", SF_FORMAT_RF64 | SF_FORMAT_PCM_16) ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "cart") == 0)
-       {       cart_test ("cart.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-               cart_rdwr_test ("cart.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-               cart_test ("cart.rf64", SF_FORMAT_RF64 | SF_FORMAT_PCM_16) ;
-               cart_rdwr_test ("cart.rf64", SF_FORMAT_RF64 | SF_FORMAT_PCM_16) ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "bextch") == 0)
-       {       broadcast_coding_history_test ("coding_history.wav") ;
-               broadcast_coding_history_size ("coding_hist_size.wav") ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "chanmap") == 0)
-       {       channel_map_test ("chanmap.wavex", SF_FORMAT_WAVEX | SF_FORMAT_PCM_16) ;
-               channel_map_test ("chanmap.rf64", SF_FORMAT_RF64 | SF_FORMAT_PCM_16) ;
-               channel_map_test ("chanmap.aifc" , SF_FORMAT_AIFF | SF_FORMAT_PCM_16) ;
-               channel_map_test ("chanmap.caf" , SF_FORMAT_CAF | SF_FORMAT_PCM_16) ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "rawend") == 0)
-       {       raw_needs_endswap_test ("raw_end.wav", SF_FORMAT_WAV) ;
-               raw_needs_endswap_test ("raw_end.wavex", SF_FORMAT_WAVEX) ;
-               raw_needs_endswap_test ("raw_end.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV) ;
-               raw_needs_endswap_test ("raw_end.aiff", SF_FORMAT_AIFF) ;
-               raw_needs_endswap_test ("raw_end.aiff_le", SF_ENDIAN_LITTLE | SF_FORMAT_AIFF) ;
-               test_count ++ ;
-               } ;
-
-       if (test_count == 0)
-       {       printf ("Mono : ************************************\n") ;
-               printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-               printf ("Mono : ************************************\n") ;
-               return 1 ;
-               } ;
-
-       return 0 ;
-} /* main */
-
-/*============================================================================================
-**     Here are the test functions.
-*/
-
-static void
-float_norm_test (const char *filename)
-{      SNDFILE                 *file ;
-       SF_INFO                 sfinfo ;
-       unsigned int    k ;
-
-       print_test_name ("float_norm_test", filename) ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.format           = (SF_FORMAT_RAW | SF_FORMAT_PCM_16) ;
-       sfinfo.channels         = 1 ;
-       sfinfo.frames           = BUFFER_LEN ;
-
-       /* Create float_data with all values being less than 1.0. */
-       for (k = 0 ; k < BUFFER_LEN / 2 ; k++)
-               float_data [k] = (k + 5) / (2.0 * BUFFER_LEN) ;
-       for (k = BUFFER_LEN / 2 ; k < BUFFER_LEN ; k++)
-               float_data [k] = (k + 5) ;
-
-       if (! (file = sf_open (filename, SFM_WRITE, &sfinfo)))
-       {       printf ("Line %d: sf_open_write failed with error : ", __LINE__) ;
-               fflush (stdout) ;
-               puts (sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       /* Normalisation is on by default so no need to do anything here. */
-
-       if ((k = sf_write_float (file, float_data, BUFFER_LEN / 2)) != BUFFER_LEN / 2)
-       {       printf ("Line %d: sf_write_float failed with short write (%d ->%d)\n", __LINE__, BUFFER_LEN, k) ;
-               exit (1) ;
-               } ;
-
-       /* Turn normalisation off. */
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-       if ((k = sf_write_float (file, float_data + BUFFER_LEN / 2, BUFFER_LEN / 2)) != BUFFER_LEN / 2)
-       {       printf ("Line %d: sf_write_float failed with short write (%d ->%d)\n", __LINE__, BUFFER_LEN, k) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       /* sfinfo struct should still contain correct data. */
-       if (! (file = sf_open (filename, SFM_READ, &sfinfo)))
-       {       printf ("Line %d: sf_open_read failed with error : ", __LINE__) ;
-               fflush (stdout) ;
-               puts (sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.format != (SF_FORMAT_RAW | SF_FORMAT_PCM_16))
-       {       printf ("Line %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, (SF_FORMAT_RAW | SF_FORMAT_PCM_16), sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != BUFFER_LEN)
-       {       printf ("\n\nLine %d: Incorrect number of.frames in file. (%d => %" PRId64 ")\n", __LINE__, BUFFER_LEN, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("Line %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       /* Read float_data and check that it is normalised (ie default). */
-       if ((k = sf_read_float (file, float_data, BUFFER_LEN)) != BUFFER_LEN)
-       {       printf ("\n\nLine %d: sf_read_float failed with short read (%d ->%d)\n", __LINE__, BUFFER_LEN, k) ;
-               exit (1) ;
-               } ;
-
-       for (k = 0 ; k < BUFFER_LEN ; k++)
-               if (float_data [k] >= 1.0)
-               {       printf ("\n\nLine %d: float_data [%d] == %f which is greater than 1.0\n", __LINE__, k, float_data [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to start of file, turn normalisation off, read float_data and check again. */
-       sf_seek (file, 0, SEEK_SET) ;
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-       if ((k = sf_read_float (file, float_data, BUFFER_LEN)) != BUFFER_LEN)
-       {       printf ("\n\nLine %d: sf_read_float failed with short read (%d ->%d)\n", __LINE__, BUFFER_LEN, k) ;
-               exit (1) ;
-               } ;
-
-       for (k = 0 ; k < BUFFER_LEN ; k++)
-               if (float_data [k] < 1.0)
-               {       printf ("\n\nLine %d: float_data [%d] == %f which is less than 1.0\n", __LINE__, k, float_data [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to start of file, turn normalisation on, read float_data and do final check. */
-       sf_seek (file, 0, SEEK_SET) ;
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_TRUE) ;
-
-       if ((k = sf_read_float (file, float_data, BUFFER_LEN)) != BUFFER_LEN)
-       {       printf ("\n\nLine %d: sf_read_float failed with short read (%d ->%d)\n", __LINE__, BUFFER_LEN, k) ;
-               exit (1) ;
-               } ;
-
-       for (k = 0 ; k < BUFFER_LEN ; k++)
-               if (float_data [k] > 1.0)
-               {       printf ("\n\nLine %d: float_data [%d] == %f which is greater than 1.0\n", __LINE__, k, float_data [k]) ;
-                       exit (1) ;
-                       } ;
-
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-
-       printf ("ok\n") ;
-} /* float_norm_test */
-
-static void
-double_norm_test (const char *filename)
-{      SNDFILE                 *file ;
-       SF_INFO                 sfinfo ;
-       unsigned int    k ;
-
-       print_test_name ("double_norm_test", filename) ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.format           = (SF_FORMAT_RAW | SF_FORMAT_PCM_16) ;
-       sfinfo.channels         = 1 ;
-       sfinfo.frames           = BUFFER_LEN ;
-
-       /* Create double_data with all values being less than 1.0. */
-       for (k = 0 ; k < BUFFER_LEN / 2 ; k++)
-               double_data [k] = (k + 5) / (2.0 * BUFFER_LEN) ;
-       for (k = BUFFER_LEN / 2 ; k < BUFFER_LEN ; k++)
-               double_data [k] = (k + 5) ;
-
-       if (! (file = sf_open (filename, SFM_WRITE, &sfinfo)))
-       {       printf ("Line %d: sf_open_write failed with error : ", __LINE__) ;
-               fflush (stdout) ;
-               puts (sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       /* Normailsation is on by default so no need to do anything here. */
-       /*-sf_command (file, "set-norm-double", "true", 0) ;-*/
-
-       if ((k = sf_write_double (file, double_data, BUFFER_LEN / 2)) != BUFFER_LEN / 2)
-       {       printf ("Line %d: sf_write_double failed with short write (%d ->%d)\n", __LINE__, BUFFER_LEN, k) ;
-               exit (1) ;
-               } ;
-
-       /* Turn normalisation off. */
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-       if ((k = sf_write_double (file, double_data + BUFFER_LEN / 2, BUFFER_LEN / 2)) != BUFFER_LEN / 2)
-       {       printf ("Line %d: sf_write_double failed with short write (%d ->%d)\n", __LINE__, BUFFER_LEN, k) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       if (! (file = sf_open (filename, SFM_READ, &sfinfo)))
-       {       printf ("Line %d: sf_open_read failed with error : ", __LINE__) ;
-               fflush (stdout) ;
-               puts (sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.format != (SF_FORMAT_RAW | SF_FORMAT_PCM_16))
-       {       printf ("Line %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, (SF_FORMAT_RAW | SF_FORMAT_PCM_16), sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != BUFFER_LEN)
-       {       printf ("\n\nLine %d: Incorrect number of.frames in file. (%d => %" PRId64 ")\n", __LINE__, BUFFER_LEN, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("Line %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       /* Read double_data and check that it is normalised (ie default). */
-       if ((k = sf_read_double (file, double_data, BUFFER_LEN)) != BUFFER_LEN)
-       {       printf ("\n\nLine %d: sf_read_double failed with short read (%d ->%d)\n", __LINE__, BUFFER_LEN, k) ;
-               exit (1) ;
-               } ;
-
-       for (k = 0 ; k < BUFFER_LEN ; k++)
-               if (double_data [k] >= 1.0)
-               {       printf ("\n\nLine %d: double_data [%d] == %f which is greater than 1.0\n", __LINE__, k, double_data [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to start of file, turn normalisation off, read double_data and check again. */
-       sf_seek (file, 0, SEEK_SET) ;
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-       if ((k = sf_read_double (file, double_data, BUFFER_LEN)) != BUFFER_LEN)
-       {       printf ("\n\nLine %d: sf_read_double failed with short read (%d ->%d)\n", __LINE__, BUFFER_LEN, k) ;
-               exit (1) ;
-               } ;
-
-       for (k = 0 ; k < BUFFER_LEN ; k++)
-               if (double_data [k] < 1.0)
-               {       printf ("\n\nLine %d: double_data [%d] == %f which is less than 1.0\n", __LINE__, k, double_data [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to start of file, turn normalisation on, read double_data and do final check. */
-       sf_seek (file, 0, SEEK_SET) ;
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_TRUE) ;
-
-       if ((k = sf_read_double (file, double_data, BUFFER_LEN)) != BUFFER_LEN)
-       {       printf ("\n\nLine %d: sf_read_double failed with short read (%d ->%d)\n", __LINE__, BUFFER_LEN, k) ;
-               exit (1) ;
-               } ;
-
-       for (k = 0 ; k < BUFFER_LEN ; k++)
-               if (double_data [k] > 1.0)
-               {       printf ("\n\nLine %d: double_data [%d] == %f which is greater than 1.0\n", __LINE__, k, double_data [k]) ;
-                       exit (1) ;
-                       } ;
-
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-
-       printf ("ok\n") ;
-} /* double_norm_test */
-
-static void
-format_tests   (void)
-{      SF_FORMAT_INFO format_info ;
-       SF_INFO         sfinfo ;
-       const char      *last_name ;
-       int             k, count ;
-
-       print_test_name ("format_tests", "(null)") ;
-
-       /* Clear out SF_INFO struct and set channels > 0. */
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.channels = 1 ;
-
-       /* First test simple formats. */
-
-       sf_command (NULL, SFC_GET_SIMPLE_FORMAT_COUNT, &count, sizeof (int)) ;
-
-       if (count < 0 || count > 30)
-       {       printf ("Line %d: Weird count.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       format_info.format = 0 ;
-       sf_command (NULL, SFC_GET_SIMPLE_FORMAT, &format_info, sizeof (format_info)) ;
-
-       last_name = format_info.name ;
-       for (k = 1 ; k < count ; k ++)
-       {       format_info.format = k ;
-               sf_command (NULL, SFC_GET_SIMPLE_FORMAT, &format_info, sizeof (format_info)) ;
-               if (strcmp (last_name, format_info.name) >= 0)
-               {       printf ("\n\nLine %d: format names out of sequence `%s' < `%s'.\n", __LINE__, last_name, format_info.name) ;
-                       exit (1) ;
-                       } ;
-               sfinfo.format = format_info.format ;
-
-               if (! sf_format_check (&sfinfo))
-               {       printf ("\n\nLine %d: sf_format_check failed.\n", __LINE__) ;
-                       printf ("        Name : %s\n", format_info.name) ;
-                       printf ("        Format      : 0x%X\n", sfinfo.format) ;
-                       printf ("        Channels    : 0x%X\n", sfinfo.channels) ;
-                       printf ("        Sample Rate : 0x%X\n", sfinfo.samplerate) ;
-                       exit (1) ;
-                       } ;
-               last_name = format_info.name ;
-               } ;
-       format_info.format = 666 ;
-       sf_command (NULL, SFC_GET_SIMPLE_FORMAT, &format_info, sizeof (format_info)) ;
-
-       /* Now test major formats. */
-       sf_command (NULL, SFC_GET_FORMAT_MAJOR_COUNT, &count, sizeof (int)) ;
-
-       if (count < 0 || count > 30)
-       {       printf ("Line %d: Weird count.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       format_info.format = 0 ;
-       sf_command (NULL, SFC_GET_FORMAT_MAJOR, &format_info, sizeof (format_info)) ;
-
-       last_name = format_info.name ;
-       for (k = 1 ; k < count ; k ++)
-       {       format_info.format = k ;
-               sf_command (NULL, SFC_GET_FORMAT_MAJOR, &format_info, sizeof (format_info)) ;
-               if (strcmp (last_name, format_info.name) >= 0)
-               {       printf ("\n\nLine %d: format names out of sequence (%d) `%s' < `%s'.\n", __LINE__, k, last_name, format_info.name) ;
-                       exit (1) ;
-                       } ;
-
-               last_name = format_info.name ;
-               } ;
-       format_info.format = 666 ;
-       sf_command (NULL, SFC_GET_FORMAT_MAJOR, &format_info, sizeof (format_info)) ;
-
-       /* Now test subtype formats. */
-       sf_command (NULL, SFC_GET_FORMAT_SUBTYPE_COUNT, &count, sizeof (int)) ;
-
-       if (count < 0 || count > 30)
-       {       printf ("Line %d: Weird count.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       format_info.format = 0 ;
-       sf_command (NULL, SFC_GET_FORMAT_SUBTYPE, &format_info, sizeof (format_info)) ;
-
-       last_name = format_info.name ;
-       for (k = 1 ; k < count ; k ++)
-       {       format_info.format = k ;
-               sf_command (NULL, SFC_GET_FORMAT_SUBTYPE, &format_info, sizeof (format_info)) ;
-               } ;
-       format_info.format = 666 ;
-       sf_command (NULL, SFC_GET_FORMAT_SUBTYPE, &format_info, sizeof (format_info)) ;
-
-
-       printf ("ok\n") ;
-} /* format_tests */
-
-static void
-calc_peak_test (int filetype, const char *filename)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     k, format ;
-       double          peak ;
-
-       print_test_name ("calc_peak_test", filename) ;
-
-       format = (filetype | SF_FORMAT_PCM_16) ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.format           = format ;
-       sfinfo.channels         = 1 ;
-       sfinfo.frames           = BUFFER_LEN ;
-
-       /* Create double_data with max value of 0.5. */
-       for (k = 0 ; k < BUFFER_LEN ; k++)
-               double_data [k] = (k + 1) / (2.0 * BUFFER_LEN) ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("Line %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != BUFFER_LEN)
-       {       printf ("\n\nLine %d: Incorrect number of.frames in file. (%d => %" PRId64 ")\n", __LINE__, BUFFER_LEN, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("Line %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sf_command (file, SFC_CALC_SIGNAL_MAX, &peak, sizeof (peak)) ;
-       if (fabs (peak - (1 << 14)) > 1.0)
-       {       printf ("Line %d : Peak value should be %d (is %f).\n", __LINE__, (1 << 14), peak) ;
-               exit (1) ;
-               } ;
-
-       sf_command (file, SFC_CALC_NORM_SIGNAL_MAX, &peak, sizeof (peak)) ;
-       if (fabs (peak - 0.5) > 4e-5)
-       {       printf ("Line %d : Peak value should be %f (is %f).\n", __LINE__, 0.5, peak) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       format = (filetype | SF_FORMAT_FLOAT) ;
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.format           = format ;
-       sfinfo.channels         = 1 ;
-       sfinfo.frames           = BUFFER_LEN ;
-
-       /* Create double_data with max value of 0.5. */
-       for (k = 0 ; k < BUFFER_LEN ; k++)
-               double_data [k] = (k + 1) / (2.0 * BUFFER_LEN) ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("Line %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != BUFFER_LEN)
-       {       printf ("\n\nLine %d: Incorrect number of.frames in file. (%d => %" PRId64 ")\n", __LINE__, BUFFER_LEN, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("Line %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sf_command (file, SFC_CALC_SIGNAL_MAX, &peak, sizeof (peak)) ;
-       if (fabs (peak - 0.5) > 1e-5)
-       {       printf ("Line %d : Peak value should be %f (is %f).\n", __LINE__, 0.5, peak) ;
-               exit (1) ;
-               } ;
-
-       sf_command (file, SFC_CALC_NORM_SIGNAL_MAX, &peak, sizeof (peak)) ;
-       if (fabs (peak - 0.5) > 1e-5)
-       {       printf ("Line %d : Peak value should be %f (is %f).\n", __LINE__, 0.5, peak) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-
-       printf ("ok\n") ;
-} /* calc_peak_test */
-
-static void
-truncate_test (const char *filename, int filetype)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       sf_count_t      len ;
-
-       print_test_name ("truncate_test", filename) ;
-
-       sfinfo.samplerate       = 11025 ;
-       sfinfo.format           = filetype ;
-       sfinfo.channels         = 2 ;
-
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-
-       test_write_int_or_die (file, 0, int_data, BUFFER_LEN, __LINE__) ;
-
-       len = 100 ;
-       if (sf_command (file, SFC_FILE_TRUNCATE, &len, sizeof (len)))
-       {       printf ("Line %d: sf_command (SFC_FILE_TRUNCATE) returned error.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       test_seek_or_die (file, 0, SEEK_CUR, len, 2, __LINE__) ;
-       test_seek_or_die (file, 0, SEEK_END, len, 2, __LINE__) ;
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* truncate_test */
-
-/*------------------------------------------------------------------------------
-*/
-
-static void
-instrumet_rw_test (const char *filename)
-{      SNDFILE *sndfile ;
-       SF_INFO sfinfo ;
-       SF_INSTRUMENT inst ;
-       memset (&sfinfo, 0, sizeof (SF_INFO)) ;
-
-       sndfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_FALSE, __LINE__) ;
-
-       if (sf_command (sndfile, SFC_GET_INSTRUMENT, &inst, sizeof (inst)) == SF_TRUE)
-       {       inst.basenote = 22 ;
-
-               if (sf_command (sndfile, SFC_SET_INSTRUMENT, &inst, sizeof (inst)) == SF_TRUE)
-                       printf ("Sucess: [%s] updated\n", filename) ;
-               else
-                       printf ("Error: SFC_SET_INSTRUMENT on [%s] [%s]\n", filename, sf_strerror (sndfile)) ;
-               }
-       else
-               printf ("Error: SFC_GET_INSTRUMENT on [%s] [%s]\n", filename, sf_strerror (sndfile)) ;
-
-
-       if (sf_command (sndfile, SFC_UPDATE_HEADER_NOW, NULL, 0) != 0)
-               printf ("Error: SFC_UPDATE_HEADER_NOW on [%s] [%s]\n", filename, sf_strerror (sndfile)) ;
-
-       sf_write_sync (sndfile) ;
-       sf_close (sndfile) ;
-
-       return ;
-} /* instrumet_rw_test */
-
-static void
-instrument_test (const char *filename, int filetype)
-{      static SF_INSTRUMENT write_inst =
-       {       2,              /* gain */
-               3,              /* detune */
-               4,              /* basenote */
-               5, 6,   /* key low and high */
-               7, 8,   /* velocity low and high */
-               2,              /* loop_count */
-               {       {       801, 2, 3, 0 },
-                       {       801, 3, 4, 0 },
-               }
-       } ;
-       SF_INSTRUMENT read_inst ;
-       SNDFILE *file ;
-       SF_INFO sfinfo ;
-
-       print_test_name ("instrument_test", filename) ;
-
-       sfinfo.samplerate       = 11025 ;
-       sfinfo.format           = filetype ;
-       sfinfo.channels         = 1 ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       if (sf_command (file, SFC_SET_INSTRUMENT, &write_inst, sizeof (write_inst)) == SF_FALSE)
-       {       printf ("\n\nLine %d : sf_command (SFC_SET_INSTRUMENT) failed.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-       test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&read_inst, 0, sizeof (read_inst)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       if (sf_command (file, SFC_GET_INSTRUMENT, &read_inst, sizeof (read_inst)) == SF_FALSE)
-       {       printf ("\n\nLine %d : sf_command (SFC_GET_INSTRUMENT) failed.\n\n", __LINE__) ;
-               exit (1) ;
-               return ;
-               } ;
-       check_log_buffer_or_die (file, __LINE__) ;
-       sf_close (file) ;
-
-       if ((filetype & SF_FORMAT_TYPEMASK) == SF_FORMAT_WAV)
-       {       /*
-               **      For all the fields that WAV doesn't support, modify the
-               **      write_inst struct to hold the default value that the WAV
-               **      module should hold.
-               */
-               write_inst.detune = 0 ;
-               write_inst.key_lo = write_inst.velocity_lo = 0 ;
-               write_inst.key_hi = write_inst.velocity_hi = 127 ;
-               write_inst.gain = 1 ;
-               } ;
-
-       if ((filetype & SF_FORMAT_TYPEMASK) == SF_FORMAT_XI)
-       {       /*
-               **      For all the fields that XI doesn't support, modify the
-               **      write_inst struct to hold the default value that the XI
-               **      module should hold.
-               */
-               write_inst.basenote = 0 ;
-               write_inst.detune = 0 ;
-               write_inst.key_lo = write_inst.velocity_lo = 0 ;
-               write_inst.key_hi = write_inst.velocity_hi = 127 ;
-               write_inst.gain = 1 ;
-               } ;
-
-       if (memcmp (&write_inst, &read_inst, sizeof (write_inst)) != 0)
-       {       printf ("\n\nLine %d : instrument comparison failed.\n\n", __LINE__) ;
-               printf ("W  Base Note : %u\n"
-                       "   Detune    : %u\n"
-                       "   Low  Note : %u\tHigh Note : %u\n"
-                       "   Low  Vel. : %u\tHigh Vel. : %u\n"
-                       "   Gain      : %d\tCount     : %d\n"
-                       "   mode      : %d\n"
-                       "   start     : %d\tend       : %d\tcount  :%d\n"
-                       "   mode      : %d\n"
-                       "   start     : %d\tend       : %d\tcount  :%d\n\n",
-                       write_inst.basenote,
-                       write_inst.detune,
-                       write_inst.key_lo, write_inst.key_hi,
-                       write_inst.velocity_lo, write_inst.velocity_hi,
-                       write_inst.gain, write_inst.loop_count,
-                       write_inst.loops [0].mode, write_inst.loops [0].start,
-                       write_inst.loops [0].end, write_inst.loops [0].count,
-                       write_inst.loops [1].mode, write_inst.loops [1].start,
-                       write_inst.loops [1].end, write_inst.loops [1].count) ;
-               printf ("R  Base Note : %u\n"
-                       "   Detune    : %u\n"
-                       "   Low  Note : %u\tHigh Note : %u\n"
-                       "   Low  Vel. : %u\tHigh Vel. : %u\n"
-                       "   Gain      : %d\tCount     : %d\n"
-                       "   mode      : %d\n"
-                       "   start     : %d\tend       : %d\tcount  :%d\n"
-                       "   mode      : %d\n"
-                       "   start     : %d\tend       : %d\tcount  :%d\n\n",
-                       read_inst.basenote,
-                       read_inst.detune,
-                       read_inst.key_lo, read_inst.key_hi,
-                       read_inst.velocity_lo, read_inst.velocity_hi,
-                       read_inst.gain, read_inst.loop_count,
-                       read_inst.loops [0].mode, read_inst.loops [0].start,
-                       read_inst.loops [0].end, read_inst.loops [0].count,
-                       read_inst.loops [1].mode, read_inst.loops [1].start,
-                       read_inst.loops [1].end, read_inst.loops [1].count) ;
-
-               if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_XI)
-                       exit (1) ;
-               } ;
-
-       if (0) instrumet_rw_test (filename) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* instrument_test */
-
-static void
-current_sf_info_test   (const char *filename)
-{      SNDFILE *outfile, *infile ;
-       SF_INFO outinfo, ininfo ;
-
-       print_test_name ("current_sf_info_test", filename) ;
-
-       outinfo.samplerate      = 44100 ;
-       outinfo.format          = (SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-       outinfo.channels        = 1 ;
-       outinfo.frames          = 0 ;
-
-       outfile = test_open_file_or_die (filename, SFM_WRITE, &outinfo, SF_TRUE, __LINE__) ;
-       sf_command (outfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, 0) ;
-
-       exit_if_true (outinfo.frames != 0,
-               "\n\nLine %d : Initial sfinfo.frames is not zero.\n\n", __LINE__
-               ) ;
-
-       test_write_double_or_die (outfile, 0, double_data, BUFFER_LEN, __LINE__) ;
-       sf_command (outfile, SFC_GET_CURRENT_SF_INFO, &outinfo, sizeof (outinfo)) ;
-
-       exit_if_true (outinfo.frames != BUFFER_LEN,
-               "\n\nLine %d : Initial sfinfo.frames (%" PRId64 ") should be %d.\n\n", __LINE__,
-               outinfo.frames, BUFFER_LEN
-               ) ;
-
-       /* Read file making sure no channel map exists. */
-       memset (&ininfo, 0, sizeof (ininfo)) ;
-       infile = test_open_file_or_die (filename, SFM_READ, &ininfo, SF_TRUE, __LINE__) ;
-
-       test_write_double_or_die (outfile, 0, double_data, BUFFER_LEN, __LINE__) ;
-
-       sf_command (infile, SFC_GET_CURRENT_SF_INFO, &ininfo, sizeof (ininfo)) ;
-
-       exit_if_true (ininfo.frames != BUFFER_LEN,
-               "\n\nLine %d : Initial sfinfo.frames (%" PRId64 ") should be %d.\n\n", __LINE__,
-               ininfo.frames, BUFFER_LEN
-               ) ;
-
-       sf_close (outfile) ;
-       sf_close (infile) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* current_sf_info_test */
-
-static void
-broadcast_test (const char *filename, int filetype)
-{      static SF_BROADCAST_INFO bc_write, bc_read ;
-       SNDFILE *file ;
-       SF_INFO sfinfo ;
-       int errors = 0 ;
-
-       print_test_name ("broadcast_test", filename) ;
-
-       sfinfo.samplerate       = 11025 ;
-       sfinfo.format           = filetype ;
-       sfinfo.channels         = 1 ;
-
-       memset (&bc_write, 0, sizeof (bc_write)) ;
-
-       snprintf (bc_write.description, sizeof (bc_write.description), "Test description") ;
-       snprintf (bc_write.originator, sizeof (bc_write.originator), "Test originator") ;
-       snprintf (bc_write.originator_reference, sizeof (bc_write.originator_reference), "%08x-%08x", (unsigned int) time (NULL), (unsigned int) (~ time (NULL))) ;
-       snprintf (bc_write.origination_date, sizeof (bc_write.origination_date), "%d/%02d/%02d", 2006, 3, 30) ;
-       snprintf (bc_write.origination_time, sizeof (bc_write.origination_time), "%02d:%02d:%02d", 20, 27, 0) ;
-       snprintf (bc_write.umid, sizeof (bc_write.umid), "Some umid") ;
-       bc_write.coding_history_size = 0 ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       if (sf_command (file, SFC_SET_BROADCAST_INFO, &bc_write, sizeof (bc_write)) == SF_FALSE)
-       {       printf ("\n\nLine %d : sf_command (SFC_SET_BROADCAST_INFO) failed.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-       test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&bc_read, 0, sizeof (bc_read)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       if (sf_command (file, SFC_GET_BROADCAST_INFO, &bc_read, sizeof (bc_read)) == SF_FALSE)
-       {       printf ("\n\nLine %d : sf_command (SFC_GET_BROADCAST_INFO) failed.\n\n", __LINE__) ;
-               exit (1) ;
-               return ;
-               } ;
-       check_log_buffer_or_die (file, __LINE__) ;
-       sf_close (file) ;
-
-       if (bc_read.version != 1)
-       {       printf ("\n\nLine %d : Read bad version number %d.\n\n", __LINE__, bc_read.version) ;
-               exit (1) ;
-               return ;
-               } ;
-
-       bc_read.version = bc_write.version = 0 ;
-
-       if (memcmp (bc_write.description, bc_read.description, sizeof (bc_write.description)) != 0)
-       {       printf ("\n\nLine %d : description mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, bc_write.description, bc_read.description) ;
-               errors ++ ;
-               } ;
-
-       if (memcmp (bc_write.originator, bc_read.originator, sizeof (bc_write.originator)) != 0)
-       {       printf ("\n\nLine %d : originator mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, bc_write.originator, bc_read.originator) ;
-               errors ++ ;
-               } ;
-
-       if (memcmp (bc_write.originator_reference, bc_read.originator_reference, sizeof (bc_write.originator_reference)) != 0)
-       {       printf ("\n\nLine %d : originator_reference mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, bc_write.originator_reference, bc_read.originator_reference) ;
-               errors ++ ;
-               } ;
-
-       if (memcmp (bc_write.origination_date, bc_read.origination_date, sizeof (bc_write.origination_date)) != 0)
-       {       printf ("\n\nLine %d : origination_date mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, bc_write.origination_date, bc_read.origination_date) ;
-               errors ++ ;
-               } ;
-
-       if (memcmp (bc_write.origination_time, bc_read.origination_time, sizeof (bc_write.origination_time)) != 0)
-       {       printf ("\n\nLine %d : origination_time mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, bc_write.origination_time, bc_read.origination_time) ;
-               errors ++ ;
-               } ;
-
-       if (memcmp (bc_write.umid, bc_read.umid, sizeof (bc_write.umid)) != 0)
-       {       printf ("\n\nLine %d : umid mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, bc_write.umid, bc_read.umid) ;
-               errors ++ ;
-               } ;
-
-       if (errors)
-               exit (1) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* broadcast_test */
-
-static void
-broadcast_rdwr_test (const char *filename, int filetype)
-{      SF_BROADCAST_INFO binfo ;
-       SNDFILE *file ;
-       SF_INFO sfinfo ;
-       sf_count_t frames ;
-
-       print_test_name (__func__, filename) ;
-
-       create_short_sndfile (filename, filetype, 2) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       memset (&binfo, 0, sizeof (binfo)) ;
-
-       snprintf (binfo.description, sizeof (binfo.description), "Test description") ;
-       snprintf (binfo.originator, sizeof (binfo.originator), "Test originator") ;
-       snprintf (binfo.originator_reference, sizeof (binfo.originator_reference), "%08x-%08x", (unsigned int) time (NULL), (unsigned int) (~ time (NULL))) ;
-       snprintf (binfo.origination_date, sizeof (binfo.origination_date), "%d/%02d/%02d", 2006, 3, 30) ;
-       snprintf (binfo.origination_time, sizeof (binfo.origination_time), "%02d:%02d:%02d", 20, 27, 0) ;
-       snprintf (binfo.umid, sizeof (binfo.umid), "Some umid") ;
-       binfo.coding_history_size = 0 ;
-
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-       frames = sfinfo.frames ;
-       if (sf_command (file, SFC_SET_BROADCAST_INFO, &binfo, sizeof (binfo)) != SF_FALSE)
-       {       printf ("\n\nLine %d : sf_command (SFC_SET_BROADCAST_INFO) should have failed but didn't.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_close (file) ;
-       exit_if_true (frames != sfinfo.frames, "\n\nLine %d : Frame count %" PRId64 " should be %" PRId64 ".\n", __LINE__, sfinfo.frames, frames) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* broadcast_rdwr_test */
-
-static void
-check_coding_history_newlines (const char *filename)
-{      static SF_BROADCAST_INFO bc_write, bc_read ;
-       SNDFILE *file ;
-       SF_INFO sfinfo ;
-       unsigned k ;
-
-       sfinfo.samplerate       = 22050 ;
-       sfinfo.format           = SF_FORMAT_WAV | SF_FORMAT_PCM_16 ;
-       sfinfo.channels         = 1 ;
-
-       memset (&bc_write, 0, sizeof (bc_write)) ;
-
-       snprintf (bc_write.description, sizeof (bc_write.description), "Test description") ;
-       snprintf (bc_write.originator, sizeof (bc_write.originator), "Test originator") ;
-       snprintf (bc_write.originator_reference, sizeof (bc_write.originator_reference), "%08x-%08x", (unsigned int) time (NULL), (unsigned int) (~ time (NULL))) ;
-       snprintf (bc_write.origination_date, sizeof (bc_write.origination_date), "%d/%02d/%02d", 2006, 3, 30) ;
-       snprintf (bc_write.origination_time, sizeof (bc_write.origination_time), "%02d:%02d:%02d", 20, 27, 0) ;
-       snprintf (bc_write.umid, sizeof (bc_write.umid), "Some umid") ;
-       bc_write.coding_history_size = snprintf (bc_write.coding_history, sizeof (bc_write.coding_history), "This has\nUnix\nand\rMac OS9\rline endings.\nLast line") ; ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       if (sf_command (file, SFC_SET_BROADCAST_INFO, &bc_write, sizeof (bc_write)) == SF_FALSE)
-       {       printf ("\n\nLine %d : sf_command (SFC_SET_BROADCAST_INFO) failed.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&bc_read, 0, sizeof (bc_read)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       if (sf_command (file, SFC_GET_BROADCAST_INFO, &bc_read, sizeof (bc_read)) == SF_FALSE)
-       {       printf ("\n\nLine %d : sf_command (SFC_SET_BROADCAST_INFO) failed.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-       check_log_buffer_or_die (file, __LINE__) ;
-       sf_close (file) ;
-
-       if (bc_read.coding_history_size == 0)
-       {       printf ("\n\nLine %d : missing coding history.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (strstr (bc_read.coding_history, "Last line") == NULL)
-       {       printf ("\n\nLine %d : coding history truncated.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       for (k = 1 ; k < bc_read.coding_history_size ; k++)
-       {       if (bc_read.coding_history [k] == '\n' && bc_read.coding_history [k - 1] != '\r')
-               {       printf ("\n\nLine %d : '\\n' without '\\r' before.\n\n", __LINE__) ;
-                       exit (1) ;
-                       } ;
-
-               if (bc_read.coding_history [k] == '\r' && bc_read.coding_history [k + 1] != '\n')
-               {       printf ("\n\nLine %d : '\\r' without '\\n' after.\n\n", __LINE__) ;
-                       exit (1) ;
-                       } ;
-
-               if (bc_read.coding_history [k] == 0 && k < bc_read.coding_history_size - 1)
-               {       printf ("\n\nLine %d : '\\0' within coding history at index %d of %d.\n\n", __LINE__, k, bc_read.coding_history_size) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       return ;
-} /* check_coding_history_newlines */
-
-static void
-broadcast_coding_history_test (const char *filename)
-{      static SF_BROADCAST_INFO bc_write, bc_read ;
-       SNDFILE *file ;
-       SF_INFO sfinfo ;
-       const char *default_history = "A=PCM,F=22050,W=16,M=mono" ;
-       const char *supplied_history =
-                                       "A=PCM,F=44100,W=24,M=mono,T=other\r\n"
-                                       "A=PCM,F=22050,W=16,M=mono,T=yet_another\r\n" ;
-
-       print_test_name ("broadcast_coding_history_test", filename) ;
-
-       sfinfo.samplerate       = 22050 ;
-       sfinfo.format           = SF_FORMAT_WAV | SF_FORMAT_PCM_16 ;
-       sfinfo.channels         = 1 ;
-
-       memset (&bc_write, 0, sizeof (bc_write)) ;
-
-       snprintf (bc_write.description, sizeof (bc_write.description), "Test description") ;
-       snprintf (bc_write.originator, sizeof (bc_write.originator), "Test originator") ;
-       snprintf (bc_write.originator_reference, sizeof (bc_write.originator_reference), "%08x-%08x", (unsigned int) time (NULL), (unsigned int) (~ time (NULL))) ;
-       snprintf (bc_write.origination_date, sizeof (bc_write.origination_date), "%d/%02d/%02d", 2006, 3, 30) ;
-       snprintf (bc_write.origination_time, sizeof (bc_write.origination_time), "%02d:%02d:%02d", 20, 27, 0) ;
-       snprintf (bc_write.umid, sizeof (bc_write.umid), "Some umid") ;
-       /* Coding history will be filled in by the library. */
-       bc_write.coding_history_size = 0 ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       if (sf_command (file, SFC_SET_BROADCAST_INFO, &bc_write, sizeof (bc_write)) == SF_FALSE)
-       {       printf ("\n\nLine %d : sf_command (SFC_SET_BROADCAST_INFO) failed.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&bc_read, 0, sizeof (bc_read)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       if (sf_command (file, SFC_GET_BROADCAST_INFO, &bc_read, sizeof (bc_read)) == SF_FALSE)
-       {       printf ("\n\nLine %d : sf_command (SFC_SET_BROADCAST_INFO) failed.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-       check_log_buffer_or_die (file, __LINE__) ;
-       sf_close (file) ;
-
-       if (bc_read.coding_history_size == 0)
-       {       printf ("\n\nLine %d : missing coding history.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (bc_read.coding_history_size < strlen (default_history) || memcmp (bc_read.coding_history, default_history, strlen (default_history)) != 0)
-       {       printf ("\n\n"
-                               "Line %d : unexpected coding history '%.*s',\n"
-                               "            should be '%s'\n\n", __LINE__, bc_read.coding_history_size, bc_read.coding_history, default_history) ;
-               exit (1) ;
-               } ;
-
-       bc_write.coding_history_size = strlen (supplied_history) ;
-       bc_write.coding_history_size = snprintf (bc_write.coding_history, sizeof (bc_write.coding_history), "%s", supplied_history) ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       if (sf_command (file, SFC_SET_BROADCAST_INFO, &bc_write, sizeof (bc_write)) == SF_FALSE)
-       {       printf ("\n\nLine %d : sf_command (SFC_SET_BROADCAST_INFO) failed.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&bc_read, 0, sizeof (bc_read)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       if (sf_command (file, SFC_GET_BROADCAST_INFO, &bc_read, sizeof (bc_read)) == SF_FALSE)
-       {       printf ("\n\nLine %d : sf_command (SFC_SET_BROADCAST_INFO) failed.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-       sf_close (file) ;
-
-       if (strstr (bc_read.coding_history, supplied_history) != bc_read.coding_history)
-       {       printf ("\n\nLine %d : unexpected coding history :\n"
-                               "----------------------------------------------------\n%s"
-                               "----------------------------------------------------\n"
-                               "should be this :\n"
-                               "----------------------------------------------------\n%s"
-                               "----------------------------------------------------\n"
-                               "with one more line at the end.\n\n",
-                               __LINE__, bc_read.coding_history, supplied_history) ;
-               exit (1) ;
-               } ;
-
-       check_coding_history_newlines (filename) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* broadcast_coding_history_test */
-
-/*==============================================================================
-*/
-
-static void
-broadcast_coding_history_size (const char *filename)
-{      /* SF_BROADCAST_INFO struct with coding_history field of 1024 bytes. */
-       static SF_BROADCAST_INFO_VAR (1024) bc_write ;
-       static SF_BROADCAST_INFO_VAR (1024) bc_read ;
-       SNDFILE *file ;
-       SF_INFO sfinfo ;
-       int k ;
-
-       print_test_name (__func__, filename) ;
-
-       sfinfo.samplerate       = 22050 ;
-       sfinfo.format           = SF_FORMAT_WAV | SF_FORMAT_PCM_16 ;
-       sfinfo.channels         = 1 ;
-
-       memset (&bc_write, 0, sizeof (bc_write)) ;
-
-       snprintf (bc_write.description, sizeof (bc_write.description), "Test description") ;
-       snprintf (bc_write.originator, sizeof (bc_write.originator), "Test originator") ;
-       snprintf (bc_write.originator_reference, sizeof (bc_write.originator_reference), "%08x-%08x", (unsigned int) time (NULL), (unsigned int) (~ time (NULL))) ;
-       snprintf (bc_write.origination_date, sizeof (bc_write.origination_date), "%d/%02d/%02d", 2006, 3, 30) ;
-       snprintf (bc_write.origination_time, sizeof (bc_write.origination_time), "%02d:%02d:%02d", 20, 27, 0) ;
-       snprintf (bc_write.umid, sizeof (bc_write.umid), "Some umid") ;
-       bc_write.coding_history_size = 0 ;
-
-       for (k = 0 ; bc_write.coding_history_size < 512 ; k++)
-       {       snprintf (bc_write.coding_history + bc_write.coding_history_size,
-                       sizeof (bc_write.coding_history) - bc_write.coding_history_size, "line %4d\n", k) ;
-               bc_write.coding_history_size = strlen (bc_write.coding_history) ;
-               } ;
-
-       exit_if_true (bc_write.coding_history_size < 512,
-                       "\n\nLine %d : bc_write.coding_history_size (%d) should be > 512.\n\n", __LINE__, bc_write.coding_history_size) ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       if (sf_command (file, SFC_SET_BROADCAST_INFO, &bc_write, sizeof (bc_write)) == SF_FALSE)
-       {       printf ("\n\nLine %d : sf_command (SFC_SET_BROADCAST_INFO) failed.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&bc_read, 0, sizeof (bc_read)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       if (sf_command (file, SFC_GET_BROADCAST_INFO, &bc_read, sizeof (bc_read)) == SF_FALSE)
-       {       printf ("\n\nLine %d : sf_command (SFC_SET_BROADCAST_INFO) failed.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-       check_log_buffer_or_die (file, __LINE__) ;
-       sf_close (file) ;
-
-       exit_if_true (bc_read.coding_history_size < 512,
-                       "\n\nLine %d : unexpected coding history size %d (should be > 512).\n\n", __LINE__, bc_read.coding_history_size) ;
-
-       exit_if_true (strstr (bc_read.coding_history, "libsndfile") == NULL,
-                       "\n\nLine %d : coding history incomplete (should contain 'libsndfile').\n\n", __LINE__) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* broadcast_coding_history_size */
-
-/*==============================================================================
-*/
-static void
-cart_test (const char *filename, int filetype)
-{      static SF_CART_INFO ca_write, ca_read ;
-       SNDFILE *file ;
-       SF_INFO sfinfo ;
-       int errors = 0 ;
-
-       print_test_name ("cart_test", filename) ;
-
-       sfinfo.samplerate       = 11025 ;
-       sfinfo.format           = filetype ;
-       sfinfo.channels         = 1 ;
-       memset (&ca_write, 0, sizeof (ca_write)) ;
-
-       // example test data
-       snprintf (ca_write.artist, sizeof (ca_write.artist), "Test artist") ;
-       snprintf (ca_write.version, sizeof (ca_write.version), "Test version") ;
-       snprintf (ca_write.cut_id, sizeof (ca_write.cut_id), "Test cut ID") ;
-       snprintf (ca_write.client_id, sizeof (ca_write.client_id), "Test client ID") ;
-       snprintf (ca_write.category, sizeof (ca_write.category), "Test category") ;
-       snprintf (ca_write.classification, sizeof (ca_write.classification), "Test classification") ;
-       snprintf (ca_write.out_cue, sizeof (ca_write.out_cue), "Test out cue") ;
-       snprintf (ca_write.start_date, sizeof (ca_write.start_date), "%d/%02d/%02d", 2006, 3, 30) ;
-       snprintf (ca_write.start_time, sizeof (ca_write.start_time), "%02d:%02d:%02d", 20, 27, 0) ;
-       snprintf (ca_write.end_date, sizeof (ca_write.end_date), "%d/%02d/%02d", 2006, 3, 30) ;
-       snprintf (ca_write.end_time, sizeof (ca_write.end_time), "%02d:%02d:%02d", 20, 27, 0) ;
-       snprintf (ca_write.producer_app_id, sizeof (ca_write.producer_app_id), "Test producer app id") ;
-       snprintf (ca_write.producer_app_version, sizeof (ca_write.producer_app_version), "Test producer app version") ;
-       snprintf (ca_write.user_def, sizeof (ca_write.user_def), "test user def test test") ;
-       ca_write.level_reference = 42 ;
-       snprintf (ca_write.url, sizeof (ca_write.url), "http://www.test.com/test_url") ;
-       snprintf (ca_write.tag_text, sizeof (ca_write.tag_text), "tag text test! \r\n") ; // must be terminated \r\n to be valid
-       ca_write.tag_text_size = strlen (ca_write.tag_text) ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       if (sf_command (file, SFC_SET_CART_INFO, &ca_write, sizeof (ca_write)) == SF_FALSE)
-               exit (1) ;
-
-       test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&ca_read, 0, sizeof (ca_read)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       if (sf_command (file, SFC_GET_CART_INFO, &ca_read, sizeof (ca_read)) == SF_FALSE)
-       {       printf ("\n\nLine %d : sf_command (SFC_GET_CART_INFO) failed.\n\n", __LINE__) ;
-               exit (1) ;
-               return ;
-               } ;
-       check_log_buffer_or_die (file, __LINE__) ;
-       sf_close (file) ;
-
-
-       if (memcmp (ca_write.artist, ca_read.artist, sizeof (ca_write.artist)) != 0)
-       {       printf ("\n\nLine %d : artist mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.artist, ca_read.artist) ;
-               errors ++ ;
-               } ;
-
-       if (memcmp (ca_write.version, ca_read.version, sizeof (ca_write.version)) != 0)
-       {       printf ("\n\nLine %d : version mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.version, ca_read.version) ;
-               errors ++ ;
-               } ;
-
-       if (memcmp (ca_write.title, ca_read.title, sizeof (ca_write.title)) != 0)
-       {       printf ("\n\nLine %d : title mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.title, ca_read.title) ;
-               errors ++ ;
-               } ;
-
-       if (memcmp (ca_write.cut_id, ca_read.cut_id, sizeof (ca_write.cut_id)) != 0)
-       {       printf ("\n\nLine %d : cut_id mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.cut_id, ca_read.cut_id) ;
-               errors ++ ;
-               } ;
-
-       if (memcmp (ca_write.client_id, ca_read.client_id, sizeof (ca_write.client_id)) != 0)
-       {       printf ("\n\nLine %d : client_id mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.client_id, ca_read.client_id) ;
-               errors ++ ;
-               } ;
-
-       if (memcmp (ca_write.category, ca_read.category, sizeof (ca_write.category)) != 0)
-       {       printf ("\n\nLine %d : category mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.category, ca_read.category) ;
-               errors ++ ;
-               } ;
-
-       if (memcmp (ca_write.out_cue, ca_read.out_cue, sizeof (ca_write.out_cue)) != 0)
-       {       printf ("\n\nLine %d : out_cue mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.out_cue, ca_read.out_cue) ;
-               errors ++ ;
-               } ;
-
-       if (memcmp (ca_write.start_date, ca_read.start_date, sizeof (ca_write.start_date)) != 0)
-       {       printf ("\n\nLine %d : start_date mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.start_date, ca_read.start_date) ;
-               errors ++ ;
-               } ;
-
-
-       if (memcmp (ca_write.start_time, ca_read.start_time, sizeof (ca_write.start_time)) != 0)
-       {       printf ("\n\nLine %d : start_time mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.start_time, ca_read.start_time) ;
-               errors ++ ;
-               } ;
-
-
-       if (memcmp (ca_write.end_date, ca_read.end_date, sizeof (ca_write.end_date)) != 0)
-       {       printf ("\n\nLine %d : end_date mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.end_date, ca_read.end_date) ;
-               errors ++ ;
-               } ;
-
-
-       if (memcmp (ca_write.end_time, ca_read.end_time, sizeof (ca_write.end_time)) != 0)
-       {       printf ("\n\nLine %d : end_time mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.end_time, ca_read.end_time) ;
-               errors ++ ;
-               } ;
-
-
-       if (memcmp (ca_write.producer_app_id, ca_read.producer_app_id, sizeof (ca_write.producer_app_id)) != 0)
-       {       printf ("\n\nLine %d : producer_app_id mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.producer_app_id, ca_read.producer_app_id) ;
-               errors ++ ;
-               } ;
-
-
-       if (memcmp (ca_write.producer_app_version, ca_read.producer_app_version, sizeof (ca_write.producer_app_version)) != 0)
-       {       printf ("\n\nLine %d : producer_app_version mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.producer_app_version, ca_read.producer_app_version) ;
-               errors ++ ;
-               } ;
-
-
-       if (memcmp (ca_write.user_def, ca_read.user_def, sizeof (ca_write.user_def)) != 0)
-       {       printf ("\n\nLine %d : user_def mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.user_def, ca_read.user_def) ;
-               errors ++ ;
-               } ;
-
-
-       if (ca_write.level_reference != ca_read.level_reference)
-       {       printf ("\n\nLine %d : level_reference mismatch :\n\twrite : '%d'\n\tread  : '%d'\n\n", __LINE__, ca_write.level_reference, ca_read.level_reference) ;
-               errors ++ ;
-               } ;
-
-       // TODO: make this more helpful
-       if (memcmp (ca_write.post_timers, ca_read.post_timers, sizeof (ca_write.post_timers)) != 0)
-       {       printf ("\n\nLine %d : post_timers mismatch :\n'\n\n", __LINE__) ;
-               errors ++ ;
-               } ;
-
-       if (memcmp (ca_write.url, ca_read.url, sizeof (ca_write.url)) != 0)
-       {       printf ("\n\nLine %d : url mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.url, ca_read.url) ;
-               errors ++ ;
-               } ;
-
-
-       if (memcmp (ca_write.tag_text, ca_read.tag_text, (size_t) (ca_read.tag_text_size)) != 0)
-       {       printf ("\n\nLine %d : tag_text mismatch :\n\twrite : '%s'\n\tread  : '%s'\n\n", __LINE__, ca_write.tag_text, ca_read.tag_text) ;
-               errors ++ ;
-               } ;
-
-
-       if (errors)
-               exit (1) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* cart_test */
-
-static void
-cart_rdwr_test (const char *filename, int filetype)
-{      SF_CART_INFO cinfo ;
-       SNDFILE *file ;
-       SF_INFO sfinfo ;
-       sf_count_t frames ;
-
-       print_test_name (__func__, filename) ;
-
-       create_short_sndfile (filename, filetype, 2) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       memset (&cinfo, 0, sizeof (cinfo)) ;
-
-       snprintf (cinfo.artist, sizeof (cinfo.artist), "Test artist") ;
-       snprintf (cinfo.version, sizeof (cinfo.version), "Test version") ;
-       snprintf (cinfo.cut_id, sizeof (cinfo.cut_id), "Test cut ID") ;
-       snprintf (cinfo.client_id, sizeof (cinfo.client_id), "Test client ID") ;
-       snprintf (cinfo.category, sizeof (cinfo.category), "Test category") ;
-       snprintf (cinfo.classification, sizeof (cinfo.classification), "Test classification") ;
-       snprintf (cinfo.out_cue, sizeof (cinfo.out_cue), "Test out cue") ;
-       snprintf (cinfo.start_date, sizeof (cinfo.start_date), "%d/%02d/%02d", 2006, 3, 30) ;
-       snprintf (cinfo.start_time, sizeof (cinfo.start_time), "%02d:%02d:%02d", 20, 27, 0) ;
-       snprintf (cinfo.end_date, sizeof (cinfo.end_date), "%d/%02d/%02d", 2006, 3, 30) ;
-       snprintf (cinfo.end_time, sizeof (cinfo.end_time), "%02d:%02d:%02d", 20, 27, 0) ;
-       snprintf (cinfo.producer_app_id, sizeof (cinfo.producer_app_id), "Test producer app id") ;
-       snprintf (cinfo.producer_app_version, sizeof (cinfo.producer_app_version), "Test producer app version") ;
-       snprintf (cinfo.user_def, sizeof (cinfo.user_def), "test user def test test") ;
-       cinfo.level_reference = 42 ;
-       snprintf (cinfo.url, sizeof (cinfo.url), "http://www.test.com/test_url") ;
-       snprintf (cinfo.tag_text, sizeof (cinfo.tag_text), "tag text test!\r\n") ;
-       cinfo.tag_text_size = strlen (cinfo.tag_text) ;
-
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-       frames = sfinfo.frames ;
-       if (sf_command (file, SFC_SET_CART_INFO, &cinfo, sizeof (cinfo)) != SF_FALSE)
-       {       printf ("\n\nLine %d : sf_command (SFC_SET_CART_INFO) should have failed but didn't.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_close (file) ;
-       exit_if_true (frames != sfinfo.frames, "\n\nLine %d : Frame count %" PRId64 " should be %" PRId64 ".\n", __LINE__, sfinfo.frames, frames) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* cart_rdwr_test */
-
-/*==============================================================================
-*/
-
-static void
-channel_map_test (const char *filename, int filetype)
-{      SNDFILE *file ;
-       SF_INFO sfinfo ;
-       int channel_map_read [4], channel_map_write [4] =
-       {       SF_CHANNEL_MAP_LEFT, SF_CHANNEL_MAP_RIGHT, SF_CHANNEL_MAP_LFE,
-               SF_CHANNEL_MAP_REAR_CENTER
-               } ;
-
-       print_test_name ("channel_map_test", filename) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.samplerate       = 11025 ;
-       sfinfo.format           = filetype ;
-       sfinfo.channels         = ARRAY_LEN (channel_map_read) ;
-
-       switch (filetype & SF_FORMAT_TYPEMASK)
-       {       /* WAVEX and RF64 have a default channel map, even if you don't specify one. */
-               case SF_FORMAT_WAVEX :
-               case SF_FORMAT_RF64 :
-                       /* Write file without channel map. */
-                       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-                       test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-                       sf_close (file) ;
-
-                       /* Read file making default channel map exists. */
-                       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-                       exit_if_true (
-                               sf_command (file, SFC_GET_CHANNEL_MAP_INFO, channel_map_read, sizeof (channel_map_read)) == SF_FALSE,
-                               "\n\nLine %d : sf_command (SFC_GET_CHANNEL_MAP_INFO) should not have failed.\n\n", __LINE__
-                               ) ;
-                       check_log_buffer_or_die (file, __LINE__) ;
-                       sf_close (file) ;
-                       break ;
-
-               default :
-                       break ;
-               } ;
-
-       /* Write file with a channel map. */
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       exit_if_true (
-               sf_command (file, SFC_SET_CHANNEL_MAP_INFO, channel_map_write, sizeof (channel_map_write)) == SF_FALSE,
-               "\n\nLine %d : sf_command (SFC_SET_CHANNEL_MAP_INFO) failed.\n\n", __LINE__
-               ) ;
-       test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-       sf_close (file) ;
-
-       /* Read file making sure no channel map exists. */
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       exit_if_true (
-               sf_command (file, SFC_GET_CHANNEL_MAP_INFO, channel_map_read, sizeof (channel_map_read)) != SF_TRUE,
-               "\n\nLine %d : sf_command (SFC_GET_CHANNEL_MAP_INFO) failed.\n\n", __LINE__
-               ) ;
-       check_log_buffer_or_die (file, __LINE__) ;
-       sf_close (file) ;
-
-       exit_if_true (
-               memcmp (channel_map_read, channel_map_write, sizeof (channel_map_read)) != 0,
-               "\n\nLine %d : Channel map read does not match channel map written.\n\n", __LINE__
-               ) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* channel_map_test */
-
-static void
-raw_needs_endswap_test (const char *filename, int filetype)
-{      static int subtypes [] =
-       {       SF_FORMAT_FLOAT, SF_FORMAT_DOUBLE,
-               SF_FORMAT_PCM_16, SF_FORMAT_PCM_24, SF_FORMAT_PCM_32
-               } ;
-       SNDFILE *file ;
-       SF_INFO sfinfo ;
-       unsigned k ;
-       int needs_endswap ;
-
-       print_test_name (__func__, filename) ;
-
-       for (k = 0 ; k < ARRAY_LEN (subtypes) ; k++)
-       {
-               if (filetype == (SF_ENDIAN_LITTLE | SF_FORMAT_AIFF))
-                       switch (subtypes [k])
-                       {       /* Little endian AIFF does not AFAIK support fl32 and fl64. */
-                               case SF_FORMAT_FLOAT :
-                               case SF_FORMAT_DOUBLE :
-                                       continue ;
-                               default :
-                                       break ;
-                               } ;
-
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-               sfinfo.samplerate       = 11025 ;
-               sfinfo.format           = filetype | subtypes [k] ;
-               sfinfo.channels         = 1 ;
-
-               file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-               test_write_double_or_die (file, 0, double_data, BUFFER_LEN, __LINE__) ;
-               sf_close (file) ;
-
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-               file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-               needs_endswap = sf_command (file, SFC_RAW_DATA_NEEDS_ENDSWAP, NULL, 0) ;
-
-               switch (filetype)
-               {       case SF_FORMAT_WAV :
-                       case SF_FORMAT_WAVEX :
-                       case SF_FORMAT_AIFF | SF_ENDIAN_LITTLE :
-                               exit_if_true (needs_endswap != CPU_IS_BIG_ENDIAN,
-                                       "\n\nLine %d : SFC_RAW_DATA_NEEDS_ENDSWAP failed for (%d | %d).\n\n", __LINE__, filetype, k) ;
-                               break ;
-
-                       case SF_FORMAT_AIFF :
-                       case SF_FORMAT_WAV | SF_ENDIAN_BIG :
-                               exit_if_true (needs_endswap != CPU_IS_LITTLE_ENDIAN,
-                                       "\n\nLine %d : SFC_RAW_DATA_NEEDS_ENDSWAP failed for (%d | %d).\n\n", __LINE__, filetype, k) ;
-                               break ;
-
-                       default :
-                               printf ("\n\nLine %d : bad format value %d.\n\n", __LINE__, filetype) ;
-                               exit (1) ;
-                               break ;
-                       } ;
-
-               sf_close (file) ;
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* raw_needs_endswap_test */
diff --git a/libs/libsndfile/tests/compression_size_test.c b/libs/libsndfile/tests/compression_size_test.c
deleted file mode 100644 (file)
index ddacf94..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
-** Copyright (C) 2007-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <math.h>
-
-#include       <sndfile.h>
-
-#include       "utils.h"
-#include       "dft_cmp.h"
-
-#define        SAMPLE_RATE             16000
-#define        DATA_LENGTH             (SAMPLE_RATE)
-
-static float data_out [DATA_LENGTH] ;
-
-static inline float
-max_float (float a, float b)
-{      return a > b ? a : b ;
-} /* max_float */
-
-static void
-vorbis_test (void)
-{      static float float_data [DFT_DATA_LENGTH] ;
-       const char * filename = "vorbis_test.oga" ;
-       SNDFILE * file ;
-       SF_INFO sfinfo ;
-       float max_abs = 0.0 ;
-       unsigned k ;
-
-       print_test_name ("vorbis_test", filename) ;
-
-       /* Generate float data. */
-       gen_windowed_sine_float (float_data, ARRAY_LEN (float_data), 1.0) ;
-
-       /* Set up output file type. */
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS ;
-       sfinfo.channels = 1 ;
-       sfinfo.samplerate = SAMPLE_RATE ;
-
-       /* Write the output file. */
-
-       /*      The Vorbis encoder has a bug on PowerPC and X86-64 with sample rates
-       **      <= 22050. Increasing the sample rate to 32000 avoids triggering it.
-       **      See https://trac.xiph.org/ticket/1229
-       */
-       if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-       {       const char * errstr ;
-
-               errstr = sf_strerror (NULL) ;
-               if (strstr (errstr, "Sample rate chosen is known to trigger a Vorbis") == NULL)
-               {       printf ("Line %d: sf_open (SFM_WRITE) failed : %s\n", __LINE__, errstr) ;
-                       dump_log_buffer (NULL) ;
-                       exit (1) ;
-                       } ;
-
-               printf ("\n                                  Sample rate -> 32kHz    ") ;
-               sfinfo.samplerate = 32000 ;
-
-               file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-               } ;
-
-       test_write_float_or_die (file, 0, float_data, ARRAY_LEN (float_data), __LINE__) ;
-       sf_close (file) ;
-
-       memset (float_data, 0, sizeof (float_data)) ;
-
-       /* Read the file back in again. */
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-       test_read_float_or_die (file, 0, float_data, ARRAY_LEN (float_data), __LINE__) ;
-       sf_close (file) ;
-
-       for (k = 0 ; k < ARRAY_LEN (float_data) ; k ++)
-               max_abs = max_float (max_abs, fabs (float_data [k])) ;
-
-       if (max_abs > 1.021)
-       {       printf ("\n\n    Error : max_abs %f should be < 1.021.\n\n", max_abs) ;
-               exit (1) ;
-               } ;
-
-       puts ("ok") ;
-       unlink (filename) ;
-} /* vorbis_test */
-
-static void
-compression_size_test (int format, const char * filename)
-{      /*
-       **      Encode two files, one at quality 0.3 and one at quality 0.5 and then
-       **      make sure that the quality 0.3 files is the smaller of the two.
-       */
-       char q3_fname [64] ;
-       char q6_fname [64] ;
-       char test_name [64] ;
-
-       SNDFILE *q3_file, *q6_file ;
-       SF_INFO sfinfo ;
-       int q3_size, q6_size ;
-       double quality ;
-       int k ;
-
-       snprintf (q3_fname, sizeof (q3_fname), "q3_%s", filename) ;
-       snprintf (q6_fname, sizeof (q6_fname), "q6_%s", filename) ;
-
-       snprintf (test_name, sizeof (test_name), "q[36]_%s", filename) ;
-       print_test_name (__func__, test_name) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       /* Set up output file type. */
-       sfinfo.format = format ;
-       sfinfo.channels = 1 ;
-       sfinfo.samplerate = SAMPLE_RATE ;
-
-       /* Write the output file. */
-       q3_file = test_open_file_or_die (q3_fname, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-       q6_file = test_open_file_or_die (q6_fname, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-
-       quality = 0.3 ;
-       sf_command (q3_file, SFC_SET_VBR_ENCODING_QUALITY, &quality, sizeof (quality)) ;
-       quality = 0.6 ;
-       sf_command (q6_file, SFC_SET_VBR_ENCODING_QUALITY, &quality, sizeof (quality)) ;
-
-       for (k = 0 ; k < 5 ; k++)
-       {       gen_lowpass_signal_float (data_out, ARRAY_LEN (data_out)) ;
-               test_write_float_or_die (q3_file, 0, data_out, ARRAY_LEN (data_out), __LINE__) ;
-               test_write_float_or_die (q6_file, 0, data_out, ARRAY_LEN (data_out), __LINE__) ;
-               } ;
-
-       sf_close (q3_file) ;
-       sf_close (q6_file) ;
-
-       q3_size = file_length (q3_fname) ;
-       q6_size = file_length (q6_fname) ;
-
-       if (q3_size >= q6_size)
-       {       printf ("\n\nLine %d : q3 size (%d) >= q5 size (%d)\n\n", __LINE__, q3_size, q6_size) ;
-               exit (1) ;
-               } ;
-
-       puts ("ok") ;
-       unlink (q3_fname) ;
-       unlink (q6_fname) ;
-} /* compression_size_test */
-
-
-
-int
-main (int argc, char *argv [])
-{      int all_tests = 0, tests = 0 ;
-
-       if (argc != 2)
-       {       printf (
-                       "Usage : %s <test>\n"
-                       "    Where <test> is one of:\n"
-                       "        vorbis - test Ogg/Vorbis\n"
-                       "        flac   - test FLAC\n"
-                       "        all    - perform all tests\n",
-                       argv [0]) ;
-               exit (0) ;
-               } ;
-
-       if (! HAVE_EXTERNAL_LIBS)
-       {       puts ("    No Ogg/Vorbis tests because Ogg/Vorbis support was not compiled in.") ;
-               return 0 ;
-       } ;
-
-       if (strcmp (argv [1], "all") == 0)
-               all_tests = 1 ;
-
-       if (all_tests || strcmp (argv [1], "vorbis") == 0)
-       {       vorbis_test () ;
-               compression_size_test (SF_FORMAT_OGG | SF_FORMAT_VORBIS, "vorbis.oga") ;
-               tests ++ ;
-               } ;
-
-       if (all_tests || strcmp (argv [1], "flac") == 0)
-       {       compression_size_test (SF_FORMAT_FLAC | SF_FORMAT_PCM_16, "pcm16.flac") ;
-               tests ++ ;
-               } ;
-
-       return 0 ;
-} /* main */
diff --git a/libs/libsndfile/tests/cpp_test.cc b/libs/libsndfile/tests/cpp_test.cc
deleted file mode 100644 (file)
index 364ec86..0000000
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
-** Copyright (C) 2006-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <cstdio>
-#include <cstdlib>
-#include <cstring>
-
-#include <sndfile.hh>
-
-#include "utils.h"
-
-static short   sbuffer [100] ;
-static int             ibuffer [100] ;
-static float   fbuffer [100] ;
-static double  dbuffer [100] ;
-
-static void
-ceeplusplus_wchar_test (void)
-{
-#if 0
-       LPCWSTR filename = L"wchar_test.wav" ;
-
-       print_test_name (__func__, "ceeplusplus_wchar_test.wav") ;
-
-       /* Use this scope to make sure the created file is closed. */
-       {
-               SndfileHandle file (filename, SFM_WRITE, SF_FORMAT_WAV | SF_FORMAT_PCM_16, 2, 44100) ;
-
-               if (file.refCount () != 1)
-               {       printf ("\n\n%s %d : Error : Reference count (%d) should be 1.\n\n", __func__, __LINE__, file.refCount ()) ;
-                       exit (1) ;
-                       } ;
-
-               /*      This should check that the file did in fact get created with a
-               **      wchar_t * filename.
-               */
-               exit_if_true (
-                       GetFileAttributesW (filename) == INVALID_FILE_ATTRIBUTES,
-                       "\n\nLine %d : GetFileAttributes failed.\n\n", __LINE__
-                       ) ;
-       }
-
-       /* Use this because the file was created with CreateFileW. */
-       DeleteFileW (filename) ;
-
-       puts ("ok") ;
-#endif
-} /* ceeplusplus_wchar_test */
-
-
-
-static void
-create_file (const char * filename, int format)
-{      SndfileHandle file ;
-
-       if (file.refCount () != 0)
-       {       printf ("\n\n%s %d : Error : Reference count (%d) should be zero.\n\n", __func__, __LINE__, file.refCount ()) ;
-               exit (1) ;
-               } ;
-
-       file = SndfileHandle (filename, SFM_WRITE, format, 2, 48000) ;
-
-       if (file.refCount () != 1)
-       {       printf ("\n\n%s %d : Error : Reference count (%d) should be 1.\n\n", __func__, __LINE__, file.refCount ()) ;
-               exit (1) ;
-               } ;
-
-       file.setString (SF_STR_TITLE, filename) ;
-
-       /* Item write. */
-       file.write (sbuffer, ARRAY_LEN (sbuffer)) ;
-       file.write (ibuffer, ARRAY_LEN (ibuffer)) ;
-       file.write (fbuffer, ARRAY_LEN (fbuffer)) ;
-       file.write (dbuffer, ARRAY_LEN (dbuffer)) ;
-
-       /* Frame write. */
-       file.writef (sbuffer, ARRAY_LEN (sbuffer) / file.channels ()) ;
-       file.writef (ibuffer, ARRAY_LEN (ibuffer) / file.channels ()) ;
-       file.writef (fbuffer, ARRAY_LEN (fbuffer) / file.channels ()) ;
-       file.writef (dbuffer, ARRAY_LEN (dbuffer) / file.channels ()) ;
-
-       /* RAII takes care of the SndfileHandle. */
-} /* create_file */
-
-static void
-check_title (const SndfileHandle & file, const char * filename)
-{      const char *title = NULL ;
-
-       title = file.getString (SF_STR_TITLE) ;
-
-       if (title == NULL)
-       {       printf ("\n\n%s %d : Error : No title.\n\n", __func__, __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (strcmp (filename, title) != 0)
-       {       printf ("\n\n%s %d : Error : title '%s' should be '%s'\n\n", __func__, __LINE__, title, filename) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* check_title */
-
-static void
-read_file (const char * filename, int format)
-{      SndfileHandle file ;
-       sf_count_t count ;
-
-       if (file)
-       {       printf ("\n\n%s %d : Error : should not be here.\n\n", __func__, __LINE__) ;
-               exit (1) ;
-               } ;
-
-       file = SndfileHandle (filename) ;
-
-       if (1)
-       {       SndfileHandle file2 = file ;
-
-               if (file.refCount () != 2 || file2.refCount () != 2)
-               {       printf ("\n\n%s %d : Error : Reference count (%d) should be two.\n\n", __func__, __LINE__, file.refCount ()) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       if (file.refCount () != 1)
-       {       printf ("\n\n%s %d : Error : Reference count (%d) should be one.\n\n", __func__, __LINE__, file.refCount ()) ;
-               exit (1) ;
-               } ;
-
-       if (! file)
-       {       printf ("\n\n%s %d : Error : should not be here.\n\n", __func__, __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (file.format () != format)
-       {       printf ("\n\n%s %d : Error : format 0x%08x should be 0x%08x.\n\n", __func__, __LINE__, file.format (), format) ;
-               exit (1) ;
-               } ;
-
-       if (file.channels () != 2)
-       {       printf ("\n\n%s %d : Error : channels %d should be 2.\n\n", __func__, __LINE__, file.channels ()) ;
-               exit (1) ;
-               } ;
-
-       if (file.frames () != ARRAY_LEN (sbuffer) * 4)
-       {       printf ("\n\n%s %d : Error : frames %ld should be %lu.\n\n", __func__, __LINE__,
-                               (long) file.frames (), (long) ARRAY_LEN (sbuffer) * 4 / 2) ;
-               exit (1) ;
-               } ;
-
-       switch (format & SF_FORMAT_TYPEMASK)
-       {       case SF_FORMAT_AU :
-                               break ;
-
-               default :
-                       check_title (file, filename) ;
-                       break ;
-               } ;
-
-       /* Item read. */
-       file.read (sbuffer, ARRAY_LEN (sbuffer)) ;
-       file.read (ibuffer, ARRAY_LEN (ibuffer)) ;
-       file.read (fbuffer, ARRAY_LEN (fbuffer)) ;
-       file.read (dbuffer, ARRAY_LEN (dbuffer)) ;
-
-       /* Frame read. */
-       file.readf (sbuffer, ARRAY_LEN (sbuffer) / file.channels ()) ;
-       file.readf (ibuffer, ARRAY_LEN (ibuffer) / file.channels ()) ;
-       file.readf (fbuffer, ARRAY_LEN (fbuffer) / file.channels ()) ;
-       file.readf (dbuffer, ARRAY_LEN (dbuffer) / file.channels ()) ;
-
-       count = file.seek (file.frames () - 10, SEEK_SET) ;
-       if (count != file.frames () - 10)
-       {       printf ("\n\n%s %d : Error : offset (%ld) should be %ld\n\n", __func__, __LINE__,
-                               (long) count, (long) (file.frames () - 10)) ;
-               exit (1) ;
-               } ;
-
-       count = file.read (sbuffer, ARRAY_LEN (sbuffer)) ;
-       if (count != 10 * file.channels ())
-       {       printf ("\n\n%s %d : Error : count (%ld) should be %ld\n\n", __func__, __LINE__,
-                               (long) count, (long) (10 * file.channels ())) ;
-               exit (1) ;
-               } ;
-
-       /* RAII takes care of the SndfileHandle. */
-} /* read_file */
-
-static void
-ceeplusplus_test (const char *filename, int format)
-{
-       print_test_name ("ceeplusplus_test", filename) ;
-
-       create_file (filename, format) ;
-       read_file (filename, format) ;
-
-       remove (filename) ;
-       puts ("ok") ;
-} /* ceeplusplus_test */
-
-static void
-ceeplusplus_extra_test (void)
-{      SndfileHandle file ;
-       const char * filename = "bad_file_name.wav" ;
-       int error ;
-
-       print_test_name ("ceeplusplus_extra_test", filename) ;
-
-       file = SndfileHandle (filename) ;
-
-       error = file.error () ;
-       if (error == 0)
-       {       printf ("\n\n%s %d : error should not be zero.\n\n", __func__, __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (file.strError () == NULL)
-       {       printf ("\n\n%s %d : strError should not return NULL.\n\n", __func__, __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (file.seek (0, SEEK_SET) != 0)
-       {       printf ("\n\n%s %d : bad seek ().\n\n", __func__, __LINE__) ;
-               exit (1) ;
-               } ;
-
-       puts ("ok") ;
-} /* ceeplusplus_extra_test */
-
-
-static void
-ceeplusplus_rawhandle_test (const char *filename)
-{
-       SNDFILE* handle ;
-       {
-               SndfileHandle file (filename) ;
-               handle = file.rawHandle () ;
-               sf_read_float (handle, fbuffer, ARRAY_LEN (fbuffer)) ;
-       }
-} /* ceeplusplus_rawhandle_test */
-
-static void
-ceeplusplus_takeOwnership_test (const char *filename)
-{
-       SNDFILE* handle ;
-       {
-               SndfileHandle file (filename) ;
-               handle = file.takeOwnership () ;
-       }
-
-       if (sf_read_float (handle, fbuffer, ARRAY_LEN (fbuffer)) <= 0)
-       {       printf ("\n\n%s %d : error when taking ownership of handle.\n\n", __func__, __LINE__) ;
-               exit (1) ;
-               }
-
-       if (sf_close (handle) != 0)
-       {       printf ("\n\n%s %d : cannot close file.\n\n", __func__, __LINE__) ;
-               exit (1) ;
-               }
-
-       SndfileHandle file (filename) ;
-       SndfileHandle file2 (file) ;
-
-       if (file2.takeOwnership ())
-       {       printf ("\n\n%s %d : taking ownership of shared handle is not allowed.\n\n", __func__, __LINE__) ;
-               exit (1) ;
-               }
-} /* ceeplusplus_takeOwnership_test */
-
-static void
-ceeplusplus_handle_test (const char *filename, int format)
-{
-       print_test_name ("ceeplusplus_handle_test", filename) ;
-
-       create_file (filename, format) ;
-
-       if (0) ceeplusplus_rawhandle_test (filename) ;
-       ceeplusplus_takeOwnership_test (filename) ;
-
-       remove (filename) ;
-       puts ("ok") ;
-} /* ceeplusplus_test */
-
-int
-main (void)
-{
-       ceeplusplus_test ("cpp_test.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-       ceeplusplus_test ("cpp_test.aiff", SF_FORMAT_AIFF | SF_FORMAT_PCM_S8) ;
-       ceeplusplus_test ("cpp_test.au", SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
-
-       ceeplusplus_extra_test () ;
-       ceeplusplus_handle_test ("cpp_test.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-
-       ceeplusplus_wchar_test () ;
-
-       return 0 ;
-} /* main */
-
diff --git a/libs/libsndfile/tests/dft_cmp.c b/libs/libsndfile/tests/dft_cmp.c
deleted file mode 100644 (file)
index 439a539..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
-** Copyright (C) 2002-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include       <stdio.h>
-#include       <stdlib.h>
-#include       <math.h>
-
-#include       "dft_cmp.h"
-#include       "utils.h"
-
-#ifndef                M_PI
-#define                M_PI            3.14159265358979323846264338
-#endif
-
-#define                DFT_SPEC_LENGTH         (DFT_DATA_LENGTH / 2)
-
-static void    dft_magnitude (const double *data, double *spectrum) ;
-static double calc_max_spectral_difference (const double *spec1, const double *spec2) ;
-
-/*--------------------------------------------------------------------------------
-**     Public functions.
-*/
-
-double
-dft_cmp_float (int linenum, const float *in_data, const float *test_data, int len, double target_snr, int allow_exit)
-{      static double orig [DFT_DATA_LENGTH] ;
-       static double test [DFT_DATA_LENGTH] ;
-       unsigned        k ;
-
-       if (len != DFT_DATA_LENGTH)
-       {       printf ("Error (line %d) : dft_cmp_float : Bad input array length.\n", linenum) ;
-               return 1 ;
-               } ;
-
-       for (k = 0 ; k < ARRAY_LEN (orig) ; k++)
-       {       test [k] = test_data [k] ;
-               orig [k] = in_data [k] ;
-               } ;
-
-       return dft_cmp_double (linenum, orig, test, len, target_snr, allow_exit) ;
-} /* dft_cmp_float */
-
-double
-dft_cmp_double (int linenum, const double *orig, const double *test, int len, double target_snr, int allow_exit)
-{      static double orig_spec [DFT_SPEC_LENGTH] ;
-       static double test_spec [DFT_SPEC_LENGTH] ;
-       double          snr ;
-
-       if (! orig || ! test)
-       {       printf ("Error (line %d) : dft_cmp_double : Bad input arrays.\n", linenum) ;
-               return 1 ;
-               } ;
-
-       if (len != DFT_DATA_LENGTH)
-       {       printf ("Error (line %d) : dft_cmp_double : Bad input array length.\n", linenum) ;
-               return 1 ;
-               } ;
-
-       dft_magnitude (orig, orig_spec) ;
-       dft_magnitude (test, test_spec) ;
-
-       snr = calc_max_spectral_difference (orig_spec, test_spec) ;
-
-       if (snr > target_snr)
-       {       printf ("\n\nLine %d: Actual SNR (% 4.1f) > target SNR (% 4.1f).\n\n", linenum, snr, target_snr) ;
-               oct_save_double (orig, test, len) ;
-               if (allow_exit)
-                       exit (1) ;
-               } ;
-
-       if (snr < -500.0)
-               snr = -500.0 ;
-
-       return snr ;
-} /* dft_cmp_double */
-
-/*--------------------------------------------------------------------------------
-**     Quick dirty calculation of magnitude spectrum for real valued data using
-**     Discrete Fourier Transform. Since the data is real, the DFT is only
-**     calculated for positive frequencies.
-*/
-
-static void
-dft_magnitude (const double *data, double *spectrum)
-{      static double cos_angle [DFT_DATA_LENGTH] = { 0.0 } ;
-       static double sin_angle [DFT_DATA_LENGTH] ;
-
-       double  real_part, imag_part ;
-       int             k, n ;
-
-       /* If sine and cosine tables haven't been initialised, do so. */
-       if (cos_angle [0] == 0.0)
-               for (n = 0 ; n < DFT_DATA_LENGTH ; n++)
-               {       cos_angle [n] = cos (2.0 * M_PI * n / DFT_DATA_LENGTH) ;
-                       sin_angle [n] = -1.0 * sin (2.0 * M_PI * n / DFT_DATA_LENGTH) ;
-                       } ;
-
-       /* DFT proper. Since the data is real, only generate a half spectrum. */
-       for (k = 1 ; k < DFT_SPEC_LENGTH ; k++)
-       {       real_part = 0.0 ;
-               imag_part = 0.0 ;
-
-               for (n = 0 ; n < DFT_DATA_LENGTH ; n++)
-               {       real_part += data [n] * cos_angle [(k * n) % DFT_DATA_LENGTH] ;
-                       imag_part += data [n] * sin_angle [(k * n) % DFT_DATA_LENGTH] ;
-                       } ;
-
-               spectrum [k] = sqrt (real_part * real_part + imag_part * imag_part) ;
-               } ;
-
-       spectrum [DFT_DATA_LENGTH - 1] = 0.0 ;
-
-       spectrum [0] = spectrum [1] = spectrum [2] = spectrum [3] = spectrum [4] = 0.0 ;
-
-       return ;
-} /* dft_magnitude */
-
-static double
-calc_max_spectral_difference (const double *orig, const double *test)
-{      double orig_max = 0.0, max_diff = 0.0 ;
-       int     k ;
-
-       for (k = 0 ; k < DFT_SPEC_LENGTH ; k++)
-       {       if (orig_max < orig [k])
-                       orig_max = orig [k] ;
-               if (max_diff < fabs (orig [k] - test [k]))
-                       max_diff = fabs (orig [k] - test [k]) ;
-               } ;
-
-       if (max_diff < 1e-25)
-               return -500.0 ;
-
-       return 20.0 * log10 (max_diff / orig_max) ;
-} /* calc_max_spectral_difference */
diff --git a/libs/libsndfile/tests/dft_cmp.h b/libs/libsndfile/tests/dft_cmp.h
deleted file mode 100644 (file)
index 3cbdd11..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#define                DFT_DATA_LENGTH         (2048)
-
-double dft_cmp_float (int linenum, const float *orig, const float *test, int len, double tolerance, int allow_exit) ;
-
-double dft_cmp_double (int linenum, const double *orig, const double *test, int len, double tolerance, int allow_exit) ;
-
diff --git a/libs/libsndfile/tests/dither_test.c b/libs/libsndfile/tests/dither_test.c
deleted file mode 100644 (file)
index e9eef7c..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
-** Copyright (C) 2003-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-
-#include       <stdio.h>
-#include       <stdlib.h>
-#include       <unistd.h>
-#include       <string.h>
-#include       <math.h>
-
-#include       <sndfile.h>
-
-#include       "utils.h"
-
-#define        BUFFER_LEN              (1 << 16)
-#define LOG_BUFFER_SIZE        1024
-
-static void    dither_test (const char *filename, int filetype) ;
-
-/* Force the start of this buffer to be double aligned. Sparc-solaris will
-** choke if its not.
-*/
-static short   data_out [BUFFER_LEN] ;
-
-int
-main (int argc, char *argv [])
-{      int             do_all = 0 ;
-       int             test_count = 0 ;
-
-       if (argc != 2)
-       {       printf ("Usage : %s <test>\n", argv [0]) ;
-               printf ("    Where <test> is one of the following:\n") ;
-               printf ("           wav  - test WAV file peak chunk\n") ;
-               printf ("           aiff - test AIFF file PEAK chunk\n") ;
-               printf ("           all  - perform all tests\n") ;
-               exit (1) ;
-               } ;
-
-       do_all = ! strcmp (argv [1], "all") ;
-
-       if (do_all || ! strcmp (argv [1], "wav"))
-       {       dither_test ("dither.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_U8) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "aiff"))
-       {       dither_test ("dither.aiff", SF_FORMAT_AIFF | SF_FORMAT_PCM_S8) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "au"))
-       {       dither_test ("dither.au", SF_FORMAT_AU | SF_FORMAT_PCM_S8) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "svx"))
-       {       dither_test ("dither.svx", SF_FORMAT_SVX | SF_FORMAT_PCM_S8) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "nist"))
-       {       dither_test ("dither.nist", SF_FORMAT_NIST | SF_FORMAT_PCM_S8) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "paf"))
-       {       dither_test ("dither.paf", SF_FORMAT_PAF | SF_FORMAT_PCM_S8) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "ircam"))
-       {       dither_test ("dither.ircam", SF_FORMAT_IRCAM | SF_FORMAT_PCM_S8) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "voc"))
-       {       dither_test ("dither.voc", SF_FORMAT_VOC | SF_FORMAT_PCM_S8) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "w64"))
-       {       dither_test ("dither.w64", SF_FORMAT_W64 | SF_FORMAT_PCM_S8) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "mat4"))
-       {       dither_test ("dither.mat4", SF_FORMAT_MAT4 | SF_FORMAT_PCM_S8) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "mat5"))
-       {       dither_test ("dither.mat5", SF_FORMAT_MAT5 | SF_FORMAT_PCM_S8) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "pvf"))
-       {       dither_test ("dither.pvf", SF_FORMAT_PVF | SF_FORMAT_PCM_S8) ;
-               test_count++ ;
-               } ;
-
-       if (test_count == 0)
-       {       printf ("Mono : ************************************\n") ;
-               printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-               printf ("Mono : ************************************\n") ;
-               return 1 ;
-               } ;
-
-       return 0 ;
-} /* main */
-
-
-/*============================================================================================
-**     Here are the test functions.
-*/
-
-static void
-dither_test (const char *filename, int filetype)
-{      SNDFILE                 *file ;
-       SF_INFO                 sfinfo ;
-       SF_DITHER_INFO  dither ;
-
-       print_test_name ("dither_test", filename) ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.format           = filetype ;
-       sfinfo.channels         = 1 ;
-       sfinfo.frames           = 0 ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       /* Check for old version of the dither API. */
-       if (sf_command (file, SFC_SET_DITHER_ON_WRITE, NULL, SF_TRUE) == 0)
-       {       printf ("\n\nLine %d: Should have an error here but don't.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       memset (&dither, 0, sizeof (dither)) ;
-       dither.type = SFD_WHITE ;
-       dither.level = 0 ;
-
-       if (sf_command (file, SFC_SET_DITHER_ON_WRITE, &dither, sizeof (dither)) != 0)
-       {       printf ("\n\nLine %d: sf_command (SFC_SET_DITHER_ON_WRITE) returned error : %s\n\n",
-                       __LINE__, sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       /* Write data to file. */
-       test_write_short_or_die (file, 0, data_out, BUFFER_LEN, __LINE__) ;
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.frames != BUFFER_LEN)
-       {       printf ("\n\nLine %d: Bad frame count %d (should be %d)\n\n", __LINE__, (int) sfinfo.frames, BUFFER_LEN) ;
-               } ;
-
-       sf_close (file) ;
-       /*-unlink (filename) ;-*/
-
-       puts ("ok") ;
-} /* dither_test */
-
diff --git a/libs/libsndfile/tests/dwvw_test.c b/libs/libsndfile/tests/dwvw_test.c
deleted file mode 100644 (file)
index 2bd11d1..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define        BUFFER_SIZE             (10000)
-
-#ifndef                M_PI
-#define                M_PI            3.14159265358979323846264338
-#endif
-
-static void    dwvw_test (const char *filename, int format, int bit_width) ;
-
-int
-main (void)
-{
-       dwvw_test ("dwvw12.raw", SF_FORMAT_RAW | SF_FORMAT_DWVW_12, 12) ;
-       dwvw_test ("dwvw16.raw", SF_FORMAT_RAW | SF_FORMAT_DWVW_16, 16) ;
-       dwvw_test ("dwvw24.raw", SF_FORMAT_RAW | SF_FORMAT_DWVW_24, 24) ;
-
-       return 0 ;
-} /* main */
-
-static void
-dwvw_test (const char *filename, int format, int bit_width)
-{      static  int             write_buf [BUFFER_SIZE] ;
-       static  int             read_buf [BUFFER_SIZE] ;
-
-       SNDFILE *file ;
-       SF_INFO sfinfo ;
-       double  value ;
-       int             k, bit_mask ;
-
-       srand (123456) ;
-
-       /* Only want to grab the top bit_width bits. */
-       bit_mask = (-1 << (32 - bit_width)) ;
-
-       print_test_name ("dwvw_test", filename) ;
-
-       sf_info_setup (&sfinfo, format, 44100, 1) ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       /* Generate random.frames. */
-       for (k = 0 ; k < BUFFER_SIZE / 2 ; k++)
-       {       value = 0x7FFFFFFF * sin (123.0 / sfinfo.samplerate * 2 * k * M_PI) ;
-               write_buf [k] = bit_mask & lrint (value) ;
-               } ;
-
-       for ( ; k < BUFFER_SIZE ; k++)
-               write_buf [k] = bit_mask & ((rand () << 11) ^ (rand () >> 11)) ;
-
-       sf_write_int (file, write_buf, BUFFER_SIZE) ;
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if ((k = sf_read_int (file, read_buf, BUFFER_SIZE)) != BUFFER_SIZE)
-       {       printf ("Error (line %d) : Only read %d/%d.frames.\n", __LINE__, k, BUFFER_SIZE) ;
-               exit (1) ;
-               }
-
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-       {       if (read_buf [k] != write_buf [k])
-               {       printf ("Error (line %d) : %d != %d at position %d/%d\n", __LINE__,
-                               write_buf [k] >> (32 - bit_width), read_buf [k] >> (32 - bit_width),
-                               k, BUFFER_SIZE) ;
-                       oct_save_int (write_buf, read_buf, BUFFER_SIZE) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-       printf ("ok\n") ;
-
-       return ;
-} /* dwvw_test */
-
diff --git a/libs/libsndfile/tests/error_test.c b/libs/libsndfile/tests/error_test.c
deleted file mode 100644 (file)
index 4207c0a..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if OS_IS_WIN32
-#include <windows.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define        BUFFER_SIZE             (1 << 15)
-#define        SHORT_BUFFER    (256)
-
-static void
-error_number_test (void)
-{      const char      *noerror, *errstr ;
-       int                     k ;
-
-       print_test_name ("error_number_test", "") ;
-
-       noerror = sf_error_number (0) ;
-
-       for (k = 1 ; k < 300 ; k++)
-       {       errstr = sf_error_number (k) ;
-
-               /* Test for termination condition. */
-               if (errstr == noerror)
-                       break ;
-
-               /* Test for error. */
-               if (strstr (errstr, "This is a bug in libsndfile."))
-               {       printf ("\n\nError : error number %d : %s\n\n\n", k, errstr) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-
-       puts ("ok") ;
-       return ;
-} /* error_number_test */
-
-static void
-error_value_test (void)
-{      static unsigned char aiff_data [0x1b0] =
-       {       'F' , 'O' , 'R' , 'M' ,
-               0x00, 0x00, 0x01, 0xA8, /* FORM length */
-
-               'A' , 'I' , 'F' , 'C' ,
-               } ;
-
-       const char *filename = "error.aiff" ;
-       SNDFILE *file ;
-       SF_INFO sfinfo ;
-       int error_num ;
-
-       print_test_name ("error_value_test", filename) ;
-
-       dump_data_to_file (filename, aiff_data, sizeof (aiff_data)) ;
-
-       file = sf_open (filename, SFM_READ, &sfinfo) ;
-       if (file != NULL)
-       {       printf ("\n\nLine %d : Should not have been able to open this file.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if ((error_num = sf_error (NULL)) <= 1 || error_num > 300)
-       {       printf ("\n\nLine %d : Should not have had an error number of %d.\n\n", __LINE__, error_num) ;
-               exit (1) ;
-               } ;
-
-       remove (filename) ;
-       puts ("ok") ;
-       return ;
-} /* error_value_test */
-
-static void
-no_file_test (const char * filename)
-{      SNDFILE         *sndfile ;
-       SF_INFO         sfinfo ;
-
-       print_test_name (__func__, filename) ;
-
-       unlink (filename) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sndfile = sf_open (filename, SFM_READ, &sfinfo) ;
-
-       exit_if_true (sndfile != NULL, "\n\nLine %d : should not have received a valid SNDFILE* pointer.\n", __LINE__) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* no_file_test */
-
-static void
-zero_length_test (const char *filename)
-{      SNDFILE         *sndfile ;
-       SF_INFO         sfinfo ;
-       FILE            *file ;
-
-       print_test_name (__func__, filename) ;
-
-       /* Create a zero length file. */
-       file = fopen (filename, "w") ;
-       exit_if_true (file == NULL, "\n\nLine %d : fopen ('%s') failed.\n", __LINE__, filename) ;
-       fclose (file) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sndfile = sf_open (filename, SFM_READ, &sfinfo) ;
-
-       exit_if_true (sndfile != NULL, "\n\nLine %d : should not have received a valid SNDFILE* pointer.\n", __LINE__) ;
-
-       exit_if_true (0 && sf_error (NULL) != SF_ERR_UNRECOGNISED_FORMAT,
-               "\n\nLine %3d : Error : %s\n       should be : %s\n", __LINE__,
-               sf_strerror (NULL), sf_error_number (SF_ERR_UNRECOGNISED_FORMAT)) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* zero_length_test */
-
-static void
-bad_wav_test (const char * filename)
-{      SNDFILE         *sndfile ;
-       SF_INFO         sfinfo ;
-
-       FILE            *file ;
-       const char      data [] = "RIFF    WAVEfmt            " ;
-
-       print_test_name (__func__, filename) ;
-
-       if ((file = fopen (filename, "w")) == NULL)
-       {       printf ("\n\nLine %d : fopen returned NULL.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       exit_if_true (fwrite (data, sizeof (data), 1, file) != 1, "\n\nLine %d : fwrite failed.\n", __LINE__) ;
-       fclose (file) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sndfile = sf_open (filename, SFM_READ, &sfinfo) ;
-
-       if (sndfile)
-       {       printf ("\n\nLine %d : should not have received a valid SNDFILE* pointer.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* bad_wav_test */
-
-static void
-error_close_test (void)
-{      static short buffer [SHORT_BUFFER] ;
-       const char      *filename = "error_close.wav" ;
-       SNDFILE         *sndfile ;
-       SF_INFO         sfinfo ;
-       FILE            *file ;
-
-       print_test_name (__func__, filename) ;
-
-       /* Open a FILE* from which we will extract a file descriptor. */
-       if ((file = fopen (filename, "w")) == NULL)
-       {       printf ("\n\nLine %d : fopen returned NULL.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       /* Set parameters for writing the file. */
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.channels = 1 ;
-       sfinfo.samplerate = 44100 ;
-       sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16 ;
-
-       sndfile = sf_open_fd (fileno (file), SFM_WRITE, &sfinfo, SF_TRUE) ;
-       if (sndfile == NULL)
-       {       printf ("\n\nLine %d : sf_open_fd failed : %s\n", __LINE__, sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       test_write_short_or_die (sndfile, 0, buffer, ARRAY_LEN (buffer), __LINE__) ;
-
-       /* Now close the fd associated with file before calling sf_close. */
-       fclose (file) ;
-
-       if (sf_close (sndfile) == 0)
-       {
-#if OS_IS_WIN32
-               OSVERSIONINFOEX osvi ;
-
-               memset (&osvi, 0, sizeof (OSVERSIONINFOEX)) ;
-               osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX) ;
-
-               if (GetVersionEx ((OSVERSIONINFO *) &osvi))
-               {       printf ("\n\nLine %d : sf_close should not have returned zero.\n", __LINE__) ;
-                       printf ("\nHowever, this is a known bug in version %d.%d of windows so we'll ignore it.\n\n",
-                                       (int) osvi.dwMajorVersion, (int) osvi.dwMinorVersion) ;
-                       } ;
-#else
-               printf ("\n\nLine %d : sf_close should not have returned zero.\n", __LINE__) ;
-               exit (1) ;
-#endif
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* error_close_test */
-
-int
-main (void)
-{
-       error_number_test () ;
-       error_value_test () ;
-
-       error_close_test () ;
-
-       no_file_test ("no_file.wav") ;
-       zero_length_test ("zero_length.wav") ;
-       bad_wav_test ("bad_wav.wav") ;
-
-       return 0 ;
-} /* main */
-
diff --git a/libs/libsndfile/tests/external_libs_test.c b/libs/libsndfile/tests/external_libs_test.c
deleted file mode 100644 (file)
index 86b0290..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
-** Copyright (C) 2008-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation ; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-static void major_format_test (void) ;
-static void subtype_format_test (void) ;
-static void simple_format_test (void) ;
-
-int
-main (void)
-{
-       major_format_test () ;
-       subtype_format_test () ;
-       simple_format_test () ;
-
-       return 0 ;
-} /* main */
-
-static void
-major_format_test (void)
-{      SF_FORMAT_INFO  info ;
-       int have_ogg = 0, have_flac = 0 ;
-       int m, major_count ;
-
-       print_test_name (__func__, NULL) ;
-
-       sf_command (NULL, SFC_GET_FORMAT_MAJOR_COUNT, &major_count, sizeof (int)) ;
-
-       for (m = 0 ; m < major_count ; m++)
-       {       info.format = m ;
-               sf_command (NULL, SFC_GET_FORMAT_MAJOR, &info, sizeof (info)) ;
-
-               have_flac = info.format == SF_FORMAT_FLAC ? 1 : have_flac ;
-               have_ogg = info.format == SF_FORMAT_OGG ? 1 : have_ogg ;
-               } ;
-
-       if (HAVE_EXTERNAL_LIBS)
-       {       exit_if_true (have_flac == 0, "\n\nLine %d : FLAC should be available.\n\n", __LINE__) ;
-               exit_if_true (have_ogg == 0, "\n\nLine %d : Ogg/Vorbis should be available.\n\n", __LINE__) ;
-               }
-       else
-       {       exit_if_true (have_flac, "\n\nLine %d : FLAC should not be available.\n\n", __LINE__) ;
-               exit_if_true (have_ogg, "\n\nLine %d : Ogg/Vorbis should not be available.\n\n", __LINE__) ;
-               } ;
-
-       puts ("ok") ;
-} /* major_format_test */
-
-static void
-subtype_format_test (void)
-{      SF_FORMAT_INFO  info ;
-       int have_vorbis = 0 ;
-       int s, subtype_count ;
-
-       print_test_name (__func__, NULL) ;
-
-       sf_command (NULL, SFC_GET_FORMAT_SUBTYPE_COUNT, &subtype_count, sizeof (int)) ;
-
-       for (s = 0 ; s < subtype_count ; s++)
-       {       info.format = s ;
-               sf_command (NULL, SFC_GET_FORMAT_SUBTYPE, &info, sizeof (info)) ;
-
-               have_vorbis = info.format == SF_FORMAT_VORBIS ? 1 : have_vorbis ;
-               } ;
-
-       if (HAVE_EXTERNAL_LIBS)
-               exit_if_true (have_vorbis == 0, "\n\nLine %d : Ogg/Vorbis should be available.\n\n", __LINE__) ;
-       else
-               exit_if_true (have_vorbis, "\n\nLine %d : Ogg/Vorbis should not be available.\n\n", __LINE__) ;
-
-       puts ("ok") ;
-} /* subtype_format_test */
-
-static void
-simple_format_test (void)
-{      SF_FORMAT_INFO  info ;
-       int have_flac = 0, have_ogg = 0, have_vorbis = 0 ;
-       int s, simple_count ;
-
-       print_test_name (__func__, NULL) ;
-
-       sf_command (NULL, SFC_GET_SIMPLE_FORMAT_COUNT, &simple_count, sizeof (int)) ;
-
-       for (s = 0 ; s < simple_count ; s++)
-       {       info.format = s ;
-               sf_command (NULL, SFC_GET_SIMPLE_FORMAT, &info, sizeof (info)) ;
-
-               switch (info.format & SF_FORMAT_TYPEMASK)
-               {       case SF_FORMAT_FLAC :
-                               have_flac = 1 ;
-                               break ;
-
-                       case SF_FORMAT_OGG :
-                               have_ogg = 1 ;
-                               break ;
-
-                       default :
-                               break ;
-                       } ;
-
-               switch (info.format & SF_FORMAT_SUBMASK)
-               {       case SF_FORMAT_VORBIS :
-                               have_vorbis = 1 ;
-                               break ;
-
-                       default :
-                               break ;
-                       } ;
-
-               } ;
-
-       if (HAVE_EXTERNAL_LIBS)
-       {       exit_if_true (have_flac == 0, "\n\nLine %d : FLAC should be available.\n\n", __LINE__) ;
-               exit_if_true (have_ogg == 0, "\n\nLine %d : Ogg/Vorbis should be available.\n\n", __LINE__) ;
-               exit_if_true (have_vorbis == 0, "\n\nLine %d : Ogg/Vorbis should be available.\n\n", __LINE__) ;
-               }
-       else
-       {       exit_if_true (have_flac, "\n\nLine %d : FLAC should not be available.\n\n", __LINE__) ;
-               exit_if_true (have_ogg, "\n\nLine %d : Ogg/Vorbis should not be available.\n\n", __LINE__) ;
-               exit_if_true (have_vorbis, "\n\nLine %d : Ogg/Vorbis should not be available.\n\n", __LINE__) ;
-               } ;
-
-       puts ("ok") ;
-} /* simple_format_test */
diff --git a/libs/libsndfile/tests/fix_this.c b/libs/libsndfile/tests/fix_this.c
deleted file mode 100644 (file)
index 4cbb8d4..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <math.h>
-#include <inttypes.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define                BUFFER_SIZE             (1 << 14)
-#define                SAMPLE_RATE             (11025)
-
-#ifndef                M_PI
-#define                M_PI            3.14159265358979323846264338
-#endif
-
-static void    lcomp_test_int  (const char *str, const char *filename, int filetype, double margin) ;
-
-static int             error_function (double data, double orig, double margin) ;
-static int             decay_response (int k) ;
-
-static void    gen_signal_double (double *data, double scale, int datalen) ;
-
-/* Force the start of these buffers to be double aligned. Sparc-solaris will
-** choke if they are not.
-*/
-
-typedef union
-{      double  d [BUFFER_SIZE + 1] ;
-       int     i [BUFFER_SIZE + 1] ;
-} BUFFER ;
-
-static BUFFER  data_buffer ;
-static BUFFER  orig_buffer ;
-
-int
-main (void)
-{      const char      *filename = "test.au" ;
-
-       lcomp_test_int  ("au_g721", filename, SF_ENDIAN_BIG | SF_FORMAT_AU | SF_FORMAT_G721_32, 0.06) ;
-
-       return 0 ;
-} /* main */
-
-/*============================================================================================
-**     Here are the test functions.
-*/
-
-static void
-lcomp_test_int (const char *str, const char *filename, int filetype, double margin)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     k, m, *orig, *data ;
-       sf_count_t      datalen, seekpos ;
-       int64_t         sum_abs ;
-       double          scale ;
-
-       printf ("\nThis is program is not part of the libsndfile test suite.\n\n") ;
-
-       printf ("    lcomp_test_int      : %s ... ", str) ;
-       fflush (stdout) ;
-
-       datalen = BUFFER_SIZE ;
-
-       scale = 1.0 * 0x10000 ;
-
-       data = data_buffer.i ;
-       orig = orig_buffer.i ;
-
-       gen_signal_double (orig_buffer.d, 32000.0 * scale, datalen) ;
-       for (k = 0 ; k < datalen ; k++)
-               orig [k] = orig_buffer.d [k] ;
-
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = 123456789 ;   /* Ridiculous value. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       if (! (file = sf_open (filename, SFM_WRITE, &sfinfo)))
-       {       printf ("sf_open_write failed with error : ") ;
-               puts (sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       if ((k = sf_writef_int (file, orig, datalen)) != datalen)
-       {       printf ("sf_writef_int failed with short write (%" PRId64 " => %d).\n", datalen, k) ;
-               exit (1) ;
-               } ;
-       sf_close (file) ;
-
-       memset (data, 0, datalen * sizeof (int)) ;
-
-       if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       if (! (file = sf_open (filename, SFM_READ, &sfinfo)))
-       {       printf ("sf_open_read failed with error : ") ;
-               puts (sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       if ((sfinfo.format & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)) != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("Line %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < datalen)
-       {       printf ("Too few.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames > (datalen + datalen / 2))
-       {       printf ("Too many.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("Incorrect number of channels in file.\n") ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       if ((k = sf_readf_int (file, data, datalen)) != datalen)
-       {       printf ("Line %d: short read (%d should be %" PRId64 ").\n", __LINE__, k, datalen) ;
-               exit (1) ;
-               } ;
-
-       sum_abs = 0 ;
-       for (k = 0 ; k < datalen ; k++)
-       {       if (error_function (data [k] / scale, orig [k] / scale, margin))
-               {       printf ("Line %d: Incorrect sample (#%d : %f should be %f).\n", __LINE__, k, data [k] / scale, orig [k] / scale) ;
-                       oct_save_int (orig, data, datalen) ;
-                       exit (1) ;
-                       } ;
-               sum_abs += abs (data [k]) ;
-               } ;
-
-       if (sum_abs < 1.0)
-       {       printf ("Line %d: Signal is all zeros.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if ((k = sf_readf_int (file, data, datalen)) != sfinfo.frames - datalen)
-       {       printf ("Line %d: Incorrect read length (%" PRId64 " should be %d).\n", __LINE__, sfinfo.frames - datalen, k) ;
-               exit (1) ;
-               } ;
-
-       /*      This check is only for block based encoders which must append silence
-       **      to the end of a file so as to fill out a block.
-       */
-       if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM)
-               for (k = 0 ; k < sfinfo.frames - datalen ; k++)
-                       if (abs (data [k] / scale) > decay_response (k))
-                       {       printf ("Line %d : Incorrect sample B (#%d : abs (%d) should be < %d).\n", __LINE__, k, data [k], decay_response (k)) ;
-                               exit (1) ;
-                               } ;
-
-       if (! sfinfo.seekable)
-       {       printf ("ok\n") ;
-               return ;
-               } ;
-
-       /* Now test sf_seek function. */
-
-       if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
-       {       printf ("Line %d: Seek to start of file failed (%d).\n", __LINE__, k) ;
-               exit (1) ;
-               } ;
-
-       for (m = 0 ; m < 3 ; m++)
-       {       int n ;
-
-               if ((k = sf_readf_int (file, data, 11)) != 11)
-               {       printf ("Line %d: Incorrect read length (11 => %d).\n", __LINE__, k) ;
-                       exit (1) ;
-                       } ;
-
-               for (k = 0 ; k < 11 ; k++)
-                       if (error_function (data [k] / scale, orig [k + m * 11] / scale, margin))
-                       {       printf ("Line %d: Incorrect sample (m = %d) (#%d : %d => %d).\n", __LINE__, m, k + m * 11, orig [k + m * 11], data [k]) ;
-                               for (n = 0 ; n < 1 ; n++)
-                                       printf ("%d ", data [n]) ;
-                               printf ("\n") ;
-                               exit (1) ;
-                               } ;
-               } ;
-
-       seekpos = BUFFER_SIZE / 10 ;
-
-       /* Check seek from start of file. */
-       if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
-       {       printf ("Seek to start of file + %" PRId64 " failed (%d).\n", seekpos, k) ;
-               exit (1) ;
-               } ;
-
-       if ((k = sf_readf_int (file, data, 1)) != 1)
-       {       printf ("Line %d: sf_readf_int (file, data, 1) returned %d.\n", __LINE__, k) ;
-               exit (1) ;
-               } ;
-
-       if (error_function ((double) data [0], (double) orig [seekpos], margin))
-       {       printf ("Line %d: sf_seek (SEEK_SET) followed by sf_readf_int failed (%d, %d).\n", __LINE__, orig [1], data [0]) ;
-               exit (1) ;
-               } ;
-
-       if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
-       {       printf ("Line %d: sf_seek (SEEK_CUR) with 0 offset failed (%d should be %" PRId64 ")\n", __LINE__, k, seekpos + 1) ;
-               exit (1) ;
-               } ;
-
-       seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
-       k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
-       sf_readf_int (file, data, 1) ;
-       if (error_function ((double) data [0], (double) orig [seekpos], margin) || k != seekpos)
-       {       printf ("Line %d: sf_seek (forwards, SEEK_CUR) followed by sf_readf_int failed (%d, %d) (%d, %" PRId64 ").\n", __LINE__, data [0], orig [seekpos], k, seekpos + 1) ;
-               exit (1) ;
-               } ;
-
-       seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
-       /* Check seek backward from current position. */
-       k = sf_seek (file, -20, SEEK_CUR) ;
-       sf_readf_int (file, data, 1) ;
-       if (error_function ((double) data [0], (double) orig [seekpos], margin) || k != seekpos)
-       {       printf ("sf_seek (backwards, SEEK_CUR) followed by sf_readf_int failed (%d, %d) (%d, %" PRId64 ").\n", data [0], orig [seekpos], k, seekpos) ;
-               exit (1) ;
-               } ;
-
-       /* Check that read past end of file returns number of items. */
-       sf_seek (file, (int) sfinfo.frames, SEEK_SET) ;
-
-       if ((k = sf_readf_int (file, data, datalen)) != 0)
-       {       printf ("Line %d: Return value from sf_readf_int past end of file incorrect (%d).\n", __LINE__, k) ;
-               exit (1) ;
-               } ;
-
-       /* Check seek backward from end. */
-       if ((k = sf_seek (file, 5 - (int) sfinfo.frames, SEEK_END)) != 5)
-       {       printf ("sf_seek (SEEK_END) returned %d instead of %d.\n", k, 5) ;
-               exit (1) ;
-               } ;
-
-       sf_readf_int (file, data, 1) ;
-       if (error_function (data [0] / scale, orig [5] / scale, margin))
-       {       printf ("Line %d: sf_seek (SEEK_END) followed by sf_readf_short failed (%d should be %d).\n", __LINE__, data [0], orig [5]) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       printf ("ok\n") ;
-} /* lcomp_test_int */
-
-/*========================================================================================
-**     Auxiliary functions
-*/
-
-#define                SIGNAL_MAXVAL   30000.0
-#define                DECAY_COUNT             800
-
-static int
-decay_response (int k)
-{      if (k < 1)
-               return (int) (1.2 * SIGNAL_MAXVAL) ;
-       if (k > DECAY_COUNT)
-               return 0 ;
-       return (int) (1.2 * SIGNAL_MAXVAL * (DECAY_COUNT - k) / (1.0 * DECAY_COUNT)) ;
-} /* decay_response */
-
-static void
-gen_signal_double (double *data, double scale, int datalen)
-{      int             k, ramplen ;
-       double  amp = 0.0 ;
-
-       ramplen = datalen / 18 ;
-
-       for (k = 0 ; k < datalen ; k++)
-       {       if (k <= ramplen)
-                       amp = scale * k / ((double) ramplen) ;
-               else if (k > datalen - ramplen)
-                       amp = scale * (datalen - k) / ((double) ramplen) ;
-
-               data [k] = amp * (0.4 * sin (33.3 * 2.0 * M_PI * ((double) (k + 1)) / ((double) SAMPLE_RATE))
-                                                       + 0.3 * cos (201.1 * 2.0 * M_PI * ((double) (k + 1)) / ((double) SAMPLE_RATE))) ;
-               } ;
-
-       return ;
-} /* gen_signal_double */
-
-static int
-error_function (double data, double orig, double margin)
-{      double error ;
-
-       if (fabs (orig) <= 500.0)
-               error = fabs (fabs (data) - fabs (orig)) / 2000.0 ;
-       else if (fabs (orig) <= 1000.0)
-               error = fabs (data - orig) / 3000.0 ;
-       else
-               error = fabs (data - orig) / fabs (orig) ;
-
-       if (error > margin)
-       {       printf ("\n\n*******************\nError : %f\n", error) ;
-               return 1 ;
-               } ;
-       return 0 ;
-} /* error_function */
-
diff --git a/libs/libsndfile/tests/floating_point_test.c b/libs/libsndfile/tests/floating_point_test.c
deleted file mode 100644 (file)
index aaf5386..0000000
+++ /dev/null
@@ -1,694 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "dft_cmp.h"
-#include "utils.h"
-
-#define        SAMPLE_RATE                     16000
-
-static void    float_scaled_test       (const char *filename, int allow_exit, int replace_float, int filetype, double target_snr) ;
-static void    double_scaled_test      (const char *filename, int allow_exit, int replace_float, int filetype, double target_snr) ;
-
-static void float_short_little_test (const char * filename) ;
-static void float_short_big_test (const char * filename) ;
-static void float_int_little_test (const char * filename) ;
-static void float_int_big_test (const char * filename) ;
-static void double_short_little_test (const char * filename) ;
-static void double_short_big_test (const char * filename) ;
-static void double_int_little_test (const char * filename) ;
-static void double_int_big_test (const char * filename) ;
-
-
-static double  double_data [DFT_DATA_LENGTH] ;
-static double  double_test [DFT_DATA_LENGTH] ;
-
-static float   float_data [DFT_DATA_LENGTH] ;
-static float   float_test [DFT_DATA_LENGTH] ;
-
-static double  double_data [DFT_DATA_LENGTH] ;
-static short   short_data [DFT_DATA_LENGTH] ;
-static int             int_data [DFT_DATA_LENGTH] ;
-
-int
-main (int argc, char *argv [])
-{      int allow_exit = 1 ;
-
-       if (argc == 2 && ! strstr (argv [1], "no-exit"))
-               allow_exit = 0 ;
-
-#if ((HAVE_LRINTF == 0) && (HAVE_LRINT_REPLACEMENT == 0))
-       puts ("*** Cannot run this test on this platform because it lacks lrintf().") ;
-       exit (0) ;
-#endif
-
-       /* Float tests. */
-       float_scaled_test       ("float.raw", allow_exit, SF_FALSE, SF_ENDIAN_LITTLE | SF_FORMAT_RAW | SF_FORMAT_FLOAT, -163.0) ;
-
-       /* Test both signed and unsigned 8 bit files. */
-       float_scaled_test       ("pcm_s8.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_S8, -39.0) ;
-       float_scaled_test       ("pcm_u8.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_U8, -39.0) ;
-
-       float_scaled_test       ("pcm_16.raw", allow_exit, SF_FALSE, SF_ENDIAN_BIG | SF_FORMAT_RAW | SF_FORMAT_PCM_16, -87.0) ;
-       float_scaled_test       ("pcm_24.raw", allow_exit, SF_FALSE, SF_ENDIAN_LITTLE | SF_FORMAT_RAW | SF_FORMAT_PCM_24, -138.0) ;
-       float_scaled_test       ("pcm_32.raw", allow_exit, SF_FALSE, SF_ENDIAN_BIG | SF_FORMAT_RAW | SF_FORMAT_PCM_32, -163.0) ;
-
-       float_scaled_test       ("ulaw.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_ULAW, -50.0) ;
-       float_scaled_test       ("alaw.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_ALAW, -49.0) ;
-
-       float_scaled_test       ("ima_adpcm.wav", allow_exit, SF_FALSE, SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, -47.0) ;
-       float_scaled_test       ("ms_adpcm.wav" , allow_exit, SF_FALSE, SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, -40.0) ;
-       float_scaled_test       ("gsm610.raw"   , allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_GSM610, -33.0) ;
-
-       float_scaled_test       ("g721_32.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G721_32, -34.0) ;
-       float_scaled_test       ("g723_24.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G723_24, -34.0) ;
-       float_scaled_test       ("g723_40.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G723_40, -40.0) ;
-
-       /*      PAF files do not use the same encoding method for 24 bit PCM data as other file
-       **      formats so we need to explicitly test it here.
-       */
-       float_scaled_test       ("le_paf_24.paf", allow_exit, SF_FALSE, SF_ENDIAN_LITTLE | SF_FORMAT_PAF | SF_FORMAT_PCM_24, -149.0) ;
-       float_scaled_test       ("be_paf_24.paf", allow_exit, SF_FALSE, SF_ENDIAN_BIG | SF_FORMAT_PAF | SF_FORMAT_PCM_24, -149.0) ;
-
-       float_scaled_test       ("dwvw_12.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_12, -64.0) ;
-       float_scaled_test       ("dwvw_16.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_16, -92.0) ;
-       float_scaled_test       ("dwvw_24.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_24, -151.0) ;
-
-       float_scaled_test       ("adpcm.vox", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, -40.0) ;
-
-       float_scaled_test       ("dpcm_16.xi", allow_exit, SF_FALSE, SF_FORMAT_XI | SF_FORMAT_DPCM_16, -90.0) ;
-       float_scaled_test       ("dpcm_8.xi" , allow_exit, SF_FALSE, SF_FORMAT_XI | SF_FORMAT_DPCM_8 , -41.0) ;
-
-       float_scaled_test       ("pcm_s8.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_S8, -90.0) ;
-       float_scaled_test       ("pcm_16.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_16, -140.0) ;
-       float_scaled_test       ("pcm_24.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_24, -170.0) ;
-
-#if HAVE_EXTERNAL_LIBS
-       float_scaled_test       ("flac_8.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_S8, -39.0) ;
-       float_scaled_test       ("flac_16.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_16, -87.0) ;
-       float_scaled_test       ("flac_24.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_24, -138.0) ;
-
-       float_scaled_test       ("vorbis.oga", allow_exit, SF_FALSE, SF_FORMAT_OGG | SF_FORMAT_VORBIS, -31.0) ;
-#endif
-
-       float_scaled_test       ("replace_float.raw", allow_exit, SF_TRUE, SF_ENDIAN_LITTLE | SF_FORMAT_RAW | SF_FORMAT_FLOAT, -163.0) ;
-
-       /*==============================================================================
-       ** Double tests.
-       */
-
-       double_scaled_test      ("double.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DOUBLE, -300.0) ;
-
-       /* Test both signed (AIFF) and unsigned (WAV) 8 bit files. */
-       double_scaled_test      ("pcm_s8.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_S8, -39.0) ;
-       double_scaled_test      ("pcm_u8.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_U8, -39.0) ;
-
-       double_scaled_test      ("pcm_16.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_16, -87.0) ;
-       double_scaled_test      ("pcm_24.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_24, -135.0) ;
-       double_scaled_test      ("pcm_32.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_32, -184.0) ;
-
-       double_scaled_test      ("ulaw.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_ULAW, -50.0) ;
-       double_scaled_test      ("alaw.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_ALAW, -49.0) ;
-
-       double_scaled_test      ("ima_adpcm.wav", allow_exit, SF_FALSE, SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, -47.0) ;
-       double_scaled_test      ("ms_adpcm.wav" , allow_exit, SF_FALSE, SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, -40.0) ;
-       double_scaled_test      ("gsm610.raw"   , allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_GSM610, -33.0) ;
-
-       double_scaled_test      ("g721_32.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G721_32, -34.0) ;
-       double_scaled_test      ("g723_24.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G723_24, -34.0) ;
-       double_scaled_test      ("g723_40.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G723_40, -40.0) ;
-
-       /*      24 bit PCM PAF files tested here. */
-       double_scaled_test      ("be_paf_24.paf", allow_exit, SF_FALSE, SF_ENDIAN_BIG | SF_FORMAT_PAF | SF_FORMAT_PCM_24, -151.0) ;
-       double_scaled_test      ("le_paf_24.paf", allow_exit, SF_FALSE, SF_ENDIAN_LITTLE | SF_FORMAT_PAF | SF_FORMAT_PCM_24, -151.0) ;
-
-       double_scaled_test      ("dwvw_12.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_12, -64.0) ;
-       double_scaled_test      ("dwvw_16.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_16, -92.0) ;
-       double_scaled_test      ("dwvw_24.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_24, -151.0) ;
-
-       double_scaled_test      ("adpcm.vox" , allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, -40.0) ;
-
-       double_scaled_test      ("dpcm_16.xi", allow_exit, SF_FALSE, SF_FORMAT_XI | SF_FORMAT_DPCM_16, -90.0) ;
-       double_scaled_test      ("dpcm_8.xi" , allow_exit, SF_FALSE, SF_FORMAT_XI | SF_FORMAT_DPCM_8 , -42.0) ;
-
-       double_scaled_test      ("pcm_s8.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_S8, -90.0) ;
-       double_scaled_test      ("pcm_16.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_16, -140.0) ;
-       double_scaled_test      ("pcm_24.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_24, -180.0) ;
-
-#if HAVE_EXTERNAL_LIBS
-       double_scaled_test      ("flac_8.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_S8, -39.0) ;
-       double_scaled_test      ("flac_16.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_16, -87.0) ;
-       double_scaled_test      ("flac_24.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_24, -138.0) ;
-
-       double_scaled_test      ("vorbis.oga", allow_exit, SF_FALSE, SF_FORMAT_OGG | SF_FORMAT_VORBIS, -29.0) ;
-#endif
-
-       double_scaled_test      ("replace_double.raw", allow_exit, SF_TRUE, SF_FORMAT_RAW | SF_FORMAT_DOUBLE, -300.0) ;
-
-       putchar ('\n') ;
-       /* Float int tests. */
-       float_short_little_test ("float_short_little.au") ;
-       float_short_big_test ("float_short_big.au") ;
-       float_int_little_test ("float_int_little.au") ;
-       float_int_big_test ("float_int_big.au") ;
-       double_short_little_test ("double_short_little.au") ;
-       double_short_big_test ("double_short_big.au") ;
-       double_int_little_test ("double_int_little.au") ;
-       double_int_big_test ("double_int_big.au") ;
-
-
-       return 0 ;
-} /* main */
-
-/*============================================================================================
- *     Here are the test functions.
- */
-
-static void
-float_scaled_test (const char *filename, int allow_exit, int replace_float, int filetype, double target_snr)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       double          snr ;
-
-       print_test_name ("float_scaled_test", filename) ;
-
-       gen_windowed_sine_float (float_data, DFT_DATA_LENGTH, 1.0) ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = DFT_DATA_LENGTH ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-
-       test_write_float_or_die (file, 0, float_data, DFT_DATA_LENGTH, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (float_test, 0, sizeof (float_test)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-
-       exit_if_true (sfinfo.format != filetype, "\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-       exit_if_true (sfinfo.frames < DFT_DATA_LENGTH, "\n\nLine %d: Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), DFT_DATA_LENGTH) ;
-       exit_if_true (sfinfo.channels != 1, "\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_float_or_die (file, 0, float_test, DFT_DATA_LENGTH, __LINE__) ;
-
-       sf_close (file) ;
-
-       snr = dft_cmp_float (__LINE__, float_data, float_test, DFT_DATA_LENGTH, target_snr, allow_exit) ;
-
-       exit_if_true (snr > target_snr, "% 6.1fdB SNR\n\n    Error : should be better than % 6.1fdB\n\n", snr, target_snr) ;
-
-       printf ("% 6.1fdB SNR ... ok\n", snr) ;
-
-       unlink (filename) ;
-
-       return ;
-} /* float_scaled_test */
-
-static void
-double_scaled_test (const char *filename, int allow_exit, int replace_float, int filetype, double target_snr)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       double          snr ;
-
-       print_test_name ("double_scaled_test", filename) ;
-
-       gen_windowed_sine_double (double_data, DFT_DATA_LENGTH, 0.95) ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = DFT_DATA_LENGTH ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-
-       test_write_double_or_die (file, 0, double_data, DFT_DATA_LENGTH, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (double_test, 0, sizeof (double_test)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-
-       exit_if_true (sfinfo.format != filetype, "\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-       exit_if_true (sfinfo.frames < DFT_DATA_LENGTH, "\n\nLine %d: Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), DFT_DATA_LENGTH) ;
-       exit_if_true (sfinfo.channels != 1, "\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_double_or_die (file, 0, double_test, DFT_DATA_LENGTH, __LINE__) ;
-
-       sf_close (file) ;
-
-       snr = dft_cmp_double (__LINE__, double_data, double_test, DFT_DATA_LENGTH, target_snr, allow_exit) ;
-
-       exit_if_true (snr > target_snr, "% 6.1fdB SNR\n\n    Error : should be better than % 6.1fdB\n\n", snr, target_snr) ;
-
-       printf ("% 6.1fdB SNR ... ok\n", snr) ;
-
-       unlink (filename) ;
-
-       return ;
-} /* double_scaled_test */
-
-/*==============================================================================
-*/
-
-
-static void
-float_short_little_test (const char * filename)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       unsigned        k, max ;
-
-       print_test_name ("float_short_little_test", filename) ;
-
-       gen_windowed_sine_float (float_data, ARRAY_LEN (float_data), 0.98) ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = ARRAY_LEN (short_data) ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_FLOAT ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_write_float_or_die (file, 0, float_data, ARRAY_LEN (float_data), __LINE__) ;
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.frames != ARRAY_LEN (float_data))
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), DFT_DATA_LENGTH) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-       test_read_short_or_die (file, 0, short_data, ARRAY_LEN (short_data), __LINE__) ;
-       sf_close (file) ;
-
-       max = 0 ;
-       for (k = 0 ; k < ARRAY_LEN (short_data) ; k++)
-               if ((unsigned) abs (short_data [k]) > max)
-                       max = abs (short_data [k]) ;
-
-       if (1.0 * abs (max - 0x7FFF) / 0x7FFF > 0.01)
-       {       printf ("\n\nLine %d: Bad maximum (%d should be %d).\n\n", __LINE__, max, 0x7FFF) ;
-               exit (1) ;
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* float_short_little_test */
-
-static void
-float_short_big_test (const char * filename)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       unsigned        k, max ;
-
-       print_test_name ("float_short_big_test", filename) ;
-
-       gen_windowed_sine_float (float_data, ARRAY_LEN (float_data), 0.98) ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = ARRAY_LEN (short_data) ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = SF_ENDIAN_BIG | SF_FORMAT_AU | SF_FORMAT_FLOAT ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_write_float_or_die (file, 0, float_data, ARRAY_LEN (float_data), __LINE__) ;
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.frames != ARRAY_LEN (float_data))
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), DFT_DATA_LENGTH) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-       test_read_short_or_die (file, 0, short_data, ARRAY_LEN (short_data), __LINE__) ;
-       sf_close (file) ;
-
-       max = 0 ;
-       for (k = 0 ; k < ARRAY_LEN (short_data) ; k++)
-               if ((unsigned) abs (short_data [k]) > max)
-                       max = abs (short_data [k]) ;
-
-       if (1.0 * abs (max - 0x7FFF) / 0x7FFF > 0.01)
-       {       printf ("\n\nLine %d: Bad maximum (%d should be %d).\n\n", __LINE__, max, 0x7FFF) ;
-               exit (1) ;
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* float_short_big_test */
-
-static void
-float_int_little_test (const char * filename)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       unsigned        k, max ;
-
-       print_test_name ("float_int_little_test", filename) ;
-
-       gen_windowed_sine_float (float_data, ARRAY_LEN (float_data), 0.98) ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = ARRAY_LEN (int_data) ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_FLOAT ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_write_float_or_die (file, 0, float_data, ARRAY_LEN (float_data), __LINE__) ;
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.frames != ARRAY_LEN (float_data))
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), DFT_DATA_LENGTH) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-       test_read_int_or_die (file, 0, int_data, ARRAY_LEN (int_data), __LINE__) ;
-       sf_close (file) ;
-
-       max = 0 ;
-       for (k = 0 ; k < ARRAY_LEN (int_data) ; k++)
-               if ((unsigned) abs (int_data [k]) > max)
-                       max = abs (int_data [k]) ;
-
-       if (1.0 * abs (max - 0x7FFFFFFF) / 0x7FFFFFFF > 0.01)
-       {       printf ("\n\nLine %d: Bad maximum (%d should be %d).\n\n", __LINE__, max, 0x7FFFFFFF) ;
-               exit (1) ;
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* float_int_little_test */
-
-static void
-float_int_big_test (const char * filename)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       unsigned        k, max ;
-
-       print_test_name ("float_int_big_test", filename) ;
-
-       gen_windowed_sine_float (float_data, ARRAY_LEN (float_data), 0.98) ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = ARRAY_LEN (int_data) ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = SF_ENDIAN_BIG | SF_FORMAT_AU | SF_FORMAT_FLOAT ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_write_float_or_die (file, 0, float_data, ARRAY_LEN (float_data), __LINE__) ;
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.frames != ARRAY_LEN (float_data))
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), DFT_DATA_LENGTH) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-       test_read_int_or_die (file, 0, int_data, ARRAY_LEN (int_data), __LINE__) ;
-       sf_close (file) ;
-
-       max = 0 ;
-       for (k = 0 ; k < ARRAY_LEN (int_data) ; k++)
-               if ((unsigned) abs (int_data [k]) > max)
-                       max = abs (int_data [k]) ;
-
-       if (1.0 * abs (max - 0x7FFFFFFF) / 0x7FFFFFFF > 0.01)
-       {       printf ("\n\nLine %d: Bad maximum (%d should be %d).\n\n", __LINE__, max, 0x7FFFFFFF) ;
-               exit (1) ;
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* float_int_big_test */
-
-static void
-double_short_little_test (const char * filename)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       unsigned        k, max ;
-
-       print_test_name ("double_short_little_test", filename) ;
-
-       gen_windowed_sine_double (double_data, ARRAY_LEN (double_data), 0.98) ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = ARRAY_LEN (short_data) ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_DOUBLE ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_write_double_or_die (file, 0, double_data, ARRAY_LEN (double_data), __LINE__) ;
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.frames != ARRAY_LEN (double_data))
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), DFT_DATA_LENGTH) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-       test_read_short_or_die (file, 0, short_data, ARRAY_LEN (short_data), __LINE__) ;
-       sf_close (file) ;
-
-       max = 0 ;
-       for (k = 0 ; k < ARRAY_LEN (short_data) ; k++)
-               if ((unsigned) abs (short_data [k]) > max)
-                       max = abs (short_data [k]) ;
-
-       if (1.0 * abs (max - 0x7FFF) / 0x7FFF > 0.01)
-       {       printf ("\n\nLine %d: Bad maximum (%d should be %d).\n\n", __LINE__, max, 0x7FFF) ;
-               exit (1) ;
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* double_short_little_test */
-
-static void
-double_short_big_test (const char * filename)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       unsigned        k, max ;
-
-       print_test_name ("double_short_big_test", filename) ;
-
-       gen_windowed_sine_double (double_data, ARRAY_LEN (double_data), 0.98) ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = ARRAY_LEN (short_data) ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = SF_ENDIAN_BIG | SF_FORMAT_AU | SF_FORMAT_DOUBLE ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_write_double_or_die (file, 0, double_data, ARRAY_LEN (double_data), __LINE__) ;
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.frames != ARRAY_LEN (double_data))
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), DFT_DATA_LENGTH) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-       test_read_short_or_die (file, 0, short_data, ARRAY_LEN (short_data), __LINE__) ;
-       sf_close (file) ;
-
-       max = 0 ;
-       for (k = 0 ; k < ARRAY_LEN (short_data) ; k++)
-               if ((unsigned) abs (short_data [k]) > max)
-                       max = abs (short_data [k]) ;
-
-       if (1.0 * abs (max - 0x7FFF) / 0x7FFF > 0.01)
-       {       printf ("\n\nLine %d: Bad maximum (%d should be %d).\n\n", __LINE__, max, 0x7FFF) ;
-               exit (1) ;
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* double_short_big_test */
-
-static void
-double_int_little_test (const char * filename)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       unsigned        k, max ;
-
-       print_test_name ("double_int_little_test", filename) ;
-
-       gen_windowed_sine_double (double_data, ARRAY_LEN (double_data), 0.98) ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = ARRAY_LEN (int_data) ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_DOUBLE ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_write_double_or_die (file, 0, double_data, ARRAY_LEN (double_data), __LINE__) ;
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.frames != ARRAY_LEN (double_data))
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), DFT_DATA_LENGTH) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-       test_read_int_or_die (file, 0, int_data, ARRAY_LEN (int_data), __LINE__) ;
-       sf_close (file) ;
-
-       max = 0 ;
-       for (k = 0 ; k < ARRAY_LEN (int_data) ; k++)
-               if ((unsigned) abs (int_data [k]) > max)
-                       max = abs (int_data [k]) ;
-
-       if (1.0 * abs (max - 0x7FFFFFFF) / 0x7FFFFFFF > 0.01)
-       {       printf ("\n\nLine %d: Bad maximum (%d should be %d).\n\n", __LINE__, max, 0x7FFFFFFF) ;
-               exit (1) ;
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* double_int_little_test */
-
-static void
-double_int_big_test (const char * filename)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       unsigned        k, max ;
-
-       print_test_name ("double_int_big_test", filename) ;
-
-       gen_windowed_sine_double (double_data, ARRAY_LEN (double_data), 0.98) ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = ARRAY_LEN (int_data) ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = SF_ENDIAN_BIG | SF_FORMAT_AU | SF_FORMAT_DOUBLE ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_write_double_or_die (file, 0, double_data, ARRAY_LEN (double_data), __LINE__) ;
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.frames != ARRAY_LEN (double_data))
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), DFT_DATA_LENGTH) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-       test_read_int_or_die (file, 0, int_data, ARRAY_LEN (int_data), __LINE__) ;
-       sf_close (file) ;
-
-       max = 0 ;
-       for (k = 0 ; k < ARRAY_LEN (int_data) ; k++)
-               if ((unsigned) abs (int_data [k]) > max)
-                       max = abs (int_data [k]) ;
-
-       if (1.0 * abs (max - 0x7FFFFFFF) / 0x7FFFFFFF > 0.01)
-       {       printf ("\n\nLine %d: Bad maximum (%d should be %d).\n\n", __LINE__, max, 0x7FFFFFFF) ;
-               exit (1) ;
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* double_int_big_test */
-
-
diff --git a/libs/libsndfile/tests/floating_point_test.def b/libs/libsndfile/tests/floating_point_test.def
deleted file mode 100644 (file)
index 3441d34..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-autogen definitions floating_point_test.tpl;
-
-endian_type = {
-       end_name                = little ;
-       end_type                = SF_ENDIAN_LITTLE ;
-       } ;
-
-endian_type = {
-       end_name                = big ;
-       end_type                = SF_ENDIAN_BIG ;
-       } ;
-
-float_type = {
-       float_name              = float ;
-       minor_type              = SF_FORMAT_FLOAT ;
-       } ;
-
-float_type = {
-       float_name              = double ;
-       minor_type              = SF_FORMAT_DOUBLE ;
-       } ;
-
-int_type = {
-       int_name                = short ;
-       int_max                 = 0x7FFF ;
-       } ;
-
-int_type = {
-       int_name                = int ;
-       int_max                 = 0x7FFFFFFF ;
-       } ;
-
diff --git a/libs/libsndfile/tests/floating_point_test.tpl b/libs/libsndfile/tests/floating_point_test.tpl
deleted file mode 100644 (file)
index 4b2d21c..0000000
+++ /dev/null
@@ -1,355 +0,0 @@
-[+ AutoGen5 template c +]
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "dft_cmp.h"
-#include "utils.h"
-
-#define        SAMPLE_RATE                     16000
-
-static void    float_scaled_test       (const char *filename, int allow_exit, int replace_float, int filetype, double target_snr) ;
-static void    double_scaled_test      (const char *filename, int allow_exit, int replace_float, int filetype, double target_snr) ;
-
-[+ FOR float_type +][+ FOR int_type +][+ FOR endian_type
-+]static void [+ (get "float_name") +]_[+ (get "int_name") +]_[+ (get "end_name") +]_test (const char * filename) ;
-[+ ENDFOR endian_type +][+ ENDFOR int_type +][+ ENDFOR float_type
-+]
-
-static double  double_data [DFT_DATA_LENGTH] ;
-static double  double_test [DFT_DATA_LENGTH] ;
-
-static float   float_data [DFT_DATA_LENGTH] ;
-static float   float_test [DFT_DATA_LENGTH] ;
-
-static double  double_data [DFT_DATA_LENGTH] ;
-static short   short_data [DFT_DATA_LENGTH] ;
-static int             int_data [DFT_DATA_LENGTH] ;
-
-int
-main (int argc, char *argv [])
-{      int allow_exit = 1 ;
-
-       if (argc == 2 && ! strstr (argv [1], "no-exit"))
-               allow_exit = 0 ;
-
-#if (HAVE_LRINTF == 0)
-       puts ("*** Cannot run this test on this platform because it lacks lrintf().") ;
-       exit (0) ;
-#endif
-
-       /* Float tests. */
-       float_scaled_test       ("float.raw", allow_exit, SF_FALSE, SF_ENDIAN_LITTLE | SF_FORMAT_RAW | SF_FORMAT_FLOAT, -163.0) ;
-
-       /* Test both signed and unsigned 8 bit files. */
-       float_scaled_test       ("pcm_s8.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_S8, -39.0) ;
-       float_scaled_test       ("pcm_u8.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_U8, -39.0) ;
-
-       float_scaled_test       ("pcm_16.raw", allow_exit, SF_FALSE, SF_ENDIAN_BIG | SF_FORMAT_RAW | SF_FORMAT_PCM_16, -87.0) ;
-       float_scaled_test       ("pcm_24.raw", allow_exit, SF_FALSE, SF_ENDIAN_LITTLE | SF_FORMAT_RAW | SF_FORMAT_PCM_24, -138.0) ;
-       float_scaled_test       ("pcm_32.raw", allow_exit, SF_FALSE, SF_ENDIAN_BIG | SF_FORMAT_RAW | SF_FORMAT_PCM_32, -163.0) ;
-
-       float_scaled_test       ("ulaw.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_ULAW, -50.0) ;
-       float_scaled_test       ("alaw.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_ALAW, -49.0) ;
-
-       float_scaled_test       ("ima_adpcm.wav", allow_exit, SF_FALSE, SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, -47.0) ;
-       float_scaled_test       ("ms_adpcm.wav" , allow_exit, SF_FALSE, SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, -40.0) ;
-       float_scaled_test       ("gsm610.raw"   , allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_GSM610, -33.0) ;
-
-       float_scaled_test       ("g721_32.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G721_32, -34.0) ;
-       float_scaled_test       ("g723_24.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G723_24, -34.0) ;
-       float_scaled_test       ("g723_40.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G723_40, -40.0) ;
-
-       /*      PAF files do not use the same encoding method for 24 bit PCM data as other file
-       **      formats so we need to explicitly test it here.
-       */
-       float_scaled_test       ("le_paf_24.paf", allow_exit, SF_FALSE, SF_ENDIAN_LITTLE | SF_FORMAT_PAF | SF_FORMAT_PCM_24, -149.0) ;
-       float_scaled_test       ("be_paf_24.paf", allow_exit, SF_FALSE, SF_ENDIAN_BIG | SF_FORMAT_PAF | SF_FORMAT_PCM_24, -149.0) ;
-
-       float_scaled_test       ("dwvw_12.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_12, -64.0) ;
-       float_scaled_test       ("dwvw_16.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_16, -92.0) ;
-       float_scaled_test       ("dwvw_24.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_24, -151.0) ;
-
-       float_scaled_test       ("adpcm.vox", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, -40.0) ;
-
-       float_scaled_test       ("dpcm_16.xi", allow_exit, SF_FALSE, SF_FORMAT_XI | SF_FORMAT_DPCM_16, -90.0) ;
-       float_scaled_test       ("dpcm_8.xi" , allow_exit, SF_FALSE, SF_FORMAT_XI | SF_FORMAT_DPCM_8 , -41.0) ;
-
-       float_scaled_test       ("pcm_s8.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_S8, -90.0) ;
-       float_scaled_test       ("pcm_16.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_16, -140.0) ;
-       float_scaled_test       ("pcm_24.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_24, -170.0) ;
-
-       float_scaled_test       ("alac_16.caf", allow_exit, SF_FALSE, SF_FORMAT_CAF | SF_FORMAT_ALAC_16, -90.0) ;
-       float_scaled_test       ("alac_32.caf", allow_exit, SF_FALSE, SF_FORMAT_CAF | SF_FORMAT_ALAC_32, -181.0) ;
-       float_scaled_test       ("alac_24.caf", allow_exit, SF_FALSE, SF_FORMAT_CAF | SF_FORMAT_ALAC_24, -160.0) ;
-       float_scaled_test       ("alac_20.caf", allow_exit, SF_FALSE, SF_FORMAT_CAF | SF_FORMAT_ALAC_20, -134.0) ;
-
-#if HAVE_EXTERNAL_LIBS
-       float_scaled_test       ("flac_8.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_S8, -39.0) ;
-       float_scaled_test       ("flac_16.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_16, -87.0) ;
-       float_scaled_test       ("flac_24.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_24, -138.0) ;
-
-       float_scaled_test       ("vorbis.oga", allow_exit, SF_FALSE, SF_FORMAT_OGG | SF_FORMAT_VORBIS, -31.0) ;
-#endif
-
-       float_scaled_test       ("replace_float.raw", allow_exit, SF_TRUE, SF_ENDIAN_LITTLE | SF_FORMAT_RAW | SF_FORMAT_FLOAT, -163.0) ;
-
-       /*==============================================================================
-       ** Double tests.
-       */
-
-       double_scaled_test      ("double.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DOUBLE, -205.0) ;
-
-       /* Test both signed (AIFF) and unsigned (WAV) 8 bit files. */
-       double_scaled_test      ("pcm_s8.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_S8, -39.0) ;
-       double_scaled_test      ("pcm_u8.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_U8, -39.0) ;
-
-       double_scaled_test      ("pcm_16.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_16, -87.0) ;
-       double_scaled_test      ("pcm_24.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_24, -135.0) ;
-       double_scaled_test      ("pcm_32.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_PCM_32, -184.0) ;
-
-       double_scaled_test      ("ulaw.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_ULAW, -50.0) ;
-       double_scaled_test      ("alaw.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_ALAW, -49.0) ;
-
-       double_scaled_test      ("ima_adpcm.wav", allow_exit, SF_FALSE, SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, -47.0) ;
-       double_scaled_test      ("ms_adpcm.wav" , allow_exit, SF_FALSE, SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, -40.0) ;
-       double_scaled_test      ("gsm610.raw"   , allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_GSM610, -33.0) ;
-
-       double_scaled_test      ("g721_32.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G721_32, -34.0) ;
-       double_scaled_test      ("g723_24.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G723_24, -34.0) ;
-       double_scaled_test      ("g723_40.au", allow_exit, SF_FALSE, SF_FORMAT_AU | SF_FORMAT_G723_40, -40.0) ;
-
-       /*      24 bit PCM PAF files tested here. */
-       double_scaled_test      ("be_paf_24.paf", allow_exit, SF_FALSE, SF_ENDIAN_BIG | SF_FORMAT_PAF | SF_FORMAT_PCM_24, -151.0) ;
-       double_scaled_test      ("le_paf_24.paf", allow_exit, SF_FALSE, SF_ENDIAN_LITTLE | SF_FORMAT_PAF | SF_FORMAT_PCM_24, -151.0) ;
-
-       double_scaled_test      ("dwvw_12.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_12, -64.0) ;
-       double_scaled_test      ("dwvw_16.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_16, -92.0) ;
-       double_scaled_test      ("dwvw_24.raw", allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_DWVW_24, -151.0) ;
-
-       double_scaled_test      ("adpcm.vox" , allow_exit, SF_FALSE, SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, -40.0) ;
-
-       double_scaled_test      ("dpcm_16.xi", allow_exit, SF_FALSE, SF_FORMAT_XI | SF_FORMAT_DPCM_16, -90.0) ;
-       double_scaled_test      ("dpcm_8.xi" , allow_exit, SF_FALSE, SF_FORMAT_XI | SF_FORMAT_DPCM_8 , -42.0) ;
-
-       double_scaled_test      ("pcm_s8.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_S8, -90.0) ;
-       double_scaled_test      ("pcm_16.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_16, -140.0) ;
-       double_scaled_test      ("pcm_24.sds", allow_exit, SF_FALSE, SF_FORMAT_SDS | SF_FORMAT_PCM_24, -180.0) ;
-
-       double_scaled_test      ("alac_16.caf", allow_exit, SF_FALSE, SF_FORMAT_CAF | SF_FORMAT_ALAC_16, -90.0) ;
-       double_scaled_test      ("alac_20.caf", allow_exit, SF_FALSE, SF_FORMAT_CAF | SF_FORMAT_ALAC_20, -134.0) ;
-       double_scaled_test      ("alac_24.caf", allow_exit, SF_FALSE, SF_FORMAT_CAF | SF_FORMAT_ALAC_24, -158.0) ;
-       double_scaled_test      ("alac_32.caf", allow_exit, SF_FALSE, SF_FORMAT_CAF | SF_FORMAT_ALAC_32, -186.0) ;
-
-#if HAVE_EXTERNAL_LIBS
-       double_scaled_test      ("flac_8.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_S8, -39.0) ;
-       double_scaled_test      ("flac_16.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_16, -87.0) ;
-       double_scaled_test      ("flac_24.flac", allow_exit, SF_FALSE, SF_FORMAT_FLAC | SF_FORMAT_PCM_24, -138.0) ;
-
-       double_scaled_test      ("vorbis.oga", allow_exit, SF_FALSE, SF_FORMAT_OGG | SF_FORMAT_VORBIS, -29.0) ;
-#endif
-
-       double_scaled_test      ("replace_double.raw", allow_exit, SF_TRUE, SF_FORMAT_RAW | SF_FORMAT_DOUBLE, -205.0) ;
-
-       putchar ('\n') ;
-       /* Float int tests. */
-[+ FOR float_type +][+ FOR int_type +][+ FOR endian_type
-+]     [+ (get "float_name") +]_[+ (get "int_name") +]_[+ (get "end_name") +]_test ("[+ (get "float_name") +]_[+ (get "int_name") +]_[+ (get "end_name") +].au") ;
-[+ ENDFOR endian_type +][+ ENDFOR int_type +][+ ENDFOR float_type
-+]
-
-       return 0 ;
-} /* main */
-
-/*============================================================================================
- *     Here are the test functions.
- */
-
-static void
-float_scaled_test (const char *filename, int allow_exit, int replace_float, int filetype, double target_snr)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       double          snr ;
-       int                     byterate ;
-
-       print_test_name ("float_scaled_test", filename) ;
-
-       gen_windowed_sine_float (float_data, DFT_DATA_LENGTH, 1.0) ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = DFT_DATA_LENGTH ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-
-       test_write_float_or_die (file, 0, float_data, DFT_DATA_LENGTH, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (float_test, 0, sizeof (float_test)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-
-       exit_if_true (sfinfo.format != filetype, "\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-       exit_if_true (sfinfo.frames < DFT_DATA_LENGTH, "\n\nLine %d: Incorrect number of frames in file (too short). (%" PRId64 " should be %d)\n", __LINE__, sfinfo.frames, DFT_DATA_LENGTH) ;
-       exit_if_true (sfinfo.channels != 1, "\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_float_or_die (file, 0, float_test, DFT_DATA_LENGTH, __LINE__) ;
-
-       byterate = sf_current_byterate (file) ;
-       exit_if_true (byterate <= 0, "\n\nLine %d: byterate is zero.\n", __LINE__) ;
-
-       sf_close (file) ;
-
-       snr = dft_cmp_float (__LINE__, float_data, float_test, DFT_DATA_LENGTH, target_snr, allow_exit) ;
-
-       exit_if_true (snr > target_snr, "% 6.1fdB SNR\n\n    Error : should be better than % 6.1fdB\n\n", snr, target_snr) ;
-
-       printf ("% 6.1fdB SNR ... ok\n", snr) ;
-
-       unlink (filename) ;
-
-       return ;
-} /* float_scaled_test */
-
-static void
-double_scaled_test (const char *filename, int allow_exit, int replace_float, int filetype, double target_snr)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       double          snr ;
-       int                     byterate ;
-
-       print_test_name ("double_scaled_test", filename) ;
-
-       gen_windowed_sine_double (double_data, DFT_DATA_LENGTH, 0.95) ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = DFT_DATA_LENGTH ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-
-       test_write_double_or_die (file, 0, double_data, DFT_DATA_LENGTH, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (double_test, 0, sizeof (double_test)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-
-       exit_if_true (sfinfo.format != filetype, "\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-       exit_if_true (sfinfo.frames < DFT_DATA_LENGTH, "\n\nLine %d: Incorrect number of frames in file (too short). (%" PRId64 " should be %d)\n", __LINE__, sfinfo.frames, DFT_DATA_LENGTH) ;
-       exit_if_true (sfinfo.channels != 1, "\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_double_or_die (file, 0, double_test, DFT_DATA_LENGTH, __LINE__) ;
-
-       byterate = sf_current_byterate (file) ;
-       exit_if_true (byterate <= 0, "\n\nLine %d: byterate is zero.\n", __LINE__) ;
-
-       sf_close (file) ;
-
-       snr = dft_cmp_double (__LINE__, double_data, double_test, DFT_DATA_LENGTH, target_snr, allow_exit) ;
-
-       exit_if_true (snr > target_snr, "% 6.1fdB SNR\n\n    Error : should be better than % 6.1fdB\n\n", snr, target_snr) ;
-
-       printf ("% 6.1fdB SNR ... ok\n", snr) ;
-
-       unlink (filename) ;
-
-       return ;
-} /* double_scaled_test */
-
-/*==============================================================================
-*/
-
-[+ FOR float_type +][+ FOR int_type +][+ FOR endian_type
-+]
-static void
-[+ (get "float_name") +]_[+ (get "int_name") +]_[+ (get "end_name") +]_test (const char * filename)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       unsigned        k, max ;
-
-       print_test_name ("[+ (get "float_name") +]_[+ (get "int_name") +]_[+ (get "end_name") +]_test", filename) ;
-
-       gen_windowed_sine_[+ (get "float_name") +] ([+ (get "float_name") +]_data, ARRAY_LEN ([+ (get "float_name") +]_data), 0.98) ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = ARRAY_LEN ([+ (get "int_name") +]_data) ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = [+ (get "end_type") +] | SF_FORMAT_AU | [+ (get "minor_type") +] ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_write_[+ (get "float_name") +]_or_die (file, 0, [+ (get "float_name") +]_data, ARRAY_LEN ([+ (get "float_name") +]_data), __LINE__) ;
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.frames != ARRAY_LEN ([+ (get "float_name") +]_data))
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (too short). (%" PRId64 " should be %d)\n", __LINE__, sfinfo.frames, DFT_DATA_LENGTH) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-       test_read_[+ (get "int_name") +]_or_die (file, 0, [+ (get "int_name") +]_data, ARRAY_LEN ([+ (get "int_name") +]_data), __LINE__) ;
-       sf_close (file) ;
-
-       max = 0 ;
-       for (k = 0 ; k < ARRAY_LEN ([+ (get "int_name") +]_data) ; k++)
-               if ((unsigned) abs ([+ (get "int_name") +]_data [k]) > max)
-                       max = abs ([+ (get "int_name") +]_data [k]) ;
-
-       if (1.0 * abs (max - [+ (get "int_max") +]) / [+ (get "int_max") +] > 0.01)
-       {       printf ("\n\nLine %d: Bad maximum (%d should be %d).\n\n", __LINE__, max, [+ (get "int_max") +]) ;
-               exit (1) ;
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* [+ (get "float_name") +]_[+ (get "int_name") +]_[+ (get "end_name") +]_test */
-[+ ENDFOR endian_type +][+ ENDFOR int_type +][+ ENDFOR float_type +]
-
diff --git a/libs/libsndfile/tests/format_check_test.c b/libs/libsndfile/tests/format_check_test.c
deleted file mode 100644 (file)
index a371c71..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
-** Copyright (C) 2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "sndfile.h"
-#include "utils.h"
-
-static void format_error_test (void) ;
-static void format_combo_test (void) ;
-
-int
-main (void)
-{
-       format_error_test () ;
-       format_combo_test () ;
-
-       return 0 ;
-} /* main */
-
-/*==============================================================================
-*/
-
-static void
-format_error_test (void)
-{      const char *filename = "format-error.wav" ;
-       SNDFILE *file ;
-       SF_INFO info ;
-
-       print_test_name (__func__, NULL) ;
-
-       memset (&info, 0, sizeof (info)) ;
-       info.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16 ;
-       info.channels = 1 ;
-       info.samplerate = 44100 ;
-
-       info.format = SF_FORMAT_WAV ;
-       file = sf_open (filename, SFM_WRITE, &info) ;
-       exit_if_true (file != NULL, "\n\nLine %d : Format should not be valid.\n\n", __LINE__) ;
-       exit_if_true (
-               strstr (sf_strerror (NULL), "minor format") == NULL,
-               "\n\nLine %d : Error string should reference bad 'minor format'.\n\n", __LINE__
-               ) ;
-
-       info.format = SF_FORMAT_PCM_16 ;
-       file = sf_open (filename, SFM_WRITE, &info) ;
-       exit_if_true (file != NULL, "\n\nLine %d : Format should not be valid.\n\n", __LINE__) ;
-       exit_if_true (
-               strstr (sf_strerror (NULL), "major format") == NULL,
-               "\n\nLine %d : Error string should reference bad 'major format'.\n\n", __LINE__
-               ) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* format_error_test */
-
-static void
-format_combo_test (void)
-{      int container_max, codec_max, cont, codec ;
-
-       print_test_name (__func__, NULL) ;
-
-       sf_command (NULL, SFC_GET_FORMAT_MAJOR_COUNT, &container_max, sizeof (container_max)) ;
-       sf_command (NULL, SFC_GET_FORMAT_SUBTYPE_COUNT, &codec_max, sizeof (codec_max)) ;
-
-       for (cont = 0 ; cont < container_max + 10 ; cont ++)
-       {       SF_FORMAT_INFO major_fmt_info ;
-
-               memset (&major_fmt_info, 0, sizeof (major_fmt_info)) ;
-               major_fmt_info.format = cont ;
-               (void) sf_command (NULL, SFC_GET_FORMAT_MAJOR, &major_fmt_info, sizeof (major_fmt_info)) ;
-
-               for (codec = 0 ; codec < codec_max + 10 ; codec ++)
-               {       SF_FORMAT_INFO subtype_fmt_info ;
-                       SNDFILE * sndfile ;
-                       SF_INFO info ;
-                       char filename [128] ;
-                       int subtype_is_valid, check_is_valid ;
-
-                       memset (&subtype_fmt_info, 0, sizeof (subtype_fmt_info)) ;
-                       subtype_fmt_info.format = codec ;
-                       subtype_is_valid = sf_command (NULL, SFC_GET_FORMAT_SUBTYPE, &subtype_fmt_info, sizeof (subtype_fmt_info)) == 0 ;
-
-                       sf_info_setup (&info, major_fmt_info.format | subtype_fmt_info.format, 22050, 1) ;
-
-                       check_is_valid = sf_format_check (&info) ;
-
-                       exit_if_true (
-                               NOT (subtype_is_valid) && check_is_valid,
-                               "\n\nLine %d : Subtype is not valid but checks ok.\n",
-                               __LINE__
-                               ) ;
-
-                       snprintf (filename, sizeof (filename), "format-check.%s", major_fmt_info.extension) ;
-
-                       sndfile = sf_open (filename, SFM_WRITE, &info) ;
-
-                       sf_close (sndfile) ;
-                       unlink (filename) ;
-
-                       if (major_fmt_info.extension != NULL && strcmp (major_fmt_info.extension, "sd2") == 0)
-                       {       snprintf (filename, sizeof (filename), "._format-check.%s", major_fmt_info.extension) ;
-                               unlink (filename) ;
-                               } ;
-
-                       exit_if_true (
-                               sndfile && NOT (check_is_valid),
-                               "\n\nError : Format was not valid but file opened correctly.\n"
-                               "    Container : %s\n"
-                               "    Codec     : %s\n\n",
-                               major_fmt_info.name, subtype_fmt_info.name
-                               ) ;
-
-                       exit_if_true (
-                               NOT (sndfile) && check_is_valid,
-                               "\n\nError : Format was valid but file failed to open.\n"
-                               "    Container : %s\n"
-                               "    Codec     : %s\n\n",
-                               major_fmt_info.name, subtype_fmt_info.name
-                               ) ;
-                       } ;
-               } ;
-
-       puts ("ok") ;
-} /* format_combo_test */
-
diff --git a/libs/libsndfile/tests/generate.c b/libs/libsndfile/tests/generate.c
deleted file mode 100644 (file)
index 653018b..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-** Copyright (C) 2007-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-#include "generate.h"
-
-#define        SF_MAX(x, y)            ((x) > (y) ? (x) : (y))
-
-static float crappy_snare (float *output, int len, int offset, float gain, float maxabs) ;
-
-void
-generate_file (const char * filename, int format, int len)
-{      float * output ;
-       float maxabs = 0.0 ;
-
-       output = calloc (len, sizeof (float)) ;
-
-       maxabs = crappy_snare (output, len, 0, 0.95, maxabs) ;
-       maxabs = crappy_snare (output, len, len / 4, 0.85, maxabs) ;
-       maxabs = crappy_snare (output, len, 2 * len / 4, 0.85, maxabs) ;
-       crappy_snare (output, len, 3 * len / 4, 0.85, maxabs) ;
-
-       write_mono_file (filename, format, 44100, output, len) ;
-
-       free (output) ;
-} /* generate_file */
-
-static inline float
-rand_float (void)
-{      return rand () / (0.5 * RAND_MAX) - 1.0 ;
-} /* rand_float */
-
-static float
-crappy_snare (float *output, int len, int offset, float gain, float maxabs)
-{      int k ;
-       float env = 0.0 ;
-
-       for (k = offset ; k < len && env < gain ; k++)
-       {       env += 0.03 ;
-               output [k] += env * rand_float () ;
-               maxabs = SF_MAX (maxabs, fabs (output [k])) ;
-               } ;
-
-       for ( ; k < len && env > 1e-8 ; k++)
-       {       env *= 0.995 ;
-               output [k] += env * rand_float () ;
-               maxabs = SF_MAX (maxabs, fabs (output [k])) ;
-               } ;
-
-       return maxabs ;
-} /* crappy_snare */
diff --git a/libs/libsndfile/tests/generate.h b/libs/libsndfile/tests/generate.h
deleted file mode 100644 (file)
index 709ea61..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-** Copyright (C) 2007-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-void generate_file (const char * filename, int format, int len) ;
diff --git a/libs/libsndfile/tests/header_test.c b/libs/libsndfile/tests/header_test.c
deleted file mode 100644 (file)
index 9802fd9..0000000
+++ /dev/null
@@ -1,741 +0,0 @@
-/*
-** Copyright (C) 2001-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation ; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <sys/stat.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#if (defined (WIN32) || defined (_WIN32))
-#include <io.h>
-#include <direct.h>
-#endif
-
-#include       <sndfile.h>
-
-#include       "utils.h"
-
-#define        BUFFER_LEN              (1<<10)
-#define LOG_BUFFER_SIZE        1024
-
-static void    update_header_test (const char *filename, int typemajor) ;
-
-static void    update_seek_short_test  (const char *filename, int filetype) ;
-static void    update_seek_int_test    (const char *filename, int filetype) ;
-static void    update_seek_float_test  (const char *filename, int filetype) ;
-static void    update_seek_double_test (const char *filename, int filetype) ;
-
-
-static void extra_header_test (const char *filename, int filetype) ;
-
-static void header_shrink_test (const char *filename, int filetype) ;
-
-/* Force the start of this buffer to be double aligned. Sparc-solaris will
-** choke if its not.
-*/
-static int     data_out [BUFFER_LEN] ;
-static int     data_in [BUFFER_LEN] ;
-
-int
-main (int argc, char *argv [])
-{      int             do_all = 0 ;
-       int             test_count = 0 ;
-
-       if (argc != 2)
-       {       printf ("Usage : %s <test>\n", argv [0]) ;
-               printf ("    Where <test> is one of the following:\n") ;
-               printf ("           wav  - test WAV file peak chunk\n") ;
-               printf ("           aiff - test AIFF file PEAK chunk\n") ;
-               printf ("           all  - perform all tests\n") ;
-               exit (1) ;
-               } ;
-
-       do_all=!strcmp (argv [1], "all") ;
-
-       if (do_all || ! strcmp (argv [1], "wav"))
-       {       update_header_test ("header.wav", SF_FORMAT_WAV) ;
-               update_seek_short_test ("header_short.wav", SF_FORMAT_WAV) ;
-               update_seek_int_test ("header_int.wav", SF_FORMAT_WAV) ;
-               update_seek_float_test ("header_float.wav", SF_FORMAT_WAV) ;
-               update_seek_double_test ("header_double.wav", SF_FORMAT_WAV) ;
-               header_shrink_test ("header_shrink.wav", SF_FORMAT_WAV) ;
-               extra_header_test ("extra.wav", SF_FORMAT_WAV) ;
-
-               update_header_test ("header.wavex", SF_FORMAT_WAVEX) ;
-               update_seek_short_test ("header_short.wavex", SF_FORMAT_WAVEX) ;
-               update_seek_int_test ("header_int.wavex", SF_FORMAT_WAVEX) ;
-               update_seek_float_test ("header_float.wavex", SF_FORMAT_WAVEX) ;
-               update_seek_double_test ("header_double.wavex", SF_FORMAT_WAVEX) ;
-               header_shrink_test ("header_shrink.wavex", SF_FORMAT_WAVEX) ;
-               extra_header_test ("extra.wavex", SF_FORMAT_WAVEX) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "aiff"))
-       {       update_header_test ("header.aiff", SF_FORMAT_AIFF) ;
-               update_seek_short_test ("header_short.aiff", SF_FORMAT_AIFF) ;
-               update_seek_int_test ("header_int.aiff", SF_FORMAT_AIFF) ;
-               update_seek_float_test ("header_float.aiff", SF_FORMAT_AIFF) ;
-               update_seek_double_test ("header_double.aiff", SF_FORMAT_AIFF) ;
-               header_shrink_test ("header_shrink.wav", SF_FORMAT_AIFF) ;
-               extra_header_test ("extra.aiff", SF_FORMAT_AIFF) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "au"))
-       {       update_header_test ("header.au", SF_FORMAT_AU) ;
-               update_seek_short_test ("header_short.au", SF_FORMAT_AU) ;
-               update_seek_int_test ("header_int.au", SF_FORMAT_AU) ;
-               update_seek_float_test ("header_float.au", SF_FORMAT_AU) ;
-               update_seek_double_test ("header_double.au", SF_FORMAT_AU) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "caf"))
-       {       update_header_test ("header.caf", SF_FORMAT_CAF) ;
-               update_seek_short_test ("header_short.caf", SF_FORMAT_CAF) ;
-               update_seek_int_test ("header_int.caf", SF_FORMAT_CAF) ;
-               update_seek_float_test ("header_float.caf", SF_FORMAT_CAF) ;
-               update_seek_double_test ("header_double.caf", SF_FORMAT_CAF) ;
-               /* extra_header_test ("extra.caf", SF_FORMAT_CAF) ; */
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "nist"))
-       {       update_header_test ("header.nist", SF_FORMAT_NIST) ;
-               update_seek_short_test ("header_short.nist", SF_FORMAT_NIST) ;
-               update_seek_int_test ("header_int.nist", SF_FORMAT_NIST) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "paf"))
-       {       update_header_test ("header.paf", SF_FORMAT_PAF) ;
-               update_seek_short_test ("header_short.paf", SF_FORMAT_PAF) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "ircam"))
-       {       update_header_test ("header.ircam", SF_FORMAT_IRCAM) ;
-               update_seek_short_test ("header_short.ircam", SF_FORMAT_IRCAM) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "w64"))
-       {       update_header_test ("header.w64", SF_FORMAT_W64) ;
-               update_seek_short_test ("header_short.w64", SF_FORMAT_W64) ;
-               update_seek_int_test ("header_int.w64", SF_FORMAT_W64) ;
-               update_seek_float_test ("header_float.w64", SF_FORMAT_W64) ;
-               update_seek_double_test ("header_double.w64", SF_FORMAT_W64) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "rf64"))
-       {       update_header_test ("header.rf64", SF_FORMAT_RF64) ;
-               update_seek_short_test ("header_short.rf64", SF_FORMAT_RF64) ;
-               update_seek_int_test ("header_int.rf64", SF_FORMAT_RF64) ;
-               update_seek_float_test ("header_float.rf64", SF_FORMAT_RF64) ;
-               update_seek_double_test ("header_double.rf64", SF_FORMAT_RF64) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "mat4"))
-       {       update_header_test ("header.mat4", SF_FORMAT_MAT4) ;
-               update_seek_short_test ("header_short.mat4", SF_FORMAT_MAT4) ;
-               update_seek_int_test ("header_int.mat4", SF_FORMAT_MAT4) ;
-               update_seek_float_test ("header_float.mat4", SF_FORMAT_MAT4) ;
-               update_seek_double_test ("header_double.mat4", SF_FORMAT_MAT4) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "mat5"))
-       {       update_header_test ("header.mat5", SF_FORMAT_MAT5) ;
-               update_seek_short_test ("header_short.mat5", SF_FORMAT_MAT5) ;
-               update_seek_int_test ("header_int.mat5", SF_FORMAT_MAT5) ;
-               update_seek_float_test ("header_float.mat5", SF_FORMAT_MAT5) ;
-               update_seek_double_test ("header_double.mat5", SF_FORMAT_MAT5) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "pvf"))
-       {       update_header_test ("header.pvf", SF_FORMAT_PVF) ;
-               update_seek_short_test ("header_short.pvf", SF_FORMAT_PVF) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "avr"))
-       {       update_header_test ("header.avr", SF_FORMAT_AVR) ;
-               update_seek_short_test ("header_short.avr", SF_FORMAT_AVR) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "htk"))
-       {       update_header_test ("header.htk", SF_FORMAT_HTK) ;
-               update_seek_short_test ("header_short.htk", SF_FORMAT_HTK) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "svx"))
-       {       update_header_test ("header.svx", SF_FORMAT_SVX) ;
-               update_seek_short_test ("header_short.svx", SF_FORMAT_SVX) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "voc"))
-       {       update_header_test ("header.voc", SF_FORMAT_VOC) ;
-               /*-update_seek_short_test ("header_short.voc", SF_FORMAT_VOC) ;-*/
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "sds"))
-       {       update_header_test ("header.sds", SF_FORMAT_SDS) ;
-               /*-update_seek_short_test ("header_short.sds", SF_FORMAT_SDS) ;-*/
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "mpc2k"))
-       {       update_header_test ("header.mpc", SF_FORMAT_MPC2K) ;
-               update_seek_short_test ("header_short.mpc", SF_FORMAT_MPC2K) ;
-               test_count++ ;
-               } ;
-
-       if (test_count == 0)
-       {       printf ("Mono : ************************************\n") ;
-               printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-               printf ("Mono : ************************************\n") ;
-               return 1 ;
-               } ;
-
-       return 0 ;
-} /* main */
-
-
-/*============================================================================================
-**     Here are the test functions.
-*/
-
-static void
-update_header_sub (const char *filename, int typemajor, int write_mode)
-{      SNDFILE         *outfile, *infile ;
-       SF_INFO         sfinfo ;
-       int                     k ;
-
-       sfinfo.samplerate = 44100 ;
-       sfinfo.format = (typemajor | SF_FORMAT_PCM_16) ;
-       sfinfo.channels = 1 ;
-       sfinfo.frames = 0 ;
-
-       outfile = test_open_file_or_die (filename, write_mode, &sfinfo, SF_TRUE, __LINE__) ;
-
-       for (k = 0 ; k < BUFFER_LEN ; k++)
-               data_out [k] = k + 1 ;
-       test_write_int_or_die (outfile, 0, data_out, BUFFER_LEN, __LINE__) ;
-
-       if (typemajor != SF_FORMAT_HTK)
-       {       /* The HTK header is not correct when the file is first written. */
-               infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-               sf_close (infile) ;
-               } ;
-
-       sf_command (outfile, SFC_UPDATE_HEADER_NOW, NULL, 0) ;
-
-       /*
-       ** Open file and check log buffer for an error. If header update failed
-       ** the the log buffer will contain errors.
-       */
-       infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       check_log_buffer_or_die (infile, __LINE__) ;
-
-       if (sfinfo.frames < BUFFER_LEN || sfinfo.frames > BUFFER_LEN + 50)
-       {       printf ("\n\nLine %d : Incorrect sample count (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), BUFFER_LEN) ;
-               dump_log_buffer (infile) ;
-               exit (1) ;
-               } ;
-
-       test_read_int_or_die (infile, 0, data_in, BUFFER_LEN, __LINE__) ;
-       for (k = 0 ; k < BUFFER_LEN ; k++)
-               if (data_out [k] != k + 1)
-                       printf ("Error : line %d\n", __LINE__) ;
-
-       sf_close (infile) ;
-
-       /* Set auto update on. */
-       sf_command (outfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
-
-       /* Write more data_out. */
-       for (k = 0 ; k < BUFFER_LEN ; k++)
-               data_out [k] = k + 2 ;
-       test_write_int_or_die (outfile, 0, data_out, BUFFER_LEN, __LINE__) ;
-
-       /* Open file again and make sure no errors in log buffer. */
-       infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       check_log_buffer_or_die (infile, __LINE__) ;
-
-       if (sfinfo.frames < 2 * BUFFER_LEN || sfinfo.frames > 2 * BUFFER_LEN + 50)
-       {       printf ("\n\nLine %d : Incorrect sample count (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 2 * BUFFER_LEN) ;
-               dump_log_buffer (infile) ;
-               exit (1) ;
-               } ;
-
-       sf_close (infile) ;
-
-       sf_close (outfile) ;
-
-       unlink (filename) ;
-} /* update_header_sub */
-
-static void
-update_header_test (const char *filename, int typemajor)
-{
-       print_test_name ("update_header_test", filename) ;
-
-       update_header_sub (filename, typemajor, SFM_WRITE) ;
-       update_header_sub (filename, typemajor, SFM_RDWR) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* update_header_test */
-
-/*==============================================================================
-*/
-
-static void
-update_seek_short_test (const char *filename, int filetype)
-{      SNDFILE *outfile, *infile ;
-       SF_INFO sfinfo ;
-    sf_count_t frames ;
-    short buffer [8] ;
-       int k ;
-
-       print_test_name ("update_seek_short_test", filename) ;
-
-       memset (buffer, 0, sizeof (buffer)) ;
-
-       /* Create sound outfile with no data. */
-       sfinfo.format = filetype | SF_FORMAT_PCM_16 ;
-       sfinfo.samplerate = 48000 ;
-       sfinfo.channels = 2 ;
-
-       if (sf_format_check (&sfinfo) == SF_FALSE)
-               sfinfo.channels = 1 ;
-
-       outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_close (outfile) ;
-
-       /* Open again for read/write. */
-       outfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-
-       /*
-       ** In auto header update mode, seeking to the end of the file with
-    ** SEEK_SET will fail from the 2nd seek on.  seeking to 0, SEEK_END
-       ** will seek to 0 anyway
-       */
-       if (sf_command (outfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) == 0)
-    {  printf ("\n\nError : sf_command (SFC_SET_UPDATE_HEADER_AUTO) return error : %s\n\n", sf_strerror (outfile)) ;
-               exit (1) ;
-               } ;
-
-       /* Now write some frames. */
-       frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-       for (k = 0 ; k < 6 ; k++)
-       {       test_seek_or_die (outfile, k * frames, SEEK_SET, k * frames, sfinfo.channels, __LINE__) ;
-               test_seek_or_die (outfile, 0, SEEK_END, k * frames, sfinfo.channels, __LINE__) ;
-
-               /* Open file again and make sure no errors in log buffer. */
-               infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-               check_log_buffer_or_die (infile, __LINE__) ;
-               sf_close (infile) ;
-
-               if (sfinfo.frames != k * frames)
-               {       printf ("\n\nLine %d : Incorrect sample count (%ld should be %ld)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), SF_COUNT_TO_LONG (k + frames)) ;
-                       dump_log_buffer (infile) ;
-                       exit (1) ;
-                       } ;
-
-               if ((k & 1) == 0)
-                       test_write_short_or_die (outfile, k, buffer, sfinfo.channels * frames, __LINE__) ;
-               else
-                       test_writef_short_or_die (outfile, k, buffer, frames, __LINE__) ;
-               } ;
-
-       sf_close (outfile) ;
-       unlink (filename) ;
-
-       puts ("ok") ;
-       return ;
-} /* update_seek_short_test */
-
-static void
-update_seek_int_test   (const char *filename, int filetype)
-{      SNDFILE *outfile, *infile ;
-       SF_INFO sfinfo ;
-    sf_count_t frames ;
-    int buffer [8] ;
-       int k ;
-
-       print_test_name ("update_seek_int_test", filename) ;
-
-       memset (buffer, 0, sizeof (buffer)) ;
-
-       /* Create sound outfile with no data. */
-       sfinfo.format = filetype | SF_FORMAT_PCM_32 ;
-       sfinfo.samplerate = 48000 ;
-       sfinfo.channels = 2 ;
-
-       if (sf_format_check (&sfinfo) == SF_FALSE)
-               sfinfo.channels = 1 ;
-
-       outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_close (outfile) ;
-
-       /* Open again for read/write. */
-       outfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-
-       /*
-       ** In auto header update mode, seeking to the end of the file with
-    ** SEEK_SET will fail from the 2nd seek on.  seeking to 0, SEEK_END
-       ** will seek to 0 anyway
-       */
-       if (sf_command (outfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) == 0)
-    {  printf ("\n\nError : sf_command (SFC_SET_UPDATE_HEADER_AUTO) return error : %s\n\n", sf_strerror (outfile)) ;
-               exit (1) ;
-               } ;
-
-       /* Now write some frames. */
-       frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-       for (k = 0 ; k < 6 ; k++)
-       {       test_seek_or_die (outfile, k * frames, SEEK_SET, k * frames, sfinfo.channels, __LINE__) ;
-               test_seek_or_die (outfile, 0, SEEK_END, k * frames, sfinfo.channels, __LINE__) ;
-
-               /* Open file again and make sure no errors in log buffer. */
-               infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-               check_log_buffer_or_die (infile, __LINE__) ;
-               sf_close (infile) ;
-
-               if (sfinfo.frames != k * frames)
-               {       printf ("\n\nLine %d : Incorrect sample count (%ld should be %ld)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), SF_COUNT_TO_LONG (k + frames)) ;
-                       dump_log_buffer (infile) ;
-                       exit (1) ;
-                       } ;
-
-               if ((k & 1) == 0)
-                       test_write_int_or_die (outfile, k, buffer, sfinfo.channels * frames, __LINE__) ;
-               else
-                       test_writef_int_or_die (outfile, k, buffer, frames, __LINE__) ;
-               } ;
-
-       sf_close (outfile) ;
-       unlink (filename) ;
-
-       puts ("ok") ;
-       return ;
-} /* update_seek_int_test */
-
-static void
-update_seek_float_test (const char *filename, int filetype)
-{      SNDFILE *outfile, *infile ;
-       SF_INFO sfinfo ;
-    sf_count_t frames ;
-    float buffer [8] ;
-       int k ;
-
-       print_test_name ("update_seek_float_test", filename) ;
-
-       memset (buffer, 0, sizeof (buffer)) ;
-
-       /* Create sound outfile with no data. */
-       sfinfo.format = filetype | SF_FORMAT_FLOAT ;
-       sfinfo.samplerate = 48000 ;
-       sfinfo.channels = 2 ;
-
-       if (sf_format_check (&sfinfo) == SF_FALSE)
-               sfinfo.channels = 1 ;
-
-       outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_close (outfile) ;
-
-       /* Open again for read/write. */
-       outfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-
-       /*
-       ** In auto header update mode, seeking to the end of the file with
-    ** SEEK_SET will fail from the 2nd seek on.  seeking to 0, SEEK_END
-       ** will seek to 0 anyway
-       */
-       if (sf_command (outfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) == 0)
-    {  printf ("\n\nError : sf_command (SFC_SET_UPDATE_HEADER_AUTO) return error : %s\n\n", sf_strerror (outfile)) ;
-               exit (1) ;
-               } ;
-
-       /* Now write some frames. */
-       frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-       for (k = 0 ; k < 6 ; k++)
-       {       test_seek_or_die (outfile, k * frames, SEEK_SET, k * frames, sfinfo.channels, __LINE__) ;
-               test_seek_or_die (outfile, 0, SEEK_END, k * frames, sfinfo.channels, __LINE__) ;
-
-               /* Open file again and make sure no errors in log buffer. */
-               infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-               check_log_buffer_or_die (infile, __LINE__) ;
-               sf_close (infile) ;
-
-               if (sfinfo.frames != k * frames)
-               {       printf ("\n\nLine %d : Incorrect sample count (%ld should be %ld)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), SF_COUNT_TO_LONG (k + frames)) ;
-                       dump_log_buffer (infile) ;
-                       exit (1) ;
-                       } ;
-
-               if ((k & 1) == 0)
-                       test_write_float_or_die (outfile, k, buffer, sfinfo.channels * frames, __LINE__) ;
-               else
-                       test_writef_float_or_die (outfile, k, buffer, frames, __LINE__) ;
-               } ;
-
-       sf_close (outfile) ;
-       unlink (filename) ;
-
-       puts ("ok") ;
-       return ;
-} /* update_seek_float_test */
-
-static void
-update_seek_double_test        (const char *filename, int filetype)
-{      SNDFILE *outfile, *infile ;
-       SF_INFO sfinfo ;
-    sf_count_t frames ;
-    double buffer [8] ;
-       int k ;
-
-       print_test_name ("update_seek_double_test", filename) ;
-
-       memset (buffer, 0, sizeof (buffer)) ;
-
-       /* Create sound outfile with no data. */
-       sfinfo.format = filetype | SF_FORMAT_DOUBLE ;
-       sfinfo.samplerate = 48000 ;
-       sfinfo.channels = 2 ;
-
-       if (sf_format_check (&sfinfo) == SF_FALSE)
-               sfinfo.channels = 1 ;
-
-       outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_close (outfile) ;
-
-       /* Open again for read/write. */
-       outfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-
-       /*
-       ** In auto header update mode, seeking to the end of the file with
-    ** SEEK_SET will fail from the 2nd seek on.  seeking to 0, SEEK_END
-       ** will seek to 0 anyway
-       */
-       if (sf_command (outfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) == 0)
-    {  printf ("\n\nError : sf_command (SFC_SET_UPDATE_HEADER_AUTO) return error : %s\n\n", sf_strerror (outfile)) ;
-               exit (1) ;
-               } ;
-
-       /* Now write some frames. */
-       frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-       for (k = 0 ; k < 6 ; k++)
-       {       test_seek_or_die (outfile, k * frames, SEEK_SET, k * frames, sfinfo.channels, __LINE__) ;
-               test_seek_or_die (outfile, 0, SEEK_END, k * frames, sfinfo.channels, __LINE__) ;
-
-               /* Open file again and make sure no errors in log buffer. */
-               infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-               check_log_buffer_or_die (infile, __LINE__) ;
-               sf_close (infile) ;
-
-               if (sfinfo.frames != k * frames)
-               {       printf ("\n\nLine %d : Incorrect sample count (%ld should be %ld)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), SF_COUNT_TO_LONG (k + frames)) ;
-                       dump_log_buffer (infile) ;
-                       exit (1) ;
-                       } ;
-
-               if ((k & 1) == 0)
-                       test_write_double_or_die (outfile, k, buffer, sfinfo.channels * frames, __LINE__) ;
-               else
-                       test_writef_double_or_die (outfile, k, buffer, frames, __LINE__) ;
-               } ;
-
-       sf_close (outfile) ;
-       unlink (filename) ;
-
-       puts ("ok") ;
-       return ;
-} /* update_seek_double_test */
-
-
-
-static void
-header_shrink_test (const char *filename, int filetype)
-{      SNDFILE *outfile, *infile ;
-       SF_INFO sfinfo ;
-       sf_count_t frames ;
-       float buffer [8], bufferin [8] ;
-
-       print_test_name ("header_shrink_test", filename) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.samplerate = 44100 ;
-       sfinfo.format = filetype | SF_FORMAT_FLOAT ;
-       sfinfo.channels = 1 ;
-
-       memset (buffer, 0xA0, sizeof (buffer)) ;
-
-       /* Now write some frames. */
-       frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-       /* Test the file with extra header data. */
-       outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-
-       sf_command (outfile, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_TRUE) ;
-       sf_command (outfile, SFC_UPDATE_HEADER_NOW, NULL, SF_FALSE) ;
-       sf_command (outfile, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ;
-
-       test_writef_float_or_die (outfile, 0, buffer, frames, __LINE__) ;
-       sf_close (outfile) ;
-
-       /* Open again for read. */
-       infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-       test_readf_float_or_die (infile, 0, bufferin, frames, __LINE__) ;
-       sf_close (infile) ;
-
-       compare_float_or_die (buffer, bufferin, frames, __LINE__) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-       return ;
-} /* header_shrink_test */
-
-
-static void
-extra_header_test (const char *filename, int filetype)
-{      SNDFILE *outfile, *infile ;
-       SF_INFO sfinfo ;
-    sf_count_t frames ;
-    short buffer [8] ;
-       int k = 0 ;
-
-       print_test_name ("extra_header_test", filename) ;
-
-       sfinfo.samplerate = 44100 ;
-       sfinfo.format = (filetype | SF_FORMAT_PCM_16) ;
-       sfinfo.channels = 1 ;
-
-       memset (buffer, 0xA0, sizeof (buffer)) ;
-
-       /* Now write some frames. */
-       frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-       /* Test the file with extra header data. */
-       outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, 462) ;
-       sf_set_string (outfile, SF_STR_TITLE, filename) ;
-       test_writef_short_or_die (outfile, k, buffer, frames, 464) ;
-       sf_set_string (outfile, SF_STR_COPYRIGHT, "(c) 1980 Erik") ;
-       sf_close (outfile) ;
-
-#if 1
-       /*
-       **  Erik de Castro Lopo <erikd@mega-nerd.com> May 23 2004.
-       **
-       ** This file has extra string data in the header and therefore cannot
-       ** currently be opened in SFM_RDWR mode. This is fixable, but its in
-       ** a part of the code I don't want to fiddle with until the Ogg/Vorbis
-       ** integration is done.
-       */
-
-       if ((infile = sf_open (filename, SFM_RDWR, &sfinfo)) != NULL)
-       {       printf ("\n\nError : should not be able to open this file in SFM_RDWR.\n\n") ;
-               exit (1) ;
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-       return ;
-#else
-
-       hexdump_file (filename, 0, 100000) ;
-
-       /* Open again for read/write. */
-       outfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, 491) ;
-
-       /*
-       ** In auto header update mode, seeking to the end of the file with
-    ** SEEK_SET will fail from the 2nd seek on.  seeking to 0, SEEK_END
-       ** will seek to 0 anyway
-       */
-       if (sf_command (outfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) == 0)
-    {  printf ("\n\nError : sf_command (SFC_SET_UPDATE_HEADER_AUTO) return error : %s\n\n", sf_strerror (outfile)) ;
-               exit (1) ;
-               } ;
-
-       /* Now write some frames. */
-       frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-       for (k = 1 ; k < 6 ; k++)
-       {
-               printf ("\n*** pass %d\n", k) ;
-               memset (buffer, 0xA0 + k, sizeof (buffer)) ;
-
-
-               test_seek_or_die (outfile, k * frames, SEEK_SET, k * frames, sfinfo.channels, 512) ;
-               test_seek_or_die (outfile, 0, SEEK_END, k * frames, sfinfo.channels, 513) ;
-
-               /* Open file again and make sure no errors in log buffer. */
-               if (0)
-               {       infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, 517) ;
-                       check_log_buffer_or_die (infile, 518) ;
-                       sf_close (infile) ;
-                       } ;
-
-               if (sfinfo.frames != k * frames)
-               {       printf ("\n\nLine %d : Incorrect sample count (%ld should be %ld)\n", 523, SF_COUNT_TO_LONG (sfinfo.frames), SF_COUNT_TO_LONG (k + frames)) ;
-                       dump_log_buffer (infile) ;
-                       exit (1) ;
-                       } ;
-
-               if ((k & 1) == 0)
-                       test_write_short_or_die (outfile, k, buffer, sfinfo.channels * frames, 529) ;
-               else
-                       test_writef_short_or_die (outfile, k, buffer, frames, 531) ;
-               hexdump_file (filename, 0, 100000) ;
-               } ;
-
-       sf_close (outfile) ;
-       unlink (filename) ;
-
-       puts ("ok") ;
-       return ;
-#endif
-} /* extra_header_test */
-
diff --git a/libs/libsndfile/tests/header_test.def b/libs/libsndfile/tests/header_test.def
deleted file mode 100644 (file)
index 959703e..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-autogen definitions header_test.tpl;
-
-data_type = {
-       name    = "short" ;
-       format  = "SF_FORMAT_PCM_16" ;
-       } ;
-
-data_type = {
-       name    = "int" ;
-       format  = "SF_FORMAT_PCM_32" ;
-       } ;
-
-data_type = {
-       name    = "float" ;
-       format  = "SF_FORMAT_FLOAT" ;
-       } ;
-
-data_type = {
-       name    = "double" ;
-       format  = "SF_FORMAT_DOUBLE" ;
-       } ;
-
diff --git a/libs/libsndfile/tests/header_test.tpl b/libs/libsndfile/tests/header_test.tpl
deleted file mode 100644 (file)
index 6545bb4..0000000
+++ /dev/null
@@ -1,543 +0,0 @@
-[+ AutoGen5 template c +]
-/*
-** Copyright (C) 2001-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation ; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <inttypes.h>
-#include <math.h>
-
-#include <sys/stat.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#if (defined (WIN32) || defined (_WIN32))
-#include <io.h>
-#include <direct.h>
-#endif
-
-#include       <sndfile.h>
-
-#include       "utils.h"
-
-#define        BUFFER_LEN              (1 << 10)
-#define LOG_BUFFER_SIZE        1024
-
-static void    update_header_test (const char *filename, int typemajor) ;
-
-[+ FOR data_type
-+]static void  update_seek_[+ (get "name") +]_test     (const char *filename, int filetype) ;
-[+ ENDFOR data_type
-+]
-
-static void extra_header_test (const char *filename, int filetype) ;
-
-static void header_shrink_test (const char *filename, int filetype) ;
-
-/* Force the start of this buffer to be double aligned. Sparc-solaris will
-** choke if its not.
-*/
-static int     data_out [BUFFER_LEN] ;
-static int     data_in [BUFFER_LEN] ;
-
-int
-main (int argc, char *argv [])
-{      int             do_all = 0 ;
-       int             test_count = 0 ;
-
-       if (argc != 2)
-       {       printf ("Usage : %s <test>\n", argv [0]) ;
-               printf ("    Where <test> is one of the following:\n") ;
-               printf ("           wav  - test WAV file peak chunk\n") ;
-               printf ("           aiff - test AIFF file PEAK chunk\n") ;
-               printf ("           all  - perform all tests\n") ;
-               exit (1) ;
-               } ;
-
-       do_all= !strcmp (argv [1], "all") ;
-
-       if (do_all || ! strcmp (argv [1], "wav"))
-       {       update_header_test ("header.wav", SF_FORMAT_WAV) ;
-               update_seek_short_test ("header_short.wav", SF_FORMAT_WAV) ;
-               update_seek_int_test ("header_int.wav", SF_FORMAT_WAV) ;
-               update_seek_float_test ("header_float.wav", SF_FORMAT_WAV) ;
-               update_seek_double_test ("header_double.wav", SF_FORMAT_WAV) ;
-               header_shrink_test ("header_shrink.wav", SF_FORMAT_WAV) ;
-               extra_header_test ("extra.wav", SF_FORMAT_WAV) ;
-
-               update_header_test ("header.wavex", SF_FORMAT_WAVEX) ;
-               update_seek_short_test ("header_short.wavex", SF_FORMAT_WAVEX) ;
-               update_seek_int_test ("header_int.wavex", SF_FORMAT_WAVEX) ;
-               update_seek_float_test ("header_float.wavex", SF_FORMAT_WAVEX) ;
-               update_seek_double_test ("header_double.wavex", SF_FORMAT_WAVEX) ;
-               header_shrink_test ("header_shrink.wavex", SF_FORMAT_WAVEX) ;
-               extra_header_test ("extra.wavex", SF_FORMAT_WAVEX) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "aiff"))
-       {       update_header_test ("header.aiff", SF_FORMAT_AIFF) ;
-               update_seek_short_test ("header_short.aiff", SF_FORMAT_AIFF) ;
-               update_seek_int_test ("header_int.aiff", SF_FORMAT_AIFF) ;
-               update_seek_float_test ("header_float.aiff", SF_FORMAT_AIFF) ;
-               update_seek_double_test ("header_double.aiff", SF_FORMAT_AIFF) ;
-               header_shrink_test ("header_shrink.wav", SF_FORMAT_AIFF) ;
-               extra_header_test ("extra.aiff", SF_FORMAT_AIFF) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "au"))
-       {       update_header_test ("header.au", SF_FORMAT_AU) ;
-               update_seek_short_test ("header_short.au", SF_FORMAT_AU) ;
-               update_seek_int_test ("header_int.au", SF_FORMAT_AU) ;
-               update_seek_float_test ("header_float.au", SF_FORMAT_AU) ;
-               update_seek_double_test ("header_double.au", SF_FORMAT_AU) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "caf"))
-       {       update_header_test ("header.caf", SF_FORMAT_CAF) ;
-               update_seek_short_test ("header_short.caf", SF_FORMAT_CAF) ;
-               update_seek_int_test ("header_int.caf", SF_FORMAT_CAF) ;
-               update_seek_float_test ("header_float.caf", SF_FORMAT_CAF) ;
-               update_seek_double_test ("header_double.caf", SF_FORMAT_CAF) ;
-               /* extra_header_test ("extra.caf", SF_FORMAT_CAF) ; */
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "nist"))
-       {       update_header_test ("header.nist", SF_FORMAT_NIST) ;
-               update_seek_short_test ("header_short.nist", SF_FORMAT_NIST) ;
-               update_seek_int_test ("header_int.nist", SF_FORMAT_NIST) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "paf"))
-       {       update_header_test ("header.paf", SF_FORMAT_PAF) ;
-               update_seek_short_test ("header_short.paf", SF_FORMAT_PAF) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "ircam"))
-       {       update_header_test ("header.ircam", SF_FORMAT_IRCAM) ;
-               update_seek_short_test ("header_short.ircam", SF_FORMAT_IRCAM) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "w64"))
-       {       update_header_test ("header.w64", SF_FORMAT_W64) ;
-               update_seek_short_test ("header_short.w64", SF_FORMAT_W64) ;
-               update_seek_int_test ("header_int.w64", SF_FORMAT_W64) ;
-               update_seek_float_test ("header_float.w64", SF_FORMAT_W64) ;
-               update_seek_double_test ("header_double.w64", SF_FORMAT_W64) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "rf64"))
-       {       update_header_test ("header.rf64", SF_FORMAT_RF64) ;
-               update_seek_short_test ("header_short.rf64", SF_FORMAT_RF64) ;
-               update_seek_int_test ("header_int.rf64", SF_FORMAT_RF64) ;
-               update_seek_float_test ("header_float.rf64", SF_FORMAT_RF64) ;
-               update_seek_double_test ("header_double.rf64", SF_FORMAT_RF64) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "mat4"))
-       {       update_header_test ("header.mat4", SF_FORMAT_MAT4) ;
-               update_seek_short_test ("header_short.mat4", SF_FORMAT_MAT4) ;
-               update_seek_int_test ("header_int.mat4", SF_FORMAT_MAT4) ;
-               update_seek_float_test ("header_float.mat4", SF_FORMAT_MAT4) ;
-               update_seek_double_test ("header_double.mat4", SF_FORMAT_MAT4) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "mat5"))
-       {       update_header_test ("header.mat5", SF_FORMAT_MAT5) ;
-               update_seek_short_test ("header_short.mat5", SF_FORMAT_MAT5) ;
-               update_seek_int_test ("header_int.mat5", SF_FORMAT_MAT5) ;
-               update_seek_float_test ("header_float.mat5", SF_FORMAT_MAT5) ;
-               update_seek_double_test ("header_double.mat5", SF_FORMAT_MAT5) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "pvf"))
-       {       update_header_test ("header.pvf", SF_FORMAT_PVF) ;
-               update_seek_short_test ("header_short.pvf", SF_FORMAT_PVF) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "avr"))
-       {       update_header_test ("header.avr", SF_FORMAT_AVR) ;
-               update_seek_short_test ("header_short.avr", SF_FORMAT_AVR) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "htk"))
-       {       update_header_test ("header.htk", SF_FORMAT_HTK) ;
-               update_seek_short_test ("header_short.htk", SF_FORMAT_HTK) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "svx"))
-       {       update_header_test ("header.svx", SF_FORMAT_SVX) ;
-               update_seek_short_test ("header_short.svx", SF_FORMAT_SVX) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "voc"))
-       {       update_header_test ("header.voc", SF_FORMAT_VOC) ;
-               /*-update_seek_short_test ("header_short.voc", SF_FORMAT_VOC) ;-*/
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "sds"))
-       {       update_header_test ("header.sds", SF_FORMAT_SDS) ;
-               /*-update_seek_short_test ("header_short.sds", SF_FORMAT_SDS) ;-*/
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "mpc2k"))
-       {       update_header_test ("header.mpc", SF_FORMAT_MPC2K) ;
-               update_seek_short_test ("header_short.mpc", SF_FORMAT_MPC2K) ;
-               test_count++ ;
-               } ;
-
-       if (test_count == 0)
-       {       printf ("Mono : ************************************\n") ;
-               printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-               printf ("Mono : ************************************\n") ;
-               return 1 ;
-               } ;
-
-       return 0 ;
-} /* main */
-
-
-/*============================================================================================
-**     Here are the test functions.
-*/
-
-static void
-update_header_sub (const char *filename, int typemajor, int write_mode)
-{      SNDFILE         *outfile, *infile ;
-       SF_INFO         sfinfo ;
-       int                     k ;
-
-       sfinfo.samplerate = 44100 ;
-       sfinfo.format = (typemajor | SF_FORMAT_PCM_16) ;
-       sfinfo.channels = 1 ;
-       sfinfo.frames = 0 ;
-
-       outfile = test_open_file_or_die (filename, write_mode, &sfinfo, SF_TRUE, __LINE__) ;
-
-       for (k = 0 ; k < BUFFER_LEN ; k++)
-               data_out [k] = k + 1 ;
-       test_write_int_or_die (outfile, 0, data_out, BUFFER_LEN, __LINE__) ;
-
-       if (typemajor != SF_FORMAT_HTK)
-       {       /* The HTK header is not correct when the file is first written. */
-               infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-               sf_close (infile) ;
-               } ;
-
-       sf_command (outfile, SFC_UPDATE_HEADER_NOW, NULL, 0) ;
-
-       /*
-       ** Open file and check log buffer for an error. If header update failed
-       ** the the log buffer will contain errors.
-       */
-       infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       check_log_buffer_or_die (infile, __LINE__) ;
-
-       if (sfinfo.frames < BUFFER_LEN || sfinfo.frames > BUFFER_LEN + 50)
-       {       printf ("\n\nLine %d : Incorrect sample count (%" PRId64 " should be %d)\n", __LINE__, sfinfo.frames, BUFFER_LEN) ;
-               dump_log_buffer (infile) ;
-               exit (1) ;
-               } ;
-
-       test_read_int_or_die (infile, 0, data_in, BUFFER_LEN, __LINE__) ;
-       for (k = 0 ; k < BUFFER_LEN ; k++)
-               if (data_out [k] != k + 1)
-                       printf ("Error : line %d\n", __LINE__) ;
-
-       sf_close (infile) ;
-
-       /* Set auto update on. */
-       sf_command (outfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
-
-       /* Write more data_out. */
-       for (k = 0 ; k < BUFFER_LEN ; k++)
-               data_out [k] = k + 2 ;
-       test_write_int_or_die (outfile, 0, data_out, BUFFER_LEN, __LINE__) ;
-
-       /* Open file again and make sure no errors in log buffer. */
-       infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       check_log_buffer_or_die (infile, __LINE__) ;
-
-       if (sfinfo.frames < 2 * BUFFER_LEN || sfinfo.frames > 2 * BUFFER_LEN + 50)
-       {       printf ("\n\nLine %d : Incorrect sample count (%" PRId64 " should be %d)\n", __LINE__, sfinfo.frames, 2 * BUFFER_LEN) ;
-               dump_log_buffer (infile) ;
-               exit (1) ;
-               } ;
-
-       sf_close (infile) ;
-
-       sf_close (outfile) ;
-
-       unlink (filename) ;
-} /* update_header_sub */
-
-static void
-update_header_test (const char *filename, int typemajor)
-{
-       print_test_name ("update_header_test", filename) ;
-
-       update_header_sub (filename, typemajor, SFM_WRITE) ;
-       update_header_sub (filename, typemajor, SFM_RDWR) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* update_header_test */
-
-/*==============================================================================
-*/
-
-[+ FOR data_type
-+]static void
-update_seek_[+ (get "name") +]_test    (const char *filename, int filetype)
-{      SNDFILE *outfile, *infile ;
-       SF_INFO sfinfo ;
-       sf_count_t frames ;
-       [+ (get "name") +] buffer [8] ;
-       int k ;
-
-       print_test_name ("update_seek_[+ (get "name") +]_test", filename) ;
-
-       memset (buffer, 0, sizeof (buffer)) ;
-
-       /* Create sound outfile with no data. */
-       sfinfo.format = filetype | [+ (get "format") +] ;
-       sfinfo.samplerate = 48000 ;
-       sfinfo.channels = 2 ;
-
-       if (sf_format_check (&sfinfo) == SF_FALSE)
-               sfinfo.channels = 1 ;
-
-       outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_close (outfile) ;
-
-       /* Open again for read/write. */
-       outfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-
-       /*
-       ** In auto header update mode, seeking to the end of the file with
-       ** SEEK_SET will fail from the 2nd seek on.  seeking to 0, SEEK_END
-       ** will seek to 0 anyway
-       */
-       if (sf_command (outfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) == 0)
-       {       printf ("\n\nError : sf_command (SFC_SET_UPDATE_HEADER_AUTO) return error : %s\n\n", sf_strerror (outfile)) ;
-               exit (1) ;
-               } ;
-
-       /* Now write some frames. */
-       frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-       for (k = 0 ; k < 6 ; k++)
-       {       test_seek_or_die (outfile, k * frames, SEEK_SET, k * frames, sfinfo.channels, __LINE__) ;
-               test_seek_or_die (outfile, 0, SEEK_END, k * frames, sfinfo.channels, __LINE__) ;
-
-               /* Open file again and make sure no errors in log buffer. */
-               infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-               check_log_buffer_or_die (infile, __LINE__) ;
-               sf_close (infile) ;
-
-               if (sfinfo.frames != k * frames)
-               {       printf ("\n\nLine %d : Incorrect sample count (%" PRId64 " should be %" PRId64 ")\n", __LINE__, sfinfo.frames, k + frames) ;
-                       dump_log_buffer (infile) ;
-                       exit (1) ;
-                       } ;
-
-               if ((k & 1) == 0)
-                       test_write_[+ (get "name") +]_or_die (outfile, k, buffer, sfinfo.channels * frames, __LINE__) ;
-               else
-                       test_writef_[+ (get "name") +]_or_die (outfile, k, buffer, frames, __LINE__) ;
-               } ;
-
-       sf_close (outfile) ;
-       unlink (filename) ;
-
-       puts ("ok") ;
-       return ;
-} /* update_seek_[+ (get "name") +]_test */
-
-[+ ENDFOR data_type
-+]
-
-static void
-header_shrink_test (const char *filename, int filetype)
-{      SNDFILE *outfile, *infile ;
-       SF_INFO sfinfo ;
-       sf_count_t frames ;
-       float buffer [8], bufferin [8] ;
-
-       print_test_name ("header_shrink_test", filename) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.samplerate = 44100 ;
-       sfinfo.format = filetype | SF_FORMAT_FLOAT ;
-       sfinfo.channels = 1 ;
-
-       memset (buffer, 0xA0, sizeof (buffer)) ;
-
-       /* Now write some frames. */
-       frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-       /* Test the file with extra header data. */
-       outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-
-       sf_command (outfile, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_TRUE) ;
-       sf_command (outfile, SFC_UPDATE_HEADER_NOW, NULL, SF_FALSE) ;
-       sf_command (outfile, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ;
-
-       test_writef_float_or_die (outfile, 0, buffer, frames, __LINE__) ;
-       sf_close (outfile) ;
-
-       /* Open again for read. */
-       infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-       test_readf_float_or_die (infile, 0, bufferin, frames, __LINE__) ;
-       sf_close (infile) ;
-
-       compare_float_or_die (buffer, bufferin, frames, __LINE__) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-       return ;
-} /* header_shrink_test */
-
-
-static void
-extra_header_test (const char *filename, int filetype)
-{      SNDFILE *outfile, *infile ;
-       SF_INFO sfinfo ;
-       sf_count_t frames ;
-       short buffer [8] ;
-       int k = 0 ;
-
-       print_test_name ("extra_header_test", filename) ;
-
-       sfinfo.samplerate = 44100 ;
-       sfinfo.format = (filetype | SF_FORMAT_PCM_16) ;
-       sfinfo.channels = 1 ;
-
-       memset (buffer, 0xA0, sizeof (buffer)) ;
-
-       /* Now write some frames. */
-       frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-       /* Test the file with extra header data. */
-       outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, [+ (tpl-file-line "%2$d") +]) ;
-       sf_set_string (outfile, SF_STR_TITLE, filename) ;
-       test_writef_short_or_die (outfile, k, buffer, frames, [+ (tpl-file-line "%2$d") +]) ;
-       sf_set_string (outfile, SF_STR_COPYRIGHT, "(c) 1980 Erik") ;
-       sf_close (outfile) ;
-
-#if 1
-       /*
-       **  Erik de Castro Lopo <erikd@mega-nerd.com> May 23 2004.
-       **
-       ** This file has extra string data in the header and therefore cannot
-       ** currently be opened in SFM_RDWR mode. This is fixable, but its in
-       ** a part of the code I don't want to fiddle with until the Ogg/Vorbis
-       ** integration is done.
-       */
-
-       if ((infile = sf_open (filename, SFM_RDWR, &sfinfo)) != NULL)
-       {       printf ("\n\nError : should not be able to open this file in SFM_RDWR.\n\n") ;
-               exit (1) ;
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-       return ;
-#else
-
-       hexdump_file (filename, 0, 100000) ;
-
-       /* Open again for read/write. */
-       outfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, [+ (tpl-file-line "%2$d") +]) ;
-
-       /*
-       ** In auto header update mode, seeking to the end of the file with
-       ** SEEK_SET will fail from the 2nd seek on.  seeking to 0, SEEK_END
-       ** will seek to 0 anyway
-       */
-       if (sf_command (outfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) == 0)
-       {       printf ("\n\nError : sf_command (SFC_SET_UPDATE_HEADER_AUTO) return error : %s\n\n", sf_strerror (outfile)) ;
-               exit (1) ;
-               } ;
-
-       /* Now write some frames. */
-       frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-       for (k = 1 ; k < 6 ; k++)
-       {
-               printf ("\n*** pass %d\n", k) ;
-               memset (buffer, 0xA0 + k, sizeof (buffer)) ;
-
-
-               test_seek_or_die (outfile, k * frames, SEEK_SET, k * frames, sfinfo.channels, [+ (tpl-file-line "%2$d") +]) ;
-               test_seek_or_die (outfile, 0, SEEK_END, k * frames, sfinfo.channels, [+ (tpl-file-line "%2$d") +]) ;
-
-               /* Open file again and make sure no errors in log buffer. */
-               if (0)
-               {       infile = test_open_file_or_die (filename, SFM_READ, &sfinfo, [+ (tpl-file-line "%2$d") +]) ;
-                       check_log_buffer_or_die (infile, [+ (tpl-file-line "%2$d") +]) ;
-                       sf_close (infile) ;
-                       } ;
-
-               if (sfinfo.frames != k * frames)
-               {       printf ("\n\nLine %d : Incorrect sample count (%" PRId64 " should be %" PRId64 ")\n", [+ (tpl-file-line "%2$d") +], sfinfo.frames, k + frames) ;
-                       dump_log_buffer (infile) ;
-                       exit (1) ;
-                       } ;
-
-               if ((k & 1) == 0)
-                       test_write_short_or_die (outfile, k, buffer, sfinfo.channels * frames, [+ (tpl-file-line "%2$d") +]) ;
-               else
-                       test_writef_short_or_die (outfile, k, buffer, frames, [+ (tpl-file-line "%2$d") +]) ;
-               hexdump_file (filename, 0, 100000) ;
-               } ;
-
-       sf_close (outfile) ;
-       unlink (filename) ;
-
-       puts ("ok") ;
-       return ;
-#endif
-} /* extra_header_test */
-
diff --git a/libs/libsndfile/tests/headerless_test.c b/libs/libsndfile/tests/headerless_test.c
deleted file mode 100644 (file)
index 6d3e2f2..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define        BUFFER_SIZE             (2000)
-
-static void old_test (void) ;
-static void headerless_test (const char * filename, int format, int expected) ;
-
-int
-main (void)
-{
-       old_test () ;
-
-       headerless_test ("raw.vox", SF_FORMAT_VOX_ADPCM, SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM) ;
-       headerless_test ("raw.gsm", SF_FORMAT_GSM610, SF_FORMAT_RAW | SF_FORMAT_GSM610) ;
-
-       headerless_test ("raw.snd", SF_FORMAT_ULAW, SF_FORMAT_RAW | SF_FORMAT_ULAW) ;
-       headerless_test ("raw.au" , SF_FORMAT_ULAW, SF_FORMAT_RAW | SF_FORMAT_ULAW) ;
-
-       return 0 ;
-} /* main */
-
-static void
-headerless_test (const char * filename, int format, int expected)
-{      static  short   buffer [BUFFER_SIZE] ;
-       SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     k ;
-
-       format &= SF_FORMAT_SUBMASK ;
-
-       print_test_name (__func__, filename) ;
-
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               buffer [k] = k ;
-
-       sfinfo.samplerate       = 8000 ;
-       sfinfo.frames           = 0 ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = SF_FORMAT_RAW | format ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if ((k = sf_write_short (file, buffer, BUFFER_SIZE)) != BUFFER_SIZE)
-       {       printf ("Line %d: sf_write_short failed with short write (%d => %d).\n", __LINE__, BUFFER_SIZE, k) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       memset (buffer, 0, sizeof (buffer)) ;
-
-       /* We should be able to detect these so clear sfinfo. */
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != expected)
-       {       printf ("Line %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, expected, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < BUFFER_SIZE)
-       {       printf ("Line %d: Incorrect number of.frames in file. (%d => %" PRId64 ")\n", __LINE__, BUFFER_SIZE, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("Line %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       sf_close (file) ;
-
-       printf ("ok\n") ;
-       unlink (filename) ;
-} /* headerless_test */
-
-static void
-old_test (void)
-{      static  short   buffer [BUFFER_SIZE] ;
-       SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     k, filetype ;
-       const char      *filename = "headerless.wav" ;
-
-       print_test_name (__func__, "") ;
-
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               buffer [k] = k ;
-
-       filetype = SF_FORMAT_WAV | SF_FORMAT_PCM_16 ;
-
-       sfinfo.samplerate       = 32000 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if ((k = sf_write_short (file, buffer, BUFFER_SIZE)) != BUFFER_SIZE)
-       {       printf ("Line %d: sf_write_short failed with short write (%d => %d).\n", __LINE__, BUFFER_SIZE, k) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       memset (buffer, 0, sizeof (buffer)) ;
-
-       /* Read as RAW but get the bit width and endian-ness correct. */
-       sfinfo.format = filetype = SF_ENDIAN_LITTLE | SF_FORMAT_RAW | SF_FORMAT_PCM_16 ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("Line %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < BUFFER_SIZE)
-       {       printf ("Line %d: Incorrect number of.frames in file. (%d => %" PRId64 ")\n", __LINE__, BUFFER_SIZE, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("Line %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       if ((k = sf_read_short (file, buffer, BUFFER_SIZE)) != BUFFER_SIZE)
-       {       printf ("Line %d: short read (%d).\n", __LINE__, k) ;
-               exit (1) ;
-               } ;
-
-       for (k = 0 ; k < BUFFER_SIZE - 22 ; k++)
-               if (buffer [k + 22] != k)
-               {       printf ("Line %d: Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, k, buffer [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       printf ("ok\n") ;
-       unlink (filename) ;
-} /* old_test */
-
diff --git a/libs/libsndfile/tests/largefile_test.c b/libs/libsndfile/tests/largefile_test.c
deleted file mode 100644 (file)
index 328a589..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
-** Copyright (C) 2006-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define        BUFFER_LEN              (1024 * 1024)
-#define        BUFFER_COUNT    (768)
-
-static void largefile_test (int filetype, const char * filename) ;
-
-int
-main (void)
-{
-       largefile_test (SF_FORMAT_WAV, "largefile.wav") ;
-       largefile_test (SF_FORMAT_AIFF, "largefile.aiff") ;
-
-       return 0 ;
-} /* main */
-
-static void
-largefile_test (int filetype, const char * filename)
-{      static float data [BUFFER_LEN] ;
-       SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int k ;
-
-       print_test_name ("largefile_test", filename) ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.channels         = 2 ;
-       sfinfo.frames           = 0 ;
-       sfinfo.format = (filetype | SF_FORMAT_PCM_32) ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       for (k = 0 ; k < BUFFER_COUNT ; k++)
-               test_write_float_or_die (file, k, data, BUFFER_LEN, __LINE__) ;
-
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if ((sfinfo.frames * sfinfo.channels) / BUFFER_LEN != BUFFER_COUNT)
-       {       printf ("\n\nLine %d : bad frame count.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-
-
-       return ;
-} /* largefile_test */
-
diff --git a/libs/libsndfile/tests/locale_test.c b/libs/libsndfile/tests/locale_test.c
deleted file mode 100644 (file)
index b67d549..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
-** Copyright (C) 2005-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if HAVE_LOCALE_H
-#include <locale.h>
-#endif
-
-#if OS_IS_WIN32
-#include <windows.h>
-#define ENABLE_SNDFILE_WINDOWS_PROTOTYPES 1
-#endif
-
-#include "sndfile.h"
-#include "utils.h"
-
-static void utf8_test (void) ;
-static void wchar_test (void) ;
-
-int
-main (void)
-{
-       utf8_test () ;
-       wchar_test () ;
-
-       return 0 ;
-} /* main */
-
-/*==============================================================================
-*/
-
-static void
-wchar_test (void)
-{
-#if OS_IS_WIN32
-       SNDFILE * file ;
-       SF_INFO info ;
-       LPCWSTR filename = L"test.wav" ;
-
-       print_test_name (__func__, "test.wav") ;
-
-       info.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16 ;
-       info.channels = 1 ;
-       info.samplerate = 44100 ;
-
-       file = sf_wchar_open (filename, SFM_WRITE, &info) ;
-       exit_if_true (file == NULL, "\n\nLine %d : sf_wchar_open failed : %s\n\n", __LINE__, sf_strerror (NULL)) ;
-       sf_close (file) ;
-
-       /*      This should check that the file did in fact get created with a
-       **      wchar_t * filename.
-       */
-       exit_if_true (
-               GetFileAttributesW (filename) == INVALID_FILE_ATTRIBUTES,
-               "\n\nLine %d : GetFileAttributes failed.\n\n", __LINE__
-               ) ;
-
-       /* Use this because the file was created with CreateFileW. */
-       DeleteFileW (filename) ;
-
-       puts ("ok") ;
-#endif
-} /* wchar_test */
-
-/*==============================================================================
-*/
-
-typedef struct
-{      const char *locale ;
-       int utf8 ;
-       const char *filename ;
-       int     width ;
-} LOCALE_DATA ;
-
-static void locale_test (const LOCALE_DATA * locdata) ;
-
-static void
-utf8_test (void)
-{      LOCALE_DATA ldata [] =
-       {       {       "de_DE", 1, "F\303\274\303\237e.au", 7 },
-               {       "en_AU", 1, "kangaroo.au", 11 },
-               {       "POSIX", 0, "posix.au", 8 },
-               {       "pt_PT", 1, "concei\303\247\303\243o.au", 12 },
-
-#if OS_IS_WIN32 == 0
-               {       "ja_JP", 1, "\343\201\212\343\201\257\343\202\210\343\201\206\343\201\224\343\201\226\343\201\204\343\201\276\343\201\231.au", 21 },
-#endif
-
-               {       "vi_VN", 1, "qu\341\273\221c ng\341\273\257.au", 11 },
-               {       NULL, 0, NULL, 0 }
-               } ;
-       int k ;
-
-       for (k = 0 ; ldata [k].locale != NULL ; k++)
-               locale_test (ldata + k) ;
-} /* utf8_test */
-
-
-static void
-locale_test (const LOCALE_DATA * ldata)
-{
-#if (HAVE_LOCALE_H == 0 || HAVE_SETLOCALE == 0)
-       locname = filename = NULL ;
-       width = 0 ;
-       return ;
-#else
-       const short wdata [] = { 1, 2, 3, 4, 5, 6, 7, 8 } ;
-       short rdata [ARRAY_LEN (wdata)] ;
-       const char *old_locale ;
-       char utf8_locname [32] ;
-       SNDFILE *file ;
-       SF_INFO sfinfo ;
-
-       snprintf (utf8_locname, sizeof (utf8_locname), "%s%s", ldata->locale, ldata->utf8 ? ".UTF-8" : "") ;
-
-       /* Change the locale saving the old one. */
-       if ((old_locale = setlocale (LC_CTYPE, utf8_locname)) == NULL)
-               return ;
-
-       printf ("    locale_test           %-8s : %s %*c ", ldata->locale, ldata->filename, 24 - ldata->width, ' ') ;
-       fflush (stdout) ;
-
-       sfinfo.format = SF_FORMAT_AU | SF_FORMAT_PCM_16 ;
-       sfinfo.channels = 1 ;
-       sfinfo.samplerate = 44100 ;
-
-       file = test_open_file_or_die (ldata->filename, SFM_WRITE, &sfinfo, 0, __LINE__) ;
-       test_write_short_or_die (file, 0, wdata, ARRAY_LEN (wdata), __LINE__) ;
-       sf_close (file) ;
-
-       file = test_open_file_or_die (ldata->filename, SFM_READ, &sfinfo, 0, __LINE__) ;
-       test_read_short_or_die (file, 0, rdata, ARRAY_LEN (rdata), __LINE__) ;
-       sf_close (file) ;
-
-       unlink (ldata->filename) ;
-
-       /* Restore old locale. */
-       setlocale (LC_CTYPE, old_locale) ;
-
-       puts ("ok") ;
-#endif
-} /* locale_test */
-
diff --git a/libs/libsndfile/tests/lossy_comp_test.c b/libs/libsndfile/tests/lossy_comp_test.c
deleted file mode 100644 (file)
index 5f9f593..0000000
+++ /dev/null
@@ -1,2372 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <inttypes.h>
-
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define        BUFFER_SIZE             (1 << 14)
-#define        SAMPLE_RATE             11025
-
-#ifndef                M_PI
-#define                M_PI            3.14159265358979323846264338
-#endif
-
-#define                LCT_MAX(x, y)   ((x) > (y) ? (x) : (y))
-
-static void    lcomp_test_short        (const char *filename, int filetype, int chan, double margin) ;
-static void    lcomp_test_int          (const char *filename, int filetype, int chan, double margin) ;
-static void    lcomp_test_float        (const char *filename, int filetype, int chan, double margin) ;
-static void    lcomp_test_double       (const char *filename, int filetype, int chan, double margin) ;
-
-static void    sdlcomp_test_short      (const char *filename, int filetype, int chan, double margin) ;
-static void    sdlcomp_test_int        (const char *filename, int filetype, int chan, double margin) ;
-static void    sdlcomp_test_float      (const char *filename, int filetype, int chan, double margin) ;
-static void    sdlcomp_test_double     (const char *filename, int filetype, int chan, double margin) ;
-
-static void            read_raw_test (const char *filename, int filetype, int chan) ;
-
-static int             error_function (double data, double orig, double margin) ;
-static int             decay_response (int k) ;
-
-static void    gen_signal_double (double *data, double scale, int channels, int datalen) ;
-
-static void    smoothed_diff_short (short *data, unsigned int datalen) ;
-static void    smoothed_diff_int (int *data, unsigned int datalen) ;
-static void    smoothed_diff_float (float *data, unsigned int datalen) ;
-static void    smoothed_diff_double (double *data, unsigned int datalen) ;
-
-static void            check_comment (SNDFILE * file, int format, int lineno) ;
-
-static int             is_lossy (int filetype) ;
-
-/*
-** Force the start of these buffers to be double aligned. Sparc-solaris will
-** choke if they are not.
-*/
-typedef union
-{      double  d [BUFFER_SIZE + 1] ;
-       float   f [BUFFER_SIZE + 1] ;
-       int             i [BUFFER_SIZE + 1] ;
-       short   s [BUFFER_SIZE + 1] ;
-       char    c [BUFFER_SIZE + 1] ;
-} BUFFER ;
-
-static BUFFER  data_buffer ;
-static BUFFER  orig_buffer ;
-static BUFFER  smooth_buffer ;
-
-static const char *long_comment =
-       "This is really quite a long comment. It is designed to be long enough "
-       "to screw up the encoders and decoders if the file container format does "
-       "not handle things correctly. If everything is working correctly, the "
-       "decoder will only decode the actual audio data, and not this string at "
-       "the end of the file." ;
-
-int
-main (int argc, char *argv [])
-{      int             do_all = 0 ;
-       int             test_count = 0 ;
-
-       if (argc != 2)
-       {       printf ("Usage : %s <test>\n", argv [0]) ;
-               printf ("    Where <test> is one of the following:\n") ;
-               printf ("           wav_ima     - test IMA ADPCM WAV file functions\n") ;
-               printf ("           wav_msadpcm - test MS ADPCM WAV file functions\n") ;
-               printf ("           wav_gsm610  - test GSM 6.10 WAV file functions\n") ;
-               printf ("           wav_ulaw    - test u-law WAV file functions\n") ;
-               printf ("           wav_alaw    - test A-law WAV file functions\n") ;
-               printf ("           wve         - test Psion WVE file functions\n") ;
-               printf ("           all         - perform all tests\n") ;
-               exit (1) ;
-               } ;
-
-       do_all = ! strcmp (argv [1], "all") ;
-
-       if (do_all || strcmp (argv [1], "wav_pcm") == 0)
-       {       /* This is just a sanity test for PCM encoding. */
-               lcomp_test_short        ("pcm.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16, 2, 1e-50) ;
-               lcomp_test_int          ("pcm.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_32, 2, 1e-50) ;
-               lcomp_test_short        ("pcm.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_16, 2, 1e-50) ;
-               lcomp_test_int          ("pcm.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_32, 2, 1e-50) ;
-               /* Lite remove start */
-               lcomp_test_float        ("pcm.wav", SF_FORMAT_WAV | SF_FORMAT_FLOAT, 2, 1e-50) ;
-               lcomp_test_double       ("pcm.wav", SF_FORMAT_WAV | SF_FORMAT_DOUBLE, 2, 1e-50) ;
-               /* Lite remove end */
-
-               read_raw_test ("pcm.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_U8, 2) ;
-               test_count++ ;
-               } ;
-
-       /* For all the rest, if the file format supports more than 1 channel, use stereo. */
-       /* Lite remove start */
-       if (do_all || strcmp (argv [1], "wav_ima") == 0)
-       {       lcomp_test_short        ("ima.wav", SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-               lcomp_test_int          ("ima.wav", SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.65) ;
-               lcomp_test_float        ("ima.wav", SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-               lcomp_test_double       ("ima.wav", SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-
-               lcomp_test_short        ("ima.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-               lcomp_test_int          ("ima.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-               lcomp_test_float        ("ima.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-               lcomp_test_double       ("ima.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-
-               sdlcomp_test_short      ("ima.wav", SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-               sdlcomp_test_int        ("ima.wav", SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-               sdlcomp_test_float      ("ima.wav", SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-               sdlcomp_test_double     ("ima.wav", SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "wav_msadpcm") == 0)
-       {       lcomp_test_short        ("msadpcm.wav", SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-               lcomp_test_int          ("msadpcm.wav", SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-               lcomp_test_float        ("msadpcm.wav", SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-               lcomp_test_double       ("msadpcm.wav", SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-
-               lcomp_test_short        ("msadpcm.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-               lcomp_test_int          ("msadpcm.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-               lcomp_test_float        ("msadpcm.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-               lcomp_test_double       ("msadpcm.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-
-               sdlcomp_test_short      ("msadpcm.wav", SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-               sdlcomp_test_int        ("msadpcm.wav", SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-               sdlcomp_test_float      ("msadpcm.wav", SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-               sdlcomp_test_double     ("msadpcm.wav", SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "wav_g721") == 0)
-       {       printf ("**** Fix this later : error bound should be 0.06 ****\n") ;
-               lcomp_test_short        ("g721.wav", SF_FORMAT_WAV | SF_FORMAT_G721_32, 1, 0.7) ;
-               lcomp_test_int          ("g721.wav", SF_FORMAT_WAV | SF_FORMAT_G721_32, 1, 0.7) ;
-
-               lcomp_test_short        ("g721.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_G721_32, 1, 0.7) ;
-               lcomp_test_int          ("g721.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_G721_32, 1, 0.7) ;
-
-               test_count++ ;
-               } ;
-       /* Lite remove end */
-
-       if (do_all || strcmp (argv [1], "wav_ulaw") == 0)
-       {       lcomp_test_short        ("ulaw.wav", SF_FORMAT_WAV | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_int          ("ulaw.wav", SF_FORMAT_WAV | SF_FORMAT_ULAW, 2, 0.04) ;
-
-               lcomp_test_short        ("ulaw.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_int          ("ulaw.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_ULAW, 2, 0.04) ;
-
-               /* Lite remove start */
-               lcomp_test_float        ("ulaw.wav", SF_FORMAT_WAV | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_double       ("ulaw.wav", SF_FORMAT_WAV | SF_FORMAT_ULAW, 2, 0.04) ;
-               /* Lite remove end */
-
-               read_raw_test ("ulaw.wav", SF_FORMAT_WAV | SF_FORMAT_ULAW, 2) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "wav_alaw") == 0)
-       {       lcomp_test_short        ("alaw.wav", SF_FORMAT_WAV | SF_FORMAT_ALAW, 2, 0.04) ;
-               lcomp_test_int          ("alaw.wav", SF_FORMAT_WAV | SF_FORMAT_ALAW, 2, 0.04) ;
-               /* Lite remove start */
-               lcomp_test_float        ("alaw.wav", SF_FORMAT_WAV | SF_FORMAT_ALAW, 2, 0.04) ;
-               lcomp_test_double       ("alaw.wav", SF_FORMAT_WAV | SF_FORMAT_ALAW, 2, 0.04) ;
-               /* Lite remove end */
-
-               read_raw_test ("alaw.wav", SF_FORMAT_WAV | SF_FORMAT_ALAW, 2) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "wav_gsm610") == 0)
-       {       /* Don't do lcomp_test_XXX as the errors are too big. */
-               sdlcomp_test_short      ("gsm610.wav", SF_FORMAT_WAV | SF_FORMAT_GSM610, 1, 0.24) ;
-               sdlcomp_test_int        ("gsm610.wav", SF_FORMAT_WAV | SF_FORMAT_GSM610, 1, 0.24) ;
-
-               sdlcomp_test_short      ("gsm610.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_GSM610, 1, 0.24) ;
-               sdlcomp_test_int        ("gsm610.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_GSM610, 1, 0.24) ;
-
-               /* Lite remove start */
-               sdlcomp_test_float      ("gsm610.wav", SF_FORMAT_WAV | SF_FORMAT_GSM610, 1, 0.24) ;
-               sdlcomp_test_double     ("gsm610.wav", SF_FORMAT_WAV | SF_FORMAT_GSM610, 1, 0.24) ;
-               /* Lite remove end */
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "aiff_ulaw") == 0)
-       {       lcomp_test_short        ("ulaw.aiff", SF_FORMAT_AIFF | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_int          ("ulaw.aiff", SF_FORMAT_AIFF | SF_FORMAT_ULAW, 2, 0.04) ;
-               /* Lite remove start */
-               lcomp_test_float        ("ulaw.aiff", SF_FORMAT_AIFF | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_double       ("ulaw.aiff", SF_FORMAT_AIFF | SF_FORMAT_ULAW, 2, 0.04) ;
-               /* Lite remove end */
-
-               read_raw_test ("ulaw.aiff", SF_FORMAT_AIFF | SF_FORMAT_ULAW, 2) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "aiff_alaw") == 0)
-       {       lcomp_test_short        ("alaw.aiff", SF_FORMAT_AIFF | SF_FORMAT_ALAW, 2, 0.04) ;
-               lcomp_test_int          ("alaw.aiff", SF_FORMAT_AIFF | SF_FORMAT_ALAW, 2, 0.04) ;
-               /* Lite remove start */
-               lcomp_test_float        ("alaw.aiff", SF_FORMAT_AIFF | SF_FORMAT_ALAW, 2, 0.04) ;
-               lcomp_test_double       ("alaw.aiff", SF_FORMAT_AIFF | SF_FORMAT_ALAW, 2, 0.04) ;
-               /* Lite remove end */
-
-               read_raw_test ("alaw.aiff", SF_FORMAT_AIFF | SF_FORMAT_ALAW, 2) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "aiff_gsm610") == 0)
-       {       /* Don't do lcomp_test_XXX as the errors are too big. */
-               sdlcomp_test_short      ("gsm610.aiff", SF_FORMAT_AIFF | SF_FORMAT_GSM610, 1, 0.24) ;
-               sdlcomp_test_int        ("gsm610.aiff", SF_FORMAT_AIFF | SF_FORMAT_GSM610, 1, 0.24) ;
-               /* Lite remove start */
-               sdlcomp_test_float      ("gsm610.aiff", SF_FORMAT_AIFF | SF_FORMAT_GSM610, 1, 0.24) ;
-               sdlcomp_test_double     ("gsm610.aiff", SF_FORMAT_AIFF | SF_FORMAT_GSM610, 1, 0.24) ;
-               /* Lite remove end */
-               test_count++ ;
-               } ;
-
-       if (strcmp (argv [1], "aiff_ima") == 0)
-       {       lcomp_test_short        ("ima.aiff", SF_FORMAT_AIFF | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-               lcomp_test_int          ("ima.aiff", SF_FORMAT_AIFF | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-               /* Lite remove start */
-               lcomp_test_float        ("ima.aiff", SF_FORMAT_AIFF | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-               lcomp_test_double       ("ima.aiff", SF_FORMAT_AIFF | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-               /* Lite remove end */
-               } ;
-
-       if (do_all || strcmp (argv [1], "au_ulaw") == 0)
-       {       lcomp_test_short        ("ulaw.au", SF_ENDIAN_BIG               | SF_FORMAT_AU | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_int          ("ulaw.au", SF_ENDIAN_LITTLE    | SF_FORMAT_AU | SF_FORMAT_ULAW, 2, 0.04) ;
-               /* Lite remove start */
-               lcomp_test_float        ("ulaw.au", SF_ENDIAN_LITTLE    | SF_FORMAT_AU | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_double       ("ulaw.au", SF_ENDIAN_BIG               | SF_FORMAT_AU | SF_FORMAT_ULAW, 2, 0.04) ;
-               /* Lite remove end */
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "au_alaw") == 0)
-       {       lcomp_test_short        ("alaw.au", SF_ENDIAN_LITTLE    | SF_FORMAT_AU | SF_FORMAT_ALAW, 2, 0.04) ;
-               lcomp_test_int          ("alaw.au", SF_ENDIAN_BIG               | SF_FORMAT_AU | SF_FORMAT_ALAW, 2, 0.04) ;
-               /* Lite remove start */
-               lcomp_test_float        ("alaw.au", SF_ENDIAN_BIG               | SF_FORMAT_AU | SF_FORMAT_ALAW, 2, 0.04) ;
-               lcomp_test_double       ("alaw.au", SF_ENDIAN_LITTLE    | SF_FORMAT_AU | SF_FORMAT_ALAW, 2, 0.04) ;
-               /* Lite remove end */
-               test_count++ ;
-               } ;
-
-       /* Lite remove start */
-       if (do_all || strcmp (argv [1], "au_g721") == 0)
-       {       printf ("**** Fix this later : error bound should be 0.06 ****\n") ;
-               lcomp_test_short        ("g721.au", SF_ENDIAN_LITTLE    | SF_FORMAT_AU | SF_FORMAT_G721_32, 1, 0.7) ;
-               lcomp_test_int          ("g721.au", SF_ENDIAN_BIG               | SF_FORMAT_AU | SF_FORMAT_G721_32, 1, 0.7) ;
-               lcomp_test_float        ("g721.au", SF_ENDIAN_LITTLE    | SF_FORMAT_AU | SF_FORMAT_G721_32, 1, 0.7) ;
-               lcomp_test_double       ("g721.au", SF_ENDIAN_BIG               | SF_FORMAT_AU | SF_FORMAT_G721_32, 1, 0.7) ;
-
-/*-            sdlcomp_test_short      ("g721.au", SF_ENDIAN_BIG    | SF_FORMAT_AU | SF_FORMAT_G721_32, 1, 0.07) ;
-               sdlcomp_test_int        ("g721.au", SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_G721_32, 1, 0.07) ;
-               sdlcomp_test_float  ("g721.au", SF_ENDIAN_BIG    | SF_FORMAT_AU | SF_FORMAT_G721_32, 1, 0.07) ;
-               sdlcomp_test_double     ("g721.au", SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_G721_32, 1, 0.12) ;
--*/
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "au_g723") == 0)
-       {       printf ("**** Fix this later : error bound should be 0.16 ****\n") ;
-               lcomp_test_short        ("g723_24.au", SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_G723_24, 1, 0.7) ;
-               lcomp_test_int          ("g723_24.au", SF_ENDIAN_BIG    | SF_FORMAT_AU | SF_FORMAT_G723_24, 1, 0.7) ;
-               lcomp_test_float        ("g723_24.au", SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_G723_24, 1, 0.7) ;
-               lcomp_test_double       ("g723_24.au", SF_ENDIAN_BIG    | SF_FORMAT_AU | SF_FORMAT_G723_24, 1, 0.7) ;
-
-               lcomp_test_short        ("g723_40.au", SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_G723_40, 1, 0.85) ;
-               lcomp_test_int          ("g723_40.au", SF_ENDIAN_BIG    | SF_FORMAT_AU | SF_FORMAT_G723_40, 1, 0.84) ;
-               lcomp_test_float        ("g723_40.au", SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_G723_40, 1, 0.86) ;
-               lcomp_test_double       ("g723_40.au", SF_ENDIAN_BIG    | SF_FORMAT_AU | SF_FORMAT_G723_40, 1, 0.86) ;
-
-/*-            sdlcomp_test_short      ("g723.au", SF_ENDIAN_BIG    | SF_FORMAT_AU | SF_FORMAT_G723_24, 1, 0.15) ;
-               sdlcomp_test_int        ("g723.au", SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_G723_24, 1, 0.15) ;
-               sdlcomp_test_float      ("g723.au", SF_ENDIAN_BIG    | SF_FORMAT_AU | SF_FORMAT_G723_24, 1, 0.15) ;
-               sdlcomp_test_double     ("g723.au", SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_G723_24, 1, 0.15) ;
--*/
-               test_count++ ;
-               } ;
-       /* Lite remove end */
-
-       if (do_all || strcmp (argv [1], "caf_ulaw") == 0)
-       {       lcomp_test_short        ("ulaw.caf", SF_FORMAT_CAF | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_int          ("ulaw.caf", SF_FORMAT_CAF | SF_FORMAT_ULAW, 2, 0.04) ;
-               /* Lite remove start */
-               lcomp_test_float        ("ulaw.caf", SF_FORMAT_CAF | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_double       ("ulaw.caf", SF_FORMAT_CAF | SF_FORMAT_ULAW, 2, 0.04) ;
-               /* Lite remove end */
-
-               read_raw_test ("ulaw.caf", SF_FORMAT_CAF | SF_FORMAT_ULAW, 2) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "caf_alaw") == 0)
-       {       lcomp_test_short        ("alaw.caf", SF_FORMAT_CAF | SF_FORMAT_ALAW, 2, 0.04) ;
-               lcomp_test_int          ("alaw.caf", SF_FORMAT_CAF | SF_FORMAT_ALAW, 2, 0.04) ;
-               /* Lite remove start */
-               lcomp_test_float        ("alaw.caf", SF_FORMAT_CAF | SF_FORMAT_ALAW, 2, 0.04) ;
-               lcomp_test_double       ("alaw.caf", SF_FORMAT_CAF | SF_FORMAT_ALAW, 2, 0.04) ;
-               /* Lite remove end */
-
-               read_raw_test ("alaw.caf", SF_FORMAT_CAF | SF_FORMAT_ALAW, 2) ;
-               test_count++ ;
-               } ;
-
-
-       if (do_all || strcmp (argv [1], "raw_ulaw") == 0)
-       {       lcomp_test_short        ("ulaw.raw", SF_ENDIAN_LITTLE   | SF_FORMAT_RAW | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_int          ("ulaw.raw", SF_ENDIAN_BIG              | SF_FORMAT_RAW | SF_FORMAT_ULAW, 2, 0.04) ;
-               /* Lite remove start */
-               lcomp_test_float        ("ulaw.raw", SF_ENDIAN_LITTLE   | SF_FORMAT_RAW | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_double       ("ulaw.raw", SF_ENDIAN_BIG              | SF_FORMAT_RAW | SF_FORMAT_ULAW, 2, 0.04) ;
-               /* Lite remove end */
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "raw_alaw") == 0)
-       {       lcomp_test_short        ("alaw.raw", SF_ENDIAN_LITTLE   | SF_FORMAT_RAW | SF_FORMAT_ALAW, 2, 0.04) ;
-               lcomp_test_int          ("alaw.raw", SF_ENDIAN_BIG              | SF_FORMAT_RAW | SF_FORMAT_ALAW, 2, 0.04) ;
-               /* Lite remove start */
-               lcomp_test_float        ("alaw.raw", SF_ENDIAN_LITTLE   | SF_FORMAT_RAW | SF_FORMAT_ALAW, 2, 0.04) ;
-               lcomp_test_double       ("alaw.raw", SF_ENDIAN_BIG              | SF_FORMAT_RAW | SF_FORMAT_ALAW, 2, 0.04) ;
-               /* Lite remove end */
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "raw_gsm610") == 0)
-       {       /* Don't do lcomp_test_XXX as the errors are too big. */
-               sdlcomp_test_short      ("raw.gsm", SF_FORMAT_RAW | SF_FORMAT_GSM610, 1, 0.24) ;
-               sdlcomp_test_int        ("raw.gsm", SF_FORMAT_RAW | SF_FORMAT_GSM610, 1, 0.24) ;
-               sdlcomp_test_float      ("raw.gsm", SF_FORMAT_RAW | SF_FORMAT_GSM610, 1, 0.24) ;
-               sdlcomp_test_double     ("raw.gsm", SF_FORMAT_RAW | SF_FORMAT_GSM610, 1, 0.24) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "ogg_vorbis") == 0)
-       {       if (HAVE_EXTERNAL_LIBS)
-               {       /* Don't do lcomp_test_XXX as the errors are too big. */
-                       sdlcomp_test_short      ("vorbis.oga", SF_FORMAT_OGG | SF_FORMAT_VORBIS, 1, 0.30) ;
-                       sdlcomp_test_int        ("vorbis.oga", SF_FORMAT_OGG | SF_FORMAT_VORBIS, 1, 0.30) ;
-                       sdlcomp_test_float      ("vorbis.oga", SF_FORMAT_OGG | SF_FORMAT_VORBIS, 1, 0.30) ;
-                       sdlcomp_test_double     ("vorbis.oga", SF_FORMAT_OGG | SF_FORMAT_VORBIS, 1, 0.30) ;
-                       }
-               else
-                       puts ("    No Ogg/Vorbis tests because Ogg/Vorbis support was not compiled in.") ;
-
-               test_count++ ;
-               } ;
-
-       /* Lite remove start */
-       if (do_all || strcmp (argv [1], "ircam_ulaw") == 0)
-       {       lcomp_test_short        ("ulaw.ircam", SF_ENDIAN_LITTLE | SF_FORMAT_IRCAM | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_int          ("ulaw.ircam", SF_ENDIAN_BIG    | SF_FORMAT_IRCAM | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_float        ("ulaw.ircam", SF_ENDIAN_LITTLE | SF_FORMAT_IRCAM | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_double       ("ulaw.ircam", SF_ENDIAN_BIG    | SF_FORMAT_IRCAM | SF_FORMAT_ULAW, 2, 0.04) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "ircam_alaw") == 0)
-       {       lcomp_test_short        ("alaw.ircam", SF_ENDIAN_LITTLE | SF_FORMAT_IRCAM | SF_FORMAT_ALAW, 2, 0.04) ;
-               lcomp_test_int          ("alaw.ircam", SF_ENDIAN_BIG    | SF_FORMAT_IRCAM | SF_FORMAT_ALAW, 2, 0.04) ;
-               lcomp_test_float        ("alaw.ircam", SF_ENDIAN_LITTLE | SF_FORMAT_IRCAM | SF_FORMAT_ALAW, 2, 0.04) ;
-               lcomp_test_double       ("alaw.ircam", SF_ENDIAN_BIG    | SF_FORMAT_IRCAM | SF_FORMAT_ALAW, 2, 0.04) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "nist_ulaw") == 0)
-       {       lcomp_test_short        ("ulaw.nist", SF_ENDIAN_LITTLE  | SF_FORMAT_NIST | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_int          ("ulaw.nist", SF_ENDIAN_BIG             | SF_FORMAT_NIST | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_float        ("ulaw.nist", SF_ENDIAN_LITTLE  | SF_FORMAT_NIST | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_double       ("ulaw.nist", SF_ENDIAN_BIG             | SF_FORMAT_NIST | SF_FORMAT_ULAW, 2, 0.04) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "nist_alaw") == 0)
-       {       lcomp_test_short        ("alaw.nist", SF_ENDIAN_LITTLE  | SF_FORMAT_NIST | SF_FORMAT_ALAW, 2, 0.04) ;
-               lcomp_test_int          ("alaw.nist", SF_ENDIAN_BIG             | SF_FORMAT_NIST | SF_FORMAT_ALAW, 2, 0.04) ;
-               lcomp_test_float        ("alaw.nist", SF_ENDIAN_LITTLE  | SF_FORMAT_NIST | SF_FORMAT_ALAW, 2, 0.04) ;
-               lcomp_test_double       ("alaw.nist", SF_ENDIAN_BIG             | SF_FORMAT_NIST | SF_FORMAT_ALAW, 2, 0.04) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "voc_ulaw") == 0)
-       {       lcomp_test_short        ("ulaw.voc", SF_FORMAT_VOC | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_int          ("ulaw.voc", SF_FORMAT_VOC | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_float        ("ulaw.voc", SF_FORMAT_VOC | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_double       ("ulaw.voc", SF_FORMAT_VOC | SF_FORMAT_ULAW, 2, 0.04) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "voc_alaw") == 0)
-       {       lcomp_test_short        ("alaw.voc", SF_FORMAT_VOC | SF_FORMAT_ALAW, 2, 0.04) ;
-               lcomp_test_int          ("alaw.voc", SF_FORMAT_VOC | SF_FORMAT_ALAW, 2, 0.04) ;
-               lcomp_test_float        ("alaw.voc", SF_FORMAT_VOC | SF_FORMAT_ALAW, 2, 0.04) ;
-               lcomp_test_double       ("alaw.voc", SF_FORMAT_VOC | SF_FORMAT_ALAW, 2, 0.04) ;
-               test_count++ ;
-               } ;
-       /* Lite remove end */
-
-       if (do_all || strcmp (argv [1], "w64_ulaw") == 0)
-       {       lcomp_test_short        ("ulaw.w64", SF_FORMAT_W64 | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_int          ("ulaw.w64", SF_FORMAT_W64 | SF_FORMAT_ULAW, 2, 0.04) ;
-               /* Lite remove start */
-               lcomp_test_float        ("ulaw.w64", SF_FORMAT_W64 | SF_FORMAT_ULAW, 2, 0.04) ;
-               lcomp_test_double       ("ulaw.w64", SF_FORMAT_W64 | SF_FORMAT_ULAW, 2, 0.04) ;
-               /* Lite remove end */
-
-               read_raw_test ("ulaw.w64", SF_FORMAT_W64 | SF_FORMAT_ULAW, 2) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "w64_alaw") == 0)
-       {       lcomp_test_short        ("alaw.w64", SF_FORMAT_W64 | SF_FORMAT_ALAW, 2, 0.04) ;
-               lcomp_test_int          ("alaw.w64", SF_FORMAT_W64 | SF_FORMAT_ALAW, 2, 0.04) ;
-               /* Lite remove start */
-               lcomp_test_float        ("alaw.w64", SF_FORMAT_W64 | SF_FORMAT_ALAW, 2, 0.04) ;
-               lcomp_test_double       ("alaw.w64", SF_FORMAT_W64 | SF_FORMAT_ALAW, 2, 0.04) ;
-               /* Lite remove end */
-
-               read_raw_test ("alaw.w64", SF_FORMAT_W64 | SF_FORMAT_ALAW, 2) ;
-               test_count++ ;
-               } ;
-
-       /* Lite remove start */
-       if (do_all || strcmp (argv [1], "w64_ima") == 0)
-       {       lcomp_test_short        ("ima.w64", SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-               lcomp_test_int          ("ima.w64", SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-               lcomp_test_float        ("ima.w64", SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-               lcomp_test_double       ("ima.w64", SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-
-               sdlcomp_test_short      ("ima.w64", SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-               sdlcomp_test_int        ("ima.w64", SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-               sdlcomp_test_float      ("ima.w64", SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-               sdlcomp_test_double     ("ima.w64", SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM, 2, 0.18) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "w64_msadpcm") == 0)
-       {       lcomp_test_short        ("msadpcm.w64", SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-               lcomp_test_int          ("msadpcm.w64", SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-               lcomp_test_float        ("msadpcm.w64", SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-               lcomp_test_double       ("msadpcm.w64", SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-
-               sdlcomp_test_short      ("msadpcm.w64", SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-               sdlcomp_test_int        ("msadpcm.w64", SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-               sdlcomp_test_float      ("msadpcm.w64", SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-               sdlcomp_test_double     ("msadpcm.w64", SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM, 2, 0.36) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "wve") == 0)
-       {       lcomp_test_short        ("psion.wve", SF_FORMAT_WVE | SF_FORMAT_ALAW, 1, 0.04) ;
-               lcomp_test_int          ("psion.wve", SF_FORMAT_WVE | SF_FORMAT_ALAW, 1, 0.04) ;
-               /* Lite remove start */
-               lcomp_test_float        ("psion.wve", SF_FORMAT_WVE | SF_FORMAT_ALAW, 1, 0.04) ;
-               lcomp_test_double       ("psion.wve", SF_FORMAT_WVE | SF_FORMAT_ALAW, 1, 0.04) ;
-               /* Lite remove end */
-               test_count++ ;
-               } ;
-
-       /* Lite remove end */
-
-       if (do_all || strcmp (argv [1], "w64_gsm610") == 0)
-       {       /* Don't do lcomp_test_XXX as the errors are too big. */
-               sdlcomp_test_short      ("gsm610.w64", SF_FORMAT_W64 | SF_FORMAT_GSM610, 1, 0.2) ;
-               sdlcomp_test_int        ("gsm610.w64", SF_FORMAT_W64 | SF_FORMAT_GSM610, 1, 0.2) ;
-               /* Lite remove start */
-               sdlcomp_test_float      ("gsm610.w64", SF_FORMAT_W64 | SF_FORMAT_GSM610, 1, 0.2) ;
-               sdlcomp_test_double     ("gsm610.w64", SF_FORMAT_W64 | SF_FORMAT_GSM610, 1, 0.2) ;
-               /* Lite remove end */
-               test_count++ ;
-               } ;
-
-       /* Lite remove start */
-       if (do_all || strcmp (argv [1], "vox_adpcm") == 0)
-       {       lcomp_test_short        ("adpcm.vox", SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, 1, 0.17) ;
-               lcomp_test_int          ("adpcm.vox", SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, 1, 0.17) ;
-               lcomp_test_float        ("adpcm.vox", SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, 1, 0.17) ;
-               lcomp_test_double       ("adpcm.vox", SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, 1, 0.17) ;
-
-               sdlcomp_test_short      ("adpcm.vox", SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, 1, 0.072) ;
-               sdlcomp_test_int        ("adpcm.vox", SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, 1, 0.072) ;
-               sdlcomp_test_float      ("adpcm.vox", SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, 1, 0.072) ;
-               sdlcomp_test_double     ("adpcm.vox", SF_FORMAT_RAW | SF_FORMAT_VOX_ADPCM, 1, 0.072) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || strcmp (argv [1], "xi_dpcm") == 0)
-       {       lcomp_test_short        ("8bit.xi", SF_FORMAT_XI | SF_FORMAT_DPCM_8, 1, 0.25) ;
-               lcomp_test_int          ("8bit.xi", SF_FORMAT_XI | SF_FORMAT_DPCM_8, 1, 0.25) ;
-
-               lcomp_test_short        ("16bit.xi", SF_FORMAT_XI | SF_FORMAT_DPCM_16, 1, 0.002) ;
-               lcomp_test_int          ("16bit.xi", SF_FORMAT_XI | SF_FORMAT_DPCM_16, 1, 0.002) ;
-               lcomp_test_float        ("16bit.xi", SF_FORMAT_XI | SF_FORMAT_DPCM_16, 1, 0.002) ;
-               lcomp_test_double       ("16bit.xi", SF_FORMAT_XI | SF_FORMAT_DPCM_16, 1, 0.002) ;
-               test_count++ ;
-               } ;
-       /* Lite remove end */
-
-       if (test_count == 0)
-       {       printf ("************************************\n") ;
-               printf ("*  No '%s' test defined.\n", argv [1]) ;
-               printf ("************************************\n") ;
-               return 1 ;
-               } ;
-
-       return 0 ;
-} /* main */
-
-/*============================================================================================
-**     Here are the test functions.
-*/
-
-static void
-lcomp_test_short (const char *filename, int filetype, int channels, double margin)
-{      SNDFILE                 *file ;
-       SF_INFO                 sfinfo ;
-       int                             k, m, seekpos, half_max_abs ;
-       sf_count_t              datalen ;
-       short                   *orig, *data ;
-
-       print_test_name ("lcomp_test_short", filename) ;
-
-       datalen = BUFFER_SIZE / channels ;
-
-       data = data_buffer.s ;
-       orig = orig_buffer.s ;
-
-       gen_signal_double (orig_buffer.d, 32000.0, channels, datalen) ;
-       for (k = 0 ; k < channels * datalen ; k++)
-               orig [k] = (short) (orig_buffer.d [k]) ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = 123456789 ;   /* Ridiculous value. */
-       sfinfo.channels         = channels ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-       test_writef_short_or_die (file, 0, orig, datalen, __LINE__) ;
-       sf_set_string (file, SF_STR_COMMENT, long_comment) ;
-       sf_close (file) ;
-
-       memset (data, 0, datalen * sizeof (short)) ;
-
-       if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-       if ((sfinfo.format & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)) != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < datalen / channels)
-       {       printf ("Too few frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", sfinfo.frames, datalen) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames > (datalen + datalen / 20))
-       {       printf ("Too many frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", sfinfo.frames, datalen) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != channels)
-       {       printf ("Incorrect number of channels in file.\n") ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       check_comment (file, filetype, __LINE__) ;
-
-       test_readf_short_or_die (file, 0, data, datalen, __LINE__) ;
-
-       half_max_abs = 0 ;
-       for (k = 0 ; k < datalen ; k++)
-       {       if (error_function (data [k], orig [k], margin))
-               {       printf ("\n\nLine %d: Incorrect sample A (#%d : %d should be %d).\n", __LINE__, k, data [k], orig [k]) ;
-                       oct_save_short (orig, data, datalen) ;
-                       exit (1) ;
-                       } ;
-               half_max_abs = LCT_MAX (half_max_abs, abs (data [k] / 2)) ;
-               } ;
-
-       if (half_max_abs < 1.0)
-       {       printf ("\n\nLine %d: Signal is all zeros.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if ((k = sf_readf_short (file, data, datalen)) != sfinfo.frames - datalen)
-       {       printf ("\n\nLine %d: Incorrect read length (%" PRId64 " should be %d).\n", __LINE__,
-                       channels * sfinfo.frames - datalen, k) ;
-               exit (1) ;
-               } ;
-
-       /*      This check is only for block based encoders which must append silence
-       **      to the end of a file so as to fill out a block.
-       */
-       for (k = 0 ; k < sfinfo.frames - datalen ; k++)
-               if (abs (data [channels * k]) > decay_response (channels * k))
-               {       printf ("\n\nLine %d : Incorrect sample B (#%d : abs (%d) should be < %d).\n", __LINE__, channels * k, data [channels * k], decay_response (channels * k)) ;
-                       exit (1) ;
-                       } ;
-
-       if (! sfinfo.seekable)
-       {       sf_close (file) ;
-               unlink (filename) ;
-               printf ("ok\n") ;
-               return ;
-               } ;
-
-       /* Now test sf_seek function. */
-
-       if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
-       {       printf ("\n\nLine %d: Seek to start of file failed (%d).\n", __LINE__, k) ;
-               exit (1) ;
-               } ;
-
-       for (m = 0 ; m < 3 ; m++)
-       {       test_readf_short_or_die (file, m, data, 11, __LINE__) ;
-
-               for (k = 0 ; k < channels * 11 ; k++)
-                       if (error_function (1.0 * data [k], 1.0 * orig [k + channels * m * 11], margin))
-                       {       printf ("\n\nLine %d: Incorrect sample (m = %d) (#%d : %d => %d).\n", __LINE__, m, k + channels * m * 11, orig [k + channels * m * 11], data [k]) ;
-                               for (m = 0 ; m < channels ; m++)
-                                       printf ("%d ", data [m]) ;
-                               printf ("\n") ;
-                               exit (1) ;
-                               } ;
-               } ;
-
-       seekpos = BUFFER_SIZE / 10 ;
-
-       /* Check seek from start of file. */
-       if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
-       {       printf ("Seek to start of file + %d failed (%d).\n", seekpos, k) ;
-               exit (1) ;
-               } ;
-
-       test_readf_short_or_die (file, 0, data, 1, __LINE__) ;
-
-       if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin))
-       {       printf ("\n\nLine %d: sf_seek (SEEK_SET) followed by sf_readf_short failed (%d, %d).\n", __LINE__, orig [1], data [0]) ;
-               exit (1) ;
-               } ;
-
-       if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
-       {       printf ("\n\nLine %d: sf_seek (SEEK_CUR) with 0 offset failed (%d should be %d)\n", __LINE__, k, seekpos + 1) ;
-               exit (1) ;
-               } ;
-
-       seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
-       k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
-       test_readf_short_or_die (file, 0, data, 1, __LINE__) ;
-       if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin) || k != seekpos)
-       {       printf ("\n\nLine %d: sf_seek (forwards, SEEK_CUR) followed by sf_readf_short failed (%d, %d) (%d, %d).\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos + 1) ;
-               oct_save_short (orig, data, datalen) ;
-               exit (1) ;
-               } ;
-
-       seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
-       /* Check seek backward from current position. */
-       k = sf_seek (file, -20, SEEK_CUR) ;
-       test_readf_short_or_die (file, 0, data, 1, __LINE__) ;
-       if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin) || k != seekpos)
-       {       printf ("\nLine %d: sf_seek (backwards, SEEK_CUR) followed by sf_readf_short failed (%d, %d) (%d, %d).\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos) ;
-               exit (1) ;
-               } ;
-
-       /* Check that read past end of file returns number of items. */
-       sf_seek (file, sfinfo.frames, SEEK_SET) ;
-
-       if ((k = sf_readf_short (file, data, datalen)) != 0)
-       {       printf ("\n\nLine %d: Return value from sf_readf_short past end of file incorrect (%d).\n", __LINE__, k) ;
-               exit (1) ;
-               } ;
-
-       /* Check seek backward from end. */
-       if ((k = sf_seek (file, 5 - sfinfo.frames, SEEK_END)) != 5)
-       {       printf ("\n\nLine %d: sf_seek (SEEK_END) returned %d instead of %d.\n", __LINE__, k, 5) ;
-               exit (1) ;
-               } ;
-
-       test_readf_short_or_die (file, 0, data, 1, __LINE__) ;
-       if (error_function (1.0 * data [0], 1.0 * orig [5 * channels], margin))
-       {       printf ("\nLine %d: sf_seek (SEEK_END) followed by sf_readf_short failed (%d should be %d).\n", __LINE__, data [0], orig [5 * channels]) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-       printf ("ok\n") ;
-} /* lcomp_test_short */
-
-/*--------------------------------------------------------------------------------------------
-*/
-
-static void
-lcomp_test_int (const char *filename, int filetype, int channels, double margin)
-{      SNDFILE                 *file ;
-       SF_INFO                 sfinfo ;
-       int                             k, m, half_max_abs ;
-       sf_count_t              datalen, seekpos ;
-       double                  scale, max_val ;
-       int                             *orig, *data ;
-
-       print_test_name ("lcomp_test_int", filename) ;
-
-       datalen = BUFFER_SIZE / channels ;
-
-       if (is_lossy (filetype))
-       {       scale = 1.0 * 0x10000 ;
-               max_val = 32000.0 * scale ;
-               }
-       else
-       {       scale = 1.0 ;
-               max_val = 0x7fffffff * scale ;
-               } ;
-
-       data = data_buffer.i ;
-       orig = orig_buffer.i ;
-
-       gen_signal_double (orig_buffer.d, max_val, channels, datalen) ;
-
-       for (k = 0 ; k < channels * datalen ; k++)
-               orig [k] = lrint (orig_buffer.d [k]) ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = 123456789 ;   /* Ridiculous value. */
-       sfinfo.channels         = channels ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-       test_writef_int_or_die (file, 0, orig, datalen, __LINE__) ;
-       sf_set_string (file, SF_STR_COMMENT, long_comment) ;
-       sf_close (file) ;
-
-       memset (data, 0, datalen * sizeof (int)) ;
-
-       if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-       if ((sfinfo.format & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)) != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < datalen / channels)
-       {       printf ("Too few.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames > (datalen + datalen / 20))
-       {       printf ("Too many.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != channels)
-       {       printf ("Incorrect number of channels in file.\n") ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       check_comment (file, filetype, __LINE__) ;
-
-       test_readf_int_or_die (file, 0, data, datalen, __LINE__) ;
-
-       half_max_abs = 0 ;
-       for (k = 0 ; k < datalen ; k++)
-       {       if (error_function (data [k] / scale, orig [k] / scale, margin))
-               {       printf ("\nLine %d: Incorrect sample (#%d : %f should be %f).\n", __LINE__, k, data [k] / scale, orig [k] / scale) ;
-                       oct_save_int (orig, data, datalen) ;
-                       exit (1) ;
-                       } ;
-               half_max_abs = LCT_MAX (half_max_abs, abs (data [k] / 2)) ;
-               } ;
-
-       if (half_max_abs < 1.0)
-       {       printf ("\n\nLine %d: Signal is all zeros (%d, 0x%X).\n", __LINE__, half_max_abs, half_max_abs) ;
-               exit (1) ;
-               } ;
-
-       if ((k = sf_readf_int (file, data, datalen)) != sfinfo.frames - datalen)
-       {       printf ("\n\nLine %d: Incorrect read length (%" PRId64 " should be %d).\n", __LINE__,
-                       channels * sfinfo.frames - datalen, k) ;
-               exit (1) ;
-               } ;
-
-       /*      This check is only for block based encoders which must append silence
-       **      to the end of a file so as to fill out a block.
-       */
-       if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM)
-               for (k = 0 ; k < sfinfo.frames - datalen ; k++)
-                       if (abs (data [channels * k] / scale) > decay_response (channels * k))
-                       {       printf ("\n\nLine %d : Incorrect sample B (#%d : abs (%d) should be < %d).\n", __LINE__, channels * k, data [channels * k], decay_response (channels * k)) ;
-                               exit (1) ;
-                               } ;
-
-       if (! sfinfo.seekable)
-       {       sf_close (file) ;
-               unlink (filename) ;
-               printf ("ok\n") ;
-               return ;
-               } ;
-
-       /* Now test sf_seek function. */
-
-       if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
-       {       printf ("\n\nLine %d: Seek to start of file failed (%d).\n", __LINE__, k) ;
-               exit (1) ;
-               } ;
-
-       for (m = 0 ; m < 3 ; m++)
-       {       test_readf_int_or_die (file, m, data, 11, __LINE__) ;
-
-               for (k = 0 ; k < channels * 11 ; k++)
-                       if (error_function (data [k] / scale, orig [k + channels * m * 11] / scale, margin))
-                       {       printf ("\nLine %d: Incorrect sample (m = %d) (#%d : %d => %d).\n", __LINE__, m, k + channels * m * 11, orig [k + channels * m * 11], data [k]) ;
-                               for (m = 0 ; m < channels ; m++)
-                                       printf ("%d ", data [m]) ;
-                               printf ("\n") ;
-                               exit (1) ;
-                               } ;
-               } ;
-
-       seekpos = BUFFER_SIZE / 10 ;
-
-       /* Check seek from start of file. */
-       if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
-       {       printf ("Seek to start of file + %" PRId64 " failed (%d).\n", seekpos, k) ;
-               exit (1) ;
-               } ;
-
-       test_readf_int_or_die (file, 0, data, 1, __LINE__) ;
-
-       if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin))
-       {       printf ("\nLine %d: sf_seek (SEEK_SET) followed by sf_readf_int failed (%d, %d).\n", __LINE__, orig [1], data [0]) ;
-               exit (1) ;
-               } ;
-
-       if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
-       {       printf ("\n\nLine %d: sf_seek (SEEK_CUR) with 0 offset failed (%d should be %" PRId64 ")\n", __LINE__, k, seekpos + 1) ;
-               exit (1) ;
-               } ;
-
-       seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
-       k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
-       test_readf_int_or_die (file, 0, data, 1, __LINE__) ;
-       if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin) || k != seekpos)
-       {       printf ("\nLine %d: sf_seek (forwards, SEEK_CUR) followed by sf_readf_int failed (%d, %d) (%d, %" PRId64 ").\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos + 1) ;
-               exit (1) ;
-               } ;
-
-       seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
-       /* Check seek backward from current position. */
-       k = sf_seek (file, -20, SEEK_CUR) ;
-       test_readf_int_or_die (file, 0, data, 1, __LINE__) ;
-       if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin) || k != seekpos)
-       {       printf ("\nLine %d: sf_seek (backwards, SEEK_CUR) followed by sf_readf_int failed (%d, %d) (%d, %" PRId64 ").\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos) ;
-               exit (1) ;
-               } ;
-
-       /* Check that read past end of file returns number of items. */
-       sf_seek (file, sfinfo.frames, SEEK_SET) ;
-
-       if ((k = sf_readf_int (file, data, datalen)) != 0)
-       {       printf ("\n\nLine %d: Return value from sf_readf_int past end of file incorrect (%d).\n", __LINE__, k) ;
-               exit (1) ;
-               } ;
-
-       /* Check seek backward from end. */
-       if ((k = sf_seek (file, 5 - sfinfo.frames, SEEK_END)) != 5)
-       {       printf ("\n\nLine %d: sf_seek (SEEK_END) returned %d instead of %d.\n", __LINE__, k, 5) ;
-               exit (1) ;
-               } ;
-
-       test_readf_int_or_die (file, 0, data, 1, __LINE__) ;
-       if (error_function (data [0] / scale, orig [5 * channels] / scale, margin))
-       {       printf ("\nLine %d: sf_seek (SEEK_END) followed by sf_readf_short failed (%d should be %d).\n", __LINE__, data [0], orig [5]) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-       printf ("ok\n") ;
-} /* lcomp_test_int */
-
-/*--------------------------------------------------------------------------------------------
-*/
-
-static void
-lcomp_test_float (const char *filename, int filetype, int channels, double margin)
-{      SNDFILE                 *file ;
-       SF_INFO                 sfinfo ;
-       int                             k, m, seekpos ;
-       sf_count_t              datalen ;
-       float                   *orig, *data ;
-       double                  half_max_abs ;
-
-       print_test_name ("lcomp_test_float", filename) ;
-
-       datalen = BUFFER_SIZE / channels ;
-
-       data = data_buffer.f ;
-       orig = orig_buffer.f ;
-
-       gen_signal_double (orig_buffer.d, 32000.0, channels, datalen) ;
-       for (k = 0 ; k < channels * datalen ; k++)
-               orig [k] = orig_buffer.d [k] ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = 123456789 ;   /* Ridiculous value. */
-       sfinfo.channels         = channels ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-       test_writef_float_or_die (file, 0, orig, datalen, __LINE__) ;
-       sf_set_string (file, SF_STR_COMMENT, long_comment) ;
-       sf_close (file) ;
-
-       memset (data, 0, datalen * sizeof (float)) ;
-
-       if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-       if ((sfinfo.format & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)) != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < datalen / channels)
-       {       printf ("Too few.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames > (datalen + datalen / 20))
-       {       printf ("Too many.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != channels)
-       {       printf ("Incorrect number of channels in file.\n") ;
-               exit (1) ;
-               } ;
-
-       check_comment (file, filetype, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       check_comment (file, filetype, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-       test_readf_float_or_die (file, 0, data, datalen, __LINE__) ;
-
-       half_max_abs = 0.0 ;
-       for (k = 0 ; k < datalen ; k++)
-       {       if (error_function (data [k], orig [k], margin))
-               {       printf ("\nLine %d: Incorrect sample A (#%d : %f should be %f).\n", __LINE__, k, data [k], orig [k]) ;
-                       oct_save_float (orig, data, datalen) ;
-                       exit (1) ;
-                       } ;
-               half_max_abs = LCT_MAX (half_max_abs, fabs (0.5 * data [k])) ;
-               } ;
-
-       if (half_max_abs < 1.0)
-       {       printf ("\n\nLine %d: Signal is all zeros.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if ((k = sf_readf_float (file, data, datalen)) != sfinfo.frames - datalen)
-       {       printf ("\n\nLine %d: Incorrect read length (%" PRId64 " should be %d).\n", __LINE__,
-                       channels * sfinfo.frames - datalen, k) ;
-               exit (1) ;
-               } ;
-
-       /*      This check is only for block based encoders which must append silence
-       **      to the end of a file so as to fill out a block.
-       */
-       if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM)
-               for (k = 0 ; k < sfinfo.frames - datalen ; k++)
-                       if (abs (data [channels * k]) > decay_response (channels * k))
-                       {       printf ("\n\nLine %d : Incorrect sample B (#%d : abs (%f) should be < %d).\n", __LINE__, channels * k, data [channels * k], decay_response (channels * k)) ;
-                               exit (1) ;
-                               } ;
-
-       if (! sfinfo.seekable)
-       {       sf_close (file) ;
-               unlink (filename) ;
-               printf ("ok\n") ;
-               return ;
-               } ;
-
-       /* Now test sf_seek function. */
-
-       if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
-       {       printf ("\n\nLine %d: Seek to start of file failed (%d).\n", __LINE__, k) ;
-               exit (1) ;
-               } ;
-
-       for (m = 0 ; m < 3 ; m++)
-       {       test_readf_float_or_die (file, 0, data, 11, __LINE__) ;
-
-               for (k = 0 ; k < channels * 11 ; k++)
-                       if (error_function (data [k], orig [k + channels * m * 11], margin))
-                       {       printf ("\nLine %d: Incorrect sample (m = %d) (#%d : %f => %f).\n", __LINE__, m, k + channels * m * 11, orig [k + channels * m * 11], data [k]) ;
-                               for (m = 0 ; m < channels ; m++)
-                                       printf ("%f ", data [m]) ;
-                               printf ("\n") ;
-                               exit (1) ;
-                               } ;
-               } ;
-
-       seekpos = BUFFER_SIZE / 10 ;
-
-       /* Check seek from start of file. */
-       if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
-       {       printf ("Seek to start of file + %d failed (%d).\n", seekpos, k) ;
-               exit (1) ;
-               } ;
-
-       test_readf_float_or_die (file, 0, data, 1, __LINE__) ;
-
-       if (error_function (data [0], orig [seekpos * channels], margin))
-       {       printf ("\nLine %d: sf_seek (SEEK_SET) followed by sf_readf_float failed (%f, %f).\n", __LINE__, orig [1], data [0]) ;
-               exit (1) ;
-               } ;
-
-       if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
-       {       printf ("\n\nLine %d: sf_seek (SEEK_CUR) with 0 offset failed (%d should be %d)\n", __LINE__, k, seekpos + 1) ;
-               exit (1) ;
-               } ;
-
-       seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
-       k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
-       test_readf_float_or_die (file, 0, data, 1, __LINE__) ;
-       if (error_function (data [0], orig [seekpos * channels], margin) || k != seekpos)
-       {       printf ("\nLine %d: sf_seek (forwards, SEEK_CUR) followed by sf_readf_float failed (%f, %f) (%d, %d).\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos + 1) ;
-               exit (1) ;
-               } ;
-
-       seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
-       /* Check seek backward from current position. */
-       k = sf_seek (file, -20, SEEK_CUR) ;
-       test_readf_float_or_die (file, 0, data, 1, __LINE__) ;
-       if (error_function (data [0], orig [seekpos * channels], margin) || k != seekpos)
-       {       printf ("\nLine %d: sf_seek (backwards, SEEK_CUR) followed by sf_readf_float failed (%f, %f) (%d, %d).\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos) ;
-               exit (1) ;
-               } ;
-
-       /* Check that read past end of file returns number of items. */
-       sf_seek (file, sfinfo.frames, SEEK_SET) ;
-
-       if ((k = sf_readf_float (file, data, datalen)) != 0)
-       {       printf ("\n\nLine %d: Return value from sf_readf_float past end of file incorrect (%d).\n", __LINE__, k) ;
-               exit (1) ;
-               } ;
-
-       /* Check seek backward from end. */
-       if ((k = sf_seek (file, 5 - sfinfo.frames, SEEK_END)) != 5)
-       {       printf ("\n\nLine %d: sf_seek (SEEK_END) returned %d instead of %d.\n", __LINE__, k, 5) ;
-               exit (1) ;
-               } ;
-
-       test_readf_float_or_die (file, 0, data, 1, __LINE__) ;
-       if (error_function (data [0], orig [5 * channels], margin))
-       {       printf ("\nLine %d: sf_seek (SEEK_END) followed by sf_readf_short failed (%f should be %f).\n", __LINE__, data [0], orig [5 * channels]) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-       printf ("ok\n") ;
-} /* lcomp_test_float */
-
-/*--------------------------------------------------------------------------------------------
-*/
-
-static void
-lcomp_test_double (const char *filename, int filetype, int channels, double margin)
-{      SNDFILE                 *file ;
-       SF_INFO                 sfinfo ;
-       int                             k, m, seekpos ;
-       sf_count_t              datalen ;
-       double                  *orig, *data ;
-       double                  half_max_abs ;
-
-       print_test_name ("lcomp_test_double", filename) ;
-
-       datalen = BUFFER_SIZE / channels ;
-
-       data = data_buffer.d ;
-       orig = orig_buffer.d ;
-
-       gen_signal_double (orig_buffer.d, 32000.0, channels, datalen) ;
-       for (k = 0 ; k < channels * datalen ; k++)
-               orig [k] = orig_buffer.d [k] ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = 123456789 ;   /* Ridiculous value. */
-       sfinfo.channels         = channels ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-       test_writef_double_or_die (file, 0, orig, datalen, __LINE__) ;
-       sf_set_string (file, SF_STR_COMMENT, long_comment) ;
-       sf_close (file) ;
-
-       memset (data, 0, datalen * sizeof (double)) ;
-
-       if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-       if ((sfinfo.format & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)) != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < datalen / channels)
-       {       printf ("Too few.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames > (datalen + datalen / 20))
-       {       printf ("Too many.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != channels)
-       {       printf ("Incorrect number of channels in file.\n") ;
-               exit (1) ;
-               } ;
-
-       check_comment (file, filetype, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       check_comment (file, filetype, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-       test_readf_double_or_die (file, 0, data, datalen, __LINE__) ;
-
-       half_max_abs = 0.0 ;
-       for (k = 0 ; k < datalen ; k++)
-       {       if (error_function (data [k], orig [k], margin))
-               {       printf ("\nLine %d: Incorrect sample A (#%d : %f should be %f).\n", __LINE__, k, data [k], orig [k]) ;
-                       oct_save_double (orig, data, datalen) ;
-                       exit (1) ;
-                       } ;
-               half_max_abs = LCT_MAX (half_max_abs, abs (0.5 * data [k])) ;
-               } ;
-
-       if (half_max_abs < 1.0)
-       {       printf ("\n\nLine %d: Signal is all zeros.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if ((k = sf_readf_double (file, data, datalen)) != sfinfo.frames - datalen)
-       {       printf ("\n\nLine %d: Incorrect read length (%" PRId64 " should be %d).\n", __LINE__,
-                       channels * sfinfo.frames - datalen, k) ;
-               exit (1) ;
-               } ;
-
-       /*      This check is only for block based encoders which must append silence
-       **      to the end of a file so as to fill out a block.
-       */
-       if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM)
-               for (k = 0 ; k < sfinfo.frames - datalen ; k++)
-                       if (abs (data [channels * k]) > decay_response (channels * k))
-                       {       printf ("\n\nLine %d : Incorrect sample B (#%d : abs (%f) should be < %d).\n", __LINE__, channels * k, data [channels * k], decay_response (channels * k)) ;
-                               exit (1) ;
-                               } ;
-
-       if (! sfinfo.seekable)
-       {       sf_close (file) ;
-               unlink (filename) ;
-               printf ("ok\n") ;
-               return ;
-               } ;
-
-       /* Now test sf_seek function. */
-
-       if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
-       {       printf ("\n\nLine %d: Seek to start of file failed (%d).\n", __LINE__, k) ;
-               exit (1) ;
-               } ;
-
-       for (m = 0 ; m < 3 ; m++)
-       {       test_readf_double_or_die (file, m, data, 11, __LINE__) ;
-
-               for (k = 0 ; k < channels * 11 ; k++)
-                       if (error_function (data [k], orig [k + channels * m * 11], margin))
-                       {       printf ("\nLine %d: Incorrect sample (m = %d) (#%d : %f => %f).\n", __LINE__, m, k + channels * m * 11, orig [k + channels * m * 11], data [k]) ;
-                               for (m = 0 ; m < channels ; m++)
-                                       printf ("%f ", data [m]) ;
-                               printf ("\n") ;
-                               exit (1) ;
-                               } ;
-               } ;
-
-       seekpos = BUFFER_SIZE / 10 ;
-
-       /* Check seek from start of file. */
-       if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
-       {       printf ("Seek to start of file + %d failed (%d).\n", seekpos, k) ;
-               exit (1) ;
-               } ;
-
-       test_readf_double_or_die (file, 0, data, 1, __LINE__) ;
-
-       if (error_function (data [0], orig [seekpos * channels], margin))
-       {       printf ("\nLine %d: sf_seek (SEEK_SET) followed by sf_readf_double failed (%f, %f).\n", __LINE__, orig [1], data [0]) ;
-               exit (1) ;
-               } ;
-
-       if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
-       {       printf ("\n\nLine %d: sf_seek (SEEK_CUR) with 0 offset failed (%d should be %d)\n", __LINE__, k, seekpos + 1) ;
-               exit (1) ;
-               } ;
-
-       seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
-       k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
-       test_readf_double_or_die (file, 0, data, 1, __LINE__) ;
-       if (error_function (data [0], orig [seekpos * channels], margin) || k != seekpos)
-       {       printf ("\nLine %d: sf_seek (forwards, SEEK_CUR) followed by sf_readf_double failed (%f, %f) (%d, %d).\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos + 1) ;
-               exit (1) ;
-               } ;
-
-       seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
-       /* Check seek backward from current position. */
-       k = sf_seek (file, -20, SEEK_CUR) ;
-       test_readf_double_or_die (file, 0, data, 1, __LINE__) ;
-       if (error_function (data [0], orig [seekpos * channels], margin) || k != seekpos)
-       {       printf ("\nLine %d: sf_seek (backwards, SEEK_CUR) followed by sf_readf_double failed (%f, %f) (%d, %d).\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos) ;
-               exit (1) ;
-               } ;
-
-       /* Check that read past end of file returns number of items. */
-       sf_seek (file, sfinfo.frames, SEEK_SET) ;
-
-       if ((k = sf_readf_double (file, data, datalen)) != 0)
-       {       printf ("\n\nLine %d: Return value from sf_readf_double past end of file incorrect (%d).\n", __LINE__, k) ;
-               exit (1) ;
-               } ;
-
-       /* Check seek backward from end. */
-       if ((k = sf_seek (file, 5 - sfinfo.frames, SEEK_END)) != 5)
-       {       printf ("\n\nLine %d: sf_seek (SEEK_END) returned %d instead of %d.\n", __LINE__, k, 5) ;
-               exit (1) ;
-               } ;
-
-       test_readf_double_or_die (file, 0, data, 1, __LINE__) ;
-       if (error_function (data [0], orig [5 * channels], margin))
-       {       printf ("\nLine %d: sf_seek (SEEK_END) followed by sf_readf_short failed (%f should be %f).\n", __LINE__, data [0], orig [5 * channels]) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-       printf ("ok\n") ;
-} /* lcomp_test_double */
-
-/*========================================================================================
-**     Smoothed differential loss compression tests.
-*/
-
-static void
-sdlcomp_test_short     (const char *filename, int filetype, int channels, double margin)
-{      SNDFILE                 *file ;
-       SF_INFO                 sfinfo ;
-       int                             k, m, seekpos, half_max_abs ;
-       sf_count_t              datalen ;
-       short                   *orig, *data, *smooth ;
-
-channels = 1 ;
-       print_test_name ("sdlcomp_test_short", filename) ;
-
-       datalen = BUFFER_SIZE ;
-
-       orig = orig_buffer.s ;
-       data = data_buffer.s ;
-       smooth = smooth_buffer.s ;
-
-       gen_signal_double (orig_buffer.d, 32000.0, channels, datalen) ;
-       for (k = 0 ; k < datalen ; k++)
-               orig [k] = lrint (orig_buffer.d [k]) ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = 123456789 ;   /* Ridiculous value. */
-       sfinfo.channels         = channels ;
-       sfinfo.format           = filetype ;
-
-       /*      The Vorbis encoder has a bug on PowerPC and X86-64 with sample rates
-       **      <= 22050. Increasing the sample rate to 32000 avoids triggering it.
-       **      See https://trac.xiph.org/ticket/1229
-       */
-       if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-       {       const char * errstr ;
-
-               errstr = sf_strerror (NULL) ;
-               if (strstr (errstr, "Sample rate chosen is known to trigger a Vorbis") == NULL)
-               {       printf ("Line %d: sf_open_fd (SFM_WRITE) failed : %s\n", __LINE__, errstr) ;
-                       dump_log_buffer (NULL) ;
-                       exit (1) ;
-                       } ;
-
-               printf ("\n                                  Sample rate -> 32kHz    ") ;
-               sfinfo.samplerate = 32000 ;
-
-               file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-               } ;
-
-       test_write_short_or_die (file, 0, orig, datalen, __LINE__) ;
-       sf_set_string (file, SF_STR_COMMENT, long_comment) ;
-       sf_close (file) ;
-
-       memset (data, 0, datalen * sizeof (short)) ;
-
-       if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < datalen / channels)
-       {       printf ("Too few.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames > (datalen + 400))
-       {       printf ("Too many.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", sfinfo.frames, datalen) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != channels)
-       {       printf ("Incorrect number of channels in file.\n") ;
-               exit (1) ;
-               } ;
-
-       check_comment (file, filetype, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_readf_short_or_die (file, 0, data, datalen, __LINE__) ;
-
-       memcpy (smooth, orig, datalen * sizeof (short)) ;
-       smoothed_diff_short (data, datalen) ;
-       smoothed_diff_short (smooth, datalen) ;
-
-       half_max_abs = 0.0 ;
-       for (k = 0 ; k < datalen ; k++)
-       {       if (error_function (1.0 * data [k], 1.0 * smooth [k], margin))
-               {       printf ("\nLine %d: Incorrect sample (#%d : %d should be %d).\n", __LINE__, k, data [k], smooth [k]) ;
-                       oct_save_short (orig, smooth, datalen) ;
-                       exit (1) ;
-                       } ;
-               half_max_abs = LCT_MAX (half_max_abs, abs (0.5 * data [k])) ;
-               } ;
-
-       if (half_max_abs < 1)
-       {       printf ("\n\nLine %d: Signal is all zeros.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if ((k = sf_read_short (file, data, datalen)) != sfinfo.frames - datalen)
-       {       printf ("\n\nLine %d: Incorrect read length (%d should be %" PRId64 ").\n", __LINE__, k, sfinfo.frames - datalen) ;
-               exit (1) ;
-               } ;
-
-       if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM &&
-               (sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_GSM610)
-               for (k = 0 ; k < sfinfo.frames - datalen ; k++)
-                       if (abs (data [k]) > decay_response (k))
-                       {       printf ("\n\nLine %d: Incorrect sample (#%" PRId64 " : abs (%d) should be < %d).\n", __LINE__, datalen + k, data [k], decay_response (k)) ;
-                               exit (1) ;
-                               } ;
-
-       /* Now test sf_seek function. */
-       if (sfinfo.seekable)
-       {       if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
-               {       printf ("\n\nLine %d: Seek to start of file failed (%d).\n", __LINE__, k) ;
-                       exit (1) ;
-                       } ;
-
-               for (m = 0 ; m < 3 ; m++)
-               {       test_readf_short_or_die (file, m, data, datalen / 7, __LINE__) ;
-
-                       smoothed_diff_short (data, datalen / 7) ;
-                       memcpy (smooth, orig + m * datalen / 7, datalen / 7 * sizeof (short)) ;
-                       smoothed_diff_short (smooth, datalen / 7) ;
-
-                       for (k = 0 ; k < datalen / 7 ; k++)
-                               if (error_function (1.0 * data [k], 1.0 * smooth [k], margin))
-                               {       printf ("\nLine %d: Incorrect sample C (#%d (%" PRId64 ") : %d => %d).\n", __LINE__, k, k + m * (datalen / 7), smooth [k], data [k]) ;
-                                       for (m = 0 ; m < 10 ; m++)
-                                               printf ("%d ", data [k]) ;
-                                       printf ("\n") ;
-                                       exit (1) ;
-                                       } ;
-                       } ; /* for (m = 0 ; m < 3 ; m++) */
-
-               seekpos = BUFFER_SIZE / 10 ;
-
-               /* Check seek from start of file. */
-               if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
-               {       printf ("Seek to start of file + %d failed (%d).\n", seekpos, k) ;
-                       exit (1) ;
-                       } ;
-               test_readf_short_or_die (file, 0, data, 1, __LINE__) ;
-
-               if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin))
-               {       printf ("\nLine %d: sf_seek (SEEK_SET) followed by sf_read_short failed (%d, %d).\n", __LINE__, orig [1], data [0]) ;
-                       exit (1) ;
-                       } ;
-
-               if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
-               {       printf ("\n\nLine %d: sf_seek (SEEK_CUR) with 0 offset failed (%d should be %d)\n", __LINE__, k, seekpos + 1) ;
-                       exit (1) ;
-                       } ;
-
-               seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
-               k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
-               test_readf_short_or_die (file, 0, data, 1, __LINE__) ;
-               if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin) || k != seekpos)
-               {       printf ("\nLine %d: sf_seek (forwards, SEEK_CUR) followed by sf_read_short failed (%d, %d) (%d, %d).\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos + 1) ;
-                       exit (1) ;
-                       } ;
-
-               seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
-               /* Check seek backward from current position. */
-               k = sf_seek (file, -20, SEEK_CUR) ;
-               test_readf_short_or_die (file, 0, data, 1, __LINE__) ;
-               if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin) || k != seekpos)
-               {       printf ("\nLine %d: sf_seek (backwards, SEEK_CUR) followed by sf_read_short failed (%d, %d) (%d, %d).\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos) ;
-                       exit (1) ;
-                       } ;
-
-               /* Check that read past end of file returns number of items. */
-               sf_seek (file, sfinfo.frames, SEEK_SET) ;
-
-               if ((k = sf_read_short (file, data, datalen)) != 0)
-               {       printf ("\n\nLine %d: Return value from sf_read_short past end of file incorrect (%d).\n", __LINE__, k) ;
-                       exit (1) ;
-                       } ;
-
-               /* Check seek backward from end. */
-
-               if ((k = sf_seek (file, 5 - sfinfo.frames, SEEK_END)) != 5)
-               {       printf ("\n\nLine %d: sf_seek (SEEK_END) returned %d instead of %d.\n", __LINE__, k, 5) ;
-                       exit (1) ;
-                       } ;
-
-               test_read_short_or_die (file, 0, data, channels, __LINE__) ;
-               if (error_function (1.0 * data [0], 1.0 * orig [5 * channels], margin))
-               {       printf ("\nLine %d: sf_seek (SEEK_END) followed by sf_read_short failed (%d should be %d).\n", __LINE__, data [0], orig [5 * channels]) ;
-                       exit (1) ;
-                       } ;
-               } /* if (sfinfo.seekable) */
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-       printf ("ok\n") ;
-} /* sdlcomp_test_short */
-
-static void
-sdlcomp_test_int       (const char *filename, int filetype, int channels, double margin)
-{      SNDFILE                 *file ;
-       SF_INFO                 sfinfo ;
-       int                             k, m, seekpos, half_max_abs ;
-       sf_count_t              datalen ;
-       int                             *orig, *data, *smooth ;
-       double                  scale ;
-
-channels = 1 ;
-
-       print_test_name ("sdlcomp_test_int", filename) ;
-
-       datalen = BUFFER_SIZE ;
-       scale = 1.0 * 0x10000 ;
-
-       orig = orig_buffer.i ;
-       data = data_buffer.i ;
-       smooth = smooth_buffer.i ;
-
-       gen_signal_double (orig_buffer.d, 32000.0 * scale, channels, datalen) ;
-       for (k = 0 ; k < datalen ; k++)
-               orig [k] = lrint (orig_buffer.d [k]) ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = 123456789 ;   /* Ridiculous value. */
-       sfinfo.channels         = channels ;
-       sfinfo.format           = filetype ;
-
-       /*      The Vorbis encoder has a bug on PowerPC and X86-64 with sample rates
-       **      <= 22050. Increasing the sample rate to 32000 avoids triggering it.
-       **      See https://trac.xiph.org/ticket/1229
-       */
-       if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-       {       const char * errstr ;
-
-               errstr = sf_strerror (NULL) ;
-               if (strstr (errstr, "Sample rate chosen is known to trigger a Vorbis") == NULL)
-               {       printf ("Line %d: sf_open_fd (SFM_WRITE) failed : %s\n", __LINE__, errstr) ;
-                       dump_log_buffer (NULL) ;
-                       exit (1) ;
-                       } ;
-
-               printf ("\n                                  Sample rate -> 32kHz    ") ;
-               sfinfo.samplerate = 32000 ;
-
-               file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-               } ;
-
-       test_writef_int_or_die (file, 0, orig, datalen, __LINE__) ;
-       sf_set_string (file, SF_STR_COMMENT, long_comment) ;
-       sf_close (file) ;
-
-       memset (data, 0, datalen * sizeof (int)) ;
-
-       if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("Returned format incorrect (0x%08X => 0x%08X).\n", filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < datalen / channels)
-       {       printf ("Too few.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames > (datalen + 400))
-       {       printf ("Too many.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", sfinfo.frames, datalen) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != channels)
-       {       printf ("Incorrect number of channels in file.\n") ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_readf_int_or_die (file, 0, data, datalen, __LINE__) ;
-
-       memcpy (smooth, orig, datalen * sizeof (int)) ;
-       smoothed_diff_int (data, datalen) ;
-       smoothed_diff_int (smooth, datalen) ;
-
-       half_max_abs = abs (data [0] >> 16) ;
-       for (k = 1 ; k < datalen ; k++)
-       {       if (error_function (data [k] / scale, smooth [k] / scale, margin))
-               {       printf ("\nLine %d: Incorrect sample (#%d : %d should be %d).\n", __LINE__, k, data [k], smooth [k]) ;
-                       oct_save_int (orig, smooth, datalen) ;
-                       exit (1) ;
-                       } ;
-               half_max_abs = LCT_MAX (half_max_abs, abs (data [k] / 2)) ;
-               } ;
-
-       if (half_max_abs < 1)
-       {       printf ("\n\nLine %d: Signal is all zeros.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if ((k = sf_readf_int (file, data, datalen)) != sfinfo.frames - datalen)
-       {       printf ("\n\nLine %d: Incorrect read length (%d should be %" PRId64 ").\n", __LINE__, k, sfinfo.frames - datalen) ;
-               exit (1) ;
-               } ;
-
-       if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_IMA_ADPCM &&
-               (sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM &&
-               (sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_GSM610 &&
-               (sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_G721_32 &&
-               (sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_G723_24)
-               for (k = 0 ; k < sfinfo.frames - datalen ; k++)
-                       if (abs (data [k]) > decay_response (k))
-                       {       printf ("\n\nLine %d: Incorrect sample (#%" PRId64 " : abs (%d) should be < %d).\n", __LINE__, datalen + k, data [k], decay_response (k)) ;
-                               exit (1) ;
-                               } ;
-
-       /* Now test sf_seek function. */
-       if (sfinfo.seekable)
-       {       if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
-               {       printf ("\n\nLine %d: Seek to start of file failed (%d).\n", __LINE__, k) ;
-                       exit (1) ;
-                       } ;
-
-               for (m = 0 ; m < 3 ; m++)
-               {       test_readf_int_or_die (file, m, data, datalen / 7, __LINE__) ;
-
-                       smoothed_diff_int (data, datalen / 7) ;
-                       memcpy (smooth, orig + m * datalen / 7, datalen / 7 * sizeof (int)) ;
-                       smoothed_diff_int (smooth, datalen / 7) ;
-
-                       for (k = 0 ; k < datalen / 7 ; k++)
-                               if (error_function (data [k] / scale, smooth [k] / scale, margin))
-                               {       printf ("\nLine %d: Incorrect sample (#%d (%" PRId64 ") : %d => %d).\n", __LINE__, k, k + m * (datalen / 7), smooth [k], data [k]) ;
-                                       for (m = 0 ; m < 10 ; m++)
-                                               printf ("%d ", data [k]) ;
-                                       printf ("\n") ;
-                                       exit (1) ;
-                                       } ;
-                       } ; /* for (m = 0 ; m < 3 ; m++) */
-
-               seekpos = BUFFER_SIZE / 10 ;
-
-               /* Check seek from start of file. */
-               if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
-               {       printf ("Seek to start of file + %d failed (%d).\n", seekpos, k) ;
-                       exit (1) ;
-                       } ;
-               test_readf_int_or_die (file, 0, data, 1, __LINE__) ;
-
-               if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin))
-               {       printf ("\nLine %d: sf_seek (SEEK_SET) followed by sf_readf_int failed (%d, %d).\n", __LINE__, orig [1], data [0]) ;
-                       exit (1) ;
-                       } ;
-
-               if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
-               {       printf ("\n\nLine %d: sf_seek (SEEK_CUR) with 0 offset failed (%d should be %d)\n", __LINE__, k, seekpos + 1) ;
-                       exit (1) ;
-                       } ;
-
-               seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
-               k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
-               test_readf_int_or_die (file, 0, data, 1, __LINE__) ;
-               if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin) || k != seekpos)
-               {       printf ("\nLine %d: sf_seek (forwards, SEEK_CUR) followed by sf_readf_int failed (%d, %d) (%d, %d).\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos + 1) ;
-                       exit (1) ;
-                       } ;
-
-               seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
-               /* Check seek backward from current position. */
-               k = sf_seek (file, -20, SEEK_CUR) ;
-               test_readf_int_or_die (file, 0, data, 1, __LINE__) ;
-               if (error_function (1.0 * data [0], 1.0 * orig [seekpos * channels], margin) || k != seekpos)
-               {       printf ("\nLine %d: sf_seek (backwards, SEEK_CUR) followed by sf_readf_int failed (%d, %d) (%d, %d).\n", __LINE__, data [0], orig [seekpos * channels], k, seekpos) ;
-                       exit (1) ;
-                       } ;
-
-               /* Check that read past end of file returns number of items. */
-               sf_seek (file, sfinfo.frames, SEEK_SET) ;
-
-               if ((k = sf_readf_int (file, data, datalen)) != 0)
-               {       printf ("\n\nLine %d: Return value from sf_readf_int past end of file incorrect (%d).\n", __LINE__, k) ;
-                       exit (1) ;
-                       } ;
-
-               /* Check seek backward from end. */
-
-               if ((k = sf_seek (file, 5 - sfinfo.frames, SEEK_END)) != 5)
-               {       printf ("\n\nLine %d: sf_seek (SEEK_END) returned %d instead of %d.\n", __LINE__, k, 5) ;
-                       exit (1) ;
-                       } ;
-
-               test_readf_int_or_die (file, 0, data, 1, __LINE__) ;
-               if (error_function (data [0] / scale, orig [5] / scale, margin))
-               {       printf ("\nLine %d: sf_seek (SEEK_END) followed by sf_readf_int failed (%d should be %d).\n", __LINE__, data [0], orig [5]) ;
-                       exit (1) ;
-                       } ;
-               } /* if (sfinfo.seekable) */
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-       printf ("ok\n") ;
-} /* sdlcomp_test_int */
-
-static void
-sdlcomp_test_float     (const char *filename, int filetype, int channels, double margin)
-{      SNDFILE                 *file ;
-       SF_INFO                 sfinfo ;
-       int                             k, m, seekpos ;
-       sf_count_t              datalen ;
-       float                   *orig, *data, *smooth ;
-       double                  half_max_abs ;
-
-channels = 1 ;
-
-       print_test_name ("sdlcomp_test_float", filename) ;
-
-       if ((filetype & SF_FORMAT_SUBMASK) == SF_FORMAT_VORBIS)
-       {       puts ("Not working for this format.") ;
-               return ;
-               } ;
-
-printf ("** fix this ** ") ;
-
-       datalen = BUFFER_SIZE ;
-
-       orig = orig_buffer.f ;
-       data = data_buffer.f ;
-       smooth = smooth_buffer.f ;
-
-       gen_signal_double (orig_buffer.d, 32000.0, channels, datalen) ;
-       for (k = 0 ; k < datalen ; k++)
-               orig [k] = lrint (orig_buffer.d [k]) ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = 123456789 ;   /* Ridiculous value. */
-       sfinfo.channels         = channels ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-       test_write_float_or_die (file, 0, orig, datalen, __LINE__) ;
-       sf_set_string (file, SF_STR_COMMENT, long_comment) ;
-       sf_close (file) ;
-
-       memset (data, 0, datalen * sizeof (float)) ;
-
-       if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-       if ((sfinfo.format & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)) != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < datalen / channels)
-       {       printf ("Too few.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames > (datalen + 400))
-       {       printf ("Too many.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", sfinfo.frames, datalen) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != channels)
-       {       printf ("Incorrect number of channels in file.\n") ;
-               exit (1) ;
-               } ;
-
-       check_comment (file, filetype, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_float_or_die (file, 0, data, datalen, __LINE__) ;
-
-       memcpy (smooth, orig, datalen * sizeof (float)) ;
-       smoothed_diff_float (data, datalen) ;
-       smoothed_diff_float (smooth, datalen) ;
-
-       half_max_abs = fabs (data [0]) ;
-       for (k = 1 ; k < datalen ; k++)
-       {       if (error_function (data [k], smooth [k], margin))
-               {       printf ("\nLine %d: Incorrect sample (#%d : %d should be %d).\n", __LINE__, k, (int) data [k], (int) smooth [k]) ;
-                       oct_save_float (orig, smooth, datalen) ;
-                       exit (1) ;
-                       } ;
-               half_max_abs = LCT_MAX (half_max_abs, abs (0.5 * data [k])) ;
-               } ;
-
-       if (half_max_abs <= 0.0)
-       {       printf ("\n\nLine %d: Signal is all zeros.\n", __LINE__) ;
-               printf ("half_max_abs : % 10.6f\n", half_max_abs) ;
-               exit (1) ;
-               } ;
-
-       if ((k = sf_read_float (file, data, datalen)) != sfinfo.frames - datalen)
-       {       printf ("\n\nLine %d: Incorrect read length (%d should be %" PRId64 ").\n", __LINE__, k, sfinfo.frames - datalen) ;
-               exit (1) ;
-               } ;
-
-       if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM &&
-               (sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_GSM610)
-               for (k = 0 ; k < sfinfo.frames - datalen ; k++)
-                       if (abs (data [k]) > decay_response (k))
-                       {       printf ("\n\nLine %d: Incorrect sample (#%" PRId64 " : abs (%d) should be < %d).\n", __LINE__, datalen + k, (int) data [k], (int) decay_response (k)) ;
-                               exit (1) ;
-                               } ;
-
-       /* Now test sf_seek function. */
-       if (sfinfo.seekable)
-       {       if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
-               {       printf ("\n\nLine %d: Seek to start of file failed (%d).\n", __LINE__, k) ;
-                       exit (1) ;
-                       } ;
-
-               for (m = 0 ; m < 3 ; m++)
-               {       test_read_float_or_die (file, 0, data, datalen / 7, __LINE__) ;
-
-                       smoothed_diff_float (data, datalen / 7) ;
-                       memcpy (smooth, orig + m * datalen / 7, datalen / 7 * sizeof (float)) ;
-                       smoothed_diff_float (smooth, datalen / 7) ;
-
-                       for (k = 0 ; k < datalen / 7 ; k++)
-                               if (error_function (data [k], smooth [k], margin))
-                               {       printf ("\nLine %d: Incorrect sample C (#%d (%" PRId64 ") : %d => %d).\n", __LINE__, k, k + m * (datalen / 7), (int) smooth [k], (int) data [k]) ;
-                                       for (m = 0 ; m < 10 ; m++)
-                                               printf ("%d ", (int) data [k]) ;
-                                       printf ("\n") ;
-                                       exit (1) ;
-                                       } ;
-                       } ; /* for (m = 0 ; m < 3 ; m++) */
-
-               seekpos = BUFFER_SIZE / 10 ;
-
-               /* Check seek from start of file. */
-               if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
-               {       printf ("Seek to start of file + %d failed (%d).\n", seekpos, k) ;
-                       exit (1) ;
-                       } ;
-               test_read_float_or_die (file, 0, data, channels, __LINE__) ;
-
-               if (error_function (data [0], orig [seekpos * channels], margin))
-               {       printf ("\nLine %d: sf_seek (SEEK_SET) followed by sf_read_float failed (%d, %d).\n", __LINE__, (int) orig [1], (int) data [0]) ;
-                       exit (1) ;
-                       } ;
-
-               if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
-               {       printf ("\n\nLine %d: sf_seek (SEEK_CUR) with 0 offset failed (%d should be %d)\n", __LINE__, k, seekpos + 1) ;
-                       exit (1) ;
-                       } ;
-
-               seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
-               k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
-               test_read_float_or_die (file, 0, data, channels, __LINE__) ;
-               if (error_function (data [0], orig [seekpos * channels], margin) || k != seekpos)
-               {       printf ("\nLine %d: sf_seek (forwards, SEEK_CUR) followed by sf_read_float failed (%d, %d) (%d, %d).\n", __LINE__, (int) data [0], (int) orig [seekpos * channels], k, seekpos + 1) ;
-                       exit (1) ;
-                       } ;
-
-               seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
-               /* Check seek backward from current position. */
-               k = sf_seek (file, -20, SEEK_CUR) ;
-               test_read_float_or_die (file, 0, data, channels, __LINE__) ;
-               if (error_function (data [0], orig [seekpos * channels], margin) || k != seekpos)
-               {       printf ("\nLine %d: sf_seek (backwards, SEEK_CUR) followed by sf_read_float failed (%d, %d) (%d, %d).\n", __LINE__, (int) data [0], (int) orig [seekpos * channels], k, seekpos) ;
-                       exit (1) ;
-                       } ;
-
-               /* Check that read past end of file returns number of items. */
-               sf_seek (file, sfinfo.frames, SEEK_SET) ;
-
-               if ((k = sf_read_float (file, data, datalen)) != 0)
-               {       printf ("\n\nLine %d: Return value from sf_read_float past end of file incorrect (%d).\n", __LINE__, k) ;
-                       exit (1) ;
-                       } ;
-
-               /* Check seek backward from end. */
-
-               if ((k = sf_seek (file, 5 - sfinfo.frames, SEEK_END)) != 5)
-               {       printf ("\n\nLine %d: sf_seek (SEEK_END) returned %d instead of %d.\n", __LINE__, k, 5) ;
-                       exit (1) ;
-                       } ;
-
-               test_read_float_or_die (file, 0, data, channels, __LINE__) ;
-               if (error_function (data [0], orig [5 * channels], margin))
-               {       printf ("\nLine %d: sf_seek (SEEK_END) followed by sf_read_float failed (%f should be %f).\n", __LINE__, data [0], orig [5 * channels]) ;
-                       exit (1) ;
-                       } ;
-               } /* if (sfinfo.seekable) */
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-       printf ("ok\n") ;
-} /* sdlcomp_test_float */
-
-static void
-sdlcomp_test_double    (const char *filename, int filetype, int channels, double margin)
-{      SNDFILE                 *file ;
-       SF_INFO                 sfinfo ;
-       int                             k, m, seekpos ;
-       sf_count_t              datalen ;
-       double                  *orig, *data, *smooth, half_max_abs ;
-
-channels = 1 ;
-       print_test_name ("sdlcomp_test_double", filename) ;
-
-       if ((filetype & SF_FORMAT_SUBMASK) == SF_FORMAT_VORBIS)
-       {       puts ("Not working for this format.") ;
-               return ;
-               } ;
-
-       datalen = BUFFER_SIZE ;
-
-       orig = orig_buffer.d ;
-       data = data_buffer.d ;
-       smooth = smooth_buffer.d ;
-
-       gen_signal_double (orig_buffer.d, 32000.0, channels, datalen) ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = 123456789 ;   /* Ridiculous value. */
-       sfinfo.channels         = channels ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-       test_write_double_or_die (file, 0, orig, datalen, __LINE__) ;
-       sf_set_string (file, SF_STR_COMMENT, long_comment) ;
-       sf_close (file) ;
-
-       memset (data, 0, datalen * sizeof (double)) ;
-
-       if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("Returned format incorrect (0x%08X => 0x%08X).\n", filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < datalen / channels)
-       {       printf ("Too few.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames > (datalen + 400))
-       {       printf ("Too many.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", sfinfo.frames, datalen) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != channels)
-       {       printf ("Incorrect number of channels in file.\n") ;
-               exit (1) ;
-               } ;
-
-       check_comment (file, filetype, __LINE__) ;
-
-       check_comment (file, filetype, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data, datalen, __LINE__) ;
-
-       memcpy (smooth, orig, datalen * sizeof (double)) ;
-       smoothed_diff_double (data, datalen) ;
-       smoothed_diff_double (smooth, datalen) ;
-
-       half_max_abs = 0.0 ;
-       for (k = 0 ; k < datalen ; k++)
-       {       if (error_function (data [k], smooth [k], margin))
-               {       printf ("\n\nLine %d: Incorrect sample (#%d : %d should be %d).\n", __LINE__, k, (int) data [k], (int) smooth [k]) ;
-                       oct_save_double (orig, smooth, datalen) ;
-                       exit (1) ;
-                       } ;
-               half_max_abs = LCT_MAX (half_max_abs, 0.5 * fabs (data [k])) ;
-               } ;
-
-       if (half_max_abs < 1.0)
-       {       printf ("\n\nLine %d: Signal is all zeros.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if ((k = sf_read_double (file, data, datalen)) != sfinfo.frames - datalen)
-       {       printf ("\n\nLine %d: Incorrect read length (%d should be %" PRId64 ").\n", __LINE__, k, sfinfo.frames - datalen) ;
-               exit (1) ;
-               } ;
-
-       if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM &&
-               (sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_GSM610)
-               for (k = 0 ; k < sfinfo.frames - datalen ; k++)
-                       if (abs (data [k]) > decay_response (k))
-                       {       printf ("\n\nLine %d: Incorrect sample (#%" PRId64 " : abs (%d) should be < %d).\n", __LINE__, datalen + k, (int) data [k], (int) decay_response (k)) ;
-                               exit (1) ;
-                               } ;
-
-       /* Now test sf_seek function. */
-       if (sfinfo.seekable)
-       {       if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
-               {       printf ("\n\nLine %d: Seek to start of file failed (%d).\n", __LINE__, k) ;
-                       exit (1) ;
-                       } ;
-
-               for (m = 0 ; m < 3 ; m++)
-               {       test_read_double_or_die (file, m, data, datalen / 7, __LINE__) ;
-
-                       smoothed_diff_double (data, datalen / 7) ;
-                       memcpy (smooth, orig + m * datalen / 7, datalen / 7 * sizeof (double)) ;
-                       smoothed_diff_double (smooth, datalen / 7) ;
-
-                       for (k = 0 ; k < datalen / 7 ; k++)
-                               if (error_function (data [k], smooth [k], margin))
-                               {       printf ("\nLine %d: Incorrect sample C (#%d (%" PRId64 ") : %d => %d).\n", __LINE__, k, k + m * (datalen / 7), (int) smooth [k], (int) data [k]) ;
-                                       for (m = 0 ; m < 10 ; m++)
-                                               printf ("%d ", (int) data [k]) ;
-                                       printf ("\n") ;
-                                       exit (1) ;
-                                       } ;
-                       } ; /* for (m = 0 ; m < 3 ; m++) */
-
-               seekpos = BUFFER_SIZE / 10 ;
-
-               /* Check seek from start of file. */
-               if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
-               {       printf ("Seek to start of file + %d failed (%d).\n", seekpos, k) ;
-                       exit (1) ;
-                       } ;
-               test_read_double_or_die (file, 0, data, channels, __LINE__) ;
-
-               if (error_function (data [0], orig [seekpos * channels], margin))
-               {       printf ("\nLine %d: sf_seek (SEEK_SET) followed by sf_read_double failed (%d, %d).\n", __LINE__, (int) orig [1], (int) data [0]) ;
-                       exit (1) ;
-                       } ;
-
-               if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
-               {       printf ("\n\nLine %d: sf_seek (SEEK_CUR) with 0 offset failed (%d should be %d)\n", __LINE__, k, seekpos + 1) ;
-                       exit (1) ;
-                       } ;
-
-               seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
-               k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
-               test_read_double_or_die (file, 0, data, channels, __LINE__) ;
-               if (error_function (data [0], orig [seekpos * channels], margin) || k != seekpos)
-               {       printf ("\nLine %d: sf_seek (forwards, SEEK_CUR) followed by sf_read_double failed (%d, %d) (%d, %d).\n", __LINE__, (int) data [0], (int) orig [seekpos * channels], k, seekpos + 1) ;
-                       exit (1) ;
-                       } ;
-
-               seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
-               /* Check seek backward from current position. */
-               k = sf_seek (file, -20, SEEK_CUR) ;
-               test_read_double_or_die (file, 0, data, channels, __LINE__) ;
-               if (error_function (data [0], orig [seekpos * channels], margin) || k != seekpos)
-               {       printf ("\nLine %d: sf_seek (backwards, SEEK_CUR) followed by sf_read_double failed (%d, %d) (%d, %d).\n", __LINE__, (int) data [0], (int) orig [seekpos * channels], k, seekpos) ;
-                       exit (1) ;
-                       } ;
-
-               /* Check that read past end of file returns number of items. */
-               sf_seek (file, sfinfo.frames, SEEK_SET) ;
-
-               if ((k = sf_read_double (file, data, datalen)) != 0)
-               {       printf ("\n\nLine %d: Return value from sf_read_double past end of file incorrect (%d).\n", __LINE__, k) ;
-                       exit (1) ;
-                       } ;
-
-               /* Check seek backward from end. */
-
-               if ((k = sf_seek (file, 5 - sfinfo.frames, SEEK_END)) != 5)
-               {       printf ("\n\nLine %d: sf_seek (SEEK_END) returned %d instead of %d.\n", __LINE__, k, 5) ;
-                       exit (1) ;
-                       } ;
-
-               test_read_double_or_die (file, 0, data, channels, __LINE__) ;
-               if (error_function (data [0], orig [5 * channels], margin))
-               {       printf ("\nLine %d: sf_seek (SEEK_END) followed by sf_read_double failed (%f should be %f).\n", __LINE__, data [0], orig [5 * channels]) ;
-                       exit (1) ;
-                       } ;
-               } /* if (sfinfo.seekable) */
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-       printf ("ok\n") ;
-} /* sdlcomp_test_double */
-
-static void
-read_raw_test (const char *filename, int filetype, int channels)
-{      SNDFILE                 *file ;
-       SF_INFO                 sfinfo ;
-       sf_count_t              count, datalen ;
-       short                   *orig, *data ;
-       int                             k ;
-
-       print_test_name ("read_raw_test", filename) ;
-
-       datalen = ARRAY_LEN (orig_buffer.s) / 2 ;
-
-       orig = orig_buffer.s ;
-       data = data_buffer.s ;
-
-       gen_signal_double (orig_buffer.d, 32000.0, channels, datalen) ;
-       for (k = 0 ; k < datalen ; k++)
-               orig [k] = lrint (orig_buffer.d [k]) ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = 123456789 ;   /* Ridiculous value. */
-       sfinfo.channels         = channels ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-       test_write_short_or_die (file, 0, orig, datalen, __LINE__) ;
-       sf_set_string (file, SF_STR_COMMENT, long_comment) ;
-       sf_close (file) ;
-
-       memset (data, 0, datalen * sizeof (double)) ;
-
-       if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("Returned format incorrect (0x%08X => 0x%08X).\n", filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < datalen / channels)
-       {       printf ("Too few.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", datalen, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames > (datalen + 400))
-       {       printf ("Too many.frames in file. (%" PRId64 " should be a little more than %" PRId64 ")\n", sfinfo.frames, datalen) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != channels)
-       {       printf ("Incorrect number of channels in file.\n") ;
-               exit (1) ;
-               } ;
-
-       check_comment (file, filetype, __LINE__) ;
-
-       count = sf_read_raw (file, orig_buffer.c, datalen + 5 * channels) ;
-       if (count != sfinfo.channels * sfinfo.frames)
-       {       printf ("\nLine %d : sf_read_raw returned %" PRId64 " should be %" PRId64 "\n", __LINE__, count, sfinfo.channels * sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-       printf ("ok\n") ;
-} /* read_raw_test */
-
-/*========================================================================================
-**     Auxiliary functions
-*/
-
-#define                SIGNAL_MAXVAL   30000.0
-#define                DECAY_COUNT             1000
-
-static int
-decay_response (int k)
-{      if (k < 1)
-               return (int) (1.2 * SIGNAL_MAXVAL) ;
-       if (k > DECAY_COUNT)
-               return 0 ;
-       return (int) (1.2 * SIGNAL_MAXVAL * (DECAY_COUNT - k) / (1.0 * DECAY_COUNT)) ;
-} /* decay_response */
-
-static void
-gen_signal_double (double *data, double scale, int channels, int datalen)
-{      int             k, ramplen ;
-       double  amp = 0.0 ;
-
-       ramplen = DECAY_COUNT ;
-
-       if (channels == 1)
-       {       for (k = 0 ; k < datalen ; k++)
-               {       if (k <= ramplen)
-                               amp = scale * k / ((double) ramplen) ;
-                       else if (k > datalen - ramplen)
-                               amp = scale * (datalen - k) / ((double) ramplen) ;
-
-/*-printf ("%3d : %g\n", k, amp) ;-*/
-
-                       data [k] = amp * (0.4 * sin (33.3 * 2.0 * M_PI * ((double) (k+1)) / ((double) SAMPLE_RATE))
-                                                       + 0.3 * cos (201.1 * 2.0 * M_PI * ((double) (k+1)) / ((double) SAMPLE_RATE))) ;
-                       } ;
-               }
-       else
-       {       for (k = 0 ; k < datalen ; k ++)
-               {       if (k <= ramplen)
-                               amp = scale * k / ((double) ramplen) ;
-                       else if (k > datalen - ramplen)
-                               amp = scale * (datalen - k) / ((double) ramplen) ;
-
-                       data [2 * k] = amp * (0.4 * sin (33.3 * 2.0 * M_PI * ((double) (k+1)) / ((double) SAMPLE_RATE))
-                                                       + 0.3 * cos (201.1 * 2.0 * M_PI * ((double) (k+1)) / ((double) SAMPLE_RATE))) ;
-                       data [2 * k + 1] = amp * (0.4 * sin (55.5 * 2.0 * M_PI * ((double) (k+1)) / ((double) SAMPLE_RATE))
-                                                       + 0.3 * cos (201.1 * 2.0 * M_PI * ((double) (k+1)) / ((double) SAMPLE_RATE))) ;
-                       } ;
-               } ;
-
-       return ;
-} /* gen_signal_double */
-
-static int
-error_function (double data, double orig, double margin)
-{      double error ;
-
-       if (fabs (orig) <= 500.0)
-               error = fabs (fabs (data) - fabs (orig)) / 2000.0 ;
-       else if (fabs (orig) <= 1000.0)
-               error = fabs (data - orig) / 3000.0 ;
-       else
-               error = fabs (data - orig) / fabs (orig) ;
-
-       if (error > margin)
-       {       printf ("\n\nerror_function (data = %f, orig = %f, margin = %f) -> %f\n", data, orig, margin, error) ;
-               return 1 ;
-               } ;
-       return 0 ;
-} /* error_function */
-
-static void
-smoothed_diff_short (short *data, unsigned int datalen)
-{      unsigned int k ;
-       double memory = 0.0 ;
-
-       /* Calculate the smoothed sample-to-sample difference. */
-       for (k = 0 ; k < datalen - 1 ; k++)
-       {       memory = 0.7 * memory + (1 - 0.7) * (double) (data [k+1] - data [k]) ;
-               data [k] = (short) memory ;
-               } ;
-       data [datalen-1] = data [datalen-2] ;
-
-} /* smoothed_diff_short */
-
-static void
-smoothed_diff_int (int *data, unsigned int datalen)
-{      unsigned int k ;
-       double memory = 0.0 ;
-
-       /* Calculate the smoothed sample-to-sample difference. */
-       for (k = 0 ; k < datalen - 1 ; k++)
-       {       memory = 0.7 * memory + (1 - 0.7) * (double) (data [k+1] - data [k]) ;
-               data [k] = (int) memory ;
-               } ;
-       data [datalen-1] = data [datalen-2] ;
-
-} /* smoothed_diff_int */
-
-static void
-smoothed_diff_float (float *data, unsigned int datalen)
-{      unsigned int k ;
-       float memory = 0.0 ;
-
-       /* Calculate the smoothed sample-to-sample difference. */
-       for (k = 0 ; k < datalen - 1 ; k++)
-       {       memory = 0.7 * memory + (1 - 0.7) * (data [k+1] - data [k]) ;
-               data [k] = memory ;
-               } ;
-       data [datalen-1] = data [datalen-2] ;
-
-} /* smoothed_diff_float */
-
-static void
-smoothed_diff_double (double *data, unsigned int datalen)
-{      unsigned int k ;
-       double memory = 0.0 ;
-
-       /* Calculate the smoothed sample-to-sample difference. */
-       for (k = 0 ; k < datalen - 1 ; k++)
-       {       memory = 0.7 * memory + (1 - 0.7) * (data [k+1] - data [k]) ;
-               data [k] = memory ;
-               } ;
-       data [datalen-1] = data [datalen-2] ;
-
-} /* smoothed_diff_double */
-
-static void
-check_comment (SNDFILE * file, int format, int lineno)
-{      const char              *comment ;
-
-       switch (format & SF_FORMAT_TYPEMASK)
-       {       case SF_FORMAT_AIFF :
-               case SF_FORMAT_WAV :
-               case SF_FORMAT_WAVEX :
-                       break ;
-               default :
-                       return ;
-               } ;
-
-       comment = sf_get_string (file, SF_STR_COMMENT) ;
-       if (comment == NULL)
-       {       printf ("\n\nLine %d : File does not contain a comment string.\n\n", lineno) ;
-               exit (1) ;
-               } ;
-
-       if (strcmp (comment, long_comment) != 0)
-       {       printf ("\n\nLine %d : File comment does not match comment written.\n\n", lineno) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* check_comment */
-
-static int
-is_lossy (int filetype)
-{
-       switch (SF_FORMAT_SUBMASK & filetype)
-       {       case SF_FORMAT_PCM_U8 :
-               case SF_FORMAT_PCM_S8 :
-               case SF_FORMAT_PCM_16 :
-               case SF_FORMAT_PCM_24 :
-               case SF_FORMAT_PCM_32 :
-               case SF_FORMAT_FLOAT :
-               case SF_FORMAT_DOUBLE :
-                       return 0 ;
-
-               default :
-                       break ;
-               } ;
-
-       return 1 ;
-} /* is_lossy */
-
diff --git a/libs/libsndfile/tests/misc_test.c b/libs/libsndfile/tests/misc_test.c
deleted file mode 100644 (file)
index b95e421..0000000
+++ /dev/null
@@ -1,415 +0,0 @@
-/*
-** Copyright (C) 2001-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation ; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#include <sys/stat.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#if (defined (WIN32) || defined (_WIN32))
-#include <io.h>
-#include <direct.h>
-#endif
-
-#include       <sndfile.h>
-
-#include       "utils.h"
-
-#define        BUFFER_LEN              (1 << 10)
-#define LOG_BUFFER_SIZE        1024
-
-static void    zero_data_test (const char *filename, int format) ;
-static void    filesystem_full_test (int format) ;
-static void    permission_test (const char *filename, int typemajor) ;
-static void    wavex_amb_test (const char *filename) ;
-
-int
-main (int argc, char *argv [])
-{      int             do_all = 0 ;
-       int             test_count = 0 ;
-
-       if (argc != 2)
-       {       printf ("Usage : %s <test>\n", argv [0]) ;
-               printf ("    Where <test> is one of the following:\n") ;
-               printf ("           wav  - test WAV file peak chunk\n") ;
-               printf ("           aiff - test AIFF file PEAK chunk\n") ;
-               printf ("           all  - perform all tests\n") ;
-               exit (1) ;
-               } ;
-
-       do_all = ! strcmp (argv [1], "all") ;
-
-       if (do_all || ! strcmp (argv [1], "wav"))
-       {       zero_data_test ("zerolen.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-               filesystem_full_test (SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-               permission_test ("readonly.wav", SF_FORMAT_WAV) ;
-               wavex_amb_test ("ambisonic.wav") ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "aiff"))
-       {       zero_data_test ("zerolen.aiff", SF_FORMAT_AIFF | SF_FORMAT_PCM_16) ;
-               filesystem_full_test (SF_FORMAT_AIFF | SF_FORMAT_PCM_16) ;
-               permission_test ("readonly.aiff", SF_FORMAT_AIFF) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "au"))
-       {       zero_data_test ("zerolen.au", SF_FORMAT_AU | SF_FORMAT_PCM_16) ;
-               filesystem_full_test (SF_FORMAT_AU | SF_FORMAT_PCM_16) ;
-               permission_test ("readonly.au", SF_FORMAT_AU) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "caf"))
-       {       zero_data_test ("zerolen.caf", SF_FORMAT_CAF | SF_FORMAT_PCM_16) ;
-               filesystem_full_test (SF_FORMAT_CAF | SF_FORMAT_PCM_16) ;
-               permission_test ("readonly.caf", SF_FORMAT_CAF) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "svx"))
-       {       zero_data_test ("zerolen.svx", SF_FORMAT_SVX | SF_FORMAT_PCM_16) ;
-               filesystem_full_test (SF_FORMAT_SVX | SF_FORMAT_PCM_16) ;
-               permission_test ("readonly.svx", SF_FORMAT_SVX) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "nist"))
-       {       zero_data_test ("zerolen.nist", SF_FORMAT_NIST | SF_FORMAT_PCM_16) ;
-               filesystem_full_test (SF_FORMAT_NIST | SF_FORMAT_PCM_16) ;
-               permission_test ("readonly.nist", SF_FORMAT_NIST) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "paf"))
-       {       zero_data_test ("zerolen.paf", SF_FORMAT_PAF | SF_FORMAT_PCM_16) ;
-               filesystem_full_test (SF_FORMAT_PAF | SF_FORMAT_PCM_16) ;
-               permission_test ("readonly.paf", SF_FORMAT_PAF) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "ircam"))
-       {       zero_data_test ("zerolen.ircam", SF_FORMAT_IRCAM | SF_FORMAT_PCM_16) ;
-               filesystem_full_test (SF_FORMAT_IRCAM | SF_FORMAT_PCM_16) ;
-               permission_test ("readonly.ircam", SF_FORMAT_IRCAM) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "voc"))
-       {       zero_data_test ("zerolen.voc", SF_FORMAT_VOC | SF_FORMAT_PCM_16) ;
-               filesystem_full_test (SF_FORMAT_VOC | SF_FORMAT_PCM_16) ;
-               permission_test ("readonly.voc", SF_FORMAT_VOC) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "w64"))
-       {       zero_data_test ("zerolen.w64", SF_FORMAT_W64 | SF_FORMAT_PCM_16) ;
-               filesystem_full_test (SF_FORMAT_W64 | SF_FORMAT_PCM_16) ;
-               permission_test ("readonly.w64", SF_FORMAT_W64) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "rf64"))
-       {       zero_data_test ("zerolen.rf64", SF_FORMAT_W64 | SF_FORMAT_PCM_16) ;
-               filesystem_full_test (SF_FORMAT_W64 | SF_FORMAT_PCM_16) ;
-               permission_test ("readonly.rf64", SF_FORMAT_W64) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "mat4"))
-       {       zero_data_test ("zerolen.mat4", SF_FORMAT_MAT4 | SF_FORMAT_PCM_16) ;
-               filesystem_full_test (SF_FORMAT_MAT4 | SF_FORMAT_PCM_16) ;
-               permission_test ("readonly.mat4", SF_FORMAT_MAT4) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "mat5"))
-       {       zero_data_test ("zerolen.mat5", SF_FORMAT_MAT5 | SF_FORMAT_PCM_16) ;
-               filesystem_full_test (SF_FORMAT_MAT5 | SF_FORMAT_PCM_16) ;
-               permission_test ("readonly.mat5", SF_FORMAT_MAT5) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "pvf"))
-       {       zero_data_test ("zerolen.pvf", SF_FORMAT_PVF | SF_FORMAT_PCM_16) ;
-               filesystem_full_test (SF_FORMAT_PVF | SF_FORMAT_PCM_16) ;
-               permission_test ("readonly.pvf", SF_FORMAT_PVF) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "htk"))
-       {       zero_data_test ("zerolen.htk", SF_FORMAT_HTK | SF_FORMAT_PCM_16) ;
-               filesystem_full_test (SF_FORMAT_HTK | SF_FORMAT_PCM_16) ;
-               permission_test ("readonly.htk", SF_FORMAT_HTK) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "avr"))
-       {       zero_data_test ("zerolen.avr", SF_FORMAT_AVR | SF_FORMAT_PCM_16) ;
-               filesystem_full_test (SF_FORMAT_AVR | SF_FORMAT_PCM_16) ;
-               permission_test ("readonly.avr", SF_FORMAT_AVR) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "sds"))
-       {       zero_data_test ("zerolen.sds", SF_FORMAT_SDS | SF_FORMAT_PCM_16) ;
-               filesystem_full_test (SF_FORMAT_SDS | SF_FORMAT_PCM_16) ;
-               permission_test ("readonly.sds", SF_FORMAT_SDS) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "mpc2k"))
-       {       zero_data_test ("zerolen.mpc", SF_FORMAT_MPC2K | SF_FORMAT_PCM_16) ;
-               filesystem_full_test (SF_FORMAT_MPC2K | SF_FORMAT_PCM_16) ;
-               permission_test ("readonly.mpc", SF_FORMAT_MPC2K) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "ogg"))
-       {       zero_data_test ("zerolen.oga", SF_FORMAT_OGG | SF_FORMAT_VORBIS) ;
-               /*-filesystem_full_test (SF_FORMAT_OGG | SF_FORMAT_VORBIS) ;-*/
-               permission_test ("readonly.oga", SF_FORMAT_OGG) ;
-               test_count++ ;
-               } ;
-
-       if (test_count == 0)
-       {       printf ("Mono : ************************************\n") ;
-               printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-               printf ("Mono : ************************************\n") ;
-               return 1 ;
-               } ;
-
-       return 0 ;
-} /* main */
-
-
-/*============================================================================================
-**     Here are the test functions.
-*/
-
-static void
-zero_data_test (const char *filename, int format)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-
-       switch (format & SF_FORMAT_TYPEMASK)
-       {       case SF_FORMAT_OGG :
-                       if (HAVE_EXTERNAL_LIBS == 0)
-                               return ;
-                       break ;
-               default :
-                       break ;
-               } ;
-
-       print_test_name ("zero_data_test", filename) ;
-
-       sfinfo.samplerate = 44100 ;
-       sfinfo.format = format ;
-       sfinfo.channels = 1 ;
-       sfinfo.frames = 0 ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* zero_data_test */
-
-static void
-filesystem_full_test (int format)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       struct stat buf ;
-
-       const char      *filename = "/dev/full", *errorstr ;
-
-#if (defined (WIN32) || defined (_WIN32))
-       /* Can't run this test on Win32 so return. */
-       return ;
-#endif
-
-       /* Make sure errno is zero before doing anything else. */
-       errno = 0 ;
-
-       print_test_name ("filesystem_full_test", filename) ;
-
-       if (stat (filename, &buf) != 0)
-       {       puts ("/dev/full missing") ;
-               return ;
-               } ;
-
-       if (S_ISCHR (buf.st_mode) == 0 && S_ISBLK (buf.st_mode) == 0)
-       {       puts ("/dev/full is not a device file") ;
-               return ;
-               } ;
-
-       sfinfo.samplerate = 44100 ;
-       sfinfo.format = format ;
-       sfinfo.channels = 1 ;
-       sfinfo.frames = 0 ;
-
-       if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) != NULL)
-       {       printf ("\n\nLine %d : Error, file should not have openned.\n", __LINE__ - 1) ;
-               exit (1) ;
-               } ;
-
-       errorstr = sf_strerror (file) ;
-
-       if (strstr (errorstr, " space ") == NULL || strstr (errorstr, "device") == NULL)
-       {       printf ("\n\nLine %d : Error bad error string : %s.\n", __LINE__ - 1, errorstr) ;
-               exit (1) ;
-               } ;
-
-       puts ("ok") ;
-} /* filesystem_full_test */
-
-static void
-permission_test (const char *filename, int typemajor)
-{
-#if (OS_IS_WIN32)
-       /* Avoid compiler warnings. */
-       filename = filename ;
-       typemajor = typemajor ;
-
-       /* Can't run this test on Win32 so return. */
-       return ;
-#else
-
-       FILE            *textfile ;
-       SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       const char      *errorstr ;
-
-       /* Make sure errno is zero before doing anything else. */
-       errno = 0 ;
-
-       if (getuid () == 0)
-       {       /* If running as root bypass this test.
-               ** Root is allowed to open a readonly file for write.
-               */
-               return ;
-               } ;
-
-       print_test_name ("permission_test", filename) ;
-
-       if (access (filename, F_OK) == 0)
-       {       chmod (filename, S_IWUSR) ;
-               unlink (filename) ;
-               } ;
-
-       if ((textfile = fopen (filename, "w")) == NULL)
-       {       printf ("\n\nLine %d : not able to open text file for write.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       fprintf (textfile, "This is a read only file.\n") ;
-       fclose (textfile) ;
-
-       if (chmod (filename, S_IRUSR | S_IRGRP))
-       {       printf ("\n\nLine %d : chmod failed", __LINE__) ;
-               fflush (stdout) ;
-               perror ("") ;
-               exit (1) ;
-               } ;
-
-       sfinfo.samplerate = 44100 ;
-       sfinfo.format = (typemajor | SF_FORMAT_PCM_16) ;
-       sfinfo.channels = 1 ;
-       sfinfo.frames = 0 ;
-
-       if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) != NULL)
-       {       printf ("\n\nLine %d : Error, file should not have opened.\n", __LINE__ - 1) ;
-               exit (1) ;
-               } ;
-
-       errorstr = sf_strerror (file) ;
-
-       if (strstr (errorstr, "ermission denied") == NULL)
-       {       printf ("\n\nLine %d : Error bad error string : %s.\n", __LINE__ - 1, errorstr) ;
-               exit (1) ;
-               } ;
-
-       if (chmod (filename, S_IWUSR | S_IWGRP))
-       {       printf ("\n\nLine %d : chmod failed", __LINE__) ;
-               fflush (stdout) ;
-               perror ("") ;
-               exit (1) ;
-               } ;
-
-       unlink (filename) ;
-
-       puts ("ok") ;
-
-#endif
-} /* permission_test */
-
-static void
-wavex_amb_test (const char *filename)
-{      static short buffer [800] ;
-       SNDFILE *file ;
-       SF_INFO sfinfo ;
-       sf_count_t      frames ;
-
-       print_test_name (__func__, filename) ;
-
-       sfinfo.samplerate = 44100 ;
-       sfinfo.format = SF_FORMAT_WAVEX | SF_FORMAT_PCM_16 ;
-       sfinfo.channels = 4 ;
-
-       frames = ARRAY_LEN (buffer) / sfinfo.channels ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_WAVEX_SET_AMBISONIC, NULL, SF_AMBISONIC_B_FORMAT) ;
-       test_writef_short_or_die (file, 0, buffer, frames, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       exit_if_true (
-               sf_command (file, SFC_WAVEX_GET_AMBISONIC, NULL, 0) != SF_AMBISONIC_B_FORMAT,
-               "\n\nLine %d : Error, this file should be in Ambisonic B format.\n", __LINE__
-               ) ;
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* wavex_amb_test */
diff --git a/libs/libsndfile/tests/multi_file_test.c b/libs/libsndfile/tests/multi_file_test.c
deleted file mode 100644 (file)
index 502d15a..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#include <fcntl.h>
-#include <errno.h>
-#include <sys/stat.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define        DATA_LENGTH             (512)
-
-static void write_file_at_end (int fd, int filetype, int channels, int file_num) ;
-
-static void multi_file_test (const char *filename, int *formats, int format_count) ;
-
-static short data [DATA_LENGTH] ;
-
-static int     wav_formats [] =
-{      SF_FORMAT_WAV | SF_FORMAT_PCM_16,
-       SF_FORMAT_WAV | SF_FORMAT_PCM_24,
-       SF_FORMAT_WAV | SF_FORMAT_ULAW,
-       SF_FORMAT_WAV | SF_FORMAT_ALAW,
-       /* Lite remove start */
-       SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM,
-       SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM,
-       /* Lite remove end */
-       /*-SF_FORMAT_WAV | SF_FORMAT_GSM610 Doesn't work yet. -*/
-} ;
-
-static int     aiff_formats [] =
-{      SF_FORMAT_AIFF | SF_FORMAT_PCM_16,
-       SF_FORMAT_AIFF | SF_FORMAT_PCM_24,
-       SF_FORMAT_AIFF | SF_FORMAT_ULAW,
-       SF_FORMAT_AIFF | SF_FORMAT_ALAW
-} ;
-
-static int     au_formats [] =
-{      SF_FORMAT_AU | SF_FORMAT_PCM_16,
-       SF_FORMAT_AU | SF_FORMAT_PCM_24,
-       SF_FORMAT_AU | SF_FORMAT_ULAW,
-       SF_FORMAT_AU | SF_FORMAT_ALAW
-} ;
-
-static int verbose = SF_FALSE ;
-
-int
-main (int argc, char **argv)
-{      int             do_all = 0 ;
-       int             test_count = 0 ;
-
-       if (argc == 3 && strcmp (argv [2], "-v") == 0)
-       {       verbose = SF_TRUE ;
-               argc -- ;
-               } ;
-
-       if (argc != 2)
-       {       printf ("Usage : %s <test>\n", argv [0]) ;
-               printf ("    Where <test> is one of the following:\n") ;
-               printf ("           wav   - test WAV file functions (little endian)\n") ;
-               printf ("           aiff  - test AIFF file functions (big endian)\n") ;
-               printf ("           au    - test AU file functions\n") ;
-#if 0
-               printf ("           svx   - test 8SVX/16SV file functions\n") ;
-               printf ("           nist  - test NIST Sphere file functions\n") ;
-               printf ("           ircam - test IRCAM file functions\n") ;
-               printf ("           voc   - Create Voice file functions\n") ;
-               printf ("           w64   - Sonic Foundry's W64 file functions\n") ;
-#endif
-               printf ("           all   - perform all tests\n") ;
-               exit (1) ;
-               } ;
-
-       do_all = !strcmp (argv [1], "all") ;
-
-       if (do_all || ! strcmp (argv [1], "wav"))
-       {       multi_file_test ("multi_wav.dat", wav_formats, ARRAY_LEN (wav_formats)) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "aiff"))
-       {       multi_file_test ("multi_aiff.dat", aiff_formats, ARRAY_LEN (aiff_formats)) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "au"))
-       {       multi_file_test ("multi_au.dat", au_formats, ARRAY_LEN (au_formats)) ;
-               test_count++ ;
-               } ;
-
-       return 0 ;
-} /* main */
-
-/*======================================================================================
-*/
-
-static void
-multi_file_test (const char *filename, int *formats, int format_count)
-{      SNDFILE                         *sndfile ;
-       SF_INFO                         sfinfo ;
-       SF_EMBED_FILE_INFO      embed_info ;
-       sf_count_t                      filelen ;
-       int                                     fd, k, file_count = 0 ;
-
-       print_test_name ("multi_file_test", filename) ;
-
-       unlink (filename) ;
-
-       if ((fd = open (filename, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR)) < 0)
-       {       printf ("\n\nLine %d: open failed : %s\n", __LINE__, strerror (errno)) ;
-               exit (1) ;
-               } ;
-
-       k = write (fd, "1234", 4) ;
-
-       for (k = 0 ; k < format_count ; k++)
-               write_file_at_end (fd, formats [k], 2, k) ;
-
-       filelen = file_length_fd (fd) ;
-
-       embed_info.offset = 4 ;
-       embed_info.length = 0 ;
-
-
-       for (file_count = 1 ; embed_info.offset + embed_info.length < filelen ; file_count ++)
-       {
-               if (verbose)
-               {       puts ("\n------------------------------------") ;
-                       printf ("This offset : %" PRId64 "\n", embed_info.offset + embed_info.length) ;
-                       } ;
-
-               if (lseek (fd, embed_info.offset + embed_info.length, SEEK_SET) < 0)
-               {       printf ("\n\nLine %d: lseek failed : %s\n", __LINE__, strerror (errno)) ;
-                       exit (1) ;
-                       } ;
-
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-               if ((sndfile = sf_open_fd (fd, SFM_READ, &sfinfo, SF_FALSE)) == NULL)
-               {       printf ("\n\nLine %d: sf_open_fd failed\n", __LINE__) ;
-                       printf ("Embedded file number : %d   offset : %" PRId64 "\n", file_count, embed_info.offset) ;
-                       puts (sf_strerror (sndfile)) ;
-                       dump_log_buffer (sndfile) ;
-                       exit (1) ;
-                       } ;
-
-               sf_command (sndfile, SFC_GET_EMBED_FILE_INFO, &embed_info, sizeof (embed_info)) ;
-
-               sf_close (sndfile) ;
-
-               if (verbose)
-                       printf ("\nNext offset : %" PRId64 "\nNext length : %" PRId64 "\n", embed_info.offset, embed_info.length) ;
-               } ;
-
-       file_count -- ;
-
-       if (file_count != format_count)
-       {       printf ("\n\nLine %d: file count (%d) not equal to %d.\n\n", __LINE__, file_count, format_count) ;
-               printf ("Embedded file number : %d\n", file_count) ;
-               exit (1) ;
-               } ;
-
-       close (fd) ;
-       unlink (filename) ;
-       printf ("ok\n") ;
-
-       return ;
-} /* multi_file_test */
-
-/*======================================================================================
-*/
-
-static void
-write_file_at_end (int fd, int filetype, int channels, int file_num)
-{      SNDFILE *sndfile ;
-       SF_INFO sfinfo ;
-
-       int     frames, k ;
-
-       lseek (fd, 0, SEEK_END) ;
-
-       for (k = 0 ; k < DATA_LENGTH ; k++)
-               data [k] = k ;
-
-       frames = DATA_LENGTH / channels ;
-
-       sfinfo.format = filetype ;
-       sfinfo.channels = channels ;
-       sfinfo.samplerate = 44100 ;
-
-       if ((sndfile = sf_open_fd (fd, SFM_WRITE, &sfinfo, SF_FALSE)) == NULL)
-       {       printf ("\n\nLine %d: sf_open_fd failed\n", __LINE__) ;
-               printf ("Embedded file number : %d\n", file_num) ;
-               puts (sf_strerror (sndfile)) ;
-               dump_log_buffer (sndfile) ;
-               exit (1) ;
-               } ;
-
-       if (sf_writef_short (sndfile, data, frames) != frames)
-       {       printf ("\n\nLine %d: short write\n", __LINE__) ;
-               printf ("Embedded file number : %d\n", file_num) ;
-               exit (1) ;
-               } ;
-
-       sf_close (sndfile) ;
-} /* write_file_at_end */
-
diff --git a/libs/libsndfile/tests/ogg_test.c b/libs/libsndfile/tests/ogg_test.c
deleted file mode 100644 (file)
index 4b1be03..0000000
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
-** Copyright (C) 2007-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <math.h>
-
-#include       <sndfile.h>
-
-#include       "utils.h"
-
-#define        SAMPLE_RATE                     44100
-#define        DATA_LENGTH                     (SAMPLE_RATE / 8)
-
-typedef union
-{      double d [DATA_LENGTH] ;
-       float f [DATA_LENGTH] ;
-       int i [DATA_LENGTH] ;
-       short s [DATA_LENGTH] ;
-} BUFFER ;
-
-static BUFFER data_out ;
-static BUFFER data_in ;
-
-static void
-ogg_short_test (void)
-{      const char * filename = "vorbis_short.oga" ;
-
-       SNDFILE * file ;
-       SF_INFO sfinfo ;
-       short seek_data [10] ;
-       unsigned k ;
-
-       print_test_name ("ogg_short_test", filename) ;
-
-       /* Generate float data. */
-       gen_windowed_sine_float (data_out.f, ARRAY_LEN (data_out.f), 1.0 * 0x7F00) ;
-
-       /* Convert to shorteger. */
-       for (k = 0 ; k < ARRAY_LEN (data_out.s) ; k++)
-               data_out.s [k] = lrintf (data_out.f [k]) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       /* Set up output file type. */
-       sfinfo.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS ;
-       sfinfo.channels = 1 ;
-       sfinfo.samplerate = SAMPLE_RATE ;
-
-       /* Write the output file. */
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-       test_write_short_or_die (file, 0, data_out.s, ARRAY_LEN (data_out.s), __LINE__) ;
-       sf_close (file) ;
-
-       /* Read the file in again. */
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-       test_read_short_or_die (file, 0, data_in.s, ARRAY_LEN (data_in.s), __LINE__) ;
-       sf_close (file) ;
-
-       puts ("ok") ;
-
-       /* Test seeking. */
-       print_test_name ("ogg_seek_test", filename) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-       test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-       test_read_short_or_die (file, 0, seek_data, ARRAY_LEN (seek_data), __LINE__) ;
-       compare_short_or_die (seek_data, data_in.s + 10, ARRAY_LEN (seek_data), __LINE__) ;
-
-       /* Test seek to end of file. */
-       test_seek_or_die (file, 0, SEEK_END, sfinfo.frames, sfinfo.channels, __LINE__) ;
-
-       sf_close (file) ;
-
-       puts ("ok") ;
-
-       unlink (filename) ;
-} /* ogg_short_test */
-
-static void
-ogg_int_test (void)
-{      const char * filename = "vorbis_int.oga" ;
-
-       SNDFILE * file ;
-       SF_INFO sfinfo ;
-       int seek_data [10] ;
-       unsigned k ;
-
-       print_test_name ("ogg_int_test", filename) ;
-
-       /* Generate float data. */
-       gen_windowed_sine_float (data_out.f, ARRAY_LEN (data_out.f), 1.0 * 0x7FFF0000) ;
-
-       /* Convert to integer. */
-       for (k = 0 ; k < ARRAY_LEN (data_out.i) ; k++)
-               data_out.i [k] = lrintf (data_out.f [k]) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       /* Set up output file type. */
-       sfinfo.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS ;
-       sfinfo.channels = 1 ;
-       sfinfo.samplerate = SAMPLE_RATE ;
-
-       /* Write the output file. */
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-       test_write_int_or_die (file, 0, data_out.i, ARRAY_LEN (data_out.i), __LINE__) ;
-       sf_close (file) ;
-
-       /* Read the file in again. */
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-       test_read_int_or_die (file, 0, data_in.i, ARRAY_LEN (data_in.i), __LINE__) ;
-       sf_close (file) ;
-
-       puts ("ok") ;
-
-       /* Test seeking. */
-       print_test_name ("ogg_seek_test", filename) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-       test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-       test_read_int_or_die (file, 0, seek_data, ARRAY_LEN (seek_data), __LINE__) ;
-       compare_int_or_die (seek_data, data_in.i + 10, ARRAY_LEN (seek_data), __LINE__) ;
-
-       sf_close (file) ;
-
-       puts ("ok") ;
-
-       unlink (filename) ;
-} /* ogg_int_test */
-
-static void
-ogg_float_test (void)
-{      const char * filename = "vorbis_float.oga" ;
-
-       SNDFILE * file ;
-       SF_INFO sfinfo ;
-       float seek_data [10] ;
-
-       print_test_name ("ogg_float_test", filename) ;
-
-       gen_windowed_sine_float (data_out.f, ARRAY_LEN (data_out.f), 0.95) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       /* Set up output file type. */
-       sfinfo.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS ;
-       sfinfo.channels = 1 ;
-       sfinfo.samplerate = SAMPLE_RATE ;
-
-       /* Write the output file. */
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-       test_write_float_or_die (file, 0, data_out.f, ARRAY_LEN (data_out.f), __LINE__) ;
-       sf_close (file) ;
-
-       /* Read the file in again. */
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-       test_read_float_or_die (file, 0, data_in.f, ARRAY_LEN (data_in.f), __LINE__) ;
-       sf_close (file) ;
-
-       puts ("ok") ;
-
-       /* Test seeking. */
-       print_test_name ("ogg_seek_test", filename) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-       test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-       test_read_float_or_die (file, 0, seek_data, ARRAY_LEN (seek_data), __LINE__) ;
-       compare_float_or_die (seek_data, data_in.f + 10, ARRAY_LEN (seek_data), __LINE__) ;
-
-       sf_close (file) ;
-
-       puts ("ok") ;
-
-       unlink (filename) ;
-} /* ogg_float_test */
-
-static void
-ogg_double_test (void)
-{      const char * filename = "vorbis_double.oga" ;
-
-       SNDFILE * file ;
-       SF_INFO sfinfo ;
-       double seek_data [10] ;
-
-       print_test_name ("ogg_double_test", filename) ;
-
-       gen_windowed_sine_double (data_out.d, ARRAY_LEN (data_out.d), 0.95) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       /* Set up output file type. */
-       sfinfo.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS ;
-       sfinfo.channels = 1 ;
-       sfinfo.samplerate = SAMPLE_RATE ;
-
-       /* Write the output file. */
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-       test_write_double_or_die (file, 0, data_out.d, ARRAY_LEN (data_out.d), __LINE__) ;
-       sf_close (file) ;
-
-       /* Read the file in again. */
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-       test_read_double_or_die (file, 0, data_in.d, ARRAY_LEN (data_in.d), __LINE__) ;
-       sf_close (file) ;
-
-       puts ("ok") ;
-
-       /* Test seeking. */
-       print_test_name ("ogg_seek_test", filename) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-       test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-       test_read_double_or_die (file, 0, seek_data, ARRAY_LEN (seek_data), __LINE__) ;
-       compare_double_or_die (seek_data, data_in.d + 10, ARRAY_LEN (seek_data), __LINE__) ;
-
-       sf_close (file) ;
-
-       puts ("ok") ;
-
-       unlink (filename) ;
-} /* ogg_double_test */
-
-
-static void
-ogg_stereo_seek_test (const char * filename, int format)
-{      static float data [SAMPLE_RATE] ;
-       static float stereo_out [SAMPLE_RATE * 2] ;
-
-       SNDFILE * file ;
-       SF_INFO sfinfo ;
-       sf_count_t pos ;
-       unsigned k ;
-
-       print_test_name (__func__, filename) ;
-
-       gen_windowed_sine_float (data, ARRAY_LEN (data), 0.95) ;
-       for (k = 0 ; k < ARRAY_LEN (data) ; k++)
-       {       stereo_out [2 * k] = data [k] ;
-               stereo_out [2 * k + 1] = data [ARRAY_LEN (data) - k - 1] ;
-               } ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       /* Set up output file type. */
-       sfinfo.format = format ;
-       sfinfo.channels = 2 ;
-       sfinfo.samplerate = SAMPLE_RATE ;
-
-       /* Write the output file. */
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-       test_write_float_or_die (file, 0, stereo_out, ARRAY_LEN (stereo_out), __LINE__) ;
-       sf_close (file) ;
-
-       /* Open file in again for reading. */
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-       /* Read in the whole file. */
-       test_read_float_or_die (file, 0, stereo_out, ARRAY_LEN (stereo_out), __LINE__) ;
-
-       /* Now hammer seeking code. */
-       test_seek_or_die (file, 234, SEEK_SET, 234, sfinfo.channels, __LINE__) ;
-       test_readf_float_or_die (file, 0, data, 10, __LINE__) ;
-       compare_float_or_die (data, stereo_out + (234 * sfinfo.channels), 10, __LINE__) ;
-
-       test_seek_or_die (file, 442, SEEK_SET, 442, sfinfo.channels, __LINE__) ;
-       test_readf_float_or_die (file, 0, data, 10, __LINE__) ;
-       compare_float_or_die (data, stereo_out + (442 * sfinfo.channels), 10, __LINE__) ;
-
-       test_seek_or_die (file, 12, SEEK_CUR, 442 + 10 + 12, sfinfo.channels, __LINE__) ;
-       test_readf_float_or_die (file, 0, data, 10, __LINE__) ;
-       compare_float_or_die (data, stereo_out + ((442 + 10 + 12) * sfinfo.channels), 10, __LINE__) ;
-
-       test_seek_or_die (file, 12, SEEK_CUR, 442 + 20 + 24, sfinfo.channels, __LINE__) ;
-       test_readf_float_or_die (file, 0, data, 10, __LINE__) ;
-       compare_float_or_die (data, stereo_out + ((442 + 20 + 24) * sfinfo.channels), 10, __LINE__) ;
-
-       pos = 500 - sfinfo.frames ;
-       test_seek_or_die (file, pos, SEEK_END, 500, sfinfo.channels, __LINE__) ;
-       test_readf_float_or_die (file, 0, data, 10, __LINE__) ;
-       compare_float_or_die (data, stereo_out + (500 * sfinfo.channels), 10, __LINE__) ;
-
-       pos = 10 - sfinfo.frames ;
-       test_seek_or_die (file, pos, SEEK_END, 10, sfinfo.channels, __LINE__) ;
-       test_readf_float_or_die (file, 0, data, 10, __LINE__) ;
-       compare_float_or_die (data, stereo_out + (10 * sfinfo.channels), 10, __LINE__) ;
-
-       sf_close (file) ;
-
-       puts ("ok") ;
-       unlink (filename) ;
-} /* ogg_stereo_seek_test */
-
-
-int
-main (void)
-{
-       if (HAVE_EXTERNAL_LIBS)
-       {       ogg_short_test () ;
-               ogg_int_test () ;
-               ogg_float_test () ;
-               ogg_double_test () ;
-
-               /*-ogg_stereo_seek_test ("pcm.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;-*/
-               ogg_stereo_seek_test ("vorbis_seek.ogg", SF_FORMAT_OGG | SF_FORMAT_VORBIS) ;
-               }
-       else
-               puts ("    No Ogg/Vorbis tests because Ogg/Vorbis support was not compiled in.") ;
-
-       return 0 ;
-} /* main */
diff --git a/libs/libsndfile/tests/open_fail_test.c b/libs/libsndfile/tests/open_fail_test.c
deleted file mode 100644 (file)
index 620f3ba..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-** Copyright (C) 2003,2004 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-int
-main (void)
-{      SNDFILE         *sndfile ;
-       SF_INFO         sfinfo ;
-
-       FILE            *bad_file ;
-       const char      *bad_wav = "bad_wav.wav" ;
-       const char      bad_data [] = "RIFF    WAVEfmt            " ;
-
-       print_test_name ("open_fail_test", bad_wav) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       sndfile = sf_open ("let's hope this file doesn't exist", SFM_READ, &sfinfo) ;
-
-       if (sndfile)
-       {       printf ("Line %d: should not have received a valid SNDFILE* pointer.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if ((bad_file = fopen (bad_wav, "w")) == NULL)
-       {       printf ("Line %d: fopen returned NULL.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       fwrite (bad_data, sizeof (bad_data), 1, bad_file) ;
-       fclose (bad_file) ;
-
-       sndfile = sf_open (bad_wav, SFM_READ, &sfinfo) ;
-
-       if (sndfile)
-       {       printf ("Line %d: should not have received a valid SNDFILE* pointer.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       unlink (bad_wav) ;
-       puts ("ok") ;
-
-       return 0 ;
-} /* main */
-
-
-/*
-** Do not edit or modify anything in this comment block.
-** The arch-tag line is a file identity tag for the GNU Arch 
-** revision control system.
-**
-** arch-tag: 24440323-00b1-4e4b-87c5-0e3b7e9605e9
-*/
diff --git a/libs/libsndfile/tests/pcm_test.c b/libs/libsndfile/tests/pcm_test.c
deleted file mode 100644 (file)
index 86511f6..0000000
+++ /dev/null
@@ -1,1723 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define        BUFFER_SIZE             (1<<12)
-
-static void    lrintf_test (void) ;
-
-static void    pcm_test_bits_8 (const char *filename, int filetype, uint64_t hash) ;
-static void    pcm_test_bits_16        (const char *filename, int filetype, uint64_t hash) ;
-static void    pcm_test_bits_24        (const char *filename, int filetype, uint64_t hash) ;
-static void    pcm_test_bits_32        (const char *filename, int filetype, uint64_t hash) ;
-
-static void pcm_test_float     (const char *filename, int filetype, uint64_t hash, int replace_float) ;
-static void pcm_test_double    (const char *filename, int filetype, uint64_t hash, int replace_float) ;
-
-typedef union
-{      double  d [BUFFER_SIZE + 1] ;
-       float   f [BUFFER_SIZE + 1] ;
-       int             i [BUFFER_SIZE + 1] ;
-       short   s [BUFFER_SIZE + 1] ;
-} BUFFER ;
-
-/* Data written to the file. */
-static BUFFER  data_out ;
-
-/* Data read back from the file. */
-static BUFFER  data_in ;
-
-int
-main (void)
-{
-       lrintf_test () ;
-
-       pcm_test_bits_8 ("pcm-s8.raw", SF_FORMAT_RAW | SF_FORMAT_PCM_S8, 0x1cda335091249dbfLL) ;
-       pcm_test_bits_8 ("pcm-u8.raw", SF_FORMAT_RAW | SF_FORMAT_PCM_U8, 0x7f748c433d695f3fLL) ;
-
-       pcm_test_bits_16 ("le-pcm16.raw", SF_ENDIAN_LITTLE      | SF_FORMAT_RAW | SF_FORMAT_PCM_16, 0x3a2b956c881ebf08LL) ;
-       pcm_test_bits_16 ("be-pcm16.raw", SF_ENDIAN_BIG         | SF_FORMAT_RAW | SF_FORMAT_PCM_16, 0xd9e2f840c55750f8LL) ;
-
-       pcm_test_bits_24 ("le-pcm24.raw", SF_ENDIAN_LITTLE      | SF_FORMAT_RAW | SF_FORMAT_PCM_24, 0x933b6a759ab496f8LL) ;
-       pcm_test_bits_24 ("be-pcm24.raw", SF_ENDIAN_BIG         | SF_FORMAT_RAW | SF_FORMAT_PCM_24, 0xbb1f3eaf9c30b6f8LL) ;
-
-       pcm_test_bits_32 ("le-pcm32.raw", SF_ENDIAN_LITTLE      | SF_FORMAT_RAW | SF_FORMAT_PCM_32, 0xa77aece1c1c17f08LL) ;
-       pcm_test_bits_32 ("be-pcm32.raw", SF_ENDIAN_BIG         | SF_FORMAT_RAW | SF_FORMAT_PCM_32, 0x3099ddf142d0b0f8LL) ;
-
-       /* Lite remove start */
-       pcm_test_float  ("le-float.raw", SF_ENDIAN_LITTLE       | SF_FORMAT_RAW | SF_FORMAT_FLOAT, 0x3c2ad04f7554267aLL, SF_FALSE) ;
-       pcm_test_float  ("be-float.raw", SF_ENDIAN_BIG          | SF_FORMAT_RAW | SF_FORMAT_FLOAT, 0x074de3e248fa9186LL, SF_FALSE) ;
-
-       pcm_test_double ("le-double.raw", SF_ENDIAN_LITTLE      | SF_FORMAT_RAW | SF_FORMAT_DOUBLE, 0xc682726f958f669cLL, SF_FALSE) ;
-       pcm_test_double ("be-double.raw", SF_ENDIAN_BIG | SF_FORMAT_RAW | SF_FORMAT_DOUBLE, 0xd9a3583f8ee51164LL, SF_FALSE) ;
-
-       pcm_test_float  ("le-float.raw", SF_ENDIAN_LITTLE       | SF_FORMAT_RAW | SF_FORMAT_FLOAT, 0x3c2ad04f7554267aLL, SF_TRUE) ;
-       pcm_test_float  ("be-float.raw", SF_ENDIAN_BIG          | SF_FORMAT_RAW | SF_FORMAT_FLOAT, 0x074de3e248fa9186LL, SF_TRUE) ;
-
-       pcm_test_double ("le-double.raw", SF_ENDIAN_LITTLE      | SF_FORMAT_RAW | SF_FORMAT_DOUBLE, 0xc682726f958f669cLL, SF_TRUE) ;
-       pcm_test_double ("be-double.raw", SF_ENDIAN_BIG | SF_FORMAT_RAW | SF_FORMAT_DOUBLE, 0xd9a3583f8ee51164LL, SF_TRUE) ;
-       /* Lite remove end */
-
-       return 0 ;
-} /* main */
-
-/*============================================================================================
-**     Here are the test functions.
-*/
-
-static void
-lrintf_test (void)
-{      int k, items ;
-       float   *float_data ;
-       int             *int_data ;
-
-       print_test_name ("lrintf_test", "") ;
-
-       items = 1024 ;
-
-       float_data = data_out.f ;
-       int_data = data_in.i ;
-
-       for (k = 0 ; k < items ; k++)
-               float_data [k] = (k * ((k % 2) ? 333333.0 : -333333.0)) ;
-
-       for (k = 0 ; k < items ; k++)
-               int_data [k] = lrintf (float_data [k]) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (fabs (int_data [k] - float_data [k]) > 1.0)
-               {       printf ("\n\nLine %d: float : Incorrect sample (#%d : %f => %d).\n", __LINE__, k, float_data [k], int_data [k]) ;
-                       exit (1) ;
-                       } ;
-
-       printf ("ok\n") ;
-} /* lrintf_test */
-
-static void
-pcm_test_bits_8 (const char *filename, int filetype, uint64_t hash)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     k, items, zero_count ;
-       short           *short_out, *short_in ;
-       int                     *int_out, *int_in ;
-       /* Lite remove start */
-       float           *float_out, *float_in ;
-       double          *double_out, *double_in ;
-       /* Lite remove end */
-
-       print_test_name ("pcm_test_bits_8", filename) ;
-
-       items = 127 ;
-
-       short_out = data_out.s ;
-       short_in = data_in.s ;
-
-       zero_count = 0 ;
-       for (k = 0 ; k < items ; k++)
-       {       short_out [k] = ((k * ((k % 2) ? 1 : -1)) << 8) ;
-               zero_count = short_out [k] ? zero_count : zero_count + 1 ;
-               } ;
-
-       if (zero_count > items / 4)
-       {       printf ("\n\nLine %d: too many zeros.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       test_write_short_or_die (file, 0, short_out, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (short_in, 0, items * sizeof (short)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_short_or_die (file, 0, short_in, items, __LINE__) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (short_out [k] != short_in [k])
-               {       printf ("\n\nLine %d: Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, short_out [k], short_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       /* Finally, check the file hash. */
-       check_file_hash_or_die (filename, hash, __LINE__) ;
-
-       /*--------------------------------------------------------------------------
-       ** Test sf_read/write_int ()
-       */
-       zero_count = 0 ;
-
-       int_out = data_out.i ;
-       int_in = data_in.i ;
-       for (k = 0 ; k < items ; k++)
-       {       int_out [k] = ((k * ((k % 2) ? 1 : -1)) << 24) ;
-               zero_count = int_out [k] ? zero_count : zero_count + 1 ;
-               } ;
-
-       if (zero_count > items / 4)
-       {       printf ("\n\nLine %d: too many zeros.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       test_write_int_or_die (file, 0, int_out, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (int_in, 0, items * sizeof (int)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_int_or_die (file, 0, int_in, items, __LINE__) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (int_out [k] != int_in [k])
-               {       printf ("\n\nLine %d: int : Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, int_out [k], int_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       /* Lite remove start */
-       /*--------------------------------------------------------------------------
-       ** Test sf_read/write_float ()
-       */
-       zero_count = 0 ;
-
-       float_out = data_out.f ;
-       float_in = data_in.f ;
-       for (k = 0 ; k < items ; k++)
-       {       float_out [k] = (k * ((k % 2) ? 1 : -1)) ;
-               zero_count = (fabs (float_out [k]) > 1e-10) ? zero_count : zero_count + 1 ;
-               } ;
-
-       if (zero_count > items / 4)
-       {       printf ("\n\nLine %d: too many zeros (%d/%d).\n", __LINE__, zero_count, items) ;
-               exit (1) ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-       test_write_float_or_die (file, 0, float_out, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (float_in, 0, items * sizeof (float)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-       test_read_float_or_die (file, 0, float_in, items, __LINE__) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (fabs (float_out [k] - float_in [k]) > 1e-10)
-               {       printf ("\n\nLine %d: float : Incorrect sample (#%d : %f => %f).\n", __LINE__, k, (double) float_out [k], (double) float_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       /*--------------------------------------------------------------------------
-       ** Test sf_read/write_double ()
-       */
-       zero_count = 0 ;
-
-       double_out = data_out.d ;
-       double_in = data_in.d ;
-       for (k = 0 ; k < items ; k++)
-       {       double_out [k] = (k * ((k % 2) ? 1 : -1)) ;
-               zero_count = (fabs (double_out [k]) > 1e-10) ? zero_count : zero_count + 1 ;
-               } ;
-
-       if (zero_count > items / 4)
-       {       printf ("\n\nLine %d: too many zeros (%d/%d).\n", __LINE__, zero_count, items) ;
-               exit (1) ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-       test_write_double_or_die (file, 0, double_out, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (double_in, 0, items * sizeof (double)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-       test_read_double_or_die (file, 0, double_in, items, __LINE__) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (fabs (double_out [k] - double_in [k]) > 1e-10)
-               {       printf ("\n\nLine %d: double : Incorrect sample (#%d : %f => %f).\n", __LINE__, k, double_out [k], double_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-       /* Lite remove end */
-       unlink (filename) ;
-
-       puts ("ok") ;
-} /* pcm_test_bits_8 */
-
-static void
-pcm_test_bits_16 (const char *filename, int filetype, uint64_t hash)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     k, items, zero_count ;
-       short           *short_out, *short_in ;
-       int                     *int_out, *int_in ;
-       /* Lite remove start */
-       float           *float_out, *float_in ;
-       double          *double_out, *double_in ;
-       /* Lite remove end */
-
-       print_test_name ("pcm_test_bits_16", filename) ;
-
-       items = 1024 ;
-
-       short_out = data_out.s ;
-       short_in = data_in.s ;
-
-       zero_count = 0 ;
-       for (k = 0 ; k < items ; k++)
-       {       short_out [k] = (k * ((k % 2) ? 3 : -3)) ;
-               zero_count = short_out [k] ? zero_count : zero_count + 1 ;
-               } ;
-
-       if (zero_count > items / 4)
-       {       printf ("\n\nLine %d: too many zeros.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       test_write_short_or_die (file, 0, short_out, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (short_in, 0, items * sizeof (short)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_short_or_die (file, 0, short_in, items, __LINE__) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (short_out [k] != short_in [k])
-               {       printf ("\n\nLine %d: Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, short_out [k], short_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       /* Finally, check the file hash. */
-       check_file_hash_or_die (filename, hash, __LINE__) ;
-
-       /*--------------------------------------------------------------------------
-       ** Test sf_read/write_int ()
-       */
-       zero_count = 0 ;
-
-       int_out = data_out.i ;
-       int_in = data_in.i ;
-       for (k = 0 ; k < items ; k++)
-       {       int_out [k] = ((k * ((k % 2) ? 3 : -3)) << 16) ;
-               zero_count = int_out [k] ? zero_count : zero_count + 1 ;
-               } ;
-
-       if (zero_count > items / 4)
-       {       printf ("\n\nLine %d: too many zeros.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       test_write_int_or_die (file, 0, int_out, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (int_in, 0, items * sizeof (int)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_int_or_die (file, 0, int_in, items, __LINE__) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (int_out [k] != int_in [k])
-               {       printf ("\n\nLine %d: int : Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, int_out [k], int_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       /* Lite remove start */
-       /*--------------------------------------------------------------------------
-       ** Test sf_read/write_float ()
-       */
-       zero_count = 0 ;
-
-       float_out = data_out.f ;
-       float_in = data_in.f ;
-       for (k = 0 ; k < items ; k++)
-       {       float_out [k] = (k * ((k % 2) ? 3 : -3)) ;
-               zero_count = (fabs (float_out [k]) > 1e-10) ? zero_count : zero_count + 1 ;
-               } ;
-
-       if (zero_count > items / 4)
-       {       printf ("\n\nLine %d: too many zeros (%d/%d).\n", __LINE__, zero_count, items) ;
-               exit (1) ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-       test_write_float_or_die (file, 0, float_out, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (float_in, 0, items * sizeof (float)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-       test_read_float_or_die (file, 0, float_in, items, __LINE__) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (fabs (float_out [k] - float_in [k]) > 1e-10)
-               {       printf ("\n\nLine %d: float : Incorrect sample (#%d : %f => %f).\n", __LINE__, k, (double) float_out [k], (double) float_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       /*--------------------------------------------------------------------------
-       ** Test sf_read/write_double ()
-       */
-       zero_count = 0 ;
-
-       double_out = data_out.d ;
-       double_in = data_in.d ;
-       for (k = 0 ; k < items ; k++)
-       {       double_out [k] = (k * ((k % 2) ? 3 : -3)) ;
-               zero_count = (fabs (double_out [k]) > 1e-10) ? zero_count : zero_count + 1 ;
-               } ;
-
-       if (zero_count > items / 4)
-       {       printf ("\n\nLine %d: too many zeros (%d/%d).\n", __LINE__, zero_count, items) ;
-               exit (1) ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-       test_write_double_or_die (file, 0, double_out, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (double_in, 0, items * sizeof (double)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-       test_read_double_or_die (file, 0, double_in, items, __LINE__) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (fabs (double_out [k] - double_in [k]) > 1e-10)
-               {       printf ("\n\nLine %d: double : Incorrect sample (#%d : %f => %f).\n", __LINE__, k, double_out [k], double_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-       /* Lite remove end */
-       unlink (filename) ;
-
-       puts ("ok") ;
-} /* pcm_test_bits_16 */
-
-static void
-pcm_test_bits_24 (const char *filename, int filetype, uint64_t hash)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     k, items, zero_count ;
-       short           *short_out, *short_in ;
-       int                     *int_out, *int_in ;
-       /* Lite remove start */
-       float           *float_out, *float_in ;
-       double          *double_out, *double_in ;
-       /* Lite remove end */
-
-       print_test_name ("pcm_test_bits_24", filename) ;
-
-       items = 1024 ;
-
-       short_out = data_out.s ;
-       short_in = data_in.s ;
-
-       zero_count = 0 ;
-       for (k = 0 ; k < items ; k++)
-       {       short_out [k] = (k * ((k % 2) ? 3 : -3)) ;
-               zero_count = short_out [k] ? zero_count : zero_count + 1 ;
-               } ;
-
-       if (zero_count > items / 4)
-       {       printf ("\n\nLine %d: too many zeros.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       test_write_short_or_die (file, 0, short_out, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (short_in, 0, items * sizeof (short)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_short_or_die (file, 0, short_in, items, __LINE__) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (short_out [k] != short_in [k])
-               {       printf ("\n\nLine %d: Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, short_out [k], short_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       /* Finally, check the file hash. */
-       check_file_hash_or_die (filename, hash, __LINE__) ;
-
-       /*--------------------------------------------------------------------------
-       ** Test sf_read/write_int ()
-       */
-       zero_count = 0 ;
-
-       int_out = data_out.i ;
-       int_in = data_in.i ;
-       for (k = 0 ; k < items ; k++)
-       {       int_out [k] = ((k * ((k % 2) ? 3333 : -3333)) << 8) ;
-               zero_count = int_out [k] ? zero_count : zero_count + 1 ;
-               } ;
-
-       if (zero_count > items / 4)
-       {       printf ("\n\nLine %d: too many zeros.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       test_write_int_or_die (file, 0, int_out, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (int_in, 0, items * sizeof (int)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_int_or_die (file, 0, int_in, items, __LINE__) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (int_out [k] != int_in [k])
-               {       printf ("\n\nLine %d: int : Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, int_out [k], int_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       /* Lite remove start */
-       /*--------------------------------------------------------------------------
-       ** Test sf_read/write_float ()
-       */
-       zero_count = 0 ;
-
-       float_out = data_out.f ;
-       float_in = data_in.f ;
-       for (k = 0 ; k < items ; k++)
-       {       float_out [k] = (k * ((k % 2) ? 3333 : -3333)) ;
-               zero_count = (fabs (float_out [k]) > 1e-10) ? zero_count : zero_count + 1 ;
-               } ;
-
-       if (zero_count > items / 4)
-       {       printf ("\n\nLine %d: too many zeros (%d/%d).\n", __LINE__, zero_count, items) ;
-               exit (1) ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-       test_write_float_or_die (file, 0, float_out, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (float_in, 0, items * sizeof (float)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-       test_read_float_or_die (file, 0, float_in, items, __LINE__) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (fabs (float_out [k] - float_in [k]) > 1e-10)
-               {       printf ("\n\nLine %d: float : Incorrect sample (#%d : %f => %f).\n", __LINE__, k, (double) float_out [k], (double) float_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       /*--------------------------------------------------------------------------
-       ** Test sf_read/write_double ()
-       */
-       zero_count = 0 ;
-
-       double_out = data_out.d ;
-       double_in = data_in.d ;
-       for (k = 0 ; k < items ; k++)
-       {       double_out [k] = (k * ((k % 2) ? 3333 : -3333)) ;
-               zero_count = (fabs (double_out [k]) > 1e-10) ? zero_count : zero_count + 1 ;
-               } ;
-
-       if (zero_count > items / 4)
-       {       printf ("\n\nLine %d: too many zeros (%d/%d).\n", __LINE__, zero_count, items) ;
-               exit (1) ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-       test_write_double_or_die (file, 0, double_out, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (double_in, 0, items * sizeof (double)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-       test_read_double_or_die (file, 0, double_in, items, __LINE__) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (fabs (double_out [k] - double_in [k]) > 1e-10)
-               {       printf ("\n\nLine %d: double : Incorrect sample (#%d : %f => %f).\n", __LINE__, k, double_out [k], double_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-       /* Lite remove end */
-       unlink (filename) ;
-
-       puts ("ok") ;
-} /* pcm_test_bits_24 */
-
-static void
-pcm_test_bits_32 (const char *filename, int filetype, uint64_t hash)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     k, items, zero_count ;
-       short           *short_out, *short_in ;
-       int                     *int_out, *int_in ;
-       /* Lite remove start */
-       float           *float_out, *float_in ;
-       double          *double_out, *double_in ;
-       /* Lite remove end */
-
-       print_test_name ("pcm_test_bits_32", filename) ;
-
-       items = 1024 ;
-
-       short_out = data_out.s ;
-       short_in = data_in.s ;
-
-       zero_count = 0 ;
-       for (k = 0 ; k < items ; k++)
-       {       short_out [k] = (k * ((k % 2) ? 3 : -3)) ;
-               zero_count = short_out [k] ? zero_count : zero_count + 1 ;
-               } ;
-
-       if (zero_count > items / 4)
-       {       printf ("\n\nLine %d: too many zeros.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       test_write_short_or_die (file, 0, short_out, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (short_in, 0, items * sizeof (short)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_short_or_die (file, 0, short_in, items, __LINE__) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (short_out [k] != short_in [k])
-               {       printf ("\n\nLine %d: Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, short_out [k], short_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       /* Finally, check the file hash. */
-       check_file_hash_or_die (filename, hash, __LINE__) ;
-
-       /*--------------------------------------------------------------------------
-       ** Test sf_read/write_int ()
-       */
-       zero_count = 0 ;
-
-       int_out = data_out.i ;
-       int_in = data_in.i ;
-       for (k = 0 ; k < items ; k++)
-       {       int_out [k] = (k * ((k % 2) ? 333333 : -333333)) ;
-               zero_count = int_out [k] ? zero_count : zero_count + 1 ;
-               } ;
-
-       if (zero_count > items / 4)
-       {       printf ("\n\nLine %d: too many zeros.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       test_write_int_or_die (file, 0, int_out, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (int_in, 0, items * sizeof (int)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_int_or_die (file, 0, int_in, items, __LINE__) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (int_out [k] != int_in [k])
-               {       printf ("\n\nLine %d: int : Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, int_out [k], int_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       /* Lite remove start */
-       /*--------------------------------------------------------------------------
-       ** Test sf_read/write_float ()
-       */
-       zero_count = 0 ;
-
-       float_out = data_out.f ;
-       float_in = data_in.f ;
-       for (k = 0 ; k < items ; k++)
-       {       float_out [k] = (k * ((k % 2) ? 333333 : -333333)) ;
-               zero_count = (fabs (float_out [k]) > 1e-10) ? zero_count : zero_count + 1 ;
-               } ;
-
-       if (zero_count > items / 4)
-       {       printf ("\n\nLine %d: too many zeros (%d/%d).\n", __LINE__, zero_count, items) ;
-               exit (1) ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-       test_write_float_or_die (file, 0, float_out, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (float_in, 0, items * sizeof (float)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-       test_read_float_or_die (file, 0, float_in, items, __LINE__) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (fabs (float_out [k] - float_in [k]) > 1e-10)
-               {       printf ("\n\nLine %d: float : Incorrect sample (#%d : %f => %f).\n", __LINE__, k, (double) float_out [k], (double) float_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       /*--------------------------------------------------------------------------
-       ** Test sf_read/write_double ()
-       */
-       zero_count = 0 ;
-
-       double_out = data_out.d ;
-       double_in = data_in.d ;
-       for (k = 0 ; k < items ; k++)
-       {       double_out [k] = (k * ((k % 2) ? 333333 : -333333)) ;
-               zero_count = (fabs (double_out [k]) > 1e-10) ? zero_count : zero_count + 1 ;
-               } ;
-
-       if (zero_count > items / 4)
-       {       printf ("\n\nLine %d: too many zeros (%d/%d).\n", __LINE__, zero_count, items) ;
-               exit (1) ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-       test_write_double_or_die (file, 0, double_out, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (double_in, 0, items * sizeof (double)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-       test_read_double_or_die (file, 0, double_in, items, __LINE__) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (fabs (double_out [k] - double_in [k]) > 1e-10)
-               {       printf ("\n\nLine %d: double : Incorrect sample (#%d : %f => %f).\n", __LINE__, k, double_out [k], double_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-       /* Lite remove end */
-       unlink (filename) ;
-
-       puts ("ok") ;
-} /* pcm_test_bits_32 */
-
-
-
-/*==============================================================================
-*/
-
-static void
-pcm_test_float (const char *filename, int filetype, uint64_t hash, int replace_float)
-{      SNDFILE                 *file ;
-       SF_INFO                 sfinfo ;
-       int                             k, items, frames ;
-       int                             sign ;
-       double                  *data, error ;
-
-       print_test_name (replace_float ?  "pcm_test_float (replace)" : "pcm_test_float", filename) ;
-
-       items = BUFFER_SIZE ;
-
-       data = data_out.d ;
-       for (sign = 1, k = 0 ; k < items ; k++)
-       {       data [k] = ((double) (k * sign)) / 100.0 ;
-               sign = (sign > 0) ? -1 : 1 ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = items ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-       if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-       {       printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       test_write_double_or_die (file, 0, data, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       check_file_hash_or_die (filename, hash, __LINE__) ;
-
-       memset (data, 0, items * sizeof (double)) ;
-
-       if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-       if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-       {       printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nError (%s:%d) Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __FILE__, __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nError (%s:%d) Mono : Incorrect number of frames in file. (%d => %ld)\n", __FILE__, __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nError (%s:%d) Mono : Incorrect number of channels in file.\n", __FILE__, __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data, items, __LINE__) ;
-
-       for (sign = -1, k = 0 ; k < items ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data, 4, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data + 10, 4, __LINE__) ;
-       for (k = 10 ; k < 14 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 6, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data + 20, 4, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data + 10, 4, __LINE__) ;
-       for (k = 10 ; k < 14 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       sf_close (file) ;
-
-       /* Now test Stereo. */
-
-       if ((filetype & SF_FORMAT_TYPEMASK) == SF_FORMAT_SVX) /* SVX is mono only */
-       {       printf ("ok\n") ;
-               return ;
-               } ;
-
-       items = BUFFER_SIZE ;
-
-       data = data_out.d ;
-       for (sign = -1, k = 0 ; k < items ; k++)
-               data [k] = ((double) k) / 100.0 * (sign *= -1) ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = items ;
-       sfinfo.channels         = 2 ;
-       sfinfo.format           = filetype ;
-
-       frames = items / sfinfo.channels ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-       if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-       {       printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       test_writef_double_or_die (file, 0, data, frames, __LINE__) ;
-
-       sf_close (file) ;
-
-       check_file_hash_or_die (filename, hash, __LINE__) ;
-
-       memset (data, 0, items * sizeof (double)) ;
-
-       if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-       if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-       {       printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nError (%s:%d) Stereo : Returned format incorrect (0x%08X => 0x%08X).\n", __FILE__, __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != frames)
-       {       printf ("\n\nError (%s:%d) Stereo : Incorrect number of frames in file. (%d => %ld)\n", __FILE__, __LINE__, frames, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 2)
-       {       printf ("\n\nError (%s:%d) Stereo : Incorrect number of channels in file.\n", __FILE__, __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_readf_double_or_die (file, 0, data, frames, __LINE__) ;
-       for (sign = -1, k = 0 ; k < items ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_readf_double_or_die (file, 0, data, 4, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-       test_readf_double_or_die (file, 0, data + 20, 2, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-       test_readf_double_or_die (file, 0, data + 40, 2, __LINE__) ;
-       for (k = 40 ; k < 44 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_readf_double_or_die (file, 0, data + 20, 2, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       sf_close (file) ;
-
-       printf ("ok\n") ;
-       unlink (filename) ;
-} /* pcm_test_float */
-
-static void
-pcm_test_double (const char *filename, int     filetype, uint64_t hash, int replace_float)
-{      SNDFILE                 *file ;
-       SF_INFO                 sfinfo ;
-       int                             k, items, frames ;
-       int                             sign ;
-       double                  *data, error ;
-
-       /* This is the best test routine. Other should be brought up to this standard. */
-
-       print_test_name (replace_float ?  "pcm_test_double (replace)" : "pcm_test_double", filename) ;
-
-       items = BUFFER_SIZE ;
-
-       data = data_out.d ;
-       for (sign = 1, k = 0 ; k < items ; k++)
-       {       data [k] = ((double) (k * sign)) / 100.0 ;
-               sign = (sign > 0) ? -1 : 1 ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = items ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-       if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-       {       printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       test_write_double_or_die (file, 0, data, items, __LINE__) ;
-
-       sf_close (file) ;
-
-#if (defined (WIN32) || defined (_WIN32))
-       /* File hashing on Win32 fails due to slighty different
-       ** calculated values of the sin() function.
-       */
-       hash = hash ; /* Avoid compiler warning. */
-#else
-       check_file_hash_or_die (filename, hash, __LINE__) ;
-#endif
-
-       memset (data, 0, items * sizeof (double)) ;
-
-       if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-       if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-       {       printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nError (%s:%d) Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __FILE__, __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nError (%s:%d) Mono : Incorrect number of frames in file. (%d => %ld)\n", __FILE__, __LINE__, items, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nError (%s:%d) Mono : Incorrect number of channels in file.\n", __FILE__, __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data, items, __LINE__) ;
-
-       for (sign = -1, k = 0 ; k < items ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data, 4, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data + 10, 4, __LINE__) ;
-
-       test_seek_or_die (file, 0, SEEK_CUR, 14, sfinfo.channels, __LINE__) ;
-
-       for (k = 10 ; k < 14 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 6, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data + 20, 4, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data + 10, 4, __LINE__) ;
-       for (k = 10 ; k < 14 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       sf_close (file) ;
-
-       /* Now test Stereo. */
-
-       if ((filetype & SF_FORMAT_TYPEMASK) == SF_FORMAT_SVX) /* SVX is mono only */
-       {       printf ("ok\n") ;
-               return ;
-               } ;
-
-       items = BUFFER_SIZE ;
-
-       data = data_out.d ;
-       for (sign = -1, k = 0 ; k < items ; k++)
-               data [k] = ((double) k) / 100.0 * (sign *= -1) ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = items ;
-       sfinfo.channels         = 2 ;
-       sfinfo.format           = filetype ;
-
-       frames = items / sfinfo.channels ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-       if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-       {       printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       test_writef_double_or_die (file, 0, data, frames, __LINE__) ;
-
-       sf_close (file) ;
-
-#if (defined (WIN32) || defined (_WIN32))
-       /* File hashing on Win32 fails due to slighty different
-       ** calculated values.
-       */
-       hash = hash ; /* Avoid compiler warning. */
-#else
-       check_file_hash_or_die (filename, hash, __LINE__) ;
-#endif
-
-       memset (data, 0, items * sizeof (double)) ;
-
-       if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-       if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-       {       printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nError (%s:%d) Stereo : Returned format incorrect (0x%08X => 0x%08X).\n", __FILE__, __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != frames)
-       {       printf ("\n\nError (%s:%d) Stereo : Incorrect number of frames in file. (%d => %ld)\n", __FILE__, __LINE__, frames, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 2)
-       {       printf ("\n\nError (%s:%d) Stereo : Incorrect number of channels in file.\n", __FILE__, __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_readf_double_or_die (file, 0, data, frames, __LINE__) ;
-
-       for (sign = -1, k = 0 ; k < items ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data, 4, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data + 10, 4, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-       test_readf_double_or_die (file, 0, data + 40, 4, __LINE__) ;
-       for (k = 40 ; k < 44 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames -10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_readf_double_or_die (file, 0, data + 20, 4, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       sf_close (file) ;
-
-       printf ("ok\n") ;
-       unlink (filename) ;
-} /* pcm_test_double */
-
-/*==============================================================================
-*/
diff --git a/libs/libsndfile/tests/pcm_test.def b/libs/libsndfile/tests/pcm_test.def
deleted file mode 100644 (file)
index b81f059..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-autogen definitions pcm_test.tpl;
-
-data_type = {
-       name            = "bits_8" ;
-       item_count      = 127 ;
-       short_func      = "((k * ((k % 2) ? 1 : -1)) << 8)" ;
-       int_func        = "((k * ((k % 2) ? 1 : -1)) << 24)" ;
-       float_func      = "(k * ((k % 2) ? 1 : -1))" ;
-       } ;
-
-data_type = {
-       name            = "bits_16" ;
-       item_count      = 1024 ;
-       short_func      = "(k * ((k % 2) ? 3 : -3))" ;
-       int_func        = "((k * ((k % 2) ? 3 : -3)) << 16)" ;
-       float_func      = "(k * ((k % 2) ? 3 : -3))" ;
-       } ;
-
-data_type = {
-       name            = "bits_24" ;
-       item_count      = 1024 ;
-       short_func      = "(k * ((k % 2) ? 3 : -3))" ;
-       int_func        = "((k * ((k % 2) ? 3333 : -3333)) << 8)" ;
-       float_func      = "(k * ((k % 2) ? 3333 : -3333))" ;
-       } ;
-
-data_type = {
-       name            = "bits_32" ;
-       item_count      = 1024 ;
-       short_func      = "(k * ((k % 2) ? 3 : -3))" ;
-       int_func        = "(k * ((k % 2) ? 333333 : -333333))" ;
-       float_func      = "(k * ((k % 2) ? 333333 : -333333))" ;
-       } ;
-
diff --git a/libs/libsndfile/tests/pcm_test.tpl b/libs/libsndfile/tests/pcm_test.tpl
deleted file mode 100644 (file)
index 459e741..0000000
+++ /dev/null
@@ -1,931 +0,0 @@
-[+ AutoGen5 template c +]
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define        BUFFER_SIZE             (1 << 12)
-
-static void    lrintf_test (void) ;
-
-[+ FOR data_type
-+]static void  pcm_test_[+ (get "name") +]     (const char *filename, int filetype, uint64_t hash) ;
-[+ ENDFOR data_type
-+]
-static void pcm_test_float     (const char *filename, int filetype, uint64_t hash, int replace_float) ;
-static void pcm_test_double    (const char *filename, int filetype, uint64_t hash, int replace_float) ;
-
-typedef union
-{      double  d [BUFFER_SIZE + 1] ;
-       float   f [BUFFER_SIZE + 1] ;
-       int             i [BUFFER_SIZE + 1] ;
-       short   s [BUFFER_SIZE + 1] ;
-} BUFFER ;
-
-/* Data written to the file. */
-static BUFFER  data_out ;
-
-/* Data read back from the file. */
-static BUFFER  data_in ;
-
-int
-main (void)
-{
-       lrintf_test () ;
-
-       pcm_test_bits_8 ("pcm-s8.raw", SF_FORMAT_RAW | SF_FORMAT_PCM_S8, 0x1cda335091249dbfLL) ;
-       pcm_test_bits_8 ("pcm-u8.raw", SF_FORMAT_RAW | SF_FORMAT_PCM_U8, 0x7f748c433d695f3fLL) ;
-
-       pcm_test_bits_16 ("le-pcm16.raw", SF_ENDIAN_LITTLE      | SF_FORMAT_RAW | SF_FORMAT_PCM_16, 0x3a2b956c881ebf08LL) ;
-       pcm_test_bits_16 ("be-pcm16.raw", SF_ENDIAN_BIG         | SF_FORMAT_RAW | SF_FORMAT_PCM_16, 0xd9e2f840c55750f8LL) ;
-
-       pcm_test_bits_24 ("le-pcm24.raw", SF_ENDIAN_LITTLE      | SF_FORMAT_RAW | SF_FORMAT_PCM_24, 0x933b6a759ab496f8LL) ;
-       pcm_test_bits_24 ("be-pcm24.raw", SF_ENDIAN_BIG         | SF_FORMAT_RAW | SF_FORMAT_PCM_24, 0xbb1f3eaf9c30b6f8LL) ;
-
-       pcm_test_bits_32 ("le-pcm32.raw", SF_ENDIAN_LITTLE      | SF_FORMAT_RAW | SF_FORMAT_PCM_32, 0xa77aece1c1c17f08LL) ;
-       pcm_test_bits_32 ("be-pcm32.raw", SF_ENDIAN_BIG         | SF_FORMAT_RAW | SF_FORMAT_PCM_32, 0x3099ddf142d0b0f8LL) ;
-
-       /* Lite remove start */
-       pcm_test_float  ("le-float.raw", SF_ENDIAN_LITTLE       | SF_FORMAT_RAW | SF_FORMAT_FLOAT, 0x3c2ad04f7554267aLL, SF_FALSE) ;
-       pcm_test_float  ("be-float.raw", SF_ENDIAN_BIG          | SF_FORMAT_RAW | SF_FORMAT_FLOAT, 0x074de3e248fa9186LL, SF_FALSE) ;
-
-       pcm_test_double ("le-double.raw", SF_ENDIAN_LITTLE      | SF_FORMAT_RAW | SF_FORMAT_DOUBLE, 0xc682726f958f669cLL, SF_FALSE) ;
-       pcm_test_double ("be-double.raw", SF_ENDIAN_BIG | SF_FORMAT_RAW | SF_FORMAT_DOUBLE, 0xd9a3583f8ee51164LL, SF_FALSE) ;
-
-       pcm_test_float  ("le-float.raw", SF_ENDIAN_LITTLE       | SF_FORMAT_RAW | SF_FORMAT_FLOAT, 0x3c2ad04f7554267aLL, SF_TRUE) ;
-       pcm_test_float  ("be-float.raw", SF_ENDIAN_BIG          | SF_FORMAT_RAW | SF_FORMAT_FLOAT, 0x074de3e248fa9186LL, SF_TRUE) ;
-
-       pcm_test_double ("le-double.raw", SF_ENDIAN_LITTLE      | SF_FORMAT_RAW | SF_FORMAT_DOUBLE, 0xc682726f958f669cLL, SF_TRUE) ;
-       pcm_test_double ("be-double.raw", SF_ENDIAN_BIG | SF_FORMAT_RAW | SF_FORMAT_DOUBLE, 0xd9a3583f8ee51164LL, SF_TRUE) ;
-       /* Lite remove end */
-
-       return 0 ;
-} /* main */
-
-/*============================================================================================
-**     Here are the test functions.
-*/
-
-static void
-lrintf_test (void)
-{      int k, items ;
-       float   *float_data ;
-       int             *int_data ;
-
-       print_test_name ("lrintf_test", "") ;
-
-       items = 1024 ;
-
-       float_data = data_out.f ;
-       int_data = data_in.i ;
-
-       for (k = 0 ; k < items ; k++)
-               float_data [k] = (k * ((k % 2) ? 333333.0 : -333333.0)) ;
-
-       for (k = 0 ; k < items ; k++)
-               int_data [k] = lrintf (float_data [k]) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (fabs (int_data [k] - float_data [k]) > 1.0)
-               {       printf ("\n\nLine %d: float : Incorrect sample (#%d : %f => %d).\n", __LINE__, k, float_data [k], int_data [k]) ;
-                       exit (1) ;
-                       } ;
-
-       printf ("ok\n") ;
-} /* lrintf_test */
-
-[+ FOR data_type
-+]static void
-pcm_test_[+ (get "name") +] (const char *filename, int filetype, uint64_t hash)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     k, items, zero_count ;
-       short           *short_out, *short_in ;
-       int                     *int_out, *int_in ;
-       /* Lite remove start */
-       float           *float_out, *float_in ;
-       double          *double_out, *double_in ;
-       /* Lite remove end */
-
-       print_test_name ("pcm_test_[+ (get "name") +]", filename) ;
-
-       items = [+ (get "item_count") +] ;
-
-       short_out = data_out.s ;
-       short_in = data_in.s ;
-
-       zero_count = 0 ;
-       for (k = 0 ; k < items ; k++)
-       {       short_out [k] = [+ (get "short_func") +] ;
-               zero_count = short_out [k] ? zero_count : zero_count + 1 ;
-               } ;
-
-       if (zero_count > items / 4)
-       {       printf ("\n\nLine %d: too many zeros.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       test_write_short_or_die (file, 0, short_out, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (short_in, 0, items * sizeof (short)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %" PRId64 ")\n", __LINE__, items, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_short_or_die (file, 0, short_in, items, __LINE__) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (short_out [k] != short_in [k])
-               {       printf ("\n\nLine %d: Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, short_out [k], short_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       /* Finally, check the file hash. */
-       check_file_hash_or_die (filename, hash, __LINE__) ;
-
-       /*--------------------------------------------------------------------------
-       ** Test sf_read/write_int ()
-       */
-       zero_count = 0 ;
-
-       int_out = data_out.i ;
-       int_in = data_in.i ;
-       for (k = 0 ; k < items ; k++)
-       {       int_out [k] = [+ (get "int_func") +] ;
-               zero_count = int_out [k] ? zero_count : zero_count + 1 ;
-               } ;
-
-       if (zero_count > items / 4)
-       {       printf ("\n\nLine %d: too many zeros.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       test_write_int_or_die (file, 0, int_out, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (int_in, 0, items * sizeof (int)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %" PRId64 ")\n", __LINE__, items, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_int_or_die (file, 0, int_in, items, __LINE__) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (int_out [k] != int_in [k])
-               {       printf ("\n\nLine %d: int : Incorrect sample (#%d : 0x%x => 0x%x).\n", __LINE__, k, int_out [k], int_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       /* Lite remove start */
-       /*--------------------------------------------------------------------------
-       ** Test sf_read/write_float ()
-       */
-       zero_count = 0 ;
-
-       float_out = data_out.f ;
-       float_in = data_in.f ;
-       for (k = 0 ; k < items ; k++)
-       {       float_out [k] = [+ (get "float_func") +] ;
-               zero_count = (fabs (float_out [k]) > 1e-10) ? zero_count : zero_count + 1 ;
-               } ;
-
-       if (zero_count > items / 4)
-       {       printf ("\n\nLine %d: too many zeros (%d/%d).\n", __LINE__, zero_count, items) ;
-               exit (1) ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-       test_write_float_or_die (file, 0, float_out, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (float_in, 0, items * sizeof (float)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %" PRId64 ")\n", __LINE__, items, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-
-       test_read_float_or_die (file, 0, float_in, items, __LINE__) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (fabs (float_out [k] - float_in [k]) > 1e-10)
-               {       printf ("\n\nLine %d: float : Incorrect sample (#%d : %f => %f).\n", __LINE__, k, (double) float_out [k], (double) float_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       /*--------------------------------------------------------------------------
-       ** Test sf_read/write_double ()
-       */
-       zero_count = 0 ;
-
-       double_out = data_out.d ;
-       double_in = data_in.d ;
-       for (k = 0 ; k < items ; k++)
-       {       double_out [k] = [+ (get "float_func") +] ;
-               zero_count = (fabs (double_out [k]) > 1e-10) ? zero_count : zero_count + 1 ;
-               } ;
-
-       if (zero_count > items / 4)
-       {       printf ("\n\nLine %d: too many zeros (%d/%d).\n", __LINE__, zero_count, items) ;
-               exit (1) ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-       test_write_double_or_die (file, 0, double_out, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       memset (double_in, 0, items * sizeof (double)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %" PRId64 ")\n", __LINE__, items, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-
-       test_read_double_or_die (file, 0, double_in, items, __LINE__) ;
-
-       for (k = 0 ; k < items ; k++)
-               if (fabs (double_out [k] - double_in [k]) > 1e-10)
-               {       printf ("\n\nLine %d: double : Incorrect sample (#%d : %f => %f).\n", __LINE__, k, double_out [k], double_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-       /* Lite remove end */
-       unlink (filename) ;
-
-       puts ("ok") ;
-} /* pcm_test_[+ (get "name") +] */
-
-[+ ENDFOR data_type
-+]
-
-/*==============================================================================
-*/
-
-static void
-pcm_test_float (const char *filename, int filetype, uint64_t hash, int replace_float)
-{      SNDFILE                 *file ;
-       SF_INFO                 sfinfo ;
-       int                             k, items, frames ;
-       int                             sign ;
-       double                  *data, error ;
-
-       print_test_name (replace_float ? "pcm_test_float (replace)" : "pcm_test_float", filename) ;
-
-       items = BUFFER_SIZE ;
-
-       data = data_out.d ;
-       for (sign = 1, k = 0 ; k < items ; k++)
-       {       data [k] = ((double) (k * sign)) / 100.0 ;
-               sign = (sign > 0) ? -1 : 1 ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = items ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-       if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-       {       printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       test_write_double_or_die (file, 0, data, items, __LINE__) ;
-
-       sf_close (file) ;
-
-       check_file_hash_or_die (filename, hash, __LINE__) ;
-
-       memset (data, 0, items * sizeof (double)) ;
-
-       if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-       if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-       {       printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nError (%s:%d) Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __FILE__, __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nError (%s:%d) Mono : Incorrect number of frames in file. (%d => %" PRId64 ")\n", __FILE__, __LINE__, items, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nError (%s:%d) Mono : Incorrect number of channels in file.\n", __FILE__, __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data, items, __LINE__) ;
-
-       for (sign = -1, k = 0 ; k < items ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to end of file. */
-       test_seek_or_die (file, 0, SEEK_END, sfinfo.frames, sfinfo.channels, __LINE__) ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data, 4, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data + 10, 4, __LINE__) ;
-       for (k = 10 ; k < 14 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 6, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data + 20, 4, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data + 10, 4, __LINE__) ;
-       for (k = 10 ; k < 14 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       sf_close (file) ;
-
-       /* Now test Stereo. */
-
-       if ((filetype & SF_FORMAT_TYPEMASK) == SF_FORMAT_SVX) /* SVX is mono only */
-       {       printf ("ok\n") ;
-               return ;
-               } ;
-
-       items = BUFFER_SIZE ;
-
-       data = data_out.d ;
-       for (sign = -1, k = 0 ; k < items ; k++)
-               data [k] = ((double) k) / 100.0 * (sign *= -1) ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = items ;
-       sfinfo.channels         = 2 ;
-       sfinfo.format           = filetype ;
-
-       frames = items / sfinfo.channels ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-       if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-       {       printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       test_writef_double_or_die (file, 0, data, frames, __LINE__) ;
-
-       sf_close (file) ;
-
-       check_file_hash_or_die (filename, hash, __LINE__) ;
-
-       memset (data, 0, items * sizeof (double)) ;
-
-       if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-       if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-       {       printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nError (%s:%d) Stereo : Returned format incorrect (0x%08X => 0x%08X).\n", __FILE__, __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != frames)
-       {       printf ("\n\nError (%s:%d) Stereo : Incorrect number of frames in file. (%d => %" PRId64 ")\n", __FILE__, __LINE__, frames, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 2)
-       {       printf ("\n\nError (%s:%d) Stereo : Incorrect number of channels in file.\n", __FILE__, __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_readf_double_or_die (file, 0, data, frames, __LINE__) ;
-       for (sign = -1, k = 0 ; k < items ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_readf_double_or_die (file, 0, data, 4, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-       test_readf_double_or_die (file, 0, data + 20, 2, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-       test_readf_double_or_die (file, 0, data + 40, 2, __LINE__) ;
-       for (k = 40 ; k < 44 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_readf_double_or_die (file, 0, data + 20, 2, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       sf_close (file) ;
-
-       printf ("ok\n") ;
-       unlink (filename) ;
-} /* pcm_test_float */
-
-static void
-pcm_test_double (const char *filename, int     filetype, uint64_t hash, int replace_float)
-{      SNDFILE                 *file ;
-       SF_INFO                 sfinfo ;
-       int                             k, items, frames ;
-       int                             sign ;
-       double                  *data, error ;
-
-       /* This is the best test routine. Other should be brought up to this standard. */
-
-       print_test_name (replace_float ? "pcm_test_double (replace)" : "pcm_test_double", filename) ;
-
-       items = BUFFER_SIZE ;
-
-       data = data_out.d ;
-       for (sign = 1, k = 0 ; k < items ; k++)
-       {       data [k] = ((double) (k * sign)) / 100.0 ;
-               sign = (sign > 0) ? -1 : 1 ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = items ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-       if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-       {       printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       test_write_double_or_die (file, 0, data, items, __LINE__) ;
-
-       sf_close (file) ;
-
-#if (defined (WIN32) || defined (_WIN32))
-       /* File hashing on Win32 fails due to slighty different
-       ** calculated values of the sin() function.
-       */
-       hash = hash ; /* Avoid compiler warning. */
-#else
-       check_file_hash_or_die (filename, hash, __LINE__) ;
-#endif
-
-       memset (data, 0, items * sizeof (double)) ;
-
-       if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-       if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-       {       printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nError (%s:%d) Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __FILE__, __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != items)
-       {       printf ("\n\nError (%s:%d) Mono : Incorrect number of frames in file. (%d => %" PRId64 ")\n", __FILE__, __LINE__, items, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nError (%s:%d) Mono : Incorrect number of channels in file.\n", __FILE__, __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data, items, __LINE__) ;
-
-       for (sign = -1, k = 0 ; k < items ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data, 4, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data + 10, 4, __LINE__) ;
-
-       test_seek_or_die (file, 0, SEEK_CUR, 14, sfinfo.channels, __LINE__) ;
-
-       for (k = 10 ; k < 14 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 6, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data + 20, 4, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data + 10, 4, __LINE__) ;
-       for (k = 10 ; k < 14 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Mono : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       sf_close (file) ;
-
-       /* Now test Stereo. */
-
-       if ((filetype & SF_FORMAT_TYPEMASK) == SF_FORMAT_SVX) /* SVX is mono only */
-       {       printf ("ok\n") ;
-               return ;
-               } ;
-
-       items = BUFFER_SIZE ;
-
-       data = data_out.d ;
-       for (sign = -1, k = 0 ; k < items ; k++)
-               data [k] = ((double) k) / 100.0 * (sign *= -1) ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = items ;
-       sfinfo.channels         = 2 ;
-       sfinfo.format           = filetype ;
-
-       frames = items / sfinfo.channels ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-       if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-       {       printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       test_writef_double_or_die (file, 0, data, frames, __LINE__) ;
-
-       sf_close (file) ;
-
-#if (defined (WIN32) || defined (_WIN32))
-       /* File hashing on Win32 fails due to slighty different
-       ** calculated values.
-       */
-       hash = hash ; /* Avoid compiler warning. */
-#else
-       check_file_hash_or_die (filename, hash, __LINE__) ;
-#endif
-
-       memset (data, 0, items * sizeof (double)) ;
-
-       if ((filetype & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_TEST_IEEE_FLOAT_REPLACE, NULL, replace_float) ;
-       if (replace_float && string_in_log_buffer (file, "Using IEEE replacement") == 0)
-       {       printf ("\n\nLine %d : Float replacement code not working.\n\n", __LINE__) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nError (%s:%d) Stereo : Returned format incorrect (0x%08X => 0x%08X).\n", __FILE__, __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != frames)
-       {       printf ("\n\nError (%s:%d) Stereo : Incorrect number of frames in file. (%d => %" PRId64 ")\n", __FILE__, __LINE__, frames, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 2)
-       {       printf ("\n\nError (%s:%d) Stereo : Incorrect number of channels in file.\n", __FILE__, __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_readf_double_or_die (file, 0, data, frames, __LINE__) ;
-
-       for (sign = -1, k = 0 ; k < items ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data, 4, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data + 10, 4, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-       test_readf_double_or_die (file, 0, data + 40, 4, __LINE__) ;
-       for (k = 40 ; k < 44 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames -10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_readf_double_or_die (file, 0, data + 20, 4, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-       {       error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
-               if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
-               {       printf ("\n\nError (%s:%d) Stereo : Incorrect sample (#%d : %f => %f).\n", __FILE__, __LINE__, k, ((double) k) / 100.0, data [k]) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       sf_close (file) ;
-
-       printf ("ok\n") ;
-       unlink (filename) ;
-} /* pcm_test_double */
-
-/*==============================================================================
-*/
diff --git a/libs/libsndfile/tests/peak_chunk_test.c b/libs/libsndfile/tests/peak_chunk_test.c
deleted file mode 100644 (file)
index 9e5332a..0000000
+++ /dev/null
@@ -1,362 +0,0 @@
-/*
-** Copyright (C) 2001-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define        BUFFER_LEN              (1 << 15)
-#define LOG_BUFFER_SIZE        1024
-
-
-static void    test_float_peak (const char *filename, int filetype) ;
-static void    read_write_peak_test    (const char *filename, int filetype) ;
-
-static void            check_logged_peaks (char *buffer) ;
-
-/* Force the start of this buffer to be double aligned. Sparc-solaris will
-** choke if its not.
-*/
-static double  data [BUFFER_LEN] ;
-static char    log_buffer [LOG_BUFFER_SIZE] ;
-
-int
-main (int argc, char *argv [])
-{      int             do_all = 0 ;
-       int             test_count = 0 ;
-
-       if (argc != 2)
-       {       printf ("Usage : %s <test>\n", argv [0]) ;
-               printf ("    Where <test> is one of the following:\n") ;
-               printf ("           aiff - test AIFF file PEAK chunk\n") ;
-               printf ("           caf  - test CAF file PEAK chunk\n") ;
-               printf ("           wav  - test WAV file peak chunk\n") ;
-               printf ("           all  - perform all tests\n") ;
-               exit (1) ;
-               } ;
-
-       do_all = ! strcmp (argv [1], "all") ;
-
-       if (do_all || ! strcmp (argv [1], "wav"))
-       {       test_float_peak ("peak_float.wav", SF_FORMAT_WAV | SF_FORMAT_FLOAT) ;
-               test_float_peak ("peak_float.wavex", SF_FORMAT_WAVEX | SF_FORMAT_FLOAT) ;
-               test_float_peak ("peak_float.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_FLOAT) ;
-
-               read_write_peak_test ("rw_peak.wav", SF_FORMAT_WAV | SF_FORMAT_FLOAT) ;
-               read_write_peak_test ("rw_peak.wavex", SF_FORMAT_WAVEX | SF_FORMAT_FLOAT) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "aiff"))
-       {       test_float_peak ("peak_float.aiff", SF_FORMAT_AIFF | SF_FORMAT_FLOAT) ;
-
-               read_write_peak_test ("rw_peak.aiff", SF_FORMAT_AIFF | SF_FORMAT_FLOAT) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "caf"))
-       {       test_float_peak ("peak_float.caf", SF_FORMAT_CAF | SF_FORMAT_FLOAT) ;
-
-               read_write_peak_test ("rw_peak.caf", SF_FORMAT_CAF | SF_FORMAT_FLOAT) ;
-               test_count++ ;
-               } ;
-
-       if (test_count == 0)
-       {       printf ("Mono : ************************************\n") ;
-               printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-               printf ("Mono : ************************************\n") ;
-               return 1 ;
-               } ;
-
-       return 0 ;
-} /* main */
-
-/*============================================================================================
-**     Here are the test functions.
-*/
-
-static void
-test_float_peak (const char *filename, int filetype)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     k, frames, count ;
-
-       print_test_name ("test_float_peak", filename) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.format           = filetype ;
-       sfinfo.channels         = 4 ;
-       sfinfo.frames           = 0 ;
-
-       frames = BUFFER_LEN / sfinfo.channels ;
-
-       /* Create some random data with a peak value of 0.66. */
-       for (k = 0 ; k < BUFFER_LEN ; k++)
-               data [k] = (rand () % 2000) / 3000.0 ;
-
-       /* Insert some larger peaks a know locations. */
-       data [4 * (frames / 8) + 0] = (frames / 8) * 0.01 ;     /* First channel */
-       data [4 * (frames / 6) + 1] = (frames / 6) * 0.01 ;     /* Second channel */
-       data [4 * (frames / 4) + 2] = (frames / 4) * 0.01 ;     /* Third channel */
-       data [4 * (frames / 2) + 3] = (frames / 2) * 0.01 ;     /* Fourth channel */
-
-       /* Write a file with PEAK chunks. */
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, 0, __LINE__) ;
-
-       /* Try to confuse the header writer by adding a removing the PEAK chunk. */
-       sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_TRUE) ;
-       sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ;
-       sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_TRUE) ;
-
-       /*      Write the data in four passed. The data is designed so that peaks will
-       **      be written in the different calls to sf_write_double ().
-       */
-       for (count = 0 ; count < 4 ; count ++)
-               test_write_double_or_die (file, 0, data + count * BUFFER_LEN / 4, BUFFER_LEN / 4, BUFFER_LEN / 4) ;
-
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, 0, __LINE__) ;
-
-       if (sfinfo.format != filetype)
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != frames)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file. (%d => %ld)\n", __LINE__, frames, (long) sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 4)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       /* Check these two commands. */
-       if (sf_command (file, SFC_GET_SIGNAL_MAX, data, sizeof (double)) == SF_FALSE)
-       {       printf ("\n\nLine %d: Command should have returned SF_TRUE.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (fabs (data [0] - (frames / 2) * 0.01) > 0.01)
-       {       printf ("\n\nLine %d: Bad peak value (%f should be %f) for command SFC_GET_SIGNAL_MAX.\n", __LINE__, data [0], (frames / 2) * 0.01) ;
-               exit (1) ;
-               } ;
-
-       if (sf_command (file, SFC_GET_MAX_ALL_CHANNELS, data, sizeof (double) * sfinfo.channels) == SF_FALSE)
-       {       printf ("\n\nLine %d: Command should have returned SF_TRUE.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (fabs (data [3] - (frames / 2) * 0.01) > 0.01)
-       {       printf ("\n\nLine %d: Bad peak value (%f should be %f) for command SFC_GET_MAX_ALL_CHANNELS.\n", __LINE__, data [0], (frames / 2) * 0.01) ;
-               exit (1) ;
-               } ;
-
-       /* Get the log buffer data. */
-       log_buffer [0] = 0 ;
-       sf_command      (file, SFC_GET_LOG_INFO, log_buffer, LOG_BUFFER_SIZE) ;
-
-       if (strlen (log_buffer) == 0)
-       {       printf ("\n\nLine %d: Empty log buffer,\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_logged_peaks (log_buffer) ;
-
-       sf_close (file) ;
-
-       /* Write a file ***without*** PEAK chunks. */
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, 0, __LINE__) ;
-
-       /* Try to confuse the header writer by adding a removing the PEAK chunk. */
-       sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ;
-       sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_TRUE) ;
-       sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ;
-
-       /*      Write the data in four passed. The data is designed so that peaks will
-       **      be written in the different calls to sf_write_double ().
-       */
-       for (count = 0 ; count < 4 ; count ++)
-               test_write_double_or_die (file, 0, data + count * BUFFER_LEN / 4, BUFFER_LEN / 4, BUFFER_LEN / 4) ;
-
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, 0, __LINE__) ;
-
-       /* Check these two commands. */
-       if (sf_command (file, SFC_GET_SIGNAL_MAX, data, sizeof (double)))
-       {       printf ("\n\nLine %d: Command should have returned SF_FALSE.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (sf_command (file, SFC_GET_MAX_ALL_CHANNELS, data, sizeof (double) * sfinfo.channels))
-       {       printf ("\n\nLine %d: Command should have returned SF_FALSE.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       /* Get the log buffer data. */
-       log_buffer [0] = 0 ;
-       sf_command      (file, SFC_GET_LOG_INFO, log_buffer, LOG_BUFFER_SIZE) ;
-
-       if (strlen (log_buffer) == 0)
-       {       printf ("\n\nLine %d: Empty log buffer,\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (strstr (log_buffer, "PEAK :") != NULL)
-       {       printf ("\n\nLine %d: Should not have a PEAK chunk in this file.\n\n", __LINE__) ;
-               puts (log_buffer) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-       printf ("ok\n") ;
-} /* test_float_peak */
-
-static void
-check_logged_peaks (char *buffer)
-{      char    *cptr ;
-       int             k, chan, channel_count, position ;
-       float   value ;
-
-       if (strstr (buffer, "should") || strstr (buffer, "*"))
-       {       printf ("\n\nLine %d: Something wrong in buffer. Dumping.\n", __LINE__) ;
-               puts (buffer) ;
-               exit (1) ;
-               } ;
-
-       channel_count = 0 ;
-       cptr = strstr (buffer, "Channels") ;
-       if (cptr && sscanf (cptr, "Channels      : %d", &k) == 1)
-               channel_count = k ;
-       else if (cptr && sscanf (cptr, "Channels / frame : %d", &k) == 1)
-               channel_count = k ;
-       else
-       {       printf ("\n\nLine %d: Couldn't find channel count.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (channel_count != 4)
-       {       printf ("\n\nLine %d: Wrong channel count (4 ->%d).\n", __LINE__, channel_count) ;
-               exit (1) ;
-               } ;
-
-       if (! (cptr = strstr (buffer, "Ch   Position       Value")))
-       {       printf ("\n\nLine %d: Can't find PEAK data.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       for (k = 0 ; k < channel_count ; k++)
-       {       if (! (cptr = strchr (cptr, '\n')))
-               {       printf ("\n\nLine %d: Got lost.\n", __LINE__) ;
-                       exit (1) ;
-                       } ;
-               if (sscanf (cptr, "%d %d %f", &chan, &position, &value) != 3)
-               {       printf ("\n\nLine %d: sscanf failed.\n", __LINE__) ;
-                       exit (1) ;
-                       } ;
-               if (position == 0)
-               {       printf ("\n\nLine %d: peak position for channel %d should not be at offset 0.\n", __LINE__, chan) ;
-                       printf ("%s", buffer) ;
-                       exit (1) ;
-                       } ;
-               if (chan != k || fabs ((position) * 0.01 - value) > 1e-6)
-               {       printf ("\n\nLine %d: Error : peak value incorrect!\n", __LINE__) ;
-                       printf ("%s", buffer) ;
-                       printf ("\n\nLine %d: %d %f %f\n", __LINE__, chan, position * 0.01, value) ;
-                       exit (1) ;
-                       } ;
-               cptr ++ ; /* Move past current newline. */
-               } ;
-
-} /* check_logged_peaks */
-
-static void
-read_write_peak_test (const char *filename, int filetype)
-{      SNDFILE *file ;
-       SF_INFO sfinfo ;
-
-       double  small_data [10], max_peak = 0.0 ;
-       unsigned k ;
-
-       print_test_name (__func__, filename) ;
-
-       for (k = 0 ; k < ARRAY_LEN (small_data) ; k ++)
-               small_data [k] = 0.1 ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.channels         = 2 ;
-       sfinfo.format           = filetype ;
-       sfinfo.frames           = 0 ;
-
-       /* Open the file, add peak chunk and write samples with value 0.1. */
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-
-       sf_command (file, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_TRUE) ;
-
-       test_write_double_or_die (file, 0, small_data, ARRAY_LEN (small_data), __LINE__) ;
-
-       sf_close (file) ;
-
-       /* Open the fiel RDWR, write sample valied 1.25. */
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_FALSE, __LINE__) ;
-
-       for (k = 0 ; k < ARRAY_LEN (small_data) ; k ++)
-               small_data [k] = 1.0 ;
-
-       test_write_double_or_die (file, 0, small_data, ARRAY_LEN (small_data), __LINE__) ;
-
-       sf_command (file, SFC_GET_SIGNAL_MAX, &max_peak, sizeof (max_peak)) ;
-
-       sf_close (file) ;
-
-       exit_if_true (max_peak < 0.1, "\n\nLine %d : max peak (%5.3f) should not be 0.1.\n\n", __LINE__, max_peak) ;
-
-       /* Open the file and test the values written to the PEAK chunk. */
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-       exit_if_true (sfinfo.channels * sfinfo.frames != 2 * ARRAY_LEN (small_data),
-                       "Line %d : frame count is %" PRId64 ", should be %zd\n", __LINE__, sfinfo.frames, 2 * ARRAY_LEN (small_data)) ;
-
-       sf_command (file, SFC_GET_SIGNAL_MAX, &max_peak, sizeof (double)) ;
-
-       sf_close (file) ;
-
-       exit_if_true (max_peak < 1.0, "\n\nLine %d : max peak (%5.3f) should be 1.0.\n\n", __LINE__, max_peak) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* read_write_peak_test */
-
diff --git a/libs/libsndfile/tests/pedantic-header-test.sh.in b/libs/libsndfile/tests/pedantic-header-test.sh.in
deleted file mode 100644 (file)
index 8b19628..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/bin/bash
-
-# Copyright (C) 2010-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-#       notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above copyright
-#       notice, this list of conditions and the following disclaimer in
-#       the documentation and/or other materials provided with the
-#       distribution.
-#     * Neither the author nor the names of any contributors may be used
-#       to endorse or promote products derived from this software without
-#       specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-if test ! -f @top_srcdir@/tests/sfversion.c ; then
-       exit 0
-       fi
-
-echo -n "    Pedantic header test           : "
-
-# Only do this if the compiler is GCC.
-if test -n "@GCC_MAJOR_VERSION@" ; then
-
-       CC=`echo "@CC@" | sed "s/.*shave cc //"`
-       # Compile with -Werror and -pedantic.
-       $CC -std=c99 -Werror -pedantic -I@top_builddir@/src -c @top_srcdir@/tests/sfversion.c -o /dev/null
-
-       # Check compiler return status.
-       if test $? -ne 0 ; then
-               echo
-               exit 1
-               fi
-
-       echo "ok"
-else
-       echo "n/a"
-       fi
-
-exit 0
diff --git a/libs/libsndfile/tests/pipe_test.c b/libs/libsndfile/tests/pipe_test.c
deleted file mode 100644 (file)
index 10fa572..0000000
+++ /dev/null
@@ -1,525 +0,0 @@
-/*
-** Copyright (C) 2001-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*==========================================================================
-** This is a test program which tests reading from and writing to pipes.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if (OS_IS_WIN32 || HAVE_PIPE == 0 || HAVE_WAITPID == 0)
-
-int
-main (void)
-{
-       puts ("    pipe_test  : this test doesn't work on this OS.") ;
-       return 0 ;
-} /* main */
-
-#else
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-typedef struct
-{      int                     format ;
-       const char      *ext ;
-} FILETYPE ;
-
-static int             file_exists (const char *filename) ;
-static void            useek_pipe_rw_test (int filetype, const char *ext) ;
-static void            pipe_read_test (int filetype, const char *ext) ;
-static void            pipe_write_test (const char *ext) ;
-static void            pipe_test_others (FILETYPE*, FILETYPE*) ;
-
-static FILETYPE read_write_types [] =
-{      {       SF_FORMAT_RAW   , "raw"         },
-       {       SF_FORMAT_AU    , "au"          },
-       /* Lite remove start */
-       {       SF_FORMAT_PAF   , "paf"         },
-       {       SF_FORMAT_IRCAM , "ircam"       },
-       {       SF_FORMAT_PVF   , "pvf" },
-       /* Lite remove end */
-       {       0                               , NULL          }
-} ;
-
-static FILETYPE read_only_types [] =
-{      {       SF_FORMAT_RAW   , "raw"         },
-       {       SF_FORMAT_AU    , "au"          },
-       {       SF_FORMAT_AIFF  , "aiff"        },
-       {       SF_FORMAT_WAV   , "wav"         },
-       {       SF_FORMAT_W64   , "w64"         },
-       /* Lite remove start */
-       {       SF_FORMAT_PAF   , "paf"         },
-       {       SF_FORMAT_NIST  , "nist"        },
-       {       SF_FORMAT_IRCAM , "ircam"       },
-       {       SF_FORMAT_MAT4  , "mat4"        },
-       {       SF_FORMAT_MAT5  , "mat5"        },
-       {       SF_FORMAT_SVX   , "svx"         },
-       {       SF_FORMAT_PVF   , "pvf"         },
-       /* Lite remove end */
-       {       0                               , NULL          }
-} ;
-
-int
-main (void)
-{      int k ;
-
-       if (file_exists ("libsndfile.spec.in"))
-               exit_if_true (chdir ("tests") != 0, "\n    Error : chdir ('tests') failed.\n") ;
-
-       for (k = 0 ; read_only_types [k].format ; k++)
-               pipe_read_test (read_only_types [k].format, read_only_types [k].ext) ;
-
-       for (k = 0 ; read_write_types [k].format ; k++)
-               pipe_write_test (read_write_types [k].ext) ;
-
-       for (k = 0 ; read_write_types [k].format ; k++)
-               useek_pipe_rw_test (read_write_types [k].format, read_write_types [k].ext) ;
-
-       if (0)
-               pipe_test_others (read_write_types, read_only_types) ;
-
-       return 0 ;
-} /* main */
-
-/*==============================================================================
-*/
-
-static void
-pipe_read_test (int filetype, const char *ext)
-{      static short data [PIPE_TEST_LEN] ;
-       static char buffer [256] ;
-       static char filename [256] ;
-
-       SNDFILE *outfile ;
-       SF_INFO sfinfo ;
-       int k, retval ;
-
-       snprintf (filename, sizeof (filename), "pipe_in.%s", ext) ;
-       print_test_name ("pipe_read_test", filename) ;
-
-       sfinfo.format = filetype | SF_FORMAT_PCM_16 ;
-       sfinfo.channels = 1 ;
-       sfinfo.samplerate = 44100 ;
-
-       for (k = 0 ; k < PIPE_TEST_LEN ; k++)
-               data [k] = PIPE_INDEX (k) ;
-
-       outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_writef_short_or_die (outfile, 0, data, PIPE_TEST_LEN, __LINE__) ;
-       sf_close (outfile) ;
-
-       snprintf (buffer, sizeof (buffer), "cat %s | ./stdin_test %s ", filename, ext) ;
-       if ((retval = system (buffer)) != 0)
-       {       retval = WEXITSTATUS (retval) ;
-               printf ("\n\n    Line %d : pipe test returned error for file type \"%s\".\n\n", __LINE__, ext) ;
-               exit (retval) ;
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-
-       return ;
-} /* pipe_read_test */
-
-static void
-pipe_write_test (const char *ext)
-{      static char buffer [256] ;
-
-       int retval ;
-
-       print_test_name ("pipe_write_test", ext) ;
-
-       snprintf (buffer, sizeof (buffer), "./stdout_test %s | ./stdin_test %s ", ext, ext) ;
-       if ((retval = system (buffer)))
-       {       retval = WEXITSTATUS (retval) ;
-               printf ("\n\n     Line %d : pipe test returned error file type \"%s\".\n\n", __LINE__, ext) ;
-               exit (retval) ;
-               } ;
-
-       puts ("ok") ;
-
-       return ;
-} /* pipe_write_test */
-
-/*==============================================================================
-*/
-
-
-static void
-useek_pipe_rw_short (const char * ext, SF_INFO * psfinfo_write, SF_INFO * psfinfo_read)
-{      static short buffer [PIPE_TEST_LEN] ;
-       static short data [PIPE_TEST_LEN] ;
-       SNDFILE *outfile ;
-       SNDFILE *infile_piped ;
-
-       int k, status = 0 ;
-       int pipefd [2] ;
-       pid_t pida ;
-
-       for (k = 0 ; k < PIPE_TEST_LEN ; k++)
-               data [k] = PIPE_INDEX (k) ;
-
-       /*
-       ** Create the pipe.
-       */
-       exit_if_true (pipe (pipefd) != 0, "\n\n%s %d : pipe failed : %s\n", __func__, __LINE__, strerror (errno)) ;
-
-       /*
-       ** Attach the write end of the pipe to be written to.
-       */
-       if ((outfile = sf_open_fd (pipefd [1], SFM_WRITE, psfinfo_write, SF_TRUE)) == NULL)
-       {       printf ("\n\n%s %d : unable to create unseekable pipe for write type \"%s\".\n", __func__, __LINE__, ext) ;
-               printf ("\t%s\n\n", sf_strerror (outfile)) ;
-               exit (1) ;
-               } ;
-
-       if (sf_error (outfile) != SF_ERR_NO_ERROR)
-       {       printf ("\n\n%s %d : unable to open unseekable pipe for write type \"%s\".\n\n", __func__, __LINE__, ext) ;
-               exit (1) ;
-               } ;
-
-       /*
-       ** Attach the read end of the pipe to be read from.
-       */
-       if ((infile_piped = sf_open_fd (pipefd [0], SFM_READ, psfinfo_read, SF_TRUE)) == NULL)
-       {       printf ("\n\n%s %d : unable to create unseekable pipe for read type. \"%s\".\n\n", __func__, __LINE__, ext) ;
-               exit (1) ;
-               } ;
-
-       if (sf_error (infile_piped) != SF_ERR_NO_ERROR)
-       {       printf ("\n\n%s %d : unable to open unseekable pipe for read type \"%s\".\n\n", __func__, __LINE__, ext) ;
-               exit (1) ;
-               } ;
-
-       /* Fork a child process that will write directly into the pipe. */
-       if ((pida = fork ()) == 0) /* child process */
-       {       test_writef_short_or_die (outfile, 0, data, PIPE_TEST_LEN, __LINE__) ;
-               exit (0) ;
-               } ;
-
-       /* In the parent process, read from the pipe and compare what is read
-       ** to what is written, if they match everything went as planned.
-       */
-       test_readf_short_or_die (infile_piped, 0, buffer, PIPE_TEST_LEN, __LINE__) ;
-       if (memcmp (buffer, data, sizeof (buffer)) != 0)
-       {       printf ("\n\n%s %d : unseekable pipe test failed for file type \"%s\".\n\n", __func__, __LINE__, ext) ;
-               exit (1) ;
-               } ;
-
-       /* Wait for the child process to return. */
-       waitpid (pida, &status, 0) ;
-       status = WEXITSTATUS (status) ;
-       sf_close (outfile) ;
-       sf_close (infile_piped) ;
-
-       if (status != 0)
-       {       printf ("\n\n%s %d : status of child process is %d for file type %s.\n\n", __func__, __LINE__, status, ext) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* useek_pipe_rw_short */
-
-
-static void
-useek_pipe_rw_float (const char * ext, SF_INFO * psfinfo_write, SF_INFO * psfinfo_read)
-{      static float buffer [PIPE_TEST_LEN] ;
-       static float data [PIPE_TEST_LEN] ;
-       SNDFILE *outfile ;
-       SNDFILE *infile_piped ;
-
-       int k, status = 0 ;
-       int pipefd [2] ;
-       pid_t pida ;
-
-       for (k = 0 ; k < PIPE_TEST_LEN ; k++)
-               data [k] = PIPE_INDEX (k) ;
-
-       /*
-       ** Create the pipe.
-       */
-       exit_if_true (pipe (pipefd) != 0, "\n\n%s %d : pipe failed : %s\n", __func__, __LINE__, strerror (errno)) ;
-
-       /*
-       ** Attach the write end of the pipe to be written to.
-       */
-       if ((outfile = sf_open_fd (pipefd [1], SFM_WRITE, psfinfo_write, SF_TRUE)) == NULL)
-       {       printf ("\n\n%s %d : unable to create unseekable pipe for write type \"%s\".\n", __func__, __LINE__, ext) ;
-               printf ("\t%s\n\n", sf_strerror (outfile)) ;
-               exit (1) ;
-               } ;
-
-       if (sf_error (outfile) != SF_ERR_NO_ERROR)
-       {       printf ("\n\n%s %d : unable to open unseekable pipe for write type \"%s\".\n\n", __func__, __LINE__, ext) ;
-               exit (1) ;
-               } ;
-
-       /*
-       ** Attach the read end of the pipe to be read from.
-       */
-       if ((infile_piped = sf_open_fd (pipefd [0], SFM_READ, psfinfo_read, SF_TRUE)) == NULL)
-       {       printf ("\n\n%s %d : unable to create unseekable pipe for read type. \"%s\".\n\n", __func__, __LINE__, ext) ;
-               exit (1) ;
-               } ;
-
-       if (sf_error (infile_piped) != SF_ERR_NO_ERROR)
-       {       printf ("\n\n%s %d : unable to open unseekable pipe for read type \"%s\".\n\n", __func__, __LINE__, ext) ;
-               exit (1) ;
-               } ;
-
-       /* Fork a child process that will write directly into the pipe. */
-       if ((pida = fork ()) == 0) /* child process */
-       {       test_writef_float_or_die (outfile, 0, data, PIPE_TEST_LEN, __LINE__) ;
-               exit (0) ;
-               } ;
-
-       /* In the parent process, read from the pipe and compare what is read
-       ** to what is written, if they match everything went as planned.
-       */
-       test_readf_float_or_die (infile_piped, 0, buffer, PIPE_TEST_LEN, __LINE__) ;
-       if (memcmp (buffer, data, sizeof (buffer)) != 0)
-       {       printf ("\n\n%s %d : unseekable pipe test failed for file type \"%s\".\n\n", __func__, __LINE__, ext) ;
-               exit (1) ;
-               } ;
-
-       /* Wait for the child process to return. */
-       waitpid (pida, &status, 0) ;
-       status = WEXITSTATUS (status) ;
-       sf_close (outfile) ;
-       sf_close (infile_piped) ;
-
-       if (status != 0)
-       {       printf ("\n\n%s %d : status of child process is %d for file type %s.\n\n", __func__, __LINE__, status, ext) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* useek_pipe_rw_float */
-
-
-static void
-useek_pipe_rw_double (const char * ext, SF_INFO * psfinfo_write, SF_INFO * psfinfo_read)
-{      static double buffer [PIPE_TEST_LEN] ;
-       static double data [PIPE_TEST_LEN] ;
-       SNDFILE *outfile ;
-       SNDFILE *infile_piped ;
-
-       int k, status = 0 ;
-       int pipefd [2] ;
-       pid_t pida ;
-
-       for (k = 0 ; k < PIPE_TEST_LEN ; k++)
-               data [k] = PIPE_INDEX (k) ;
-
-       /*
-       ** Create the pipe.
-       */
-       exit_if_true (pipe (pipefd) != 0, "\n\n%s %d : pipe failed : %s\n", __func__, __LINE__, strerror (errno)) ;
-
-       /*
-       ** Attach the write end of the pipe to be written to.
-       */
-       if ((outfile = sf_open_fd (pipefd [1], SFM_WRITE, psfinfo_write, SF_TRUE)) == NULL)
-       {       printf ("\n\n%s %d : unable to create unseekable pipe for write type \"%s\".\n", __func__, __LINE__, ext) ;
-               printf ("\t%s\n\n", sf_strerror (outfile)) ;
-               exit (1) ;
-               } ;
-
-       if (sf_error (outfile) != SF_ERR_NO_ERROR)
-       {       printf ("\n\n%s %d : unable to open unseekable pipe for write type \"%s\".\n\n", __func__, __LINE__, ext) ;
-               exit (1) ;
-               } ;
-
-       /*
-       ** Attach the read end of the pipe to be read from.
-       */
-       if ((infile_piped = sf_open_fd (pipefd [0], SFM_READ, psfinfo_read, SF_TRUE)) == NULL)
-       {       printf ("\n\n%s %d : unable to create unseekable pipe for read type. \"%s\".\n\n", __func__, __LINE__, ext) ;
-               exit (1) ;
-               } ;
-
-       if (sf_error (infile_piped) != SF_ERR_NO_ERROR)
-       {       printf ("\n\n%s %d : unable to open unseekable pipe for read type \"%s\".\n\n", __func__, __LINE__, ext) ;
-               exit (1) ;
-               } ;
-
-       /* Fork a child process that will write directly into the pipe. */
-       if ((pida = fork ()) == 0) /* child process */
-       {       test_writef_double_or_die (outfile, 0, data, PIPE_TEST_LEN, __LINE__) ;
-               exit (0) ;
-               } ;
-
-       /* In the parent process, read from the pipe and compare what is read
-       ** to what is written, if they match everything went as planned.
-       */
-       test_readf_double_or_die (infile_piped, 0, buffer, PIPE_TEST_LEN, __LINE__) ;
-       if (memcmp (buffer, data, sizeof (buffer)) != 0)
-       {       printf ("\n\n%s %d : unseekable pipe test failed for file type \"%s\".\n\n", __func__, __LINE__, ext) ;
-               exit (1) ;
-               } ;
-
-       /* Wait for the child process to return. */
-       waitpid (pida, &status, 0) ;
-       status = WEXITSTATUS (status) ;
-       sf_close (outfile) ;
-       sf_close (infile_piped) ;
-
-       if (status != 0)
-       {       printf ("\n\n%s %d : status of child process is %d for file type %s.\n\n", __func__, __LINE__, status, ext) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* useek_pipe_rw_double */
-
-
-
-
-static void
-useek_pipe_rw_test (int filetype, const char *ext)
-{      SF_INFO sfinfo_write ;
-       SF_INFO sfinfo_read ;
-
-       print_test_name ("useek_pipe_rw_test", ext) ;
-
-       /*
-       ** Setup the INFO structures for the filetype we will be
-       ** working with.
-       */
-       sfinfo_write.format = filetype | SF_FORMAT_PCM_16 ;
-       sfinfo_write.channels = 1 ;
-       sfinfo_write.samplerate = 44100 ;
-
-
-       sfinfo_read.format = 0 ;
-       if (filetype == SF_FORMAT_RAW)
-       {       sfinfo_read.format = filetype | SF_FORMAT_PCM_16 ;
-               sfinfo_read.channels = 1 ;
-               sfinfo_read.samplerate = 44100 ;
-               } ;
-
-       useek_pipe_rw_short (ext, &sfinfo_write, &sfinfo_read) ;
-
-       sfinfo_read.format = sfinfo_write.format = filetype | SF_FORMAT_FLOAT ;
-       if (sf_format_check (&sfinfo_read) != 0)
-               useek_pipe_rw_float (ext, &sfinfo_write, &sfinfo_read) ;
-
-       sfinfo_read.format = sfinfo_write.format = filetype | SF_FORMAT_DOUBLE ;
-       if (sf_format_check (&sfinfo_read) != 0)
-               useek_pipe_rw_double (ext, &sfinfo_write, &sfinfo_read) ;
-
-       puts ("ok") ;
-       return ;
-} /* useek_pipe_rw_test */
-
-
-
-static void
-pipe_test_others (FILETYPE* list1, FILETYPE* list2)
-{      SF_FORMAT_INFO  info ;
-       int             k, m, major_count, in_list ;
-
-       print_test_name ("pipe_test_others", "") ;
-
-       sf_command (NULL, SFC_GET_FORMAT_MAJOR_COUNT, &major_count, sizeof (int)) ;
-
-       for (k = 0 ; k < major_count ; k++)
-       {       info.format = k ;
-
-               sf_command (NULL, SFC_GET_FORMAT_MAJOR, &info, sizeof (info)) ;
-
-               in_list = SF_FALSE ;
-               for (m = 0 ; list1 [m].format ; m++)
-                       if (info.format == list1 [m].format)
-                               in_list = SF_TRUE ;
-
-               for (m = 0 ; list2 [m].format ; m++)
-                       if (info.format == list2 [m].format)
-                               in_list = SF_TRUE ;
-
-               if (in_list)
-                       continue ;
-
-               printf ("%s  %x\n", info.name, info.format) ;
-
-               if (1)
-               {       static short data [PIPE_TEST_LEN] ;
-                       static char buffer [256] ;
-                       static const char *filename = "pipe_in.dat" ;
-
-                       SNDFILE *outfile ;
-                       SF_INFO sfinfo ;
-                       int retval ;
-
-                       sfinfo.format = info.format | SF_FORMAT_PCM_16 ;
-                       sfinfo.channels = 1 ;
-                       sfinfo.samplerate = 44100 ;
-
-                       outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-                       test_writef_short_or_die (outfile, 0, data, PIPE_TEST_LEN, __LINE__) ;
-                       sf_close (outfile) ;
-
-                       snprintf (buffer, sizeof (buffer), "cat %s | ./stdin_test %s %d ", filename, info.extension, PIPE_TEST_LEN) ;
-                       if ((retval = system (buffer)) == 0)
-                       {       retval = WEXITSTATUS (retval) ;
-                               printf ("\n\n     Line %d : pipe test should have returned error file type \"%s\" but didn't.\n\n", __LINE__, info.name) ;
-                               exit (1) ;
-                               } ;
-
-                       unlink (filename) ;
-                       } ;
-               } ;
-
-
-       puts ("ok") ;
-
-       return ;
-} /* pipe_test_others */
-
-
-/*==============================================================================
-*/
-
-static int
-file_exists (const char *filename)
-{      struct stat buf ;
-
-       if (stat (filename, &buf))
-               return 0 ;
-
-       return 1 ;
-} /* file_exists */
-
-#endif
-
diff --git a/libs/libsndfile/tests/pipe_test.def b/libs/libsndfile/tests/pipe_test.def
deleted file mode 100644 (file)
index 6469cca..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-autogen definitions pipe_test.tpl;
-
-data_type = { 
-       type_name       = short ;
-       };
-
-data_type = { 
-       type_name       = float ;
-       };
-
-data_type = { 
-       type_name       = double ;
-       };
-
diff --git a/libs/libsndfile/tests/pipe_test.tpl b/libs/libsndfile/tests/pipe_test.tpl
deleted file mode 100644 (file)
index 1bc1f43..0000000
+++ /dev/null
@@ -1,374 +0,0 @@
-[+ AutoGen5 template c +]
-/*
-** Copyright (C) 2001-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*==========================================================================
-** This is a test program which tests reading from and writing to pipes.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if (OS_IS_WIN32 || defined __OS2__ || HAVE_PIPE == 0 || HAVE_WAITPID == 0)
-
-int
-main (void)
-{
-       puts ("    pipe_test  : this test doesn't work on this OS.") ;
-       return 0 ;
-} /* main */
-
-#else
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-typedef struct
-{      int                     format ;
-       const char      *ext ;
-} FILETYPE ;
-
-static int             file_exists (const char *filename) ;
-static void            useek_pipe_rw_test (int filetype, const char *ext) ;
-static void            pipe_read_test (int filetype, const char *ext) ;
-static void            pipe_write_test (const char *ext) ;
-static void            pipe_test_others (FILETYPE*, FILETYPE*) ;
-
-static FILETYPE read_write_types [] =
-{      {       SF_FORMAT_RAW   , "raw"         },
-       {       SF_FORMAT_AU    , "au"          },
-       /* Lite remove start */
-       {       SF_FORMAT_PAF   , "paf"         },
-       {       SF_FORMAT_IRCAM , "ircam"       },
-       {       SF_FORMAT_PVF   , "pvf" },
-       /* Lite remove end */
-       {       0                               , NULL          }
-} ;
-
-static FILETYPE read_only_types [] =
-{      {       SF_FORMAT_RAW   , "raw"         },
-       {       SF_FORMAT_AU    , "au"          },
-       {       SF_FORMAT_AIFF  , "aiff"        },
-       {       SF_FORMAT_WAV   , "wav"         },
-       {       SF_FORMAT_W64   , "w64"         },
-       /* Lite remove start */
-       {       SF_FORMAT_PAF   , "paf"         },
-       {       SF_FORMAT_NIST  , "nist"        },
-       {       SF_FORMAT_IRCAM , "ircam"       },
-       {       SF_FORMAT_MAT4  , "mat4"        },
-       {       SF_FORMAT_MAT5  , "mat5"        },
-       {       SF_FORMAT_SVX   , "svx"         },
-       {       SF_FORMAT_PVF   , "pvf"         },
-       /* Lite remove end */
-       {       0                               , NULL          }
-} ;
-
-int
-main (void)
-{      int k ;
-
-       if (file_exists ("libsndfile.spec.in"))
-               exit_if_true (chdir ("tests") != 0, "\n    Error : chdir ('tests') failed.\n") ;
-
-       for (k = 0 ; read_only_types [k].format ; k++)
-               pipe_read_test (read_only_types [k].format, read_only_types [k].ext) ;
-
-       for (k = 0 ; read_write_types [k].format ; k++)
-               pipe_write_test (read_write_types [k].ext) ;
-
-       for (k = 0 ; read_write_types [k].format ; k++)
-               useek_pipe_rw_test (read_write_types [k].format, read_write_types [k].ext) ;
-
-       if (0)
-               pipe_test_others (read_write_types, read_only_types) ;
-
-       return 0 ;
-} /* main */
-
-/*==============================================================================
-*/
-
-static void
-pipe_read_test (int filetype, const char *ext)
-{      static short data [PIPE_TEST_LEN] ;
-       static char buffer [256] ;
-       static char filename [256] ;
-
-       SNDFILE *outfile ;
-       SF_INFO sfinfo ;
-       int k, retval ;
-
-       snprintf (filename, sizeof (filename), "pipe_in.%s", ext) ;
-       print_test_name ("pipe_read_test", filename) ;
-
-       sfinfo.format = filetype | SF_FORMAT_PCM_16 ;
-       sfinfo.channels = 1 ;
-       sfinfo.samplerate = 44100 ;
-
-       for (k = 0 ; k < PIPE_TEST_LEN ; k++)
-               data [k] = PIPE_INDEX (k) ;
-
-       outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_writef_short_or_die (outfile, 0, data, PIPE_TEST_LEN, __LINE__) ;
-       sf_close (outfile) ;
-
-       snprintf (buffer, sizeof (buffer), "cat %s | ./stdin_test %s ", filename, ext) ;
-       if ((retval = system (buffer)) != 0)
-       {       retval = WEXITSTATUS (retval) ;
-               printf ("\n\n    Line %d : pipe test returned error for file type \"%s\".\n\n", __LINE__, ext) ;
-               exit (retval) ;
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-
-       return ;
-} /* pipe_read_test */
-
-static void
-pipe_write_test (const char *ext)
-{      static char buffer [256] ;
-
-       int retval ;
-
-       print_test_name ("pipe_write_test", ext) ;
-
-       snprintf (buffer, sizeof (buffer), "./stdout_test %s | ./stdin_test %s ", ext, ext) ;
-       if ((retval = system (buffer)))
-       {       retval = WEXITSTATUS (retval) ;
-               printf ("\n\n     Line %d : pipe test returned error file type \"%s\".\n\n", __LINE__, ext) ;
-               exit (retval) ;
-               } ;
-
-       puts ("ok") ;
-
-       return ;
-} /* pipe_write_test */
-
-/*==============================================================================
-*/
-
-[+ FOR data_type +]
-static void
-useek_pipe_rw_[+ (get "type_name") +] (const char * ext, SF_INFO * psfinfo_write, SF_INFO * psfinfo_read)
-{      static [+ (get "type_name") +] buffer [PIPE_TEST_LEN] ;
-       static [+ (get "type_name") +] data [PIPE_TEST_LEN] ;
-       SNDFILE *outfile ;
-       SNDFILE *infile_piped ;
-
-       int k, status = 0 ;
-       int pipefd [2] ;
-       pid_t pida ;
-
-       for (k = 0 ; k < PIPE_TEST_LEN ; k++)
-               data [k] = PIPE_INDEX (k) ;
-
-       /*
-       ** Create the pipe.
-       */
-       exit_if_true (pipe (pipefd) != 0, "\n\n%s %d : pipe failed : %s\n", __func__, __LINE__, strerror (errno)) ;
-
-       /*
-       ** Attach the write end of the pipe to be written to.
-       */
-       if ((outfile = sf_open_fd (pipefd [1], SFM_WRITE, psfinfo_write, SF_TRUE)) == NULL)
-       {       printf ("\n\n%s %d : unable to create unseekable pipe for write type \"%s\".\n", __func__, __LINE__, ext) ;
-               printf ("\t%s\n\n", sf_strerror (outfile)) ;
-               exit (1) ;
-               } ;
-
-       if (sf_error (outfile) != SF_ERR_NO_ERROR)
-       {       printf ("\n\n%s %d : unable to open unseekable pipe for write type \"%s\".\n\n", __func__, __LINE__, ext) ;
-               exit (1) ;
-               } ;
-
-       /*
-       ** Attach the read end of the pipe to be read from.
-       */
-       if ((infile_piped = sf_open_fd (pipefd [0], SFM_READ, psfinfo_read, SF_TRUE)) == NULL)
-       {       printf ("\n\n%s %d : unable to create unseekable pipe for read type. \"%s\".\n\n", __func__, __LINE__, ext) ;
-               exit (1) ;
-               } ;
-
-       if (sf_error (infile_piped) != SF_ERR_NO_ERROR)
-       {       printf ("\n\n%s %d : unable to open unseekable pipe for read type \"%s\".\n\n", __func__, __LINE__, ext) ;
-               exit (1) ;
-               } ;
-
-       /* Fork a child process that will write directly into the pipe. */
-       if ((pida = fork ()) == 0) /* child process */
-       {       test_writef_[+ (get "type_name") +]_or_die (outfile, 0, data, PIPE_TEST_LEN, __LINE__) ;
-               exit (0) ;
-               } ;
-
-       /* In the parent process, read from the pipe and compare what is read
-       ** to what is written, if they match everything went as planned.
-       */
-       test_readf_[+ (get "type_name") +]_or_die (infile_piped, 0, buffer, PIPE_TEST_LEN, __LINE__) ;
-       if (memcmp (buffer, data, sizeof (buffer)) != 0)
-       {       printf ("\n\n%s %d : unseekable pipe test failed for file type \"%s\".\n\n", __func__, __LINE__, ext) ;
-               exit (1) ;
-               } ;
-
-       /* Wait for the child process to return. */
-       waitpid (pida, &status, 0) ;
-       status = WEXITSTATUS (status) ;
-       sf_close (outfile) ;
-       sf_close (infile_piped) ;
-
-       if (status != 0)
-       {       printf ("\n\n%s %d : status of child process is %d for file type %s.\n\n", __func__, __LINE__, status, ext) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* useek_pipe_rw_[+ (get "type_name") +] */
-
-[+ ENDFOR data_type +]
-
-
-static void
-useek_pipe_rw_test (int filetype, const char *ext)
-{      SF_INFO sfinfo_write ;
-       SF_INFO sfinfo_read ;
-
-       print_test_name ("useek_pipe_rw_test", ext) ;
-
-       /*
-       ** Setup the INFO structures for the filetype we will be
-       ** working with.
-       */
-       sfinfo_write.format = filetype | SF_FORMAT_PCM_16 ;
-       sfinfo_write.channels = 1 ;
-       sfinfo_write.samplerate = 44100 ;
-
-
-       sfinfo_read.format = 0 ;
-       if (filetype == SF_FORMAT_RAW)
-       {       sfinfo_read.format = filetype | SF_FORMAT_PCM_16 ;
-               sfinfo_read.channels = 1 ;
-               sfinfo_read.samplerate = 44100 ;
-               } ;
-
-       useek_pipe_rw_short (ext, &sfinfo_write, &sfinfo_read) ;
-
-       sfinfo_read.format = sfinfo_write.format = filetype | SF_FORMAT_FLOAT ;
-       if (sf_format_check (&sfinfo_read) != 0)
-               useek_pipe_rw_float (ext, &sfinfo_write, &sfinfo_read) ;
-
-       sfinfo_read.format = sfinfo_write.format = filetype | SF_FORMAT_DOUBLE ;
-       if (sf_format_check (&sfinfo_read) != 0)
-               useek_pipe_rw_double (ext, &sfinfo_write, &sfinfo_read) ;
-
-       puts ("ok") ;
-       return ;
-} /* useek_pipe_rw_test */
-
-
-
-static void
-pipe_test_others (FILETYPE* list1, FILETYPE* list2)
-{      SF_FORMAT_INFO  info ;
-       int             k, m, major_count, in_list ;
-
-       print_test_name ("pipe_test_others", "") ;
-
-       sf_command (NULL, SFC_GET_FORMAT_MAJOR_COUNT, &major_count, sizeof (int)) ;
-
-       for (k = 0 ; k < major_count ; k++)
-       {       info.format = k ;
-
-               sf_command (NULL, SFC_GET_FORMAT_MAJOR, &info, sizeof (info)) ;
-
-               in_list = SF_FALSE ;
-               for (m = 0 ; list1 [m].format ; m++)
-                       if (info.format == list1 [m].format)
-                               in_list = SF_TRUE ;
-
-               for (m = 0 ; list2 [m].format ; m++)
-                       if (info.format == list2 [m].format)
-                               in_list = SF_TRUE ;
-
-               if (in_list)
-                       continue ;
-
-               printf ("%s  %x\n", info.name, info.format) ;
-
-               if (1)
-               {       static short data [PIPE_TEST_LEN] ;
-                       static char buffer [256] ;
-                       static const char *filename = "pipe_in.dat" ;
-
-                       SNDFILE *outfile ;
-                       SF_INFO sfinfo ;
-                       int retval ;
-
-                       sfinfo.format = info.format | SF_FORMAT_PCM_16 ;
-                       sfinfo.channels = 1 ;
-                       sfinfo.samplerate = 44100 ;
-
-                       outfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-                       test_writef_short_or_die (outfile, 0, data, PIPE_TEST_LEN, __LINE__) ;
-                       sf_close (outfile) ;
-
-                       snprintf (buffer, sizeof (buffer), "cat %s | ./stdin_test %s %d ", filename, info.extension, PIPE_TEST_LEN) ;
-                       if ((retval = system (buffer)) == 0)
-                       {       retval = WEXITSTATUS (retval) ;
-                               printf ("\n\n     Line %d : pipe test should have returned error file type \"%s\" but didn't.\n\n", __LINE__, info.name) ;
-                               exit (1) ;
-                               } ;
-
-                       unlink (filename) ;
-                       } ;
-               } ;
-
-
-       puts ("ok") ;
-
-       return ;
-} /* pipe_test_others */
-
-
-/*==============================================================================
-*/
-
-static int
-file_exists (const char *filename)
-{      struct stat buf ;
-
-       if (stat (filename, &buf))
-               return 0 ;
-
-       return 1 ;
-} /* file_exists */
-
-#endif
-
diff --git a/libs/libsndfile/tests/raw_test.c b/libs/libsndfile/tests/raw_test.c
deleted file mode 100644 (file)
index 002f3ee..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define        BUFFER_LEN              (1 << 10)
-#define LOG_BUFFER_SIZE        1024
-
-static void    raw_offset_test (const char *filename, int typeminor) ;
-static void    bad_raw_test (void) ;
-
-/* Force the start of this buffer to be double aligned. Sparc-solaris will
-** choke if its not.
-*/
-static short   data [BUFFER_LEN] ;
-
-int
-main (void)
-{
-       raw_offset_test ("offset.raw", SF_FORMAT_PCM_16) ;
-       bad_raw_test () ;
-
-       return 0 ;
-} /* main */
-
-/*============================================================================================
-**     Here are the test functions.
-*/
-
-static void
-raw_offset_test (const char *filename, int typeminor)
-{      SNDFILE         *sndfile ;
-       SF_INFO         sfinfo ;
-       sf_count_t      start ;
-       int                     k ;
-
-       print_test_name ("raw_offset_test", filename) ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.format           = SF_FORMAT_RAW | typeminor ;
-       sfinfo.channels         = 1 ;
-       sfinfo.frames           = 0 ;
-
-       sndfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-
-       start = 0 ;
-       sf_command (sndfile, SFC_FILE_TRUNCATE, &start, sizeof (start)) ;
-
-       for (k = 0 ; k < BUFFER_LEN ; k++)
-               data [k] = k ;
-       test_write_short_or_die (sndfile, 0, data, BUFFER_LEN, __LINE__) ;
-
-       sf_close (sndfile) ;
-
-       sndfile = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       check_log_buffer_or_die (sndfile, __LINE__) ;
-
-       if (abs (BUFFER_LEN - sfinfo.frames) > 1)
-       {       printf ("\n\nLine %d : Incorrect sample count (%" PRId64 " should be %d)\n", __LINE__, sfinfo.frames, BUFFER_LEN) ;
-               dump_log_buffer (sndfile) ;
-               exit (1) ;
-               } ;
-
-       memset (data, 0 , sizeof (data)) ;
-       test_read_short_or_die (sndfile, 0, data, BUFFER_LEN, __LINE__) ;
-       for (k = 0 ; k < BUFFER_LEN ; k++)
-               if (data [k] != k)
-                       printf ("Error : line %d\n", __LINE__) ;
-
-       /* Set dataoffset to 2 bytes from beginning of file. */
-       start = 2 ;
-       sf_command (sndfile, SFC_SET_RAW_START_OFFSET, &start, sizeof (start)) ;
-
-       /* Seek to new start */
-       test_seek_or_die (sndfile, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       memset (data, 0 , sizeof (data)) ;
-       test_read_short_or_die (sndfile, 0, data, BUFFER_LEN - 1, __LINE__) ;
-       for (k = 0 ; k < BUFFER_LEN - 1 ; k++)
-               if (data [k] != k + 1)
-               {       printf ("Error : line %d\n", __LINE__) ;
-                       exit (1) ;
-                       } ;
-
-       /* Set dataoffset to 4 bytes from beginning of file. */
-       start = 4 ;
-       sf_command (sndfile, SFC_SET_RAW_START_OFFSET, &start, sizeof (start)) ;
-
-       /* Seek to new start */
-       test_seek_or_die (sndfile, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       memset (data, 0 , sizeof (data)) ;
-       test_read_short_or_die (sndfile, 0, data, BUFFER_LEN - 2, __LINE__) ;
-       for (k = 0 ; k < BUFFER_LEN - 2 ; k++)
-               if (data [k] != k + 2)
-               {       printf ("Error : line %d\n", __LINE__) ;
-                       exit (1) ;
-                       } ;
-
-       /* Set dataoffset back to 0 bytes from beginning of file. */
-       start = 0 ;
-       sf_command (sndfile, SFC_SET_RAW_START_OFFSET, &start, sizeof (start)) ;
-
-       /* Seek to new start */
-       test_seek_or_die (sndfile, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       memset (data, 0 , sizeof (data)) ;
-       test_read_short_or_die (sndfile, 0, data, BUFFER_LEN, __LINE__) ;
-       for (k = 0 ; k < BUFFER_LEN ; k++)
-               if (data [k] != k)
-               {       printf ("Error : line %d\n", __LINE__) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (sndfile) ;
-       unlink (filename) ;
-
-       puts ("ok") ;
-} /* raw_offset_test */
-
-static void
-bad_raw_test (void)
-{      FILE            *textfile ;
-       SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       const char      *errorstr, *filename = "bad.raw" ;
-
-       print_test_name ("bad_raw_test", filename) ;
-
-       if ((textfile = fopen (filename, "w")) == NULL)
-       {       printf ("\n\nLine %d : not able to open text file for write.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       fprintf (textfile, "This is not a valid file.\n") ;
-       fclose (textfile) ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.format           = SF_FORMAT_RAW | 0xABCD ;
-       sfinfo.channels         = 1 ;
-
-       if ((file = sf_open (filename, SFM_READ, &sfinfo)) != NULL)
-       {       printf ("\n\nLine %d : Error, file should not have opened.\n", __LINE__ - 1) ;
-               exit (1) ;
-               } ;
-
-       errorstr = sf_strerror (file) ;
-
-       if (strstr (errorstr, "Bad format field in SF_INFO struct") == NULL)
-       {       printf ("\n\nLine %d : Error bad error string : %s.\n", __LINE__ - 1, errorstr) ;
-               exit (1) ;
-               } ;
-
-       unlink (filename) ;
-
-       puts ("ok") ;
-} /* bad_raw_test */
-
diff --git a/libs/libsndfile/tests/rdwr_test.def b/libs/libsndfile/tests/rdwr_test.def
deleted file mode 100644 (file)
index 43c1089..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-autogen definitions rdwr_test.tpl;
-
-data_type = {
-       name    = "short" ;
-       type    = "short" ;
-       format  = "SF_FORMAT_PCM_16" ;
-       } ;
-
-data_type = {
-       name    = "int" ;
-       type    = "int" ;
-       format  = "SF_FORMAT_PCM_32" ;
-       } ;
-
-data_type = {
-       name    = "float" ;
-       type    = "float" ;
-       format  = "SF_FORMAT_FLOAT" ;
-       } ;
-
-data_type = {
-       name    = "double" ;
-       type    = "double" ;
-       format  = "SF_FORMAT_DOUBLE" ;
-       } ;
-
-data_type = {
-       name    = "raw" ;
-       type    = "unsigned char" ;
-       format  = "SF_FORMAT_PCM_U8" ;
-       } ;
-
diff --git a/libs/libsndfile/tests/rdwr_test.tpl b/libs/libsndfile/tests/rdwr_test.tpl
deleted file mode 100644 (file)
index 8cfdd36..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-[+ AutoGen5 template c +]
-/*
-** Copyright (C) 2010-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software ; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation ; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY ; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program ; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <sys/stat.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#if (defined (WIN32) || defined (_WIN32))
-#include <io.h>
-#include <direct.h>
-#endif
-
-#include       <sndfile.h>
-
-#include       "utils.h"
-
-[+ FOR data_type
-+]static void  rdwr_[+ (get "name") +]_test    (const char *filename) ;
-[+ ENDFOR data_type
-+]
-
-int
-main (void)
-{
-       rdwr_short_test ("rdwr_short.wav") ;
-       rdwr_int_test ("rdwr_int.wav") ;
-       rdwr_float_test ("rdwr_float.wav") ;
-       rdwr_double_test ("rdwr_double.wav") ;
-       rdwr_raw_test ("rdwr_raw.wav") ;
-
-       return 0 ;
-} /* main */
-
-
-/*============================================================================================
-**     Here are the test functions.
-*/
-
-[+ FOR data_type
-+]static void
-rdwr_[+ (get "name") +]_test   (const char *filename)
-{      SNDFILE *file ;
-       SF_INFO sfinfo ;
-       sf_count_t frames ;
-       [+ (get "type") +] buffer [160] ;
-
-       print_test_name ("rdwr_[+ (get "name") +]_test", filename) ;
-
-       memset (buffer, 0, sizeof (buffer)) ;
-
-       /* Create sound file with no data. */
-       sfinfo.format = SF_FORMAT_WAV | [+ (get "format") +] ;
-       sfinfo.samplerate = 16000 ;
-       sfinfo.channels = 1 ;
-
-       unlink (filename) ;
-
-       frames = ARRAY_LEN (buffer) ;
-
-       /* Open again for read/write. */
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-
-       test_write_[+ (get "name") +]_or_die (file, 0, buffer, frames, __LINE__) ;
-
-       test_read_[+ (get "name") +]_or_die (file, 0, buffer, frames, __LINE__) ;
-
-       sf_close (file) ;
-       unlink (filename) ;
-
-       puts ("ok") ;
-       return ;
-} /* rdwr_[+ (get "name") +]_test */
-
-[+ ENDFOR data_type
-+]
-
diff --git a/libs/libsndfile/tests/scale_clip_test.c b/libs/libsndfile/tests/scale_clip_test.c
deleted file mode 100644 (file)
index 57b0b96..0000000
+++ /dev/null
@@ -1,1853 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <math.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#ifndef                M_PI
-#define                M_PI    3.14159265358979323846264338
-#endif
-
-#define        HALF_BUFFER_SIZE        (1 << 12)
-#define        BUFFER_SIZE                     (2 * HALF_BUFFER_SIZE)
-
-#define        SINE_AMP                1.1
-#define        MAX_ERROR               0.0202
-
-
-static void    flt_scale_clip_test_16 (const char *filename, int filetype, float maxval) ;
-static void    flt_scale_clip_test_24 (const char *filename, int filetype, float maxval) ;
-static void    flt_scale_clip_test_32 (const char *filename, int filetype, float maxval) ;
-static void    flt_scale_clip_test_08 (const char *filename, int filetype, float maxval) ;
-
-static void    dbl_scale_clip_test_16 (const char *filename, int filetype, float maxval) ;
-static void    dbl_scale_clip_test_24 (const char *filename, int filetype, float maxval) ;
-static void    dbl_scale_clip_test_32 (const char *filename, int filetype, float maxval) ;
-static void    dbl_scale_clip_test_08 (const char *filename, int filetype, float maxval) ;
-
-
-
-static void flt_short_clip_read_test (const char *filename, int filetype) ;
-static void flt_int_clip_read_test (const char *filename, int filetype) ;
-
-static void dbl_short_clip_read_test (const char *filename, int filetype) ;
-static void dbl_int_clip_read_test (const char *filename, int filetype) ;
-
-
-
-static void short_flt_scale_write_test (const char *filename, int filetype) ;
-static void short_dbl_scale_write_test (const char *filename, int filetype) ;
-
-static void int_flt_scale_write_test (const char *filename, int filetype) ;
-static void int_dbl_scale_write_test (const char *filename, int filetype) ;
-
-
-typedef union
-{      double  dbl [BUFFER_SIZE] ;
-       float   flt [BUFFER_SIZE] ;
-       int             i [BUFFER_SIZE] ;
-       short   s [BUFFER_SIZE] ;
-} BUFFER ;
-
-/* Data buffer. */
-static BUFFER  buffer_out ;
-static BUFFER  buffer_in ;
-
-int
-main (void)
-{
-       flt_scale_clip_test_08 ("scale_clip_s8.au", SF_FORMAT_AU | SF_FORMAT_PCM_S8, 1.0 * 0x80) ;
-       flt_scale_clip_test_08 ("scale_clip_u8.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_U8, 1.0 * 0x80) ;
-
-       dbl_scale_clip_test_08 ("scale_clip_s8.au", SF_FORMAT_AU | SF_FORMAT_PCM_S8, 1.0 * 0x80) ;
-       dbl_scale_clip_test_08 ("scale_clip_u8.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_U8, 1.0 * 0x80) ;
-
-       /*
-       **      Now use SF_FORMAT_AU where possible because it allows both
-       **      big and little endian files.
-       */
-
-       flt_scale_clip_test_16 ("scale_clip_be16.au", SF_ENDIAN_BIG     | SF_FORMAT_AU | SF_FORMAT_PCM_16, 1.0 * 0x8000) ;
-       flt_scale_clip_test_16 ("scale_clip_le16.au", SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_PCM_16, 1.0 * 0x8000) ;
-       flt_scale_clip_test_24 ("scale_clip_be24.au", SF_ENDIAN_BIG     | SF_FORMAT_AU | SF_FORMAT_PCM_24, 1.0 * 0x800000) ;
-       flt_scale_clip_test_24 ("scale_clip_le24.au", SF_ENDIAN_LITTLE  | SF_FORMAT_AU | SF_FORMAT_PCM_24, 1.0 * 0x800000) ;
-       flt_scale_clip_test_32 ("scale_clip_be32.au", SF_ENDIAN_BIG     | SF_FORMAT_AU | SF_FORMAT_PCM_32, 1.0 * 0x80000000) ;
-       flt_scale_clip_test_32 ("scale_clip_le32.au", SF_ENDIAN_LITTLE  | SF_FORMAT_AU | SF_FORMAT_PCM_32, 1.0 * 0x80000000) ;
-
-       dbl_scale_clip_test_16 ("scale_clip_be16.au", SF_ENDIAN_BIG     | SF_FORMAT_AU | SF_FORMAT_PCM_16, 1.0 * 0x8000) ;
-       dbl_scale_clip_test_16 ("scale_clip_le16.au", SF_ENDIAN_LITTLE  | SF_FORMAT_AU | SF_FORMAT_PCM_16, 1.0 * 0x8000) ;
-       dbl_scale_clip_test_24 ("scale_clip_be24.au", SF_ENDIAN_BIG     | SF_FORMAT_AU | SF_FORMAT_PCM_24, 1.0 * 0x800000) ;
-       dbl_scale_clip_test_24 ("scale_clip_le24.au", SF_ENDIAN_LITTLE  | SF_FORMAT_AU | SF_FORMAT_PCM_24, 1.0 * 0x800000) ;
-       dbl_scale_clip_test_32 ("scale_clip_be32.au", SF_ENDIAN_BIG     | SF_FORMAT_AU | SF_FORMAT_PCM_32, 1.0 * 0x80000000) ;
-       dbl_scale_clip_test_32 ("scale_clip_le32.au", SF_ENDIAN_LITTLE  | SF_FORMAT_AU | SF_FORMAT_PCM_32, 1.0 * 0x80000000) ;
-
-       flt_short_clip_read_test        ("flt_short.au" , SF_ENDIAN_BIG         | SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
-       flt_int_clip_read_test          ("flt_int.au"   , SF_ENDIAN_LITTLE      | SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
-       dbl_short_clip_read_test        ("dbl_short.au" , SF_ENDIAN_BIG         | SF_FORMAT_AU | SF_FORMAT_DOUBLE) ;
-       dbl_int_clip_read_test          ("dbl_int.au"   , SF_ENDIAN_LITTLE      | SF_FORMAT_AU | SF_FORMAT_DOUBLE) ;
-
-       short_flt_scale_write_test      ("short_flt.au" , SF_ENDIAN_BIG         | SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
-       int_flt_scale_write_test        ("int_flt.au"   , SF_ENDIAN_LITTLE      | SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
-       short_dbl_scale_write_test      ("short_dbl.au" , SF_ENDIAN_BIG         | SF_FORMAT_AU | SF_FORMAT_DOUBLE) ;
-       int_dbl_scale_write_test        ("int_dbl.au"   , SF_ENDIAN_LITTLE      | SF_FORMAT_AU | SF_FORMAT_DOUBLE) ;
-
-       return 0 ;
-} /* main */
-
-/*============================================================================================
-**     Here are the test functions.
-*/
-
-
-static void
-flt_scale_clip_test_16 (const char *filename, int filetype, float maxval)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     k ;
-       float           *data_out, *data_in ;
-       double          diff, clip_max_diff ;
-
-       print_test_name ("flt_scale_clip_test_16", filename) ;
-
-       data_out = buffer_out.flt ;
-       data_in = buffer_in.flt ;
-
-       for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-       {       data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
-               data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       /*
-       **      Write two versions of the data:
-       **              normalized and clipped
-       **              un-normalized and clipped.
-       */
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-       test_write_float_or_die (file, 0, data_out, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-       test_write_float_or_die (file, 0, data_out + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&buffer_in, 0, sizeof (buffer_in)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-       if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != BUFFER_SIZE)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_float_or_die (file, 0, data_in, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-       test_read_float_or_die (file, 0, data_in + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       /* Check normalized version. */
-       clip_max_diff = 0.0 ;
-       for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-       {       if (fabs (data_in [k]) > 1.0)
-               {       printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-               if (data_out [k] * data_in [k] < 0.0)
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-                       exit (1) ;
-                       } ;
-
-               if (fabs (data_out [k]) > 1.0)
-                       continue ;
-
-               diff = fabs (data_out [k] - data_in [k]) ;
-               if (diff > clip_max_diff)
-                       clip_max_diff = diff ;
-               } ;
-
-       if (clip_max_diff < 1e-20)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too small (normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       if (clip_max_diff > 1.0 / 0x8000)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too large (normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       /* Check the un-normalized data. */
-       clip_max_diff = 0.0 ;
-       for (k = HALF_BUFFER_SIZE ; k < BUFFER_SIZE ; k++)
-       {       if (fabs (data_in [k]) > maxval)
-               {       printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-               if (data_out [k] * data_in [k] < 0.0)
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-                       exit (1) ;
-                       } ;
-
-               if (fabs (data_out [k]) > maxval)
-                       continue ;
-
-               diff = fabs (data_out [k] - data_in [k]) ;
-               if (diff > clip_max_diff)
-                       clip_max_diff = diff ;
-               } ;
-
-       if (clip_max_diff < 1e-20)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too small (un-normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       if (clip_max_diff > 1.0)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too large (un-normalised).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       printf ("ok\n") ;
-       unlink (filename) ;
-} /* flt_scale_clip_test_16 */
-
-static void
-flt_scale_clip_test_24 (const char *filename, int filetype, float maxval)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     k ;
-       float           *data_out, *data_in ;
-       double          diff, clip_max_diff ;
-
-       print_test_name ("flt_scale_clip_test_24", filename) ;
-
-       data_out = buffer_out.flt ;
-       data_in = buffer_in.flt ;
-
-       for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-       {       data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
-               data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       /*
-       **      Write two versions of the data:
-       **              normalized and clipped
-       **              un-normalized and clipped.
-       */
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-       test_write_float_or_die (file, 0, data_out, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-       test_write_float_or_die (file, 0, data_out + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&buffer_in, 0, sizeof (buffer_in)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-       if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != BUFFER_SIZE)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_float_or_die (file, 0, data_in, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-       test_read_float_or_die (file, 0, data_in + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       /* Check normalized version. */
-       clip_max_diff = 0.0 ;
-       for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-       {       if (fabs (data_in [k]) > 1.0)
-               {       printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-               if (data_out [k] * data_in [k] < 0.0)
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-                       exit (1) ;
-                       } ;
-
-               if (fabs (data_out [k]) > 1.0)
-                       continue ;
-
-               diff = fabs (data_out [k] - data_in [k]) ;
-               if (diff > clip_max_diff)
-                       clip_max_diff = diff ;
-               } ;
-
-       if (clip_max_diff < 1e-20)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too small (normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       if (clip_max_diff > 1.0 / 0x800000)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too large (normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       /* Check the un-normalized data. */
-       clip_max_diff = 0.0 ;
-       for (k = HALF_BUFFER_SIZE ; k < BUFFER_SIZE ; k++)
-       {       if (fabs (data_in [k]) > maxval)
-               {       printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-               if (data_out [k] * data_in [k] < 0.0)
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-                       exit (1) ;
-                       } ;
-
-               if (fabs (data_out [k]) > maxval)
-                       continue ;
-
-               diff = fabs (data_out [k] - data_in [k]) ;
-               if (diff > clip_max_diff)
-                       clip_max_diff = diff ;
-               } ;
-
-       if (clip_max_diff < 1e-20)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too small (un-normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       if (clip_max_diff > 1.0)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too large (un-normalised).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       printf ("ok\n") ;
-       unlink (filename) ;
-} /* flt_scale_clip_test_24 */
-
-static void
-flt_scale_clip_test_32 (const char *filename, int filetype, float maxval)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     k ;
-       float           *data_out, *data_in ;
-       double          diff, clip_max_diff ;
-
-       print_test_name ("flt_scale_clip_test_32", filename) ;
-
-       data_out = buffer_out.flt ;
-       data_in = buffer_in.flt ;
-
-       for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-       {       data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
-               data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       /*
-       **      Write two versions of the data:
-       **              normalized and clipped
-       **              un-normalized and clipped.
-       */
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-       test_write_float_or_die (file, 0, data_out, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-       test_write_float_or_die (file, 0, data_out + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&buffer_in, 0, sizeof (buffer_in)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-       if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != BUFFER_SIZE)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_float_or_die (file, 0, data_in, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-       test_read_float_or_die (file, 0, data_in + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       /* Check normalized version. */
-       clip_max_diff = 0.0 ;
-       for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-       {       if (fabs (data_in [k]) > 1.0)
-               {       printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-               if (data_out [k] * data_in [k] < 0.0)
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-                       exit (1) ;
-                       } ;
-
-               if (fabs (data_out [k]) > 1.0)
-                       continue ;
-
-               diff = fabs (data_out [k] - data_in [k]) ;
-               if (diff > clip_max_diff)
-                       clip_max_diff = diff ;
-               } ;
-
-       if (clip_max_diff < 1e-20)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too small (normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       if (clip_max_diff > 1.0 / 0x80000000)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too large (normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       /* Check the un-normalized data. */
-       clip_max_diff = 0.0 ;
-       for (k = HALF_BUFFER_SIZE ; k < BUFFER_SIZE ; k++)
-       {       if (fabs (data_in [k]) > maxval)
-               {       printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-               if (data_out [k] * data_in [k] < 0.0)
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-                       exit (1) ;
-                       } ;
-
-               if (fabs (data_out [k]) > maxval)
-                       continue ;
-
-               diff = fabs (data_out [k] - data_in [k]) ;
-               if (diff > clip_max_diff)
-                       clip_max_diff = diff ;
-               } ;
-
-       if (clip_max_diff < 1e-20)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too small (un-normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       if (clip_max_diff > 1.0)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too large (un-normalised).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       printf ("ok\n") ;
-       unlink (filename) ;
-} /* flt_scale_clip_test_32 */
-
-static void
-flt_scale_clip_test_08 (const char *filename, int filetype, float maxval)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     k ;
-       float           *data_out, *data_in ;
-       double          diff, clip_max_diff ;
-
-       print_test_name ("flt_scale_clip_test_08", filename) ;
-
-       data_out = buffer_out.flt ;
-       data_in = buffer_in.flt ;
-
-       for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-       {       data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
-               data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       /*
-       **      Write two versions of the data:
-       **              normalized and clipped
-       **              un-normalized and clipped.
-       */
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-       test_write_float_or_die (file, 0, data_out, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-       test_write_float_or_die (file, 0, data_out + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&buffer_in, 0, sizeof (buffer_in)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-       if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != BUFFER_SIZE)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_float_or_die (file, 0, data_in, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;
-       test_read_float_or_die (file, 0, data_in + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       /* Check normalized version. */
-       clip_max_diff = 0.0 ;
-       for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-       {       if (fabs (data_in [k]) > 1.0)
-               {       printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-               if (data_out [k] * data_in [k] < 0.0)
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-                       exit (1) ;
-                       } ;
-
-               if (fabs (data_out [k]) > 1.0)
-                       continue ;
-
-               diff = fabs (data_out [k] - data_in [k]) ;
-               if (diff > clip_max_diff)
-                       clip_max_diff = diff ;
-               } ;
-
-       if (clip_max_diff < 1e-20)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too small (normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       if (clip_max_diff > 1.0 / 0x80)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too large (normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       /* Check the un-normalized data. */
-       clip_max_diff = 0.0 ;
-       for (k = HALF_BUFFER_SIZE ; k < BUFFER_SIZE ; k++)
-       {       if (fabs (data_in [k]) > maxval)
-               {       printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-               if (data_out [k] * data_in [k] < 0.0)
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-                       exit (1) ;
-                       } ;
-
-               if (fabs (data_out [k]) > maxval)
-                       continue ;
-
-               diff = fabs (data_out [k] - data_in [k]) ;
-               if (diff > clip_max_diff)
-                       clip_max_diff = diff ;
-               } ;
-
-       if (clip_max_diff < 1e-20)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too small (un-normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       if (clip_max_diff > 1.0)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too large (un-normalised).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       printf ("ok\n") ;
-       unlink (filename) ;
-} /* flt_scale_clip_test_08 */
-
-
-
-static void
-dbl_scale_clip_test_16 (const char *filename, int filetype, float maxval)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     k ;
-       double          *data_out, *data_in ;
-       double          diff, clip_max_diff ;
-
-       print_test_name ("dbl_scale_clip_test_16", filename) ;
-
-       data_out = buffer_out.dbl ;
-       data_in = buffer_in.dbl ;
-
-       for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-       {       data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
-               data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       /*
-       **      Write two versions of the data:
-       **              normalized and clipped
-       **              un-normalized and clipped.
-       */
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-       test_write_double_or_die (file, 0, data_out, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-       test_write_double_or_die (file, 0, data_out + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&buffer_in, 0, sizeof (buffer_in)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-       if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != BUFFER_SIZE)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data_in, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-       test_read_double_or_die (file, 0, data_in + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       /* Check normalized version. */
-       clip_max_diff = 0.0 ;
-       for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-       {       if (fabs (data_in [k]) > 1.0)
-               {       printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-               if (data_out [k] * data_in [k] < 0.0)
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-                       exit (1) ;
-                       } ;
-
-               if (fabs (data_out [k]) > 1.0)
-                       continue ;
-
-               diff = fabs (data_out [k] - data_in [k]) ;
-               if (diff > clip_max_diff)
-                       clip_max_diff = diff ;
-               } ;
-
-       if (clip_max_diff < 1e-20)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too small (normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       if (clip_max_diff > 1.0 / 0x8000)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too large (normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       /* Check the un-normalized data. */
-       clip_max_diff = 0.0 ;
-       for (k = HALF_BUFFER_SIZE ; k < BUFFER_SIZE ; k++)
-       {       if (fabs (data_in [k]) > maxval)
-               {       printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-               if (data_out [k] * data_in [k] < 0.0)
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-                       exit (1) ;
-                       } ;
-
-               if (fabs (data_out [k]) > maxval)
-                       continue ;
-
-               diff = fabs (data_out [k] - data_in [k]) ;
-               if (diff > clip_max_diff)
-                       clip_max_diff = diff ;
-               } ;
-
-       if (clip_max_diff < 1e-20)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too small (un-normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       if (clip_max_diff > 1.0)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too large (un-normalised).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       printf ("ok\n") ;
-       unlink (filename) ;
-} /* dbl_scale_clip_test_16 */
-
-static void
-dbl_scale_clip_test_24 (const char *filename, int filetype, float maxval)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     k ;
-       double          *data_out, *data_in ;
-       double          diff, clip_max_diff ;
-
-       print_test_name ("dbl_scale_clip_test_24", filename) ;
-
-       data_out = buffer_out.dbl ;
-       data_in = buffer_in.dbl ;
-
-       for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-       {       data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
-               data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       /*
-       **      Write two versions of the data:
-       **              normalized and clipped
-       **              un-normalized and clipped.
-       */
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-       test_write_double_or_die (file, 0, data_out, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-       test_write_double_or_die (file, 0, data_out + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&buffer_in, 0, sizeof (buffer_in)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-       if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != BUFFER_SIZE)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data_in, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-       test_read_double_or_die (file, 0, data_in + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       /* Check normalized version. */
-       clip_max_diff = 0.0 ;
-       for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-       {       if (fabs (data_in [k]) > 1.0)
-               {       printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-               if (data_out [k] * data_in [k] < 0.0)
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-                       exit (1) ;
-                       } ;
-
-               if (fabs (data_out [k]) > 1.0)
-                       continue ;
-
-               diff = fabs (data_out [k] - data_in [k]) ;
-               if (diff > clip_max_diff)
-                       clip_max_diff = diff ;
-               } ;
-
-       if (clip_max_diff < 1e-20)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too small (normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       if (clip_max_diff > 1.0 / 0x800000)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too large (normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       /* Check the un-normalized data. */
-       clip_max_diff = 0.0 ;
-       for (k = HALF_BUFFER_SIZE ; k < BUFFER_SIZE ; k++)
-       {       if (fabs (data_in [k]) > maxval)
-               {       printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-               if (data_out [k] * data_in [k] < 0.0)
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-                       exit (1) ;
-                       } ;
-
-               if (fabs (data_out [k]) > maxval)
-                       continue ;
-
-               diff = fabs (data_out [k] - data_in [k]) ;
-               if (diff > clip_max_diff)
-                       clip_max_diff = diff ;
-               } ;
-
-       if (clip_max_diff < 1e-20)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too small (un-normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       if (clip_max_diff > 1.0)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too large (un-normalised).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       printf ("ok\n") ;
-       unlink (filename) ;
-} /* dbl_scale_clip_test_24 */
-
-static void
-dbl_scale_clip_test_32 (const char *filename, int filetype, float maxval)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     k ;
-       double          *data_out, *data_in ;
-       double          diff, clip_max_diff ;
-
-       print_test_name ("dbl_scale_clip_test_32", filename) ;
-
-       data_out = buffer_out.dbl ;
-       data_in = buffer_in.dbl ;
-
-       for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-       {       data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
-               data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       /*
-       **      Write two versions of the data:
-       **              normalized and clipped
-       **              un-normalized and clipped.
-       */
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-       test_write_double_or_die (file, 0, data_out, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-       test_write_double_or_die (file, 0, data_out + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&buffer_in, 0, sizeof (buffer_in)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-       if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != BUFFER_SIZE)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data_in, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-       test_read_double_or_die (file, 0, data_in + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       /* Check normalized version. */
-       clip_max_diff = 0.0 ;
-       for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-       {       if (fabs (data_in [k]) > 1.0)
-               {       printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-               if (data_out [k] * data_in [k] < 0.0)
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-                       exit (1) ;
-                       } ;
-
-               if (fabs (data_out [k]) > 1.0)
-                       continue ;
-
-               diff = fabs (data_out [k] - data_in [k]) ;
-               if (diff > clip_max_diff)
-                       clip_max_diff = diff ;
-               } ;
-
-       if (clip_max_diff < 1e-20)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too small (normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       if (clip_max_diff > 1.0 / 0x80000000)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too large (normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       /* Check the un-normalized data. */
-       clip_max_diff = 0.0 ;
-       for (k = HALF_BUFFER_SIZE ; k < BUFFER_SIZE ; k++)
-       {       if (fabs (data_in [k]) > maxval)
-               {       printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-               if (data_out [k] * data_in [k] < 0.0)
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-                       exit (1) ;
-                       } ;
-
-               if (fabs (data_out [k]) > maxval)
-                       continue ;
-
-               diff = fabs (data_out [k] - data_in [k]) ;
-               if (diff > clip_max_diff)
-                       clip_max_diff = diff ;
-               } ;
-
-       if (clip_max_diff < 1e-20)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too small (un-normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       if (clip_max_diff > 1.0)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too large (un-normalised).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       printf ("ok\n") ;
-       unlink (filename) ;
-} /* dbl_scale_clip_test_32 */
-
-static void
-dbl_scale_clip_test_08 (const char *filename, int filetype, float maxval)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     k ;
-       double          *data_out, *data_in ;
-       double          diff, clip_max_diff ;
-
-       print_test_name ("dbl_scale_clip_test_08", filename) ;
-
-       data_out = buffer_out.dbl ;
-       data_in = buffer_in.dbl ;
-
-       for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-       {       data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
-               data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       /*
-       **      Write two versions of the data:
-       **              normalized and clipped
-       **              un-normalized and clipped.
-       */
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-       test_write_double_or_die (file, 0, data_out, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-       test_write_double_or_die (file, 0, data_out + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&buffer_in, 0, sizeof (buffer_in)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-       if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != BUFFER_SIZE)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_double_or_die (file, 0, data_in, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;
-       test_read_double_or_die (file, 0, data_in + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       /* Check normalized version. */
-       clip_max_diff = 0.0 ;
-       for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-       {       if (fabs (data_in [k]) > 1.0)
-               {       printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-               if (data_out [k] * data_in [k] < 0.0)
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-                       exit (1) ;
-                       } ;
-
-               if (fabs (data_out [k]) > 1.0)
-                       continue ;
-
-               diff = fabs (data_out [k] - data_in [k]) ;
-               if (diff > clip_max_diff)
-                       clip_max_diff = diff ;
-               } ;
-
-       if (clip_max_diff < 1e-20)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too small (normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       if (clip_max_diff > 1.0 / 0x80)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too large (normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       /* Check the un-normalized data. */
-       clip_max_diff = 0.0 ;
-       for (k = HALF_BUFFER_SIZE ; k < BUFFER_SIZE ; k++)
-       {       if (fabs (data_in [k]) > maxval)
-               {       printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-               if (data_out [k] * data_in [k] < 0.0)
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-                       exit (1) ;
-                       } ;
-
-               if (fabs (data_out [k]) > maxval)
-                       continue ;
-
-               diff = fabs (data_out [k] - data_in [k]) ;
-               if (diff > clip_max_diff)
-                       clip_max_diff = diff ;
-               } ;
-
-       if (clip_max_diff < 1e-20)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too small (un-normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       if (clip_max_diff > 1.0)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too large (un-normalised).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       printf ("ok\n") ;
-       unlink (filename) ;
-} /* dbl_scale_clip_test_08 */
-
-
-
-
-/*==============================================================================
-*/
-
-
-static void flt_short_clip_read_test (const char *filename, int filetype)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       float           *data_out ;
-       short                   *data_in, max_value ;
-       int                     k ;
-
-       print_test_name ("flt_short_clip_read_test", filename) ;
-
-       data_out = buffer_out.flt ;
-       data_in = buffer_in.s ;
-
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               data_out [k] = 0.995 * sin (4 * M_PI * k / BUFFER_SIZE) ;
-       data_out [BUFFER_SIZE / 8] = 1.0 ;
-       data_out [3 * BUFFER_SIZE / 8] = -1.000000001 ;
-       data_out [5 * BUFFER_SIZE / 8] = 1.0 ;
-       data_out [7 * BUFFER_SIZE / 8] = -1.000000001 ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       /* Save unclipped data to the file. */
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_write_float_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-       sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-       if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != BUFFER_SIZE)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-       test_read_short_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-       /*-sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;-*/
-       sf_close (file) ;
-
-       /* Check the first half. */
-       max_value = 0 ;
-       for (k = 0 ; k < sfinfo.frames ; k++)
-       {       /* Check if data_out has different sign from data_in. */
-               if ((data_out [k] < 0.0 && data_in [k] > 0) || (data_out [k] > 0.0 && data_in [k] < 0))
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d  (%f -> %d).\n\n", __LINE__, k, BUFFER_SIZE, data_out [k], data_in [k]) ;
-                       exit (1) ;
-                       } ;
-               max_value = (max_value > abs (data_in [k])) ? max_value : abs (data_in [k]) ;
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* flt_short_clip_read_test */
-static void flt_int_clip_read_test (const char *filename, int filetype)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       float           *data_out ;
-       int                     *data_in, max_value ;
-       int                     k ;
-
-       print_test_name ("flt_int_clip_read_test", filename) ;
-
-       data_out = buffer_out.flt ;
-       data_in = buffer_in.i ;
-
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               data_out [k] = 0.995 * sin (4 * M_PI * k / BUFFER_SIZE) ;
-       data_out [BUFFER_SIZE / 8] = 1.0 ;
-       data_out [3 * BUFFER_SIZE / 8] = -1.000000001 ;
-       data_out [5 * BUFFER_SIZE / 8] = 1.0 ;
-       data_out [7 * BUFFER_SIZE / 8] = -1.000000001 ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       /* Save unclipped data to the file. */
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_write_float_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-       sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-       if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != BUFFER_SIZE)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-       test_read_int_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-       /*-sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;-*/
-       sf_close (file) ;
-
-       /* Check the first half. */
-       max_value = 0 ;
-       for (k = 0 ; k < sfinfo.frames ; k++)
-       {       /* Check if data_out has different sign from data_in. */
-               if ((data_out [k] < 0.0 && data_in [k] > 0) || (data_out [k] > 0.0 && data_in [k] < 0))
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d  (%f -> %d).\n\n", __LINE__, k, BUFFER_SIZE, data_out [k], data_in [k]) ;
-                       exit (1) ;
-                       } ;
-               max_value = (max_value > abs (data_in [k])) ? max_value : abs (data_in [k]) ;
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* flt_int_clip_read_test */
-
-static void dbl_short_clip_read_test (const char *filename, int filetype)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       double          *data_out ;
-       short                   *data_in, max_value ;
-       int                     k ;
-
-       print_test_name ("dbl_short_clip_read_test", filename) ;
-
-       data_out = buffer_out.dbl ;
-       data_in = buffer_in.s ;
-
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               data_out [k] = 0.995 * sin (4 * M_PI * k / BUFFER_SIZE) ;
-       data_out [BUFFER_SIZE / 8] = 1.0 ;
-       data_out [3 * BUFFER_SIZE / 8] = -1.000000001 ;
-       data_out [5 * BUFFER_SIZE / 8] = 1.0 ;
-       data_out [7 * BUFFER_SIZE / 8] = -1.000000001 ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       /* Save unclipped data to the file. */
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_write_double_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-       sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-       if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != BUFFER_SIZE)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-       test_read_short_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-       /*-sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;-*/
-       sf_close (file) ;
-
-       /* Check the first half. */
-       max_value = 0 ;
-       for (k = 0 ; k < sfinfo.frames ; k++)
-       {       /* Check if data_out has different sign from data_in. */
-               if ((data_out [k] < 0.0 && data_in [k] > 0) || (data_out [k] > 0.0 && data_in [k] < 0))
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d  (%f -> %d).\n\n", __LINE__, k, BUFFER_SIZE, data_out [k], data_in [k]) ;
-                       exit (1) ;
-                       } ;
-               max_value = (max_value > abs (data_in [k])) ? max_value : abs (data_in [k]) ;
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* dbl_short_clip_read_test */
-static void dbl_int_clip_read_test (const char *filename, int filetype)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       double          *data_out ;
-       int                     *data_in, max_value ;
-       int                     k ;
-
-       print_test_name ("dbl_int_clip_read_test", filename) ;
-
-       data_out = buffer_out.dbl ;
-       data_in = buffer_in.i ;
-
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               data_out [k] = 0.995 * sin (4 * M_PI * k / BUFFER_SIZE) ;
-       data_out [BUFFER_SIZE / 8] = 1.0 ;
-       data_out [3 * BUFFER_SIZE / 8] = -1.000000001 ;
-       data_out [5 * BUFFER_SIZE / 8] = 1.0 ;
-       data_out [7 * BUFFER_SIZE / 8] = -1.000000001 ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       /* Save unclipped data to the file. */
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_write_double_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-       sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-       if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != BUFFER_SIZE)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-       test_read_int_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-       /*-sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;-*/
-       sf_close (file) ;
-
-       /* Check the first half. */
-       max_value = 0 ;
-       for (k = 0 ; k < sfinfo.frames ; k++)
-       {       /* Check if data_out has different sign from data_in. */
-               if ((data_out [k] < 0.0 && data_in [k] > 0) || (data_out [k] > 0.0 && data_in [k] < 0))
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d  (%f -> %d).\n\n", __LINE__, k, BUFFER_SIZE, data_out [k], data_in [k]) ;
-                       exit (1) ;
-                       } ;
-               max_value = (max_value > abs (data_in [k])) ? max_value : abs (data_in [k]) ;
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* dbl_int_clip_read_test */
-
-
-/*==============================================================================
-*/
-
-
-static void short_flt_scale_write_test (const char *filename, int filetype)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       short           *data_out ;
-       float   *data_in, max_value ;
-       int                     k ;
-
-       print_test_name ("short_flt_clip_write_test", filename) ;
-
-       data_out = buffer_out.s ;
-       data_in = buffer_in.flt ;
-
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               data_out [k] = lrintf (0x7FFFF * 0.995 * sin (4 * M_PI * k / BUFFER_SIZE)) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_write_short_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_TRUE) ;
-       test_write_short_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_FALSE) ;
-       test_write_short_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-       if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != 3 * BUFFER_SIZE)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, 3 * BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       /* Check the first section. */
-       test_read_float_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-       max_value = 0.0 ;
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-       if (max_value < 1000.0)
-       {       printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
-               exit (1) ;
-               } ;
-
-       /* Check the second section. */
-       test_read_float_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-       max_value = 0.0 ;
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-       if (max_value > 1.0)
-       {       printf ("\n\nLine %d: Max value (%f) > 1.0.\n\n", __LINE__, max_value) ;
-               exit (1) ;
-               } ;
-
-       /* Check the third section. */
-       test_read_float_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-       max_value = 0.0 ;
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-       if (max_value < 1000.0)
-       {       printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* short_flt_scale_write_test */
-static void short_dbl_scale_write_test (const char *filename, int filetype)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       short           *data_out ;
-       double  *data_in, max_value ;
-       int                     k ;
-
-       print_test_name ("short_dbl_clip_write_test", filename) ;
-
-       data_out = buffer_out.s ;
-       data_in = buffer_in.dbl ;
-
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               data_out [k] = lrint (0x7FFFF * 0.995 * sin (4 * M_PI * k / BUFFER_SIZE)) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_write_short_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_TRUE) ;
-       test_write_short_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_FALSE) ;
-       test_write_short_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-       if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != 3 * BUFFER_SIZE)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, 3 * BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       /* Check the first section. */
-       test_read_double_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-       max_value = 0.0 ;
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-       if (max_value < 1000.0)
-       {       printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
-               exit (1) ;
-               } ;
-
-       /* Check the second section. */
-       test_read_double_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-       max_value = 0.0 ;
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-       if (max_value > 1.0)
-       {       printf ("\n\nLine %d: Max value (%f) > 1.0.\n\n", __LINE__, max_value) ;
-               exit (1) ;
-               } ;
-
-       /* Check the third section. */
-       test_read_double_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-       max_value = 0.0 ;
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-       if (max_value < 1000.0)
-       {       printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* short_dbl_scale_write_test */
-
-static void int_flt_scale_write_test (const char *filename, int filetype)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int             *data_out ;
-       float   *data_in, max_value ;
-       int                     k ;
-
-       print_test_name ("int_flt_clip_write_test", filename) ;
-
-       data_out = buffer_out.i ;
-       data_in = buffer_in.flt ;
-
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               data_out [k] = lrintf (0x7FFFFFFF * 0.995 * sin (4 * M_PI * k / BUFFER_SIZE)) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_write_int_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_TRUE) ;
-       test_write_int_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_FALSE) ;
-       test_write_int_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-       if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != 3 * BUFFER_SIZE)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, 3 * BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       /* Check the first section. */
-       test_read_float_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-       max_value = 0.0 ;
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-       if (max_value < 1000.0)
-       {       printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
-               exit (1) ;
-               } ;
-
-       /* Check the second section. */
-       test_read_float_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-       max_value = 0.0 ;
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-       if (max_value > 1.0)
-       {       printf ("\n\nLine %d: Max value (%f) > 1.0.\n\n", __LINE__, max_value) ;
-               exit (1) ;
-               } ;
-
-       /* Check the third section. */
-       test_read_float_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-       max_value = 0.0 ;
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-       if (max_value < 1000.0)
-       {       printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* int_flt_scale_write_test */
-static void int_dbl_scale_write_test (const char *filename, int filetype)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int             *data_out ;
-       double  *data_in, max_value ;
-       int                     k ;
-
-       print_test_name ("int_dbl_clip_write_test", filename) ;
-
-       data_out = buffer_out.i ;
-       data_in = buffer_in.dbl ;
-
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               data_out [k] = lrint (0x7FFFFFFF * 0.995 * sin (4 * M_PI * k / BUFFER_SIZE)) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_write_int_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_TRUE) ;
-       test_write_int_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_FALSE) ;
-       test_write_int_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-       if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != 3 * BUFFER_SIZE)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, 3 * BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       /* Check the first section. */
-       test_read_double_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-       max_value = 0.0 ;
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-       if (max_value < 1000.0)
-       {       printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
-               exit (1) ;
-               } ;
-
-       /* Check the second section. */
-       test_read_double_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-       max_value = 0.0 ;
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-       if (max_value > 1.0)
-       {       printf ("\n\nLine %d: Max value (%f) > 1.0.\n\n", __LINE__, max_value) ;
-               exit (1) ;
-               } ;
-
-       /* Check the third section. */
-       test_read_double_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-       max_value = 0.0 ;
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-       if (max_value < 1000.0)
-       {       printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* int_dbl_scale_write_test */
-
-
-
diff --git a/libs/libsndfile/tests/scale_clip_test.def b/libs/libsndfile/tests/scale_clip_test.def
deleted file mode 100644 (file)
index 3459819..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-autogen definitions scale_clip_test.tpl;
-
-float_type = {
-       float_type_name         = "float" ;
-       float_short_name        = "flt" ;
-       float_upper_name        = "FLOAT" ;
-       float_to_int            = "lrintf" ;
-       } ;
-
-float_type = {
-       float_type_name         = "double" ;
-       float_short_name        = "dbl" ;
-       float_upper_name        = "DOUBLE" ;
-       float_to_int            = "lrint" ;
-       } ;
-
-
-
-int_type = {
-       int_type_name   = "short" ;
-       int_short_name  = "s" ;
-       int_max_value   = 0x7FFFF ;
-       } ;
-
-int_type = {
-       int_type_name   = "int" ;
-       int_short_name  = "i" ;
-       int_max_value   = 0x7FFFFFFF ;
-       } ;
-
-
-
-data_type = {
-       name            = "16" ;
-       bit_count       = 16 ;
-       error_val       = "1.0 / 0x8000" ;
-       } ;
-
-data_type = {
-       name            = "24" ;
-       bit_count       = 24 ;
-       error_val       = "1.0 / 0x800000" ;
-       } ;
-
-data_type = {
-       name            = "32" ;
-       bit_count       = 32 ;
-       error_val       = "1.0 / 0x80000000" ;
-       } ;
-
-data_type = {
-       name            = "08" ;
-       bit_count       = 8 ;
-       error_val       = "1.0 / 0x80" ;
-       } ;
-
diff --git a/libs/libsndfile/tests/scale_clip_test.tpl b/libs/libsndfile/tests/scale_clip_test.tpl
deleted file mode 100644 (file)
index 39ddf57..0000000
+++ /dev/null
@@ -1,438 +0,0 @@
-[+ AutoGen5 template c +]
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#ifndef                M_PI
-#define                M_PI    3.14159265358979323846264338
-#endif
-
-#define        HALF_BUFFER_SIZE        (1 << 12)
-#define        BUFFER_SIZE                     (2 * HALF_BUFFER_SIZE)
-
-#define        SINE_AMP                1.1
-#define        MAX_ERROR               0.0202
-
-[+ FOR float_type +]
-[+ FOR data_type
-+]static void  [+ (get "float_short_name") +]_scale_clip_test_[+ (get "name") +] (const char *filename, int filetype, float maxval) ;
-[+ ENDFOR data_type
-+][+ ENDFOR float_type +]
-
-[+ FOR float_type +]
-[+ FOR int_type
-+]static void [+ (get "float_short_name") +]_[+ (get "int_type_name") +]_clip_read_test (const char *filename, int filetype) ;
-[+ ENDFOR int_type
-+][+ ENDFOR float_type +]
-
-[+ FOR int_type +]
-[+ FOR float_type
-+]static void [+ (get "int_type_name") +]_[+ (get "float_short_name") +]_scale_write_test (const char *filename, int filetype) ;
-[+ ENDFOR float_type
-+][+ ENDFOR int_type +]
-
-typedef union
-{      double  dbl [BUFFER_SIZE] ;
-       float   flt [BUFFER_SIZE] ;
-       int             i [BUFFER_SIZE] ;
-       short   s [BUFFER_SIZE] ;
-} BUFFER ;
-
-/* Data buffer. */
-static BUFFER  buffer_out ;
-static BUFFER  buffer_in ;
-
-int
-main (void)
-{
-       flt_scale_clip_test_08 ("scale_clip_s8.au", SF_FORMAT_AU | SF_FORMAT_PCM_S8, 1.0 * 0x80) ;
-       flt_scale_clip_test_08 ("scale_clip_u8.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_U8, 1.0 * 0x80) ;
-
-       dbl_scale_clip_test_08 ("scale_clip_s8.au", SF_FORMAT_AU | SF_FORMAT_PCM_S8, 1.0 * 0x80) ;
-       dbl_scale_clip_test_08 ("scale_clip_u8.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_U8, 1.0 * 0x80) ;
-
-       /*
-       **      Now use SF_FORMAT_AU where possible because it allows both
-       **      big and little endian files.
-       */
-
-       flt_scale_clip_test_16 ("scale_clip_be16.au", SF_ENDIAN_BIG     | SF_FORMAT_AU | SF_FORMAT_PCM_16, 1.0 * 0x8000) ;
-       flt_scale_clip_test_16 ("scale_clip_le16.au", SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_PCM_16, 1.0 * 0x8000) ;
-       flt_scale_clip_test_24 ("scale_clip_be24.au", SF_ENDIAN_BIG     | SF_FORMAT_AU | SF_FORMAT_PCM_24, 1.0 * 0x800000) ;
-       flt_scale_clip_test_24 ("scale_clip_le24.au", SF_ENDIAN_LITTLE  | SF_FORMAT_AU | SF_FORMAT_PCM_24, 1.0 * 0x800000) ;
-       flt_scale_clip_test_32 ("scale_clip_be32.au", SF_ENDIAN_BIG     | SF_FORMAT_AU | SF_FORMAT_PCM_32, 1.0 * 0x80000000) ;
-       flt_scale_clip_test_32 ("scale_clip_le32.au", SF_ENDIAN_LITTLE  | SF_FORMAT_AU | SF_FORMAT_PCM_32, 1.0 * 0x80000000) ;
-
-       dbl_scale_clip_test_16 ("scale_clip_be16.au", SF_ENDIAN_BIG     | SF_FORMAT_AU | SF_FORMAT_PCM_16, 1.0 * 0x8000) ;
-       dbl_scale_clip_test_16 ("scale_clip_le16.au", SF_ENDIAN_LITTLE  | SF_FORMAT_AU | SF_FORMAT_PCM_16, 1.0 * 0x8000) ;
-       dbl_scale_clip_test_24 ("scale_clip_be24.au", SF_ENDIAN_BIG     | SF_FORMAT_AU | SF_FORMAT_PCM_24, 1.0 * 0x800000) ;
-       dbl_scale_clip_test_24 ("scale_clip_le24.au", SF_ENDIAN_LITTLE  | SF_FORMAT_AU | SF_FORMAT_PCM_24, 1.0 * 0x800000) ;
-       dbl_scale_clip_test_32 ("scale_clip_be32.au", SF_ENDIAN_BIG     | SF_FORMAT_AU | SF_FORMAT_PCM_32, 1.0 * 0x80000000) ;
-       dbl_scale_clip_test_32 ("scale_clip_le32.au", SF_ENDIAN_LITTLE  | SF_FORMAT_AU | SF_FORMAT_PCM_32, 1.0 * 0x80000000) ;
-
-       flt_short_clip_read_test        ("flt_short.au" , SF_ENDIAN_BIG         | SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
-       flt_int_clip_read_test          ("flt_int.au"   , SF_ENDIAN_LITTLE      | SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
-       dbl_short_clip_read_test        ("dbl_short.au" , SF_ENDIAN_BIG         | SF_FORMAT_AU | SF_FORMAT_DOUBLE) ;
-       dbl_int_clip_read_test          ("dbl_int.au"   , SF_ENDIAN_LITTLE      | SF_FORMAT_AU | SF_FORMAT_DOUBLE) ;
-
-       short_flt_scale_write_test      ("short_flt.au" , SF_ENDIAN_BIG         | SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
-       int_flt_scale_write_test        ("int_flt.au"   , SF_ENDIAN_LITTLE      | SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
-       short_dbl_scale_write_test      ("short_dbl.au" , SF_ENDIAN_BIG         | SF_FORMAT_AU | SF_FORMAT_DOUBLE) ;
-       int_dbl_scale_write_test        ("int_dbl.au"   , SF_ENDIAN_LITTLE      | SF_FORMAT_AU | SF_FORMAT_DOUBLE) ;
-
-       return 0 ;
-} /* main */
-
-/*============================================================================================
-**     Here are the test functions.
-*/
-
-[+ FOR float_type +]
-[+ FOR data_type
-+]static void
-[+ (get "float_short_name") +]_scale_clip_test_[+ (get "name") +] (const char *filename, int filetype, float maxval)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     k ;
-       [+ (get "float_type_name") +]           *data_out, *data_in ;
-       double          diff, clip_max_diff ;
-
-       print_test_name ("[+ (get "float_short_name") +]_scale_clip_test_[+ (get "name") +]", filename) ;
-
-       data_out = buffer_out.[+ (get "float_short_name") +] ;
-       data_in = buffer_in.[+ (get "float_short_name") +] ;
-
-       for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-       {       data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
-               data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
-               } ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       /*
-       **      Write two versions of the data:
-       **              normalized and clipped
-       **              un-normalized and clipped.
-       */
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-       test_write_[+ (get "float_type_name") +]_or_die (file, 0, data_out, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_[+ (get "float_upper_name") +], NULL, SF_FALSE) ;
-       test_write_[+ (get "float_type_name") +]_or_die (file, 0, data_out + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&buffer_in, 0, sizeof (buffer_in)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-       if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != BUFFER_SIZE)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (%d => %" PRId64 ").\n\n", __LINE__, BUFFER_SIZE, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_[+ (get "float_type_name") +]_or_die (file, 0, data_in, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_NORM_[+ (get "float_upper_name") +], NULL, SF_FALSE) ;
-       test_read_[+ (get "float_type_name") +]_or_die (file, 0, data_in + HALF_BUFFER_SIZE, HALF_BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       /* Check normalized version. */
-       clip_max_diff = 0.0 ;
-       for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
-       {       if (fabs (data_in [k]) > 1.0)
-               {       printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-               if (data_out [k] * data_in [k] < 0.0)
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-                       exit (1) ;
-                       } ;
-
-               if (fabs (data_out [k]) > 1.0)
-                       continue ;
-
-               diff = fabs (data_out [k] - data_in [k]) ;
-               if (diff > clip_max_diff)
-                       clip_max_diff = diff ;
-               } ;
-
-       if (clip_max_diff < 1e-20)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too small (normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       if (clip_max_diff > [+ (get "error_val") +])
-       {       printf ("\n\nLine %d: Clipping difference (%e) too large (normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       /* Check the un-normalized data. */
-       clip_max_diff = 0.0 ;
-       for (k = HALF_BUFFER_SIZE ; k < BUFFER_SIZE ; k++)
-       {       if (fabs (data_in [k]) > maxval)
-               {       printf ("\n\nLine %d: Input sample %d/%d (%f) has not been clipped.\n\n", __LINE__, k, BUFFER_SIZE, data_in [k]) ;
-                       exit (1) ;
-                       } ;
-
-               if (data_out [k] * data_in [k] < 0.0)
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d.\n\n", __LINE__, k, BUFFER_SIZE) ;
-                       exit (1) ;
-                       } ;
-
-               if (fabs (data_out [k]) > maxval)
-                       continue ;
-
-               diff = fabs (data_out [k] - data_in [k]) ;
-               if (diff > clip_max_diff)
-                       clip_max_diff = diff ;
-               } ;
-
-       if (clip_max_diff < 1e-20)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too small (un-normalized).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       if (clip_max_diff > 1.0)
-       {       printf ("\n\nLine %d: Clipping difference (%e) too large (un-normalised).\n\n", __LINE__, clip_max_diff) ;
-               exit (1) ;
-               } ;
-
-       printf ("ok\n") ;
-       unlink (filename) ;
-} /* [+ (get "float_short_name") +]_scale_clip_test_[+ (get "name") +] */
-
-[+ ENDFOR data_type
-+]
-[+ ENDFOR float_type +]
-
-/*==============================================================================
-*/
-
-[+ FOR float_type +]
-[+ FOR int_type
-+]static void [+ (get "float_short_name") +]_[+ (get "int_type_name") +]_clip_read_test (const char *filename, int filetype)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       [+ (get "float_type_name") +]           *data_out ;
-       [+ (get "int_type_name") +]                     *data_in, max_value ;
-       int                     k ;
-
-       print_test_name ("[+ (get "float_short_name") +]_[+ (get "int_type_name") +]_clip_read_test", filename) ;
-
-       data_out = buffer_out.[+ (get "float_short_name") +] ;
-       data_in = buffer_in.[+ (get "int_short_name") +] ;
-
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               data_out [k] = 0.995 * sin (4 * M_PI * k / BUFFER_SIZE) ;
-       data_out [BUFFER_SIZE / 8] = 1.0 ;
-       data_out [3 * BUFFER_SIZE / 8] = -1.000000001 ;
-       data_out [5 * BUFFER_SIZE / 8] = 1.0 ;
-       data_out [7 * BUFFER_SIZE / 8] = -1.000000001 ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       /* Save unclipped data to the file. */
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_write_[+ (get "float_type_name") +]_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
-
-       sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-       if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != BUFFER_SIZE)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (%d => %" PRId64 ").\n\n", __LINE__, BUFFER_SIZE, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
-       test_read_[+ (get "int_type_name") +]_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-       /*-sf_command (file, SFC_SET_NORM_[+ (get "float_upper_name") +], NULL, SF_FALSE) ;-*/
-       sf_close (file) ;
-
-       /* Check the first half. */
-       max_value = 0 ;
-       for (k = 0 ; k < sfinfo.frames ; k++)
-       {       /* Check if data_out has different sign from data_in. */
-               if ((data_out [k] < 0.0 && data_in [k] > 0) || (data_out [k] > 0.0 && data_in [k] < 0))
-               {       printf ("\n\nLine %d: Data wrap around at index %d/%d  (%f -> %d).\n\n", __LINE__, k, BUFFER_SIZE, data_out [k], data_in [k]) ;
-                       exit (1) ;
-                       } ;
-               max_value = (max_value > abs (data_in [k])) ? max_value : abs (data_in [k]) ;
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* [+ (get "float_short_name") +]_[+ (get "int_type_name") +]_clip_read_test */
-[+ ENDFOR int_type
-+][+ ENDFOR float_type +]
-
-/*==============================================================================
-*/
-
-[+ FOR int_type +]
-[+ FOR float_type
-+]static void [+ (get "int_type_name") +]_[+ (get "float_short_name") +]_scale_write_test (const char *filename, int filetype)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       [+ (get "int_type_name") +]             *data_out ;
-       [+ (get "float_type_name") +]   *data_in, max_value ;
-       int                     k ;
-
-       print_test_name ("[+ (get "int_type_name") +]_[+ (get "float_short_name") +]_clip_write_test", filename) ;
-
-       data_out = buffer_out.[+ (get "int_short_name") +] ;
-       data_in = buffer_in.[+ (get "float_short_name") +] ;
-
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               data_out [k] = [+ (get "float_to_int") +] ([+ (get "int_max_value") +] * 0.995 * sin (4 * M_PI * k / BUFFER_SIZE)) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = filetype ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_write_[+ (get "int_type_name") +]_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_TRUE) ;
-       test_write_[+ (get "int_type_name") +]_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-       sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_FALSE) ;
-       test_write_[+ (get "int_type_name") +]_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
-       sf_close (file) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
-
-       if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
-       {       printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames != 3 * BUFFER_SIZE)
-       {       printf ("\n\nLine %d: Incorrect number of frames in file (%d => %" PRId64 ").\n\n", __LINE__, 3 * BUFFER_SIZE, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       /* Check the first section. */
-       test_read_[+ (get "float_type_name") +]_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-       max_value = 0.0 ;
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-       if (max_value < 1000.0)
-       {       printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
-               exit (1) ;
-               } ;
-
-       /* Check the second section. */
-       test_read_[+ (get "float_type_name") +]_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-       max_value = 0.0 ;
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-       if (max_value > 1.0)
-       {       printf ("\n\nLine %d: Max value (%f) > 1.0.\n\n", __LINE__, max_value) ;
-               exit (1) ;
-               } ;
-
-       /* Check the third section. */
-       test_read_[+ (get "float_type_name") +]_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
-
-       max_value = 0.0 ;
-       for (k = 0 ; k < BUFFER_SIZE ; k++)
-               max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
-
-       if (max_value < 1000.0)
-       {       printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* [+ (get "int_type_name") +]_[+ (get "float_short_name") +]_scale_write_test */
-[+ ENDFOR float_type
-+][+ ENDFOR int_type +]
-
-
diff --git a/libs/libsndfile/tests/sftest.c b/libs/libsndfile/tests/sftest.c
deleted file mode 100644 (file)
index 78a9f7f..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#define        BUFFER_SIZE             (1024)
-
-
-static short buffer [BUFFER_SIZE] ;
-
-int
-main (int argc, char *argv [])
-{      SNDFILE *file ;
-       SF_INFO sfinfo ;
-       int             k, count, max = 0, total = 0 ;
-
-       if (argc < 2)
-       {       printf ("Expecting input file name.\n") ;
-               return 0 ;
-               } ;
-
-       if (! (file = sf_open (argv [1], SFM_READ, &sfinfo)))
-       {       printf ("sf_open_read failed with error : ") ;
-               puts (sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       while ((count = sf_read_short (file, buffer, BUFFER_SIZE)))
-       {       for (k = 0 ; k < count ; k++)
-                       if (abs (buffer [k]) > max)
-                               max = abs (buffer [k]) ;
-               total += count ;
-               } ;
-
-       printf ("Total         : %d\n", total) ;
-       printf ("Maximun value : %d\n", max) ;
-
-       sf_close (file) ;
-
-       return 0 ;
-} /* main */
-
diff --git a/libs/libsndfile/tests/sfversion.c b/libs/libsndfile/tests/sfversion.c
deleted file mode 100644 (file)
index c464f08..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <sndfile.h>
-
-#define        BUFFER_SIZE     (256)
-
-
-int
-main (void)
-{      static char     strbuffer [BUFFER_SIZE] ;
-       const char * ver ;
-
-       sf_command (NULL, SFC_GET_LIB_VERSION, strbuffer, sizeof (strbuffer)) ;
-       ver = sf_version_string () ;
-
-       if (strcmp (ver, strbuffer) != 0)
-       {       printf ("Version mismatch : '%s' != '%s'\n\n", ver, strbuffer) ;
-               exit (1) ;
-               } ;
-
-       printf ("%s", strbuffer) ;
-
-       return 0 ;
-} /* main */
-
diff --git a/libs/libsndfile/tests/stdin_test.c b/libs/libsndfile/tests/stdin_test.c
deleted file mode 100644 (file)
index a893915..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
-** Copyright (C) 2001-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define        BUFFER_LEN              (1 << 16)
-
-static void    stdin_test      (int typemajor, int count) ;
-
-int
-main (int argc, char *argv [])
-{      int             do_all = 0, test_count = 0 ;
-
-       if (BUFFER_LEN < PIPE_TEST_LEN)
-       {       fprintf (stderr, "Error : BUFFER_LEN < PIPE_TEST_LEN.\n\n") ;
-               exit (1) ;
-               } ;
-
-       if (argc != 2)
-       {       fprintf (stderr, "This program cannot be run by itself. It needs\n") ;
-               fprintf (stderr, "to be run from the stdio_test program.\n") ;
-               exit (1) ;
-               } ;
-
-       do_all = ! strcmp (argv [1], "all") ;
-
-       if (do_all || ! strcmp (argv [1], "raw"))
-       {       stdin_test      (SF_FORMAT_RAW, PIPE_TEST_LEN) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "wav"))
-       {       stdin_test      (SF_FORMAT_WAV, PIPE_TEST_LEN) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "aiff"))
-       {       stdin_test      (SF_FORMAT_AIFF, PIPE_TEST_LEN) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "au"))
-       {       stdin_test      (SF_FORMAT_AU, PIPE_TEST_LEN) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "paf"))
-       {       stdin_test      (SF_FORMAT_PAF, PIPE_TEST_LEN) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "svx"))
-       {       stdin_test      (SF_FORMAT_SVX, PIPE_TEST_LEN) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "nist"))
-       {       stdin_test      (SF_FORMAT_NIST, PIPE_TEST_LEN) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "ircam"))
-       {       stdin_test      (SF_FORMAT_IRCAM, PIPE_TEST_LEN) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "voc"))
-       {       stdin_test      (SF_FORMAT_VOC, PIPE_TEST_LEN) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "w64"))
-       {       stdin_test      (SF_FORMAT_W64, PIPE_TEST_LEN) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "mat4"))
-       {       stdin_test      (SF_FORMAT_MAT4, PIPE_TEST_LEN) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "mat5"))
-       {       stdin_test      (SF_FORMAT_MAT5, PIPE_TEST_LEN) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "pvf"))
-       {       stdin_test      (SF_FORMAT_PVF, PIPE_TEST_LEN) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "htk"))
-       {       stdin_test      (SF_FORMAT_HTK, PIPE_TEST_LEN) ;
-               test_count++ ;
-               } ;
-
-       if (test_count == 0)
-       {       fprintf (stderr, "\n*****************************************\n") ;
-               fprintf (stderr, "*  stdin_test : No '%s' test defined.\n", argv [1]) ;
-               fprintf (stderr, "*****************************************\n") ;
-               return 1 ;
-               } ;
-
-       return 0 ;
-} /* main */
-
-static void
-stdin_test     (int typemajor, int count)
-{      static  short   data [BUFFER_LEN] ;
-
-       SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     k, total, err ;
-
-       if (typemajor == SF_FORMAT_RAW)
-       {       sfinfo.samplerate       = 44100 ;
-               sfinfo.format           = SF_FORMAT_RAW | SF_FORMAT_PCM_16 ;
-               sfinfo.channels         = 1 ;
-               sfinfo.frames           = 0 ;
-               }
-       else
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       if ((file = sf_open_fd (STDIN_FILENO, SFM_READ, &sfinfo, SF_TRUE)) == NULL)
-       {       fprintf (stderr, "sf_open_fd failed with error : ") ;
-               puts (sf_strerror (NULL)) ;
-               dump_log_buffer (NULL) ;
-               exit (1) ;
-               } ;
-
-       err = sf_error (file) ;
-       if (err != SF_ERR_NO_ERROR)
-       {       printf ("Line %d : unexpected error : %s\n", __LINE__, sf_error_number (err)) ;
-               exit (1) ;
-               } ;
-
-       if ((sfinfo.format & SF_FORMAT_TYPEMASK) != typemajor)
-       {       fprintf (stderr, "\n\nError : File type doesn't match.\n") ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.samplerate != 44100)
-       {       fprintf (stderr, "\n\nError : Sample rate (%d) should be 44100\n", sfinfo.samplerate) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       fprintf (stderr, "\n\nError : Channels (%d) should be 1\n", sfinfo.channels) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < count)
-       {       fprintf (stderr, "\n\nError : Sample count (%ld) should be %d\n", (long) sfinfo.frames, count) ;
-               exit (1) ;
-               } ;
-
-       total = 0 ;
-       while ((k = sf_read_short (file, data + total, BUFFER_LEN - total)) > 0)
-               total += k ;
-
-       if (total != count)
-       {       fprintf (stderr, "\n\nError : Expected %d frames, read %d.\n", count, total) ;
-               exit (1) ;
-               } ;
-
-       for (k = 0 ; k < total ; k++)
-               if (data [k] != PIPE_INDEX (k))
-               {       printf ("\n\nError : data [%d] == %d, should have been %d.\n\n", k, data [k], k) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       return ;
-} /* stdin_test */
-
diff --git a/libs/libsndfile/tests/stdio_test.c b/libs/libsndfile/tests/stdio_test.c
deleted file mode 100644 (file)
index 80a696c..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
-** Copyright (C) 2001-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*==========================================================================
-** This is a test program which tests reading from stdin and writing to
-** stdout.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#if HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-
-#include "utils.h"
-
-/* EMX is OS/2. */
-#if (OS_IS_WIN32) || defined (__EMX__)
-
-int
-main (void)
-{
-       puts ("    stdio_test : this test doesn't work on win32.") ;
-       return 0 ;
-} /* main */
-
-#else
-
-#ifndef WIFEXITED
-#define WIFEXITED(s) (((s) & 0xff) == 0)
-#endif
-#ifndef WEXITSTATUS
-#define WEXITSTATUS(s) (((s) & 0xff00) >> 8)
-#endif
-
-
-static size_t  file_length (const char *filename) ;
-static int             file_exists (const char *filename) ;
-static void            stdio_test (const char *filetype) ;
-
-static const char *filetypes [] =
-{      "raw", "wav", "aiff", "au", "paf", "svx", "nist", "ircam",
-       "voc", "w64", "mat4", "mat5", "pvf",
-       NULL
-} ;
-
-int
-main (void)
-{      int k ;
-
-       if (file_exists ("libsndfile.spec.in"))
-               exit_if_true (chdir ("tests") != 0, "\n    Error : chdir ('tests') failed.\n") ;
-
-       for (k = 0 ; filetypes [k] ; k++)
-               stdio_test (filetypes [k]) ;
-
-       return 0 ;
-} /* main */
-
-
-static void
-stdio_test (const char *filetype)
-{      static char buffer [256] ;
-
-       int file_size, retval ;
-
-       print_test_name ("stdio_test", filetype) ;
-
-       snprintf (buffer, sizeof (buffer), "./stdout_test %s > stdio.%s", filetype, filetype) ;
-       if ((retval = system (buffer)))
-       {       retval = WIFEXITED (retval) ? WEXITSTATUS (retval) : 1 ;
-               printf ("%s : %s", buffer, (strerror (retval))) ;
-               exit (1) ;
-               } ;
-
-       snprintf (buffer, sizeof (buffer), "stdio.%s", filetype) ;
-       if ((file_size = file_length (buffer)) < PIPE_TEST_LEN)
-       {       printf ("\n    Error : test file '%s' too small (%d).\n\n", buffer, file_size) ;
-               exit (1) ;
-               } ;
-
-       snprintf (buffer, sizeof (buffer), "./stdin_test %s < stdio.%s", filetype, filetype) ;
-       if ((retval = system (buffer)))
-       {       retval = WIFEXITED (retval) ? WEXITSTATUS (retval) : 1 ;
-               printf ("%s : %s", buffer, (strerror (retval))) ;
-               exit (1) ;
-               } ;
-
-       snprintf (buffer, sizeof (buffer), "rm stdio.%s", filetype) ;
-       if ((retval = system (buffer)))
-       {       retval = WIFEXITED (retval) ? WEXITSTATUS (retval) : 1 ;
-               printf ("%s : %s", buffer, (strerror (retval))) ;
-               exit (1) ;
-               } ;
-
-       puts ("ok") ;
-
-       return ;
-} /* stdio_test */
-
-
-
-
-static size_t
-file_length (const char *filename)
-{      struct stat buf ;
-
-       if (stat (filename, &buf))
-       {       perror (filename) ;
-               exit (1) ;
-               } ;
-
-       return buf.st_size ;
-} /* file_length */
-
-static int
-file_exists (const char *filename)
-{      struct stat buf ;
-
-       if (stat (filename, &buf))
-               return 0 ;
-
-       return 1 ;
-} /* file_exists */
-
-#endif
-
diff --git a/libs/libsndfile/tests/stdout_test.c b/libs/libsndfile/tests/stdout_test.c
deleted file mode 100644 (file)
index 850718d..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
-** Copyright (C) 2001-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-static void    stdout_test     (int typemajor, int count) ;
-
-int
-main (int argc, char *argv [])
-{      int             do_all, test_count = 0 ;
-
-       if (argc != 2)
-       {       fprintf (stderr, "This program cannot be run by itself. It needs\n") ;
-               fprintf (stderr, "to be run from the stdio_test program.\n") ;
-               exit (1) ;
-               } ;
-
-       do_all = ! strcmp (argv [1], "all") ;
-
-       if (do_all || ! strcmp (argv [1], "raw"))
-       {       stdout_test     (SF_FORMAT_RAW, PIPE_TEST_LEN) ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "wav"))
-       {       stdout_test     (SF_FORMAT_WAV, PIPE_TEST_LEN) ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "aiff"))
-       {       stdout_test     (SF_FORMAT_AIFF, PIPE_TEST_LEN) ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "au"))
-       {       stdout_test     (SF_FORMAT_AU, PIPE_TEST_LEN) ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "paf"))
-       {       stdout_test     (SF_FORMAT_PAF, PIPE_TEST_LEN) ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "svx"))
-       {       stdout_test     (SF_FORMAT_SVX, PIPE_TEST_LEN) ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "nist"))
-       {       stdout_test     (SF_FORMAT_NIST, PIPE_TEST_LEN) ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "ircam"))
-       {       stdout_test     (SF_FORMAT_IRCAM, PIPE_TEST_LEN) ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "voc"))
-       {       stdout_test     (SF_FORMAT_VOC, PIPE_TEST_LEN) ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "w64"))
-       {       stdout_test     (SF_FORMAT_W64, PIPE_TEST_LEN) ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "mat4"))
-       {       stdout_test     (SF_FORMAT_MAT4, PIPE_TEST_LEN) ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "mat5"))
-       {       stdout_test     (SF_FORMAT_MAT5, PIPE_TEST_LEN) ;
-               test_count ++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "pvf"))
-       {       stdout_test     (SF_FORMAT_PVF, PIPE_TEST_LEN) ;
-               test_count ++ ;
-               } ;
-
-       if (test_count == 0)
-       {       fprintf (stderr, "\n******************************************\n") ;
-               fprintf (stderr, "*  stdout_test : No '%s' test defined.\n", argv [1]) ;
-               fprintf (stderr, "******************************************\n") ;
-               return 1 ;
-               } ;
-
-       return 0 ;
-} /* main */
-
-static void
-stdout_test    (int typemajor, int count)
-{      static  short   data [PIPE_TEST_LEN] ;
-
-       SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     k, total, this_write ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.format           = (typemajor | SF_FORMAT_PCM_16) ;
-       sfinfo.channels         = 1 ;
-       sfinfo.frames           = 0 ;
-
-       /* Create some random data. */
-       for (k = 0 ; k < PIPE_TEST_LEN ; k++)
-               data [k] = PIPE_INDEX (k) ;
-
-       if ((file = sf_open ("-", SFM_WRITE, &sfinfo)) == NULL)
-       {       fprintf (stderr, "sf_open_write failed with error : ") ;
-               fprintf (stderr, "%s\n", sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       total = 0 ;
-
-       while (total < count)
-       {       this_write = (count - total > 1024) ? 1024 : count - total ;
-               if ((k = sf_write_short (file, data + total, this_write)) != this_write)
-               {       fprintf (stderr, "sf_write_short # %d failed with short write (%d -> %d)\n", count, this_write, k) ;
-                       exit (1) ;
-                       } ;
-               total += k ;
-               } ;
-
-       sf_close (file) ;
-
-       return ;
-} /* stdout_test */
-
diff --git a/libs/libsndfile/tests/string_test.c b/libs/libsndfile/tests/string_test.c
deleted file mode 100644 (file)
index eac716e..0000000
+++ /dev/null
@@ -1,795 +0,0 @@
-/*
-** Copyright (C) 2003-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include       <sndfile.h>
-
-#include       "utils.h"
-
-#define        BUFFER_LEN                      (1 << 10)
-#define LOG_BUFFER_SIZE                1024
-
-static void    string_start_test (const char *filename, int typemajor) ;
-static void    string_start_end_test (const char *filename, int typemajor) ;
-static void    string_multi_set_test (const char *filename, int typemajor) ;
-static void    string_rdwr_test (const char *filename, int typemajor) ;
-static void    string_short_rdwr_test (const char *filename, int typemajor) ;
-static void    string_rdwr_grow_test (const char *filename, int typemajor) ;
-static void    string_header_update (const char *filename, int typemajor) ;
-
-static void    software_string_test (const char *filename) ;
-
-static int str_count (const char * haystack, const char * needle) ;
-
-int
-main (int argc, char *argv [])
-{      int             do_all = 0 ;
-       int             test_count = 0 ;
-
-       if (argc != 2)
-       {       printf ("Usage : %s <test>\n", argv [0]) ;
-               printf ("    Where <test> is one of the following:\n") ;
-               printf ("           wav  - test adding strings to WAV files\n") ;
-               printf ("           aiff - test adding strings to AIFF files\n") ;
-               printf ("           flac - test adding strings to FLAC files\n") ;
-               printf ("           ogg  - test adding strings to OGG files\n") ;
-               printf ("           all  - perform all tests\n") ;
-               exit (1) ;
-               } ;
-
-       do_all = ! strcmp (argv [1], "all") ;
-
-       if (do_all || ! strcmp (argv [1], "wav"))
-       {       string_start_end_test ("strings.wav", SF_FORMAT_WAV) ;
-               string_multi_set_test ("multi.wav", SF_FORMAT_WAV) ;
-               string_rdwr_test ("rdwr.wav", SF_FORMAT_WAV) ;
-               string_short_rdwr_test ("short_rdwr.wav", SF_FORMAT_WAV) ;
-               string_rdwr_grow_test ("rdwr_grow.wav", SF_FORMAT_WAV) ;
-               string_header_update ("header_update.wav", SF_FORMAT_WAV) ;
-
-               string_start_end_test ("strings.wavex", SF_FORMAT_WAVEX) ;
-               string_multi_set_test ("multi.wavex", SF_FORMAT_WAVEX) ;
-               string_rdwr_test ("rdwr.wavex", SF_FORMAT_WAVEX) ;
-               string_short_rdwr_test ("short_rdwr.wavex", SF_FORMAT_WAVEX) ;
-
-               string_start_end_test ("strings.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV) ;
-               string_multi_set_test ("multi.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV) ;
-               string_rdwr_test ("rdwr.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV) ;
-               string_short_rdwr_test ("short_rdwr.rifx", SF_ENDIAN_BIG | SF_FORMAT_WAV) ;
-
-               software_string_test ("software_string.wav") ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "aiff"))
-       {       string_start_end_test ("strings.aiff", SF_FORMAT_AIFF) ;
-               /*
-               TODO : Fix src/aiff.c so these tests pass.
-               string_multi_set_test ("multi.aiff", SF_FORMAT_AIFF) ;
-               string_rdwr_test ("rdwr.aiff", SF_FORMAT_AIFF) ;
-               string_short_rdwr_test ("short_rdwr.aiff", SF_FORMAT_AIFF) ;
-               string_rdwr_grow_test ("rdwr_grow.aiff", SF_FORMAT_AIFF) ;
-               string_header_update ("header_update.aiff", SF_FORMAT_AIFF) ;
-               */
-
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "flac"))
-       {       if (HAVE_EXTERNAL_LIBS)
-                       string_start_test ("strings.flac", SF_FORMAT_FLAC) ;
-               else
-                       puts ("    No FLAC tests because FLAC support was not compiled in.") ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "ogg"))
-       {       if (HAVE_EXTERNAL_LIBS)
-                       string_start_test ("vorbis.oga", SF_FORMAT_OGG) ;
-               else
-                       puts ("    No Ogg/Vorbis tests because Ogg/Vorbis support was not compiled in.") ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "rf64"))
-       {       puts ("\n\n     **** String test not working yet for RF64 format. ****\n") ;
-               /*
-               string_start_end_test ("strings.rf64", SF_FORMAT_RF64) ;
-               string_multi_set_test ("multi.rf64", SF_FORMAT_RF64) ;
-               string_rdwr_test ("rdwr.rf64", SF_FORMAT_RF64) ;
-               string_short_rdwr_test ("short_rdwr.rf64", SF_FORMAT_RF64) ;
-               */
-               test_count++ ;
-               } ;
-
-       if (test_count == 0)
-       {       printf ("Mono : ************************************\n") ;
-               printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-               printf ("Mono : ************************************\n") ;
-               return 1 ;
-               } ;
-
-       return 0 ;
-} /* main */
-
-
-/*============================================================================================
-**     Here are the test functions.
-*/
-
-static const char
-       software        []      = "software (libsndfile-X.Y.Z)",
-       artist          []      = "The Artist",
-       copyright       []      = "Copyright (c) 2001 Artist",
-       comment         []      = "Comment goes here!!!",
-       date            []      = "2001/01/27",
-       album           []      = "The Album",
-       license         []      = "The license",
-       title           []      = "This is the title",
-       long_title      []      = "This is a very long and very boring title for this file",
-       long_artist     []      = "The artist who kept on changing its name",
-       genre           []      = "The genre",
-       trackno         []      = "Track three" ;
-
-
-static short   data_out [BUFFER_LEN] ;
-
-static void
-string_start_end_test (const char *filename, int typemajor)
-{      const char      *cptr ;
-       SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     errors = 0 ;
-
-       print_test_name ("string_start_end_test", filename) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.channels         = 1 ;
-       sfinfo.frames           = 0 ;
-       sfinfo.format           = typemajor | SF_FORMAT_PCM_16 ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       /* Write stuff at start of file. */
-       sf_set_string (file, SF_STR_TITLE, filename) ;
-       sf_set_string (file, SF_STR_SOFTWARE, software) ;
-       sf_set_string (file, SF_STR_ARTIST, artist) ;
-       sf_set_string (file, SF_STR_GENRE, genre) ;
-       sf_set_string (file, SF_STR_TRACKNUMBER, trackno) ;
-
-       /* Write data to file. */
-       test_write_short_or_die (file, 0, data_out, BUFFER_LEN, __LINE__) ;
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       /* Write more stuff at end of file. */
-       sf_set_string (file, SF_STR_COPYRIGHT, copyright) ;
-       sf_set_string (file, SF_STR_COMMENT, comment) ;
-       sf_set_string (file, SF_STR_DATE, date) ;
-       sf_set_string (file, SF_STR_ALBUM, album) ;
-       sf_set_string (file, SF_STR_LICENSE, license) ;
-
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       if (sfinfo.frames != BUFFER_LEN)
-       {       printf ("***** Bad frame count %d (should be %d)\n\n", (int) sfinfo.frames, BUFFER_LEN) ;
-               errors ++ ;
-               } ;
-
-       cptr = sf_get_string (file, SF_STR_TITLE) ;
-       if (cptr == NULL || strcmp (filename, cptr) != 0)
-       {       if (errors++ == 0)
-                       puts ("\n") ;
-               printf ("    Bad filename  : %s\n", cptr) ;
-               } ;
-
-       cptr = sf_get_string (file, SF_STR_COPYRIGHT) ;
-       if (cptr == NULL || strcmp (copyright, cptr) != 0)
-       {       if (errors++ == 0)
-                       puts ("\n") ;
-               printf ("    Bad copyright : %s\n", cptr) ;
-               } ;
-
-       cptr = sf_get_string (file, SF_STR_SOFTWARE) ;
-       if (cptr == NULL || strstr (cptr, software) != cptr)
-       {       if (errors++ == 0)
-                       puts ("\n") ;
-               printf ("    Bad software  : %s\n", cptr) ;
-               } ;
-
-       if (str_count (cptr, "libsndfile") != 1)
-       {       if (errors++ == 0)
-                       puts ("\n") ;
-               printf ("    Bad software  : %s\n", cptr) ;
-               } ;
-
-       cptr = sf_get_string (file, SF_STR_ARTIST) ;
-       if (cptr == NULL || strcmp (artist, cptr) != 0)
-       {       if (errors++ == 0)
-                       puts ("\n") ;
-               printf ("    Bad artist    : %s\n", cptr) ;
-               } ;
-
-       cptr = sf_get_string (file, SF_STR_COMMENT) ;
-       if (cptr == NULL || strcmp (comment, cptr) != 0)
-       {       if (errors++ == 0)
-                       puts ("\n") ;
-               printf ("    Bad comment   : %s\n", cptr) ;
-               } ;
-
-       if (typemajor != SF_FORMAT_AIFF)
-       {       cptr = sf_get_string (file, SF_STR_DATE) ;
-               if (cptr == NULL || strcmp (date, cptr) != 0)
-               {       if (errors++ == 0)
-                               puts ("\n") ;
-                       printf ("    Bad date      : %s\n", cptr) ;
-                       } ;
-
-               cptr = sf_get_string (file, SF_STR_GENRE) ;
-               if (cptr == NULL || strcmp (genre, cptr) != 0)
-               {       if (errors++ == 0)
-                               puts ("\n") ;
-                       printf ("    Bad genre     : %s\n", cptr) ;
-                       } ;
-               } ;
-
-       switch (typemajor)
-       {       case SF_FORMAT_AIFF :
-               case SF_FORMAT_WAV :
-               case SF_FORMAT_WAVEX :
-               case SF_ENDIAN_BIG | SF_FORMAT_WAV :
-                       break ;
-
-               default :
-                       cptr = sf_get_string (file, SF_STR_ALBUM) ;
-                       if (cptr == NULL || strcmp (album, cptr) != 0)
-                       {       if (errors++ == 0)
-                                       puts ("\n") ;
-                               printf ("    Bad album   : %s\n", cptr) ;
-                               } ;
-
-                       cptr = sf_get_string (file, SF_STR_LICENSE) ;
-                       if (cptr == NULL || strcmp (license, cptr) != 0)
-                       {       if (errors++ == 0)
-                                       puts ("\n") ;
-                               printf ("    Bad license : %s\n", cptr) ;
-                               } ;
-
-                       cptr = sf_get_string (file, SF_STR_TRACKNUMBER) ;
-                       if (cptr == NULL || strcmp (genre, cptr) != 0)
-                       {       if (errors++ == 0)
-                                       puts ("\n") ;
-                               printf ("    Bad track no. : %s\n", cptr) ;
-                               } ;
-                       break ;
-               } ;
-
-       if (errors > 0)
-       {       printf ("\n*** Error count : %d ***\n\n", errors) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-       unlink (filename) ;
-
-       puts ("ok") ;
-} /* string_start_end_test */
-
-static void
-string_start_test (const char *filename, int typemajor)
-{      const char      *cptr ;
-       SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     errors = 0 ;
-
-       print_test_name ("string_start_test", filename) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.channels         = 1 ;
-       sfinfo.frames           = 0 ;
-
-       switch (typemajor)
-       {       case SF_FORMAT_OGG :
-                       sfinfo.format = typemajor | SF_FORMAT_VORBIS ;
-                       break ;
-
-               default :
-                       sfinfo.format = typemajor | SF_FORMAT_PCM_16 ;
-                       break ;
-               } ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       /* Write stuff at start of file. */
-       sf_set_string (file, SF_STR_TITLE, filename) ;
-       sf_set_string (file, SF_STR_SOFTWARE, software) ;
-       sf_set_string (file, SF_STR_ARTIST, artist) ;
-       sf_set_string (file, SF_STR_COPYRIGHT, copyright) ;
-       sf_set_string (file, SF_STR_COMMENT, comment) ;
-       sf_set_string (file, SF_STR_DATE, date) ;
-       sf_set_string (file, SF_STR_ALBUM, album) ;
-       sf_set_string (file, SF_STR_LICENSE, license) ;
-
-       /* Write data to file. */
-       test_write_short_or_die (file, 0, data_out, BUFFER_LEN, __LINE__) ;
-
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       if (sfinfo.frames != BUFFER_LEN)
-       {       printf ("***** Bad frame count %d (should be %d)\n\n", (int) sfinfo.frames, BUFFER_LEN) ;
-               errors ++ ;
-               } ;
-
-       cptr = sf_get_string (file, SF_STR_TITLE) ;
-       if (cptr == NULL || strcmp (filename, cptr) != 0)
-       {       if (errors++ == 0)
-                       puts ("\n") ;
-               printf ("    Bad filename  : %s\n", cptr) ;
-               } ;
-
-       cptr = sf_get_string (file, SF_STR_COPYRIGHT) ;
-       if (cptr == NULL || strcmp (copyright, cptr) != 0)
-       {       if (errors++ == 0)
-                       puts ("\n") ;
-               printf ("    Bad copyright : %s\n", cptr) ;
-               } ;
-
-       cptr = sf_get_string (file, SF_STR_SOFTWARE) ;
-       if (cptr == NULL || strstr (cptr, software) != cptr)
-       {       if (errors++ == 0)
-                       puts ("\n") ;
-               printf ("    Bad software  : %s\n", cptr) ;
-               } ;
-
-       if (str_count (cptr, "libsndfile") != 1)
-       {       if (errors++ == 0)
-                       puts ("\n") ;
-               printf ("    Bad software  : %s\n", cptr) ;
-               } ;
-
-       cptr = sf_get_string (file, SF_STR_ARTIST) ;
-       if (cptr == NULL || strcmp (artist, cptr) != 0)
-       {       if (errors++ == 0)
-                       puts ("\n") ;
-               printf ("    Bad artist    : %s\n", cptr) ;
-               } ;
-
-       cptr = sf_get_string (file, SF_STR_COMMENT) ;
-       if (cptr == NULL || strcmp (comment, cptr) != 0)
-       {       if (errors++ == 0)
-                       puts ("\n") ;
-               printf ("    Bad comment   : %s\n", cptr) ;
-               } ;
-
-       if (typemajor != SF_FORMAT_AIFF)
-       {       cptr = sf_get_string (file, SF_STR_DATE) ;
-               if (cptr == NULL || strcmp (date, cptr) != 0)
-               {       if (errors++ == 0)
-                               puts ("\n") ;
-                       printf ("    Bad date      : %s\n", cptr) ;
-                       } ;
-               } ;
-
-       if (typemajor != SF_FORMAT_WAV && typemajor != SF_FORMAT_AIFF)
-       {       cptr = sf_get_string (file, SF_STR_ALBUM) ;
-               if (cptr == NULL || strcmp (album, cptr) != 0)
-               {       if (errors++ == 0)
-                               puts ("\n") ;
-                       printf ("    Bad album     : %s\n", cptr) ;
-                       } ;
-               } ;
-
-       if (typemajor != SF_FORMAT_WAV && typemajor != SF_FORMAT_AIFF)
-       {       cptr = sf_get_string (file, SF_STR_LICENSE) ;
-               if (cptr == NULL || strcmp (license, cptr) != 0)
-               {       if (errors++ == 0)
-                               puts ("\n") ;
-                       printf ("    Bad license   : %s\n", cptr) ;
-                       } ;
-               } ;
-
-       if (errors > 0)
-       {       printf ("\n*** Error count : %d ***\n\n", errors) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-       unlink (filename) ;
-
-       puts ("ok") ;
-} /* string_start_test */
-
-static void
-string_multi_set_test (const char *filename, int typemajor)
-{      static const char
-               new_software    []      = "new software (libsndfile-X.Y.Z)",
-               new_copyright   []      = "Copyright (c) 2001 New Artist",
-               new_artist              []      = "The New Artist",
-               new_title               []      = "This is the new title" ;
-
-       static char buffer [2048] ;
-       SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int                     count ;
-
-       print_test_name (__func__, filename) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.format           = typemajor | SF_FORMAT_PCM_16 ;
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.channels         = 1 ;
-       sfinfo.frames           = 0 ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-
-       /* Write stuff at start of file. */
-       sf_set_string (file, SF_STR_TITLE, title) ;
-       sf_set_string (file, SF_STR_SOFTWARE, software) ;
-       sf_set_string (file, SF_STR_ARTIST, artist) ;
-
-       /* Write data to file. */
-       test_write_short_or_die (file, 0, data_out, BUFFER_LEN, __LINE__) ;
-
-       /* Write it all again. */
-
-       sf_set_string (file, SF_STR_TITLE, new_title) ;
-       sf_set_string (file, SF_STR_SOFTWARE, new_software) ;
-       sf_set_string (file, SF_STR_ARTIST, new_artist) ;
-
-       sf_set_string (file, SF_STR_COPYRIGHT, copyright) ;
-       sf_set_string (file, SF_STR_COMMENT, comment) ;
-       sf_set_string (file, SF_STR_DATE, date) ;
-       sf_set_string (file, SF_STR_ALBUM, album) ;
-       sf_set_string (file, SF_STR_LICENSE, license) ;
-       sf_set_string (file, SF_STR_COPYRIGHT, new_copyright) ;
-       sf_set_string (file, SF_STR_COMMENT, comment) ;
-       sf_set_string (file, SF_STR_DATE, date) ;
-       sf_set_string (file, SF_STR_ALBUM, album) ;
-       sf_set_string (file, SF_STR_LICENSE, license) ;
-
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       sf_command      (file, SFC_GET_LOG_INFO, buffer, sizeof (buffer)) ;
-       sf_close (file) ;
-
-       count = str_count (buffer, new_title) ;
-       exit_if_true (count < 1, "\n\nLine %d : Could not find new_title in :\n%s\n", __LINE__, buffer) ;
-       exit_if_true (count > 1, "\n\nLine %d : new_title appears %d times in :\n\n%s\n", __LINE__, count, buffer) ;
-
-       count = str_count (buffer, software) ;
-       exit_if_true (count < 1, "\n\nLine %d : Could not find new_software in :\n%s\n", __LINE__, buffer) ;
-       exit_if_true (count > 1, "\n\nLine %d : new_software appears %d times in :\n\n%s\n", __LINE__, count, buffer) ;
-
-       count = str_count (buffer, new_artist) ;
-       exit_if_true (count < 1, "\n\nLine %d : Could not find new_artist in :\n%s\n", __LINE__, buffer) ;
-       exit_if_true (count > 1, "\n\nLine %d : new_artist appears %d times in :\n\n%s\n", __LINE__, count, buffer) ;
-
-       count = str_count (buffer, new_copyright) ;
-       exit_if_true (count < 1, "\n\nLine %d : Could not find new_copyright in :\n%s\n", __LINE__, buffer) ;
-       exit_if_true (count > 1, "\n\nLine %d : new_copyright appears %d times in :\n\n%s\n", __LINE__, count, buffer) ;
-
-       unlink (filename) ;
-
-       puts ("ok") ;
-} /* string_multi_set_test */
-
-static void
-string_rdwr_test (const char *filename, int typemajor)
-{      SNDFILE *file ;
-       SF_INFO sfinfo ;
-       sf_count_t frames ;
-       const char * str ;
-
-       print_test_name (__func__, filename) ;
-       create_short_sndfile (filename, typemajor | SF_FORMAT_PCM_16, 2) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_FALSE, __LINE__) ;
-       frames = sfinfo.frames ;
-       sf_set_string (file, SF_STR_TITLE, title) ;
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-       exit_if_true (frames != sfinfo.frames, "\n\nLine %d : Frame count %" PRId64 " should be %" PRId64 ".\n", __LINE__, sfinfo.frames, frames) ;
-       str = sf_get_string (file, SF_STR_TITLE) ;
-       exit_if_true (str == NULL, "\n\nLine %d : SF_STR_TITLE string is NULL.\n", __LINE__) ;
-       exit_if_true (strcmp (str, title) != 0, "\n\nLine %d : SF_STR_TITLE doesn't match what was written.\n", __LINE__) ;
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_FALSE, __LINE__) ;
-       frames = sfinfo.frames ;
-       sf_set_string (file, SF_STR_TITLE, title) ;
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_FALSE, __LINE__) ;
-       str = sf_get_string (file, SF_STR_TITLE) ;
-       exit_if_true (str == NULL, "\n\nLine %d : SF_STR_TITLE string is NULL.\n", __LINE__) ;
-       sf_set_string (file, SF_STR_ARTIST, artist) ;
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-       str = sf_get_string (file, SF_STR_ARTIST) ;
-       exit_if_true (str == NULL, "\n\nLine %d : SF_STR_ARTIST string is NULL.\n", __LINE__) ;
-       exit_if_true (strcmp (str, artist) != 0, "\n\nLine %d : SF_STR_ARTIST doesn't match what was written.\n", __LINE__) ;
-
-       str = sf_get_string (file, SF_STR_TITLE) ;
-       exit_if_true (str == NULL, "\n\nLine %d : SF_STR_TITLE string is NULL.\n", __LINE__) ;
-       exit_if_true (strcmp (str, title) != 0, "\n\nLine %d : SF_STR_TITLE doesn't match what was written.\n", __LINE__) ;
-
-       exit_if_true (frames != sfinfo.frames, "\n\nLine %d : Frame count %" PRId64 " should be %" PRId64 ".\n", __LINE__, sfinfo.frames, frames) ;
-
-       sf_close (file) ;
-       unlink (filename) ;
-
-       puts ("ok") ;
-} /* string_rdwr_test */
-
-static void
-string_short_rdwr_test (const char *filename, int typemajor)
-{      SNDFILE *file ;
-       SF_INFO sfinfo ;
-       sf_count_t frames = BUFFER_LEN ;
-       const char * str ;
-
-       print_test_name (__func__, filename) ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.format           = typemajor | SF_FORMAT_PCM_16 ;
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.channels         = 1 ;
-       sfinfo.frames           = 0 ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-
-       /* Write data to file. */
-       test_write_short_or_die (file, 0, data_out, BUFFER_LEN, __LINE__) ;
-
-       sf_set_string (file, SF_STR_TITLE, long_title) ;
-       sf_set_string (file, SF_STR_ARTIST, long_artist) ;
-       sf_close (file) ;
-
-       /* Open the file RDWR. */
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_FALSE, __LINE__) ;
-       exit_if_true (frames != sfinfo.frames, "\n\nLine %d : Frame count %" PRId64 " should be %" PRId64 ".\n", __LINE__, sfinfo.frames, frames) ;
-       str = sf_get_string (file, SF_STR_TITLE) ;
-       exit_if_true (str == NULL, "\n\nLine %d : SF_STR_TITLE string is NULL.\n", __LINE__) ;
-       exit_if_true (strcmp (str, long_title) != 0, "\n\nLine %d : SF_STR_TITLE doesn't match what was written.\n", __LINE__) ;
-       str = sf_get_string (file, SF_STR_ARTIST) ;
-       exit_if_true (str == NULL, "\n\nLine %d : SF_STR_TITLE string is NULL.\n", __LINE__) ;
-       exit_if_true (strcmp (str, long_artist) != 0, "\n\nLine %d : SF_STR_ARTIST doesn't match what was written.\n", __LINE__) ;
-
-       /* Change title and artist. */
-       sf_set_string (file, SF_STR_TITLE, title) ;
-       sf_set_string (file, SF_STR_ARTIST, artist) ;
-
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       str = sf_get_string (file, SF_STR_TITLE) ;
-       exit_if_true (str == NULL, "\n\nLine %d : SF_STR_TITLE string is NULL.\n", __LINE__) ;
-       exit_if_true (strcmp (str, title) != 0, "\n\nLine %d : SF_STR_TITLE doesn't match what was written.\n", __LINE__) ;
-
-       str = sf_get_string (file, SF_STR_ARTIST) ;
-       exit_if_true (str == NULL, "\n\nLine %d : SF_STR_ARTIST string is NULL.\n", __LINE__) ;
-       exit_if_true (strcmp (str, artist) != 0, "\n\nLine %d : SF_STR_ARTIST doesn't match what was written.\n", __LINE__) ;
-
-       sf_close (file) ;
-       unlink (filename) ;
-
-       puts ("ok") ;
-} /* string_short_rdwr_test */
-
-static int
-str_count (const char * haystack, const char * needle)
-{      int count = 0 ;
-
-       while ((haystack = strstr (haystack, needle)) != NULL)
-       {       count ++ ;
-               haystack ++ ;
-               } ;
-
-       return count ;
-} /* str_count */
-
-#define MIN(a, b)      ((a) < (b) ? (a) : (b))
-
-static void
-software_string_test (const char *filename)
-{      size_t k ;
-
-       print_test_name (__func__, filename) ;
-
-       for (k = 0 ; k < 50 ; k++)
-       {       const char *result ;
-               char sfname [64] = "" ;
-               SNDFILE *file ;
-               SF_INFO info ;
-
-               sf_info_setup (&info, SF_FORMAT_WAV | SF_FORMAT_PCM_16, 44100, 1) ;
-               file = test_open_file_or_die (filename, SFM_WRITE, &info, SF_TRUE, __LINE__) ;
-
-               snprintf (sfname, MIN (k, sizeof (sfname)), "%s", "abcdefghijklmnopqrestvwxyz0123456789abcdefghijklmnopqrestvwxyz") ;
-
-               exit_if_true (sf_set_string (file, SF_STR_SOFTWARE, sfname),
-                       "\n\nLine %d : sf_set_string (f, SF_STR_SOFTWARE, '%s') failed : %s\n", __LINE__, sfname, sf_strerror (file)) ;
-
-               sf_close (file) ;
-
-               file = test_open_file_or_die (filename, SFM_READ, &info, SF_TRUE, __LINE__) ;
-               result = sf_get_string (file, SF_STR_SOFTWARE) ;
-
-               exit_if_true (result == NULL, "\n\nLine %d : sf_get_string (file, SF_STR_SOFTWARE) returned NULL.\n\n", __LINE__) ;
-
-               exit_if_true (strstr (result, sfname) != result,
-                       "\n\nLine %d : Can't fine string '%s' in '%s'\n\n", __LINE__, sfname, result) ;
-               sf_close (file) ;
-               } ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-} /* software_string_test */
-
-
-static void
-string_rdwr_grow_test (const char *filename, int typemajor)
-{      SNDFILE *file ;
-       SF_INFO sfinfo ;
-       sf_count_t frames ;
-       const char * str ;
-
-       print_test_name (__func__, filename) ;
-
-       /* Create a file that contains some strings. Then open the file in RDWR mode and
-                grow the file by writing more audio data to it. Check that the audio data has
-                been added to the file, and that the strings are still there. */
-
-       /* Create a short file that contains a string. */
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.channels         = 2 ;
-       sfinfo.frames           = 0 ;
-       sfinfo.format           = typemajor | SF_FORMAT_PCM_16 ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       /* Write data to file. */
-       test_write_short_or_die (file, 0, data_out, BUFFER_LEN, __LINE__) ;
-
-       /* Write some strings at end of file. */
-       sf_set_string (file, SF_STR_TITLE , title) ;
-       sf_set_string (file, SF_STR_COMMENT, comment) ;
-       sf_close (file) ;
-
-
-       /* Now open file again in SFM_RDWR mode and write more audio data to it. */
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-       /* Write more data to file.  */
-       test_write_short_or_die (file, 0, data_out, BUFFER_LEN, __LINE__) ;
-       sf_close (file) ;
-
-
-       /* Now open file again. It should now contain two BUFFER_LEN's worth of frames and the strings. */
-       frames = 2 * BUFFER_LEN / sfinfo.channels ;
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       exit_if_true (frames != sfinfo.frames, "\n\nLine %d : Frame count %" PRId64 " should be %" PRId64 ".\n", __LINE__, sfinfo.frames, frames) ;
-
-       /* Check the strings */
-       str = sf_get_string (file, SF_STR_TITLE) ;
-       exit_if_true (str == NULL, "\n\nLine %d : SF_STR_TITLE string is NULL.\n", __LINE__) ;
-       exit_if_true (strcmp (str, title) != 0, "\n\nLine %d : SF_STR_TITLE doesn't match what was written.\n", __LINE__) ;
-
-       str = sf_get_string (file, SF_STR_COMMENT) ;
-       exit_if_true (str == NULL, "\n\nLine %d : SF_STR_COMMENT string is NULL.\n", __LINE__) ;
-       exit_if_true (strcmp (str, comment) != 0, "\n\nLine %d : SF_STR_COMMENT doesn't match what was written.\n", __LINE__) ;
-
-       sf_close (file) ;
-       unlink (filename) ;
-
-       puts ("ok") ;
-} /* string_rdwr_grow_test */
-
-static void
-string_header_update (const char *filename, int typemajor)
-{      SNDFILE *file , *file1 ;
-       SF_INFO sfinfo , sfinfo1 ;
-       sf_count_t frames ;
-       const char * str ;
-       const int GROW_BUFFER_AMOUNT = 4 ; /* this should be less than half the size of the string header */
-
-       print_test_name (__func__, filename) ;
-
-       /* Create a short file. */
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.channels         = 2 ;
-       sfinfo.frames           = 0 ;
-       sfinfo.format           = typemajor | SF_FORMAT_PCM_16 ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-       test_write_short_or_die (file, 0, data_out, BUFFER_LEN, __LINE__) ;
-       sf_set_string (file, SF_STR_TITLE, long_title) ;
-       sf_close (file) ;
-
-
-       /* Check that SFC_UPDATE_HEADER_NOW correctly calculates datalength. */
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-       /* Write a very small amount of new audio data that doesn't completely overwrite the existing header. */
-       test_write_short_or_die (file, 0, data_out, GROW_BUFFER_AMOUNT, __LINE__) ;
-
-       /* Update the header without closing the file. */
-       sf_command (file, SFC_UPDATE_HEADER_NOW, NULL, 0) ;
-
-       /* The file should now contain BUFFER_LEN + GROW_BUFFER_AMOUNT frames.
-               Open a second handle to the file and check the reported length. */
-       memset (&sfinfo1, 0, sizeof (sfinfo1)) ;
-       file1 = test_open_file_or_die (filename, SFM_READ, &sfinfo1, SF_TRUE, __LINE__) ;
-
-       frames = (BUFFER_LEN + GROW_BUFFER_AMOUNT) / sfinfo.channels ;
-       exit_if_true (frames != sfinfo1.frames, "\n\nLine %d : Frame count %" PRId64 " should be %" PRId64 ".\n", __LINE__, sfinfo1.frames, frames) ;
-
-       /* The strings are probably not readable by the second soundfile handle because write_tailer has not yet been called.
-               It's a design decision whether SFC_UPDATE_HEADER_NOW should write the tailer. I think it's fine that it doesn't.  */
-
-       sf_close (file1) ;
-       sf_close (file) ;
-
-
-       /* Check that sf_close correctly calculates datalength. */
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, SF_TRUE, __LINE__) ;
-       /* Write a very small amount of new audio data that doesn't completely overwrite the existing header. */
-       test_write_short_or_die (file, 0, data_out, GROW_BUFFER_AMOUNT, __LINE__) ;
-       sf_close (file) ;
-
-
-       /* Open file again and verify data and string. */
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
-       frames = (BUFFER_LEN + 2*GROW_BUFFER_AMOUNT) / sfinfo.channels ;
-       exit_if_true (frames != sfinfo.frames, "\n\nLine %d : Frame count %" PRId64 " should be %" PRId64 ".\n", __LINE__, sfinfo.frames, frames) ;
-       str = sf_get_string (file, SF_STR_TITLE) ;
-       exit_if_true (str == NULL, "\n\nLine %d : SF_STR_TITLE string is NULL.\n", __LINE__) ;
-       exit_if_true (strcmp (str, long_title) != 0, "\n\nLine %d : SF_STR_TITLE doesn't match what was written.\n", __LINE__) ;
-       sf_close (file) ;
-       unlink (filename) ;
-       puts ("ok") ;
-} /* string_header_update */
diff --git a/libs/libsndfile/tests/test_wrapper.sh.in b/libs/libsndfile/tests/test_wrapper.sh.in
deleted file mode 100644 (file)
index daf030b..0000000
+++ /dev/null
@@ -1,365 +0,0 @@
-#!/bin/sh
-
-# Copyright (C) 2008-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-#
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-#       notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above copyright
-#       notice, this list of conditions and the following disclaimer in
-#       the documentation and/or other materials provided with the
-#       distribution.
-#     * Neither the author nor the names of any contributors may be used
-#       to endorse or promote products derived from this software without
-#       specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-HOST_TRIPLET=@HOST_TRIPLET@
-PACKAGE_VERSION=@PACKAGE_VERSION@
-LIB_VERSION=`echo $PACKAGE_VERSION | sed "s/[a-z].*//"`
-
-if test -f tests/sfversion@EXEEXT@ ; then
-       cd tests
-       fi
-
-if test ! -f sfversion@EXEEXT@ ; then
-       echo "Not able to find test executables."
-       exit 1
-       fi
-
-if test -f libsndfile.so.$LIB_VERSION ; then
-       # This will work on Linux, but not on Mac.
-       # Windows is already sorted out.
-       export LD_LIBRARY_PATH=`pwd`
-       if test ! -f libsndfile.so.1 ; then
-               ln -s libsndfile.so.$LIB_VERSION libsndfile.so.1
-               fi
-       fi
-
-sfversion=`./sfversion@EXEEXT@ | sed "s/-exp$//"`
-
-if test $sfversion != libsndfile-$PACKAGE_VERSION ; then
-       echo "Error : sfversion ($sfversion) and PACKAGE_VERSION ($PACKAGE_VERSION) don't match."
-       exit 1
-       fi
-
-# Force exit on errors.
-set -e
-
-# Generic-tests
-uname -a
-
-# Check the header file.
-sh pedantic-header-test.sh
-
-# Need this for when we're running from files collected into the
-# libsndfile-testsuite-@PACKAGE_VERSION@ tarball.
-if test -x test_main@EXEEXT@ ; then
-       echo "Running unit tests from src/ directory of source code tree."
-       ./test_main@EXEEXT@
-       echo
-       echo "Running end-to-end tests from tests/ directory."
-       fi
-
-./error_test@EXEEXT@
-./pcm_test@EXEEXT@
-./ulaw_test@EXEEXT@
-./alaw_test@EXEEXT@
-./dwvw_test@EXEEXT@
-./command_test@EXEEXT@ ver
-./command_test@EXEEXT@ norm
-./command_test@EXEEXT@ format
-./command_test@EXEEXT@ peak
-./command_test@EXEEXT@ trunc
-./command_test@EXEEXT@ inst
-./command_test@EXEEXT@ current_sf_info
-./command_test@EXEEXT@ bext
-./command_test@EXEEXT@ bextch
-./command_test@EXEEXT@ chanmap
-./command_test@EXEEXT@ cart
-./floating_point_test@EXEEXT@
-./checksum_test@EXEEXT@
-./scale_clip_test@EXEEXT@
-./headerless_test@EXEEXT@
-./rdwr_test@EXEEXT@
-./locale_test@EXEEXT@
-./win32_ordinal_test@EXEEXT@
-./external_libs_test@EXEEXT@
-./format_check_test@EXEEXT@
-./channel_test@EXEEXT@
-
-# The w64 G++ compiler requires an extra runtime DLL which we don't have,
-# so skip this test.
-case "$HOST_TRIPLET" in
-       x86_64-w64-mingw32)
-               ;;
-       i686-w64-mingw32)
-               ;;
-       *)
-               ./cpp_test@EXEEXT@
-               ;;
-       esac
-
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed common tests."
-echo "----------------------------------------------------------------------"
-
-# aiff-tests
-./write_read_test@EXEEXT@ aiff
-./lossy_comp_test@EXEEXT@ aiff_ulaw
-./lossy_comp_test@EXEEXT@ aiff_alaw
-./lossy_comp_test@EXEEXT@ aiff_gsm610
-echo "=========================="
-echo "./lossy_comp_test@EXEEXT@ aiff_ima"
-echo "=========================="
-./peak_chunk_test@EXEEXT@ aiff
-./header_test@EXEEXT@ aiff
-./misc_test@EXEEXT@ aiff
-./string_test@EXEEXT@ aiff
-./multi_file_test@EXEEXT@ aiff
-./aiff_rw_test@EXEEXT@
-./chunk_test@EXEEXT@ aiff
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on AIFF files."
-echo "----------------------------------------------------------------------"
-
-# au-tests
-./write_read_test@EXEEXT@ au
-./lossy_comp_test@EXEEXT@ au_ulaw
-./lossy_comp_test@EXEEXT@ au_alaw
-./lossy_comp_test@EXEEXT@ au_g721
-./lossy_comp_test@EXEEXT@ au_g723
-./header_test@EXEEXT@ au
-./misc_test@EXEEXT@ au
-./multi_file_test@EXEEXT@ au
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on AU files."
-echo "----------------------------------------------------------------------"
-
-# caf-tests
-./write_read_test@EXEEXT@ caf
-./lossy_comp_test@EXEEXT@ caf_ulaw
-./lossy_comp_test@EXEEXT@ caf_alaw
-./header_test@EXEEXT@ caf
-./peak_chunk_test@EXEEXT@ caf
-./misc_test@EXEEXT@ caf
-./chunk_test@EXEEXT@ caf
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on CAF files."
-echo "----------------------------------------------------------------------"
-
-# wav-tests
-./write_read_test@EXEEXT@ wav
-./lossy_comp_test@EXEEXT@ wav_pcm
-./lossy_comp_test@EXEEXT@ wav_ima
-./lossy_comp_test@EXEEXT@ wav_msadpcm
-./lossy_comp_test@EXEEXT@ wav_ulaw
-./lossy_comp_test@EXEEXT@ wav_alaw
-./lossy_comp_test@EXEEXT@ wav_gsm610
-./lossy_comp_test@EXEEXT@ wav_g721
-./peak_chunk_test@EXEEXT@ wav
-./header_test@EXEEXT@ wav
-./misc_test@EXEEXT@ wav
-./string_test@EXEEXT@ wav
-./multi_file_test@EXEEXT@ wav
-./chunk_test@EXEEXT@ wav
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on WAV files."
-echo "----------------------------------------------------------------------"
-
-# w64-tests
-./write_read_test@EXEEXT@ w64
-./lossy_comp_test@EXEEXT@ w64_ima
-./lossy_comp_test@EXEEXT@ w64_msadpcm
-./lossy_comp_test@EXEEXT@ w64_ulaw
-./lossy_comp_test@EXEEXT@ w64_alaw
-./lossy_comp_test@EXEEXT@ w64_gsm610
-./header_test@EXEEXT@ w64
-./misc_test@EXEEXT@ w64
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on W64 files."
-echo "----------------------------------------------------------------------"
-
-# rf64-tests
-./write_read_test@EXEEXT@ rf64
-./header_test@EXEEXT@ rf64
-./misc_test@EXEEXT@ rf64
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on RF64 files."
-echo "----------------------------------------------------------------------"
-
-# raw-tests
-./write_read_test@EXEEXT@ raw
-./lossy_comp_test@EXEEXT@ raw_ulaw
-./lossy_comp_test@EXEEXT@ raw_alaw
-./lossy_comp_test@EXEEXT@ raw_gsm610
-./lossy_comp_test@EXEEXT@ vox_adpcm
-./raw_test@EXEEXT@
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on RAW (header-less) files."
-echo "----------------------------------------------------------------------"
-
-# paf-tests
-./write_read_test@EXEEXT@ paf
-./header_test@EXEEXT@ paf
-./misc_test@EXEEXT@ paf
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on PAF files."
-echo "----------------------------------------------------------------------"
-
-# svx-tests
-./write_read_test@EXEEXT@ svx
-./header_test@EXEEXT@ svx
-./misc_test@EXEEXT@ svx
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on SVX files."
-echo "----------------------------------------------------------------------"
-
-# nist-tests
-./write_read_test@EXEEXT@ nist
-./lossy_comp_test@EXEEXT@ nist_ulaw
-./lossy_comp_test@EXEEXT@ nist_alaw
-./header_test@EXEEXT@ nist
-./misc_test@EXEEXT@ nist
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on NIST files."
-echo "----------------------------------------------------------------------"
-
-# ircam-tests
-./write_read_test@EXEEXT@ ircam
-./lossy_comp_test@EXEEXT@ ircam_ulaw
-./lossy_comp_test@EXEEXT@ ircam_alaw
-./header_test@EXEEXT@ ircam
-./misc_test@EXEEXT@ ircam
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on IRCAM files."
-echo "----------------------------------------------------------------------"
-
-# voc-tests
-./write_read_test@EXEEXT@ voc
-./lossy_comp_test@EXEEXT@ voc_ulaw
-./lossy_comp_test@EXEEXT@ voc_alaw
-./header_test@EXEEXT@ voc
-./misc_test@EXEEXT@ voc
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on VOC files."
-echo "----------------------------------------------------------------------"
-
-# mat4-tests
-./write_read_test@EXEEXT@ mat4
-./header_test@EXEEXT@ mat4
-./misc_test@EXEEXT@ mat4
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on MAT4 files."
-echo "----------------------------------------------------------------------"
-
-# mat5-tests
-./write_read_test@EXEEXT@ mat5
-./header_test@EXEEXT@ mat5
-./misc_test@EXEEXT@ mat5
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on MAT5 files."
-echo "----------------------------------------------------------------------"
-
-# pvf-tests
-./write_read_test@EXEEXT@ pvf
-./header_test@EXEEXT@ pvf
-./misc_test@EXEEXT@ pvf
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on PVF files."
-echo "----------------------------------------------------------------------"
-
-# xi-tests
-./lossy_comp_test@EXEEXT@ xi_dpcm
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on XI files."
-echo "----------------------------------------------------------------------"
-
-# htk-tests
-./write_read_test@EXEEXT@ htk
-./header_test@EXEEXT@ htk
-./misc_test@EXEEXT@ htk
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on HTK files."
-echo "----------------------------------------------------------------------"
-
-# avr-tests
-./write_read_test@EXEEXT@ avr
-./header_test@EXEEXT@ avr
-./misc_test@EXEEXT@ avr
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on AVR files."
-echo "----------------------------------------------------------------------"
-
-# sds-tests
-./write_read_test@EXEEXT@ sds
-./header_test@EXEEXT@ sds
-./misc_test@EXEEXT@ sds
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on SDS files."
-echo "----------------------------------------------------------------------"
-
-# sd2-tests
-./write_read_test@EXEEXT@ sd2
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on SD2 files."
-echo "----------------------------------------------------------------------"
-
-# wve-tests
-./lossy_comp_test@EXEEXT@ wve
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on WVE files."
-echo "----------------------------------------------------------------------"
-
-# mpc2k-tests
-./write_read_test@EXEEXT@ mpc2k
-./header_test@EXEEXT@ mpc2k
-./misc_test@EXEEXT@ mpc2k
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on MPC 2000 files."
-echo "----------------------------------------------------------------------"
-
-# flac-tests
-./write_read_test@EXEEXT@ flac
-./compression_size_test@EXEEXT@ flac
-./string_test@EXEEXT@ flac
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on FLAC files."
-echo "----------------------------------------------------------------------"
-
-# vorbis-tests
-./ogg_test@EXEEXT@
-./compression_size_test@EXEEXT@ vorbis
-./lossy_comp_test@EXEEXT@ ogg_vorbis
-./string_test@EXEEXT@ ogg
-./misc_test@EXEEXT@ ogg
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed tests on OGG/VORBIS files."
-echo "----------------------------------------------------------------------"
-
-# io-tests
-./stdio_test@EXEEXT@
-./pipe_test@EXEEXT@
-./virtual_io_test@EXEEXT@
-echo "----------------------------------------------------------------------"
-echo "  $sfversion passed stdio/pipe/vio tests."
-echo "----------------------------------------------------------------------"
-
-
diff --git a/libs/libsndfile/tests/ulaw_test.c b/libs/libsndfile/tests/ulaw_test.c
deleted file mode 100644 (file)
index fc0d497..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#define        BUFFER_SIZE             (65536)
-
-static unsigned char   ulaw_encode (int sample) ;
-static int                             ulaw_decode (unsigned int ulawbyte) ;
-
-static short                   short_buffer [BUFFER_SIZE] ;
-static unsigned char   ulaw_buffer [BUFFER_SIZE] ;
-
-int
-main (void)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       const char      *filename ;
-       int                     k ;
-
-       print_test_name ("ulaw_test", "encoder") ;
-
-       filename = "test.raw" ;
-
-       sf_info_setup (&sfinfo, SF_FORMAT_RAW | SF_FORMAT_ULAW, 44100, 1) ;
-
-       if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-       {       printf ("sf_open_write failed with error : ") ;
-               fflush (stdout) ;
-               puts (sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       /* Generate a file containing all possible 16 bit sample values
-       ** and write it to disk as ulaw encoded.frames.
-       */
-
-       for (k = 0 ; k < 0x10000 ; k++)
-               short_buffer [k] = k & 0xFFFF ;
-
-       sf_write_short (file, short_buffer, BUFFER_SIZE) ;
-       sf_close (file) ;
-
-       /* Now open that file and compare the ulaw encoded sample values
-       ** with what they should be.
-       */
-
-       if ((file = sf_open (filename, SFM_READ, &sfinfo)) == NULL)
-       {       printf ("sf_open_write failed with error : ") ;
-               puts (sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       if (sf_read_raw (file, ulaw_buffer, BUFFER_SIZE) != BUFFER_SIZE)
-       {       printf ("sf_read_raw : ") ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       for (k = 0 ; k < 0x10000 ; k++)
-               if (ulaw_encode (short_buffer [k]) != ulaw_buffer [k])
-               {       printf ("Encoder error : sample #%d (0x%02X should be 0x%02X)\n", k, ulaw_buffer [k], ulaw_encode (short_buffer [k])) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       puts ("ok") ;
-
-       print_test_name ("ulaw_test", "decoder") ;
-
-       /* Now generate a file containing all possible 8 bit encoded
-       ** sample values and write it to disk as ulaw encoded.frames.
-       */
-
-       if (! (file = sf_open (filename, SFM_WRITE, &sfinfo)))
-       {       printf ("sf_open_write failed with error : ") ;
-               puts (sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       for (k = 0 ; k < 256 ; k++)
-               ulaw_buffer [k] = k & 0xFF ;
-
-       sf_write_raw (file, ulaw_buffer, 256) ;
-       sf_close (file) ;
-
-       /* Now open that file and compare the ulaw decoded sample values
-       ** with what they should be.
-       */
-
-       if (! (file = sf_open (filename, SFM_READ, &sfinfo)))
-       {       printf ("sf_open_write failed with error : ") ;
-               puts (sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       if (sf_read_short (file, short_buffer, 256) != 256)
-       {       printf ("sf_read_short : ") ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-
-       for (k = 0 ; k < 256 ; k++)
-               if (short_buffer [k] != ulaw_decode (ulaw_buffer [k]))
-               {       printf ("Decoder error : sample #%d (0x%04X should be 0x%04X)\n", k, short_buffer [k], ulaw_decode (ulaw_buffer [k])) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       puts ("ok") ;
-
-       unlink (filename) ;
-
-       return 0 ;
-} /* main */
-
-
-/*=================================================================================
-**     The following routines came from the sox-12.15 (Sound eXcahcnge) distribution.
-**
-**     This code is not compiled into libsndfile. It is only used to test the
-**     libsndfile lookup tables for correctness.
-**
-**     I have included the original authors comments.
-*/
-
-/*
-** This routine converts from linear to ulaw.
-**
-** Craig Reese: IDA/Supercomputing Research Center
-** Joe Campbell: Department of Defense
-** 29 September 1989
-**
-** References:
-** 1) CCITT Recommendation G.711  (very difficult to follow)
-** 2) "A New Digital Technique for Implementation of Any
-**     Continuous PCM Companding Law," Villeret, Michel,
-**     et al. 1973 IEEE Int. Conf. on Communications, Vol 1,
-**     1973, pg. 11.12-11.17
-** 3) MIL-STD-188-113,"Interoperability and Performance Standards
-**     for Analog-to_Digital Conversion Techniques,"
-**     17 February 1987
-**
-** Input: Signed 16 bit linear sample
-** Output: 8 bit ulaw sample
-*/
-
-#define uBIAS 0x84             /* define the add-in bias for 16 bit.frames */
-#define uCLIP 32635
-
-static
-unsigned char ulaw_encode (int sample)
-{      static int exp_lut [256] =
-       {       0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
-               4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
-               5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-               5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
-               6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-               6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-               6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-               6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-               7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-               7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-               7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-               7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-               7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-               7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-               7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
-               7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
-               } ;
-
-       int sign, exponent, mantissa ;
-       unsigned char ulawbyte ;
-
-       /* Get the sample into sign-magnitude. */
-       sign = (sample >> 8) & 0x80 ;                                   /* set aside the sign */
-       if (sign != 0)
-               sample = -sample ;                                                      /* get magnitude */
-       if (sample > uCLIP)
-               sample = uCLIP ;                                                        /* clip the magnitude */
-
-       /* Convert from 16 bit linear to ulaw. */
-       sample = sample + uBIAS ;
-       exponent = exp_lut [(sample >> 7) & 0xFF] ;
-       mantissa = (sample >> (exponent + 3)) & 0x0F ;
-       ulawbyte = ~ (sign | (exponent << 4) | mantissa) ;
-
-       return ulawbyte ;
-} /* ulaw_encode */
-
-
-/*
-** This routine converts from ulaw to 16 bit linear.
-**
-** Craig Reese: IDA/Supercomputing Research Center
-** 29 September 1989
-**
-** References:
-** 1) CCITT Recommendation G.711  (very difficult to follow)
-** 2) MIL-STD-188-113,"Interoperability and Performance Standards
-**     for Analog-to_Digital Conversion Techniques,"
-**     17 February 1987
-**
-** Input: 8 bit ulaw sample
-** Output: signed 16 bit linear sample
-*/
-
-static
-int ulaw_decode (unsigned int ulawbyte)
-{      static int exp_lut [8] = { 0, 132, 396, 924, 1980, 4092, 8316, 16764 } ;
-       int sign, exponent, mantissa, sample ;
-
-       ulawbyte = ~ ulawbyte ;
-       sign = (ulawbyte & 0x80) ;
-       exponent = (ulawbyte >> 4) & 0x07 ;
-       mantissa = ulawbyte & 0x0F ;
-       sample = exp_lut [exponent] + (mantissa << (exponent + 3)) ;
-       if (sign != 0)
-               sample = -sample ;
-
-       return sample ;
-} /* ulaw_decode */
-
diff --git a/libs/libsndfile/tests/utils.c b/libs/libsndfile/tests/utils.c
deleted file mode 100644 (file)
index 882c969..0000000
+++ /dev/null
@@ -1,1162 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**     Utility functions to make writing the test suite easier.
-**
-**     The .c and .h files were generated automagically with Autogen from
-**     the files utils.def and utils.tpl.
-*/
-
-
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#include <errno.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#ifndef        M_PI
-#define        M_PI            3.14159265358979323846264338
-#endif
-
-#define        LOG_BUFFER_SIZE         2048
-
-/*
-**     Neat solution to the Win32/OS2 binary file flage requirement.
-**     If O_BINARY isn't already defined by the inclusion of the system
-**     headers, set it to zero.
-*/
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-
-void
-gen_windowed_sine_float (float *data, int len, double maximum)
-{      int k ;
-
-       memset (data, 0, len * sizeof (float)) ;
-       /*
-       **      Choose a frequency of 1/32 so that it aligns perfectly with a DFT
-       **      bucket to minimise spreading of energy over more than one bucket.
-       **      Also do not want to make the frequency too high as some of the
-       **      codecs (ie gsm610) have a quite severe high frequency roll off.
-       */
-       len /= 2 ;
-
-       for (k = 0 ; k < len ; k++)
-       {       data [k] = sin (2.0 * k * M_PI * 1.0 / 32.0 + 0.4) ;
-
-               /* Apply Hanning Window. */
-               data [k] *= maximum * (0.5 - 0.5 * cos (2.0 * M_PI * k / ((len) - 1))) ;
-               }
-
-       return ;
-} /* gen_windowed_sine_float */
-
-void
-gen_windowed_sine_double (double *data, int len, double maximum)
-{      int k ;
-
-       memset (data, 0, len * sizeof (double)) ;
-       /*
-       **      Choose a frequency of 1/32 so that it aligns perfectly with a DFT
-       **      bucket to minimise spreading of energy over more than one bucket.
-       **      Also do not want to make the frequency too high as some of the
-       **      codecs (ie gsm610) have a quite severe high frequency roll off.
-       */
-       len /= 2 ;
-
-       for (k = 0 ; k < len ; k++)
-       {       data [k] = sin (2.0 * k * M_PI * 1.0 / 32.0 + 0.4) ;
-
-               /* Apply Hanning Window. */
-               data [k] *= maximum * (0.5 - 0.5 * cos (2.0 * M_PI * k / ((len) - 1))) ;
-               }
-
-       return ;
-} /* gen_windowed_sine_double */
-
-
-void
-create_short_sndfile (const char *filename, int format, int channels)
-{      short data [2 * 3 * 4 * 5 * 6 * 7] = { 0, } ;
-       SNDFILE *file ;
-       SF_INFO sfinfo ;
-
-       sfinfo.samplerate = 44100 ;
-       sfinfo.channels = channels ;
-       sfinfo.format = format ;
-
-       if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-       {       printf ("Error (%s, %d) : sf_open failed : %s\n", __FILE__, __LINE__, sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       sf_write_short (file, data, ARRAY_LEN (data)) ;
-
-       sf_close (file) ;
-} /* create_short_sndfile */
-
-void
-check_file_hash_or_die (const char *filename, uint64_t target_hash, int line_num)
-{      static unsigned char buf [4096] ;
-       uint64_t        cksum ;
-       FILE            *file ;
-       int                     k, read_count ;
-
-       memset (buf, 0, sizeof (buf)) ;
-
-       /* The 'b' in the mode string means binary for Win32. */
-       if ((file = fopen (filename, "rb")) == NULL)
-       {       printf ("\n\nLine %d: could not open file '%s'\n\n", line_num, filename) ;
-               exit (1) ;
-               } ;
-
-       cksum = 0 ;
-
-       while ((read_count = fread (buf, 1, sizeof (buf), file)))
-               for (k = 0 ; k < read_count ; k++)
-                       cksum = cksum * 511 + buf [k] ;
-
-       fclose (file) ;
-
-       if (target_hash == 0)
-       {       printf (" 0x%016" PRIx64 "\n", cksum) ;
-               return ;
-               } ;
-
-       if (cksum != target_hash)
-       {       printf ("\n\nLine %d: incorrect hash value 0x%016" PRIx64 " should be 0x%016" PRIx64 ".\n\n", line_num, cksum, target_hash) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* check_file_hash_or_die */
-
-void
-print_test_name (const char *test, const char *filename)
-{      int count ;
-
-       if (test == NULL)
-       {       printf (__FILE__ ": bad test of filename parameter.\n") ;
-               exit (1) ;
-               } ;
-
-       if (filename == NULL || strlen (filename) == 0)
-       {       printf ("    %-30s : ", test) ;
-               count = 25 ;
-               }
-       else
-       {       printf ("    %-30s : %s ", test, filename) ;
-               count = 24 - strlen (filename) ;
-               } ;
-
-       while (count -- > 0)
-               putchar ('.') ;
-       putchar (' ') ;
-
-       fflush (stdout) ;
-} /* print_test_name */
-
-void
-dump_data_to_file (const char *filename, const void *data, unsigned int datalen)
-{      FILE *file ;
-
-       if ((file = fopen (filename, "wb")) == NULL)
-       {       printf ("\n\nLine %d : could not open file : %s\n\n", __LINE__, filename) ;
-               exit (1) ;
-               } ;
-
-       if (fwrite (data, 1, datalen, file) != datalen)
-       {       printf ("\n\nLine %d : fwrite failed.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       fclose (file) ;
-
-} /* dump_data_to_file */
-
-/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-*/
-
-static char octfilename [] = "error.dat" ;
-
-int
-oct_save_short (const short *a, const short *b, int len)
-{      FILE    *file ;
-       int             k ;
-
-       if (! (file = fopen (octfilename, "w")))
-               return 1 ;
-
-       fprintf (file, "# Not created by Octave\n") ;
-
-       fprintf (file, "# name: a\n") ;
-       fprintf (file, "# type: matrix\n") ;
-       fprintf (file, "# rows: %d\n", len) ;
-       fprintf (file, "# columns: 1\n") ;
-
-       for (k = 0 ; k < len ; k++)
-               fprintf (file, "% d" "\n", a [k]) ;
-
-       fprintf (file, "# name: b\n") ;
-       fprintf (file, "# type: matrix\n") ;
-       fprintf (file, "# rows: %d\n", len) ;
-       fprintf (file, "# columns: 1\n") ;
-
-       for (k = 0 ; k < len ; k++)
-               fprintf (file, "% d" "\n", b [k]) ;
-
-       fclose (file) ;
-       return 0 ;
-} /* oct_save_short */
-int
-oct_save_int   (const int *a, const int *b, int len)
-{      FILE    *file ;
-       int             k ;
-
-       if (! (file = fopen (octfilename, "w")))
-               return 1 ;
-
-       fprintf (file, "# Not created by Octave\n") ;
-
-       fprintf (file, "# name: a\n") ;
-       fprintf (file, "# type: matrix\n") ;
-       fprintf (file, "# rows: %d\n", len) ;
-       fprintf (file, "# columns: 1\n") ;
-
-       for (k = 0 ; k < len ; k++)
-               fprintf (file, "% d" "\n", a [k]) ;
-
-       fprintf (file, "# name: b\n") ;
-       fprintf (file, "# type: matrix\n") ;
-       fprintf (file, "# rows: %d\n", len) ;
-       fprintf (file, "# columns: 1\n") ;
-
-       for (k = 0 ; k < len ; k++)
-               fprintf (file, "% d" "\n", b [k]) ;
-
-       fclose (file) ;
-       return 0 ;
-} /* oct_save_int */
-int
-oct_save_float (const float *a, const float *b, int len)
-{      FILE    *file ;
-       int             k ;
-
-       if (! (file = fopen (octfilename, "w")))
-               return 1 ;
-
-       fprintf (file, "# Not created by Octave\n") ;
-
-       fprintf (file, "# name: a\n") ;
-       fprintf (file, "# type: matrix\n") ;
-       fprintf (file, "# rows: %d\n", len) ;
-       fprintf (file, "# columns: 1\n") ;
-
-       for (k = 0 ; k < len ; k++)
-               fprintf (file, "% g" "\n", a [k]) ;
-
-       fprintf (file, "# name: b\n") ;
-       fprintf (file, "# type: matrix\n") ;
-       fprintf (file, "# rows: %d\n", len) ;
-       fprintf (file, "# columns: 1\n") ;
-
-       for (k = 0 ; k < len ; k++)
-               fprintf (file, "% g" "\n", b [k]) ;
-
-       fclose (file) ;
-       return 0 ;
-} /* oct_save_float */
-int
-oct_save_double        (const double *a, const double *b, int len)
-{      FILE    *file ;
-       int             k ;
-
-       if (! (file = fopen (octfilename, "w")))
-               return 1 ;
-
-       fprintf (file, "# Not created by Octave\n") ;
-
-       fprintf (file, "# name: a\n") ;
-       fprintf (file, "# type: matrix\n") ;
-       fprintf (file, "# rows: %d\n", len) ;
-       fprintf (file, "# columns: 1\n") ;
-
-       for (k = 0 ; k < len ; k++)
-               fprintf (file, "% g" "\n", a [k]) ;
-
-       fprintf (file, "# name: b\n") ;
-       fprintf (file, "# type: matrix\n") ;
-       fprintf (file, "# rows: %d\n", len) ;
-       fprintf (file, "# columns: 1\n") ;
-
-       for (k = 0 ; k < len ; k++)
-               fprintf (file, "% g" "\n", b [k]) ;
-
-       fclose (file) ;
-       return 0 ;
-} /* oct_save_double */
-
-
-void
-check_log_buffer_or_die (SNDFILE *file, int line_num)
-{      static char     buffer [LOG_BUFFER_SIZE] ;
-       int                     count ;
-
-       memset (buffer, 0, sizeof (buffer)) ;
-
-       /* Get the log buffer data. */
-       count = sf_command      (file, SFC_GET_LOG_INFO, buffer, LOG_BUFFER_SIZE) ;
-
-       if (LOG_BUFFER_SIZE - count < 2)
-       {       printf ("\n\nLine %d : Possible long log buffer.\n", line_num) ;
-               exit (1) ;
-               }
-
-       /* Look for "Should" */
-       if (strstr (buffer, "ould"))
-       {       printf ("\n\nLine %d : Log buffer contains `ould'. Dumping.\n", line_num) ;
-               puts (buffer) ;
-               exit (1) ;
-               } ;
-
-       /* Look for "**" */
-       if (strstr (buffer, "*"))
-       {       printf ("\n\nLine %d : Log buffer contains `*'. Dumping.\n", line_num) ;
-               puts (buffer) ;
-               exit (1) ;
-               } ;
-
-       /* Look for "Should" */
-       if (strstr (buffer, "nknown marker"))
-       {       printf ("\n\nLine %d : Log buffer contains `nknown marker'. Dumping.\n", line_num) ;
-               puts (buffer) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* check_log_buffer_or_die */
-
-int
-string_in_log_buffer (SNDFILE *file, const char *s)
-{      static char     buffer [LOG_BUFFER_SIZE] ;
-       int                     count ;
-
-       memset (buffer, 0, sizeof (buffer)) ;
-
-       /* Get the log buffer data. */
-       count = sf_command      (file, SFC_GET_LOG_INFO, buffer, LOG_BUFFER_SIZE) ;
-
-       if (LOG_BUFFER_SIZE - count < 2)
-       {       printf ("Possible long log buffer.\n") ;
-               exit (1) ;
-               }
-
-       /* Look for string */
-       return strstr (buffer, s) ? SF_TRUE : SF_FALSE ;
-} /* string_in_log_buffer */
-
-void
-hexdump_file (const char * filename, sf_count_t offset, sf_count_t length)
-{
-       FILE * file ;
-       char buffer [16] ;
-       int k, m, ch, readcount ;
-
-       if (length > 1000000)
-       {       printf ("\n\nError : length (%ld) too long.\n\n", SF_COUNT_TO_LONG (offset)) ;
-               exit (1) ;
-               } ;
-
-       if ((file = fopen (filename, "r")) == NULL)
-       {       printf ("\n\nError : hexdump_file (%s) could not open file for read.\n\n", filename) ;
-               exit (1) ;
-               } ;
-
-       if (fseek (file, offset, SEEK_SET) != 0)
-       {       printf ("\n\nError : fseek(file, %ld, SEEK_SET) failed : %s\n\n", SF_COUNT_TO_LONG (offset), strerror (errno)) ;
-               exit (1) ;
-               } ;
-
-       puts ("\n\n") ;
-
-       for (k = 0 ; k < length ; k+= sizeof (buffer))
-       {       readcount = fread (buffer, 1, sizeof (buffer), file) ;
-
-               printf ("%08lx : ", SF_COUNT_TO_LONG (offset + k)) ;
-
-               for (m = 0 ; m < readcount ; m++)
-                       printf ("%02x ", buffer [m] & 0xFF) ;
-
-               for (m = readcount ; m < SIGNED_SIZEOF (buffer) ; m++)
-                       printf ("   ") ;
-
-               printf ("  ") ;
-               for (m = 0 ; m < readcount ; m++)
-               {       ch = isprint (buffer [m]) ? buffer [m] : '.' ;
-                       putchar (ch) ;
-                       } ;
-
-               if (readcount < SIGNED_SIZEOF (buffer))
-                       break ;
-
-               putchar ('\n') ;
-               } ;
-
-       puts ("\n") ;
-
-       fclose (file) ;
-} /* hexdump_file */
-
-void
-dump_log_buffer (SNDFILE *file)
-{      static char     buffer [LOG_BUFFER_SIZE] ;
-
-       memset (buffer, 0, sizeof (buffer)) ;
-
-       /* Get the log buffer data. */
-       sf_command      (file, SFC_GET_LOG_INFO, buffer, LOG_BUFFER_SIZE) ;
-
-       if (strlen (buffer) < 1)
-               puts ("Log buffer empty.\n") ;
-       else
-               puts (buffer) ;
-
-       return ;
-} /* dump_log_buffer */
-
-SNDFILE *
-test_open_file_or_die (const char *filename, int mode, SF_INFO *sfinfo, int allow_fd, int line_num)
-{      static int count = 0 ;
-
-       SNDFILE *file ;
-       const char *modestr, *func_name ;
-       int oflags = 0, omode = 0, err ;
-
-       /*
-       ** Need to test both sf_open() and sf_open_fd().
-       ** Do so alternately.
-       */
-       switch (mode)
-       {       case SFM_READ :
-                               modestr = "SFM_READ" ;
-                               oflags = O_RDONLY | O_BINARY ;
-                               omode = 0 ;
-                               break ;
-
-               case SFM_WRITE :
-                               modestr = "SFM_WRITE" ;
-                               oflags = O_WRONLY | O_CREAT | O_TRUNC | O_BINARY ;
-                               omode = S_IRUSR | S_IWUSR | S_IRGRP ;
-                               break ;
-
-               case SFM_RDWR :
-                               modestr = "SFM_RDWR" ;
-                               oflags = O_RDWR | O_CREAT | O_BINARY ;
-                               omode = S_IRUSR | S_IWUSR | S_IRGRP ;
-                               break ;
-               default :
-                               printf ("\n\nLine %d: Bad mode.\n", line_num) ;
-                               fflush (stdout) ;
-                               exit (1) ;
-               } ;
-
-       if (OS_IS_WIN32)
-       {       /* Windows does not understand and ignores the S_IRGRP flag, but Wine
-               ** gives a run time warning message, so just clear it.
-               */
-               omode &= ~S_IRGRP ;
-               } ;
-
-       if (allow_fd && ((++count) & 1) == 1)
-       {       int fd ;
-
-               /* Only use the three argument open() function if omode != 0. */
-               fd = (omode == 0) ? open (filename, oflags) : open (filename, oflags, omode) ;
-
-               if (fd < 0)
-               {       printf ("\n\n%s : open failed : %s\n", __func__, strerror (errno)) ;
-                       exit (1) ;
-                       } ;
-
-               func_name = "sf_open_fd" ;
-               file = sf_open_fd (fd, mode, sfinfo, SF_TRUE) ;
-               }
-       else
-       {       func_name = "sf_open" ;
-               file = sf_open (filename, mode, sfinfo) ;
-               } ;
-
-       if (file == NULL)
-       {       printf ("\n\nLine %d: %s (%s) failed : %s\n\n", line_num, func_name, modestr, sf_strerror (NULL)) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       err = sf_error (file) ;
-       if (err != SF_ERR_NO_ERROR)
-       {       printf ("\n\nLine %d : sf_error : %s\n\n", line_num, sf_error_number (err)) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       return file ;
-} /* test_open_file_or_die */
-
-void
-test_read_write_position_or_die (SNDFILE *file, int line_num, int pass, sf_count_t read_pos, sf_count_t write_pos)
-{      sf_count_t pos ;
-
-       /* Check the current read position. */
-       if (read_pos >= 0 && (pos = sf_seek (file, 0, SEEK_CUR | SFM_READ)) != read_pos)
-       {       printf ("\n\nLine %d ", line_num) ;
-               if (pass > 0)
-                       printf ("(pass %d): ", pass) ;
-               printf ("Read position (%ld) should be %ld.\n", SF_COUNT_TO_LONG (pos), SF_COUNT_TO_LONG (read_pos)) ;
-               exit (1) ;
-               } ;
-
-       /* Check the current write position. */
-       if (write_pos >= 0 && (pos = sf_seek (file, 0, SEEK_CUR | SFM_WRITE)) != write_pos)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : Write position (%ld) should be %ld.\n",
-                                               SF_COUNT_TO_LONG (pos), SF_COUNT_TO_LONG (write_pos)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_read_write_position */
-
-void
-test_seek_or_die (SNDFILE *file, sf_count_t offset, int whence, sf_count_t new_pos, int channels, int line_num)
-{      sf_count_t      position ;
-       const char      *channel_name, *whence_name ;
-
-       switch (whence)
-       {       case SEEK_SET :
-                               whence_name = "SEEK_SET" ;
-                               break ;
-               case SEEK_CUR :
-                               whence_name = "SEEK_CUR" ;
-                               break ;
-               case SEEK_END :
-                               whence_name = "SEEK_END" ;
-                               break ;
-
-               /* SFM_READ */
-               case SEEK_SET | SFM_READ :
-                               whence_name = "SFM_READ | SEEK_SET" ;
-                               break ;
-               case SEEK_CUR | SFM_READ :
-                               whence_name = "SFM_READ | SEEK_CUR" ;
-                               break ;
-               case SEEK_END | SFM_READ :
-                               whence_name = "SFM_READ | SEEK_END" ;
-                               break ;
-
-               /* SFM_WRITE */
-               case SEEK_SET | SFM_WRITE :
-                               whence_name = "SFM_WRITE | SEEK_SET" ;
-                               break ;
-               case SEEK_CUR | SFM_WRITE :
-                               whence_name = "SFM_WRITE | SEEK_CUR" ;
-                               break ;
-               case SEEK_END | SFM_WRITE :
-                               whence_name = "SFM_WRITE | SEEK_END" ;
-                               break ;
-
-               default :
-                               printf ("\n\nLine %d: bad whence parameter.\n", line_num) ;
-                               exit (1) ;
-               } ;
-
-       channel_name = (channels == 1) ? "Mono" : "Stereo" ;
-
-       if ((position = sf_seek (file, offset, whence)) != new_pos)
-       {       printf ("\n\nLine %d : %s : sf_seek (file, %ld, %s) returned %ld (should be %ld).\n\n",
-                                       line_num, channel_name, SF_COUNT_TO_LONG (offset), whence_name,
-                                       SF_COUNT_TO_LONG (position), SF_COUNT_TO_LONG (new_pos)) ;
-               exit (1) ;
-               } ;
-
-} /* test_seek_or_die */
-
-
-
-void
-test_read_short_or_die (SNDFILE *file, int pass, short *test, sf_count_t items, int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_read_short (file, test, items)) != items)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_read_short failed with short read (%ld => %ld).\n",
-                                               SF_COUNT_TO_LONG (items), SF_COUNT_TO_LONG (count)) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_read_short_or_die */
-
-void
-test_read_int_or_die (SNDFILE *file, int pass, int *test, sf_count_t items, int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_read_int (file, test, items)) != items)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_read_int failed with short read (%ld => %ld).\n",
-                                               SF_COUNT_TO_LONG (items), SF_COUNT_TO_LONG (count)) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_read_int_or_die */
-
-void
-test_read_float_or_die (SNDFILE *file, int pass, float *test, sf_count_t items, int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_read_float (file, test, items)) != items)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_read_float failed with short read (%ld => %ld).\n",
-                                               SF_COUNT_TO_LONG (items), SF_COUNT_TO_LONG (count)) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_read_float_or_die */
-
-void
-test_read_double_or_die (SNDFILE *file, int pass, double *test, sf_count_t items, int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_read_double (file, test, items)) != items)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_read_double failed with short read (%ld => %ld).\n",
-                                               SF_COUNT_TO_LONG (items), SF_COUNT_TO_LONG (count)) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_read_double_or_die */
-
-
-void
-test_readf_short_or_die (SNDFILE *file, int pass, short *test, sf_count_t frames, int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_readf_short (file, test, frames)) != frames)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_readf_short failed with short readf (%ld => %ld).\n",
-                                               SF_COUNT_TO_LONG (frames), SF_COUNT_TO_LONG (count)) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_readf_short_or_die */
-
-void
-test_readf_int_or_die (SNDFILE *file, int pass, int *test, sf_count_t frames, int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_readf_int (file, test, frames)) != frames)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_readf_int failed with short readf (%ld => %ld).\n",
-                                               SF_COUNT_TO_LONG (frames), SF_COUNT_TO_LONG (count)) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_readf_int_or_die */
-
-void
-test_readf_float_or_die (SNDFILE *file, int pass, float *test, sf_count_t frames, int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_readf_float (file, test, frames)) != frames)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_readf_float failed with short readf (%ld => %ld).\n",
-                                               SF_COUNT_TO_LONG (frames), SF_COUNT_TO_LONG (count)) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_readf_float_or_die */
-
-void
-test_readf_double_or_die (SNDFILE *file, int pass, double *test, sf_count_t frames, int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_readf_double (file, test, frames)) != frames)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_readf_double failed with short readf (%ld => %ld).\n",
-                                               SF_COUNT_TO_LONG (frames), SF_COUNT_TO_LONG (count)) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_readf_double_or_die */
-
-
-void
-test_read_raw_or_die (SNDFILE *file, int pass, void *test, sf_count_t items, int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_read_raw (file, test, items)) != items)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_read_raw failed with short read (%ld => %ld).\n",
-                                               SF_COUNT_TO_LONG (items), SF_COUNT_TO_LONG (count)) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_read_raw_or_die */
-
-
-
-void
-test_write_short_or_die (SNDFILE *file, int pass, const short *test, sf_count_t items, int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_write_short (file, test, items)) != items)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_write_short failed with short write (%ld => %ld).\n",
-                                               SF_COUNT_TO_LONG (items), SF_COUNT_TO_LONG (count)) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_write_short_or_die */
-
-void
-test_write_int_or_die (SNDFILE *file, int pass, const int *test, sf_count_t items, int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_write_int (file, test, items)) != items)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_write_int failed with short write (%ld => %ld).\n",
-                                               SF_COUNT_TO_LONG (items), SF_COUNT_TO_LONG (count)) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_write_int_or_die */
-
-void
-test_write_float_or_die (SNDFILE *file, int pass, const float *test, sf_count_t items, int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_write_float (file, test, items)) != items)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_write_float failed with short write (%ld => %ld).\n",
-                                               SF_COUNT_TO_LONG (items), SF_COUNT_TO_LONG (count)) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_write_float_or_die */
-
-void
-test_write_double_or_die (SNDFILE *file, int pass, const double *test, sf_count_t items, int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_write_double (file, test, items)) != items)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_write_double failed with short write (%ld => %ld).\n",
-                                               SF_COUNT_TO_LONG (items), SF_COUNT_TO_LONG (count)) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_write_double_or_die */
-
-
-void
-test_writef_short_or_die (SNDFILE *file, int pass, const short *test, sf_count_t frames, int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_writef_short (file, test, frames)) != frames)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_writef_short failed with short writef (%ld => %ld).\n",
-                                               SF_COUNT_TO_LONG (frames), SF_COUNT_TO_LONG (count)) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_writef_short_or_die */
-
-void
-test_writef_int_or_die (SNDFILE *file, int pass, const int *test, sf_count_t frames, int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_writef_int (file, test, frames)) != frames)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_writef_int failed with short writef (%ld => %ld).\n",
-                                               SF_COUNT_TO_LONG (frames), SF_COUNT_TO_LONG (count)) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_writef_int_or_die */
-
-void
-test_writef_float_or_die (SNDFILE *file, int pass, const float *test, sf_count_t frames, int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_writef_float (file, test, frames)) != frames)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_writef_float failed with short writef (%ld => %ld).\n",
-                                               SF_COUNT_TO_LONG (frames), SF_COUNT_TO_LONG (count)) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_writef_float_or_die */
-
-void
-test_writef_double_or_die (SNDFILE *file, int pass, const double *test, sf_count_t frames, int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_writef_double (file, test, frames)) != frames)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_writef_double failed with short writef (%ld => %ld).\n",
-                                               SF_COUNT_TO_LONG (frames), SF_COUNT_TO_LONG (count)) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_writef_double_or_die */
-
-
-void
-test_write_raw_or_die (SNDFILE *file, int pass, const void *test, sf_count_t items, int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_write_raw (file, test, items)) != items)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_write_raw failed with short write (%ld => %ld).\n",
-                                               SF_COUNT_TO_LONG (items), SF_COUNT_TO_LONG (count)) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_write_raw_or_die */
-
-
-void
-compare_short_or_die (const short *left, const short *right, unsigned count, int line_num)
-{
-       unsigned k ;
-
-       for (k = 0 ; k < count ;k++)
-               if (left [k] != right [k])
-               {       printf ("\n\nLine %d : Error at index %d, " "% d" " should be " "% d" ".\n\n", line_num, k, left [k], right [k]) ;
-                       exit (1) ;
-                       } ;
-
-       return ;
-} /* compare_short_or_die */
-void
-compare_int_or_die (const int *left, const int *right, unsigned count, int line_num)
-{
-       unsigned k ;
-
-       for (k = 0 ; k < count ;k++)
-               if (left [k] != right [k])
-               {       printf ("\n\nLine %d : Error at index %d, " "% d" " should be " "% d" ".\n\n", line_num, k, left [k], right [k]) ;
-                       exit (1) ;
-                       } ;
-
-       return ;
-} /* compare_int_or_die */
-void
-compare_float_or_die (const float *left, const float *right, unsigned count, int line_num)
-{
-       unsigned k ;
-
-       for (k = 0 ; k < count ;k++)
-               if (left [k] != right [k])
-               {       printf ("\n\nLine %d : Error at index %d, " "% g" " should be " "% g" ".\n\n", line_num, k, left [k], right [k]) ;
-                       exit (1) ;
-                       } ;
-
-       return ;
-} /* compare_float_or_die */
-void
-compare_double_or_die (const double *left, const double *right, unsigned count, int line_num)
-{
-       unsigned k ;
-
-       for (k = 0 ; k < count ;k++)
-               if (left [k] != right [k])
-               {       printf ("\n\nLine %d : Error at index %d, " "% g" " should be " "% g" ".\n\n", line_num, k, left [k], right [k]) ;
-                       exit (1) ;
-                       } ;
-
-       return ;
-} /* compare_double_or_die */
-
-
-
-void
-delete_file (int format, const char *filename)
-{      char rsrc_name [512], *fname ;
-
-       unlink (filename) ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_SD2)
-               return ;
-
-       /*
-       ** Now try for a resource fork stored as a separate file.
-       ** Grab the un-adulterated filename again.
-       */
-       snprintf (rsrc_name, sizeof (rsrc_name), "%s", filename) ;
-
-       if ((fname = strrchr (rsrc_name, '/')) != NULL)
-               fname ++ ;
-       else if ((fname = strrchr (rsrc_name, '\\')) != NULL)
-               fname ++ ;
-       else
-               fname = rsrc_name ;
-
-       memmove (fname + 2, fname, strlen (fname) + 1) ;
-       fname [0] = '.' ;
-       fname [1] = '_' ;
-
-       unlink (rsrc_name) ;
-} /* delete_file */
-
-static int allowed_open_files = -1 ;
-
-void
-count_open_files (void)
-{
-#if OS_IS_WIN32
-       return ;
-#else
-       int k, count = 0 ;
-       struct stat statbuf ;
-
-       if (allowed_open_files > 0)
-               return ;
-
-       for (k = 0 ; k < 1024 ; k++)
-               if (fstat (k, &statbuf) == 0)
-                       count ++ ;
-
-       allowed_open_files = count ;
-#endif
-} /* count_open_files */
-
-void
-increment_open_file_count (void)
-{      allowed_open_files ++ ;
-} /* increment_open_file_count */
-
-void
-check_open_file_count_or_die (int lineno)
-{
-#if OS_IS_WIN32
-       lineno = 0 ;
-       return ;
-#else
-       int k, count = 0 ;
-       struct stat statbuf ;
-
-       if (allowed_open_files < 0)
-               count_open_files () ;
-
-       for (k = 0 ; k < 1024 ; k++)
-               if (fstat (k, &statbuf) == 0)
-                       count ++ ;
-
-       if (count > allowed_open_files)
-       {       printf ("\nLine %d : number of open files (%d) > allowed (%d).\n\n", lineno, count, allowed_open_files) ;
-               exit (1) ;
-               } ;
-#endif
-} /* check_open_file_count_or_die */
-
-void
-write_mono_file (const char * filename, int format, int srate, float * output, int len)
-{      SNDFILE * file ;
-       SF_INFO sfinfo ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       sfinfo.samplerate = srate ;
-       sfinfo.channels = 1 ;
-       sfinfo.format = format ;
-
-       if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-       {       printf ("sf_open (%s) : %s\n", filename, sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       sf_write_float (file, output, len) ;
-
-       sf_close (file) ;
-} /* write_mono_file */
-
-void
-gen_lowpass_noise_float (float *data, int len)
-{      int32_t value = 0x1243456 ;
-       double sample, last_val = 0.0 ;
-       int k ;
-
-       for (k = 0 ; k < len ; k++)
-       {       /* Not a crypto quality RNG. */
-               value = 11117 * value + 211231 ;
-               value = 11117 * value + 211231 ;
-               value = 11117 * value + 211231 ;
-
-               sample = value / (0x7fffffff * 1.000001) ;
-               sample = 0.2 * sample - 0.9 * last_val ;
-
-               data [k] = last_val = sample ;
-               } ;
-
-} /* gen_lowpass_noise_float */
-
-
-/*
-**     Windows is fucked.
-**     If a file is opened R/W and data is written to it, then fstat will return
-**     the correct file length, but stat will return zero.
-*/
-
-sf_count_t
-file_length (const char * fname)
-{      struct stat data ;
-
-       if (stat (fname, &data) != 0)
-               return 0 ;
-
-       return (sf_count_t) data.st_size ;
-} /* file_length */
-
-sf_count_t
-file_length_fd (int fd)
-{      struct stat data ;
-
-       memset (&data, 0, sizeof (data)) ;
-       if (fstat (fd, &data) != 0)
-               return 0 ;
-
-       return (sf_count_t) data.st_size ;
-} /* file_length_fd */
-
-
-
-
diff --git a/libs/libsndfile/tests/utils.def b/libs/libsndfile/tests/utils.def
deleted file mode 100644 (file)
index 0d94183..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-autogen definitions utils.tpl;
-
-float_type = {
-       name = float ;
-       };
-
-float_type = {
-       name = double ;
-       };
-
-/*----------------------------------*/
-
-io_type = {
-       io_element      = short ;
-       format_str              = "\"% d\"" ;
-       };
-
-io_type = {
-       io_element      = int ;
-       format_str              = "\"% d\"" ;
-       };
-
-io_type = {
-       io_element      = float ;
-       format_str              = "\"% g\"" ;
-       };
-
-io_type = {
-       io_element      = double ;
-       format_str              = "\"% g\"" ;
-       };
-
-read_op = {
-       op_element      = read ;
-       count_name      = items ;
-       };
-
-read_op = {
-       op_element      = readf ;
-       count_name      = frames ;
-       };
-
-write_op = {
-       op_element      = write ;
-       count_name      = items ;
-       };
-
-write_op = {
-       op_element      = writef ;
-       count_name      = frames ;
-       };
-
diff --git a/libs/libsndfile/tests/utils.h b/libs/libsndfile/tests/utils.h
deleted file mode 100644 (file)
index 79da286..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
-** Copyright (C) 2002-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**     Utility functions to make writing the test suite easier.
-**
-**     The .c and .h files were generated automagically with Autogen from
-**     the files utils.def and utils.tpl.
-*/
-
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include <stdint.h>
-#include <stdarg.h>
-
-#define SF_COUNT_TO_LONG(x)    ((long) (x))
-#define        ARRAY_LEN(x)            ((int) (sizeof (x)) / (sizeof ((x) [0])))
-#define SIGNED_SIZEOF(x)       ((int64_t) (sizeof (x)))
-#define        NOT(x)                          (! (x))
-
-#define        PIPE_INDEX(x)   ((x) + 500)
-#define        PIPE_TEST_LEN   12345
-
-
-void gen_windowed_sine_float (float *data, int len, double maximum) ;
-void gen_windowed_sine_double (double *data, int len, double maximum) ;
-
-
-void   create_short_sndfile (const char *filename, int format, int channels) ;
-
-void   check_file_hash_or_die  (const char *filename, uint64_t target_hash, int line_num) ;
-
-void   print_test_name (const char *test, const char *filename) ;
-
-void   dump_data_to_file (const char *filename, const void *data, unsigned int datalen) ;
-
-void   write_mono_file (const char * filename, int format, int srate, float * output, int len) ;
-
-static inline void
-exit_if_true (int test, const char *format, ...)
-{      if (test)
-       {       va_list argptr ;
-               va_start (argptr, format) ;
-               vprintf (format, argptr) ;
-               va_end (argptr) ;
-               exit (1) ;
-               } ;
-} /* exit_if_true */
-
-/*
-**     Functions for saving two vectors of data in an ascii text file which
-**     can then be loaded into GNU octave for comparison.
-*/
-
-int    oct_save_short  (const short *a, const short *b, int len) ;
-int    oct_save_int    (const int *a, const int *b, int len) ;
-int    oct_save_float  (const float *a, const float *b, int len) ;
-int    oct_save_double (const double *a, const double *b, int len) ;
-
-
-void   delete_file (int format, const char *filename) ;
-
-void   count_open_files (void) ;
-void   increment_open_file_count (void) ;
-void   check_open_file_count_or_die (int lineno) ;
-
-#ifdef SNDFILE_H
-
-static inline void
-sf_info_clear (SF_INFO * info)
-{      memset (info, 0, sizeof (SF_INFO)) ;
-} /* sf_info_clear */
-
-static inline void
-sf_info_setup (SF_INFO * info, int format, int samplerate, int channels)
-{      sf_info_clear (info) ;
-
-       info->format = format ;
-       info->samplerate = samplerate ;
-       info->channels = channels ;
-} /* sf_info_setup */
-
-
-void   dump_log_buffer (SNDFILE *file) ;
-void   check_log_buffer_or_die (SNDFILE *file, int line_num) ;
-int    string_in_log_buffer (SNDFILE *file, const char *s) ;
-void   hexdump_file (const char * filename, sf_count_t offset, sf_count_t length) ;
-
-
-SNDFILE *test_open_file_or_die
-                       (const char *filename, int mode, SF_INFO *sfinfo, int allow_fd, int line_num) ;
-
-void   test_read_write_position_or_die
-                       (SNDFILE *file, int line_num, int pass, sf_count_t read_pos, sf_count_t write_pos) ;
-
-void   test_seek_or_die
-                       (SNDFILE *file, sf_count_t offset, int whence, sf_count_t new_pos, int channels, int line_num) ;
-
-
-void   test_read_short_or_die
-                       (SNDFILE *file, int pass, short *test, sf_count_t items, int line_num) ;
-void   test_read_int_or_die
-                       (SNDFILE *file, int pass, int *test, sf_count_t items, int line_num) ;
-void   test_read_float_or_die
-                       (SNDFILE *file, int pass, float *test, sf_count_t items, int line_num) ;
-void   test_read_double_or_die
-                       (SNDFILE *file, int pass, double *test, sf_count_t items, int line_num) ;
-
-void   test_readf_short_or_die
-                       (SNDFILE *file, int pass, short *test, sf_count_t frames, int line_num) ;
-void   test_readf_int_or_die
-                       (SNDFILE *file, int pass, int *test, sf_count_t frames, int line_num) ;
-void   test_readf_float_or_die
-                       (SNDFILE *file, int pass, float *test, sf_count_t frames, int line_num) ;
-void   test_readf_double_or_die
-                       (SNDFILE *file, int pass, double *test, sf_count_t frames, int line_num) ;
-
-
-void
-test_read_raw_or_die (SNDFILE *file, int pass, void *test, sf_count_t items, int line_num) ;
-
-
-void   test_write_short_or_die
-                       (SNDFILE *file, int pass, const short *test, sf_count_t items, int line_num) ;
-void   test_write_int_or_die
-                       (SNDFILE *file, int pass, const int *test, sf_count_t items, int line_num) ;
-void   test_write_float_or_die
-                       (SNDFILE *file, int pass, const float *test, sf_count_t items, int line_num) ;
-void   test_write_double_or_die
-                       (SNDFILE *file, int pass, const double *test, sf_count_t items, int line_num) ;
-
-void   test_writef_short_or_die
-                       (SNDFILE *file, int pass, const short *test, sf_count_t frames, int line_num) ;
-void   test_writef_int_or_die
-                       (SNDFILE *file, int pass, const int *test, sf_count_t frames, int line_num) ;
-void   test_writef_float_or_die
-                       (SNDFILE *file, int pass, const float *test, sf_count_t frames, int line_num) ;
-void   test_writef_double_or_die
-                       (SNDFILE *file, int pass, const double *test, sf_count_t frames, int line_num) ;
-
-
-void
-test_write_raw_or_die (SNDFILE *file, int pass, const void *test, sf_count_t items, int line_num) ;
-
-void compare_short_or_die (const short *left, const short *right, unsigned count, int line_num) ;
-void compare_int_or_die (const int *left, const int *right, unsigned count, int line_num) ;
-void compare_float_or_die (const float *left, const float *right, unsigned count, int line_num) ;
-void compare_double_or_die (const double *left, const double *right, unsigned count, int line_num) ;
-
-
-
-void   gen_lowpass_noise_float (float *data, int len) ;
-
-sf_count_t             file_length (const char * fname) ;
-sf_count_t             file_length_fd (int fd) ;
-
-#endif
-
-#ifdef __cplusplus
-}              /* extern "C" */
-#endif /* __cplusplus */
-
-
-
diff --git a/libs/libsndfile/tests/utils.tpl b/libs/libsndfile/tests/utils.tpl
deleted file mode 100644 (file)
index d88e263..0000000
+++ /dev/null
@@ -1,897 +0,0 @@
-[+ AutoGen5 template h c +]
-/*
-** Copyright (C) 2002-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-**     Utility functions to make writing the test suite easier.
-**
-**     The .c and .h files were generated automagically with Autogen from
-**     the files utils.def and utils.tpl.
-*/
-
-[+ CASE (suffix) +]
-[+ ==  h  +]
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include <stdint.h>
-#include <stdarg.h>
-
-#define        ARRAY_LEN(x)            ((int) (sizeof (x)) / (sizeof ((x) [0])))
-#define SIGNED_SIZEOF(x)       ((int64_t) (sizeof (x)))
-#define        NOT(x)                          (! (x))
-
-#define        PIPE_INDEX(x)   ((x) + 500)
-#define        PIPE_TEST_LEN   12345
-
-
-[+ FOR float_type
-+]void gen_windowed_sine_[+ (get "name") +] ([+ (get "name") +] *data, int len, double maximum) ;
-[+ ENDFOR float_type
-+]
-
-void   create_short_sndfile (const char *filename, int format, int channels) ;
-
-void   check_file_hash_or_die  (const char *filename, uint64_t target_hash, int line_num) ;
-
-void   print_test_name (const char *test, const char *filename) ;
-
-void   dump_data_to_file (const char *filename, const void *data, unsigned int datalen) ;
-
-void   write_mono_file (const char * filename, int format, int srate, float * output, int len) ;
-
-#ifdef __GNUC__
-static inline void
-exit_if_true (int test, const char *format, ...)
-#ifdef __USE_MINGW_ANSI_STDIO
-       __attribute__ ((format (gnu_printf, 2, 3))) ;
-#else
-       __attribute__ ((format (printf, 2, 3))) ;
-#endif
-#endif
-
-static inline void
-exit_if_true (int test, const char *format, ...)
-{      if (test)
-       {       va_list argptr ;
-               va_start (argptr, format) ;
-               vprintf (format, argptr) ;
-               va_end (argptr) ;
-               exit (1) ;
-               } ;
-} /* exit_if_true */
-
-/*
-**     Functions for saving two vectors of data in an ascii text file which
-**     can then be loaded into GNU octave for comparison.
-*/
-
-[+ FOR io_type
-+]int  oct_save_[+ (get "io_element") +]       (const [+ (get "io_element") +] *a, const [+ (get "io_element") +] *b, int len) ;
-[+ ENDFOR io_type
-+]
-
-void   delete_file (int format, const char *filename) ;
-
-void   count_open_files (void) ;
-void   increment_open_file_count (void) ;
-void   check_open_file_count_or_die (int lineno) ;
-
-#ifdef SNDFILE_H
-
-static inline void
-sf_info_clear (SF_INFO * info)
-{      memset (info, 0, sizeof (SF_INFO)) ;
-} /* sf_info_clear */
-
-static inline void
-sf_info_setup (SF_INFO * info, int format, int samplerate, int channels)
-{      sf_info_clear (info) ;
-
-       info->format = format ;
-       info->samplerate = samplerate ;
-       info->channels = channels ;
-} /* sf_info_setup */
-
-
-void   dump_log_buffer (SNDFILE *file) ;
-void   check_log_buffer_or_die (SNDFILE *file, int line_num) ;
-int    string_in_log_buffer (SNDFILE *file, const char *s) ;
-void   hexdump_file (const char * filename, sf_count_t offset, sf_count_t length) ;
-
-
-SNDFILE *test_open_file_or_die
-                       (const char *filename, int mode, SF_INFO *sfinfo, int allow_fd, int line_num) ;
-
-void   test_read_write_position_or_die
-                       (SNDFILE *file, int line_num, int pass, sf_count_t read_pos, sf_count_t write_pos) ;
-
-void   test_seek_or_die
-                       (SNDFILE *file, sf_count_t offset, int whence, sf_count_t new_pos, int channels, int line_num) ;
-
-[+ FOR read_op +]
-[+ FOR io_type
-+]void         test_[+ (get "op_element") +]_[+ (get "io_element") +]_or_die
-                       (SNDFILE *file, int pass, [+ (get "io_element") +] *test, sf_count_t [+ (get "count_name") +], int line_num) ;
-[+ ENDFOR io_type +][+ ENDFOR read_op +]
-
-void
-test_read_raw_or_die (SNDFILE *file, int pass, void *test, sf_count_t items, int line_num) ;
-
-[+ FOR write_op +]
-[+ FOR io_type
-+]void         test_[+ (get "op_element") +]_[+ (get "io_element") +]_or_die
-                       (SNDFILE *file, int pass, const [+ (get "io_element") +] *test, sf_count_t [+ (get "count_name") +], int line_num) ;
-[+ ENDFOR io_type +][+ ENDFOR write_op +]
-
-void
-test_write_raw_or_die (SNDFILE *file, int pass, const void *test, sf_count_t items, int line_num) ;
-
-[+ FOR io_type
-+]void compare_[+ (get "io_element") +]_or_die (const [+ (get "io_element") +] *expected, const [+ (get "io_element") +] *actual, unsigned count, int line_num) ;
-[+ ENDFOR io_type +]
-
-
-void   gen_lowpass_signal_float (float *data, int len) ;
-
-sf_count_t             file_length (const char * fname) ;
-sf_count_t             file_length_fd (int fd) ;
-
-#endif
-
-#ifdef __cplusplus
-}              /* extern "C" */
-#endif /* __cplusplus */
-
-[+  ==  c  +]
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <inttypes.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#include <errno.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-#ifndef        M_PI
-#define        M_PI            3.14159265358979323846264338
-#endif
-
-#define        LOG_BUFFER_SIZE         2048
-
-/*
-**     Neat solution to the Win32/OS2 binary file flage requirement.
-**     If O_BINARY isn't already defined by the inclusion of the system
-**     headers, set it to zero.
-*/
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-[+ FOR float_type +]
-void
-gen_windowed_sine_[+ (get "name") +] ([+ (get "name") +] *data, int len, double maximum)
-{      int k ;
-
-       memset (data, 0, len * sizeof ([+ (get "name") +])) ;
-       /*
-       **      Choose a frequency of 1/32 so that it aligns perfectly with a DFT
-       **      bucket to minimise spreading of energy over more than one bucket.
-       **      Also do not want to make the frequency too high as some of the
-       **      codecs (ie gsm610) have a quite severe high frequency roll off.
-       */
-       len /= 2 ;
-
-       for (k = 0 ; k < len ; k++)
-       {       data [k] = sin (2.0 * k * M_PI * 1.0 / 32.0 + 0.4) ;
-
-               /* Apply Hanning Window. */
-               data [k] *= maximum * (0.5 - 0.5 * cos (2.0 * M_PI * k / ((len) - 1))) ;
-               }
-
-       return ;
-} /* gen_windowed_sine_[+ (get "name") +] */
-[+ ENDFOR float_type +]
-
-void
-create_short_sndfile (const char *filename, int format, int channels)
-{      short data [2 * 3 * 4 * 5 * 6 * 7] = { 0, } ;
-       SNDFILE *file ;
-       SF_INFO sfinfo ;
-
-       sfinfo.samplerate = 44100 ;
-       sfinfo.channels = channels ;
-       sfinfo.format = format ;
-
-       if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-       {       printf ("Error (%s, %d) : sf_open failed : %s\n", __FILE__, __LINE__, sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       sf_write_short (file, data, ARRAY_LEN (data)) ;
-
-       sf_close (file) ;
-} /* create_short_sndfile */
-
-void
-check_file_hash_or_die (const char *filename, uint64_t target_hash, int line_num)
-{      static unsigned char buf [4096] ;
-       uint64_t        cksum ;
-       FILE            *file ;
-       int                     k, read_count ;
-
-       memset (buf, 0, sizeof (buf)) ;
-
-       /* The 'b' in the mode string means binary for Win32. */
-       if ((file = fopen (filename, "rb")) == NULL)
-       {       printf ("\n\nLine %d: could not open file '%s'\n\n", line_num, filename) ;
-               exit (1) ;
-               } ;
-
-       cksum = 0 ;
-
-       while ((read_count = fread (buf, 1, sizeof (buf), file)))
-               for (k = 0 ; k < read_count ; k++)
-                       cksum = cksum * 511 + buf [k] ;
-
-       fclose (file) ;
-
-       if (target_hash == 0)
-       {       printf (" 0x%016" PRIx64 "\n", cksum) ;
-               return ;
-               } ;
-
-       if (cksum != target_hash)
-       {       printf ("\n\nLine %d: incorrect hash value 0x%016" PRIx64 " should be 0x%016" PRIx64 ".\n\n", line_num, cksum, target_hash) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* check_file_hash_or_die */
-
-void
-print_test_name (const char *test, const char *filename)
-{      int count ;
-
-       if (test == NULL)
-       {       printf (__FILE__ ": bad test of filename parameter.\n") ;
-               exit (1) ;
-               } ;
-
-       if (filename == NULL || strlen (filename) == 0)
-       {       printf ("    %-30s : ", test) ;
-               count = 25 ;
-               }
-       else
-       {       printf ("    %-30s : %s ", test, filename) ;
-               count = 24 - strlen (filename) ;
-               } ;
-
-       while (count -- > 0)
-               putchar ('.') ;
-       putchar (' ') ;
-
-       fflush (stdout) ;
-} /* print_test_name */
-
-void
-dump_data_to_file (const char *filename, const void *data, unsigned int datalen)
-{      FILE *file ;
-
-       if ((file = fopen (filename, "wb")) == NULL)
-       {       printf ("\n\nLine %d : could not open file : %s\n\n", __LINE__, filename) ;
-               exit (1) ;
-               } ;
-
-       if (fwrite (data, 1, datalen, file) != datalen)
-       {       printf ("\n\nLine %d : fwrite failed.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       fclose (file) ;
-
-} /* dump_data_to_file */
-
-/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-*/
-
-static char octfilename [] = "error.dat" ;
-
-[+ FOR io_type
-+]int
-oct_save_[+ (get "io_element") +]      (const [+ (get "io_element") +] *a, const [+ (get "io_element") +] *b, int len)
-{      FILE    *file ;
-       int             k ;
-
-       if (! (file = fopen (octfilename, "w")))
-               return 1 ;
-
-       fprintf (file, "# Not created by Octave\n") ;
-
-       fprintf (file, "# name: a\n") ;
-       fprintf (file, "# type: matrix\n") ;
-       fprintf (file, "# rows: %d\n", len) ;
-       fprintf (file, "# columns: 1\n") ;
-
-       for (k = 0 ; k < len ; k++)
-               fprintf (file, [+ (get "format_str") +] "\n", a [k]) ;
-
-       fprintf (file, "# name: b\n") ;
-       fprintf (file, "# type: matrix\n") ;
-       fprintf (file, "# rows: %d\n", len) ;
-       fprintf (file, "# columns: 1\n") ;
-
-       for (k = 0 ; k < len ; k++)
-               fprintf (file, [+ (get "format_str") +] "\n", b [k]) ;
-
-       fclose (file) ;
-       return 0 ;
-} /* oct_save_[+ (get "io_element") +] */
-[+ ENDFOR io_type
-+]
-
-void
-check_log_buffer_or_die (SNDFILE *file, int line_num)
-{      static char     buffer [LOG_BUFFER_SIZE] ;
-       int                     count ;
-
-       memset (buffer, 0, sizeof (buffer)) ;
-
-       /* Get the log buffer data. */
-       count = sf_command      (file, SFC_GET_LOG_INFO, buffer, LOG_BUFFER_SIZE) ;
-
-       if (LOG_BUFFER_SIZE - count < 2)
-       {       printf ("\n\nLine %d : Possible long log buffer.\n", line_num) ;
-               exit (1) ;
-               }
-
-       /* Look for "Should" */
-       if (strstr (buffer, "ould"))
-       {       printf ("\n\nLine %d : Log buffer contains `ould'. Dumping.\n", line_num) ;
-               puts (buffer) ;
-               exit (1) ;
-               } ;
-
-       /* Look for "**" */
-       if (strstr (buffer, "*"))
-       {       printf ("\n\nLine %d : Log buffer contains `*'. Dumping.\n", line_num) ;
-               puts (buffer) ;
-               exit (1) ;
-               } ;
-
-       /* Look for "Should" */
-       if (strstr (buffer, "nknown marker"))
-       {       printf ("\n\nLine %d : Log buffer contains `nknown marker'. Dumping.\n", line_num) ;
-               puts (buffer) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* check_log_buffer_or_die */
-
-int
-string_in_log_buffer (SNDFILE *file, const char *s)
-{      static char     buffer [LOG_BUFFER_SIZE] ;
-       int                     count ;
-
-       memset (buffer, 0, sizeof (buffer)) ;
-
-       /* Get the log buffer data. */
-       count = sf_command      (file, SFC_GET_LOG_INFO, buffer, LOG_BUFFER_SIZE) ;
-
-       if (LOG_BUFFER_SIZE - count < 2)
-       {       printf ("Possible long log buffer.\n") ;
-               exit (1) ;
-               }
-
-       /* Look for string */
-       return strstr (buffer, s) ? SF_TRUE : SF_FALSE ;
-} /* string_in_log_buffer */
-
-void
-hexdump_file (const char * filename, sf_count_t offset, sf_count_t length)
-{
-       FILE * file ;
-       char buffer [16] ;
-       int k, m, ch, readcount ;
-
-       if (length > 1000000)
-       {       printf ("\n\nError : length (%" PRId64 ") too long.\n\n", offset) ;
-               exit (1) ;
-               } ;
-
-       if ((file = fopen (filename, "r")) == NULL)
-       {       printf ("\n\nError : hexdump_file (%s) could not open file for read.\n\n", filename) ;
-               exit (1) ;
-               } ;
-
-       if (fseek (file, offset, SEEK_SET) != 0)
-       {       printf ("\n\nError : fseek(file, %" PRId64 ", SEEK_SET) failed : %s\n\n", offset, strerror (errno)) ;
-               exit (1) ;
-               } ;
-
-       puts ("\n\n") ;
-
-       for (k = 0 ; k < length ; k+= sizeof (buffer))
-       {       readcount = fread (buffer, 1, sizeof (buffer), file) ;
-
-               printf ("%08" PRIx64 " : ", offset + k) ;
-
-               for (m = 0 ; m < readcount ; m++)
-                       printf ("%02x ", buffer [m] & 0xFF) ;
-
-               for (m = readcount ; m < SIGNED_SIZEOF (buffer) ; m++)
-                       printf ("   ") ;
-
-               printf ("  ") ;
-               for (m = 0 ; m < readcount ; m++)
-               {       ch = isprint (buffer [m]) ? buffer [m] : '.' ;
-                       putchar (ch) ;
-                       } ;
-
-               if (readcount < SIGNED_SIZEOF (buffer))
-                       break ;
-
-               putchar ('\n') ;
-               } ;
-
-       puts ("\n") ;
-
-       fclose (file) ;
-} /* hexdump_file */
-
-void
-dump_log_buffer (SNDFILE *file)
-{      static char     buffer [LOG_BUFFER_SIZE] ;
-
-       memset (buffer, 0, sizeof (buffer)) ;
-
-       /* Get the log buffer data. */
-       sf_command      (file, SFC_GET_LOG_INFO, buffer, LOG_BUFFER_SIZE) ;
-
-       if (strlen (buffer) < 1)
-               puts ("Log buffer empty.\n") ;
-       else
-               puts (buffer) ;
-
-       return ;
-} /* dump_log_buffer */
-
-SNDFILE *
-test_open_file_or_die (const char *filename, int mode, SF_INFO *sfinfo, int allow_fd, int line_num)
-{      static int count = 0 ;
-
-       SNDFILE *file ;
-       const char *modestr, *func_name ;
-       int oflags = 0, omode = 0, err ;
-
-       /*
-       ** Need to test both sf_open() and sf_open_fd().
-       ** Do so alternately.
-       */
-       switch (mode)
-       {       case SFM_READ :
-                               modestr = "SFM_READ" ;
-                               oflags = O_RDONLY | O_BINARY ;
-                               omode = 0 ;
-                               break ;
-
-               case SFM_WRITE :
-                               modestr = "SFM_WRITE" ;
-                               oflags = O_WRONLY | O_CREAT | O_TRUNC | O_BINARY ;
-                               omode = S_IRUSR | S_IWUSR | S_IRGRP ;
-                               break ;
-
-               case SFM_RDWR :
-                               modestr = "SFM_RDWR" ;
-                               oflags = O_RDWR | O_CREAT | O_BINARY ;
-                               omode = S_IRUSR | S_IWUSR | S_IRGRP ;
-                               break ;
-               default :
-                               printf ("\n\nLine %d: Bad mode.\n", line_num) ;
-                               fflush (stdout) ;
-                               exit (1) ;
-               } ;
-
-       if (OS_IS_WIN32)
-       {       /* Windows does not understand and ignores the S_IRGRP flag, but Wine
-               ** gives a run time warning message, so just clear it.
-               */
-               omode &= ~S_IRGRP ;
-               } ;
-
-       if (allow_fd && ((++count) & 1) == 1)
-       {       int fd ;
-
-               /* Only use the three argument open() function if omode != 0. */
-               fd = (omode == 0) ? open (filename, oflags) : open (filename, oflags, omode) ;
-
-               if (fd < 0)
-               {       printf ("\n\n%s : open failed : %s\n", __func__, strerror (errno)) ;
-                       exit (1) ;
-                       } ;
-
-               func_name = "sf_open_fd" ;
-               file = sf_open_fd (fd, mode, sfinfo, SF_TRUE) ;
-               }
-       else
-       {       func_name = "sf_open" ;
-               file = sf_open (filename, mode, sfinfo) ;
-               } ;
-
-       if (file == NULL)
-       {       printf ("\n\nLine %d: %s (%s) failed : %s\n\n", line_num, func_name, modestr, sf_strerror (NULL)) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       err = sf_error (file) ;
-       if (err != SF_ERR_NO_ERROR)
-       {       printf ("\n\nLine %d : sf_error : %s\n\n", line_num, sf_error_number (err)) ;
-               dump_log_buffer (file) ;
-               exit (1) ;
-               } ;
-
-       return file ;
-} /* test_open_file_or_die */
-
-void
-test_read_write_position_or_die (SNDFILE *file, int line_num, int pass, sf_count_t read_pos, sf_count_t write_pos)
-{      sf_count_t pos ;
-
-       /* Check the current read position. */
-       if (read_pos >= 0 && (pos = sf_seek (file, 0, SEEK_CUR | SFM_READ)) != read_pos)
-       {       printf ("\n\nLine %d ", line_num) ;
-               if (pass > 0)
-                       printf ("(pass %d): ", pass) ;
-               printf ("Read position (%" PRId64 ") should be %" PRId64 ".\n", pos, read_pos) ;
-               exit (1) ;
-               } ;
-
-       /* Check the current write position. */
-       if (write_pos >= 0 && (pos = sf_seek (file, 0, SEEK_CUR | SFM_WRITE)) != write_pos)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : Write position (%" PRId64 ") should be %" PRId64 ".\n", pos, write_pos) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_read_write_position */
-
-void
-test_seek_or_die (SNDFILE *file, sf_count_t offset, int whence, sf_count_t new_pos, int channels, int line_num)
-{      sf_count_t      position ;
-       const char      *channel_name, *whence_name ;
-
-       switch (whence)
-       {       case SEEK_SET :
-                               whence_name = "SEEK_SET" ;
-                               break ;
-               case SEEK_CUR :
-                               whence_name = "SEEK_CUR" ;
-                               break ;
-               case SEEK_END :
-                               whence_name = "SEEK_END" ;
-                               break ;
-
-               /* SFM_READ */
-               case SEEK_SET | SFM_READ :
-                               whence_name = "SFM_READ | SEEK_SET" ;
-                               break ;
-               case SEEK_CUR | SFM_READ :
-                               whence_name = "SFM_READ | SEEK_CUR" ;
-                               break ;
-               case SEEK_END | SFM_READ :
-                               whence_name = "SFM_READ | SEEK_END" ;
-                               break ;
-
-               /* SFM_WRITE */
-               case SEEK_SET | SFM_WRITE :
-                               whence_name = "SFM_WRITE | SEEK_SET" ;
-                               break ;
-               case SEEK_CUR | SFM_WRITE :
-                               whence_name = "SFM_WRITE | SEEK_CUR" ;
-                               break ;
-               case SEEK_END | SFM_WRITE :
-                               whence_name = "SFM_WRITE | SEEK_END" ;
-                               break ;
-
-               default :
-                               printf ("\n\nLine %d: bad whence parameter.\n", line_num) ;
-                               exit (1) ;
-               } ;
-
-       channel_name = (channels == 1) ? "Mono" : "Stereo" ;
-
-       if ((position = sf_seek (file, offset, whence)) != new_pos)
-       {       printf ("\n\nLine %d : %s : sf_seek (file, %" PRId64 ", %s) returned %" PRId64 " (should be %" PRId64 ").\n\n",
-                                       line_num, channel_name, offset, whence_name, position, new_pos) ;
-               exit (1) ;
-               } ;
-
-} /* test_seek_or_die */
-
-[+ FOR read_op +]
-[+ FOR io_type +]
-void
-test_[+ (get "op_element") +]_[+ (get "io_element") +]_or_die (SNDFILE *file, int pass, [+ (get "io_element") +] *test, sf_count_t [+ (get "count_name") +], int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_[+ (get "op_element") +]_[+ (get "io_element") +] (file, test, [+ (get "count_name") +])) != [+ (get "count_name") +])
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_[+ (get "op_element") +]_[+ (get "io_element") +] failed with short [+ (get "op_element") +] (%" PRId64 " => %" PRId64 ").\n",
-                                               [+ (get "count_name") +], count) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_[+ (get "op_element") +]_[+ (get "io_element") +]_or_die */
-[+ ENDFOR io_type +][+ ENDFOR read_op +]
-
-void
-test_read_raw_or_die (SNDFILE *file, int pass, void *test, sf_count_t items, int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_read_raw (file, test, items)) != items)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_read_raw failed with short read (%" PRId64 " => %" PRId64 ").\n", items, count) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_read_raw_or_die */
-
-[+ FOR write_op +]
-[+ FOR io_type +]
-void
-test_[+ (get "op_element") +]_[+ (get "io_element") +]_or_die (SNDFILE *file, int pass, const [+ (get "io_element") +] *test, sf_count_t [+ (get "count_name") +], int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_[+ (get "op_element") +]_[+ (get "io_element") +] (file, test, [+ (get "count_name") +])) != [+ (get "count_name") +])
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_[+ (get "op_element") +]_[+ (get "io_element") +] failed with short [+ (get "op_element") +] (%" PRId64 " => %" PRId64 ").\n",
-                                               [+ (get "count_name") +], count) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_[+ (get "op_element") +]_[+ (get "io_element") +]_or_die */
-[+ ENDFOR io_type +][+ ENDFOR write_op +]
-
-void
-test_write_raw_or_die (SNDFILE *file, int pass, const void *test, sf_count_t items, int line_num)
-{      sf_count_t count ;
-
-       if ((count = sf_write_raw (file, test, items)) != items)
-       {       printf ("\n\nLine %d", line_num) ;
-               if (pass > 0)
-                       printf (" (pass %d)", pass) ;
-               printf (" : sf_write_raw failed with short write (%" PRId64 " => %" PRId64 ").\n", items, count) ;
-               fflush (stdout) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* test_write_raw_or_die */
-
-
-[+ FOR io_type
-+]void
-compare_[+ (get "io_element") +]_or_die (const [+ (get "io_element") +] *expected, const [+ (get "io_element") +] *actual, unsigned count, int line_num)
-{
-       unsigned k ;
-
-       for (k = 0 ; k < count ; k++)
-               if (expected [k] != actual [k])
-               {       printf ("\n\nLine %d : Error at index %d, got " [+ (get "format_str") +] ", should be " [+ (get "format_str") +] ".\n\n", line_num, k, actual [k], expected [k]) ;
-                       exit (1) ;
-                       } ;
-
-       return ;
-} /* compare_[+ (get "io_element") +]_or_die */
-[+ ENDFOR io_type +]
-
-
-void
-delete_file (int format, const char *filename)
-{      char rsrc_name [512], *fname ;
-
-       unlink (filename) ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_SD2)
-               return ;
-
-       /*
-       ** Now try for a resource fork stored as a separate file.
-       ** Grab the un-adulterated filename again.
-       */
-       snprintf (rsrc_name, sizeof (rsrc_name), "%s", filename) ;
-
-       if ((fname = strrchr (rsrc_name, '/')) != NULL)
-               fname ++ ;
-       else if ((fname = strrchr (rsrc_name, '\\')) != NULL)
-               fname ++ ;
-       else
-               fname = rsrc_name ;
-
-       memmove (fname + 2, fname, strlen (fname) + 1) ;
-       fname [0] = '.' ;
-       fname [1] = '_' ;
-
-       unlink (rsrc_name) ;
-} /* delete_file */
-
-static int allowed_open_files = -1 ;
-
-void
-count_open_files (void)
-{
-#if OS_IS_WIN32
-       return ;
-#else
-       int k, count = 0 ;
-       struct stat statbuf ;
-
-       if (allowed_open_files > 0)
-               return ;
-
-       for (k = 0 ; k < 1024 ; k++)
-               if (fstat (k, &statbuf) == 0)
-                       count ++ ;
-
-       allowed_open_files = count ;
-#endif
-} /* count_open_files */
-
-void
-increment_open_file_count (void)
-{      allowed_open_files ++ ;
-} /* increment_open_file_count */
-
-void
-check_open_file_count_or_die (int lineno)
-{
-#if OS_IS_WIN32
-       (void) lineno ;
-       return ;
-#else
-       int k, count = 0 ;
-       struct stat statbuf ;
-
-       if (allowed_open_files < 0)
-               count_open_files () ;
-
-       for (k = 0 ; k < 1024 ; k++)
-               if (fstat (k, &statbuf) == 0)
-                       count ++ ;
-
-       if (count > allowed_open_files)
-       {       printf ("\nLine %d : number of open files (%d) > allowed (%d).\n\n", lineno, count, allowed_open_files) ;
-               exit (1) ;
-               } ;
-#endif
-} /* check_open_file_count_or_die */
-
-void
-write_mono_file (const char * filename, int format, int srate, float * output, int len)
-{      SNDFILE * file ;
-       SF_INFO sfinfo ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       sfinfo.samplerate = srate ;
-       sfinfo.channels = 1 ;
-       sfinfo.format = format ;
-
-       if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-       {       printf ("sf_open (%s) : %s\n", filename, sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       sf_write_float (file, output, len) ;
-
-       sf_close (file) ;
-} /* write_mono_file */
-
-void
-gen_lowpass_signal_float (float *data, int len)
-{      int32_t value = 0x1243456 ;
-       double sample, last_val = 0.0 ;
-       int k ;
-
-       for (k = 0 ; k < len ; k++)
-       {       /* Not a crypto quality RNG. */
-               value = 11117 * value + 211231 ;
-               value = 11117 * value + 211231 ;
-               value = 11117 * value + 211231 ;
-
-               sample = value / (0x7fffffff * 1.000001) ;
-               sample = 0.2 * sample - 0.9 * last_val ;
-
-               last_val = sample ;
-
-               data [k] = 0.5 * (sample + sin (2.0 * k * M_PI * 1.0 / 32.0)) ;
-               } ;
-
-} /* gen_lowpass_signal_float */
-
-
-/*
-**     Windows is fucked.
-**     If a file is opened R/W and data is written to it, then fstat will return
-**     the correct file length, but stat will return zero.
-*/
-
-sf_count_t
-file_length (const char * fname)
-{      struct stat data ;
-
-       if (stat (fname, &data) != 0)
-               return 0 ;
-
-       return (sf_count_t) data.st_size ;
-} /* file_length */
-
-sf_count_t
-file_length_fd (int fd)
-{      struct stat data ;
-
-       memset (&data, 0, sizeof (data)) ;
-       if (fstat (fd, &data) != 0)
-               return 0 ;
-
-       return (sf_count_t) data.st_size ;
-} /* file_length_fd */
-
-
-[+ ESAC +]
-
diff --git a/libs/libsndfile/tests/virtual_io_test.c b/libs/libsndfile/tests/virtual_io_test.c
deleted file mode 100644 (file)
index 1aae063..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <fcntl.h>
-#include <math.h>
-#include <string.h>
-#include <errno.h>
-#include <sys/stat.h>
-
-#include <sndfile.h>
-
-#include "utils.h"
-
-static void vio_test (const char *fname, int format) ;
-
-int
-main (void)
-{
-       vio_test ("vio_pcm16.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-       vio_test ("vio_pcm24.aiff", SF_FORMAT_AIFF | SF_FORMAT_PCM_24) ;
-       vio_test ("vio_float.au", SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
-       vio_test ("vio_pcm24.paf", SF_FORMAT_PAF | SF_FORMAT_PCM_24) ;
-
-       return 0 ;
-} /* main */
-
-/*==============================================================================
-*/
-
-typedef struct
-{      sf_count_t offset, length ;
-       unsigned char data [16 * 1024] ;
-} VIO_DATA ;
-
-static sf_count_t
-vfget_filelen (void *user_data)
-{      VIO_DATA *vf = (VIO_DATA *) user_data ;
-
-       return vf->length ;
-} /* vfget_filelen */
-
-static sf_count_t
-vfseek (sf_count_t offset, int whence, void *user_data)
-{      VIO_DATA *vf = (VIO_DATA *) user_data ;
-
-       switch (whence)
-       {       case SEEK_SET :
-                       vf->offset = offset ;
-                       break ;
-
-               case SEEK_CUR :
-                       vf->offset = vf->offset + offset ;
-                       break ;
-
-               case SEEK_END :
-                       vf->offset = vf->length + offset ;
-                       break ;
-               default :
-                       break ;
-               } ;
-
-       return vf->offset ;
-} /* vfseek */
-
-static sf_count_t
-vfread (void *ptr, sf_count_t count, void *user_data)
-{      VIO_DATA *vf = (VIO_DATA *) user_data ;
-
-       /*
-       **      This will brack badly for files over 2Gig in length, but
-       **      is sufficient for testing.
-       */
-       if (vf->offset + count > vf->length)
-               count = vf->length - vf->offset ;
-
-       memcpy (ptr, vf->data + vf->offset, count) ;
-       vf->offset += count ;
-
-       return count ;
-} /* vfread */
-
-static sf_count_t
-vfwrite (const void *ptr, sf_count_t count, void *user_data)
-{      VIO_DATA *vf = (VIO_DATA *) user_data ;
-
-       /*
-       **      This will break badly for files over 2Gig in length, but
-       **      is sufficient for testing.
-       */
-       if (vf->offset >= SIGNED_SIZEOF (vf->data))
-               return 0 ;
-
-       if (vf->offset + count > SIGNED_SIZEOF (vf->data))
-               count = sizeof (vf->data) - vf->offset ;
-
-       memcpy (vf->data + vf->offset, ptr, (size_t) count) ;
-       vf->offset += count ;
-
-       if (vf->offset > vf->length)
-               vf->length = vf->offset ;
-
-       return count ;
-} /* vfwrite */
-
-static sf_count_t
-vftell (void *user_data)
-{      VIO_DATA *vf = (VIO_DATA *) user_data ;
-
-       return vf->offset ;
-} /* vftell */
-
-
-/*==============================================================================
-*/
-
-static void
-gen_short_data (short * data, int len, int start)
-{      int k ;
-
-       for (k = 0 ; k < len ; k++)
-               data [k] = start + k ;
-} /* gen_short_data */
-
-
-static void
-check_short_data (short * data, int len, int start, int line)
-{      int k ;
-
-       for (k = 0 ; k < len ; k++)
-               if (data [k] != start + k)
-               {       printf ("\n\nLine %d : data [%d] = %d (should be %d).\n\n", line, k, data [k], start + k) ;
-                       exit (1) ;
-                       } ;
-} /* gen_short_data */
-
-/*------------------------------------------------------------------------------
-*/
-
-static void
-vio_test (const char *fname, int format)
-{      static VIO_DATA vio_data ;
-       static short data [256] ;
-
-       SF_VIRTUAL_IO vio ;
-       SNDFILE * file ;
-       SF_INFO sfinfo ;
-
-       print_test_name ("virtual i/o test", fname) ;
-
-       /* Set up pointers to the locally defined functions. */
-       vio.get_filelen = vfget_filelen ;
-       vio.seek = vfseek ;
-       vio.read = vfread ;
-       vio.write = vfwrite ;
-       vio.tell = vftell ;
-
-       /* Set virtual file offset and length to zero. */
-       vio_data.offset = 0 ;
-       vio_data.length = 0 ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.format = format ;
-       sfinfo.channels = 2 ;
-       sfinfo.samplerate = 44100 ;
-
-       if ((file = sf_open_virtual (&vio, SFM_WRITE, &sfinfo, &vio_data)) == NULL)
-       {       printf ("\n\nLine %d : sf_open_write failed with error : ", __LINE__) ;
-               fflush (stdout) ;
-               puts (sf_strerror (NULL)) ;
-               exit (1) ;
-               } ;
-
-       if (vfget_filelen (&vio_data) < 0)
-       {       printf ("\n\nLine %d : vfget_filelen returned negative length.\n\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       gen_short_data (data, ARRAY_LEN (data), 0) ;
-       sf_write_short (file, data, ARRAY_LEN (data)) ;
-
-       gen_short_data (data, ARRAY_LEN (data), 1) ;
-       sf_write_short (file, data, ARRAY_LEN (data)) ;
-
-       gen_short_data (data, ARRAY_LEN (data), 2) ;
-       sf_write_short (file, data, ARRAY_LEN (data)) ;
-
-       sf_close (file) ;
-
-       /* Now test read. */
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       vio_data.offset = 0 ;
-
-       if ((file = sf_open_virtual (&vio, SFM_READ, &sfinfo, &vio_data)) == NULL)
-       {       printf ("\n\nLine %d : sf_open_write failed with error : ", __LINE__) ;
-               fflush (stdout) ;
-               puts (sf_strerror (NULL)) ;
-
-               dump_data_to_file (fname, vio_data.data, vio_data.length) ;
-               exit (1) ;
-               } ;
-
-
-       sf_read_short (file, data, ARRAY_LEN (data)) ;
-       check_short_data (data, ARRAY_LEN (data), 0, __LINE__) ;
-
-       sf_read_short (file, data, ARRAY_LEN (data)) ;
-       check_short_data (data, ARRAY_LEN (data), 1, __LINE__) ;
-
-       sf_read_short (file, data, ARRAY_LEN (data)) ;
-       check_short_data (data, ARRAY_LEN (data), 2, __LINE__) ;
-
-       sf_close (file) ;
-
-       puts ("ok") ;
-} /* vio_test */
-
diff --git a/libs/libsndfile/tests/vorbis_test.c b/libs/libsndfile/tests/vorbis_test.c
deleted file mode 100644 (file)
index 9f5797f..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
-** Copyright (C) 2007-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include <math.h>
-
-#include       <sndfile.h>
-
-#include       "utils.h"
-#include       "dft_cmp.h"
-
-#define        SAMPLE_RATE             16000
-#define        DATA_LENGTH             (SAMPLE_RATE / 8)
-
-static float data_out [DATA_LENGTH] ;
-
-static inline float
-max_float (float a, float b)
-{      return a > b ? a : b ;
-} /* max_float */
-
-static void
-vorbis_test (void)
-{      static float float_data [DFT_DATA_LENGTH] ;
-       const char * filename = "vorbis_test.oga" ;
-       SNDFILE * file ;
-       SF_INFO sfinfo ;
-       float max_abs = 0.0 ;
-       unsigned k ;
-
-       print_test_name ("vorbis_test", filename) ;
-
-       /* Generate float data. */
-       gen_windowed_sine_float (float_data, ARRAY_LEN (float_data), 1.0) ;
-
-       /* Set up output file type. */
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       sfinfo.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS ;
-       sfinfo.channels = 1 ;
-       sfinfo.samplerate = SAMPLE_RATE ;
-
-       /* Write the output file. */
-
-       /*      The Vorbis encoder has a bug on PowerPC and X86-64 with sample rates
-       **      <= 22050. Increasing the sample rate to 32000 avoids triggering it.
-       **      See https://trac.xiph.org/ticket/1229
-       */
-       if ((file = sf_open (filename, SFM_WRITE, &sfinfo)) == NULL)
-       {       const char * errstr ;
-
-               errstr = sf_strerror (NULL) ;
-               if (strstr (errstr, "Sample rate chosen is known to trigger a Vorbis") == NULL)
-               {       printf ("Line %d: sf_open (SFM_WRITE) failed : %s\n", __LINE__, errstr) ;
-                       dump_log_buffer (NULL) ;
-                       exit (1) ;
-                       } ;
-
-               printf ("\n                                  Sample rate -> 32kHz    ") ;
-               sfinfo.samplerate = 32000 ;
-
-               file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
-               } ;
-
-       test_write_float_or_die (file, 0, float_data, ARRAY_LEN (float_data), __LINE__) ;
-       sf_close (file) ;
-
-       memset (float_data, 0, sizeof (float_data)) ;
-
-       /* Read the file back in again. */
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_FALSE, __LINE__) ;
-       test_read_float_or_die (file, 0, float_data, ARRAY_LEN (float_data), __LINE__) ;
-       sf_close (file) ;
-
-       for (k = 0 ; k < ARRAY_LEN (float_data) ; k ++)
-               max_abs = max_float (max_abs, fabs (float_data [k])) ;
-
-       if (max_abs > 1.021)
-       {       printf ("\n\n    Error : max_abs %f should be < 1.021.\n\n", max_abs) ;
-               exit (1) ;
-               } ;
-
-       puts ("ok") ;
-       unlink (filename) ;
-} /* vorbis_test */
-
-static void
-vorbis_quality_test (void)
-{      /*
-       **      Encode two files, one at quality 0.3 and one at quality 0.5 and then
-       **      make sure that the quality 0.3 files is the smaller of the two.
-       */
-       const char * q3_fname = "q3_vorbis.oga" ;
-       const char * q5_fname = "q5_vorbis.oga" ;
-
-       SNDFILE *q3_file, *q5_file ;
-       SF_INFO sfinfo ;
-       int q3_size, q5_size ;
-       double quality ;
-       int k ;
-
-       print_test_name (__func__, "q[35]_vorbis.oga") ;
-
-       memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       /* Set up output file type. */
-       sfinfo.format = SF_FORMAT_OGG | SF_FORMAT_VORBIS ;
-       sfinfo.channels = 1 ;
-       sfinfo.samplerate = SAMPLE_RATE ;
-
-       /* Write the output file. */
-       q3_file = test_open_file_or_die (q3_fname, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-       q5_file = test_open_file_or_die (q5_fname, SFM_WRITE, &sfinfo, SF_FALSE, __LINE__) ;
-
-       quality = 0.3 ;
-       sf_command (q3_file, SFC_SET_VBR_ENCODING_QUALITY, &quality, sizeof (quality)) ;
-       quality = 0.5 ;
-       sf_command (q5_file, SFC_SET_VBR_ENCODING_QUALITY, &quality, sizeof (quality)) ;
-
-       for (k = 0 ; k < 5 ; k++)
-       {       gen_lowpass_noise_float (data_out, ARRAY_LEN (data_out)) ;
-               test_write_float_or_die (q3_file, 0, data_out, ARRAY_LEN (data_out), __LINE__) ;
-               test_write_float_or_die (q5_file, 0, data_out, ARRAY_LEN (data_out), __LINE__) ;
-               } ;
-
-       sf_close (q3_file) ;
-       sf_close (q5_file) ;
-
-       q3_size = file_length (q3_fname) ;
-       q5_size = file_length (q5_fname) ;
-
-       if (q3_size >= q5_size)
-       {       printf ("\n\nLine %d : q3 size (%d) >= q5 size (%d)\n\n", __LINE__, q3_size, q5_size) ;
-               exit (1) ;
-               } ;
-
-       puts ("ok") ;
-       unlink (q3_fname) ;
-       unlink (q5_fname) ;
-} /* vorbis_quality_test */
-
-
-
-int
-main (void)
-{
-       if (HAVE_EXTERNAL_LIBS)
-       {       vorbis_test () ;
-               vorbis_quality_test () ;
-               }
-       else
-               puts ("    No Ogg/Vorbis tests because Ogg/Vorbis support was not compiled in.") ;
-
-       return 0 ;
-} /* main */
diff --git a/libs/libsndfile/tests/win32_ordinal_test.c b/libs/libsndfile/tests/win32_ordinal_test.c
deleted file mode 100644 (file)
index 5324a2e..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
-** Copyright (C) 2006-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#include <string.h>
-#include <fcntl.h>
-#include <sys/types.h>
-
-#include "utils.h"
-
-#if (defined (WIN32) || defined (_WIN32) || defined (__CYGWIN__))
-#define TEST_WIN32             1
-#else
-#define TEST_WIN32             0
-#endif
-
-#if TEST_WIN32
-#include <windows.h>
-
-
-static const char * locations [] =
-{      ".", "../src/", "src/", "../src/.libs/", "src/.libs/",
-       NULL
-} ; /* locations. */
-
-static int
-test_ordinal (HMODULE hmod, const char * func_name, int ordinal)
-{      char *lpmsg ;
-       void *name, *ord ;
-
-       print_test_name ("win32_ordinal_test", func_name) ;
-
-#if SIZEOF_VOIDP == 8
-#define        LPCSTR_OF_ORDINAL(x)    ((LPCSTR) ((int64_t) (x)))
-#else
-#define        LPCSTR_OF_ORDINAL(x)    ((LPCSTR) (x))
-#endif
-
-       ord = GetProcAddress (hmod, LPCSTR_OF_ORDINAL (ordinal)) ;
-       if ((name = GetProcAddress (hmod, func_name)) == NULL)
-       {       FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError (),
-                                       MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpmsg, 0, NULL) ;
-               /*-puts (lpmsg) ;-*/
-               } ;
-
-       if (name != NULL && ord != NULL && name == ord)
-       {       puts ("ok") ;
-               return 0 ;
-               } ;
-
-       puts ("fail") ;
-       return 1 ;
-} /* test_ordinal */
-
-static void
-win32_ordinal_test (void)
-{      static char buffer [1024] ;
-       static char func_name [1024] ;
-       HMODULE hmod = NULL ;
-       FILE * file = NULL ;
-       int k, ordinal, errors = 0 ;
-
-       for (k = 0 ; locations [k] != NULL ; k++)
-       {       snprintf (buffer, sizeof (buffer), "%s/libsndfile-1.def", locations [k]) ;
-               if ((file = fopen (buffer, "r")) != NULL)
-                       break ;
-               } ;
-
-       if (file == NULL)
-       {       puts ("\n\nError : cannot open DEF file.\n") ;
-               exit (1) ;
-               } ;
-
-       for (k = 0 ; locations [k] != NULL ; k++)
-       {       snprintf (buffer, sizeof (buffer), "%s/libsndfile-1.dll", locations [k]) ;
-               if ((hmod = (HMODULE) LoadLibrary (buffer)) != NULL)
-                       break ;
-               } ;
-
-       if (hmod == NULL)
-       {       puts ("\n\nError : cannot load DLL.\n") ;
-               exit (1) ;
-               } ;
-
-       while (fgets (buffer, sizeof (buffer), file) != NULL)
-       {       func_name [0] = 0 ;
-               ordinal = 0 ;
-
-               if (sscanf (buffer, "%s @%d", func_name, &ordinal) != 2)
-                       continue ;
-
-               errors += test_ordinal (hmod, func_name, ordinal) ;
-               } ;
-
-       FreeLibrary (hmod) ;
-
-       fclose (file) ;
-
-       if (errors > 0)
-       {       printf ("\n\nErrors : %d\n\n", errors) ;
-               exit (1) ;
-               } ;
-
-       return ;
-} /* win32_ordinal_test */
-
-#endif
-
-int
-main (void)
-{
-#if (TEST_WIN32 && WIN32_TARGET_DLL)
-       win32_ordinal_test () ;
-#endif
-
-       return 0 ;
-} /* main */
-
diff --git a/libs/libsndfile/tests/win32_test.c b/libs/libsndfile/tests/win32_test.c
deleted file mode 100644 (file)
index d0dc6d8..0000000
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
-** Copyright (C) 2001-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-#include "sndfile.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if (HAVE_DECL_S_IRGRP == 0)
-#include <sf_unistd.h>
-#endif
-
-#include <string.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#define SIGNED_SIZEOF(x)       ((int) sizeof (x))
-
-/* EMX is OS/2. */
-#if defined (__CYGWIN__) || defined (__EMX__)
-
-       #define         LSEEK   lseek
-       #define         FSTAT   fstat
-
-       typedef         struct stat                     STATBUF ;
-       typedef         off_t                           INT64 ;
-
-       static char dir_cmd [] = "ls -l" ;
-
-#elif (defined (WIN32) || defined (_WIN32))
-
-       #define         LSEEK   _lseeki64
-       #define         FSTAT   _fstati64
-
-       typedef         struct _stati64         STATBUF ;
-       typedef         __int64                         INT64 ;
-
-       static char dir_cmd [] = "dir" ;
-
-#else
-
-       #define         LSEEK   lseek
-       #define         FSTAT   fstat
-
-       typedef         struct stat             STATBUF ;
-       typedef         sf_count_t              INT64 ;
-
-       #define         O_BINARY        0
-       static char dir_cmd [] = "ls -l" ;
-
-#endif
-
-static void show_fstat_error (void) ;
-static void show_lseek_error (void) ;
-static void show_stat_fstat_error (void) ;
-static void write_to_closed_file (void) ;
-
-int
-main (void)
-{
-       puts ("\n\n\n\n"
-               "This program shows up errors in the Win32 implementation of\n"
-               "a couple of POSIX API functions on some versions of windoze.\n"
-               "It can also be compiled on Linux (which works correctly) and\n"
-               "other OSes just to provide a sanity check.\n"
-               ) ;
-
-       show_fstat_error () ;
-       show_lseek_error () ;
-       show_stat_fstat_error () ;
-       write_to_closed_file () ;
-
-       puts ("\n\n") ;
-
-       return 0 ;
-} /* main */
-
-static void
-show_fstat_error (void)
-{      static const char *filename = "fstat.dat" ;
-       static char data [256] ;
-
-       STATBUF         statbuf ;
-       int fd, mode, flags ;
-
-       if (sizeof (statbuf.st_size) != sizeof (INT64))
-       {       printf ("\n\nLine %d: Error, sizeof (statbuf.st_size) != 8.\n\n", __LINE__) ;
-               return ;
-               } ;
-
-       puts ("\n64 bit fstat() test.\n--------------------") ;
-
-       printf ("0) Create a file, write %d bytes and close it.\n", SIGNED_SIZEOF (data)) ;
-       mode = O_WRONLY | O_CREAT | O_TRUNC | O_BINARY ;
-       flags = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ;
-       if ((fd = open (filename, mode, flags)) < 0)
-       {       printf ("\n\nLine %d: open() failed : %s\n\n", __LINE__, strerror (errno)) ;
-               return ;
-               } ;
-       assert (write (fd, data, sizeof (data)) > 0) ;
-       close (fd) ;
-
-       printf ("1) Re-open file in read/write mode and write another %d bytes at the end.\n", SIGNED_SIZEOF (data)) ;
-       mode = O_RDWR | O_BINARY ;
-       flags = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ;
-       if ((fd = open (filename, mode, flags)) < 0)
-       {       printf ("\n\nLine %d: open() failed : %s\n\n", __LINE__, strerror (errno)) ;
-               return ;
-               } ;
-       LSEEK (fd, 0, SEEK_END) ;
-       assert (write (fd, data, sizeof (data)) > 0) ;
-
-       printf ("2) Now use system (\"%s %s\") to show the file length.\n\n", dir_cmd, filename) ;
-
-       /* Would use snprintf, but thats not really available on windows. */
-       memset (data, 0, sizeof (data)) ;
-       strncpy (data, dir_cmd, sizeof (data) - 1) ;
-       strncat (data, " ", sizeof (data) - 1 - strlen (data)) ;
-       strncat (data, filename, sizeof (data) - 1 - strlen (data)) ;
-
-       assert (system (data) >= 0) ;
-       puts ("") ;
-
-       printf ("3) Now use fstat() to get the file length.\n") ;
-       if (FSTAT (fd, &statbuf) != 0)
-       {       printf ("\n\nLine %d: fstat() returned error : %s\n", __LINE__, strerror (errno)) ;
-               return ;
-               } ;
-
-       printf ("4) According to fstat(), the file length is %ld, ", (long) statbuf.st_size) ;
-
-       close (fd) ;
-
-       if (statbuf.st_size != 2 * sizeof (data))
-               printf ("but thats just plain ***WRONG***.\n\n") ;
-       else
-       {       printf ("which is correct.\n\n") ;
-               unlink (filename) ;
-               } ;
-
-} /* show_fstat_error */
-
-static void
-show_lseek_error (void)
-{      static const char *filename = "fstat.dat" ;
-       static char data [256] ;
-
-       INT64   retval ;
-       int fd, mode, flags ;
-
-       puts ("\n64 bit lseek() test.\n--------------------") ;
-
-       printf ("0) Create a file, write %d bytes and close it.\n", SIGNED_SIZEOF (data)) ;
-       mode = O_WRONLY | O_CREAT | O_TRUNC | O_BINARY ;
-       flags = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ;
-       if ((fd = open (filename, mode, flags)) < 0)
-       {       printf ("\n\nLine %d: open() failed : %s\n\n", __LINE__, strerror (errno)) ;
-               return ;
-               } ;
-       assert (write (fd, data, sizeof (data)) > 0) ;
-       close (fd) ;
-
-       printf ("1) Re-open file in read/write mode and write another %d bytes at the end.\n", SIGNED_SIZEOF (data)) ;
-       mode = O_RDWR | O_BINARY ;
-       flags = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ;
-       if ((fd = open (filename, mode, flags)) < 0)
-       {       printf ("\n\nLine %d: open() failed : %s\n\n", __LINE__, strerror (errno)) ;
-               return ;
-               } ;
-
-       LSEEK (fd, 0, SEEK_END) ;
-       assert (write (fd, data, sizeof (data)) > 0) ;
-
-       printf ("2) Now use system (\"%s %s\") to show the file length.\n\n", dir_cmd, filename) ;
-
-       /* Would use snprintf, but thats not really available on windows. */
-       memset (data, 0, sizeof (data)) ;
-       strncpy (data, dir_cmd, sizeof (data) - 1) ;
-       strncat (data, " ", sizeof (data) - 1 - strlen (data)) ;
-       strncat (data, filename, sizeof (data) - 1 - strlen (data)) ;
-
-       assert (system (data) >= 0) ;
-       puts ("") ;
-
-       printf ("3) Now use lseek() to go to the end of the file.\n") ;
-       retval = LSEEK (fd, 0, SEEK_END) ;
-
-       printf ("4) We are now at position %ld, ", (long) retval) ;
-
-       close (fd) ;
-
-       if (retval != 2 * sizeof (data))
-               printf ("but thats just plain ***WRONG***.\n\n") ;
-       else
-       {       printf ("which is correct.\n\n") ;
-               unlink (filename) ;
-               } ;
-
-} /* show_lseek_error */
-
-static void
-show_stat_fstat_error (void)
-{      static const char *filename = "stat_fstat.dat" ;
-       static char data [256] ;
-
-       int fd, mode, flags ;
-       int stat_size, fstat_size ;
-       struct stat buf ;
-
-       /* Known to fail on WinXP. */
-       puts ("\nstat/fstat test.\n----------------") ;
-
-       printf ("0) Create a file and write %d bytes.\n", SIGNED_SIZEOF (data)) ;
-
-       mode = O_WRONLY | O_CREAT | O_TRUNC | O_BINARY ;
-       flags = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH ;
-       if ((fd = open (filename, mode, flags)) < 0)
-       {       printf ("\n\nLine %d: open() failed : %s\n\n", __LINE__, strerror (errno)) ;
-               return ;
-               } ;
-
-       assert (write (fd, data, sizeof (data)) > 0) ;
-
-       printf ("1) Now call stat and fstat on the file and retreive the file lengths.\n") ;
-
-       if (stat (filename, &buf) != 0)
-       {       printf ("\n\nLine %d: stat() failed : %s\n\n", __LINE__, strerror (errno)) ;
-               goto error_exit ;
-               } ;
-       stat_size = buf.st_size ;
-
-       if (fstat (fd, &buf) != 0)
-       {       printf ("\n\nLine %d: fstat() failed : %s\n\n", __LINE__, strerror (errno)) ;
-               goto error_exit ;
-               } ;
-       fstat_size = buf.st_size ;
-
-       printf ("2) Size returned by stat and fstat is %d and %d, ", stat_size, fstat_size) ;
-
-
-       if (stat_size == 0 || stat_size != fstat_size)
-               printf ("but thats just plain ***WRONG***.\n\n") ;
-       else
-               printf ("which is correct.\n\n") ;
-
-error_exit :
-
-       close (fd) ;
-       unlink (filename) ;
-
-       return ;
-} /* show_stat_fstat_error */
-
-
-static void
-write_to_closed_file (void)
-{      const char * filename = "closed_write_test.txt" ;
-       struct stat buf ;
-       FILE * file ;
-       int             fd ;
-
-       puts ("\nWrite to closed file test.\n--------------------------") ;
-
-       printf ("0) First we open file for write using fopen().\n") ;
-       if ((file = fopen (filename, "w")) == NULL)
-       {       printf ("\n\nLine %d: fopen() failed : %s\n\n", __LINE__, strerror (errno)) ;
-               return ;
-               } ;
-
-       printf ("1) Now we grab the file descriptor fileno().\n") ;
-       fd = fileno (file) ;
-
-       printf ("2) Write some text via the file descriptor.\n") ;
-       assert (write (fd, "a\n", 2) > 0) ;
-
-       printf ("3) Now we close the file using fclose().\n") ;
-       fclose (file) ;
-
-       stat (filename, &buf) ;
-       printf ("   File size is %d bytes.\n", (int) buf.st_size) ;
-
-       printf ("4) Now write more data to the file descriptor which should fail.\n") ;
-       if (write (fd, "b\n", 2) < 0)
-               printf ("5) Good, write returned an error code as it should have.\n") ;
-       else
-       {       printf ("5) Attempting to write to a closed file should have failed but didn't! *** WRONG ***\n") ;
-
-               stat (filename, &buf) ;
-               printf ("   File size is %d bytes.\n", (int) buf.st_size) ;
-               } ;
-
-       unlink (filename) ;
-
-       return ;
-} /* write_to_closed_file */
diff --git a/libs/libsndfile/tests/write_read_test.c b/libs/libsndfile/tests/write_read_test.c
deleted file mode 100644 (file)
index 9f8a8f5..0000000
+++ /dev/null
@@ -1,3731 +0,0 @@
-/*
-** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include       <math.h>
-
-#if (defined (WIN32) || defined (_WIN32))
-#include       <fcntl.h>
-static int truncate (const char *filename, int ignored) ;
-#endif
-
-#include       <sndfile.h>
-
-#include       "utils.h"
-#include       "generate.h"
-
-#define        SAMPLE_RATE                     11025
-#define        DATA_LENGTH                     (1<<12)
-
-#define        SILLY_WRITE_COUNT       (234)
-
-static void    pcm_test_char (const char *str, int format, int long_file_okz) ;
-static void    pcm_test_short (const char *str, int format, int long_file_okz) ;
-static void    pcm_test_24bit (const char *str, int format, int long_file_okz) ;
-static void    pcm_test_int (const char *str, int format, int long_file_okz) ;
-static void    pcm_test_float (const char *str, int format, int long_file_okz) ;
-static void    pcm_test_double (const char *str, int format, int long_file_okz) ;
-
-static void empty_file_test (const char *filename, int format) ;
-
-typedef union
-{      double d [DATA_LENGTH] ;
-       float f [DATA_LENGTH] ;
-       int i [DATA_LENGTH] ;
-       short s [DATA_LENGTH] ;
-       char c [DATA_LENGTH] ;
-} BUFFER ;
-
-static BUFFER  orig_data ;
-static BUFFER  test_data ;
-
-int
-main (int argc, char **argv)
-{      int             do_all = 0 ;
-       int             test_count = 0 ;
-
-       count_open_files () ;
-
-       if (argc != 2)
-       {       printf ("Usage : %s <test>\n", argv [0]) ;
-               printf ("    Where <test> is one of the following:\n") ;
-               printf ("           wav   - test WAV file functions (little endian)\n") ;
-               printf ("           aiff  - test AIFF file functions (big endian)\n") ;
-               printf ("           au    - test AU file functions\n") ;
-               printf ("           avr   - test AVR file functions\n") ;
-               printf ("           caf   - test CAF file functions\n") ;
-               printf ("           raw   - test RAW header-less PCM file functions\n") ;
-               printf ("           paf   - test PAF file functions\n") ;
-               printf ("           svx   - test 8SVX/16SV file functions\n") ;
-               printf ("           nist  - test NIST Sphere file functions\n") ;
-               printf ("           ircam - test IRCAM file functions\n") ;
-               printf ("           voc   - Create Voice file functions\n") ;
-               printf ("           w64   - Sonic Foundry's W64 file functions\n") ;
-               printf ("           flac  - test FLAC file functions\n") ;
-               printf ("           mpc2k - test MPC 2000 file functions\n") ;
-               printf ("           rf64  - test RF64 file functions\n") ;
-               printf ("           all   - perform all tests\n") ;
-               exit (1) ;
-               } ;
-
-       do_all = !strcmp (argv [1], "all") ;
-
-       if (do_all || ! strcmp (argv [1], "wav"))
-       {       pcm_test_char   ("char.wav"             , SF_FORMAT_WAV | SF_FORMAT_PCM_U8, SF_FALSE) ;
-               pcm_test_short  ("short.wav"    , SF_FORMAT_WAV | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit.wav"    , SF_FORMAT_WAV | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int.wav"              , SF_FORMAT_WAV | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-               pcm_test_char   ("char.rifx"    , SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_U8, SF_FALSE) ;
-               pcm_test_short  ("short.rifx"   , SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit.rifx"   , SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int.rifx"             , SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-               pcm_test_24bit  ("24bit.wavex"  , SF_FORMAT_WAVEX | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int.wavex"    , SF_FORMAT_WAVEX | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-               /* Lite remove start */
-               pcm_test_float  ("float.wav"    , SF_FORMAT_WAV | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double.wav"   , SF_FORMAT_WAV | SF_FORMAT_DOUBLE, SF_FALSE) ;
-
-               pcm_test_float  ("float.rifx"   , SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double.rifx"  , SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_DOUBLE, SF_FALSE) ;
-
-               pcm_test_float  ("float.wavex"  , SF_FORMAT_WAVEX | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double.wavex" , SF_FORMAT_WAVEX | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               /* Lite remove end */
-
-               empty_file_test ("empty_char.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_U8) ;
-               empty_file_test ("empty_short.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-               empty_file_test ("empty_float.wav", SF_FORMAT_WAV | SF_FORMAT_FLOAT) ;
-
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "aiff"))
-       {       pcm_test_char   ("char_u8.aiff" , SF_FORMAT_AIFF | SF_FORMAT_PCM_U8, SF_FALSE) ;
-               pcm_test_char   ("char_s8.aiff" , SF_FORMAT_AIFF | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_short  ("short.aiff"   , SF_FORMAT_AIFF | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit.aiff"   , SF_FORMAT_AIFF | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int.aiff"             , SF_FORMAT_AIFF | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-               pcm_test_short  ("short_sowt.aifc"      , SF_ENDIAN_LITTLE | SF_FORMAT_AIFF | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit_sowt.aifc"      , SF_ENDIAN_LITTLE | SF_FORMAT_AIFF | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int_sowt.aifc"        , SF_ENDIAN_LITTLE | SF_FORMAT_AIFF | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-               pcm_test_short  ("short_twos.aifc"      , SF_ENDIAN_BIG | SF_FORMAT_AIFF | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit_twos.aifc"      , SF_ENDIAN_BIG | SF_FORMAT_AIFF | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int_twos.aifc"        , SF_ENDIAN_BIG | SF_FORMAT_AIFF | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-               /* Lite remove start */
-               pcm_test_short  ("dwvw16.aifc", SF_FORMAT_AIFF | SF_FORMAT_DWVW_16, SF_TRUE) ;
-               pcm_test_24bit  ("dwvw24.aifc", SF_FORMAT_AIFF | SF_FORMAT_DWVW_24, SF_TRUE) ;
-
-               pcm_test_float  ("float.aifc"   , SF_FORMAT_AIFF | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double.aifc"  , SF_FORMAT_AIFF | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               /* Lite remove end */
-
-               empty_file_test ("empty_char.aiff", SF_FORMAT_AIFF | SF_FORMAT_PCM_U8) ;
-               empty_file_test ("empty_short.aiff", SF_FORMAT_AIFF | SF_FORMAT_PCM_16) ;
-               empty_file_test ("empty_float.aiff", SF_FORMAT_AIFF | SF_FORMAT_FLOAT) ;
-
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "au"))
-       {       pcm_test_char   ("char.au"      , SF_FORMAT_AU | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_short  ("short.au"     , SF_FORMAT_AU | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit.au"     , SF_FORMAT_AU | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int.au"       , SF_FORMAT_AU | SF_FORMAT_PCM_32, SF_FALSE) ;
-               /* Lite remove start */
-               pcm_test_float  ("float.au"     , SF_FORMAT_AU | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double.au", SF_FORMAT_AU | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               /* Lite remove end */
-
-               pcm_test_char   ("char_le.au"   , SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_short  ("short_le.au"  , SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit_le.au"  , SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int_le.au"    , SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_PCM_32, SF_FALSE) ;
-               /* Lite remove start */
-               pcm_test_float  ("float_le.au"  , SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double_le.au" , SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               /* Lite remove end */
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "caf"))
-       {       pcm_test_char   ("char.caf"             , SF_FORMAT_CAF | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_short  ("short.caf"    , SF_FORMAT_CAF | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit.caf"    , SF_FORMAT_CAF | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int.caf"              , SF_FORMAT_CAF | SF_FORMAT_PCM_32, SF_FALSE) ;
-               /* Lite remove start */
-               pcm_test_float  ("float.caf"    , SF_FORMAT_CAF | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double.caf"   , SF_FORMAT_CAF | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               /* Lite remove end */
-
-               pcm_test_short  ("short_le.caf" , SF_ENDIAN_LITTLE | SF_FORMAT_CAF | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit_le.caf" , SF_ENDIAN_LITTLE | SF_FORMAT_CAF | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int_le.caf"   , SF_ENDIAN_LITTLE | SF_FORMAT_CAF | SF_FORMAT_PCM_32, SF_FALSE) ;
-               /* Lite remove start */
-               pcm_test_float  ("float_le.caf" , SF_ENDIAN_LITTLE | SF_FORMAT_CAF | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double_le.caf", SF_ENDIAN_LITTLE | SF_FORMAT_CAF | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               /* Lite remove end */
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "raw"))
-       {       pcm_test_char   ("char_s8.raw"  , SF_FORMAT_RAW | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_char   ("char_u8.raw"  , SF_FORMAT_RAW | SF_FORMAT_PCM_U8, SF_FALSE) ;
-
-               pcm_test_short  ("short_le.raw" , SF_ENDIAN_LITTLE      | SF_FORMAT_RAW | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_short  ("short_be.raw" , SF_ENDIAN_BIG         | SF_FORMAT_RAW | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit_le.raw" , SF_ENDIAN_LITTLE      | SF_FORMAT_RAW | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_24bit  ("24bit_be.raw" , SF_ENDIAN_BIG         | SF_FORMAT_RAW | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int_le.raw"   , SF_ENDIAN_LITTLE      | SF_FORMAT_RAW | SF_FORMAT_PCM_32, SF_FALSE) ;
-               pcm_test_int    ("int_be.raw"   , SF_ENDIAN_BIG         | SF_FORMAT_RAW | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-               /* Lite remove start */
-               pcm_test_float  ("float_le.raw" , SF_ENDIAN_LITTLE      | SF_FORMAT_RAW | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_float  ("float_be.raw" , SF_ENDIAN_BIG         | SF_FORMAT_RAW | SF_FORMAT_FLOAT , SF_FALSE) ;
-
-               pcm_test_double ("double_le.raw", SF_ENDIAN_LITTLE      | SF_FORMAT_RAW | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               pcm_test_double ("double_be.raw", SF_ENDIAN_BIG         | SF_FORMAT_RAW | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               /* Lite remove end */
-               test_count++ ;
-               } ;
-
-       /* Lite remove start */
-       if (do_all || ! strcmp (argv [1], "paf"))
-       {       pcm_test_char   ("char_le.paf", SF_ENDIAN_LITTLE        | SF_FORMAT_PAF | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_char   ("char_be.paf", SF_ENDIAN_BIG           | SF_FORMAT_PAF | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_short  ("short_le.paf", SF_ENDIAN_LITTLE       | SF_FORMAT_PAF | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_short  ("short_be.paf", SF_ENDIAN_BIG          | SF_FORMAT_PAF | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit_le.paf", SF_ENDIAN_LITTLE       | SF_FORMAT_PAF | SF_FORMAT_PCM_24, SF_TRUE) ;
-               pcm_test_24bit  ("24bit_be.paf", SF_ENDIAN_BIG          | SF_FORMAT_PAF | SF_FORMAT_PCM_24, SF_TRUE) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "svx"))
-       {       pcm_test_char   ("char.svx" , SF_FORMAT_SVX | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_short  ("short.svx", SF_FORMAT_SVX | SF_FORMAT_PCM_16, SF_FALSE) ;
-
-               empty_file_test ("empty_char.svx", SF_FORMAT_SVX | SF_FORMAT_PCM_S8) ;
-               empty_file_test ("empty_short.svx", SF_FORMAT_SVX | SF_FORMAT_PCM_16) ;
-
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "nist"))
-       {       pcm_test_short  ("short_le.nist", SF_ENDIAN_LITTLE      | SF_FORMAT_NIST | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_short  ("short_be.nist", SF_ENDIAN_BIG         | SF_FORMAT_NIST | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit_le.nist", SF_ENDIAN_LITTLE      | SF_FORMAT_NIST | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_24bit  ("24bit_be.nist", SF_ENDIAN_BIG         | SF_FORMAT_NIST | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int_le.nist"  , SF_ENDIAN_LITTLE      | SF_FORMAT_NIST | SF_FORMAT_PCM_32, SF_FALSE) ;
-               pcm_test_int    ("int_be.nist"  , SF_ENDIAN_BIG         | SF_FORMAT_NIST | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "ircam"))
-       {       pcm_test_short  ("short_be.ircam"       , SF_ENDIAN_BIG | SF_FORMAT_IRCAM | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_short  ("short_le.ircam"       , SF_ENDIAN_LITTLE      | SF_FORMAT_IRCAM | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_int    ("int_be.ircam"         , SF_ENDIAN_BIG | SF_FORMAT_IRCAM | SF_FORMAT_PCM_32, SF_FALSE) ;
-               pcm_test_int    ("int_le.ircam"         , SF_ENDIAN_LITTLE      | SF_FORMAT_IRCAM | SF_FORMAT_PCM_32, SF_FALSE) ;
-               pcm_test_float  ("float_be.ircam"       , SF_ENDIAN_BIG | SF_FORMAT_IRCAM | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_float  ("float_le.ircam"       , SF_ENDIAN_LITTLE      | SF_FORMAT_IRCAM | SF_FORMAT_FLOAT , SF_FALSE) ;
-
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "voc"))
-       {       pcm_test_char   ("char.voc" , SF_FORMAT_VOC | SF_FORMAT_PCM_U8, SF_FALSE) ;
-               pcm_test_short  ("short.voc", SF_FORMAT_VOC | SF_FORMAT_PCM_16, SF_FALSE) ;
-
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "mat4"))
-       {       pcm_test_short  ("short_be.mat4"        , SF_ENDIAN_BIG | SF_FORMAT_MAT4 | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_short  ("short_le.mat4"        , SF_ENDIAN_LITTLE      | SF_FORMAT_MAT4 | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_int    ("int_be.mat4"          , SF_ENDIAN_BIG | SF_FORMAT_MAT4 | SF_FORMAT_PCM_32, SF_FALSE) ;
-               pcm_test_int    ("int_le.mat4"          , SF_ENDIAN_LITTLE      | SF_FORMAT_MAT4 | SF_FORMAT_PCM_32, SF_FALSE) ;
-               pcm_test_float  ("float_be.mat4"        , SF_ENDIAN_BIG | SF_FORMAT_MAT4 | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_float  ("float_le.mat4"        , SF_ENDIAN_LITTLE      | SF_FORMAT_MAT4 | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double_be.mat4"       , SF_ENDIAN_BIG | SF_FORMAT_MAT4 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               pcm_test_double ("double_le.mat4"       , SF_ENDIAN_LITTLE      | SF_FORMAT_MAT4 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-
-               empty_file_test ("empty_short.mat4", SF_FORMAT_MAT4 | SF_FORMAT_PCM_16) ;
-               empty_file_test ("empty_float.mat4", SF_FORMAT_MAT4 | SF_FORMAT_FLOAT) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "mat5"))
-       {       pcm_test_char   ("char_be.mat5"         , SF_ENDIAN_BIG | SF_FORMAT_MAT5 | SF_FORMAT_PCM_U8, SF_FALSE) ;
-               pcm_test_char   ("char_le.mat5"         , SF_ENDIAN_LITTLE      | SF_FORMAT_MAT5 | SF_FORMAT_PCM_U8, SF_FALSE) ;
-               pcm_test_short  ("short_be.mat5"        , SF_ENDIAN_BIG | SF_FORMAT_MAT5 | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_short  ("short_le.mat5"        , SF_ENDIAN_LITTLE      | SF_FORMAT_MAT5 | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_int    ("int_be.mat5"          , SF_ENDIAN_BIG | SF_FORMAT_MAT5 | SF_FORMAT_PCM_32, SF_FALSE) ;
-               pcm_test_int    ("int_le.mat5"          , SF_ENDIAN_LITTLE      | SF_FORMAT_MAT5 | SF_FORMAT_PCM_32, SF_FALSE) ;
-               pcm_test_float  ("float_be.mat5"        , SF_ENDIAN_BIG | SF_FORMAT_MAT5 | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_float  ("float_le.mat5"        , SF_ENDIAN_LITTLE      | SF_FORMAT_MAT5 | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double_be.mat5"       , SF_ENDIAN_BIG | SF_FORMAT_MAT5 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               pcm_test_double ("double_le.mat5"       , SF_ENDIAN_LITTLE      | SF_FORMAT_MAT5 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-
-               increment_open_file_count () ;
-
-               empty_file_test ("empty_char.mat5", SF_FORMAT_MAT5 | SF_FORMAT_PCM_U8) ;
-               empty_file_test ("empty_short.mat5", SF_FORMAT_MAT5 | SF_FORMAT_PCM_16) ;
-               empty_file_test ("empty_float.mat5", SF_FORMAT_MAT5 | SF_FORMAT_FLOAT) ;
-
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "pvf"))
-       {       pcm_test_char   ("char.pvf"     , SF_FORMAT_PVF | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_short  ("short.pvf", SF_FORMAT_PVF | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_int    ("int.pvf"      , SF_FORMAT_PVF | SF_FORMAT_PCM_32, SF_FALSE) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "htk"))
-       {       pcm_test_short  ("short.htk", SF_FORMAT_HTK | SF_FORMAT_PCM_16, SF_FALSE) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "mpc2k"))
-       {       pcm_test_short  ("short.mpc", SF_FORMAT_MPC2K | SF_FORMAT_PCM_16, SF_FALSE) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "avr"))
-       {       pcm_test_char   ("char_u8.avr"  , SF_FORMAT_AVR | SF_FORMAT_PCM_U8, SF_FALSE) ;
-               pcm_test_char   ("char_s8.avr"  , SF_FORMAT_AVR | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_short  ("short.avr"    , SF_FORMAT_AVR | SF_FORMAT_PCM_16, SF_FALSE) ;
-               test_count++ ;
-               } ;
-       /* Lite remove end */
-
-       if (do_all || ! strcmp (argv [1], "w64"))
-       {       pcm_test_char   ("char.w64"             , SF_FORMAT_W64 | SF_FORMAT_PCM_U8, SF_FALSE) ;
-               pcm_test_short  ("short.w64"    , SF_FORMAT_W64 | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit.w64"    , SF_FORMAT_W64 | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int.w64"              , SF_FORMAT_W64 | SF_FORMAT_PCM_32, SF_FALSE) ;
-               /* Lite remove start */
-               pcm_test_float  ("float.w64"    , SF_FORMAT_W64 | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double.w64"   , SF_FORMAT_W64 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               /* Lite remove end */
-
-               empty_file_test ("empty_char.w64", SF_FORMAT_W64 | SF_FORMAT_PCM_U8) ;
-               empty_file_test ("empty_short.w64", SF_FORMAT_W64 | SF_FORMAT_PCM_16) ;
-               empty_file_test ("empty_float.w64", SF_FORMAT_W64 | SF_FORMAT_FLOAT) ;
-
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "sds"))
-       {       pcm_test_char   ("char.sds"             , SF_FORMAT_SDS | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_short  ("short.sds"    , SF_FORMAT_SDS | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit.sds"    , SF_FORMAT_SDS | SF_FORMAT_PCM_24, SF_FALSE) ;
-
-               empty_file_test ("empty_char.sds", SF_FORMAT_SDS | SF_FORMAT_PCM_S8) ;
-               empty_file_test ("empty_short.sds", SF_FORMAT_SDS | SF_FORMAT_PCM_16) ;
-
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "sd2"))
-       {       pcm_test_char   ("char.sd2"             , SF_FORMAT_SD2 | SF_FORMAT_PCM_S8, SF_TRUE) ;
-               pcm_test_short  ("short.sd2"    , SF_FORMAT_SD2 | SF_FORMAT_PCM_16, SF_TRUE) ;
-               pcm_test_24bit  ("24bit.sd2"    , SF_FORMAT_SD2 | SF_FORMAT_PCM_24, SF_TRUE) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "flac"))
-       {       if (HAVE_EXTERNAL_LIBS)
-               {       pcm_test_char   ("char.flac"    , SF_FORMAT_FLAC | SF_FORMAT_PCM_S8, SF_TRUE) ;
-                       pcm_test_short  ("short.flac"   , SF_FORMAT_FLAC | SF_FORMAT_PCM_16, SF_TRUE) ;
-                       pcm_test_24bit  ("24bit.flac"   , SF_FORMAT_FLAC | SF_FORMAT_PCM_24, SF_TRUE) ;
-                       }
-               else
-                       puts ("    No FLAC tests because FLAC support was not compiled in.") ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "rf64"))
-       {       pcm_test_char   ("char.rf64"    , SF_FORMAT_RF64 | SF_FORMAT_PCM_U8, SF_FALSE) ;
-               pcm_test_short  ("short.rf64"   , SF_FORMAT_RF64 | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit.rf64"   , SF_FORMAT_RF64 | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int.rf64"             , SF_FORMAT_RF64 | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-               /* Lite remove start */
-               pcm_test_float  ("float.rf64"   , SF_FORMAT_RF64 | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double.rf64"  , SF_FORMAT_RF64 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               empty_file_test ("empty_char.rf64", SF_FORMAT_RF64 | SF_FORMAT_PCM_U8) ;
-               empty_file_test ("empty_short.rf64", SF_FORMAT_RF64 | SF_FORMAT_PCM_16) ;
-               empty_file_test ("empty_float.rf64", SF_FORMAT_RF64 | SF_FORMAT_FLOAT) ;
-               /* Lite remove end */
-
-               test_count++ ;
-               } ;
-
-       if (test_count == 0)
-       {       printf ("Mono : ************************************\n") ;
-               printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-               printf ("Mono : ************************************\n") ;
-               return 1 ;
-               } ;
-
-       /* Only open file descriptors should be stdin, stdout and stderr. */
-       check_open_file_count_or_die (__LINE__) ;
-
-       return 0 ;
-} /* main */
-
-/*============================================================================================
-**     Helper functions and macros.
-*/
-
-static void    create_short_file (const char *filename) ;
-
-#define        CHAR_ERROR(x,y)         (abs ((x) - (y)) > 255)
-#define        INT_ERROR(x,y)          (((x) - (y)) != 0)
-#define        TRIBYTE_ERROR(x,y)      (abs ((x) - (y)) > 255)
-#define        FLOAT_ERROR(x,y)        (fabs ((x) - (y)) > 1e-5)
-
-#define CONVERT_DATA(k,len,new,orig)                                   \
-                       {       for ((k) = 0 ; (k) < (len) ; (k) ++)    \
-                                       (new) [k] = (orig) [k] ;                        \
-                               }
-
-
-/*======================================================================================
-*/
-
-static void mono_char_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void stereo_char_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void mono_rdwr_char_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void new_rdwr_char_test (const char *filename, int format, int allow_fd) ;
-static void multi_seek_test (const char * filename, int format) ;
-static void write_seek_extend_test (const char * filename, int format) ;
-
-static void
-pcm_test_char (const char *filename, int format, int long_file_ok)
-{      SF_INFO         sfinfo ;
-       short           *orig ;
-       int                     k, allow_fd ;
-
-       /* Sd2 files cannot be opened from an existing file descriptor. */
-       allow_fd = ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2) ? SF_FALSE : SF_TRUE ;
-
-       print_test_name ("pcm_test_char", filename) ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       gen_windowed_sine_double (orig_data.d, DATA_LENGTH, 32000.0) ;
-
-       orig = orig_data.s ;
-
-       /* Make this a macro so gdb steps over it in one go. */
-       CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-       /* Some test broken out here. */
-
-       mono_char_test (filename, format, long_file_ok, allow_fd) ;
-
-       /* Sub format DWVW does not allow seeking. */
-       if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-                       (format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-       {       unlink (filename) ;
-               printf ("no seek : ok\n") ;
-               return ;
-               } ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-               mono_rdwr_char_test (filename, format, long_file_ok, allow_fd) ;
-
-       /* If the format doesn't support stereo we're done. */
-       sfinfo.channels = 2 ;
-       if (sf_format_check (&sfinfo) == 0)
-       {       unlink (filename) ;
-               puts ("no stereo : ok") ;
-               return ;
-               } ;
-
-       stereo_char_test (filename, format, long_file_ok, allow_fd) ;
-
-       /* New read/write test. Not sure if this is needed yet. */
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_PAF &&
-                       (format & SF_FORMAT_TYPEMASK) != SF_FORMAT_VOC &&
-                       (format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-               new_rdwr_char_test (filename, format, allow_fd) ;
-
-       delete_file (format, filename) ;
-
-       puts ("ok") ;
-       return ;
-} /* pcm_test_char */
-
-static void
-mono_char_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       short           *orig, *test ;
-       sf_count_t      count ;
-       int                     k, items ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       orig = orig_data.s ;
-       test = test_data.s ;
-
-       items = DATA_LENGTH ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-       sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-       test_write_short_or_die (file, 0, orig, items, __LINE__) ;
-       sf_write_sync (file) ;
-       test_write_short_or_die (file, 0, orig, items, __LINE__) ;
-       sf_write_sync (file) ;
-
-       /* Add non-audio data after the audio. */
-       sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-       sf_close (file) ;
-
-       memset (test, 0, items * sizeof (short)) ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("\n\nLine %d : Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < 2 * items)
-       {       printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-               exit (1) ;
-               } ;
-
-       if (! long_file_ok && sfinfo.frames > 2 * items)
-       {       printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too long). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d : Mono : Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_short_or_die (file, 0, test, items, __LINE__) ;
-       for (k = 0 ; k < items ; k++)
-               if (CHAR_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d: Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       oct_save_short (orig, test, items) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_read_short_or_die (file, 0, test, 4, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-               if (CHAR_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-                       (format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-       {       sf_close (file) ;
-               unlink (filename) ;
-               printf ("no seek : ") ;
-               return ;
-               } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, items + 10, SEEK_SET, items + 10, sfinfo.channels, __LINE__) ;
-
-       test_read_short_or_die (file, 0, test + 10, 4, __LINE__) ;
-       for (k = 10 ; k < 14 ; k++)
-               if (CHAR_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 6, SEEK_CUR, items + 20, sfinfo.channels, __LINE__) ;
-
-       test_read_short_or_die (file, 0, test + 20, 4, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-               if (CHAR_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_read_short_or_die (file, 0, test + 10, 4, __LINE__) ;
-       for (k = 10 ; k < 14 ; k++)
-               if (CHAR_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample D (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Check read past end of file followed by sf_seek (sndfile, 0, SEEK_CUR). */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       count = 0 ;
-       while (count < sfinfo.frames)
-               count += sf_read_short (file, test, 311) ;
-
-       /* Check that no error has occurred. */
-       if (sf_error (file))
-       {       printf ("\n\nLine %d : Mono : error where there shouldn't have been one.\n", __LINE__) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       /* Check that we haven't read beyond EOF. */
-       if (count > sfinfo.frames)
-       {       printf ("\n\nLines %d : read past end of file (%ld should be %ld)\n", __LINE__, (long) count, (long) sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       test_seek_or_die (file, 0, SEEK_CUR, sfinfo.frames, sfinfo.channels, __LINE__) ;
-
-       sf_close (file) ;
-
-       multi_seek_test (filename, format) ;
-       write_seek_extend_test (filename, format) ;
-
-} /* mono_char_test */
-
-static void
-stereo_char_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       short           *orig, *test ;
-       int                     k, items, frames ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 2 ;
-       sfinfo.format           = format ;
-
-       gen_windowed_sine_double (orig_data.d, DATA_LENGTH, 32000.0) ;
-
-       orig = orig_data.s ;
-       test = test_data.s ;
-
-       /* Make this a macro so gdb steps over it in one go. */
-       CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-       items = DATA_LENGTH ;
-       frames = items / sfinfo.channels ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-       sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-       test_writef_short_or_die (file, 0, orig, frames, __LINE__) ;
-
-       sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-       sf_close (file) ;
-
-       memset (test, 0, items * sizeof (short)) ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("\n\nLine %d : Stereo : Returned format incorrect (0x%08X => 0x%08X).\n",
-                               __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < frames)
-       {       printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too short). (%ld should be %d)\n",
-                               __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-               exit (1) ;
-               } ;
-
-       if (! long_file_ok && sfinfo.frames > frames)
-       {       printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too long). (%ld should be %d)\n",
-                               __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 2)
-       {       printf ("\n\nLine %d : Stereo : Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_readf_short_or_die (file, 0, test, frames, __LINE__) ;
-       for (k = 0 ; k < items ; k++)
-               if (CHAR_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_readf_short_or_die (file, 0, test, 2, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-               if (CHAR_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-       /* Check for errors here. */
-       if (sf_error (file))
-       {       printf ("Line %d: Should NOT return an error.\n", __LINE__) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       if (sf_read_short (file, test, 1) > 0)
-       {       printf ("Line %d: Should return 0.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (! sf_error (file))
-       {       printf ("Line %d: Should return an error.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-       /*-----------------------*/
-
-       test_readf_short_or_die (file, 0, test + 10, 2, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-               if (CHAR_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-       test_readf_short_or_die (file, 0, test + 20, 2, __LINE__) ;
-       for (k = 40 ; k < 44 ; k++)
-               if (CHAR_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_readf_short_or_die (file, 0, test + 20, 2, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-               if (CHAR_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-} /* stereo_char_test */
-
-static void
-mono_rdwr_char_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       short           *orig, *test ;
-       int                     k, pass ;
-
-       orig = orig_data.s ;
-       test = test_data.s ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = DATA_LENGTH ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       if ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_RAW
-               || (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_AU
-               || (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2)
-               unlink (filename) ;
-       else
-       {       /* Create a short file. */
-               create_short_file (filename) ;
-
-               /* Opening a already existing short file (ie invalid header) RDWR is disallowed.
-               ** If this returns a valif pointer sf_open() screwed up.
-               */
-               if ((file = sf_open (filename, SFM_RDWR, &sfinfo)))
-               {       printf ("\n\nLine %d: sf_open should (SFM_RDWR) have failed but didn't.\n", __LINE__) ;
-                       exit (1) ;
-                       } ;
-
-               /* Truncate the file to zero bytes. */
-               if (truncate (filename, 0) < 0)
-               {       printf ("\n\nLine %d: truncate (%s) failed", __LINE__, filename) ;
-                       perror (NULL) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Opening a zero length file RDWR is allowed, but the SF_INFO struct must contain
-       ** all the usual data required when opening the file in WRITE mode.
-       */
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = DATA_LENGTH ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-       /* Do 3 writes followed by reads. After each, check the data and the current
-       ** read and write offsets.
-       */
-       for (pass = 1 ; pass <= 3 ; pass ++)
-       {       orig [20] = pass * 2 ;
-
-               /* Write some data. */
-               test_write_short_or_die (file, pass, orig, DATA_LENGTH, __LINE__) ;
-
-               test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, pass * DATA_LENGTH) ;
-
-               /* Read what we just wrote. */
-               test_read_short_or_die (file, 0, test, DATA_LENGTH, __LINE__) ;
-
-               /* Check the data. */
-               for (k = 0 ; k < DATA_LENGTH ; k++)
-                       if (CHAR_ERROR (orig [k], test [k]))
-                       {       printf ("\n\nLine %d (pass %d) A : Error at sample %d (0x%X => 0x%X).\n", __LINE__, pass, k, orig [k], test [k]) ;
-                               oct_save_short (orig, test, DATA_LENGTH) ;
-                               exit (1) ;
-                               } ;
-
-               test_read_write_position_or_die (file, __LINE__, pass, pass * DATA_LENGTH, pass * DATA_LENGTH) ;
-               } ; /* for (pass ...) */
-
-       sf_close (file) ;
-
-       /* Open the file again to check the data. */
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("\n\nLine %d : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < 3 * DATA_LENGTH)
-       {       printf ("\n\nLine %d : Not enough frames in file. (%ld < %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-               exit (1) ;
-               }
-
-       if (! long_file_ok && sfinfo.frames != 3 * DATA_LENGTH)
-       {       printf ("\n\nLine %d : Incorrect number of frames in file. (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d : Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (! long_file_ok)
-               test_read_write_position_or_die (file, __LINE__, 0, 0, 3 * DATA_LENGTH) ;
-       else
-               test_seek_or_die (file, 3 * DATA_LENGTH, SFM_WRITE | SEEK_SET, 3 * DATA_LENGTH, sfinfo.channels, __LINE__) ;
-
-       for (pass = 1 ; pass <= 3 ; pass ++)
-       {       orig [20] = pass * 2 ;
-
-               test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, 3 * DATA_LENGTH) ;
-
-               /* Read what we just wrote. */
-               test_read_short_or_die (file, pass, test, DATA_LENGTH, __LINE__) ;
-
-               /* Check the data. */
-               for (k = 0 ; k < DATA_LENGTH ; k++)
-                       if (CHAR_ERROR (orig [k], test [k]))
-                       {       printf ("\n\nLine %d (pass %d) B : Error at sample %d (0x%X => 0x%X).\n", __LINE__, pass, k, orig [k], test [k]) ;
-                               oct_save_short (orig, test, DATA_LENGTH) ;
-                               exit (1) ;
-                               } ;
-
-               } ; /* for (pass ...) */
-
-       sf_close (file) ;
-} /* mono_rdwr_short_test */
-
-static void
-new_rdwr_char_test (const char *filename, int format, int allow_fd)
-{      SNDFILE *wfile, *rwfile ;
-       SF_INFO sfinfo ;
-       short           *orig, *test ;
-       int             items, frames ;
-
-       orig = orig_data.s ;
-       test = test_data.s ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 2 ;
-       sfinfo.format           = format ;
-
-       items = DATA_LENGTH ;
-       frames = items / sfinfo.channels ;
-
-       wfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-       sf_command (wfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
-       test_writef_short_or_die (wfile, 1, orig, frames, __LINE__) ;
-       sf_write_sync (wfile) ;
-       test_writef_short_or_die (wfile, 2, orig, frames, __LINE__) ;
-       sf_write_sync (wfile) ;
-
-       rwfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-       if (sfinfo.frames != 2 * frames)
-       {       printf ("\n\nLine %d : incorrect number of frames in file (%ld should be %d)\n\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 2 * frames) ;
-               exit (1) ;
-               } ;
-
-       test_writef_short_or_die (wfile, 3, orig, frames, __LINE__) ;
-
-       test_readf_short_or_die (rwfile, 1, test, frames, __LINE__) ;
-       test_readf_short_or_die (rwfile, 2, test, frames, __LINE__) ;
-
-       sf_close (wfile) ;
-       sf_close (rwfile) ;
-} /* new_rdwr_char_test */
-
-
-/*======================================================================================
-*/
-
-static void mono_short_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void stereo_short_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void mono_rdwr_short_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void new_rdwr_short_test (const char *filename, int format, int allow_fd) ;
-static void multi_seek_test (const char * filename, int format) ;
-static void write_seek_extend_test (const char * filename, int format) ;
-
-static void
-pcm_test_short (const char *filename, int format, int long_file_ok)
-{      SF_INFO         sfinfo ;
-       short           *orig ;
-       int                     k, allow_fd ;
-
-       /* Sd2 files cannot be opened from an existing file descriptor. */
-       allow_fd = ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2) ? SF_FALSE : SF_TRUE ;
-
-       print_test_name ("pcm_test_short", filename) ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       gen_windowed_sine_double (orig_data.d, DATA_LENGTH, 32000.0) ;
-
-       orig = orig_data.s ;
-
-       /* Make this a macro so gdb steps over it in one go. */
-       CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-       /* Some test broken out here. */
-
-       mono_short_test (filename, format, long_file_ok, allow_fd) ;
-
-       /* Sub format DWVW does not allow seeking. */
-       if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-                       (format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-       {       unlink (filename) ;
-               printf ("no seek : ok\n") ;
-               return ;
-               } ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-               mono_rdwr_short_test (filename, format, long_file_ok, allow_fd) ;
-
-       /* If the format doesn't support stereo we're done. */
-       sfinfo.channels = 2 ;
-       if (sf_format_check (&sfinfo) == 0)
-       {       unlink (filename) ;
-               puts ("no stereo : ok") ;
-               return ;
-               } ;
-
-       stereo_short_test (filename, format, long_file_ok, allow_fd) ;
-
-       /* New read/write test. Not sure if this is needed yet. */
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_PAF &&
-                       (format & SF_FORMAT_TYPEMASK) != SF_FORMAT_VOC &&
-                       (format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-               new_rdwr_short_test (filename, format, allow_fd) ;
-
-       delete_file (format, filename) ;
-
-       puts ("ok") ;
-       return ;
-} /* pcm_test_short */
-
-static void
-mono_short_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       short           *orig, *test ;
-       sf_count_t      count ;
-       int                     k, items ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       orig = orig_data.s ;
-       test = test_data.s ;
-
-       items = DATA_LENGTH ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-       sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-       test_write_short_or_die (file, 0, orig, items, __LINE__) ;
-       sf_write_sync (file) ;
-       test_write_short_or_die (file, 0, orig, items, __LINE__) ;
-       sf_write_sync (file) ;
-
-       /* Add non-audio data after the audio. */
-       sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-       sf_close (file) ;
-
-       memset (test, 0, items * sizeof (short)) ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("\n\nLine %d : Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < 2 * items)
-       {       printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-               exit (1) ;
-               } ;
-
-       if (! long_file_ok && sfinfo.frames > 2 * items)
-       {       printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too long). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d : Mono : Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_short_or_die (file, 0, test, items, __LINE__) ;
-       for (k = 0 ; k < items ; k++)
-               if (INT_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d: Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       oct_save_short (orig, test, items) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_read_short_or_die (file, 0, test, 4, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-               if (INT_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-                       (format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-       {       sf_close (file) ;
-               unlink (filename) ;
-               printf ("no seek : ") ;
-               return ;
-               } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, items + 10, SEEK_SET, items + 10, sfinfo.channels, __LINE__) ;
-
-       test_read_short_or_die (file, 0, test + 10, 4, __LINE__) ;
-       for (k = 10 ; k < 14 ; k++)
-               if (INT_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 6, SEEK_CUR, items + 20, sfinfo.channels, __LINE__) ;
-
-       test_read_short_or_die (file, 0, test + 20, 4, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-               if (INT_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_read_short_or_die (file, 0, test + 10, 4, __LINE__) ;
-       for (k = 10 ; k < 14 ; k++)
-               if (INT_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample D (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Check read past end of file followed by sf_seek (sndfile, 0, SEEK_CUR). */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       count = 0 ;
-       while (count < sfinfo.frames)
-               count += sf_read_short (file, test, 311) ;
-
-       /* Check that no error has occurred. */
-       if (sf_error (file))
-       {       printf ("\n\nLine %d : Mono : error where there shouldn't have been one.\n", __LINE__) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       /* Check that we haven't read beyond EOF. */
-       if (count > sfinfo.frames)
-       {       printf ("\n\nLines %d : read past end of file (%ld should be %ld)\n", __LINE__, (long) count, (long) sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       test_seek_or_die (file, 0, SEEK_CUR, sfinfo.frames, sfinfo.channels, __LINE__) ;
-
-       sf_close (file) ;
-
-       multi_seek_test (filename, format) ;
-       write_seek_extend_test (filename, format) ;
-
-} /* mono_short_test */
-
-static void
-stereo_short_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       short           *orig, *test ;
-       int                     k, items, frames ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 2 ;
-       sfinfo.format           = format ;
-
-       gen_windowed_sine_double (orig_data.d, DATA_LENGTH, 32000.0) ;
-
-       orig = orig_data.s ;
-       test = test_data.s ;
-
-       /* Make this a macro so gdb steps over it in one go. */
-       CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-       items = DATA_LENGTH ;
-       frames = items / sfinfo.channels ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-       sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-       test_writef_short_or_die (file, 0, orig, frames, __LINE__) ;
-
-       sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-       sf_close (file) ;
-
-       memset (test, 0, items * sizeof (short)) ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("\n\nLine %d : Stereo : Returned format incorrect (0x%08X => 0x%08X).\n",
-                               __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < frames)
-       {       printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too short). (%ld should be %d)\n",
-                               __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-               exit (1) ;
-               } ;
-
-       if (! long_file_ok && sfinfo.frames > frames)
-       {       printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too long). (%ld should be %d)\n",
-                               __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 2)
-       {       printf ("\n\nLine %d : Stereo : Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_readf_short_or_die (file, 0, test, frames, __LINE__) ;
-       for (k = 0 ; k < items ; k++)
-               if (INT_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_readf_short_or_die (file, 0, test, 2, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-               if (INT_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-       /* Check for errors here. */
-       if (sf_error (file))
-       {       printf ("Line %d: Should NOT return an error.\n", __LINE__) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       if (sf_read_short (file, test, 1) > 0)
-       {       printf ("Line %d: Should return 0.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (! sf_error (file))
-       {       printf ("Line %d: Should return an error.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-       /*-----------------------*/
-
-       test_readf_short_or_die (file, 0, test + 10, 2, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-               if (INT_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-       test_readf_short_or_die (file, 0, test + 20, 2, __LINE__) ;
-       for (k = 40 ; k < 44 ; k++)
-               if (INT_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_readf_short_or_die (file, 0, test + 20, 2, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-               if (INT_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-} /* stereo_short_test */
-
-static void
-mono_rdwr_short_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       short           *orig, *test ;
-       int                     k, pass ;
-
-       orig = orig_data.s ;
-       test = test_data.s ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = DATA_LENGTH ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       if ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_RAW
-               || (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_AU
-               || (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2)
-               unlink (filename) ;
-       else
-       {       /* Create a short file. */
-               create_short_file (filename) ;
-
-               /* Opening a already existing short file (ie invalid header) RDWR is disallowed.
-               ** If this returns a valif pointer sf_open() screwed up.
-               */
-               if ((file = sf_open (filename, SFM_RDWR, &sfinfo)))
-               {       printf ("\n\nLine %d: sf_open should (SFM_RDWR) have failed but didn't.\n", __LINE__) ;
-                       exit (1) ;
-                       } ;
-
-               /* Truncate the file to zero bytes. */
-               if (truncate (filename, 0) < 0)
-               {       printf ("\n\nLine %d: truncate (%s) failed", __LINE__, filename) ;
-                       perror (NULL) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Opening a zero length file RDWR is allowed, but the SF_INFO struct must contain
-       ** all the usual data required when opening the file in WRITE mode.
-       */
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = DATA_LENGTH ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-       /* Do 3 writes followed by reads. After each, check the data and the current
-       ** read and write offsets.
-       */
-       for (pass = 1 ; pass <= 3 ; pass ++)
-       {       orig [20] = pass * 2 ;
-
-               /* Write some data. */
-               test_write_short_or_die (file, pass, orig, DATA_LENGTH, __LINE__) ;
-
-               test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, pass * DATA_LENGTH) ;
-
-               /* Read what we just wrote. */
-               test_read_short_or_die (file, 0, test, DATA_LENGTH, __LINE__) ;
-
-               /* Check the data. */
-               for (k = 0 ; k < DATA_LENGTH ; k++)
-                       if (INT_ERROR (orig [k], test [k]))
-                       {       printf ("\n\nLine %d (pass %d) A : Error at sample %d (0x%X => 0x%X).\n", __LINE__, pass, k, orig [k], test [k]) ;
-                               oct_save_short (orig, test, DATA_LENGTH) ;
-                               exit (1) ;
-                               } ;
-
-               test_read_write_position_or_die (file, __LINE__, pass, pass * DATA_LENGTH, pass * DATA_LENGTH) ;
-               } ; /* for (pass ...) */
-
-       sf_close (file) ;
-
-       /* Open the file again to check the data. */
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("\n\nLine %d : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < 3 * DATA_LENGTH)
-       {       printf ("\n\nLine %d : Not enough frames in file. (%ld < %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-               exit (1) ;
-               }
-
-       if (! long_file_ok && sfinfo.frames != 3 * DATA_LENGTH)
-       {       printf ("\n\nLine %d : Incorrect number of frames in file. (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d : Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (! long_file_ok)
-               test_read_write_position_or_die (file, __LINE__, 0, 0, 3 * DATA_LENGTH) ;
-       else
-               test_seek_or_die (file, 3 * DATA_LENGTH, SFM_WRITE | SEEK_SET, 3 * DATA_LENGTH, sfinfo.channels, __LINE__) ;
-
-       for (pass = 1 ; pass <= 3 ; pass ++)
-       {       orig [20] = pass * 2 ;
-
-               test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, 3 * DATA_LENGTH) ;
-
-               /* Read what we just wrote. */
-               test_read_short_or_die (file, pass, test, DATA_LENGTH, __LINE__) ;
-
-               /* Check the data. */
-               for (k = 0 ; k < DATA_LENGTH ; k++)
-                       if (INT_ERROR (orig [k], test [k]))
-                       {       printf ("\n\nLine %d (pass %d) B : Error at sample %d (0x%X => 0x%X).\n", __LINE__, pass, k, orig [k], test [k]) ;
-                               oct_save_short (orig, test, DATA_LENGTH) ;
-                               exit (1) ;
-                               } ;
-
-               } ; /* for (pass ...) */
-
-       sf_close (file) ;
-} /* mono_rdwr_short_test */
-
-static void
-new_rdwr_short_test (const char *filename, int format, int allow_fd)
-{      SNDFILE *wfile, *rwfile ;
-       SF_INFO sfinfo ;
-       short           *orig, *test ;
-       int             items, frames ;
-
-       orig = orig_data.s ;
-       test = test_data.s ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 2 ;
-       sfinfo.format           = format ;
-
-       items = DATA_LENGTH ;
-       frames = items / sfinfo.channels ;
-
-       wfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-       sf_command (wfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
-       test_writef_short_or_die (wfile, 1, orig, frames, __LINE__) ;
-       sf_write_sync (wfile) ;
-       test_writef_short_or_die (wfile, 2, orig, frames, __LINE__) ;
-       sf_write_sync (wfile) ;
-
-       rwfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-       if (sfinfo.frames != 2 * frames)
-       {       printf ("\n\nLine %d : incorrect number of frames in file (%ld should be %d)\n\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 2 * frames) ;
-               exit (1) ;
-               } ;
-
-       test_writef_short_or_die (wfile, 3, orig, frames, __LINE__) ;
-
-       test_readf_short_or_die (rwfile, 1, test, frames, __LINE__) ;
-       test_readf_short_or_die (rwfile, 2, test, frames, __LINE__) ;
-
-       sf_close (wfile) ;
-       sf_close (rwfile) ;
-} /* new_rdwr_short_test */
-
-
-/*======================================================================================
-*/
-
-static void mono_24bit_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void stereo_24bit_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void mono_rdwr_24bit_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void new_rdwr_24bit_test (const char *filename, int format, int allow_fd) ;
-static void multi_seek_test (const char * filename, int format) ;
-static void write_seek_extend_test (const char * filename, int format) ;
-
-static void
-pcm_test_24bit (const char *filename, int format, int long_file_ok)
-{      SF_INFO         sfinfo ;
-       int             *orig ;
-       int                     k, allow_fd ;
-
-       /* Sd2 files cannot be opened from an existing file descriptor. */
-       allow_fd = ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2) ? SF_FALSE : SF_TRUE ;
-
-       print_test_name ("pcm_test_24bit", filename) ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       gen_windowed_sine_double (orig_data.d, DATA_LENGTH, (1.0 * 0x7F000000)) ;
-
-       orig = orig_data.i ;
-
-       /* Make this a macro so gdb steps over it in one go. */
-       CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-       /* Some test broken out here. */
-
-       mono_24bit_test (filename, format, long_file_ok, allow_fd) ;
-
-       /* Sub format DWVW does not allow seeking. */
-       if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-                       (format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-       {       unlink (filename) ;
-               printf ("no seek : ok\n") ;
-               return ;
-               } ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-               mono_rdwr_24bit_test (filename, format, long_file_ok, allow_fd) ;
-
-       /* If the format doesn't support stereo we're done. */
-       sfinfo.channels = 2 ;
-       if (sf_format_check (&sfinfo) == 0)
-       {       unlink (filename) ;
-               puts ("no stereo : ok") ;
-               return ;
-               } ;
-
-       stereo_24bit_test (filename, format, long_file_ok, allow_fd) ;
-
-       /* New read/write test. Not sure if this is needed yet. */
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_PAF &&
-                       (format & SF_FORMAT_TYPEMASK) != SF_FORMAT_VOC &&
-                       (format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-               new_rdwr_24bit_test (filename, format, allow_fd) ;
-
-       delete_file (format, filename) ;
-
-       puts ("ok") ;
-       return ;
-} /* pcm_test_24bit */
-
-static void
-mono_24bit_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int             *orig, *test ;
-       sf_count_t      count ;
-       int                     k, items ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       orig = orig_data.i ;
-       test = test_data.i ;
-
-       items = DATA_LENGTH ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-       sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-       test_write_int_or_die (file, 0, orig, items, __LINE__) ;
-       sf_write_sync (file) ;
-       test_write_int_or_die (file, 0, orig, items, __LINE__) ;
-       sf_write_sync (file) ;
-
-       /* Add non-audio data after the audio. */
-       sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-       sf_close (file) ;
-
-       memset (test, 0, items * sizeof (int)) ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("\n\nLine %d : Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < 2 * items)
-       {       printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-               exit (1) ;
-               } ;
-
-       if (! long_file_ok && sfinfo.frames > 2 * items)
-       {       printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too long). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d : Mono : Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_int_or_die (file, 0, test, items, __LINE__) ;
-       for (k = 0 ; k < items ; k++)
-               if (TRIBYTE_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d: Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       oct_save_int (orig, test, items) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_read_int_or_die (file, 0, test, 4, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-               if (TRIBYTE_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-                       (format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-       {       sf_close (file) ;
-               unlink (filename) ;
-               printf ("no seek : ") ;
-               return ;
-               } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, items + 10, SEEK_SET, items + 10, sfinfo.channels, __LINE__) ;
-
-       test_read_int_or_die (file, 0, test + 10, 4, __LINE__) ;
-       for (k = 10 ; k < 14 ; k++)
-               if (TRIBYTE_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 6, SEEK_CUR, items + 20, sfinfo.channels, __LINE__) ;
-
-       test_read_int_or_die (file, 0, test + 20, 4, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-               if (TRIBYTE_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_read_int_or_die (file, 0, test + 10, 4, __LINE__) ;
-       for (k = 10 ; k < 14 ; k++)
-               if (TRIBYTE_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample D (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Check read past end of file followed by sf_seek (sndfile, 0, SEEK_CUR). */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       count = 0 ;
-       while (count < sfinfo.frames)
-               count += sf_read_int (file, test, 311) ;
-
-       /* Check that no error has occurred. */
-       if (sf_error (file))
-       {       printf ("\n\nLine %d : Mono : error where there shouldn't have been one.\n", __LINE__) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       /* Check that we haven't read beyond EOF. */
-       if (count > sfinfo.frames)
-       {       printf ("\n\nLines %d : read past end of file (%ld should be %ld)\n", __LINE__, (long) count, (long) sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       test_seek_or_die (file, 0, SEEK_CUR, sfinfo.frames, sfinfo.channels, __LINE__) ;
-
-       sf_close (file) ;
-
-       multi_seek_test (filename, format) ;
-       write_seek_extend_test (filename, format) ;
-
-} /* mono_24bit_test */
-
-static void
-stereo_24bit_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int             *orig, *test ;
-       int                     k, items, frames ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 2 ;
-       sfinfo.format           = format ;
-
-       gen_windowed_sine_double (orig_data.d, DATA_LENGTH, (1.0 * 0x7F000000)) ;
-
-       orig = orig_data.i ;
-       test = test_data.i ;
-
-       /* Make this a macro so gdb steps over it in one go. */
-       CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-       items = DATA_LENGTH ;
-       frames = items / sfinfo.channels ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-       sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-       test_writef_int_or_die (file, 0, orig, frames, __LINE__) ;
-
-       sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-       sf_close (file) ;
-
-       memset (test, 0, items * sizeof (int)) ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("\n\nLine %d : Stereo : Returned format incorrect (0x%08X => 0x%08X).\n",
-                               __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < frames)
-       {       printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too short). (%ld should be %d)\n",
-                               __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-               exit (1) ;
-               } ;
-
-       if (! long_file_ok && sfinfo.frames > frames)
-       {       printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too long). (%ld should be %d)\n",
-                               __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 2)
-       {       printf ("\n\nLine %d : Stereo : Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_readf_int_or_die (file, 0, test, frames, __LINE__) ;
-       for (k = 0 ; k < items ; k++)
-               if (TRIBYTE_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_readf_int_or_die (file, 0, test, 2, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-               if (TRIBYTE_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-       /* Check for errors here. */
-       if (sf_error (file))
-       {       printf ("Line %d: Should NOT return an error.\n", __LINE__) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       if (sf_read_int (file, test, 1) > 0)
-       {       printf ("Line %d: Should return 0.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (! sf_error (file))
-       {       printf ("Line %d: Should return an error.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-       /*-----------------------*/
-
-       test_readf_int_or_die (file, 0, test + 10, 2, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-               if (TRIBYTE_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-       test_readf_int_or_die (file, 0, test + 20, 2, __LINE__) ;
-       for (k = 40 ; k < 44 ; k++)
-               if (TRIBYTE_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_readf_int_or_die (file, 0, test + 20, 2, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-               if (TRIBYTE_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-} /* stereo_24bit_test */
-
-static void
-mono_rdwr_24bit_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int             *orig, *test ;
-       int                     k, pass ;
-
-       orig = orig_data.i ;
-       test = test_data.i ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = DATA_LENGTH ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       if ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_RAW
-               || (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_AU
-               || (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2)
-               unlink (filename) ;
-       else
-       {       /* Create a short file. */
-               create_short_file (filename) ;
-
-               /* Opening a already existing short file (ie invalid header) RDWR is disallowed.
-               ** If this returns a valif pointer sf_open() screwed up.
-               */
-               if ((file = sf_open (filename, SFM_RDWR, &sfinfo)))
-               {       printf ("\n\nLine %d: sf_open should (SFM_RDWR) have failed but didn't.\n", __LINE__) ;
-                       exit (1) ;
-                       } ;
-
-               /* Truncate the file to zero bytes. */
-               if (truncate (filename, 0) < 0)
-               {       printf ("\n\nLine %d: truncate (%s) failed", __LINE__, filename) ;
-                       perror (NULL) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Opening a zero length file RDWR is allowed, but the SF_INFO struct must contain
-       ** all the usual data required when opening the file in WRITE mode.
-       */
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = DATA_LENGTH ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-       /* Do 3 writes followed by reads. After each, check the data and the current
-       ** read and write offsets.
-       */
-       for (pass = 1 ; pass <= 3 ; pass ++)
-       {       orig [20] = pass * 2 ;
-
-               /* Write some data. */
-               test_write_int_or_die (file, pass, orig, DATA_LENGTH, __LINE__) ;
-
-               test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, pass * DATA_LENGTH) ;
-
-               /* Read what we just wrote. */
-               test_read_int_or_die (file, 0, test, DATA_LENGTH, __LINE__) ;
-
-               /* Check the data. */
-               for (k = 0 ; k < DATA_LENGTH ; k++)
-                       if (TRIBYTE_ERROR (orig [k], test [k]))
-                       {       printf ("\n\nLine %d (pass %d) A : Error at sample %d (0x%X => 0x%X).\n", __LINE__, pass, k, orig [k], test [k]) ;
-                               oct_save_int (orig, test, DATA_LENGTH) ;
-                               exit (1) ;
-                               } ;
-
-               test_read_write_position_or_die (file, __LINE__, pass, pass * DATA_LENGTH, pass * DATA_LENGTH) ;
-               } ; /* for (pass ...) */
-
-       sf_close (file) ;
-
-       /* Open the file again to check the data. */
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("\n\nLine %d : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < 3 * DATA_LENGTH)
-       {       printf ("\n\nLine %d : Not enough frames in file. (%ld < %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-               exit (1) ;
-               }
-
-       if (! long_file_ok && sfinfo.frames != 3 * DATA_LENGTH)
-       {       printf ("\n\nLine %d : Incorrect number of frames in file. (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d : Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (! long_file_ok)
-               test_read_write_position_or_die (file, __LINE__, 0, 0, 3 * DATA_LENGTH) ;
-       else
-               test_seek_or_die (file, 3 * DATA_LENGTH, SFM_WRITE | SEEK_SET, 3 * DATA_LENGTH, sfinfo.channels, __LINE__) ;
-
-       for (pass = 1 ; pass <= 3 ; pass ++)
-       {       orig [20] = pass * 2 ;
-
-               test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, 3 * DATA_LENGTH) ;
-
-               /* Read what we just wrote. */
-               test_read_int_or_die (file, pass, test, DATA_LENGTH, __LINE__) ;
-
-               /* Check the data. */
-               for (k = 0 ; k < DATA_LENGTH ; k++)
-                       if (TRIBYTE_ERROR (orig [k], test [k]))
-                       {       printf ("\n\nLine %d (pass %d) B : Error at sample %d (0x%X => 0x%X).\n", __LINE__, pass, k, orig [k], test [k]) ;
-                               oct_save_int (orig, test, DATA_LENGTH) ;
-                               exit (1) ;
-                               } ;
-
-               } ; /* for (pass ...) */
-
-       sf_close (file) ;
-} /* mono_rdwr_int_test */
-
-static void
-new_rdwr_24bit_test (const char *filename, int format, int allow_fd)
-{      SNDFILE *wfile, *rwfile ;
-       SF_INFO sfinfo ;
-       int             *orig, *test ;
-       int             items, frames ;
-
-       orig = orig_data.i ;
-       test = test_data.i ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 2 ;
-       sfinfo.format           = format ;
-
-       items = DATA_LENGTH ;
-       frames = items / sfinfo.channels ;
-
-       wfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-       sf_command (wfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
-       test_writef_int_or_die (wfile, 1, orig, frames, __LINE__) ;
-       sf_write_sync (wfile) ;
-       test_writef_int_or_die (wfile, 2, orig, frames, __LINE__) ;
-       sf_write_sync (wfile) ;
-
-       rwfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-       if (sfinfo.frames != 2 * frames)
-       {       printf ("\n\nLine %d : incorrect number of frames in file (%ld should be %d)\n\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 2 * frames) ;
-               exit (1) ;
-               } ;
-
-       test_writef_int_or_die (wfile, 3, orig, frames, __LINE__) ;
-
-       test_readf_int_or_die (rwfile, 1, test, frames, __LINE__) ;
-       test_readf_int_or_die (rwfile, 2, test, frames, __LINE__) ;
-
-       sf_close (wfile) ;
-       sf_close (rwfile) ;
-} /* new_rdwr_24bit_test */
-
-
-/*======================================================================================
-*/
-
-static void mono_int_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void stereo_int_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void mono_rdwr_int_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void new_rdwr_int_test (const char *filename, int format, int allow_fd) ;
-static void multi_seek_test (const char * filename, int format) ;
-static void write_seek_extend_test (const char * filename, int format) ;
-
-static void
-pcm_test_int (const char *filename, int format, int long_file_ok)
-{      SF_INFO         sfinfo ;
-       int             *orig ;
-       int                     k, allow_fd ;
-
-       /* Sd2 files cannot be opened from an existing file descriptor. */
-       allow_fd = ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2) ? SF_FALSE : SF_TRUE ;
-
-       print_test_name ("pcm_test_int", filename) ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       gen_windowed_sine_double (orig_data.d, DATA_LENGTH, (1.0 * 0x7F000000)) ;
-
-       orig = orig_data.i ;
-
-       /* Make this a macro so gdb steps over it in one go. */
-       CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-       /* Some test broken out here. */
-
-       mono_int_test (filename, format, long_file_ok, allow_fd) ;
-
-       /* Sub format DWVW does not allow seeking. */
-       if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-                       (format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-       {       unlink (filename) ;
-               printf ("no seek : ok\n") ;
-               return ;
-               } ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-               mono_rdwr_int_test (filename, format, long_file_ok, allow_fd) ;
-
-       /* If the format doesn't support stereo we're done. */
-       sfinfo.channels = 2 ;
-       if (sf_format_check (&sfinfo) == 0)
-       {       unlink (filename) ;
-               puts ("no stereo : ok") ;
-               return ;
-               } ;
-
-       stereo_int_test (filename, format, long_file_ok, allow_fd) ;
-
-       /* New read/write test. Not sure if this is needed yet. */
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_PAF &&
-                       (format & SF_FORMAT_TYPEMASK) != SF_FORMAT_VOC &&
-                       (format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-               new_rdwr_int_test (filename, format, allow_fd) ;
-
-       delete_file (format, filename) ;
-
-       puts ("ok") ;
-       return ;
-} /* pcm_test_int */
-
-static void
-mono_int_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int             *orig, *test ;
-       sf_count_t      count ;
-       int                     k, items ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       orig = orig_data.i ;
-       test = test_data.i ;
-
-       items = DATA_LENGTH ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-       sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-       test_write_int_or_die (file, 0, orig, items, __LINE__) ;
-       sf_write_sync (file) ;
-       test_write_int_or_die (file, 0, orig, items, __LINE__) ;
-       sf_write_sync (file) ;
-
-       /* Add non-audio data after the audio. */
-       sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-       sf_close (file) ;
-
-       memset (test, 0, items * sizeof (int)) ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("\n\nLine %d : Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < 2 * items)
-       {       printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-               exit (1) ;
-               } ;
-
-       if (! long_file_ok && sfinfo.frames > 2 * items)
-       {       printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too long). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d : Mono : Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_int_or_die (file, 0, test, items, __LINE__) ;
-       for (k = 0 ; k < items ; k++)
-               if (INT_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d: Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       oct_save_int (orig, test, items) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_read_int_or_die (file, 0, test, 4, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-               if (INT_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-                       (format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-       {       sf_close (file) ;
-               unlink (filename) ;
-               printf ("no seek : ") ;
-               return ;
-               } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, items + 10, SEEK_SET, items + 10, sfinfo.channels, __LINE__) ;
-
-       test_read_int_or_die (file, 0, test + 10, 4, __LINE__) ;
-       for (k = 10 ; k < 14 ; k++)
-               if (INT_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 6, SEEK_CUR, items + 20, sfinfo.channels, __LINE__) ;
-
-       test_read_int_or_die (file, 0, test + 20, 4, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-               if (INT_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_read_int_or_die (file, 0, test + 10, 4, __LINE__) ;
-       for (k = 10 ; k < 14 ; k++)
-               if (INT_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample D (#%d : 0x%X => 0x%X).\n", __LINE__, k, test [k], orig [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Check read past end of file followed by sf_seek (sndfile, 0, SEEK_CUR). */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       count = 0 ;
-       while (count < sfinfo.frames)
-               count += sf_read_int (file, test, 311) ;
-
-       /* Check that no error has occurred. */
-       if (sf_error (file))
-       {       printf ("\n\nLine %d : Mono : error where there shouldn't have been one.\n", __LINE__) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       /* Check that we haven't read beyond EOF. */
-       if (count > sfinfo.frames)
-       {       printf ("\n\nLines %d : read past end of file (%ld should be %ld)\n", __LINE__, (long) count, (long) sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       test_seek_or_die (file, 0, SEEK_CUR, sfinfo.frames, sfinfo.channels, __LINE__) ;
-
-       sf_close (file) ;
-
-       multi_seek_test (filename, format) ;
-       write_seek_extend_test (filename, format) ;
-
-} /* mono_int_test */
-
-static void
-stereo_int_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int             *orig, *test ;
-       int                     k, items, frames ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 2 ;
-       sfinfo.format           = format ;
-
-       gen_windowed_sine_double (orig_data.d, DATA_LENGTH, (1.0 * 0x7F000000)) ;
-
-       orig = orig_data.i ;
-       test = test_data.i ;
-
-       /* Make this a macro so gdb steps over it in one go. */
-       CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-       items = DATA_LENGTH ;
-       frames = items / sfinfo.channels ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-       sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-       test_writef_int_or_die (file, 0, orig, frames, __LINE__) ;
-
-       sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-       sf_close (file) ;
-
-       memset (test, 0, items * sizeof (int)) ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("\n\nLine %d : Stereo : Returned format incorrect (0x%08X => 0x%08X).\n",
-                               __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < frames)
-       {       printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too short). (%ld should be %d)\n",
-                               __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-               exit (1) ;
-               } ;
-
-       if (! long_file_ok && sfinfo.frames > frames)
-       {       printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too long). (%ld should be %d)\n",
-                               __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 2)
-       {       printf ("\n\nLine %d : Stereo : Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_readf_int_or_die (file, 0, test, frames, __LINE__) ;
-       for (k = 0 ; k < items ; k++)
-               if (INT_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_readf_int_or_die (file, 0, test, 2, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-               if (INT_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-       /* Check for errors here. */
-       if (sf_error (file))
-       {       printf ("Line %d: Should NOT return an error.\n", __LINE__) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       if (sf_read_int (file, test, 1) > 0)
-       {       printf ("Line %d: Should return 0.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (! sf_error (file))
-       {       printf ("Line %d: Should return an error.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-       /*-----------------------*/
-
-       test_readf_int_or_die (file, 0, test + 10, 2, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-               if (INT_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-       test_readf_int_or_die (file, 0, test + 20, 2, __LINE__) ;
-       for (k = 40 ; k < 44 ; k++)
-               if (INT_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_readf_int_or_die (file, 0, test + 20, 2, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-               if (INT_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : 0x%X => 0x%X).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-} /* stereo_int_test */
-
-static void
-mono_rdwr_int_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       int             *orig, *test ;
-       int                     k, pass ;
-
-       orig = orig_data.i ;
-       test = test_data.i ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = DATA_LENGTH ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       if ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_RAW
-               || (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_AU
-               || (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2)
-               unlink (filename) ;
-       else
-       {       /* Create a short file. */
-               create_short_file (filename) ;
-
-               /* Opening a already existing short file (ie invalid header) RDWR is disallowed.
-               ** If this returns a valif pointer sf_open() screwed up.
-               */
-               if ((file = sf_open (filename, SFM_RDWR, &sfinfo)))
-               {       printf ("\n\nLine %d: sf_open should (SFM_RDWR) have failed but didn't.\n", __LINE__) ;
-                       exit (1) ;
-                       } ;
-
-               /* Truncate the file to zero bytes. */
-               if (truncate (filename, 0) < 0)
-               {       printf ("\n\nLine %d: truncate (%s) failed", __LINE__, filename) ;
-                       perror (NULL) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Opening a zero length file RDWR is allowed, but the SF_INFO struct must contain
-       ** all the usual data required when opening the file in WRITE mode.
-       */
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = DATA_LENGTH ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-       /* Do 3 writes followed by reads. After each, check the data and the current
-       ** read and write offsets.
-       */
-       for (pass = 1 ; pass <= 3 ; pass ++)
-       {       orig [20] = pass * 2 ;
-
-               /* Write some data. */
-               test_write_int_or_die (file, pass, orig, DATA_LENGTH, __LINE__) ;
-
-               test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, pass * DATA_LENGTH) ;
-
-               /* Read what we just wrote. */
-               test_read_int_or_die (file, 0, test, DATA_LENGTH, __LINE__) ;
-
-               /* Check the data. */
-               for (k = 0 ; k < DATA_LENGTH ; k++)
-                       if (INT_ERROR (orig [k], test [k]))
-                       {       printf ("\n\nLine %d (pass %d) A : Error at sample %d (0x%X => 0x%X).\n", __LINE__, pass, k, orig [k], test [k]) ;
-                               oct_save_int (orig, test, DATA_LENGTH) ;
-                               exit (1) ;
-                               } ;
-
-               test_read_write_position_or_die (file, __LINE__, pass, pass * DATA_LENGTH, pass * DATA_LENGTH) ;
-               } ; /* for (pass ...) */
-
-       sf_close (file) ;
-
-       /* Open the file again to check the data. */
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("\n\nLine %d : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < 3 * DATA_LENGTH)
-       {       printf ("\n\nLine %d : Not enough frames in file. (%ld < %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-               exit (1) ;
-               }
-
-       if (! long_file_ok && sfinfo.frames != 3 * DATA_LENGTH)
-       {       printf ("\n\nLine %d : Incorrect number of frames in file. (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d : Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (! long_file_ok)
-               test_read_write_position_or_die (file, __LINE__, 0, 0, 3 * DATA_LENGTH) ;
-       else
-               test_seek_or_die (file, 3 * DATA_LENGTH, SFM_WRITE | SEEK_SET, 3 * DATA_LENGTH, sfinfo.channels, __LINE__) ;
-
-       for (pass = 1 ; pass <= 3 ; pass ++)
-       {       orig [20] = pass * 2 ;
-
-               test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, 3 * DATA_LENGTH) ;
-
-               /* Read what we just wrote. */
-               test_read_int_or_die (file, pass, test, DATA_LENGTH, __LINE__) ;
-
-               /* Check the data. */
-               for (k = 0 ; k < DATA_LENGTH ; k++)
-                       if (INT_ERROR (orig [k], test [k]))
-                       {       printf ("\n\nLine %d (pass %d) B : Error at sample %d (0x%X => 0x%X).\n", __LINE__, pass, k, orig [k], test [k]) ;
-                               oct_save_int (orig, test, DATA_LENGTH) ;
-                               exit (1) ;
-                               } ;
-
-               } ; /* for (pass ...) */
-
-       sf_close (file) ;
-} /* mono_rdwr_int_test */
-
-static void
-new_rdwr_int_test (const char *filename, int format, int allow_fd)
-{      SNDFILE *wfile, *rwfile ;
-       SF_INFO sfinfo ;
-       int             *orig, *test ;
-       int             items, frames ;
-
-       orig = orig_data.i ;
-       test = test_data.i ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 2 ;
-       sfinfo.format           = format ;
-
-       items = DATA_LENGTH ;
-       frames = items / sfinfo.channels ;
-
-       wfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-       sf_command (wfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
-       test_writef_int_or_die (wfile, 1, orig, frames, __LINE__) ;
-       sf_write_sync (wfile) ;
-       test_writef_int_or_die (wfile, 2, orig, frames, __LINE__) ;
-       sf_write_sync (wfile) ;
-
-       rwfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-       if (sfinfo.frames != 2 * frames)
-       {       printf ("\n\nLine %d : incorrect number of frames in file (%ld should be %d)\n\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 2 * frames) ;
-               exit (1) ;
-               } ;
-
-       test_writef_int_or_die (wfile, 3, orig, frames, __LINE__) ;
-
-       test_readf_int_or_die (rwfile, 1, test, frames, __LINE__) ;
-       test_readf_int_or_die (rwfile, 2, test, frames, __LINE__) ;
-
-       sf_close (wfile) ;
-       sf_close (rwfile) ;
-} /* new_rdwr_int_test */
-
-
-/*======================================================================================
-*/
-
-static void mono_float_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void stereo_float_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void mono_rdwr_float_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void new_rdwr_float_test (const char *filename, int format, int allow_fd) ;
-static void multi_seek_test (const char * filename, int format) ;
-static void write_seek_extend_test (const char * filename, int format) ;
-
-static void
-pcm_test_float (const char *filename, int format, int long_file_ok)
-{      SF_INFO         sfinfo ;
-       float           *orig ;
-       int                     k, allow_fd ;
-
-       /* Sd2 files cannot be opened from an existing file descriptor. */
-       allow_fd = ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2) ? SF_FALSE : SF_TRUE ;
-
-       print_test_name ("pcm_test_float", filename) ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       gen_windowed_sine_double (orig_data.d, DATA_LENGTH, 1.0) ;
-
-       orig = orig_data.f ;
-
-       /* Make this a macro so gdb steps over it in one go. */
-       CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-       /* Some test broken out here. */
-
-       mono_float_test (filename, format, long_file_ok, allow_fd) ;
-
-       /* Sub format DWVW does not allow seeking. */
-       if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-                       (format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-       {       unlink (filename) ;
-               printf ("no seek : ok\n") ;
-               return ;
-               } ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-               mono_rdwr_float_test (filename, format, long_file_ok, allow_fd) ;
-
-       /* If the format doesn't support stereo we're done. */
-       sfinfo.channels = 2 ;
-       if (sf_format_check (&sfinfo) == 0)
-       {       unlink (filename) ;
-               puts ("no stereo : ok") ;
-               return ;
-               } ;
-
-       stereo_float_test (filename, format, long_file_ok, allow_fd) ;
-
-       /* New read/write test. Not sure if this is needed yet. */
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_PAF &&
-                       (format & SF_FORMAT_TYPEMASK) != SF_FORMAT_VOC &&
-                       (format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-               new_rdwr_float_test (filename, format, allow_fd) ;
-
-       delete_file (format, filename) ;
-
-       puts ("ok") ;
-       return ;
-} /* pcm_test_float */
-
-static void
-mono_float_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       float           *orig, *test ;
-       sf_count_t      count ;
-       int                     k, items ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       orig = orig_data.f ;
-       test = test_data.f ;
-
-       items = DATA_LENGTH ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-       sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-       test_write_float_or_die (file, 0, orig, items, __LINE__) ;
-       sf_write_sync (file) ;
-       test_write_float_or_die (file, 0, orig, items, __LINE__) ;
-       sf_write_sync (file) ;
-
-       /* Add non-audio data after the audio. */
-       sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-       sf_close (file) ;
-
-       memset (test, 0, items * sizeof (float)) ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("\n\nLine %d : Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < 2 * items)
-       {       printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-               exit (1) ;
-               } ;
-
-       if (! long_file_ok && sfinfo.frames > 2 * items)
-       {       printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too long). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d : Mono : Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_float_or_die (file, 0, test, items, __LINE__) ;
-       for (k = 0 ; k < items ; k++)
-               if (FLOAT_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d: Mono : Incorrect sample A (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-                       oct_save_float (orig, test, items) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_read_float_or_die (file, 0, test, 4, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-               if (FLOAT_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-                       (format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-       {       sf_close (file) ;
-               unlink (filename) ;
-               printf ("no seek : ") ;
-               return ;
-               } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, items + 10, SEEK_SET, items + 10, sfinfo.channels, __LINE__) ;
-
-       test_read_float_or_die (file, 0, test + 10, 4, __LINE__) ;
-       for (k = 10 ; k < 14 ; k++)
-               if (FLOAT_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : %g => %g).\n", __LINE__, k, test [k], orig [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 6, SEEK_CUR, items + 20, sfinfo.channels, __LINE__) ;
-
-       test_read_float_or_die (file, 0, test + 20, 4, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-               if (FLOAT_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : %g => %g).\n", __LINE__, k, test [k], orig [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_read_float_or_die (file, 0, test + 10, 4, __LINE__) ;
-       for (k = 10 ; k < 14 ; k++)
-               if (FLOAT_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample D (#%d : %g => %g).\n", __LINE__, k, test [k], orig [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Check read past end of file followed by sf_seek (sndfile, 0, SEEK_CUR). */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       count = 0 ;
-       while (count < sfinfo.frames)
-               count += sf_read_float (file, test, 311) ;
-
-       /* Check that no error has occurred. */
-       if (sf_error (file))
-       {       printf ("\n\nLine %d : Mono : error where there shouldn't have been one.\n", __LINE__) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       /* Check that we haven't read beyond EOF. */
-       if (count > sfinfo.frames)
-       {       printf ("\n\nLines %d : read past end of file (%ld should be %ld)\n", __LINE__, (long) count, (long) sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       test_seek_or_die (file, 0, SEEK_CUR, sfinfo.frames, sfinfo.channels, __LINE__) ;
-
-       sf_close (file) ;
-
-       multi_seek_test (filename, format) ;
-       write_seek_extend_test (filename, format) ;
-
-} /* mono_float_test */
-
-static void
-stereo_float_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       float           *orig, *test ;
-       int                     k, items, frames ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 2 ;
-       sfinfo.format           = format ;
-
-       gen_windowed_sine_double (orig_data.d, DATA_LENGTH, 1.0) ;
-
-       orig = orig_data.f ;
-       test = test_data.f ;
-
-       /* Make this a macro so gdb steps over it in one go. */
-       CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-       items = DATA_LENGTH ;
-       frames = items / sfinfo.channels ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-       sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-       test_writef_float_or_die (file, 0, orig, frames, __LINE__) ;
-
-       sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-       sf_close (file) ;
-
-       memset (test, 0, items * sizeof (float)) ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("\n\nLine %d : Stereo : Returned format incorrect (0x%08X => 0x%08X).\n",
-                               __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < frames)
-       {       printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too short). (%ld should be %d)\n",
-                               __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-               exit (1) ;
-               } ;
-
-       if (! long_file_ok && sfinfo.frames > frames)
-       {       printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too long). (%ld should be %d)\n",
-                               __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 2)
-       {       printf ("\n\nLine %d : Stereo : Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_readf_float_or_die (file, 0, test, frames, __LINE__) ;
-       for (k = 0 ; k < items ; k++)
-               if (FLOAT_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_readf_float_or_die (file, 0, test, 2, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-               if (FLOAT_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-       /* Check for errors here. */
-       if (sf_error (file))
-       {       printf ("Line %d: Should NOT return an error.\n", __LINE__) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       if (sf_read_float (file, test, 1) > 0)
-       {       printf ("Line %d: Should return 0.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (! sf_error (file))
-       {       printf ("Line %d: Should return an error.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-       /*-----------------------*/
-
-       test_readf_float_or_die (file, 0, test + 10, 2, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-               if (FLOAT_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-       test_readf_float_or_die (file, 0, test + 20, 2, __LINE__) ;
-       for (k = 40 ; k < 44 ; k++)
-               if (FLOAT_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_readf_float_or_die (file, 0, test + 20, 2, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-               if (FLOAT_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-} /* stereo_float_test */
-
-static void
-mono_rdwr_float_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       float           *orig, *test ;
-       int                     k, pass ;
-
-       orig = orig_data.f ;
-       test = test_data.f ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = DATA_LENGTH ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       if ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_RAW
-               || (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_AU
-               || (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2)
-               unlink (filename) ;
-       else
-       {       /* Create a short file. */
-               create_short_file (filename) ;
-
-               /* Opening a already existing short file (ie invalid header) RDWR is disallowed.
-               ** If this returns a valif pointer sf_open() screwed up.
-               */
-               if ((file = sf_open (filename, SFM_RDWR, &sfinfo)))
-               {       printf ("\n\nLine %d: sf_open should (SFM_RDWR) have failed but didn't.\n", __LINE__) ;
-                       exit (1) ;
-                       } ;
-
-               /* Truncate the file to zero bytes. */
-               if (truncate (filename, 0) < 0)
-               {       printf ("\n\nLine %d: truncate (%s) failed", __LINE__, filename) ;
-                       perror (NULL) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Opening a zero length file RDWR is allowed, but the SF_INFO struct must contain
-       ** all the usual data required when opening the file in WRITE mode.
-       */
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = DATA_LENGTH ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-       /* Do 3 writes followed by reads. After each, check the data and the current
-       ** read and write offsets.
-       */
-       for (pass = 1 ; pass <= 3 ; pass ++)
-       {       orig [20] = pass * 2 ;
-
-               /* Write some data. */
-               test_write_float_or_die (file, pass, orig, DATA_LENGTH, __LINE__) ;
-
-               test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, pass * DATA_LENGTH) ;
-
-               /* Read what we just wrote. */
-               test_read_float_or_die (file, 0, test, DATA_LENGTH, __LINE__) ;
-
-               /* Check the data. */
-               for (k = 0 ; k < DATA_LENGTH ; k++)
-                       if (FLOAT_ERROR (orig [k], test [k]))
-                       {       printf ("\n\nLine %d (pass %d) A : Error at sample %d (%g => %g).\n", __LINE__, pass, k, orig [k], test [k]) ;
-                               oct_save_float (orig, test, DATA_LENGTH) ;
-                               exit (1) ;
-                               } ;
-
-               test_read_write_position_or_die (file, __LINE__, pass, pass * DATA_LENGTH, pass * DATA_LENGTH) ;
-               } ; /* for (pass ...) */
-
-       sf_close (file) ;
-
-       /* Open the file again to check the data. */
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("\n\nLine %d : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < 3 * DATA_LENGTH)
-       {       printf ("\n\nLine %d : Not enough frames in file. (%ld < %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-               exit (1) ;
-               }
-
-       if (! long_file_ok && sfinfo.frames != 3 * DATA_LENGTH)
-       {       printf ("\n\nLine %d : Incorrect number of frames in file. (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d : Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (! long_file_ok)
-               test_read_write_position_or_die (file, __LINE__, 0, 0, 3 * DATA_LENGTH) ;
-       else
-               test_seek_or_die (file, 3 * DATA_LENGTH, SFM_WRITE | SEEK_SET, 3 * DATA_LENGTH, sfinfo.channels, __LINE__) ;
-
-       for (pass = 1 ; pass <= 3 ; pass ++)
-       {       orig [20] = pass * 2 ;
-
-               test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, 3 * DATA_LENGTH) ;
-
-               /* Read what we just wrote. */
-               test_read_float_or_die (file, pass, test, DATA_LENGTH, __LINE__) ;
-
-               /* Check the data. */
-               for (k = 0 ; k < DATA_LENGTH ; k++)
-                       if (FLOAT_ERROR (orig [k], test [k]))
-                       {       printf ("\n\nLine %d (pass %d) B : Error at sample %d (%g => %g).\n", __LINE__, pass, k, orig [k], test [k]) ;
-                               oct_save_float (orig, test, DATA_LENGTH) ;
-                               exit (1) ;
-                               } ;
-
-               } ; /* for (pass ...) */
-
-       sf_close (file) ;
-} /* mono_rdwr_float_test */
-
-static void
-new_rdwr_float_test (const char *filename, int format, int allow_fd)
-{      SNDFILE *wfile, *rwfile ;
-       SF_INFO sfinfo ;
-       float           *orig, *test ;
-       int             items, frames ;
-
-       orig = orig_data.f ;
-       test = test_data.f ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 2 ;
-       sfinfo.format           = format ;
-
-       items = DATA_LENGTH ;
-       frames = items / sfinfo.channels ;
-
-       wfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-       sf_command (wfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
-       test_writef_float_or_die (wfile, 1, orig, frames, __LINE__) ;
-       sf_write_sync (wfile) ;
-       test_writef_float_or_die (wfile, 2, orig, frames, __LINE__) ;
-       sf_write_sync (wfile) ;
-
-       rwfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-       if (sfinfo.frames != 2 * frames)
-       {       printf ("\n\nLine %d : incorrect number of frames in file (%ld should be %d)\n\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 2 * frames) ;
-               exit (1) ;
-               } ;
-
-       test_writef_float_or_die (wfile, 3, orig, frames, __LINE__) ;
-
-       test_readf_float_or_die (rwfile, 1, test, frames, __LINE__) ;
-       test_readf_float_or_die (rwfile, 2, test, frames, __LINE__) ;
-
-       sf_close (wfile) ;
-       sf_close (rwfile) ;
-} /* new_rdwr_float_test */
-
-
-/*======================================================================================
-*/
-
-static void mono_double_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void stereo_double_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void mono_rdwr_double_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void new_rdwr_double_test (const char *filename, int format, int allow_fd) ;
-static void multi_seek_test (const char * filename, int format) ;
-static void write_seek_extend_test (const char * filename, int format) ;
-
-static void
-pcm_test_double (const char *filename, int format, int long_file_ok)
-{      SF_INFO         sfinfo ;
-       double          *orig ;
-       int                     k, allow_fd ;
-
-       /* Sd2 files cannot be opened from an existing file descriptor. */
-       allow_fd = ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2) ? SF_FALSE : SF_TRUE ;
-
-       print_test_name ("pcm_test_double", filename) ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       gen_windowed_sine_double (orig_data.d, DATA_LENGTH, 1.0) ;
-
-       orig = orig_data.d ;
-
-       /* Make this a macro so gdb steps over it in one go. */
-       CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-       /* Some test broken out here. */
-
-       mono_double_test (filename, format, long_file_ok, allow_fd) ;
-
-       /* Sub format DWVW does not allow seeking. */
-       if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-                       (format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-       {       unlink (filename) ;
-               printf ("no seek : ok\n") ;
-               return ;
-               } ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-               mono_rdwr_double_test (filename, format, long_file_ok, allow_fd) ;
-
-       /* If the format doesn't support stereo we're done. */
-       sfinfo.channels = 2 ;
-       if (sf_format_check (&sfinfo) == 0)
-       {       unlink (filename) ;
-               puts ("no stereo : ok") ;
-               return ;
-               } ;
-
-       stereo_double_test (filename, format, long_file_ok, allow_fd) ;
-
-       /* New read/write test. Not sure if this is needed yet. */
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_PAF &&
-                       (format & SF_FORMAT_TYPEMASK) != SF_FORMAT_VOC &&
-                       (format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC)
-               new_rdwr_double_test (filename, format, allow_fd) ;
-
-       delete_file (format, filename) ;
-
-       puts ("ok") ;
-       return ;
-} /* pcm_test_double */
-
-static void
-mono_double_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       double          *orig, *test ;
-       sf_count_t      count ;
-       int                     k, items ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       orig = orig_data.d ;
-       test = test_data.d ;
-
-       items = DATA_LENGTH ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-       sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-       test_write_double_or_die (file, 0, orig, items, __LINE__) ;
-       sf_write_sync (file) ;
-       test_write_double_or_die (file, 0, orig, items, __LINE__) ;
-       sf_write_sync (file) ;
-
-       /* Add non-audio data after the audio. */
-       sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-       sf_close (file) ;
-
-       memset (test, 0, items * sizeof (double)) ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("\n\nLine %d : Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < 2 * items)
-       {       printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too short). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-               exit (1) ;
-               } ;
-
-       if (! long_file_ok && sfinfo.frames > 2 * items)
-       {       printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too long). (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), items) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d : Mono : Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_double_or_die (file, 0, test, items, __LINE__) ;
-       for (k = 0 ; k < items ; k++)
-               if (FLOAT_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d: Mono : Incorrect sample A (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-                       oct_save_double (orig, test, items) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, test, 4, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-               if (FLOAT_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-                       (format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-       {       sf_close (file) ;
-               unlink (filename) ;
-               printf ("no seek : ") ;
-               return ;
-               } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, items + 10, SEEK_SET, items + 10, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, test + 10, 4, __LINE__) ;
-       for (k = 10 ; k < 14 ; k++)
-               if (FLOAT_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : %g => %g).\n", __LINE__, k, test [k], orig [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 6, SEEK_CUR, items + 20, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, test + 20, 4, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-               if (FLOAT_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : %g => %g).\n", __LINE__, k, test [k], orig [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_read_double_or_die (file, 0, test + 10, 4, __LINE__) ;
-       for (k = 10 ; k < 14 ; k++)
-               if (FLOAT_ERROR (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample D (#%d : %g => %g).\n", __LINE__, k, test [k], orig [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Check read past end of file followed by sf_seek (sndfile, 0, SEEK_CUR). */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       count = 0 ;
-       while (count < sfinfo.frames)
-               count += sf_read_double (file, test, 311) ;
-
-       /* Check that no error has occurred. */
-       if (sf_error (file))
-       {       printf ("\n\nLine %d : Mono : error where there shouldn't have been one.\n", __LINE__) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       /* Check that we haven't read beyond EOF. */
-       if (count > sfinfo.frames)
-       {       printf ("\n\nLines %d : read past end of file (%ld should be %ld)\n", __LINE__, (long) count, (long) sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       test_seek_or_die (file, 0, SEEK_CUR, sfinfo.frames, sfinfo.channels, __LINE__) ;
-
-       sf_close (file) ;
-
-       multi_seek_test (filename, format) ;
-       write_seek_extend_test (filename, format) ;
-
-} /* mono_double_test */
-
-static void
-stereo_double_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       double          *orig, *test ;
-       int                     k, items, frames ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 2 ;
-       sfinfo.format           = format ;
-
-       gen_windowed_sine_double (orig_data.d, DATA_LENGTH, 1.0) ;
-
-       orig = orig_data.d ;
-       test = test_data.d ;
-
-       /* Make this a macro so gdb steps over it in one go. */
-       CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-       items = DATA_LENGTH ;
-       frames = items / sfinfo.channels ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-       sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-       test_writef_double_or_die (file, 0, orig, frames, __LINE__) ;
-
-       sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-       sf_close (file) ;
-
-       memset (test, 0, items * sizeof (double)) ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("\n\nLine %d : Stereo : Returned format incorrect (0x%08X => 0x%08X).\n",
-                               __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < frames)
-       {       printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too short). (%ld should be %d)\n",
-                               __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-               exit (1) ;
-               } ;
-
-       if (! long_file_ok && sfinfo.frames > frames)
-       {       printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too long). (%ld should be %d)\n",
-                               __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 2)
-       {       printf ("\n\nLine %d : Stereo : Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_readf_double_or_die (file, 0, test, frames, __LINE__) ;
-       for (k = 0 ; k < items ; k++)
-               if (FLOAT_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_readf_double_or_die (file, 0, test, 2, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-               if (FLOAT_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-       /* Check for errors here. */
-       if (sf_error (file))
-       {       printf ("Line %d: Should NOT return an error.\n", __LINE__) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       if (sf_read_double (file, test, 1) > 0)
-       {       printf ("Line %d: Should return 0.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (! sf_error (file))
-       {       printf ("Line %d: Should return an error.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-       /*-----------------------*/
-
-       test_readf_double_or_die (file, 0, test + 10, 2, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-               if (FLOAT_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-       test_readf_double_or_die (file, 0, test + 20, 2, __LINE__) ;
-       for (k = 40 ; k < 44 ; k++)
-               if (FLOAT_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_readf_double_or_die (file, 0, test + 20, 2, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-               if (FLOAT_ERROR (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : %g => %g).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-} /* stereo_double_test */
-
-static void
-mono_rdwr_double_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       double          *orig, *test ;
-       int                     k, pass ;
-
-       orig = orig_data.d ;
-       test = test_data.d ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = DATA_LENGTH ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       if ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_RAW
-               || (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_AU
-               || (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2)
-               unlink (filename) ;
-       else
-       {       /* Create a short file. */
-               create_short_file (filename) ;
-
-               /* Opening a already existing short file (ie invalid header) RDWR is disallowed.
-               ** If this returns a valif pointer sf_open() screwed up.
-               */
-               if ((file = sf_open (filename, SFM_RDWR, &sfinfo)))
-               {       printf ("\n\nLine %d: sf_open should (SFM_RDWR) have failed but didn't.\n", __LINE__) ;
-                       exit (1) ;
-                       } ;
-
-               /* Truncate the file to zero bytes. */
-               if (truncate (filename, 0) < 0)
-               {       printf ("\n\nLine %d: truncate (%s) failed", __LINE__, filename) ;
-                       perror (NULL) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Opening a zero length file RDWR is allowed, but the SF_INFO struct must contain
-       ** all the usual data required when opening the file in WRITE mode.
-       */
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = DATA_LENGTH ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-       /* Do 3 writes followed by reads. After each, check the data and the current
-       ** read and write offsets.
-       */
-       for (pass = 1 ; pass <= 3 ; pass ++)
-       {       orig [20] = pass * 2 ;
-
-               /* Write some data. */
-               test_write_double_or_die (file, pass, orig, DATA_LENGTH, __LINE__) ;
-
-               test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, pass * DATA_LENGTH) ;
-
-               /* Read what we just wrote. */
-               test_read_double_or_die (file, 0, test, DATA_LENGTH, __LINE__) ;
-
-               /* Check the data. */
-               for (k = 0 ; k < DATA_LENGTH ; k++)
-                       if (FLOAT_ERROR (orig [k], test [k]))
-                       {       printf ("\n\nLine %d (pass %d) A : Error at sample %d (%g => %g).\n", __LINE__, pass, k, orig [k], test [k]) ;
-                               oct_save_double (orig, test, DATA_LENGTH) ;
-                               exit (1) ;
-                               } ;
-
-               test_read_write_position_or_die (file, __LINE__, pass, pass * DATA_LENGTH, pass * DATA_LENGTH) ;
-               } ; /* for (pass ...) */
-
-       sf_close (file) ;
-
-       /* Open the file again to check the data. */
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("\n\nLine %d : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < 3 * DATA_LENGTH)
-       {       printf ("\n\nLine %d : Not enough frames in file. (%ld < %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-               exit (1) ;
-               }
-
-       if (! long_file_ok && sfinfo.frames != 3 * DATA_LENGTH)
-       {       printf ("\n\nLine %d : Incorrect number of frames in file. (%ld should be %d)\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 3 * DATA_LENGTH ) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d : Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (! long_file_ok)
-               test_read_write_position_or_die (file, __LINE__, 0, 0, 3 * DATA_LENGTH) ;
-       else
-               test_seek_or_die (file, 3 * DATA_LENGTH, SFM_WRITE | SEEK_SET, 3 * DATA_LENGTH, sfinfo.channels, __LINE__) ;
-
-       for (pass = 1 ; pass <= 3 ; pass ++)
-       {       orig [20] = pass * 2 ;
-
-               test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, 3 * DATA_LENGTH) ;
-
-               /* Read what we just wrote. */
-               test_read_double_or_die (file, pass, test, DATA_LENGTH, __LINE__) ;
-
-               /* Check the data. */
-               for (k = 0 ; k < DATA_LENGTH ; k++)
-                       if (FLOAT_ERROR (orig [k], test [k]))
-                       {       printf ("\n\nLine %d (pass %d) B : Error at sample %d (%g => %g).\n", __LINE__, pass, k, orig [k], test [k]) ;
-                               oct_save_double (orig, test, DATA_LENGTH) ;
-                               exit (1) ;
-                               } ;
-
-               } ; /* for (pass ...) */
-
-       sf_close (file) ;
-} /* mono_rdwr_double_test */
-
-static void
-new_rdwr_double_test (const char *filename, int format, int allow_fd)
-{      SNDFILE *wfile, *rwfile ;
-       SF_INFO sfinfo ;
-       double          *orig, *test ;
-       int             items, frames ;
-
-       orig = orig_data.d ;
-       test = test_data.d ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 2 ;
-       sfinfo.format           = format ;
-
-       items = DATA_LENGTH ;
-       frames = items / sfinfo.channels ;
-
-       wfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-       sf_command (wfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
-       test_writef_double_or_die (wfile, 1, orig, frames, __LINE__) ;
-       sf_write_sync (wfile) ;
-       test_writef_double_or_die (wfile, 2, orig, frames, __LINE__) ;
-       sf_write_sync (wfile) ;
-
-       rwfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-       if (sfinfo.frames != 2 * frames)
-       {       printf ("\n\nLine %d : incorrect number of frames in file (%ld should be %d)\n\n", __LINE__, SF_COUNT_TO_LONG (sfinfo.frames), 2 * frames) ;
-               exit (1) ;
-               } ;
-
-       test_writef_double_or_die (wfile, 3, orig, frames, __LINE__) ;
-
-       test_readf_double_or_die (rwfile, 1, test, frames, __LINE__) ;
-       test_readf_double_or_die (rwfile, 2, test, frames, __LINE__) ;
-
-       sf_close (wfile) ;
-       sf_close (rwfile) ;
-} /* new_rdwr_double_test */
-
-
-
-/*----------------------------------------------------------------------------------------
-*/
-
-static void
-empty_file_test (const char *filename, int format)
-{      SNDFILE         *file ;
-       SF_INFO info ;
-       int allow_fd ;
-
-       /* Sd2 files cannot be opened from an existing file descriptor. */
-       allow_fd = ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2) ? SF_FALSE : SF_TRUE ;
-
-       print_test_name ("empty_file_test", filename) ;
-
-       unlink (filename) ;
-
-       info.samplerate = 48000 ;
-       info.channels = 2 ;
-       info.format = format ;
-
-       if (sf_format_check (&info) == SF_FALSE)
-       {       info.channels = 1 ;
-               if (sf_format_check (&info) == SF_FALSE)
-               {       puts ("invalid file format") ;
-                       return ;
-                       } ;
-               } ;
-
-       /* Create an empty file. */
-       file = test_open_file_or_die (filename, SFM_WRITE, &info, allow_fd, __LINE__) ;
-       sf_close (file) ;
-
-       /* Open for read and check the length. */
-       file = test_open_file_or_die (filename, SFM_READ, &info, allow_fd, __LINE__) ;
-
-       if (SF_COUNT_TO_LONG (info.frames) != 0)
-       {       printf ("\n\nError : frame count (%ld) should be zero.\n", SF_COUNT_TO_LONG (info.frames)) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       /* Open for read/write and check the length. */
-       file = test_open_file_or_die (filename, SFM_RDWR, &info, allow_fd, __LINE__) ;
-
-       if (SF_COUNT_TO_LONG (info.frames) != 0)
-       {       printf ("\n\nError : frame count (%ld) should be zero.\n", SF_COUNT_TO_LONG (info.frames)) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       /* Open for read and check the length. */
-       file = test_open_file_or_die (filename, SFM_READ, &info, allow_fd, __LINE__) ;
-
-       if (SF_COUNT_TO_LONG (info.frames) != 0)
-       {       printf ("\n\nError : frame count (%ld) should be zero.\n", SF_COUNT_TO_LONG (info.frames)) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       check_open_file_count_or_die (__LINE__) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-
-       return ;
-} /* empty_file_test */
-
-
-/*----------------------------------------------------------------------------------------
-*/
-
-static void
-create_short_file (const char *filename)
-{      FILE *file ;
-
-       if (! (file = fopen (filename, "w")))
-       {       printf ("create_short_file : fopen (%s, \"w\") failed.", filename) ;
-               fflush (stdout) ;
-               perror (NULL) ;
-               exit (1) ;
-               } ;
-
-       fprintf (file, "This is the file data.\n") ;
-
-       fclose (file) ;
-} /* create_short_file */
-
-#if (defined (WIN32) || defined (__WIN32))
-
-/* Win32 does not have truncate (nor does it have the POSIX function ftruncate).
-** Hack somethng up here to over come this. This function can only truncate to a
-** length of zero.
-*/
-
-static int
-truncate (const char *filename, int ignored)
-{      int fd ;
-
-       ignored = 0 ;
-
-       if ((fd = open (filename, O_RDWR | O_TRUNC | O_BINARY)) < 0)
-               return 0 ;
-
-       close (fd) ;
-
-       return 0 ;
-} /* truncate */
-
-#endif
-
-static void
-multi_seek_test (const char * filename, int format)
-{      SNDFILE * file ;
-       SF_INFO info ;
-       sf_count_t pos ;
-       int k ;
-
-       /* This test doesn't work on the following. */
-       switch (format & SF_FORMAT_TYPEMASK)
-       {       case SF_FORMAT_RAW :
-                       return ;
-
-               default :
-                       break ;
-               } ;
-
-       memset (&info, 0, sizeof (info)) ;
-
-       generate_file (filename, format, 88200) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &info, SF_FALSE, __LINE__) ;
-
-       for (k = 0 ; k < 10 ; k++)
-       {       pos = info.frames / (k + 2) ;
-               test_seek_or_die (file, pos, SEEK_SET, pos, info.channels, __LINE__) ;
-               } ;
-
-       sf_close (file) ;
-} /* multi_seek_test */
-
-static void
-write_seek_extend_test (const char * filename, int format)
-{      SNDFILE * file ;
-       SF_INFO info ;
-       short   *orig, *test ;
-       unsigned items, k ;
-
-       /* This test doesn't work on the following. */
-       switch (format & SF_FORMAT_TYPEMASK)
-       {       case SF_FORMAT_FLAC :
-               case SF_FORMAT_HTK :
-               case SF_FORMAT_PAF :
-               case SF_FORMAT_SDS :
-               case SF_FORMAT_SVX :
-                       return ;
-
-               default :
-                       break ;
-               } ;
-
-       memset (&info, 0, sizeof (info)) ;
-
-       info.samplerate = 48000 ;
-       info.channels = 1 ;
-       info.format = format ;
-
-       items = 512 ;
-       exit_if_true (items > ARRAY_LEN (orig_data.s), "Line %d : Bad assumption.\n", __LINE__) ;
-
-       orig = orig_data.s ;
-       test = test_data.s ;
-
-       for (k = 0 ; k < ARRAY_LEN (orig_data.s) ; k++)
-               orig [k] = 0x3fff ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &info, SF_FALSE, __LINE__) ;
-       test_write_short_or_die (file, 0, orig, items, __LINE__) ;
-
-       /* Extend the file using a seek. */
-       test_seek_or_die (file, 2 * items, SEEK_SET, 2 * items, info.channels, __LINE__) ;
-
-       test_writef_short_or_die (file, 0, orig, items, __LINE__) ;
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &info, SF_FALSE, __LINE__) ;
-       test_read_short_or_die (file, 0, test, 3 * items, __LINE__) ;
-       sf_close (file) ;
-
-       /* Can't do these formats due to scaling. */
-       switch (format & SF_FORMAT_SUBMASK)
-       {       case SF_FORMAT_PCM_S8 :
-               case SF_FORMAT_PCM_U8 :
-                       return ;
-               default :
-                       break ;
-               } ;
-
-       for (k = 0 ; k < items ; k++)
-       {       exit_if_true (test [k] != 0x3fff, "Line %d : test [%d] == %d, should be 0x3fff.\n", __LINE__, k, test [k]) ;
-               exit_if_true (test [items + k] != 0, "Line %d : test [%d] == %d, should be 0.\n", __LINE__, items + k, test [items + k]) ;
-               exit_if_true (test [2 * items + k] != 0x3fff, "Line %d : test [%d] == %d, should be 0x3fff.\n", __LINE__, 2 * items + k, test [2 * items + k]) ;
-               } ;
-
-       return ;
-} /* write_seek_extend_test */
-
-
diff --git a/libs/libsndfile/tests/write_read_test.def b/libs/libsndfile/tests/write_read_test.def
deleted file mode 100644 (file)
index 3316aec..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-autogen definitions write_read_test.tpl;
-
-data_type = {
-       type_name               = char ;
-       data_type               = short ;
-       data_field              = s ;
-       error_func              = CHAR_ERROR ;
-       format_char             = "0x%X" ;
-       max_val                 = "32000.0" ;
-       max_error               = "255" ;
-       } ;
-
-data_type = {
-       type_name               = short ;
-       data_type               = short ;
-       data_field              = s ;
-       error_func              = INT_ERROR ;
-       format_char             = "0x%X" ;
-       max_val                 = "32000.0" ;
-       max_error               = "0" ;
-       } ;
-
-data_type = {
-       type_name               = "20bit" ;
-       data_type               = int ;
-       data_field              = i ;
-       error_func              = BIT_20_ERROR ;
-       format_char             = "0x%X" ;
-       max_val                 = "(1.0 * 0x7F00000)" ;
-       max_error               = "4096" ;
-       } ;
-
-data_type = {
-       type_name               = "24bit" ;
-       data_type               = int ;
-       data_field              = i ;
-       error_func              = TRIBYTE_ERROR ;
-       format_char             = "0x%X" ;
-       max_val                 = "(1.0 * 0x7F000000)" ;
-       max_error               = "256" ;
-       } ;
-
-data_type = {
-       type_name               = int ;
-       data_type               = int ;
-       data_field              = i ;
-       error_func              = INT_ERROR ;
-       format_char             = "0x%X" ;
-       max_val                 = "(1.0 * 0x7F000000)" ;
-       max_error               = "0" ;
-       } ;
-
-/* Lite remove start */
-
-data_type = {
-       type_name               = float ;
-       data_type               = float ;
-       data_field              = f ;
-       error_func              = FLOAT_ERROR ;
-       format_char             = "%g" ;
-       max_val                 = "1.0" ;
-       max_error               = "0" ;
-       } ;
-
-data_type = {
-       type_name               = double ;
-       data_type               = double ;
-       data_field              = d ;
-       error_func              = FLOAT_ERROR ;
-       format_char             = "%g" ;
-       max_val                 = "1.0" ;
-       max_error               = "0" ;
-       } ;
-
-/* Lite remove end */
diff --git a/libs/libsndfile/tests/write_read_test.tpl b/libs/libsndfile/tests/write_read_test.tpl
deleted file mode 100644 (file)
index 55bf1db..0000000
+++ /dev/null
@@ -1,1184 +0,0 @@
-[+ AutoGen5 template c +]
-/*
-** Copyright (C) 1999-2012 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "sfconfig.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <inttypes.h>
-
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sndfile.h>
-
-#include "utils.h"
-#include "generate.h"
-
-#define        SAMPLE_RATE                     11025
-#define        DATA_LENGTH                     (1 << 12)
-
-#define        SILLY_WRITE_COUNT       (234)
-
-[+ FOR data_type
-+]static void  pcm_test_[+ (get "type_name") +] (const char *str, int format, int long_file_okz) ;
-[+ ENDFOR data_type
-+]
-static void empty_file_test (const char *filename, int format) ;
-
-typedef union
-{      double d [DATA_LENGTH] ;
-       float f [DATA_LENGTH] ;
-       int i [DATA_LENGTH] ;
-       short s [DATA_LENGTH] ;
-       char c [DATA_LENGTH] ;
-} BUFFER ;
-
-static BUFFER  orig_data ;
-static BUFFER  test_data ;
-
-int
-main (int argc, char **argv)
-{      int             do_all = 0 ;
-       int             test_count = 0 ;
-
-       count_open_files () ;
-
-       if (argc != 2)
-       {       printf ("Usage : %s <test>\n", argv [0]) ;
-               printf ("    Where <test> is one of the following:\n") ;
-               printf ("           wav   - test WAV file functions (little endian)\n") ;
-               printf ("           aiff  - test AIFF file functions (big endian)\n") ;
-               printf ("           au    - test AU file functions\n") ;
-               printf ("           avr   - test AVR file functions\n") ;
-               printf ("           caf   - test CAF file functions\n") ;
-               printf ("           raw   - test RAW header-less PCM file functions\n") ;
-               printf ("           paf   - test PAF file functions\n") ;
-               printf ("           svx   - test 8SVX/16SV file functions\n") ;
-               printf ("           nist  - test NIST Sphere file functions\n") ;
-               printf ("           ircam - test IRCAM file functions\n") ;
-               printf ("           voc   - Create Voice file functions\n") ;
-               printf ("           w64   - Sonic Foundry's W64 file functions\n") ;
-               printf ("           flac  - test FLAC file functions\n") ;
-               printf ("           mpc2k - test MPC 2000 file functions\n") ;
-               printf ("           rf64  - test RF64 file functions\n") ;
-               printf ("           all   - perform all tests\n") ;
-               exit (1) ;
-               } ;
-
-       do_all = !strcmp (argv [1], "all") ;
-
-       if (do_all || ! strcmp (argv [1], "wav"))
-       {       pcm_test_char   ("char.wav"             , SF_FORMAT_WAV | SF_FORMAT_PCM_U8, SF_FALSE) ;
-               pcm_test_short  ("short.wav"    , SF_FORMAT_WAV | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit.wav"    , SF_FORMAT_WAV | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int.wav"              , SF_FORMAT_WAV | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-               pcm_test_char   ("char.rifx"    , SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_U8, SF_FALSE) ;
-               pcm_test_short  ("short.rifx"   , SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit.rifx"   , SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int.rifx"             , SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-               pcm_test_24bit  ("24bit.wavex"  , SF_FORMAT_WAVEX | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int.wavex"    , SF_FORMAT_WAVEX | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-               /* Lite remove start */
-               pcm_test_float  ("float.wav"    , SF_FORMAT_WAV | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double.wav"   , SF_FORMAT_WAV | SF_FORMAT_DOUBLE, SF_FALSE) ;
-
-               pcm_test_float  ("float.rifx"   , SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double.rifx"  , SF_ENDIAN_BIG | SF_FORMAT_WAV | SF_FORMAT_DOUBLE, SF_FALSE) ;
-
-               pcm_test_float  ("float.wavex"  , SF_FORMAT_WAVEX | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double.wavex" , SF_FORMAT_WAVEX | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               /* Lite remove end */
-
-               empty_file_test ("empty_char.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_U8) ;
-               empty_file_test ("empty_short.wav", SF_FORMAT_WAV | SF_FORMAT_PCM_16) ;
-               empty_file_test ("empty_float.wav", SF_FORMAT_WAV | SF_FORMAT_FLOAT) ;
-
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "aiff"))
-       {       pcm_test_char   ("char_u8.aiff" , SF_FORMAT_AIFF | SF_FORMAT_PCM_U8, SF_FALSE) ;
-               pcm_test_char   ("char_s8.aiff" , SF_FORMAT_AIFF | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_short  ("short.aiff"   , SF_FORMAT_AIFF | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit.aiff"   , SF_FORMAT_AIFF | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int.aiff"             , SF_FORMAT_AIFF | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-               pcm_test_short  ("short_sowt.aifc"      , SF_ENDIAN_LITTLE | SF_FORMAT_AIFF | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit_sowt.aifc"      , SF_ENDIAN_LITTLE | SF_FORMAT_AIFF | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int_sowt.aifc"        , SF_ENDIAN_LITTLE | SF_FORMAT_AIFF | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-               pcm_test_short  ("short_twos.aifc"      , SF_ENDIAN_BIG | SF_FORMAT_AIFF | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit_twos.aifc"      , SF_ENDIAN_BIG | SF_FORMAT_AIFF | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int_twos.aifc"        , SF_ENDIAN_BIG | SF_FORMAT_AIFF | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-               /* Lite remove start */
-               pcm_test_short  ("dwvw16.aifc", SF_FORMAT_AIFF | SF_FORMAT_DWVW_16, SF_TRUE) ;
-               pcm_test_24bit  ("dwvw24.aifc", SF_FORMAT_AIFF | SF_FORMAT_DWVW_24, SF_TRUE) ;
-
-               pcm_test_float  ("float.aifc"   , SF_FORMAT_AIFF | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double.aifc"  , SF_FORMAT_AIFF | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               /* Lite remove end */
-
-               empty_file_test ("empty_char.aiff", SF_FORMAT_AIFF | SF_FORMAT_PCM_U8) ;
-               empty_file_test ("empty_short.aiff", SF_FORMAT_AIFF | SF_FORMAT_PCM_16) ;
-               empty_file_test ("empty_float.aiff", SF_FORMAT_AIFF | SF_FORMAT_FLOAT) ;
-
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "au"))
-       {       pcm_test_char   ("char.au"      , SF_FORMAT_AU | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_short  ("short.au"     , SF_FORMAT_AU | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit.au"     , SF_FORMAT_AU | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int.au"       , SF_FORMAT_AU | SF_FORMAT_PCM_32, SF_FALSE) ;
-               /* Lite remove start */
-               pcm_test_float  ("float.au"     , SF_FORMAT_AU | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double.au", SF_FORMAT_AU | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               /* Lite remove end */
-
-               pcm_test_char   ("char_le.au"   , SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_short  ("short_le.au"  , SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit_le.au"  , SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int_le.au"    , SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_PCM_32, SF_FALSE) ;
-               /* Lite remove start */
-               pcm_test_float  ("float_le.au"  , SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double_le.au" , SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               /* Lite remove end */
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "caf"))
-       {       pcm_test_char   ("char.caf"             , SF_FORMAT_CAF | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_short  ("short.caf"    , SF_FORMAT_CAF | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit.caf"    , SF_FORMAT_CAF | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int.caf"              , SF_FORMAT_CAF | SF_FORMAT_PCM_32, SF_FALSE) ;
-               /* Lite remove start */
-               pcm_test_float  ("float.caf"    , SF_FORMAT_CAF | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double.caf"   , SF_FORMAT_CAF | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               /* Lite remove end */
-
-               pcm_test_short  ("short_le.caf" , SF_ENDIAN_LITTLE | SF_FORMAT_CAF | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit_le.caf" , SF_ENDIAN_LITTLE | SF_FORMAT_CAF | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int_le.caf"   , SF_ENDIAN_LITTLE | SF_FORMAT_CAF | SF_FORMAT_PCM_32, SF_FALSE) ;
-               /* Lite remove start */
-               pcm_test_float  ("float_le.caf" , SF_ENDIAN_LITTLE | SF_FORMAT_CAF | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double_le.caf", SF_ENDIAN_LITTLE | SF_FORMAT_CAF | SF_FORMAT_DOUBLE, SF_FALSE) ;
-
-               pcm_test_short  ("alac16.caf"   , SF_FORMAT_CAF | SF_FORMAT_ALAC_16, SF_FALSE) ;
-               pcm_test_20bit  ("alac20.caf"   , SF_FORMAT_CAF | SF_FORMAT_ALAC_20, SF_FALSE) ;
-               pcm_test_24bit  ("alac24.caf"   , SF_FORMAT_CAF | SF_FORMAT_ALAC_24, SF_FALSE) ;
-               pcm_test_int    ("alac32.caf"   , SF_FORMAT_CAF | SF_FORMAT_ALAC_32, SF_FALSE) ;
-
-               /* Lite remove end */
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "raw"))
-       {       pcm_test_char   ("char_s8.raw"  , SF_FORMAT_RAW | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_char   ("char_u8.raw"  , SF_FORMAT_RAW | SF_FORMAT_PCM_U8, SF_FALSE) ;
-
-               pcm_test_short  ("short_le.raw" , SF_ENDIAN_LITTLE      | SF_FORMAT_RAW | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_short  ("short_be.raw" , SF_ENDIAN_BIG         | SF_FORMAT_RAW | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit_le.raw" , SF_ENDIAN_LITTLE      | SF_FORMAT_RAW | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_24bit  ("24bit_be.raw" , SF_ENDIAN_BIG         | SF_FORMAT_RAW | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int_le.raw"   , SF_ENDIAN_LITTLE      | SF_FORMAT_RAW | SF_FORMAT_PCM_32, SF_FALSE) ;
-               pcm_test_int    ("int_be.raw"   , SF_ENDIAN_BIG         | SF_FORMAT_RAW | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-               /* Lite remove start */
-               pcm_test_float  ("float_le.raw" , SF_ENDIAN_LITTLE      | SF_FORMAT_RAW | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_float  ("float_be.raw" , SF_ENDIAN_BIG         | SF_FORMAT_RAW | SF_FORMAT_FLOAT , SF_FALSE) ;
-
-               pcm_test_double ("double_le.raw", SF_ENDIAN_LITTLE      | SF_FORMAT_RAW | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               pcm_test_double ("double_be.raw", SF_ENDIAN_BIG         | SF_FORMAT_RAW | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               /* Lite remove end */
-               test_count++ ;
-               } ;
-
-       /* Lite remove start */
-       if (do_all || ! strcmp (argv [1], "paf"))
-       {       pcm_test_char   ("char_le.paf", SF_ENDIAN_LITTLE        | SF_FORMAT_PAF | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_char   ("char_be.paf", SF_ENDIAN_BIG           | SF_FORMAT_PAF | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_short  ("short_le.paf", SF_ENDIAN_LITTLE       | SF_FORMAT_PAF | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_short  ("short_be.paf", SF_ENDIAN_BIG          | SF_FORMAT_PAF | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit_le.paf", SF_ENDIAN_LITTLE       | SF_FORMAT_PAF | SF_FORMAT_PCM_24, SF_TRUE) ;
-               pcm_test_24bit  ("24bit_be.paf", SF_ENDIAN_BIG          | SF_FORMAT_PAF | SF_FORMAT_PCM_24, SF_TRUE) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "svx"))
-       {       pcm_test_char   ("char.svx" , SF_FORMAT_SVX | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_short  ("short.svx", SF_FORMAT_SVX | SF_FORMAT_PCM_16, SF_FALSE) ;
-
-               empty_file_test ("empty_char.svx", SF_FORMAT_SVX | SF_FORMAT_PCM_S8) ;
-               empty_file_test ("empty_short.svx", SF_FORMAT_SVX | SF_FORMAT_PCM_16) ;
-
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "nist"))
-       {       pcm_test_short  ("short_le.nist", SF_ENDIAN_LITTLE      | SF_FORMAT_NIST | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_short  ("short_be.nist", SF_ENDIAN_BIG         | SF_FORMAT_NIST | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit_le.nist", SF_ENDIAN_LITTLE      | SF_FORMAT_NIST | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_24bit  ("24bit_be.nist", SF_ENDIAN_BIG         | SF_FORMAT_NIST | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int_le.nist"  , SF_ENDIAN_LITTLE      | SF_FORMAT_NIST | SF_FORMAT_PCM_32, SF_FALSE) ;
-               pcm_test_int    ("int_be.nist"  , SF_ENDIAN_BIG         | SF_FORMAT_NIST | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "ircam"))
-       {       pcm_test_short  ("short_be.ircam"       , SF_ENDIAN_BIG | SF_FORMAT_IRCAM | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_short  ("short_le.ircam"       , SF_ENDIAN_LITTLE      | SF_FORMAT_IRCAM | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_int    ("int_be.ircam"         , SF_ENDIAN_BIG | SF_FORMAT_IRCAM | SF_FORMAT_PCM_32, SF_FALSE) ;
-               pcm_test_int    ("int_le.ircam"         , SF_ENDIAN_LITTLE      | SF_FORMAT_IRCAM | SF_FORMAT_PCM_32, SF_FALSE) ;
-               pcm_test_float  ("float_be.ircam"       , SF_ENDIAN_BIG | SF_FORMAT_IRCAM | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_float  ("float_le.ircam"       , SF_ENDIAN_LITTLE      | SF_FORMAT_IRCAM | SF_FORMAT_FLOAT , SF_FALSE) ;
-
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "voc"))
-       {       pcm_test_char   ("char.voc" , SF_FORMAT_VOC | SF_FORMAT_PCM_U8, SF_FALSE) ;
-               pcm_test_short  ("short.voc", SF_FORMAT_VOC | SF_FORMAT_PCM_16, SF_FALSE) ;
-
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "mat4"))
-       {       pcm_test_short  ("short_be.mat4"        , SF_ENDIAN_BIG | SF_FORMAT_MAT4 | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_short  ("short_le.mat4"        , SF_ENDIAN_LITTLE      | SF_FORMAT_MAT4 | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_int    ("int_be.mat4"          , SF_ENDIAN_BIG | SF_FORMAT_MAT4 | SF_FORMAT_PCM_32, SF_FALSE) ;
-               pcm_test_int    ("int_le.mat4"          , SF_ENDIAN_LITTLE      | SF_FORMAT_MAT4 | SF_FORMAT_PCM_32, SF_FALSE) ;
-               pcm_test_float  ("float_be.mat4"        , SF_ENDIAN_BIG | SF_FORMAT_MAT4 | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_float  ("float_le.mat4"        , SF_ENDIAN_LITTLE      | SF_FORMAT_MAT4 | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double_be.mat4"       , SF_ENDIAN_BIG | SF_FORMAT_MAT4 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               pcm_test_double ("double_le.mat4"       , SF_ENDIAN_LITTLE      | SF_FORMAT_MAT4 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-
-               empty_file_test ("empty_short.mat4", SF_FORMAT_MAT4 | SF_FORMAT_PCM_16) ;
-               empty_file_test ("empty_float.mat4", SF_FORMAT_MAT4 | SF_FORMAT_FLOAT) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "mat5"))
-       {       pcm_test_char   ("char_be.mat5"         , SF_ENDIAN_BIG | SF_FORMAT_MAT5 | SF_FORMAT_PCM_U8, SF_FALSE) ;
-               pcm_test_char   ("char_le.mat5"         , SF_ENDIAN_LITTLE      | SF_FORMAT_MAT5 | SF_FORMAT_PCM_U8, SF_FALSE) ;
-               pcm_test_short  ("short_be.mat5"        , SF_ENDIAN_BIG | SF_FORMAT_MAT5 | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_short  ("short_le.mat5"        , SF_ENDIAN_LITTLE      | SF_FORMAT_MAT5 | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_int    ("int_be.mat5"          , SF_ENDIAN_BIG | SF_FORMAT_MAT5 | SF_FORMAT_PCM_32, SF_FALSE) ;
-               pcm_test_int    ("int_le.mat5"          , SF_ENDIAN_LITTLE      | SF_FORMAT_MAT5 | SF_FORMAT_PCM_32, SF_FALSE) ;
-               pcm_test_float  ("float_be.mat5"        , SF_ENDIAN_BIG | SF_FORMAT_MAT5 | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_float  ("float_le.mat5"        , SF_ENDIAN_LITTLE      | SF_FORMAT_MAT5 | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double_be.mat5"       , SF_ENDIAN_BIG | SF_FORMAT_MAT5 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               pcm_test_double ("double_le.mat5"       , SF_ENDIAN_LITTLE      | SF_FORMAT_MAT5 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-
-               increment_open_file_count () ;
-
-               empty_file_test ("empty_char.mat5", SF_FORMAT_MAT5 | SF_FORMAT_PCM_U8) ;
-               empty_file_test ("empty_short.mat5", SF_FORMAT_MAT5 | SF_FORMAT_PCM_16) ;
-               empty_file_test ("empty_float.mat5", SF_FORMAT_MAT5 | SF_FORMAT_FLOAT) ;
-
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "pvf"))
-       {       pcm_test_char   ("char.pvf"     , SF_FORMAT_PVF | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_short  ("short.pvf", SF_FORMAT_PVF | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_int    ("int.pvf"      , SF_FORMAT_PVF | SF_FORMAT_PCM_32, SF_FALSE) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "htk"))
-       {       pcm_test_short  ("short.htk", SF_FORMAT_HTK | SF_FORMAT_PCM_16, SF_FALSE) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "mpc2k"))
-       {       pcm_test_short  ("short.mpc", SF_FORMAT_MPC2K | SF_FORMAT_PCM_16, SF_FALSE) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "avr"))
-       {       pcm_test_char   ("char_u8.avr"  , SF_FORMAT_AVR | SF_FORMAT_PCM_U8, SF_FALSE) ;
-               pcm_test_char   ("char_s8.avr"  , SF_FORMAT_AVR | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_short  ("short.avr"    , SF_FORMAT_AVR | SF_FORMAT_PCM_16, SF_FALSE) ;
-               test_count++ ;
-               } ;
-       /* Lite remove end */
-
-       if (do_all || ! strcmp (argv [1], "w64"))
-       {       pcm_test_char   ("char.w64"             , SF_FORMAT_W64 | SF_FORMAT_PCM_U8, SF_FALSE) ;
-               pcm_test_short  ("short.w64"    , SF_FORMAT_W64 | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit.w64"    , SF_FORMAT_W64 | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int.w64"              , SF_FORMAT_W64 | SF_FORMAT_PCM_32, SF_FALSE) ;
-               /* Lite remove start */
-               pcm_test_float  ("float.w64"    , SF_FORMAT_W64 | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double.w64"   , SF_FORMAT_W64 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               /* Lite remove end */
-
-               empty_file_test ("empty_char.w64", SF_FORMAT_W64 | SF_FORMAT_PCM_U8) ;
-               empty_file_test ("empty_short.w64", SF_FORMAT_W64 | SF_FORMAT_PCM_16) ;
-               empty_file_test ("empty_float.w64", SF_FORMAT_W64 | SF_FORMAT_FLOAT) ;
-
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "sds"))
-       {       pcm_test_char   ("char.sds"             , SF_FORMAT_SDS | SF_FORMAT_PCM_S8, SF_FALSE) ;
-               pcm_test_short  ("short.sds"    , SF_FORMAT_SDS | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit.sds"    , SF_FORMAT_SDS | SF_FORMAT_PCM_24, SF_FALSE) ;
-
-               empty_file_test ("empty_char.sds", SF_FORMAT_SDS | SF_FORMAT_PCM_S8) ;
-               empty_file_test ("empty_short.sds", SF_FORMAT_SDS | SF_FORMAT_PCM_16) ;
-
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "sd2"))
-       {       pcm_test_char   ("char.sd2"             , SF_FORMAT_SD2 | SF_FORMAT_PCM_S8, SF_TRUE) ;
-               pcm_test_short  ("short.sd2"    , SF_FORMAT_SD2 | SF_FORMAT_PCM_16, SF_TRUE) ;
-               pcm_test_24bit  ("24bit.sd2"    , SF_FORMAT_SD2 | SF_FORMAT_PCM_24, SF_TRUE) ;
-               pcm_test_int    ("32bit.sd2"    , SF_FORMAT_SD2 | SF_FORMAT_PCM_32, SF_TRUE) ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "flac"))
-       {       if (HAVE_EXTERNAL_LIBS)
-               {       pcm_test_char   ("char.flac"    , SF_FORMAT_FLAC | SF_FORMAT_PCM_S8, SF_TRUE) ;
-                       pcm_test_short  ("short.flac"   , SF_FORMAT_FLAC | SF_FORMAT_PCM_16, SF_TRUE) ;
-                       pcm_test_24bit  ("24bit.flac"   , SF_FORMAT_FLAC | SF_FORMAT_PCM_24, SF_TRUE) ;
-                       }
-               else
-                       puts ("    No FLAC tests because FLAC support was not compiled in.") ;
-               test_count++ ;
-               } ;
-
-       if (do_all || ! strcmp (argv [1], "rf64"))
-       {       pcm_test_char   ("char.rf64"    , SF_FORMAT_RF64 | SF_FORMAT_PCM_U8, SF_FALSE) ;
-               pcm_test_short  ("short.rf64"   , SF_FORMAT_RF64 | SF_FORMAT_PCM_16, SF_FALSE) ;
-               pcm_test_24bit  ("24bit.rf64"   , SF_FORMAT_RF64 | SF_FORMAT_PCM_24, SF_FALSE) ;
-               pcm_test_int    ("int.rf64"             , SF_FORMAT_RF64 | SF_FORMAT_PCM_32, SF_FALSE) ;
-
-               /* Lite remove start */
-               pcm_test_float  ("float.rf64"   , SF_FORMAT_RF64 | SF_FORMAT_FLOAT , SF_FALSE) ;
-               pcm_test_double ("double.rf64"  , SF_FORMAT_RF64 | SF_FORMAT_DOUBLE, SF_FALSE) ;
-               empty_file_test ("empty_char.rf64", SF_FORMAT_RF64 | SF_FORMAT_PCM_U8) ;
-               empty_file_test ("empty_short.rf64", SF_FORMAT_RF64 | SF_FORMAT_PCM_16) ;
-               empty_file_test ("empty_float.rf64", SF_FORMAT_RF64 | SF_FORMAT_FLOAT) ;
-               /* Lite remove end */
-
-               test_count++ ;
-               } ;
-
-       if (test_count == 0)
-       {       printf ("Mono : ************************************\n") ;
-               printf ("Mono : *  No '%s' test defined.\n", argv [1]) ;
-               printf ("Mono : ************************************\n") ;
-               return 1 ;
-               } ;
-
-       /* Only open file descriptors should be stdin, stdout and stderr. */
-       check_open_file_count_or_die (__LINE__) ;
-
-       return 0 ;
-} /* main */
-
-/*============================================================================================
-**     Helper functions and macros.
-*/
-
-static void    create_short_file (const char *filename) ;
-
-#define        CHAR_ERROR(x, y)                (abs ((x) - (y)) > 255)
-#define        INT_ERROR(x, y)                 (((x) - (y)) != 0)
-#define        BIT_20_ERROR(x, y)              (abs ((x) - (y)) > 4095)
-#define        TRIBYTE_ERROR(x, y)             (abs ((x) - (y)) > 255)
-#define        FLOAT_ERROR(x, y)               (fabs ((x) - (y)) > 1e-5)
-
-#define CONVERT_DATA(k, len, new, orig)                                        \
-                       {       for ((k) = 0 ; (k) < (len) ; (k) ++)    \
-                                       (new) [k] = (orig) [k] ;                        \
-                               }
-
-[+ FOR data_type
-+]
-/*======================================================================================
-*/
-
-static void mono_[+ (get "type_name") +]_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void stereo_[+ (get "type_name") +]_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void mono_rdwr_[+ (get "type_name") +]_test (const char *filename, int format, int long_file_ok, int allow_fd) ;
-static void new_rdwr_[+ (get "type_name") +]_test (const char *filename, int format, int allow_fd) ;
-static void multi_seek_test (const char * filename, int format) ;
-static void write_seek_extend_test (const char * filename, int format) ;
-
-static void
-pcm_test_[+ (get "type_name") +] (const char *filename, int format, int long_file_ok)
-{      SF_INFO         sfinfo ;
-       [+ (get "data_type") +]         *orig ;
-       int                     k, allow_fd ;
-
-       /* Sd2 files cannot be opened from an existing file descriptor. */
-       allow_fd = ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2) ? SF_FALSE : SF_TRUE ;
-
-       print_test_name ("pcm_test_[+ (get "type_name") +]", filename) ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       gen_windowed_sine_double (orig_data.d, DATA_LENGTH, [+ (get "max_val") +]) ;
-
-       orig = orig_data.[+ (get "data_field") +] ;
-
-       /* Make this a macro so gdb steps over it in one go. */
-       CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-       /* Some test broken out here. */
-
-       mono_[+ (get "type_name") +]_test (filename, format, long_file_ok, allow_fd) ;
-
-       /* Sub format DWVW does not allow seeking. */
-       if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-                       (format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-       {       unlink (filename) ;
-               printf ("no seek : ok\n") ;
-               return ;
-               } ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC
-               && (format & SF_FORMAT_SUBMASK) != SF_FORMAT_ALAC_16
-               && (format & SF_FORMAT_SUBMASK) != SF_FORMAT_ALAC_20
-               && (format & SF_FORMAT_SUBMASK) != SF_FORMAT_ALAC_24
-               && (format & SF_FORMAT_SUBMASK) != SF_FORMAT_ALAC_32
-               )
-               mono_rdwr_[+ (get "type_name") +]_test (filename, format, long_file_ok, allow_fd) ;
-
-       /* If the format doesn't support stereo we're done. */
-       sfinfo.channels = 2 ;
-       if (sf_format_check (&sfinfo) == 0)
-       {       unlink (filename) ;
-               puts ("no stereo : ok") ;
-               return ;
-               } ;
-
-       stereo_[+ (get "type_name") +]_test (filename, format, long_file_ok, allow_fd) ;
-
-       /* New read/write test. Not sure if this is needed yet. */
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_PAF
-                       && (format & SF_FORMAT_TYPEMASK) != SF_FORMAT_VOC
-                       && (format & SF_FORMAT_TYPEMASK) != SF_FORMAT_FLAC
-                       && (format & SF_FORMAT_SUBMASK) != SF_FORMAT_ALAC_16
-                       && (format & SF_FORMAT_SUBMASK) != SF_FORMAT_ALAC_20
-                       && (format & SF_FORMAT_SUBMASK) != SF_FORMAT_ALAC_24
-                       && (format & SF_FORMAT_SUBMASK) != SF_FORMAT_ALAC_32
-                       )
-               new_rdwr_[+ (get "type_name") +]_test (filename, format, allow_fd) ;
-
-       delete_file (format, filename) ;
-
-       puts ("ok") ;
-       return ;
-} /* pcm_test_[+ (get "type_name") +] */
-
-static void
-mono_[+ (get "type_name") +]_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       [+ (get "data_type") +]         *orig, *test ;
-       sf_count_t      count ;
-       int                     k, items, total ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       orig = orig_data.[+ (get "data_field") +] ;
-       test = test_data.[+ (get "data_field") +] ;
-
-       items = DATA_LENGTH ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-       sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-       test_write_[+ (get "data_type") +]_or_die (file, 0, orig, items, __LINE__) ;
-       sf_write_sync (file) ;
-       test_write_[+ (get "data_type") +]_or_die (file, 0, orig, items, __LINE__) ;
-       sf_write_sync (file) ;
-
-       /* Add non-audio data after the audio. */
-       sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-       sf_close (file) ;
-
-       memset (test, 0, items * sizeof ([+ (get "data_type") +])) ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("\n\nLine %d : Mono : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < 2 * items)
-       {       printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too short). (%" PRId64 " should be %d)\n", __LINE__, sfinfo.frames, items) ;
-               exit (1) ;
-               } ;
-
-       if (! long_file_ok && sfinfo.frames > 2 * items)
-       {       printf ("\n\nLine %d : Mono : Incorrect number of frames in file (too long). (%" PRId64 " should be %d)\n", __LINE__, sfinfo.frames, items) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d : Mono : Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_read_[+ (get "data_type") +]_or_die (file, 0, test, items, __LINE__) ;
-       for (k = 0 ; k < items ; k++)
-               if ([+ (get "error_func") +] (orig [k], test [k]))
-               {       printf ("\n\nLine %d: Mono : Incorrect sample A (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, k, orig [k], test [k]) ;
-                       oct_save_[+ (get "data_type") +] (orig, test, items) ;
-                       exit (1) ;
-                       } ;
-
-       /* Test multiple short reads. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       total = 0 ;
-       for (k = 1 ; k <= 32 ; k++)
-       {       int ik ;
-
-               test_read_[+ (get "data_type") +]_or_die (file, 0, test + total, k, __LINE__) ;
-               total += k ;
-
-               for (ik = 0 ; ik < total ; ik++)
-                       if ([+ (get "error_func") +] (orig [ik], test [ik]))
-                       {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, ik, orig [ik], test [ik]) ;
-                               exit (1) ;
-                               } ;
-               } ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_read_[+ (get "data_type") +]_or_die (file, 0, test, 4, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-               if ([+ (get "error_func") +] (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* For some codecs we can't go past here. */
-       if ((format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_16 ||
-                       (format & SF_FORMAT_SUBMASK) == SF_FORMAT_DWVW_24)
-       {       sf_close (file) ;
-               unlink (filename) ;
-               printf ("no seek : ") ;
-               return ;
-               } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, items + 10, SEEK_SET, items + 10, sfinfo.channels, __LINE__) ;
-
-       test_read_[+ (get "data_type") +]_or_die (file, 0, test + 10, 4, __LINE__) ;
-       for (k = 10 ; k < 14 ; k++)
-               if ([+ (get "error_func") +] (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, k, test [k], orig [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 6, SEEK_CUR, items + 20, sfinfo.channels, __LINE__) ;
-
-       test_read_[+ (get "data_type") +]_or_die (file, 0, test + 20, 4, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-               if ([+ (get "error_func") +] (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample A (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, k, test [k], orig [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_read_[+ (get "data_type") +]_or_die (file, 0, test + 10, 4, __LINE__) ;
-       for (k = 10 ; k < 14 ; k++)
-               if ([+ (get "error_func") +] (orig [k], test [k]))
-               {       printf ("\n\nLine %d : Mono : Incorrect sample D (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, k, test [k], orig [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Check read past end of file followed by sf_seek (sndfile, 0, SEEK_CUR). */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       count = 0 ;
-       while (count < sfinfo.frames)
-               count += sf_read_[+ (get "data_type") +] (file, test, 311) ;
-
-       /* Check that no error has occurred. */
-       if (sf_error (file))
-       {       printf ("\n\nLine %d : Mono : error where there shouldn't have been one.\n", __LINE__) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       /* Check that we haven't read beyond EOF. */
-       if (count > sfinfo.frames)
-       {       printf ("\n\nLines %d : read past end of file (%" PRId64 " should be %" PRId64 ")\n", __LINE__, count, sfinfo.frames) ;
-               exit (1) ;
-               } ;
-
-       test_seek_or_die (file, 0, SEEK_CUR, sfinfo.frames, sfinfo.channels, __LINE__) ;
-
-       sf_close (file) ;
-
-       multi_seek_test (filename, format) ;
-       write_seek_extend_test (filename, format) ;
-
-} /* mono_[+ (get "type_name") +]_test */
-
-static void
-stereo_[+ (get "type_name") +]_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       [+ (get "data_type") +]         *orig, *test ;
-       int                     k, items, frames ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 2 ;
-       sfinfo.format           = format ;
-
-       gen_windowed_sine_double (orig_data.d, DATA_LENGTH, [+ (get "max_val") +]) ;
-
-       orig = orig_data.[+ (get "data_field") +] ;
-       test = test_data.[+ (get "data_field") +] ;
-
-       /* Make this a macro so gdb steps over it in one go. */
-       CONVERT_DATA (k, DATA_LENGTH, orig, orig_data.d) ;
-
-       items = DATA_LENGTH ;
-       frames = items / sfinfo.channels ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-
-       sf_set_string (file, SF_STR_ARTIST, "Your name here") ;
-
-       test_writef_[+ (get "data_type") +]_or_die (file, 0, orig, frames, __LINE__) ;
-
-       sf_set_string (file, SF_STR_COPYRIGHT, "Copyright (c) 2003") ;
-
-       sf_close (file) ;
-
-       memset (test, 0, items * sizeof ([+ (get "data_type") +])) ;
-
-       if ((format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
-               memset (&sfinfo, 0, sizeof (sfinfo)) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &sfinfo, allow_fd, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("\n\nLine %d : Stereo : Returned format incorrect (0x%08X => 0x%08X).\n",
-                               __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < frames)
-       {       printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too short). (%" PRId64 " should be %d)\n",
-                               __LINE__, sfinfo.frames, frames) ;
-               exit (1) ;
-               } ;
-
-       if (! long_file_ok && sfinfo.frames > frames)
-       {       printf ("\n\nLine %d : Stereo : Incorrect number of frames in file (too long). (%" PRId64 " should be %d)\n",
-                               __LINE__, sfinfo.frames, frames) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 2)
-       {       printf ("\n\nLine %d : Stereo : Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       check_log_buffer_or_die (file, __LINE__) ;
-
-       test_readf_[+ (get "data_type") +]_or_die (file, 0, test, frames, __LINE__) ;
-       for (k = 0 ; k < items ; k++)
-               if ([+ (get "error_func") +] (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to start of file. */
-       test_seek_or_die (file, 0, SEEK_SET, 0, sfinfo.channels, __LINE__) ;
-
-       test_readf_[+ (get "data_type") +]_or_die (file, 0, test, 2, __LINE__) ;
-       for (k = 0 ; k < 4 ; k++)
-               if ([+ (get "error_func") +] (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from start of file. */
-       test_seek_or_die (file, 10, SEEK_SET, 10, sfinfo.channels, __LINE__) ;
-
-       /* Check for errors here. */
-       if (sf_error (file))
-       {       printf ("Line %d: Should NOT return an error.\n", __LINE__) ;
-               puts (sf_strerror (file)) ;
-               exit (1) ;
-               } ;
-
-       if (sf_read_[+ (get "data_type") +] (file, test, 1) > 0)
-       {       printf ("Line %d: Should return 0.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (! sf_error (file))
-       {       printf ("Line %d: Should return an error.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-       /*-----------------------*/
-
-       test_readf_[+ (get "data_type") +]_or_die (file, 0, test + 10, 2, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-               if ([+ (get "error_func") +] (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from current position. */
-       test_seek_or_die (file, 8, SEEK_CUR, 20, sfinfo.channels, __LINE__) ;
-
-       test_readf_[+ (get "data_type") +]_or_die (file, 0, test + 20, 2, __LINE__) ;
-       for (k = 40 ; k < 44 ; k++)
-               if ([+ (get "error_func") +] (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       /* Seek to offset from end of file. */
-       test_seek_or_die (file, -1 * (sfinfo.frames - 10), SEEK_END, 10, sfinfo.channels, __LINE__) ;
-
-       test_readf_[+ (get "data_type") +]_or_die (file, 0, test + 20, 2, __LINE__) ;
-       for (k = 20 ; k < 24 ; k++)
-               if ([+ (get "error_func") +] (test [k], orig [k]))
-               {       printf ("\n\nLine %d : Stereo : Incorrect sample (#%d : [+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, k, orig [k], test [k]) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-} /* stereo_[+ (get "type_name") +]_test */
-
-static void
-mono_rdwr_[+ (get "type_name") +]_test (const char *filename, int format, int long_file_ok, int allow_fd)
-{      SNDFILE         *file ;
-       SF_INFO         sfinfo ;
-       [+ (get "data_type") +]         *orig, *test ;
-       int                     k, pass ;
-
-       switch (format & SF_FORMAT_SUBMASK)
-       {       case SF_FORMAT_ALAC_16 :
-               case SF_FORMAT_ALAC_20 :
-               case SF_FORMAT_ALAC_24 :
-               case SF_FORMAT_ALAC_32 :
-                       allow_fd = 0 ;
-                       break ;
-
-               default :
-                       break ;
-               } ;
-
-       orig = orig_data.[+ (get "data_field") +] ;
-       test = test_data.[+ (get "data_field") +] ;
-
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = DATA_LENGTH ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       if ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_RAW
-               || (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_AU
-               || (format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2)
-               unlink (filename) ;
-       else
-       {       /* Create a short file. */
-               create_short_file (filename) ;
-
-               /* Opening a already existing short file (ie invalid header) RDWR is disallowed.
-               ** If this returns a valif pointer sf_open() screwed up.
-               */
-               if ((file = sf_open (filename, SFM_RDWR, &sfinfo)))
-               {       printf ("\n\nLine %d: sf_open should (SFM_RDWR) have failed but didn't.\n", __LINE__) ;
-                       exit (1) ;
-                       } ;
-
-               /* Truncate the file to zero bytes. */
-               if (truncate (filename, 0) < 0)
-               {       printf ("\n\nLine %d: truncate (%s) failed", __LINE__, filename) ;
-                       perror (NULL) ;
-                       exit (1) ;
-                       } ;
-               } ;
-
-       /* Opening a zero length file RDWR is allowed, but the SF_INFO struct must contain
-       ** all the usual data required when opening the file in WRITE mode.
-       */
-       sfinfo.samplerate       = SAMPLE_RATE ;
-       sfinfo.frames           = DATA_LENGTH ;
-       sfinfo.channels         = 1 ;
-       sfinfo.format           = format ;
-
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-       /* Do 3 writes followed by reads. After each, check the data and the current
-       ** read and write offsets.
-       */
-       for (pass = 1 ; pass <= 3 ; pass ++)
-       {       orig [20] = pass * 2 ;
-
-               /* Write some data. */
-               test_write_[+ (get "data_type") +]_or_die (file, pass, orig, DATA_LENGTH, __LINE__) ;
-
-               test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, pass * DATA_LENGTH) ;
-
-               /* Read what we just wrote. */
-               test_read_[+ (get "data_type") +]_or_die (file, 0, test, DATA_LENGTH, __LINE__) ;
-
-               /* Check the data. */
-               for (k = 0 ; k < DATA_LENGTH ; k++)
-                       if ([+ (get "error_func") +] (orig [k], test [k]))
-                       {       printf ("\n\nLine %d (pass %d) A : Error at sample %d ([+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, pass, k, orig [k], test [k]) ;
-                               oct_save_[+ (get "data_type") +] (orig, test, DATA_LENGTH) ;
-                               exit (1) ;
-                               } ;
-
-               test_read_write_position_or_die (file, __LINE__, pass, pass * DATA_LENGTH, pass * DATA_LENGTH) ;
-               } ; /* for (pass ...) */
-
-       sf_close (file) ;
-
-       /* Open the file again to check the data. */
-       file = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-
-       if (sfinfo.format != format)
-       {       printf ("\n\nLine %d : Returned format incorrect (0x%08X => 0x%08X).\n", __LINE__, format, sfinfo.format) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.frames < 3 * DATA_LENGTH)
-       {       printf ("\n\nLine %d : Not enough frames in file. (%" PRId64 " < %d)\n", __LINE__, sfinfo.frames, 3 * DATA_LENGTH) ;
-               exit (1) ;
-               }
-
-       if (! long_file_ok && sfinfo.frames != 3 * DATA_LENGTH)
-       {       printf ("\n\nLine %d : Incorrect number of frames in file. (%" PRId64 " should be %d)\n", __LINE__, sfinfo.frames, 3 * DATA_LENGTH) ;
-               exit (1) ;
-               } ;
-
-       if (sfinfo.channels != 1)
-       {       printf ("\n\nLine %d : Incorrect number of channels in file.\n", __LINE__) ;
-               exit (1) ;
-               } ;
-
-       if (! long_file_ok)
-               test_read_write_position_or_die (file, __LINE__, 0, 0, 3 * DATA_LENGTH) ;
-       else
-               test_seek_or_die (file, 3 * DATA_LENGTH, SFM_WRITE | SEEK_SET, 3 * DATA_LENGTH, sfinfo.channels, __LINE__) ;
-
-       for (pass = 1 ; pass <= 3 ; pass ++)
-       {       orig [20] = pass * 2 ;
-
-               test_read_write_position_or_die (file, __LINE__, pass, (pass - 1) * DATA_LENGTH, 3 * DATA_LENGTH) ;
-
-               /* Read what we just wrote. */
-               test_read_[+ (get "data_type") +]_or_die (file, pass, test, DATA_LENGTH, __LINE__) ;
-
-               /* Check the data. */
-               for (k = 0 ; k < DATA_LENGTH ; k++)
-                       if ([+ (get "error_func") +] (orig [k], test [k]))
-                       {       printf ("\n\nLine %d (pass %d) B : Error at sample %d ([+ (get "format_char") +] => [+ (get "format_char") +]).\n", __LINE__, pass, k, orig [k], test [k]) ;
-                               oct_save_[+ (get "data_type") +] (orig, test, DATA_LENGTH) ;
-                               exit (1) ;
-                               } ;
-
-               } ; /* for (pass ...) */
-
-       sf_close (file) ;
-} /* mono_rdwr_[+ (get "data_type") +]_test */
-
-static void
-new_rdwr_[+ (get "type_name") +]_test (const char *filename, int format, int allow_fd)
-{      SNDFILE *wfile, *rwfile ;
-       SF_INFO sfinfo ;
-       [+ (get "data_type") +]         *orig, *test ;
-       int             items, frames ;
-
-       orig = orig_data.[+ (get "data_field") +] ;
-       test = test_data.[+ (get "data_field") +] ;
-
-       sfinfo.samplerate       = 44100 ;
-       sfinfo.frames           = SILLY_WRITE_COUNT ; /* Wrong length. Library should correct this on sf_close. */
-       sfinfo.channels         = 2 ;
-       sfinfo.format           = format ;
-
-       items = DATA_LENGTH ;
-       frames = items / sfinfo.channels ;
-
-       wfile = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, allow_fd, __LINE__) ;
-       sf_command (wfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ;
-       test_writef_[+ (get "data_type") +]_or_die (wfile, 1, orig, frames, __LINE__) ;
-       sf_write_sync (wfile) ;
-       test_writef_[+ (get "data_type") +]_or_die (wfile, 2, orig, frames, __LINE__) ;
-       sf_write_sync (wfile) ;
-
-       rwfile = test_open_file_or_die (filename, SFM_RDWR, &sfinfo, allow_fd, __LINE__) ;
-       if (sfinfo.frames != 2 * frames)
-       {       printf ("\n\nLine %d : incorrect number of frames in file (%" PRId64 " should be %d)\n\n", __LINE__, sfinfo.frames, 2 * frames) ;
-               exit (1) ;
-               } ;
-
-       test_writef_[+ (get "data_type") +]_or_die (wfile, 3, orig, frames, __LINE__) ;
-
-       test_readf_[+ (get "data_type") +]_or_die (rwfile, 1, test, frames, __LINE__) ;
-       test_readf_[+ (get "data_type") +]_or_die (rwfile, 2, test, frames, __LINE__) ;
-
-       sf_close (wfile) ;
-       sf_close (rwfile) ;
-} /* new_rdwr_[+ (get "type_name") +]_test */
-
-[+ ENDFOR data_type +]
-
-/*----------------------------------------------------------------------------------------
-*/
-
-static void
-empty_file_test (const char *filename, int format)
-{      SNDFILE         *file ;
-       SF_INFO info ;
-       int allow_fd ;
-
-       /* Sd2 files cannot be opened from an existing file descriptor. */
-       allow_fd = ((format & SF_FORMAT_TYPEMASK) == SF_FORMAT_SD2) ? SF_FALSE : SF_TRUE ;
-
-       print_test_name ("empty_file_test", filename) ;
-
-       unlink (filename) ;
-
-       info.samplerate = 48000 ;
-       info.channels = 2 ;
-       info.format = format ;
-
-       if (sf_format_check (&info) == SF_FALSE)
-       {       info.channels = 1 ;
-               if (sf_format_check (&info) == SF_FALSE)
-               {       puts ("invalid file format") ;
-                       return ;
-                       } ;
-               } ;
-
-       /* Create an empty file. */
-       file = test_open_file_or_die (filename, SFM_WRITE, &info, allow_fd, __LINE__) ;
-       sf_close (file) ;
-
-       /* Open for read and check the length. */
-       file = test_open_file_or_die (filename, SFM_READ, &info, allow_fd, __LINE__) ;
-
-       if (info.frames != 0)
-       {       printf ("\n\nError : frame count (%" PRId64 ") should be zero.\n", info.frames) ;
-                       exit (1) ;
-                       } ;
-
-       sf_close (file) ;
-
-       /* Open for read/write and check the length. */
-       file = test_open_file_or_die (filename, SFM_RDWR, &info, allow_fd, __LINE__) ;
-
-       if (info.frames != 0)
-       {       printf ("\n\nError : frame count (%" PRId64 ") should be zero.\n", info.frames) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       /* Open for read and check the length. */
-       file = test_open_file_or_die (filename, SFM_READ, &info, allow_fd, __LINE__) ;
-
-       if (info.frames != 0)
-       {       printf ("\n\nError : frame count (%" PRId64 ") should be zero.\n", info.frames) ;
-               exit (1) ;
-               } ;
-
-       sf_close (file) ;
-
-       check_open_file_count_or_die (__LINE__) ;
-
-       unlink (filename) ;
-       puts ("ok") ;
-
-       return ;
-} /* empty_file_test */
-
-
-/*----------------------------------------------------------------------------------------
-*/
-
-static void
-create_short_file (const char *filename)
-{      FILE *file ;
-
-       if (! (file = fopen (filename, "w")))
-       {       printf ("create_short_file : fopen (%s, \"w\") failed.", filename) ;
-               fflush (stdout) ;
-               perror (NULL) ;
-               exit (1) ;
-               } ;
-
-       fprintf (file, "This is the file data.\n") ;
-
-       fclose (file) ;
-} /* create_short_file */
-
-
-static void
-multi_seek_test (const char * filename, int format)
-{      SNDFILE * file ;
-       SF_INFO info ;
-       sf_count_t pos ;
-       int k ;
-
-       /* This test doesn't work on the following. */
-       switch (format & SF_FORMAT_TYPEMASK)
-       {       case SF_FORMAT_RAW :
-                       return ;
-
-               default :
-                       break ;
-               } ;
-
-       memset (&info, 0, sizeof (info)) ;
-
-       generate_file (filename, format, 88200) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &info, SF_FALSE, __LINE__) ;
-
-       for (k = 0 ; k < 10 ; k++)
-       {       pos = info.frames / (k + 2) ;
-               test_seek_or_die (file, pos, SEEK_SET, pos, info.channels, __LINE__) ;
-               } ;
-
-       sf_close (file) ;
-} /* multi_seek_test */
-
-static void
-write_seek_extend_test (const char * filename, int format)
-{      SNDFILE * file ;
-       SF_INFO info ;
-       short   *orig, *test ;
-       unsigned items, k ;
-
-       /* This test doesn't work on the following container formats. */
-       switch (format & SF_FORMAT_TYPEMASK)
-       {       case SF_FORMAT_FLAC :
-               case SF_FORMAT_HTK :
-               case SF_FORMAT_PAF :
-               case SF_FORMAT_SDS :
-               case SF_FORMAT_SVX :
-                       return ;
-
-               default :
-                       break ;
-               } ;
-
-       /* This test doesn't work on the following codec formats. */
-       switch (format & SF_FORMAT_SUBMASK)
-       {       case SF_FORMAT_ALAC_16 :
-               case SF_FORMAT_ALAC_20 :
-               case SF_FORMAT_ALAC_24 :
-               case SF_FORMAT_ALAC_32 :
-                       return ;
-
-               default :
-                       break ;
-               } ;
-
-       memset (&info, 0, sizeof (info)) ;
-
-       info.samplerate = 48000 ;
-       info.channels = 1 ;
-       info.format = format ;
-
-       items = 512 ;
-       exit_if_true (items > ARRAY_LEN (orig_data.s), "Line %d : Bad assumption.\n", __LINE__) ;
-
-       orig = orig_data.s ;
-       test = test_data.s ;
-
-       for (k = 0 ; k < ARRAY_LEN (orig_data.s) ; k++)
-               orig [k] = 0x3fff ;
-
-       file = test_open_file_or_die (filename, SFM_WRITE, &info, SF_FALSE, __LINE__) ;
-       test_write_short_or_die (file, 0, orig, items, __LINE__) ;
-
-       /* Extend the file using a seek. */
-       test_seek_or_die (file, 2 * items, SEEK_SET, 2 * items, info.channels, __LINE__) ;
-
-       test_writef_short_or_die (file, 0, orig, items, __LINE__) ;
-       sf_close (file) ;
-
-       file = test_open_file_or_die (filename, SFM_READ, &info, SF_FALSE, __LINE__) ;
-       test_read_short_or_die (file, 0, test, 3 * items, __LINE__) ;
-       sf_close (file) ;
-
-       /* Can't do these formats due to scaling. */
-       switch (format & SF_FORMAT_SUBMASK)
-       {       case SF_FORMAT_PCM_S8 :
-               case SF_FORMAT_PCM_U8 :
-                       return ;
-               default :
-                       break ;
-               } ;
-
-       for (k = 0 ; k < items ; k++)
-       {       exit_if_true (test [k] != 0x3fff, "Line %d : test [%d] == %d, should be 0x3fff.\n", __LINE__, k, test [k]) ;
-               exit_if_true (test [items + k] != 0, "Line %d : test [%d] == %d, should be 0.\n", __LINE__, items + k, test [items + k]) ;
-               exit_if_true (test [2 * items + k] != 0x3fff, "Line %d : test [%d] == %d, should be 0x3fff.\n", __LINE__, 2 * items + k, test [2 * items + k]) ;
-               } ;
-
-       return ;
-} /* write_seek_extend_test */
-
-
diff --git a/libs/win32/libsndfile/cleancount b/libs/win32/libsndfile/cleancount
deleted file mode 100644 (file)
index 56a6051..0000000
+++ /dev/null
@@ -1 +0,0 @@
-1
\ No newline at end of file
diff --git a/libs/win32/libsndfile/config.h b/libs/win32/libsndfile/config.h
deleted file mode 100644 (file)
index d32301d..0000000
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
-** Copyright (C) 2002-2004 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-** This is the Win32 version of the file config.h which is autogenerated
-** on Unix systems.
-*/
-
-#pragma warning (disable : 4244)
-#pragma warning (disable : 4761)
-
-#include <malloc.h>
-
-/* Set to 1 if the compile is GNU GCC. */
-/* #undef COMPILER_IS_GCC */
-
-/* Target processor clips on negative float to int conversion. */
-#define CPU_CLIPS_NEGATIVE 1
-
-/* Target processor clips on positive float to int conversion. */
-#define CPU_CLIPS_POSITIVE 0
-
-/* Target processor is big endian. */
-#define CPU_IS_BIG_ENDIAN 0
-
-/* Target processor is little endian. */
-#define CPU_IS_LITTLE_ENDIAN 1
-
-/* Set to 1 to enable experimental code. */
-#define ENABLE_EXPERIMENTAL_CODE 0
-
-/* Major version of GCC or 3 otherwise. */
-/* #undef GCC_MAJOR_VERSION */
-
-/* Define to 1 if you have the <alsa/asoundlib.h> header file. */
-/* #undef HAVE_ALSA_ASOUNDLIB_H */
-
-/* Define to 1 if you have the <byteswap.h> header file. */
-/* #undef HAVE_BYTESWAP_H */
-
-/* Define to 1 if you have the `calloc' function. */
-#define HAVE_CALLOC 1
-
-/* Define to 1 if you have the `ceil' function. */
-#define HAVE_CEIL 1
-
-/* Set to 1 if S_IRGRP is defined. */
-#define HAVE_DECL_S_IRGRP 0
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-/* #undef HAVE_DLFCN_H */
-
-/* Define to 1 if you have the <endian.h> header file. */
-/* #undef HAVE_ENDIAN_H */
-
-/* Define to 1 if you have the `fdatasync' function. */
-
-/* #undef HAVE_FDATASYNC */
-
-/* Define to 1 if you have libflac 1.1.1 */
-/* #undef HAVE_FLAC_1_1_1 1 */
-
-/* Define to 1 if you have the <FLAC/all.h> header file. */
-/* #undef HAVE_FLAC_ALL_H 1 */
-
-/* Set to 1 if the compile supports the struct hack. */
-#define HAVE_FLEXIBLE_ARRAY 1
-
-/* Define to 1 if you have the `floor' function. */
-#define HAVE_FLOOR 1
-
-/* Define to 1 if you have the `fmod' function. */
-#define HAVE_FMOD 1
-
-/* Define to 1 if you have the `free' function. */
-#define HAVE_FREE 1
-
-/* Define to 1 if you have the `fstat' function. */
-#define HAVE_FSTAT 1
-
-/* Define to 1 if you have the `fsync' function. */
-/* #undef HAVE_FSYNC */
-
-/* Define to 1 if you have the `ftruncate' function. */
-/* #undef HAVE_FTRUNCATE */
-
-/* Define to 1 if you have the `getpagesize' function. */
-#define HAVE_GETPAGESIZE 1
-
-/* Define to 1 if you have the `gmtime' function. */
-#define HAVE_GMTIME 1
-
-/* Define to 1 if you have the `gmtime_r' function. */
-/* #undef HAVE_GMTIME_R */
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-/* #define HAVE_INTTYPES_H */
-
-/* Define to 1 if you have the `m' library (-lm). */
-#define HAVE_LIBM 1
-
-/* Define if you have C99's lrint function. */
-/* #undef HAVE_LRINT */
-
-/* Define if you have C99's lrintf function. */
-/* #undef HAVE_LRINTF */
-
-/* Define to 1 if you have the `lseek' function. */
-#define HAVE_LSEEK 1
-
-/* Define to 1 if you have the `malloc' function. */
-#define HAVE_MALLOC 1
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the `mmap' function. */
-/* #undef HAVE_MMAP */
-
-/* Define to 1 if you have the `open' function. */
-#define HAVE_OPEN 1
-
-/* Define to 1 if you have the `pread' function. */
-/* #undef HAVE_PREAD */
-
-/* Define to 1 if you have the `pwrite' function. */
-/* #undef HAVE_PWRITE */
-
-/* Define to 1 if you have the `read' function. */
-#define HAVE_READ 1
-
-/* Define to 1 if you have the `realloc' function. */
-#define HAVE_REALLOC 1
-
-/* Define to 1 if you have the `snprintf' function. */
-#define HAVE_SNPRINTF 1
-
-/* Set to 1 if you have libsqlite3. */
-/* #undef HAVE_SQLITE3 */
-
-/* Define to 1 if the system has the type `ssize_t'. */
-/* #undef HAVE_SSIZE_T */
-
-/* Define to 1 if you have the <stdint.h> header file. */
-/* #undef HAVE_STDINT_H */
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
-/* #undef HAVE_SYS_WAIT_H */
-
-/* Define to 1 if you have the <unistd.h> header file. */
-/* #undef HAVE_UNISTD_H */
-
-/* Define to 1 if you have the `vsnprintf' function. */
-#define HAVE_VSNPRINTF 1
-
-/* Define to 1 if you have the `write' function. */
-#define HAVE_WRITE 1
-
-/* Set to 1 if compiling for MacOSX */
-#define OS_IS_MACOSX 0
-
-/* Set to 1 if compiling for Win32 */
-#define OS_IS_WIN32 1
-
-/* Name of package */
-#define PACKAGE "libsndfile"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT "erikd@mega-nerd.com"
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME "libsndfile"
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "libsndfile 1.0.26pre5"
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME "libsndfile"
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION "1.0.26pre5"
-
-/* Set to maximum allowed value of sf_count_t type. */
-//#define SF_COUNT_MAX 0x7FFFFFFFFFFFFFFFi64
-
-/* The size of a `double', as computed by sizeof. */
-#define SIZEOF_DOUBLE 8
-
-/* The size of a `float', as computed by sizeof. */
-#define SIZEOF_FLOAT 4
-
-/* The size of a `int', as computed by sizeof. */
-#define SIZEOF_INT 4
-
-/* The size of a `int64_t', as computed by sizeof. */
-#define SIZEOF_INT64_T 0
-
-/* The size of a `loff_t', as computed by sizeof. */
-#define SIZEOF_LOFF_T 0
-
-/* The size of a `long', as computed by sizeof. */
-#define SIZEOF_LONG 4
-
-/* The size of a `long long', as computed by sizeof. */
-#define SIZEOF_LONG_LONG 0
-
-/* The size of a `off64_t', as computed by sizeof. */
-/* #undef SIZEOF_OFF64_T */
-
-/* The size of a `off_t', as computed by sizeof. */
-#define SIZEOF_OFF_T 4
-
-/* Set to sizeof (long) if unknown. */
-#define SIZEOF_SF_COUNT_T 8
-
-/* The size of a `short', as computed by sizeof. */
-#define SIZEOF_SHORT 2
-
-/* The size of a `size_t', as computed by sizeof. */
-#define SIZEOF_SIZE_T 4
-
-/* The size of a `ssize_t', as computed by sizeof. */
-#define SIZEOF_SSIZE_T 4
-
-/* The size of a `void*', as computed by sizeof. */
-#define SIZEOF_VOIDP 4
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Set to long if unknown. */
-#define TYPEOF_SF_COUNT_T loff_t
-
-/* Set to 1 to use the native windows API */
-#define USE_WINDOWS_API 1
-
-/* Version number of package */
-#define VERSION "1.0.18"
-
-#define HAVE_STDINT_H 1
-
-/* Number of bits in a file offset, on hosts where this is settable. */
-/* #undef _FILE_OFFSET_BITS */
-
-/* Define to make fseeko etc. visible, on some hosts. */
-/* #undef _LARGEFILE_SOURCE */
-
-/* Define for large files, on AIX-style hosts. */
-/* #undef _LARGE_FILES */
-
-#include <stddef.h>
-
-typedef __int32 int32_t;
-typedef intptr_t ssize_t;
-typedef unsigned __int16 uint16_t;
-typedef unsigned __int32 uint32_t;
-#define PRId64 "I64d"
-
-#define __func__ __FUNCTION__
-#if _MSC_VER < 1900
-#define snprintf _snprintf
-#endif
-
-#include <float_cast.h>
\ No newline at end of file
diff --git a/libs/win32/libsndfile/libsndfile.2010.vcxproj.filters b/libs/win32/libsndfile/libsndfile.2010.vcxproj.filters
deleted file mode 100644 (file)
index a4335a1..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup>\r
-    <Filter Include="Source Files">\r
-      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>\r
-      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>\r
-    </Filter>\r
-    <Filter Include="Source Files\GSM Sources">\r
-      <UniqueIdentifier>{b116d731-aba1-4ebd-928f-51113eb4c45b}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Source Files\G72X Sources">\r
-      <UniqueIdentifier>{e24785ab-1f78-4bb6-98f3-6c4586e85648}</UniqueIdentifier>\r
-    </Filter>\r
-    <Filter Include="Header Files">\r
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>\r
-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>\r
-    </Filter>\r
-    <Filter Include="Resource Files">\r
-      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>\r
-      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>\r
-    </Filter>\r
-    <Filter Include="Source Files\ALLAC Sources">\r
-      <UniqueIdentifier>{f00f84d5-78ae-4996-bee3-00106a731232}</UniqueIdentifier>\r
-    </Filter>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\libsndfile\src\aiff.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\alaw.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\au.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\audio_detect.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\avr.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\broadcast.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\caf.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\chunk.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\command.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\common.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\dither.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\double64.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\dwd.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\dwvw.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\file_io.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\flac.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\float32.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\g72x.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\gsm610.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\htk.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\ima_adpcm.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\ima_oki_adpcm.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\ircam.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\mat4.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\mat5.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\mpc2k.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\ms_adpcm.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\nist.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\ogg.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\paf.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\pcm.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\pvf.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\raw.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\rf64.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\rx2.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\sd2.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\sds.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\sndfile.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\strings.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\svx.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\txw.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\ulaw.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\voc.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\vox_adpcm.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\w64.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\wav.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\wav_w64.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\wve.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\xi.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\add.c">\r
-      <Filter>Source Files\GSM Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\code.c">\r
-      <Filter>Source Files\GSM Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\decode.c">\r
-      <Filter>Source Files\GSM Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\gsm_create.c">\r
-      <Filter>Source Files\GSM Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\gsm_decode.c">\r
-      <Filter>Source Files\GSM Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\gsm_destroy.c">\r
-      <Filter>Source Files\GSM Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\gsm_encode.c">\r
-      <Filter>Source Files\GSM Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\gsm_option.c">\r
-      <Filter>Source Files\GSM Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\long_term.c">\r
-      <Filter>Source Files\GSM Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\lpc.c">\r
-      <Filter>Source Files\GSM Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\preprocess.c">\r
-      <Filter>Source Files\GSM Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\rpe.c">\r
-      <Filter>Source Files\GSM Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\short_term.c">\r
-      <Filter>Source Files\GSM Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\table.c">\r
-      <Filter>Source Files\GSM Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\G72x\g721.c">\r
-      <Filter>Source Files\G72X Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\G72x\g723_16.c">\r
-      <Filter>Source Files\G72X Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\G72x\g723_24.c">\r
-      <Filter>Source Files\G72X Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\G72x\g723_40.c">\r
-      <Filter>Source Files\G72X Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\G72x\g72x.c">\r
-      <Filter>Source Files\G72X Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\id3.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\chanmap.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\cart.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\alac.c">\r
-      <Filter>Source Files</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\ALAC\ag_dec.c">\r
-      <Filter>Source Files\ALLAC Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\ALAC\ag_enc.c">\r
-      <Filter>Source Files\ALLAC Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\ALAC\alac_encoder.c">\r
-      <Filter>Source Files\ALLAC Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\ALAC\ALACBitUtilities.c">\r
-      <Filter>Source Files\ALLAC Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\ALAC\dp_dec.c">\r
-      <Filter>Source Files\ALLAC Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\ALAC\dp_enc.c">\r
-      <Filter>Source Files\ALLAC Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\ALAC\matrix_dec.c">\r
-      <Filter>Source Files\ALLAC Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\ALAC\matrix_enc.c">\r
-      <Filter>Source Files\ALLAC Sources</Filter>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\ALAC\alac_decoder.c">\r
-      <Filter>Source Files\ALLAC Sources</Filter>\r
-    </ClCompile>\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\libsndfile\src\ima_oki_adpcm.h">\r
-      <Filter>Source Files</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\libsndfile\src\chanmap.h">\r
-      <Filter>Header Files</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\libsndfile\src\ALAC\ALACAudioTypes.h">\r
-      <Filter>Source Files\ALLAC Sources</Filter>\r
-    </ClInclude>\r
-    <ClInclude Include="..\..\libsndfile\src\ALAC\dplib.h">\r
-      <Filter>Source Files\ALLAC Sources</Filter>\r
-    </ClInclude>\r
-  </ItemGroup>\r
-</Project>
\ No newline at end of file
diff --git a/libs/win32/libsndfile/libsndfile.2015.vcxproj b/libs/win32/libsndfile/libsndfile.2015.vcxproj
deleted file mode 100644 (file)
index e6460ef..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-  <ItemGroup Label="ProjectConfigurations">\r
-    <ProjectConfiguration Include="Debug|Win32">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Debug|x64">\r
-      <Configuration>Debug</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|Win32">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>Win32</Platform>\r
-    </ProjectConfiguration>\r
-    <ProjectConfiguration Include="Release|x64">\r
-      <Configuration>Release</Configuration>\r
-      <Platform>x64</Platform>\r
-    </ProjectConfiguration>\r
-  </ItemGroup>\r
-  <PropertyGroup Label="Globals">\r
-    <ProjectName>libsndfile</ProjectName>\r
-    <ProjectGuid>{3D0370CA-BED2-4657-A475-32375CBCB6E4}</ProjectGuid>\r
-    <RootNamespace>libsndfile</RootNamespace>\r
-    <Keyword>Win32Proj</Keyword>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>NotSet</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>NotSet</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>NotSet</CharacterSet>\r
-    <WholeProgramOptimization>true</WholeProgramOptimization>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">\r
-    <ConfigurationType>StaticLibrary</ConfigurationType>\r
-    <CharacterSet>NotSet</CharacterSet>\r
-    <PlatformToolset>v140</PlatformToolset>\r
-  </PropertyGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
-  <ImportGroup Label="ExtensionSettings">\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="..\..\..\w32\extlib.props" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="..\..\..\w32\extlib.props" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="..\..\..\w32\extlib.props" />\r
-  </ImportGroup>\r
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">\r
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
-    <Import Project="..\..\..\w32\extlib.props" />\r
-  </ImportGroup>\r
-  <PropertyGroup Label="UserMacros" />\r
-  <PropertyGroup>\r
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
-  </PropertyGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
-    <ClCompile>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>..\..\libsndfile\src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;inline=__inline;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <WarningLevel>Level1</WarningLevel>\r
-      <CompileAs>CompileAsC</CompileAs>\r
-    </ClCompile>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <Optimization>Disabled</Optimization>\r
-      <AdditionalIncludeDirectories>..\..\libsndfile\src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;inline=__inline;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <MinimalRebuild>true</MinimalRebuild>\r
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
-      <WarningLevel>Level1</WarningLevel>\r
-      <CompileAs>CompileAsC</CompileAs>\r
-    </ClCompile>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
-    <ClCompile>\r
-      <AdditionalIncludeDirectories>..\..\libsndfile\src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;inline=__inline;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <WarningLevel>Level1</WarningLevel>\r
-      <CompileAs>CompileAsC</CompileAs>\r
-    </ClCompile>\r
-  </ItemDefinitionGroup>\r
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">\r
-    <Midl>\r
-      <TargetEnvironment>X64</TargetEnvironment>\r
-    </Midl>\r
-    <ClCompile>\r
-      <AdditionalIncludeDirectories>..\..\libsndfile\src;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;inline=__inline;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
-      <WarningLevel>Level1</WarningLevel>\r
-      <CompileAs>CompileAsC</CompileAs>\r
-    </ClCompile>\r
-  </ItemDefinitionGroup>\r
-  <ItemGroup>\r
-    <ClCompile Include="..\..\libsndfile\src\aiff.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\alac.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\ALAC\ag_dec.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\ALAC\ag_enc.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\ALAC\ALACBitUtilities.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\ALAC\alac_decoder.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\ALAC\alac_encoder.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\ALAC\dp_dec.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\ALAC\dp_enc.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\ALAC\matrix_dec.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\ALAC\matrix_enc.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\alaw.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\au.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\audio_detect.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\avr.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\broadcast.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\caf.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\cart.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\chanmap.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\chunk.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\command.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\common.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\dither.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\double64.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\dwd.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\dwvw.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\file_io.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\flac.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\float32.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\g72x.c">\r
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>\r
-      <XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>\r
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>\r
-      <XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>\r
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.obj</ObjectFileName>\r
-      <XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>\r
-      <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.obj</ObjectFileName>\r
-      <XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>\r
-    </ClCompile>\r
-    <ClCompile Include="..\..\libsndfile\src\gsm610.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\htk.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\id3.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\ima_adpcm.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\ima_oki_adpcm.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\ircam.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\mat4.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\mat5.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\mpc2k.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\ms_adpcm.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\nist.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\ogg.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\paf.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\pcm.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\pvf.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\raw.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\rf64.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\rx2.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\sd2.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\sds.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\sndfile.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\strings.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\svx.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\txw.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\ulaw.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\voc.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\vox_adpcm.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\w64.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\wav.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\wav_w64.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\wve.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\xi.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\add.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\code.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\decode.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\gsm_create.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\gsm_decode.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\gsm_destroy.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\gsm_encode.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\gsm_option.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\long_term.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\lpc.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\preprocess.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\rpe.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\short_term.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\GSM610\table.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\G72x\g721.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\G72x\g723_16.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\G72x\g723_24.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\G72x\g723_40.c" />\r
-    <ClCompile Include="..\..\libsndfile\src\G72x\g72x.c" />\r
-  </ItemGroup>\r
-  <ItemGroup>\r
-    <ClInclude Include="..\..\libsndfile\src\ALAC\ALACAudioTypes.h" />\r
-    <ClInclude Include="..\..\libsndfile\src\ALAC\dplib.h" />\r
-    <ClInclude Include="..\..\libsndfile\src\chanmap.h" />\r
-    <ClInclude Include="..\..\libsndfile\src\ima_oki_adpcm.h" />\r
-  </ItemGroup>\r
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
-  <ImportGroup Label="ExtensionTargets">\r
-  </ImportGroup>\r
-</Project>
\ No newline at end of file
diff --git a/libs/win32/libsndfile/sndfile.h b/libs/win32/libsndfile/sndfile.h
deleted file mode 100644 (file)
index fa11e70..0000000
+++ /dev/null
@@ -1,817 +0,0 @@
-/*
-** Copyright (C) 1999-2013 Erik de Castro Lopo <erikd@mega-nerd.com>
-**
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as published by
-** the Free Software Foundation; either version 2.1 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-** GNU Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program; if not, write to the Free Software
-** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
-** sndfile.h -- system-wide definitions
-**
-** API documentation is in the doc/ directory of the source code tarball
-** and at http://www.mega-nerd.com/libsndfile/api.html.
-*/
-
-#ifndef SNDFILE_H
-#define SNDFILE_H
-
-/* This is the version 1.0.X header file. */
-#define        SNDFILE_1
-
-#include <stdio.h>
-#include <sys/types.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* The following file types can be read and written.
-** A file type would consist of a major type (ie SF_FORMAT_WAV) bitwise
-** ORed with a minor type (ie SF_FORMAT_PCM). SF_FORMAT_TYPEMASK and
-** SF_FORMAT_SUBMASK can be used to separate the major and minor file
-** types.
-*/
-
-enum
-{      /* Major formats. */
-       SF_FORMAT_WAV                   = 0x010000,             /* Microsoft WAV format (little endian default). */
-       SF_FORMAT_AIFF                  = 0x020000,             /* Apple/SGI AIFF format (big endian). */
-       SF_FORMAT_AU                    = 0x030000,             /* Sun/NeXT AU format (big endian). */
-       SF_FORMAT_RAW                   = 0x040000,             /* RAW PCM data. */
-       SF_FORMAT_PAF                   = 0x050000,             /* Ensoniq PARIS file format. */
-       SF_FORMAT_SVX                   = 0x060000,             /* Amiga IFF / SVX8 / SV16 format. */
-       SF_FORMAT_NIST                  = 0x070000,             /* Sphere NIST format. */
-       SF_FORMAT_VOC                   = 0x080000,             /* VOC files. */
-       SF_FORMAT_IRCAM                 = 0x0A0000,             /* Berkeley/IRCAM/CARL */
-       SF_FORMAT_W64                   = 0x0B0000,             /* Sonic Foundry's 64 bit RIFF/WAV */
-       SF_FORMAT_MAT4                  = 0x0C0000,             /* Matlab (tm) V4.2 / GNU Octave 2.0 */
-       SF_FORMAT_MAT5                  = 0x0D0000,             /* Matlab (tm) V5.0 / GNU Octave 2.1 */
-       SF_FORMAT_PVF                   = 0x0E0000,             /* Portable Voice Format */
-       SF_FORMAT_XI                    = 0x0F0000,             /* Fasttracker 2 Extended Instrument */
-       SF_FORMAT_HTK                   = 0x100000,             /* HMM Tool Kit format */
-       SF_FORMAT_SDS                   = 0x110000,             /* Midi Sample Dump Standard */
-       SF_FORMAT_AVR                   = 0x120000,             /* Audio Visual Research */
-       SF_FORMAT_WAVEX                 = 0x130000,             /* MS WAVE with WAVEFORMATEX */
-       SF_FORMAT_SD2                   = 0x160000,             /* Sound Designer 2 */
-       SF_FORMAT_FLAC                  = 0x170000,             /* FLAC lossless file format */
-       SF_FORMAT_CAF                   = 0x180000,             /* Core Audio File format */
-       SF_FORMAT_WVE                   = 0x190000,             /* Psion WVE format */
-       SF_FORMAT_OGG                   = 0x200000,             /* Xiph OGG container */
-       SF_FORMAT_MPC2K                 = 0x210000,             /* Akai MPC 2000 sampler */
-       SF_FORMAT_RF64                  = 0x220000,             /* RF64 WAV file */
-
-       /* Subtypes from here on. */
-
-       SF_FORMAT_PCM_S8                = 0x0001,               /* Signed 8 bit data */
-       SF_FORMAT_PCM_16                = 0x0002,               /* Signed 16 bit data */
-       SF_FORMAT_PCM_24                = 0x0003,               /* Signed 24 bit data */
-       SF_FORMAT_PCM_32                = 0x0004,               /* Signed 32 bit data */
-
-       SF_FORMAT_PCM_U8                = 0x0005,               /* Unsigned 8 bit data (WAV and RAW only) */
-
-       SF_FORMAT_FLOAT                 = 0x0006,               /* 32 bit float data */
-       SF_FORMAT_DOUBLE                = 0x0007,               /* 64 bit float data */
-
-       SF_FORMAT_ULAW                  = 0x0010,               /* U-Law encoded. */
-       SF_FORMAT_ALAW                  = 0x0011,               /* A-Law encoded. */
-       SF_FORMAT_IMA_ADPCM             = 0x0012,               /* IMA ADPCM. */
-       SF_FORMAT_MS_ADPCM              = 0x0013,               /* Microsoft ADPCM. */
-
-       SF_FORMAT_GSM610                = 0x0020,               /* GSM 6.10 encoding. */
-       SF_FORMAT_VOX_ADPCM             = 0x0021,               /* OKI / Dialogix ADPCM */
-
-       SF_FORMAT_G721_32               = 0x0030,               /* 32kbs G721 ADPCM encoding. */
-       SF_FORMAT_G723_24               = 0x0031,               /* 24kbs G723 ADPCM encoding. */
-       SF_FORMAT_G723_40               = 0x0032,               /* 40kbs G723 ADPCM encoding. */
-
-       SF_FORMAT_DWVW_12               = 0x0040,               /* 12 bit Delta Width Variable Word encoding. */
-       SF_FORMAT_DWVW_16               = 0x0041,               /* 16 bit Delta Width Variable Word encoding. */
-       SF_FORMAT_DWVW_24               = 0x0042,               /* 24 bit Delta Width Variable Word encoding. */
-       SF_FORMAT_DWVW_N                = 0x0043,               /* N bit Delta Width Variable Word encoding. */
-
-       SF_FORMAT_DPCM_8                = 0x0050,               /* 8 bit differential PCM (XI only) */
-       SF_FORMAT_DPCM_16               = 0x0051,               /* 16 bit differential PCM (XI only) */
-
-       SF_FORMAT_VORBIS                = 0x0060,               /* Xiph Vorbis encoding. */
-
-       SF_FORMAT_ALAC_16               = 0x0070,               /* Apple Lossless Audio Codec (16 bit). */
-       SF_FORMAT_ALAC_20               = 0x0071,               /* Apple Lossless Audio Codec (20 bit). */
-       SF_FORMAT_ALAC_24               = 0x0072,               /* Apple Lossless Audio Codec (24 bit). */
-       SF_FORMAT_ALAC_32               = 0x0073,               /* Apple Lossless Audio Codec (32 bit). */
-
-       /* Endian-ness options. */
-
-       SF_ENDIAN_FILE                  = 0x00000000,   /* Default file endian-ness. */
-       SF_ENDIAN_LITTLE                = 0x10000000,   /* Force little endian-ness. */
-       SF_ENDIAN_BIG                   = 0x20000000,   /* Force big endian-ness. */
-       SF_ENDIAN_CPU                   = 0x30000000,   /* Force CPU endian-ness. */
-
-       SF_FORMAT_SUBMASK               = 0x0000FFFF,
-       SF_FORMAT_TYPEMASK              = 0x0FFF0000,
-       SF_FORMAT_ENDMASK               = 0x30000000
-} ;
-
-/*
-** The following are the valid command numbers for the sf_command()
-** interface.  The use of these commands is documented in the file
-** command.html in the doc directory of the source code distribution.
-*/
-
-enum
-{      SFC_GET_LIB_VERSION                             = 0x1000,
-       SFC_GET_LOG_INFO                                = 0x1001,
-       SFC_GET_CURRENT_SF_INFO                 = 0x1002,
-
-
-       SFC_GET_NORM_DOUBLE                             = 0x1010,
-       SFC_GET_NORM_FLOAT                              = 0x1011,
-       SFC_SET_NORM_DOUBLE                             = 0x1012,
-       SFC_SET_NORM_FLOAT                              = 0x1013,
-       SFC_SET_SCALE_FLOAT_INT_READ    = 0x1014,
-       SFC_SET_SCALE_INT_FLOAT_WRITE   = 0x1015,
-
-       SFC_GET_SIMPLE_FORMAT_COUNT             = 0x1020,
-       SFC_GET_SIMPLE_FORMAT                   = 0x1021,
-
-       SFC_GET_FORMAT_INFO                             = 0x1028,
-
-       SFC_GET_FORMAT_MAJOR_COUNT              = 0x1030,
-       SFC_GET_FORMAT_MAJOR                    = 0x1031,
-       SFC_GET_FORMAT_SUBTYPE_COUNT    = 0x1032,
-       SFC_GET_FORMAT_SUBTYPE                  = 0x1033,
-
-       SFC_CALC_SIGNAL_MAX                             = 0x1040,
-       SFC_CALC_NORM_SIGNAL_MAX                = 0x1041,
-       SFC_CALC_MAX_ALL_CHANNELS               = 0x1042,
-       SFC_CALC_NORM_MAX_ALL_CHANNELS  = 0x1043,
-       SFC_GET_SIGNAL_MAX                              = 0x1044,
-       SFC_GET_MAX_ALL_CHANNELS                = 0x1045,
-
-       SFC_SET_ADD_PEAK_CHUNK                  = 0x1050,
-       SFC_SET_ADD_HEADER_PAD_CHUNK    = 0x1051,
-
-       SFC_UPDATE_HEADER_NOW                   = 0x1060,
-       SFC_SET_UPDATE_HEADER_AUTO              = 0x1061,
-
-       SFC_FILE_TRUNCATE                               = 0x1080,
-
-       SFC_SET_RAW_START_OFFSET                = 0x1090,
-
-       SFC_SET_DITHER_ON_WRITE                 = 0x10A0,
-       SFC_SET_DITHER_ON_READ                  = 0x10A1,
-
-       SFC_GET_DITHER_INFO_COUNT               = 0x10A2,
-       SFC_GET_DITHER_INFO                             = 0x10A3,
-
-       SFC_GET_EMBED_FILE_INFO                 = 0x10B0,
-
-       SFC_SET_CLIPPING                                = 0x10C0,
-       SFC_GET_CLIPPING                                = 0x10C1,
-
-       SFC_GET_INSTRUMENT                              = 0x10D0,
-       SFC_SET_INSTRUMENT                              = 0x10D1,
-
-       SFC_GET_LOOP_INFO                               = 0x10E0,
-
-       SFC_GET_BROADCAST_INFO                  = 0x10F0,
-       SFC_SET_BROADCAST_INFO                  = 0x10F1,
-
-       SFC_GET_CHANNEL_MAP_INFO                = 0x1100,
-       SFC_SET_CHANNEL_MAP_INFO                = 0x1101,
-
-       SFC_RAW_DATA_NEEDS_ENDSWAP              = 0x1110,
-
-       /* Support for Wavex Ambisonics Format */
-       SFC_WAVEX_SET_AMBISONIC                 = 0x1200,
-       SFC_WAVEX_GET_AMBISONIC                 = 0x1201,
-
-       SFC_SET_VBR_ENCODING_QUALITY    = 0x1300,
-       SFC_SET_COMPRESSION_LEVEL               = 0x1301,
-
-       /* Cart Chunk support */
-       SFC_SET_CART_INFO                               = 0x1400,
-       SFC_GET_CART_INFO                               = 0x1401,
-
-       /* Following commands for testing only. */
-       SFC_TEST_IEEE_FLOAT_REPLACE             = 0x6001,
-
-       /*
-       ** SFC_SET_ADD_* values are deprecated and will disappear at some
-       ** time in the future. They are guaranteed to be here up to and
-       ** including version 1.0.8 to avoid breakage of existing software.
-       ** They currently do nothing and will continue to do nothing.
-       */
-       SFC_SET_ADD_DITHER_ON_WRITE             = 0x1070,
-       SFC_SET_ADD_DITHER_ON_READ              = 0x1071
-} ;
-
-
-/*
-** String types that can be set and read from files. Not all file types
-** support this and even the file types which support one, may not support
-** all string types.
-*/
-
-enum
-{      SF_STR_TITLE                                    = 0x01,
-       SF_STR_COPYRIGHT                                = 0x02,
-       SF_STR_SOFTWARE                                 = 0x03,
-       SF_STR_ARTIST                                   = 0x04,
-       SF_STR_COMMENT                                  = 0x05,
-       SF_STR_DATE                                             = 0x06,
-       SF_STR_ALBUM                                    = 0x07,
-       SF_STR_LICENSE                                  = 0x08,
-       SF_STR_TRACKNUMBER                              = 0x09,
-       SF_STR_GENRE                                    = 0x10
-} ;
-
-/*
-** Use the following as the start and end index when doing metadata
-** transcoding.
-*/
-
-#define        SF_STR_FIRST    SF_STR_TITLE
-#define        SF_STR_LAST             SF_STR_GENRE
-
-enum
-{      /* True and false */
-       SF_FALSE        = 0,
-       SF_TRUE         = 1,
-
-       /* Modes for opening files. */
-       SFM_READ        = 0x10,
-       SFM_WRITE       = 0x20,
-       SFM_RDWR        = 0x30,
-
-       SF_AMBISONIC_NONE               = 0x40,
-       SF_AMBISONIC_B_FORMAT   = 0x41
-} ;
-
-/* Public error values. These are guaranteed to remain unchanged for the duration
-** of the library major version number.
-** There are also a large number of private error numbers which are internal to
-** the library which can change at any time.
-*/
-
-enum
-{      SF_ERR_NO_ERROR                         = 0,
-       SF_ERR_UNRECOGNISED_FORMAT      = 1,
-       SF_ERR_SYSTEM                           = 2,
-       SF_ERR_MALFORMED_FILE           = 3,
-       SF_ERR_UNSUPPORTED_ENCODING     = 4
-} ;
-
-
-/* Channel map values (used with SFC_SET/GET_CHANNEL_MAP).
-*/
-
-enum
-{      SF_CHANNEL_MAP_INVALID = 0,
-       SF_CHANNEL_MAP_MONO = 1,
-       SF_CHANNEL_MAP_LEFT,                                    /* Apple calls this 'Left' */
-       SF_CHANNEL_MAP_RIGHT,                                   /* Apple calls this 'Right' */
-       SF_CHANNEL_MAP_CENTER,                                  /* Apple calls this 'Center' */
-       SF_CHANNEL_MAP_FRONT_LEFT,
-       SF_CHANNEL_MAP_FRONT_RIGHT,
-       SF_CHANNEL_MAP_FRONT_CENTER,
-       SF_CHANNEL_MAP_REAR_CENTER,                             /* Apple calls this 'Center Surround', Msft calls this 'Back Center' */
-       SF_CHANNEL_MAP_REAR_LEFT,                               /* Apple calls this 'Left Surround', Msft calls this 'Back Left' */
-       SF_CHANNEL_MAP_REAR_RIGHT,                              /* Apple calls this 'Right Surround', Msft calls this 'Back Right' */
-       SF_CHANNEL_MAP_LFE,                                             /* Apple calls this 'LFEScreen', Msft calls this 'Low Frequency'  */
-       SF_CHANNEL_MAP_FRONT_LEFT_OF_CENTER,    /* Apple calls this 'Left Center' */
-       SF_CHANNEL_MAP_FRONT_RIGHT_OF_CENTER,   /* Apple calls this 'Right Center */
-       SF_CHANNEL_MAP_SIDE_LEFT,                               /* Apple calls this 'Left Surround Direct' */
-       SF_CHANNEL_MAP_SIDE_RIGHT,                              /* Apple calls this 'Right Surround Direct' */
-       SF_CHANNEL_MAP_TOP_CENTER,                              /* Apple calls this 'Top Center Surround' */
-       SF_CHANNEL_MAP_TOP_FRONT_LEFT,                  /* Apple calls this 'Vertical Height Left' */
-       SF_CHANNEL_MAP_TOP_FRONT_RIGHT,                 /* Apple calls this 'Vertical Height Right' */
-       SF_CHANNEL_MAP_TOP_FRONT_CENTER,                /* Apple calls this 'Vertical Height Center' */
-       SF_CHANNEL_MAP_TOP_REAR_LEFT,                   /* Apple and MS call this 'Top Back Left' */
-       SF_CHANNEL_MAP_TOP_REAR_RIGHT,                  /* Apple and MS call this 'Top Back Right' */
-       SF_CHANNEL_MAP_TOP_REAR_CENTER,                 /* Apple and MS call this 'Top Back Center' */
-
-       SF_CHANNEL_MAP_AMBISONIC_B_W,
-       SF_CHANNEL_MAP_AMBISONIC_B_X,
-       SF_CHANNEL_MAP_AMBISONIC_B_Y,
-       SF_CHANNEL_MAP_AMBISONIC_B_Z,
-
-       SF_CHANNEL_MAP_MAX
-} ;
-
-
-/* A SNDFILE* pointer can be passed around much like stdio.h's FILE* pointer. */
-
-typedef        struct SNDFILE_tag      SNDFILE ;
-
-/* The following typedef is system specific and is defined when libsndfile is
-** compiled. sf_count_t will be a 64 bit value when the underlying OS allows
-** 64 bit file offsets.
-** On windows, we need to allow the same header file to be compiler by both GCC
-** and the Microsoft compiler.
-*/
-
-#if (defined (_MSCVER) || defined (_MSC_VER))
-typedef __int64                sf_count_t ;
-#define SF_COUNT_MAX           0x7fffffffffffffffi64
-#else
-typedef @TYPEOF_SF_COUNT_T@    sf_count_t ;
-#define SF_COUNT_MAX           @SF_COUNT_MAX@
-#endif
-
-
-/* A pointer to a SF_INFO structure is passed to sf_open () and filled in.
-** On write, the SF_INFO structure is filled in by the user and passed into
-** sf_open ().
-*/
-
-struct SF_INFO
-{      sf_count_t      frames ;                /* Used to be called samples.  Changed to avoid confusion. */
-       int                     samplerate ;
-       int                     channels ;
-       int                     format ;
-       int                     sections ;
-       int                     seekable ;
-} ;
-
-typedef        struct SF_INFO SF_INFO ;
-
-/* The SF_FORMAT_INFO struct is used to retrieve information about the sound
-** file formats libsndfile supports using the sf_command () interface.
-**
-** Using this interface will allow applications to support new file formats
-** and encoding types when libsndfile is upgraded, without requiring
-** re-compilation of the application.
-**
-** Please consult the libsndfile documentation (particularly the information
-** on the sf_command () interface) for examples of its use.
-*/
-
-typedef struct
-{      int                     format ;
-       const char      *name ;
-       const char      *extension ;
-} SF_FORMAT_INFO ;
-
-/*
-** Enums and typedefs for adding dither on read and write.
-** See the html documentation for sf_command(), SFC_SET_DITHER_ON_WRITE
-** and SFC_SET_DITHER_ON_READ.
-*/
-
-enum
-{      SFD_DEFAULT_LEVEL       = 0,
-       SFD_CUSTOM_LEVEL        = 0x40000000,
-
-       SFD_NO_DITHER           = 500,
-       SFD_WHITE                       = 501,
-       SFD_TRIANGULAR_PDF      = 502
-} ;
-
-typedef struct
-{      int                     type ;
-       double          level ;
-       const char      *name ;
-} SF_DITHER_INFO ;
-
-/* Struct used to retrieve information about a file embedded within a
-** larger file. See SFC_GET_EMBED_FILE_INFO.
-*/
-
-typedef struct
-{      sf_count_t      offset ;
-       sf_count_t      length ;
-} SF_EMBED_FILE_INFO ;
-
-/*
-**     Structs used to retrieve music sample information from a file.
-*/
-
-enum
-{      /*
-       **      The loop mode field in SF_INSTRUMENT will be one of the following.
-       */
-       SF_LOOP_NONE = 800,
-       SF_LOOP_FORWARD,
-       SF_LOOP_BACKWARD,
-       SF_LOOP_ALTERNATING
-} ;
-
-typedef struct
-{      int gain ;
-       char basenote, detune ;
-       char velocity_lo, velocity_hi ;
-       char key_lo, key_hi ;
-       int loop_count ;
-
-       struct
-       {       int mode ;
-               uint32_t start ;
-               uint32_t end ;
-               uint32_t count ;
-       } loops [16] ; /* make variable in a sensible way */
-} SF_INSTRUMENT ;
-
-
-
-/* Struct used to retrieve loop information from a file.*/
-typedef struct
-{
-       short   time_sig_num ;  /* any positive integer    > 0  */
-       short   time_sig_den ;  /* any positive power of 2 > 0  */
-       int             loop_mode ;             /* see SF_LOOP enum             */
-
-       int             num_beats ;             /* this is NOT the amount of quarter notes !!!*/
-                                                       /* a full bar of 4/4 is 4 beats */
-                                                       /* a full bar of 7/8 is 7 beats */
-
-       float   bpm ;                   /* suggestion, as it can be calculated using other fields:*/
-                                                       /* file's length, file's sampleRate and our time_sig_den*/
-                                                       /* -> bpms are always the amount of _quarter notes_ per minute */
-
-       int     root_key ;                      /* MIDI note, or -1 for None */
-       int future [6] ;
-} SF_LOOP_INFO ;
-
-
-/*     Struct used to retrieve broadcast (EBU) information from a file.
-**     Strongly (!) based on EBU "bext" chunk format used in Broadcast WAVE.
-*/
-#define        SF_BROADCAST_INFO_VAR(coding_hist_size) \
-                       struct \
-                       {       char            description [256] ; \
-                               char            originator [32] ; \
-                               char            originator_reference [32] ; \
-                               char            origination_date [10] ; \
-                               char            origination_time [8] ; \
-                               uint32_t        time_reference_low ; \
-                               uint32_t        time_reference_high ; \
-                               short           version ; \
-                               char            umid [64] ; \
-                               char            reserved [190] ; \
-                               uint32_t        coding_history_size ; \
-                               char            coding_history [coding_hist_size] ; \
-                       }
-
-/* SF_BROADCAST_INFO is the above struct with coding_history field of 256 bytes. */
-typedef SF_BROADCAST_INFO_VAR (256) SF_BROADCAST_INFO ;
-
-struct SF_CART_TIMER
-{      char    usage[4] ;
-       int32_t value ;
-} ;
-
-typedef struct SF_CART_TIMER SF_CART_TIMER ;
-
-#define        SF_CART_INFO_VAR(p_tag_text_size) \
-                       struct \
-                       {       char            version [4] ; \
-                               char            title [64] ; \
-                               char            artist [64] ; \
-                               char            cut_id [64] ; \
-                               char            client_id [64] ; \
-                               char            category [64] ; \
-                               char            classification [64] ; \
-                               char            out_cue [64] ; \
-                               char            start_date [10] ; \
-                               char            start_time [8] ; \
-                               char            end_date [10] ; \
-                               char            end_time [8] ; \
-                               char            producer_app_id [64] ; \
-                               char            producer_app_version [64] ; \
-                               char            user_def [64] ; \
-                               int32_t         level_reference ; \
-                               SF_CART_TIMER   post_timers [8] ; \
-                               char            reserved [276] ; \
-                               char            url [1024] ; \
-                               uint32_t        tag_text_size ; \
-                               char            tag_text[p_tag_text_size] ; \
-                       }
-
-typedef SF_CART_INFO_VAR (256) SF_CART_INFO ;
-
-/*     Virtual I/O functionality. */
-
-typedef sf_count_t             (*sf_vio_get_filelen)   (void *user_data) ;
-typedef sf_count_t             (*sf_vio_seek)          (sf_count_t offset, int whence, void *user_data) ;
-typedef sf_count_t             (*sf_vio_read)          (void *ptr, sf_count_t count, void *user_data) ;
-typedef sf_count_t             (*sf_vio_write)         (const void *ptr, sf_count_t count, void *user_data) ;
-typedef sf_count_t             (*sf_vio_tell)          (void *user_data) ;
-
-struct SF_VIRTUAL_IO
-{      sf_vio_get_filelen      get_filelen ;
-       sf_vio_seek                     seek ;
-       sf_vio_read                     read ;
-       sf_vio_write            write ;
-       sf_vio_tell                     tell ;
-} ;
-
-typedef        struct SF_VIRTUAL_IO SF_VIRTUAL_IO ;
-
-
-/* Open the specified file for read, write or both. On error, this will
-** return a NULL pointer. To find the error number, pass a NULL SNDFILE
-** to sf_strerror ().
-** All calls to sf_open() should be matched with a call to sf_close().
-*/
-
-SNDFILE*       sf_open         (const char *path, int mode, SF_INFO *sfinfo) ;
-
-
-/* Use the existing file descriptor to create a SNDFILE object. If close_desc
-** is TRUE, the file descriptor will be closed when sf_close() is called. If
-** it is FALSE, the descritor will not be closed.
-** When passed a descriptor like this, the library will assume that the start
-** of file header is at the current file offset. This allows sound files within
-** larger container files to be read and/or written.
-** On error, this will return a NULL pointer. To find the error number, pass a
-** NULL SNDFILE to sf_strerror ().
-** All calls to sf_open_fd() should be matched with a call to sf_close().
-
-*/
-
-SNDFILE*       sf_open_fd      (int fd, int mode, SF_INFO *sfinfo, int close_desc) ;
-
-SNDFILE*       sf_open_virtual (SF_VIRTUAL_IO *sfvirtual, int mode, SF_INFO *sfinfo, void *user_data) ;
-
-
-/* sf_error () returns a error number which can be translated to a text
-** string using sf_error_number().
-*/
-
-int            sf_error                (SNDFILE *sndfile) ;
-
-
-/* sf_strerror () returns to the caller a pointer to the current error message for
-** the given SNDFILE.
-*/
-
-const char* sf_strerror (SNDFILE *sndfile) ;
-
-
-/* sf_error_number () allows the retrieval of the error string for each internal
-** error number.
-**
-*/
-
-const char*    sf_error_number (int errnum) ;
-
-
-/* The following two error functions are deprecated but they will remain in the
-** library for the forseeable future. The function sf_strerror() should be used
-** in their place.
-*/
-
-int            sf_perror               (SNDFILE *sndfile) ;
-int            sf_error_str    (SNDFILE *sndfile, char* str, size_t len) ;
-
-
-/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */
-
-int            sf_command      (SNDFILE *sndfile, int command, void *data, int datasize) ;
-
-
-/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */
-
-int            sf_format_check (const SF_INFO *info) ;
-
-
-/* Seek within the waveform data chunk of the SNDFILE. sf_seek () uses
-** the same values for whence (SEEK_SET, SEEK_CUR and SEEK_END) as
-** stdio.h function fseek ().
-** An offset of zero with whence set to SEEK_SET will position the
-** read / write pointer to the first data sample.
-** On success sf_seek returns the current position in (multi-channel)
-** samples from the start of the file.
-** Please see the libsndfile documentation for moving the read pointer
-** separately from the write pointer on files open in mode SFM_RDWR.
-** On error all of these functions return -1.
-*/
-
-sf_count_t     sf_seek                 (SNDFILE *sndfile, sf_count_t frames, int whence) ;
-
-
-/* Functions for retrieving and setting string data within sound files.
-** Not all file types support this features; AIFF and WAV do. For both
-** functions, the str_type parameter must be one of the SF_STR_* values
-** defined above.
-** On error, sf_set_string() returns non-zero while sf_get_string()
-** returns NULL.
-*/
-
-int sf_set_string (SNDFILE *sndfile, int str_type, const char* str) ;
-
-const char* sf_get_string (SNDFILE *sndfile, int str_type) ;
-
-
-/* Return the library version string. */
-
-const char * sf_version_string (void) ;
-
-/* Return the current byterate at this point in the file. The byte rate in this
-** case is the number of bytes per second of audio data. For instance, for a
-** stereo, 18 bit PCM encoded file with an 16kHz sample rate, the byte rate
-** would be 2 (stereo) * 2 (two bytes per sample) * 16000 => 64000 bytes/sec.
-** For some file formats the returned value will be accurate and exact, for some
-** it will be a close approximation, for some it will be the average bitrate for
-** the whole file and for some it will be a time varying value that was accurate
-** when the file was most recently read or written.
-** To get the bitrate, multiple this value by 8.
-** Returns -1 for unknown.
-*/
-int sf_current_byterate (SNDFILE *sndfile) ;
-
-/* Functions for reading/writing the waveform data of a sound file.
-*/
-
-sf_count_t     sf_read_raw             (SNDFILE *sndfile, void *ptr, sf_count_t bytes) ;
-sf_count_t     sf_write_raw    (SNDFILE *sndfile, const void *ptr, sf_count_t bytes) ;
-
-
-/* Functions for reading and writing the data chunk in terms of frames.
-** The number of items actually read/written = frames * number of channels.
-**     sf_xxxx_raw             read/writes the raw data bytes from/to the file
-**     sf_xxxx_short   passes data in the native short format
-**     sf_xxxx_int             passes data in the native int format
-**     sf_xxxx_float   passes data in the native float format
-**     sf_xxxx_double  passes data in the native double format
-** All of these read/write function return number of frames read/written.
-*/
-
-sf_count_t     sf_readf_short  (SNDFILE *sndfile, short *ptr, sf_count_t frames) ;
-sf_count_t     sf_writef_short (SNDFILE *sndfile, const short *ptr, sf_count_t frames) ;
-
-sf_count_t     sf_readf_int    (SNDFILE *sndfile, int *ptr, sf_count_t frames) ;
-sf_count_t     sf_writef_int   (SNDFILE *sndfile, const int *ptr, sf_count_t frames) ;
-
-sf_count_t     sf_readf_float  (SNDFILE *sndfile, float *ptr, sf_count_t frames) ;
-sf_count_t     sf_writef_float (SNDFILE *sndfile, const float *ptr, sf_count_t frames) ;
-
-sf_count_t     sf_readf_double         (SNDFILE *sndfile, double *ptr, sf_count_t frames) ;
-sf_count_t     sf_writef_double        (SNDFILE *sndfile, const double *ptr, sf_count_t frames) ;
-
-
-/* Functions for reading and writing the data chunk in terms of items.
-** Otherwise similar to above.
-** All of these read/write function return number of items read/written.
-*/
-
-sf_count_t     sf_read_short   (SNDFILE *sndfile, short *ptr, sf_count_t items) ;
-sf_count_t     sf_write_short  (SNDFILE *sndfile, const short *ptr, sf_count_t items) ;
-
-sf_count_t     sf_read_int             (SNDFILE *sndfile, int *ptr, sf_count_t items) ;
-sf_count_t     sf_write_int    (SNDFILE *sndfile, const int *ptr, sf_count_t items) ;
-
-sf_count_t     sf_read_float   (SNDFILE *sndfile, float *ptr, sf_count_t items) ;
-sf_count_t     sf_write_float  (SNDFILE *sndfile, const float *ptr, sf_count_t items) ;
-
-sf_count_t     sf_read_double  (SNDFILE *sndfile, double *ptr, sf_count_t items) ;
-sf_count_t     sf_write_double (SNDFILE *sndfile, const double *ptr, sf_count_t items) ;
-
-
-/* Close the SNDFILE and clean up all memory allocations associated with this
-** file.
-** Returns 0 on success, or an error number.
-*/
-
-int            sf_close                (SNDFILE *sndfile) ;
-
-
-/* If the file is opened SFM_WRITE or SFM_RDWR, call fsync() on the file
-** to force the writing of data to disk. If the file is opened SFM_READ
-** no action is taken.
-*/
-
-void   sf_write_sync   (SNDFILE *sndfile) ;
-
-
-
-/* The function sf_wchar_open() is Windows Only!
-** Open a file passing in a Windows Unicode filename. Otherwise, this is
-** the same as sf_open().
-**
-** In order for this to work, you need to do the following:
-**
-**             #include <windows.h>
-**             #define ENABLE_SNDFILE_WINDOWS_PROTOTYPES 1
-**             #including <sndfile.h>
-*/
-
-#if (defined (ENABLE_SNDFILE_WINDOWS_PROTOTYPES) && ENABLE_SNDFILE_WINDOWS_PROTOTYPES)
-SNDFILE* sf_wchar_open (LPCWSTR wpath, int mode, SF_INFO *sfinfo) ;
-#endif
-
-
-
-
-/* Getting and setting of chunks from within a sound file.
-**
-** These functions allow the getting and setting of chunks within a sound file
-** (for those formats which allow it).
-**
-** These functions fail safely. Specifically, they will not allow you to overwrite
-** existing chunks or add extra versions of format specific reserved chunks but
-** should allow you to retrieve any and all chunks (may not be implemented for
-** all chunks or all file formats).
-*/
-
-struct SF_CHUNK_INFO
-{      char            id [64] ;       /* The chunk identifier. */
-       unsigned        id_size ;       /* The size of the chunk identifier. */
-       unsigned        datalen ;       /* The size of that data. */
-       void            *data ;         /* Pointer to the data. */
-} ;
-
-typedef struct SF_CHUNK_INFO SF_CHUNK_INFO ;
-
-/* Set the specified chunk info (must be done before any audio data is written
-** to the file). This will fail for format specific reserved chunks.
-** The chunk_info->data pointer must be valid until the file is closed.
-** Returns SF_ERR_NO_ERROR on success or non-zero on failure.
-*/
-int sf_set_chunk (SNDFILE * sndfile, const SF_CHUNK_INFO * chunk_info) ;
-
-/*
-** An opaque structure to an iterator over the all chunks of a given id
-*/
-typedef        struct SF_CHUNK_ITERATOR SF_CHUNK_ITERATOR ;
-
-/* Get an iterator for all chunks matching chunk_info.
-** The iterator will point to the first chunk matching chunk_info.
-** Chunks are matching, if (chunk_info->id) matches the first
-**     (chunk_info->id_size) bytes of a chunk found in the SNDFILE* handle.
-** If chunk_info is NULL, an iterator to all chunks in the SNDFILE* handle
-**     is returned.
-** The values of chunk_info->datalen and chunk_info->data are ignored.
-** If no matching chunks are found in the sndfile, NULL is returned.
-** The returned iterator will stay valid until one of the following occurs:
-**     a) The sndfile is closed.
-**     b) A new chunk is added using sf_set_chunk().
-**     c) Another chunk iterator function is called on the same SNDFILE* handle
-**        that causes the iterator to be modified.
-** The memory for the iterator belongs to the SNDFILE* handle and is freed when
-** sf_close() is called.
-*/
-SF_CHUNK_ITERATOR *
-sf_get_chunk_iterator (SNDFILE * sndfile, const SF_CHUNK_INFO * chunk_info) ;
-
-/* Iterate through chunks by incrementing the iterator.
-** Increments the iterator and returns a handle to the new one.
-** After this call, iterator will no longer be valid, and you must use the
-**      newly returned handle from now on.
-** The returned handle can be used to access the next chunk matching
-**      the criteria as defined in sf_get_chunk_iterator().
-** If iterator points to the last chunk, this will free all resources
-**      associated with iterator and return NULL.
-** The returned iterator will stay valid until sf_get_chunk_iterator_next
-**      is called again, the sndfile is closed or a new chunk us added.
-*/
-SF_CHUNK_ITERATOR *
-sf_next_chunk_iterator (SF_CHUNK_ITERATOR * iterator) ;
-
-
-/* Get the size of the specified chunk.
-** If the specified chunk exists, the size will be returned in the
-**      datalen field of the SF_CHUNK_INFO struct.
-**      Additionally, the id of the chunk will be copied to the id
-**      field of the SF_CHUNK_INFO struct and it's id_size field will
-**      be updated accordingly.
-** If the chunk doesn't exist chunk_info->datalen will be zero, and the
-**      id and id_size fields will be undefined.
-** The function will return SF_ERR_NO_ERROR on success or non-zero on
-** failure.
-*/
-int
-sf_get_chunk_size (const SF_CHUNK_ITERATOR * it, SF_CHUNK_INFO * chunk_info) ;
-
-/* Get the specified chunk data.
-** If the specified chunk exists, up to chunk_info->datalen bytes of
-**      the chunk data will be copied into the chunk_info->data buffer
-**      (allocated by the caller) and the chunk_info->datalen field
-**      updated to reflect the size of the data. The id and id_size
-**      field will be updated according to the retrieved chunk
-** If the chunk doesn't exist chunk_info->datalen will be zero, and the
-**      id and id_size fields will be undefined.
-** The function will return SF_ERR_NO_ERROR on success or non-zero on
-** failure.
-*/
-int
-sf_get_chunk_data (const SF_CHUNK_ITERATOR * it, SF_CHUNK_INFO * chunk_info) ;
-
-
-#ifdef __cplusplus
-}              /* extern "C" */
-#endif /* __cplusplus */
-
-#endif /* SNDFILE_H */
-
index e182fd0a607d9f90a153c9c4d170fc971625b0e4..59415f74abbcc36c58194aa718293589cf532cd5 100644 (file)
@@ -46,6 +46,7 @@
     <PlatformToolset>v140</PlatformToolset>\r
   </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <Import Project="..\..\..\..\w32\libsndfile.props" Condition=" '$(libsndfileImported)' == '' "/>\r
   <ImportGroup Label="ExtensionSettings">\r
   </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">\r
   </PropertyGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">\r
     <ClCompile>\r
-      <AdditionalIncludeDirectories>%(RootDir)%(Directory)..\..\..\..\libs\win32\libsndfile\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
       <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <PrecompiledHeader>\r
       </PrecompiledHeader>\r
     </ClCompile>\r
     <Link>\r
-      <AdditionalLibraryDirectories>..\..\..\..\libs\libsndfile\Win32\$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
       <DataExecutionPrevention>\r
       </DataExecutionPrevention>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
     </Midl>\r
     <ClCompile>\r
-      <AdditionalIncludeDirectories>%(RootDir)%(Directory)..\..\..\..\libs\win32\libsndfile\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
       <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <PrecompiledHeader>\r
       </PrecompiledHeader>\r
     </ClCompile>\r
     <Link>\r
-      <AdditionalLibraryDirectories>..\..\..\..\libs\libsndfile\Win32\$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
       <DataExecutionPrevention>\r
       </DataExecutionPrevention>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">\r
     <ClCompile>\r
-      <AdditionalIncludeDirectories>%(RootDir)%(Directory)..\..\..\..\libs\win32\libsndfile\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
       <PrecompiledHeader>\r
       </PrecompiledHeader>\r
     </ClCompile>\r
     <Link>\r
-      <AdditionalLibraryDirectories>..\..\..\..\libs\libsndfile\Win32\$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
       <DataExecutionPrevention>\r
       </DataExecutionPrevention>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
     </Midl>\r
     <ClCompile>\r
-      <AdditionalIncludeDirectories>%(RootDir)%(Directory)..\..\..\..\libs\win32\libsndfile\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
       <PrecompiledHeader>\r
       </PrecompiledHeader>\r
     </ClCompile>\r
     <Link>\r
-      <AdditionalLibraryDirectories>..\..\..\..\libs\libsndfile\Win32\$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
       <DataExecutionPrevention>\r
       </DataExecutionPrevention>\r
       <Project>{f6c55d93-b927-4483-bb69-15aef3dd2dff}</Project>\r
       <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
     </ProjectReference>\r
-    <ProjectReference Include="..\..\..\..\libs\win32\libsndfile\libsndfile.2015.vcxproj">\r
-      <Project>{3d0370ca-bed2-4657-a475-32375cbcb6e4}</Project>\r
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
-    </ProjectReference>\r
     <ProjectReference Include="..\..\..\..\w32\Library\FreeSwitchCore.2015.vcxproj">\r
       <Project>{202d7a4e-760d-4d0e-afa1-d7459ced30ff}</Project>\r
       <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
diff --git a/w32/libsndfile-version.props b/w32/libsndfile-version.props
new file mode 100644 (file)
index 0000000..c30e080
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ImportGroup Label="PropertySheets">
+    <Import Project="basedir.props" Condition=" '$(BaseDirImported)' == ''"/>
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros">
+    <libsndfileVersion>1.0.28.1.fda9c8d</libsndfileVersion>
+  </PropertyGroup>
+  <PropertyGroup>
+    <libsndfileVersionImported>true</libsndfileVersionImported>
+  </PropertyGroup>
+  <PropertyGroup />
+  <ItemDefinitionGroup />
+  <ItemGroup>
+    <BuildMacro Include="libsndfileVersion">
+      <Value>$(libsndfileVersion)</Value>
+    </BuildMacro>
+  </ItemGroup>
+</Project>
diff --git a/w32/libsndfile.props b/w32/libsndfile.props
new file mode 100644 (file)
index 0000000..03dbd5a
--- /dev/null
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <libsndfileImported>true</libsndfileImported>
+  </PropertyGroup>
+  <ImportGroup Label="PropertySheets">
+    <Import Project="libsndfile-version.props" Condition=" '$(libsndfileVersionImported)' == '' "/>
+    <Import Project="downloadpackage.task" Condition=" '$(downloadpackagetask_Imported)' == '' " />
+  </ImportGroup>
+
+  <PropertyGroup>
+    <LibraryConfiguration Condition="$(Configuration.ToLower().Contains('debug'))">Debug</LibraryConfiguration>
+    <LibraryConfiguration Condition="$(Configuration.ToLower().Contains('release'))">Release</LibraryConfiguration>
+  </PropertyGroup>
+
+  <PropertyGroup Label="UserMacros">
+    <libsndfileLibDir>$(BaseDir)libs\libsndfile-$(libsndfileVersion)</libsndfileLibDir>
+  </PropertyGroup>
+
+  <!--
+       Download Target.
+       Name must be unique.
+       By design, targets are executed only once per project.
+
+       Usage:
+
+       package: URI
+
+       expectfileordirectory: Skips the download and extraction if exists
+
+       outputfolder: Folder to store a downloaded file.
+                     By default "$(BaseDir)libs", if empty
+
+       outputfilename: If not empty, overrides filename from URI.
+                       .exe files don't get extracted
+
+       extractto: Folder to extract an archive to
+   -->
+
+  <Target Name="libsndfileBinariesDownloadTarget" BeforeTargets="CustomBuild" DependsOnTargets="7za">
+      <DownloadPackageTask
+           package="http://files.freeswitch.org/windows/packages/libsndfile/$(libsndfileVersion)/libsndfile-$(libsndfileVersion)-binaries-$(Platform.ToLower())-$(LibraryConfiguration.ToLower()).zip"
+           expectfileordirectory="$(libsndfileLibDir)\binaries\$(Platform)\$(LibraryConfiguration)\lib\libsndfile-1.lib"
+           outputfolder=""
+           outputfilename=""
+           extractto="$(BaseDir)libs\"
+      />
+  </Target>
+  <Target Name="libsndfileHeadersDownloadTarget" BeforeTargets="CustomBuild" DependsOnTargets="7za">
+      <DownloadPackageTask
+           package="http://files.freeswitch.org/windows/packages/libsndfile/$(libsndfileVersion)/libsndfile-$(libsndfileVersion)-headers.zip"
+           expectfileordirectory="$(libsndfileLibDir)\include\sndfile.h"
+           outputfolder=""
+           outputfilename=""
+           extractto="$(BaseDir)libs\"
+      />
+  </Target>
+
+  <Target Name="libsndfilecopyTarget" BeforeTargets="CustomBuild" DependsOnTargets="libsndfileBinariesDownloadTarget">
+      <ItemGroup>
+          <libsndfileFiles Include="$(libsndfileLibDir)\binaries\$(Platform)\$(LibraryConfiguration)\bin\libsndfile-1.dll" />
+      </ItemGroup>
+      <Copy Condition="!exists('$(BaseDir)$(Platform)\$(LibraryConfiguration)\libsndfile-1.dll')"
+          SourceFiles="@(libsndfileFiles)"
+          DestinationFiles="@(libsndfileFiles->'$(BaseDir)$(Platform)\$(LibraryConfiguration)\%(Filename)%(Extension)')"
+      />
+  </Target>
+
+  <ItemDefinitionGroup>
+    <ClCompile>
+      <AdditionalIncludeDirectories>$(SolutionDir)libs\libsndfile-$(libsndfileVersion)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <AdditionalLibraryDirectories>$(SolutionDir)libs\libsndfile-$(libsndfileVersion)\binaries\$(Platform)\$(LibraryConfiguration)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+      <AdditionalDependencies>libsndfile-1.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+  </ItemDefinitionGroup>
+</Project>
\ No newline at end of file