ref: 99bd519a4df4601f868f2bd601d958f6f631d1d2
parent: ca6c484158cf560424d7eb68e12e1814cc8dab0c
author: menno <menno>
date: Thu Jul 25 08:22:13 EDT 2002
Update to newest version of libsndfile library (Somebody please check linux compilation)
--- a/common/libsndfile/AUTHORS
+++ b/common/libsndfile/AUTHORS
@@ -1,10 +1,9 @@
-The main author of libsndfile is Erik de Castro Lopo <erikd AT zip DOT com DOT au>.
+The main author of libsndfile is Erik de Castro Lopo <[email protected]>.
The code in the src/GSM610 directory was written by Jutta Degener
-<jutta AT cs DOT tu-berlin DOT de> and Carsten Bormann
-<cabo AT cs DOT tu-berlin DOT 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:
+<[email protected]> and Carsten Bormann <[email protected]>.
+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
@@ -11,7 +10,5 @@
Code in the src/G72x directory was 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.
-
-
--- a/common/libsndfile/ChangeLog
+++ b/common/libsndfile/ChangeLog
@@ -1,89 +1,936 @@
-2001-11-11 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2002-06-25 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
- * 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.
+ * Win32/libsndfile.def
+ Removed definition for sf_signal_max().
-2001-11-11 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+ * configure.in
+ Bumped version to 1.0.0rc2.
- * src/*.[ch]
- 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).
+2002-06-24 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
-2001-11-10 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+ * 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 zipworld DOT com DOT au>
- * 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.
+ * 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().
-2001-11-08 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2002-06-22 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
- * src/au.c src/sndfile.au
- 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.
+ * 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.
-2001-11-06 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * tests/utils.c
+ Fixed an error in error string.
+
+2002-06-17 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * src/wav.c
+ Fixed minor bug in handling of so-called ACIDized WAV files.
+
+2002-05-16 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
* tests/lossy_comp_test.c
- Finalised testing of stereo files where possible.
+ Clean up in preparation for Autogen-ing this file.
-2001-11-05 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+ * src/GSM610/*.[ch]
+ Code cleanup and prepartion forgetting file seek working. Details in
+ src/GSM610/ChangeLog.
- * src/wav_ms_adpcm.c
- Fixed bug in writing stereo MS ADPCM WAV files. Thanks to Xu Xin for pointing
- out this problem.
+ * sndfile.pc.in
+ Testing complete. Is sndfile.m4 still needed?
-2001-10-24 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2002-05-09 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
- * src/wav_ms_adpcm.c
- Modified function srate2blocksize () to handle 44k1Hz stereo files.
+ * 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 zipworld DOT com DOT au>
+
+ * src/w64.c src/svx.c src/paf.c
+ Fixed bugs in read/write mode.
+
+2002-05-07 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * tests/rdwr_test .c
+ New file for testing read/write mode.
+
+2002-04-29 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * tests/floating_point_test.c
+ Fixed improper use of strncat ().
+
+2002-02-11 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * src/aiff.c
+ Added handling of u-law, A-law encoded AIFF files. Thanks to Tom Erbe for
+ supplying example files.
-2001-10-24 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
* tests/lossy_comp_test.c
- Modified this test program so that for stereo capable files, test stereo mode
- instead of mono.
+ Finalised testing of stereo files where possible.
-2001-10-06 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2001-11-05 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
- * src/common.h
- Win32 has _snprintf and _vsnprintf but not snprintf and vsnprintf. Added a
- conditional #define to fix this.
+ * 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-04 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2001-10-24 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
+ * src/wav_ms_adpcm.c
+ Modified function srate2blocksize () to handle 44k1Hz stereo files.
+
+2001-10-21 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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 zipworld DOT com DOT au>
+
+ * 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
+ * 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 zip DOT com DOT au>
+2001-10-01 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/wav.c src/aiff.c common.c
- Changed all references to snprintf to LSF_SNPRINTF and all vsnprintf to
+ 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.
+ 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.
+ 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 zip DOT com DOT au>
+2001-09-29 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
- * src/ircam.c
+ * src/ircam.c
New file to handle Berkeley/IRCAM/CARL files.
* src/sndfile.c src/common.h
@@ -92,130 +939,133 @@
* tests/*.c
Added tests for IRCAM files.
-2001-09-27 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2001-09-27 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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.
+ 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 zip DOT com DOT au>
+2001-09-17 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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.
+ 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 zip DOT com DOT au>
+2001-09-16 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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
+ 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 zip DOT com DOT au>
+2001-09-15 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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 zip DOT com DOT au>
+2001-09-12 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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.
+ 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 zip DOT com DOT au>
+2001-09-03 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
- * src/sndfile.c
+ * src/sndfile.c
Implemented sf_command ("norm float").
* src/*.c
- Implemented handling of sf_command ("norm float"). Float normalization can now
- be turned on and off.
+ 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.
+ 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.
+ 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.
+ 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.
+ 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 zip DOT com DOT au>
+2001-09-02 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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.
+ Renamed to sndfile_info.c. The program sndfile_info will now be installed
+ when the library is installed.
- * src/floatcast.h
+ * 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.
-
+ 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.
+ 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 zip DOT com DOT au>
-
+2001-08-31 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
+
* 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.
+ 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 zip DOT com DOT au>
-
+2001-08-11 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
+
* 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.
+ 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 zip DOT com DOT au>
-
+2001-08-01 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
+
* src/common.c
- Fixed use of va_arg() calls that were causing warning messages with the latest
- version of gcc (thanks Maurizio Umberto Puxeddu).
+ 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 zip DOT com DOT au>
-
- * src/*.c src/sfendian.h
+2001-07-25 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
+
+ * src/*.c src/sfendian.h
Moved definition of MAKE_MARKER macro to sfendian.h
-2001-07-23 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
-
+2001-07-23 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
+
* src/sndfile.c
- Modified sf_get_lib_version () so that version string will be visible using the
- Unix strings command.
+ 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.
+ 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 zip DOT com DOT au>
+2001-07-22 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* tests/read_seek_test.c tests/lossy_comp_test.c
Added tests for sf_read_float () and sf_readf_float ().
@@ -225,30 +1075,30 @@
* src/samplitude.c
New files for handling Samplitude files (not complete).
-
-2001-07-21 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2001-07-21 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
+
* 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 make reading writing from pipes work reliably.
+ 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
+ Added code for sf_read_float () and sf_readf_float () methods of accessing
file data.
-
-2001-07-20 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2001-07-20 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
+
* src/paf.c src/wav_gsm610.c
- Removed two printf()s which had escaped notice for some time (thanks Sigbj�rn
- Skj�ret).
+ 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 zip DOT com DOT au>
+2001-07-19 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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).
+ 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 zip DOT com DOT au>
+2001-07-18 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/common.[ch]
Implemented psf_binheader_readf() which will do for file header reading what
@@ -255,106 +1105,109 @@
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 zip DOT com DOT au>
+2001-07-16 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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.
+ 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 zip DOT com DOT au>
+2001-06-18 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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.
+ 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 zip DOT com DOT au>
+2001-06-13 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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.
+ 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 zip DOT com DOT au>
+2001-06-12 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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
+ 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 zip DOT com DOT au>
+2001-06-07 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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.
-
+ 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 zip DOT com DOT au>
+2001-06-05 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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).
-
+ 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 zip DOT com DOT au>
+2001-06-04 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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.
-
+ 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).
+ 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 zip DOT com DOT au>
+2001-06-03 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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.
-
+ 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.
-
+ 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.
+ 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
+ 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 zip DOT com DOT au>
+2001-06-01 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* tests/read_seek_test.c
Fixed a couple of broken binary files.
@@ -362,13 +1215,13 @@
* src/aiff.c src/wav.c
Added handling of PEAK chunks on file read.
-2001-05-31 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2001-05-31 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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
+ 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
@@ -376,35 +1229,36 @@
* 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
+ 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 zip DOT com DOT au>
+2001-05-30 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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
+ 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.
+ 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
+ * tests/*.c
Added calls to check_log_buffer () after each call to sf_open_XXX ().
-2001-05-29 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2001-05-29 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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 zip DOT com DOT au>
+2001-05-28 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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 zip DOT com DOT au>
+2001-05-27 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/wav.c
Changed return type of get_encoding_str () to prevent compiler warnings on
@@ -413,7 +1267,7 @@
* src/aiff.c src/au.c
Major rehack of header writing using psf_binheader_writef ().
-2001-05-25 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2001-05-25 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/common.h src/common.c
Added comments.
@@ -421,39 +1275,42 @@
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 ().
+ 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 zip DOT com DOT au>
+2001-05-24 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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.
+ 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
+ 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.
+ 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 zip DOT com DOT au>
+2001-05-23 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/nist.c
New file for reading/writing Sphere NIST audio file format.
- Originally requested by Elis Pomales in 1999.
+ 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.
+ 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).
@@ -464,7 +1321,7 @@
* tests/write_read_test.c
Added tests for supported NIST files.
-2001-05-22 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2001-05-22 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* tests/write_read_test.c
Added tests for little endian AIFC files.
@@ -473,58 +1330,52 @@
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 zip DOT com DOT au>
+2001-05-13 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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.
+ 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-13 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2001-05-11 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
- * src/aiff.c
- Added support for little endian encoded AIFC files. 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 zip DOT com DOT au>
-
* src/sndfile.h
- Fixed comments about endian-ness of WAV and AIFF files. Guillaume Lessard pointed
- out the error.
+ 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 zip DOT com DOT au>
+2001-04-23 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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 zip DOT com DOT au>
+2001-02-11 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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 zip DOT com DOT au>
+2000-12-16 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/aiff.c
Added handing of COMT chunk.
-2000-11-16 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2000-11-16 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* examples/sfconvert.c
Fixed bug in normalisatio code. Pointed out by Johnny Wu.
-2000-11-08 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2000-11-08 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* Win32/config.h
Fixed the incorrect setting of HAVE_ENDIAN_H parameter. Win32 only issue.
-2000-10-27 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2000-10-27 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* tests/Makefile.am
Added -lm for write_read_test_LDADD.
-2000-10-16 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2000-10-16 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/sndfile.c src/au.c
Fixed bug which prevented writing of G723 24kbps AU files.
@@ -533,15 +1384,15 @@
Corrrection to options for G723 tests.
* configure.in
- Added --disable-gcc-pipe option for DJGPP compiler (gcc on MS-DOS) which
+ 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 zip DOT com DOT au>
+2000-09-03 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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 zip DOT com DOT au>
+2000-08-31 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/pcm.c
Fixed bug in normalisation code (spotted by Steve Lhomme).
@@ -550,36 +1401,30 @@
New file to test scaled and unscaled sf_read_double() and sf_write_double()
functions.
-2000-08-28 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2000-08-28 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* COPYING
Changed to the LGPL COPYING file (spotted by H. S. Teoh).
-2000-08-21 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2000-08-21 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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.
+ 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 zip DOT com DOT au>
+2000-08-18 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/newpcm.h
New file to contain a complete rewrite of the PCM data handling.
-2000-08-15 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2000-08-15 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/sndfile.c
- Fixed a leak of FILE* pointers in sf_open_write(). Thanks to Sigbj�rn Skj�ret
- for spotting this one.
+ Fixed a leak of FILE* pointers in sf_open_write(). Thanks to Sigbj�rn
+ Skj�ret for spotting this one.
-2000-08-15 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2000-08-13 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
- * src/sndfile.c
- Fixed a leak of FILE* pointers in sf_open_read(). Thanks to Sigbj�rn Skj�ret
- for spotting this one.
-
-2000-08-13 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
-
* src/au_g72x.c src/G72x/g72x.c
Added G723 encoded AU file support.
@@ -586,15 +1431,15 @@
* tests/lossy_comp_test.c
Added tests for G721 and G723 encoded AU files.
-2000-08-06 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2000-08-06 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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 zip DOT com DOT au or copyright under a GPL/LGPL compatible
- license.
+ 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 zipworld DOT com DOT au or copyright
+ under a GPL/LGPL compatible license.
-2000-08-06 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2000-08-06 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* tests/lossy_comp_test.c
Fixed incorrect error message.
@@ -606,7 +1451,7 @@
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 zip DOT com DOT au>
+2000-08-05 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/*.[ch]
Removed double leading underscores from the start of all variable and
@@ -616,11 +1461,11 @@
* src/au_g72x.c src/G72x/*
Continued work on G721 encoded AU files.
-2000-07-12 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2000-07-12 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/G72x/*
- New files for reading/writing G721 and G723 ADPCM audio. These files
- are from a Sun Microsystems reference implementation released under a
+ 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.
@@ -628,12 +1473,12 @@
* src/au_g72x.c
New file for G721 encoded AU files.
-2000-07-08 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2000-07-08 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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 zip DOT com DOT au>
+2000-06-28 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/sndfile.c src/sndfile.h
Add checking for and handling of header-less u-law encoded AU/SND files.
@@ -643,21 +1488,21 @@
* src/au.h
New function for opening a headerless u-law encoded file for read.
-2000-06-04 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2000-06-04 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/paf.c
Add checking for files shorter than minimal PAF file header length.
-2000-06-02 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2000-06-02 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* tests/write_read_test.c
Added extra sf_perror() calls when sf_write_XXXX fails.
-2000-05-29 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2000-05-29 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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
+ 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]
@@ -666,80 +1511,80 @@
* tests/read_seek_test.c
Added extra debugging for when tests fail.
-2000-05-18 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2000-05-18 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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 zip DOT com DOT au>
+2000-04-25 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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.
+ 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 zip DOT com DOT au>
+2000-04-06 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/sndfile.h.in
Fixed comments about sf_perror () and sf_error_str ().
-2000-03-14 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2000-03-14 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* configure.in
Fixed --enable-justsrc option.
-2000-03-07 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2000-03-07 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* wav.c
Fixed checking of bytespersec field of header. Still some weirdness
with some files.
-2000-03-05 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2000-03-05 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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 zip DOT com DOT au>
+2000-02-29 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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 zip DOT com DOT au>
+2000-02-28 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* configure.in Makefile.am src/Makefile.am
- Finally got around to figuring out how to build a single library from
+ 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 zip DOT com DOT au>
+2000-01-03 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/wav.c
Added more error reporting in read_fmt_chunk().
-1999-12-21 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-12-21 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* examples/sfinfo.c
Modified program to accept multiple filenames from the command line.
-1999-11-27 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-11-27 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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 zip DOT com DOT au>
+1999-11-16 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/common.c
- Fixed put_int() and put_short() macros used by _psf_hprintf() which were
+ 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 zip DOT com DOT au>
+1999-11-15 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/common.c
Added string.h to includes. Thanks to Sigbjxrn Skjfret.
@@ -748,20 +1593,20 @@
Fixed __svx_close() function to ensure FORM and BODY chunks are correctly
set.
-1999-10-01 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-10-01 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/au.c
- Fixed handling of incorrect size field in AU header on read. Thanks to
+ 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 zip DOT com DOT au>
+1999-09-28 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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
+ 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 zip DOT com DOT au>
+1999-09-24 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/paf.c
Fixed a bug with reading and writing 24 bit stereo PAF files. This problem
@@ -768,28 +1613,29 @@
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 zip DOT com DOT au>
+1999-09-23 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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
+ 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
+ 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 zip DOT com DOT au>
+1999-09-22 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/svx.c
Finished off implementation of write using __psf_hprintf().
-1999-09-21 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-09-21 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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
+ it easier to do re-write the headers which will be required when
sf_rewrite_header() is implemented.
* src/common.c
@@ -796,11 +1642,11 @@
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 zip DOT com DOT au>
+1999-09-05 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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
+ (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
@@ -807,7 +1653,7 @@
Fixed default FORMsize in __aiff_open_write ().
* src/sndfile.c
- Added copy of filename to internal data structure. IFF/SVX files
+ 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.
@@ -815,7 +1661,7 @@
* src/svx.c
Started implementing writing of files.
-1999-08-04 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-08-04 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/svx.c
New file for reading/writing 8SVX and 16SVX files.
@@ -826,7 +1672,7 @@
* src/aiff.c
Fixed header parsing when unknown chunk is found.
-1999-08-01 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-08-01 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/paf.c
New file for reading/writing Ensoniq PARIS audio file format.
@@ -838,12 +1684,12 @@
Added stuff for sf_get_lib_version() function.
-1999-07-31 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-07-31 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/sndfile.h MacOS/config.h
Fixed minor MacOS configuration issues.
-1999-07-30 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-07-30 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* MacOS/
Added a new directory for the MacOS config.h file and the
@@ -853,16 +1699,16 @@
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 zip DOT com DOT au>
+1999-07-29 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/sndfile.c src/sndfile.h src/raw.c
Further fixing of #includes for MacOS.
-1999-07-25 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-07-25 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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
+ 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.
@@ -893,7 +1739,7 @@
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 zip DOT com DOT au>
+1999-07-24 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* configure.in
Removed sndfile.h from generated file list as there were no longer
@@ -905,14 +1751,14 @@
SF_INFO struct when calling sf_open_read ().
* src/sndfile.c
- Added support for raw header-less PCM files.
+ Added support for raw header-less PCM files.
-1999-07-22 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-07-22 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* examples/sfinfo.c
Removed options so the sfinfo program always prints out all the information.
-1999-07-19 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-07-19 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/alaw.c
New file for A-law encoding (similar to u-law).
@@ -923,18 +1769,18 @@
* 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 zip DOT com DOT au>
+1999-07-18 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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 zip DOT com DOT au>
+1999-07-18 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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 zip DOT com DOT au>
+1999-07-16 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/sndfile.h
Made corrections to comments on the return values from sf_seek ().
@@ -942,7 +1788,7 @@
* src/sndfile.c
Fixed boundary condition checking bug and accounting bug in sf_read_raw ().
-1999-07-15 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-07-15 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/au.c src/ulaw.c
Finished implementation of u-law encoded AU files.
@@ -955,15 +1801,15 @@
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 zip DOT com DOT au>
+1999-07-14 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* tests/adpcm_test.c
Initialised amp variable in gen_signal() to remove compiler warning.
-1999-07-12 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-07-12 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/aiff.c
- In __aiff_open_read () prevented fseek()ing beyond end of file which
+ 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.
@@ -970,7 +1816,7 @@
*src/wav.c
Fixed as above in __wav_open_read ().
-1999-07-01 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-07-01 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/wav_ms_adpcm.c
Implemented MS ADPCM encoding. Code cleanup of decoder.
@@ -982,23 +1828,23 @@
Fixed incorrect parameter in call to srate2blocksize () from
__ima_writer_init ().
-1999-06-23 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-06-23 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* tests/read_seek_test.c
Added test for 8 bit AIFF files.
-1999-06-18 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-06-18 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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.
+ Added -Wconversion to CFLAGS.
* src/*.c tests/*.c examples/*.c
- Fixed all warnings resulting from use of -Wconversion.
+ Fixed all warnings resulting from use of -Wconversion.
-1999-06-17 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-06-17 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/wav.c
Added fact chunk handling on read and write for all non WAVE_FORMAT_PCM
@@ -1010,16 +1856,17 @@
players.
* tests/adpcm_test.c
- Reimplemented adpcm_test_short and implemented adpcm_test_int and adpcm_test_double.
+ 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 zip DOT com DOT au>
+1999-06-15 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/wav_float.c
- Fixed function prototype for x86f2d_array () which was causing ocassional
+ 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 zip DOT com DOT au>
+1999-06-14 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/aiff.c
Fixed bug in __aiff_close where the length fields in the header were
@@ -1028,7 +1875,7 @@
* 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 zip DOT com DOT au>
+1999-06-12 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* Win32/*
Added a contribution from Albert Faber to allow libsndfile to compile
@@ -1035,7 +1882,7 @@
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 zip DOT com DOT au>
+1999-06-11 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* configure.in
Changed to reflect previous changes.
@@ -1043,13 +1890,13 @@
* 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
+ 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
+ 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 zip DOT com DOT au>
+1999-03-27 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/*.c
Changed all read/write/lseek function calls to fread/fwrite/
@@ -1063,22 +1910,22 @@
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 zip DOT com DOT au>
+1999-03-23 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/wav.c src/aiff.c
- Added handling for unknown chunk markers in the file.
+ Added handling for unknown chunk markers in the file.
-1999-03-22 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-03-22 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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
+ 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 zip DOT com DOT au>
+1999-03-21 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/wav_ima_adpcm.c
- Work on wav_ms_adpcm.c uncovered a bug in __ima_read () when reading
+ 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.
@@ -1086,7 +1933,7 @@
* src/wav_ms_adpcm.c
Decoder working correctly.
-1999-03-18 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-03-18 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* configure.in Makefile.am
Added --enable-justsrc configuration variable sent by Sam
@@ -1095,18 +1942,18 @@
* 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
+ 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 zip DOT com DOT au>
+1999-03-17 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/wav.c
- Started implementing MS ADPCM decoder.
+ 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?
+ length?
-1999-03-16 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-03-16 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/wav.c
Split code out of wav.c to create wav_float.c and wav_ima_adpcm.c.
@@ -1113,7 +1960,7 @@
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 zip DOT com DOT au>
+1999-03-14 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* tests/
Added adpcm_test.c which implements test functions for
@@ -1120,22 +1967,22 @@
IMA ADPCM reading/writing/seeking etc.
* src/wav.c
- Fixed many bugs in IMA ADPCM encoder and decoder.
+ Fixed many bugs in IMA ADPCM encoder and decoder.
-1999-03-11 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-03-11 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/wav.c
- Finished implementing IMA ADPCM encoder and decoder (what a bitch!).
+ Finished implementing IMA ADPCM encoder and decoder (what a bitch!).
-1999-03-03 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-03-03 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/wav.c
- Started implementing IMA ADPCM decoder.
+ Started implementing IMA ADPCM decoder.
-1999-03-02 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-03-02 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/sndfile.c
- Fixed bug where the sf_read_XXX functions were returning a
+ 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.
@@ -1145,7 +1992,7 @@
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 zip DOT com DOT au>
+1999-02-21 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* tests/write_read_test.c
Added tests for little DEC endian AU files.
@@ -1153,7 +2000,7 @@
* src/au.c
Add handling for DEC format little endian AU files.
-1999-02-20 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-02-20 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/aiff.c src/au.c src/wav.c
Add __psf_sprintf calls during header parsing.
@@ -1170,7 +2017,7 @@
* src/aiff.c
On write, set blocksize in SSND chunk to zero like everybody else.
-1999-02-16 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-02-16 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/pcm.c:
Fixed bug in let2s_array (cptr was not being initialised).
@@ -1179,13 +2026,13 @@
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 zip DOT com DOT au>
+1999-02-15 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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 zip DOT com DOT au>
+1999-02-14 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/pcm.c:
Fixed a bug which was causing errors in the reading
@@ -1194,7 +2041,7 @@
* doc/api.html
Finished of preliminary documentaion.
-1999-02-13 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+1999-02-13 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* src/aiff.c:
Changed reading of 'COMM' chunk to avoid reading an int
--- a/common/libsndfile/MacOS/MacOS-readme.txt
+++ b/common/libsndfile/MacOS/MacOS-readme.txt
@@ -64,19 +64,3 @@
information about libsndfile.
-CONTACTS
---------
-
-libsndfile was written by Erik de Castro Lopo ([email protected]).
-The libsndfile home page is at :
-
- http://www.zip.com.au/~erikd/libsndfile/
-
-MacOS-specific questions, and issues specific to the instructions
-contained in this document should be directed to Ben "Jacobs" at the
-address below.
-
-
-Good luck,
-
--Ben "Jacobs" <[email protected]>
--- a/common/libsndfile/MacOS/Makefile.am
+++ b/common/libsndfile/MacOS/Makefile.am
@@ -1,1 +1,3 @@
-EXTRA_DIST = config.h MacOS-readme.txt
+EXTRA_DIST = config.h MacOS-readme.txt
+
+DISTCLEANFILES = Makefile
--- a/common/libsndfile/MacOS/Makefile.in
+++ b/common/libsndfile/MacOS/Makefile.in
@@ -66,17 +66,28 @@
AS = @AS@
CC = @CC@
DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+EXEEXT = @EXEEXT@
+GETCONF = @GETCONF@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
MAKEINFO = @MAKEINFO@
OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_SPECIFIC_INCLUDES = @OS_SPECIFIC_INCLUDES@
+OS_SPECIFIC_LINKS = @OS_SPECIFIC_LINKS@
PACKAGE = @PACKAGE@
RANLIB = @RANLIB@
SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+STRIP = @STRIP@
VERSION = @VERSION@
+ac_cv_sys_largefile_CFLAGS = @ac_cv_sys_largefile_CFLAGS@
+autogen = @autogen@
subdirs = @subdirs@
EXTRA_DIST = config.h MacOS-readme.txt
+
+DISTCLEANFILES = Makefile
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../src/config.h
CONFIG_CLEAN_FILES =
@@ -90,7 +101,7 @@
all: all-redirect
.SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
- cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps MacOS/Makefile
+ cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps MacOS/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \
@@ -148,6 +159,7 @@
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
mostlyclean-am: mostlyclean-generic
--- a/common/libsndfile/MacOS/config.h
+++ b/common/libsndfile/MacOS/config.h
@@ -1,39 +1,9 @@
/* src/config.h. Generated automatically by configure. */
-/* src/config.h.in. Generated automatically from configure.in by autoheader. */
+/* src/config.h.in. Generated automatically from configure.in by autoheader 2.13. */
-/* Define to `long' if <sys/types.h> doesn't define. */
-/* #undef off_t */
-
-/* Define to `unsigned' if <sys/types.h> doesn't define. */
-/* #undef size_t */
-
/* Define if you have the ANSI C header files. */
#define STDC_HEADERS 1
-/* Define to `long' if <sys/types.h> doesn't define. */
-/* #undef off_t */
-
-/* Define to `unsigned' if <sys/types.h> doesn't define. */
-/* #undef size_t */
-
-/* Define if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Set to 1 if the processor is big endian, otherwise set to 0. */
-#ifdef __MWERKS__
-#ifdef _WIN32
-#define GUESS_BIG_ENDIAN 0
-#define GUESS_LITTLE_ENDIAN 1
-#else
-#define GUESS_BIG_ENDIAN 1
-#define GUESS_LITTLE_ENDIAN 0
-#endif
-#endif
-
-/* Set to 1 to force the use of code for processors with broken floats */
-/* Otherwise set it to 0. */
-#define FORCE_BROKEN_FLOAT 0
-
/* The number of bytes in a double. */
#define SIZEOF_DOUBLE 8
@@ -46,6 +16,9 @@
/* The number of bytes in a long. */
#define SIZEOF_LONG 4
+/* The number of bytes in a off_t. */
+#define SIZEOF_OFF_T 4
+
/* The number of bytes in a short. */
#define SIZEOF_SHORT 2
@@ -52,30 +25,24 @@
/* The number of bytes in a void*. */
#define SIZEOF_VOIDP 4
-/* Define if you have the fclose function. */
-#define HAVE_FCLOSE 1
-
-/* Define if you have the fopen function. */
-#define HAVE_FOPEN 1
-
-/* Define if you have the fread function. */
-#define HAVE_FREAD 1
-
/* Define if you have the free function. */
#define HAVE_FREE 1
-/* Define if you have the fseek function. */
-#define HAVE_FSEEK 1
+/* Define if you have the fstat function. */
+#define HAVE_FSTAT 1
-/* Define if you have the ftell function. */
-#define HAVE_FTELL 1
+/* Define if you have the lseek function. */
+#define HAVE_LSEEK 1
-/* Define if you have the fwrite function. */
-#define HAVE_FWRITE 1
-
/* Define if you have the malloc function. */
#define HAVE_MALLOC 1
+/* Define if you have the open function. */
+#define HAVE_OPEN 1
+
+/* Define if you have the read function. */
+#define HAVE_READ 1
+
/* Define if you have the snprintf function. */
#define HAVE_SNPRINTF 1
@@ -82,6 +49,12 @@
/* Define if you have the vsnprintf function. */
#define HAVE_VSNPRINTF 1
+/* Define if you have the write function. */
+#define HAVE_WRITE 1
+
+/* Define if you have the <dlfcn.h> header file. */
+#define HAVE_DLFCN_H 1
+
/* Define if you have the <endian.h> header file. */
#define HAVE_ENDIAN_H 1
@@ -89,5 +62,35 @@
#define PACKAGE "libsndfile"
/* Version number of package */
-#define VERSION "0.0.26"
+#define VERSION "1.0.0rc2"
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+/* #undef _FILE_OFFSET_BITS 64 */
+
+/* Define to make fseeko etc. visible, on some hosts. */
+/* #undef _LARGEFILE_SOURCE */
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef _LARGE_FILES */
+
+/* Target processor is big endian. */
+#define CPU_IS_BIG_ENDIAN 1
+
+/* Target processor is little endian. */
+#define CPU_IS_LITTLE_ENDIAN 0
+
+/* Define if you have C99's lrint function. */
+#define HAVE_LRINT 1
+
+/* Define if you have C99's lrintf function. */
+#define HAVE_LRINTF 1
+
+/* Set to 1 to force the use of code for processors with broken floats */
+#define FORCE_BROKEN_FLOAT 0
+
+/* Set to 1 to force the use of code for processors with broken floats */
+#define FORCE_BROKEN_FLOAT 0
+
+/* Set to 1 if compiling for Win32 */
+#define OS_IS_WIN32 0
--- a/common/libsndfile/Makefile.am
+++ b/common/libsndfile/Makefile.am
@@ -1,5 +1,10 @@
DIST_SUBDIRS = src examples doc tests Win32 MacOS
SUBDIRS = @subdirs@
-EXTRA_DIST = reconf acconfig.h libsndfile.spec.in libsndfile.spec \
- check_libsndfile.py
+EXTRA_DIST = reconf acinclude.m4 libsndfile.spec.in sndfile.pc.in \
+ check_libsndfile.py libsndfile_version_convert.py
+
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = sndfile.pc
+m4datadir = $(datadir)/aclocal
--- a/common/libsndfile/Makefile.in
+++ b/common/libsndfile/Makefile.in
@@ -66,28 +66,44 @@
AS = @AS@
CC = @CC@
DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+EXEEXT = @EXEEXT@
+GETCONF = @GETCONF@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
MAKEINFO = @MAKEINFO@
OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_SPECIFIC_INCLUDES = @OS_SPECIFIC_INCLUDES@
+OS_SPECIFIC_LINKS = @OS_SPECIFIC_LINKS@
PACKAGE = @PACKAGE@
RANLIB = @RANLIB@
SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+STRIP = @STRIP@
VERSION = @VERSION@
+ac_cv_sys_largefile_CFLAGS = @ac_cv_sys_largefile_CFLAGS@
+autogen = @autogen@
subdirs = @subdirs@
DIST_SUBDIRS = src examples doc tests Win32 MacOS
SUBDIRS = @subdirs@
-EXTRA_DIST = reconf acconfig.h libsndfile.spec.in libsndfile.spec check_libsndfile.py
+EXTRA_DIST = reconf acinclude.m4 libsndfile.spec.in sndfile.pc.in check_libsndfile.py libsndfile_version_convert.py
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = sndfile.pc
+
+m4datadir = $(datadir)/aclocal
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ./src/config.h
-CONFIG_CLEAN_FILES = libsndfile.spec
+CONFIG_CLEAN_FILES = libsndfile.spec sndfile.pc
+DATA = $(pkgconfig_DATA)
+
DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \
-Makefile.in NEWS TODO acconfig.h aclocal.m4 config.guess config.sub \
+Makefile.in NEWS TODO acinclude.m4 aclocal.m4 config.guess config.sub \
configure configure.in install-sh libsndfile.spec.in ltconfig ltmain.sh \
-missing mkinstalldirs src/config.h.in src/stamp-h.in
+missing mkinstalldirs sndfile.pc.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
@@ -97,13 +113,13 @@
all: all-redirect
.SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
- cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps Makefile
+ cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \
&& CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
-$(ACLOCAL_M4): configure.in
+$(ACLOCAL_M4): configure.in acinclude.m4
cd $(srcdir) && $(ACLOCAL)
config.status: $(srcdir)/configure.in $(CONFIG_STATUS_DEPENDENCIES)
@@ -110,37 +126,30 @@
$(SHELL) ./config.status --recheck
$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
cd $(srcdir) && $(AUTOCONF)
-
-src/config.h: src/stamp-h
- @if test ! -f $@; then \
- rm -f src/stamp-h; \
- $(MAKE) src/stamp-h; \
- else :; fi
-src/stamp-h: $(srcdir)/src/config.h.in $(top_builddir)/config.status
- cd $(top_builddir) \
- && CONFIG_FILES= CONFIG_HEADERS=src/config.h \
- $(SHELL) ./config.status
- @echo timestamp > src/stamp-h 2> /dev/null
-$(srcdir)/src/config.h.in: $(srcdir)/src/stamp-h.in
- @if test ! -f $@; then \
- rm -f $(srcdir)/src/stamp-h.in; \
- $(MAKE) $(srcdir)/src/stamp-h.in; \
- else :; fi
-$(srcdir)/src/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h
- cd $(top_srcdir) && $(AUTOHEADER)
- @echo timestamp > $(srcdir)/src/stamp-h.in 2> /dev/null
-
-mostlyclean-hdr:
-
-clean-hdr:
-
-distclean-hdr:
- -rm -f src/config.h
-
-maintainer-clean-hdr:
libsndfile.spec: $(top_builddir)/config.status libsndfile.spec.in
cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+sndfile.pc: $(top_builddir)/config.status sndfile.pc.in
+ cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+install-pkgconfigDATA: $(pkgconfig_DATA)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(pkgconfigdir)
+ @list='$(pkgconfig_DATA)'; for p in $$list; do \
+ if test -f $(srcdir)/$$p; then \
+ echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkgconfigdir)/$$p"; \
+ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(pkgconfigdir)/$$p; \
+ else if test -f $$p; then \
+ echo " $(INSTALL_DATA) $$p $(DESTDIR)$(pkgconfigdir)/$$p"; \
+ $(INSTALL_DATA) $$p $(DESTDIR)$(pkgconfigdir)/$$p; \
+ fi; fi; \
+ done
+
+uninstall-pkgconfigDATA:
+ @$(NORMAL_UNINSTALL)
+ list='$(pkgconfig_DATA)'; for p in $$list; do \
+ rm -f $(DESTDIR)$(pkgconfigdir)/$$p; \
+ done
+
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
@@ -299,20 +308,21 @@
install-exec-am:
install-exec: install-exec-recursive
-install-data-am:
+install-data-am: install-pkgconfigDATA
install-data: install-data-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
install: install-recursive
-uninstall-am:
+uninstall-am: uninstall-pkgconfigDATA
uninstall: uninstall-recursive
-all-am: Makefile
+all-am: Makefile $(DATA)
all-redirect: all-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
installdirs: installdirs-recursive
installdirs-am:
+ $(mkinstalldirs) $(DESTDIR)$(pkgconfigdir)
mostlyclean-generic:
@@ -324,22 +334,22 @@
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
maintainer-clean-generic:
-mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic
+mostlyclean-am: mostlyclean-tags mostlyclean-generic
mostlyclean: mostlyclean-recursive
-clean-am: clean-hdr clean-tags clean-generic mostlyclean-am
+clean-am: clean-tags clean-generic mostlyclean-am
clean: clean-recursive
-distclean-am: distclean-hdr distclean-tags distclean-generic clean-am
+distclean-am: distclean-tags distclean-generic clean-am
-rm -f libtool
distclean: distclean-recursive
-rm -f config.status
-maintainer-clean-am: maintainer-clean-hdr maintainer-clean-tags \
- maintainer-clean-generic distclean-am
+maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \
+ distclean-am
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
@@ -346,7 +356,7 @@
maintainer-clean: maintainer-clean-recursive
-rm -f config.status
-.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
+.PHONY: uninstall-pkgconfigDATA install-pkgconfigDATA \
install-data-recursive uninstall-data-recursive install-exec-recursive \
uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
all-recursive check-recursive installcheck-recursive info-recursive \
--- a/common/libsndfile/NEWS
+++ b/common/libsndfile/NEWS
@@ -1,95 +1,12 @@
-Version 0.0.26 (2001-09-30)
- * Offical release.
- * Changed how A-law and u-law WAV file headers are written to allow files generated
- by libsndfile to be read by M$ windoze.
- * Added IRCAM file support.
- * Minor bug fixes.
- * This will be the last release in the 0.0.X development stream apart from bug fixes.
- A new deveopement stream with minor interface changes in already in development.
+Version 1.0.0rc2 (2002-06-24)
+ * Release candidate 2 for the 1.0.0 series.
+ * Fix compile problem for Win32.
-Version 0.0.25 (2001-09-24)
- * Offical release.
- * Added sf_command () interface which allows switching normalisation on and off for
- sf_read/write_float () methods.
- * Minor bug fixes.
- * This will be the last release in the 0.0.X development stream apart from bug fixes.
- A new deveopement stream with minor interface changes in already in development.
+Version 1.0.0rc1 (2002-06-24)
+ * Release candidate 1 for the 1.0.0 series.
-Version 0.0.24 (2001-08-19)
- * Offical release.
- * Massive refactoring of header reading code for all file formats.
- * Added sf_read_float () and sf_write_float () interfaces.
- * Minor bug fixes.
+Version 0.0.28 (2002-04-27)
+ * Last offical release of 0.0.X series of the library.
-Version 0.0.23 (2001-07-06)
- * Offical release.
- * Massive refactoring of header writing code for all file formats.
- * Added support for Sphere NIST.
- * Added support for 32 bit float AIFF and little endian AIFF files (Mac OSX).
- * Added read and write support for the PEAK chunk in 32 bit float AIFF and WAV files.
- * Added support for REX files (Propellorheads Reason).
- * Minor bug fixes.
-
-Version 0.0.22 (2000-10-17)
- * Offical release.
- * Bug fix in G723 AU file handling.
-
-Version 0.0.21 (2000-08-16)
- * Offical release.
- * AU files without the normal AU file header are now recognised as headerless
- 8kHz 8 bit ulaw encoded files.
- * Added handling for G721 4bit APDCM encoded AU files.
- * Added handling for G723 3bit APDCM encoded AU files.
- * Improved Win32 compiling and use instructions from Mike Ricos.
- * License change from GPL to LGPL.
-
-Version 0.0.20 (2000-05-30)
- * Offical release.
- * Minor bug fix for LinuxPPC (endian issues).
-
-Version 0.0.19 (2000-05-20)
- * Offical release.
- * Minor bug fix for handling GSM 6.10 encoded WAV files on big endian machines.
-
-Version 0.0.18 (2000-04-25)
- * Offical release.
- * Added handling for GSM 6.10 encoded WAV files.
- * Minor bug fixes.
-
-Version 0.0.17 (1999-11-16)
- * Offical release.
- * New file formats (SVX and PAF).
- * Minor bug fixes.
-
-Version 0.0.16 (1999-07-31)
- * Offical release.
- * Fixed minor MacOS configuration issues.
-
-Version 0.0.15 (1999-07-30)
- * Offical release.
- * Added MS ADPCM WAV file write.
- * Added WAV and AU file A-law and u-law encoding.
- * Added RAW header-less PCM file handling.
- * Added MacOS support (thanks to Ben "Jacobs").
-
-Version 0.0.12 (1999-06-19)
- * Offical release.
- * Code cleanup to remove compiler warning messages.
-
-Version 0.0.10 (1999-06-12)
- * Unoffical release.
- * Changes to low level code which improve error detection and handling.
- * Added read-only handling of Microsoft ADPCM WAV files.
- * Added Win32 support (almost exclusively due to Albert Faber, thanks).
- * Fixed bug in IMA ADPCM file writing.
-
-Version 0.0.9 (1999-03-14)
- * Add handling of IMA ADPCM WAV files.
- * Add new function sf_get_header_info and add example program sfinfo.
- * Implemented 8 bit PCM data formats for AIFF, AU and WAV.
-
Version 0.0.8 (1999-02-16)
* First offical release.
-
-Version 0.0.7 (1999-02-13)
- * First unoffical release.
--- a/common/libsndfile/README
+++ b/common/libsndfile/README
@@ -1,4 +1,4 @@
-This is libsndfile, 0.0.26
+This is libsndfile, 1.0.1rc2 (Release Candidate 2)
libsndfile is a library of C routines for reading and writing
files containing sampled audio data.
@@ -29,12 +29,24 @@
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 Sum Microsystems
+The src/G72x directory contains code written and released by Sun Microsystems
under a suitably free license.
+
+Win32
+-----
+There are detailed instructions for building libsndfile on Win32 in the file
+
+ doc/win32.html
+
+
+MacOSX
+------
+Building on MacOSX should be the same as building it on any other Unix.
+
+
OTHER PLATFORMS
---------------
-
To compile libsndfile on platforms which have a Bourne Shell compatible
shell, an ANSI C compiler and a make utility should require no more that
the following three commands :
@@ -55,7 +67,7 @@
CONTACTS
--------
-libsndfile was written by Erik de Castro Lopo (erikd AT zip DOT com DOT au).
+libsndfile was written by Erik de Castro Lopo (erikd AT zipworld DOT com DOT au).
The libsndfile home page is at :
http://www.zip.com.au/~erikd/libsndfile/
--- a/common/libsndfile/TODO
+++ b/common/libsndfile/TODO
@@ -16,10 +16,6 @@
o Test sf_seek function on write???
- o Get hold of a couple of Sun/Next AU files containing 32 and 64 bit
- floating point data write code to read and write them (well at least
- the 32 bit ones).
-
o Add more sound file formats. People should contact me with their
requirements.
--- a/common/libsndfile/Win32/Makefile.am
+++ b/common/libsndfile/Win32/Makefile.am
@@ -1,3 +1,3 @@
-EXTRA_DIST = README-Win32.txt README-Win32.txt.old \
- config.h unistd.h
+EXTRA_DIST = README-Win32.txt config.h unistd.h libsndfile.def Makefile.msvc
+
--- a/common/libsndfile/Win32/Makefile.in
+++ b/common/libsndfile/Win32/Makefile.in
@@ -66,18 +66,26 @@
AS = @AS@
CC = @CC@
DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+EXEEXT = @EXEEXT@
+GETCONF = @GETCONF@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
MAKEINFO = @MAKEINFO@
OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_SPECIFIC_INCLUDES = @OS_SPECIFIC_INCLUDES@
+OS_SPECIFIC_LINKS = @OS_SPECIFIC_LINKS@
PACKAGE = @PACKAGE@
RANLIB = @RANLIB@
SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+STRIP = @STRIP@
VERSION = @VERSION@
+ac_cv_sys_largefile_CFLAGS = @ac_cv_sys_largefile_CFLAGS@
+autogen = @autogen@
subdirs = @subdirs@
-EXTRA_DIST = README-Win32.txt README-Win32.txt.old config.h unistd.h
-
+EXTRA_DIST = README-Win32.txt config.h unistd.h libsndfile.def Makefile.msvc
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = ../src/config.h
CONFIG_CLEAN_FILES =
@@ -91,7 +99,7 @@
all: all-redirect
.SUFFIXES:
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
- cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps Win32/Makefile
+ cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps Win32/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \
--- /dev/null
+++ b/common/libsndfile/Win32/Makefile.msvc
@@ -1,0 +1,401 @@
+
+# Set the value of $(MSVCDir) for your installation.
+
+MSVCDir="C:\Progra~1\Micros~1\VC98"
+
+CPP=cl.exe
+LINK32=link.exe
+DLL_LINK_FLAGS=/nologo /dll /incremental:no /libpath:"$(MSVCDir)\Lib" /pdb:"libsndfile.pdb" /implib:".\libsndfile.lib" /machine:I386 /out:"libsndfile.dll"
+PROG_LINK_FLAGS=/nologo /incremental:no /libpath:"$(MSVCDir)\Lib" /pdb:"libsndfile.pdb" /machine:I386 /exetype:dynamic
+
+CFLAGS=/nologo /MD /W1 /GX /O2 /I "src" /I "Win32" /I "$(MSVCDir)\Include" /D "WIN32" /D "_USRDLL" /YX /FD
+
+#====================================================================
+# Targets
+
+ALL : libsndfile.dll ".\examples\sndfile-info.exe"
+
+CLEAN :
+ -@erase "src\*.obj"
+ -@erase "src\G72x\*.obj"
+ -@erase "src\GSM610\*.obj"
+ -@erase "tests\*.exe"
+
+#====================================================================
+
+LINK32_OBJS= \
+ ".\src\GSM610\add.obj" \
+ ".\src\GSM610\code.obj" \
+ ".\src\GSM610\decode.obj" \
+ ".\src\GSM610\gsm_create.obj" \
+ ".\src\GSM610\gsm_decode.obj" \
+ ".\src\GSM610\gsm_destroy.obj" \
+ ".\src\GSM610\gsm_encode.obj" \
+ ".\src\GSM610\gsm_option.obj" \
+ ".\src\GSM610\long_term.obj" \
+ ".\src\GSM610\lpc.obj" \
+ ".\src\GSM610\preprocess.obj" \
+ ".\src\GSM610\rpe.obj" \
+ ".\src\GSM610\short_term.obj" \
+ ".\src\GSM610\table.obj" \
+ ".\src\G72x\g721.obj" \
+ ".\src\G72x\g723_16.obj" \
+ ".\src\G72x\g723_24.obj" \
+ ".\src\G72x\g723_40.obj" \
+ ".\src\G72x\g72x.obj" \
+ ".\src\aiff.obj" \
+ ".\src\alaw.obj" \
+ ".\src\au.obj" \
+ ".\src\au_g72x.obj" \
+ ".\src\common.obj" \
+ ".\src\double64.obj" \
+ ".\src\dwvw.obj" \
+ ".\src\file_io.obj" \
+ ".\src\float32.obj" \
+ ".\src\command.obj" \
+ ".\src\ima_adpcm.obj" \
+ ".\src\ircam.obj" \
+ ".\src\ms_adpcm.obj" \
+ ".\src\nist.obj" \
+ ".\src\paf.obj" \
+ ".\src\pcm.obj" \
+ ".\src\raw.obj" \
+ ".\src\rx2.obj" \
+ ".\src\samplitude.obj" \
+ ".\src\sd2.obj" \
+ ".\src\sndfile.obj" \
+ ".\src\svx.obj" \
+ ".\src\txw.obj" \
+ ".\src\ulaw.obj" \
+ ".\src\voc.obj" \
+ ".\src\w64.obj" \
+ ".\src\wav.obj" \
+ ".\src\gsm610.obj" \
+ ".\src\wav_w64.obj"
+
+libsndfile.dll : $(LINK32_OBJS) ".\Win32\libsndfile.def"
+ $(LINK32) $(DLL_LINK_FLAGS) /def:".\Win32\libsndfile.def" $(LINK32_OBJS)
+
+".\examples\sndfile-info.exe" : ".\examples\sndfile-info.c"
+ $(CPP) $(CFLAGS) /Fo".\examples\sndfile-info.obj" /c ".\examples\sndfile-info.c"
+ $(LINK32) $(PROG_LINK_FLAGS) /out:".\examples\sndfile-info.exe" ".\examples\sndfile-info.obj" libsndfile.lib
+
+TEST_PROGS= \
+ ".\tests\sfversion.exe" \
+ ".\tests\error_test.exe" \
+ ".\tests\pcm_test.exe" \
+ ".\tests\ulaw_test.exe" \
+ ".\tests\alaw_test.exe" \
+ ".\tests\dwvw_test.exe" \
+ ".\tests\command_test.exe" \
+ ".\tests\floating_point_test.exe" \
+ ".\tests\headerless_test.exe" \
+ ".\tests\write_read_test.exe" \
+ ".\tests\lossy_comp_test.exe" \
+ ".\tests\peak_chunk_test.exe"
+
+CHECK: $(TEST_PROGS)
+ ".\tests\error_test.exe"
+ ".\tests\pcm_test.exe"
+ ".\tests\ulaw_test.exe"
+ ".\tests\alaw_test.exe"
+ ".\tests\dwvw_test.exe"
+ ".\tests\command_test.exe" ver
+ ".\tests\command_test.exe" norm
+ ".\tests\command_test.exe" format
+ ".\tests\floating_point_test.exe"
+ ".\tests\headerless_test.exe"
+ -@echo ----------------------------------------------------------------------
+ -@".\tests\sfversion.exe"
+ -@echo passed common tests
+ -@echo ----------------------------------------------------------------------
+ ".\tests\write_read_test" wav
+ ".\tests\lossy_comp_test" wav_ima
+ ".\tests\lossy_comp_test" wav_msadpcm
+ ".\tests\lossy_comp_test" wav_ulaw
+ ".\tests\lossy_comp_test" wav_alaw
+ ".\tests\lossy_comp_test" wav_gsm610
+ ".\tests\peak_chunk_test" wav
+ -@echo ----------------------------------------------------------------------
+ -@".\tests\sfversion.exe"
+ -@echo "passed tests on WAV files.
+ -@echo ----------------------------------------------------------------------
+ ".\tests\write_read_test" aiff
+ ".\tests\lossy_comp_test" aiff_ulaw
+ ".\tests\lossy_comp_test" aiff_alaw
+ ".\tests\peak_chunk_test" aiff
+ -@echo ----------------------------------------------------------------------
+ -@".\tests\sfversion.exe"
+ -@echo " passed tests on AIFF files."
+ -@echo ----------------------------------------------------------------------
+ ".\tests\write_read_test" au
+ ".\tests\lossy_comp_test" au_ulaw
+ ".\tests\lossy_comp_test" au_alaw
+ ".\tests\lossy_comp_test" au_g721
+ ".\tests\lossy_comp_test" au_g723
+ -@echo ----------------------------------------------------------------------
+ -@".\tests\sfversion.exe"
+ -@echo " passed tests on AU files."
+ -@echo ----------------------------------------------------------------------
+ ".\tests\write_read_test" raw
+ ".\tests\lossy_comp_test" raw_ulaw
+ ".\tests\lossy_comp_test" raw_alaw
+ -@echo ----------------------------------------------------------------------
+ -@".\tests\sfversion.exe"
+ -@echo " passed tests on RAW (header-less) files."
+ -@echo ----------------------------------------------------------------------
+ ".\tests\write_read_test" paf
+ -@echo ----------------------------------------------------------------------
+ -@".\tests\sfversion.exe"
+ -@echo " passed tests on PAF files."
+ -@echo ----------------------------------------------------------------------
+ ".\tests\write_read_test" svx
+ -@echo ----------------------------------------------------------------------
+ -@".\tests\sfversion.exe"
+ -@echo " passed tests on SVX files."
+ -@echo ----------------------------------------------------------------------
+ ".\tests\write_read_test" nist
+ -@echo ----------------------------------------------------------------------
+ -@".\tests\sfversion.exe"
+ -@echo " passed tests on NIST files."
+ -@echo ----------------------------------------------------------------------
+ ".\tests\write_read_test" ircam
+ ".\tests\lossy_comp_test" ircam_ulaw
+ ".\tests\lossy_comp_test" ircam_alaw
+ -@echo ----------------------------------------------------------------------
+ -@".\tests\sfversion.exe"
+ -@echo " passed tests on IRCAM files."
+ -@echo ----------------------------------------------------------------------
+ ".\tests\write_read_test" voc
+ ".\tests\lossy_comp_test" voc_ulaw
+ ".\tests\lossy_comp_test" voc_alaw
+ -@echo ----------------------------------------------------------------------
+ -@".\tests\sfversion.exe"
+ -@echo " passed tests on VOC files."
+ -@echo ----------------------------------------------------------------------
+ ".\tests\write_read_test" w64
+ ".\tests\lossy_comp_test" w64_ima
+ ".\tests\lossy_comp_test" w64_msadpcm
+ ".\tests\lossy_comp_test" w64_ulaw
+ ".\tests\lossy_comp_test" w64_alaw
+ ".\tests\lossy_comp_test" w64_gsm610
+ -@echo ----------------------------------------------------------------------
+ -@".\tests\sfversion.exe"
+ -@echo " passed tests on W64 files."
+ -@echo ----------------------------------------------------------------------
+
+#====================================================================
+# C files in src\GSM610.
+
+".\src\GSM610\add.obj" : ".\src\Gsm610\add.c"
+ $(CPP) $(CFLAGS) /Fo".\src\Gsm610\add.obj" /c ".\src\Gsm610\add.c"
+
+".\src\GSM610\code.obj" : ".\src\Gsm610\code.c"
+ $(CPP) $(CFLAGS) /Fo".\src\Gsm610\code.obj" /c ".\src\Gsm610\code.c"
+
+".\src\GSM610\decode.obj" : ".\src\Gsm610\decode.c"
+ $(CPP) $(CFLAGS) /Fo".\src\Gsm610\decode.obj" /c ".\src\Gsm610\decode.c"
+
+".\src\GSM610\gsm_create.obj" : ".\src\Gsm610\gsm_create.c"
+ $(CPP) $(CFLAGS) /Fo".\src\Gsm610\gsm_create.obj" /c ".\src\Gsm610\gsm_create.c"
+
+".\src\GSM610\gsm_decode.obj" : ".\src\Gsm610\gsm_decode.c"
+ $(CPP) $(CFLAGS) /Fo".\src\Gsm610\gsm_decode.obj" /c ".\src\Gsm610\gsm_decode.c"
+
+".\src\GSM610\gsm_destroy.obj" : ".\src\Gsm610\gsm_destroy.c"
+ $(CPP) $(CFLAGS) /Fo".\src\Gsm610\gsm_destroy.obj" /c ".\src\Gsm610\gsm_destroy.c"
+
+".\src\GSM610\gsm_encode.obj" : ".\src\Gsm610\gsm_encode.c"
+ $(CPP) $(CFLAGS) /Fo".\src\Gsm610\gsm_encode.obj" /c ".\src\Gsm610\gsm_encode.c"
+
+".\src\GSM610\gsm_option.obj" : ".\src\Gsm610\gsm_option.c"
+ $(CPP) $(CFLAGS) /Fo".\src\Gsm610\gsm_option.obj" /c ".\src\Gsm610\gsm_option.c"
+
+".\src\GSM610\long_term.obj" : ".\src\Gsm610\long_term.c"
+ $(CPP) $(CFLAGS) /Fo".\src\Gsm610\long_term.obj" /c ".\src\Gsm610\long_term.c"
+
+".\src\GSM610\lpc.obj" : ".\src\Gsm610\lpc.c"
+ $(CPP) $(CFLAGS) /Fo".\src\Gsm610\lpc.obj" /c ".\src\Gsm610\lpc.c"
+
+".\src\GSM610\preprocess.obj" : ".\src\Gsm610\preprocess.c"
+ $(CPP) $(CFLAGS) /Fo".\src\Gsm610\preprocess.obj" /c ".\src\Gsm610\preprocess.c"
+
+".\src\GSM610\rpe.obj" : ".\src\Gsm610\rpe.c"
+ $(CPP) $(CFLAGS) /Fo".\src\Gsm610\rpe.obj" /c ".\src\Gsm610\rpe.c"
+
+".\src\GSM610\short_term.obj" : ".\src\Gsm610\short_term.c"
+ $(CPP) $(CFLAGS) /Fo".\src\Gsm610\short_term.obj" /c ".\src\Gsm610\short_term.c"
+
+".\src\GSM610\table.obj" : ".\src\Gsm610\table.c"
+ $(CPP) $(CFLAGS) /Fo".\src\Gsm610\table.obj" /c ".\src\Gsm610\table.c"
+
+#====================================================================
+# C files in src\G72x.
+
+".\src\G72x\g721.obj" : ".\src\G72x\g721.c"
+ $(CPP) $(CFLAGS) /Fo".\src\G72x\g721.obj" /c ".\src\G72x\g721.c"
+
+".\src\G72x\g723_16.obj" : ".\src\G72x\g723_16.c"
+ $(CPP) $(CFLAGS) /Fo".\src\G72x\g723_16.obj" /c ".\src\G72x\g723_16.c"
+
+".\src\G72x\g723_24.obj" : ".\src\G72x\g723_24.c"
+ $(CPP) $(CFLAGS) /Fo".\src\G72x\g723_24.obj" /c ".\src\G72x\g723_24.c"
+
+".\src\G72x\g723_40.obj" : ".\src\G72x\g723_40.c"
+ $(CPP) $(CFLAGS) /Fo".\src\G72x\g723_40.obj" /c ".\src\G72x\g723_40.c"
+
+".\src\G72x\g72x.obj" : ".\src\G72x\g72x.c"
+ $(CPP) $(CFLAGS) /Fo".\src\G72x\g72x.obj" /c ".\src\G72x\g72x.c"
+
+#====================================================================
+# C files in src.
+
+".\src\aiff.obj" : ".\src\aiff.c"
+ $(CPP) $(CFLAGS) /Fo".\src\aiff.obj" /c ".\src\aiff.c"
+
+".\src\alaw.obj" : ".\src\alaw.c"
+ $(CPP) $(CFLAGS) /Fo".\src\alaw.obj" /c ".\src\alaw.c"
+
+".\src\au.obj" : ".\src\au.c"
+ $(CPP) $(CFLAGS) /Fo".\src\au.obj" /c ".\src\au.c"
+
+".\src\au_g72x.obj" : ".\src\au_g72x.c"
+ $(CPP) $(CFLAGS) /Fo".\src\au_g72x.obj" /c ".\src\au_g72x.c"
+
+".\src\common.obj" : ".\src\common.c"
+ $(CPP) $(CFLAGS) /Fo".\src\common.obj" /c ".\src\common.c"
+
+".\src\double64.obj" : ".\src\double64.c"
+ $(CPP) $(CFLAGS) /Fo".\src\double64.obj" /c ".\src\double64.c"
+
+".\src\dwvw.obj" : ".\src\dwvw.c"
+ $(CPP) $(CFLAGS) /Fo".\src\dwvw.obj" /c ".\src\dwvw.c"
+
+".\src\file_io.obj" : ".\src\file_io.c"
+ $(CPP) $(CFLAGS) /Fo".\src\file_io.obj" /c ".\src\file_io.c"
+
+".\src\float32.obj" : ".\src\float32.c"
+ $(CPP) $(CFLAGS) /Fo".\src\float32.obj" /c ".\src\float32.c"
+
+".\src\command.obj" : ".\src\command.c"
+ $(CPP) $(CFLAGS) /Fo".\src\command.obj" /c ".\src\command.c"
+
+".\src\ima_adpcm.obj" : ".\src\ima_adpcm.c"
+ $(CPP) $(CFLAGS) /Fo".\src\ima_adpcm.obj" /c ".\src\ima_adpcm.c"
+
+".\src\ircam.obj" : ".\src\ircam.c"
+ $(CPP) $(CFLAGS) /Fo".\src\ircam.obj" /c ".\src\ircam.c"
+
+".\src\ms_adpcm.obj" : ".\src\ms_adpcm.c"
+ $(CPP) $(CFLAGS) /Fo".\src\ms_adpcm.obj" /c ".\src\ms_adpcm.c"
+
+".\src\nist.obj" : ".\src\nist.c"
+ $(CPP) $(CFLAGS) /Fo".\src\nist.obj" /c ".\src\nist.c"
+
+".\src\paf.obj" : ".\src\paf.c"
+ $(CPP) $(CFLAGS) /Fo".\src\paf.obj" /c ".\src\paf.c"
+
+".\src\pcm.obj" : ".\src\pcm.c"
+ $(CPP) $(CFLAGS) /Fo".\src\pcm.obj" /c ".\src\pcm.c"
+
+".\src\raw.obj" : ".\src\raw.c"
+ $(CPP) $(CFLAGS) /Fo".\src\raw.obj" /c ".\src\raw.c"
+
+".\src\rx2.obj" : ".\src\rx2.c"
+ $(CPP) $(CFLAGS) /Fo".\src\rx2.obj" /c ".\src\rx2.c"
+
+".\src\samplitude.obj" : ".\src\samplitude.c"
+ $(CPP) $(CFLAGS) /Fo".\src\samplitude.obj" /c ".\src\samplitude.c"
+
+".\src\sd2.obj" : ".\src\sd2.c"
+ $(CPP) $(CFLAGS) /Fo".\src\sd2.obj" /c ".\src\sd2.c"
+
+".\src\sndfile.obj" : ".\src\sndfile.c"
+ $(CPP) $(CFLAGS) /Fo".\src\sndfile.obj" /c ".\src\sndfile.c"
+
+".\src\svx.obj" : ".\src\svx.c"
+ $(CPP) $(CFLAGS) /Fo".\src\svx.obj" /c ".\src\svx.c"
+
+".\src\txw.obj" : ".\src\txw.c"
+ $(CPP) $(CFLAGS) /Fo".\src\txw.obj" /c ".\src\txw.c"
+
+".\src\ulaw.obj" : ".\src\ulaw.c"
+ $(CPP) $(CFLAGS) /Fo".\src\ulaw.obj" /c ".\src\ulaw.c"
+
+".\src\voc.obj" : ".\src\voc.c"
+ $(CPP) $(CFLAGS) /Fo".\src\voc.obj" /c ".\src\voc.c"
+
+".\src\w64.obj" : ".\src\w64.c"
+ $(CPP) $(CFLAGS) /Fo".\src\w64.obj" /c ".\src\w64.c"
+
+".\src\wav.obj" : ".\src\wav.c"
+ $(CPP) $(CFLAGS) /Fo".\src\wav.obj" /c ".\src\wav.c"
+
+".\src\gsm610.obj" : ".\src\gsm610.c"
+ $(CPP) $(CFLAGS) /Fo".\src\gsm610.obj" /c ".\src\gsm610.c"
+
+".\src\wav_w64.obj" : ".\src\wav_w64.c"
+ $(CPP) $(CFLAGS) /Fo".\src\wav_w64.obj" /c ".\src\wav_w64.c"
+
+#====================================================================
+# Object files for test programs.
+
+".\tests\utils.obj" : ".\tests\utils.c"
+ $(CPP) $(CFLAGS) /Fo".\tests\utils.obj" /c ".\tests\utils.c"
+
+".\tests\dft_cmp.obj" : ".\tests\dft_cmp.c"
+ $(CPP) $(CFLAGS) /Fo".\tests\dft_cmp.obj" /c ".\tests\dft_cmp.c"
+
+#====================================================================
+# Test programs.
+
+".\tests\sfversion.exe" : ".\tests\sfversion.c"
+ $(CPP) $(CFLAGS) /Fo".\tests\sfversion.obj" /c ".\tests\sfversion.c"
+ $(LINK32) $(PROG_LINK_FLAGS) /out:".\tests\sfversion.exe" ".\tests\sfversion.obj" libsndfile.lib
+
+".\tests\error_test.exe" : ".\tests\error_test.c"
+ $(CPP) $(CFLAGS) /Fo".\tests\error_test.obj" /c ".\tests\error_test.c"
+ $(LINK32) $(PROG_LINK_FLAGS) /out:".\tests\error_test.exe" ".\tests\error_test.obj" libsndfile.lib
+
+".\tests\pcm_test.exe" : ".\tests\pcm_test.c" ".\tests\utils.obj"
+ $(CPP) $(CFLAGS) /Fo".\tests\pcm_test.obj" /c ".\tests\pcm_test.c"
+ $(LINK32) $(PROG_LINK_FLAGS) /out:".\tests\pcm_test.exe" ".\tests\pcm_test.obj" ".\tests\utils.obj" libsndfile.lib
+
+".\tests\ulaw_test.exe" : ".\tests\ulaw_test.c" ".\tests\utils.obj"
+ $(CPP) $(CFLAGS) /Fo".\tests\ulaw_test.obj" /c ".\tests\ulaw_test.c"
+ $(LINK32) $(PROG_LINK_FLAGS) /out:".\tests\ulaw_test.exe" ".\tests\ulaw_test.obj" ".\tests\utils.obj" libsndfile.lib
+
+".\tests\alaw_test.exe" : ".\tests\alaw_test.c" ".\tests\utils.obj"
+ $(CPP) $(CFLAGS) /Fo".\tests\alaw_test.obj" /c ".\tests\alaw_test.c"
+ $(LINK32) $(PROG_LINK_FLAGS) /out:".\tests\alaw_test.exe" ".\tests\alaw_test.obj" ".\tests\utils.obj" libsndfile.lib
+
+".\tests\dwvw_test.exe" : ".\tests\dwvw_test.c" ".\tests\utils.obj"
+ $(CPP) $(CFLAGS) /Fo".\tests\dwvw_test.obj" /c ".\tests\dwvw_test.c"
+ $(LINK32) $(PROG_LINK_FLAGS) /out:".\tests\dwvw_test.exe" ".\tests\dwvw_test.obj" ".\tests\utils.obj" libsndfile.lib
+
+".\tests\command_test.exe" : ".\tests\command_test.c"
+ $(CPP) $(CFLAGS) /Fo".\tests\command_test.obj" /c ".\tests\command_test.c"
+ $(LINK32) $(PROG_LINK_FLAGS) /out:".\tests\command_test.exe" ".\tests\command_test.obj" libsndfile.lib
+
+".\tests\floating_point_test.exe" : ".\tests\floating_point_test.c" ".\tests\utils.obj" ".\tests\dft_cmp.obj"
+ $(CPP) $(CFLAGS) /Fo".\tests\floating_point_test.obj" /c ".\tests\floating_point_test.c"
+ $(LINK32) $(PROG_LINK_FLAGS) /out:".\tests\floating_point_test.exe" ".\tests\floating_point_test.obj" ".\tests\utils.obj" ".\tests\dft_cmp.obj" libsndfile.lib
+
+".\tests\headerless_test.exe" : ".\tests\headerless_test.c" ".\tests\utils.obj"
+ $(CPP) $(CFLAGS) /Fo".\tests\headerless_test.obj" /c ".\tests\headerless_test.c"
+ $(LINK32) $(PROG_LINK_FLAGS) /out:".\tests\headerless_test.exe" ".\tests\headerless_test.obj" ".\tests\utils.obj" libsndfile.lib
+
+".\tests\write_read_test.exe" : ".\tests\write_read_test.c" ".\tests\utils.obj"
+ $(CPP) $(CFLAGS) /Fo".\tests\write_read_test.obj" /c ".\tests\write_read_test.c"
+ $(LINK32) $(PROG_LINK_FLAGS) /out:".\tests\write_read_test.exe" ".\tests\write_read_test.obj" ".\tests\utils.obj" libsndfile.lib
+
+".\tests\lossy_comp_test.exe" : ".\tests\lossy_comp_test.c" ".\tests\utils.obj"
+ $(CPP) $(CFLAGS) /Fo".\tests\lossy_comp_test.obj" /c ".\tests\lossy_comp_test.c"
+ $(LINK32) $(PROG_LINK_FLAGS) /out:".\tests\lossy_comp_test.exe" ".\tests\lossy_comp_test.obj" ".\tests\utils.obj" libsndfile.lib
+
+".\tests\peak_chunk_test.exe" : ".\tests\peak_chunk_test.c" ".\tests\utils.obj"
+ $(CPP) $(CFLAGS) /Fo".\tests\peak_chunk_test.obj" /c ".\tests\peak_chunk_test.c"
+ $(LINK32) $(PROG_LINK_FLAGS) /out:".\tests\peak_chunk_test.exe" ".\tests\peak_chunk_test.obj" ".\tests\utils.obj" libsndfile.lib
+
+# End of Makefile
+#====================================================================
--- a/common/libsndfile/Win32/README-Win32.txt.old
+++ /dev/null
@@ -1,32 +1,0 @@
-The MSCV++ workspace and project files have been broken for some time and I
-have not found anyone willing to fix them or provide new ones. I hope the
-following instructions will be sufficient for Win32 to users to build, test
-and use this library.
-
-It is assumed that when you unzip the source code package you will keep the
-directory structure of the archive.
-
-The source code for the library it self is in following directories under
-the main libsndfile directory:
-
- src/
- src/GSM610/
-
-To build the library you need to create a project containing all the *.c files
-in these two directories. In addition, you should copy the two header files
-in the Win32/ directory (config.h and unistd.h) to the src/ directory. In the
-case of config.h you will be overwriting the existing config.h file.
-
-The test programs are all in the directory tests/ which contains one .c file
-for each test program. To create all the test programs you will need to
-compile each of these test programs and link it to the library.
-
-Finally, there is also a directory examples/, which contains a number of small
-example programs. These can be compiled and linked much like the files in the
-tests/ directory.
-
-Anybody who can add to or clarify these instructions should should send me
-email at <[email protected]>.
-
-Erik de Castro Lopo
-May 30th, 2000
--- a/common/libsndfile/Win32/config.h
+++ b/common/libsndfile/Win32/config.h
@@ -1,34 +1,9 @@
/* src/config.h. Generated automatically by configure. */
-/* src/config.h.in. Generated automatically from configure.in by autoheader. */
+/* src/config.h.in. Generated automatically from configure.in by autoheader 2.13. */
-/* Define to `long' if <sys/types.h> doesn't define. */
-/* #undef off_t */
-
-/* Define to `unsigned' if <sys/types.h> doesn't define. */
-/* #undef size_t */
-
/* Define if you have the ANSI C header files. */
#define STDC_HEADERS 1
-/* Define to `long' if <sys/types.h> doesn't define. */
-/* #undef off_t */
-
-/* Define to `unsigned' if <sys/types.h> doesn't define. */
-/* #undef size_t */
-
-/* Define if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Set to 1 if the processor is big endian, otherwise set to 0. */
-#define GUESS_BIG_ENDIAN 0
-
-/* Set to 1 if the processor is little endian, otherwise set to 0. */
-#define GUESS_LITTLE_ENDIAN 1
-
-/* Set to 1 to force the use of code for processors with broken floats */
-/* Otherwise set it to 0. */
-#define FORCE_BROKEN_FLOAT 0
-
/* The number of bytes in a double. */
#define SIZEOF_DOUBLE 8
@@ -41,6 +16,9 @@
/* The number of bytes in a long. */
#define SIZEOF_LONG 4
+/* The number of bytes in a off_t. */
+#define SIZEOF_OFF_T 8
+
/* The number of bytes in a short. */
#define SIZEOF_SHORT 2
@@ -47,36 +25,36 @@
/* The number of bytes in a void*. */
#define SIZEOF_VOIDP 4
-/* Define if you have the fclose function. */
-#define HAVE_FCLOSE 1
-
-/* Define if you have the fopen function. */
-#define HAVE_FOPEN 1
-
-/* Define if you have the fread function. */
-#define HAVE_FREAD 1
-
/* Define if you have the free function. */
#define HAVE_FREE 1
-/* Define if you have the fseek function. */
-#define HAVE_FSEEK 1
+/* Define if you have the fstat function. */
+#define HAVE_FSTAT 1
-/* Define if you have the ftell function. */
-#define HAVE_FTELL 1
+/* Define if you have the lseek function. */
+#define HAVE_LSEEK 1
-/* Define if you have the fwrite function. */
-#define HAVE_FWRITE 1
-
/* Define if you have the malloc function. */
#define HAVE_MALLOC 1
+/* Define if you have the open function. */
+#define HAVE_OPEN 1
+
+/* Define if you have the read function. */
+#define HAVE_READ 1
+
/* Define if you have the snprintf function. */
-#define HAVE_SNPRINTF 0
+#define HAVE_SNPRINTF 1
/* Define if you have the vsnprintf function. */
-#define HAVE_VSNPRINTF 0
+#define HAVE_VSNPRINTF 1
+/* Define if you have the write function. */
+#define HAVE_WRITE 1
+
+/* Define if you have the <dlfcn.h> header file. */
+#define HAVE_DLFCN_H 1
+
/* Define if you have the <endian.h> header file. */
#define HAVE_ENDIAN_H 0
@@ -84,5 +62,35 @@
#define PACKAGE "libsndfile"
/* Version number of package */
-#define VERSION "0.0.26"
+#define VERSION "1.0.0rc2"
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+#define _FILE_OFFSET_BITS 64
+
+/* Define to make fseeko etc. visible, on some hosts. */
+/* #undef _LARGEFILE_SOURCE */
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef _LARGE_FILES */
+
+/* Target processor is big endian. */
+#define CPU_IS_BIG_ENDIAN 0
+
+/* Target processor is little endian. */
+#define CPU_IS_LITTLE_ENDIAN 1
+
+/* Define if you have C99's lrint function. */
+#define HAVE_LRINT 0
+
+/* Define if you have C99's lrintf function. */
+#define HAVE_LRINTF 0
+
+/* Set to 1 to force the use of code for processors with broken floats */
+#define FORCE_BROKEN_FLOAT 0
+
+/* Set to 1 to force the use of code for processors with broken floats */
+#define FORCE_BROKEN_FLOAT 0
+
+/* Set to 1 if compiling for Win32 */
+#define OS_IS_WIN32 1
--- /dev/null
+++ b/common/libsndfile/Win32/libsndfile.def
@@ -1,0 +1,57 @@
+LIBRARY libsndfile.dll
+EXPORTS
+
+;
+; open, close, command
+;
+sf_command @1
+sf_open @2
+sf_close @3
+
+;
+; seeking
+;
+sf_seek @4
+
+;
+; error functions
+;
+sf_error @7
+sf_perror @8
+sf_error_str @9
+sf_error_number @10
+
+;
+; misc stuff
+;
+sf_format_check @11
+
+;
+; reading
+;
+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
+
+;
+; writing
+;
+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
--- a/common/libsndfile/Win32/libsndfile.dsp
+++ b/common/libsndfile/Win32/libsndfile.dsp
@@ -41,7 +41,7 @@
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /I "..\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I ".\\" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
# ADD BASE RSC /l 0x413 /d "NDEBUG"
# ADD RSC /l 0x413 /d "NDEBUG"
BSC32=bscmake.exe
@@ -64,7 +64,7 @@
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I ".\\" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /GZ /c
# ADD BASE RSC /l 0x413 /d "_DEBUG"
# ADD RSC /l 0x413 /d "_DEBUG"
BSC32=bscmake.exe
@@ -85,124 +85,204 @@
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
+SOURCE=..\src\GSM610\add.c
+# End Source File
+# Begin Source File
+
SOURCE=..\src\aiff.c
# End Source File
# Begin Source File
+SOURCE=..\src\alaw.c
+# End Source File
+# Begin Source File
+
SOURCE=..\src\au.c
# End Source File
# Begin Source File
+SOURCE=..\src\au_g72x.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\GSM610\code.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\command.c
+# End Source File
+# Begin Source File
+
SOURCE=..\src\common.c
# End Source File
# Begin Source File
+SOURCE=..\src\GSM610\decode.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\double64.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\dwvw.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\file_io.c
+# End Source File
+# Begin Source File
+
SOURCE=..\src\float32.c
# End Source File
# Begin Source File
-SOURCE=..\src\ircam.c
+SOURCE=..\src\G72x\g721.c
# End Source File
# Begin Source File
-SOURCE=..\src\nist.c
+SOURCE=..\src\G72x\g723_16.c
# End Source File
# Begin Source File
-SOURCE=..\src\paf.c
+SOURCE=..\src\G72x\g723_24.c
# End Source File
# Begin Source File
-SOURCE=..\src\pcm.c
+SOURCE=..\src\G72x\g723_40.c
# End Source File
# Begin Source File
-SOURCE=..\src\raw.c
+SOURCE=..\src\G72x\g72x.c
# End Source File
# Begin Source File
-SOURCE=..\src\samplitude.c
+SOURCE=..\src\G72x\g72x_test.c
# End Source File
# Begin Source File
-SOURCE=..\src\sndfile.c
+SOURCE=..\src\gsm610.c
# End Source File
# Begin Source File
-SOURCE=..\src\svx.c
+SOURCE=..\src\GSM610\gsm_create.c
# End Source File
# Begin Source File
-SOURCE=..\src\voc.c
+SOURCE=..\src\GSM610\gsm_decode.c
# End Source File
# Begin Source File
-SOURCE=..\src\wav.c
+SOURCE=..\src\GSM610\gsm_destroy.c
# End Source File
-# End Group
-# Begin Group "Header Files"
+# Begin Source File
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
+SOURCE=..\src\GSM610\gsm_encode.c
+# End Source File
# Begin Source File
-SOURCE=..\src\au.h
+SOURCE=..\src\GSM610\gsm_option.c
# End Source File
# Begin Source File
-SOURCE=..\src\common.h
+SOURCE=..\src\ima_adpcm.c
# End Source File
# Begin Source File
-SOURCE=..\src\GSM610\config.h
+SOURCE=..\src\ircam.c
# End Source File
# Begin Source File
-SOURCE=.\config.h
+SOURCE=..\src\GSM610\long_term.c
# End Source File
# Begin Source File
-SOURCE=..\src\floatcast.h
+SOURCE=..\src\GSM610\lpc.c
# End Source File
# Begin Source File
-SOURCE=..\src\G72x\g72x.h
+SOURCE=..\src\ms_adpcm.c
# End Source File
# Begin Source File
-SOURCE=..\src\GSM610\gsm.h
+SOURCE=..\src\nist.c
# End Source File
# Begin Source File
-SOURCE=..\src\G72x\private.h
+SOURCE=..\src\paf.c
# End Source File
# Begin Source File
-SOURCE=..\src\GSM610\private.h
+SOURCE=..\src\pcm.c
# End Source File
# Begin Source File
-SOURCE=..\src\GSM610\proto.h
+SOURCE=..\src\GSM610\preprocess.c
# End Source File
# Begin Source File
-SOURCE=..\src\sfendian.h
+SOURCE=..\src\raw.c
# End Source File
# Begin Source File
-SOURCE=..\src\sndfile.h
+SOURCE=..\src\GSM610\rpe.c
# End Source File
# Begin Source File
-SOURCE=.\unistd.h
+SOURCE=..\src\rx2.c
# End Source File
# Begin Source File
-SOURCE=..\src\GSM610\unproto.h
+SOURCE=..\src\samplitude.c
# End Source File
# Begin Source File
-SOURCE=..\src\wav.h
+SOURCE=..\src\sd2.c
# End Source File
+# Begin Source File
+
+SOURCE=..\src\GSM610\short_term.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\sndfile.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\svx.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\GSM610\table.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\txw.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\ulaw.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\voc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\w64.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\wav.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\wav_w64.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
# End Group
# End Target
# End Project
--- a/common/libsndfile/Win32/unistd.h
+++ b/common/libsndfile/Win32/unistd.h
@@ -1,44 +1,22 @@
/*
-** Copyright (C) 1999 Albert Faber
+** Copyright (C) 2002 Erik de Castro Lopo <[email protected]>
**
** 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
+** 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 General Public License for more details.
+** GNU Lesser General Public License for more details.
**
-** You should have received a copy of the GNU General Public License
+** 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.
*/
-/* A hack file in order to compile the libsndfile package for win32 systems
-** Define the things that Bill and his fellows forgot to define
+/*
+** Emtpy file to prevent Win32 compiler from complaining that the
+** file doesn't exist.
*/
-
-#ifdef _WIN32
-#include <direct.h>
-
-#define _IFMT _S_IFMT
-#define _IFREG _S_IFREG
-
-#define S_ISREG(m) ((m) & _S_IFREG)
-
-#define S_IRWXU 0000700 /* rwx, owner */
-#define S_IRUSR 0000400 /* read permission, owner */
-#define S_IWUSR 0000200 /* write permission, owner */
-#define S_IXUSR 0000100 /* execute/search permission, owner */
-#define S_IRWXG 0000070 /* rwx, group */
-#define S_IRGRP 0000040 /* read permission, group */
-#define S_IWGRP 0000020 /* write permission, grougroup */
-#define S_IXGRP 0000010 /* execute/search permission, group */
-#define S_IRWXO 0000007 /* rwx, other */
-#define S_IROTH 0000004 /* read permission, other */
-#define S_IWOTH 0000002 /* write permission, other */
-#define S_IXOTH 0000001 /* execute/search permission, other */
-
-#endif
\ No newline at end of file
--- a/common/libsndfile/acconfig.h
+++ /dev/null
@@ -1,288 +1,0 @@
-/* acconfig.h
- This file is in the public domain.
-
- Descriptive text for the C preprocessor macros that
- the distributed Autoconf macros can define.
- No software package will use all of them; autoheader copies the ones
- your configure.in uses into your configuration header file templates.
-
- The entries are in sort -df order: alphabetical, case insensitive,
- ignoring punctuation (such as underscores). Although this order
- can split up related entries, it makes it easier to check whether
- a given entry is in the file.
-
- Leave the following blank line there!! Autoheader needs it. */
-
-
-/* Define if on AIX 3.
- System headers sometimes define this.
- We just want to avoid a redefinition error message. */
-#ifndef _ALL_SOURCE
-#undef _ALL_SOURCE
-#endif
-
-/* Define if using alloca.c. */
-#undef C_ALLOCA
-
-/* Define if type char is unsigned and you are not using gcc. */
-#ifndef __CHAR_UNSIGNED__
-#undef __CHAR_UNSIGNED__
-#endif
-
-/* Define if the closedir function returns void instead of int. */
-#undef CLOSEDIR_VOID
-
-/* Define to empty if the keyword does not work. */
-#undef const
-
-/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
- This function is required for alloca.c support on those systems. */
-#undef CRAY_STACKSEG_END
-
-/* Define for DGUX with <sys/dg_sys_info.h>. */
-#undef DGUX
-
-/* Define if you have <dirent.h>. */
-#undef DIRENT
-
-/* Define to the type of elements in the array set by `getgroups'.
- Usually this is either `int' or `gid_t'. */
-#undef GETGROUPS_T
-
-/* Define if the `getloadavg' function needs to be run setuid or setgid. */
-#undef GETLOADAVG_PRIVILEGED
-
-/* Define if the `getpgrp' function takes no argument. */
-#undef GETPGRP_VOID
-
-/* Define to `int' if <sys/types.h> doesn't define. */
-#undef gid_t
-
-/* Define if you have alloca, as a function or macro. */
-#undef HAVE_ALLOCA
-
-/* Define if you have <alloca.h> and it should be used (not on Ultrix). */
-#undef HAVE_ALLOCA_H
-
-/* Define if you don't have vprintf but do have _doprnt. */
-#undef HAVE_DOPRNT
-
-/* Define if your system has a working fnmatch function. */
-#undef HAVE_FNMATCH
-
-/* Define if your system has its own `getloadavg' function. */
-#undef HAVE_GETLOADAVG
-
-/* Define if you have the getmntent function. */
-#undef HAVE_GETMNTENT
-
-/* Define if the `long double' type works. */
-#undef HAVE_LONG_DOUBLE
-
-/* Define if you support file names longer than 14 characters. */
-#undef HAVE_LONG_FILE_NAMES
-
-/* Define if you have a working `mmap' system call. */
-#undef HAVE_MMAP
-
-/* Define if system calls automatically restart after interruption
- by a signal. */
-#undef HAVE_RESTARTABLE_SYSCALLS
-
-/* Define if your struct stat has st_blksize. */
-#undef HAVE_ST_BLKSIZE
-
-/* Define if your struct stat has st_blocks. */
-#undef HAVE_ST_BLOCKS
-
-/* Define if you have the strcoll function and it is properly defined. */
-#undef HAVE_STRCOLL
-
-/* Define if your struct stat has st_rdev. */
-#undef HAVE_ST_RDEV
-
-/* Define if you have the strftime function. */
-#undef HAVE_STRFTIME
-
-/* Define if you have the ANSI # stringizing operator in cpp. */
-#undef HAVE_STRINGIZE
-
-/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
-#undef HAVE_SYS_WAIT_H
-
-/* Define if your struct tm has tm_zone. */
-#undef HAVE_TM_ZONE
-
-/* Define if you don't have tm_zone but do have the external array
- tzname. */
-#undef HAVE_TZNAME
-
-/* Define if you have <unistd.h>. */
-#undef HAVE_UNISTD_H
-
-/* Define if utime(file, NULL) sets file's timestamp to the present. */
-#undef HAVE_UTIME_NULL
-
-/* Define if you have <vfork.h>. */
-#undef HAVE_VFORK_H
-
-/* Define if you have the vprintf function. */
-#undef HAVE_VPRINTF
-
-/* Define if you have the wait3 system call. */
-#undef HAVE_WAIT3
-
-/* Define as __inline if that's what the C compiler calls it. */
-#undef inline
-
-/* Define if int is 16 bits instead of 32. */
-#undef INT_16_BITS
-
-/* Define if long int is 64 bits. */
-#undef LONG_64_BITS
-
-/* Define if major, minor, and makedev are declared in <mkdev.h>. */
-#undef MAJOR_IN_MKDEV
-
-/* Define if major, minor, and makedev are declared in <sysmacros.h>. */
-#undef MAJOR_IN_SYSMACROS
-
-/* Define if on MINIX. */
-#undef _MINIX
-
-/* Define to `int' if <sys/types.h> doesn't define. */
-#undef mode_t
-
-/* Define if you don't have <dirent.h>, but have <ndir.h>. */
-#undef NDIR
-
-/* Define if you have <memory.h>, and <string.h> doesn't declare the
- mem* functions. */
-#undef NEED_MEMORY_H
-
-/* Define if your struct nlist has an n_un member. */
-#undef NLIST_NAME_UNION
-
-/* Define if you have <nlist.h>. */
-#undef NLIST_STRUCT
-
-/* Define if your C compiler doesn't accept -c and -o together. */
-#undef NO_MINUS_C_MINUS_O
-
-/* Define if your Fortran 77 compiler doesn't accept -c and -o together. */
-#undef F77_NO_MINUS_C_MINUS_O
-
-/* Define to `long' if <sys/types.h> doesn't define. */
-#undef off_t
-
-/* Define to `int' if <sys/types.h> doesn't define. */
-#undef pid_t
-
-/* Define if the system does not provide POSIX.1 features except
- with this defined. */
-#undef _POSIX_1_SOURCE
-
-/* Define if you need to in order for stat and other things to work. */
-#undef _POSIX_SOURCE
-
-/* Define as the return type of signal handlers (int or void). */
-#undef RETSIGTYPE
-
-/* Define to the type of arg1 for select(). */
-#undef SELECT_TYPE_ARG1
-
-/* Define to the type of args 2, 3 and 4 for select(). */
-#undef SELECT_TYPE_ARG234
-
-/* Define to the type of arg5 for select(). */
-#undef SELECT_TYPE_ARG5
-
-/* Define if the `setpgrp' function takes no argument. */
-#undef SETPGRP_VOID
-
-/* Define if the setvbuf function takes the buffering type as its second
- argument and the buffer pointer as the third, as on System V
- before release 3. */
-#undef SETVBUF_REVERSED
-
-/* Define to `unsigned' if <sys/types.h> doesn't define. */
-#undef size_t
-
-/* If using the C implementation of alloca, define if you know the
- direction of stack growth for your system; otherwise it will be
- automatically deduced at run-time.
- STACK_DIRECTION > 0 => grows toward higher addresses
- STACK_DIRECTION < 0 => grows toward lower addresses
- STACK_DIRECTION = 0 => direction of growth unknown
- */
-#undef STACK_DIRECTION
-
-/* Define if the `S_IS*' macros in <sys/stat.h> do not work properly. */
-#undef STAT_MACROS_BROKEN
-
-/* Define if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define on System V Release 4. */
-#undef SVR4
-
-/* Define if you don't have <dirent.h>, but have <sys/dir.h>. */
-#undef SYSDIR
-
-/* Define if you don't have <dirent.h>, but have <sys/ndir.h>. */
-#undef SYSNDIR
-
-/* Define if `sys_siglist' is declared by <signal.h>. */
-#undef SYS_SIGLIST_DECLARED
-
-/* Define if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
-
-/* Define if your <sys/time.h> declares struct tm. */
-#undef TM_IN_SYS_TIME
-
-/* Define to `int' if <sys/types.h> doesn't define. */
-#undef uid_t
-
-/* Define for Encore UMAX. */
-#undef UMAX
-
-/* Define for Encore UMAX 4.3 that has <inq_status/cpustats.h>
- instead of <sys/cpustats.h>. */
-#undef UMAX4_3
-
-/* Define if you do not have <strings.h>, index, bzero, etc.. */
-#undef USG
-
-/* Define vfork as fork if vfork does not work. */
-#undef vfork
-
-/* Define if the closedir function returns void instead of int. */
-#undef VOID_CLOSEDIR
-
-/* Define if your processor stores words with the most significant
- byte first (like Motorola and SPARC, unlike Intel and VAX). */
-#undef WORDS_BIGENDIAN
-
-/* Define if the X Window System is missing or not being used. */
-#undef X_DISPLAY_MISSING
-
-/* Define if lex declares yytext as a char * by default, not a char[]. */
-#undef YYTEXT_POINTER
-
-
-/* Leave that blank line there!! Autoheader needs it.
- If you're adding to this file, keep in mind:
- The entries are in sort -df order: alphabetical, case insensitive,
- ignoring punctuation (such as underscores). */
-
-/* Set to 1 if the processor is big endian, otherwise set to 0. */
-#undef GUESS_BIG_ENDIAN
-
-/* Set to 1 if the processor is little endian, otherwise set to 0. */
-#undef GUESS_LITTLE_ENDIAN
-
-/* Set to 1 to force the use of code for processors with broken floats */
-/* Otherwise set it to 0. */
-#undef FORCE_BROKEN_FLOAT
-
--- /dev/null
+++ b/common/libsndfile/acinclude.m4
@@ -1,0 +1,343 @@
+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 <[email protected]>.
+
+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 Determined 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(determining processor byte ordering,
+ ac_cv_c_byte_order,
+
+# Initialize to unknown
+ac_cv_c_byte_order=unknown
+
+if test $ac_cv_header_endian_h = yes ; 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
+
+ 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
+
+)# AC_C_FIND_ENDIAN
+
+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="-O2"
+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_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,
+[
+lrintf_save_CFLAGS=$CFLAGS
+CFLAGS="-O2"
+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
+])# AC_C99_LRINTF
--- a/common/libsndfile/aclocal.m4
+++ b/common/libsndfile/aclocal.m4
@@ -10,6 +10,350 @@
dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
dnl PARTICULAR PURPOSE.
+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 <[email protected]>.
+
+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 Determined 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(determining processor byte ordering,
+ ac_cv_c_byte_order,
+
+# Initialize to unknown
+ac_cv_c_byte_order=unknown
+
+if test $ac_cv_header_endian_h = yes ; 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
+
+ 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
+
+)# AC_C_FIND_ENDIAN
+
+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="-O2"
+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_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,
+[
+lrintf_save_CFLAGS=$CFLAGS
+CFLAGS="-O2"
+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
+])# AC_C99_LRINTF
+
# Do all the work for Automake. This macro actually does too much --
# some checks are only needed if your package does certain things.
# But this isn't really a big deal.
@@ -125,39 +469,25 @@
done<<>>dnl>>)
changequote([,]))])
+# libtool.m4 - Configure libtool for the host system. -*-Shell-script-*-
-# serial 40 AC_PROG_LIBTOOL
-AC_DEFUN(AC_PROG_LIBTOOL,
+# serial 46 AC_PROG_LIBTOOL
+
+AC_DEFUN([AC_PROG_LIBTOOL],
[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
-# Save cache, so that ltconfig can load it
-AC_CACHE_SAVE
-
-# Actually configure libtool. ac_aux_dir is where install-sh is found.
-CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
-LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
-LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \
-DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \
-${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
-$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \
-|| AC_MSG_ERROR([libtool configure failed])
-
-# Reload cache, that may have been modified by ltconfig
-AC_CACHE_LOAD
-
# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh"
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
# Always use our own libtool.
LIBTOOL='$(SHELL) $(top_builddir)/libtool'
AC_SUBST(LIBTOOL)dnl
-# Redirect the config.log output again, so that the ltconfig log is not
-# clobbered by the next message.
-exec 5>>./config.log
+# Prevent multiple expansion
+define([AC_PROG_LIBTOOL], [])
])
-AC_DEFUN(AC_LIBTOOL_SETUP,
+AC_DEFUN([AC_LIBTOOL_SETUP],
[AC_PREREQ(2.13)dnl
AC_REQUIRE([AC_ENABLE_SHARED])dnl
AC_REQUIRE([AC_ENABLE_STATIC])dnl
@@ -164,42 +494,45 @@
AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-AC_REQUIRE([AC_PROG_RANLIB])dnl
AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([AC_PROG_LD])dnl
+AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
AC_REQUIRE([AC_PROG_NM])dnl
AC_REQUIRE([AC_PROG_LN_S])dnl
+AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
+AC_REQUIRE([AC_OBJEXT])dnl
+AC_REQUIRE([AC_EXEEXT])dnl
dnl
-case "$target" in
-NONE) lt_target="$host" ;;
-*) lt_target="$target" ;;
+_LT_AC_PROG_ECHO_BACKSLASH
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ AC_PATH_MAGIC
+ fi
+ ;;
esac
-# Check for any special flags to pass to ltconfig.
-libtool_flags="--cache-file=$cache_file"
-test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
-test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static"
-test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install"
-test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
-test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
-ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN],
-[libtool_flags="$libtool_flags --enable-dlopen"])
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+AC_CHECK_TOOL(STRIP, strip, :)
+
+ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
-[libtool_flags="$libtool_flags --enable-win32-dll"])
+enable_win32_dll=yes, enable_win32_dll=no)
+
AC_ARG_ENABLE(libtool-lock,
[ --disable-libtool-lock avoid locking (might break parallel builds)])
-test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock"
-test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
# Some flags need to be propagated to the compiler or linker for good
# libtool support.
-case "$lt_target" in
+case $host in
*-*-irix6*)
# Find out which ABI we are using.
echo '[#]line __oline__ "configure"' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
- case "`/usr/bin/file conftest.o`" in
+ case `/usr/bin/file conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -32"
;;
@@ -219,7 +552,10 @@
SAVE_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -belf"
AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
- [AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])])
+ [AC_LANG_SAVE
+ AC_LANG_C
+ AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+ AC_LANG_RESTORE])
if test x"$lt_cv_cc_needs_belf" != x"yes"; then
# this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
CFLAGS="$SAVE_CFLAGS"
@@ -227,33 +563,2834 @@
;;
ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
-[*-*-cygwin* | *-*-mingw*)
+[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
AC_CHECK_TOOL(DLLTOOL, dlltool, false)
AC_CHECK_TOOL(AS, as, false)
AC_CHECK_TOOL(OBJDUMP, objdump, false)
+
+ # recent cygwin and mingw systems supply a stub DllMain which the user
+ # can override, but on older systems we have to supply one
+ AC_CACHE_CHECK([if libtool should supply DllMain function], lt_cv_need_dllmain,
+ [AC_TRY_LINK([],
+ [extern int __attribute__((__stdcall__)) DllMain(void*, int, void*);
+ DllMain (0, 0, 0);],
+ [lt_cv_need_dllmain=no],[lt_cv_need_dllmain=yes])])
+
+ case $host/$CC in
+ *-*-cygwin*/gcc*-mno-cygwin*|*-*-mingw*)
+ # old mingw systems require "-dll" to link a DLL, while more recent ones
+ # require "-mdll"
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -mdll"
+ AC_CACHE_CHECK([how to link DLLs], lt_cv_cc_dll_switch,
+ [AC_TRY_LINK([], [], [lt_cv_cc_dll_switch=-mdll],[lt_cv_cc_dll_switch=-dll])])
+ CFLAGS="$SAVE_CFLAGS" ;;
+ *-*-cygwin* | *-*-pw32*)
+ # cygwin systems need to pass --dll to the linker, and not link
+ # crt.o which will require a WinMain@16 definition.
+ lt_cv_cc_dll_switch="-Wl,--dll -nostartfiles" ;;
+ esac
;;
+ ])
+esac
+
+_LT_AC_LTCONFIG_HACK
+
])
+
+# AC_LIBTOOL_HEADER_ASSERT
+# ------------------------
+AC_DEFUN([AC_LIBTOOL_HEADER_ASSERT],
+[AC_CACHE_CHECK([whether $CC supports assert without backlinking],
+ [lt_cv_func_assert_works],
+ [case $host in
+ *-*-solaris*)
+ if test "$GCC" = yes && test "$with_gnu_ld" != yes; then
+ case `$CC --version 2>/dev/null` in
+ [[12]].*) lt_cv_func_assert_works=no ;;
+ *) lt_cv_func_assert_works=yes ;;
+ esac
+ fi
+ ;;
+ esac])
+
+if test "x$lt_cv_func_assert_works" = xyes; then
+ AC_CHECK_HEADERS(assert.h)
+fi
+])# AC_LIBTOOL_HEADER_ASSERT
+
+# _LT_AC_CHECK_DLFCN
+# --------------------
+AC_DEFUN([_LT_AC_CHECK_DLFCN],
+[AC_CHECK_HEADERS(dlfcn.h)
+])# _LT_AC_CHECK_DLFCN
+
+# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+# ---------------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PROG_NM])
+AC_REQUIRE([AC_OBJEXT])
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [dnl
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[[BCDT]]'
+ ;;
+cygwin* | mingw* | pw32*)
+ symcode='[[ABCDGISTW]]'
+ ;;
+hpux*) # Its linker distinguishes data from code symbols
+ lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+ lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+ ;;
+irix* | nonstopux*)
+ symcode='[[BCDEGRST]]'
+ ;;
+solaris* | sysv5*)
+ symcode='[[BDT]]'
+ ;;
+sysv4)
+ symcode='[[DFNSTU]]'
+ ;;
esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $host_os in
+mingw*)
+ opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
+ symcode='[[ABCDGISTW]]'
+fi
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Write the raw and C identifiers.
+lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+ rm -f conftest*
+ cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+ if AC_TRY_EVAL(ac_compile); then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if egrep ' nm_test_var$' "$nlist" >/dev/null; then
+ if egrep ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext'
+
+ cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr void *
+#else
+# define lt_ptr char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ lt_ptr address;
+}
+lt_preloaded_symbols[[]] =
+{
+EOF
+ sed "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr) \&\2},/" < "$nlist" >> conftest.$ac_ext
+ cat <<\EOF >> conftest.$ac_ext
+ {0, (lt_ptr) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ save_LIBS="$LIBS"
+ save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$no_builtin_flag"
+ if AC_TRY_EVAL(ac_link) && test -s conftest; then
+ pipe_works=yes
+ fi
+ LIBS="$save_LIBS"
+ CFLAGS="$save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&AC_FD_CC
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&AC_FD_CC
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AC_FD_CC
+ fi
+ else
+ echo "$progname: failed program was:" >&AC_FD_CC
+ cat conftest.$ac_ext >&5
+ fi
+ rm -f conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
])
+global_symbol_pipe="$lt_cv_sys_global_symbol_pipe"
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ global_symbol_to_cdecl=
+ global_symbol_to_c_name_address=
+else
+ global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl"
+ global_symbol_to_c_name_address="$lt_cv_global_symbol_to_c_name_address"
+fi
+if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address";
+then
+ AC_MSG_RESULT(failed)
+else
+ AC_MSG_RESULT(ok)
+fi
+]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
+# ---------------------------------
+AC_DEFUN([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR],
+[# Find the correct PATH separator. Usually this is `:', but
+# DJGPP uses `;' like DOS.
+if test "X${PATH_SEPARATOR+set}" != Xset; then
+ UNAME=${UNAME-`uname 2>/dev/null`}
+ case X$UNAME in
+ *-DOS) lt_cv_sys_path_separator=';' ;;
+ *) lt_cv_sys_path_separator=':' ;;
+ esac
+ PATH_SEPARATOR=$lt_cv_sys_path_separator
+fi
+])# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
+
+# _LT_AC_PROG_ECHO_BACKSLASH
+# --------------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
+[ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+ [AC_DIVERT_PUSH(NOTICE)])
+_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+ ;;
+esac
+
+echo=${ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X[$]1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
+ # Yippee, $echo works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<EOF
+$*
+EOF
+ exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+ echo_test_string="`eval $cmd`" &&
+ (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+ then
+ break
+ fi
+ done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ IFS="${IFS= }"; save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ echo="$dir/echo"
+ break
+ fi
+ done
+ IFS="$save_ifs"
+
+ if test "X$echo" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ echo='print -r'
+ elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+ else
+ # Try using printf.
+ echo='printf %s\n'
+ if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ echo="$CONFIG_SHELL [$]0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ echo="$CONFIG_SHELL [$]0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+ if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "[$]0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ echo=echo
+ fi
+ fi
+ fi
+ fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+ ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(ECHO)
+AC_DIVERT_POP
+])# _LT_AC_PROG_ECHO_BACKSLASH
+
+# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ------------------------------------------------------------------
+AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
+[if test "$cross_compiling" = yes; then :
+ [$4]
+else
+ AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}]
+EOF
+ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) $1 ;;
+ x$lt_dlneed_uscore) $2 ;;
+ x$lt_unknown|x*) $3 ;;
+ esac
+ else :
+ # compilation failed
+ $3
+ fi
+fi
+rm -fr conftest*
+])# _LT_AC_TRY_DLOPEN_SELF
+
+# AC_LIBTOOL_DLOPEN_SELF
+# -------------------
+AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
+[if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ *)
+ AC_CHECK_FUNC([shl_load],
+ [lt_cv_dlopen="shl_load"],
+ [AC_CHECK_LIB([dld], [shl_load],
+ [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
+ [AC_CHECK_FUNC([dlopen],
+ [lt_cv_dlopen="dlopen"],
+ [AC_CHECK_LIB([dl], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+ [AC_CHECK_LIB([svld], [dlopen],
+ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+ [AC_CHECK_LIB([dld], [dld_link],
+ [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
+ ])
+ ])
+ ])
+ ])
+ ])
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ AC_CACHE_CHECK([whether a program can dlopen itself],
+ lt_cv_dlopen_self, [dnl
+ _LT_AC_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+ ])
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ LDFLAGS="$LDFLAGS $link_static_flag"
+ AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+ lt_cv_dlopen_self_static, [dnl
+ _LT_AC_TRY_DLOPEN_SELF(
+ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
+ ])
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+])# AC_LIBTOOL_DLOPEN_SELF
+
+AC_DEFUN([_LT_AC_LTCONFIG_HACK],
+[AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])dnl
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+sed_quote_subst='s/\([[\\"\\`$\\\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([[\\"\\`\\\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+need_locks="$enable_libtool_lock"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+if test x"$host" != x"$build"; then
+ ac_tool_prefix=${host_alias}-
+else
+ ac_tool_prefix=
+fi
+
+# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+case $host_os in
+linux-gnu*) ;;
+linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+esac
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
+ ;;
+ *)
+ old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+ ;;
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+# Allow CC to be a program name with arguments.
+set dummy $CC
+compiler="[$]2"
+
+AC_MSG_CHECKING([for objdir])
+rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ objdir=.libs
+else
+ # MS-DOS does not allow filenames that begin with a dot.
+ objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+AC_MSG_RESULT($objdir)
+
+
+AC_ARG_WITH(pic,
+[ --with-pic try to use only PIC/non-PIC objects [default=use both]],
+pic_mode="$withval", pic_mode=default)
+test -z "$pic_mode" && pic_mode=default
+
+# We assume here that the value for lt_cv_prog_cc_pic will not be cached
+# in isolation, and that seeing it set (from the cache) indicates that
+# the associated values are set (in the cache) correctly too.
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+AC_CACHE_VAL(lt_cv_prog_cc_pic,
+[ lt_cv_prog_cc_pic=
+ lt_cv_prog_cc_shlib=
+ lt_cv_prog_cc_wl=
+ lt_cv_prog_cc_static=
+ lt_cv_prog_cc_no_builtin=
+ lt_cv_prog_cc_can_build_shared=$can_build_shared
+
+ if test "$GCC" = yes; then
+ lt_cv_prog_cc_wl='-Wl,'
+ lt_cv_prog_cc_static='-static'
+
+ case $host_os in
+ aix*)
+ # Below there is a dirty hack to force normal static linking with -ldl
+ # The problem is because libdl dynamically linked with both libc and
+ # libC (AIX C++ library), which obviously doesn't included in libraries
+ # list by gcc. This cause undefined symbols with -static flags.
+ # This hack allows C programs to be linked with "-static -ldl", but
+ # not sure about C++ programs.
+ lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC"
+ ;;
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_cv_prog_cc_pic='-fno-common'
+ ;;
+ cygwin* | mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_cv_prog_cc_pic='-DDLL_EXPORT'
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_cv_prog_cc_pic=-Kconform_pic
+ fi
+ ;;
+ *)
+ lt_cv_prog_cc_pic='-fPIC'
+ ;;
+ esac
+ else
+ # PORTME Check for PIC flags for the system compiler.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ lt_cv_prog_cc_wl='-Wl,'
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_cv_prog_cc_static='-Bstatic'
+ else
+ lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ # Is there a better lt_cv_prog_cc_static that works with the bundled CC?
+ lt_cv_prog_cc_wl='-Wl,'
+ lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive"
+ lt_cv_prog_cc_pic='+Z'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_cv_prog_cc_wl='-Wl,'
+ lt_cv_prog_cc_static='-non_shared'
+ # PIC (with -KPIC) is the default.
+ ;;
+
+ cygwin* | mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_cv_prog_cc_pic='-DDLL_EXPORT'
+ ;;
+
+ newsos6)
+ lt_cv_prog_cc_pic='-KPIC'
+ lt_cv_prog_cc_static='-Bstatic'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ # All OSF/1 code is PIC.
+ lt_cv_prog_cc_wl='-Wl,'
+ lt_cv_prog_cc_static='-non_shared'
+ ;;
+
+ sco3.2v5*)
+ lt_cv_prog_cc_pic='-Kpic'
+ lt_cv_prog_cc_static='-dn'
+ lt_cv_prog_cc_shlib='-belf'
+ ;;
+
+ solaris*)
+ lt_cv_prog_cc_pic='-KPIC'
+ lt_cv_prog_cc_static='-Bstatic'
+ lt_cv_prog_cc_wl='-Wl,'
+ ;;
+
+ sunos4*)
+ lt_cv_prog_cc_pic='-PIC'
+ lt_cv_prog_cc_static='-Bstatic'
+ lt_cv_prog_cc_wl='-Qoption ld '
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ lt_cv_prog_cc_pic='-KPIC'
+ lt_cv_prog_cc_static='-Bstatic'
+ if test "x$host_vendor" = xsni; then
+ lt_cv_prog_cc_wl='-LD'
+ else
+ lt_cv_prog_cc_wl='-Wl,'
+ fi
+ ;;
+
+ uts4*)
+ lt_cv_prog_cc_pic='-pic'
+ lt_cv_prog_cc_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_cv_prog_cc_pic='-Kconform_pic'
+ lt_cv_prog_cc_static='-Bstatic'
+ fi
+ ;;
+
+ *)
+ lt_cv_prog_cc_can_build_shared=no
+ ;;
+ esac
+ fi
+])
+if test -z "$lt_cv_prog_cc_pic"; then
+ AC_MSG_RESULT([none])
+else
+ AC_MSG_RESULT([$lt_cv_prog_cc_pic])
+
+ # Check to make sure the pic_flag actually works.
+ AC_MSG_CHECKING([if $compiler PIC flag $lt_cv_prog_cc_pic works])
+ AC_CACHE_VAL(lt_cv_prog_cc_pic_works, [dnl
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC"
+ AC_TRY_COMPILE([], [], [dnl
+ case $host_os in
+ hpux9* | hpux10* | hpux11*)
+ # On HP-UX, both CC and GCC only warn that PIC is supported... then
+ # they create non-PIC objects. So, if there were any warnings, we
+ # assume that PIC is not supported.
+ if test -s conftest.err; then
+ lt_cv_prog_cc_pic_works=no
+ else
+ lt_cv_prog_cc_pic_works=yes
+ fi
+ ;;
+ *)
+ lt_cv_prog_cc_pic_works=yes
+ ;;
+ esac
+ ], [dnl
+ lt_cv_prog_cc_pic_works=no
+ ])
+ CFLAGS="$save_CFLAGS"
+ ])
+
+ if test "X$lt_cv_prog_cc_pic_works" = Xno; then
+ lt_cv_prog_cc_pic=
+ lt_cv_prog_cc_can_build_shared=no
+ else
+ lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic"
+ fi
+
+ AC_MSG_RESULT([$lt_cv_prog_cc_pic_works])
+fi
+
+# Check for any special shared library compilation flags.
+if test -n "$lt_cv_prog_cc_shlib"; then
+ AC_MSG_WARN([\`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries])
+ if echo "$old_CC $old_CFLAGS " | egrep -e "[[ ]]$lt_cv_prog_cc_shlib[[ ]]" >/dev/null; then :
+ else
+ AC_MSG_WARN([add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure])
+ lt_cv_prog_cc_can_build_shared=no
+ fi
+fi
+
+AC_MSG_CHECKING([if $compiler static flag $lt_cv_prog_cc_static works])
+AC_CACHE_VAL([lt_cv_prog_cc_static_works], [dnl
+ lt_cv_prog_cc_static_works=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static"
+ AC_TRY_LINK([], [], [lt_cv_prog_cc_static_works=yes])
+ LDFLAGS="$save_LDFLAGS"
+])
+
+# Belt *and* braces to stop my trousers falling down:
+test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static=
+AC_MSG_RESULT([$lt_cv_prog_cc_static_works])
+
+pic_flag="$lt_cv_prog_cc_pic"
+special_shlib_compile_flags="$lt_cv_prog_cc_shlib"
+wl="$lt_cv_prog_cc_wl"
+link_static_flag="$lt_cv_prog_cc_static"
+no_builtin_flag="$lt_cv_prog_cc_no_builtin"
+can_build_shared="$lt_cv_prog_cc_can_build_shared"
+
+
+# Check to see if options -o and -c are simultaneously supported by compiler
+AC_MSG_CHECKING([if $compiler supports -c -o file.$ac_objext])
+AC_CACHE_VAL([lt_cv_compiler_c_o], [
+$rm -r conftest 2>/dev/null
+mkdir conftest
+cd conftest
+echo "int some_variable = 0;" > conftest.$ac_ext
+mkdir out
+# According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+# that will create temporary files in the current directory regardless of
+# the output directory. Thus, making CWD read-only will cause this test
+# to fail, enabling locking or at least warning the user not to do parallel
+# builds.
+chmod -w .
+save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
+compiler_c_o=no
+if { (eval echo configure:__oline__: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s out/conftest.err; then
+ lt_cv_compiler_c_o=no
+ else
+ lt_cv_compiler_c_o=yes
+ fi
+else
+ # Append any errors to the config.log.
+ cat out/conftest.err 1>&AC_FD_CC
+ lt_cv_compiler_c_o=no
+fi
+CFLAGS="$save_CFLAGS"
+chmod u+w .
+$rm conftest* out/*
+rmdir out
+cd ..
+rmdir conftest
+$rm -r conftest 2>/dev/null
+])
+compiler_c_o=$lt_cv_compiler_c_o
+AC_MSG_RESULT([$compiler_c_o])
+
+if test x"$compiler_c_o" = x"yes"; then
+ # Check to see if we can write to a .lo
+ AC_MSG_CHECKING([if $compiler supports -c -o file.lo])
+ AC_CACHE_VAL([lt_cv_compiler_o_lo], [
+ lt_cv_compiler_o_lo=no
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -c -o conftest.lo"
+ save_objext="$ac_objext"
+ ac_objext=lo
+ AC_TRY_COMPILE([], [int some_variable = 0;], [dnl
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ lt_cv_compiler_o_lo=no
+ else
+ lt_cv_compiler_o_lo=yes
+ fi
+ ])
+ ac_objext="$save_objext"
+ CFLAGS="$save_CFLAGS"
+ ])
+ compiler_o_lo=$lt_cv_compiler_o_lo
+ AC_MSG_RESULT([$compiler_o_lo])
+else
+ compiler_o_lo=no
+fi
+
+# Check to see if we can do hard links to lock some files if needed
+hard_links="nottested"
+if test "$compiler_c_o" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ AC_MSG_CHECKING([if we can lock with hard links])
+ hard_links=yes
+ $rm conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ AC_MSG_RESULT([$hard_links])
+ if test "$hard_links" = no; then
+ AC_MSG_WARN([\`$CC' does not support \`-c -o', so \`make -j' may be unsafe])
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+if test "$GCC" = yes; then
+ # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
+ AC_MSG_CHECKING([if $compiler supports -fno-rtti -fno-exceptions])
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext"
+ compiler_rtti_exceptions=no
+ AC_TRY_COMPILE([], [int some_variable = 0;], [dnl
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ compiler_rtti_exceptions=no
+ else
+ compiler_rtti_exceptions=yes
+ fi
+ ])
+ CFLAGS="$save_CFLAGS"
+ AC_MSG_RESULT([$compiler_rtti_exceptions])
+
+ if test "$compiler_rtti_exceptions" = "yes"; then
+ no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
+ else
+ no_builtin_flag=' -fno-builtin'
+ fi
+fi
+
+# See if the linker supports building shared libraries.
+AC_MSG_CHECKING([whether the linker ($LD) supports shared libraries])
+
+allow_undefined_flag=
+no_undefined_flag=
+need_lib_prefix=unknown
+need_version=unknown
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+archive_cmds=
+archive_expsym_cmds=
+old_archive_from_new_cmds=
+old_archive_from_expsyms_cmds=
+export_dynamic_flag_spec=
+whole_archive_flag_spec=
+thread_safe_flag_spec=
+hardcode_into_libs=no
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+hardcode_shlibpath_var=unsupported
+runpath_var=
+link_all_deplibs=unknown
+always_export_symbols=no
+export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
+# include_expsyms should be a list of space-separated symbols to be *always*
+# included in the symbol list
+include_expsyms=
+# exclude_expsyms can be an egrep regular expression of symbols to exclude
+# it will be wrapped by ` (' and `)$', so one must not match beginning or
+# end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+# as well as any symbol that contains `d'.
+exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+# platforms (ab)use it in PIC code, but their linkers get confused if
+# the symbol is explicitly referenced. Since portable code cannot
+# rely on this symbol name, it's probably fine to never include it in
+# preloaded symbol tables.
+extract_expsyms_cmds=
+
+case $host_os in
+cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+openbsd*)
+ with_gnu_ld=no
+ ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ # On AIX, the GNU linker is very broken
+ # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available.
+ ld_shlibs=no
+ cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+ ;;
+
+ amigaos*)
+ archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+
+ # Samuel A. Falvo II <[email protected]> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can use
+ # them.
+ ld_shlibs=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <[email protected]> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+
+ extract_expsyms_cmds='test -f $output_objdir/impgen.c || \
+ sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~
+ test -f $output_objdir/impgen.exe || (cd $output_objdir && \
+ if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \
+ else $CC -o impgen impgen.c ; fi)~
+ $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def'
+
+ old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib'
+
+ # cygwin and mingw dlls have different entry points and sets of symbols
+ # to exclude.
+ # FIXME: what about values for MSVC?
+ dll_entry=__cygwin_dll_entry@12
+ dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~
+ case $host_os in
+ mingw*)
+ # mingw values
+ dll_entry=_DllMainCRTStartup@12
+ dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~
+ ;;
+ esac
+
+ # mingw and cygwin differ, and it's simplest to just exclude the union
+ # of the two symbol sets.
+ dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12
+
+ # recent cygwin and mingw systems supply a stub DllMain which the user
+ # can override, but on older systems we have to supply one (in ltdll.c)
+ if test "x$lt_cv_need_dllmain" = "xyes"; then
+ ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext "
+ ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $''0 > $output_objdir/$soname-ltdll.c~
+ test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~'
+ else
+ ltdll_obj=
+ ltdll_cmds=
+ fi
+
+ # Extract the symbol export list from an `--export-all' def file,
+ # then regenerate the def file from the symbol export list, so that
+ # the compiled dll only exports the symbol export list.
+ # Be careful not to strip the DATA tag left be newer dlltools.
+ export_symbols_cmds="$ltdll_cmds"'
+ $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~
+ sed -e "1,/EXPORTS/d" -e "s/ @ [[0-9]]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols'
+
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is.
+ # If DATA tags from a recent dlltool are present, honour them!
+ archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname-def;
+ else
+ echo EXPORTS > $output_objdir/$soname-def;
+ _lt_hint=1;
+ cat $export_symbols | while read symbol; do
+ set dummy \$symbol;
+ case \[$]# in
+ 2) echo " \[$]2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;;
+ *) echo " \[$]2 @ \$_lt_hint \[$]3 ; " >> $output_objdir/$soname-def;;
+ esac;
+ _lt_hint=`expr 1 + \$_lt_hint`;
+ done;
+ fi~
+ '"$ltdll_cmds"'
+ $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
+ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~
+ $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
+ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~
+ $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris* | sysv5*)
+ if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+ elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs" = yes; then
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
+ export_dynamic_flag_spec='${wl}--export-dynamic'
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # dlltool doesn't understand --whole-archive et. al.
+ whole_archive_flag_spec=
+ ;;
+ *)
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ ;;
+ esac
+ fi
+else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes && test -z "$link_static_flag"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ hardcode_direct=yes
+ archive_cmds=''
+ hardcode_libdir_separator=':'
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[[012]]|aix4.[[012]].*)
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ hardcode_direct=yes
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ esac
+
+ shared_flag='-shared'
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ shared_flag='${wl}-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall can do strange things, so it is better to
+ # generate a list of symbols to export.
+ always_export_symbols=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
+ archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+ else
+ hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='${wl}-berok'
+ # This is a bit strange, but is similar to how AIX traditionally builds
+ # it's shared libraries.
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ ;;
+
+ darwin* | rhapsody*)
+ case "$host_os" in
+ rhapsody* | darwin1.[[012]])
+ allow_undefined_flag='-undefined suppress'
+ ;;
+ *) # Darwin 1.3 on
+ allow_undefined_flag='-flat_namespace -undefined suppress'
+ ;;
+ esac
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes. Also zsh mangles
+ # `"' quotes if we put them in here... so don't!
+ archive_cmds='$nonopt $(test .$module = .yes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linker_flags -install_name $rpath/$soname $verstring'
+ # We need to add '_' to the symbols in $export_symbols first
+ #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ whole_archive_flag_spec='-all_load $convenience'
+ ;;
+
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd*)
+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ case $host_os in
+ hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
+ *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;;
+ esac
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ hardcode_minus_L=yes # Not in the search PATH, but as the default
+ # location of the library.
+ export_dynamic_flag_spec='${wl}-E'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ link_all_deplibs=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
+
+ openbsd*)
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ else
+ case "$host_os" in
+ openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+ #Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ hardcode_libdir_separator=:
+ ;;
+
+ sco3.2v5*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ export_dynamic_flag_spec='${wl}-Bexport'
+ ;;
+
+ solaris*)
+ # gcc --version < 3.0 without binutils cannot create self contained
+ # shared libraries reliably, requiring libgcc.a to resolve some of
+ # the object symbols generated in some cases. Libraries that use
+ # assert need libgcc.a to resolve __eprintf, for example. Linking
+ # a copy of libgcc.a into every shared library to guarantee resolving
+ # such symbols causes other problems: According to Tim Van Holder
+ # <[email protected]>, C++ libraries end up with a separate
+ # (to the application) exception stack for one thing.
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ case `$CC --version 2>/dev/null` in
+ [[12]].*)
+ cat <<EOF 1>&2
+
+*** Warning: Releases of GCC earlier than version 3.0 cannot reliably
+*** create self contained shared libraries on Solaris systems, without
+*** introducing a dependency on libgcc.a. Therefore, libtool is disabling
+*** -no-undefined support, which will at least allow you to build shared
+*** libraries. However, you may find that when you link such libraries
+*** into an application without using GCC, you have to manually add
+*** \`gcc --print-libgcc-file-name\` to the link command. We urge you to
+*** upgrade to a newer version of GCC. Another option is to rebuild your
+*** current GCC to use the GNU linker from GNU binutils 2.9.1 or newer.
+
+EOF
+ no_undefined_flag=
+ ;;
+ esac
+ fi
+ # $CC -shared without GNU ld will not create a library from C++
+ # object files and a static libstdc++, better avoid it by now
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+ *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ if test "x$host_vendor" = xsno; then
+ archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ else
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ fi
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv5*)
+ no_undefined_flag=' -z text'
+ # $CC -shared without GNU ld will not create a library from C++
+ # object files and a static libstdc++, better avoid it by now
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ hardcode_libdir_flag_spec=
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4.2uw2*)
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=no
+ hardcode_runpath_var=yes
+ runpath_var=LD_RUN_PATH
+ ;;
+
+ sysv5uw7* | unixware7*)
+ no_undefined_flag='${wl}-z ${wl}text'
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+fi
+AC_MSG_RESULT([$ld_shlibs])
+test "$ld_shlibs" = no && can_build_shared=no
+
+# Check hardcoding attributes.
+AC_MSG_CHECKING([how to hardcode library paths into programs])
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" || \
+ test -n "$runpath_var"; then
+
+ # We can hardcode non-existant directories.
+ if test "$hardcode_direct" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$hardcode_shlibpath_var" != no &&
+ test "$hardcode_minus_L" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
+fi
+AC_MSG_RESULT([$hardcode_action])
+
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+else
+ AC_MSG_RESULT([no])
+fi
+
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+# PORTME Fill in your ld.so characteristics
+AC_MSG_CHECKING([dynamic linker characteristics])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}.so$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}.so$major'
+ ;;
+
+aix4* | aix5*)
+ version_type=linux
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[[01]] | aix4.[[01]].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can
+ # not hardcode correct soname into executable. Probably we can
+ # add versioning support to collect2, so additional links can
+ # be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}.so$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+ ;;
+
+beos*)
+ library_names_spec='${libname}.so'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi4*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ soname_spec='${libname}${release}.so$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ export_dynamic_flag_spec=-rdynamic
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ need_version=no
+ need_lib_prefix=no
+ case $GCC,$host_os in
+ yes,cygwin*)
+ library_names_spec='$libname.dll.a'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll'
+ postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog .libs/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $rm \$dlpath'
+ ;;
+ yes,mingw*)
+ library_names_spec='${libname}`echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
+ ;;
+ yes,pw32*)
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
+ ;;
+ *)
+ library_names_spec='${libname}`echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes.
+ library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)'
+ soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd*)
+ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ *)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
+ soname_spec='${libname}${release}.so$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ dynamic_linker="$host_os dld.sl"
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
+ soname_spec='${libname}${release}.sl$major'
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *) version_type=irix ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}.so$major'
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux-gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ soname_spec='${libname}${release}.so$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
+ soname_spec='${libname}${release}.so$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+openbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case "$host_os" in
+ openbsd2.[[89]] | openbsd2.[[89]].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+os2*)
+ libname_spec='$name'
+ need_lib_prefix=no
+ library_names_spec='$libname.dll $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_version=no
+ need_lib_prefix=no
+ soname_spec='${libname}${release}.so'
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+sco3.2v5*)
+ version_type=osf
+ soname_spec='${libname}${release}.so$major'
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ soname_spec='${libname}${release}.so$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ version_type=linux
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ soname_spec='${libname}${release}.so$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ soname_spec='${libname}${release}.so$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ soname_spec='${libname}${release}.so$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
+ soname_spec='$libname.so.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+# Report the final consequences.
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+aix4*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+if test "$hardcode_action" = relink; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+AC_LIBTOOL_DLOPEN_SELF
+
+if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+ AC_CACHE_VAL([lt_cv_archive_cmds_need_lc],
+ [$rm conftest*
+ echo 'static int dummy;' > conftest.$ac_ext
+
+ if AC_TRY_EVAL(ac_compile); then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_cv_prog_cc_wl
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if AC_TRY_EVAL(archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
+ then
+ lt_cv_archive_cmds_need_lc=no
+ else
+ lt_cv_archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi])
+ AC_MSG_RESULT([$lt_cv_archive_cmds_need_lc])
+ ;;
+ esac
+fi
+need_lc=${lt_cv_archive_cmds_need_lc-yes}
+
+# The second clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+ :
+else
+ # If there is no Makefile yet, we rely on a make rule to execute
+ # `config.status --recheck' to rerun these tests and create the
+ # libtool script then.
+ test -f Makefile && make "$ltmain"
+fi
+
+if test -f "$ltmain"; then
+ trap "$rm \"${ofile}T\"; exit 1" 1 2 15
+ $rm -f "${ofile}T"
+
+ echo creating $ofile
+
+ # Now quote all the things that may contain metacharacters while being
+ # careful not to overquote the AC_SUBSTed values. We take copies of the
+ # variables and quote the copies for generation of the libtool script.
+ for var in echo old_CC old_CFLAGS \
+ AR AR_FLAGS CC LD LN_S NM SHELL \
+ reload_flag reload_cmds wl \
+ pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
+ thread_safe_flag_spec whole_archive_flag_spec libname_spec \
+ library_names_spec soname_spec \
+ RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
+ old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \
+ postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \
+ old_striplib striplib file_magic_cmd export_symbols_cmds \
+ deplibs_check_method allow_undefined_flag no_undefined_flag \
+ finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
+ global_symbol_to_c_name_address \
+ hardcode_libdir_flag_spec hardcode_libdir_separator \
+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+ compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
+
+ case $var in
+ reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
+ old_postinstall_cmds | old_postuninstall_cmds | \
+ export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
+ extract_expsyms_cmds | old_archive_from_expsyms_cmds | \
+ postinstall_cmds | postuninstall_cmds | \
+ finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+ # Double-quote double-evaled strings.
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+ ;;
+ esac
+ done
+
+ cat <<__EOF__ > "${ofile}T"
+#! $SHELL
+
+# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996-2000 Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <[email protected]>, 1996
+#
+# 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.
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="sed -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$need_lc
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# The default C compiler.
+CC=$lt_CC
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_wl
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_pic_flag
+pic_mode=$pic_mode
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_compiler_c_o
+
+# Can we write directly to a .lo ?
+compiler_o_lo=$lt_compiler_o_lo
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_link_static_flag
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_no_builtin_flag
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# ### END LIBTOOL CONFIG
+
+__EOF__
+
+ case $host_os in
+ aix3*)
+ cat <<\EOF >> "${ofile}T"
+
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+EOF
+ ;;
+ esac
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | os2*)
+ cat <<'EOF' >> "${ofile}T"
+ # This is a source program that is used to create dlls on Windows
+ # Don't remove nor modify the starting and closing comments
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include <windows.h>
+# #undef WIN32_LEAN_AND_MEAN
+# #include <stdio.h>
+#
+# #ifndef __CYGWIN__
+# # ifdef __CYGWIN32__
+# # define __CYGWIN__ __CYGWIN32__
+# # endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include <cygwin/cygwin_dll.h>
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+# __hDllInstance_base = hInst;
+# return TRUE;
+# }
+# /* ltdll.c ends here */
+ # This is a source program that is used to create import libraries
+ # on Windows for dlls which lack them. Don't remove nor modify the
+ # starting and closing comments
+# /* impgen.c starts here */
+# /* Copyright (C) 1999-2000 Free Software Foundation, Inc.
+#
+# This file is part of GNU libtool.
+#
+# 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> /* for printf() */
+# #include <unistd.h> /* for open(), lseek(), read() */
+# #include <fcntl.h> /* for O_RDONLY, O_BINARY */
+# #include <string.h> /* for strdup() */
+#
+# /* O_BINARY isn't required (or even defined sometimes) under Unix */
+# #ifndef O_BINARY
+# #define O_BINARY 0
+# #endif
+#
+# static unsigned int
+# pe_get16 (fd, offset)
+# int fd;
+# int offset;
+# {
+# unsigned char b[2];
+# lseek (fd, offset, SEEK_SET);
+# read (fd, b, 2);
+# return b[0] + (b[1]<<8);
+# }
+#
+# static unsigned int
+# pe_get32 (fd, offset)
+# int fd;
+# int offset;
+# {
+# unsigned char b[4];
+# lseek (fd, offset, SEEK_SET);
+# read (fd, b, 4);
+# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
+# }
+#
+# static unsigned int
+# pe_as32 (ptr)
+# void *ptr;
+# {
+# unsigned char *b = ptr;
+# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
+# }
+#
+# int
+# main (argc, argv)
+# int argc;
+# char *argv[];
+# {
+# int dll;
+# unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
+# unsigned long export_rva, export_size, nsections, secptr, expptr;
+# unsigned long name_rvas, nexp;
+# unsigned char *expdata, *erva;
+# char *filename, *dll_name;
+#
+# filename = argv[1];
+#
+# dll = open(filename, O_RDONLY|O_BINARY);
+# if (dll < 1)
+# return 1;
+#
+# dll_name = filename;
+#
+# for (i=0; filename[i]; i++)
+# if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':')
+# dll_name = filename + i +1;
+#
+# pe_header_offset = pe_get32 (dll, 0x3c);
+# opthdr_ofs = pe_header_offset + 4 + 20;
+# num_entries = pe_get32 (dll, opthdr_ofs + 92);
+#
+# if (num_entries < 1) /* no exports */
+# return 1;
+#
+# export_rva = pe_get32 (dll, opthdr_ofs + 96);
+# export_size = pe_get32 (dll, opthdr_ofs + 100);
+# nsections = pe_get16 (dll, pe_header_offset + 4 +2);
+# secptr = (pe_header_offset + 4 + 20 +
+# pe_get16 (dll, pe_header_offset + 4 + 16));
+#
+# expptr = 0;
+# for (i = 0; i < nsections; i++)
+# {
+# char sname[8];
+# unsigned long secptr1 = secptr + 40 * i;
+# unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
+# unsigned long vsize = pe_get32 (dll, secptr1 + 16);
+# unsigned long fptr = pe_get32 (dll, secptr1 + 20);
+# lseek(dll, secptr1, SEEK_SET);
+# read(dll, sname, 8);
+# if (vaddr <= export_rva && vaddr+vsize > export_rva)
+# {
+# expptr = fptr + (export_rva - vaddr);
+# if (export_rva + export_size > vaddr + vsize)
+# export_size = vsize - (export_rva - vaddr);
+# break;
+# }
+# }
+#
+# expdata = (unsigned char*)malloc(export_size);
+# lseek (dll, expptr, SEEK_SET);
+# read (dll, expdata, export_size);
+# erva = expdata - export_rva;
+#
+# nexp = pe_as32 (expdata+24);
+# name_rvas = pe_as32 (expdata+32);
+#
+# printf ("EXPORTS\n");
+# for (i = 0; i<nexp; i++)
+# {
+# unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
+# printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
+# }
+#
+# return 0;
+# }
+# /* impgen.c ends here */
+
+EOF
+ ;;
+ esac
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '$q' "$ltmain" >> "${ofile}T" || (rm -f "${ofile}T"; exit 1)
+
+ mv -f "${ofile}T" "$ofile" || \
+ (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T")
+ chmod +x "$ofile"
+fi
+
+])# _LT_AC_LTCONFIG_HACK
+
# AC_LIBTOOL_DLOPEN - enable checks for dlopen support
-AC_DEFUN(AC_LIBTOOL_DLOPEN, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])])
+AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])])
# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
-AC_DEFUN(AC_LIBTOOL_WIN32_DLL, [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])])
+AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])])
# AC_ENABLE_SHARED - implement the --enable-shared flag
# Usage: AC_ENABLE_SHARED[(DEFAULT)]
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
# `yes'.
-AC_DEFUN(AC_ENABLE_SHARED, [dnl
-define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_DEFUN([AC_ENABLE_SHARED],
+[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
AC_ARG_ENABLE(shared,
changequote(<<, >>)dnl
<< --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
changequote([, ])dnl
[p=${PACKAGE-default}
-case "$enableval" in
+case $enableval in
yes) enable_shared=yes ;;
no) enable_shared=no ;;
*)
@@ -272,7 +3409,8 @@
])
# AC_DISABLE_SHARED - set the default shared flag to --disable-shared
-AC_DEFUN(AC_DISABLE_SHARED, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_DEFUN([AC_DISABLE_SHARED],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
AC_ENABLE_SHARED(no)])
# AC_ENABLE_STATIC - implement the --enable-static flag
@@ -279,14 +3417,14 @@
# Usage: AC_ENABLE_STATIC[(DEFAULT)]
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
# `yes'.
-AC_DEFUN(AC_ENABLE_STATIC, [dnl
-define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_DEFUN([AC_ENABLE_STATIC],
+[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
AC_ARG_ENABLE(static,
changequote(<<, >>)dnl
<< --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
changequote([, ])dnl
[p=${PACKAGE-default}
-case "$enableval" in
+case $enableval in
yes) enable_static=yes ;;
no) enable_static=no ;;
*)
@@ -305,7 +3443,8 @@
])
# AC_DISABLE_STATIC - set the default static flag to --disable-static
-AC_DEFUN(AC_DISABLE_STATIC, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_DEFUN([AC_DISABLE_STATIC],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
AC_ENABLE_STATIC(no)])
@@ -313,14 +3452,14 @@
# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
# `yes'.
-AC_DEFUN(AC_ENABLE_FAST_INSTALL, [dnl
-define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_DEFUN([AC_ENABLE_FAST_INSTALL],
+[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
AC_ARG_ENABLE(fast-install,
changequote(<<, >>)dnl
<< --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
changequote([, ])dnl
[p=${PACKAGE-default}
-case "$enableval" in
+case $enableval in
yes) enable_fast_install=yes ;;
no) enable_fast_install=no ;;
*)
@@ -338,12 +3477,98 @@
enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl
])
-# AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install
-AC_DEFUN(AC_DISABLE_FAST_INSTALL, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+# AC_DISABLE_FAST_INSTALL - set the default to --disable-fast-install
+AC_DEFUN([AC_DISABLE_FAST_INSTALL],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
AC_ENABLE_FAST_INSTALL(no)])
+# AC_LIBTOOL_PICMODE - implement the --with-pic flag
+# Usage: AC_LIBTOOL_PICMODE[(MODE)]
+# Where MODE is either `yes' or `no'. If omitted, it defaults to
+# `both'.
+AC_DEFUN([AC_LIBTOOL_PICMODE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+pic_mode=ifelse($#,1,$1,default)])
+
+
+# AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library
+AC_DEFUN([AC_PATH_TOOL_PREFIX],
+[AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+ /*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+ ?:/*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
+ ;;
+ *)
+ ac_save_MAGIC_CMD="$MAGIC_CMD"
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word. This closes a longstanding sh security hole.
+ ac_dummy="ifelse([$2], , $PATH, [$2])"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$1; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ egrep "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** [email protected]
+
+EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ MAGIC_CMD="$ac_save_MAGIC_CMD"
+ ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ AC_MSG_RESULT($MAGIC_CMD)
+else
+ AC_MSG_RESULT(no)
+fi
+])
+
+
+# AC_PATH_MAGIC - find a file program which can recognise a shared library
+AC_DEFUN([AC_PATH_MAGIC],
+[AC_REQUIRE([AC_CHECK_TOOL_PREFIX])dnl
+AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin:$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ AC_PATH_TOOL_PREFIX(file, /usr/bin:$PATH)
+ else
+ MAGIC_CMD=:
+ fi
+fi
+])
+
+
# AC_PROG_LD - find the path to the GNU or non-GNU linker
-AC_DEFUN(AC_PROG_LD,
+AC_DEFUN([AC_PROG_LD],
[AC_ARG_WITH(gnu-ld,
[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
@@ -350,17 +3575,22 @@
AC_REQUIRE([AC_PROG_CC])dnl
AC_REQUIRE([AC_CANONICAL_HOST])dnl
AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR])dnl
ac_prog=ld
-if test "$ac_cv_prog_gcc" = yes; then
+if test "$GCC" = yes; then
# Check if gcc -print-prog-name=ld gives a path.
AC_MSG_CHECKING([for ld used by GCC])
- ac_prog=`($CC -print-prog-name=ld) 2>&5`
- case "$ac_prog" in
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
# Accept absolute paths.
-changequote(,)dnl
- [\\/]* | [A-Za-z]:[\\/]*)
- re_direlt='/[^/][^/]*/\.\./'
-changequote([,])dnl
+ [[\\/]]* | [[A-Za-z]]:[[\\/]]*)
+ re_direlt='/[[^/]][[^/]]*/\.\./'
# Canonicalize the path of ld
ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
@@ -382,17 +3612,17 @@
else
AC_MSG_CHECKING([for non-GNU ld])
fi
-AC_CACHE_VAL(ac_cv_path_LD,
+AC_CACHE_VAL(lt_cv_path_LD,
[if test -z "$LD"; then
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=.
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- ac_cv_path_LD="$ac_dir/$ac_prog"
+ lt_cv_path_LD="$ac_dir/$ac_prog"
# Check to see if the program is GNU ld. I'd rather use --version,
# but apparently some GNU ld's only accept -v.
# Break only if it was the GNU/non-GNU ld that we prefer.
- if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+ if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
test "$with_gnu_ld" != no && break
else
test "$with_gnu_ld" != yes && break
@@ -401,9 +3631,9 @@
done
IFS="$ac_save_ifs"
else
- ac_cv_path_LD="$LD" # Let the user override the test with a path.
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
fi])
-LD="$ac_cv_path_LD"
+LD="$lt_cv_path_LD"
if test -n "$LD"; then
AC_MSG_RESULT($LD)
else
@@ -413,56 +3643,246 @@
AC_PROG_LD_GNU
])
-AC_DEFUN(AC_PROG_LD_GNU,
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld,
+# AC_PROG_LD_GNU -
+AC_DEFUN([AC_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
- ac_cv_prog_gnu_ld=yes
+ lt_cv_prog_gnu_ld=yes
else
- ac_cv_prog_gnu_ld=no
+ lt_cv_prog_gnu_ld=no
fi])
+with_gnu_ld=$lt_cv_prog_gnu_ld
])
+# AC_PROG_LD_RELOAD_FLAG - find reload flag for linker
+# -- PORTME Some linkers may need a different reload flag.
+AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
+[AC_CACHE_CHECK([for $LD option to reload object files], lt_cv_ld_reload_flag,
+[lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+test -n "$reload_flag" && reload_flag=" $reload_flag"
+])
+
+# AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies
+# -- PORTME fill in with the dynamic library characteristics
+AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
+[AC_CACHE_CHECK([how to recognise dependant libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given egrep regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi4*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin* | mingw* | pw32*)
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ case "$host_os" in
+ rhapsody* | darwin1.[[012]])
+ lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1`
+ ;;
+ *) # Darwin 1.3 on
+ lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
+ ;;
+ esac
+ ;;
+
+freebsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20*|hpux11*)
+ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ irix5* | nonstopux*)
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[[1234]] dynamic lib MIPS - version 1"
+ ;;
+ esac
+ lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux-gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/\.]]+\.so\.[[0-9]]+\.[[0-9]]+$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[[^/\.]]+\.so$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+openbsd*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object'
+ else
+ lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sco3.2v5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+
+sysv5uw[[78]]* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ esac
+ ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+])
+
+
# AC_PROG_NM - find the path to a BSD-compatible name lister
-AC_DEFUN(AC_PROG_NM,
-[AC_MSG_CHECKING([for BSD-compatible nm])
-AC_CACHE_VAL(ac_cv_path_NM,
+AC_DEFUN([AC_PROG_NM],
+[AC_REQUIRE([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR])dnl
+AC_MSG_CHECKING([for BSD-compatible nm])
+AC_CACHE_VAL(lt_cv_path_NM,
[if test -n "$NM"; then
# Let the user override the test.
- ac_cv_path_NM="$NM"
+ lt_cv_path_NM="$NM"
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then
+ tmp_nm=$ac_dir/${ac_tool_prefix}nm
+ if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then
# Check to see if the nm accepts a BSD-compat flag.
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
- if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
- ac_cv_path_NM="$ac_dir/nm -B"
+ # Tru64's nm complains that /dev/null is an invalid object file
+ if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then
+ lt_cv_path_NM="$tmp_nm -B"
break
- elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
- ac_cv_path_NM="$ac_dir/nm -p"
+ elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
+ lt_cv_path_NM="$tmp_nm -p"
break
else
- ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
continue # so that we can try to find one that supports BSD flags
fi
fi
done
IFS="$ac_save_ifs"
- test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm
+ test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
fi])
-NM="$ac_cv_path_NM"
+NM="$lt_cv_path_NM"
AC_MSG_RESULT([$NM])
])
# AC_CHECK_LIBM - check for math library
-AC_DEFUN(AC_CHECK_LIBM,
+AC_DEFUN([AC_CHECK_LIBM],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
LIBM=
-case "$lt_target" in
-*-*-beos* | *-*-cygwin*)
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32*)
# These system don't have libm
;;
*-ncr-sysv4.3*)
@@ -476,37 +3896,41 @@
])
# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
-# the libltdl convenience library and INCLTDL to the include flags for
+# the libltdl convenience library and LTDLINCL to the include flags for
# the libltdl header and adds --enable-ltdl-convenience to the
-# configure arguments. Note that LIBLTDL and INCLTDL are not
+# configure arguments. Note that LIBLTDL and LTDLINCL are not
# AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If DIR is not
# provided, it is assumed to be `libltdl'. LIBLTDL will be prefixed
-# with '${top_builddir}/' and INCLTDL will be prefixed with
+# with '${top_builddir}/' and LTDLINCL will be prefixed with
# '${top_srcdir}/' (note the single quotes!). If your package is not
# flat and you're not using automake, define top_builddir and
# top_srcdir appropriately in the Makefiles.
-AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
- case "$enable_ltdl_convenience" in
+AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+ case $enable_ltdl_convenience in
no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
"") enable_ltdl_convenience=yes
ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
esac
LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
- INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+ LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+ # For backwards non-gettext consistent compatibility...
+ INCLTDL="$LTDLINCL"
])
# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
-# the libltdl installable library and INCLTDL to the include flags for
+# the libltdl installable library and LTDLINCL to the include flags for
# the libltdl header and adds --enable-ltdl-install to the configure
-# arguments. Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is
+# arguments. Note that LIBLTDL and LTDLINCL are not AC_SUBSTed, nor is
# AC_CONFIG_SUBDIRS called. If DIR is not provided and an installed
# libltdl is not found, it is assumed to be `libltdl'. LIBLTDL will
-# be prefixed with '${top_builddir}/' and INCLTDL will be prefixed
+# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed
# with '${top_srcdir}/' (note the single quotes!). If your package is
# not flat and you're not using automake, define top_builddir and
# top_srcdir appropriately in the Makefiles.
# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
-AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
AC_CHECK_LIB(ltdl, main,
[test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
[if test x"$enable_ltdl_install" = xno; then
@@ -518,23 +3942,25 @@
if test x"$enable_ltdl_install" = x"yes"; then
ac_configure_args="$ac_configure_args --enable-ltdl-install"
LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
- INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+ LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
else
ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
LIBLTDL="-lltdl"
- INCLTDL=
+ LTDLINCL=
fi
+ # For backwards non-gettext consistent compatibility...
+ INCLTDL="$LTDLINCL"
])
-dnl old names
-AC_DEFUN(AM_PROG_LIBTOOL, [indir([AC_PROG_LIBTOOL])])dnl
-AC_DEFUN(AM_ENABLE_SHARED, [indir([AC_ENABLE_SHARED], $@)])dnl
-AC_DEFUN(AM_ENABLE_STATIC, [indir([AC_ENABLE_STATIC], $@)])dnl
-AC_DEFUN(AM_DISABLE_SHARED, [indir([AC_DISABLE_SHARED], $@)])dnl
-AC_DEFUN(AM_DISABLE_STATIC, [indir([AC_DISABLE_STATIC], $@)])dnl
-AC_DEFUN(AM_PROG_LD, [indir([AC_PROG_LD])])dnl
-AC_DEFUN(AM_PROG_NM, [indir([AC_PROG_NM])])dnl
+# old names
+AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL])
+AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+AC_DEFUN([AM_PROG_LD], [AC_PROG_LD])
+AC_DEFUN([AM_PROG_NM], [AC_PROG_NM])
-dnl This is just to silence aclocal about the macro not being used
-ifelse([AC_DISABLE_FAST_INSTALL])dnl
+# This is just to silence aclocal about the macro not being used
+ifelse([AC_DISABLE_FAST_INSTALL])
--- a/common/libsndfile/check_libsndfile.py
+++ b/common/libsndfile/check_libsndfile.py
@@ -6,7 +6,7 @@
# The list is provided as a text file.
#
-_EXE_NAME = 'examples/sndfile_info'
+_EXE_NAME = 'examples/sndfile-info'
def dump_status_output_exit (status, output, msg = None):
@@ -56,8 +56,8 @@
if line [0] == '#':
continue
print line
- if os.path.isfile (line):
- sfinfo_check_ok (line)
+ if os.path.isfile ('/home/erikd/' + line):
+ sfinfo_check_ok ('/home/erikd/' + line)
else:
print "Bad file name : ", line
sys.exit (0)
--- a/common/libsndfile/config.guess
+++ b/common/libsndfile/config.guess
@@ -1,8 +1,10 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc.
-#
+
+timestamp='2001-09-04'
+
# This file 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
@@ -30,28 +32,88 @@
# exits with 0. Otherwise, it exits with 1.
#
# The plan is that this can be called by configure scripts if you
-# don't specify an explicit system type (host/target name).
-#
-# Only a few systems have been added to this list; please add others
-# (but try to keep the structure clean).
-#
+# don't specify an explicit build system type.
-# Use $HOST_CC if defined. $CC may point to a cross-compiler
-if test x"$CC_FOR_BUILD" = x; then
- if test x"$HOST_CC" != x; then
- CC_FOR_BUILD="$HOST_CC"
- else
- if test x"$CC" != x; then
- CC_FOR_BUILD="$CC"
- else
- CC_FOR_BUILD=cc
- fi
- fi
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <[email protected]>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit 0 ;;
+ --version | -v )
+ echo "$version" ; exit 0 ;;
+ --help | --h* | -h )
+ echo "$usage"; exit 0 ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
fi
+dummy=dummy-$$
+trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script.
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int dummy(){}" > $dummy.c ;
+ for c in cc gcc c89 ; do
+ ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
+ if test $? = 0 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ rm -f $dummy.c $dummy.o $dummy.rel ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac'
+
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# ([email protected] 8/24/94.)
+# ([email protected] 1994-08-24)
if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
PATH=$PATH:/.attbin ; export PATH
fi
@@ -58,12 +120,9 @@
UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-dummy=dummy-$$
-trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15
-
# Note: order is significant - the case branches are not exclusive.
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
@@ -77,7 +136,7 @@
# object file format.
# Determine the machine/vendor (is the vendor relevant).
case "${UNAME_MACHINE}" in
- amiga) machine=m68k-cbm ;;
+ amiga) machine=m68k-unknown ;;
arm32) machine=arm-unknown ;;
atari*) machine=m68k-atari ;;
sun3*) machine=m68k-sun ;;
@@ -87,16 +146,25 @@
ibmrt|romp-ibm) machine=romp-ibm ;;
*) machine=${UNAME_MACHINE}-unknown ;;
esac
- # The Operating System including object format.
- if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- | grep __ELF__ >/dev/null
- then
- # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- # Return netbsd for either. FIX?
- os=netbsd
- else
- os=netbsdelf
- fi
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE}" in
+ i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep __ELF__ >/dev/null
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
# The OS release
release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
@@ -137,6 +205,7 @@
jsr \$26,exit
.end main
EOF
+ eval $set_cc_for_build
$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
if test "$?" = 0 ; then
case `./$dummy` in
@@ -158,6 +227,9 @@
2-307)
UNAME_MACHINE="alphaev67"
;;
+ 2-1307)
+ UNAME_MACHINE="alphaev68"
+ ;;
esac
fi
rm -f $dummy.s $dummy
@@ -173,7 +245,7 @@
echo alpha-dec-winnt3.5
exit 0 ;;
Amiga*:UNIX_System_V:4.0:*)
- echo m68k-cbm-sysv4
+ echo m68k-unknown-sysv4
exit 0;;
amiga:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE}
@@ -205,7 +277,7 @@
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
echo arm-acorn-riscix${UNAME_RELEASE}
exit 0;;
- SR2?01:HI-UX/MPP:*:*)
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
echo hppa1.1-hitachi-hiuxmpp
exit 0;;
Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
@@ -261,6 +333,9 @@
aushp:SunOS:*:*)
echo sparc-auspex-sunos${UNAME_RELEASE}
exit 0 ;;
+ sparc*:NetBSD:*)
+ echo `uname -p`-unknown-netbsd${UNAME_RELEASE}
+ exit 0 ;;
atari*:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
@@ -318,6 +393,7 @@
echo clipper-intergraph-clix${UNAME_RELEASE}
exit 0 ;;
mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
#ifdef __cplusplus
#include <stdio.h> /* for printf() prototype */
@@ -341,10 +417,13 @@
EOF
$CC_FOR_BUILD $dummy.c -o $dummy \
&& ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
- && rm $dummy.c $dummy && exit 0
+ && rm -f $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
echo mips-mips-riscos${UNAME_RELEASE}
exit 0 ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit 0 ;;
Night_Hawk:Power_UNIX:*:*)
echo powerpc-harris-powerunix
exit 0 ;;
@@ -392,11 +471,20 @@
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
- i?86:AIX:*:*)
+ i*86:AIX:*:*)
echo i386-ibm-aix
exit 0 ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit 0 ;;
*:AIX:2:3)
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
#include <sys/systemcfg.h>
@@ -408,7 +496,7 @@
exit(0);
}
EOF
- $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
+ $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
echo rs6000-ibm-aix3.2.5
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
@@ -417,9 +505,9 @@
echo rs6000-ibm-aix3.2
fi
exit 0 ;;
- *:AIX:*:4)
+ *:AIX:*:[45])
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
- if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
IBM_ARCH=rs6000
else
IBM_ARCH=powerpc
@@ -427,7 +515,7 @@
if [ -x /usr/bin/oslevel ] ; then
IBM_REV=`/usr/bin/oslevel`
else
- IBM_REV=4.${UNAME_RELEASE}
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
fi
echo ${IBM_ARCH}-ibm-aix${IBM_REV}
exit 0 ;;
@@ -453,10 +541,29 @@
echo m68k-hp-bsd4.4
exit 0 ;;
9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
case "${UNAME_MACHINE}" in
9000/31? ) HP_ARCH=m68000 ;;
9000/[34]?? ) HP_ARCH=m68k ;;
9000/[678][0-9][0-9])
+ case "${HPUX_REV}" in
+ 11.[0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ esac ;;
+ esac
+ fi ;;
+ esac
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
#define _HPUX_SOURCE
@@ -490,13 +597,19 @@
exit (0);
}
EOF
- (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
- rm -f $dummy.c $dummy
+ (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
+ if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
+ rm -f $dummy.c $dummy
+ fi ;;
esac
- HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
exit 0 ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit 0 ;;
3050*:HI-UX:*:*)
+ eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
#include <unistd.h>
int
@@ -522,7 +635,7 @@
exit (0);
}
EOF
- $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
+ $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
echo unknown-hitachi-hiuxwe2
exit 0 ;;
@@ -532,7 +645,7 @@
9000/8??:4.3bsd:*:*)
echo hppa1.0-hp-bsd
exit 0 ;;
- *9??*:MPE/iX:*:*)
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
echo hppa1.0-hp-mpeix
exit 0 ;;
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
@@ -541,7 +654,7 @@
hp8??:OSF1:*:*)
echo hppa1.0-hp-osf
exit 0 ;;
- i?86:OSF1:*:*)
+ i*86:OSF1:*:*)
if [ -x /usr/sbin/sysversion ] ; then
echo ${UNAME_MACHINE}-unknown-osf1mk
else
@@ -576,19 +689,23 @@
echo xmp-cray-unicos
exit 0 ;;
CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos${UNAME_RELEASE}
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit 0 ;;
CRAY*[A-Z]90:*:*:*)
echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
- -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
exit 0 ;;
CRAY*TS:*:*:*)
echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit 0 ;;
- CRAY*T3E:*:*:*)
+ CRAY*T3D:*:*:*)
echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit 0 ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit 0 ;;
CRAY*SV1:*:*:*)
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit 0 ;;
@@ -595,18 +712,16 @@
CRAY-2:*:*:*)
echo cray2-cray-unicos
exit 0 ;;
- F300:UNIX_System_V:*:*)
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
exit 0 ;;
- F301:UNIX_System_V:*:*)
- echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
- exit 0 ;;
hp300:OpenBSD:*:*)
echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
- i?86:BSD/386:*:* | i?86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
exit 0 ;;
sparc*:BSD/OS:*:*)
@@ -627,6 +742,9 @@
i*:MINGW*:*)
echo ${UNAME_MACHINE}-pc-mingw32
exit 0 ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit 0 ;;
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem?
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
@@ -645,187 +763,96 @@
*:GNU:*:*)
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
exit 0 ;;
- *:Linux:*:*)
-
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit 0 ;;
+ arm*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux
+ exit 0 ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ mips:Linux:*:*)
+ case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in
+ big) echo mips-unknown-linux-gnu && exit 0 ;;
+ little) echo mipsel-unknown-linux-gnu && exit 0 ;;
+ esac
+ ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit 0 ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit 0 ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ exit 0 ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-gnu ;;
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ *) echo hppa-unknown-linux-gnu ;;
+ esac
+ exit 0 ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+ exit 0 ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit 0 ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit 0 ;;
+ x86_64:Linux:*:*)
+ echo x86_64-unknown-linux-gnu
+ exit 0 ;;
+ i*86:Linux:*:*)
# The BFD linker knows what the default object file format is, so
# first see if it will tell us. cd to the root directory to prevent
# problems with other programs or directories called `ld' in the path.
- ld_help_string=`cd /; ld --help 2>&1`
- ld_supported_emulations=`echo $ld_help_string \
- | sed -ne '/supported emulations:/!d
+ ld_supported_targets=`cd /; ld --help 2>&1 \
+ | sed -ne '/supported targets:/!d
s/[ ][ ]*/ /g
- s/.*supported emulations: *//
+ s/.*supported targets: *//
s/ .*//
p'`
- case "$ld_supported_emulations" in
- *ia64)
- echo "${UNAME_MACHINE}-unknown-linux"
- exit 0
+ case "$ld_supported_targets" in
+ elf32-i386)
+ TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
;;
- i?86linux)
+ a.out-i386-linux)
echo "${UNAME_MACHINE}-pc-linux-gnuaout"
- exit 0
- ;;
- elf_i?86)
- echo "${UNAME_MACHINE}-pc-linux"
- exit 0
- ;;
- i?86coff)
+ exit 0 ;;
+ coff-i386)
echo "${UNAME_MACHINE}-pc-linux-gnucoff"
- exit 0
- ;;
- sparclinux)
- echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
- exit 0
- ;;
- armlinux)
- echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
- exit 0
- ;;
- elf32arm*)
- echo "${UNAME_MACHINE}-unknown-linux-gnuoldld"
- exit 0
- ;;
- armelf_linux*)
- echo "${UNAME_MACHINE}-unknown-linux-gnu"
- exit 0
- ;;
- m68klinux)
- echo "${UNAME_MACHINE}-unknown-linux-gnuaout"
- exit 0
- ;;
- elf32ppc | elf32ppclinux)
- # Determine Lib Version
- cat >$dummy.c <<EOF
-#include <features.h>
-#if defined(__GLIBC__)
-extern char __libc_version[];
-extern char __libc_release[];
-#endif
-main(argc, argv)
- int argc;
- char *argv[];
-{
-#if defined(__GLIBC__)
- printf("%s %s\n", __libc_version, __libc_release);
-#else
- printf("unkown\n");
-#endif
- return 0;
-}
-EOF
- LIBC=""
- $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
- if test "$?" = 0 ; then
- ./$dummy | grep 1\.99 > /dev/null
- if test "$?" = 0 ; then
- LIBC="libc1"
- fi
- fi
- rm -f $dummy.c $dummy
- echo powerpc-unknown-linux-gnu${LIBC}
- exit 0
- ;;
+ exit 0 ;;
+ "")
+ # Either a pre-BFD a.out linker (linux-gnuoldld) or
+ # one that does not give us useful --help.
+ echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+ exit 0 ;;
esac
-
- if test "${UNAME_MACHINE}" = "alpha" ; then
- cat <<EOF >$dummy.s
- .data
- \$Lformat:
- .byte 37,100,45,37,120,10,0 # "%d-%x\n"
-
- .text
- .globl main
- .align 4
- .ent main
- main:
- .frame \$30,16,\$26,0
- ldgp \$29,0(\$27)
- .prologue 1
- .long 0x47e03d80 # implver \$0
- lda \$2,-1
- .long 0x47e20c21 # amask \$2,\$1
- lda \$16,\$Lformat
- mov \$0,\$17
- not \$1,\$18
- jsr \$26,printf
- ldgp \$29,0(\$26)
- mov 0,\$16
- jsr \$26,exit
- .end main
-EOF
- LIBC=""
- $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
- if test "$?" = 0 ; then
- case `./$dummy` in
- 0-0)
- UNAME_MACHINE="alpha"
- ;;
- 1-0)
- UNAME_MACHINE="alphaev5"
- ;;
- 1-1)
- UNAME_MACHINE="alphaev56"
- ;;
- 1-101)
- UNAME_MACHINE="alphapca56"
- ;;
- 2-303)
- UNAME_MACHINE="alphaev6"
- ;;
- 2-307)
- UNAME_MACHINE="alphaev67"
- ;;
- esac
-
- objdump --private-headers $dummy | \
- grep ld.so.1 > /dev/null
- if test "$?" = 0 ; then
- LIBC="libc1"
- fi
- fi
- rm -f $dummy.s $dummy
- echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
- elif test "${UNAME_MACHINE}" = "mips" ; then
- cat >$dummy.c <<EOF
-#ifdef __cplusplus
-#include <stdio.h> /* for printf() prototype */
- int main (int argc, char *argv[]) {
-#else
- int main (argc, argv) int argc; char *argv[]; {
-#endif
-#ifdef __MIPSEB__
- printf ("%s-unknown-linux-gnu\n", argv[1]);
-#endif
-#ifdef __MIPSEL__
- printf ("%sel-unknown-linux-gnu\n", argv[1]);
-#endif
- return 0;
-}
-EOF
- $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
- elif test "${UNAME_MACHINE}" = "s390"; then
- echo s390-ibm-linux && exit 0
- else
- # Either a pre-BFD a.out linker (linux-gnuoldld)
- # or one that does not give us useful --help.
- # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
- # If ld does not provide *any* "supported emulations:"
- # that means it is gnuoldld.
- echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:"
- test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
-
- case "${UNAME_MACHINE}" in
- i?86)
- VENDOR=pc;
- ;;
- *)
- VENDOR=unknown;
- ;;
- esac
- # Determine whether the default compiler is a.out or elf
- cat >$dummy.c <<EOF
+ # Determine whether the default compiler is a.out or elf
+ eval $set_cc_for_build
+ cat >$dummy.c <<EOF
#include <features.h>
#ifdef __cplusplus
#include <stdio.h> /* for printf() prototype */
@@ -836,28 +863,30 @@
#ifdef __ELF__
# ifdef __GLIBC__
# if __GLIBC__ >= 2
- printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
+ printf ("%s-pc-linux-gnu\n", argv[1]);
# else
- printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
+ printf ("%s-pc-linux-gnulibc1\n", argv[1]);
# endif
# else
- printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
+ printf ("%s-pc-linux-gnulibc1\n", argv[1]);
# endif
#else
- printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
+ printf ("%s-pc-linux-gnuaout\n", argv[1]);
#endif
return 0;
}
EOF
- $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
- rm -f $dummy.c $dummy
- fi ;;
-# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
-# are messed up and put the nodename in both sysname and nodename.
- i?86:DYNIX/ptx:4*:*)
+ $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0
+ rm -f $dummy.c $dummy
+ test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+ ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
echo i386-sequent-sysv4
exit 0 ;;
- i?86:UNIX_SV:4.2MP:2.*)
+ i*86:UNIX_SV:4.2MP:2.*)
# Unixware is an offshoot of SVR4, but it has its own version
# number series starting with 2...
# I am not positive that other SVR4 systems won't match this,
@@ -865,7 +894,7 @@
# Use sysv4.2uw... so that sysv4* matches it.
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
exit 0 ;;
- i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
@@ -873,16 +902,15 @@
echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
fi
exit 0 ;;
- i?86:*:5:7*)
- # Fixed at (any) Pentium or better
- UNAME_MACHINE=i586
- if [ ${UNAME_SYSTEM} = "UnixWare" ] ; then
- echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}uw${UNAME_VERSION}
- else
- echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
- fi
+ i*86:*:5:[78]*)
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
exit 0 ;;
- i?86:*:3.2:*)
+ i*86:*:3.2:*)
if test -f /usr/options/cb.name; then
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
@@ -900,7 +928,7 @@
echo ${UNAME_MACHINE}-pc-sysv32
fi
exit 0 ;;
- i?86:*DOS:*:*)
+ i*86:*DOS:*:*)
echo ${UNAME_MACHINE}-pc-msdosdjgpp
exit 0 ;;
pc:*:*:*)
@@ -928,7 +956,7 @@
exit 0 ;;
M68*:*:R3V[567]*:*)
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
- 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
+ 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
OS_REL=''
test -r /etc/.relid \
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
@@ -939,21 +967,24 @@
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
&& echo i486-ncr-sysv4 && exit 0 ;;
- m68*:LynxOS:2.*:*)
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
echo m68k-unknown-lynxos${UNAME_RELEASE}
exit 0 ;;
mc68030:UNIX_System_V:4.*:*)
echo m68k-atari-sysv4
exit 0 ;;
- i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*)
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
echo i386-unknown-lynxos${UNAME_RELEASE}
exit 0 ;;
TSUNAMI:LynxOS:2.*:*)
echo sparc-unknown-lynxos${UNAME_RELEASE}
exit 0 ;;
- rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
+ rs6000:LynxOS:2.*:*)
echo rs6000-unknown-lynxos${UNAME_RELEASE}
exit 0 ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
SM[BE]S:UNIX_SV:*:*)
echo mips-dde-sysv${UNAME_RELEASE}
exit 0 ;;
@@ -971,8 +1002,8 @@
echo ns32k-sni-sysv
fi
exit 0 ;;
- PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <[email protected]>
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <[email protected]>
echo i586-unisys-sysv4
exit 0 ;;
*:UNIX_System_V:4*:FTX*)
@@ -984,10 +1015,14 @@
# From [email protected].
echo i860-stratus-sysv4
exit 0 ;;
+ *:VOS:*:*)
+ # From [email protected].
+ echo hppa1.1-stratus-vos
+ exit 0 ;;
mc68*:A/UX:*:*)
echo m68k-apple-aux${UNAME_RELEASE}
exit 0 ;;
- news*:NEWS-OS:*:6*)
+ news*:NEWS-OS:6*:*)
echo mips-sony-newsos6
exit 0 ;;
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
@@ -1030,9 +1065,12 @@
*:QNX:*:4*)
echo i386-pc-qnx
exit 0 ;;
- NSR-W:NONSTOP_KERNEL:*:*)
+ NSR-[KW]:NONSTOP_KERNEL:*:*)
echo nsr-tandem-nsk${UNAME_RELEASE}
exit 0 ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit 0 ;;
BS2000:POSIX*:*:*)
echo bs2000-siemens-sysv
exit 0 ;;
@@ -1039,11 +1077,52 @@
DS/*:UNIX_System_V:*:*)
echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
exit 0 ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ exit 0 ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit 0 ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit 0 ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit 0 ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit 0 ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit 0 ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit 0 ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit 0 ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit 0 ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit 0 ;;
esac
#echo '(No uname command or uname output not recognized.)' 1>&2
#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+eval $set_cc_for_build
cat >$dummy.c <<EOF
#ifdef _SEQUENT_
# include <sys/types.h>
@@ -1130,12 +1209,25 @@
#endif
#if defined (vax)
-#if !defined (ultrix)
- printf ("vax-dec-bsd\n"); exit (0);
-#else
- printf ("vax-dec-ultrix\n"); exit (0);
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
#endif
-#endif
#if defined (alliant) && defined (i860)
printf ("i860-alliant-bsd\n"); exit (0);
@@ -1145,7 +1237,7 @@
}
EOF
-$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0
+$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
rm -f $dummy.c $dummy
# Apollos put the system type in the environment.
@@ -1178,6 +1270,48 @@
esac
fi
-#echo '(Unable to guess system type)' 1>&2
+cat >&2 <<EOF
+$0: unable to guess system type
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+ ftp://ftp.gnu.org/pub/gnu/config/
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <[email protected]> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
--- a/common/libsndfile/config.sub
+++ b/common/libsndfile/config.sub
@@ -1,8 +1,10 @@
#! /bin/sh
-# Configuration validation subroutine script, version 1.1.
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc.
-#
+
+timestamp='2001-09-07'
+
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
# can handle that machine. It does not imply ALL GNU software can.
@@ -27,7 +29,6 @@
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
-# Written by Per Bothner <[email protected]>.
# Please send patches to <[email protected]>.
#
# Configuration subroutine to validate and canonicalize a configuration type.
@@ -50,23 +51,66 @@
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# It is wrong to echo any other type of specification.
-if [ x$1 = x ]
-then
- echo Configuration name missing. 1>&2
- echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
- echo "or $0 ALIAS" 1>&2
- echo where ALIAS is a recognized configuration type. 1>&2
- exit 1
-fi
+me=`echo "$0" | sed -e 's,.*/,,'`
-# First pass through any local machine types.
-case $1 in
- *local*)
- echo $1
- exit 0
- ;;
- *)
- ;;
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <[email protected]>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit 0 ;;
+ --version | -v )
+ echo "$version" ; exit 0 ;;
+ --help | --h* | -h )
+ echo "$usage"; exit 0 ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit 0;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
esac
# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
@@ -73,7 +117,7 @@
# Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
- nto-qnx* | linux-gnu*)
+ nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*)
os=-$maybe_os
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
;;
@@ -99,7 +143,7 @@
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple)
+ -apple | -axis)
os=
basic_machine=$1
;;
@@ -113,6 +157,14 @@
os=-vxworks
basic_machine=$1
;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
-hiux*)
os=-hiuxwe2
;;
@@ -171,30 +223,50 @@
case $basic_machine in
# Recognize the basic CPU types without company name.
# Some are omitted here because they have special meanings below.
- tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
- | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
- | 580 | i960 | h8300 \
- | x86 | ppcbe | mipsbe | mipsle | shbe | shle | armbe | armle \
- | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
- | hppa64 \
- | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \
- | alphaev6[78] \
- | we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \
- | 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
- | mips64orion | mips64orionel | mipstx39 | mipstx39el \
- | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
- | mips64vr5000 | miprs64vr5000el | mcore \
- | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \
- | thumb | d10v | fr30 | avr)
+ 1750a | 580 \
+ | a29k \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+ | c4x | clipper \
+ | d10v | d30v | dsp16xx \
+ | fr30 \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | i370 | i860 | i960 | ia64 \
+ | m32r | m68000 | m68k | m88k | mcore \
+ | mips16 | mips64 | mips64el | mips64orion | mips64orionel \
+ | mips64vr4100 | mips64vr4100el | mips64vr4300 \
+ | mips64vr4300el | mips64vr5000 | mips64vr5000el \
+ | mipsbe | mipseb | mipsel | mipsle | mipstx39 | mipstx39el \
+ | mipsisa32 \
+ | mn10200 | mn10300 \
+ | ns16k | ns32k \
+ | openrisc \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | pyramid \
+ | s390 | s390x \
+ | sh | sh[34] | sh[34]eb | shbe | shle \
+ | sparc | sparc64 | sparclet | sparclite | sparcv9 | sparcv9b \
+ | stormy16 | strongarm \
+ | tahoe | thumb | tic80 | tron \
+ | v850 \
+ | we32k \
+ | x86 | xscale \
+ | z8k)
basic_machine=$basic_machine-unknown
;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65 | pj | pjl)
+ m6811 | m68hc11 | m6812 | m68hc12)
+ # Motorola 68HC11/12.
+ basic_machine=$basic_machine-unknown
+ os=-none
;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
# (2) the word "unknown" tends to confuse beginning users.
- i[34567]86)
+ i*86 | x86_64)
basic_machine=$basic_machine-pc
;;
# Object if more than one company name word.
@@ -203,28 +275,43 @@
exit 1
;;
# Recognize the basic CPU types with company name.
- # FIXME: clean up the formatting here.
- vax-* | tahoe-* | i[34567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
- | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
- | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
- | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
- | xmp-* | ymp-* \
- | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* | armbe-* | armle-* \
- | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \
- | hppa2.0n-* | hppa64-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \
- | alphaev6[78]-* \
- | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \
- | clipper-* | orion-* \
- | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
- | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \
- | mips64el-* | mips64orion-* | mips64orionel-* \
- | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
- | mipstx39-* | mipstx39el-* | mcore-* \
- | f301-* | armv*-* | s390-* | sv1-* | t3e-* \
- | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
- | thumb-* | v850-* | d30v-* | tic30-* | c30-* | fr30-* \
- | bs2000-*)
+ 580-* \
+ | a29k-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alphapca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armv*-* \
+ | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c54x-* \
+ | clipper-* | cray2-* | cydra-* \
+ | d10v-* | d30v-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fr30-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | m32r-* \
+ | m68000-* | m680[01234]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | mcore-* \
+ | mips-* | mips16-* | mips64-* | mips64el-* | mips64orion-* \
+ | mips64orionel-* | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* | mipsbe-* | mipseb-* \
+ | mipsle-* | mipsel-* | mipstx39-* | mipstx39el-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | pyramid-* \
+ | romp-* | rs6000-* \
+ | s390-* | s390x-* \
+ | sh-* | sh[34]-* | sh[34]eb-* | shbe-* | shle-* \
+ | sparc-* | sparc64-* | sparc86x-* | sparclite-* \
+ | sparcv9-* | sparcv9b-* | stormy16-* | strongarm-* | sv1-* \
+ | t3e-* | tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
+ | v850-* | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xmp-* | xps100-* | xscale-* \
+ | ymp-* \
+ | z8k-*)
;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
@@ -261,14 +348,14 @@
os=-sysv
;;
amiga | amiga-*)
- basic_machine=m68k-cbm
+ basic_machine=m68k-unknown
;;
amigaos | amigados)
- basic_machine=m68k-cbm
+ basic_machine=m68k-unknown
os=-amigaos
;;
amigaunix | amix)
- basic_machine=m68k-cbm
+ basic_machine=m68k-unknown
os=-sysv4
;;
apollo68)
@@ -315,13 +402,16 @@
basic_machine=cray2-cray
os=-unicos
;;
- [ctj]90-cray)
- basic_machine=c90-cray
+ [cjt]90)
+ basic_machine=${basic_machine}-cray
os=-unicos
;;
crds | unos)
basic_machine=m68k-crds
;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
da30 | da30-*)
basic_machine=m68k-da30
;;
@@ -369,6 +459,10 @@
basic_machine=tron-gmicro
os=-sysv
;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
h3050r* | hiux*)
basic_machine=hppa1.1-hitachi
os=-hiuxwe2
@@ -444,19 +538,19 @@
basic_machine=i370-ibm
;;
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i[34567]86v32)
+ i*86v32)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv32
;;
- i[34567]86v4*)
+ i*86v4*)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv4
;;
- i[34567]86v)
+ i*86v)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv
;;
- i[34567]86sol2)
+ i*86sol2)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-solaris2
;;
@@ -468,14 +562,6 @@
basic_machine=i386-unknown
os=-vsta
;;
- i386-go32 | go32)
- basic_machine=i386-unknown
- os=-go32
- ;;
- i386-mingw32 | mingw32)
- basic_machine=i386-unknown
- os=-mingw32
- ;;
iris | iris4d)
basic_machine=mips-sgi
case $os in
@@ -501,6 +587,10 @@
basic_machine=ns32k-utek
os=-sysv
;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
miniframe)
basic_machine=m68000-convergent
;;
@@ -531,7 +621,7 @@
os=-coff
;;
msdos)
- basic_machine=i386-unknown
+ basic_machine=i386-pc
os=-msdos
;;
mvs)
@@ -595,6 +685,10 @@
basic_machine=i960-intel
os=-mon960
;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
np1)
basic_machine=np1-gould
;;
@@ -630,28 +724,28 @@
pc532 | pc532-*)
basic_machine=ns32k-pc532
;;
- pentium | p5 | k5 | k6 | nexen)
+ pentium | p5 | k5 | k6 | nexgen)
basic_machine=i586-pc
;;
- pentiumpro | p6 | 6x86)
+ pentiumpro | p6 | 6x86 | athlon)
basic_machine=i686-pc
;;
pentiumii | pentium2)
- basic_machine=i786-pc
+ basic_machine=i686-pc
;;
- pentium-* | p5-* | k5-* | k6-* | nexen-*)
+ pentium-* | p5-* | k5-* | k6-* | nexgen-*)
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
- pentiumpro-* | p6-* | 6x86-*)
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pentiumii-* | pentium2-*)
- basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pn)
basic_machine=pn-gould
;;
- power) basic_machine=rs6000-ibm
+ power) basic_machine=power-ibm
;;
ppc) basic_machine=powerpc-unknown
;;
@@ -663,9 +757,23 @@
ppcle-* | powerpclittle-*)
basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
ps2)
basic_machine=i386-ibm
;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
rom68k)
basic_machine=m68k-rom68k
os=-coff
@@ -757,6 +865,10 @@
basic_machine=t3e-cray
os=-unicos
;;
+ tic54x | c54x*)
+ basic_machine=tic54x-unknown
+ os=-coff
+ ;;
tx39)
basic_machine=mipstx39-unknown
;;
@@ -809,6 +921,10 @@
basic_machine=hppa1.1-winbond
os=-proelf
;;
+ windows32)
+ basic_machine=i386-pc
+ os=-windows32-msvcrt
+ ;;
xmp)
basic_machine=xmp-cray
os=-unicos
@@ -852,6 +968,10 @@
vax)
basic_machine=vax-dec
;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
pdp11)
basic_machine=pdp11-dec
;;
@@ -858,7 +978,10 @@
we32k)
basic_machine=we32k-att
;;
- sparc | sparcv9)
+ sh3 | sh4 | sh3eb | sh4eb)
+ basic_machine=sh-unknown
+ ;;
+ sparc | sparcv9 | sparcv9b)
basic_machine=sparc-sun
;;
cydra)
@@ -880,6 +1003,9 @@
basic_machine=c4x-none
os=-coff
;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
*)
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
exit 1
@@ -936,15 +1062,18 @@
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* \
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
| -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
- | -openstep* | -oskit*)
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
case $basic_machine in
- x86-* | i[34567]86-*)
+ x86-* | i*86-*)
;;
*)
os=-nto$os
@@ -1000,7 +1129,7 @@
-ns2 )
os=-nextstep2
;;
- -nsk)
+ -nsk*)
os=-nsk
;;
# Preserve the version number of sinix5.
@@ -1037,7 +1166,7 @@
-xenix)
os=-xenix
;;
- -*mint | -*MiNT)
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
os=-mint
;;
-none)
@@ -1071,6 +1200,9 @@
arm*-semi)
os=-aout
;;
+ pdp10-*)
+ os=-tops20
+ ;;
pdp11-*)
os=-none
;;
@@ -1179,7 +1311,7 @@
*-masscomp)
os=-rtu
;;
- f301-fujitsu)
+ f30[01]-fujitsu | f700-fujitsu)
os=-uxpv
;;
*-rom68k)
@@ -1257,9 +1389,12 @@
-mpw* | -macos*)
vendor=apple
;;
- -*mint | -*MiNT)
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
vendor=atari
;;
+ -vos*)
+ vendor=stratus
+ ;;
esac
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
;;
@@ -1266,3 +1401,11 @@
esac
echo $basic_machine$os
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
--- a/common/libsndfile/configure
+++ b/common/libsndfile/configure
@@ -19,9 +19,170 @@
--enable-fast-install[=PKGS] optimize for fast installation [default=yes]"
ac_help="$ac_help
--with-gnu-ld assume the C compiler uses GNU ld [default=no]"
+
+# Find the correct PATH separator. Usually this is `:', but
+# DJGPP uses `;' like DOS.
+if test "X${PATH_SEPARATOR+set}" != Xset; then
+ UNAME=${UNAME-`uname 2>/dev/null`}
+ case X$UNAME in
+ *-DOS) lt_cv_sys_path_separator=';' ;;
+ *) lt_cv_sys_path_separator=':' ;;
+ esac
+ PATH_SEPARATOR=$lt_cv_sys_path_separator
+fi
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+ # Remove one level of quotation (which was required for Make).
+ ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
+ ;;
+esac
+
+echo=${ECHO-echo}
+if test "X$1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+elif test "X$1" = X--fallback-echo; then
+ # Avoid inline document here, it may be left over
+ :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
+ # Yippee, $echo works!
+ :
+else
+ # Restart under the correct shell.
+ exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+ # used as fallback echo
+ shift
+ cat <<EOF
+
+EOF
+ exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+ for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+ if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+ echo_test_string="`eval $cmd`" &&
+ (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+ then
+ break
+ fi
+ done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ :
+else
+ # The Solaris, AIX, and Digital Unix default echo programs unquote
+ # backslashes. This makes it impossible to quote backslashes using
+ # echo "$something" | sed 's/\\/\\\\/g'
+ #
+ # So, first we look for a working echo in the user's PATH.
+
+ IFS="${IFS= }"; save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+ for dir in $PATH /usr/ucb; do
+ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ echo="$dir/echo"
+ break
+ fi
+ done
+ IFS="$save_ifs"
+
+ if test "X$echo" = Xecho; then
+ # We didn't find a better echo, so look for alternatives.
+ if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # This shell has a builtin print -r that does the trick.
+ echo='print -r'
+ elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+ test "X$CONFIG_SHELL" != X/bin/ksh; then
+ # If we have ksh, try running configure again with it.
+ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+ export ORIGINAL_CONFIG_SHELL
+ CONFIG_SHELL=/bin/ksh
+ export CONFIG_SHELL
+ exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+ else
+ # Try using printf.
+ echo='printf %s\n'
+ if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+ echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+ export CONFIG_SHELL
+ SHELL="$CONFIG_SHELL"
+ export SHELL
+ echo="$CONFIG_SHELL $0 --fallback-echo"
+ elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+ test "X$echo_testing_string" = 'X\t' &&
+ echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+ test "X$echo_testing_string" = "X$echo_test_string"; then
+ echo="$CONFIG_SHELL $0 --fallback-echo"
+ else
+ # maybe with a smaller string...
+ prev=:
+
+ for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+ if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+ then
+ break
+ fi
+ prev="$cmd"
+ done
+
+ if test "$prev" != 'sed 50q "$0"'; then
+ echo_test_string=`eval $prev`
+ export echo_test_string
+ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ echo=echo
+ fi
+ fi
+ fi
+ fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+ ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
ac_help="$ac_help
--disable-libtool-lock avoid locking (might break parallel builds)"
ac_help="$ac_help
+ --with-pic try to use only PIC/non-PIC objects [default=use both]"
+ac_help="$ac_help
--enable-justsrc only compile library sources "
ac_help="$ac_help
--disable-gcc-pipe disable gcc -pipe option "
@@ -29,6 +190,8 @@
--disable-gcc-opt disable gcc optimisations "
ac_help="$ac_help
--enable-force-broken-float force use of broken float code "
+ac_help="$ac_help
+ --disable-largefile omit support for large files"
# Initialize some variables set by options.
# The variables have the same names as the options, with
@@ -586,7 +749,7 @@
fi
echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:590: checking host system type" >&5
+echo "configure:753: checking host system type" >&5
host_alias=$host
case "$host_alias" in
@@ -607,7 +770,7 @@
echo "$ac_t""$host" 1>&6
echo $ac_n "checking target system type""... $ac_c" 1>&6
-echo "configure:611: checking target system type" >&5
+echo "configure:774: checking target system type" >&5
target_alias=$target
case "$target_alias" in
@@ -625,7 +788,7 @@
echo "$ac_t""$target" 1>&6
echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:629: checking build system type" >&5
+echo "configure:792: checking build system type" >&5
build_alias=$build
case "$build_alias" in
@@ -647,7 +810,6 @@
NONENONEs,x,x, &&
program_prefix=${target_alias}-
-
# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
# incompatible versions:
@@ -660,7 +822,7 @@
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:664: checking for a BSD compatible install" >&5
+echo "configure:826: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -713,7 +875,7 @@
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:717: checking whether build environment is sane" >&5
+echo "configure:879: checking whether build environment is sane" >&5
# Just in case
sleep 1
echo timestamp > conftestfile
@@ -770,7 +932,7 @@
test "$program_transform_name" = "" && program_transform_name="s,x,x,"
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:774: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:936: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -799,7 +961,7 @@
PACKAGE=libsndfile
-VERSION=0.0.27
+VERSION=1.0.0rc2
if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
{ echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
@@ -816,7 +978,7 @@
missing_dir=`cd $ac_aux_dir && pwd`
echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
-echo "configure:820: checking for working aclocal" >&5
+echo "configure:982: checking for working aclocal" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -829,7 +991,7 @@
fi
echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
-echo "configure:833: checking for working autoconf" >&5
+echo "configure:995: checking for working autoconf" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -842,7 +1004,7 @@
fi
echo $ac_n "checking for working automake""... $ac_c" 1>&6
-echo "configure:846: checking for working automake" >&5
+echo "configure:1008: checking for working automake" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -855,7 +1017,7 @@
fi
echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
-echo "configure:859: checking for working autoheader" >&5
+echo "configure:1021: checking for working autoheader" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -868,7 +1030,7 @@
fi
echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
-echo "configure:872: checking for working makeinfo" >&5
+echo "configure:1034: checking for working makeinfo" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
@@ -883,17 +1045,71 @@
-SHARED_VERSION_INFO="0:27:0"
+##---------------------------------------------------------------------
+## Allow configure to save its options and optionally rerun itself with
+## the same options.
+#
+#AC_ARG_WITH(last-config, [ --with-last-config re-run configure script with last config options ],
+# ac_with_last_config=yes, ac_with_last_config=no)
+#
+#if test $ac_with_last_config = yes ; then
+# if test -f "$srcdir/config.last" ; then
+# mv $srcdir/config.last $srcdir/config.last.bak
+# sed "s/--no-create --no-recursion//" $srcdir/config.last.bak >$srcdir/config.last
+# rm $srcdir/config.last.bak
+# echo "re-running configure script with last config : `cat $srcdir/config.last`"
+# ./configure `cat $srcdir/config.last`
+# exit
+# else
+# AC_MSG_ERROR([[*** No previous config options found.]])
+# fi
+#else
+# # Save current config options
+# echo "$@" >config.last
+# fi
+#---------------------------------------------------------------------
+# This is the version info according to the libtool versioning system.
+SHARED_VERSION_INFO="1:0:0"
+# Extract the first word of "autogen", so it can be a program name with args.
+set dummy autogen; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1082: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_autogen'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$autogen"; then
+ ac_cv_prog_autogen="$autogen" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_autogen="yes"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_prog_autogen" && ac_cv_prog_autogen="no"
+fi
+fi
+autogen="$ac_cv_prog_autogen"
+if test -n "$autogen"; then
+ echo "$ac_t""$autogen" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:897: checking for $ac_word" >&5
+echo "configure:1113: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -923,7 +1139,7 @@
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:927: checking for $ac_word" >&5
+echo "configure:1143: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -974,7 +1190,7 @@
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:978: checking for $ac_word" >&5
+echo "configure:1194: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1006,7 +1222,7 @@
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1010: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1226: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -1017,12 +1233,12 @@
cat > conftest.$ac_ext << EOF
-#line 1021 "configure"
+#line 1237 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:1026: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1242: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
@@ -1048,12 +1264,12 @@
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1052: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1268: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1057: checking whether we are using GNU C" >&5
+echo "configure:1273: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1062,7 +1278,7 @@
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1066: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1282: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
@@ -1081,7 +1297,7 @@
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1085: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1301: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1124,7 +1340,7 @@
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:1128: checking for a BSD compatible install" >&5
+echo "configure:1344: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -1178,7 +1394,7 @@
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:1182: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:1398: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@@ -1205,7 +1421,7 @@
fi
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1209: checking whether ln -s works" >&5
+echo "configure:1425: checking whether ln -s works" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1225,11 +1441,164 @@
echo "$ac_t""no" 1>&6
fi
+# Find the correct PATH separator. Usually this is `:', but
+# DJGPP uses `;' like DOS.
+if test "X${PATH_SEPARATOR+set}" != Xset; then
+ UNAME=${UNAME-`uname 2>/dev/null`}
+ case X$UNAME in
+ *-DOS) lt_cv_sys_path_separator=';' ;;
+ *) lt_cv_sys_path_separator=':' ;;
+ esac
+ PATH_SEPARATOR=$lt_cv_sys_path_separator
+fi
+
+echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
+echo "configure:1457: checking for Cygwin environment" >&5
+if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1462 "configure"
+#include "confdefs.h"
+
+int main() {
+
+#ifndef __CYGWIN__
+#define __CYGWIN__ __CYGWIN32__
+#endif
+return __CYGWIN__;
+; return 0; }
+EOF
+if { (eval echo configure:1473: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_cygwin=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_cygwin=no
+fi
+rm -f conftest*
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_cygwin" 1>&6
+CYGWIN=
+test "$ac_cv_cygwin" = yes && CYGWIN=yes
+echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
+echo "configure:1490: checking for mingw32 environment" >&5
+if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1495 "configure"
+#include "confdefs.h"
+
+int main() {
+return __MINGW32__;
+; return 0; }
+EOF
+if { (eval echo configure:1502: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_mingw32=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_mingw32=no
+fi
+rm -f conftest*
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_mingw32" 1>&6
+MINGW32=
+test "$ac_cv_mingw32" = yes && MINGW32=yes
+echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+echo "configure:1519: checking how to run the C preprocessor" >&5
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ # This must be in double quotes, not single quotes, because CPP may get
+ # substituted into the Makefile and "${CC-cc}" will confuse make.
+ CPP="${CC-cc} -E"
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp.
+ cat > conftest.$ac_ext <<EOF
+#line 1534 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1540: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ :
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ CPP="${CC-cc} -E -traditional-cpp"
+ cat > conftest.$ac_ext <<EOF
+#line 1551 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1557: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ :
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ CPP="${CC-cc} -nologo -E"
+ cat > conftest.$ac_ext <<EOF
+#line 1568 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1574: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ :
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ CPP=/lib/cpp
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+ ac_cv_prog_CPP="$CPP"
+fi
+ CPP="$ac_cv_prog_CPP"
+else
+ ac_cv_prog_CPP="$CPP"
+fi
+echo "$ac_t""$CPP" 1>&6
+
# Check whether --enable-shared or --disable-shared was given.
if test "${enable_shared+set}" = set; then
enableval="$enable_shared"
p=${PACKAGE-default}
-case "$enableval" in
+case $enableval in
yes) enable_shared=yes ;;
no) enable_shared=no ;;
*)
@@ -1252,7 +1621,7 @@
if test "${enable_static+set}" = set; then
enableval="$enable_static"
p=${PACKAGE-default}
-case "$enableval" in
+case $enableval in
yes) enable_static=yes ;;
no) enable_static=no ;;
*)
@@ -1275,7 +1644,7 @@
if test "${enable_fast_install+set}" = set; then
enableval="$enable_fast_install"
p=${PACKAGE-default}
-case "$enableval" in
+case $enableval in
yes) enable_fast_install=yes ;;
no) enable_fast_install=no ;;
*)
@@ -1294,36 +1663,6 @@
enable_fast_install=yes
fi
-# Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1301: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_RANLIB="ranlib"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
-fi
-fi
-RANLIB="$ac_cv_prog_RANLIB"
-if test -n "$RANLIB"; then
- echo "$ac_t""$RANLIB" 1>&6
-else
- echo "$ac_t""no" 1>&6
-fi
-
# Check whether --with-gnu-ld or --without-gnu-ld was given.
if test "${with_gnu_ld+set}" = set; then
withval="$with_gnu_ld"
@@ -1333,12 +1672,18 @@
fi
ac_prog=ld
-if test "$ac_cv_prog_gcc" = yes; then
+if test "$GCC" = yes; then
# Check if gcc -print-prog-name=ld gives a path.
echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
-echo "configure:1340: checking for ld used by GCC" >&5
- ac_prog=`($CC -print-prog-name=ld) 2>&5`
- case "$ac_prog" in
+echo "configure:1679: checking for ld used by GCC" >&5
+ case $host in
+ *-*-mingw*)
+ # gcc leaves a trailing carriage return which upsets mingw
+ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+ *)
+ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+ esac
+ case $ac_prog in
# Accept absolute paths.
[\\/]* | [A-Za-z]:[\\/]*)
re_direlt='/[^/][^/]*/\.\./'
@@ -1360,24 +1705,24 @@
esac
elif test "$with_gnu_ld" = yes; then
echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:1364: checking for GNU ld" >&5
+echo "configure:1709: checking for GNU ld" >&5
else
echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-echo "configure:1367: checking for non-GNU ld" >&5
+echo "configure:1712: checking for non-GNU ld" >&5
fi
-if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then
+if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -z "$LD"; then
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=.
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- ac_cv_path_LD="$ac_dir/$ac_prog"
+ lt_cv_path_LD="$ac_dir/$ac_prog"
# Check to see if the program is GNU ld. I'd rather use --version,
# but apparently some GNU ld's only accept -v.
# Break only if it was the GNU/non-GNU ld that we prefer.
- if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+ if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
test "$with_gnu_ld" != no && break
else
test "$with_gnu_ld" != yes && break
@@ -1386,11 +1731,11 @@
done
IFS="$ac_save_ifs"
else
- ac_cv_path_LD="$LD" # Let the user override the test with a path.
+ lt_cv_path_LD="$LD" # Let the user override the test with a path.
fi
fi
-LD="$ac_cv_path_LD"
+LD="$lt_cv_path_LD"
if test -n "$LD"; then
echo "$ac_t""$LD" 1>&6
else
@@ -1398,72 +1743,813 @@
fi
test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
-echo "configure:1402: checking if the linker ($LD) is GNU ld" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then
+echo "configure:1747: checking if the linker ($LD) is GNU ld" >&5
+if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# I'd rather use --version here, but apparently some GNU ld's only accept -v.
if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
- ac_cv_prog_gnu_ld=yes
+ lt_cv_prog_gnu_ld=yes
else
- ac_cv_prog_gnu_ld=no
+ lt_cv_prog_gnu_ld=no
fi
fi
-echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6
+echo "$ac_t""$lt_cv_prog_gnu_ld" 1>&6
+with_gnu_ld=$lt_cv_prog_gnu_ld
+echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6
+echo "configure:1764: checking for $LD option to reload object files" >&5
+if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ lt_cv_ld_reload_flag='-r'
+fi
+
+echo "$ac_t""$lt_cv_ld_reload_flag" 1>&6
+reload_flag=$lt_cv_ld_reload_flag
+test -n "$reload_flag" && reload_flag=" $reload_flag"
+
echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
-echo "configure:1418: checking for BSD-compatible nm" >&5
-if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then
+echo "configure:1776: checking for BSD-compatible nm" >&5
+if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$NM"; then
# Let the user override the test.
- ac_cv_path_NM="$NM"
+ lt_cv_path_NM="$NM"
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then
+ tmp_nm=$ac_dir/${ac_tool_prefix}nm
+ if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then
# Check to see if the nm accepts a BSD-compat flag.
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
# nm: unknown option "B" ignored
- if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
- ac_cv_path_NM="$ac_dir/nm -B"
+ # Tru64's nm complains that /dev/null is an invalid object file
+ if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then
+ lt_cv_path_NM="$tmp_nm -B"
break
- elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
- ac_cv_path_NM="$ac_dir/nm -p"
+ elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
+ lt_cv_path_NM="$tmp_nm -p"
break
else
- ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but
+ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
continue # so that we can try to find one that supports BSD flags
fi
fi
done
IFS="$ac_save_ifs"
- test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm
+ test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
fi
fi
-NM="$ac_cv_path_NM"
+NM="$lt_cv_path_NM"
echo "$ac_t""$NM" 1>&6
+echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6
+echo "configure:1814: checking how to recognise dependant libraries" >&5
+if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given egrep regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
-case "$target" in
-NONE) lt_target="$host" ;;
-*) lt_target="$target" ;;
+case $host_os in
+aix4* | aix5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+beos*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+bsdi4*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ ;;
+
+cygwin* | mingw* | pw32*)
+ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ lt_cv_file_magic_cmd='$OBJDUMP -f'
+ ;;
+
+darwin* | rhapsody*)
+ lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
+ lt_cv_file_magic_cmd='/usr/bin/file -L'
+ case "$host_os" in
+ rhapsody* | darwin1.[012])
+ lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1`
+ ;;
+ *) # Darwin 1.3 on
+ lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
+ ;;
+ esac
+ ;;
+
+freebsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ case $host_cpu in
+ i*86 )
+ # Not sure whether the presence of OpenBSD here was a mistake.
+ # Let's accept both of them until this is cleared up.
+ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ ;;
+ esac
+ else
+ lt_cv_deplibs_check_method=pass_all
+ fi
+ ;;
+
+gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+hpux10.20*|hpux11*)
+ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libc.sl
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ irix5* | nonstopux*)
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
+ ;;
+ *)
+ case $LD in
+ *-32|*"-32 ") libmagic=32-bit;;
+ *-n32|*"-n32 ") libmagic=N32;;
+ *-64|*"-64 ") libmagic=64-bit;;
+ *) libmagic=never-match;;
+ esac
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"
+ ;;
+ esac
+ lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+# This must be Linux ELF.
+linux-gnu*)
+ lt_cv_deplibs_check_method=pass_all
+ lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+ ;;
+
+netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+ else
+ lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$'
+ fi
+ ;;
+
+newos6*)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=/usr/lib/libnls.so
+ ;;
+
+openbsd*)
+ lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object'
+ else
+ lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
+ fi
+ ;;
+
+osf3* | osf4* | osf5*)
+ # this will be overridden with pass_all, but let us keep it just in case
+ lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
+ lt_cv_file_magic_test_file=/shlib/libc.so
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sco3.2v5*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+solaris*)
+ lt_cv_deplibs_check_method=pass_all
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+
+sysv5uw[78]* | sysv4*uw2*)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ case $host_vendor in
+ motorola)
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ ncr)
+ lt_cv_deplibs_check_method=pass_all
+ ;;
+ sequent)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ ;;
+ sni)
+ lt_cv_file_magic_cmd='/bin/file'
+ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+ lt_cv_file_magic_test_file=/lib/libc.so
+ ;;
+ esac
+ ;;
esac
-# Check for any special flags to pass to ltconfig.
-libtool_flags="--cache-file=$cache_file"
-test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
-test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static"
-test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install"
-test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
-test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
+fi
+echo "$ac_t""$lt_cv_deplibs_check_method" 1>&6
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+echo $ac_n "checking for object suffix""... $ac_c" 1>&6
+echo "configure:1991: checking for object suffix" >&5
+if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ rm -f conftest*
+echo 'int i = 1;' > conftest.$ac_ext
+if { (eval echo configure:1997: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ for ac_file in conftest.*; do
+ case $ac_file in
+ *.c) ;;
+ *) ac_cv_objext=`echo $ac_file | sed -e s/conftest.//` ;;
+ esac
+ done
+else
+ { echo "configure: error: installation or configuration problem; compiler does not work" 1>&2; exit 1; }
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_objext" 1>&6
+OBJEXT=$ac_cv_objext
+ac_objext=$ac_cv_objext
+
+
+
+echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
+echo "configure:2017: checking for executable suffix" >&5
+if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test "$CYGWIN" = yes || test "$MINGW32" = yes; then
+ ac_cv_exeext=.exe
+else
+ rm -f conftest*
+ echo 'int main () { return 0; }' > conftest.$ac_ext
+ ac_cv_exeext=
+ if { (eval echo configure:2027: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+ for file in conftest.*; do
+ case $file in
+ *.$ac_ext | *.c | *.o | *.obj) ;;
+ *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
+ esac
+ done
+ else
+ { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; }
+ fi
+ rm -f conftest*
+ test x"${ac_cv_exeext}" = x && ac_cv_exeext=no
+fi
+fi
+
+EXEEXT=""
+test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext}
+echo "$ac_t""${ac_cv_exeext}" 1>&6
+ac_exeext=$EXEEXT
+
+if test $host != $build; then
+ ac_tool_prefix=${host_alias}-
+else
+ ac_tool_prefix=
+fi
+
+
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+echo $ac_n "checking command to parse $NM output""... $ac_c" 1>&6
+echo "configure:2058: checking command to parse $NM output" >&5
+if eval "test \"`echo '$''{'lt_cv_sys_global_symbol_pipe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix. What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw* | pw32*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*) # Its linker distinguishes data from code symbols
+ lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+ lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'"
+ ;;
+irix* | nonstopux*)
+ symcode='[BCDEGRST]'
+ ;;
+solaris* | sysv5*)
+ symcode='[BDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $host_os in
+mingw*)
+ opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+ ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
+ symcode='[ABCDGISTW]'
+fi
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+ # Write the raw and C identifiers.
+lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+ rm -f conftest*
+ cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+ if { (eval echo configure:2138: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { (eval echo configure:2141: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\") 1>&5; (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5; } && test -s "$nlist"; then
+ # Try sorting and uniquifying the output.
+ if sort "$nlist" | uniq > "$nlist"T; then
+ mv -f "$nlist"T "$nlist"
+ else
+ rm -f "$nlist"T
+ fi
+
+ # Make sure that we snagged all the symbols we need.
+ if egrep ' nm_test_var$' "$nlist" >/dev/null; then
+ if egrep ' nm_test_func$' "$nlist" >/dev/null; then
+ cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+ # Now generate the symbol file.
+ eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext'
+
+ cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr void *
+#else
+# define lt_ptr char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ lt_ptr address;
+}
+lt_preloaded_symbols[] =
+{
+EOF
+ sed "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr) \&\2},/" < "$nlist" >> conftest.$ac_ext
+ cat <<\EOF >> conftest.$ac_ext
+ {0, (lt_ptr) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+ # Now try linking the two files.
+ mv conftest.$ac_objext conftstm.$ac_objext
+ save_LIBS="$LIBS"
+ save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$ac_objext"
+ CFLAGS="$CFLAGS$no_builtin_flag"
+ if { (eval echo configure:2192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ pipe_works=yes
+ fi
+ LIBS="$save_LIBS"
+ CFLAGS="$save_CFLAGS"
+ else
+ echo "cannot find nm_test_func in $nlist" >&5
+ fi
+ else
+ echo "cannot find nm_test_var in $nlist" >&5
+ fi
+ else
+ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ fi
+ rm -f conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ lt_cv_sys_global_symbol_pipe=
+ fi
+done
+
+fi
+
+global_symbol_pipe="$lt_cv_sys_global_symbol_pipe"
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+ global_symbol_to_cdecl=
+ global_symbol_to_c_name_address=
+else
+ global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl"
+ global_symbol_to_c_name_address="$lt_cv_global_symbol_to_c_name_address"
+fi
+if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address";
+then
+ echo "$ac_t""failed" 1>&6
+else
+ echo "$ac_t""ok" 1>&6
+fi
+
+for ac_hdr in dlfcn.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:2241: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 2246 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:2251: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+
+
+
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+ echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6
+echo "configure:2286: checking for ${ac_tool_prefix}file" >&5
+if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ case $MAGIC_CMD in
+ /*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+ ?:/*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
+ ;;
+ *)
+ ac_save_MAGIC_CMD="$MAGIC_CMD"
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="/usr/bin:$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/${ac_tool_prefix}file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ egrep "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** [email protected]
+
+EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ MAGIC_CMD="$ac_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ echo "$ac_t""$MAGIC_CMD" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+ if test -n "$ac_tool_prefix"; then
+ echo $ac_n "checking for file""... $ac_c" 1>&6
+echo "configure:2348: checking for file" >&5
+if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ case $MAGIC_CMD in
+ /*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+ ;;
+ ?:/*)
+ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
+ ;;
+ *)
+ ac_save_MAGIC_CMD="$MAGIC_CMD"
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="/usr/bin:$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/file; then
+ lt_cv_path_MAGIC_CMD="$ac_dir/file"
+ if test -n "$file_magic_test_file"; then
+ case $deplibs_check_method in
+ "file_magic "*)
+ file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+ egrep "$file_magic_regex" > /dev/null; then
+ :
+ else
+ cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such. This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem. Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** [email protected]
+
+EOF
+ fi ;;
+ esac
+ fi
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ MAGIC_CMD="$ac_save_MAGIC_CMD"
+ ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+ echo "$ac_t""$MAGIC_CMD" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ else
+ MAGIC_CMD=:
+ fi
+fi
+
+ fi
+ ;;
+esac
+
+# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:2419: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+RANLIB="$ac_cv_prog_RANLIB"
+if test -n "$RANLIB"; then
+ echo "$ac_t""$RANLIB" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+if test -z "$ac_cv_prog_RANLIB"; then
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:2451: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_RANLIB="ranlib"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
+fi
+fi
+RANLIB="$ac_cv_prog_RANLIB"
+if test -n "$RANLIB"; then
+ echo "$ac_t""$RANLIB" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+else
+ RANLIB=":"
+fi
+fi
+
+# Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:2486: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+STRIP="$ac_cv_prog_STRIP"
+if test -n "$STRIP"; then
+ echo "$ac_t""$STRIP" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+if test -z "$ac_cv_prog_STRIP"; then
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:2518: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_STRIP="strip"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_prog_STRIP" && ac_cv_prog_STRIP=":"
+fi
+fi
+STRIP="$ac_cv_prog_STRIP"
+if test -n "$STRIP"; then
+ echo "$ac_t""$STRIP" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+else
+ STRIP=":"
+fi
+fi
+
+
+enable_dlopen=no
+enable_win32_dll=no
+
# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
if test "${enable_libtool_lock+set}" = set; then
enableval="$enable_libtool_lock"
@@ -1470,17 +2556,16 @@
:
fi
-test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock"
-test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
# Some flags need to be propagated to the compiler or linker for good
# libtool support.
-case "$lt_target" in
+case $host in
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 1482 "configure"' > conftest.$ac_ext
- if { (eval echo configure:1483: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- case "`/usr/bin/file conftest.o`" in
+ echo '#line 2567 "configure"' > conftest.$ac_ext
+ if { (eval echo configure:2568: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ case `/usr/bin/file conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -32"
;;
@@ -1500,12 +2585,20 @@
SAVE_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -belf"
echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
-echo "configure:1504: checking whether the C compiler needs -belf" >&5
+echo "configure:2589: checking whether the C compiler needs -belf" >&5
if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
- cat > conftest.$ac_ext <<EOF
-#line 1509 "configure"
+
+ ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+ cat > conftest.$ac_ext <<EOF
+#line 2602 "configure"
#include "confdefs.h"
int main() {
@@ -1512,7 +2605,7 @@
; return 0; }
EOF
-if { (eval echo configure:1516: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2609: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
lt_cv_cc_needs_belf=yes
else
@@ -1522,6 +2615,13 @@
lt_cv_cc_needs_belf=no
fi
rm -f conftest*
+ ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
fi
echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6
@@ -1534,173 +2634,2840 @@
esac
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
-# Save cache, so that ltconfig can load it
-cat > confcache <<\EOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs. It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
-#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already. You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
-#
-EOF
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, don't put newlines in cache variables' values.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(set) 2>&1 |
- case `(ac_space=' '; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote substitution
- # turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- -e "s/'/'\\\\''/g" \
- -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+need_locks="$enable_libtool_lock"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+if test x"$host" != x"$build"; then
+ ac_tool_prefix=${host_alias}-
+else
+ ac_tool_prefix=
+fi
+
+# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+case $host_os in
+linux-gnu*) ;;
+linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+esac
+
+case $host_os in
+aix3*)
+ # AIX sometimes has problems with the GCC collect2 program. For some
+ # reason, if we set the COLLECT_NAMES environment variable, the problems
+ # vanish in a puff of smoke.
+ if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+ case $host_os in
+ openbsd*)
+ old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
;;
*)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+ old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
;;
- esac >> confcache
-if cmp -s $cache_file confcache; then
- :
+ esac
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+# Allow CC to be a program name with arguments.
+set dummy $CC
+compiler="$2"
+
+echo $ac_n "checking for objdir""... $ac_c" 1>&6
+echo "configure:2729: checking for objdir" >&5
+rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+ objdir=.libs
else
- if test -w $cache_file; then
- echo "updating cache $cache_file"
- cat confcache > $cache_file
+ # MS-DOS does not allow filenames that begin with a dot.
+ objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+echo "$ac_t""$objdir" 1>&6
+
+
+# Check whether --with-pic or --without-pic was given.
+if test "${with_pic+set}" = set; then
+ withval="$with_pic"
+ pic_mode="$withval"
+else
+ pic_mode=default
+fi
+
+test -z "$pic_mode" && pic_mode=default
+
+# We assume here that the value for lt_cv_prog_cc_pic will not be cached
+# in isolation, and that seeing it set (from the cache) indicates that
+# the associated values are set (in the cache) correctly too.
+echo $ac_n "checking for $compiler option to produce PIC""... $ac_c" 1>&6
+echo "configure:2756: checking for $compiler option to produce PIC" >&5
+if eval "test \"`echo '$''{'lt_cv_prog_cc_pic'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ lt_cv_prog_cc_pic=
+ lt_cv_prog_cc_shlib=
+ lt_cv_prog_cc_wl=
+ lt_cv_prog_cc_static=
+ lt_cv_prog_cc_no_builtin=
+ lt_cv_prog_cc_can_build_shared=$can_build_shared
+
+ if test "$GCC" = yes; then
+ lt_cv_prog_cc_wl='-Wl,'
+ lt_cv_prog_cc_static='-static'
+
+ case $host_os in
+ aix*)
+ # Below there is a dirty hack to force normal static linking with -ldl
+ # The problem is because libdl dynamically linked with both libc and
+ # libC (AIX C++ library), which obviously doesn't included in libraries
+ # list by gcc. This cause undefined symbols with -static flags.
+ # This hack allows C programs to be linked with "-static -ldl", but
+ # not sure about C++ programs.
+ lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC"
+ ;;
+ amigaos*)
+ # FIXME: we need at least 68020 code to build shared libraries, but
+ # adding the `-m68020' flag to GCC prevents building anything better,
+ # like `-m68040'.
+ lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+ # PIC is the default for these OSes.
+ ;;
+ darwin* | rhapsody*)
+ # PIC is the default on this platform
+ # Common symbols not allowed in MH_DYLIB files
+ lt_cv_prog_cc_pic='-fno-common'
+ ;;
+ cygwin* | mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_cv_prog_cc_pic='-DDLL_EXPORT'
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ lt_cv_prog_cc_pic=-Kconform_pic
+ fi
+ ;;
+ *)
+ lt_cv_prog_cc_pic='-fPIC'
+ ;;
+ esac
else
- echo "not updating unwritable cache $cache_file"
+ # PORTME Check for PIC flags for the system compiler.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ lt_cv_prog_cc_wl='-Wl,'
+ # All AIX code is PIC.
+ if test "$host_cpu" = ia64; then
+ # AIX 5 now supports IA64 processor
+ lt_cv_prog_cc_static='-Bstatic'
+ else
+ lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
+ fi
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ # Is there a better lt_cv_prog_cc_static that works with the bundled CC?
+ lt_cv_prog_cc_wl='-Wl,'
+ lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive"
+ lt_cv_prog_cc_pic='+Z'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ lt_cv_prog_cc_wl='-Wl,'
+ lt_cv_prog_cc_static='-non_shared'
+ # PIC (with -KPIC) is the default.
+ ;;
+
+ cygwin* | mingw* | pw32* | os2*)
+ # This hack is so that the source file can tell whether it is being
+ # built for inclusion in a dll (and should export symbols for example).
+ lt_cv_prog_cc_pic='-DDLL_EXPORT'
+ ;;
+
+ newsos6)
+ lt_cv_prog_cc_pic='-KPIC'
+ lt_cv_prog_cc_static='-Bstatic'
+ ;;
+
+ osf3* | osf4* | osf5*)
+ # All OSF/1 code is PIC.
+ lt_cv_prog_cc_wl='-Wl,'
+ lt_cv_prog_cc_static='-non_shared'
+ ;;
+
+ sco3.2v5*)
+ lt_cv_prog_cc_pic='-Kpic'
+ lt_cv_prog_cc_static='-dn'
+ lt_cv_prog_cc_shlib='-belf'
+ ;;
+
+ solaris*)
+ lt_cv_prog_cc_pic='-KPIC'
+ lt_cv_prog_cc_static='-Bstatic'
+ lt_cv_prog_cc_wl='-Wl,'
+ ;;
+
+ sunos4*)
+ lt_cv_prog_cc_pic='-PIC'
+ lt_cv_prog_cc_static='-Bstatic'
+ lt_cv_prog_cc_wl='-Qoption ld '
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ lt_cv_prog_cc_pic='-KPIC'
+ lt_cv_prog_cc_static='-Bstatic'
+ if test "x$host_vendor" = xsni; then
+ lt_cv_prog_cc_wl='-LD'
+ else
+ lt_cv_prog_cc_wl='-Wl,'
+ fi
+ ;;
+
+ uts4*)
+ lt_cv_prog_cc_pic='-pic'
+ lt_cv_prog_cc_static='-Bstatic'
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ lt_cv_prog_cc_pic='-Kconform_pic'
+ lt_cv_prog_cc_static='-Bstatic'
+ fi
+ ;;
+
+ *)
+ lt_cv_prog_cc_can_build_shared=no
+ ;;
+ esac
fi
+
fi
-rm -f confcache
+if test -z "$lt_cv_prog_cc_pic"; then
+ echo "$ac_t""none" 1>&6
+else
+ echo "$ac_t""$lt_cv_prog_cc_pic" 1>&6
-# Actually configure libtool. ac_aux_dir is where install-sh is found.
-CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
-LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
-LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \
-DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \
-${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
-$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \
-|| { echo "configure: error: libtool configure failed" 1>&2; exit 1; }
+ # Check to make sure the pic_flag actually works.
+ echo $ac_n "checking if $compiler PIC flag $lt_cv_prog_cc_pic works""... $ac_c" 1>&6
+echo "configure:2908: checking if $compiler PIC flag $lt_cv_prog_cc_pic works" >&5
+ if eval "test \"`echo '$''{'lt_cv_prog_cc_pic_works'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC"
+ cat > conftest.$ac_ext <<EOF
+#line 2915 "configure"
+#include "confdefs.h"
-# Reload cache, that may have been modified by ltconfig
-if test -r "$cache_file"; then
- echo "loading cache $cache_file"
- . $cache_file
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:2922: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ case $host_os in
+ hpux9* | hpux10* | hpux11*)
+ # On HP-UX, both CC and GCC only warn that PIC is supported... then
+ # they create non-PIC objects. So, if there were any warnings, we
+ # assume that PIC is not supported.
+ if test -s conftest.err; then
+ lt_cv_prog_cc_pic_works=no
+ else
+ lt_cv_prog_cc_pic_works=yes
+ fi
+ ;;
+ *)
+ lt_cv_prog_cc_pic_works=yes
+ ;;
+ esac
+
else
- echo "creating cache $cache_file"
- > $cache_file
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ lt_cv_prog_cc_pic_works=no
+
fi
+rm -f conftest*
+ CFLAGS="$save_CFLAGS"
+
+fi
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh"
+ if test "X$lt_cv_prog_cc_pic_works" = Xno; then
+ lt_cv_prog_cc_pic=
+ lt_cv_prog_cc_can_build_shared=no
+ else
+ lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic"
+ fi
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+ echo "$ac_t""$lt_cv_prog_cc_pic_works" 1>&6
+fi
-# Redirect the config.log output again, so that the ltconfig log is not
-# clobbered by the next message.
-exec 5>>./config.log
+# Check for any special shared library compilation flags.
+if test -n "$lt_cv_prog_cc_shlib"; then
+ echo "configure: warning: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" 1>&2
+ if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$lt_cv_prog_cc_shlib[ ]" >/dev/null; then :
+ else
+ echo "configure: warning: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" 1>&2
+ lt_cv_prog_cc_can_build_shared=no
+ fi
+fi
+echo $ac_n "checking if $compiler static flag $lt_cv_prog_cc_static works""... $ac_c" 1>&6
+echo "configure:2974: checking if $compiler static flag $lt_cv_prog_cc_static works" >&5
+if eval "test \"`echo '$''{'lt_cv_prog_cc_static_works'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ lt_cv_prog_cc_static_works=no
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static"
+ cat > conftest.$ac_ext <<EOF
+#line 2982 "configure"
+#include "confdefs.h"
-echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1619: checking how to run the C preprocessor" >&5
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:2989: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ lt_cv_prog_cc_static_works=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
fi
-if test -z "$CPP"; then
-if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
+rm -f conftest*
+ LDFLAGS="$save_LDFLAGS"
+
+fi
+
+
+# Belt *and* braces to stop my trousers falling down:
+test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static=
+echo "$ac_t""$lt_cv_prog_cc_static_works" 1>&6
+
+pic_flag="$lt_cv_prog_cc_pic"
+special_shlib_compile_flags="$lt_cv_prog_cc_shlib"
+wl="$lt_cv_prog_cc_wl"
+link_static_flag="$lt_cv_prog_cc_static"
+no_builtin_flag="$lt_cv_prog_cc_no_builtin"
+can_build_shared="$lt_cv_prog_cc_can_build_shared"
+
+
+# Check to see if options -o and -c are simultaneously supported by compiler
+echo $ac_n "checking if $compiler supports -c -o file.$ac_objext""... $ac_c" 1>&6
+echo "configure:3016: checking if $compiler supports -c -o file.$ac_objext" >&5
+if eval "test \"`echo '$''{'lt_cv_compiler_c_o'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
- # This must be in double quotes, not single quotes, because CPP may get
- # substituted into the Makefile and "${CC-cc}" will confuse make.
- CPP="${CC-cc} -E"
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp.
+
+$rm -r conftest 2>/dev/null
+mkdir conftest
+cd conftest
+echo "int some_variable = 0;" > conftest.$ac_ext
+mkdir out
+# According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+# that will create temporary files in the current directory regardless of
+# the output directory. Thus, making CWD read-only will cause this test
+# to fail, enabling locking or at least warning the user not to do parallel
+# builds.
+chmod -w .
+save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
+compiler_c_o=no
+if { (eval echo configure:3035: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s out/conftest.err; then
+ lt_cv_compiler_c_o=no
+ else
+ lt_cv_compiler_c_o=yes
+ fi
+else
+ # Append any errors to the config.log.
+ cat out/conftest.err 1>&5
+ lt_cv_compiler_c_o=no
+fi
+CFLAGS="$save_CFLAGS"
+chmod u+w .
+$rm conftest* out/*
+rmdir out
+cd ..
+rmdir conftest
+$rm -r conftest 2>/dev/null
+
+fi
+
+compiler_c_o=$lt_cv_compiler_c_o
+echo "$ac_t""$compiler_c_o" 1>&6
+
+if test x"$compiler_c_o" = x"yes"; then
+ # Check to see if we can write to a .lo
+ echo $ac_n "checking if $compiler supports -c -o file.lo""... $ac_c" 1>&6
+echo "configure:3064: checking if $compiler supports -c -o file.lo" >&5
+ if eval "test \"`echo '$''{'lt_cv_compiler_o_lo'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+ lt_cv_compiler_o_lo=no
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -c -o conftest.lo"
+ save_objext="$ac_objext"
+ ac_objext=lo
cat > conftest.$ac_ext <<EOF
-#line 1634 "configure"
+#line 3075 "configure"
#include "confdefs.h"
-#include <assert.h>
-Syntax Error
+
+int main() {
+int some_variable = 0;
+; return 0; }
EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1640: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- :
+if { (eval echo configure:3082: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ lt_cv_compiler_o_lo=no
+ else
+ lt_cv_compiler_o_lo=yes
+ fi
+
else
- echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+ ac_objext="$save_objext"
+ CFLAGS="$save_CFLAGS"
+
+fi
+
+ compiler_o_lo=$lt_cv_compiler_o_lo
+ echo "$ac_t""$compiler_o_lo" 1>&6
+else
+ compiler_o_lo=no
+fi
+
+# Check to see if we can do hard links to lock some files if needed
+hard_links="nottested"
+if test "$compiler_c_o" = no && test "$need_locks" != no; then
+ # do not overwrite the value of need_locks provided by the user
+ echo $ac_n "checking if we can lock with hard links""... $ac_c" 1>&6
+echo "configure:3113: checking if we can lock with hard links" >&5
+ hard_links=yes
+ $rm conftest*
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ touch conftest.a
+ ln conftest.a conftest.b 2>&5 || hard_links=no
+ ln conftest.a conftest.b 2>/dev/null && hard_links=no
+ echo "$ac_t""$hard_links" 1>&6
+ if test "$hard_links" = no; then
+ echo "configure: warning: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" 1>&2
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+if test "$GCC" = yes; then
+ # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
+ echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions""... $ac_c" 1>&6
+echo "configure:3132: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+ echo "int some_variable = 0;" > conftest.$ac_ext
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext"
+ compiler_rtti_exceptions=no
+ cat > conftest.$ac_ext <<EOF
+#line 3138 "configure"
+#include "confdefs.h"
+
+int main() {
+int some_variable = 0;
+; return 0; }
+EOF
+if { (eval echo configure:3145: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
- CPP="${CC-cc} -E -traditional-cpp"
+ # The compiler can only warn and ignore the option if not recognized
+ # So say no if there are warnings
+ if test -s conftest.err; then
+ compiler_rtti_exceptions=no
+ else
+ compiler_rtti_exceptions=yes
+ fi
+
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+ CFLAGS="$save_CFLAGS"
+ echo "$ac_t""$compiler_rtti_exceptions" 1>&6
+
+ if test "$compiler_rtti_exceptions" = "yes"; then
+ no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
+ else
+ no_builtin_flag=' -fno-builtin'
+ fi
+fi
+
+# See if the linker supports building shared libraries.
+echo $ac_n "checking whether the linker ($LD) supports shared libraries""... $ac_c" 1>&6
+echo "configure:3172: checking whether the linker ($LD) supports shared libraries" >&5
+
+allow_undefined_flag=
+no_undefined_flag=
+need_lib_prefix=unknown
+need_version=unknown
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+archive_cmds=
+archive_expsym_cmds=
+old_archive_from_new_cmds=
+old_archive_from_expsyms_cmds=
+export_dynamic_flag_spec=
+whole_archive_flag_spec=
+thread_safe_flag_spec=
+hardcode_into_libs=no
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+hardcode_shlibpath_var=unsupported
+runpath_var=
+link_all_deplibs=unknown
+always_export_symbols=no
+export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
+# include_expsyms should be a list of space-separated symbols to be *always*
+# included in the symbol list
+include_expsyms=
+# exclude_expsyms can be an egrep regular expression of symbols to exclude
+# it will be wrapped by ` (' and `)$', so one must not match beginning or
+# end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+# as well as any symbol that contains `d'.
+exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+# platforms (ab)use it in PIC code, but their linkers get confused if
+# the symbol is explicitly referenced. Since portable code cannot
+# rely on this symbol name, it's probably fine to never include it in
+# preloaded symbol tables.
+extract_expsyms_cmds=
+
+case $host_os in
+cygwin* | mingw* | pw32*)
+ # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ if test "$GCC" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+openbsd*)
+ with_gnu_ld=no
+ ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+ # If archive_cmds runs LD, not CC, wlarc should be empty
+ wlarc='${wl}'
+
+ # See if GNU ld supports shared libraries.
+ case $host_os in
+ aix3* | aix4* | aix5*)
+ # On AIX, the GNU linker is very broken
+ # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available.
+ ld_shlibs=no
+ cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support. If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+ ;;
+
+ amigaos*)
+ archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+
+ # Samuel A. Falvo II <[email protected]> reports
+ # that the semantics of dynamic libraries on AmigaOS, at least up
+ # to version 4, is to share data among multiple programs linked
+ # with the same dynamic library. Since this doesn't match the
+ # behavior of shared libraries on other platforms, we can use
+ # them.
+ ld_shlibs=no
+ ;;
+
+ beos*)
+ if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+ allow_undefined_flag=unsupported
+ # Joseph Beckenbach <[email protected]> says some releases of gcc
+ # support --undefined. This deserves some investigation. FIXME
+ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec='-L$libdir'
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+
+ extract_expsyms_cmds='test -f $output_objdir/impgen.c || \
+ sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~
+ test -f $output_objdir/impgen.exe || (cd $output_objdir && \
+ if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \
+ else $CC -o impgen impgen.c ; fi)~
+ $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def'
+
+ old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib'
+
+ # cygwin and mingw dlls have different entry points and sets of symbols
+ # to exclude.
+ # FIXME: what about values for MSVC?
+ dll_entry=__cygwin_dll_entry@12
+ dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~
+ case $host_os in
+ mingw*)
+ # mingw values
+ dll_entry=_DllMainCRTStartup@12
+ dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~
+ ;;
+ esac
+
+ # mingw and cygwin differ, and it's simplest to just exclude the union
+ # of the two symbol sets.
+ dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12
+
+ # recent cygwin and mingw systems supply a stub DllMain which the user
+ # can override, but on older systems we have to supply one (in ltdll.c)
+ if test "x$lt_cv_need_dllmain" = "xyes"; then
+ ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext "
+ ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $''0 > $output_objdir/$soname-ltdll.c~
+ test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~'
+ else
+ ltdll_obj=
+ ltdll_cmds=
+ fi
+
+ # Extract the symbol export list from an `--export-all' def file,
+ # then regenerate the def file from the symbol export list, so that
+ # the compiled dll only exports the symbol export list.
+ # Be careful not to strip the DATA tag left be newer dlltools.
+ export_symbols_cmds="$ltdll_cmds"'
+ $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~
+ sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols'
+
+ # If the export-symbols file already is a .def file (1st line
+ # is EXPORTS), use it as is.
+ # If DATA tags from a recent dlltool are present, honour them!
+ archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
+ cp $export_symbols $output_objdir/$soname-def;
+ else
+ echo EXPORTS > $output_objdir/$soname-def;
+ _lt_hint=1;
+ cat $export_symbols | while read symbol; do
+ set dummy \$symbol;
+ case \$# in
+ 2) echo " \$2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;;
+ *) echo " \$2 @ \$_lt_hint \$3 ; " >> $output_objdir/$soname-def;;
+ esac;
+ _lt_hint=`expr 1 + \$_lt_hint`;
+ done;
+ fi~
+ '"$ltdll_cmds"'
+ $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
+ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~
+ $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
+ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~
+ $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+ wlarc=
+ else
+ archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ fi
+ ;;
+
+ solaris* | sysv5*)
+ if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
+ ld_shlibs=no
+ cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems. Therefore, libtool
+*** is disabling shared libraries support. We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer. Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+ elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ wlarc=
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+ esac
+
+ if test "$ld_shlibs" = yes; then
+ runpath_var=LD_RUN_PATH
+ hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
+ export_dynamic_flag_spec='${wl}--export-dynamic'
+ case $host_os in
+ cygwin* | mingw* | pw32*)
+ # dlltool doesn't understand --whole-archive et. al.
+ whole_archive_flag_spec=
+ ;;
+ *)
+ # ancient GNU ld didn't support --whole-archive et. al.
+ if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ else
+ whole_archive_flag_spec=
+ fi
+ ;;
+ esac
+ fi
+else
+ # PORTME fill in a description of your system's linker (not GNU ld)
+ case $host_os in
+ aix3*)
+ allow_undefined_flag=unsupported
+ always_export_symbols=yes
+ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$GCC" = yes && test -z "$link_static_flag"; then
+ # Neither direct hardcoding nor static linking is supported with a
+ # broken collect2.
+ hardcode_direct=unsupported
+ fi
+ ;;
+
+ aix4* | aix5*)
+ if test "$host_cpu" = ia64; then
+ # On IA64, the linker does run time linking by default, so we don't
+ # have to do anything special.
+ aix_use_runtimelinking=no
+ exp_sym_flag='-Bexport'
+ no_entry_flag=""
+ else
+ aix_use_runtimelinking=no
+
+ # Test if we are trying to use run time linking or normal
+ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+ # need to do runtime linking.
+ case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+ for ld_flag in $LDFLAGS; do
+ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+ aix_use_runtimelinking=yes
+ break
+ fi
+ done
+ esac
+
+ exp_sym_flag='-bexport'
+ no_entry_flag='-bnoentry'
+ fi
+
+ # When large executables or shared objects are built, AIX ld can
+ # have problems creating the table of contents. If linking a library
+ # or program results in "error TOC overflow" add -mminimal-toc to
+ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
+ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+ hardcode_direct=yes
+ archive_cmds=''
+ hardcode_libdir_separator=':'
+ if test "$GCC" = yes; then
+ case $host_os in aix4.[012]|aix4.[012].*)
+ collect2name=`${CC} -print-prog-name=collect2`
+ if test -f "$collect2name" && \
+ strings "$collect2name" | grep resolve_lib_name >/dev/null
+ then
+ # We have reworked collect2
+ hardcode_direct=yes
+ else
+ # We have old collect2
+ hardcode_direct=unsupported
+ # It fails to find uninstalled libraries when the uninstalled
+ # path is not listed in the libpath. Setting hardcode_minus_L
+ # to unsupported forces relinking
+ hardcode_minus_L=yes
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_libdir_separator=
+ fi
+ esac
+
+ shared_flag='-shared'
+ else
+ # not using gcc
+ if test "$host_cpu" = ia64; then
+ shared_flag='${wl}-G'
+ else
+ if test "$aix_use_runtimelinking" = yes; then
+ shared_flag='${wl}-G'
+ else
+ shared_flag='${wl}-bM:SRE'
+ fi
+ fi
+ fi
+
+ # It seems that -bexpall can do strange things, so it is better to
+ # generate a list of symbols to export.
+ always_export_symbols=yes
+ if test "$aix_use_runtimelinking" = yes; then
+ # Warning - without using the other runtime loading flags (-brtl),
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='-berok'
+ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
+ archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+ else
+ if test "$host_cpu" = ia64; then
+ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+ allow_undefined_flag="-z nodefs"
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+ else
+ hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
+ # Warning - without using the other run time loading flags,
+ # -berok will link without error, but may produce a broken library.
+ allow_undefined_flag='${wl}-berok'
+ # This is a bit strange, but is similar to how AIX traditionally builds
+ # it's shared libraries.
+ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname'
+ fi
+ fi
+ ;;
+
+ amigaos*)
+ archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ # see comment about different semantics on the GNU ld section
+ ld_shlibs=no
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ # When not using gcc, we currently assume that we are using
+ # Microsoft Visual C++.
+ # hardcode_libdir_flag_spec is actually meaningless, as there is
+ # no search path for DLLs.
+ hardcode_libdir_flag_spec=' '
+ allow_undefined_flag=unsupported
+ # Tell ltmain to make .lib files, not .a files.
+ libext=lib
+ # FIXME: Setting linknames here is a bad hack.
+ archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+ # The linker will automatically build a .lib file if we build a DLL.
+ old_archive_from_new_cmds='true'
+ # FIXME: Should let the user specify the lib program.
+ old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
+ fix_srcfile_path='`cygpath -w "$srcfile"`'
+ ;;
+
+ darwin* | rhapsody*)
+ case "$host_os" in
+ rhapsody* | darwin1.[012])
+ allow_undefined_flag='-undefined suppress'
+ ;;
+ *) # Darwin 1.3 on
+ allow_undefined_flag='-flat_namespace -undefined suppress'
+ ;;
+ esac
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes. Also zsh mangles
+ # `"' quotes if we put them in here... so don't!
+ archive_cmds='$nonopt $(test .$module = .yes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linker_flags -install_name $rpath/$soname $verstring'
+ # We need to add '_' to the symbols in $export_symbols first
+ #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ whole_archive_flag_spec='-all_load $convenience'
+ ;;
+
+ freebsd1*)
+ ld_shlibs=no
+ ;;
+
+ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+ # support. Future versions do this automatically, but an explicit c++rt0.o
+ # does not break anything, and helps significantly (at the cost of a little
+ # extra space).
+ freebsd2.2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+ freebsd2*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+ freebsd*)
+ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ case $host_os in
+ hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
+ *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;;
+ esac
+ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_direct=yes
+ hardcode_minus_L=yes # Not in the search PATH, but as the default
+ # location of the library.
+ export_dynamic_flag_spec='${wl}-E'
+ ;;
+
+ irix5* | irix6* | nonstopux*)
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ link_all_deplibs=yes
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
+ fi
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ newsos6)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ hardcode_shlibpath_var=no
+ ;;
+
+ openbsd*)
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ export_dynamic_flag_spec='${wl}-E'
+ else
+ case "$host_os" in
+ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-R$libdir'
+ ;;
+ *)
+ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+ ;;
+ esac
+ fi
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+ old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+ ;;
+
+ osf3*)
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+
+ osf4* | osf5*) # as osf3* with the addition of -msym flag
+ if test "$GCC" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+ #Both c and cxx compiler support -rpath directly
+ hardcode_libdir_flag_spec='-rpath $libdir'
+ fi
+ hardcode_libdir_separator=:
+ ;;
+
+ sco3.2v5*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ export_dynamic_flag_spec='${wl}-Bexport'
+ ;;
+
+ solaris*)
+ # gcc --version < 3.0 without binutils cannot create self contained
+ # shared libraries reliably, requiring libgcc.a to resolve some of
+ # the object symbols generated in some cases. Libraries that use
+ # assert need libgcc.a to resolve __eprintf, for example. Linking
+ # a copy of libgcc.a into every shared library to guarantee resolving
+ # such symbols causes other problems: According to Tim Van Holder
+ # <[email protected]>, C++ libraries end up with a separate
+ # (to the application) exception stack for one thing.
+ no_undefined_flag=' -z defs'
+ if test "$GCC" = yes; then
+ case `$CC --version 2>/dev/null` in
+ [12].*)
+ cat <<EOF 1>&2
+
+*** Warning: Releases of GCC earlier than version 3.0 cannot reliably
+*** create self contained shared libraries on Solaris systems, without
+*** introducing a dependency on libgcc.a. Therefore, libtool is disabling
+*** -no-undefined support, which will at least allow you to build shared
+*** libraries. However, you may find that when you link such libraries
+*** into an application without using GCC, you have to manually add
+*** \`gcc --print-libgcc-file-name\` to the link command. We urge you to
+*** upgrade to a newer version of GCC. Another option is to rebuild your
+*** current GCC to use the GNU linker from GNU binutils 2.9.1 or newer.
+
+EOF
+ no_undefined_flag=
+ ;;
+ esac
+ fi
+ # $CC -shared without GNU ld will not create a library from C++
+ # object files and a static libstdc++, better avoid it by now
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_shlibpath_var=no
+ case $host_os in
+ solaris2.[0-5] | solaris2.[0-5].*) ;;
+ *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+ whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
+ esac
+ link_all_deplibs=yes
+ ;;
+
+ sunos4*)
+ if test "x$host_vendor" = xsequent; then
+ # Use $CC to link under sequent, because it throws in some extra .o
+ # files that make .init and .fini sections work.
+ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+ fi
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ if test "x$host_vendor" = xsno; then
+ archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes # is this really true???
+ else
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ fi
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ sysv5*)
+ no_undefined_flag=' -z text'
+ # $CC -shared without GNU ld will not create a library from C++
+ # object files and a static libstdc++, better avoid it by now
+ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+ hardcode_libdir_flag_spec=
+ hardcode_shlibpath_var=no
+ runpath_var='LD_RUN_PATH'
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ sysv4.2uw2*)
+ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+ hardcode_direct=yes
+ hardcode_minus_L=no
+ hardcode_shlibpath_var=no
+ hardcode_runpath_var=yes
+ runpath_var=LD_RUN_PATH
+ ;;
+
+ sysv5uw7* | unixware7*)
+ no_undefined_flag='${wl}-z ${wl}text'
+ if test "$GCC" = yes; then
+ archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ else
+ archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+ fi
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+fi
+echo "$ac_t""$ld_shlibs" 1>&6
+test "$ld_shlibs" = no && can_build_shared=no
+
+# Check hardcoding attributes.
+echo $ac_n "checking how to hardcode library paths into programs""... $ac_c" 1>&6
+echo "configure:3857: checking how to hardcode library paths into programs" >&5
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" || \
+ test -n "$runpath_var"; then
+
+ # We can hardcode non-existant directories.
+ if test "$hardcode_direct" != no &&
+ # If the only mechanism to avoid hardcoding is shlibpath_var, we
+ # have to relink, otherwise we might link with an installed library
+ # when we should be linking with a yet-to-be-installed one
+ ## test "$hardcode_shlibpath_var" != no &&
+ test "$hardcode_minus_L" != no; then
+ # Linking always hardcodes the temporary library directory.
+ hardcode_action=relink
+ else
+ # We can link without hardcoding, and we can hardcode nonexisting dirs.
+ hardcode_action=immediate
+ fi
+else
+ # We cannot hardcode anything, or else we can only hardcode existing
+ # directories.
+ hardcode_action=unsupported
+fi
+echo "$ac_t""$hardcode_action" 1>&6
+
+striplib=
+old_striplib=
+echo $ac_n "checking whether stripping libraries is possible""... $ac_c" 1>&6
+echo "configure:3885: checking whether stripping libraries is possible" >&5
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+ echo "$ac_t""yes" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+# PORTME Fill in your ld.so characteristics
+echo $ac_n "checking dynamic linker characteristics""... $ac_c" 1>&6
+echo "configure:3899: checking dynamic linker characteristics" >&5
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+
+case $host_os in
+aix3*)
+ version_type=linux
+ library_names_spec='${libname}${release}.so$versuffix $libname.a'
+ shlibpath_var=LIBPATH
+
+ # AIX has no versioning support, so we append a major version to the name.
+ soname_spec='${libname}${release}.so$major'
+ ;;
+
+aix4* | aix5*)
+ version_type=linux
+ if test "$host_cpu" = ia64; then
+ # AIX 5 supports IA64
+ library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so'
+ shlibpath_var=LD_LIBRARY_PATH
+ else
+ # With GCC up to 2.95.x, collect2 would create an import file
+ # for dependence libraries. The import file would start with
+ # the line `#! .'. This would cause the generated library to
+ # depend on `.', always an invalid library. This was fixed in
+ # development snapshots of GCC prior to 3.0.
+ case $host_os in
+ aix4 | aix4.[01] | aix4.[01].*)
+ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+ echo ' yes '
+ echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+ :
+ else
+ can_build_shared=no
+ fi
+ ;;
+ esac
+ # AIX (on Power*) has no versioning support, so currently we can
+ # not hardcode correct soname into executable. Probably we can
+ # add versioning support to collect2, so additional links can
+ # be useful in future.
+ if test "$aix_use_runtimelinking" = yes; then
+ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+ # instead of lib<name>.a to let people know that these are not
+ # typical AIX shared libraries.
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ else
+ # We preserve .a as extension for shared libraries through AIX4.2
+ # and later when we are not doing run time linking.
+ library_names_spec='${libname}${release}.a $libname.a'
+ soname_spec='${libname}${release}.so$major'
+ fi
+ shlibpath_var=LIBPATH
+ fi
+ ;;
+
+amigaos*)
+ library_names_spec='$libname.ixlibrary $libname.a'
+ # Create ${libname}_ixlibrary.a entries in /sys/libs.
+ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+ ;;
+
+beos*)
+ library_names_spec='${libname}.so'
+ dynamic_linker="$host_os ld.so"
+ shlibpath_var=LIBRARY_PATH
+ ;;
+
+bsdi4*)
+ version_type=linux
+ need_version=no
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ soname_spec='${libname}${release}.so$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+ export_dynamic_flag_spec=-rdynamic
+ # the default ld.so.conf also contains /usr/contrib/lib and
+ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+ # libtool to hard-code these into programs
+ ;;
+
+cygwin* | mingw* | pw32*)
+ version_type=windows
+ need_version=no
+ need_lib_prefix=no
+ case $GCC,$host_os in
+ yes,cygwin*)
+ library_names_spec='$libname.dll.a'
+ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
+ postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~
+ dldir=$destdir/`dirname \$dlpath`~
+ test -d \$dldir || mkdir -p \$dldir~
+ $install_prog .libs/$dlname \$dldir/$dlname'
+ postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~
+ dlpath=$dir/\$dldll~
+ $rm \$dlpath'
+ ;;
+ yes,mingw*)
+ library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
+ sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
+ ;;
+ yes,pw32*)
+ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/./-/g'`${versuffix}.dll'
+ ;;
+ *)
+ library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib'
+ ;;
+ esac
+ dynamic_linker='Win32 ld.exe'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ ;;
+
+darwin* | rhapsody*)
+ dynamic_linker="$host_os dyld"
+ version_type=darwin
+ need_lib_prefix=no
+ need_version=no
+ # FIXME: Relying on posixy $() will cause problems for
+ # cross-compilation, but unfortunately the echo tests do not
+ # yet detect zsh echo's removal of \ escapes.
+ library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)'
+ soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)'
+ shlibpath_overrides_runpath=yes
+ shlibpath_var=DYLD_LIBRARY_PATH
+ ;;
+
+freebsd1*)
+ dynamic_linker=no
+ ;;
+
+freebsd*)
+ objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+ version_type=freebsd-$objformat
+ case $version_type in
+ freebsd-elf*)
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
+ need_version=yes
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_os in
+ freebsd2*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ *)
+ shlibpath_overrides_runpath=no
+ hardcode_into_libs=yes
+ ;;
+ esac
+ ;;
+
+gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
+ soname_spec='${libname}${release}.so$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ hardcode_into_libs=yes
+ ;;
+
+hpux9* | hpux10* | hpux11*)
+ # Give a soname corresponding to the major version so that dld.sl refuses to
+ # link against other versions.
+ dynamic_linker="$host_os dld.sl"
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_var=SHLIB_PATH
+ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+ library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
+ soname_spec='${libname}${release}.sl$major'
+ # HP-UX runs *really* slowly unless shared libraries are mode 555.
+ postinstall_cmds='chmod 555 $lib'
+ ;;
+
+irix5* | irix6* | nonstopux*)
+ case $host_os in
+ nonstopux*) version_type=nonstopux ;;
+ *) version_type=irix ;;
+ esac
+ need_lib_prefix=no
+ need_version=no
+ soname_spec='${libname}${release}.so$major'
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so'
+ case $host_os in
+ irix5* | nonstopux*)
+ libsuff= shlibsuff=
+ ;;
+ *)
+ case $LD in # libtool.m4 will add one of these switches to LD
+ *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
+ *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
+ *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
+ *) libsuff= shlibsuff= libmagic=never-match;;
+ esac
+ ;;
+ esac
+ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+ ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
+ dynamic_linker=no
+ ;;
+
+# This must be Linux ELF.
+linux-gnu*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ soname_spec='${libname}${release}.so$major'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=no
+ # This implies no fast_install, which is unacceptable.
+ # Some rework will be needed to allow for fast_install
+ # before this can be enabled.
+ hardcode_into_libs=yes
+
+ # We used to test for /lib/ld.so.1 and disable shared libraries on
+ # powerpc, because MkLinux only supported shared libraries with the
+ # GNU dynamic linker. Since this was broken with cross compilers,
+ # most powerpc-linux boxes support dynamic linking these days and
+ # people can always --disable-shared, the test was removed, and we
+ # assume the GNU/Linux dynamic linker is in use.
+ dynamic_linker='GNU/Linux ld.so'
+ ;;
+
+netbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ dynamic_linker='NetBSD (a.out) ld.so'
+ else
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
+ soname_spec='${libname}${release}.so$major'
+ dynamic_linker='NetBSD ld.elf_so'
+ fi
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ ;;
+
+newsos6)
+ version_type=linux
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ ;;
+
+openbsd*)
+ version_type=sunos
+ need_lib_prefix=no
+ need_version=no
+ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+ case "$host_os" in
+ openbsd2.[89] | openbsd2.[89].*)
+ shlibpath_overrides_runpath=no
+ ;;
+ *)
+ shlibpath_overrides_runpath=yes
+ ;;
+ esac
+ else
+ shlibpath_overrides_runpath=yes
+ fi
+ library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+os2*)
+ libname_spec='$name'
+ need_lib_prefix=no
+ library_names_spec='$libname.dll $libname.a'
+ dynamic_linker='OS/2 ld.exe'
+ shlibpath_var=LIBPATH
+ ;;
+
+osf3* | osf4* | osf5*)
+ version_type=osf
+ need_version=no
+ need_lib_prefix=no
+ soname_spec='${libname}${release}.so'
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+ shlibpath_var=LD_LIBRARY_PATH
+ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+ ;;
+
+sco3.2v5*)
+ version_type=osf
+ soname_spec='${libname}${release}.so$major'
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+solaris*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ soname_spec='${libname}${release}.so$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ hardcode_into_libs=yes
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ ;;
+
+sunos4*)
+ version_type=sunos
+ library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ shlibpath_overrides_runpath=yes
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ fi
+ need_version=yes
+ ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ version_type=linux
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ soname_spec='${libname}${release}.so$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ case $host_vendor in
+ sni)
+ shlibpath_overrides_runpath=no
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ ;;
+ esac
+ ;;
+
+uts4*)
+ version_type=linux
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ soname_spec='${libname}${release}.so$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+dgux*)
+ version_type=linux
+ need_lib_prefix=no
+ need_version=no
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+ soname_spec='${libname}${release}.so$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ ;;
+
+sysv4*MP*)
+ if test -d /usr/nec ;then
+ version_type=linux
+ library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
+ soname_spec='$libname.so.$major'
+ shlibpath_var=LD_LIBRARY_PATH
+ fi
+ ;;
+
+*)
+ dynamic_linker=no
+ ;;
+esac
+echo "$ac_t""$dynamic_linker" 1>&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+# Report the final consequences.
+echo $ac_n "checking if libtool supports shared libraries""... $ac_c" 1>&6
+echo "configure:4300: checking if libtool supports shared libraries" >&5
+echo "$ac_t""$can_build_shared" 1>&6
+
+echo $ac_n "checking whether to build shared libraries""... $ac_c" 1>&6
+echo "configure:4304: checking whether to build shared libraries" >&5
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+ test "$enable_shared" = yes && enable_static=no
+ if test -n "$RANLIB"; then
+ archive_cmds="$archive_cmds~\$RANLIB \$lib"
+ postinstall_cmds='$RANLIB $lib'
+ fi
+ ;;
+
+aix4*)
+ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+ test "$enable_shared" = yes && enable_static=no
+ fi
+ ;;
+esac
+echo "$ac_t""$enable_shared" 1>&6
+
+echo $ac_n "checking whether to build static libraries""... $ac_c" 1>&6
+echo "configure:4327: checking whether to build static libraries" >&5
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+echo "$ac_t""$enable_static" 1>&6
+
+if test "$hardcode_action" = relink; then
+ # Fast installation is not supported
+ enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+ test "$enable_shared" = no; then
+ # Fast installation is not necessary
+ enable_fast_install=needless
+fi
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+ lt_cv_dlopen=no
+ lt_cv_dlopen_libs=
+
+ case $host_os in
+ beos*)
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+ cygwin* | mingw* | pw32*)
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+ *)
+ echo $ac_n "checking for shl_load""... $ac_c" 1>&6
+echo "configure:4368: checking for shl_load" >&5
+if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
cat > conftest.$ac_ext <<EOF
-#line 1651 "configure"
+#line 4373 "configure"
#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char shl_load(); below. */
#include <assert.h>
-Syntax Error
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shl_load();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+shl_load();
+#endif
+
+; return 0; }
EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1657: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- :
+if { (eval echo configure:4396: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_shl_load=yes"
else
- echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
- CPP="${CC-cc} -nologo -E"
+ eval "ac_cv_func_shl_load=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ lt_cv_dlopen="shl_load"
+else
+ echo "$ac_t""no" 1>&6
+echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6
+echo "configure:4414: checking for shl_load in -ldld" >&5
+ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-ldld $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 4422 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char shl_load();
+
+int main() {
+shl_load()
+; return 0; }
+EOF
+if { (eval echo configure:4433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+ echo "$ac_t""no" 1>&6
+echo $ac_n "checking for dlopen""... $ac_c" 1>&6
+echo "configure:4452: checking for dlopen" >&5
+if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
cat > conftest.$ac_ext <<EOF
-#line 1668 "configure"
+#line 4457 "configure"
#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char dlopen(); below. */
#include <assert.h>
-Syntax Error
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+dlopen();
+#endif
+
+; return 0; }
EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1674: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- :
+if { (eval echo configure:4480: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_dlopen=yes"
else
- echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
- CPP=/lib/cpp
+ eval "ac_cv_func_dlopen=no"
fi
rm -f conftest*
fi
+
+if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ lt_cv_dlopen="dlopen"
+else
+ echo "$ac_t""no" 1>&6
+echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
+echo "configure:4498: checking for dlopen in -ldl" >&5
+ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-ldl $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 4506 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen();
+
+int main() {
+dlopen()
+; return 0; }
+EOF
+if { (eval echo configure:4517: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
rm -f conftest*
+LIBS="$ac_save_LIBS"
+
fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+ echo "$ac_t""no" 1>&6
+echo $ac_n "checking for dlopen in -lsvld""... $ac_c" 1>&6
+echo "configure:4536: checking for dlopen in -lsvld" >&5
+ac_lib_var=`echo svld'_'dlopen | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lsvld $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 4544 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dlopen();
+
+int main() {
+dlopen()
+; return 0; }
+EOF
+if { (eval echo configure:4555: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
rm -f conftest*
- ac_cv_prog_CPP="$CPP"
+LIBS="$ac_save_LIBS"
+
fi
- CPP="$ac_cv_prog_CPP"
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
else
- ac_cv_prog_CPP="$CPP"
+ echo "$ac_t""no" 1>&6
+echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6
+echo "configure:4574: checking for dld_link in -ldld" >&5
+ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-ldld $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 4582 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char dld_link();
+
+int main() {
+dld_link()
+; return 0; }
+EOF
+if { (eval echo configure:4593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
fi
-echo "$ac_t""$CPP" 1>&6
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+ ;;
+ esac
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ else
+ enable_dlopen=no
+ fi
+
+ case $lt_cv_dlopen in
+ dlopen)
+ save_CPPFLAGS="$CPPFLAGS"
+ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+ save_LDFLAGS="$LDFLAGS"
+ eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+ save_LIBS="$LIBS"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
+echo "configure:4649: checking whether a program can dlopen itself" >&5
+if eval "test \"`echo '$''{'lt_cv_dlopen_self'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+#line 4659 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}
+EOF
+ if { (eval echo configure:4720: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+ x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+
+echo "$ac_t""$lt_cv_dlopen_self" 1>&6
+
+ if test "x$lt_cv_dlopen_self" = xyes; then
+ LDFLAGS="$LDFLAGS $link_static_flag"
+ echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
+echo "configure:4743: checking whether a statically linked program can dlopen itself" >&5
+if eval "test \"`echo '$''{'lt_cv_dlopen_self_static'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test "$cross_compiling" = yes; then :
+ lt_cv_dlopen_self_static=cross
+else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<EOF
+#line 4753 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LT_DLGLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LT_DLGLOBAL DL_GLOBAL
+# else
+# define LT_DLGLOBAL 0
+# endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LT_DLLAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LT_DLLAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LT_DLLAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LT_DLLAZY_OR_NOW DL_NOW
+# else
+# define LT_DLLAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+ int status = $lt_dlunknown;
+
+ if (self)
+ {
+ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
+ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+ /* dlclose (self); */
+ }
+
+ exit (status);
+}
+EOF
+ if { (eval echo configure:4814: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then
+ (./conftest; exit; ) 2>/dev/null
+ lt_status=$?
+ case x$lt_status in
+ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+ x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+ esac
+ else :
+ # compilation failed
+ lt_cv_dlopen_self_static=no
+ fi
+fi
+rm -fr conftest*
+
+
+fi
+
+echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6
+ fi
+
+ CPPFLAGS="$save_CPPFLAGS"
+ LDFLAGS="$save_LDFLAGS"
+ LIBS="$save_LIBS"
+ ;;
+ esac
+
+ case $lt_cv_dlopen_self in
+ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+ *) enable_dlopen_self=unknown ;;
+ esac
+
+ case $lt_cv_dlopen_self_static in
+ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+ *) enable_dlopen_self_static=unknown ;;
+ esac
+fi
+
+
+if test "$enable_shared" = yes && test "$GCC" = yes; then
+ case $archive_cmds in
+ *'~'*)
+ # FIXME: we may have to deal with multi-command sequences.
+ ;;
+ '$CC '*)
+ # Test whether the compiler implicitly links with -lc since on some
+ # systems, -lgcc has to come before -lc. If gcc already passes -lc
+ # to ld, don't add -lc before -lgcc.
+ echo $ac_n "checking whether -lc should be explicitly linked in""... $ac_c" 1>&6
+echo "configure:4863: checking whether -lc should be explicitly linked in" >&5
+ if eval "test \"`echo '$''{'lt_cv_archive_cmds_need_lc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ $rm conftest*
+ echo 'static int dummy;' > conftest.$ac_ext
+
+ if { (eval echo configure:4870: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ soname=conftest
+ lib=conftest
+ libobjs=conftest.$ac_objext
+ deplibs=
+ wl=$lt_cv_prog_cc_wl
+ compiler_flags=-v
+ linker_flags=-v
+ verstring=
+ output_objdir=.
+ libname=conftest
+ save_allow_undefined_flag=$allow_undefined_flag
+ allow_undefined_flag=
+ if { (eval echo configure:4883: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\") 1>&5; (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5; }
+ then
+ lt_cv_archive_cmds_need_lc=no
+ else
+ lt_cv_archive_cmds_need_lc=yes
+ fi
+ allow_undefined_flag=$save_allow_undefined_flag
+ else
+ cat conftest.err 1>&5
+ fi
+fi
+
+ echo "$ac_t""$lt_cv_archive_cmds_need_lc" 1>&6
+ ;;
+ esac
+fi
+need_lc=${lt_cv_archive_cmds_need_lc-yes}
+
+# The second clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+ :
+else
+ # If there is no Makefile yet, we rely on a make rule to execute
+ # `config.status --recheck' to rerun these tests and create the
+ # libtool script then.
+ test -f Makefile && make "$ltmain"
+fi
+
+if test -f "$ltmain"; then
+ trap "$rm \"${ofile}T\"; exit 1" 1 2 15
+ $rm -f "${ofile}T"
+
+ echo creating $ofile
+
+ # Now quote all the things that may contain metacharacters while being
+ # careful not to overquote the AC_SUBSTed values. We take copies of the
+ # variables and quote the copies for generation of the libtool script.
+ for var in echo old_CC old_CFLAGS \
+ AR AR_FLAGS CC LD LN_S NM SHELL \
+ reload_flag reload_cmds wl \
+ pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
+ thread_safe_flag_spec whole_archive_flag_spec libname_spec \
+ library_names_spec soname_spec \
+ RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
+ old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \
+ postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \
+ old_striplib striplib file_magic_cmd export_symbols_cmds \
+ deplibs_check_method allow_undefined_flag no_undefined_flag \
+ finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
+ global_symbol_to_c_name_address \
+ hardcode_libdir_flag_spec hardcode_libdir_separator \
+ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+ compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
+
+ case $var in
+ reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
+ old_postinstall_cmds | old_postuninstall_cmds | \
+ export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
+ extract_expsyms_cmds | old_archive_from_expsyms_cmds | \
+ postinstall_cmds | postuninstall_cmds | \
+ finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+ # Double-quote double-evaled strings.
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+ ;;
+ esac
+ done
+
+ cat <<__EOF__ > "${ofile}T"
+#! $SHELL
+
+# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996-2000 Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <[email protected]>, 1996
+#
+# 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.
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="sed -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$need_lc
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# The default C compiler.
+CC=$lt_CC
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_wl
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_pic_flag
+pic_mode=$pic_mode
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_compiler_c_o
+
+# Can we write directly to a .lo ?
+compiler_o_lo=$lt_compiler_o_lo
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_link_static_flag
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_no_builtin_flag
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names. First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# ### END LIBTOOL CONFIG
+
+__EOF__
+
+ case $host_os in
+ aix3*)
+ cat <<\EOF >> "${ofile}T"
+
+# AIX sometimes has problems with the GCC collect2 program. For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+EOF
+ ;;
+ esac
+
+ case $host_os in
+ cygwin* | mingw* | pw32* | os2*)
+ cat <<'EOF' >> "${ofile}T"
+ # This is a source program that is used to create dlls on Windows
+ # Don't remove nor modify the starting and closing comments
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include <windows.h>
+# #undef WIN32_LEAN_AND_MEAN
+# #include <stdio.h>
+#
+# #ifndef __CYGWIN__
+# # ifdef __CYGWIN32__
+# # define __CYGWIN__ __CYGWIN32__
+# # endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include <cygwin/cygwin_dll.h>
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+# __hDllInstance_base = hInst;
+# return TRUE;
+# }
+# /* ltdll.c ends here */
+ # This is a source program that is used to create import libraries
+ # on Windows for dlls which lack them. Don't remove nor modify the
+ # starting and closing comments
+# /* impgen.c starts here */
+# /* Copyright (C) 1999-2000 Free Software Foundation, Inc.
+#
+# This file is part of GNU libtool.
+#
+# 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> /* for printf() */
+# #include <unistd.h> /* for open(), lseek(), read() */
+# #include <fcntl.h> /* for O_RDONLY, O_BINARY */
+# #include <string.h> /* for strdup() */
+#
+# /* O_BINARY isn't required (or even defined sometimes) under Unix */
+# #ifndef O_BINARY
+# #define O_BINARY 0
+# #endif
+#
+# static unsigned int
+# pe_get16 (fd, offset)
+# int fd;
+# int offset;
+# {
+# unsigned char b[2];
+# lseek (fd, offset, SEEK_SET);
+# read (fd, b, 2);
+# return b[0] + (b[1]<<8);
+# }
+#
+# static unsigned int
+# pe_get32 (fd, offset)
+# int fd;
+# int offset;
+# {
+# unsigned char b[4];
+# lseek (fd, offset, SEEK_SET);
+# read (fd, b, 4);
+# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
+# }
+#
+# static unsigned int
+# pe_as32 (ptr)
+# void *ptr;
+# {
+# unsigned char *b = ptr;
+# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
+# }
+#
+# int
+# main (argc, argv)
+# int argc;
+# char *argv[];
+# {
+# int dll;
+# unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
+# unsigned long export_rva, export_size, nsections, secptr, expptr;
+# unsigned long name_rvas, nexp;
+# unsigned char *expdata, *erva;
+# char *filename, *dll_name;
+#
+# filename = argv[1];
+#
+# dll = open(filename, O_RDONLY|O_BINARY);
+# if (dll < 1)
+# return 1;
+#
+# dll_name = filename;
+#
+# for (i=0; filename[i]; i++)
+# if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':')
+# dll_name = filename + i +1;
+#
+# pe_header_offset = pe_get32 (dll, 0x3c);
+# opthdr_ofs = pe_header_offset + 4 + 20;
+# num_entries = pe_get32 (dll, opthdr_ofs + 92);
+#
+# if (num_entries < 1) /* no exports */
+# return 1;
+#
+# export_rva = pe_get32 (dll, opthdr_ofs + 96);
+# export_size = pe_get32 (dll, opthdr_ofs + 100);
+# nsections = pe_get16 (dll, pe_header_offset + 4 +2);
+# secptr = (pe_header_offset + 4 + 20 +
+# pe_get16 (dll, pe_header_offset + 4 + 16));
+#
+# expptr = 0;
+# for (i = 0; i < nsections; i++)
+# {
+# char sname[8];
+# unsigned long secptr1 = secptr + 40 * i;
+# unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
+# unsigned long vsize = pe_get32 (dll, secptr1 + 16);
+# unsigned long fptr = pe_get32 (dll, secptr1 + 20);
+# lseek(dll, secptr1, SEEK_SET);
+# read(dll, sname, 8);
+# if (vaddr <= export_rva && vaddr+vsize > export_rva)
+# {
+# expptr = fptr + (export_rva - vaddr);
+# if (export_rva + export_size > vaddr + vsize)
+# export_size = vsize - (export_rva - vaddr);
+# break;
+# }
+# }
+#
+# expdata = (unsigned char*)malloc(export_size);
+# lseek (dll, expptr, SEEK_SET);
+# read (dll, expdata, export_size);
+# erva = expdata - export_rva;
+#
+# nexp = pe_as32 (expdata+24);
+# name_rvas = pe_as32 (expdata+32);
+#
+# printf ("EXPORTS\n");
+# for (i = 0; i<nexp; i++)
+# {
+# unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
+# printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
+# }
+#
+# return 0;
+# }
+# /* impgen.c ends here */
+
+EOF
+ ;;
+ esac
+
+ # We use sed instead of cat because bash on DJGPP gets confused if
+ # if finds mixed CR/LF and LF-only lines. Since sed operates in
+ # text mode, it properly converts lines to CR/LF. This bash problem
+ # is reportedly fixed, but why not run on old versions too?
+ sed '$q' "$ltmain" >> "${ofile}T" || (rm -f "${ofile}T"; exit 1)
+
+ mv -f "${ofile}T" "$ofile" || \
+ (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T")
+ chmod +x "$ofile"
+fi
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+# Prevent multiple expansion
+
+
+
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:1699: checking for ANSI C header files" >&5
+echo "configure:5466: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1704 "configure"
+#line 5471 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
@@ -1708,7 +5475,7 @@
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1712: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5479: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -1725,7 +5492,7 @@
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 1729 "configure"
+#line 5496 "configure"
#include "confdefs.h"
#include <string.h>
EOF
@@ -1743,7 +5510,7 @@
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 1747 "configure"
+#line 5514 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
@@ -1764,7 +5531,7 @@
:
else
cat > conftest.$ac_ext <<EOF
-#line 1768 "configure"
+#line 5535 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -1775,7 +5542,7 @@
exit (0); }
EOF
-if { (eval echo configure:1779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:5546: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
@@ -1799,21 +5566,339 @@
fi
+#====================================================================================
+# Finished checking, hande options.
+
+# Check whether --enable-justsrc or --disable-justsrc was given.
+if test "${enable_justsrc+set}" = set; then
+ enableval="$enable_justsrc"
+ ac_arg_justsrc="Y"
+else
+ ac_arg_justsrc="N"
+fi
+
+
+# Check whether --enable-gcc-pipe or --disable-gcc-pipe was given.
+if test "${enable_gcc_pipe+set}" = set; then
+ enableval="$enable_gcc_pipe"
+ ac_arg_gcc_pipe="N"
+else
+ ac_arg_gcc_pipe="Y"
+fi
+
+
+# Check whether --enable-gcc-opt or --disable-gcc-opt was given.
+if test "${enable_gcc_opt+set}" = set; then
+ enableval="$enable_gcc_opt"
+ ac_arg_gcc_opt="N"
+else
+ ac_arg_gcc_opt="Y"
+fi
+
+
+# Check whether --enable-force-broken-float or --disable-force-broken-float was given.
+if test "${enable_force_broken_float+set}" = set; then
+ enableval="$enable_force_broken_float"
+ ac_arg_broken_float="Y"
+else
+ ac_arg_broken_float="N"
+fi
+
+
+if test $ac_cv_prog_gcc = yes ; then
+ CFLAGS="$CFLAGS -W -Wstrict-prototypes -Wmissing-prototypes -Wall -pedantic"
+ if test "$ac_arg_gcc_opt" = "N" ; then
+ temp_CFLAGS=`echo $CFLAGS | sed "s/O2/O0/"`
+ CFLAGS=$temp_CFLAGS
+ echo "configure: warning: *** Compiler optimisations switched off. ***" 1>&2
+ fi
+
+ # Disable -Wall and -pedantic for Apple Darwin/Rhapsody.
+ # System headers on these systems are broken.
+ case "$target_os" in
+ darwin* | rhapsody*)
+ temp_CFLAGS=`echo $CFLAGS | sed "s/-Wall -pedantic//"`
+ CFLAGS=$temp_CFLAGS
+ ;;
+ *)
+ ;;
+ esac
+ if test $ac_arg_gcc_pipe != "N" ; then
+ CFLAGS="$CFLAGS -pipe"
+ fi
+ fi
+
+#====================================================================================
+# Large file support can be disabled.
+
+
+ # Check whether --enable-largefile or --disable-largefile was given.
+if test "${enable_largefile+set}" = set; then
+ enableval="$enable_largefile"
+ :
+fi
+
+ if test "$enable_largefile" != no; then
+ # Extract the first word of "${ac_tool_prefix}getconf", so it can be a program name with args.
+set dummy ${ac_tool_prefix}getconf; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:5646: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_GETCONF'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$GETCONF"; then
+ ac_cv_prog_GETCONF="$GETCONF" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_GETCONF="${ac_tool_prefix}getconf"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_prog_GETCONF" && ac_cv_prog_GETCONF="getconf"
+fi
+fi
+GETCONF="$ac_cv_prog_GETCONF"
+if test -n "$GETCONF"; then
+ echo "$ac_t""$GETCONF" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+
+ echo $ac_n "checking for CFLAGS value to request large file support""... $ac_c" 1>&6
+echo "configure:5676: checking for CFLAGS value to request large file support" >&5
+if eval "test \"`echo '$''{'ac_cv_sys_largefile_CFLAGS'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_cv_sys_largefile_CFLAGS=`($GETCONF LFS_CFLAGS) 2>/dev/null` || {
+ ac_cv_sys_largefile_CFLAGS=no
+ case "$host_os" in
+ # IRIX 6.2 and later require cc -n32.
+ irix6.[2-9]* | irix6.1[0-9]* | irix[7-9].* | irix[1-9][0-9]*)
+ if test "$GCC" != yes; then
+ ac_cv_sys_largefile_CFLAGS=-n32
+ fi
+ ac_save_CC="$CC"
+ CC="$CC $ac_cv_sys_largefile_CFLAGS"
+ cat > conftest.$ac_ext <<EOF
+#line 5691 "configure"
+#include "confdefs.h"
+
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:5698: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ :
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_sys_largefile_CFLAGS=no
+fi
+rm -f conftest*
+ CC="$ac_save_CC"
+ esac
+ }
+fi
+
+echo "$ac_t""$ac_cv_sys_largefile_CFLAGS" 1>&6
+ echo $ac_n "checking for LDFLAGS value to request large file support""... $ac_c" 1>&6
+echo "configure:5714: checking for LDFLAGS value to request large file support" >&5
+if eval "test \"`echo '$''{'ac_cv_sys_largefile_LDFLAGS'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_cv_sys_largefile_LDFLAGS=`($GETCONF LFS_LDFLAGS) 2>/dev/null` || {
+ ac_cv_sys_largefile_LDFLAGS=no
+
+ }
+fi
+
+echo "$ac_t""$ac_cv_sys_largefile_LDFLAGS" 1>&6
+ echo $ac_n "checking for LIBS value to request large file support""... $ac_c" 1>&6
+echo "configure:5726: checking for LIBS value to request large file support" >&5
+if eval "test \"`echo '$''{'ac_cv_sys_largefile_LIBS'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_cv_sys_largefile_LIBS=`($GETCONF LFS_LIBS) 2>/dev/null` || {
+ ac_cv_sys_largefile_LIBS=no
+
+ }
+fi
+
+echo "$ac_t""$ac_cv_sys_largefile_LIBS" 1>&6
+
+ 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?*)
+ case "$ac_flag" in
+ no) ;;
+ ?*)
+ case "$CPPFLAGS" in
+ '') CPPFLAGS="$ac_flag" ;;
+ *) CPPFLAGS=$CPPFLAGS' '"$ac_flag" ;;
+ esac ;;
+ esac ;;
+ *)
+ case "$ac_flag" in
+ no) ;;
+ ?*)
+ case "$CFLAGS" in
+ '') CFLAGS="$ac_flag" ;;
+ *) CFLAGS=$CFLAGS' '"$ac_flag" ;;
+ esac ;;
+ esac ;;
+ esac
+ done
+ case "$ac_cv_sys_largefile_LDFLAGS" in
+ no) ;;
+ ?*)
+ case "$LDFLAGS" in
+ '') LDFLAGS="$ac_cv_sys_largefile_LDFLAGS" ;;
+ *) LDFLAGS=$LDFLAGS' '"$ac_cv_sys_largefile_LDFLAGS" ;;
+ esac ;;
+ esac
+ case "$ac_cv_sys_largefile_LIBS" in
+ no) ;;
+ ?*)
+ case "$LIBS" in
+ '') LIBS="$ac_cv_sys_largefile_LIBS" ;;
+ *) LIBS=$LIBS' '"$ac_cv_sys_largefile_LIBS" ;;
+ esac ;;
+ esac
+ echo $ac_n "checking for _FILE_OFFSET_BITS""... $ac_c" 1>&6
+echo "configure:5781: checking for _FILE_OFFSET_BITS" >&5
+if eval "test \"`echo '$''{'ac_cv_sys_file_offset_bits'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_cv_sys_file_offset_bits=no
+
+ for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do
+ case "$ac_flag" in
+ -D_FILE_OFFSET_BITS)
+ ac_cv_sys_file_offset_bits=1 ;;
+ -D_FILE_OFFSET_BITS=*)
+ ac_cv_sys_file_offset_bits=`expr " $ac_flag" : '[^=]*=\(.*\)'` ;;
+ esac
+ done
+
+fi
+
+echo "$ac_t""$ac_cv_sys_file_offset_bits" 1>&6
+ if test "$ac_cv_sys_file_offset_bits" != no; then
+ cat >> confdefs.h <<EOF
+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
+EOF
+
+ fi
+ 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
+ echo $ac_n "checking for _LARGEFILE_SOURCE""... $ac_c" 1>&6
+echo "configure:5811: checking for _LARGEFILE_SOURCE" >&5
+if eval "test \"`echo '$''{'ac_cv_sys_largefile_source'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_cv_sys_largefile_source=no
+ 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
+ for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do
+ case "$ac_flag" in
+ -D_LARGEFILE_SOURCE)
+ ac_cv_sys_largefile_source=1 ;;
+ -D_LARGEFILE_SOURCE=*)
+ ac_cv_sys_largefile_source=`expr " $ac_flag" : '[^=]*=\(.*\)'` ;;
+ esac
+ done
+
+fi
+
+echo "$ac_t""$ac_cv_sys_largefile_source" 1>&6
+ if test "$ac_cv_sys_largefile_source" != no; then
+ cat >> confdefs.h <<EOF
+#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source
+EOF
+
+ fi
+ echo $ac_n "checking for _LARGE_FILES""... $ac_c" 1>&6
+echo "configure:5840: checking for _LARGE_FILES" >&5
+if eval "test \"`echo '$''{'ac_cv_sys_large_files'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_cv_sys_large_files=no
+ 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
+ for ac_flag in $ac_cv_sys_largefile_CFLAGS no; do
+ case "$ac_flag" in
+ -D_LARGE_FILES)
+ ac_cv_sys_large_files=1 ;;
+ -D_LARGE_FILES=*)
+ ac_cv_sys_large_files=`expr " $ac_flag" : '[^=]*=\(.*\)'` ;;
+ esac
+ done
+
+fi
+
+echo "$ac_t""$ac_cv_sys_large_files" 1>&6
+ if test "$ac_cv_sys_large_files" != no; then
+ cat >> confdefs.h <<EOF
+#define _LARGE_FILES $ac_cv_sys_large_files
+EOF
+
+ fi
+ fi
+
+
+if test "$enable_largefile" != yes; then
+ if test x"$ac_cv_sys_largefile_CFLAGS" != xno ; then
+ CFLAGS="$CFLAGS $ac_cv_sys_largefile_CFLAGS"
+ fi
+ if test x"$ac_cv_sys_largefile_LDFLAGS" != xno ; then
+ LDFLAGS="$LDFLAGS $ac_cv_sys_largefile_LDFLAGS"
+ fi
+ if test x"$ac_cv_sys_largefile_LIBS" != xno ; then
+ LIBS="$LIBS $ac_cv_sys_largefile_LIBS"
+ fi
+else
+ echo "configure: warning: *** Disabling large file support." 1>&2
+ fi
+
+#====================================================================================
+# Determine endian-ness of target processor.
+
for ac_hdr in endian.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1807: checking for $ac_hdr" >&5
+echo "configure:5892: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1812 "configure"
+#line 5897 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1817: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5902: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@@ -1840,131 +5925,263 @@
done
-for ac_func in fopen fread fwrite fclose fseek ftell malloc free snprintf vsnprintf
-do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:1847: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+echo $ac_n "checking determining processor byte ordering""... $ac_c" 1>&6
+echo "configure:5930: checking determining processor byte ordering" >&5
+if eval "test \"`echo '$''{'ac_cv_c_byte_order'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
- cat > conftest.$ac_ext <<EOF
-#line 1852 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error. */
-/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
+ # Initialize to unknown
+ac_cv_c_byte_order=unknown
-int main() {
+if test $ac_cv_header_endian_h = yes ; then
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-$ac_func();
-#endif
+ # First try <endian.h> which should set BYTE_ORDER.
+ cat > conftest.$ac_ext <<EOF
+#line 5942 "configure"
+#include "confdefs.h"
+
+ #include <endian.h>
+ #if BYTE_ORDER != LITTLE_ENDIAN
+ not big endian
+ #endif
+
+int main() {
+return 0 ;
; return 0; }
EOF
-if { (eval echo configure:1875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5954: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
+ ac_cv_c_byte_order=little
+
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
-fi
+
+ cat > conftest.$ac_ext <<EOF
+#line 5965 "configure"
+#include "confdefs.h"
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
+ #include <endian.h>
+ #if BYTE_ORDER != BIG_ENDIAN
+ not big endian
+ #endif
+
+int main() {
+return 0 ;
+; return 0; }
EOF
-
+if { (eval echo configure:5977: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_cv_c_byte_order=big
+
else
- echo "$ac_t""no" 1>&6
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
fi
-done
+rm -f conftest*
+ fi
-echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:1901: checking for size_t" >&5
-if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
+if test $ac_cv_c_byte_order = unknown ; then
+
+ cat > conftest.$ac_ext <<EOF
+#line 5992 "configure"
+#include "confdefs.h"
+
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
+ bogus endian macros
+ #endif
+
+int main() {
+return 0 ;
+; return 0; }
+EOF
+if { (eval echo configure:6005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
cat > conftest.$ac_ext <<EOF
-#line 1906 "configure"
+#line 6008 "configure"
#include "confdefs.h"
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
+
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #if BYTE_ORDER != LITTLE_ENDIAN
+ not big endian
+ #endif
+
+int main() {
+return 0 ;
+; return 0; }
EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
+if { (eval echo configure:6021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
- ac_cv_type_size_t=yes
+ ac_cv_c_byte_order=little
+
else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+
+ cat > conftest.$ac_ext <<EOF
+#line 6032 "configure"
+#include "confdefs.h"
+
+ #include <sys/types.h>
+ #include <sys/param.h>
+ #if BYTE_ORDER != LITTLE_ENDIAN
+ not big endian
+ #endif
+
+int main() {
+return 0 ;
+; return 0; }
+EOF
+if { (eval echo configure:6045: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
- ac_cv_type_size_t=no
+ ac_cv_c_byte_order=little
+
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
fi
rm -f conftest*
+
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
fi
-echo "$ac_t""$ac_cv_type_size_t" 1>&6
-if test $ac_cv_type_size_t = no; then
- cat >> confdefs.h <<\EOF
-#define size_t unsigned
-EOF
+rm -f conftest*
+ 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
+ if test "$cross_compiling" = yes; then
+ ac_cv_c_byte_order=unknown
+
+else
+ cat > conftest.$ac_ext <<EOF
+#line 6088 "configure"
+#include "confdefs.h"
+
+ 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);
+ }
+
+EOF
+if { (eval echo configure:6102: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ :
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_c_byte_order=big
fi
+rm -fr conftest*
+fi
-echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:1934: checking for off_t" >&5
-if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+
+ if test "$cross_compiling" = yes; then
+ ac_cv_c_byte_order=unknown
+
else
cat > conftest.$ac_ext <<EOF
-#line 1939 "configure"
+#line 6120 "configure"
#include "confdefs.h"
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
+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);
+ }
EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "(^|[^a-zA-Z_0-9])off_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
- rm -rf conftest*
- ac_cv_type_off_t=yes
+if { (eval echo configure:6132: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ :
else
- rm -rf conftest*
- ac_cv_type_off_t=no
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_c_byte_order=little
fi
-rm -f conftest*
+rm -fr conftest*
+fi
+ fi
+ fi
+
+
fi
-echo "$ac_t""$ac_cv_type_off_t" 1>&6
-if test $ac_cv_type_off_t = no; then
- cat >> confdefs.h <<\EOF
-#define off_t long
+
+echo "$ac_t""$ac_cv_c_byte_order" 1>&6
+
+
+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
+
+ echo "configure: warning: *****************************************************************" 1>&2
+ echo "configure: warning: *** Not able to determine endian-ness of target processor. " 1>&2
+ echo "configure: warning: *** The constants CPU_IS_BIG_ENDIAN and CPU_IS_LITTLE_ENDIAN in " 1>&2
+ echo "configure: warning: *** src/config.h may need to be hand editied. " 1>&2
+ echo "configure: warning: *****************************************************************" 1>&2
+ fi
+
+
+
+cat >> confdefs.h <<EOF
+#define CPU_IS_BIG_ENDIAN ${ac_cv_c_big_endian}
EOF
-fi
+cat >> confdefs.h <<EOF
+#define CPU_IS_LITTLE_ENDIAN ${ac_cv_c_little_endian}
+EOF
+
+#====================================================================================
+# Check types and their sizes.
echo $ac_n "checking size of short""... $ac_c" 1>&6
-echo "configure:1968: checking size of short" >&5
+echo "configure:6185: checking size of short" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_short'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -1972,7 +6189,7 @@
ac_cv_sizeof_short=2
else
cat > conftest.$ac_ext <<EOF
-#line 1976 "configure"
+#line 6193 "configure"
#include "confdefs.h"
#include <stdio.h>
#include <sys/types.h>
@@ -1984,7 +6201,7 @@
exit(0);
}
EOF
-if { (eval echo configure:1988: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_sizeof_short=`cat conftestval`
else
@@ -2004,7 +6221,7 @@
echo $ac_n "checking size of int""... $ac_c" 1>&6
-echo "configure:2008: checking size of int" >&5
+echo "configure:6225: checking size of int" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_int'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2012,7 +6229,7 @@
ac_cv_sizeof_int=4
else
cat > conftest.$ac_ext <<EOF
-#line 2016 "configure"
+#line 6233 "configure"
#include "confdefs.h"
#include <stdio.h>
#include <sys/types.h>
@@ -2024,7 +6241,7 @@
exit(0);
}
EOF
-if { (eval echo configure:2028: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6245: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_sizeof_int=`cat conftestval`
else
@@ -2044,7 +6261,7 @@
echo $ac_n "checking size of long""... $ac_c" 1>&6
-echo "configure:2048: checking size of long" >&5
+echo "configure:6265: checking size of long" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_long'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2052,7 +6269,7 @@
ac_cv_sizeof_long=8
else
cat > conftest.$ac_ext <<EOF
-#line 2056 "configure"
+#line 6273 "configure"
#include "confdefs.h"
#include <stdio.h>
#include <sys/types.h>
@@ -2064,7 +6281,7 @@
exit(0);
}
EOF
-if { (eval echo configure:2068: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6285: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_sizeof_long=`cat conftestval`
else
@@ -2084,7 +6301,7 @@
echo $ac_n "checking size of float""... $ac_c" 1>&6
-echo "configure:2088: checking size of float" >&5
+echo "configure:6305: checking size of float" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_float'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2092,7 +6309,7 @@
ac_cv_sizeof_float=4
else
cat > conftest.$ac_ext <<EOF
-#line 2096 "configure"
+#line 6313 "configure"
#include "confdefs.h"
#include <stdio.h>
#include <sys/types.h>
@@ -2104,7 +6321,7 @@
exit(0);
}
EOF
-if { (eval echo configure:2108: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6325: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_sizeof_float=`cat conftestval`
else
@@ -2124,7 +6341,7 @@
echo $ac_n "checking size of double""... $ac_c" 1>&6
-echo "configure:2128: checking size of double" >&5
+echo "configure:6345: checking size of double" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_double'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2132,7 +6349,7 @@
ac_cv_sizeof_double=4
else
cat > conftest.$ac_ext <<EOF
-#line 2136 "configure"
+#line 6353 "configure"
#include "confdefs.h"
#include <stdio.h>
#include <sys/types.h>
@@ -2144,7 +6361,7 @@
exit(0);
}
EOF
-if { (eval echo configure:2148: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6365: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_sizeof_double=`cat conftestval`
else
@@ -2164,7 +6381,7 @@
echo $ac_n "checking size of void*""... $ac_c" 1>&6
-echo "configure:2168: checking size of void*" >&5
+echo "configure:6385: checking size of void*" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_voidp'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@@ -2172,7 +6389,7 @@
ac_cv_sizeof_voidp=8
else
cat > conftest.$ac_ext <<EOF
-#line 2176 "configure"
+#line 6393 "configure"
#include "confdefs.h"
#include <stdio.h>
#include <sys/types.h>
@@ -2184,7 +6401,7 @@
exit(0);
}
EOF
-if { (eval echo configure:2188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_sizeof_voidp=`cat conftestval`
else
@@ -2203,61 +6420,337 @@
EOF
+echo $ac_n "checking size of off_t""... $ac_c" 1>&6
+echo "configure:6425: checking size of off_t" >&5
+if eval "test \"`echo '$''{'ac_cv_sizeof_off_t'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_cv_sizeof_off_t=8
+else
+ cat > conftest.$ac_ext <<EOF
+#line 6433 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+#include <sys/types.h>
+main()
+{
+ FILE *f=fopen("conftestval", "w");
+ if (!f) exit(1);
+ fprintf(f, "%d\n", sizeof(off_t));
+ exit(0);
+}
+EOF
+if { (eval echo configure:6445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ ac_cv_sizeof_off_t=`cat conftestval`
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_sizeof_off_t=0
+fi
+rm -fr conftest*
+fi
-# Check whether --enable-justsrc or --disable-justsrc was given.
-if test "${enable_justsrc+set}" = set; then
- enableval="$enable_justsrc"
- ac_arg_justsrc="Y"
+fi
+echo "$ac_t""$ac_cv_sizeof_off_t" 1>&6
+cat >> confdefs.h <<EOF
+#define SIZEOF_OFF_T $ac_cv_sizeof_off_t
+EOF
+
+
+
+#====================================================================================
+# Check for functions.
+
+for ac_func in malloc free
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:6471: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
else
- ac_arg_justsrc="N"
+ cat > conftest.$ac_ext <<EOF
+#line 6476 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:6499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=no"
fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
-# Check whether --enable-gcc-pipe or --disable-gcc-pipe was given.
-if test "${enable_gcc_pipe+set}" = set; then
- enableval="$enable_gcc_pipe"
- ac_arg_gcc_pipe="N"
+for ac_func in open read write lseek fstat
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:6526: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
else
- ac_arg_gcc_pipe="Y"
+ cat > conftest.$ac_ext <<EOF
+#line 6531 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:6554: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=no"
fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
-# Check whether --enable-gcc-opt or --disable-gcc-opt was given.
-if test "${enable_gcc_opt+set}" = set; then
- enableval="$enable_gcc_opt"
- ac_arg_gcc_opt="N"
+for ac_func in snprintf vsnprintf
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:6581: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
else
- ac_arg_gcc_opt="Y"
+ cat > conftest.$ac_ext <<EOF
+#line 6586 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:6609: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=no"
fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
-# Check whether --enable-force-broken-float or --disable-force-broken-float was given.
-if test "${enable_force_broken_float+set}" = set; then
- enableval="$enable_force_broken_float"
- ac_arg_broken_float="Y"
+
+echo $ac_n "checking for lrint""... $ac_c" 1>&6
+echo "configure:6635: checking for lrint" >&5
+if eval "test \"`echo '$''{'ac_cv_c99_lrint'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
else
- ac_arg_broken_float="N"
+
+lrint_save_CFLAGS=$CFLAGS
+CFLAGS="-O2"
+cat > conftest.$ac_ext <<EOF
+#line 6643 "configure"
+#include "confdefs.h"
+
+#define _ISOC9X_SOURCE 1
+#define _ISOC99_SOURCE 1
+#define __USE_ISOC99 1
+#define __USE_ISOC9X 1
+
+#include <math.h>
+
+int main() {
+if (!lrint(3.14159)) lrint(2.7183);
+; return 0; }
+EOF
+if { (eval echo configure:6657: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_cv_c99_lrint=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_c99_lrint=no
fi
+rm -f conftest*
+CFLAGS=$lrint_save_CFLAGS
-if test $ac_cv_prog_gcc = yes ; then
- CFLAGS="$CFLAGS -g -O2 -Wstrict-prototypes"
- if test "$ac_arg_gcc_opt" = "N" ; then
- CFLAGS="$CFLAGS -g -O0 -Wstrict-prototypes"
- echo "configure: warning: *** Compiler optimisations switched off. ***" 1>&2
- fi
- case "$target_os" in
- darwin* | rhapsody*)
- ;;
- *)
- CFLAGS="$CFLAGS -Wall -pedantic"
- ;;
- esac
- if test $ac_arg_gcc_pipe != "N" ; then
- CFLAGS="$CFLAGS -pipe"
- fi
+
+fi
+
+echo "$ac_t""$ac_cv_c99_lrint" 1>&6
+
+if test "$ac_cv_c99_lrint" = yes; then
+ cat >> confdefs.h <<\EOF
+#define HAVE_LRINT 1
+EOF
+
+fi
+
+echo $ac_n "checking for lrintf""... $ac_c" 1>&6
+echo "configure:6683: checking for lrintf" >&5
+if eval "test \"`echo '$''{'ac_cv_c99_lrintf'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+lrintf_save_CFLAGS=$CFLAGS
+CFLAGS="-O2"
+cat > conftest.$ac_ext <<EOF
+#line 6691 "configure"
+#include "confdefs.h"
+
+#define _ISOC9X_SOURCE 1
+#define _ISOC99_SOURCE 1
+#define __USE_ISOC99 1
+#define __USE_ISOC9X 1
+
+#include <math.h>
+
+int main() {
+if (!lrintf(3.14159)) lrintf(2.7183);
+; return 0; }
+EOF
+if { (eval echo configure:6705: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_cv_c99_lrintf=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_c99_lrintf=no
+fi
+rm -f conftest*
+
+CFLAGS=$lrintf_save_CFLAGS
+
+
+fi
+
+echo "$ac_t""$ac_cv_c99_lrintf" 1>&6
+
+if test "$ac_cv_c99_lrintf" = yes; then
+ cat >> confdefs.h <<\EOF
+#define HAVE_LRINTF 1
+EOF
+
+fi
+
+
+if test $ac_cv_c99_lrint = no || test $ac_cv_c99_lrintf = no ; then
+ echo "configure: warning: *** Missing C99 standard functions lrint() and lrintf()." 1>&2
+ echo "configure: warning: *** This may cause benign compiler warnings on some systems (ie Solaris)." 1>&2
fi
-
+
+#====================================================================================
+# Find known target OS.
+
+OS_SPECIFIC_INCLUDES=""
+
+case "$target_os" in
+ darwin* | rhapsody*)
+ OS_SPECIFIC_INCLUDES="-fpascal-strings -I/Developer/Headers/FlatCarbon"
+ OS_SPECIFIC_LINKS="-framework CoreAudio"
+ ;;
+ *)
+ OS_SPECIFIC_INCLUDES=""
+ OS_SPECIFIC_LINKS=""
+ ;;
+ esac
+
+#====================================================================================
+# Test for sanity when cross-compiling.
+
if test $cross_compiling = yes ; then
echo "configure: warning: ******************************************************************" 1>&2
echo "configure: warning: *** We are cross-compiling, so have to assume sizeof (short) == 2 " 1>&2
@@ -2266,12 +6759,6 @@
echo "configure: warning: ******************************************************************" 1>&2
fi
-if test $ac_cv_sizeof_int != 4 ; then
- echo "configure: warning: ******************************************************************" 1>&2
- echo "configure: warning: *** sizeof (int) != 4 " 1>&2
- echo "configure: warning: ******************************************************************" 1>&2
- fi
-
if test $ac_cv_sizeof_short != 2 ; then
echo "configure: warning: ******************************************************************" 1>&2
echo "configure: warning: *** sizeof (short) != 2. " 1>&2
@@ -2278,6 +6765,12 @@
echo "configure: warning: ******************************************************************" 1>&2
fi
+if test $ac_cv_sizeof_int != 4 ; then
+ echo "configure: warning: ******************************************************************" 1>&2
+ echo "configure: warning: *** sizeof (int) != 4 " 1>&2
+ echo "configure: warning: ******************************************************************" 1>&2
+ fi
+
if test $ac_cv_sizeof_float != 4 ; then
echo "configure: warning: ******************************************************************" 1>&2
echo "configure: warning: *** sizeof (float) != 4. " 1>&2
@@ -2290,38 +6783,10 @@
echo "configure: warning: ******************************************************************" 1>&2
fi
-case "$target_cpu" in
- alpha* | i?86 )
- cat >> confdefs.h <<\EOF
-#define GUESS_LITTLE_ENDIAN 1
-EOF
+#====================================================================================
+# Now use the information from the checking stage.
- cat >> confdefs.h <<\EOF
-#define GUESS_BIG_ENDIAN 0
-EOF
-
- ;;
-
- hppa* | m68* | mips* | powerpc* | hppa* | sparc*)
- cat >> confdefs.h <<\EOF
-#define GUESS_LITTLE_ENDIAN 0
-EOF
-
- cat >> confdefs.h <<\EOF
-#define GUESS_BIG_ENDIAN 1
-EOF
-
- ;;
-
- *)
- echo "configure: warning: *****************************************************************" 1>&2
- echo "configure: warning: *** Not able to determine endian-ness of processor. " 1>&2
- echo "configure: warning: *** You will need to edit src/config.h before compiling. " 1>&2
- echo "configure: warning: *****************************************************************" 1>&2
- ;;
-esac
-
-subdirs="src/GSM610 src/G72x src"
+subdirs="src Win32 MacOS" # Do not add src/GSM610 or src/G72x here.
if test $ac_arg_justsrc = "N" ; then
subdirs="$subdirs examples doc tests"
fi
@@ -2338,10 +6803,23 @@
EOF
fi
-
+cat >> confdefs.h <<\EOF
+#define OS_IS_WIN32 0
+EOF
+if test x"$CFLAGS" = x ; then
+ echo "Error in configure script. CFLAGS has been screwed up."
+ exit
+ fi
+
+
+
+
+
+
+
trap '' 1 2 15
cat > confcache <<\EOF
# This file is a shell script that caches the results of configure
@@ -2445,7 +6923,7 @@
trap 'rm -fr `echo "Makefile src/Makefile src/GSM610/Makefile src/G72x/Makefile \
examples/Makefile tests/Makefile doc/Makefile Win32/Makefile \
- MacOS/Makefile libsndfile.spec src/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+ MacOS/Makefile libsndfile.spec sndfile.pc src/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
EOF
cat >> $CONFIG_STATUS <<EOF
@@ -2503,13 +6981,22 @@
s%@AUTOHEADER@%$AUTOHEADER%g
s%@MAKEINFO@%$MAKEINFO%g
s%@SET_MAKE@%$SET_MAKE%g
+s%@autogen@%$autogen%g
s%@CC@%$CC%g
s%@LN_S@%$LN_S%g
+s%@OBJEXT@%$OBJEXT%g
+s%@EXEEXT@%$EXEEXT%g
+s%@ECHO@%$ECHO%g
s%@RANLIB@%$RANLIB%g
-s%@LIBTOOL@%$LIBTOOL%g
+s%@STRIP@%$STRIP%g
s%@CPP@%$CPP%g
+s%@LIBTOOL@%$LIBTOOL%g
+s%@GETCONF@%$GETCONF%g
s%@subdirs@%$subdirs%g
+s%@ac_cv_sys_largefile_CFLAGS@%$ac_cv_sys_largefile_CFLAGS%g
s%@SHARED_VERSION_INFO@%$SHARED_VERSION_INFO%g
+s%@OS_SPECIFIC_INCLUDES@%$OS_SPECIFIC_INCLUDES%g
+s%@OS_SPECIFIC_LINKS@%$OS_SPECIFIC_LINKS%g
CEOF
EOF
@@ -2553,7 +7040,7 @@
CONFIG_FILES=\${CONFIG_FILES-"Makefile src/Makefile src/GSM610/Makefile src/G72x/Makefile \
examples/Makefile tests/Makefile doc/Makefile Win32/Makefile \
- MacOS/Makefile libsndfile.spec"}
+ MacOS/Makefile libsndfile.spec sndfile.pc"}
EOF
cat >> $CONFIG_STATUS <<\EOF
for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
@@ -2732,4 +7219,30 @@
chmod +x $CONFIG_STATUS
rm -fr confdefs* $ac_clean_files
test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
+
+#====================================================================================
+
+echo
+echo " -=-=-=-= Configuration Complete. =-=-=-"
+
+if test $prefix != "/usr" ; then
+ my_pkg_config_dir="$prefix/lib/pkgconfig"
+ echo
+ echo "The pkg-config file is being installed in '$my_pkg_config_dir'."
+ echo "This means that you should set the PKG_CONFIG_PATH variable ie:"
+ echo
+ echo " export PKG_CONFIG_PATH=$my_pkg_config_dir"
+ echo
+ echo "if you intend to use pkg-config to retrieve the recommended CFLAGS and"
+ echo "library locations to compile programs which link against libsndfile."
+ echo
+ echo "Using pkg-config is highly recommended as libsndfile version 1 has large"
+ echo "file support (ie files > 2Gig) and software linking to libsndfile will "
+ echo "require special values for CFLAGS to compile correctly."
+ echo
+ echo "For details see : doc/pkgconfig.html"
+ echo
+ fi
+
--- a/common/libsndfile/configure.in
+++ b/common/libsndfile/configure.in
@@ -1,23 +1,43 @@
-# Configure `libsndfile'.
-# Copyright (C) 1999-2001 Erik de Castro Lopo ([email protected]).
+# Copyright (C) 1999-2002 Erik de Castro Lopo (erikd AT zip DOT com DOT au).
-dnl Require autoconf version >= 2.12
+dnl Require autoconf version >= 2.13)
+AC_PREREQ(2.13)
-AC_PREREQ(2.12)
AC_INIT(src/sndfile.c)
AC_CANONICAL_SYSTEM
+AM_INIT_AUTOMAKE(libsndfile,1.0.0rc2)
+AM_CONFIG_HEADER(src/config.h)
-AM_INIT_AUTOMAKE(libsndfile,0.0.27)
+##---------------------------------------------------------------------
+## Allow configure to save its options and optionally rerun itself with
+## the same options.
+#
+#AC_ARG_WITH(last-config, [ --with-last-config re-run configure script with last config options ],
+# ac_with_last_config=yes, ac_with_last_config=no)
+#
+#if test $ac_with_last_config = yes ; then
+# if test -f "$srcdir/config.last" ; then
+# mv $srcdir/config.last $srcdir/config.last.bak
+# sed "s/--no-create --no-recursion//" $srcdir/config.last.bak >$srcdir/config.last
+# rm $srcdir/config.last.bak
+# echo "re-running configure script with last config : `cat $srcdir/config.last`"
+# ./configure `cat $srcdir/config.last`
+# exit
+# else
+# AC_MSG_ERROR([[*** No previous config options found.]])
+# fi
+#else
+# # Save current config options
+# echo "$@" >config.last
+# fi
-dnl This is the version info according to the libtool versioning system.
-dnl It does *not* correspond to the release number.
+#---------------------------------------------------------------------
+# This is the version info according to the libtool versioning system.
-SHARED_VERSION_INFO="0:27:0"
+SHARED_VERSION_INFO="1:0:0"
-dnl Process this file with autoconf to produce a configure script.
+AC_CHECK_PROG(autogen, autogen, yes, no)
-AM_CONFIG_HEADER(src/config.h)
-
AC_PROG_CC
AC_PROG_INSTALL
@@ -27,20 +47,9 @@
AC_HEADER_STDC
-AC_CHECK_HEADERS(endian.h)
+#====================================================================================
+# Finished checking, hande options.
-AC_CHECK_FUNCS(fopen fread fwrite fclose fseek ftell malloc free snprintf vsnprintf)
-
-AC_TYPE_SIZE_T
-AC_TYPE_OFF_T
-
-AC_CHECK_SIZEOF(short,2)
-AC_CHECK_SIZEOF(int,4)
-AC_CHECK_SIZEOF(long,8)
-AC_CHECK_SIZEOF(float,4)
-AC_CHECK_SIZEOF(double,4)
-AC_CHECK_SIZEOF(void*,8)
-
AC_ARG_ENABLE(justsrc, [ --enable-justsrc only compile library sources ],
ac_arg_justsrc="Y", ac_arg_justsrc="N")
@@ -55,18 +64,21 @@
ac_arg_broken_float="Y", ac_arg_broken_float="N")
if test $ac_cv_prog_gcc = yes ; then
- CFLAGS="$CFLAGS -g -O2 -Wstrict-prototypes"
+ CFLAGS="$CFLAGS -W -Wstrict-prototypes -Wmissing-prototypes -Wall -pedantic"
if test "$ac_arg_gcc_opt" = "N" ; then
- CFLAGS="$CFLAGS -g -O0 -Wstrict-prototypes"
+ temp_CFLAGS=`echo $CFLAGS | sed "s/O2/O0/"`
+ CFLAGS=$temp_CFLAGS
AC_MSG_WARN([[*** Compiler optimisations switched off. ***]])
fi
- dnl Disable -Wall and -pedantic for Apple Darwin/Rhapsody.
- dnl System headers on these systems are broken.
+
+ # Disable -Wall and -pedantic for Apple Darwin/Rhapsody.
+ # System headers on these systems are broken.
case "$target_os" in
darwin* | rhapsody*)
+ temp_CFLAGS=`echo $CFLAGS | sed "s/-Wall -pedantic//"`
+ CFLAGS=$temp_CFLAGS
;;
*)
- CFLAGS="$CFLAGS -Wall -pedantic"
;;
esac
if test $ac_arg_gcc_pipe != "N" ; then
@@ -74,6 +86,82 @@
fi
fi
+#====================================================================================
+# Large file support can be disabled.
+
+AC_SYS_EXTRA_LARGEFILE
+
+if test "$enable_largefile" != yes; then
+ if test x"$ac_cv_sys_largefile_CFLAGS" != xno ; then
+ CFLAGS="$CFLAGS $ac_cv_sys_largefile_CFLAGS"
+ fi
+ if test x"$ac_cv_sys_largefile_LDFLAGS" != xno ; then
+ LDFLAGS="$LDFLAGS $ac_cv_sys_largefile_LDFLAGS"
+ fi
+ if test x"$ac_cv_sys_largefile_LIBS" != xno ; then
+ LIBS="$LIBS $ac_cv_sys_largefile_LIBS"
+ fi
+else
+ AC_MSG_WARN([[*** Disabling large file support.]])
+ fi
+
+#====================================================================================
+# Determine endian-ness of target processor.
+
+AC_CHECK_HEADERS(endian.h)
+
+AC_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.])
+
+#====================================================================================
+# Check types and their sizes.
+
+AC_CHECK_SIZEOF(short,2)
+AC_CHECK_SIZEOF(int,4)
+AC_CHECK_SIZEOF(long,8)
+AC_CHECK_SIZEOF(float,4)
+AC_CHECK_SIZEOF(double,4)
+AC_CHECK_SIZEOF(void*,8)
+AC_CHECK_SIZEOF(off_t,8)
+
+#====================================================================================
+# Check for functions.
+
+AC_CHECK_FUNCS(malloc free)
+AC_CHECK_FUNCS(open read write lseek fstat)
+AC_CHECK_FUNCS(snprintf vsnprintf)
+
+AC_C99_FUNC_LRINT
+AC_C99_FUNC_LRINTF
+
+if test $ac_cv_c99_lrint = no || test $ac_cv_c99_lrintf = no ; then
+ AC_MSG_WARN([[*** Missing C99 standard functions lrint() and lrintf().]])
+ AC_MSG_WARN([[*** This may cause benign compiler warnings on some systems (ie Solaris).]])
+ fi
+
+#====================================================================================
+# Find known target OS.
+
+OS_SPECIFIC_INCLUDES=""
+
+case "$target_os" in
+ darwin* | rhapsody*)
+ OS_SPECIFIC_INCLUDES="-fpascal-strings -I/Developer/Headers/FlatCarbon"
+ OS_SPECIFIC_LINKS="-framework CoreAudio"
+ ;;
+ *)
+ OS_SPECIFIC_INCLUDES=""
+ OS_SPECIFIC_LINKS=""
+ ;;
+ esac
+
+#====================================================================================
+# Test for sanity when cross-compiling.
+
if test $cross_compiling = yes ; then
AC_MSG_WARN([[******************************************************************]])
AC_MSG_WARN([[*** We are cross-compiling, so have to assume sizeof (short) == 2 ]])
@@ -82,12 +170,6 @@
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_short != 2 ; then
AC_MSG_WARN([[******************************************************************]])
AC_MSG_WARN([[*** sizeof (short) != 2. ]])
@@ -94,6 +176,12 @@
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. ]])
@@ -106,40 +194,62 @@
AC_MSG_WARN([[******************************************************************]])
fi
-case "$target_cpu" in
- alpha* | i?86 )
- AC_DEFINE(GUESS_LITTLE_ENDIAN,1)
- AC_DEFINE(GUESS_BIG_ENDIAN,0)
- ;;
-
- hppa* | m68* | mips* | powerpc* | hppa* | sparc*)
- AC_DEFINE(GUESS_LITTLE_ENDIAN,0)
- AC_DEFINE(GUESS_BIG_ENDIAN,1)
- ;;
+#====================================================================================
+# Now use the information from the checking stage.
- *)
- AC_MSG_WARN([[*****************************************************************]])
- AC_MSG_WARN([[*** Not able to determine endian-ness of processor. ]])
- AC_MSG_WARN([[*** You will need to edit src/config.h before compiling. ]])
- AC_MSG_WARN([[*****************************************************************]])
- ;;
-esac
-
-subdirs="src/GSM610 src/G72x src"
+subdirs="src Win32 MacOS" # Do not add src/GSM610 or src/G72x here.
if test $ac_arg_justsrc = "N" ; then
subdirs="$subdirs examples doc tests"
fi
if test $ac_arg_broken_float = "Y" ; then
- AC_DEFINE(FORCE_BROKEN_FLOAT,1)
+ AC_DEFINE([FORCE_BROKEN_FLOAT],1,
+ [Set to 1 to force the use of code for processors with broken floats])
AC_MSG_WARN([[*** Testing code for processors that can't read/write IEEE floats.]])
else
- AC_DEFINE(FORCE_BROKEN_FLOAT,0)
+ AC_DEFINE([FORCE_BROKEN_FLOAT],0,
+ [Set to 1 to force the use of code for processors with broken floats])
fi
-
+
+AC_DEFINE([OS_IS_WIN32],0, [Set to 1 if compiling for Win32])
+
+if test x"$CFLAGS" = x ; then
+ echo "Error in configure script. CFLAGS has been screwed up."
+ exit
+ fi
+
AC_SUBST(subdirs)
+AC_SUBST(ac_cv_sys_largefile_CFLAGS)
AC_SUBST(SHARED_VERSION_INFO)
+AC_SUBST(OS_SPECIFIC_INCLUDES)
+AC_SUBST(OS_SPECIFIC_LINKS)
AC_OUTPUT(Makefile src/Makefile src/GSM610/Makefile src/G72x/Makefile \
examples/Makefile tests/Makefile doc/Makefile Win32/Makefile \
- MacOS/Makefile libsndfile.spec)
+ MacOS/Makefile libsndfile.spec sndfile.pc)
+
+#====================================================================================
+
+echo
+echo " -=-=-=-= Configuration Complete. =-=-=-"
+
+if test $prefix != "/usr" ; then
+ my_pkg_config_dir="$prefix/lib/pkgconfig"
+ echo
+ echo "The pkg-config file is being installed in '$my_pkg_config_dir'."
+ echo "This means that you should set the PKG_CONFIG_PATH variable ie:"
+ echo
+ echo " export PKG_CONFIG_PATH=$my_pkg_config_dir"
+ echo
+ echo "if you intend to use pkg-config to retrieve the recommended CFLAGS and"
+ echo "library locations to compile programs which link against libsndfile."
+ echo
+ echo "Using pkg-config is highly recommended as libsndfile version 1 has large"
+ echo "file support (ie files > 2Gig) and software linking to libsndfile will "
+ echo "require special values for CFLAGS to compile correctly."
+ echo
+ echo "For details see : doc/pkgconfig.html"
+ echo
+ fi
+
+
--- a/common/libsndfile/libsndfile.spec
+++ /dev/null
@@ -1,60 +1,0 @@
-
-%define name libsndfile
-%define version 0.0.27
-%define release 1
-%define prefix /usr
-
-Summary: A library to handle various audio file formats.
-Name: %{name}
-Version: %{version}
-Release: %{release}
-Prefix: %{prefix}
-Copyright: LGPL
-Group: Libraries/Sound
-Source: http://www.zip.com.au/~erikd/libsndfile/libsndfile-%{version}.tar.gz
-URL: http://www.zip.com.au/~erikd/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 --prefix=%{prefix}
-make
-
-%install
-if [ -d $RPM_BUILD_ROOT ]; then rm -rf $RPM_BUILD_ROOT; fi
-mkdir -p $RPM_BUILD_ROOT
-make prefix=$RPM_BUILD_ROOT%{prefix} 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
-%prefix/lib/libsndfile.so.*
-
-%files devel
-%defattr(-,root,root)
-%{prefix}/lib/libsndfile.a
-%{prefix}/lib/libsndfile.la
-%{prefix}/lib/libsndfile.so
-%{prefix}/include/sndfile.h
-
-%changelog
-* Thu Jul 6 2000 Josh Green <[email protected]>
-- Created libsndfile.spec.in
--- /dev/null
+++ b/common/libsndfile/libsndfile_version_convert.py
@@ -1,0 +1,245 @@
+#!/usr/bin/python
+
+import os, re, string, sys
+
+#----------------------------------------------------------------------------------------------
+# Version 0:
+# SNDFILE* sf_open_read (const char *path, SF_INFO *sfinfo) ;
+# SNDFILE* sf_open_write (const char *path, SF_INFO *sfinfo) ;
+# Version 1:
+# SNDFILE* sf_open (const char *path, int mode, SF_INFO *sfinfo) ;
+
+
+def modify_sf_open (program_text):
+ sf_open_re = re.compile ("(sf_open_([readwit]{4,5})\s*\(([^),]+),([^),]+)\))", re.MULTILINE)
+
+ while 1:
+ found = sf_open_re.search (program_text)
+ if not found:
+ break
+
+ found = found.groups ()
+
+ if len (found) != 4:
+ print "***** Conversion may not be complete. *****"
+ break
+
+ print " ", found [0]
+
+ found = list (found)
+
+ if found [1] == "read":
+ found [1] = "SFM_READ"
+ elif found [1] == "write":
+ found [1] = "SFM_WRITE"
+ else:
+ found [1] = "SFM_" + found [1]
+
+ replacement = "sf_open (%s, %s,%s) " % (found [2], found [1], found [3])
+
+ print " =>", replacement
+
+ program_text = string.replace (program_text, found [0], replacement)
+
+ return program_text
+
+#----------------------------------------------------------------------------------------------
+# Version 0:
+# size_t sf_write_double (SNDFILE *sndfile, double *ptr, size_t items, int normalize) ;
+# size_t sf_writef_double (SNDFILE *sndfile, double *ptr, size_t frames, int normalize) ;
+#
+# Version 1:
+# sf_count_t sf_read_double (SNDFILE *sndfile, double *ptr, sf_count_t items) ;
+# sf_count_t sf_readf_double (SNDFILE *sndfile, double *ptr, sf_count_t frames) ;
+#
+# Notice that in version 1 there is no normailize parameter. Remove it.
+
+def modify_sf_double (program_text):
+ sf_double_re = re.compile ("(sf_([readwitf]{4,5})_double\s*\(([^),]+),([^),]+),([^),]+),([^),]+)\))", re.MULTILINE)
+
+ while 1:
+ found = sf_double_re.search (program_text)
+ if not found:
+ break
+
+ found = found.groups ()
+ if len (found) != 6:
+ print "***** Conversion may not be complete. *****"
+ break
+
+ print " ", found [0]
+ replacement = "sf_%s_double (%s,%s,%s " % found [1:-1] + "/* FIXME_NORM_MODE " + found [-1] + " */)"
+
+ print " =>", replacement
+
+ program_text = string.replace (program_text, found [0], replacement, 1)
+
+ return program_text
+
+#----------------------------------------------------------------------------------------------
+
+
+def modify_pcmbitwidth (program_text):
+ sf_pcmbitwidth_re = re.compile ("(([_a-zA-Z0-9]+\s*[\.->]{1,2}\s*)(pcmbitwidth)\s+=\s+([_a-zA-Z0-9]+)\s+;)", re.MULTILINE)
+
+ while 1:
+ found = sf_pcmbitwidth_re.search (program_text)
+
+ if not found:
+ break
+
+ found = found.groups ()
+
+ print " ", found [0]
+
+ if len (found) != 4:
+ print "***** Conversion may not be complete. *****"
+ break
+
+ replacement = "/* %sold_field_PCM_BIT_WIDTH = %s */" % (found [1], found [3])
+ print " =>", replacement
+
+ program_text = string.replace (program_text, found [0], replacement, 1)
+
+ return program_text
+
+
+#----------------------------------------------------------------------------------------------
+# SF_FORMAT_PCM has been dropped and one of these should be used instead:
+# SF_FORMAT_PCM_S8
+# SF_FORMAT_PCM_U8
+# SF_FORMAT_PCM_16
+# SF_FORMAT_PCM_24
+# SF_FORMAT_PCM_32
+
+def modify_sf_format_pcm (program_text):
+ sf_format_pcm_re = re.compile ("(SF_FORMAT_PCM([^_]))")
+
+ while 1:
+ found = sf_format_pcm_re.search (program_text)
+
+ if not found:
+ break
+
+ found = found.groups ()
+
+ print " ", found [0]
+
+ if len (found) != 2:
+ print "***** Conversion may not be complete. *****"
+ break
+
+ replacement = "SF_FORMAT_PCM_FIXME" + found [1]
+ print " =>", replacement
+
+ program_text = string.replace (program_text, found [0], replacement, 1)
+
+ return program_text
+
+
+#----------------------------------------------------------------------------------------------
+# The sf_command interface has also changed.
+
+
+def modify_sf_command (program_text):
+ sf_command_re = re.compile ('(sf_command\s*\(([^),]+),([ a-z\"]+),([^),]+),([^)(,]+)\))', re.MULTILINE)
+
+ while 1:
+ found = sf_command_re.search (program_text)
+
+ if not found:
+ break
+
+ found = found.groups ()
+
+ print " ", found [0]
+ print " ", found
+
+ if len (found) != 5:
+ print "***** Conversion may not be complete. *****"
+ break
+
+ found = list (found)
+ found [2] = string.strip (found [2])
+ found [3] = string.strip (found [3])
+
+ if found [3] == '"on"':
+ found [3] = " NULL"
+ found [4] = " SF_TRUE"
+ elif found [3] == '"off"':
+ found [3] = " NULL"
+ found [4] = " SF_FALSE"
+
+ if found [2] == '"lib version"':
+ replacement = "sf_command (%s, SFC_GET_LIB_VERSION,%s,%s)" % (found [1], found [3], found [4])
+ elif found [2] == '"norm float"':
+ replacement = "sf_command (%s, SFC_SET_NORM_FLOAT,%s,%s)" % (found [1], found [3], found [4])
+ elif found [2] == '"norm double"':
+ replacement = "sf_command (%s, SFC_SET_NORM_FLOAT,%s,%s)" % (found [1], found [3], found [4])
+ elif found [2] == '"read text"':
+ replacement = "/* sf_invalid_command (%s,%s,%s,%s) */" % (found [1], found [2], found [3], found [4])
+ elif found [2] == '"write text"':
+ replacement = "/* sf_invalid_command (%s,%s,%s,%s) */" % (found [1], found [2], found [3], found [4])
+ else:
+ replacement = "xxxxxxxxxxxxxxxxxxx"
+
+ print " =>", replacement
+
+ program_text = string.replace (program_text, found [0], replacement, 1)
+
+ return program_text
+
+
+#---------------------------------------------------------------------------------
+# Crunch the file and do the conversions.
+
+def convert_functions (filename, bak_filename):
+ program_text = open (filename, "r").read ()
+ os.rename (filename, bak_filename)
+
+# program_text = modify_sf_open (program_text)
+# program_text = modify_sf_double (program_text)
+# program_text = modify_pcmbitwidth (program_text)
+# program_text = modify_sf_format_pcm (program_text)
+ program_text = modify_sf_command (program_text)
+
+ open (filename, "w").write (program_text)
+ return
+
+#============================================================================
+# Main program starts here.
+
+
+
+
+print """
+ This conversion program *SHOULD* make source code which worked when
+ compiled against libsndfile-0.0.X compile and link against
+ libsndfile-1.0.X and then work as before. Unfortunately I cannot
+ make any guarantees. If it breaks, you get to keep both pieces.
+
+ Original files will be renamed from <filename> to <filename>.orig<pid>
+ where <pid> will be the process id of this conversion program when it
+ does the conversion.
+ """
+
+if len (sys.argv) < 2:
+ progname = re.sub (".*/", "", sys.argv [0])
+ print " Usage : \n\t%s <file>\n" % progname
+ print " Multiple files allowed, ie :\n\t%s *.c\n" % progname
+ sys.exit (0)
+
+
+for filename in sys.argv [1:]:
+ if os.access (filename, os.R_OK | os.W_OK) != 1:
+ print "Error: not able to access '%s'\n" % filename
+ sys.exit (1) ;
+ print "%s :" % filename
+ convert_functions (filename, "%s.orig%d" % (filename, os.getpid ()))
--- a/common/libsndfile/ltconfig
+++ b/common/libsndfile/ltconfig
@@ -1922,6 +1922,7 @@
library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
soname_spec='${libname}${release}.so$major'
shlibpath_var=LD_LIBRARY_PATH
+ deplibs_check_method=pass_all
;;
hpux9* | hpux10* | hpux11*)
--- a/common/libsndfile/ltmain.sh
+++ b/common/libsndfile/ltmain.sh
@@ -1,7 +1,8 @@
# ltmain.sh - Provide generalized library-building support services.
-# NOTE: Changing this file will not affect anything until you rerun ltconfig.
+# NOTE: Changing this file will not affect anything until you rerun configure.
#
-# Copyright (C) 1996-1999 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
# Originally by Gordon Matzigkeit <[email protected]>, 1996
#
# This program is free software; you can redistribute it and/or modify
@@ -54,8 +55,8 @@
# Constants.
PROGRAM=ltmain.sh
PACKAGE=libtool
-VERSION=1.3.5
-TIMESTAMP=" (1.385.2.206 2000/05/27 11:12:27)"
+VERSION=1.4.2
+TIMESTAMP=" (1.922.2.53 2001/09/11 03:18:52)"
default_mode=
help="Try \`$progname --help' for more information."
@@ -83,11 +84,8 @@
save_LANG="$LANG"; LANG=C; export LANG
fi
-if test "$LTCONFIG_VERSION" != "$VERSION"; then
- echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2
- echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
- exit 1
-fi
+# Make sure IFS has a sensible default
+: ${IFS=" "}
if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
echo "$modename: not configured to build any kind of library" 1>&2
@@ -113,7 +111,7 @@
arg="$1"
shift
- case "$arg" in
+ case $arg in
-*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
*) optarg= ;;
esac
@@ -120,9 +118,9 @@
# If the previous option needs an argument, assign it.
if test -n "$prev"; then
- case "$prev" in
+ case $prev in
execute_dlfiles)
- eval "$prev=\"\$$prev \$arg\""
+ execute_dlfiles="$execute_dlfiles $arg"
;;
*)
eval "$prev=\$arg"
@@ -135,7 +133,7 @@
fi
# Have we seen a non-optional argument yet?
- case "$arg" in
+ case $arg in
--help)
show_help=yes
;;
@@ -146,7 +144,7 @@
;;
--config)
- sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0
+ sed -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0
exit 0
;;
@@ -207,16 +205,21 @@
exit 1
fi
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end. This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
if test -z "$show_help"; then
# Infer the operation mode.
if test -z "$mode"; then
- case "$nonopt" in
+ case $nonopt in
*cc | *++ | gcc* | *-gcc*)
mode=link
for arg
do
- case "$arg" in
+ case $arg in
-c)
mode=compile
break
@@ -261,12 +264,13 @@
help="Try \`$modename --help --mode=$mode' for more information."
# These modes are in order of execution frequency so that they run quickly.
- case "$mode" in
+ case $mode in
# libtool compile mode
compile)
modename="$modename: compile"
# Get the compilation command and the source file.
base_compile=
+ prev=
lastarg=
srcfile="$nonopt"
suppress_output=
@@ -274,8 +278,34 @@
user_target=no
for arg
do
+ case $prev in
+ "") ;;
+ xcompiler)
+ # Aesthetically quote the previous argument.
+ prev=
+ lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+
+ case $arg in
+ # Double-quote args containing other shell metacharacters.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ arg="\"$arg\""
+ ;;
+ esac
+
+ # Add the previous argument to base_compile.
+ if test -z "$base_compile"; then
+ base_compile="$lastarg"
+ else
+ base_compile="$base_compile $lastarg"
+ fi
+ continue
+ ;;
+ esac
+
# Accept any command-line options.
- case "$arg" in
+ case $arg in
-o)
if test "$user_target" != "no"; then
$echo "$modename: you cannot specify \`-o' more than once" 1>&2
@@ -288,9 +318,53 @@
build_old_libs=yes
continue
;;
+
+ -prefer-pic)
+ pic_mode=yes
+ continue
+ ;;
+
+ -prefer-non-pic)
+ pic_mode=no
+ continue
+ ;;
+
+ -Xcompiler)
+ prev=xcompiler
+ continue
+ ;;
+
+ -Wc,*)
+ args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
+ lastarg=
+ save_ifs="$IFS"; IFS=','
+ for arg in $args; do
+ IFS="$save_ifs"
+
+ # Double-quote args containing other shell metacharacters.
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ arg="\"$arg\""
+ ;;
+ esac
+ lastarg="$lastarg $arg"
+ done
+ IFS="$save_ifs"
+ lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
+
+ # Add the arguments to base_compile.
+ if test -z "$base_compile"; then
+ base_compile="$lastarg"
+ else
+ base_compile="$base_compile $lastarg"
+ fi
+ continue
+ ;;
esac
- case "$user_target" in
+ case $user_target in
next)
# The next one is the -o target name
user_target=yes
@@ -316,10 +390,10 @@
lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
# Double-quote args containing other shell metacharacters.
- # Many Bourne shells cannot handle close brackets correctly in scan
- # sets, so we specify it separately.
- case "$lastarg" in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
+ # Many Bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ case $lastarg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
lastarg="\"$lastarg\""
;;
esac
@@ -332,7 +406,7 @@
fi
done
- case "$user_target" in
+ case $user_target in
set)
;;
no)
@@ -348,7 +422,7 @@
# Recognize several different file suffixes.
# If the user specifies -o file.o, it is replaced with file.lo
xform='[cCFSfmso]'
- case "$libobj" in
+ case $libobj in
*.ada) xform=ada ;;
*.adb) xform=adb ;;
*.ads) xform=ads ;;
@@ -363,7 +437,7 @@
libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
- case "$libobj" in
+ case $libobj in
*.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
*)
$echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
@@ -387,10 +461,21 @@
$run $rm $removelist
trap "$run $rm $removelist; exit 1" 1 2 15
+ # On Cygwin there's no "real" PIC flag so we must build both object types
+ case $host_os in
+ cygwin* | mingw* | pw32* | os2*)
+ pic_mode=default
+ ;;
+ esac
+ if test $pic_mode = no && test "$deplibs_check_method" != pass_all; then
+ # non-PIC code in shared libraries is not supported
+ pic_mode=default
+ fi
+
# Calculate the filename of the output object if compiler does
# not support -o with -c
if test "$compiler_c_o" = no; then
- output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.${objext}
+ output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
lockfile="$output_obj.lock"
removelist="$removelist $output_obj $lockfile"
trap "$run $rm $removelist; exit 1" 1 2 15
@@ -402,7 +487,7 @@
# Lock this critical section if it is needed
# We use this script file to make the link, it avoids creating a new file
if test "$need_locks" = yes; then
- until ln "$0" "$lockfile" 2>/dev/null; do
+ until $run ln "$0" "$lockfile" 2>/dev/null; do
$show "Waiting for $lockfile to be removed"
sleep 2
done
@@ -434,8 +519,13 @@
# Without this assignment, base_compile gets emptied.
fbsd_hideous_sh_bug=$base_compile
- # All platforms use -DPIC, to notify preprocessed assembler code.
- command="$base_compile $srcfile $pic_flag -DPIC"
+ if test "$pic_mode" != no; then
+ # All platforms use -DPIC, to notify preprocessed assembler code.
+ command="$base_compile $srcfile $pic_flag -DPIC"
+ else
+ # Don't build PIC code
+ command="$base_compile $srcfile"
+ fi
if test "$build_old_libs" = yes; then
lo_libobj="$libobj"
dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
@@ -506,7 +596,8 @@
fi
# If we have no pic_flag, then copy the object into place and finish.
- if test -z "$pic_flag" && test "$build_old_libs" = yes; then
+ if (test -z "$pic_flag" || test "$pic_mode" != default) &&
+ test "$build_old_libs" = yes; then
# Rename the .lo from within objdir to obj
if test -f $obj; then
$show $rm $obj
@@ -532,6 +623,10 @@
# Now arrange that obj and lo_libobj become the same file
$show "(cd $xdir && $LN_S $baseobj $libobj)"
if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then
+ # Unlock the critical section if it was locked
+ if test "$need_locks" != no; then
+ $run $rm "$lockfile"
+ fi
exit 0
else
error=$?
@@ -546,7 +641,13 @@
# Only build a position-dependent object if we build old libraries.
if test "$build_old_libs" = yes; then
- command="$base_compile $srcfile"
+ if test "$pic_mode" != yes; then
+ # Don't build PIC code
+ command="$base_compile $srcfile"
+ else
+ # All platforms use -DPIC, to notify preprocessed assembler code.
+ command="$base_compile $srcfile $pic_flag -DPIC"
+ fi
if test "$compiler_c_o" = yes; then
command="$command -o $obj"
output_obj="$obj"
@@ -612,7 +713,7 @@
# Unlock the critical section if it was locked
if test "$need_locks" != no; then
- $rm "$lockfile"
+ $run $rm "$lockfile"
fi
exit 0
@@ -619,10 +720,10 @@
;;
# libtool link mode
- link)
+ link | relink)
modename="$modename: link"
- case "$host" in
- *-*-cygwin* | *-*-mingw* | *-*-os2*)
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
# It is impossible to link a dll without this setting, and
# we shouldn't force the makefile maintainer to figure out
# which system we are compiling for in order to pass an extra
@@ -635,179 +736,12 @@
# -no-undefined on the libtool link line when we can be certain
# that all symbols are satisfied, otherwise we get a static library.
allow_undefined=yes
-
- # This is a source program that is used to create dlls on Windows
- # Don't remove nor modify the starting and closing comments
-# /* ltdll.c starts here */
-# #define WIN32_LEAN_AND_MEAN
-# #include <windows.h>
-# #undef WIN32_LEAN_AND_MEAN
-# #include <stdio.h>
-#
-# #ifndef __CYGWIN__
-# # ifdef __CYGWIN32__
-# # define __CYGWIN__ __CYGWIN32__
-# # endif
-# #endif
-#
-# #ifdef __cplusplus
-# extern "C" {
-# #endif
-# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
-# #ifdef __cplusplus
-# }
-# #endif
-#
-# #ifdef __CYGWIN__
-# #include <cygwin/cygwin_dll.h>
-# DECLARE_CYGWIN_DLL( DllMain );
-# #endif
-# HINSTANCE __hDllInstance_base;
-#
-# BOOL APIENTRY
-# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
-# {
-# __hDllInstance_base = hInst;
-# return TRUE;
-# }
-# /* ltdll.c ends here */
- # This is a source program that is used to create import libraries
- # on Windows for dlls which lack them. Don't remove nor modify the
- # starting and closing comments
-# /* impgen.c starts here */
-# /* Copyright (C) 1999 Free Software Foundation, Inc.
-#
-# This file is part of GNU libtool.
-#
-# 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> /* for printf() */
-# #include <unistd.h> /* for open(), lseek(), read() */
-# #include <fcntl.h> /* for O_RDONLY, O_BINARY */
-# #include <string.h> /* for strdup() */
-#
-# static unsigned int
-# pe_get16 (fd, offset)
-# int fd;
-# int offset;
-# {
-# unsigned char b[2];
-# lseek (fd, offset, SEEK_SET);
-# read (fd, b, 2);
-# return b[0] + (b[1]<<8);
-# }
-#
-# static unsigned int
-# pe_get32 (fd, offset)
-# int fd;
-# int offset;
-# {
-# unsigned char b[4];
-# lseek (fd, offset, SEEK_SET);
-# read (fd, b, 4);
-# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
-# }
-#
-# static unsigned int
-# pe_as32 (ptr)
-# void *ptr;
-# {
-# unsigned char *b = ptr;
-# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
-# }
-#
-# int
-# main (argc, argv)
-# int argc;
-# char *argv[];
-# {
-# int dll;
-# unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
-# unsigned long export_rva, export_size, nsections, secptr, expptr;
-# unsigned long name_rvas, nexp;
-# unsigned char *expdata, *erva;
-# char *filename, *dll_name;
-#
-# filename = argv[1];
-#
-# dll = open(filename, O_RDONLY|O_BINARY);
-# if (!dll)
-# return 1;
-#
-# dll_name = filename;
-#
-# for (i=0; filename[i]; i++)
-# if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':')
-# dll_name = filename + i +1;
-#
-# pe_header_offset = pe_get32 (dll, 0x3c);
-# opthdr_ofs = pe_header_offset + 4 + 20;
-# num_entries = pe_get32 (dll, opthdr_ofs + 92);
-#
-# if (num_entries < 1) /* no exports */
-# return 1;
-#
-# export_rva = pe_get32 (dll, opthdr_ofs + 96);
-# export_size = pe_get32 (dll, opthdr_ofs + 100);
-# nsections = pe_get16 (dll, pe_header_offset + 4 +2);
-# secptr = (pe_header_offset + 4 + 20 +
-# pe_get16 (dll, pe_header_offset + 4 + 16));
-#
-# expptr = 0;
-# for (i = 0; i < nsections; i++)
-# {
-# char sname[8];
-# unsigned long secptr1 = secptr + 40 * i;
-# unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
-# unsigned long vsize = pe_get32 (dll, secptr1 + 16);
-# unsigned long fptr = pe_get32 (dll, secptr1 + 20);
-# lseek(dll, secptr1, SEEK_SET);
-# read(dll, sname, 8);
-# if (vaddr <= export_rva && vaddr+vsize > export_rva)
-# {
-# expptr = fptr + (export_rva - vaddr);
-# if (export_rva + export_size > vaddr + vsize)
-# export_size = vsize - (export_rva - vaddr);
-# break;
-# }
-# }
-#
-# expdata = (unsigned char*)malloc(export_size);
-# lseek (dll, expptr, SEEK_SET);
-# read (dll, expdata, export_size);
-# erva = expdata - export_rva;
-#
-# nexp = pe_as32 (expdata+24);
-# name_rvas = pe_as32 (expdata+32);
-#
-# printf ("EXPORTS\n");
-# for (i = 0; i<nexp; i++)
-# {
-# unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
-# printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
-# }
-#
-# return 0;
-# }
-# /* impgen.c ends here */
;;
*)
allow_undefined=yes
;;
esac
+ libtool_args="$nonopt"
compile_command="$nonopt"
finalize_command="$nonopt"
@@ -818,18 +752,12 @@
convenience=
old_convenience=
deplibs=
- linkopts=
+ old_deplibs=
+ compiler_flags=
+ linker_flags=
+ dllsearchpath=
+ lib_search_path=`pwd`
- if test -n "$shlibpath_var"; then
- # get the directories listed in $shlibpath_var
- eval lib_search_path=\`\$echo \"X \${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
- else
- lib_search_path=
- fi
- # now prepend the system-specific ones
- eval lib_search_path=\"$sys_lib_search_path_spec\$lib_search_path\"
- eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
-
avoid_version=no
dlfiles=
dlprefiles=
@@ -839,9 +767,9 @@
export_symbols_regex=
generated=
libobjs=
- link_against_libtool_libs=
ltlibs=
module=no
+ no_install=no
objs=
prefer_static_libs=no
preload=no
@@ -858,7 +786,7 @@
# We need to know -static, to get the right output filenames.
for arg
do
- case "$arg" in
+ case $arg in
-all-static | -static)
if test "X$arg" = "X-all-static"; then
if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
@@ -887,10 +815,17 @@
while test $# -gt 0; do
arg="$1"
shift
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
+ ;;
+ *) qarg=$arg ;;
+ esac
+ libtool_args="$libtool_args $qarg"
# If the previous option needs an argument, assign it.
if test -n "$prev"; then
- case "$prev" in
+ case $prev in
output)
compile_command="$compile_command @OUTPUT@"
finalize_command="$finalize_command @OUTPUT@"
@@ -897,7 +832,7 @@
;;
esac
- case "$prev" in
+ case $prev in
dlfiles|dlprefiles)
if test "$preload" = no; then
# Add the symbol object into the linking commands.
@@ -905,7 +840,7 @@
finalize_command="$finalize_command @SYMFILE@"
preload=yes
fi
- case "$arg" in
+ case $arg in
*.la | *.lo) ;; # We handle these cases below.
force)
if test "$dlself" = no; then
@@ -934,6 +869,7 @@
dlprefiles="$dlprefiles $arg"
fi
prev=
+ continue
;;
esac
;;
@@ -958,7 +894,7 @@
;;
rpath | xrpath)
# We need an absolute path.
- case "$arg" in
+ case $arg in
[\\/]* | [A-Za-z]:[\\/]*) ;;
*)
$echo "$modename: only absolute run-paths are allowed" 1>&2
@@ -979,6 +915,21 @@
prev=
continue
;;
+ xcompiler)
+ compiler_flags="$compiler_flags $qarg"
+ prev=
+ compile_command="$compile_command $qarg"
+ finalize_command="$finalize_command $qarg"
+ continue
+ ;;
+ xlinker)
+ linker_flags="$linker_flags $qarg"
+ compiler_flags="$compiler_flags $wl$qarg"
+ prev=
+ compile_command="$compile_command $wl$qarg"
+ finalize_command="$finalize_command $wl$qarg"
+ continue
+ ;;
*)
eval "$prev=\"\$arg\""
prev=
@@ -985,11 +936,11 @@
continue
;;
esac
- fi
+ fi # test -n $prev
prevarg="$arg"
- case "$arg" in
+ case $arg in
-all-static)
if test -n "$link_static_flag"; then
compile_command="$compile_command $link_static_flag"
@@ -1026,7 +977,7 @@
-export-symbols | -export-symbols-regex)
if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
- $echo "$modename: not more than one -exported-symbols argument allowed"
+ $echo "$modename: more than one -exported-symbols argument is not allowed"
exit 1
fi
if test "X$arg" = "X-export-symbols"; then
@@ -1037,58 +988,76 @@
continue
;;
+ # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+ # so, if we see these flags be careful not to treat them like -L
+ -L[A-Z][A-Z]*:*)
+ case $with_gcc/$host in
+ no/*-*-irix*)
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ ;;
+ esac
+ continue
+ ;;
+
-L*)
dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
# We need an absolute path.
- case "$dir" in
+ case $dir in
[\\/]* | [A-Za-z]:[\\/]*) ;;
*)
absdir=`cd "$dir" && pwd`
if test -z "$absdir"; then
- $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
- $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
- absdir="$dir"
+ $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
+ exit 1
fi
dir="$absdir"
;;
esac
- case " $deplibs " in
- *" $arg "*) ;;
- *) deplibs="$deplibs $arg";;
+ case "$deplibs " in
+ *" -L$dir "*) ;;
+ *)
+ deplibs="$deplibs -L$dir"
+ lib_search_path="$lib_search_path $dir"
+ ;;
esac
- case " $lib_search_path " in
- *" $dir "*) ;;
- *) lib_search_path="$lib_search_path $dir";;
- esac
- case "$host" in
- *-*-cygwin* | *-*-mingw* | *-*-os2*)
- dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
- case ":$dllsearchpath:" in
- ::) dllsearchpath="$dllsearchdir";;
- *":$dllsearchdir:"*) ;;
- *) dllsearchpath="$dllsearchpath:$dllsearchdir";;
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ case :$dllsearchpath: in
+ *":$dir:"*) ;;
+ *) dllsearchpath="$dllsearchpath:$dir";;
esac
;;
esac
+ continue
;;
-l*)
- if test "$arg" = "-lc"; then
- case "$host" in
- *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
- # These systems don't actually have c library (as such)
+ if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+ case $host in
+ *-*-cygwin* | *-*-pw32* | *-*-beos*)
+ # These systems don't actually have a C or math library (as such)
continue
;;
+ *-*-mingw* | *-*-os2*)
+ # These systems don't actually have a C library (as such)
+ test "X$arg" = "X-lc" && continue
+ ;;
+ *-*-openbsd*)
+ # Do not include libc due to us having libc/libc_r.
+ test "X$arg" = "X-lc" && continue
+ ;;
esac
- elif test "$arg" = "-lm"; then
- case "$host" in
- *-*-cygwin* | *-*-beos*)
- # These systems don't actually have math library (as such)
+ elif test "X$arg" = "X-lc_r"; then
+ case $host in
+ *-*-openbsd*)
+ # Do not include libc_r directly, use -pthread flag.
continue
;;
esac
fi
deplibs="$deplibs $arg"
+ continue
;;
-module)
@@ -1096,6 +1065,25 @@
continue
;;
+ -no-fast-install)
+ fast_install=no
+ continue
+ ;;
+
+ -no-install)
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ # The PATH hackery in wrapper scripts is required on Windows
+ # in order for the loader to find any dlls it needs.
+ $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
+ $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
+ fast_install=no
+ ;;
+ *) no_install=yes ;;
+ esac
+ continue
+ ;;
+
-no-undefined)
allow_undefined=no
continue
@@ -1121,7 +1109,7 @@
-R*)
dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
# We need an absolute path.
- case "$dir" in
+ case $dir in
[\\/]* | [A-Za-z]:[\\/]*) ;;
*)
$echo "$modename: only absolute run-paths are allowed" 1>&2
@@ -1136,11 +1124,11 @@
;;
-static)
- # If we have no pic_flag, then this is the same as -all-static.
- if test -z "$pic_flag" && test -n "$link_static_flag"; then
- compile_command="$compile_command $link_static_flag"
- finalize_command="$finalize_command $link_static_flag"
- fi
+ # The effects of -static are defined in a previous loop.
+ # We used to do the same as -all-static on platforms that
+ # didn't have a PIC flag, but the assumption that the effects
+ # would be equivalent was wrong. It would break on at least
+ # Digital Unix and AIX.
continue
;;
@@ -1154,28 +1142,71 @@
continue
;;
+ -Wc,*)
+ args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ case $flag in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ flag="\"$flag\""
+ ;;
+ esac
+ arg="$arg $wl$flag"
+ compiler_flags="$compiler_flags $flag"
+ done
+ IFS="$save_ifs"
+ arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+ ;;
+
+ -Wl,*)
+ args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
+ arg=
+ save_ifs="$IFS"; IFS=','
+ for flag in $args; do
+ IFS="$save_ifs"
+ case $flag in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ flag="\"$flag\""
+ ;;
+ esac
+ arg="$arg $wl$flag"
+ compiler_flags="$compiler_flags $wl$flag"
+ linker_flags="$linker_flags $flag"
+ done
+ IFS="$save_ifs"
+ arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+ ;;
+
+ -Xcompiler)
+ prev=xcompiler
+ continue
+ ;;
+
+ -Xlinker)
+ prev=xlinker
+ continue
+ ;;
+
# Some other compiler flag.
-* | +*)
# Unknown arguments in both finalize_command and compile_command need
# to be aesthetically quoted because they are evaled later.
arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case "$arg" in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
arg="\"$arg\""
;;
esac
;;
- *.o | *.obj | *.a | *.lib)
- # A standard object.
- objs="$objs $arg"
- ;;
-
- *.lo)
- # A library object.
+ *.lo | *.$objext)
+ # A library or standard object.
if test "$prev" = dlfiles; then
- dlfiles="$dlfiles $arg"
- if test "$build_libtool_libs" = yes && test "$dlopen" = yes; then
+ # This file was specified with -dlopen.
+ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+ dlfiles="$dlfiles $arg"
prev=
continue
else
@@ -1188,357 +1219,890 @@
# Preload the old-style object.
dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"`
prev=
+ else
+ case $arg in
+ *.lo) libobjs="$libobjs $arg" ;;
+ *) objs="$objs $arg" ;;
+ esac
fi
- libobjs="$libobjs $arg"
;;
+ *.$libext)
+ # An archive.
+ deplibs="$deplibs $arg"
+ old_deplibs="$old_deplibs $arg"
+ continue
+ ;;
+
*.la)
# A libtool-controlled library.
- dlname=
- libdir=
- library_names=
- old_library=
+ if test "$prev" = dlfiles; then
+ # This library was specified with -dlopen.
+ dlfiles="$dlfiles $arg"
+ prev=
+ elif test "$prev" = dlprefiles; then
+ # The library was specified with -dlpreopen.
+ dlprefiles="$dlprefiles $arg"
+ prev=
+ else
+ deplibs="$deplibs $arg"
+ fi
+ continue
+ ;;
+ # Some other compiler argument.
+ *)
+ # Unknown arguments in both finalize_command and compile_command need
+ # to be aesthetically quoted because they are evaled later.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case $arg in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ arg="\"$arg\""
+ ;;
+ esac
+ ;;
+ esac # arg
+
+ # Now actually substitute the argument into the commands.
+ if test -n "$arg"; then
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ fi
+ done # argument parsing loop
+
+ if test -n "$prev"; then
+ $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+ eval arg=\"$export_dynamic_flag_spec\"
+ compile_command="$compile_command $arg"
+ finalize_command="$finalize_command $arg"
+ fi
+
+ # calculate the name of the file, without its directory
+ outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
+ libobjs_save="$libobjs"
+
+ if test -n "$shlibpath_var"; then
+ # get the directories listed in $shlibpath_var
+ eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+ else
+ shlib_search_path=
+ fi
+ eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+ eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+ output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$output_objdir" = "X$output"; then
+ output_objdir="$objdir"
+ else
+ output_objdir="$output_objdir/$objdir"
+ fi
+ # Create the object directory.
+ if test ! -d $output_objdir; then
+ $show "$mkdir $output_objdir"
+ $run $mkdir $output_objdir
+ status=$?
+ if test $status -ne 0 && test ! -d $output_objdir; then
+ exit $status
+ fi
+ fi
+
+ # Determine the type of output
+ case $output in
+ "")
+ $echo "$modename: you must specify an output file" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ ;;
+ *.$libext) linkmode=oldlib ;;
+ *.lo | *.$objext) linkmode=obj ;;
+ *.la) linkmode=lib ;;
+ *) linkmode=prog ;; # Anything else should be a program.
+ esac
+
+ specialdeplibs=
+ libs=
+ # Find all interdependent deplibs by searching for libraries
+ # that are linked more than once (e.g. -la -lb -la)
+ for deplib in $deplibs; do
+ case "$libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ libs="$libs $deplib"
+ done
+ deplibs=
+ newdependency_libs=
+ newlib_search_path=
+ need_relink=no # whether we're linking any uninstalled libtool libraries
+ notinst_deplibs= # not-installed libtool libraries
+ notinst_path= # paths that contain not-installed libtool libraries
+ case $linkmode in
+ lib)
+ passes="conv link"
+ for file in $dlfiles $dlprefiles; do
+ case $file in
+ *.la) ;;
+ *)
+ $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
+ exit 1
+ ;;
+ esac
+ done
+ ;;
+ prog)
+ compile_deplibs=
+ finalize_deplibs=
+ alldeplibs=no
+ newdlfiles=
+ newdlprefiles=
+ passes="conv scan dlopen dlpreopen link"
+ ;;
+ *) passes="conv"
+ ;;
+ esac
+ for pass in $passes; do
+ if test $linkmode = prog; then
+ # Determine which files to process
+ case $pass in
+ dlopen)
+ libs="$dlfiles"
+ save_deplibs="$deplibs" # Collect dlpreopened libraries
+ deplibs=
+ ;;
+ dlpreopen) libs="$dlprefiles" ;;
+ link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+ esac
+ fi
+ for deplib in $libs; do
+ lib=
+ found=no
+ case $deplib in
+ -l*)
+ if test $linkmode = oldlib && test $linkmode = obj; then
+ $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2
+ continue
+ fi
+ if test $pass = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
+ for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ # Search the libtool library
+ lib="$searchdir/lib${name}.la"
+ if test -f "$lib"; then
+ found=yes
+ break
+ fi
+ done
+ if test "$found" != yes; then
+ # deplib doesn't seem to be a libtool library
+ if test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ deplibs="$deplib $deplibs"
+ test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs"
+ fi
+ continue
+ fi
+ ;; # -l
+ -L*)
+ case $linkmode in
+ lib)
+ deplibs="$deplib $deplibs"
+ test $pass = conv && continue
+ newdependency_libs="$deplib $newdependency_libs"
+ newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+ ;;
+ prog)
+ if test $pass = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ if test $pass = scan; then
+ deplibs="$deplib $deplibs"
+ newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ ;;
+ *)
+ $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 1>&2
+ ;;
+ esac # linkmode
+ continue
+ ;; # -L
+ -R*)
+ if test $pass = link; then
+ dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
+ # Make sure the xrpath contains only unique directories.
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) xrpath="$xrpath $dir" ;;
+ esac
+ fi
+ deplibs="$deplib $deplibs"
+ continue
+ ;;
+ *.la) lib="$deplib" ;;
+ *.$libext)
+ if test $pass = conv; then
+ deplibs="$deplib $deplibs"
+ continue
+ fi
+ case $linkmode in
+ lib)
+ if test "$deplibs_check_method" != pass_all; then
+ echo
+ echo "*** Warning: This library needs some functionality provided by $deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have."
+ else
+ echo
+ echo "*** Warning: Linking the shared library $output against the"
+ echo "*** static library $deplib is not portable!"
+ deplibs="$deplib $deplibs"
+ fi
+ continue
+ ;;
+ prog)
+ if test $pass != link; then
+ deplibs="$deplib $deplibs"
+ else
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ fi
+ continue
+ ;;
+ esac # linkmode
+ ;; # *.$libext
+ *.lo | *.$objext)
+ if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+ # If there is no dlopen support or we're linking statically,
+ # we need to preload.
+ newdlprefiles="$newdlprefiles $deplib"
+ compile_deplibs="$deplib $compile_deplibs"
+ finalize_deplibs="$deplib $finalize_deplibs"
+ else
+ newdlfiles="$newdlfiles $deplib"
+ fi
+ continue
+ ;;
+ %DEPLIBS%)
+ alldeplibs=yes
+ continue
+ ;;
+ esac # case $deplib
+ if test $found = yes || test -f "$lib"; then :
+ else
+ $echo "$modename: cannot find the library \`$lib'" 1>&2
+ exit 1
+ fi
+
# Check to see that this really is a libtool archive.
- if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+ if (sed -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
else
- $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
exit 1
fi
+ ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$ladir" = "X$lib" && ladir="."
+
+ dlname=
+ dlopen=
+ dlpreopen=
+ libdir=
+ library_names=
+ old_library=
# If the library was installed with an old release of libtool,
# it will not redefine variable installed.
installed=yes
# Read the .la file
- # If there is no directory component, then add one.
- case "$arg" in
- */* | *\\*) . $arg ;;
- *) . ./$arg ;;
+ case $lib in
+ */* | *\\*) . $lib ;;
+ *) . ./$lib ;;
esac
+ if test "$linkmode,$pass" = "lib,link" ||
+ test "$linkmode,$pass" = "prog,scan" ||
+ { test $linkmode = oldlib && test $linkmode = obj; }; then
+ # Add dl[pre]opened files of deplib
+ test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+ test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+ fi
+
+ if test $pass = conv; then
+ # Only check for convenience libraries
+ deplibs="$lib $deplibs"
+ if test -z "$libdir"; then
+ if test -z "$old_library"; then
+ $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+ exit 1
+ fi
+ # It is a libtool convenience library, so add in its objects.
+ convenience="$convenience $ladir/$objdir/$old_library"
+ old_convenience="$old_convenience $ladir/$objdir/$old_library"
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ deplibs="$deplib $deplibs"
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ tmp_libs="$tmp_libs $deplib"
+ done
+ elif test $linkmode != prog && test $linkmode != lib; then
+ $echo "$modename: \`$lib' is not a convenience library" 1>&2
+ exit 1
+ fi
+ continue
+ fi # $pass = conv
+
# Get the name of the library we link against.
linklib=
for l in $old_library $library_names; do
linklib="$l"
done
-
if test -z "$linklib"; then
- $echo "$modename: cannot find name of link library for \`$arg'" 1>&2
+ $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
exit 1
fi
- # Find the relevant object directory and library name.
- name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'`
-
- if test "X$installed" = Xyes; then
- dir="$libdir"
- else
- dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$dir" = "X$arg"; then
- dir="$objdir"
+ # This library was specified with -dlopen.
+ if test $pass = dlopen; then
+ if test -z "$libdir"; then
+ $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
+ exit 1
+ fi
+ if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+ # If there is no dlname, no dlopen support or we're linking
+ # statically, we need to preload.
+ dlprefiles="$dlprefiles $lib"
else
- dir="$dir/$objdir"
+ newdlfiles="$newdlfiles $lib"
fi
- fi
-
- if test -n "$dependency_libs"; then
- # Extract -R and -L from dependency_libs
- temp_deplibs=
- for deplib in $dependency_libs; do
- case "$deplib" in
- -R*) temp_xrpath=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
- case " $rpath $xrpath " in
- *" $temp_xrpath "*) ;;
- *) xrpath="$xrpath $temp_xrpath";;
- esac;;
- -L*) case "$compile_command $temp_deplibs " in
- *" $deplib "*) ;;
- *) temp_deplibs="$temp_deplibs $deplib";;
- esac
- temp_dir=`$echo "X$deplib" | $Xsed -e 's/^-L//'`
- case " $lib_search_path " in
- *" $temp_dir "*) ;;
- *) lib_search_path="$lib_search_path $temp_dir";;
- esac
- ;;
- *) temp_deplibs="$temp_deplibs $deplib";;
- esac
- done
- dependency_libs="$temp_deplibs"
- fi
-
- if test -z "$libdir"; then
- # It is a libtool convenience library, so add in its objects.
- convenience="$convenience $dir/$old_library"
- old_convenience="$old_convenience $dir/$old_library"
- deplibs="$deplibs$dependency_libs"
- compile_command="$compile_command $dir/$old_library$dependency_libs"
- finalize_command="$finalize_command $dir/$old_library$dependency_libs"
continue
- fi
+ fi # $pass = dlopen
- # This library was specified with -dlopen.
- if test "$prev" = dlfiles; then
- dlfiles="$dlfiles $arg"
- if test -z "$dlname" || test "$dlopen" != yes || test "$build_libtool_libs" = no; then
- # If there is no dlname, no dlopen support or we're linking statically,
- # we need to preload.
- prev=dlprefiles
+ # We need an absolute path.
+ case $ladir in
+ [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+ *)
+ abs_ladir=`cd "$ladir" && pwd`
+ if test -z "$abs_ladir"; then
+ $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
+ $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
+ abs_ladir="$ladir"
+ fi
+ ;;
+ esac
+ laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+
+ # Find the relevant object directory and library name.
+ if test "X$installed" = Xyes; then
+ if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+ $echo "$modename: warning: library \`$lib' was moved." 1>&2
+ dir="$ladir"
+ absdir="$abs_ladir"
+ libdir="$abs_ladir"
else
- # We should not create a dependency on this library, but we
- # may need any libraries it requires.
- compile_command="$compile_command$dependency_libs"
- finalize_command="$finalize_command$dependency_libs"
- prev=
- continue
+ dir="$libdir"
+ absdir="$libdir"
fi
- fi
+ else
+ dir="$ladir/$objdir"
+ absdir="$abs_ladir/$objdir"
+ # Remove this search path later
+ notinst_path="$notinst_path $abs_ladir"
+ fi # $installed = yes
+ name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
- # The library was specified with -dlpreopen.
- if test "$prev" = dlprefiles; then
+ # This library was specified with -dlpreopen.
+ if test $pass = dlpreopen; then
+ if test -z "$libdir"; then
+ $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
+ exit 1
+ fi
# Prefer using a static library (so that no silly _DYNAMIC symbols
# are required to link).
if test -n "$old_library"; then
- dlprefiles="$dlprefiles $dir/$old_library"
+ newdlprefiles="$newdlprefiles $dir/$old_library"
+ # Otherwise, use the dlname, so that lt_dlopen finds it.
+ elif test -n "$dlname"; then
+ newdlprefiles="$newdlprefiles $dir/$dlname"
else
- dlprefiles="$dlprefiles $dir/$linklib"
+ newdlprefiles="$newdlprefiles $dir/$linklib"
fi
- prev=
+ fi # $pass = dlpreopen
+
+ if test -z "$libdir"; then
+ # Link the convenience library
+ if test $linkmode = lib; then
+ deplibs="$dir/$old_library $deplibs"
+ elif test "$linkmode,$pass" = "prog,link"; then
+ compile_deplibs="$dir/$old_library $compile_deplibs"
+ finalize_deplibs="$dir/$old_library $finalize_deplibs"
+ else
+ deplibs="$lib $deplibs"
+ fi
+ continue
fi
- if test -n "$library_names" &&
- { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
- link_against_libtool_libs="$link_against_libtool_libs $arg"
- if test -n "$shlibpath_var"; then
- # Make sure the rpath contains only unique directories.
- case "$temp_rpath " in
- *" $dir "*) ;;
- *) temp_rpath="$temp_rpath $dir" ;;
- esac
+ if test $linkmode = prog && test $pass != link; then
+ newlib_search_path="$newlib_search_path $ladir"
+ deplibs="$lib $deplibs"
+
+ linkalldeplibs=no
+ if test "$link_all_deplibs" != no || test -z "$library_names" ||
+ test "$build_libtool_libs" = no; then
+ linkalldeplibs=yes
fi
- # We need an absolute path.
- case "$dir" in
- [\\/] | [A-Za-z]:[\\/]*) absdir="$dir" ;;
- *)
- absdir=`cd "$dir" && pwd`
- if test -z "$absdir"; then
- $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
- $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
- absdir="$dir"
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
+ esac
+ # Need to link against all dependency_libs?
+ if test $linkalldeplibs = yes; then
+ deplibs="$deplib $deplibs"
+ else
+ # Need to hardcode shared library paths
+ # or/and link against static libraries
+ newdependency_libs="$deplib $newdependency_libs"
fi
- ;;
- esac
-
- # This is the magic to use -rpath.
- # Skip directories that are in the system default run-time
- # search path, unless they have been requested with -R.
- case " $sys_lib_dlsearch_path " in
- *" $absdir "*) ;;
- *)
- case "$compile_rpath " in
- *" $absdir "*) ;;
- *) compile_rpath="$compile_rpath $absdir"
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
esac
- ;;
- esac
+ tmp_libs="$tmp_libs $deplib"
+ done # for deplib
+ continue
+ fi # $linkmode = prog...
- case " $sys_lib_dlsearch_path " in
- *" $libdir "*) ;;
- *)
- case "$finalize_rpath " in
+ link_static=no # Whether the deplib will be linked statically
+ if test -n "$library_names" &&
+ { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+ # Link against this shared library
+
+ if test "$linkmode,$pass" = "prog,link" ||
+ { test $linkmode = lib && test $hardcode_into_libs = yes; }; then
+ # Hardcode the library path.
+ # Skip directories that are in the system default run-time
+ # search path.
+ case " $sys_lib_dlsearch_path " in
+ *" $absdir "*) ;;
+ *)
+ case "$compile_rpath " in
+ *" $absdir "*) ;;
+ *) compile_rpath="$compile_rpath $absdir"
+ esac
+ ;;
+ esac
+ case " $sys_lib_dlsearch_path " in
*" $libdir "*) ;;
- *) finalize_rpath="$finalize_rpath $libdir"
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir"
+ esac
+ ;;
esac
- ;;
- esac
+ if test $linkmode = prog; then
+ # We need to hardcode the library path
+ if test -n "$shlibpath_var"; then
+ # Make sure the rpath contains only unique directories.
+ case "$temp_rpath " in
+ *" $dir "*) ;;
+ *" $absdir "*) ;;
+ *) temp_rpath="$temp_rpath $dir" ;;
+ esac
+ fi
+ fi
+ fi # $linkmode,$pass = prog,link...
- lib_linked=yes
- case "$hardcode_action" in
- immediate | unsupported)
- if test "$hardcode_direct" = no; then
- compile_command="$compile_command $dir/$linklib"
- deplibs="$deplibs $dir/$linklib"
- case "$host" in
- *-*-cygwin* | *-*-mingw* | *-*-os2*)
- dllsearchdir=`cd "$dir" && pwd || echo "$dir"`
- if test -n "$dllsearchpath"; then
- dllsearchpath="$dllsearchpath:$dllsearchdir"
- else
- dllsearchpath="$dllsearchdir"
- fi
+ if test "$alldeplibs" = yes &&
+ { test "$deplibs_check_method" = pass_all ||
+ { test "$build_libtool_libs" = yes &&
+ test -n "$library_names"; }; }; then
+ # We only need to search for static libraries
+ continue
+ fi
+
+ if test "$installed" = no; then
+ notinst_deplibs="$notinst_deplibs $lib"
+ need_relink=yes
+ fi
+
+ if test -n "$old_archive_from_expsyms_cmds"; then
+ # figure out the soname
+ set dummy $library_names
+ realname="$2"
+ shift; shift
+ libname=`eval \\$echo \"$libname_spec\"`
+ # use dlname if we got it. it's perfectly good, no?
+ if test -n "$dlname"; then
+ soname="$dlname"
+ elif test -n "$soname_spec"; then
+ # bleh windows
+ case $host in
+ *cygwin*)
+ major=`expr $current - $age`
+ versuffix="-$major"
;;
esac
- elif test "$hardcode_minus_L" = no; then
- case "$host" in
- *-*-sunos*)
- compile_shlibpath="$compile_shlibpath$dir:"
- ;;
- esac
- case "$compile_command " in
- *" -L$dir "*) ;;
- *) compile_command="$compile_command -L$dir";;
- esac
- compile_command="$compile_command -l$name"
- deplibs="$deplibs -L$dir -l$name"
- elif test "$hardcode_shlibpath_var" = no; then
- case ":$compile_shlibpath:" in
- *":$dir:"*) ;;
- *) compile_shlibpath="$compile_shlibpath$dir:";;
+ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+
+ # Make a new name for the extract_expsyms_cmds to use
+ soroot="$soname"
+ soname=`echo $soroot | sed -e 's/^.*\///'`
+ newlib="libimp-`echo $soname | sed 's/^lib//;s/\.dll$//'`.a"
+
+ # If the library has no export list, then create one now
+ if test -f "$output_objdir/$soname-def"; then :
+ else
+ $show "extracting exported symbol list from \`$soname'"
+ save_ifs="$IFS"; IFS='~'
+ eval cmds=\"$extract_expsyms_cmds\"
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ fi
+
+ # Create $newlib
+ if test -f "$output_objdir/$newlib"; then :; else
+ $show "generating import library for \`$soname'"
+ save_ifs="$IFS"; IFS='~'
+ eval cmds=\"$old_archive_from_expsyms_cmds\"
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ fi
+ # make sure the library variables are pointing to the new library
+ dir=$output_objdir
+ linklib=$newlib
+ fi # test -n $old_archive_from_expsyms_cmds
+
+ if test $linkmode = prog || test "$mode" != relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+ lib_linked=yes
+ case $hardcode_action in
+ immediate | unsupported)
+ if test "$hardcode_direct" = no; then
+ add="$dir/$linklib"
+ elif test "$hardcode_minus_L" = no; then
+ case $host in
+ *-*-sunos*) add_shlibpath="$dir" ;;
+ esac
+ add_dir="-L$dir"
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = no; then
+ add_shlibpath="$dir"
+ add="-l$name"
+ else
+ lib_linked=no
+ fi
+ ;;
+ relink)
+ if test "$hardcode_direct" = yes; then
+ add="$dir/$linklib"
+ elif test "$hardcode_minus_L" = yes; then
+ add_dir="-L$dir"
+ add="-l$name"
+ elif test "$hardcode_shlibpath_var" = yes; then
+ add_shlibpath="$dir"
+ add="-l$name"
+ else
+ lib_linked=no
+ fi
+ ;;
+ *) lib_linked=no ;;
+ esac
+
+ if test "$lib_linked" != yes; then
+ $echo "$modename: configuration error: unsupported hardcode properties"
+ exit 1
+ fi
+
+ if test -n "$add_shlibpath"; then
+ case :$compile_shlibpath: in
+ *":$add_shlibpath:"*) ;;
+ *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
esac
- compile_command="$compile_command -l$name"
- deplibs="$deplibs -l$name"
+ fi
+ if test $linkmode = prog; then
+ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+ test -n "$add" && compile_deplibs="$add $compile_deplibs"
else
- lib_linked=no
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ if test "$hardcode_direct" != yes && \
+ test "$hardcode_minus_L" != yes && \
+ test "$hardcode_shlibpath_var" = yes; then
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+ esac
+ fi
fi
- ;;
+ fi
- relink)
+ if test $linkmode = prog || test "$mode" = relink; then
+ add_shlibpath=
+ add_dir=
+ add=
+ # Finalize command for both is simple: just hardcode it.
if test "$hardcode_direct" = yes; then
- compile_command="$compile_command $absdir/$linklib"
- deplibs="$deplibs $absdir/$linklib"
+ add="$libdir/$linklib"
elif test "$hardcode_minus_L" = yes; then
- case "$compile_command " in
- *" -L$absdir "*) ;;
- *) compile_command="$compile_command -L$absdir";;
- esac
- compile_command="$compile_command -l$name"
- deplibs="$deplibs -L$absdir -l$name"
+ add_dir="-L$libdir"
+ add="-l$name"
elif test "$hardcode_shlibpath_var" = yes; then
- case ":$compile_shlibpath:" in
- *":$absdir:"*) ;;
- *) compile_shlibpath="$compile_shlibpath$absdir:";;
+ case :$finalize_shlibpath: in
+ *":$libdir:"*) ;;
+ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
esac
- compile_command="$compile_command -l$name"
- deplibs="$deplibs -l$name"
+ add="-l$name"
else
- lib_linked=no
+ # We cannot seem to hardcode it, guess we'll fake it.
+ add_dir="-L$libdir"
+ add="-l$name"
fi
- ;;
- *)
- lib_linked=no
- ;;
- esac
-
- if test "$lib_linked" != yes; then
- $echo "$modename: configuration error: unsupported hardcode properties"
- exit 1
+ if test $linkmode = prog; then
+ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+ test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+ else
+ test -n "$add_dir" && deplibs="$add_dir $deplibs"
+ test -n "$add" && deplibs="$add $deplibs"
+ fi
fi
-
- # Finalize command for both is simple: just hardcode it.
- if test "$hardcode_direct" = yes; then
- finalize_command="$finalize_command $libdir/$linklib"
- elif test "$hardcode_minus_L" = yes; then
- case "$finalize_command " in
- *" -L$libdir "*) ;;
- *) finalize_command="$finalize_command -L$libdir";;
- esac
- finalize_command="$finalize_command -l$name"
- elif test "$hardcode_shlibpath_var" = yes; then
- case ":$finalize_shlibpath:" in
- *":$libdir:"*) ;;
- *) finalize_shlibpath="$finalize_shlibpath$libdir:";;
- esac
- finalize_command="$finalize_command -l$name"
- else
- # We cannot seem to hardcode it, guess we'll fake it.
- case "$finalize_command " in
- *" -L$dir "*) ;;
- *) finalize_command="$finalize_command -L$libdir";;
- esac
- finalize_command="$finalize_command -l$name"
+ elif test $linkmode = prog; then
+ if test "$alldeplibs" = yes &&
+ { test "$deplibs_check_method" = pass_all ||
+ { test "$build_libtool_libs" = yes &&
+ test -n "$library_names"; }; }; then
+ # We only need to search for static libraries
+ continue
fi
- else
- # Transform directly to old archives if we don't build new libraries.
- if test -n "$pic_flag" && test -z "$old_library"; then
- $echo "$modename: cannot find static library for \`$arg'" 1>&2
- exit 1
- fi
+ # Try to link the static library
# Here we assume that one of hardcode_direct or hardcode_minus_L
# is not unsupported. This is valid on all known static and
# shared platforms.
if test "$hardcode_direct" != unsupported; then
test -n "$old_library" && linklib="$old_library"
- compile_command="$compile_command $dir/$linklib"
- finalize_command="$finalize_command $dir/$linklib"
+ compile_deplibs="$dir/$linklib $compile_deplibs"
+ finalize_deplibs="$dir/$linklib $finalize_deplibs"
else
- case "$compile_command " in
- *" -L$dir "*) ;;
- *) compile_command="$compile_command -L$dir";;
- esac
- compile_command="$compile_command -l$name"
- case "$finalize_command " in
- *" -L$dir "*) ;;
- *) finalize_command="$finalize_command -L$dir";;
- esac
- finalize_command="$finalize_command -l$name"
+ compile_deplibs="-l$name -L$dir $compile_deplibs"
+ finalize_deplibs="-l$name -L$dir $finalize_deplibs"
fi
- fi
+ elif test "$build_libtool_libs" = yes; then
+ # Not a shared library
+ if test "$deplibs_check_method" != pass_all; then
+ # We're trying link a shared library against a static one
+ # but the system doesn't support it.
- # Add in any libraries that this one depends upon.
- compile_command="$compile_command$dependency_libs"
- finalize_command="$finalize_command$dependency_libs"
- continue
- ;;
+ # Just print a warning and add the library to dependency_libs so
+ # that the program can be linked against the static library.
+ echo
+ echo "*** Warning: This library needs some functionality provided by $lib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have."
+ if test "$module" = yes; then
+ echo "*** Therefore, libtool will create a static module, that should work "
+ echo "*** as long as the dlopening application is linked with the -dlopen flag."
+ if test -z "$global_symbol_pipe"; then
+ echo
+ echo "*** However, this would only work if libtool was able to extract symbol"
+ echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+ echo "*** not find such a program. So, this module is probably useless."
+ echo "*** \`nm' from GNU binutils and a full rebuild may help."
+ fi
+ if test "$build_old_libs" = no; then
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
+ else
+ convenience="$convenience $dir/$old_library"
+ old_convenience="$old_convenience $dir/$old_library"
+ deplibs="$dir/$old_library $deplibs"
+ link_static=yes
+ fi
+ fi # link shared/static library?
- # Some other compiler argument.
- *)
- # Unknown arguments in both finalize_command and compile_command need
- # to be aesthetically quoted because they are evaled later.
- arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case "$arg" in
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
- arg="\"$arg\""
- ;;
- esac
- ;;
- esac
+ if test $linkmode = lib; then
+ if test -n "$dependency_libs" &&
+ { test $hardcode_into_libs != yes || test $build_old_libs = yes ||
+ test $link_static = yes; }; then
+ # Extract -R from dependency_libs
+ temp_deplibs=
+ for libdir in $dependency_libs; do
+ case $libdir in
+ -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
+ case " $xrpath " in
+ *" $temp_xrpath "*) ;;
+ *) xrpath="$xrpath $temp_xrpath";;
+ esac;;
+ *) temp_deplibs="$temp_deplibs $libdir";;
+ esac
+ done
+ dependency_libs="$temp_deplibs"
+ fi
- # Now actually substitute the argument into the commands.
- if test -n "$arg"; then
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- fi
- done
+ newlib_search_path="$newlib_search_path $absdir"
+ # Link against this library
+ test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+ # ... and its dependency_libs
+ tmp_libs=
+ for deplib in $dependency_libs; do
+ newdependency_libs="$deplib $newdependency_libs"
+ case "$tmp_libs " in
+ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+ esac
+ tmp_libs="$tmp_libs $deplib"
+ done
- if test -n "$prev"; then
- $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
- $echo "$help" 1>&2
- exit 1
- fi
-
- if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
- eval arg=\"$export_dynamic_flag_spec\"
- compile_command="$compile_command $arg"
- finalize_command="$finalize_command $arg"
- fi
-
- oldlibs=
- # calculate the name of the file, without its directory
- outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
- libobjs_save="$libobjs"
-
- case "$output" in
- "")
- $echo "$modename: you must specify an output file" 1>&2
- $echo "$help" 1>&2
- exit 1
- ;;
-
- *.a | *.lib)
- if test -n "$link_against_libtool_libs"; then
- $echo "$modename: error: cannot link libtool libraries into archives" 1>&2
- exit 1
+ if test $link_all_deplibs != no; then
+ # Add the search paths of all dependency libraries
+ for deplib in $dependency_libs; do
+ case $deplib in
+ -L*) path="$deplib" ;;
+ *.la)
+ dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$dir" = "X$deplib" && dir="."
+ # We need an absolute path.
+ case $dir in
+ [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+ *)
+ absdir=`cd "$dir" && pwd`
+ if test -z "$absdir"; then
+ $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
+ absdir="$dir"
+ fi
+ ;;
+ esac
+ if grep "^installed=no" $deplib > /dev/null; then
+ path="-L$absdir/$objdir"
+ else
+ eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+ exit 1
+ fi
+ if test "$absdir" != "$libdir"; then
+ $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
+ fi
+ path="-L$absdir"
+ fi
+ ;;
+ *) continue ;;
+ esac
+ case " $deplibs " in
+ *" $path "*) ;;
+ *) deplibs="$deplibs $path" ;;
+ esac
+ done
+ fi # link_all_deplibs != no
+ fi # linkmode = lib
+ done # for deplib in $libs
+ if test $pass = dlpreopen; then
+ # Link the dlpreopened libraries before other libraries
+ for deplib in $save_deplibs; do
+ deplibs="$deplib $deplibs"
+ done
fi
+ if test $pass != dlopen; then
+ test $pass != scan && dependency_libs="$newdependency_libs"
+ if test $pass != conv; then
+ # Make sure lib_search_path contains only unique directories.
+ lib_search_path=
+ for dir in $newlib_search_path; do
+ case "$lib_search_path " in
+ *" $dir "*) ;;
+ *) lib_search_path="$lib_search_path $dir" ;;
+ esac
+ done
+ newlib_search_path=
+ fi
- if test -n "$deplibs"; then
- $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
+ if test "$linkmode,$pass" != "prog,link"; then
+ vars="deplibs"
+ else
+ vars="compile_deplibs finalize_deplibs"
+ fi
+ for var in $vars dependency_libs; do
+ # Add libraries to $var in reverse order
+ eval tmp_libs=\"\$$var\"
+ new_libs=
+ for deplib in $tmp_libs; do
+ case $deplib in
+ -L*) new_libs="$deplib $new_libs" ;;
+ *)
+ case " $specialdeplibs " in
+ *" $deplib "*) new_libs="$deplib $new_libs" ;;
+ *)
+ case " $new_libs " in
+ *" $deplib "*) ;;
+ *) new_libs="$deplib $new_libs" ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ done
+ tmp_libs=
+ for deplib in $new_libs; do
+ case $deplib in
+ -L*)
+ case " $tmp_libs " in
+ *" $deplib "*) ;;
+ *) tmp_libs="$tmp_libs $deplib" ;;
+ esac
+ ;;
+ *) tmp_libs="$tmp_libs $deplib" ;;
+ esac
+ done
+ eval $var=\"$tmp_libs\"
+ done # for var
fi
+ if test "$pass" = "conv" &&
+ { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then
+ libs="$deplibs" # reset libs
+ deplibs=
+ fi
+ done # for pass
+ if test $linkmode = prog; then
+ dlfiles="$newdlfiles"
+ dlprefiles="$newdlprefiles"
+ fi
+ case $linkmode in
+ oldlib)
if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
$echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
fi
@@ -1566,11 +2130,12 @@
# Now set the variables for building old libraries.
build_libtool_libs=no
oldlibs="$output"
+ objs="$objs$old_deplibs"
;;
- *.la)
+ lib)
# Make sure we only generate libraries of the form `libNAME.la'.
- case "$outputname" in
+ case $outputname in
lib*)
name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
eval libname=\"$libname_spec\"
@@ -1591,28 +2156,22 @@
;;
esac
- output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$output_objdir" = "X$output"; then
- output_objdir="$objdir"
- else
- output_objdir="$output_objdir/$objdir"
- fi
-
if test -n "$objs"; then
- $echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1
- exit 1
+ if test "$deplibs_check_method" != pass_all; then
+ $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
+ exit 1
+ else
+ echo
+ echo "*** Warning: Linking the shared library $output against the non-libtool"
+ echo "*** objects $objs is not portable!"
+ libobjs="$libobjs $objs"
+ fi
fi
- # How the heck are we supposed to write a wrapper for a shared library?
- if test -n "$link_against_libtool_libs"; then
- $echo "$modename: error: cannot link shared libraries into libtool libraries" 1>&2
- exit 1
+ if test "$dlself" != no; then
+ $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
fi
- if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
- $echo "$modename: warning: \`-dlopen' is ignored for libtool libraries" 1>&2
- fi
-
set dummy $rpath
if test $# -gt 2; then
$echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
@@ -1628,7 +2187,6 @@
build_libtool_libs=convenience
build_old_libs=yes
fi
- dependency_libs="$deplibs"
if test -n "$vinfo"; then
$echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2
@@ -1640,7 +2198,7 @@
else
# Parse the version information argument.
- IFS="${IFS= }"; save_ifs="$IFS"; IFS=':'
+ save_ifs="$IFS"; IFS=':'
set dummy $vinfo 0 0 0
IFS="$save_ifs"
@@ -1655,8 +2213,8 @@
age="$4"
# Check that each of the things are valid numbers.
- case "$current" in
- 0 | [1-9] | [1-9][0-9]*) ;;
+ case $current in
+ 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
*)
$echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
$echo "$modename: \`$vinfo' is not valid version information" 1>&2
@@ -1664,8 +2222,8 @@
;;
esac
- case "$revision" in
- 0 | [1-9] | [1-9][0-9]*) ;;
+ case $revision in
+ 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
*)
$echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
$echo "$modename: \`$vinfo' is not valid version information" 1>&2
@@ -1673,8 +2231,8 @@
;;
esac
- case "$age" in
- 0 | [1-9] | [1-9][0-9]*) ;;
+ case $age in
+ 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
*)
$echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
$echo "$modename: \`$vinfo' is not valid version information" 1>&2
@@ -1692,12 +2250,31 @@
major=
versuffix=
verstring=
- case "$version_type" in
+ case $version_type in
none) ;;
+ darwin)
+ # Like Linux, but with the current version available in
+ # verstring for coding it into the library header
+ major=.`expr $current - $age`
+ versuffix="$major.$age.$revision"
+ # Darwin ld doesn't like 0 for these options...
+ minor_current=`expr $current + 1`
+ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+ ;;
+
+ freebsd-aout)
+ major=".$current"
+ versuffix=".$current.$revision";
+ ;;
+
+ freebsd-elf)
+ major=".$current"
+ versuffix=".$current";
+ ;;
+
irix)
major=`expr $current - $age + 1`
- versuffix="$major.$revision"
verstring="sgi$major.$revision"
# Add in all the interfaces that we are compatible with.
@@ -1707,6 +2284,10 @@
loop=`expr $loop - 1`
verstring="sgi$major.$iface:$verstring"
done
+
+ # Before this point, $major must not contain `.'.
+ major=.$major
+ versuffix="$major.$revision"
;;
linux)
@@ -1736,21 +2317,11 @@
versuffix=".$current.$revision"
;;
- freebsd-aout)
- major=".$current"
- versuffix=".$current.$revision";
- ;;
-
- freebsd-elf)
- major=".$current"
- versuffix=".$current";
- ;;
-
windows)
- # Like Linux, but with '-' rather than '.', since we only
- # want one extension on Windows 95.
+ # Use '-' rather than '.', since we only want one
+ # extension on DOS 8.3 filesystems.
major=`expr $current - $age`
- versuffix="-$major-$age-$revision"
+ versuffix="-$major"
;;
*)
@@ -1764,6 +2335,16 @@
if test -z "$vinfo" && test -n "$release"; then
major=
verstring="0.0"
+ case $version_type in
+ darwin)
+ # we can't check for "0.0" in archive_cmds due to quoting
+ # problems, so we reset it completely
+ verstring=""
+ ;;
+ *)
+ verstring="0.0"
+ ;;
+ esac
if test "$need_version" = no; then
versuffix=
else
@@ -1777,7 +2358,7 @@
versuffix=
verstring=""
fi
-
+
# Check to see if the archive will have undefined symbols.
if test "$allow_undefined" = yes; then
if test "$allow_undefined_flag" = unsupported; then
@@ -1789,34 +2370,12 @@
# Don't allow undefined symbols.
allow_undefined_flag="$no_undefined_flag"
fi
-
- dependency_libs="$deplibs"
- case "$host" in
- *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
- # these systems don't actually have a c library (as such)!
- ;;
- *-*-rhapsody*)
- # rhapsody is a little odd...
- deplibs="$deplibs -framework System"
- ;;
- *)
- # Add libc to deplibs on all other systems.
- deplibs="$deplibs -lc"
- ;;
- esac
fi
- # Create the output directory, or remove our outputs if we need to.
- if test -d $output_objdir; then
+ if test "$mode" != relink; then
+ # Remove our outputs.
$show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*"
$run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*
- else
- $show "$mkdir $output_objdir"
- $run $mkdir $output_objdir
- status=$?
- if test $status -ne 0 && test ! -d $output_objdir; then
- exit $status
- fi
fi
# Now set the variables for building old libraries.
@@ -1827,7 +2386,73 @@
oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
fi
+ # Eliminate all temporary directories.
+ for path in $notinst_path; do
+ lib_search_path=`echo "$lib_search_path " | sed -e 's% $path % %g'`
+ deplibs=`echo "$deplibs " | sed -e 's% -L$path % %g'`
+ dependency_libs=`echo "$dependency_libs " | sed -e 's% -L$path % %g'`
+ done
+
+ if test -n "$xrpath"; then
+ # If the user specified any rpath flags, then add them.
+ temp_xrpath=
+ for libdir in $xrpath; do
+ temp_xrpath="$temp_xrpath -R$libdir"
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir" ;;
+ esac
+ done
+ if test $hardcode_into_libs != yes || test $build_old_libs = yes; then
+ dependency_libs="$temp_xrpath $dependency_libs"
+ fi
+ fi
+
+ # Make sure dlfiles contains only unique files that won't be dlpreopened
+ old_dlfiles="$dlfiles"
+ dlfiles=
+ for lib in $old_dlfiles; do
+ case " $dlprefiles $dlfiles " in
+ *" $lib "*) ;;
+ *) dlfiles="$dlfiles $lib" ;;
+ esac
+ done
+
+ # Make sure dlprefiles contains only unique files
+ old_dlprefiles="$dlprefiles"
+ dlprefiles=
+ for lib in $old_dlprefiles; do
+ case "$dlprefiles " in
+ *" $lib "*) ;;
+ *) dlprefiles="$dlprefiles $lib" ;;
+ esac
+ done
+
if test "$build_libtool_libs" = yes; then
+ if test -n "$rpath"; then
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
+ # these systems don't actually have a c library (as such)!
+ ;;
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # Rhapsody C library is in the System framework
+ deplibs="$deplibs -framework System"
+ ;;
+ *-*-netbsd*)
+ # Don't link with libc until the a.out ld.so is fixed.
+ ;;
+ *-*-openbsd*)
+ # Do not include libc due to us having libc/libc_r.
+ ;;
+ *)
+ # Add libc to deplibs on all other systems if necessary.
+ if test $build_libtool_need_lc = "yes"; then
+ deplibs="$deplibs -lc"
+ fi
+ ;;
+ esac
+ fi
+
# Transform deplibs into only deplibs that can be linked in shared.
name_save=$name
libname_save=$libname
@@ -1842,7 +2467,7 @@
major=""
newdeplibs=
droppeddeps=no
- case "$deplibs_check_method" in
+ case $deplibs_check_method in
pass_all)
# Don't check for shared/static. Everything works.
# This might be a little naive. We might want to check
@@ -1867,7 +2492,7 @@
for i in $deplibs; do
name="`expr $i : '-l\(.*\)'`"
# If $name is empty we are operating on a -L argument.
- if test "$name" != "" ; then
+ if test -n "$name" && test "$name" != "0"; then
libname=`eval \\$echo \"$libname_spec\"`
deplib_matches=`eval \\$echo \"$library_names_spec\"`
set dummy $deplib_matches
@@ -1892,7 +2517,7 @@
for i in $deplibs; do
name="`expr $i : '-l\(.*\)'`"
# If $name is empty we are operating on a -L argument.
- if test "$name" != "" ; then
+ if test -n "$name" && test "$name" != "0"; then
$rm conftest
$CC -o conftest conftest.c $i
# Did it work?
@@ -1928,19 +2553,19 @@
;;
file_magic*)
set dummy $deplibs_check_method
- file_magic_regex="`expr \"$deplibs_check_method\" : \"$2 \(.*\)\"`"
+ file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
for a_deplib in $deplibs; do
name="`expr $a_deplib : '-l\(.*\)'`"
# If $name is empty we are operating on a -L argument.
- if test "$name" != "" ; then
+ if test -n "$name" && test "$name" != "0"; then
libname=`eval \\$echo \"$libname_spec\"`
- for i in $lib_search_path; do
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
for potent_lib in $potential_libs; do
# Follow soft links.
if ls -lLd "$potent_lib" 2>/dev/null \
| grep " -> " >/dev/null; then
- continue
+ continue
fi
# The statement above tries to avoid entering an
# endless loop below, in case of cyclic links.
@@ -1950,7 +2575,7 @@
potlib="$potent_lib"
while test -h "$potlib" 2>/dev/null; do
potliblink=`ls -ld $potlib | sed 's/.* -> //'`
- case "$potliblink" in
+ case $potliblink in
[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
*) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
esac
@@ -1978,6 +2603,40 @@
fi
done # Gone through all deplibs.
;;
+ match_pattern*)
+ set dummy $deplibs_check_method
+ match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+ for a_deplib in $deplibs; do
+ name="`expr $a_deplib : '-l\(.*\)'`"
+ # If $name is empty we are operating on a -L argument.
+ if test -n "$name" && test "$name" != "0"; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+ for potent_lib in $potential_libs; do
+ if eval echo \"$potent_lib\" 2>/dev/null \
+ | sed 10q \
+ | egrep "$match_pattern_regex" > /dev/null; then
+ newdeplibs="$newdeplibs $a_deplib"
+ a_deplib=""
+ break 2
+ fi
+ done
+ done
+ if test -n "$a_deplib" ; then
+ droppeddeps=yes
+ echo
+ echo "*** Warning: This library needs some functionality provided by $a_deplib."
+ echo "*** I have the capability to make that library automatically link in when"
+ echo "*** you link to this library. But I can only do this if you have a"
+ echo "*** shared version of the library, which you do not appear to have."
+ fi
+ else
+ # Add a -L argument.
+ newdeplibs="$newdeplibs $a_deplib"
+ fi
+ done # Gone through all deplibs.
+ ;;
none | unknown | *)
newdeplibs=""
if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
@@ -2000,6 +2659,13 @@
libname=$libname_save
name=$name_save
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
+ ;;
+ esac
+
if test "$droppeddeps" = yes; then
if test "$module" = yes; then
echo
@@ -2025,6 +2691,21 @@
echo "*** The inter-library dependencies that have been dropped here will be"
echo "*** automatically added whenever a program is linked with this library"
echo "*** or is declared to -dlopen it."
+
+ if test $allow_undefined = no; then
+ echo
+ echo "*** Since this library must not contain undefined symbols,"
+ echo "*** because either the platform does not support them or"
+ echo "*** it was explicitly requested with -no-undefined,"
+ echo "*** libtool will only create a static version of it."
+ if test "$build_old_libs" = no; then
+ oldlibs="$output_objdir/$libname.$libext"
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ fi
fi
fi
# Done checking deplibs!
@@ -2035,9 +2716,64 @@
library_names=
old_library=
dlname=
-
+
# Test again, we may have decided not to build it any more
if test "$build_libtool_libs" = yes; then
+ if test $hardcode_into_libs = yes; then
+ # Hardcode the library paths
+ hardcode_libdirs=
+ dep_rpath=
+ rpath="$finalize_rpath"
+ test "$mode" != relink && rpath="$compile_rpath$rpath"
+ for libdir in $rpath; do
+ if test -n "$hardcode_libdir_flag_spec"; then
+ if test -n "$hardcode_libdir_separator"; then
+ if test -z "$hardcode_libdirs"; then
+ hardcode_libdirs="$libdir"
+ else
+ # Just accumulate the unique libdirs.
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+ ;;
+ *)
+ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+ ;;
+ esac
+ fi
+ else
+ eval flag=\"$hardcode_libdir_flag_spec\"
+ dep_rpath="$dep_rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$perm_rpath " in
+ *" $libdir "*) ;;
+ *) perm_rpath="$perm_rpath $libdir" ;;
+ esac
+ fi
+ done
+ # Substitute the hardcoded libdirs into the rpath.
+ if test -n "$hardcode_libdir_separator" &&
+ test -n "$hardcode_libdirs"; then
+ libdir="$hardcode_libdirs"
+ eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+ fi
+ if test -n "$runpath_var" && test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+ fi
+ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+ fi
+
+ shlibpath="$finalize_shlibpath"
+ test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+ if test -n "$shlibpath"; then
+ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+ fi
+
# Get the real and link names of the library.
eval library_names=\"$library_names_spec\"
set dummy $library_names
@@ -2049,6 +2785,7 @@
else
soname="$realname"
fi
+ test -z "$dlname" && dlname=$soname
lib="$output_objdir/$realname"
for link
@@ -2083,7 +2820,7 @@
export_symbols="$output_objdir/$libname.exp"
$run $rm $export_symbols
eval cmds=\"$export_symbols_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ save_ifs="$IFS"; IFS='~'
for cmd in $cmds; do
IFS="$save_ifs"
$show "$cmd"
@@ -2120,7 +2857,7 @@
for xlib in $convenience; do
# Extract the objects.
- case "$xlib" in
+ case $xlib in
[\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
*) xabs=`pwd`"/$xlib" ;;
esac
@@ -2145,16 +2882,26 @@
if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
eval flag=\"$thread_safe_flag_spec\"
- linkopts="$linkopts $flag"
+ linker_flags="$linker_flags $flag"
fi
+ # Make a backup of the uninstalled library when relinking
+ if test "$mode" = relink; then
+ $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
+ fi
+
# Do each of the archive commands.
if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
eval cmds=\"$archive_expsym_cmds\"
else
- eval cmds=\"$archive_cmds\"
+ save_deplibs="$deplibs"
+ for conv in $convenience; do
+ deplibs="${deplibs%$conv*} ${deplibs#*$conv}"
+ done
+ eval cmds=\"$archive_cmds\"
+ deplibs="$save_deplibs"
fi
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ save_ifs="$IFS"; IFS='~'
for cmd in $cmds; do
IFS="$save_ifs"
$show "$cmd"
@@ -2162,6 +2909,12 @@
done
IFS="$save_ifs"
+ # Restore the uninstalled library and exit
+ if test "$mode" = relink; then
+ $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
+ exit 0
+ fi
+
# Create links to the real library.
for linkname in $linknames; do
if test "$realname" != "$linkname"; then
@@ -2178,12 +2931,7 @@
fi
;;
- *.lo | *.o | *.obj)
- if test -n "$link_against_libtool_libs"; then
- $echo "$modename: error: cannot link libtool libraries into objects" 1>&2
- exit 1
- fi
-
+ obj)
if test -n "$deplibs"; then
$echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
fi
@@ -2208,9 +2956,9 @@
$echo "$modename: warning: \`-release' is ignored for objects" 1>&2
fi
- case "$output" in
+ case $output in
*.lo)
- if test -n "$objs"; then
+ if test -n "$objs$old_deplibs"; then
$echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
exit 1
fi
@@ -2234,7 +2982,7 @@
gentop=
# reload_cmds runs $LD directly, so let us get rid of
# -Wl from whole_archive_flag_spec
- wl=
+ wl=
if test -n "$convenience"; then
if test -n "$whole_archive_flag_spec"; then
@@ -2253,7 +3001,7 @@
for xlib in $convenience; do
# Extract the objects.
- case "$xlib" in
+ case $xlib in
[\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
*) xabs=`pwd`"/$xlib" ;;
esac
@@ -2277,11 +3025,11 @@
fi
# Create the old-style object.
- reload_objs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs"
+ reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
output="$obj"
eval cmds=\"$reload_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ save_ifs="$IFS"; IFS='~'
for cmd in $cmds; do
IFS="$save_ifs"
$show "$cmd"
@@ -2312,12 +3060,12 @@
exit 0
fi
- if test -n "$pic_flag"; then
+ if test -n "$pic_flag" || test "$pic_mode" != default; then
# Only do commands if we really have different PIC objects.
reload_objs="$libobjs $reload_conv_objs"
output="$libobj"
eval cmds=\"$reload_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ save_ifs="$IFS"; IFS='~'
for cmd in $cmds; do
IFS="$save_ifs"
$show "$cmd"
@@ -2348,8 +3096,10 @@
exit 0
;;
- # Anything else should be a program.
- *)
+ prog)
+ case $host in
+ *cygwin*) output=`echo $output | sed -e 's,.exe$,,;s,$,.exe,'` ;;
+ esac
if test -n "$vinfo"; then
$echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
fi
@@ -2359,20 +3109,27 @@
fi
if test "$preload" = yes; then
- if test "$dlopen" = unknown && test "$dlopen_self" = unknown &&
+ if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
test "$dlopen_self_static" = unknown; then
$echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
- fi
+ fi
fi
-
+
+ case $host in
+ *-*-rhapsody* | *-*-darwin1.[012])
+ # On Rhapsody replace the C library is the System framework
+ compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+ finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+ ;;
+ esac
+
+ compile_command="$compile_command $compile_deplibs"
+ finalize_command="$finalize_command $finalize_deplibs"
+
if test -n "$rpath$xrpath"; then
# If the user specified any rpath flags, then add them.
for libdir in $rpath $xrpath; do
# This is the magic to use -rpath.
- case "$compile_rpath " in
- *" $libdir "*) ;;
- *) compile_rpath="$compile_rpath $libdir" ;;
- esac
case "$finalize_rpath " in
*" $libdir "*) ;;
*) finalize_rpath="$finalize_rpath $libdir" ;;
@@ -2390,7 +3147,7 @@
hardcode_libdirs="$libdir"
else
# Just accumulate the unique libdirs.
- case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
*"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
;;
*)
@@ -2408,6 +3165,14 @@
*) perm_rpath="$perm_rpath $libdir" ;;
esac
fi
+ case $host in
+ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+ case :$dllsearchpath: in
+ *":$libdir:"*) ;;
+ *) dllsearchpath="$dllsearchpath:$libdir";;
+ esac
+ ;;
+ esac
done
# Substitute the hardcoded libdirs into the rpath.
if test -n "$hardcode_libdir_separator" &&
@@ -2426,7 +3191,7 @@
hardcode_libdirs="$libdir"
else
# Just accumulate the unique libdirs.
- case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in
+ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
*"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
;;
*)
@@ -2453,23 +3218,6 @@
fi
finalize_rpath="$rpath"
- output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
- if test "X$output_objdir" = "X$output"; then
- output_objdir="$objdir"
- else
- output_objdir="$output_objdir/$objdir"
- fi
-
- # Create the binary in the object directory, then wrap it.
- if test ! -d $output_objdir; then
- $show "$mkdir $output_objdir"
- $run $mkdir $output_objdir
- status=$?
- if test $status -ne 0 && test ! -d $output_objdir; then
- exit $status
- fi
- fi
-
if test -n "$libobjs" && test "$build_old_libs" = yes; then
# Transform all the library objects into standard objects.
compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
@@ -2486,7 +3234,7 @@
fi
if test -n "$dlsyms"; then
- case "$dlsyms" in
+ case $dlsyms in
"") ;;
*.c)
# Discover the nlist of each of the dlfiles.
@@ -2518,7 +3266,7 @@
test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
# Add our own program objects to the symbol list.
- progfiles=`$echo "X$objs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
for arg in $progfiles; do
$show "extracting global C symbols from \`$arg'"
$run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
@@ -2528,7 +3276,7 @@
$run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
$run eval '$mv "$nlist"T "$nlist"'
fi
-
+
if test -n "$export_symbols_regex"; then
$run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T'
$run eval '$mv "$nlist"T "$nlist"'
@@ -2580,9 +3328,9 @@
#undef lt_preloaded_symbols
#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
+# define lt_ptr void *
#else
-# define lt_ptr_t char *
+# define lt_ptr char *
# define const
#endif
@@ -2589,18 +3337,16 @@
/* The mapping between symbol names and symbols. */
const struct {
const char *name;
- lt_ptr_t address;
+ lt_ptr address;
}
lt_preloaded_symbols[] =
{\
"
- sed -n -e 's/^: \([^ ]*\) $/ {\"\1\", (lt_ptr_t) 0},/p' \
- -e 's/^. \([^ ]*\) \([^ ]*\)$/ {"\2", (lt_ptr_t) \&\2},/p' \
- < "$nlist" >> "$output_objdir/$dlsyms"
+ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
$echo >> "$output_objdir/$dlsyms" "\
- {0, (lt_ptr_t) 0}
+ {0, (lt_ptr) 0}
};
/* This works around a problem in FreeBSD linker */
@@ -2617,7 +3363,7 @@
fi
pic_flag_for_symtable=
- case "$host" in
+ case $host in
# compiling the symbol table file with pic_flag works around
# a FreeBSD bug that causes programs to crash when -lm is
# linked before any other PIC object. But we must not use
@@ -2662,7 +3408,7 @@
finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
fi
- if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then
+ if test $need_relink = no || test "$build_libtool_libs" != yes; then
# Replace the output file specification.
compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
link_command="$compile_command$compile_rpath"
@@ -2671,7 +3417,7 @@
$show "$link_command"
$run eval "$link_command"
status=$?
-
+
# Delete the generated files.
if test -n "$dlsyms"; then
$show "$rm $output_objdir/${outputname}S.${objext}"
@@ -2685,7 +3431,7 @@
# We should set the shlibpath_var
rpath=
for dir in $temp_rpath; do
- case "$dir" in
+ case $dir in
[\\/]* | [A-Za-z]:[\\/]*)
# Absolute path.
rpath="$rpath$dir:"
@@ -2727,11 +3473,24 @@
fi
fi
+ if test "$no_install" = yes; then
+ # We don't need to create a wrapper script.
+ link_command="$compile_var$compile_command$compile_rpath"
+ # Replace the output file specification.
+ link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+ # Delete the old output file.
+ $run $rm $output
+ # Link the executable and exit
+ $show "$link_command"
+ $run eval "$link_command" || exit $?
+ exit 0
+ fi
+
if test "$hardcode_action" = relink; then
# Fast installation is not supported
link_command="$compile_var$compile_command$compile_rpath"
relink_command="$finalize_var$finalize_command$finalize_rpath"
-
+
$echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
$echo "$modename: \`$output' will be relinked during installation" 1>&2
else
@@ -2751,7 +3510,7 @@
# Replace the output file specification.
link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
-
+
# Delete the old output files.
$run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
@@ -2763,12 +3522,24 @@
# Quote the relink command for shipping.
if test -n "$relink_command"; then
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+ relink_command="$var=\"$var_value\"; export $var; $relink_command"
+ fi
+ done
+ relink_command="cd `pwd`; $relink_command"
relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
fi
# Quote $echo for shipping.
if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
- case "$0" in
+ case $0 in
[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
*) qecho="$SHELL `pwd`/$0 --fallback-echo";;
esac
@@ -2784,6 +3555,11 @@
case $output in
*.exe) output=`echo $output|sed 's,.exe$,,'` ;;
esac
+ # test for cygwin because mv fails w/o .exe extensions
+ case $host in
+ *cygwin*) exeext=.exe ;;
+ *) exeext= ;;
+ esac
$rm $output
trap "$rm $output; exit 1" 1 2 15
@@ -2813,7 +3589,7 @@
# This environment variable determines our operation mode.
if test \"\$libtool_install_magic\" = \"$magic\"; then
# install mode needs the following variable:
- link_against_libtool_libs='$link_against_libtool_libs'
+ notinst_deplibs='$notinst_deplibs'
else
# When we are sourced in execute mode, \$file and \$echo are already set.
if test \"\$libtool_execute_magic\" != \"$magic\"; then
@@ -2846,7 +3622,7 @@
# If there was a directory component, then change thisdir.
if test \"x\$destdir\" != \"x\$file\"; then
case \"\$destdir\" in
- [\\/]* | [A-Za-z]:[\\/]*) thisdir=\"\$destdir\" ;;
+ [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
*) thisdir=\"\$thisdir/\$destdir\" ;;
esac
fi
@@ -2862,9 +3638,9 @@
if test "$fast_install" = yes; then
echo >> $output "\
- program=lt-'$outputname'
+ program=lt-'$outputname'$exeext
progdir=\"\$thisdir/$objdir\"
-
+
if test ! -f \"\$progdir/\$program\" || \\
{ file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\
test \"X\$file\" != \"X\$progdir/\$program\"; }; then
@@ -2881,8 +3657,9 @@
# relink executable if necessary
if test -n \"\$relink_command\"; then
- if (cd \"\$thisdir\" && eval \$relink_command); then :
+ if relink_command_output=\`eval \$relink_command 2>&1\`; then :
else
+ $echo \"\$relink_command_output\" >&2
$rm \"\$progdir/\$file\"
exit 1
fi
@@ -2931,9 +3708,9 @@
# Run the actual program with our arguments.
"
case $host in
- # win32 systems need to use the prog path for dll
- # lookup to work
- *-*-cygwin*)
+ # win32 systems need to use the prog path for dll
+ # lookup to work
+ *-*-cygwin* | *-*-pw32*)
$echo >> $output "\
exec \$progdir/\$program \${1+\"\$@\"}
"
@@ -2987,7 +3764,7 @@
oldobjs="$libobjs_save"
build_libtool_libs=no
else
- oldobjs="$objs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`
+ oldobjs="$objs$old_deplibs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`
fi
addlibs="$old_convenience"
fi
@@ -3003,11 +3780,11 @@
exit $status
fi
generated="$generated $gentop"
-
+
# Add in members from convenience archives.
for xlib in $addlibs; do
# Extract the objects.
- case "$xlib" in
+ case $xlib in
[\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
*) xabs=`pwd`"/$xlib" ;;
esac
@@ -3053,7 +3830,7 @@
eval cmds=\"$old_archive_cmds\"
fi
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ save_ifs="$IFS"; IFS='~'
for cmd in $cmds; do
IFS="$save_ifs"
$show "$cmd"
@@ -3068,19 +3845,26 @@
fi
# Now create the libtool archive.
- case "$output" in
+ case $output in
*.la)
old_library=
test "$build_old_libs" = yes && old_library="$libname.$libext"
$show "creating $output"
- if test -n "$xrpath"; then
- temp_xrpath=
- for libdir in $xrpath; do
- temp_xrpath="$temp_xrpath -R$libdir"
- done
- dependency_libs="$temp_xrpath $dependency_libs"
- fi
+ # Preserve any variables that may affect compiler behavior
+ for var in $variables_saved_for_relink; do
+ if eval test -z \"\${$var+set}\"; then
+ relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+ elif eval var_value=\$$var; test -z "$var_value"; then
+ relink_command="$var=; export $var; $relink_command"
+ else
+ var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+ relink_command="$var=\"$var_value\"; export $var; $relink_command"
+ fi
+ done
+ # Quote the link command for shipping.
+ relink_command="cd `pwd`; $SHELL $0 --mode=relink $libtool_args"
+ relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
# Only create the output if not a dry run.
if test -z "$run"; then
@@ -3090,8 +3874,52 @@
break
fi
output="$output_objdir/$outputname"i
+ # Replace all uninstalled libtool libraries with the installed ones
+ newdependency_libs=
+ for deplib in $dependency_libs; do
+ case $deplib in
+ *.la)
+ name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
+ eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+ exit 1
+ fi
+ newdependency_libs="$newdependency_libs $libdir/$name"
+ ;;
+ *) newdependency_libs="$newdependency_libs $deplib" ;;
+ esac
+ done
+ dependency_libs="$newdependency_libs"
+ newdlfiles=
+ for lib in $dlfiles; do
+ name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+ eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+ exit 1
+ fi
+ newdlfiles="$newdlfiles $libdir/$name"
+ done
+ dlfiles="$newdlfiles"
+ newdlprefiles=
+ for lib in $dlprefiles; do
+ name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+ eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+ if test -z "$libdir"; then
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+ exit 1
+ fi
+ newdlprefiles="$newdlprefiles $libdir/$name"
+ done
+ dlprefiles="$newdlprefiles"
fi
$rm $output
+ # place dlname in correct position for cygwin
+ tdlname=$dlname
+ case $host,$output,$installed,$module,$dlname in
+ *cygwin*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+ esac
$echo > $output "\
# $outputname - a libtool library file
# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
@@ -3100,7 +3928,7 @@
# It is necessary for linking the library.
# The name that we can dlopen(3).
-dlname='$dlname'
+dlname='$tdlname'
# Names of this library.
library_names='$library_names'
@@ -3119,9 +3947,16 @@
# Is this an already installed library?
installed=$installed
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
# Directory that this library needs to be installed in:
-libdir='$install_libdir'\
-"
+libdir='$install_libdir'"
+ if test "$installed" = no && test $need_relink = yes; then
+ $echo >> $output "\
+relink_command=\"$relink_command\""
+ fi
done
fi
@@ -3128,7 +3963,7 @@
# Do a symbolic link so that the libtool archive can be found in
# LD_LIBRARY_PATH before the program is installed.
$show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
- $run eval "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" || exit $?
+ $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
;;
esac
exit 0
@@ -3140,10 +3975,12 @@
# There may be an optional sh(1) argument at the beginning of
# install_prog (especially on Windows NT).
- if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh; then
+ if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+ # Allow the use of GNU shtool's install command.
+ $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
# Aesthetically quote it.
arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
- case "$arg" in
+ case $arg in
*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
arg="\"$arg\""
;;
@@ -3159,7 +3996,7 @@
# The real first argument should be the name of the installation program.
# Aesthetically quote it.
arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case "$arg" in
+ case $arg in
*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
arg="\"$arg\""
;;
@@ -3182,7 +4019,7 @@
continue
fi
- case "$arg" in
+ case $arg in
-d) isdir=yes ;;
-f) prev="-f" ;;
-g) prev="-g" ;;
@@ -3207,7 +4044,7 @@
# Aesthetically quote the argument.
arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
- case "$arg" in
+ case $arg in
*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
arg="\"$arg\""
;;
@@ -3258,11 +4095,11 @@
exit 1
fi
fi
- case "$destdir" in
+ case $destdir in
[\\/]* | [A-Za-z]:[\\/]*) ;;
*)
for file in $files; do
- case "$file" in
+ case $file in
*.lo) ;;
*)
$echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
@@ -3284,8 +4121,8 @@
for file in $files; do
# Do each installation.
- case "$file" in
- *.a | *.lib)
+ case $file in
+ *.$libext)
# Do the static libraries later.
staticlibs="$staticlibs $file"
;;
@@ -3301,8 +4138,9 @@
library_names=
old_library=
+ relink_command=
# If there is no directory component, then add one.
- case "$file" in
+ case $file in
*/* | *\\*) . $file ;;
*) . ./$file ;;
esac
@@ -3321,10 +4159,20 @@
esac
fi
- dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/"
+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
test "X$dir" = "X$file/" && dir=
dir="$dir$objdir"
+ if test -n "$relink_command"; then
+ $echo "$modename: warning: relinking \`$file'" 1>&2
+ $show "$relink_command"
+ if $run eval "$relink_command"; then :
+ else
+ $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+ continue
+ fi
+ fi
+
# See the names of the shared library.
set dummy $library_names
if test -n "$2"; then
@@ -3332,9 +4180,16 @@
shift
shift
+ srcname="$realname"
+ test -n "$relink_command" && srcname="$realname"T
+
# Install the shared library and build the symlinks.
- $show "$install_prog $dir/$realname $destdir/$realname"
- $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $?
+ $show "$install_prog $dir/$srcname $destdir/$realname"
+ $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
+ if test -n "$stripme" && test -n "$striplib"; then
+ $show "$striplib $destdir/$realname"
+ $run eval "$striplib $destdir/$realname" || exit $?
+ fi
if test $# -gt 0; then
# Delete the old symlinks, and create new ones.
@@ -3350,7 +4205,7 @@
# Do each command in the postinstall commands.
lib="$destdir/$realname"
eval cmds=\"$postinstall_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ save_ifs="$IFS"; IFS='~'
for cmd in $cmds; do
IFS="$save_ifs"
$show "$cmd"
@@ -3381,11 +4236,11 @@
fi
# Deduce the name of the destination old-style object file.
- case "$destfile" in
+ case $destfile in
*.lo)
staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
;;
- *.o | *.obj)
+ *.$objext)
staticdest="$destfile"
destfile=
;;
@@ -3424,33 +4279,33 @@
# Do a test to see if this is really a libtool program.
if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
- link_against_libtool_libs=
+ notinst_deplibs=
relink_command=
# If there is no directory component, then add one.
- case "$file" in
+ case $file in
*/* | *\\*) . $file ;;
*) . ./$file ;;
esac
# Check the variables that should have been set.
- if test -z "$link_against_libtool_libs"; then
+ if test -z "$notinst_deplibs"; then
$echo "$modename: invalid libtool wrapper script \`$file'" 1>&2
exit 1
fi
finalize=yes
- for lib in $link_against_libtool_libs; do
+ for lib in $notinst_deplibs; do
# Check to see that each library is installed.
libdir=
if test -f "$lib"; then
# If there is no directory component, then add one.
- case "$lib" in
+ case $lib in
*/* | *\\*) . $lib ;;
*) . ./$lib ;;
esac
fi
- libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`"
+ libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
if test -n "$libdir" && test ! -f "$libfile"; then
$echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
finalize=no
@@ -3457,6 +4312,13 @@
fi
done
+ relink_command=
+ # If there is no directory component, then add one.
+ case $file in
+ */* | *\\*) . $file ;;
+ *) . ./$file ;;
+ esac
+
outputname=
if test "$fast_install" = no && test -n "$relink_command"; then
if test "$finalize" = yes && test -z "$run"; then
@@ -3468,6 +4330,7 @@
$echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
continue
fi
+ file=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
outputname="$tmpdir/$file"
# Replace the output file specification.
relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
@@ -3489,6 +4352,23 @@
fi
fi
+ # remove .exe since cygwin /usr/bin/install will append another
+ # one anyways
+ case $install_prog,$host in
+ /usr/bin/install*,*cygwin*)
+ case $file:$destfile in
+ *.exe:*.exe)
+ # this is ok
+ ;;
+ *.exe:*)
+ destfile=$destfile.exe
+ ;;
+ *:*.exe)
+ destfile=`echo $destfile | sed -e 's,.exe$,,'`
+ ;;
+ esac
+ ;;
+ esac
$show "$install_prog$stripme $file $destfile"
$run eval "$install_prog\$stripme \$file \$destfile" || exit $?
test -n "$outputname" && ${rm}r "$tmpdir"
@@ -3505,9 +4385,14 @@
$show "$install_prog $file $oldlib"
$run eval "$install_prog \$file \$oldlib" || exit $?
+ if test -n "$stripme" && test -n "$striplib"; then
+ $show "$old_striplib $oldlib"
+ $run eval "$old_striplib $oldlib" || exit $?
+ fi
+
# Do each command in the postinstall commands.
eval cmds=\"$old_postinstall_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ save_ifs="$IFS"; IFS='~'
for cmd in $cmds; do
IFS="$save_ifs"
$show "$cmd"
@@ -3523,11 +4408,10 @@
if test -n "$current_libdirs"; then
# Maybe just do a dry run.
test -n "$run" && current_libdirs=" -n$current_libdirs"
- exec $SHELL $0 --finish$current_libdirs
- exit 1
+ exec_cmd='$SHELL $0 --finish$current_libdirs'
+ else
+ exit 0
fi
-
- exit 0
;;
# libtool finish mode
@@ -3546,7 +4430,7 @@
if test -n "$finish_cmds"; then
# Do each command in the finish commands.
eval cmds=\"$finish_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ save_ifs="$IFS"; IFS='~'
for cmd in $cmds; do
IFS="$save_ifs"
$show "$cmd"
@@ -3565,7 +4449,7 @@
fi
# Exit here if they wanted silent mode.
- test "$show" = : && exit 0
+ test "$show" = ":" && exit 0
echo "----------------------------------------------------------------------"
echo "Libraries have been installed in:"
@@ -3575,7 +4459,7 @@
echo
echo "If you ever happen to want to link against installed libraries"
echo "in a given directory, LIBDIR, you must either use libtool, and"
- echo "specify the full pathname of the library, or use \`-LLIBDIR'"
+ echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
echo "flag during linking and do at least one of the following:"
if test -n "$shlibpath_var"; then
echo " - add LIBDIR to the \`$shlibpath_var' environment variable"
@@ -3625,7 +4509,7 @@
fi
dir=
- case "$file" in
+ case $file in
*.la)
# Check to see that this really is a libtool archive.
if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
@@ -3640,7 +4524,7 @@
library_names=
# If there is no directory component, then add one.
- case "$file" in
+ case $file in
*/* | *\\*) . $file ;;
*) . ./$file ;;
esac
@@ -3695,13 +4579,13 @@
args=
for file
do
- case "$file" in
+ case $file in
-*) ;;
*)
# Do a test to see if this is really a libtool program.
if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
# If there is no directory component, then add one.
- case "$file" in
+ case $file in
*/* | *\\*) . $file ;;
*) . ./$file ;;
esac
@@ -3718,8 +4602,8 @@
if test -z "$run"; then
if test -n "$shlibpath_var"; then
- # Export the shlibpath_var.
- eval "export $shlibpath_var"
+ # Export the shlibpath_var.
+ eval "export $shlibpath_var"
fi
# Restore saved enviroment variables
@@ -3730,16 +4614,13 @@
LANG="$save_LANG"; export LANG
fi
- # Now actually exec the command.
- eval "exec \$cmd$args"
-
- $echo "$modename: cannot exec \$cmd$args"
- exit 1
+ # Now prepare to actually exec the command.
+ exec_cmd='"$cmd"$args'
else
# Display what would be done.
if test -n "$shlibpath_var"; then
- eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
- $echo "export $shlibpath_var"
+ eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
+ $echo "export $shlibpath_var"
fi
$echo "$cmd$args"
exit 0
@@ -3746,15 +4627,22 @@
fi
;;
- # libtool uninstall mode
- uninstall)
- modename="$modename: uninstall"
+ # libtool clean and uninstall mode
+ clean | uninstall)
+ modename="$modename: $mode"
rm="$nonopt"
files=
+ rmforce=
+ exit_status=0
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic="$magic"
+
for arg
do
- case "$arg" in
+ case $arg in
+ -f) rm="$rm $arg"; rmforce=yes ;;
-*) rm="$rm $arg" ;;
*) files="$files $arg" ;;
esac
@@ -3766,14 +4654,42 @@
exit 1
fi
+ rmdirs=
+
for file in $files; do
dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
- test "X$dir" = "X$file" && dir=.
+ if test "X$dir" = "X$file"; then
+ dir=.
+ objdir="$objdir"
+ else
+ objdir="$dir/$objdir"
+ fi
name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+ test $mode = uninstall && objdir="$dir"
+ # Remember objdir for removal later, being careful to avoid duplicates
+ if test $mode = clean; then
+ case " $rmdirs " in
+ *" $objdir "*) ;;
+ *) rmdirs="$rmdirs $objdir" ;;
+ esac
+ fi
+
+ # Don't error if the file doesn't exist and rm -f was used.
+ if (test -L "$file") >/dev/null 2>&1 \
+ || (test -h "$file") >/dev/null 2>&1 \
+ || test -f "$file"; then
+ :
+ elif test -d "$file"; then
+ exit_status=1
+ continue
+ elif test "$rmforce" = yes; then
+ continue
+ fi
+
rmfiles="$file"
- case "$name" in
+ case $name in
*.la)
# Possibly a libtool archive, so verify it.
if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
@@ -3781,38 +4697,43 @@
# Delete the libtool libraries and symlinks.
for n in $library_names; do
- rmfiles="$rmfiles $dir/$n"
+ rmfiles="$rmfiles $objdir/$n"
done
- test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library"
+ test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+ test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
- $show "$rm $rmfiles"
- $run $rm $rmfiles
-
- if test -n "$library_names"; then
- # Do each command in the postuninstall commands.
- eval cmds=\"$postuninstall_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
+ if test $mode = uninstall; then
+ if test -n "$library_names"; then
+ # Do each command in the postuninstall commands.
+ eval cmds=\"$postuninstall_cmds\"
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd"
+ if test $? != 0 && test "$rmforce" != yes; then
+ exit_status=1
+ fi
+ done
IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd"
- done
- IFS="$save_ifs"
- fi
+ fi
- if test -n "$old_library"; then
- # Do each command in the old_postuninstall commands.
- eval cmds=\"$old_postuninstall_cmds\"
- IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
- for cmd in $cmds; do
+ if test -n "$old_library"; then
+ # Do each command in the old_postuninstall commands.
+ eval cmds=\"$old_postuninstall_cmds\"
+ save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd"
+ if test $? != 0 && test "$rmforce" != yes; then
+ exit_status=1
+ fi
+ done
IFS="$save_ifs"
- $show "$cmd"
- $run eval "$cmd"
- done
- IFS="$save_ifs"
+ fi
+ # FIXME: should reinstall the best remaining shared library.
fi
-
- # FIXME: should reinstall the best remaining shared library.
fi
;;
@@ -3821,17 +4742,35 @@
oldobj=`$echo "X$name" | $Xsed -e "$lo2o"`
rmfiles="$rmfiles $dir/$oldobj"
fi
- $show "$rm $rmfiles"
- $run $rm $rmfiles
;;
*)
- $show "$rm $rmfiles"
- $run $rm $rmfiles
+ # Do a test to see if this is a libtool program.
+ if test $mode = clean &&
+ (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+ relink_command=
+ . $dir/$file
+
+ rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+ if test "$fast_install" = yes && test -n "$relink_command"; then
+ rmfiles="$rmfiles $objdir/lt-$name"
+ fi
+ fi
;;
esac
+ $show "$rm $rmfiles"
+ $run $rm $rmfiles || exit_status=1
done
- exit 0
+
+ # Try to remove the ${objdir}s in the directories where we deleted files
+ for dir in $rmdirs; do
+ if test -d "$dir"; then
+ $show "rmdir $dir"
+ $run rmdir $dir >/dev/null 2>&1
+ fi
+ done
+
+ exit $exit_status
;;
"")
@@ -3841,13 +4780,20 @@
;;
esac
- $echo "$modename: invalid operation mode \`$mode'" 1>&2
- $echo "$generic_help" 1>&2
- exit 1
+ if test -z "$exec_cmd"; then
+ $echo "$modename: invalid operation mode \`$mode'" 1>&2
+ $echo "$generic_help" 1>&2
+ exit 1
+ fi
fi # test -z "$show_help"
+if test -n "$exec_cmd"; then
+ eval exec $exec_cmd
+ exit 1
+fi
+
# We need to display help for each of the modes.
-case "$mode" in
+case $mode in
"") $echo \
"Usage: $modename [OPTION]... [MODE-ARG]...
@@ -3866,6 +4812,7 @@
MODE must be one of the following:
+ clean remove files from the build directory
compile compile a source file into a libtool object
execute automatically set library path, then run a program
finish complete the installation of libtool libraries
@@ -3878,6 +4825,20 @@
exit 0
;;
+clean)
+ $echo \
+"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+ ;;
+
compile)
$echo \
"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
@@ -3887,6 +4848,8 @@
This mode accepts the following additional options:
-o OUTPUT-FILE set the output file name to OUTPUT-FILE
+ -prefer-pic try to building PIC objects only
+ -prefer-non-pic try to building non-PIC objects only
-static always build a \`.o' file suitable for static linking
COMPILE-COMMAND is a command to be used in creating a \`standard' object file
@@ -3966,6 +4929,8 @@
-LLIBDIR search LIBDIR for required installed libraries
-lNAME OUTPUT-FILE requires the installed library libNAME
-module build a library that can dlopened
+ -no-fast-install disable the fast-install mode
+ -no-install link a not-installable executable
-no-undefined declare that a library does not refer to external symbols
-o OUTPUT-FILE create OUTPUT-FILE from the specified objects
-release RELEASE specify package release information
--- a/common/libsndfile/mkinstalldirs
+++ b/common/libsndfile/mkinstalldirs
@@ -4,7 +4,7 @@
# Created: 1993-05-16
# Public domain
-# $Id: mkinstalldirs,v 1.1 2002/01/14 19:15:51 menno Exp $
+# $Id: mkinstalldirs,v 1.2 2002/07/25 12:22:11 menno Exp $
errstatus=0
--- a/common/libsndfile/reconf
+++ b/common/libsndfile/reconf
@@ -2,14 +2,32 @@
rm -f config.cache
-if [ -d m4 ]; then
- echo "Looking in m4 directory."
- aclocal -I m4
+if [ -d $HOME/Proj/M4 ]; then
+
+ rm -f acinclude.m4.new
+ touch acinclude.m4.new
+ cat $HOME/Proj/M4/extra_largefile.m4 >>acinclude.m4.new
+ cat $HOME/Proj/M4/endian.m4 >>acinclude.m4.new
+ cat $HOME/Proj/M4/lrint.m4 >>acinclude.m4.new
+ cat $HOME/Proj/M4/lrintf.m4 >>acinclude.m4.new
+
+ cmp_data=`cmp acinclude.m4 acinclude.m4.new`
+ if [ x"$cmp_data" = "x" ]; then
+ echo "File acinclude.m4 unchanged."
+ else
+ echo "Updating acinclude.m4"
+ mv -f acinclude.m4.new acinclude.m4
+ fi
+
+ echo "Looking in $HOME/Proj/M4 directory."
+ aclocal -I $HOME/Proj/M4
else
aclocal
fi
-
+
+sed s/AM_PROG_INSTALL/AC_PROG_INSTALL/ aclocal.m4 >aclocal.m4.bak
+mv -f aclocal.m4.bak aclocal.m4
+
autoconf
-autoheader
-automake -a
+autoreconf -i --force --foreign
exit
--- /dev/null
+++ b/common/libsndfile/sndfile.pc.in
@@ -1,0 +1,11 @@
+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 -lm
+Cflags: @ac_cv_sys_largefile_CFLAGS@ -I${includedir}
--- a/common/libsndfile/src/G72x/Makefile.am
+++ b/common/libsndfile/src/G72x/Makefile.am
@@ -6,9 +6,17 @@
noinst_HEADERS = g72x.h private.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 $(CFILES)
+g72x_test_LDADD = -lm
+
+check: g72x_test
+ ./g72x_test all
# Disable autoheader.
AUTOHEADER=echo
--- a/common/libsndfile/src/G72x/Makefile.in
+++ b/common/libsndfile/src/G72x/Makefile.in
@@ -68,14 +68,23 @@
AS = @AS@
CC = @CC@
DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+EXEEXT = @EXEEXT@
+GETCONF = @GETCONF@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
MAKEINFO = @MAKEINFO@
OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_SPECIFIC_INCLUDES = @OS_SPECIFIC_INCLUDES@
+OS_SPECIFIC_LINKS = @OS_SPECIFIC_LINKS@
PACKAGE = @PACKAGE@
RANLIB = @RANLIB@
SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+STRIP = @STRIP@
VERSION = @VERSION@
+ac_cv_sys_largefile_CFLAGS = @ac_cv_sys_largefile_CFLAGS@
+autogen = @autogen@
subdirs = @subdirs@
EXTRA_DIST = README README.original ChangeLog
@@ -83,10 +92,15 @@
noinst_HEADERS = g72x.h private.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 $(CFILES)
+g72x_test_LDADD = -lm
+
# Disable autoheader.
AUTOHEADER = echo
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
@@ -102,6 +116,13 @@
libg72x_la_LDFLAGS =
libg72x_la_LIBADD =
libg72x_la_OBJECTS = g72x.lo g721.lo g723_16.lo g723_24.lo g723_40.lo
+noinst_PROGRAMS = g72x_test$(EXEEXT)
+PROGRAMS = $(noinst_PROGRAMS)
+
+g72x_test_OBJECTS = g72x_test.$(OBJEXT) g72x.$(OBJEXT) g721.$(OBJEXT) \
+g723_16.$(OBJEXT) g723_24.$(OBJEXT) g723_40.$(OBJEXT)
+g72x_test_DEPENDENCIES =
+g72x_test_LDFLAGS =
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -116,14 +137,14 @@
TAR = tar
GZIP_ENV = --best
-SOURCES = $(libg72x_la_SOURCES)
-OBJECTS = $(libg72x_la_OBJECTS)
+SOURCES = $(libg72x_la_SOURCES) $(g72x_test_SOURCES)
+OBJECTS = $(libg72x_la_OBJECTS) $(g72x_test_OBJECTS)
all: all-redirect
.SUFFIXES:
-.SUFFIXES: .S .c .lo .o .s
+.SUFFIXES: .S .c .lo .o .obj .s
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
- cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps src/G72x/Makefile
+ cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps src/G72x/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \
@@ -142,6 +163,11 @@
.c.o:
$(COMPILE) -c $<
+# FIXME: We should only use cygpath when building on Windows,
+# and only if it is available.
+.c.obj:
+ $(COMPILE) -c `cygpath -w $<`
+
.s.o:
$(COMPILE) -c $<
@@ -150,6 +176,7 @@
mostlyclean-compile:
-rm -f *.o core *.core
+ -rm -f *.$(OBJEXT)
clean-compile:
@@ -180,6 +207,19 @@
libg72x.la: $(libg72x_la_OBJECTS) $(libg72x_la_DEPENDENCIES)
$(LINK) $(libg72x_la_LDFLAGS) $(libg72x_la_OBJECTS) $(libg72x_la_LIBADD) $(LIBS)
+mostlyclean-noinstPROGRAMS:
+
+clean-noinstPROGRAMS:
+ -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
+
+distclean-noinstPROGRAMS:
+
+maintainer-clean-noinstPROGRAMS:
+
+g72x_test$(EXEEXT): $(g72x_test_OBJECTS) $(g72x_test_DEPENDENCIES)
+ @rm -f g72x_test$(EXEEXT)
+ $(LINK) $(g72x_test_LDFLAGS) $(g72x_test_OBJECTS) $(g72x_test_LDADD) $(LIBS)
+
tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP)
@@ -224,12 +264,6 @@
|| cp -p $$d/$$file $(distdir)/$$file || :; \
fi; \
done
-g721.lo g721.o : g721.c g72x.h private.h
-g723_16.lo g723_16.o : g723_16.c g72x.h private.h
-g723_24.lo g723_24.o : g723_24.c g72x.h private.h
-g723_40.lo g723_40.o : g723_40.c g72x.h private.h
-g72x.lo g72x.o : g72x.c g72x.h private.h
-
info-am:
info: info-am
dvi-am:
@@ -249,7 +283,7 @@
install: install-am
uninstall-am:
uninstall: uninstall-am
-all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS)
all-redirect: all-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
@@ -266,19 +300,20 @@
maintainer-clean-generic:
mostlyclean-am: mostlyclean-noinstLTLIBRARIES mostlyclean-compile \
- mostlyclean-libtool mostlyclean-tags \
- mostlyclean-generic
+ mostlyclean-libtool mostlyclean-noinstPROGRAMS \
+ mostlyclean-tags mostlyclean-generic
mostlyclean: mostlyclean-am
clean-am: clean-noinstLTLIBRARIES clean-compile clean-libtool \
- clean-tags clean-generic mostlyclean-am
+ clean-noinstPROGRAMS clean-tags clean-generic \
+ mostlyclean-am
clean: clean-am
distclean-am: distclean-noinstLTLIBRARIES distclean-compile \
- distclean-libtool distclean-tags distclean-generic \
- clean-am
+ distclean-libtool distclean-noinstPROGRAMS \
+ distclean-tags distclean-generic clean-am
-rm -f libtool
distclean: distclean-am
@@ -285,8 +320,8 @@
maintainer-clean-am: maintainer-clean-noinstLTLIBRARIES \
maintainer-clean-compile maintainer-clean-libtool \
- maintainer-clean-tags maintainer-clean-generic \
- distclean-am
+ maintainer-clean-noinstPROGRAMS maintainer-clean-tags \
+ maintainer-clean-generic distclean-am
@echo "This command is intended for maintainers to use;"
@echo "it deletes files that may require special tools to rebuild."
@@ -296,14 +331,19 @@
clean-noinstLTLIBRARIES maintainer-clean-noinstLTLIBRARIES \
mostlyclean-compile distclean-compile clean-compile \
maintainer-clean-compile mostlyclean-libtool distclean-libtool \
-clean-libtool maintainer-clean-libtool tags mostlyclean-tags \
-distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
-dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
-install-exec install-data-am install-data install-am install \
-uninstall-am uninstall all-redirect all-am all installdirs \
-mostlyclean-generic distclean-generic clean-generic \
-maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+clean-libtool maintainer-clean-libtool mostlyclean-noinstPROGRAMS \
+distclean-noinstPROGRAMS clean-noinstPROGRAMS \
+maintainer-clean-noinstPROGRAMS tags mostlyclean-tags distclean-tags \
+clean-tags maintainer-clean-tags distdir info-am info dvi-am dvi check \
+check-am installcheck-am installcheck install-exec-am install-exec \
+install-data-am install-data install-am install uninstall-am uninstall \
+all-redirect all-am all installdirs mostlyclean-generic \
+distclean-generic clean-generic maintainer-clean-generic clean \
+mostlyclean distclean maintainer-clean
+
+check: g72x_test
+ ./g72x_test all
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
--- a/common/libsndfile/src/G72x/g72x.c
+++ b/common/libsndfile/src/G72x/g72x.c
@@ -81,7 +81,15 @@
(anexp >= 0) ? anmag >> anexp : anmag << -anexp;
wanexp = anexp + ((srn >> 6) & 0xF) - 13;
- wanmant = (anmant * (srn & 077) + 0x30) >> 4;
+ /*
+ ** The original was :
+ ** wanmant = (anmant * (srn & 0x37) + 0x30) >> 4 ;
+ ** but could see no valid reason for the + 0x30.
+ ** Removed it and it improved the SNR of the codec.
+ */
+
+ wanmant = (anmant * (srn & 0x37)) >> 4 ;
+
retval = (wanexp >= 0) ? ((wanmant << wanexp) & 0x7FFF) :
(wanmant >> -wanexp);
@@ -95,7 +103,6 @@
* pointed to by 'state_ptr'.
* All the initial state values are specified in the CCITT G.721 document.
*/
-static
void private_init_state (G72x_STATE *state_ptr)
{
int cnta;
@@ -217,7 +224,6 @@
return 0 ;
} /* g72x_writer_init */
-static
int unpack_bytes (G72x_DATA *data, int bits)
{ unsigned int in_buffer = 0 ;
unsigned char in_byte ;
@@ -252,7 +258,6 @@
return 0 ;
} /* g72x_decode_block */
-static
int pack_bytes (G72x_DATA *data, int bits)
{
unsigned int out_buffer = 0 ;
@@ -617,5 +622,7 @@
state_ptr->ap += (0x200 - state_ptr->ap) >> 4;
else
state_ptr->ap += (-state_ptr->ap) >> 4;
-}
+
+ return ;
+} /* update */
--- a/common/libsndfile/src/G72x/g72x.h
+++ b/common/libsndfile/src/G72x/g72x.h
@@ -18,7 +18,7 @@
/*
** 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
+** all the original definitions and function prototypes that were in the file
** of this name have been moved to private.h.
*/
@@ -41,22 +41,13 @@
G723_24_BITS_PER_SAMPLE = 3,
G721_32_BITS_PER_SAMPLE = 4,
G721_40_BITS_PER_SAMPLE = 5,
-
- G723_16_MIN_BYTES = 1,
- G723_24_MIN_BYTES = 3,
- G721_32_MIN_BYTES = 1,
- G721_40_MIN_BYTES = 5
-} ;
-enum
-{ G723_16_SAMPLES_PER_BLOCK = G72x_BLOCK_SIZE,
+ 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),
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)
-} ;
+ G721_40_SAMPLES_PER_BLOCK = G721_40_BITS_PER_SAMPLE * (G72x_BLOCK_SIZE / G721_40_BITS_PER_SAMPLE),
-enum
-{ G723_16_BYTES_PER_BLOCK = (G723_16_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8,
+ 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,
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
--- /dev/null
+++ b/common/libsndfile/src/G72x/g72x_test.c
@@ -1,0 +1,215 @@
+/*
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
+**
+** 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 "private.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) ;
+
+static double orig_buffer [BUFFER_SIZE] ;
+static short orig [BUFFER_SIZE] ;
+static short data [BUFFER_SIZE] ;
+
+
+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)
+{ 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 *data, double scale, int datalen)
+{ int k, ramplen ;
+ double amp = 0.0 ;
+
+ ramplen = DECAY_COUNT ;
+
+ 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 */
+
+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 */
+
--- a/common/libsndfile/src/G72x/private.h
+++ b/common/libsndfile/src/G72x/private.h
@@ -79,15 +79,15 @@
-int predictor_zero(G72x_STATE *state_ptr);
+int predictor_zero (G72x_STATE *state_ptr);
-int predictor_pole(G72x_STATE *state_ptr);
+int predictor_pole (G72x_STATE *state_ptr);
-int step_size(G72x_STATE *state_ptr);
+int step_size (G72x_STATE *state_ptr);
-int quantize(int d, int y, short *table, int size);
+int quantize (int d, int y, short *table, int size);
-int reconstruct(int sign, int dqln, int y);
+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);
@@ -103,6 +103,9 @@
int g723_40_encoder (int sample, G72x_STATE *state_ptr);
int g723_40_decoder (int code, G72x_STATE *state_ptr);
+int unpack_bytes (G72x_DATA *data, int bits) ;
+int pack_bytes (G72x_DATA *data, int bits) ;
+void private_init_state (G72x_STATE *state_ptr) ;
#endif /* G72X_PRIVATE_H */
--- a/common/libsndfile/src/GSM610/ChangeLog
+++ b/common/libsndfile/src/GSM610/ChangeLog
@@ -1,20 +1,36 @@
-2001-09-16 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2002-06-08 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
+ * 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 zipworld DOT com DOT au>
+
+ * *.[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 zipworld DOT com DOT au>
+
* code.c
- Added #includes fro string.h and stdlib.h.
+ Added #includes for string.h and stdlib.h.
-2000-10-27 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2000-10-27 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* 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 zip DOT com DOT au>
+2000-02-29 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* private.h
Added #defines to emulate normal compile time options.
-2000-02-28 Erik de Castro Lopo <erikd AT zip DOT com DOT au>
+2000-02-28 Erik de Castro Lopo <erikd AT zipworld DOT com DOT au>
* everthing
Created this directory and copied files from libgsm.
--- a/common/libsndfile/src/GSM610/Makefile.am
+++ b/common/libsndfile/src/GSM610/Makefile.am
@@ -3,7 +3,7 @@
EXTRA_DIST = README COPYRIGHT ChangeLog
-noinst_HEADERS = gsm.h config.h private.h proto.h unproto.h
+noinst_HEADERS = gsm.h config.h private.h
noinst_LTLIBRARIES = libgsm.la
CFILES = add.c decode.c gsm_decode.c gsm_encode.c long_term.c preprocess.c \
--- a/common/libsndfile/src/GSM610/Makefile.in
+++ b/common/libsndfile/src/GSM610/Makefile.in
@@ -68,19 +68,28 @@
AS = @AS@
CC = @CC@
DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+EXEEXT = @EXEEXT@
+GETCONF = @GETCONF@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
MAKEINFO = @MAKEINFO@
OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_SPECIFIC_INCLUDES = @OS_SPECIFIC_INCLUDES@
+OS_SPECIFIC_LINKS = @OS_SPECIFIC_LINKS@
PACKAGE = @PACKAGE@
RANLIB = @RANLIB@
SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+STRIP = @STRIP@
VERSION = @VERSION@
+ac_cv_sys_largefile_CFLAGS = @ac_cv_sys_largefile_CFLAGS@
+autogen = @autogen@
subdirs = @subdirs@
EXTRA_DIST = README COPYRIGHT ChangeLog
-noinst_HEADERS = gsm.h config.h private.h proto.h unproto.h
+noinst_HEADERS = gsm.h config.h private.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
@@ -124,9 +133,9 @@
all: all-redirect
.SUFFIXES:
-.SUFFIXES: .S .c .lo .o .s
+.SUFFIXES: .S .c .lo .o .obj .s
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
- cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps src/GSM610/Makefile
+ cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps src/GSM610/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \
@@ -145,6 +154,11 @@
.c.o:
$(COMPILE) -c $<
+# FIXME: We should only use cygpath when building on Windows,
+# and only if it is available.
+.c.obj:
+ $(COMPILE) -c `cygpath -w $<`
+
.s.o:
$(COMPILE) -c $<
@@ -153,6 +167,7 @@
mostlyclean-compile:
-rm -f *.o core *.core
+ -rm -f *.$(OBJEXT)
clean-compile:
@@ -227,27 +242,6 @@
|| cp -p $$d/$$file $(distdir)/$$file || :; \
fi; \
done
-add.lo add.o : add.c private.h proto.h unproto.h gsm.h
-code.lo code.o : code.c config.h private.h proto.h unproto.h gsm.h
-decode.lo decode.o : decode.c private.h proto.h unproto.h gsm.h
-gsm_create.lo gsm_create.o : gsm_create.c config.h gsm.h private.h \
- proto.h unproto.h
-gsm_decode.lo gsm_decode.o : gsm_decode.c private.h proto.h unproto.h \
- gsm.h
-gsm_destroy.lo gsm_destroy.o : gsm_destroy.c gsm.h config.h proto.h
-gsm_encode.lo gsm_encode.o : gsm_encode.c private.h proto.h unproto.h \
- gsm.h
-gsm_option.lo gsm_option.o : gsm_option.c private.h proto.h unproto.h \
- gsm.h
-long_term.lo long_term.o : long_term.c private.h proto.h unproto.h gsm.h
-lpc.lo lpc.o : lpc.c private.h proto.h unproto.h gsm.h
-preprocess.lo preprocess.o : preprocess.c private.h proto.h unproto.h \
- gsm.h
-rpe.lo rpe.o : rpe.c private.h proto.h unproto.h gsm.h
-short_term.lo short_term.o : short_term.c private.h proto.h unproto.h \
- gsm.h
-table.lo table.o : table.c private.h proto.h unproto.h gsm.h
-
info-am:
info: info-am
dvi-am:
--- a/common/libsndfile/src/GSM610/add.c
+++ b/common/libsndfile/src/GSM610/add.c
@@ -4,7 +4,7 @@
* details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
*/
-/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/add.c,v 1.1 2002/01/14 19:15:54 menno Exp $ */
+/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/add.c,v 1.2 2002/07/25 12:22:13 menno Exp $ */
/*
* See private.h for the more commonly used macro versions.
@@ -15,30 +15,29 @@
#include "private.h"
#include "gsm.h"
-#include "proto.h"
#define saturate(x) \
((x) < MIN_WORD ? MIN_WORD : (x) > MAX_WORD ? MAX_WORD: (x))
-word gsm_add P2((a,b), word a, word b)
+word gsm_add ( word a, word b)
{
longword sum = (longword)a + (longword)b;
return saturate(sum);
}
-word gsm_sub P2((a,b), word a, word b)
+word gsm_sub ( word a, word b)
{
longword diff = (longword)a - (longword)b;
return saturate(diff);
}
-word gsm_mult P2((a,b), word a, word b)
+word gsm_mult ( word a, word b)
{
if (a == MIN_WORD && b == MIN_WORD) return MAX_WORD;
else return SASR( (longword)a * (longword)b, 15 );
}
-word gsm_mult_r P2((a,b), word a, word b)
+word gsm_mult_r ( word a, word b)
{
if (b == MIN_WORD && a == MIN_WORD) return MAX_WORD;
else {
@@ -48,18 +47,18 @@
}
}
-word gsm_abs P1((a), word a)
+word gsm_abs (word a)
{
return a < 0 ? (a == MIN_WORD ? MAX_WORD : -a) : a;
}
-longword gsm_L_mult P2((a,b),word a, word b)
+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 P2((a,b), longword a, longword b)
+longword gsm_L_add ( longword a, longword b)
{
if (a < 0) {
if (b >= 0) return a + b;
@@ -75,7 +74,7 @@
}
}
-longword gsm_L_sub P2((a,b), longword a, longword b)
+longword gsm_L_sub ( longword a, longword b)
{
if (a >= 0) {
if (b >= 0) return a - b;
@@ -114,7 +113,7 @@
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
-word gsm_norm P1((a), longword a )
+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
@@ -219,7 +218,7 @@
* >= num > 0
*/
-word gsm_div P2((num,denum), word num, word denum)
+word gsm_div (word num, word denum)
{
longword L_num = num;
longword L_denum = denum;
--- a/common/libsndfile/src/GSM610/code.c
+++ b/common/libsndfile/src/GSM610/code.c
@@ -4,7 +4,7 @@
* details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
*/
-/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/code.c,v 1.1 2002/01/14 19:15:54 menno Exp $ */
+/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/code.c,v 1.2 2002/07/25 12:22:13 menno Exp $ */
@@ -16,15 +16,14 @@
#include "private.h"
#include "gsm.h"
-#include "proto.h"
/*
* 4.2 FIXED POINT IMPLEMENTATION OF THE RPE-LTP CODER
*/
-void Gsm_Coder P8((S,s,LARc,Nc,bc,Mc,xmaxc,xMc),
+void Gsm_Coder (
- struct gsm_state * S,
+ struct gsm_state * State,
word * s, /* [0..159] samples IN */
@@ -54,29 +53,27 @@
)
{
int k;
- word * dp = S->dp0 + 120; /* [ -120...-1 ] */
+ word * dp = State->dp0 + 120; /* [ -120...-1 ] */
word * dpp = dp; /* [ 0...39 ] */
- static word e[50];
-
word so[160];
- Gsm_Preprocess (S, s, so);
- Gsm_LPC_Analysis (S, so, LARc);
- Gsm_Short_Term_Analysis_Filter (S, LARc, so);
+ 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 ( S,
+ Gsm_Long_Term_Predictor ( State,
so+k*40, /* d [0..39] IN */
dp, /* dp [-120..-1] IN */
- e + 5, /* e [0..39] OUT */
+ State->e + 5, /* e [0..39] OUT */
dpp, /* dpp [0..39] OUT */
Nc++,
bc++);
- Gsm_RPE_Encoding ( S,
- e + 5, /* e ][0..39][ IN/OUT */
+ Gsm_RPE_Encoding ( /*-S,-*/
+ State->e + 5, /* e ][0..39][ IN/OUT */
xmaxc++, Mc++, xMc );
/*
* Gsm_Update_of_reconstructed_short_time_residual_signal
@@ -86,12 +83,12 @@
{ register int i;
register longword ltmp;
for (i = 0; i <= 39; i++)
- dp[ i ] = GSM_ADD( e[5 + i], dpp[i] );
+ dp[ i ] = GSM_ADD( State->e[5 + i], dpp[i] );
}
dp += 40;
dpp += 40;
}
- (void)memcpy( (char *)S->dp0, (char *)(S->dp0 + 160),
- 120 * sizeof(*S->dp0) );
+ (void)memcpy( (char *)State->dp0, (char *)(State->dp0 + 160),
+ 120 * sizeof(*State->dp0) );
}
--- a/common/libsndfile/src/GSM610/config.h
+++ b/common/libsndfile/src/GSM610/config.h
@@ -4,7 +4,7 @@
* details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
*/
-/*$Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/config.h,v 1.1 2002/01/14 19:15:54 menno Exp $*/
+/*$Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/config.h,v 1.2 2002/07/25 12:22:13 menno Exp $*/
#ifndef CONFIG_H
#define CONFIG_H
--- a/common/libsndfile/src/GSM610/decode.c
+++ b/common/libsndfile/src/GSM610/decode.c
@@ -4,19 +4,18 @@
* details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
*/
-/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/decode.c,v 1.1 2002/01/14 19:15:54 menno Exp $ */
+/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/decode.c,v 1.2 2002/07/25 12:22:13 menno Exp $ */
#include <stdio.h>
#include "private.h"
#include "gsm.h"
-#include "proto.h"
/*
* 4.3 FIXED POINT IMPLEMENTATION OF THE RPE-LTP DECODER
*/
-static void Postprocessing P2((S,s),
+static void Postprocessing (
struct gsm_state * S,
register word * s)
{
@@ -33,7 +32,7 @@
S->msr = msr;
}
-void Gsm_Decoder P8((S,LARcr, Ncr,bcr,Mcr,xmaxcr,xMcr,s),
+void Gsm_Decoder (
struct gsm_state * S,
word * LARcr, /* [0..7] IN */
@@ -52,7 +51,7 @@
for (j=0; j <= 3; j++, xmaxcr++, bcr++, Ncr++, Mcr++, xMcr += 13) {
- Gsm_RPE_Decoding( S, *xmaxcr, *Mcr, xMcr, erp );
+ 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 ];
--- a/common/libsndfile/src/GSM610/gsm.h
+++ b/common/libsndfile/src/GSM610/gsm.h
@@ -4,48 +4,27 @@
* details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
*/
-/*$Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/gsm.h,v 1.1 2002/01/14 19:15:54 menno Exp $*/
+/*$Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/gsm.h,v 1.2 2002/07/25 12:22:13 menno Exp $*/
#ifndef GSM_H
#define GSM_H
-#ifdef __cplusplus
-# define NeedFunctionPrototypes 1
-#endif
+#include <stdio.h> /* for FILE * */
-#if __STDC__
-# define NeedFunctionPrototypes 1
-#endif
-
-#ifdef _NO_PROTO
-# undef NeedFunctionPrototypes
-#endif
-
-#ifdef NeedFunctionPrototypes
-# include <stdio.h> /* for FILE * */
-#endif
-
-#undef GSM_P
-#if NeedFunctionPrototypes
-# define GSM_P( protos ) protos
-#else
-# define GSM_P( protos ) ( /* protos */ )
-#endif
-
/*
* Interface
*/
typedef struct gsm_state * gsm;
-typedef short gsm_signal; /* signed 16 bit */
+typedef short gsm_signal; /* signed 16 bit */
typedef unsigned char gsm_byte;
-typedef gsm_byte gsm_frame[33]; /* 33 * 8 bits */
+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_MINOR 0
+#define GSM_MAJOR 1
#define GSM_OPT_VERBOSE 1
#define GSM_OPT_FAST 2
@@ -54,18 +33,20 @@
#define GSM_OPT_FRAME_INDEX 5
#define GSM_OPT_FRAME_CHAIN 6
-extern gsm gsm_create GSM_P((void));
-extern void gsm_destroy GSM_P((gsm));
+gsm gsm_create (void);
-extern int gsm_print GSM_P((FILE *, gsm, gsm_byte *));
-extern int gsm_option GSM_P((gsm, int, int *));
+/* Added for libsndfile : May 6, 2002 */
+void gsm_init (gsm);
-extern void gsm_encode GSM_P((gsm, gsm_signal *, gsm_byte *));
-extern int gsm_decode GSM_P((gsm, gsm_byte *, gsm_signal *));
+void gsm_destroy (gsm);
-extern int gsm_explode GSM_P((gsm, gsm_byte *, gsm_signal *));
-extern void gsm_implode GSM_P((gsm, gsm_signal *, gsm_byte *));
+int gsm_print (FILE *, gsm, gsm_byte *);
+int gsm_option (gsm, int, int *);
-#undef GSM_P
+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 */
--- a/common/libsndfile/src/GSM610/gsm_create.c
+++ b/common/libsndfile/src/GSM610/gsm_create.c
@@ -4,42 +4,35 @@
* details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
*/
-static char const ident[] = "$Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/gsm_create.c,v 1.1 2002/01/14 19:15:54 menno Exp $";
+static char const ident[] = "$Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/gsm_create.c,v 1.2 2002/07/25 12:22:13 menno Exp $";
#include "config.h"
-#ifdef HAS_STRING_H
+#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
-#else
-# include "proto.h"
- extern char * memset P((char *, int, int));
-#endif
-#ifdef HAS_STDLIB_H
-# include <stdlib.h>
-#else
-# ifdef HAS_MALLOC_H
-# include <malloc.h>
-# else
- extern char * malloc();
-# endif
-#endif
-#include <stdio.h>
#include "gsm.h"
#include "private.h"
-#include "proto.h"
-gsm gsm_create P0()
+gsm gsm_create (void)
{
gsm r;
- r = (gsm)malloc(sizeof(struct gsm_state));
+ r = malloc (sizeof(struct gsm_state));
if (!r) return r;
-
- memset((char *)r, 0, sizeof(*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 ;
+}
--- a/common/libsndfile/src/GSM610/gsm_decode.c
+++ b/common/libsndfile/src/GSM610/gsm_decode.c
@@ -4,14 +4,13 @@
* details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
*/
-/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/gsm_decode.c,v 1.1 2002/01/14 19:15:54 menno Exp $ */
+/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/gsm_decode.c,v 1.2 2002/07/25 12:22:13 menno Exp $ */
#include "private.h"
#include "gsm.h"
-#include "proto.h"
-int gsm_decode P3((s, c, target), gsm s, gsm_byte * c, gsm_signal * target)
+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];
--- a/common/libsndfile/src/GSM610/gsm_destroy.c
+++ b/common/libsndfile/src/GSM610/gsm_destroy.c
@@ -4,11 +4,10 @@
* details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
*/
-/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/gsm_destroy.c,v 1.1 2002/01/14 19:15:54 menno Exp $ */
+/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/gsm_destroy.c,v 1.2 2002/07/25 12:22:13 menno Exp $ */
#include "gsm.h"
#include "config.h"
-#include "proto.h"
#ifdef HAS_STDLIB_H
# include <stdlib.h>
@@ -20,7 +19,7 @@
# endif
#endif
-void gsm_destroy P1((S), gsm S)
+void gsm_destroy (gsm S)
{
if (S) free((char *)S);
}
--- a/common/libsndfile/src/GSM610/gsm_encode.c
+++ b/common/libsndfile/src/GSM610/gsm_encode.c
@@ -4,13 +4,12 @@
* details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
*/
-/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/gsm_encode.c,v 1.1 2002/01/14 19:15:54 menno Exp $ */
+/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/gsm_encode.c,v 1.2 2002/07/25 12:22:13 menno Exp $ */
#include "private.h"
#include "gsm.h"
-#include "proto.h"
-void gsm_encode P3((s, source, c), gsm s, gsm_signal * source, gsm_byte * c)
+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];
--- a/common/libsndfile/src/GSM610/gsm_option.c
+++ b/common/libsndfile/src/GSM610/gsm_option.c
@@ -4,14 +4,13 @@
* details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
*/
-/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/gsm_option.c,v 1.1 2002/01/14 19:15:54 menno Exp $ */
+/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/gsm_option.c,v 1.2 2002/07/25 12:22:13 menno Exp $ */
#include "private.h"
#include "gsm.h"
-#include "proto.h"
-int gsm_option P3((r, opt, val), gsm r, int opt, int * val)
+int gsm_option (gsm r, int opt, int * val)
{
int result = -1;
--- a/common/libsndfile/src/GSM610/long_term.c
+++ b/common/libsndfile/src/GSM610/long_term.c
@@ -4,7 +4,7 @@
* details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
*/
-/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/long_term.c,v 1.1 2002/01/14 19:15:55 menno Exp $ */
+/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/long_term.c,v 1.2 2002/07/25 12:22:13 menno Exp $ */
#include <stdio.h>
#include <assert.h>
@@ -12,7 +12,6 @@
#include "private.h"
#include "gsm.h"
-#include "proto.h"
/*
* 4.2.11 .. 4.2.12 LONG TERM PREDICTOR (LTP) SECTION
@@ -46,7 +45,7 @@
#ifdef LTP_CUT
-static void Cut_Calculation_of_the_LTP_parameters P5((st, d,dp,bc_out,Nc_out),
+static void Cut_Calculation_of_the_LTP_parameters (
struct gsm_state * st,
@@ -153,7 +152,7 @@
#endif /* LTP_CUT */
-static void Calculation_of_the_LTP_parameters P4((d,dp,bc_out,Nc_out),
+static void Calculation_of_the_LTP_parameters (
register word * d, /* [0..39] IN */
register word * dp, /* [-120..-1] IN */
word * bc_out, /* OUT */
@@ -290,7 +289,7 @@
#ifdef LTP_CUT
-static void Cut_Calculation_of_the_LTP_parameters P5((st, d,dp,bc_out,Nc_out),
+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 */
@@ -468,7 +467,7 @@
#endif /* LTP_CUT */
-static void Calculation_of_the_LTP_parameters P4((d,dp,bc_out,Nc_out),
+static void Calculation_of_the_LTP_parameters (
register word * d, /* [0..39] IN */
register word * dp, /* [-120..-1] IN */
word * bc_out, /* OUT */
@@ -634,8 +633,7 @@
#ifdef FAST
#ifdef LTP_CUT
-static void Cut_Fast_Calculation_of_the_LTP_parameters P5((st,
- d,dp,bc_out,Nc_out),
+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 */
@@ -709,7 +707,7 @@
#endif /* LTP_CUT */
-static void Fast_Calculation_of_the_LTP_parameters P4((d,dp,bc_out,Nc_out),
+static void Fast_Calculation_of_the_LTP_parameters (
register word * d, /* [0..39] IN */
register word * dp, /* [-120..-1] IN */
word * bc_out, /* OUT */
@@ -831,7 +829,7 @@
/* 4.2.12 */
-static void Long_term_analysis_filtering P6((bc,Nc,dp,d,dpp,e),
+static void Long_term_analysis_filtering (
word bc, /* IN */
word Nc, /* IN */
register word * dp, /* previous d [-120..-1] IN */
@@ -864,7 +862,7 @@
}
}
-void Gsm_Long_Term_Predictor P7((S,d,dp,e,dpp,Nc,bc), /* 4x for 160 samples */
+void Gsm_Long_Term_Predictor ( /* 4x for 160 samples */
struct gsm_state * S,
@@ -902,7 +900,7 @@
}
/* 4.3.2 */
-void Gsm_Long_Term_Synthesis_Filtering P5((S,Ncr,bcr,erp,drp),
+void Gsm_Long_Term_Synthesis_Filtering (
struct gsm_state * S,
word Ncr,
--- a/common/libsndfile/src/GSM610/lpc.c
+++ b/common/libsndfile/src/GSM610/lpc.c
@@ -4,7 +4,7 @@
* details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
*/
-/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/lpc.c,v 1.1 2002/01/14 19:15:55 menno Exp $ */
+/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/lpc.c,v 1.2 2002/07/25 12:22:13 menno Exp $ */
#include <stdio.h>
#include <assert.h>
@@ -12,10 +12,7 @@
#include "private.h"
#include "gsm.h"
-#include "proto.h"
-#undef P
-
/*
* 4.2.4 .. 4.2.7 LPC ANALYSIS SECTION
*/
@@ -23,7 +20,7 @@
/* 4.2.4 */
-static void Autocorrelation P2((s, L_ACF),
+static void Autocorrelation (
word * s, /* [0..159] IN/OUT */
longword * L_ACF) /* [0..8] OUT */
/*
@@ -146,7 +143,7 @@
#if defined(USE_FLOAT_MUL) && defined(FAST)
-static void Fast_Autocorrelation P2((s, L_ACF),
+static void Fast_Autocorrelation (
word * s, /* [0..159] IN/OUT */
longword * L_ACF) /* [0..8] OUT */
{
@@ -174,7 +171,7 @@
/* 4.2.5 */
-static void Reflection_coefficients P2( (L_ACF, r),
+static void Reflection_coefficients (
longword * L_ACF, /* 0...8 IN */
register word * r /* 0...7 OUT */
)
@@ -243,7 +240,7 @@
/* 4.2.6 */
-static void Transformation_to_Log_Area_Ratios P1((r),
+static void Transformation_to_Log_Area_Ratios (
register word * r /* 0..7 IN/OUT */
)
/*
@@ -284,7 +281,7 @@
/* 4.2.7 */
-static void Quantization_and_coding P1((LAR),
+static void Quantization_and_coding (
register word * LAR /* [0..7] IN/OUT */
)
{
@@ -323,7 +320,7 @@
# undef STEP
}
-void Gsm_LPC_Analysis P3((S, s,LARc),
+void Gsm_LPC_Analysis (
struct gsm_state *S,
word * s, /* 0..159 signals IN/OUT */
word * LARc) /* 0..7 LARc's OUT */
--- a/common/libsndfile/src/GSM610/preprocess.c
+++ b/common/libsndfile/src/GSM610/preprocess.c
@@ -4,7 +4,7 @@
* details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
*/
-/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/preprocess.c,v 1.1 2002/01/14 19:15:55 menno Exp $ */
+/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/preprocess.c,v 1.2 2002/07/25 12:22:13 menno Exp $ */
#include <stdio.h>
#include <assert.h>
@@ -12,7 +12,6 @@
#include "private.h"
#include "gsm.h"
-#include "proto.h"
/* 4.2.0 .. 4.2.3 PREPROCESSING SECTION
*
@@ -31,7 +30,7 @@
*/
-void Gsm_Preprocess P3((S, s, so),
+void Gsm_Preprocess (
struct gsm_state * S,
word * s,
word * so ) /* [0..159] IN/OUT */
--- a/common/libsndfile/src/GSM610/private.h
+++ b/common/libsndfile/src/GSM610/private.h
@@ -4,13 +4,12 @@
* details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
*/
-/*$Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/private.h,v 1.1 2002/01/14 19:15:55 menno Exp $*/
+/*$Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/private.h,v 1.2 2002/07/25 12:22:13 menno Exp $*/
#ifndef PRIVATE_H
#define PRIVATE_H
/* Added by Erik de Castro Lopo */
-#define NeedFunctionPrototypes 1
#define SASR
#define USE_FLOAT_MUL
#define FAST
@@ -25,32 +24,35 @@
typedef unsigned short uword; /* unsigned word */
typedef unsigned int ulongword; /* unsigned longword */
-struct gsm_state {
+struct gsm_state
+{ word dp0[ 280 ];
- word dp0[ 280 ];
+ word z1; /* preprocessing.c, Offset_com. */
+ longword L_z2; /* Offset_com. */
+ int mp; /* Preemphasis */
- 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 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 */
- 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 verbose; /* only used if !NDEBUG */
- char fast; /* only used if FAST */
-
- char wav_fmt; /* only used if WAV49 defined */
+ 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
@@ -64,32 +66,30 @@
#define SASR(x, by) ((x) >= 0 ? (x) >> (by) : (~(-((x) + 1) >> (by))))
#endif /* SASR */
-#include "proto.h"
-
/*
* Prototypes from add.c
*/
-extern word gsm_mult (word a, word b);
-extern longword gsm_L_mult (word a, word b);
-extern word gsm_mult_r (word a, word b);
+word gsm_mult (word a, word b);
+longword gsm_L_mult (word a, word b);
+word gsm_mult_r (word a, word b);
-extern word gsm_div (word num, word denum);
+word gsm_div (word num, word denum);
-extern word gsm_add (word a, word b );
-extern longword gsm_L_add (longword a, longword b );
+word gsm_add (word a, word b );
+longword gsm_L_add (longword a, longword b );
-extern word gsm_sub (word a, word b);
-extern longword gsm_L_sub (longword a, longword b);
+word gsm_sub (word a, word b);
+longword gsm_L_sub (longword a, longword b);
-extern word gsm_abs (word a);
+word gsm_abs (word a);
-extern word gsm_norm (longword a );
+word gsm_norm (longword a );
-extern longword gsm_L_asl (longword a, int n);
-extern word gsm_asl (word a, int n);
+longword gsm_L_asl (longword a, int n);
+word gsm_asl (word a, int n);
-extern longword gsm_L_asr (longword a, int n);
-extern word gsm_asr (word a, int n);
+longword gsm_L_asr (longword a, int n);
+word gsm_asr (word a, int n);
/*
* Inlined functions from add.h
@@ -150,7 +150,7 @@
/*
* More prototypes from implementations..
*/
-extern void Gsm_Coder P((
+void Gsm_Coder (
struct gsm_state * S,
word * s, /* [0..159] samples IN */
word * LARc, /* [0..7] LAR coefficients OUT */
@@ -158,9 +158,9 @@
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 */));
+ word * xMc /* [13*4] normalized RPE samples OUT */);
-extern void Gsm_Long_Term_Predictor P(( /* 4x for 160 samples */
+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 */
@@ -167,31 +167,31 @@
word * e, /* [0..40] OUT */
word * dpp, /* [0..40] OUT */
word * Nc, /* correlation lag OUT */
- word * bc /* gain factor OUT */));
+ word * bc /* gain factor OUT */);
-extern void Gsm_LPC_Analysis P((
+void Gsm_LPC_Analysis (
struct gsm_state * S,
word * s, /* 0..159 signals IN/OUT */
- word * LARc)); /* 0..7 LARc's OUT */
+ word * LARc); /* 0..7 LARc's OUT */
-extern void Gsm_Preprocess P((
+void Gsm_Preprocess (
struct gsm_state * S,
- word * s, word * so));
+ word * s, word * so);
-extern void Gsm_Encoding P((
+void Gsm_Encoding (
struct gsm_state * S,
word * e,
word * ep,
word * xmaxc,
word * Mc,
- word * xMc));
+ word * xMc);
-extern void Gsm_Short_Term_Analysis_Filter P((
+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 */));
+ word * d /* st res. signal [0..159] IN/OUT */);
-extern void Gsm_Decoder P((
+void Gsm_Decoder (
struct gsm_state * S,
word * LARcr, /* [0..7] IN */
word * Ncr, /* [0..3] IN */
@@ -199,46 +199,46 @@
word * Mcr, /* [0..3] IN */
word * xmaxcr, /* [0..3] IN */
word * xMcr, /* [0..13*4] IN */
- word * s)); /* [0..159] OUT */
+ word * s); /* [0..159] OUT */
-extern void Gsm_Decoding P((
+void Gsm_Decoding (
struct gsm_state * S,
word xmaxcr,
word Mcr,
word * xMcr, /* [0..12] IN */
- word * erp)); /* [0..39] OUT */
+ word * erp); /* [0..39] OUT */
-extern void Gsm_Long_Term_Synthesis_Filtering P((
+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 */
+ word * drp); /* [-120..-1] IN, [0..40] OUT */
-void Gsm_RPE_Decoding P((
- struct gsm_state *S,
+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 * erp); /* [0..39] OUT */
-void Gsm_RPE_Encoding P((
- struct gsm_state * S,
+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 * xMc); /* [0..12] OUT */
-extern void Gsm_Short_Term_Synthesis_Filter P((
+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 */
+ word * s); /* signal s [0..159] OUT */
-extern void Gsm_Update_of_reconstructed_short_time_residual_signal P((
+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 */
+ word * dp); /* [-120...-1] IN/OUT */
/*
* Tables from table.c
@@ -266,13 +266,11 @@
#else /* !NDEBUG => DEBUG */
- extern void gsm_debug_words P((char * name, int, int, word *));
- extern void gsm_debug_longwords P((char * name, int, int, longword *));
- extern void gsm_debug_longword P((char * name, longword));
- extern void gsm_debug_word P((char * name, word));
+ 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 */
-
-#include "unproto.h"
#endif /* PRIVATE_H */
--- a/common/libsndfile/src/GSM610/proto.h
+++ /dev/null
@@ -1,65 +1,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.
- */
-
-/*$Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/proto.h,v 1.1 2002/01/14 19:15:55 menno Exp $*/
-
-#ifndef PROTO_H
-#define PROTO_H
-
-/*#if __cplusplus*/
-# define NeedFunctionPrototypes 1
-/*#endif*/
-
-#if __STDC__
-# define NeedFunctionPrototypes 1
-#endif
-
-#ifdef _NO_PROTO
-# undef NeedFunctionPrototypes
-#endif
-
-#undef P /* gnu stdio.h actually defines this... */
-#undef P0
-#undef P1
-#undef P2
-#undef P3
-#undef P4
-#undef P5
-#undef P6
-#undef P7
-#undef P8
-
-#if NeedFunctionPrototypes
-
-# define P( protos ) protos
-
-# define P0() (void)
-# define P1(x, a) (a)
-# define P2(x, a, b) (a, b)
-# define P3(x, a, b, c) (a, b, c)
-# define P4(x, a, b, c, d) (a, b, c, d)
-# define P5(x, a, b, c, d, e) (a, b, c, d, e)
-# define P6(x, a, b, c, d, e, f) (a, b, c, d, e, f)
-# define P7(x, a, b, c, d, e, f, g) (a, b, c, d, e, f, g)
-# define P8(x, a, b, c, d, e, f, g, h) (a, b, c, d, e, f, g, h)
-
-#else /* !NeedFunctionPrototypes */
-
-# define P( protos ) ( /* protos */ )
-
-# define P0() ()
-# define P1(x, a) x a;
-# define P2(x, a, b) x a; b;
-# define P3(x, a, b, c) x a; b; c;
-# define P4(x, a, b, c, d) x a; b; c; d;
-# define P5(x, a, b, c, d, e) x a; b; c; d; e;
-# define P6(x, a, b, c, d, e, f) x a; b; c; d; e; f;
-# define P7(x, a, b, c, d, e, f, g) x a; b; c; d; e; f; g;
-# define P8(x, a, b, c, d, e, f, g, h) x a; b; c; d; e; f; g; h;
-
-#endif /* !NeedFunctionPrototypes */
-
-#endif /* PROTO_H */
--- a/common/libsndfile/src/GSM610/rpe.c
+++ b/common/libsndfile/src/GSM610/rpe.c
@@ -4,7 +4,7 @@
* details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
*/
-/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/rpe.c,v 1.1 2002/01/14 19:15:55 menno Exp $ */
+/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/rpe.c,v 1.2 2002/07/25 12:22:13 menno Exp $ */
#include <stdio.h>
#include <assert.h>
@@ -12,7 +12,6 @@
#include "private.h"
#include "gsm.h"
-#include "proto.h"
/* 4.2.13 .. 4.2.17 RPE ENCODING SECTION
*/
@@ -19,7 +18,7 @@
/* 4.2.13 */
-static void Weighting_filter P2((e, x),
+static void Weighting_filter (
register word * e, /* signal [-5..0.39.44] IN */
word * x /* signal [0..39] OUT */
)
@@ -113,7 +112,7 @@
/* 4.2.14 */
-static void RPE_grid_selection P3((x,xM,Mc_out),
+static void RPE_grid_selection (
word * x, /* [0..39] IN */
word * xM, /* [0..12] OUT */
word * Mc_out /* OUT */
@@ -220,7 +219,7 @@
/* 4.12.15 */
-static void APCM_quantization_xmaxc_to_exp_mant P3((xmaxc,exp_out,mant_out),
+static void APCM_quantization_xmaxc_to_exp_mant (
word xmaxc, /* IN */
word * exp_out, /* OUT */
word * mant_out ) /* OUT */
@@ -253,9 +252,8 @@
*mant_out = mant;
}
-static void APCM_quantization P5((xM,xMc,mant_out,exp_out,xmaxc_out),
+static void APCM_quantization (
word * xM, /* [0..12] IN */
-
word * xMc, /* [0..12] OUT */
word * mant_out, /* OUT */
word * exp_out, /* OUT */
@@ -346,7 +344,7 @@
/* 4.2.16 */
-static void APCM_inverse_quantization P4((xMc,mant,exp,xMp),
+static void APCM_inverse_quantization (
register word * xMc, /* [0..12] IN */
word mant,
word exp,
@@ -384,7 +382,7 @@
/* 4.2.17 */
-static void RPE_grid_positioning P3((Mc,xMp,ep),
+static void RPE_grid_positioning (
word Mc, /* grid position IN */
register word * xMp, /* [0..12] IN */
register word * ep /* [0..39] OUT */
@@ -431,7 +429,7 @@
*/
#if 0 /* Has been inlined in code.c */
-void Gsm_Update_of_reconstructed_short_time_residual_signal P3((dpp, ep, dp),
+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 */
@@ -446,10 +444,9 @@
}
#endif /* Has been inlined in code.c */
-void Gsm_RPE_Encoding P5((S,e,xmaxc,Mc,xMc),
+void Gsm_RPE_Encoding (
+ /*-struct gsm_state * S,-*/
- struct gsm_state * S,
-
word * e, /* -5..-1][0..39][40..44 IN/OUT */
word * xmaxc, /* OUT */
word * Mc, /* OUT */
@@ -469,8 +466,8 @@
}
-void Gsm_RPE_Decoding P5((S, xmaxcr, Mcr, xMcr, erp),
- struct gsm_state * S,
+void Gsm_RPE_Decoding (
+ /*-struct gsm_state * S,-*/
word xmaxcr,
word Mcr,
--- a/common/libsndfile/src/GSM610/short_term.c
+++ b/common/libsndfile/src/GSM610/short_term.c
@@ -4,7 +4,7 @@
* details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
*/
-/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/short_term.c,v 1.1 2002/01/14 19:15:55 menno Exp $ */
+/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/short_term.c,v 1.2 2002/07/25 12:22:13 menno Exp $ */
#include <stdio.h>
#include <assert.h>
@@ -12,7 +12,6 @@
#include "private.h"
#include "gsm.h"
-#include "proto.h"
/*
* SHORT TERM ANALYSIS FILTERING SECTION
@@ -20,7 +19,7 @@
/* 4.2.8 */
-static void Decoding_of_the_coded_Log_Area_Ratios P2((LARc,LARpp),
+static void Decoding_of_the_coded_Log_Area_Ratios (
word * LARc, /* coded log area ratio [0..7] IN */
word * LARpp) /* out: decoded .. */
{
@@ -88,7 +87,7 @@
* (Initial value: LARpp(j-1)[1..8] = 0.)
*/
-static void Coefficients_0_12 P3((LARpp_j_1, LARpp_j, LARp),
+static void Coefficients_0_12 (
register word * LARpp_j_1,
register word * LARpp_j,
register word * LARp)
@@ -102,7 +101,7 @@
}
}
-static void Coefficients_13_26 P3((LARpp_j_1, LARpp_j, LARp),
+static void Coefficients_13_26 (
register word * LARpp_j_1,
register word * LARpp_j,
register word * LARp)
@@ -114,7 +113,7 @@
}
}
-static void Coefficients_27_39 P3((LARpp_j_1, LARpp_j, LARp),
+static void Coefficients_27_39 (
register word * LARpp_j_1,
register word * LARpp_j,
register word * LARp)
@@ -129,7 +128,7 @@
}
-static void Coefficients_40_159 P2((LARpp_j, LARp),
+static void Coefficients_40_159 (
register word * LARpp_j,
register word * LARp)
{
@@ -141,7 +140,7 @@
/* 4.2.9.2 */
-static void LARp_to_rp P1((LARp),
+static void LARp_to_rp (
register word * LARp) /* [0..7] IN/OUT */
/*
* The input of this procedure is the interpolated LARp[0..7] array.
@@ -180,7 +179,7 @@
/* 4.2.10 */
-static void Short_term_analysis_filtering P4((S,rp,k_n,s),
+static void Short_term_analysis_filtering (
struct gsm_state * S,
register word * rp, /* [0..7] IN */
register int k_n, /* k_end - k_start */
@@ -225,7 +224,7 @@
#if defined(USE_FLOAT_MUL) && defined(FAST)
-static void Fast_Short_term_analysis_filtering P4((S,rp,k_n,s),
+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 */
@@ -262,7 +261,7 @@
}
#endif /* ! (defined (USE_FLOAT_MUL) && defined (FAST)) */
-static void Short_term_synthesis_filtering P5((S,rrp,k,wt,sr),
+static void Short_term_synthesis_filtering (
struct gsm_state * S,
register word * rrp, /* [0..7] IN */
register int k, /* k_end - k_start */
@@ -306,7 +305,7 @@
#if defined(FAST) && defined(USE_FLOAT_MUL)
-static void Fast_Short_term_synthesis_filtering P5((S,rrp,k,wt,sr),
+static void Fast_Short_term_synthesis_filtering (
struct gsm_state * S,
register word * rrp, /* [0..7] IN */
register int k, /* k_end - k_start */
@@ -343,7 +342,7 @@
#endif /* defined(FAST) && defined(USE_FLOAT_MUL) */
-void Gsm_Short_Term_Analysis_Filter P3((S,LARc,s),
+void Gsm_Short_Term_Analysis_Filter (
struct gsm_state * S,
@@ -385,7 +384,7 @@
FILTER( S, LARp, 120, s + 40);
}
-void Gsm_Short_Term_Synthesis_Filter P4((S, LARcr, wt, s),
+void Gsm_Short_Term_Synthesis_Filter (
struct gsm_state * S,
word * LARcr, /* received log area ratios [0..7] IN */
--- a/common/libsndfile/src/GSM610/table.c
+++ b/common/libsndfile/src/GSM610/table.c
@@ -4,7 +4,7 @@
* details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
*/
-/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/table.c,v 1.1 2002/01/14 19:15:55 menno Exp $ */
+/* $Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/table.c,v 1.2 2002/07/25 12:22:13 menno Exp $ */
/* Most of these tables are inlined at their point of use.
*/
--- a/common/libsndfile/src/GSM610/unproto.h
+++ /dev/null
@@ -1,23 +1,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.
- */
-
-/*$Header: /home/cvs/f/fa/faac/faad2/common/libsndfile/src/GSM610/Attic/unproto.h,v 1.1 2002/01/14 19:15:55 menno Exp $*/
-
-#ifdef PROTO_H /* sic */
-#undef PROTO_H
-
-#undef P
-#undef P0
-#undef P1
-#undef P2
-#undef P3
-#undef P4
-#undef P5
-#undef P6
-#undef P7
-#undef P8
-
-#endif /* PROTO_H */
--- a/common/libsndfile/src/Makefile.am
+++ b/common/libsndfile/src/Makefile.am
@@ -1,20 +1,20 @@
# This file was automatically generated
# DO NOT EDIT!
-#
-DIST_SUBDIRS = GSM610 G72x
+
SUBDIRS = GSM610 G72x
lib_LTLIBRARIES = libsndfile.la
include_HEADERS = sndfile.h
-INCLUDES = -I$(srcdir)/../src -I$(srcdir)
-noinst_HEADERS = common.h sfendian.h floatcast.h wav.h au.h
+noinst_HEADERS = common.h sfendian.h float_cast.h wav_w64.h au.h sf_command.h
-COMMON = common.c pcm.c ulaw.c alaw.c float32.c sndfile.c
-FILESPECIFIC = aiff.c au.c au_g72x.c nist.c paf.c raw.c samplitude.c \
- svx.c wav.c wav_gsm610.c wav_ima_adpcm.c \
- wav_ms_adpcm.c voc.c ircam.c
+COMMON = sndfile.c 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
+FILESPECIFIC = aiff.c au.c au_g72x.c nist.c paf.c raw.c samplitude.c svx.c \
+ wav.c wav_w64.c voc.c ircam.c w64.c \
+ sd2.c rx2.c txw.c
+
libsndfile_la_SOURCES = $(COMMON) $(FILESPECIFIC) sndfile.h
libsndfile_la_LDFLAGS = -version-info @SHARED_VERSION_INFO@
libsndfile_la_LIBADD = GSM610/libgsm.la G72x/libg72x.la
--- a/common/libsndfile/src/Makefile.in
+++ b/common/libsndfile/src/Makefile.in
@@ -12,7 +12,6 @@
# This file was automatically generated
# DO NOT EDIT!
-#
SHELL = @SHELL@
@@ -69,29 +68,38 @@
AS = @AS@
CC = @CC@
DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+EXEEXT = @EXEEXT@
+GETCONF = @GETCONF@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
MAKEINFO = @MAKEINFO@
OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OS_SPECIFIC_INCLUDES = @OS_SPECIFIC_INCLUDES@
+OS_SPECIFIC_LINKS = @OS_SPECIFIC_LINKS@
PACKAGE = @PACKAGE@
RANLIB = @RANLIB@
SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+STRIP = @STRIP@
VERSION = @VERSION@
+ac_cv_sys_largefile_CFLAGS = @ac_cv_sys_largefile_CFLAGS@
+autogen = @autogen@
subdirs = @subdirs@
-DIST_SUBDIRS = GSM610 G72x
SUBDIRS = GSM610 G72x
lib_LTLIBRARIES = libsndfile.la
include_HEADERS = sndfile.h
-INCLUDES = -I$(srcdir)/../src -I$(srcdir)
-noinst_HEADERS = common.h sfendian.h floatcast.h wav.h au.h
+noinst_HEADERS = common.h sfendian.h float_cast.h wav_w64.h au.h sf_command.h
-COMMON = common.c pcm.c ulaw.c alaw.c float32.c sndfile.c
-FILESPECIFIC = aiff.c au.c au_g72x.c nist.c paf.c raw.c samplitude.c svx.c wav.c wav_gsm610.c wav_ima_adpcm.c wav_ms_adpcm.c voc.c ircam.c
+COMMON = sndfile.c 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
+FILESPECIFIC = aiff.c au.c au_g72x.c nist.c paf.c raw.c samplitude.c svx.c wav.c wav_w64.c voc.c ircam.c w64.c sd2.c rx2.c txw.c
+
+
libsndfile_la_SOURCES = $(COMMON) $(FILESPECIFIC) sndfile.h
libsndfile_la_LDFLAGS = -version-info @SHARED_VERSION_INFO@
libsndfile_la_LIBADD = GSM610/libgsm.la G72x/libg72x.la
@@ -109,10 +117,11 @@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
libsndfile_la_DEPENDENCIES = GSM610/libgsm.la G72x/libg72x.la
-libsndfile_la_OBJECTS = common.lo pcm.lo ulaw.lo alaw.lo float32.lo \
-sndfile.lo aiff.lo au.lo au_g72x.lo nist.lo paf.lo raw.lo samplitude.lo \
-svx.lo wav.lo wav_gsm610.lo wav_ima_adpcm.lo wav_ms_adpcm.lo voc.lo \
-ircam.lo
+libsndfile_la_OBJECTS = sndfile.lo common.lo file_io.lo command.lo \
+pcm.lo ulaw.lo alaw.lo float32.lo double64.lo ima_adpcm.lo ms_adpcm.lo \
+gsm610.lo dwvw.lo aiff.lo au.lo au_g72x.lo nist.lo paf.lo raw.lo \
+samplitude.lo svx.lo wav.lo wav_w64.lo voc.lo ircam.lo w64.lo sd2.lo \
+rx2.lo txw.lo
CFLAGS = @CFLAGS@
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -132,9 +141,9 @@
all: all-redirect
.SUFFIXES:
-.SUFFIXES: .S .c .lo .o .s
+.SUFFIXES: .S .c .lo .o .obj .s
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
- cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps src/Makefile
+ cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps src/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) \
@@ -197,6 +206,11 @@
.c.o:
$(COMPILE) -c $<
+# FIXME: We should only use cygpath when building on Windows,
+# and only if it is available.
+.c.obj:
+ $(COMPILE) -c `cygpath -w $<`
+
.s.o:
$(COMPILE) -c $<
@@ -205,6 +219,7 @@
mostlyclean-compile:
-rm -f *.o core *.core
+ -rm -f *.$(OBJEXT)
clean-compile:
@@ -354,7 +369,7 @@
|| cp -p $$d/$$file $(distdir)/$$file || :; \
fi; \
done
- for subdir in $(DIST_SUBDIRS); do \
+ for subdir in $(SUBDIRS); do \
if test "$$subdir" = .; then :; else \
test -d $(distdir)/$$subdir \
|| mkdir $(distdir)/$$subdir \
@@ -364,32 +379,6 @@
|| exit 1; \
fi; \
done
-aiff.lo aiff.o : aiff.c sndfile.h config.h sfendian.h common.h
-alaw.lo alaw.o : alaw.c sndfile.h floatcast.h common.h
-au.lo au.o : au.c sndfile.h config.h sfendian.h common.h au.h
-au_g72x.lo au_g72x.o : au_g72x.c config.h sndfile.h sfendian.h \
- floatcast.h common.h au.h G72x/g72x.h
-common.lo common.o : common.c sndfile.h sfendian.h config.h common.h
-float32.lo float32.o : float32.c sndfile.h config.h sfendian.h common.h
-ircam.lo ircam.o : ircam.c sndfile.h config.h sfendian.h common.h
-nist.lo nist.o : nist.c sndfile.h config.h sfendian.h common.h
-paf.lo paf.o : paf.c config.h sndfile.h sfendian.h floatcast.h common.h
-pcm.lo pcm.o : pcm.c config.h sndfile.h sfendian.h floatcast.h common.h
-raw.lo raw.o : raw.c sndfile.h config.h sfendian.h common.h
-samplitude.lo samplitude.o : samplitude.c sndfile.h config.h sfendian.h \
- common.h
-sndfile.lo sndfile.o : sndfile.c sndfile.h config.h sfendian.h common.h
-svx.lo svx.o : svx.c sndfile.h config.h sfendian.h common.h
-ulaw.lo ulaw.o : ulaw.c sndfile.h floatcast.h common.h
-voc.lo voc.o : voc.c sndfile.h config.h sfendian.h common.h
-wav.lo wav.o : wav.c sndfile.h config.h sfendian.h common.h wav.h
-wav_gsm610.lo wav_gsm610.o : wav_gsm610.c sndfile.h config.h sfendian.h \
- floatcast.h common.h wav.h GSM610/gsm.h
-wav_ima_adpcm.lo wav_ima_adpcm.o : wav_ima_adpcm.c sndfile.h config.h \
- sfendian.h floatcast.h common.h wav.h
-wav_ms_adpcm.lo wav_ms_adpcm.o : wav_ms_adpcm.c sndfile.h config.h \
- sfendian.h floatcast.h common.h wav.h
-
info-am:
info: info-recursive
dvi-am:
--- a/common/libsndfile/src/aiff.c
+++ b/common/libsndfile/src/aiff.c
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 1999-2001 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
**
** 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
@@ -16,12 +16,11 @@
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-
#include <stdio.h>
#include <unistd.h>
#include <string.h>
-#include <ctype.h>
#include <time.h>
+#include <ctype.h>
#include "sndfile.h"
#include "config.h"
@@ -28,7 +27,6 @@
#include "sfendian.h"
#include "common.h"
-
/*------------------------------------------------------------------------------
* Macros to handle big/little endian issues.
*/
@@ -65,17 +63,27 @@
#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 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'))
-
-/* Unsupported AIFC encodings.*/
#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'))
+
+/* Unsupported AIFC encodings.*/
+#define ima4_MARKER (MAKE_MARKER ('i', 'm', 'a', '4'))
+
#define MAC3_MARKER (MAKE_MARKER ('M', 'A', 'C', '3'))
#define MAC6_MARKER (MAKE_MARKER ('M', 'A', 'C', '6'))
-#define ima4_MARKER (MAKE_MARKER ('i', 'm', 'a', '4'))
-#define ulaw_MARKER (MAKE_MARKER ('a', 'l', 'a', 'w'))
-#define alaw_MARKER (MAKE_MARKER ('u', 'l', 'a', 'w'))
#define ADP4_MARKER (MAKE_MARKER ('A', 'D', 'P', '4'))
/* Predfined chunk sizes. */
@@ -127,35 +135,139 @@
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) ;
static int aiff_write_tailer (SF_PRIVATE *psf) ;
/*------------------------------------------------------------------------------
-** Public functions.
+** Public function.
*/
int
-aiff_open_read (SF_PRIVATE *psf)
-{ COMM_CHUNK comm_fmt ;
- SSND_CHUNK ssnd_fmt ;
+aiff_open (SF_PRIVATE *psf)
+{ COMM_CHUNK comm_fmt ;
+ int error ;
+
+ if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0))
+ { if ((error = aiff_read_header (psf, &comm_fmt)))
+ return error ;
+
+ psf_fseek (psf->filedes, psf->dataoffset, SEEK_SET) ;
+ } ;
+
+ if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR)
+ { if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_AIFF)
+ return SFE_BAD_OPEN_FORMAT ;
+
+ if ((error = aiff_write_header (psf)))
+ return error ;
+
+ psf->write_header = aiff_write_header ;
+ } ;
+
+ psf->error = 0 ;
+ psf->close = aiff_close ;
+
+ psf->blockwidth = psf->sf.channels * psf->bytewidth ;
+
+ switch (psf->sf.format & SF_FORMAT_SUBMASK)
+ { case SF_FORMAT_PCM_U8 :
+ psf->chars = SF_CHARS_UNSIGNED ;
+ error = pcm_init (psf) ;
+ break ;
+
+ case SF_FORMAT_PCM_S8 :
+ psf->chars = SF_CHARS_SIGNED ;
+ 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_FLOAT :
+ error = float32_init (psf) ;
+ break ;
+
+ case SF_FORMAT_DOUBLE :
+ error = double64_init (psf) ;
+ break ;
+
+ case SF_FORMAT_ULAW :
+ error = ulaw_init (psf) ;
+ break ;
+
+ case SF_FORMAT_ALAW :
+ error = alaw_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->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.samples = comm_fmt.numSampleFrames ;
+ break ;
+ } ;
+ psf_log_printf (psf, "AIFC : Bad bitwidth %d\n", comm_fmt.sampleSize) ;
+ error = SFE_DWVW_BAD_BITWIDTH ;
+ break ;
+
+ /*
+ case SF_FORMAT_IMA_ADPCM :
+ error = aiff_ima_writer_init (psf, 34) ;
+ break ;
+ */
+
+ default : return SFE_UNIMPLEMENTED ;
+ } ;
+
+ if (psf->mode == SFM_READ)
+ psf->blockwidth = psf->sf.channels * psf->bytewidth ;
+
+ return error ;
+} /* aiff_open */
+
+/*==========================================================================================
+** Private functions.
+*/
+
+static int
+aiff_read_header (SF_PRIVATE *psf, COMM_CHUNK *comm_fmt)
+{ SSND_CHUNK ssnd_fmt ;
int marker, dword ;
- long FORMsize, SSNDsize ;
+ int FORMsize, SSNDsize ;
int filetype, found_chunk = 0, done = 0, error = 0 ;
char *cptr ;
- psf->sf.seekable = SF_TRUE ;
-
/* Set position to start of file to begin reading header. */
psf_binheader_readf (psf, "p", 0) ;
- memset (&comm_fmt, 0, sizeof (comm_fmt)) ;
+ 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
- ** a FORM chunk. Approach here is to read allthe chunks one by one and then
- ** check for the mandatory chunks at the end.
+ /* 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)
{ psf_binheader_readf (psf, "m", &marker) ;
@@ -164,11 +276,11 @@
if (found_chunk)
return SFE_AIFF_NO_FORM ;
- psf_binheader_readf (psf, "L", &FORMsize) ;
+ psf_binheader_readf (psf, "E4", &FORMsize) ;
- if (FORMsize != psf->filelength - 2 * sizeof (dword))
+ if (FORMsize != psf->filelength - 2 * SIGNED_SIZEOF (dword))
{ dword = psf->filelength - 2 * sizeof (dword);
- psf_log_printf (psf, "FORM : %d (should be %d)\n", FORMsize, dword) ;
+ psf_log_printf (psf, "FORM : %u (should be %u)\n", FORMsize, dword) ;
FORMsize = dword ;
}
else
@@ -186,13 +298,12 @@
break ;
case COMM_MARKER :
- error = aiff_read_comm_chunk (psf, &comm_fmt) ;
+ error = aiff_read_comm_chunk (psf, comm_fmt) ;
- psf->sf.samplerate = tenbytefloat2int (comm_fmt.sampleRate) ;
- psf->sf.samples = comm_fmt.numSampleFrames ;
- psf->sf.channels = comm_fmt.numChannels ;
- psf->sf.pcmbitwidth = comm_fmt.sampleSize ;
- psf->sf.sections = 1 ;
+ psf->sf.samplerate = tenbytefloat2int (comm_fmt->sampleRate) ;
+ psf->sf.samples = comm_fmt->numSampleFrames ;
+ psf->sf.channels = comm_fmt->numChannels ;
+ psf->bytewidth = BITWIDTH2BYTES (comm_fmt->sampleSize) ;
if (error)
return error ;
@@ -205,15 +316,15 @@
if ((found_chunk & (HAVE_FORM | HAVE_AIFF | HAVE_COMM)) != (HAVE_FORM | HAVE_AIFF | HAVE_COMM))
return SFE_AIFF_PEAK_B4_COMM ;
- psf_binheader_readf (psf, "L", &dword) ;
+ psf_binheader_readf (psf, "E4", &dword) ;
psf_log_printf (psf, "%D : %d\n", marker, dword) ;
- if (dword > sizeof (psf->peak))
+ if (dword > SIGNED_SIZEOF (psf->peak))
{ psf_binheader_readf (psf, "j", dword) ;
psf_log_printf (psf, "*** File PEAK chunk bigger than sizeof (PEAK_CHUNK).\n") ;
return SFE_WAV_BAD_PEAK ;
} ;
- if (dword != sizeof (psf->peak) - sizeof (psf->peak.peak) + psf->sf.channels * sizeof (PEAK_POS))
+ if (dword != SIGNED_SIZEOF (psf->peak) - SIGNED_SIZEOF (psf->peak.peak) + psf->sf.channels * SIGNED_SIZEOF (PEAK_POS))
{ psf_binheader_readf (psf, "j", dword) ;
psf_log_printf (psf, "*** File PEAK chunk size doesn't fit with number of channels.\n") ;
return SFE_WAV_BAD_PEAK ;
@@ -220,7 +331,7 @@
} ;
/* read in rest of PEAK chunk. */
- psf_binheader_readf (psf, "LL", &(psf->peak.version), &(psf->peak.timestamp)) ;
+ psf_binheader_readf (psf, "E44", &(psf->peak.version), &(psf->peak.timestamp)) ;
if (psf->peak.version != 1)
psf_log_printf (psf, " version : %d *** (should be version 1)\n", psf->peak.version) ;
@@ -232,10 +343,10 @@
cptr = (char *) psf->buffer ;
for (dword = 0 ; dword < psf->sf.channels ; dword++)
- { psf_binheader_readf (psf, "FL", &(psf->peak.peak[dword].value),
+ { psf_binheader_readf (psf, "Ef4", &(psf->peak.peak[dword].value),
&(psf->peak.peak[dword].position)) ;
- snprintf (cptr, sizeof (psf->buffer), " %2d %-12d %g\n",
+ LSF_SNPRINTF (cptr, sizeof (psf->buffer), " %2d %-12d %g\n",
dword, psf->peak.peak[dword].position, psf->peak.peak[dword].value) ;
cptr [sizeof (psf->buffer) - 1] = 0 ;
psf_log_printf (psf, cptr) ;
@@ -245,11 +356,11 @@
break ;
case SSND_MARKER :
- psf_binheader_readf (psf, "LLL", &SSNDsize, &(ssnd_fmt.offset), &(ssnd_fmt.blocksize)) ;
+ psf_binheader_readf (psf, "E444", &SSNDsize, &(ssnd_fmt.offset), &(ssnd_fmt.blocksize)) ;
- psf->dataoffset = ftell (psf->file) ;
+ psf->dataoffset = psf_ftell (psf->filedes) ;
psf->datalength = psf->filelength - psf->dataoffset ;
- if (SSNDsize > psf->datalength + sizeof (SSND_CHUNK))
+ if (SSNDsize > psf->datalength + SIGNED_SIZEOF (SSND_CHUNK))
psf_log_printf (psf, " SSND : %d (should be %d)\n", SSNDsize, psf->datalength + sizeof (SSND_CHUNK)) ;
else
psf_log_printf (psf, " SSND : %d\n", SSNDsize) ;
@@ -263,7 +374,7 @@
break ;
/* Seek to end of SSND chunk. */
- fseek (psf->file, SSNDsize - 8, SEEK_CUR) ;
+ psf_fseek (psf->filedes, SSNDsize - 8, SEEK_CUR) ;
break ;
case c_MARKER :
@@ -271,22 +382,22 @@
case AUTH_MARKER :
case COMT_MARKER :
case NAME_MARKER :
- psf_binheader_readf (psf, "L", &dword);
+ psf_binheader_readf (psf, "E4", &dword);
dword += (dword & 1) ;
if (dword == 0)
break ;
- if (dword > sizeof (psf->buffer))
- { psf_log_printf (psf, " *** %D : %d (too big)\n", marker, dword) ;
+ if (dword > SIGNED_SIZEOF (psf->buffer))
+ { psf_log_printf (psf, " %D : %d (too big)\n", marker, dword) ;
return SFE_INTERNAL ;
} ;
- psf_binheader_readf (psf, "B", psf->buffer, dword) ;
+ psf_binheader_readf (psf, "b", psf->buffer, dword) ;
psf->buffer [dword - 1] = 0 ;
- psf_log_printf (psf, "*** %D : %s\n", marker, psf->buffer) ;
+ psf_log_printf (psf, " %D : %s\n", marker, psf->buffer) ;
break ;
case FVER_MARKER :
case SFX_MARKER :
- psf_binheader_readf (psf, "L", &dword) ;
+ psf_binheader_readf (psf, "E4", &dword) ;
psf_log_printf (psf, " %D : %d\n", marker, dword) ;
psf_binheader_readf (psf, "j", dword) ;
@@ -295,7 +406,7 @@
case APPL_MARKER :
case INST_MARKER :
case MARK_MARKER :
- psf_binheader_readf (psf, "L", &dword) ;
+ psf_binheader_readf (psf, "E4", &dword) ;
psf_log_printf (psf, " %D : %d\n", marker, dword) ;
psf_binheader_readf (psf, "j", dword) ;
@@ -304,19 +415,19 @@
default :
if (isprint ((marker >> 24) & 0xFF) && isprint ((marker >> 16) & 0xFF)
&& isprint ((marker >> 8) & 0xFF) && isprint (marker & 0xFF))
- { psf_binheader_readf (psf, "L", &dword) ;
+ { psf_binheader_readf (psf, "E4", &dword) ;
psf_log_printf (psf, "%D : %d (unknown marker)\n", marker, dword) ;
psf_binheader_readf (psf, "j", dword) ;
break ;
} ;
- if ((dword = ftell (psf->file)) & 0x03)
+ if ((dword = psf_ftell (psf->filedes)) & 0x03)
{ psf_log_printf (psf, " Unknown chunk marker at position %d. Resyncing.\n", dword - 4) ;
psf_binheader_readf (psf, "j", -3) ;
break ;
} ;
- psf_log_printf (psf, "*** Unknown chunk marker : %X. Exiting parser.\n", marker) ;
+ psf_log_printf (psf, "*** Unknown chunk marker : %X at position %d. Exiting parser.\n", marker, psf_ftell (psf->filedes)) ;
done = 1 ;
break ;
} ; /* switch (marker) */
@@ -324,14 +435,17 @@
if ((! psf->sf.seekable) && (found_chunk & HAVE_SSND))
break ;
- if (ferror (psf->file))
+ if (psf_ferror (psf->filedes))
{ psf_log_printf (psf, "*** Error on file handle. ***\n") ;
- clearerr (psf->file) ;
+ psf_fclearerr (psf->filedes) ;
break ;
} ;
- if (ftell (psf->file) >= (long) (psf->filelength - (2 * sizeof (dword))))
+ if (psf_ftell (psf->filedes) >= (sf_count_t) (psf->filelength - (2 * sizeof (dword))))
break ;
+
+ if (psf->logindex >= sizeof (psf->logbuffer) - 2)
+ return SFE_LOG_OVERRUN ;
} ; /* while (1) */
if (! (found_chunk & HAVE_FORM))
@@ -346,92 +460,13 @@
if (! psf->dataoffset)
return SFE_AIFF_NO_DATA ;
- psf->current = 0 ;
- psf->sf.seekable = SF_TRUE ;
- psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
+ return 0 ;
+} /* aiff_read_header */
- psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
- fseek (psf->file, psf->dataoffset, SEEK_SET) ;
-
- psf->close = (func_close) aiff_close ;
-
- switch (psf->sf.format & SF_FORMAT_SUBMASK)
- { case SF_FORMAT_PCM :
- case SF_FORMAT_PCM_LE :
- case SF_FORMAT_PCM_BE :
- if (psf->bytewidth == 1)
- psf->chars = SF_CHARS_SIGNED ;
-
- error = pcm_read_init (psf) ;
- break ;
-
- case SF_FORMAT_FLOAT :
- error = float32_read_init (psf) ;
- break ;
-
- default : return SFE_UNIMPLEMENTED ;
- } ;
-
- return error ;
-} /* aiff_open_read */
-
-/*------------------------------------------------------------------------------
- */
-
-int
-aiff_open_write (SF_PRIVATE *psf)
-{ int error ;
-
- if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_AIFF)
- return SFE_BAD_OPEN_FORMAT ;
-
- psf->sf.seekable = SF_TRUE ;
- psf->error = 0 ;
-
- psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
- psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
- /* Set sample count artifically high and fix later. */
- psf->sf.samples = 0x7FFFFFFF / psf->blockwidth ;
-
- psf->datalength = psf->blockwidth * psf->sf.samples ;
- psf->filelength = 0x7FFFFFFF ;
-
- if ((error = aiff_write_header (psf)))
- return error ;
-
- psf->close = (func_close) aiff_close ;
- psf->write_header = (func_wr_hdr) aiff_write_header ;
-
- switch (psf->sf.format & SF_FORMAT_SUBMASK)
- { case SF_FORMAT_PCM :
- case SF_FORMAT_PCM_LE :
- case SF_FORMAT_PCM_BE :
- if (psf->bytewidth == 1)
- psf->chars = SF_CHARS_SIGNED ;
-
- error = pcm_write_init (psf) ;
- break ;
-
- case SF_FORMAT_FLOAT :
- error = float32_write_init (psf) ;
- break ;
-
- default : return SFE_UNIMPLEMENTED ;
- } ;
-
- return error ;
-} /* aiff_open_write */
-
-/*==========================================================================================
-** Private functions.
-*/
-
static int
aiff_close (SF_PRIVATE *psf)
{
- if (psf->mode == SF_MODE_WRITE)
+ if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR)
{ /* Now we know for certain the length of the file we can re-write
** correct values for the FORM, COMM and SSND chunks.
*/
@@ -438,11 +473,12 @@
aiff_write_tailer (psf) ;
- fseek (psf->file, 0, SEEK_END) ;
- psf->filelength = ftell (psf->file) ;
- fseek (psf->file, 0, SEEK_SET) ;
+ psf_fseek (psf->filedes, 0, SEEK_END) ;
+ psf->filelength = psf_ftell (psf->filedes) ;
+ psf_fseek (psf->filedes, 0, SEEK_SET) ;
psf->datalength = psf->filelength - psf->dataoffset ;
+
psf->sf.samples = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
aiff_write_header (psf) ;
@@ -457,10 +493,10 @@
static int
aiff_read_comm_chunk (SF_PRIVATE *psf, COMM_CHUNK *comm_fmt)
-{ int error = 0, bytesread ;
-
- bytesread = psf_binheader_readf (psf, "L", &(comm_fmt->size)) ;
+{ int error = 0, bytesread, subformat ;
+ bytesread = psf_binheader_readf (psf, "E4", &(comm_fmt->size)) ;
+
/* 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.
@@ -467,16 +503,21 @@
*/
bytesread +=
- psf_binheader_readf (psf, "WLWB", &(comm_fmt->numChannels), &(comm_fmt->numSampleFrames),
+ psf_binheader_readf (psf, "E242b", &(comm_fmt->numChannels), &(comm_fmt->numSampleFrames),
&(comm_fmt->sampleSize), &(comm_fmt->sampleRate), sizeof (comm_fmt->sampleRate)) ;
if (comm_fmt->size == AIFF_COMM_SIZE)
comm_fmt->encoding = NONE_MARKER ;
else if (comm_fmt->size >= AIFC_COMM_SIZE)
- { bytesread +=
- psf_binheader_readf (psf, "mB", &(comm_fmt->encoding), &(comm_fmt->zero_bytes), 2) ;
+ { unsigned char encoding_len ;
- psf_binheader_readf (psf, "B", psf->header, comm_fmt->size - AIFC_COMM_SIZE) ;
+ bytesread += psf_binheader_readf (psf, "Em1", &(comm_fmt->encoding), &encoding_len) ;
+
+ memset (psf->buffer, 0, comm_fmt->size) ;
+
+ bytesread += psf_binheader_readf (psf, "b", psf->buffer,
+ comm_fmt->size - AIFC_COMM_SIZE + 1) ;
+ psf->buffer [encoding_len] = 0 ;
} ;
psf_log_printf (psf, " COMM : %d\n", comm_fmt->size) ;
@@ -490,37 +531,93 @@
{ 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->endian = SF_ENDIAN_BIG ;
+
switch (comm_fmt->encoding)
{ case NONE_MARKER :
- psf->endian = SF_ENDIAN_BIG ;
- psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_PCM) ;
+ psf->sf.format = (SF_FORMAT_AIFF | subformat) ;
break ;
-
+
case twos_MARKER :
- psf->endian = SF_ENDIAN_BIG ;
- psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_PCM_BE) ;
+ case in32_MARKER :
+ psf->sf.format = (SF_ENDIAN_BIG | SF_FORMAT_AIFF | subformat) ;
break ;
case sowt_MARKER :
+ case ni32_MARKER :
psf->endian = SF_ENDIAN_LITTLE ;
- psf->sf.format = (SF_FORMAT_AIFF | SF_FORMAT_PCM_LE) ;
+ psf->sf.format = (SF_ENDIAN_LITTLE | SF_FORMAT_AIFF | subformat) ;
break ;
case fl32_MARKER :
case FL32_MARKER :
- psf->endian = SF_ENDIAN_BIG ;
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 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 : %D\n", comm_fmt->encoding) ;
error = SFE_UNIMPLEMENTED ;
} ;
- psf_log_printf (psf, " Encoding : %D\n", comm_fmt->encoding) ;
+ if (! psf->buffer [0])
+ psf_log_printf (psf, " Encoding : %D\n", comm_fmt->encoding) ;
+ else
+ psf_log_printf (psf, " Encoding : %D => %s\n", comm_fmt->encoding, (char*) psf->buffer) ;
return error ;
} /* aiff_read_comm_chunk */
@@ -529,39 +626,120 @@
aiff_write_header (SF_PRIVATE *psf)
{ unsigned char comm_sample_rate [10], comm_zero_bytes [2] = { 0, 0 } ;
unsigned int comm_type, comm_size, comm_encoding ;
- int k ;
+ int k, endian ;
+ short bit_width ;
+ endian = psf->sf.format & SF_FORMAT_ENDMASK ;
+ if (CPU_IS_LITTLE_ENDIAN && endian == SF_ENDIAN_CPU)
+ endian = SF_ENDIAN_LITTLE ;
+
+ /* Standard value here. */
+ bit_width = psf->bytewidth * 8 ;
+
switch (psf->sf.format & SF_FORMAT_SUBMASK)
- { case SF_FORMAT_PCM : /* Standard big endian AIFF. */
- psf->endian = SF_ENDIAN_BIG ;
- comm_type = AIFF_MARKER ;
- comm_size = AIFF_COMM_SIZE ;
- comm_encoding = 0 ;
+ { case SF_FORMAT_PCM_S8 :
+ case SF_FORMAT_PCM_16 :
+ case SF_FORMAT_PCM_24 :
+ case SF_FORMAT_PCM_32 :
+ switch (endian)
+ { case SF_ENDIAN_BIG :
+ psf->endian = SF_ENDIAN_BIG ;
+ comm_type = AIFC_MARKER ;
+ comm_size = AIFC_COMM_SIZE ;
+ comm_encoding = twos_MARKER ;
+ break ;
+
+ case SF_ENDIAN_LITTLE :
+ psf->endian = SF_ENDIAN_LITTLE ;
+ comm_type = AIFC_MARKER ;
+ comm_size = AIFC_COMM_SIZE ;
+ comm_encoding = sowt_MARKER ;
+ break ;
+
+ default : /* SF_ENDIAN_FILE */
+ psf->endian = SF_ENDIAN_BIG ;
+ comm_type = AIFF_MARKER ;
+ comm_size = AIFF_COMM_SIZE ;
+ comm_encoding = 0 ;
+ break ;
+ } ;
break ;
- case SF_FORMAT_PCM_BE : /* Big endian AIFC. */
+ case SF_FORMAT_FLOAT : /* Big endian floating point. */
psf->endian = SF_ENDIAN_BIG ;
comm_type = AIFC_MARKER ;
comm_size = AIFC_COMM_SIZE ;
- comm_encoding = twos_MARKER ;
+ comm_encoding = FL32_MARKER ; /* Use 'FL32' because its easier to read. */
+ psf->has_peak = SF_TRUE ;
+ psf->peak_loc = SF_PEAK_START ;
break ;
-
- case SF_FORMAT_PCM_LE : /* Little endian AIFC. */
- psf->endian = SF_ENDIAN_LITTLE ;
+
+ case SF_FORMAT_DOUBLE : /* Big endian double precision floating point. */
+ psf->endian = SF_ENDIAN_BIG ;
comm_type = AIFC_MARKER ;
comm_size = AIFC_COMM_SIZE ;
- comm_encoding = sowt_MARKER ;
+ comm_encoding = FL64_MARKER ; /* Use 'FL64' because its easier to read. */
+ psf->has_peak = SF_TRUE ;
+ psf->peak_loc = SF_PEAK_START ;
break ;
- case SF_FORMAT_FLOAT : /* Big endian floating point. */
+ case SF_FORMAT_ULAW :
psf->endian = SF_ENDIAN_BIG ;
comm_type = AIFC_MARKER ;
comm_size = AIFC_COMM_SIZE ;
- comm_encoding = FL32_MARKER ; /* Use 'FL32' because its easier to read. */
- psf->has_peak = SF_TRUE ;
- psf->peak_loc = SF_PEAK_START ;
+ comm_encoding = ulaw_MARKER ;
+ psf->has_peak = SF_FALSE ;
break ;
+ case SF_FORMAT_ALAW :
+ psf->endian = SF_ENDIAN_BIG ;
+ comm_type = AIFC_MARKER ;
+ comm_size = AIFC_COMM_SIZE ;
+ comm_encoding = alaw_MARKER ;
+ psf->has_peak = SF_FALSE ;
+ break ;
+
+ case SF_FORMAT_PCM_U8 :
+ psf->endian = SF_ENDIAN_BIG ;
+ comm_type = AIFC_MARKER ;
+ comm_size = AIFC_COMM_SIZE ;
+ comm_encoding = raw_MARKER ;
+ psf->has_peak = SF_FALSE ;
+ break ;
+
+ case SF_FORMAT_DWVW_12 :
+ psf->endian = SF_ENDIAN_BIG ;
+ comm_type = AIFC_MARKER ;
+ comm_size = AIFC_COMM_SIZE ;
+ comm_encoding = DWVW_MARKER ;
+ psf->has_peak = SF_FALSE ;
+
+ /* Override standard value here.*/
+ bit_width = 12 ;
+ break ;
+
+ case SF_FORMAT_DWVW_16 :
+ psf->endian = SF_ENDIAN_BIG ;
+ comm_type = AIFC_MARKER ;
+ comm_size = AIFC_COMM_SIZE ;
+ comm_encoding = DWVW_MARKER ;
+ psf->has_peak = SF_FALSE ;
+
+ /* Override standard value here.*/
+ bit_width = 16 ;
+ break ;
+
+ case SF_FORMAT_DWVW_24 :
+ psf->endian = SF_ENDIAN_BIG ;
+ comm_type = AIFC_MARKER ;
+ comm_size = AIFC_COMM_SIZE ;
+ comm_encoding = DWVW_MARKER ;
+ psf->has_peak = SF_FALSE ;
+
+ /* Override standard value here.*/
+ bit_width = 24 ;
+ break ;
+
default : return SFE_BAD_OPEN_FORMAT ;
} ;
@@ -568,35 +746,35 @@
/* Reset the current header length to zero. */
psf->header [0] = 0 ;
psf->headindex = 0 ;
- fseek (psf->file, 0, SEEK_SET) ;
+ psf_fseek (psf->filedes, 0, SEEK_SET) ;
- psf_binheader_writef (psf, "mL", FORM_MARKER, psf->filelength - 8) ;
+ psf_binheader_writef (psf, "Etm8", FORM_MARKER, psf->filelength - 8) ;
/* Write COMM chunk. */
- psf_binheader_writef (psf, "mmL", comm_type, COMM_MARKER, comm_size) ;
+ psf_binheader_writef (psf, "Emm4", comm_type, COMM_MARKER, comm_size) ;
uint2tenbytefloat (psf->sf.samplerate, comm_sample_rate) ;
- psf_binheader_writef (psf, "WLW", psf->sf.channels, psf->sf.samples, psf->sf.pcmbitwidth) ;
- psf_binheader_writef (psf, "B", comm_sample_rate, sizeof (comm_sample_rate)) ;
+ psf_binheader_writef (psf, "Et282", psf->sf.channels, psf->sf.samples, 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)) ;
+ psf_binheader_writef (psf, "mb", comm_encoding, comm_zero_bytes, sizeof (comm_zero_bytes)) ;
if (psf->has_peak && psf->peak_loc == SF_PEAK_START)
- { psf_binheader_writef (psf, "mL", PEAK_MARKER,
+ { psf_binheader_writef (psf, "Em4", PEAK_MARKER,
sizeof (psf->peak) - sizeof (psf->peak.peak) + psf->sf.channels * sizeof (PEAK_POS)) ;
- psf_binheader_writef (psf, "LL", 1, time (NULL)) ;
+ psf_binheader_writef (psf, "E44", 1, time (NULL)) ;
for (k = 0 ; k < psf->sf.channels ; k++)
- psf_binheader_writef (psf, "FL", psf->peak.peak[k].value, psf->peak.peak[k].position) ; /* XXXXX */
+ psf_binheader_writef (psf, "Ef4", psf->peak.peak[k].value, psf->peak.peak[k].position) ; /* XXXXX */
} ;
/* Write SSND chunk. */
- psf_binheader_writef (psf, "mLLL", SSND_MARKER, psf->datalength + SSND_CHUNK_SIZE, 0, 0) ;
+ psf_binheader_writef (psf, "Etm844", SSND_MARKER, psf->datalength + SSND_CHUNK_SIZE, 0, 0) ;
- /* Header cunstruction complete so write it out. */
- fwrite (psf->header, psf->headindex, 1, psf->file) ;
+ /* Header construction complete so write it out. */
+ psf_fwrite (psf->header, psf->headindex, 1, psf->filedes) ;
psf->dataoffset = psf->headindex ;
@@ -610,38 +788,22 @@
/* Reset the current header length to zero. */
psf->header [0] = 0 ;
psf->headindex = 0 ;
- fseek (psf->file, 0, SEEK_SET) ;
+ psf_fseek (psf->filedes, 0, SEEK_SET) ;
if (psf->has_peak && psf->peak_loc == SF_PEAK_END)
- { psf_binheader_writef (psf, "mL", PEAK_MARKER,
+ { psf_binheader_writef (psf, "Em4", PEAK_MARKER,
sizeof (psf->peak) - sizeof (psf->peak.peak) + psf->sf.channels * sizeof (PEAK_POS)) ;
- psf_binheader_writef (psf, "LL", 1, time (NULL)) ;
+ psf_binheader_writef (psf, "E44", 1, time (NULL)) ;
for (k = 0 ; k < psf->sf.channels ; k++)
- psf_binheader_writef (psf, "FL", psf->peak.peak[k].value, psf->peak.peak[k].position) ; /* XXXXX */
+ psf_binheader_writef (psf, "Ef4", psf->peak.peak[k].value, psf->peak.peak[k].position) ; /* XXXXX */
} ;
if (psf->headindex)
- fwrite (psf->header, psf->headindex, 1, psf->file) ;
+ psf_fwrite (psf->header, psf->headindex, 1, psf->filedes) ;
return 0 ;
} /* aiff_write_tailer */
-/*-
-static void
-endswap_comm_fmt (COMM_CHUNK *comm)
-{ comm->size = ENDSWAP_INT (comm->size) ;
- comm->numChannels = ENDSWAP_SHORT (comm->numChannels) ;
- comm->numSampleFrames = ENDSWAP_INT (comm->numSampleFrames) ;
- comm->sampleSize = ENDSWAP_SHORT (comm->sampleSize) ;
-} /+* endswap_comm_fmt *+/
-
-static void
-endswap_ssnd_fmt (SSND_CHUNK *ssnd)
-{ ssnd->offset = ENDSWAP_INT (ssnd->offset) ;
- ssnd->blocksize = ENDSWAP_INT (ssnd->blocksize) ;
-} /+* endswap_ssnd_fmt *+/
--*/
-
/*==========================================================================================
** 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
@@ -678,7 +840,9 @@
static void
uint2tenbytefloat (unsigned int num, unsigned char *bytes)
-{ int count, mask = 0x40000000 ;
+{ unsigned int mask = 0x40000000 ;
+ int count ;
+
memset (bytes, 0, 10) ;
--- a/common/libsndfile/src/alaw.c
+++ b/common/libsndfile/src/alaw.c
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 1999-2001 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
**
** 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
@@ -16,67 +16,72 @@
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-
#include <unistd.h>
#include "sndfile.h"
-#include "floatcast.h"
+#include "float_cast.h"
#include "common.h"
-static int alaw_read_alaw2s (SF_PRIVATE *psf, short *ptr, unsigned int len) ;
-static int alaw_read_alaw2i (SF_PRIVATE *psf, int *ptr, unsigned int len) ;
-static int alaw_read_alaw2f (SF_PRIVATE *psf, float *ptr, unsigned int len) ;
-static int alaw_read_alaw2d (SF_PRIVATE *psf, double *ptr, unsigned int len, int normalize) ;
+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 int alaw_write_s2alaw (SF_PRIVATE *psf, short *ptr, unsigned int len) ;
-static int alaw_write_i2alaw (SF_PRIVATE *psf, int *ptr, unsigned int len) ;
-static int alaw_write_f2alaw (SF_PRIVATE *psf, float *ptr, unsigned int len) ;
-static int alaw_write_d2alaw (SF_PRIVATE *psf, double *ptr, unsigned int len, int normalize) ;
+static sf_count_t alaw_write_s2alaw (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
+static sf_count_t alaw_write_i2alaw (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
+static sf_count_t alaw_write_f2alaw (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
+static sf_count_t alaw_write_d2alaw (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static void alaw2s_array (unsigned char *buffer, unsigned int count, short *ptr, unsigned int index) ;
-static void alaw2i_array (unsigned char *buffer, unsigned int count, int *ptr, unsigned int index) ;
-static void alaw2f_array (unsigned char *buffer, unsigned int count, float *ptr, unsigned int index, float normfact) ;
-static void alaw2d_array (unsigned char *buffer, unsigned int count, double *ptr, unsigned int index, double normfact) ;
+static void alaw2s_array (unsigned char *buffer, unsigned int count, short *ptr) ;
+static void alaw2i_array (unsigned char *buffer, unsigned int count, int *ptr) ;
+static void alaw2f_array (unsigned char *buffer, unsigned int count, float *ptr, float normfact) ;
+static void alaw2d_array (unsigned char *buffer, unsigned int count, double *ptr, double normfact) ;
-static void s2alaw_array (short *buffer, unsigned int count, unsigned char *ptr, unsigned int index) ;
-static void i2alaw_array (int *buffer, unsigned int count, unsigned char *ptr, unsigned int index) ;
-static void f2alaw_array (float *buffer, unsigned int count, unsigned char *ptr, unsigned int index, float normfact) ;
-static void d2alaw_array (double *buffer, unsigned int count, unsigned char *ptr, unsigned int index, double normfact) ;
+static void s2alaw_array (short *buffer, unsigned int count, unsigned char *ptr) ;
+static void i2alaw_array (int *buffer, unsigned int count, unsigned char *ptr) ;
+static void f2alaw_array (float *buffer, unsigned int count, unsigned char *ptr, float normfact) ;
+static void d2alaw_array (double *buffer, unsigned int count, unsigned char *ptr, double normfact) ;
-int
-alaw_read_init (SF_PRIVATE *psf)
+
+int
+alaw_init (SF_PRIVATE *psf)
{
- psf->read_short = (func_short) alaw_read_alaw2s ;
- psf->read_int = (func_int) alaw_read_alaw2i ;
- psf->read_float = (func_float) alaw_read_alaw2f ;
- psf->read_double = (func_double) alaw_read_alaw2d ;
+ if (psf->mode == SFM_READ || psf->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->mode == SFM_WRITE || psf->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 ;
+ } ;
- return 0 ;
-} /* alaw_read_init */
+ psf->bytewidth = 1 ;
+ psf->blockwidth = psf->sf.channels ;
-int
-alaw_write_init (SF_PRIVATE *psf)
-{
- psf->write_short = (func_short) alaw_write_s2alaw ;
- psf->write_int = (func_int) alaw_write_i2alaw ;
- psf->write_float = (func_float) alaw_write_f2alaw ;
- psf->write_double = (func_double) alaw_write_d2alaw ;
+ psf->filelength = psf_get_filelen (psf->filedes) ;
+ psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset :
+ psf->filelength - psf->dataoffset ;
+ psf->sf.samples = psf->datalength / psf->blockwidth ;
return 0 ;
-} /* alaw_read_init */
+} /* alaw_init */
-static int
-alaw_read_alaw2s (SF_PRIVATE *psf, short *ptr, unsigned int len)
-{ unsigned int readcount, thisread, index = 0 ;
- int bytecount, bufferlen ;
- int total = 0 ;
+static sf_count_t
+alaw_read_alaw2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
+{ sf_count_t readcount, thisread, index = 0, total = 0 ;
+ sf_count_t bytecount, bufferlen ;
bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- alaw2s_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ alaw2s_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -91,18 +96,17 @@
return total ;
} /* alaw_read_alaw2s */
-static int
-alaw_read_alaw2i (SF_PRIVATE *psf, int *ptr, unsigned int len)
-{ unsigned int readcount, thisread, index = 0 ;
- int bytecount, bufferlen ;
- int total = 0 ;
+static sf_count_t
+alaw_read_alaw2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
+{ sf_count_t readcount, thisread, index = 0, total = 0 ;
+ sf_count_t bytecount, bufferlen ;
bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- alaw2i_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ alaw2i_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -117,11 +121,10 @@
return total ;
} /* alaw_read_alaw2i */
-static int
-alaw_read_alaw2f (SF_PRIVATE *psf, float *ptr, unsigned int len)
-{ unsigned int readcount, thisread, index = 0 ;
- int bytecount, bufferlen ;
- int total = 0 ;
+static sf_count_t
+alaw_read_alaw2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ sf_count_t readcount, thisread, index = 0, total = 0 ;
+ sf_count_t bytecount, bufferlen ;
float normfact ;
normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
@@ -130,8 +133,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- alaw2f_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ alaw2f_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr + index, normfact) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -146,20 +149,19 @@
return total ;
} /* alaw_read_alaw2f */
-static int
-alaw_read_alaw2d (SF_PRIVATE *psf, double *ptr, unsigned int len, int normalize)
-{ unsigned int readcount, thisread, index = 0 ;
- int bytecount, bufferlen ;
- int total = 0 ;
+static sf_count_t
+alaw_read_alaw2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ sf_count_t readcount, thisread, index = 0, total = 0 ;
+ sf_count_t bytecount, bufferlen ;
double normfact ;
- normfact = (normalize ? 1.0 / ((double) 0x8000) : 1.0) ;
+ normfact = (psf->norm_double) ? 1.0 / ((double) 0x8000) : 1.0 ;
bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- alaw2d_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ alaw2d_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr + index, normfact) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -177,18 +179,17 @@
/*=============================================================================================
*/
-static int
-alaw_write_s2alaw (SF_PRIVATE *psf, short *ptr, unsigned int len)
-{ unsigned int writecount, thiswrite, index = 0 ;
- int bytecount, bufferlen ;
- int total = 0 ;
+static sf_count_t
+alaw_write_s2alaw (SF_PRIVATE *psf, short *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite, index = 0, total = 0 ;
+ sf_count_t bytecount, bufferlen ;
bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- s2alaw_array (ptr, index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ s2alaw_array (ptr + index, writecount / psf->bytewidth, (unsigned char*) (psf->buffer)) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -203,18 +204,17 @@
return total ;
} /* alaw_write_s2alaw */
-static int
-alaw_write_i2alaw (SF_PRIVATE *psf, int *ptr, unsigned int len)
-{ unsigned int writecount, thiswrite, index = 0 ;
- int bytecount, bufferlen ;
- int total = 0 ;
+static sf_count_t
+alaw_write_i2alaw (SF_PRIVATE *psf, int *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite, index = 0, total = 0 ;
+ sf_count_t bytecount, bufferlen ;
bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- i2alaw_array (ptr, index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ i2alaw_array (ptr + index, writecount / psf->bytewidth, (unsigned char*) (psf->buffer)) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -229,11 +229,10 @@
return total ;
} /* alaw_write_i2alaw */
-static int
-alaw_write_f2alaw (SF_PRIVATE *psf, float *ptr, unsigned int len)
-{ unsigned int writecount, thiswrite, index = 0 ;
- int bytecount, bufferlen ;
- int total = 0 ;
+static sf_count_t
+alaw_write_f2alaw (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite, index = 0, total = 0 ;
+ sf_count_t bytecount, bufferlen ;
float normfact ;
normfact = (psf->norm_float == SF_TRUE) ? ((float) 0x8000) : 1.0 ;
@@ -242,8 +241,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- f2alaw_array (ptr, index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ f2alaw_array (ptr + index, writecount / psf->bytewidth, (unsigned char*) (psf->buffer), normfact) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -258,21 +257,20 @@
return total ;
} /* alaw_write_f2alaw */
-static int
-alaw_write_d2alaw (SF_PRIVATE *psf, double *ptr, unsigned int len, int normalize)
-{ unsigned int writecount, thiswrite, index = 0 ;
- int bytecount, bufferlen ;
- int total = 0 ;
+static sf_count_t
+alaw_write_d2alaw (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite, index = 0, total = 0 ;
+ sf_count_t bytecount, bufferlen ;
double normfact ;
- normfact = (normalize ? ((double) 0x8000) : 1.0) ;
+ normfact = (psf->norm_double) ? ((double) 0x8000) : 1.0 ;
bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- d2alaw_array (ptr, index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ d2alaw_array (ptr + index, writecount / psf->bytewidth, (unsigned char*) (psf->buffer), normfact) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -487,102 +485,90 @@
} ; /* alaw_encode */
static void
-alaw2s_array (unsigned char *buffer, unsigned int count, short *ptr, unsigned int index)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { if (buffer [k] & 0x80)
- ptr [index] = -1 * alaw_decode [((int) buffer [k]) & 0x7F] ;
+alaw2s_array (unsigned char *buffer, unsigned int count, short *ptr)
+{ while (count)
+ { count -- ;
+ if (buffer [count] & 0x80)
+ ptr [count] = -1 * alaw_decode [((int) buffer [count]) & 0x7F] ;
else
- ptr [index] = alaw_decode [((int) buffer [k]) & 0x7F] ;
- index ++ ;
+ ptr [count] = alaw_decode [((int) buffer [count]) & 0x7F] ;
} ;
} /* alaw2s_array */
static void
-alaw2i_array (unsigned char *buffer, unsigned int count, int *ptr, unsigned int index)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { if (buffer [k] & 0x80)
- ptr [index] = -1 * alaw_decode [((int) buffer [k]) & 0x7F] ;
+alaw2i_array (unsigned char *buffer, unsigned int count, int *ptr)
+{ while (count)
+ { count -- ;
+ if (buffer [count] & 0x80)
+ ptr [count] = (-1 * alaw_decode [((int) buffer [count]) & 0x7F]) << 16 ;
else
- ptr [index] = alaw_decode [((int) buffer [k]) & 0x7F] ;
- index ++ ;
+ ptr [count] = alaw_decode [((int) buffer [count]) & 0x7F] << 16 ;
} ;
} /* alaw2i_array */
static void
-alaw2f_array (unsigned char *buffer, unsigned int count, float *ptr, unsigned int index, float normfact)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { if (buffer [k] & 0x80)
- ptr [index] = -normfact * alaw_decode [((int) buffer [k]) & 0x7F] ;
+alaw2f_array (unsigned char *buffer, unsigned int count, float *ptr, float normfact)
+{ while (count)
+ { count -- ;
+ if (buffer [count] & 0x80)
+ ptr [count] = -normfact * alaw_decode [((int) buffer [count]) & 0x7F] ;
else
- ptr [index] = normfact * alaw_decode [((int) buffer [k]) & 0x7F] ;
- index ++ ;
+ ptr [count] = normfact * alaw_decode [((int) buffer [count]) & 0x7F] ;
} ;
} /* alaw2d_array */
static void
-alaw2d_array (unsigned char *buffer, unsigned int count, double *ptr, unsigned int index, double normfact)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { if (buffer [k] & 0x80)
- ptr [index] = -normfact * alaw_decode [((int) buffer [k]) & 0x7F] ;
+alaw2d_array (unsigned char *buffer, unsigned int count, double *ptr, double normfact)
+{ while (count)
+ { count -- ;
+ if (buffer [count] & 0x80)
+ ptr [count] = -normfact * alaw_decode [((int) buffer [count]) & 0x7F] ;
else
- ptr [index] = normfact * alaw_decode [((int) buffer [k]) & 0x7F] ;
- index ++ ;
+ ptr [count] = normfact * alaw_decode [((int) buffer [count]) & 0x7F] ;
} ;
} /* alaw2d_array */
static void
-s2alaw_array (short *ptr, unsigned int index, unsigned char *buffer, unsigned int count)
-{ unsigned int k ;
-
- for (k = 0 ; k < count ; k++)
- { if (ptr [index] >= 0)
- buffer [k] = alaw_encode [ptr [index] / 16] ;
+s2alaw_array (short *ptr, unsigned int count, unsigned char *buffer)
+{ while (count)
+ { count -- ;
+ if (ptr [count] >= 0)
+ buffer [count] = alaw_encode [ptr [count] / 16] ;
else
- buffer [k] = 0x7F & alaw_encode [ptr [index] / -16] ;
- index ++ ;
+ buffer [count] = 0x7F & alaw_encode [ptr [count] / -16] ;
} ;
} /* s2alaw_array */
static void
-i2alaw_array (int *ptr, unsigned int index, unsigned char *buffer, unsigned int count)
-{ unsigned int k ;
-
- for (k = 0 ; k < count ; k++)
- { if (ptr [index] >= 0)
- buffer [k] = alaw_encode [ptr [index] / 16] ;
+i2alaw_array (int *ptr, unsigned int count, unsigned char *buffer)
+{ while (count)
+ { count -- ;
+ if (ptr [count] >= 0)
+ buffer [count] = alaw_encode [ptr [count] >> (16 + 4)] ;
else
- buffer [k] = 0x7F & alaw_encode [ptr [index] / -16] ;
- index ++ ;
+ buffer [count] = 0x7F & alaw_encode [- ptr [count] >> (16 + 4)] ;
} ;
} /* i2alaw_array */
static void
-f2alaw_array (float *ptr, unsigned int index, unsigned char *buffer, unsigned int count, float normfact)
-{ unsigned int k ;
-
- for (k = 0 ; k < count ; k++)
- { if (ptr [index] >= 0)
- buffer [k] = alaw_encode [(FLOAT_TO_INT (normfact * ptr [index])) / 16] ;
+f2alaw_array (float *ptr, unsigned int count, unsigned char *buffer, float normfact)
+{ while (count)
+ { count -- ;
+ if (ptr [count] >= 0)
+ buffer [count] = alaw_encode [(lrintf (normfact * ptr [count])) / 16] ;
else
- buffer [k] = 0x7F & alaw_encode [(FLOAT_TO_INT (normfact * ptr [index])) / -16] ;
- index ++ ;
+ buffer [count] = 0x7F & alaw_encode [(lrintf (normfact * ptr [count])) / -16] ;
} ;
} /* f2alaw_array */
static void
-d2alaw_array (double *ptr, unsigned int index, unsigned char *buffer, unsigned int count, double normfact)
-{ unsigned int k ;
-
- for (k = 0 ; k < count ; k++)
- { if (ptr [index] >= 0)
- buffer [k] = alaw_encode [(DOUBLE_TO_INT (normfact * ptr [index])) / 16] ;
+d2alaw_array (double *ptr, unsigned int count, unsigned char *buffer, double normfact)
+{ while (count)
+ { count -- ;
+ if (ptr [count] >= 0)
+ buffer [count] = alaw_encode [(lrint (normfact * ptr [count])) / 16] ;
else
- buffer [k] = 0x7F & alaw_encode [(DOUBLE_TO_INT (normfact * ptr [index])) / -16] ;
- index ++ ;
+ buffer [count] = 0x7F & alaw_encode [(lrint (normfact * ptr [count])) / -16] ;
} ;
} /* d2alaw_array */
--- a/common/libsndfile/src/au.c
+++ b/common/libsndfile/src/au.c
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 1999-2001 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
**
** 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
@@ -16,7 +16,6 @@
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
@@ -94,216 +93,128 @@
static int au_close (SF_PRIVATE *psf) ;
-static int get_encoding (unsigned int format, unsigned int bitwidth) ;
-static char const* get_encoding_str(int format) ;
+static int au_format_to_encoding (int format) ;
static int au_write_header (SF_PRIVATE *psf) ;
+static int au_read_header (SF_PRIVATE *psf) ;
-/*
-static void endswap_au_fmt (AU_FMT *pau_fmt) ;
-*/
-
/*------------------------------------------------------------------------------
-** Public functions.
+** Public function.
*/
int
-au_open_read (SF_PRIVATE *psf)
-{ AU_FMT au_fmt ;
- unsigned int marker, dword ;
- int error = SFE_NO_ERROR ;
-
- psf_binheader_readf (psf, "pm", 0, &marker) ;
- psf_log_printf (psf, "%D\n", marker) ;
+au_open (SF_PRIVATE *psf)
+{ int encoding, subformat ;
+ int error = 0 ;
- if (marker == DOTSND_MARKER)
- { psf->endian = SF_ENDIAN_BIG ;
+ if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0))
+ { if ((error = au_read_header (psf)))
+ return error ;
+ } ;
- psf_binheader_readf (psf, "LLLLL", &(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, "lllll", &(au_fmt.dataoffset), &(au_fmt.datasize),
- &(au_fmt.encoding), &(au_fmt.samplerate), &(au_fmt.channels)) ;
- }
- else
- return SFE_AU_NO_DOTSND ;
-
+ if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_AU)
+ return SFE_BAD_OPEN_FORMAT ;
+
+ subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
- psf_log_printf (psf, " Data Offset : %d\n", au_fmt.dataoffset) ;
+ if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR)
+ { psf->endian = psf->sf.format & SF_FORMAT_ENDMASK ;
+ 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_fmt.datasize == 0xFFFFFFFF || 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.dataoffset ;
- 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 ;
+ if (! (encoding = au_write_header (psf)))
+ return psf->error ;
+
+ psf->write_header = au_write_header ;
} ;
-
- psf->dataoffset = au_fmt.dataoffset ;
- psf->datalength = psf->filelength - psf->dataoffset ;
- psf->current = 0 ;
-
- if (fseek (psf->file, psf->dataoffset, SEEK_SET))
- return SFE_BAD_SEEK ;
-
- psf->close = (func_close) au_close ;
+ psf->close = au_close ;
- 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_FORMAT_AULE ;
+ psf->blockwidth = psf->bytewidth * psf->sf.channels ;
- psf->sf.sections = 1 ;
-
- psf_log_printf (psf, " Encoding : %d => %s\n", au_fmt.encoding, get_encoding_str (au_fmt.encoding)) ;
-
- psf_log_printf (psf, " Sample Rate : %d\n", au_fmt.samplerate) ;
- psf_log_printf (psf, " Channels : %d\n", au_fmt.channels) ;
+ switch (subformat)
+ { case SF_FORMAT_ULAW : /* 8-bit Ulaw encoding. */
+ ulaw_init (psf) ;
+ break ;
- switch (au_fmt.encoding)
- { case AU_ENCODING_PCM_8 :
- psf->sf.pcmbitwidth = 8 ;
- psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
- psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
- psf->sf.format |= SF_FORMAT_PCM ;
-
+ case SF_FORMAT_PCM_S8 : /* 8-bit linear PCM. */
psf->chars = SF_CHARS_SIGNED ;
-
- if ((error = pcm_read_init (psf)))
- return error ;
+ error = pcm_init (psf) ;
break ;
- case AU_ENCODING_PCM_16 :
- psf->sf.pcmbitwidth = 16 ;
- psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
- psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
- psf->sf.format |= SF_FORMAT_PCM ;
-
- if ((error = pcm_read_init (psf)))
- return error ;
+ 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 AU_ENCODING_PCM_24 :
- psf->sf.pcmbitwidth = 24 ;
- psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
- psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
- psf->sf.format |= SF_FORMAT_PCM ;
-
- if ((error = pcm_read_init (psf)))
- return error ;
+ case SF_FORMAT_FLOAT : /* 32-bit floats. */
+ error = float32_init (psf) ;
break ;
-
- case AU_ENCODING_PCM_32 :
- psf->sf.pcmbitwidth = 32 ;
- psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
- psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
- psf->sf.format |= SF_FORMAT_PCM ;
-
- if ((error = pcm_read_init (psf)))
- return error ;
+
+ case SF_FORMAT_DOUBLE : /* 64-bit double precision floats. */
+ error = double64_init (psf) ;
break ;
-
- case AU_ENCODING_FLOAT :
- psf->sf.pcmbitwidth = 32 ;
- psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
- psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
- psf->sf.format |= SF_FORMAT_FLOAT ;
-
- float32_read_init (psf) ;
+
+ case SF_FORMAT_ALAW : /* 8-bit Alaw encoding. */
+ alaw_init (psf) ;
break ;
+
+ case SF_FORMAT_G721_32 :
+ if (psf->mode == SFM_READ)
+ error = au_g72x_reader_init (psf, AU_H_G721_32) ;
+ else if (psf->mode == SFM_WRITE)
+ error = au_g72x_writer_init (psf, AU_H_G721_32) ;
+ psf->sf.seekable = SF_FALSE ;
+ break ;
- default :
- error = SFE_AU_UNKNOWN_FORMAT ;
+ case SF_FORMAT_G723_24 :
+ if (psf->mode == SFM_READ)
+ error = au_g72x_reader_init (psf, AU_H_G723_24) ;
+ else if (psf->mode == SFM_WRITE)
+ error = au_g72x_writer_init (psf, AU_H_G723_24) ;
+ psf->sf.seekable = SF_FALSE ;
break ;
+
+ default : break ;
} ;
+
+ return error ;
+} /* au_open */
- if (error)
- return error ;
-
- if (! psf->sf.samples && psf->blockwidth)
- psf->sf.samples = au_fmt.datasize / psf->blockwidth ;
-
-
- return 0 ;
-} /* au_open_read */
-
-
-/*------------------------------------------------------------------------------
-*/
-
int
-au_open_write (SF_PRIVATE *psf)
-{ unsigned int encoding, format, subformat ;
- int error = 0 ;
+au_nh_open (SF_PRIVATE *psf)
+{
+ if (psf->mode == SFM_RDWR)
+ return SFE_BAD_OPEN_FORMAT ;
- format = psf->sf.format & SF_FORMAT_TYPEMASK ;
- subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
- if (format == SF_FORMAT_AU)
- psf->endian = SF_ENDIAN_BIG ;
- else if (format == SF_FORMAT_AULE)
- psf->endian = SF_ENDIAN_LITTLE ;
- else
- return SFE_BAD_OPEN_FORMAT ;
-
- if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW ||
- subformat == SF_FORMAT_G721_32 || subformat == SF_FORMAT_G723_24)
- psf->bytewidth = 1 ;
- else
- psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
-
- psf->sf.seekable = SF_TRUE ;
- psf->error = 0 ;
+ if (psf_fseek (psf->filedes, psf->dataoffset, SEEK_SET))
+ return SFE_BAD_SEEK ;
- psf->blockwidth = psf->bytewidth * psf->sf.channels ;
- psf->dataoffset = AU_DATA_OFFSET ;
- psf->datalength = psf->blockwidth * psf->sf.samples ;
- psf->filelength = psf->datalength + psf->dataoffset ;
+ psf_log_printf (psf, "Headers-less u-law encoded file.\n") ;
+ psf_log_printf (psf, "Setting up for 8kHz, mono, u-law.\n") ;
+
+ psf->sf.format = SF_FORMAT_AU | SF_FORMAT_ULAW ;
- if (! (encoding = au_write_header (psf)))
- return psf->error ;
-
- psf->close = (func_close) au_close ;
- psf->write_header = (func_wr_hdr) au_write_header ;
+ psf->dataoffset = 0 ;
+ psf->endian = 0 ; /* Irrelevant but it must be something. */
+ psf->sf.samplerate = 8000 ;
+ psf->sf.channels = 1 ;
+ psf->bytewidth = 1 ; /* Before decoding */
+
+ ulaw_init (psf) ;
- switch (encoding)
- { case AU_ENCODING_PCM_8 : /* 8-bit linear PCM. */
- psf->chars = SF_CHARS_SIGNED ;
+ psf->close = au_close ;
- error = pcm_write_init (psf) ;
- break ;
+ psf->blockwidth = 1 ;
+ psf->sf.samples = psf->filelength ;
+ psf->datalength = psf->filelength - AU_DATA_OFFSET ;
- case AU_ENCODING_PCM_16 : /* 16-bit linear PCM. */
- case AU_ENCODING_PCM_24 : /* 24-bit linear PCM */
- case AU_ENCODING_PCM_32 : /* 32-bit linear PCM. */
- error = pcm_write_init (psf) ;
- break ;
+ return 0 ;
+} /* au_nh_open */
- case AU_ENCODING_FLOAT : /* 32-bit linear PCM. */
- error = float32_write_init (psf) ;
- break ;
-
- default : break ;
- } ;
-
- return error ;
-} /* au_open_write */
-
/*------------------------------------------------------------------------------
*/
@@ -310,16 +221,16 @@
static int
au_close (SF_PRIVATE *psf)
{
- if (psf->mode == SF_MODE_WRITE)
+ if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR)
{ /* Now we know for certain the length of the file we can
* re-write correct values for the datasize header element.
*/
- fseek (psf->file, 0, SEEK_END) ;
- psf->filelength = ftell (psf->file) ;
+ psf_fseek (psf->filedes, 0, SEEK_END) ;
+ psf->filelength = psf_ftell (psf->filedes) ;
psf->datalength = psf->filelength - AU_DATA_OFFSET ;
- fseek (psf->file, 0, SEEK_SET) ;
+ psf_fseek (psf->filedes, 0, SEEK_SET) ;
psf->sf.samples = psf->datalength / psf->blockwidth ;
au_write_header (psf) ;
@@ -336,7 +247,7 @@
au_write_header (SF_PRIVATE *psf)
{ int encoding ;
- encoding = get_encoding (psf->sf.format & SF_FORMAT_SUBMASK, psf->bytewidth * 8) ;
+ encoding = au_format_to_encoding (psf->sf.format & SF_FORMAT_SUBMASK) ;
if (! encoding)
{ psf->error = SFE_BAD_OPEN_FORMAT ;
return encoding ;
@@ -345,15 +256,15 @@
/* Reset the current header length to zero. */
psf->header [0] = 0 ;
psf->headindex = 0 ;
- fseek (psf->file, 0, SEEK_SET) ;
+ psf_fseek (psf->filedes, 0, SEEK_SET) ;
if (psf->endian == SF_ENDIAN_BIG)
- { psf_binheader_writef (psf, "mL", DOTSND_MARKER, AU_DATA_OFFSET) ;
- psf_binheader_writef (psf, "LLLL", psf->datalength, encoding, psf->sf.samplerate, psf->sf.channels) ;
+ { psf_binheader_writef (psf, "Em4", DOTSND_MARKER, AU_DATA_OFFSET) ;
+ psf_binheader_writef (psf, "Et8444", psf->datalength, encoding, psf->sf.samplerate, psf->sf.channels) ;
}
else if (psf->endian == SF_ENDIAN_LITTLE)
- { psf_binheader_writef (psf, "ml", DNSDOT_MARKER, AU_DATA_OFFSET) ;
- psf_binheader_writef (psf, "llll", psf->datalength, encoding, psf->sf.samplerate, psf->sf.channels) ;
+ { psf_binheader_writef (psf, "em4", DNSDOT_MARKER, AU_DATA_OFFSET) ;
+ psf_binheader_writef (psf, "et8444", psf->datalength, encoding, psf->sf.samplerate, psf->sf.channels) ;
}
else
{ psf->error = SFE_BAD_OPEN_FORMAT ;
@@ -361,7 +272,7 @@
} ;
/* Header construction complete so write it out. */
- fwrite (psf->header, psf->headindex, 1, psf->file) ;
+ psf_fwrite (psf->header, psf->headindex, 1, psf->filedes) ;
psf->dataoffset = psf->headindex ;
@@ -369,81 +280,163 @@
} /* au_write_header */
static int
-get_encoding (unsigned int format, unsigned int bitwidth)
-{ if (format == SF_FORMAT_ULAW)
- return AU_ENCODING_ULAW_8 ;
-
- if (format == SF_FORMAT_ALAW)
- return AU_ENCODING_ALAW_8 ;
+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 ;
- if (format == SF_FORMAT_G721_32)
- return AU_ENCODING_ADPCM_G721_32 ;
+ case SF_FORMAT_FLOAT : return AU_ENCODING_FLOAT ;
+ case SF_FORMAT_DOUBLE : return AU_ENCODING_DOUBLE ;
- if (format == SF_FORMAT_G723_24)
- return AU_ENCODING_ADPCM_G723_24 ;
+ 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 ;
+
+ default : break ;
+ } ;
+ return 0 ;
+} /* au_format_to_encoding */
- if (format == SF_FORMAT_FLOAT)
- return AU_ENCODING_FLOAT ;
+static int
+au_read_header (SF_PRIVATE *psf)
+{ AU_FMT au_fmt ;
+ int marker, dword ;
- if (format != SF_FORMAT_PCM)
- return 0 ;
+ psf_binheader_readf (psf, "pm", 0, &marker) ;
+ psf_log_printf (psf, "%D\n", marker) ;
- /* For PCM encoding, the header encoding field depends on the bitwidth. */
- switch (bitwidth)
- { case 8 : return AU_ENCODING_PCM_8 ;
- case 16 : return AU_ENCODING_PCM_16 ;
- case 24 : return AU_ENCODING_PCM_24 ;
- case 32 : return AU_ENCODING_PCM_32 ;
- default : break ;
+ 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 (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.dataoffset ;
+ 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 ;
} ;
- return 0 ;
-} /* get_encoding */
+
+ psf->dataoffset = au_fmt.dataoffset ;
+ psf->datalength = psf->filelength - psf->dataoffset ;
-/*-
-static void
-endswap_au_fmt (AU_FMT *pau_fmt)
-{ pau_fmt->dataoffset = ENDSWAP_INT (pau_fmt->dataoffset) ;
- pau_fmt->datasize = ENDSWAP_INT (pau_fmt->datasize) ;
- pau_fmt->encoding = ENDSWAP_INT (pau_fmt->encoding) ;
- pau_fmt->samplerate = ENDSWAP_INT (pau_fmt->samplerate) ;
- pau_fmt->channels = ENDSWAP_INT (pau_fmt->channels) ;
-} /+* endswap_au_fmt *+/
--*/
+ if (psf_fseek (psf->filedes, psf->dataoffset, SEEK_SET) != psf->dataoffset)
+ return SFE_BAD_SEEK ;
-static char const*
-get_encoding_str (int format)
-{ switch (format)
+ psf->close = au_close ;
+
+ 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 = psf->sf.format & SF_FORMAT_ENDMASK ;
+
+ switch (au_fmt.encoding)
{ case AU_ENCODING_ULAW_8 :
- return "8-bit ISDN u-law" ;
-
+ 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 :
- return "8-bit linear PCM" ;
+ 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 :
- return "16-bit linear PCM" ;
+ 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 :
- return "24-bit linear PCM" ;
+ 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 :
- return "32-bit linear PCM" ;
+ 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 :
- return "32-bit 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 :
- return "8-bit ISDN A-law" ;
+ 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 :
- return "G721 32kbs ADPCM" ;
+ 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 :
- return "G723 24kbs ADPCM" ;
+ 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_NEXT :
- return "Weird NeXT encoding format (unsupported)" ;
+ psf_log_printf (psf, "Weird NeXT encoding format (unsupported)\n") ;
+ break ;
+
+ default :
+ psf_log_printf (psf, "Unknown!!\n") ;
+ break ;
} ;
- return "Unknown!!" ;
-} /* get_encoding_str */
+ psf_log_printf (psf, " Sample Rate : %d\n", au_fmt.samplerate) ;
+ psf_log_printf (psf, " Channels : %d\n", au_fmt.channels) ;
+
+ psf->blockwidth = psf->sf.channels * psf->bytewidth ;
+
+ if (! psf->sf.samples && psf->blockwidth)
+ psf->sf.samples = (psf->filelength - psf->dataoffset) / psf->blockwidth ;
+ return 0 ;
+} /* au_read_header */
--- a/common/libsndfile/src/au.h
+++ b/common/libsndfile/src/au.h
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 1999-2001 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
**
** 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
--- a/common/libsndfile/src/au_g72x.c
+++ b/common/libsndfile/src/au_g72x.c
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 1999-2001 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
**
** 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
@@ -19,33 +19,32 @@
#include <stdio.h>
#include <unistd.h>
#include <string.h>
-#include <math.h>
-#include "config.h"
#include "sndfile.h"
+#include "config.h"
#include "sfendian.h"
-#include "floatcast.h"
+#include "float_cast.h"
#include "common.h"
#include "au.h"
#include "G72x/g72x.h"
-static int au_g72x_read_block (SF_PRIVATE *psf, G72x_DATA *pg72x) ;
-static int au_g72x_read (SF_PRIVATE *psf, G72x_DATA *pg72x, short *ptr, int len) ;
+static int au_g72x_decode_block (SF_PRIVATE *psf, G72x_DATA *pg72x) ;
+static int au_g72x_read_block (SF_PRIVATE *psf, G72x_DATA *pg72x, short *ptr, sf_count_t len) ;
-static int au_g72x_write_block (SF_PRIVATE *psf, G72x_DATA *pg72x) ;
-static int au_g72x_write (SF_PRIVATE *psf, G72x_DATA *pg72x, short *ptr, int len) ;
+static int au_g72x_encode_block (SF_PRIVATE *psf, G72x_DATA *pg72x) ;
+static int au_g72x_write_block (SF_PRIVATE *psf, G72x_DATA *pg72x, short *ptr, sf_count_t len) ;
-static int au_g72x_read_s (SF_PRIVATE *psf, short *ptr, int len) ;
-static int au_g72x_read_i (SF_PRIVATE *psf, int *ptr, int len) ;
-static int au_g72x_read_f (SF_PRIVATE *psf, float *ptr, int len) ;
-static int au_g72x_read_d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+static sf_count_t au_g72x_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
+static sf_count_t au_g72x_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
+static sf_count_t au_g72x_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
+static sf_count_t au_g72x_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static int au_g72x_write_s (SF_PRIVATE *psf, short *ptr, int len) ;
-static int au_g72x_write_i (SF_PRIVATE *psf, int *ptr, int len) ;
-static int au_g72x_write_f (SF_PRIVATE *psf, float *ptr, int len) ;
-static int au_g72x_write_d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+static sf_count_t au_g72x_write_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
+static sf_count_t au_g72x_write_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
+static sf_count_t au_g72x_write_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
+static sf_count_t au_g72x_write_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static long au_g72x_seek (SF_PRIVATE *psf, long offset, int whence) ;
+static sf_count_t au_g72x_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
static int au_g72x_close (SF_PRIVATE *psf) ;
@@ -61,9 +60,6 @@
psf->sf.seekable = SF_FALSE ;
- if (psf->mode != SF_MODE_READ)
- return SFE_BAD_MODE_RW ;
-
if (! (pg72x = malloc (sizeof (G72x_DATA))))
return SFE_MALLOC_FAILED ;
@@ -84,17 +80,22 @@
pg72x->bytesperblock = G723_24_BYTES_PER_BLOCK ;
bitspersample = G723_24_BITS_PER_SAMPLE ;
break ;
- default : return 0 ;
+ default : return SFE_UNIMPLEMENTED ;
} ;
- psf->read_short = (func_short) au_g72x_read_s ;
- psf->read_int = (func_int) au_g72x_read_i ;
- psf->read_float = (func_float) au_g72x_read_f ;
- psf->read_double = (func_double) au_g72x_read_d ;
+ psf->read_short = au_g72x_read_s ;
+ psf->read_int = au_g72x_read_i ;
+ psf->read_float = au_g72x_read_f ;
+ psf->read_double = au_g72x_read_d ;
- psf->seek_func = (func_seek) au_g72x_seek ;
- psf->close = (func_close) au_g72x_close ;
+ psf->new_seek = au_g72x_seek ;
+ psf->close = au_g72x_close ;
+ psf->blockwidth = psf->bytewidth = 1 ;
+
+ psf->filelength = psf_get_filelen (psf->filedes) ;
+ psf->datalength = psf->filelength - psf->dataoffset ;
+
if (psf->datalength % pg72x->blocksize)
pg72x->blocks = (psf->datalength / pg72x->blocksize) + 1 ;
else
@@ -105,9 +106,7 @@
if ((psf->sf.samples * bitspersample) / 8 != psf->datalength)
psf_log_printf (psf, "*** Warning : weird psf->datalength.\n") ;
- psf->blockwidth = psf->bytewidth = 1 ;
-
- au_g72x_read_block (psf, pg72x) ;
+ au_g72x_decode_block (psf, pg72x) ;
return 0 ;
} /* au_g72x_reader_init */
@@ -119,12 +118,10 @@
int
au_g72x_writer_init (SF_PRIVATE *psf, int codec)
{ G72x_DATA *pg72x ;
+ int bitspersample ;
psf->sf.seekable = SF_FALSE ;
- if (psf->mode != SF_MODE_WRITE)
- return SFE_BAD_MODE_RW ;
-
if (! (pg72x = malloc (sizeof (G72x_DATA))))
return SFE_MALLOC_FAILED ;
@@ -137,36 +134,48 @@
{ case AU_H_G721_32 :
g72x_writer_init (pg72x, G721_32_BITS_PER_SAMPLE) ;
pg72x->bytesperblock = G721_32_BYTES_PER_BLOCK ;
+ bitspersample = G721_32_BITS_PER_SAMPLE ;
break ;
case AU_H_G723_24:
g72x_writer_init (pg72x, G723_24_BITS_PER_SAMPLE) ;
pg72x->bytesperblock = G723_24_BYTES_PER_BLOCK ;
+ bitspersample = G723_24_BITS_PER_SAMPLE ;
break ;
- default : return 0 ;
+ default : return SFE_UNIMPLEMENTED ;
} ;
- psf->write_short = (func_short) au_g72x_write_s ;
- psf->write_int = (func_int) au_g72x_write_i ;
- psf->write_float = (func_float) au_g72x_write_f ;
- psf->write_double = (func_double) au_g72x_write_d ;
+ psf->write_short = au_g72x_write_s ;
+ psf->write_int = au_g72x_write_i ;
+ psf->write_float = au_g72x_write_f ;
+ psf->write_double = au_g72x_write_d ;
- psf->seek_func = (func_seek) au_g72x_seek ;
- psf->close = (func_close) au_g72x_close ;
+ psf->close = au_g72x_close ;
psf->blockwidth = psf->bytewidth = 1 ;
- return 0 ;
-} /* au_g72x_writer_init */
+ psf->filelength = psf_get_filelen (psf->filedes) ;
+ psf->datalength = psf->filelength - psf->dataoffset ;
+ if (psf->datalength % pg72x->blocksize)
+ pg72x->blocks = (psf->datalength / pg72x->blocksize) + 1 ;
+ else
+ pg72x->blocks = psf->datalength / pg72x->blocksize ;
+ psf->sf.samples = (8 * psf->datalength) / bitspersample ;
+ if ((psf->sf.samples * bitspersample) / 8 != psf->datalength)
+ psf_log_printf (psf, "*** Warning : weird psf->datalength.\n") ;
+
+ return 0 ;
+} /* au_g72x_writer_init */
+
/*============================================================================================
** G721 Read Functions.
*/
static int
-au_g72x_read_block (SF_PRIVATE *psf, G72x_DATA *pg72x)
+au_g72x_decode_block (SF_PRIVATE *psf, G72x_DATA *pg72x)
{ int k ;
pg72x->blockcount ++ ;
@@ -177,7 +186,7 @@
return 1 ;
} ;
- if ((k = fread (pg72x->block, 1, pg72x->bytesperblock, psf->file)) != pg72x->bytesperblock)
+ if ((k = psf_fread (pg72x->block, 1, pg72x->bytesperblock, psf->filedes)) != pg72x->bytesperblock)
psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, pg72x->bytesperblock) ;
pg72x->blocksize = k ;
@@ -184,11 +193,11 @@
g72x_decode_block (pg72x) ;
return 1 ;
-} /* au_g72x_read_block */
+} /* au_g72x_decode_block */
-static int
-au_g72x_read (SF_PRIVATE *psf, G72x_DATA *pg72x, short *ptr, int len)
-{ int count, total = 0, index = 0 ;
+static int
+au_g72x_read_block (SF_PRIVATE *psf, G72x_DATA *pg72x, short *ptr, sf_count_t len)
+{ sf_count_t count, total = 0, index = 0 ;
while (index < len)
{ if (pg72x->blockcount >= pg72x->blocks && pg72x->samplecount >= pg72x->samplesperblock)
@@ -197,7 +206,7 @@
} ;
if (pg72x->samplecount >= pg72x->samplesperblock)
- au_g72x_read_block (psf, pg72x) ;
+ au_g72x_decode_block (psf, pg72x) ;
count = pg72x->samplesperblock - pg72x->samplecount ;
count = (len - index > count) ? count : len - index ;
@@ -209,28 +218,28 @@
} ;
return total ;
-} /* au_g72x_read */
+} /* au_g72x_read_block */
-static int
-au_g72x_read_s (SF_PRIVATE *psf, short *ptr, int len)
+static sf_count_t
+au_g72x_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
{ G72x_DATA *pg72x ;
- int total ;
+ sf_count_t total ;
if (! psf->fdata)
return 0 ;
pg72x = (G72x_DATA*) psf->fdata ;
- total = au_g72x_read (psf, pg72x, ptr, len) ;
+ total = au_g72x_read_block (psf, pg72x, ptr, len) ;
return total ;
} /* au_g72x_read_s */
-static int
-au_g72x_read_i (SF_PRIVATE *psf, int *ptr, int len)
+static sf_count_t
+au_g72x_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
{ G72x_DATA *pg72x ;
short *sptr ;
int k, bufferlen, readcount = 0, count ;
- int index = 0, total = 0 ;
+ sf_count_t index = 0, total = 0 ;
if (! psf->fdata)
return 0 ;
@@ -240,9 +249,10 @@
bufferlen = SF_BUFFER_LEN / sizeof (short) ;
while (len > 0)
{ readcount = (len >= bufferlen) ? bufferlen : len ;
- count = au_g72x_read (psf, pg72x, sptr, readcount) ;
+ count = au_g72x_read_block (psf, pg72x, sptr, readcount) ;
+
for (k = 0 ; k < readcount ; k++)
- ptr [index+k] = (int) (sptr [k]) ;
+ ptr [index + k] = sptr [k] << 16 ;
index += readcount ;
total += count ;
len -= readcount ;
@@ -250,12 +260,12 @@
return total ;
} /* au_g72x_read_i */
-static int
-au_g72x_read_f (SF_PRIVATE *psf, float *ptr, int len)
+static sf_count_t
+au_g72x_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
{ G72x_DATA *pg72x ;
short *sptr ;
int k, bufferlen, readcount = 0, count ;
- int index = 0, total = 0 ;
+ sf_count_t index = 0, total = 0 ;
float normfact ;
if (! psf->fdata)
@@ -268,9 +278,9 @@
bufferlen = SF_BUFFER_LEN / sizeof (short) ;
while (len > 0)
{ readcount = (len >= bufferlen) ? bufferlen : len ;
- count = au_g72x_read (psf, pg72x, sptr, readcount) ;
+ count = au_g72x_read_block (psf, pg72x, sptr, readcount) ;
for (k = 0 ; k < readcount ; k++)
- ptr [index+k] = normfact * sptr [k] ;
+ ptr [index + k] = normfact * sptr [k] ;
index += readcount ;
total += count ;
len -= readcount ;
@@ -279,12 +289,12 @@
return total ;
} /* au_g72x_read_f */
-static int
-au_g72x_read_d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+static sf_count_t
+au_g72x_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
{ G72x_DATA *pg72x ;
short *sptr ;
int k, bufferlen, readcount = 0, count ;
- int index = 0, total = 0 ;
+ sf_count_t index = 0, total = 0 ;
double normfact ;
if (! psf->fdata)
@@ -291,15 +301,15 @@
return 0 ;
pg72x = (G72x_DATA*) psf->fdata ;
- normfact = (normalize) ? 1.0 / ((double) 0x8000) : 1.0 ;
+ normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
sptr = (short*) psf->buffer ;
bufferlen = SF_BUFFER_LEN / sizeof (short) ;
while (len > 0)
{ readcount = (len >= bufferlen) ? bufferlen : len ;
- count = au_g72x_read (psf, pg72x, sptr, readcount) ;
+ count = au_g72x_read_block (psf, pg72x, sptr, readcount) ;
for (k = 0 ; k < readcount ; k++)
- ptr [index+k] = normfact * (double) (sptr [k]) ;
+ ptr [index + k] = normfact * (double) (sptr [k]) ;
index += readcount ;
total += count ;
len -= readcount ;
@@ -308,10 +318,12 @@
return total ;
} /* au_g72x_read_d */
-static long
-au_g72x_seek (SF_PRIVATE *psf, long offset, int whence)
+static sf_count_t
+au_g72x_seek (SF_PRIVATE *psf, int mode, sf_count_t 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?
@@ -328,7 +340,7 @@
**
** if (! (psf->datalength && psf->dataoffset))
** { psf->error = SFE_BAD_SEEK ;
-** return ((long) -1) ;
+** return ((sf_count_t) -1) ;
** } ;
**
** samplecount = (8 * psf->datalength) / G721_32_BITS_PER_SAMPLE ;
@@ -337,7 +349,7 @@
** { case SEEK_SET :
** if (offset < 0 || offset > samplecount)
** { psf->error = SFE_BAD_SEEK ;
-** return ((long) -1) ;
+** return ((sf_count_t) -1) ;
** } ;
** newblock = offset / pg72x->samplesperblock ;
** newsample = offset % pg72x->samplesperblock ;
@@ -346,7 +358,7 @@
** case SEEK_CUR :
** if (psf->current + offset < 0 || psf->current + offset > samplecount)
** { psf->error = SFE_BAD_SEEK ;
-** return ((long) -1) ;
+** return ((sf_count_t) -1) ;
** } ;
** newblock = (8 * (psf->current + offset)) / pg72x->samplesperblock ;
** newsample = (8 * (psf->current + offset)) % pg72x->samplesperblock ;
@@ -355,7 +367,7 @@
** case SEEK_END :
** if (offset > 0 || samplecount + offset < 0)
** { psf->error = SFE_BAD_SEEK ;
-** return ((long) -1) ;
+** return ((sf_count_t) -1) ;
** } ;
** newblock = (samplecount + offset) / pg72x->samplesperblock ;
** newsample = (samplecount + offset) % pg72x->samplesperblock ;
@@ -363,19 +375,19 @@
**
** default :
** psf->error = SFE_BAD_SEEK ;
-** return ((long) -1) ;
+** return ((sf_count_t) -1) ;
** } ;
**
-** if (psf->mode == SF_MODE_READ)
-** { fseek (psf->file, (int) (psf->dataoffset + newblock * pg72x->blocksize), SEEK_SET) ;
+** if (psf->mode == SFM_READ)
+** { psf_fseek (psf->filedes, psf->dataoffset + newblock * pg72x->blocksize, SEEK_SET) ;
** pg72x->blockcount = newblock ;
-** au_g72x_read_block (psf, pg72x) ;
+** au_g72x_decode_block (psf, pg72x) ;
** pg72x->samplecount = newsample ;
** }
** else
** { /+* What to do about write??? *+/
** psf->error = SFE_BAD_SEEK ;
-** return ((long) -1) ;
+** return ((sf_count_t) -1) ;
** } ;
**
** psf->current = newblock * pg72x->samplesperblock + newsample ;
@@ -388,8 +400,8 @@
** G72x Write Functions.
*/
-static int
-au_g72x_write_block (SF_PRIVATE *psf, G72x_DATA *pg72x)
+static int
+au_g72x_encode_block (SF_PRIVATE *psf, G72x_DATA *pg72x)
{ int k ;
/* Encode the samples. */
@@ -396,7 +408,7 @@
g72x_encode_block (pg72x) ;
/* Write the block to disk. */
- if ((k = fwrite (pg72x->block, 1, pg72x->blocksize, psf->file)) != pg72x->blocksize)
+ if ((k = psf_fwrite (pg72x->block, 1, pg72x->blocksize, psf->filedes)) != pg72x->blocksize)
psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, pg72x->blocksize) ;
pg72x->samplecount = 0 ;
@@ -406,11 +418,11 @@
memset (pg72x->samples, 0, G72x_BLOCK_SIZE * sizeof (short)) ;
return 1 ;
-} /* au_g72x_write_block */
+} /* au_g72x_encode_block */
-static int
-au_g72x_write (SF_PRIVATE *psf, G72x_DATA *pg72x, short *ptr, int len)
-{ int count, total = 0, index = 0 ;
+static int
+au_g72x_write_block (SF_PRIVATE *psf, G72x_DATA *pg72x, short *ptr, sf_count_t len)
+{ sf_count_t count, total = 0, index = 0 ;
while (index < len)
{ count = pg72x->samplesperblock - pg72x->samplecount ;
@@ -424,32 +436,32 @@
total = index ;
if (pg72x->samplecount >= pg72x->samplesperblock)
- au_g72x_write_block (psf, pg72x) ;
+ au_g72x_encode_block (psf, pg72x) ;
} ;
return total ;
-} /* au_g72x_write */
+} /* au_g72x_write_block */
-static int
-au_g72x_write_s (SF_PRIVATE *psf, short *ptr, int len)
+static sf_count_t
+au_g72x_write_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
{ G72x_DATA *pg72x ;
- int total ;
+ sf_count_t total ;
if (! psf->fdata)
return 0 ;
pg72x = (G72x_DATA*) psf->fdata ;
- total = au_g72x_write (psf, pg72x, ptr, len) ;
+ total = au_g72x_write_block (psf, pg72x, ptr, len) ;
return total ;
} /* au_g72x_write_s */
-static int
-au_g72x_write_i (SF_PRIVATE *psf, int *ptr, int len)
+static sf_count_t
+au_g72x_write_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
{ G72x_DATA *pg72x ;
short *sptr ;
int k, bufferlen, writecount = 0, count ;
- int index = 0, total = 0 ;
+ sf_count_t index = 0, total = 0 ;
if (! psf->fdata)
return 0 ;
@@ -460,8 +472,14 @@
while (len > 0)
{ writecount = (len >= bufferlen) ? bufferlen : len ;
for (k = 0 ; k < writecount ; k++)
- sptr [k] = ptr [index+k] ;
- count = au_g72x_write (psf, pg72x, sptr, writecount) ;
+ sptr [k] = ptr [index + k] >> 16 ;
+ count = au_g72x_write_block (psf, pg72x, sptr, writecount) ;
+
+if (count != writecount)
+{ printf ("count != writecount\n") ;
+ exit (1) ;
+ } ;
+
index += writecount ;
total += count ;
len -= writecount ;
@@ -469,8 +487,8 @@
return total ;
} /* au_g72x_write_i */
-static int
-au_g72x_write_f (SF_PRIVATE *psf, float *ptr, int len)
+static sf_count_t
+au_g72x_write_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
{ G72x_DATA *pg72x ;
short *sptr ;
int k, bufferlen, writecount = 0, count ;
@@ -488,8 +506,8 @@
while (len > 0)
{ writecount = (len >= bufferlen) ? bufferlen : len ;
for (k = 0 ; k < writecount ; k++)
- sptr [k] = FLOAT_TO_SHORT (normfact * ptr [index+k]) ;
- count = au_g72x_write (psf, pg72x, sptr, writecount) ;
+ sptr [k] = lrintf (normfact * ptr [index + k]) ;
+ count = au_g72x_write_block (psf, pg72x, sptr, writecount) ;
index += writecount ;
total += count ;
len -= writecount ;
@@ -497,8 +515,8 @@
return total ;
} /* au_g72x_write_f */
-static int
-au_g72x_write_d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+static sf_count_t
+au_g72x_write_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
{ G72x_DATA *pg72x ;
short *sptr ;
int k, bufferlen, writecount = 0, count ;
@@ -509,7 +527,7 @@
return 0 ;
pg72x = (G72x_DATA*) psf->fdata ;
- normfact = (normalize) ? ((float) 0x8000) : 1.0 ;
+ normfact = (psf->norm_double == SF_TRUE) ? ((float) 0x8000) : 1.0 ;
sptr = (short*) psf->buffer ;
bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ;
@@ -516,8 +534,8 @@
while (len > 0)
{ writecount = (len >= bufferlen) ? bufferlen : len ;
for (k = 0 ; k < writecount ; k++)
- sptr [k] = DOUBLE_TO_SHORT (normfact * ptr [index+k]) ;
- count = au_g72x_write (psf, pg72x, sptr, writecount) ;
+ sptr [k] = lrint (normfact * ptr [index + k]) ;
+ count = au_g72x_write_block (psf, pg72x, sptr, writecount) ;
index += writecount ;
total += count ;
len -= writecount ;
@@ -525,7 +543,7 @@
return total ;
} /* au_g72x_write_d */
-static int
+static int
au_g72x_close (SF_PRIVATE *psf)
{ G72x_DATA *pg72x ;
@@ -534,20 +552,20 @@
pg72x = (G72x_DATA*) psf->fdata ;
- if (psf->mode == SF_MODE_WRITE)
+ if (psf->mode == SFM_WRITE)
{ /* If a block has been partially assembled, write it out
** as the final block.
*/
if (pg72x->samplecount && pg72x->samplecount < G72x_BLOCK_SIZE)
- au_g72x_write_block (psf, pg72x) ;
+ au_g72x_encode_block (psf, pg72x) ;
/* Now we know for certain the length of the file we can
** re-write correct values for the RIFF and data chunks.
*/
- fseek (psf->file, 0, SEEK_END) ;
- psf->filelength = ftell (psf->file) ;
+ psf_fseek (psf->filedes, 0, SEEK_END) ;
+ psf->filelength = psf_ftell (psf->filedes) ;
psf->sf.samples = pg72x->samplesperblock * pg72x->blockcount ;
psf->datalength = psf->filelength - psf->dataoffset ;
--- /dev/null
+++ b/common/libsndfile/src/command.c
@@ -1,0 +1,226 @@
+/*
+** Copyright (C) 2001-2002 Erik de Castro Lopo <[email protected]>
+**
+** 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 <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <math.h>
+
+#include "sndfile.h"
+#include "config.h"
+#include "common.h"
+
+static SF_FORMAT_INFO 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_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 index ;
+
+ if (data->format < 0 || data->format >= (SIGNED_SIZEOF (simple_formats) / SIGNED_SIZEOF (SF_FORMAT_INFO)))
+ return SFE_BAD_CONTROL_CMD ;
+
+ index = data->format ;
+ memcpy (data, &(simple_formats [index]), SIGNED_SIZEOF (SF_FORMAT_INFO)) ;
+
+ return 0 ;
+} /* psf_get_format_simple */
+
+/*============================================================================
+** Major format info.
+*/
+
+static SF_FORMAT_INFO major_formats [] =
+{
+ { SF_FORMAT_AIFF, "AIFF (Apple/SGI)", "aiff" },
+ { SF_FORMAT_AU, "AU (Sun/NeXT)", "au" },
+ { SF_FORMAT_SVX, "IFF (Amiga IFF/SVX8/SV16)", "iff" },
+ { SF_FORMAT_PAF, "PAF (Ensoniq PARIS)", "paf" },
+ { SF_FORMAT_RAW, "RAW header-less", "raw" },
+ /* Not ready for mainstream use yet.
+ { SF_FORMAT_SD2, "SD2 (Sound Designer II)", "sd2" },
+ */
+ { 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 (Sphere NIST)", "wav" },
+
+} ; /* 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 index ;
+
+ if (data->format < 0 || data->format >= (SIGNED_SIZEOF (major_formats) / SIGNED_SIZEOF (SF_FORMAT_INFO)))
+ return SFE_BAD_CONTROL_CMD ;
+
+ index = data->format ;
+ memcpy (data, &(major_formats [index]), 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 },
+
+} ; /* 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 index ;
+
+ if (data->format < 0 || data->format >= (SIGNED_SIZEOF (subtype_formats) / SIGNED_SIZEOF (SF_FORMAT_INFO)))
+ return SFE_BAD_CONTROL_CMD ;
+
+ index = data->format ;
+ memcpy (data, &(subtype_formats [index]), sizeof (SF_FORMAT_INFO)) ;
+
+ return 0 ;
+} /* psf_get_format_subtype */
+
+/*==============================================================================
+*/
+
+double
+psf_calc_signal_max (SF_PRIVATE *psf)
+{ sf_count_t position ;
+ double max_val = 0.0, 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, SF_FALSE) ;
+
+ /* Brute force. Read the whole file and find the biggest sample. */
+ 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 = sizeof (psf->buffer) / sizeof (double) ;
+
+ data = (double*) psf->buffer ;
+
+ readcount = len ;
+ while (readcount == len)
+ { readcount = sf_read_double ((SNDFILE*) psf, data, len) ;
+ for (k = 0 ; k < len ; k++)
+ { temp = fabs (data [k]) ;
+ max_val = temp > max_val ? temp : max_val ;
+ } ;
+ } ;
+
+ sf_seek ((SNDFILE*) psf, position, SEEK_SET) ; /* Return to original position. */
+
+ sf_command ((SNDFILE*) psf, SFC_SET_NORM_DOUBLE, NULL, save_state) ;
+
+ return max_val ;
+} /* psf_calc_signal_max */
+
--- a/common/libsndfile/src/common.c
+++ b/common/libsndfile/src/common.c
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 1999-2001 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
**
** 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
@@ -29,21 +29,114 @@
*/
void
-endswap_short_array (short *ptr, int len)
-{ int k ;
- for (k = 0 ; k < len ; k++)
- ptr[k] = ((((ptr[k])>>8)&0xFF)|(((ptr[k])&0xFF)<<8)) ;
+endswap_short_array (short *ptr, sf_count_t len)
+{ unsigned char *ucptr, temp ;
+
+ ucptr = (unsigned char *) ptr ;
+ while (len > 0)
+ { len -- ;
+ temp = ucptr [2 * len] ;
+ ucptr [2 * len] = ucptr [2 * len + 1] ;
+ ucptr [2 * len + 1] = temp ;
+ } ;
} /* endswap_short_array */
void
-endswap_int_array (int *ptr, int len)
-{ int k ;
- for (k = 0 ; k < len ; k++)
- ptr[k] = ((((ptr[k])>>24)&0xFF)|(((ptr[k])>>8)&0xFF00)|
- (((ptr[k])&0xFF00)<<8)|(((ptr[k])&0xFF)<<24)) ;
+endswap_int_array (int *ptr, sf_count_t len)
+{ unsigned char *ucptr, temp ;
+
+ ucptr = (unsigned char *) ptr ;
+ while (len > 0)
+ { len -- ;
+
+ temp = ucptr [4 * len] ;
+ ucptr [4 * len] = ucptr [4 * len + 3] ;
+ ucptr [4 * len + 3] = temp ;
+
+ temp = ucptr [4 * len + 1] ;
+ ucptr [4 * len + 1] = ucptr [4 * len + 2] ;
+ ucptr [4 * len + 2] = temp ;
+ } ;
} /* endswap_int_array */
+/* This function assumes that sizeof (long) == 8, but works correctly even
+** is sizeof (long) == 4.
+*/
+void
+endswap_long_array (long *ptr, sf_count_t len)
+{ unsigned char *ucptr, temp ;
+
+ ucptr = (unsigned char *) ptr ;
+ while (len > 0)
+ { len -- ;
+
+ temp = ucptr [8 * len] ;
+ ucptr [8 * len] = ucptr [8 * len + 7] ;
+ ucptr [8 * len + 7] = temp ;
+
+ temp = ucptr [8 * len + 1] ;
+ ucptr [8 * len + 1] = ucptr [8 * len + 6] ;
+ ucptr [8 * len + 6] = temp ;
+
+ temp = ucptr [8 * len + 2] ;
+ ucptr [8 * len + 2] = ucptr [8 * len + 5] ;
+ ucptr [8 * len + 5] = temp ;
+
+ temp = ucptr [8 * len + 3] ;
+ ucptr [8 * len + 3] = ucptr [8 * len + 4] ;
+ ucptr [8 * len + 4] = temp ;
+ } ;
+} /* endswap_long_array */
+
/*-----------------------------------------------------------------------------------------------
+*/
+
+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_log_printf allows libsndfile internal functions to print to an internal logbuffer which
** can later be displayed.
** The format specifiers are as for printf but without the field width and other modifiers.
@@ -52,17 +145,20 @@
** logbuffer array.
*/
-#define psf_putchar(a,b) \
+#define LOG_PUTCHAR(a,b) \
if ((a)->logindex < SF_BUFFER_LEN - 1) \
{ (a)->logbuffer [(a)->logindex++] = (b) ; \
(a)->logbuffer [(a)->logindex] = 0 ; \
- } ;
+ } \
+ else \
+ break ;
void
psf_log_printf (SF_PRIVATE *psf, char *format, ...)
-{ va_list ap ;
- int d, tens, shift ;
- char c, *strptr, istr [5] ;
+{ va_list ap ;
+ unsigned int u ;
+ int d, tens, shift ;
+ char c, *strptr, istr [5] ;
va_start(ap, format);
@@ -70,7 +166,7 @@
while ((c = *format++))
{ if (c != '%')
- { psf_putchar (psf, c) ;
+ { LOG_PUTCHAR (psf, c) ;
continue ;
} ;
@@ -78,7 +174,7 @@
{ case 's': /* string */
strptr = va_arg (ap, char *) ;
while (*strptr)
- psf_putchar (psf, *strptr++) ;
+ LOG_PUTCHAR (psf, *strptr++) ;
break;
case 'd': /* int */
@@ -85,11 +181,11 @@
d = va_arg (ap, int) ;
if (d == 0)
- { psf_putchar (psf, '0') ;
+ { LOG_PUTCHAR (psf, '0') ;
break ;
}
if (d < 0)
- { psf_putchar (psf, '-') ;
+ { LOG_PUTCHAR (psf, '-') ;
d = -d ;
} ;
tens = 1 ;
@@ -96,17 +192,39 @@
while (d / tens >= 10)
tens *= 10 ;
while (tens > 0)
- { psf_putchar (psf, '0' + d / tens) ;
+ { LOG_PUTCHAR (psf, '0' + d / tens) ;
d %= tens ;
tens /= 10 ;
} ;
break;
+ case 'u': /* unsigned int */
+ u = va_arg (ap, unsigned int) ;
+
+ if (u == 0)
+ { LOG_PUTCHAR (psf, '0') ;
+ break ;
+ }
+ tens = 1 ;
+ while (u / tens >= 10)
+ tens *= 10 ;
+ while (tens > 0)
+ { LOG_PUTCHAR (psf, '0' + u / tens) ;
+ u %= tens ;
+ tens /= 10 ;
+ } ;
+ break;
+
+ case 'c': /* char */
+ c = va_arg (ap, int) & 0xFF ;
+ LOG_PUTCHAR (psf, c);
+ break;
+
case 'X': /* hex */
d = va_arg (ap, int) ;
if (d == 0)
- { psf_putchar (psf, '0') ;
+ { LOG_PUTCHAR (psf, '0') ;
break ;
} ;
shift = 28 ;
@@ -114,16 +232,11 @@
shift -= 4 ;
while (shift >= 0)
{ c = (d >> shift) & 0xF ;
- psf_putchar (psf, (c > 9) ? c + 'A' - 10 : c + '0') ;
+ LOG_PUTCHAR (psf, (c > 9) ? c + 'A' - 10 : c + '0') ;
shift -= 4 ;
} ;
break;
-
- case 'c': /* char */
- c = va_arg (ap, int) & 0xFF ;
- psf_putchar (psf, c);
- break;
-
+
case 'D': /* int2str */
d = va_arg (ap, int);
if (CPU_IS_LITTLE_ENDIAN)
@@ -142,14 +255,40 @@
strptr = istr ;
while (*strptr)
{ c = *strptr++ ;
- psf_putchar (psf, c) ;
+ LOG_PUTCHAR (psf, c) ;
} ;
break;
+ case 'C': /* int2str */
+ { sf_count_t lld, tens ;
+
+ lld = va_arg (ap, sf_count_t);
+
+ if (lld == 0)
+ { LOG_PUTCHAR (psf, '0') ;
+ break ;
+ }
+ if (lld < 0)
+ { LOG_PUTCHAR (psf, '-') ;
+ lld = -lld ;
+ } ;
+ tens = 1 ;
+ while (lld / tens >= 10)
+ tens *= 10 ;
+ while (tens > 0)
+ { LOG_PUTCHAR (psf, '0' + lld / tens) ;
+ lld %= tens ;
+ tens /= 10 ;
+ } ;
+
+
+ } ;
+ break;
+
default :
- psf_putchar (psf, '*') ;
- psf_putchar (psf, c) ;
- psf_putchar (psf, '*') ;
+ LOG_PUTCHAR (psf, '*') ;
+ LOG_PUTCHAR (psf, c) ;
+ LOG_PUTCHAR (psf, '*') ;
break ;
} /* switch */
} /* while */
@@ -176,11 +315,13 @@
maxlen = sizeof (psf->header) - strlen ((char*) psf->header) ;
va_start (argptr, format) ;
- vsnprintf (start, maxlen, format, argptr) ;
+ LSF_VSNPRINTF (start, maxlen, format, argptr) ;
va_end (argptr) ;
/* Make sure the string is properly terminated. */
- start [maxlen - 1] = 0 ;
+ start [maxlen - 1] = 0 ;
+
+ psf->headindex = strlen (psf->header) ;
return ;
} /* psf_asciiheader_printf */
@@ -191,27 +332,32 @@
** Format specifiers for psf_binheader_writef are as follows
** m - marker - four bytes - no endian manipulation
**
-** b - byte
+** e - all following numerical values will be little endian
+** E - all following numerical values will be big endian
**
-** w - two byte value - little endian
-** W - two byte value - big endian
-** l - four byte value - little endian
-** L - four byte value - 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 little endian four byte length
-** S - string preceded by a big endian four byte length
+** f - floating point data
+** d - double precision floating point data
+** h - 16 binary bytes value
**
-** f - little endian 32 bit float
-** F - big endian 32 bit float
-**
-** B - binary data (see below)
+** b - binary data (see below)
** z - zero bytes (se below)
+** h - zero bytes (se below)
**
-** To write a word followed by a long (both little endian) use:
-** psf_binheader_writef ("wl", wordval, longval) ;
+** To write a word followed by an int (both little endian) use:
+** psf_binheader_writef ("e24", wordval, sf_count_tval) ;
**
** To write binary data use:
-** psf_binheader_writef ("B", &bindata, sizeof (bindata)) ;
+** psf_binheader_writef ("b", &bindata, sizeof (bindata)) ;
**
** To write N zero bytes use:
** psf_binheader_writef ("z", N) ;
@@ -221,103 +367,229 @@
** seg. fault when asked to write an int or short to a non-int/short aligned address.
*/
+#define PUT_BYTE(psf,x) if ((psf)->headindex < sizeof ((psf)->header) - 1) \
+ { (psf)->header [(psf)->headindex++] = (x) ; }
+
#if (CPU_IS_BIG_ENDIAN == 1)
-#define PUT_INT(psf,x) if ((psf)->headindex < sizeof ((psf)->header) - 4) \
- { (psf)->header [(psf)->headindex++] = ((x) >> 24) & 0xFF ; \
- (psf)->header [(psf)->headindex++] = ((x) >> 16) & 0xFF ; \
- (psf)->header [(psf)->headindex++] = ((x) >> 8) & 0xFF ; \
- (psf)->header [(psf)->headindex++] = (x) & 0xFF ; }
+#define PUT_MARKER(psf,x) if ((psf)->headindex < 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) ; }
-#define PUT_SHORT(psf,x) if ((psf)->headindex < sizeof ((psf)->header) - 2) \
- { (psf)->header [(psf)->headindex++] = ((x) >> 8) & 0xFF ; \
- (psf)->header [(psf)->headindex++] = (x) & 0xFF ; }
-
#elif (CPU_IS_LITTLE_ENDIAN == 1)
-#define PUT_INT(psf,x) if ((psf)->headindex < sizeof ((psf)->header) - 4) \
- { (psf)->header [(psf)->headindex++] = (x) & 0xFF ; \
- (psf)->header [(psf)->headindex++] = ((x) >> 8) & 0xFF ; \
- (psf)->header [(psf)->headindex++] = ((x) >> 16) & 0xFF ; \
- (psf)->header [(psf)->headindex++] = ((x) >> 24) & 0xFF ; }
-
-#define PUT_SHORT(psf,x) if ((psf)->headindex < sizeof ((psf)->header) - 2) \
- { (psf)->header [(psf)->headindex++] = (x) & 0xFF ; \
- (psf)->header [(psf)->headindex++] = ((x) >> 8) & 0xFF ; }
+#define PUT_MARKER(psf,x) if ((psf)->headindex < 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) ; }
#else
# error "Cannot determine endian-ness of processor."
#endif
-#define PUT_BYTE(psf,x) if ((psf)->headindex < sizeof ((psf)->header) - 1) \
- { (psf)->header [(psf)->headindex++] = (x) & 0xFF ; }
+#define PUT_BE_SHORT(psf,x) if ((psf)->headindex < sizeof ((psf)->header) - 2) \
+ { (psf)->header [(psf)->headindex++] = ((x) >> 8) ; \
+ (psf)->header [(psf)->headindex++] = (x) ; }
+
+#define PUT_LE_SHORT(psf,x) if ((psf)->headindex < sizeof ((psf)->header) - 2) \
+ { (psf)->header [(psf)->headindex++] = (x) ; \
+ (psf)->header [(psf)->headindex++] = ((x) >> 8) ; }
+
+#define PUT_BE_3BYTE(psf,x) if ((psf)->headindex < sizeof ((psf)->header) - 3) \
+ { (psf)->header [(psf)->headindex++] = ((x) >> 16) ; \
+ (psf)->header [(psf)->headindex++] = ((x) >> 8) ; \
+ (psf)->header [(psf)->headindex++] = (x) ; }
+
+#define PUT_LE_3BYTE(psf,x) if ((psf)->headindex < sizeof ((psf)->header) - 3) \
+ { (psf)->header [(psf)->headindex++] = (x) ; \
+ (psf)->header [(psf)->headindex++] = ((x) >> 8) ; \
+ (psf)->header [(psf)->headindex++] = ((x) >> 16) ; }
+
+#define PUT_BE_INT(psf,x) if ((psf)->headindex < 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) ; }
+
+#define PUT_LE_INT(psf,x) if ((psf)->headindex < 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) ; }
+
+#if (SIZEOF_SF_COUNT_T == 4)
+#define PUT_BE_8BYTE(psf,x) if ((psf)->headindex < 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) ; }
+
+#define PUT_LE_8BYTE(psf,x) if ((psf)->headindex < 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 ; }
+
+#elif (SIZEOF_SF_COUNT_T == 8)
+#define PUT_BE_8BYTE(psf,x) if ((psf)->headindex < 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) ; }
+
+#define PUT_LE_8BYTE(psf,x) if ((psf)->headindex < 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) ; }
+#else
+#error "SIZEOF_SF_COUNT_T is not defined."
+#endif
int
psf_binheader_writef (SF_PRIVATE *psf, char *format, ...)
{ va_list argptr ;
+ sf_count_t countdata ;
+ unsigned long longdata ;
unsigned int data ;
float floatdata ;
void *bindata ;
size_t size ;
char c, *strptr ;
- int count = 0 ;
+ int count = 0, endian, trunc_8to4 ;
+ endian = SF_ENDIAN_LITTLE ;
+ trunc_8to4 = SF_FALSE ;
+
va_start(argptr, format);
while ((c = *format++))
{ switch (c)
- { case 'm' :
+ { case 'e' : /* All conversions are now from LE to host. */
+ endian = SF_ENDIAN_LITTLE ;
+ break ;
+
+ case 'E' : /* All conversions are now from BE to host. */
+ 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) ;
- PUT_INT (psf, data) ;
+ PUT_MARKER (psf, data) ;
count += 4 ;
break ;
- case 'b' :
+ case '1' :
data = va_arg (argptr, unsigned int) ;
PUT_BYTE (psf, data) ;
count += 1 ;
break ;
- case 'w' :
+ case '2' :
data = va_arg (argptr, unsigned int) ;
- data = H2LE_SHORT (data) ;
- PUT_SHORT (psf, data) ;
+ if (endian == SF_ENDIAN_BIG)
+ { PUT_BE_SHORT (psf, data) ;
+ }
+ else
+ { PUT_LE_SHORT (psf, data) ;
+ } ;
count += 2 ;
break ;
- case 'W' :
+ case '3' : /* tribyte */
data = va_arg (argptr, unsigned int) ;
- data = H2BE_SHORT (data) ;
- PUT_SHORT (psf, data) ;
- count += 2 ;
+ if (endian == SF_ENDIAN_BIG)
+ { PUT_BE_3BYTE (psf, data) ;
+ }
+ else
+ { PUT_LE_3BYTE (psf, data) ;
+ } ;
+ count += 3 ;
break ;
-
- case 'l' :
+
+ case '4' :
data = va_arg (argptr, unsigned int) ;
- data = H2LE_INT (data) ;
- PUT_INT (psf, data) ;
+ if (endian == SF_ENDIAN_BIG)
+ { PUT_BE_INT (psf, data) ;
+ }
+ else
+ { PUT_LE_INT (psf, data) ;
+ } ;
count += 4 ;
break ;
- case 'L' :
- data = va_arg (argptr, unsigned int) ;
- data = H2BE_INT (data) ;
- PUT_INT (psf, data) ;
- count += 4 ;
+ case '8' :
+ countdata = va_arg (argptr, sf_count_t) ;
+ if (endian == SF_ENDIAN_BIG && trunc_8to4 == SF_FALSE)
+ { PUT_BE_8BYTE (psf, countdata) ;
+ count += 8 ;
+ }
+ else if (endian == SF_ENDIAN_LITTLE && trunc_8to4 == SF_FALSE)
+ { PUT_LE_8BYTE (psf, countdata) ;
+ count += 8 ;
+ }
+ else if (endian == SF_ENDIAN_BIG && trunc_8to4 == SF_TRUE)
+ { longdata = countdata ;
+ PUT_BE_INT (psf, longdata) ;
+ count += 4 ;
+ }
+ else if (endian == SF_ENDIAN_LITTLE && trunc_8to4 == SF_TRUE)
+ { longdata = countdata ;
+ PUT_LE_INT (psf, longdata) ;
+ count += 4 ;
+ }
break ;
case 'f' :
floatdata = (float) va_arg (argptr, double) ;
float32_write (floatdata, (unsigned char *) &data) ;
- data = H2LE_INT (data) ;
- PUT_INT (psf, data) ;
+ if (endian == SF_ENDIAN_BIG)
+ { PUT_BE_INT (psf, data) ;
+ }
+ else
+ { PUT_LE_INT (psf, data) ;
+ } ;
count += 4 ;
break ;
- case 'F' :
- floatdata = (float) va_arg (argptr, double) ;
- float32_write (floatdata, (unsigned char *) &data) ;
- data = H2BE_INT (data) ;
- PUT_INT (psf, data) ;
+ case 'd' :
+ psf_log_printf (psf, "Must fix double conversion\n") ;
+ /*
+ doubledata = va_arg (argptr, double) ;
+ double64_write (doubledata, (unsigned char *) &data) ;
+ if (endian == SF_ENDIAN_BIG)
+ { PUT_BE_INT (psf, data) ;
+ }
+ else
+ { PUT_LE_INT (psf, data) ;
+ } ;
count += 4 ;
+ */
break ;
case 's' :
@@ -324,25 +596,18 @@
strptr = va_arg (argptr, char *) ;
size = strlen (strptr) + 1 ;
size += (size & 1) ;
- data = H2LE_INT (size) ;
- PUT_INT (psf, data) ;
+ if (endian == SF_ENDIAN_BIG)
+ { PUT_BE_INT (psf, size) ;
+ }
+ else
+ { PUT_LE_INT (psf, size) ;
+ } ;
memcpy (&(psf->header [psf->headindex]), strptr, size) ;
psf->headindex += size ;
count += 4 + size ;
break ;
- case 'S' :
- strptr = va_arg (argptr, char *) ;
- size = strlen (strptr) + 1 ;
- size += (size & 1) ;
- data = H2BE_INT (size) ;
- PUT_INT (psf, data) ;
- memcpy (&(psf->header [psf->headindex]), strptr, size) ;
- psf->headindex += size ;
- count += 4 + size ;
- break ;
-
- case 'B' :
+ case 'b' :
bindata = va_arg (argptr, void *) ;
size = va_arg (argptr, size_t) ;
memcpy (&(psf->header [psf->headindex]), bindata, size) ;
@@ -360,6 +625,13 @@
} ;
break ;
+ case 'h' :
+ bindata = va_arg (argptr, void *) ; ;
+ memcpy (&(psf->header [psf->headindex]), bindata, 16) ;
+ psf->headindex += 16 ;
+ count += 16 ;
+ break ;
+
default :
psf_log_printf (psf, "*** Invalid format specifier `%c'\n", c) ;
psf->error = SFE_INTERNAL ;
@@ -378,135 +650,177 @@
** additions:
**
** p - jump a given number of position from start of file.
+** j - jump a given number of bytes forward in the file.
**
** If format is NULL, psf_binheader_readf returns the current offset.
*/
+#define GET_BYTE(psf) ( (psf)->header [0] )
+
#if (CPU_IS_BIG_ENDIAN == 1)
-#define GET_INT(psf) ( ((psf)->header [0] << 24) + ((psf)->header [1] << 16) + \
- ((psf)->header [2] << 8) + ((psf)->header [3]) )
+#define GET_MARKER(psf) ( ((psf)->header [0] << 24) | ((psf)->header [1] << 16) | \
+ ((psf)->header [2] << 8) | ((psf)->header [3]) )
-#define GET_3BYTE(psf) ( ((psf)->header [0] << 16) + ((psf)->header [1] << 8) + \
- ((psf)->header [2]) )
+#elif (CPU_IS_LITTLE_ENDIAN == 1)
+#define GET_MARKER(psf) ( ((psf)->header [0] ) | ((psf)->header [1] << 8) | \
+ ((psf)->header [2] << 16) | ((psf)->header [3] << 24) )
-#define GET_SHORT(psf) ( ((psf)->header [0] << 8) + ((psf)->header [1]) )
+#else
+# error "Cannot determine endian-ness of processor."
+#endif
-#elif (CPU_IS_LITTLE_ENDIAN == 1)
-#define GET_INT(psf) ( ((psf)->header [0] ) + ((psf)->header [1] << 8) + \
- ((psf)->header [2] << 16) + ((psf)->header [3] << 24) )
+#define GET_LE_SHORT(psf) ( ((psf)->header [1] << 8) | ((psf)->header [0]) )
-#define GET_3BYTE(psf) ( ((psf)->header [0] ) + ((psf)->header [1] << 8) + \
- ((psf)->header [2] << 16) )
+#define GET_BE_SHORT(psf) ( ((psf)->header [0] << 8) | ((psf)->header [1]) )
-#define GET_SHORT(psf) ( ((psf)->header [0]) + ((psf)->header [1] << 8) )
+#define GET_LE_3BYTE(psf) ( ((psf)->header [2] << 16) | ((psf)->header [1] << 8) | \
+ ((psf)->header [0]) )
+
+#define GET_BE_3BYTE(psf) ( ((psf)->header [0] << 16) | ((psf)->header [1] << 8) | \
+ ((psf)->header [2]) )
+
+#define GET_LE_INT(psf) ( ((psf)->header [3] << 24) | ((psf)->header [2] << 16) | \
+ ((psf)->header [1] << 8) | ((psf)->header [0]) )
+
+#define GET_BE_INT(psf) ( ((psf)->header [0] << 24) | ((psf)->header [1] << 16) | \
+ ((psf)->header [2] << 8) | ((psf)->header [3]) )
+
+#if (SIZEOF_LONG == 4)
+#define GET_LE_8BYTE(psf) ( ((psf)->header [3] << 24) | ((psf)->header [2] << 16) | \
+ ((psf)->header [1] << 8) | ((psf)->header [0]) )
+
+#define GET_BE_8BYTE(psf) ( ((psf)->header [4] << 24) | ((psf)->header [5] << 16) | \
+ ((psf)->header [6] << 8) | ((psf)->header [7]) )
#else
-# error "Cannot determine endian-ness of processor."
-#endif
+#define GET_LE_8BYTE(psf) ( ((psf)->header [7] << 56L) | ((psf)->header [6] << 48L) | \
+ ((psf)->header [5] << 40L) | ((psf)->header [4] << 32L) | \
+ ((psf)->header [3] << 24L) | ((psf)->header [2] << 16L) | \
+ ((psf)->header [1] << 8L) | ((psf)->header [0] ))
-#define GET_BYTE(psf) ( (psf)->header [0] )
+#define GET_BE_8BYTE(psf) ( ((psf)->header [0] << 56L) | ((psf)->header [1] << 48L) | \
+ ((psf)->header [2] << 40L) | ((psf)->header [3] << 32L) | \
+ ((psf)->header [4] << 24L) | ((psf)->header [5] << 16L) | \
+ ((psf)->header [6] << 8L) | ((psf)->header [7] ))
+#endif
+
int
psf_binheader_readf (SF_PRIVATE *psf, char const *format, ...)
-{ va_list argptr ;
- unsigned int *longptr, longdata ;
- unsigned short *wordptr, worddata ;
+{ va_list argptr ;
+ sf_count_t *countptr, countdata ;
+ unsigned int *intptr, intdata ;
+ unsigned short *shortptr, shortdata ;
char *charptr ;
int position ;
float *floatptr ;
size_t size ;
char c ;
- int count = 0 ;
+ int count = 0, endian = SF_ENDIAN_LITTLE ;
if (! format)
- return ftell (psf->file) ;
-
+ return psf_ftell (psf->filedes) ;
+
va_start(argptr, format);
while ((c = *format++))
{ switch (c)
- { case 'm' :
- longptr = va_arg (argptr, unsigned int*) ;
- fread (psf->header, 1, sizeof (int), psf->file) ;
- *longptr = GET_INT (psf) ;
- count += 4 ;
+ { case 'e' : /* All conversions are now from LE to host. */
+ endian = SF_ENDIAN_LITTLE ;
break ;
+
+ case 'E' : /* All conversions are now from BE to host. */
+ endian = SF_ENDIAN_BIG ;
+ break ;
+
+ case 'm' :
+ intptr = va_arg (argptr, unsigned int*) ;
+ count += psf_fread (psf->header, 1, sizeof (int), psf->filedes) ;
+ *intptr = GET_MARKER (psf) ;
+ break ;
- case 'b' :
+ case 'h' :
+ intptr = va_arg (argptr, unsigned int*) ;
+ count += psf_fread (psf->header, 1, 16, psf->filedes) ;
+ { int k ;
+ intdata = 0 ;
+ for (k = 0 ; k < 16 ; k++)
+ intdata ^= psf->header [k] << k ;
+ }
+ *intptr = intdata ;
+ break ;
+
+ case '1' :
charptr = va_arg (argptr, char*) ;
- fread (psf->header, 1, sizeof (char), psf->file) ;
+ count += psf_fread (psf->header, 1, sizeof (char), psf->filedes) ;
*charptr = GET_BYTE (psf) ;
- count += 1 ;
break ;
- case 'w' :
- wordptr = va_arg (argptr, unsigned short*) ;
- fread (psf->header, 1, sizeof (short), psf->file) ;
- worddata = GET_SHORT (psf) ;
- *wordptr = H2LE_SHORT (worddata) ;
- count += 2 ;
+ case '2' :
+ shortptr = va_arg (argptr, unsigned short*) ;
+ count += psf_fread (psf->header, 1, sizeof (short), psf->filedes) ;
+ if (endian == SF_ENDIAN_BIG)
+ shortdata = GET_BE_SHORT (psf) ;
+ else
+ shortdata = GET_LE_SHORT (psf) ;
+ *shortptr = shortdata ;
break ;
- case 'W' :
- wordptr = va_arg (argptr, unsigned short*) ;
- fread (psf->header, 1, sizeof (short), psf->file) ;
- worddata = GET_SHORT (psf) ;
- *wordptr = H2BE_SHORT (worddata) ;
- count += 2 ;
+ case '3' :
+ intptr = va_arg (argptr, unsigned int*) ;
+ count += psf_fread (psf->header, 1, 3, psf->filedes) ;
+ if (endian == SF_ENDIAN_BIG)
+ intdata = GET_BE_3BYTE (psf) ;
+ else
+ intdata = GET_LE_3BYTE (psf) ;
+ *intptr = intdata ;
break ;
-
- case 'l' :
- longptr = va_arg (argptr, unsigned int*) ;
- fread (psf->header, 1, sizeof (int), psf->file) ;
- longdata = GET_INT (psf) ;
- *longptr = H2LE_INT (longdata) ;
- count += 4 ;
- break ;
- case 'L' :
- longptr = va_arg (argptr, unsigned int*) ;
- fread (psf->header, 1, sizeof (int), psf->file) ;
- longdata = GET_INT (psf) ;
- *longptr = H2BE_INT (longdata) ;
- count += 4 ;
+ case '4' :
+ intptr = va_arg (argptr, unsigned int*) ;
+ count += psf_fread (psf->header, 1, sizeof (int), psf->filedes) ;
+ if (endian == SF_ENDIAN_BIG)
+ intdata = GET_BE_INT (psf) ;
+ else
+ intdata = GET_LE_INT (psf) ;
+ *intptr = intdata ;
break ;
- case 't' :
- longptr = va_arg (argptr, unsigned int*) ;
- fread (psf->header, 1, 3, psf->file) ;
- longdata = GET_3BYTE (psf) ;
- *longptr = H2LE_INT (longdata) ;
- count += 3 ;
+ case '8' :
+ countptr = va_arg (argptr, sf_count_t*) ;
+ count += psf_fread (psf->header, 1, 8, psf->filedes) ;
+ if (endian == SF_ENDIAN_BIG)
+ countdata = GET_BE_8BYTE (psf) ;
+ else
+ countdata = GET_LE_8BYTE (psf) ;
+ *countptr = countdata ;
break ;
- case 'T' :
- longptr = va_arg (argptr, unsigned int*) ;
- fread (psf->header, 1, 3, psf->file) ;
- longdata = GET_3BYTE (psf) ;
- *longptr = H2BE_INT (longdata) ;
- count += 3 ;
- break ;
-
- case 'f' :
+ case 'f' : /* Float conversion */
floatptr = va_arg (argptr, float *) ;
- fread (psf->header, 1, sizeof (float), psf->file) ;
- longdata = GET_INT (psf) ;
- longdata = H2LE_INT (longdata) ;
- *floatptr = float32_read ((unsigned char*) &longdata) ;
- count += 4 ;
+ count += psf_fread (psf->header, 1, sizeof (float), psf->filedes) ;
+ if (endian == SF_ENDIAN_BIG)
+ intdata = GET_BE_INT (psf) ;
+ else
+ intdata = GET_LE_INT (psf) ;
+ *floatptr = float32_read ((unsigned char*) &intdata) ;
break ;
- case 'F' :
- floatptr = va_arg (argptr, float *) ;
- fread (psf->header, 1, sizeof (float), psf->file) ;
- longdata = GET_INT (psf) ;
- longdata = H2BE_INT (longdata) ;
- *floatptr = float32_read ((unsigned char*) &longdata) ;
- count += 4 ;
+ case 'd' : /* double conversion */
+ psf_log_printf (psf, "Must fix double conversion\n") ;
+ /*
+ doubleptr = va_arg (argptr, double *) ;
+ count += psf_fread (psf->header, 1, sizeof (double), psf->filedes) ;
+ if (endian == SF_ENDIAN_BIG)
+ longdata = GET_BE_8BYTE (psf) ;
+ else
+ longdata = GET_LE_8BYTE (psf) ;
+ *doubleptr = double32_read ((unsigned char*) &longdata) ;
+ */
break ;
case 's' :
- printf ("Format conversion not implemented yet.\n") ;
+ psf_log_printf (psf, "Format conversion 's' not implemented yet.\n") ;
/*
strptr = va_arg (argptr, char *) ;
size = strlen (strptr) + 1 ;
@@ -518,31 +832,17 @@
*/
break ;
- case 'S' :
- printf ("Format conversion not implemented yet.\n") ;
- /*
- strptr = va_arg (argptr, char *) ;
- size = strlen (strptr) + 1 ;
- size += (size & 1) ;
- longdata = H2BE_INT (size) ;
- get_int (psf, longdata) ;
- memcpy (&(psf->header [psf->headindex]), strptr, size) ;
- psf->headindex += size ;
- */
- break ;
-
- case 'B' :
+ case 'b' :
charptr = va_arg (argptr, char*) ;
size = va_arg (argptr, size_t) ;
if (size > 0)
{ memset (charptr, 0, size) ;
- fread (charptr, 1, size, psf->file) ;
- count += size ;
+ count += psf_fread (charptr, 1, size, psf->filedes) ;
} ;
break ;
case 'z' :
- printf ("Format conversion not implemented yet.\n") ;
+ psf_log_printf (psf, "Format conversion 'z' not implemented yet.\n") ;
/*
size = va_arg (argptr, size_t) ;
while (size)
@@ -556,7 +856,7 @@
case 'p' :
/* Get the seek position first. */
position = va_arg (argptr, int) ;
- fseek (psf->file, position, SEEK_SET) ;
+ psf_fseek (psf->filedes, position, SEEK_SET) ;
count = 0 ;
break ;
@@ -563,7 +863,7 @@
case 'j' :
/* Get the seek position first. */
position = va_arg (argptr, int) ;
- fseek (psf->file, position, SEEK_CUR) ;
+ psf_fseek (psf->filedes, position, SEEK_CUR) ;
count = 0 ;
break ;
@@ -587,11 +887,10 @@
{ psf_log_printf (psf, "---------------------------------\n") ;
psf_log_printf (psf, " Sample rate : %d\n", psf->sf.samplerate) ;
- psf_log_printf (psf, " Samples : %d\n", psf->sf.samples) ;
+ psf_log_printf (psf, " Samples : %C\n", psf->sf.samples) ;
psf_log_printf (psf, " Channels : %d\n", psf->sf.channels) ;
- psf_log_printf (psf, " Bit width : %d\n", psf->sf.pcmbitwidth) ;
- psf_log_printf (psf, " Format : %X\n", psf->sf.format) ;
+ 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") ;
@@ -598,6 +897,27 @@
psf_log_printf (psf, "---------------------------------\n") ;
} /* psf_dump_SFINFO */
+sf_count_t
+psf_default_seek (SF_PRIVATE *psf, int mode, sf_count_t samples_from_start)
+{ sf_count_t position, retval ;
+
+ if (! (psf->blockwidth && psf->dataoffset >= 0))
+ { psf->error = SFE_BAD_SEEK ;
+ return ((sf_count_t) -1) ;
+ } ;
+
+ position = psf->dataoffset + psf->blockwidth * samples_from_start ;
+
+ if ((retval = psf_fseek (psf->filedes, position, SEEK_SET)) != position)
+ { psf->error = SFE_SEEK_FAILED ;
+ return ((sf_count_t) -1) ;
+ } ;
+
+ mode = mode ;
+
+ return samples_from_start ;
+} /* psf_default_seek */
+
/*========================================================================================
** Functions used in the write function for updating the peak chunk.
*/
@@ -644,7 +964,7 @@
position = k ;
} ;
- fmaxval = maxval / 0x7FFFFFFF ;
+ fmaxval = maxval / SF_MAX_COUNT ;
position /= psf->sf.channels ;
if (fmaxval > psf->peak.peak[chan].value)
--- a/common/libsndfile/src/common.h
+++ b/common/libsndfile/src/common.h
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 1999-2001 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
**
** 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
@@ -16,14 +16,15 @@
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
+#include "config.h"
+
#ifndef COMMON_H_INCLUDED
#define COMMON_H_INCLUDED
-#ifdef _WIN32
+#if (defined (WIN32) || defined (_WIN32))
#pragma pack(push,1)
#endif
-
#define SF_BUFFER_LEN (4096)
#define SF_FILENAME_LEN (256)
#define SF_HEADER_LEN (2048)
@@ -33,67 +34,48 @@
#define PEAK_CHANNEL_COUNT 16
+/* For some reason SIGNED_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))
+
+#if (defined (WIN32) || defined (_WIN32))
+# define SF_MAX_COUNT 0x7FFFFFFFFFFFFFFFI64
+#elif (SIZEOF_OFF_T == 4)
+# define SF_MAX_COUNT 0x7FFFFFFF
+#elif (SIZEOF_OFF_T == 8)
+# define SF_MAX_COUNT 0x7FFFFFFFFFFFFFFFLL
+#else
+# error "sizeof (long) != 4 && sizeof (long) != 8"
+#endif
+
+#define SF_MAX_UINT 0xFFFFFFFF
+#define SF_MAX_INT 0x7FFFFFFF
+
+#if (defined (WIN32) || defined (_WIN32))
+ #define SIZEOF_SF_COUNT_T 8
+#else
+ #define SIZEOF_SF_COUNT_T SIZEOF_OFF_T
+#endif
+
enum
-{ SF_MODE_READ = 11,
- SF_MODE_WRITE = 12,
- SF_MODE_RW = 13, /* Unlikely that RW will ever be implemented. */
-
- /* PEAK chunk location. */
+{ /* PEAK chunk location. */
SF_PEAK_START = 42,
SF_PEAK_END = 43,
- /* Two endian enums. */
- SF_ENDIAN_LITTLE = 100,
- SF_ENDIAN_BIG = 101,
-
+ /* PEAK chunk location. */
+ SF_SCALE_MAX = 52,
+ SF_SCALE_MIN = 53,
+
/* Char type for 8 bit files. */
SF_CHARS_SIGNED = 200,
SF_CHARS_UNSIGNED = 201
} ;
-/* Processor floating point capabilities. float32_get_capabilities () in
-** src/float32.c returns one of the latter three values.
-*/
-enum
-{ FLOAT_UNKNOWN = 0x00,
- FLOAT_CAN_RW_LE = 0x23,
- FLOAT_CAN_RW_BE = 0x34,
- FLOAT_BROKEN_LE = 0x35,
- FLOAT_BROKEN_BE = 0x36
-} ;
+#define SFM_MASK (SFM_READ | SFM_WRITE | SFM_RDWR)
+#define SFM_UNMASK (~SFM_MASK)
-enum
-{ SF_FALSE = 0,
- SF_TRUE = 1
-} ;
-
-/* Command values for sf_command (). These are obtained using the Python
-** script sf_command.py in the top level directory of the libsndfile sources.
-*/
-enum
-{ SFC_LIB_VERSION = 0x1048C,
- SFC_READ_TEXT = 0x054F0,
- SFC_WRITE_TEXT = 0x0B990,
- SFC_NORM_FLOAT = 0x0914A,
- SFC_NORM_DOUBLE = 0x1226D,
- SFC_SCALE_MODE = 0x0A259,
- SFC_ADD_PEAK = 0x96F53
-} ;
-
-/* Function pointer typedefs. */
-
-typedef int (*func_seek) (void*, long, int) ;
-
-typedef int (*func_short) (void*, short *ptr, unsigned int len) ;
-typedef int (*func_int) (void*, int *ptr, unsigned int len) ;
-typedef int (*func_float) (void*, float *ptr, unsigned int len) ;
-typedef int (*func_double) (void*, double *ptr, unsigned int len, int normalize) ;
-
-typedef int (*func_wr_hdr) (void*) ;
-typedef int (*func_command) (void*, int command, void *data, int datasize) ;
-
-typedef int (*func_close) (void*) ;
-
/*---------------------------------------------------------------------------------------
** PEAK_CHUNK - This chunk type is common to both AIFF and WAVE files although their
** endian encodings are different.
@@ -116,7 +98,7 @@
** contents.
*/
-typedef struct
+typedef struct sf_private_tag
{ /* Force the compiler to double align the start of buffer. */
double buffer [SF_BUFFER_LEN/sizeof(double)] ;
char filename [SF_FILENAME_LEN] ;
@@ -125,7 +107,7 @@
** of common.c
*/
char logbuffer [SF_BUFFER_LEN] ;
- unsigned char header [SF_HEADER_LEN] ;
+ unsigned char header [SF_HEADER_LEN] ; /* Must be unsigned */
/* For storing text from header. */
char headertext [SF_TEXT_LEN] ;
@@ -138,13 +120,13 @@
unsigned int headindex, headcurrent ;
int has_text ;
- FILE *file ;
+ int filedes ;
int error ;
- int mode ; /* Open mode : SF_MODE_READ or SF_MODE_WRITE. */
+ int mode ; /* Open mode : SFM_READ, SFM_WRITE or SFM_RDWR. */
int endian ; /* File endianness : SF_ENDIAN_LITTLE or SF_ENDIAN_BIG. */
int chars ; /* Chars are SF_CHARS_SIGNED or SF_CHARS_UNSIGNED. */
- int fl32_endswap ; /* Need to endswap float32s? */
+ int float_endswap ; /* Need to endswap float32s? */
SF_INFO sf ;
@@ -152,37 +134,42 @@
int peak_loc ; /* Write a PEAK chunk at the start or end of the file? */
PEAK_CHUNK peak ;
- long dataoffset ; /* Offset in number of bytes from beginning of file. */
- long datalength ; /* Length in bytes of the audio data. */
- long tailstart ; /* Offset to file tailer. */
- unsigned int blockwidth ; /* Size in bytes of one set of interleaved samples. */
- unsigned int bytewidth ; /* Size in bytes of one sample (one channel). */
+ 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. */
- long filelength ;
- long current ;
+ int blockwidth ; /* Size in bytes of one set of interleaved samples. */
+ int bytewidth ; /* Size in bytes of one sample (one channel). */
- void *fdata ;
-
- int scale_mode ;
+ sf_count_t filelength ;
+
+ int last_op ; /* Last operation; either SFM_READ or SFM_WRITE */
+ sf_count_t read_current ;
+ sf_count_t write_current ;
+
+ void *fdata ; /* This is a pointer to dynamically allocated file format
+ ** specific data.
+ */
int norm_double ;
int norm_float ;
+
+ /* A set of file specific function pointers */
- func_seek seek_func ;
+ 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) ;
- func_short read_short ;
- func_int read_int ;
- func_float read_float ;
- func_double read_double ;
+ sf_count_t (*write_short) (struct sf_private_tag*, short *ptr, sf_count_t len) ;
+ sf_count_t (*write_int) (struct sf_private_tag*, int *ptr, sf_count_t len) ;
+ sf_count_t (*write_float) (struct sf_private_tag*, float *ptr, sf_count_t len) ;
+ sf_count_t (*write_double) (struct sf_private_tag*, double *ptr, sf_count_t len) ;
- func_short write_short ;
- func_int write_int ;
- func_float write_float ;
- func_double write_double ;
+ sf_count_t (*new_seek) (struct sf_private_tag*, int mode, sf_count_t samples_from_start) ;
+ int (*write_header) (struct sf_private_tag*) ;
+ int (*command) (struct sf_private_tag*, int command, void *data, int datasize) ;
+ int (*close) (struct sf_private_tag*) ;
- func_wr_hdr write_header ;
- func_command command ;
- func_close close ;
-
} SF_PRIVATE ;
enum
@@ -189,15 +176,15 @@
{ SFE_NO_ERROR = 0,
SFE_BAD_FILE,
+ SFE_BAD_FILE_READ,
SFE_OPEN_FAILED,
SFE_BAD_OPEN_FORMAT,
SFE_BAD_SNDFILE_PTR,
SFE_BAD_SF_INFO_PTR,
- SFE_BAD_INT_FD,
+ SFE_BAD_SF_INCOMPLETE,
+ SFE_BAD_FILE_PTR,
SFE_BAD_INT_PTR,
SFE_MALLOC_FAILED,
- SFE_BAD_SEEK,
- SFE_NOT_SEEKABLE,
SFE_UNIMPLEMENTED,
SFE_BAD_READ_ALIGN,
SFE_BAD_WRITE_ALIGN,
@@ -209,8 +196,21 @@
SFE_SHORT_READ,
SFE_SHORT_WRITE,
SFE_INTERNAL,
+ SFE_LOG_OVERRUN,
SFE_BAD_CONTROL_CMD,
+ SFE_BAD_ENDIAN,
+ SFE_CHANNEL_COUNT,
+ 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_WAV_NO_RIFF,
SFE_WAV_NO_WAVE,
SFE_WAV_NO_FMT,
@@ -262,33 +262,59 @@
SFE_SMTD_NO_SAMR,
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_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_FMT,
+ SFE_W64_NO_DATA,
+ SFE_W64_FMT_SHORT,
+ SFE_W64_FMT_TOO_BIG,
+ SFE_W64_ADPCM_NOT4BIT,
+ SFE_W64_ADPCM_CHANNELS,
+ SFE_W64_GSM610_FORMAT,
+
+ SFE_DWVW_BAD_BITWIDTH,
+
SFE_MAX_ERROR /* This must be last in list. */
} ;
-/* Get the float32 capability of the processor at run time.
-** Implemented in src/float32.c.
+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.
*/
-int float32_get_capability (int endianness) ;
float float32_read (unsigned char *cptr) ;
void float32_write (float in, unsigned char *out) ;
+double double64_read (unsigned char *cptr) ;
+void double64_write (double in, unsigned char *out) ;
/* Endian swapping routines implemented in src/common.h. */
-void endswap_short_array (short *ptr, int len) ;
-void endswap_int_array (int *ptr, int len) ;
+void endswap_short_array (short *ptr, sf_count_t len) ;
+void endswap_int_array (int *ptr, sf_count_t len) ;
+/* Always 8 byte values whether sizeof (long) == 8 or not. */
+void endswap_long_array (long *ptr, sf_count_t len) ;
/* Functions for writing to the internal logging buffer. */
void psf_log_printf (SF_PRIVATE *psf, char *format, ...) ;
-void psf_log_SF_INFO (SF_PRIVATE *psf) ;
+void psf_log_SF_INFO (SF_PRIVATE *psf) ;
/* Functions used when writing file headers. */
@@ -305,64 +331,102 @@
void peak_update_int (SF_PRIVATE *psf, int *ptr, size_t items) ;
void peak_update_double (SF_PRIVATE *psf, double *ptr, size_t items) ;
-/* Init functions for a number of common data encodings. */
+/* Functions defined in command.c. */
-int pcm_read_init (SF_PRIVATE *psf) ;
-int pcm_write_init (SF_PRIVATE *psf) ;
+int psf_get_format_simple_count (void) ;
+int psf_get_format_simple (SF_FORMAT_INFO *data) ;
-int ulaw_read_init (SF_PRIVATE *psf) ;
-int ulaw_write_init (SF_PRIVATE *psf) ;
+int psf_get_format_major_count (void) ;
+int psf_get_format_major (SF_FORMAT_INFO *data) ;
-int alaw_read_init (SF_PRIVATE *psf) ;
-int alaw_write_init (SF_PRIVATE *psf) ;
+int psf_get_format_subtype_count (void) ;
+int psf_get_format_subtype (SF_FORMAT_INFO *data) ;
-int float32_read_init (SF_PRIVATE *psf) ;
-int float32_write_init (SF_PRIVATE *psf) ;
+double psf_calc_signal_max (SF_PRIVATE *psf) ;
-/* Functions for reading and writing different file formats.*/
+/* 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 aiff_open_read (SF_PRIVATE *psf) ;
-int aiff_open_write (SF_PRIVATE *psf) ;
+/*------------------------------------------------------------------------------------
+** File I/O functions which will allow access to large files (> 2 Gig) on
+** some 32 bit OSes. Implementation in file_io.c.
+*/
-int au_open_read (SF_PRIVATE *psf) ;
-int au_nh_open_read (SF_PRIVATE *psf) ; /* Headerless version of AU. */
-int au_open_write (SF_PRIVATE *psf) ;
+int psf_open (const char *pathname, int flags) ;
-int wav_open_read (SF_PRIVATE *psf) ;
-int wav_open_write (SF_PRIVATE *psf) ;
+sf_count_t psf_fseek (int fd, sf_count_t offset, int whence) ;
+sf_count_t psf_fread (void *ptr, sf_count_t bytes, sf_count_t count, int fd) ;
+sf_count_t psf_fwrite (void *ptr, sf_count_t bytes, sf_count_t count, int fd) ;
+sf_count_t psf_fgets (char *buffer, sf_count_t bufsize, int fd) ;
+sf_count_t psf_ftell (int fd) ;
+sf_count_t psf_get_filelen (int fd) ;
-int raw_open_read (SF_PRIVATE *psf) ;
-int raw_open_write (SF_PRIVATE *psf) ;
+void psf_fclearerr (int fd) ;
-int paf_open_read (SF_PRIVATE *psf) ;
-int paf_open_write (SF_PRIVATE *psf) ;
+int psf_ferror (int fd) ;
+int psf_fclose (int fd) ;
-int svx_open_read (SF_PRIVATE *psf) ;
-int svx_open_write (SF_PRIVATE *psf) ;
+/*------------------------------------------------------------------------------------
+** Functions for reading and writing different file formats.
+*/
-int nist_open_read (SF_PRIVATE *psf) ;
-int nist_open_write (SF_PRIVATE *psf) ;
+int aiff_open (SF_PRIVATE *psf) ;
+int au_open (SF_PRIVATE *psf) ;
+int au_nh_open (SF_PRIVATE *psf) ; /* Headerless version of AU. */
+int ircam_open (SF_PRIVATE *psf) ;
+int nist_open (SF_PRIVATE *psf) ;
+int paf_open (SF_PRIVATE *psf) ;
+int raw_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 smpltd_open_read (SF_PRIVATE *psf) ;
-int smpltd_open_write (SF_PRIVATE *psf) ;
+/* In progress. Do not currently work. */
-int voc_open_read (SF_PRIVATE *psf) ;
-int voc_open_write (SF_PRIVATE *psf) ;
+int rx2_open (SF_PRIVATE *psf) ;
+int sd2_open (SF_PRIVATE *psf) ;
+int smpltd_open (SF_PRIVATE *psf) ;
+int txw_open (SF_PRIVATE *psf) ;
-int rx2_open_read (SF_PRIVATE *psf) ;
-int rx2_open_write (SF_PRIVATE *psf) ;
+/*------------------------------------------------------------------------------------
+** Init functions for a number of common data encodings.
+*/
-int ircam_open_read (SF_PRIVATE *psf) ;
-int ircam_open_write (SF_PRIVATE *psf) ;
+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 wav_w64_ima_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) ;
+int wav_w64_msadpcm_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) ;
-/* Win32 does seem to have snprintf and vsnprintf but prepends
-** the names with an underscore. Why?
+int aiff_ima_init (SF_PRIVATE *psf, int blockalign, int samplesperblock) ;
+
+/*------------------------------------------------------------------------------------
+** Here's how we fix systems which don't snprintf / vsnprintf.
+** Systems without these functions should use the
*/
-#ifdef WIN32
-#define snprintf _snprintf
-#define vsnprintf _vsnprintf
+#if (defined (WIN32) || defined (_WIN32))
+#define LSF_SNPRINTF _snprintf
+#elif (HAVE_SNPRINTF && ! FORCE_MISSING_SNPRINTF)
+#define LSF_SNPRINTF snprintf
+#else
+int missing_snprintf (char *str, size_t n, char const *fmt, ...) ;
+#define LSF_SNPRINTF missing_snprintf
+#endif
+
+#if (defined (WIN32) || defined (_WIN32))
+#define LSF_VSNPRINTF _vsnprintf
+#elif (HAVE_VSNPRINTF && ! FORCE_MISSING_SNPRINTF)
+#define LSF_VSNPRINTF vsnprintf
+#else
+int missing_vsnprintf (char *str, size_t n, const char *fmt, ...) ;
+#define LSF_VSNPRINTF missing_vsnprintf
#endif
#ifdef _WIN32
--- a/common/libsndfile/src/config.h.in
+++ b/common/libsndfile/src/config.h.in
@@ -1,33 +1,8 @@
/* src/config.h.in. Generated automatically from configure.in by autoheader 2.13. */
-/* Define to `long' if <sys/types.h> doesn't define. */
-#undef off_t
-
-/* Define to `unsigned' if <sys/types.h> doesn't define. */
-#undef size_t
-
/* Define if you have the ANSI C header files. */
#undef STDC_HEADERS
-/* Define to `long' if <sys/types.h> doesn't define. */
-#undef off_t
-
-/* Define to `unsigned' if <sys/types.h> doesn't define. */
-#undef size_t
-
-/* Define if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Set to 1 if the processor is big endian, otherwise set to 0. */
-#undef GUESS_BIG_ENDIAN
-
-/* Set to 1 if the processor is little endian, otherwise set to 0. */
-#undef GUESS_LITTLE_ENDIAN
-
-/* Set to 1 to force the use of code for processors with broken floats */
-/* Otherwise set it to 0. */
-#undef FORCE_BROKEN_FLOAT
-
/* The number of bytes in a double. */
#undef SIZEOF_DOUBLE
@@ -40,6 +15,9 @@
/* The number of bytes in a long. */
#undef SIZEOF_LONG
+/* The number of bytes in a off_t. */
+#undef SIZEOF_OFF_T
+
/* The number of bytes in a short. */
#undef SIZEOF_SHORT
@@ -46,30 +24,24 @@
/* The number of bytes in a void*. */
#undef SIZEOF_VOIDP
-/* Define if you have the fclose function. */
-#undef HAVE_FCLOSE
-
-/* Define if you have the fopen function. */
-#undef HAVE_FOPEN
-
-/* Define if you have the fread function. */
-#undef HAVE_FREAD
-
/* Define if you have the free function. */
#undef HAVE_FREE
-/* Define if you have the fseek function. */
-#undef HAVE_FSEEK
+/* Define if you have the fstat function. */
+#undef HAVE_FSTAT
-/* Define if you have the ftell function. */
-#undef HAVE_FTELL
+/* Define if you have the lseek function. */
+#undef HAVE_LSEEK
-/* Define if you have the fwrite function. */
-#undef HAVE_FWRITE
-
/* Define if you have the malloc function. */
#undef HAVE_MALLOC
+/* Define if you have the open function. */
+#undef HAVE_OPEN
+
+/* Define if you have the read function. */
+#undef HAVE_READ
+
/* Define if you have the snprintf function. */
#undef HAVE_SNPRINTF
@@ -76,6 +48,12 @@
/* Define if you have the vsnprintf function. */
#undef HAVE_VSNPRINTF
+/* Define if you have the write function. */
+#undef HAVE_WRITE
+
+/* Define if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
/* Define if you have the <endian.h> header file. */
#undef HAVE_ENDIAN_H
@@ -84,4 +62,34 @@
/* Version number of package */
#undef VERSION
+
+/* 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
+
+/* Target processor is big endian. */
+#undef CPU_IS_BIG_ENDIAN
+
+/* Target processor is little endian. */
+#undef CPU_IS_LITTLE_ENDIAN
+
+/* Define if you have C99's lrint function. */
+#undef HAVE_LRINT
+
+/* Define if you have C99's lrintf function. */
+#undef HAVE_LRINTF
+
+/* Set to 1 to force the use of code for processors with broken floats */
+#undef FORCE_BROKEN_FLOAT
+
+/* Set to 1 to force the use of code for processors with broken floats */
+#undef FORCE_BROKEN_FLOAT
+
+/* Set to 1 if compiling for Win32 */
+#undef OS_IS_WIN32
--- /dev/null
+++ b/common/libsndfile/src/double64.c
@@ -1,0 +1,620 @@
+/*
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
+**
+** 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 <stdio.h>
+#include <unistd.h>
+#include <string.h>
+
+#include "sndfile.h"
+#include "config.h"
+#include "sfendian.h"
+#include "common.h"
+#include "float_cast.h"
+
+/*--------------------------------------------------------------------------------------------
+** 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 = 0x35,
+ DOUBLE_BROKEN_BE = 0x36
+} ;
+
+/*--------------------------------------------------------------------------------------------
+** 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, short *ptr, sf_count_t len) ;
+static sf_count_t host_write_i2d (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
+static sf_count_t host_write_f2d (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
+static sf_count_t host_write_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
+
+static void d2s_array (double *buffer, unsigned int count, short *ptr) ;
+static void d2i_array (double *buffer, unsigned int count, int *ptr) ;
+static void d2f_array (double *buffer, unsigned int count, float *ptr) ;
+
+static void s2d_array (short *ptr, double *buffer, unsigned int count) ;
+static void i2d_array (int *ptr, double *buffer, unsigned int count) ;
+static void f2d_array (float *ptr, double *buffer, unsigned int count) ;
+
+static void double64_peak_update (SF_PRIVATE *psf, double *buffer, int count, int index) ;
+
+static int double64_get_capability (void) ;
+
+/*--------------------------------------------------------------------------------------------
+** Exported functions.
+*/
+
+int
+double64_init (SF_PRIVATE *psf)
+{ static int double64_caps = DOUBLE_UNKNOWN ;
+
+ if (double64_caps == DOUBLE_UNKNOWN)
+ double64_caps = double64_get_capability () ;
+
+ psf->blockwidth = sizeof (double) * psf->sf.channels ;
+
+ if (psf->mode == SFM_READ || psf->mode == SFM_RDWR)
+ { switch (psf->endian + double64_caps)
+ { case (SF_ENDIAN_BIG + DOUBLE_CAN_RW_BE) :
+ psf->float_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->float_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->float_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->float_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 ;
+
+ default : break ;
+ } ;
+ } ;
+
+ if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR)
+ { switch (psf->endian + double64_caps)
+ { case (SF_ENDIAN_LITTLE + DOUBLE_CAN_RW_LE) :
+ psf->float_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->float_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->float_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->float_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 ;
+
+ default : break ;
+ } ;
+ };
+
+ psf->filelength = psf_get_filelen (psf->filedes) ;
+ psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset :
+ psf->filelength - psf->dataoffset ;
+ psf->sf.samples = psf->datalength / (psf->sf.channels * sizeof (double)) ;
+
+ return 0 ;
+} /* double64_init */
+
+double
+double64_read (unsigned char *cptr)
+{ int exponent, mantissa, negative ;
+ double fvalue ;
+
+ if (CPU_IS_LITTLE_ENDIAN)
+ { negative = cptr [3] & 0x80 ;
+ exponent = ((cptr [3] & 0x7F) << 1) | ((cptr [2] & 0x80) ? 1 : 0);
+ mantissa = ((cptr [2] & 0x7F) << 16) | (cptr [1] << 8) | (cptr [0]) ;
+ }
+ else
+ { 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 *= (1 << exponent) ;
+ else if (exponent < 0)
+ fvalue /= (1 << abs (exponent)) ;
+
+ return fvalue ;
+} /* double64_read */
+
+void
+double64_write (double in, unsigned char *out)
+{ int exponent, mantissa, negative = 0 ;
+
+ *((int*) out) = 0 ;
+
+ if (in == 0.0)
+ return ;
+
+ if (in < 0.0)
+ { in *= -1.0 ;
+ negative = 1 ;
+ } ;
+
+ in = frexp (in, &exponent) ;
+
+ exponent += 126 ;
+
+ in *= (float) 0x1000000 ;
+ mantissa = (((int) in) & 0x7FFFFF) ;
+
+ if (CPU_IS_LITTLE_ENDIAN)
+ { 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 ;
+ }
+ else
+ { 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 ;
+} /* double64_write */
+
+/*==============================================================================================
+** Private functions.
+*/
+
+static void
+double64_peak_update (SF_PRIVATE *psf, double *buffer, int count, int index)
+{ 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.peak[chan].value)
+ { psf->peak.peak[chan].value = fmaxval ;
+ psf->peak.peak[chan].position = psf->write_current + index + (position /psf->sf.channels) ;
+ } ;
+ } ;
+
+ return ;
+} /* double64_peak_update */
+
+static int
+double64_get_capability (void)
+{ union
+ { double d ;
+ int i [2] ;
+ unsigned char c [8] ;
+ } data ;
+
+ data.d = 1.234567890123456789 ; /* Some abitrary value. */
+
+ if (FORCE_BROKEN_FLOAT)
+ return (CPU_IS_LITTLE_ENDIAN) ? DOUBLE_BROKEN_LE : DOUBLE_BROKEN_BE ;
+
+ /* If this test is true ints and floats are compatible and little endian. */
+ if (data.i [0] == 0x428c59fb && data.i [1] == 0x3ff3c0ca &&
+ data.c [0] == 0xfb && data.c [2] == 0x8c && data.c [4] == 0xca && data.c [6] == 0xf3)
+ return DOUBLE_CAN_RW_LE ;
+
+ /* If this test is true ints and floats are compatible and big endian. */
+ if (data.i [0] == 0x3ff3c0ca && data.i [1] == 0x428c59fb &&
+ data.c [0] == 0x3f && data.c [2] == 0xc0 && data.c [4] == 0x42 && data.c [6] == 0x59)
+ return DOUBLE_CAN_RW_BE ;
+
+ /* Doubles are broken. Don't expect reading or writing to be fast. */
+ return (CPU_IS_LITTLE_ENDIAN) ? DOUBLE_BROKEN_LE : DOUBLE_BROKEN_BE ;
+} /* double64_get_capability */
+
+/*----------------------------------------------------------------------------------------------
+*/
+
+
+static sf_count_t
+host_read_d2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
+{ unsigned int readcount, thisread ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+
+ bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
+ bytecount = len * psf->bytewidth ;
+ while (bytecount > 0)
+ { readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+
+ if (psf->float_endswap == SF_TRUE)
+ endswap_long_array ((long*) psf->buffer, readcount / sizeof (int)) ;
+
+ d2s_array ((double*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
+ total += thisread ;
+ if (thisread < readcount)
+ break ;
+ index += thisread / psf->bytewidth ;
+ bytecount -= thisread ;
+ } ;
+
+ total /= psf->bytewidth ;
+ if (total < len)
+ psf->error = SFE_SHORT_READ ;
+
+ return total ;
+} /* host_read_d2s */
+
+static sf_count_t
+host_read_d2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
+{ unsigned int readcount, thisread ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+
+ bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
+ bytecount = len * psf->bytewidth ;
+ while (bytecount > 0)
+ { readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+
+ if (psf->float_endswap == SF_TRUE)
+ endswap_long_array ((long*) psf->buffer, readcount / sizeof (int)) ;
+
+ d2i_array ((double*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
+ total += thisread ;
+ if (thisread < readcount)
+ break ;
+ index += thisread / psf->bytewidth ;
+ bytecount -= thisread ;
+ } ;
+
+ total /= psf->bytewidth ;
+ if (total < len)
+ psf->error = SFE_SHORT_READ ;
+
+ return total ;
+} /* host_read_d2i */
+
+static sf_count_t
+host_read_d2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ unsigned int readcount, thisread ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+
+ bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
+ bytecount = len * psf->bytewidth ;
+ while (bytecount > 0)
+ { readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+
+ if (psf->float_endswap == SF_TRUE)
+ endswap_long_array ((long*) psf->buffer, readcount / sizeof (int)) ;
+
+ d2f_array ((double*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
+ total += thisread ;
+ if (thisread < readcount)
+ break ;
+ index += thisread / psf->bytewidth ;
+ bytecount -= thisread ;
+ } ;
+
+ total /= psf->bytewidth ;
+ if (total < len)
+ psf->error = SFE_SHORT_READ ;
+
+ return total ;
+} /* host_read_d2f */
+
+static sf_count_t
+host_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ unsigned int readcount, thisread ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+
+ if (psf->float_endswap != SF_TRUE)
+ total = psf_fread (ptr, sizeof (double), len, psf->filedes) ;
+ else
+ { bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
+ bytecount = len * psf->bytewidth ;
+ while (bytecount > 0)
+ { readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+
+ endswap_long_array ((long*) psf->buffer, readcount / sizeof (int)) ;
+
+ memcpy (ptr + index, psf->buffer, thisread) ;
+
+ total += thisread ;
+ if (thisread < readcount)
+ break ;
+ index += thisread / psf->bytewidth ;
+ bytecount -= thisread ;
+ } ;
+ total /= psf->bytewidth ;
+ } ;
+
+ if (total < len)
+ psf->error = SFE_SHORT_READ ;
+
+ return total ;
+} /* host_read_d */
+
+static sf_count_t
+host_write_s2d (SF_PRIVATE *psf, short *ptr, sf_count_t len)
+{ unsigned int writecount, thiswrite ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+
+ bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
+ bytecount = len * psf->bytewidth ;
+ while (bytecount > 0)
+ { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
+ s2d_array (ptr + index, (double*) (psf->buffer), writecount / psf->bytewidth) ;
+
+ double64_peak_update (psf, (double*) (psf->buffer), writecount / psf->bytewidth, index / psf->sf.channels) ;
+
+ if (psf->float_endswap == SF_TRUE)
+ endswap_long_array ((long*) psf->buffer, writecount / sizeof (int)) ;
+
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
+ total += thiswrite ;
+ if (thiswrite < writecount)
+ break ;
+ index += thiswrite / psf->bytewidth ;
+ bytecount -= thiswrite ;
+ } ;
+
+ total /= psf->bytewidth ;
+ if (total < len)
+ psf->error = SFE_SHORT_WRITE ;
+
+ return total ;
+} /* host_write_s2d */
+
+static sf_count_t
+host_write_i2d (SF_PRIVATE *psf, int *ptr, sf_count_t len)
+{ unsigned int writecount, thiswrite ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+
+ bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
+ bytecount = len * psf->bytewidth ;
+ while (bytecount > 0)
+ { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
+ i2d_array (ptr + index, (double*) (psf->buffer), writecount / psf->bytewidth) ;
+
+ double64_peak_update (psf, (double*) (psf->buffer), writecount / psf->bytewidth, index / psf->sf.channels) ;
+
+ if (psf->float_endswap == SF_TRUE)
+ endswap_long_array ((long*) psf->buffer, writecount / sizeof (int)) ;
+
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
+ total += thiswrite ;
+ if (thiswrite < writecount)
+ break ;
+ index += thiswrite / psf->bytewidth ;
+ bytecount -= thiswrite ;
+ } ;
+
+ total /= psf->bytewidth ;
+ if (total < len)
+ psf->error = SFE_SHORT_WRITE ;
+
+ return total ;
+} /* host_write_i2d */
+
+static sf_count_t
+host_write_f2d (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ unsigned int writecount, thiswrite ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+
+ bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
+ bytecount = len * psf->bytewidth ;
+ while (bytecount > 0)
+ { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
+ f2d_array (ptr + index, (double*) (psf->buffer), writecount / psf->bytewidth) ;
+
+ double64_peak_update (psf, (double*) (psf->buffer), writecount / psf->bytewidth, index / psf->sf.channels) ;
+
+ if (psf->float_endswap == SF_TRUE)
+ endswap_long_array ((long*) psf->buffer, writecount / sizeof (int)) ;
+
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
+ total += thiswrite ;
+ if (thiswrite < writecount)
+ break ;
+ index += thiswrite / psf->bytewidth ;
+ bytecount -= thiswrite ;
+ } ;
+
+ total /= psf->bytewidth ;
+ if (total < len)
+ psf->error = SFE_SHORT_WRITE ;
+
+ return total ;
+} /* host_write_f2d */
+
+static sf_count_t
+host_write_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ unsigned int writecount, thiswrite ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+
+ double64_peak_update (psf, ptr, len, 0) ;
+
+ if (psf->float_endswap != SF_TRUE)
+ total = psf_fwrite (ptr, sizeof (double), len, psf->filedes) ;
+ else
+ { bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
+ bytecount = len * psf->bytewidth ;
+ while (bytecount > 0)
+ { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
+
+ memcpy (psf->buffer, ptr + index, writecount) ;
+
+ if (psf->float_endswap == SF_TRUE)
+ endswap_long_array ((long*) psf->buffer, writecount / sizeof (int)) ;
+
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
+ total += thiswrite ;
+ if (thiswrite < writecount)
+ break ;
+ index += thiswrite / psf->bytewidth ;
+ bytecount -= thiswrite ;
+ } ;
+ total /= psf->bytewidth ;
+ } ;
+
+ if (total < len)
+ psf->error = SFE_SHORT_WRITE ;
+
+ return total ;
+} /* host_write_d */
+
+/*=======================================================================================
+*/
+
+static void
+d2s_array (double *buffer, unsigned int count, short *ptr)
+{ while (count)
+ { count -- ;
+ ptr [count] = lrint (buffer [count]) ;
+ } ;
+} /* d2s_array */
+
+static void
+d2i_array (double *buffer, unsigned int count, int *ptr)
+{ while (count)
+ { count -- ;
+ ptr [count] = lrint (buffer [count]) ;
+ } ;
+} /* d2i_array */
+
+static void
+d2f_array (double *buffer, unsigned int count, float *ptr)
+{ while (count)
+ { count -- ;
+ ptr [count] = buffer [count] ;
+ } ;
+} /* d2f_array */
+
+static void
+s2d_array (short *ptr, double *buffer, unsigned int count)
+{ while (count)
+ { count -- ;
+ buffer [count] = ptr [count] ;
+ } ;
+
+} /* s2d_array */
+
+static void
+i2d_array (int *ptr, double *buffer, unsigned int count)
+{ while (count)
+ { count -- ;
+ buffer [count] = ptr [count] ;
+ } ;
+} /* i2d_array */
+
+static void
+f2d_array (float *ptr, double *buffer, unsigned int count)
+{ while (count)
+ { count -- ;
+ buffer [count] = ptr [count] ;
+ } ;
+} /* f2d_array */
+
+/*=======================================================================================
+*/
+
--- /dev/null
+++ b/common/libsndfile/src/dwvw.c
@@ -1,0 +1,644 @@
+/*
+** Copyright (C) 2002 Erik de Castro Lopo <[email protected]>
+**
+** 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 <stdio.h>
+#include <unistd.h>
+#include <string.h>
+
+#include "sndfile.h"
+#include "config.h"
+#include "sfendian.h"
+#include "float_cast.h"
+#include "common.h"
+
+typedef struct
+{ int filedes ;
+ int dwm_maxsize, bit_width, 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, short *ptr, sf_count_t len) ;
+static sf_count_t dwvw_write_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
+static sf_count_t dwvw_write_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
+static sf_count_t dwvw_write_d (SF_PRIVATE *psf, 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 sf_count_t dwvw_decode_data (DWVW_PRIVATE *pdwvw, int *ptr, sf_count_t len) ;
+static int dwvw_decode_load_bits (DWVW_PRIVATE *pdwvw, int bit_count) ;
+
+static sf_count_t dwvw_encode_data (DWVW_PRIVATE *pdwvw, int *ptr, sf_count_t len) ;
+static void dwvw_encode_store_bits (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 (bitwidth > 24)
+ return SFE_DWVW_BAD_BITWIDTH ;
+
+ if (psf->mode == SFM_RDWR)
+ return SFE_BAD_MODE_RW ;
+
+ if (! (pdwvw = malloc (sizeof (DWVW_PRIVATE))))
+ return SFE_MALLOC_FAILED ;
+
+ psf->fdata = (void*) pdwvw ;
+
+ memset (pdwvw, 0, sizeof (DWVW_PRIVATE)) ;
+
+ pdwvw->filedes = psf->filedes ;
+
+ pdwvw->bit_width = bitwidth ;
+ pdwvw->dwm_maxsize = bitwidth / 2 ;
+ pdwvw->max_delta = 1 << (bitwidth - 1) ;
+ pdwvw->span = 1 << bitwidth ;
+
+ dwvw_read_reset (pdwvw) ;
+
+ if (psf->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->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->new_seek = dwvw_seek ;
+ psf->close = dwvw_close ;
+
+ /* FIXME : This s bogus. */
+ if (psf->sf.samples <= 0)
+ psf->sf.samples = (psf->blockwidth) ? SF_MAX_COUNT / psf->blockwidth : SF_MAX_COUNT ;
+
+ psf->datalength = SF_MAX_COUNT ;
+ /* EMXIF : This s bogus. */
+
+ return 0 ;
+} /* dwvw_init */
+
+/*--------------------------------------------------------------------------------------------
+*/
+
+static int
+dwvw_close (SF_PRIVATE *psf)
+{ DWVW_PRIVATE *pdwvw ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pdwvw = (DWVW_PRIVATE*) psf->fdata ;
+
+ if (psf->mode == SFM_WRITE)
+ { static int last_values [8] = { 0, 0, 0, 0, 0, 0, 0, 0 } ;
+
+ /* Write 8 zero samples to fully flush output. */
+ dwvw_encode_data (pdwvw, last_values, 8) ;
+
+ /* Write the last buffer worth of data to disk. */
+ psf_fwrite (pdwvw->b.buffer, 1, pdwvw->b.index, pdwvw->filedes) ;
+
+ /* Now we know for certain the length of the file we can re-write
+ ** correct values for the FORM, COMM and SSND chunks.
+ */
+
+ psf_fseek (psf->filedes, 0, SEEK_END) ;
+ psf->filelength = psf_ftell (psf->filedes) ;
+ psf_fseek (psf->filedes, 0, SEEK_SET) ;
+
+ psf->datalength = psf->filelength - psf->dataoffset ;
+
+ psf->sf.samples = pdwvw->samplecount ;
+
+ if (psf->write_header)
+ psf->write_header (psf) ;
+ } ;
+
+ if (psf->fdata)
+ free (psf->fdata) ;
+ psf->fdata = NULL ;
+
+ return 0 ;
+} /* dwvw_close */
+
+static sf_count_t
+dwvw_seek (SF_PRIVATE *psf, int mode, sf_count_t offset)
+{ DWVW_PRIVATE *pdwvw ;
+
+ mode = mode ;
+
+ if (! psf->fdata)
+ { psf->error = SFE_INTERNAL ;
+ return ((sf_count_t) -1) ;
+ } ;
+
+ pdwvw = (DWVW_PRIVATE*) psf->fdata ;
+
+ if (offset == 0)
+ { psf_fseek (psf->filedes, psf->dataoffset, SEEK_SET) ;
+ dwvw_read_reset (pdwvw) ;
+ return 0 ;
+ } ;
+
+ psf->error = SFE_BAD_SEEK ;
+ return ((sf_count_t) -1) ;
+} /* dwvw_seek */
+
+
+/*==============================================================================
+*/
+
+static sf_count_t
+dwvw_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
+{ DWVW_PRIVATE *pdwvw ;
+ int *iptr ;
+ int k, bufferlen, readcount = 0, count ;
+ int index = 0, total = 0 ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pdwvw = (DWVW_PRIVATE*) psf->fdata ;
+
+ iptr = (int*) psf->buffer ;
+ bufferlen = SF_BUFFER_LEN / sizeof (int) ;
+ while (len > 0)
+ { readcount = (len >= bufferlen) ? bufferlen : len ;
+ count = dwvw_decode_data (pdwvw, iptr, readcount) ;
+ for (k = 0 ; k < readcount ; k++)
+ ptr [index + k] = iptr [k] >> 16 ;
+ index += readcount ;
+ total += count ;
+ len -= readcount ;
+ } ;
+
+ return total ;
+} /* dwvw_read_s */
+
+static sf_count_t
+dwvw_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
+{ DWVW_PRIVATE *pdwvw ;
+ sf_count_t total ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pdwvw = (DWVW_PRIVATE*) psf->fdata ;
+
+ total = dwvw_decode_data (pdwvw, ptr, len) ;
+
+ return total ;
+} /* dwvw_read_i */
+
+static sf_count_t
+dwvw_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ DWVW_PRIVATE *pdwvw ;
+ int *iptr ;
+ int k, bufferlen, readcount = 0, count ;
+ int index = 0, total = 0 ;
+ float normfact ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pdwvw = (DWVW_PRIVATE*) psf->fdata ;
+
+ normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80000000) : 1.0 ;
+
+ iptr = (int*) psf->buffer ;
+ bufferlen = SF_BUFFER_LEN / sizeof (int) ;
+ while (len > 0)
+ { readcount = (len >= bufferlen) ? bufferlen : len ;
+ count = dwvw_decode_data (pdwvw, iptr, readcount) ;
+ for (k = 0 ; k < readcount ; k++)
+ ptr [index + k] = normfact * (float) (iptr [k]) ;
+ index += readcount ;
+ total += count ;
+ len -= readcount ;
+ } ;
+ return total ;
+} /* dwvw_read_f */
+
+static sf_count_t
+dwvw_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ DWVW_PRIVATE *pdwvw ;
+ int *iptr ;
+ int k, bufferlen, readcount = 0, count ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pdwvw = (DWVW_PRIVATE*) psf->fdata ;
+
+ normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80000000) : 1.0 ;
+
+ iptr = (int*) psf->buffer ;
+ bufferlen = SF_BUFFER_LEN / sizeof (int) ;
+ while (len > 0)
+ { readcount = (len >= bufferlen) ? bufferlen : len ;
+ count = dwvw_decode_data (pdwvw, iptr, readcount) ;
+ for (k = 0 ; k < readcount ; k++)
+ ptr [index + k] = normfact * (double) (iptr [k]) ;
+ index += readcount ;
+ total += count ;
+ len -= readcount ;
+ } ;
+ return total ;
+} /* dwvw_read_d */
+
+static sf_count_t
+dwvw_decode_data (DWVW_PRIVATE *pdwvw, int *ptr, sf_count_t len)
+{ sf_count_t 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 (pdwvw, -1) ;
+
+ /* Check for end of input bit stream. Break loop if end. */
+ if (delta_width_modifier < 0)
+ break ;
+
+ if (delta_width_modifier && dwvw_decode_load_bits (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 (pdwvw, delta_width - 1) | (1 << (delta_width - 1)) ;
+ delta_negative = dwvw_decode_load_bits (pdwvw, 1) ;
+ if (delta == pdwvw->max_delta - 1)
+ delta += dwvw_decode_load_bits (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 (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), pdwvw->filedes) ;
+ 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)
+{ pdwvw->samplecount = 0 ;
+ pdwvw->b.index = 0 ;
+ pdwvw->b.end = 0 ;
+ pdwvw->bit_count = 0 ;
+ pdwvw->bits = 0 ;
+ pdwvw->last_delta_width = 0 ;
+ pdwvw->last_sample = 0 ;
+} /* dwvw_read_reset */
+
+static void
+dwvw_encode_store_bits (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, pdwvw->filedes) ;
+ 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 sf_count_t
+dwvw_encode_data (DWVW_PRIVATE *pdwvw, int *ptr, sf_count_t len)
+{ sf_count_t 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 (pdwvw, 0, abs (delta_width_modifier)) ;
+ if (abs (delta_width_modifier) != pdwvw->dwm_maxsize)
+ dwvw_encode_store_bits (pdwvw, 1, 1) ;
+
+ /* Write delta_width_modifier sign. */
+ if (delta_width_modifier < 0)
+ dwvw_encode_store_bits (pdwvw, 1, 1) ;
+ if (delta_width_modifier > 0)
+ dwvw_encode_store_bits (pdwvw, 0, 1) ;
+
+ /* Write delta and delta sign bit. */
+ if (delta_width)
+ { dwvw_encode_store_bits (pdwvw, delta, abs (delta_width) - 1) ;
+ dwvw_encode_store_bits (pdwvw, (delta_negative ? 1 : 0), 1) ;
+ } ;
+
+ /* Write extra bit!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
+ if (extra_bit >= 0)
+ dwvw_encode_store_bits (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, short *ptr, sf_count_t len)
+{ DWVW_PRIVATE *pdwvw ;
+ int *iptr ;
+ int k, bufferlen, writecount = 0, count ;
+ int index = 0, total = 0 ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pdwvw = (DWVW_PRIVATE*) psf->fdata ;
+
+ iptr = (int*) psf->buffer ;
+ bufferlen = SF_BUFFER_LEN / sizeof (int) ;
+ while (len > 0)
+ { writecount = (len >= bufferlen) ? bufferlen : len ;
+ for (k = 0 ; k < writecount ; k++)
+ iptr [k] = ptr [index + k] << 16 ;
+ count = dwvw_encode_data (pdwvw, iptr, writecount) ;
+ index += writecount ;
+ total += count ;
+ len -= writecount ;
+ } ;
+
+ return total ;
+} /* dwvw_write_s */
+
+static sf_count_t
+dwvw_write_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
+{ DWVW_PRIVATE *pdwvw ;
+ sf_count_t total ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pdwvw = (DWVW_PRIVATE*) psf->fdata ;
+
+ total = dwvw_encode_data (pdwvw, ptr, len) ;
+
+ return total ;
+} /* dwvw_write_i */
+
+static sf_count_t
+dwvw_write_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ DWVW_PRIVATE *pdwvw ;
+ int *iptr ;
+ int k, bufferlen, writecount = 0, count ;
+ int index = 0, total = 0 ;
+ float normfact ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pdwvw = (DWVW_PRIVATE*) psf->fdata ;
+
+ normfact = (psf->norm_float == SF_TRUE) ? ((float) 0x80000000) : 1.0 ;
+
+ iptr = (int*) psf->buffer ;
+ bufferlen = SF_BUFFER_LEN / sizeof (short) ;
+ while (len > 0)
+ { writecount = (len >= bufferlen) ? bufferlen : len ;
+ for (k = 0 ; k < writecount ; k++)
+ iptr [k] = lrintf (normfact * ptr [index + k]) ;
+ count = dwvw_encode_data (pdwvw, iptr, writecount) ;
+ index += writecount ;
+ total += count ;
+ len -= writecount ;
+ } ;
+
+ return total ;
+} /* dwvw_write_f */
+
+static sf_count_t
+dwvw_write_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ DWVW_PRIVATE *pdwvw ;
+ int *iptr ;
+ int k, bufferlen, writecount = 0, count ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pdwvw = (DWVW_PRIVATE*) psf->fdata ;
+
+ normfact = (psf->norm_double == SF_TRUE) ? ((double) 0x80000000) : 1.0 ;
+
+ iptr = (int*) psf->buffer ;
+ bufferlen = SF_BUFFER_LEN / sizeof (short) ;
+ while (len > 0)
+ { writecount = (len >= bufferlen) ? bufferlen : len ;
+ for (k = 0 ; k < writecount ; k++)
+ iptr [k] = lrint (normfact * ptr [index + k]) ;
+ count = dwvw_encode_data (pdwvw, iptr, writecount) ;
+ index += writecount ;
+ total += count ;
+ len -= writecount ;
+ } ;
+
+ return total ;
+} /* dwvw_write_d */
--- /dev/null
+++ b/common/libsndfile/src/file_io.c
@@ -1,0 +1,258 @@
+/*
+** Copyright (C) 2002 Erik de Castro Lopo <[email protected]>
+**
+** 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 <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <sys/stat.h>
+
+#include "sndfile.h"
+#include "config.h"
+#include "common.h"
+
+#if (defined (WIN32) || defined (_WIN32))
+
+ /* Win32 has a 64 file offset seek function:
+ ** __int64 _lseeki64 (int handle, __int64 offset, int origin);
+ */
+ #define EXTRA_OPEN_FLAGS O_BINARY
+ #define SF_SEEK _lseeki64
+ #define SF_FTELL(fd) _telli64 (fd)
+
+#elif (defined (SIZEOF_OFF_T) && SIZEOF_OFF_T == 8)
+
+ /* If sizeof (off_t) == 8 everything should just work :-).
+ ** This works if the libray is being compiled as a 64 bit user space
+ ** application or as a 32 bit user space library on *BSD, MacOSX.
+ ** It will hopefully be the default on everything RealSoonNow (tm).
+ */
+ #define EXTRA_OPEN_FLAGS 0
+ #define SF_SEEK lseek
+ #define SF_FTELL(fd) lseek ((fd), 0, SEEK_CUR)
+
+#else
+ /* Fallback position : if sizeof (off_t) == 4 will be limited to files of
+ ** 2^31-1 bytes.
+ */
+ #define EXTRA_OPEN_FLAGS 0
+ #define SF_SEEK lseek
+ #define SF_FTELL(fd) lseek ((fd), 0, SEEK_CUR)
+
+#endif
+
+/*------------------------------------------------------------------------------
+*/
+#if (defined (WIN32) || defined (_WIN32))
+#include <direct.h>
+
+#define _IFMT _S_IFMT
+#define _IFREG _S_IFREG
+
+#define S_ISREG(m) ((m) & _S_IFREG)
+
+#define S_IRWXU 0000700 /* rwx, owner */
+#define S_IRUSR 0000400 /* read permission, owner */
+#define S_IWUSR 0000200 /* write permission, owner */
+#define S_IXUSR 0000100 /* execute/search permission, owner */
+#define S_IRWXG 0000070 /* rwx, group */
+#define S_IRGRP 0000040 /* read permission, group */
+#define S_IWGRP 0000020 /* write permission, grougroup */
+#define S_IXGRP 0000010 /* execute/search permission, group */
+#define S_IRWXO 0000007 /* rwx, other */
+#define S_IROTH 0000004 /* read permission, other */
+#define S_IWOTH 0000002 /* write permission, other */
+#define S_IXOTH 0000001 /* execute/search permission, other */
+
+#endif
+
+/*------------------------------------------------------------------------------
+*/
+
+#define SENSIBLE_SIZE (0x40000000)
+
+int
+psf_open (const char *pathname, int mode)
+{ int fd = -1, flags ;
+
+ switch (mode)
+ { case SFM_READ :
+ flags = O_RDONLY | EXTRA_OPEN_FLAGS ;
+ fd = open (pathname, flags) ;
+ break ;
+
+ case SFM_WRITE :
+ flags = O_WRONLY | O_CREAT | O_TRUNC | EXTRA_OPEN_FLAGS ;
+ fd = open (pathname, flags, S_IRUSR | S_IWUSR | S_IRGRP) ;
+ break ;
+
+ case SFM_RDWR :
+ flags = O_RDWR | O_CREAT | EXTRA_OPEN_FLAGS ;
+ fd = open (pathname, flags, S_IRUSR | S_IWUSR | S_IRGRP) ;
+ break ;
+
+ default :
+ /* psf_log_printf (psf, "ad open mode.\n") ; */
+ return -1 ;
+ } ;
+
+ if (fd < 0)
+ perror ("psf_open") ;
+
+ return fd ;
+} /* psf_open */
+
+sf_count_t
+psf_fseek (int fd, sf_count_t offset, int whence)
+{
+ /* Bypass weird Win32-ism if necessary.
+ ** _lseeki64() returns an "invalid parameter" error is called with the
+ ** following offset and whence parameter. Instead, use the _telli64()
+ ** function.
+ */
+ if (OS_IS_WIN32 && offset == 0 && whence == SEEK_CUR)
+ return SF_FTELL (fd) ;
+
+ return SF_SEEK (fd, offset, whence) ;
+} /* psf_fseek */
+
+sf_count_t
+psf_fread (void *ptr, sf_count_t bytes, sf_count_t items, int fd)
+{ sf_count_t total = 0 ;
+ size_t count ;
+
+ 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 = read (fd, ((char*) ptr) + total, count) ;
+
+ if (count == ((size_t) -1) && errno == EINTR)
+ continue ;
+
+ if (count <= 0)
+ break ;
+
+ total += count ;
+ items -= count ;
+ } ;
+
+ return total / bytes ;
+} /* psf_fread */
+
+sf_count_t
+psf_fwrite (void *ptr, sf_count_t bytes, sf_count_t items, int fd)
+{ sf_count_t total = 0 ;
+ size_t count ;
+
+ 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 (fd, ((char*) ptr) + total, count) ;
+
+ if (count == ((size_t) -1) && errno == EINTR)
+ continue ;
+
+ if (count <= 0)
+ break ;
+
+ total += count ;
+ items -= count ;
+ } ;
+
+ return total / bytes ;
+} /* psf_fwrite */
+
+sf_count_t
+psf_ftell (int fd)
+{ sf_count_t pos ;
+
+ pos = SF_FTELL (fd) ;
+
+ /*
+ if (pos < 0)
+ psf_log_printf (psf, "psf_ftell error %s\n", strerror (errno)) ;
+ */
+
+ return pos ;
+} /* psf_ftell */
+
+int
+psf_fclose (int fd)
+{ return close (fd) ;
+} /* psf_fclose */
+
+sf_count_t
+psf_fgets (char *buffer, sf_count_t bufsize, int fd)
+{ sf_count_t k = 0 ;
+ sf_count_t count ;
+
+ while (k < bufsize - 1)
+ { count = read (fd, &(buffer [k]), 1) ;
+
+ if (count == -1 && errno == EINTR)
+ continue ;
+ if (count <= 0)
+ break ;
+
+ if (buffer [k++] == '\n')
+ break ;
+ }
+
+ buffer [k] = 0 ;
+
+ return k ;
+} /* psf_fgets */
+
+int
+psf_ferror (int fd)
+{
+ return 0 ;
+} /* psf_ferror */
+
+void
+psf_fclearerr (int fd)
+{ errno = fd ? 0 : 0 ;
+} /* psf_fclearerr */
+
+sf_count_t
+psf_get_filelen (int fd)
+{ struct stat statbuf ;
+
+ if (fstat (fd, &statbuf))
+ { perror ("fstat") ;
+ return -1 ;
+ } ;
+
+ return statbuf.st_size ;
+} /* psf_fclose */
+
--- a/common/libsndfile/src/float32.c
+++ b/common/libsndfile/src/float32.c
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 1999-2001 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
**
** 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
@@ -16,216 +16,228 @@
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-
#include <stdio.h>
#include <unistd.h>
#include <string.h>
-#include <math.h>
#include "sndfile.h"
#include "config.h"
#include "sfendian.h"
#include "common.h"
+#include "float_cast.h"
/*--------------------------------------------------------------------------------------------
+** Processor floating point capabilities. float32_get_capability () returns one of the
+** latter four values.
*/
+enum
+{ FLOAT_UNKNOWN = 0x00,
+ FLOAT_CAN_RW_LE = 0x23,
+ FLOAT_CAN_RW_BE = 0x34,
+ FLOAT_BROKEN_LE = 0x35,
+ FLOAT_BROKEN_BE = 0x36
+} ;
+
/*--------------------------------------------------------------------------------------------
** Prototypes for private functions.
*/
-static int host_read_f2s (SF_PRIVATE *psf, short *ptr, int len) ;
-static int host_read_f2i (SF_PRIVATE *psf, int *ptr, int len) ;
-static int host_read_f (SF_PRIVATE *psf, float *ptr, int len) ;
-static int host_read_f2d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+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 int host_write_s2f (SF_PRIVATE *psf, short *ptr, int len) ;
-static int host_write_i2f (SF_PRIVATE *psf, int *ptr, int len) ;
-static int host_write_f (SF_PRIVATE *psf, float *ptr, int len) ;
-static int host_write_d2f (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+static sf_count_t host_write_s2f (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
+static sf_count_t host_write_i2f (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
+static sf_count_t host_write_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
+static sf_count_t host_write_d2f (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static void f2s_array (float *buffer, unsigned int count, short *ptr, int index) ;
-static void f2i_array (float *buffer, unsigned int count, int *ptr, int index) ;
-static void f2d_array (float *buffer, unsigned int count, double *ptr, int index) ;
+static void f2s_array (float *buffer, unsigned int count, short *ptr) ;
+static void f2i_array (float *buffer, unsigned int count, int *ptr) ;
+static void f2d_array (float *buffer, unsigned int count, double *ptr) ;
-static void s2f_array (short *ptr, int index, float *buffer, unsigned int count) ;
-static void i2f_array (int *ptr, int index, float *buffer, unsigned int count) ;
-static void d2f_array (double *ptr, int index, float *buffer, unsigned int count) ;
+static void s2f_array (short *ptr, float *buffer, unsigned int count) ;
+static void i2f_array (int *ptr, float *buffer, unsigned int count) ;
+static void d2f_array (double *ptr, float *buffer, unsigned int count) ;
static void float32_peak_update (SF_PRIVATE *psf, float *buffer, int count, int index) ;
-static int broken_read_f2s (SF_PRIVATE *psf, short *ptr, int len) ;
-static int broken_read_f2i (SF_PRIVATE *psf, int *ptr, int len) ;
-static int broken_read_f (SF_PRIVATE *psf, float *ptr, int len) ;
-static int broken_read_f2d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+static sf_count_t broken_read_f2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
+static sf_count_t broken_read_f2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
+static sf_count_t broken_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
+static sf_count_t broken_read_f2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static int broken_write_s2f (SF_PRIVATE *psf, short *ptr, int len) ;
-static int broken_write_i2f (SF_PRIVATE *psf, int *ptr, int len) ;
-static int broken_write_f (SF_PRIVATE *psf, float *ptr, int len) ;
-static int broken_write_d2f (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+static sf_count_t broken_write_s2f (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
+static sf_count_t broken_write_i2f (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
+static sf_count_t broken_write_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
+static sf_count_t broken_write_d2f (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
static void bf2f_array (float *buffer, unsigned int count) ;
static void f2bf_array (float *buffer, unsigned int count) ;
+static int float32_get_capability (void) ;
+
/*--------------------------------------------------------------------------------------------
** Exported functions.
*/
int
-float32_read_init (SF_PRIVATE *psf)
+float32_init (SF_PRIVATE *psf)
{ static int float_caps = FLOAT_UNKNOWN ;
if (float_caps == FLOAT_UNKNOWN)
- float_caps = float32_get_capability (psf->endian) ;
+ float_caps = float32_get_capability () ;
- switch (psf->endian + 0x1000 * float_caps)
- { case (SF_ENDIAN_BIG + 0x1000 * FLOAT_CAN_RW_BE) :
- psf->fl32_endswap = SF_FALSE ;
- psf->read_short = (func_short) host_read_f2s ;
- psf->read_int = (func_int) host_read_f2i ;
- psf->read_float = (func_float) host_read_f ;
- psf->read_double = (func_double) host_read_f2d ;
- break ;
-
- case (SF_ENDIAN_LITTLE + 0x1000 * FLOAT_CAN_RW_LE) :
- psf->fl32_endswap = SF_FALSE ;
- psf->read_short = (func_short) host_read_f2s ;
- psf->read_int = (func_int) host_read_f2i ;
- psf->read_float = (func_float) host_read_f ;
- psf->read_double = (func_double) host_read_f2d ;
- break ;
+ psf->blockwidth = sizeof (float) * psf->sf.channels ;
- case (SF_ENDIAN_BIG + 0x1000 * FLOAT_CAN_RW_LE) :
- psf->fl32_endswap = SF_TRUE ;
- psf->read_short = (func_short) host_read_f2s ;
- psf->read_int = (func_int) host_read_f2i ;
- psf->read_float = (func_float) host_read_f ;
- psf->read_double = (func_double) host_read_f2d ;
- break ;
-
- case (SF_ENDIAN_LITTLE + 0x1000 * FLOAT_CAN_RW_BE) :
- psf->fl32_endswap = SF_TRUE ;
- psf->read_short = (func_short) host_read_f2s ;
- psf->read_int = (func_int) host_read_f2i ;
- psf->read_float = (func_float) host_read_f ;
- psf->read_double = (func_double) host_read_f2d ;
- break ;
-
- case (SF_ENDIAN_BIG + 0x1000 * FLOAT_BROKEN_LE) :
- psf->fl32_endswap = SF_TRUE ;
- psf->read_short = (func_short) broken_read_f2s ;
- psf->read_int = (func_int) broken_read_f2i ;
- psf->read_float = (func_float) broken_read_f ;
- psf->read_double = (func_double) broken_read_f2d ;
- break ;
-
- case (SF_ENDIAN_LITTLE + 0x1000 * FLOAT_BROKEN_LE) :
- psf->fl32_endswap = SF_FALSE ;
- psf->read_short = (func_short) broken_read_f2s ;
- psf->read_int = (func_int) broken_read_f2i ;
- psf->read_float = (func_float) broken_read_f ;
- psf->read_double = (func_double) broken_read_f2d ;
- break ;
-
- case (SF_ENDIAN_BIG + 0x1000 * FLOAT_BROKEN_BE) :
- psf->fl32_endswap = SF_FALSE ;
- psf->read_short = (func_short) broken_read_f2s ;
- psf->read_int = (func_int) broken_read_f2i ;
- psf->read_float = (func_float) broken_read_f ;
- psf->read_double = (func_double) broken_read_f2d ;
- break ;
-
- case (SF_ENDIAN_LITTLE + 0x1000 * FLOAT_BROKEN_BE) :
- psf->fl32_endswap = SF_TRUE ;
- psf->read_short = (func_short) broken_read_f2s ;
- psf->read_int = (func_int) broken_read_f2i ;
- psf->read_float = (func_float) broken_read_f ;
- psf->read_double = (func_double) broken_read_f2d ;
- break ;
-
- default : break ;
+ if (psf->mode == SFM_READ || psf->mode == SFM_RDWR)
+ { switch (psf->endian + float_caps)
+ { case (SF_ENDIAN_BIG + FLOAT_CAN_RW_BE) :
+ psf->float_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->float_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->float_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->float_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_BIG + FLOAT_BROKEN_LE) :
+ psf->float_endswap = SF_TRUE ;
+ psf->read_short = broken_read_f2s ;
+ psf->read_int = broken_read_f2i ;
+ psf->read_float = broken_read_f ;
+ psf->read_double = broken_read_f2d ;
+ break ;
+
+ case (SF_ENDIAN_LITTLE + FLOAT_BROKEN_LE) :
+ psf->float_endswap = SF_FALSE ;
+ psf->read_short = broken_read_f2s ;
+ psf->read_int = broken_read_f2i ;
+ psf->read_float = broken_read_f ;
+ psf->read_double = broken_read_f2d ;
+ break ;
+
+ case (SF_ENDIAN_BIG + FLOAT_BROKEN_BE) :
+ psf->float_endswap = SF_FALSE ;
+ psf->read_short = broken_read_f2s ;
+ psf->read_int = broken_read_f2i ;
+ psf->read_float = broken_read_f ;
+ psf->read_double = broken_read_f2d ;
+ break ;
+
+ case (SF_ENDIAN_LITTLE + FLOAT_BROKEN_BE) :
+ psf->float_endswap = SF_TRUE ;
+ psf->read_short = broken_read_f2s ;
+ psf->read_int = broken_read_f2i ;
+ psf->read_float = broken_read_f ;
+ psf->read_double = broken_read_f2d ;
+ break ;
+
+ default : break ;
+ } ;
} ;
-
- return 0 ;
-} /* float32_read_init */
-
-int
-float32_write_init (SF_PRIVATE *psf)
-{ static int float_caps = FLOAT_UNKNOWN ;
-
- if (float_caps == FLOAT_UNKNOWN)
- float_caps = float32_get_capability (psf->endian) ;
- switch (psf->endian + 0x1000 * float_caps)
- { case (SF_ENDIAN_LITTLE + 0x1000 * FLOAT_CAN_RW_LE) :
- psf->fl32_endswap = SF_FALSE ;
- psf->write_short = (func_short) host_write_s2f ;
- psf->write_int = (func_int) host_write_i2f ;
- psf->write_float = (func_float) host_write_f ;
- psf->write_double = (func_double) host_write_d2f ;
- break ;
-
- case (SF_ENDIAN_BIG + 0x1000 * FLOAT_CAN_RW_BE) :
- psf->fl32_endswap = SF_FALSE ;
- psf->write_short = (func_short) host_write_s2f ;
- psf->write_int = (func_int) host_write_i2f ;
- psf->write_float = (func_float) host_write_f ;
- psf->write_double = (func_double) host_write_d2f ;
- break ;
-
- case (SF_ENDIAN_BIG + 0x1000 * FLOAT_CAN_RW_LE) :
- psf->fl32_endswap = SF_TRUE ;
- psf->write_short = (func_short) host_write_s2f ;
- psf->write_int = (func_int) host_write_i2f ;
- psf->write_float = (func_float) host_write_f ;
- psf->write_double = (func_double) host_write_d2f ;
- break ;
-
- case (SF_ENDIAN_LITTLE + 0x1000 * FLOAT_CAN_RW_BE) :
- psf->fl32_endswap = SF_TRUE ;
- psf->write_short = (func_short) host_write_s2f ;
- psf->write_int = (func_int) host_write_i2f ;
- psf->write_float = (func_float) host_write_f ;
- psf->write_double = (func_double) host_write_d2f ;
- break ;
-
- case (SF_ENDIAN_BIG + 0x1000 * FLOAT_BROKEN_LE) :
- psf->fl32_endswap = SF_TRUE ;
- psf->write_short = (func_short) broken_write_s2f ;
- psf->write_int = (func_int) broken_write_i2f ;
- psf->write_float = (func_float) broken_write_f ;
- psf->write_double = (func_double) broken_write_d2f ;
- break ;
-
- case (SF_ENDIAN_LITTLE + 0x1000 * FLOAT_BROKEN_LE) :
- psf->fl32_endswap = SF_FALSE ;
- psf->write_short = (func_short) broken_write_s2f ;
- psf->write_int = (func_int) broken_write_i2f ;
- psf->write_float = (func_float) broken_write_f ;
- psf->write_double = (func_double) broken_write_d2f ;
- break ;
-
- case (SF_ENDIAN_BIG + 0x1000 * FLOAT_BROKEN_BE) :
- psf->fl32_endswap = SF_FALSE ;
- psf->write_short = (func_short) broken_write_s2f ;
- psf->write_int = (func_int) broken_write_i2f ;
- psf->write_float = (func_float) broken_write_f ;
- psf->write_double = (func_double) broken_write_d2f ;
- break ;
-
- case (SF_ENDIAN_LITTLE + 0x1000 * FLOAT_BROKEN_BE) :
- psf->fl32_endswap = SF_TRUE ;
- psf->write_short = (func_short) broken_write_s2f ;
- psf->write_int = (func_int) broken_write_i2f ;
- psf->write_float = (func_float) broken_write_f ;
- psf->write_double = (func_double) broken_write_d2f ;
- break ;
-
- default : break ;
+ if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR)
+ { switch (psf->endian + float_caps)
+ { case (SF_ENDIAN_LITTLE + FLOAT_CAN_RW_LE) :
+ psf->float_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->float_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->float_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->float_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_BIG + FLOAT_BROKEN_LE) :
+ psf->float_endswap = SF_TRUE ;
+ psf->write_short = broken_write_s2f ;
+ psf->write_int = broken_write_i2f ;
+ psf->write_float = broken_write_f ;
+ psf->write_double = broken_write_d2f ;
+ break ;
+
+ case (SF_ENDIAN_LITTLE + FLOAT_BROKEN_LE) :
+ psf->float_endswap = SF_FALSE ;
+ psf->write_short = broken_write_s2f ;
+ psf->write_int = broken_write_i2f ;
+ psf->write_float = broken_write_f ;
+ psf->write_double = broken_write_d2f ;
+ break ;
+
+ case (SF_ENDIAN_BIG + FLOAT_BROKEN_BE) :
+ psf->float_endswap = SF_FALSE ;
+ psf->write_short = broken_write_s2f ;
+ psf->write_int = broken_write_i2f ;
+ psf->write_float = broken_write_f ;
+ psf->write_double = broken_write_d2f ;
+ break ;
+
+ case (SF_ENDIAN_LITTLE + FLOAT_BROKEN_BE) :
+ psf->float_endswap = SF_TRUE ;
+ psf->write_short = broken_write_s2f ;
+ psf->write_int = broken_write_i2f ;
+ psf->write_float = broken_write_f ;
+ psf->write_double = broken_write_d2f ;
+ break ;
+
+ default : break ;
+ } ;
} ;
+ psf->filelength = psf_get_filelen (psf->filedes) ;
+ psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset :
+ psf->filelength - psf->dataoffset ;
+ psf->sf.samples = psf->datalength / (psf->sf.channels * sizeof (float)) ;
+
return 0 ;
-} /* float32_write_init */
+} /* float32_init */
float
float32_read (unsigned char *cptr)
@@ -317,7 +329,8 @@
static void
float32_peak_update (SF_PRIVATE *psf, float *buffer, int count, int index)
-{ int k, chan, position ;
+{ int chan ;
+ int k, position ;
float fmaxval;
for (chan = 0 ; chan < psf->sf.channels ; chan++)
@@ -331,7 +344,7 @@
if (fmaxval > psf->peak.peak[chan].value)
{ psf->peak.peak[chan].value = fmaxval ;
- psf->peak.peak[chan].position = psf->current + index + (position /psf->sf.channels) ;
+ psf->peak.peak[chan].position = psf->write_current + index + (position /psf->sf.channels) ;
} ;
} ;
@@ -338,8 +351,8 @@
return ;
} /* float32_peak_update */
-int
-float32_get_capability (int endianness)
+static int
+float32_get_capability (void)
{ union
{ float f ;
int i ;
@@ -360,7 +373,7 @@
return FLOAT_CAN_RW_BE ;
/* Floats are broken. Don't expect reading or writing to be fast. */
- return 0 ;
+ return FLOAT_UNKNOWN ;
} /* float32_get_capability */
/*----------------------------------------------------------------------------------------------
@@ -367,8 +380,8 @@
*/
-static int
-host_read_f2s (SF_PRIVATE *psf, short *ptr, int len)
+static sf_count_t
+host_read_f2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
int bytecount, bufferlen ;
int index = 0, total = 0 ;
@@ -377,12 +390,12 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
- if (psf->fl32_endswap == SF_TRUE)
+ if (psf->float_endswap == SF_TRUE)
endswap_int_array ((int*) psf->buffer, readcount / sizeof (int)) ;
- f2s_array ((float*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ f2s_array ((float*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -397,8 +410,8 @@
return total ;
} /* host_read_f2s */
-static int
-host_read_f2i (SF_PRIVATE *psf, int *ptr, int len)
+static sf_count_t
+host_read_f2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
int bytecount, bufferlen ;
int index = 0, total = 0 ;
@@ -407,12 +420,12 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
- if (psf->fl32_endswap == SF_TRUE)
+ if (psf->float_endswap == SF_TRUE)
endswap_int_array ((int*) psf->buffer, readcount / sizeof (int)) ;
- f2i_array ((float*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ f2i_array ((float*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -427,20 +440,20 @@
return total ;
} /* host_read_f2i */
-static int
-host_read_f (SF_PRIVATE *psf, float *ptr, int len)
+static sf_count_t
+host_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
int bytecount, bufferlen ;
int index = 0, total = 0 ;
- if (psf->fl32_endswap != SF_TRUE)
- return fread (ptr, sizeof (float), len, psf->file) ;
+ if (psf->float_endswap != SF_TRUE)
+ return psf_fread (ptr, sizeof (float), len, psf->filedes) ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
endswap_int_array ((int*) psf->buffer, readcount / sizeof (int)) ;
@@ -460,8 +473,8 @@
return total ;
} /* host_read_f */
-static int
-host_read_f2d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+static sf_count_t
+host_read_f2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
int bytecount, bufferlen ;
int index = 0, total = 0 ;
@@ -470,12 +483,12 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
- if (psf->fl32_endswap == SF_TRUE)
+ if (psf->float_endswap == SF_TRUE)
endswap_int_array ((int*) psf->buffer, readcount / sizeof (int)) ;
- f2d_array ((float*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ f2d_array ((float*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -490,8 +503,8 @@
return total ;
} /* host_read_f2d */
-static int
-host_write_s2f (SF_PRIVATE *psf, short *ptr, int len)
+static sf_count_t
+host_write_s2f (SF_PRIVATE *psf, short *ptr, sf_count_t len)
{ unsigned int writecount, thiswrite ;
int bytecount, bufferlen ;
int index = 0, total = 0 ;
@@ -500,14 +513,15 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- s2f_array (ptr, index, (float*) (psf->buffer), writecount / psf->bytewidth) ;
+ s2f_array (ptr + index, (float*) (psf->buffer), writecount / psf->bytewidth) ;
- float32_peak_update (psf, (float *) (psf->buffer), writecount / psf->bytewidth, index / psf->sf.channels) ;
+ if (psf->has_peak)
+ float32_peak_update (psf, (float *) (psf->buffer), writecount / psf->bytewidth, index / psf->sf.channels) ;
- if (psf->fl32_endswap == SF_TRUE)
+ if (psf->float_endswap == SF_TRUE)
endswap_int_array ((int*) psf->buffer, writecount / sizeof (int)) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -522,8 +536,8 @@
return total ;
} /* host_write_s2f */
-static int
-host_write_i2f (SF_PRIVATE *psf, int *ptr, int len)
+static sf_count_t
+host_write_i2f (SF_PRIVATE *psf, int *ptr, sf_count_t len)
{ unsigned int writecount, thiswrite ;
int bytecount, bufferlen ;
int index = 0, total = 0 ;
@@ -532,14 +546,15 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- i2f_array (ptr, index, (float*) (psf->buffer), writecount / psf->bytewidth) ;
+ i2f_array (ptr + index, (float*) (psf->buffer), writecount / psf->bytewidth) ;
- float32_peak_update (psf, (float *) (psf->buffer), writecount / psf->bytewidth, index / psf->sf.channels) ;
+ if (psf->has_peak)
+ float32_peak_update (psf, (float *) (psf->buffer), writecount / psf->bytewidth, index / psf->sf.channels) ;
- if (psf->fl32_endswap == SF_TRUE)
+ if (psf->float_endswap == SF_TRUE)
endswap_int_array ((int*) psf->buffer, writecount / sizeof (int)) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -554,16 +569,17 @@
return total ;
} /* host_write_i2f */
-static int
-host_write_f (SF_PRIVATE *psf, float *ptr, int len)
+static sf_count_t
+host_write_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
{ unsigned int writecount, thiswrite ;
int bytecount, bufferlen ;
int index = 0, total = 0 ;
- float32_peak_update (psf, ptr, len, 0) ;
+ if (psf->has_peak)
+ float32_peak_update (psf, ptr, len, 0) ;
- if (psf->fl32_endswap != SF_TRUE)
- return fwrite (ptr, sizeof (float), len, psf->file) ;
+ if (psf->float_endswap != SF_TRUE)
+ return psf_fwrite (ptr, sizeof (float), len, psf->filedes) ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
bytecount = len * psf->bytewidth ;
@@ -572,10 +588,10 @@
memcpy (psf->buffer, ptr + index, writecount) ;
- if (psf->fl32_endswap == SF_TRUE)
+ if (psf->float_endswap == SF_TRUE)
endswap_int_array ((int*) psf->buffer, writecount / sizeof (int)) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -590,8 +606,8 @@
return total ;
} /* host_write_f */
-static int
-host_write_d2f (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+static sf_count_t
+host_write_d2f (SF_PRIVATE *psf, double *ptr, sf_count_t len)
{ unsigned int writecount, thiswrite ;
int bytecount, bufferlen ;
int index = 0, total = 0 ;
@@ -600,14 +616,15 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- d2f_array (ptr, index, (float*) (psf->buffer), writecount / psf->bytewidth) ;
+ d2f_array (ptr + index, (float*) (psf->buffer), writecount / psf->bytewidth) ;
- float32_peak_update (psf, (float *) (psf->buffer), writecount / psf->bytewidth, index / psf->sf.channels) ;
+ if (psf->has_peak)
+ float32_peak_update (psf, (float *) (psf->buffer), writecount / psf->bytewidth, index / psf->sf.channels) ;
- if (psf->fl32_endswap == SF_TRUE)
+ if (psf->float_endswap == SF_TRUE)
endswap_int_array ((int*) psf->buffer, writecount / sizeof (int)) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -626,57 +643,51 @@
*/
static void
-f2s_array (float *buffer, unsigned int count, short *ptr, int index)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { ptr [index] = ((double) buffer [k]) ;
- index ++ ;
+f2s_array (float *buffer, unsigned int count, short *ptr)
+{ while (count)
+ { count -- ;
+ ptr [count] = lrintf (buffer [count]) ;
} ;
} /* f2s_array */
static void
-f2i_array (float *buffer, unsigned int count, int *ptr, int index)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { ptr [index] = (int) ((double) buffer [k]) ;
- index ++ ;
+f2i_array (float *buffer, unsigned int count, int *ptr)
+{ while (count)
+ { count -- ;
+ ptr [count] = lrintf (buffer [count]) ;
} ;
} /* f2i_array */
static void
-f2d_array (float *buffer, unsigned int count, double *ptr, int index)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { ptr [index] = ((double) buffer [k]) ;
- index ++ ;
+f2d_array (float *buffer, unsigned int count, double *ptr)
+{ while (count)
+ { count -- ;
+ ptr [count] = buffer [count] ;
} ;
} /* f2d_array */
static void
-s2f_array (short *ptr, int index, float *buffer, unsigned int count)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = (float) (ptr [index]) ;
- index ++ ;
+s2f_array (short *ptr, float *buffer, unsigned int count)
+{ while (count)
+ { count -- ;
+ buffer [count] = ptr [count] ;
} ;
} /* s2f_array */
static void
-i2f_array (int *ptr, int index, float *buffer, unsigned int count)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = (float) (ptr [index]) ;
- index ++ ;
+i2f_array (int *ptr, float *buffer, unsigned int count)
+{ while (count)
+ { count -- ;
+ buffer [count] = ptr [count] ;
} ;
} /* i2f_array */
static void
-d2f_array (double *ptr, int index, float *buffer, unsigned int count)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = (float) (ptr [index]) ;
- index ++ ;
+d2f_array (double *ptr, float *buffer, unsigned int count)
+{ while (count)
+ { count -- ;
+ buffer [count] = ptr [count] ;
} ;
} /* d2f_array */
@@ -683,23 +694,23 @@
/*=======================================================================================
*/
-static int
-broken_read_f2s (SF_PRIVATE *psf, short *ptr, int len)
-{ unsigned int bytecount, readcount, bufferlen, thisread ;
- int index = 0, total = 0 ;
+static sf_count_t
+broken_read_f2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
+{ sf_count_t bytecount, readcount, bufferlen, thisread ;
+ sf_count_t index = 0, total = 0 ;
bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
- if (psf->fl32_endswap == SF_TRUE)
+ if (psf->float_endswap == SF_TRUE)
endswap_int_array ((int*) psf->buffer, readcount / sizeof (int)) ;
bf2f_array ((float *) (psf->buffer), readcount / psf->bytewidth) ;
- f2s_array ((float*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ f2s_array ((float*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -714,23 +725,23 @@
return total ;
} /* broken_read_f2s */
-static int
-broken_read_f2i (SF_PRIVATE *psf, int *ptr, int len)
-{ unsigned int bytecount, readcount, bufferlen, thisread ;
- int index = 0, total = 0 ;
+static sf_count_t
+broken_read_f2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
+{ sf_count_t bytecount, readcount, bufferlen, thisread ;
+ sf_count_t index = 0, total = 0 ;
bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
- if (psf->fl32_endswap == SF_TRUE)
+ if (psf->float_endswap == SF_TRUE)
endswap_int_array ((int*) psf->buffer, readcount / sizeof (int)) ;
bf2f_array ((float *) (psf->buffer), readcount / psf->bytewidth) ;
- f2i_array ((float*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ f2i_array ((float*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -745,10 +756,10 @@
return total ;
} /* broken_read_f2i */
-static int
-broken_read_f (SF_PRIVATE *psf, float *ptr, int len)
-{ unsigned int bytecount, readcount, bufferlen, thisread ;
- int index = 0, total = 0 ;
+static sf_count_t
+broken_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ sf_count_t bytecount, readcount, bufferlen, thisread ;
+ sf_count_t index = 0, total = 0 ;
/* FIX THIS */
@@ -756,9 +767,9 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
- if (psf->fl32_endswap == SF_TRUE)
+ if (psf->float_endswap == SF_TRUE)
endswap_int_array ((int*) psf->buffer, readcount / sizeof (int)) ;
bf2f_array ((float *) (psf->buffer), readcount / psf->bytewidth) ;
@@ -779,23 +790,23 @@
return total ;
} /* broken_read_f */
-static int
-broken_read_f2d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
-{ unsigned int bytecount, readcount, bufferlen, thisread ;
- int index = 0, total = 0 ;
+static sf_count_t
+broken_read_f2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ sf_count_t bytecount, readcount, bufferlen, thisread ;
+ sf_count_t index = 0, total = 0 ;
bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
- if (psf->fl32_endswap == SF_TRUE)
+ if (psf->float_endswap == SF_TRUE)
endswap_int_array ((int*) psf->buffer, readcount / sizeof (int)) ;
bf2f_array ((float *) (psf->buffer), readcount / psf->bytewidth) ;
- f2d_array ((float*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ f2d_array ((float*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -810,25 +821,26 @@
return total ;
} /* broken_read_f2d */
-static int
-broken_write_s2f (SF_PRIVATE *psf, short *ptr, int len)
-{ unsigned int bytecount, writecount, bufferlen, thiswrite ;
- int index = 0, total = 0 ;
+static sf_count_t
+broken_write_s2f (SF_PRIVATE *psf, short *ptr, sf_count_t len)
+{ sf_count_t bytecount, writecount, bufferlen, thiswrite ;
+ sf_count_t index = 0, total = 0 ;
bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- s2f_array (ptr, index, (float*) (psf->buffer), writecount / psf->bytewidth) ;
+ s2f_array (ptr + index, (float*) (psf->buffer), writecount / psf->bytewidth) ;
- float32_peak_update (psf, (float *) (psf->buffer), writecount / psf->bytewidth, index / psf->sf.channels) ;
+ if (psf->has_peak)
+ float32_peak_update (psf, (float *) (psf->buffer), writecount / psf->bytewidth, index / psf->sf.channels) ;
f2bf_array ((float *) (psf->buffer), writecount / psf->bytewidth) ;
- if (psf->fl32_endswap == SF_TRUE)
+ if (psf->float_endswap == SF_TRUE)
endswap_int_array ((int*) psf->buffer, writecount / sizeof (int)) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -843,25 +855,26 @@
return total ;
} /* broken_write_s2f */
-static int
-broken_write_i2f (SF_PRIVATE *psf, int *ptr, int len)
-{ unsigned int bytecount, writecount, bufferlen, thiswrite ;
- int index = 0, total = 0 ;
+static sf_count_t
+broken_write_i2f (SF_PRIVATE *psf, int *ptr, sf_count_t len)
+{ sf_count_t bytecount, writecount, bufferlen, thiswrite ;
+ sf_count_t index = 0, total = 0 ;
bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- i2f_array (ptr, index, (float*) (psf->buffer), writecount / psf->bytewidth) ;
+ i2f_array (ptr + index, (float*) (psf->buffer), writecount / psf->bytewidth) ;
- float32_peak_update (psf, (float *) (psf->buffer), writecount / psf->bytewidth, index / psf->sf.channels) ;
+ if (psf->has_peak)
+ float32_peak_update (psf, (float *) (psf->buffer), writecount / psf->bytewidth, index / psf->sf.channels) ;
f2bf_array ((float *) (psf->buffer), writecount / psf->bytewidth) ;
- if (psf->fl32_endswap == SF_TRUE)
+ if (psf->float_endswap == SF_TRUE)
endswap_int_array ((int*) psf->buffer, writecount / sizeof (int)) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -876,13 +889,14 @@
return total ;
} /* broken_write_i2f */
-static int
-broken_write_f (SF_PRIVATE *psf, float *ptr, int len)
-{ unsigned int bytecount, writecount, bufferlen, thiswrite ;
- int index = 0, total = 0 ;
+static sf_count_t
+broken_write_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ sf_count_t bytecount, writecount, bufferlen, thiswrite ;
+ sf_count_t index = 0, total = 0 ;
/* FIX THIS */
- float32_peak_update (psf, ptr, len, 0) ;
+ if (psf->has_peak)
+ float32_peak_update (psf, ptr, len, 0) ;
bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
bytecount = len * psf->bytewidth ;
@@ -893,10 +907,10 @@
f2bf_array ((float *) (psf->buffer), writecount / psf->bytewidth) ;
- if (psf->fl32_endswap == SF_TRUE)
+ if (psf->float_endswap == SF_TRUE)
endswap_int_array ((int*) psf->buffer, writecount / sizeof (int)) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -911,25 +925,26 @@
return total ;
} /* broken_write_f */
-static int
-broken_write_d2f (SF_PRIVATE *psf, double *ptr, int len, int normalize)
-{ unsigned int bytecount, writecount, bufferlen, thiswrite ;
- int index = 0, total = 0 ;
+static sf_count_t
+broken_write_d2f (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ sf_count_t bytecount, writecount, bufferlen, thiswrite ;
+ sf_count_t index = 0, total = 0 ;
bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- d2f_array (ptr, index, (float*) (psf->buffer), writecount / psf->bytewidth) ;
+ d2f_array (ptr + index, (float*) (psf->buffer), writecount / psf->bytewidth) ;
- float32_peak_update (psf, (float *) (psf->buffer), writecount / psf->bytewidth, index / psf->sf.channels) ;
+ if (psf->has_peak)
+ float32_peak_update (psf, (float *) (psf->buffer), writecount / psf->bytewidth, index / psf->sf.channels) ;
f2bf_array ((float *) (psf->buffer), writecount / psf->bytewidth) ;
- if (psf->fl32_endswap == SF_TRUE)
+ if (psf->float_endswap == SF_TRUE)
endswap_int_array ((int*) psf->buffer, writecount / sizeof (int)) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -944,25 +959,22 @@
return total ;
} /* broken_write_d2f */
-/*==============================================================================
-*/
-
/*----------------------------------------------------------------------------------------------
*/
static void
bf2f_array (float *buffer, unsigned int count)
-{ int k ;
-
- for (k = 0 ; k < count ; k++)
- buffer [k] = float32_read ((unsigned char *) (buffer + k)) ;
+{ while (count)
+ { count -- ;
+ buffer [count] = float32_read ((unsigned char *) (buffer + count)) ;
+ } ;
} /* bf2f_array */
static void
f2bf_array (float *buffer, unsigned int count)
-{ int k ;
-
- for (k = 0 ; k < count ; k++)
- float32_write (buffer [k], (unsigned char*) (buffer + k)) ;
+{ while (count)
+ { count -- ;
+ float32_write (buffer [count], (unsigned char*) (buffer + count)) ;
+ } ;
} /* f2bf_array */
--- /dev/null
+++ b/common/libsndfile/src/float_cast.h
@@ -1,0 +1,184 @@
+/*
+** Copyright (C) 2001-2002 Erik de Castro Lopo <[email protected]>
+**
+** 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.3 */
+
+
+/*============================================================================
+** 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 "config.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 config.h file.
+*/
+
+#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 (WIN32) || defined (_WIN32))
+
+ #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 (__MWERKS__) && defined (__APPLE__))
+
+ /* This MacOS 9 solution was provided by Stephane Letz */
+
+ #include <math.h>
+
+ #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. */
+
+ #include <math.h>
+
+ inline static long int
+ lrintf (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 int
+ lrint (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
+ #warning "Don't have the functions lrint() and lrintf()."
+ #warning "Replacing these functions with a standard C cast."
+
+ #include <math.h>
+
+ #define lrint(dbl) ((int) (dbl))
+ #define lrintf(flt) ((int) (flt))
+
+#endif
+
+
+
--- a/common/libsndfile/src/floatcast.h
+++ /dev/null
@@ -1,37 +1,0 @@
-/*
-** Copyright (C) 2001 Erik de Castro Lopo <[email protected]>
-**
-** 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.
-*/
-
-/* 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.
-*/
-
-
-/* These macros are place holders for inline functions which will replace
-** them in the near future.
-*/
-
-#define FLOAT_TO_INT(x) ((int)(x))
-#define FLOAT_TO_SHORT(x) ((short)(x))
-
-#define DOUBLE_TO_INT(x) ((int)(x))
-#define DOUBLE_TO_SHORT(x) ((short)(x))
--- /dev/null
+++ b/common/libsndfile/src/gsm610.c
@@ -1,0 +1,540 @@
+/*
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
+**
+** 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 <stdio.h>
+#include <unistd.h>
+#include <string.h>
+
+#include "sndfile.h"
+#include "config.h"
+#include "sfendian.h"
+#include "float_cast.h"
+#include "common.h"
+#include "wav_w64.h"
+#include "GSM610/gsm.h"
+
+#if (CPU_IS_LITTLE_ENDIAN == 1)
+# define MAKE_MARKER(a,b,c,d) ((a)|((b)<<8)|((c)<<16)|((d)<<24))
+#elif (CPU_IS_BIG_ENDIAN == 1)
+# define MAKE_MARKER(a,b,c,d) (((a)<<24)|((b)<<16)|((c)<<8)|(d))
+#else
+# error "Cannot determine endian-ness of processor."
+#endif
+
+#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_GSM610 0x0031
+
+typedef struct
+{ int blocks ;
+ int blockcount, samplecount ;
+ short samples [WAV_W64_GSM610_SAMPLES] ;
+ unsigned char block [WAV_W64_GSM610_BLOCKSIZE] ;
+ 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, short *ptr, sf_count_t len) ;
+static sf_count_t gsm610_write_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
+static sf_count_t gsm610_write_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
+static sf_count_t gsm610_write_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
+
+static int gsm610_read_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610, short *ptr, sf_count_t len) ;
+static int gsm610_write_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610, short *ptr, sf_count_t len) ;
+
+static int gsm610_decode_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610) ;
+static int gsm610_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 = 1 ;
+
+ if (psf->mode == SFM_RDWR)
+ return SFE_BAD_MODE_RW ;
+
+ psf->sf.seekable = SF_FALSE ;
+
+ if (! (pgsm610 = malloc (sizeof (GSM610_PRIVATE))))
+ return SFE_MALLOC_FAILED ;
+
+ psf->fdata = (void*) pgsm610 ;
+
+ memset (pgsm610, 0, sizeof (GSM610_PRIVATE)) ;
+
+/*============================================================
+
+Need separate gsm_data structs for encode and decode.
+
+============================================================*/
+
+ if (! (pgsm610->gsm_data = gsm_create ()))
+ return SFE_MALLOC_FAILED ;
+
+ if ((psf->sf.format & SF_FORMAT_TYPEMASK) == SF_FORMAT_WAV ||
+ (psf->sf.format & SF_FORMAT_TYPEMASK) == SF_FORMAT_W64)
+ gsm_option (pgsm610->gsm_data, GSM_OPT_WAV49, &true) ;
+
+ if (psf->mode == SFM_READ)
+ { if (psf->datalength % WAV_W64_GSM610_BLOCKSIZE)
+ { psf_log_printf (psf, "*** Warning : data chunk seems to be truncated.\n") ;
+ pgsm610->blocks = psf->datalength / WAV_W64_GSM610_BLOCKSIZE + 1 ;
+ }
+ else
+ pgsm610->blocks = psf->datalength / WAV_W64_GSM610_BLOCKSIZE ;
+
+ psf->sf.samples = WAV_W64_GSM610_SAMPLES * pgsm610->blocks ;
+
+ gsm610_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->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->close = gsm610_close ;
+ psf->new_seek = gsm610_seek ;
+
+ psf->filelength = psf_get_filelen (psf->filedes) ;
+ psf->datalength = psf->filelength - psf->dataoffset ;
+
+ return 0 ;
+} /* gsm610_init */
+
+/*============================================================================================
+** GSM 6.10 Read Functions.
+*/
+
+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, WAV_W64_GSM610_SAMPLES * sizeof (short)) ;
+ return 1 ;
+ } ;
+
+ if ((k = psf_fread (pgsm610->block, 1, WAV_W64_GSM610_BLOCKSIZE, psf->filedes)) != 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 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 gsm_decode() on frame : %d.5\n", pgsm610->blockcount) ;
+ return 0 ;
+ } ;
+
+ return 1 ;
+} /* gsm610_decode_block */
+
+static int
+gsm610_read_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610, short *ptr, sf_count_t len)
+{ sf_count_t count, total = 0, index = 0 ;
+
+ while (index < len)
+ { if (pgsm610->blockcount >= pgsm610->blocks && pgsm610->samplecount >= WAV_W64_GSM610_SAMPLES)
+ { memset (&(ptr[index]), 0, (size_t) ((len - index) * sizeof (short))) ;
+ return total ;
+ } ;
+
+ if (pgsm610->samplecount >= WAV_W64_GSM610_SAMPLES)
+ gsm610_decode_block (psf, pgsm610) ;
+
+ count = WAV_W64_GSM610_SAMPLES - pgsm610->samplecount ;
+ count = (len - index > count) ? count : len - index ;
+
+ memcpy (&(ptr[index]), &(pgsm610->samples [pgsm610->samplecount]), count * sizeof (short)) ;
+ index += count ;
+ pgsm610->samplecount += count ;
+ total = index ;
+ } ;
+
+ 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 total ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pgsm610 = (GSM610_PRIVATE*) psf->fdata ;
+
+ total = gsm610_read_block (psf, pgsm610, ptr, len) ;
+
+ return total ;
+} /* gsm610_read_s */
+
+static sf_count_t
+gsm610_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
+{ GSM610_PRIVATE *pgsm610 ;
+ short *sptr ;
+ int k, bufferlen, readcount = 0, count ;
+ int index = 0, total = 0 ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pgsm610 = (GSM610_PRIVATE*) psf->fdata ;
+
+ sptr = (short*) psf->buffer ;
+ bufferlen = SF_BUFFER_LEN / sizeof (short) ;
+ while (len > 0)
+ { readcount = (len >= bufferlen) ? bufferlen : len ;
+ count = gsm610_read_block (psf, pgsm610, sptr, readcount) ;
+ for (k = 0 ; k < readcount ; k++)
+ ptr [index + k] = sptr [k] << 16 ;
+ index += readcount ;
+ 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 ;
+ short *sptr ;
+ int k, bufferlen, readcount = 0, count ;
+ int index = 0, total = 0 ;
+ float normfact ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pgsm610 = (GSM610_PRIVATE*) psf->fdata ;
+
+ normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
+
+ sptr = (short*) psf->buffer ;
+ bufferlen = SF_BUFFER_LEN / sizeof (short) ;
+ while (len > 0)
+ { readcount = (len >= bufferlen) ? bufferlen : len ;
+ count = gsm610_read_block (psf, pgsm610, sptr, readcount) ;
+ for (k = 0 ; k < readcount ; k++)
+ ptr [index + k] = normfact * sptr [k] ;
+ index += readcount ;
+ 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 ;
+ short *sptr ;
+ int k, bufferlen, readcount = 0, count ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pgsm610 = (GSM610_PRIVATE*) psf->fdata ;
+
+ sptr = (short*) psf->buffer ;
+ bufferlen = SF_BUFFER_LEN / sizeof (short) ;
+ while (len > 0)
+ { readcount = (len >= bufferlen) ? bufferlen : len ;
+ count = gsm610_read_block (psf, pgsm610, sptr, readcount) ;
+ for (k = 0 ; k < readcount ; k++)
+ ptr [index + k] = normfact * sptr [k] ;
+ index += readcount ;
+ total += count ;
+ len -= readcount ;
+ } ;
+ return total ;
+} /* gsm610_read_d */
+
+static sf_count_t
+gsm610_seek (SF_PRIVATE *psf, int mode, sf_count_t offset)
+{ GSM610_PRIVATE *pgsm610 ;
+ int newblock, newsample ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pgsm610 = (GSM610_PRIVATE*) psf->fdata ;
+
+ if (psf->dataoffset < 0)
+ { psf->error = SFE_BAD_SEEK ;
+ return ((sf_count_t) -1) ;
+ } ;
+
+ if (offset == 0)
+ { int true = 1 ;
+
+ psf_fseek (psf->filedes, psf->dataoffset, SEEK_SET) ;
+ pgsm610->blockcount = 0 ;
+
+ gsm_init (pgsm610->gsm_data) ;
+ if ((psf->sf.format & SF_FORMAT_TYPEMASK) == SF_FORMAT_WAV ||
+ (psf->sf.format & SF_FORMAT_TYPEMASK) == SF_FORMAT_W64)
+ gsm_option (pgsm610->gsm_data, GSM_OPT_WAV49, &true) ;
+
+ gsm610_decode_block (psf, pgsm610) ;
+ pgsm610->samplecount = 0 ;
+ return 0 ;
+ } ;
+
+ if (offset < 0 || offset > pgsm610->blocks * WAV_W64_GSM610_SAMPLES)
+ { psf->error = SFE_BAD_SEEK ;
+ return ((sf_count_t) -1) ;
+ } ;
+
+ newblock = offset / WAV_W64_GSM610_SAMPLES ;
+ newsample = offset % WAV_W64_GSM610_SAMPLES ;
+
+ if (psf->mode == SFM_READ)
+ { if (psf->read_current != newblock * WAV_W64_GSM610_BLOCKSIZE + newsample)
+ { psf_fseek (psf->filedes, psf->dataoffset + newblock * WAV_W64_GSM610_BLOCKSIZE, SEEK_SET) ;
+ pgsm610->blockcount = newblock ;
+ gsm610_decode_block (psf, pgsm610) ;
+ pgsm610->samplecount = newsample ;
+ } ;
+
+ return newblock * WAV_W64_GSM610_SAMPLES + newsample ;
+ } ;
+
+ /* What to do about write??? */
+ psf->error = SFE_BAD_SEEK ;
+ return ((sf_count_t) -1) ;
+} /* 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) ;
+ 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->filedes)) != 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, WAV_W64_GSM610_SAMPLES * sizeof (short)) ;
+
+ return 1 ;
+} /* wav_gsm610_encode_block */
+
+static int
+gsm610_write_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610, short *ptr, sf_count_t len)
+{ int count, total = 0, index = 0 ;
+
+ while (index < len)
+ { count = WAV_W64_GSM610_SAMPLES - pgsm610->samplecount ;
+
+ if (count > len - index)
+ count = len - index ;
+
+ memcpy (&(pgsm610->samples [pgsm610->samplecount]), &(ptr [index]), count * sizeof (short)) ;
+ index += count ;
+ pgsm610->samplecount += count ;
+ total = index ;
+
+ if (pgsm610->samplecount >= WAV_W64_GSM610_SAMPLES)
+ gsm610_encode_block (psf, pgsm610) ;
+ } ;
+
+ return total ;
+} /* gsm610_write_block */
+
+static sf_count_t
+gsm610_write_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
+{ GSM610_PRIVATE *pgsm610 ;
+ int total ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pgsm610 = (GSM610_PRIVATE*) psf->fdata ;
+
+ total = gsm610_write_block (psf, pgsm610, ptr, len) ;
+
+ return total ;
+} /* gsm610_write_s */
+
+static sf_count_t
+gsm610_write_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
+{ GSM610_PRIVATE *pgsm610 ;
+ short *sptr ;
+ int k, bufferlen, writecount = 0, count ;
+ int index = 0, total = 0 ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pgsm610 = (GSM610_PRIVATE*) psf->fdata ;
+
+ sptr = (short*) psf->buffer ;
+ bufferlen = SF_BUFFER_LEN / sizeof (short) ;
+ while (len > 0)
+ { writecount = (len >= bufferlen) ? bufferlen : len ;
+ for (k = 0 ; k < writecount ; k++)
+ sptr [k] = ptr [index + k] >> 16 ;
+ count = gsm610_write_block (psf, pgsm610, sptr, writecount) ;
+ index += writecount ;
+ total += count ;
+ len -= writecount ;
+ } ;
+ return total ;
+} /* gsm610_write_i */
+
+static sf_count_t
+gsm610_write_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ GSM610_PRIVATE *pgsm610 ;
+ short *sptr ;
+ int k, bufferlen, writecount = 0, count ;
+ int index = 0, total = 0 ;
+ float normfact ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pgsm610 = (GSM610_PRIVATE*) psf->fdata ;
+
+ normfact = (psf->norm_float == SF_TRUE) ? ((float) 0x8000) : 1.0 ;
+
+ sptr = (short*) psf->buffer ;
+ 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 [index + k]) ;
+ count = gsm610_write_block (psf, pgsm610, sptr, writecount) ;
+ index += writecount ;
+ total += count ;
+ len -= writecount ;
+ } ;
+ return total ;
+} /* gsm610_write_f */
+
+static sf_count_t
+gsm610_write_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ GSM610_PRIVATE *pgsm610 ;
+ short *sptr ;
+ int k, bufferlen, writecount = 0, count ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pgsm610 = (GSM610_PRIVATE*) psf->fdata ;
+
+ normfact = (psf->norm_double == SF_TRUE) ? ((double) 0x8000) : 1.0 ;
+
+ sptr = (short*) psf->buffer ;
+ 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 [index + k]) ;
+ count = gsm610_write_block (psf, pgsm610, sptr, writecount) ;
+ index += writecount ;
+ total += count ;
+ len -= writecount ;
+ } ;
+ return total ;
+} /* gsm610_write_d */
+
+static int
+gsm610_close (SF_PRIVATE *psf)
+{ GSM610_PRIVATE *pgsm610 ;
+
+ if (! psf->fdata)
+ return 0 ;
+
+ pgsm610 = (GSM610_PRIVATE*) psf->fdata ;
+
+ if (psf->mode == SFM_WRITE)
+ { /* If a block has been partially assembled, write it out
+ ** as the final block.
+ */
+
+ if (pgsm610->samplecount && pgsm610->samplecount < WAV_W64_GSM610_SAMPLES)
+ gsm610_encode_block (psf, pgsm610) ;
+
+ /* Now we know for certain the length of the file we can
+ ** re-write correct values for the RIFF and data chunks.
+ */
+
+ psf_fseek (psf->filedes, 0, SEEK_END) ;
+ psf->filelength = psf_ftell (psf->filedes) ;
+
+ psf->sf.samples = WAV_W64_GSM610_SAMPLES * pgsm610->blockcount ;
+ psf->datalength = psf->filelength - psf->dataoffset ;
+
+ if (psf->write_header)
+ psf->write_header (psf) ;
+ } ;
+
+ if (pgsm610->gsm_data)
+ gsm_destroy (pgsm610->gsm_data) ;
+
+ if (psf->fdata)
+ free (psf->fdata) ;
+ psf->fdata = NULL ;
+
+ return 0 ;
+} /* gsm610_close */
+
--- /dev/null
+++ b/common/libsndfile/src/ima_adpcm.c
@@ -1,0 +1,793 @@
+/*
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
+**
+** 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 <stdio.h>
+#include <unistd.h>
+#include <string.h>
+
+#include "sndfile.h"
+#include "config.h"
+#include "sfendian.h"
+#include "float_cast.h"
+#include "common.h"
+
+typedef struct
+{ int channels, blocksize, samplesperblock, blocks ;
+ int blockcount, samplecount ;
+ int previous [2] ;
+ int stepindex [2] ;
+ unsigned char *block ;
+ short *samples ;
+ unsigned char data [4] ; /* Dummy size */
+} IMA_ADPCM_PRIVATE ;
+
+/*============================================================================================
+** Predefined IMA ADPCM data.
+*/
+
+static int ima_index_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_decode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima) ;
+static int ima_read_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima, short *ptr, sf_count_t len) ;
+
+static int ima_encode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima) ;
+static int ima_write_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima, short *ptr, sf_count_t 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, short *ptr, sf_count_t len) ;
+static sf_count_t ima_write_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
+static sf_count_t ima_write_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
+static sf_count_t ima_write_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
+
+static sf_count_t ima_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
+
+static int wav_w64_ima_close (SF_PRIVATE *psf) ;
+/*-static int aiff_ima_close (SF_PRIVATE *psf) ;-*/
+
+/*============================================================================================
+** IMA ADPCM Reader initialisation function.
+*/
+
+int
+wav_w64_ima_init (SF_PRIVATE *psf, int blockalign, int samplesperblock)
+{ int error ;
+
+ if (psf->mode == SFM_RDWR)
+ return SFE_BAD_MODE_RW ;
+
+ if (psf->mode == SFM_READ)
+ if ((error = ima_reader_init (psf, blockalign, samplesperblock)))
+ return error ;
+
+ if (psf->mode == SFM_WRITE)
+ if ((error = ima_writer_init (psf, blockalign)))
+ return error ;
+
+ psf->new_seek = ima_seek ;
+ psf->close = wav_w64_ima_close ;
+
+ return 0 ;
+} /* wav_w64_ima_init */
+
+static int
+wav_w64_ima_close (SF_PRIVATE *psf)
+{ IMA_ADPCM_PRIVATE *pima ;
+
+ if (! psf->fdata)
+ return 0 ;
+
+ pima = (IMA_ADPCM_PRIVATE*) psf->fdata ;
+
+ if (psf->mode == SFM_WRITE)
+ { /* If a block has been partially assembled, write it out
+ ** as the final block.
+ */
+
+ if (pima->samplecount && pima->samplecount < pima->samplesperblock)
+ ima_encode_block (psf, pima) ;
+
+ /* Now we know for certain the length of the file we can
+ ** re-write the header.
+ */
+ psf_fseek (psf->filedes, 0, SEEK_END) ;
+ psf->filelength = psf_ftell (psf->filedes) ;
+
+ psf->sf.samples = pima->samplesperblock * pima->blockcount ;
+ psf->datalength = psf->filelength - psf->dataoffset ;
+
+ if (psf->write_header)
+ psf->write_header (psf) ;
+ } ;
+
+ free (psf->fdata) ;
+ psf->fdata = NULL ;
+
+ return 0 ;
+} /* wav_w64_ima_close */
+
+/*-
+int
+aiff_ima_reader_init (SF_PRIVATE *psf, int blockalign, int samplesperblock)
+{ IMA_ADPCM_PUBLIC public ;
+
+ public.blocksize = blockalign ;
+ public.channels = psf->sf.channels ;
+ public.samplesperblock = samplesperblock ;
+ return ima_reader_init (psf, &public) ;
+} /+* aiff_ima_reader_init *+/
+
+int
+aiff_ima_writer_init (SF_PRIVATE *psf, int blocksize)
+{ IMA_ADPCM_PUBLIC public ;
+ int error ;
+
+ public.blocksize = blocksize ;
+ public.channels = psf->sf.channels ;
+ public.samplesperblock = 2 * (public.blocksize - 4 * psf->sf.channels) / psf->sf.channels + 1 ;
+
+ if ((error = ima_writer_init (psf, &public)))
+ return error ;
+
+ if (psf->write_header)
+ psf->write_header (psf) ;
+
+ psf->write_short = ima_write_s ;
+ psf->write_int = ima_write_i ;
+ psf->write_float = ima_write_f ;
+ psf->write_double = ima_write_d ;
+ psf->new_seek = ima_seek ;
+ psf->close = aiff_ima_close ;
+
+ return 0 ;
+} /+* aiff_ima_writer_init *+/
+
+static int
+aiff_ima_close (SF_PRIVATE *psf)
+{ IMA_ADPCM_PRIVATE *pima ;
+
+ if (! psf->fdata)
+ return 0 ;
+
+ pima = (IMA_ADPCM_PRIVATE*) psf->fdata ;
+
+ if (psf->mode == SFM_WRITE)
+ { /+* If a block has been partially assembled, write it out
+ ** as the final block.
+ *+/
+
+ if (pima->samplecount && pima->samplecount < pima->samplesperblock)
+ ima_encode_block (psf, pima) ;
+
+ /+* Now we know for certain the length of the file we can
+ ** re-write the header.
+ *+/
+ psf_fseek (psf->filedes, 0, SEEK_END) ;
+ psf->filelength = psf_ftell (psf->filedes) ;
+
+ psf->sf.samples = pima->samplesperblock * pima->blockcount ;
+ psf->datalength = psf->filelength - psf->dataoffset ;
+
+ if (psf->write_header)
+ psf->write_header (psf) ;
+ } ;
+
+ free (psf->fdata) ;
+ psf->fdata = NULL ;
+
+ return 0 ;
+} /+* aiff_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->mode != SFM_READ)
+ return SFE_BAD_MODE_RW ;
+
+ pimasize = sizeof (IMA_ADPCM_PRIVATE) + blockalign + 3 * psf->sf.channels * samplesperblock ;
+
+ if (! (pima = malloc (pimasize)))
+ return SFE_MALLOC_FAILED ;
+
+ psf->fdata = (void*) pima ;
+
+ memset (pima, 0, pimasize) ;
+
+ pima->block = (unsigned char*) pima->data ;
+ pima->samples = (short*) (pima->data + blockalign) ;
+
+ pima->channels = psf->sf.channels ;
+ pima->blocksize = blockalign ;
+ pima->samplesperblock = samplesperblock ;
+
+ psf->filelength = psf_get_filelen (psf->filedes) ;
+ psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset :
+ psf->filelength - psf->dataoffset ;
+
+ if (psf->datalength % pima->blocksize)
+ pima->blocks = psf->datalength / pima->blocksize + 1 ;
+ else
+ pima->blocks = psf->datalength / pima->blocksize ;
+
+ count = 2 * (pima->blocksize - 4 * pima->channels) / pima->channels + 1 ;
+ if (pima->samplesperblock != count)
+ psf_log_printf (psf, "*** Warning : samplesperblock should be %d.\n", count) ;
+
+ psf->sf.samples = pima->samplesperblock * pima->blocks ;
+
+ ima_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
+ima_decode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima)
+{ int chan, k, current, blockindex, index, indexstart ;
+ short step, diff, bytecode, stepindex [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->filedes)) != 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++)
+ { current = pima->block [chan*4] | (pima->block [chan*4+1] << 8) ;
+ if (current & 0x8000)
+ current -= 0x10000 ;
+
+ stepindex [chan] = pima->block [chan*4+2] ;
+ if (stepindex [chan] < 0)
+ stepindex [chan] = 0 ;
+ else if (stepindex [chan] > 88)
+ stepindex [chan] = 88 ;
+
+ if (pima->block [chan*4+3] != 0)
+ psf_log_printf (psf, "IMA ADPCM synchronisation error.\n") ;
+
+ pima->samples [chan] = current ;
+
+ /* psf_log_printf (psf, "block %d : channel %d (current, index) : (%d, %d)\n",
+ ** pima->blockcount, chan, current, stepindex [chan]) ;
+ */
+ } ;
+
+ /* Pull apart the packed 4 bit samples and store them in their
+ ** correct sample positions.
+ */
+
+ blockindex = 4 * pima->channels ;
+
+ indexstart = pima->channels ;
+ while (blockindex < pima->blocksize)
+ { for (chan = 0 ; chan < pima->channels ; chan++)
+ { index = indexstart + chan ;
+ for (k = 0 ; k < 4 ; k++)
+ { bytecode = pima->block [blockindex++] ;
+ pima->samples [index] = bytecode & 0x0F ;
+ index += pima->channels ;
+ pima->samples [index] = (bytecode >> 4) & 0x0F ;
+ index += pima->channels ;
+ } ;
+ } ;
+ indexstart += 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 [stepindex [chan]] ;
+ current = 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 ;
+
+ current += diff ;
+
+ if (current > 32767)
+ current = 32767;
+ else if (current < -32768)
+ current = -32768 ;
+
+ stepindex [chan] += ima_index_adjust [bytecode] ;
+
+ if (stepindex [chan] < 0)
+ stepindex [chan] = 0 ;
+ else if (stepindex [chan] > 88)
+ stepindex [chan] = 88 ;
+
+ pima->samples [k] = current ;
+ } ;
+
+ return 1 ;
+} /* ima_decode_block */
+
+static int
+ima_read_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima, short *ptr, sf_count_t len)
+{ sf_count_t count, total = 0, index = 0 ;
+
+ while (index < len)
+ { if (pima->blockcount >= pima->blocks && pima->samplecount >= pima->samplesperblock)
+ { memset (&(ptr[index]), 0, (size_t) ((len - index) * sizeof (short))) ;
+ return total ;
+ } ;
+
+ if (pima->samplecount >= pima->samplesperblock)
+ ima_decode_block (psf, pima) ;
+
+ count = (pima->samplesperblock - pima->samplecount) * pima->channels ;
+ count = (len - index > count) ? count : len - index ;
+
+ memcpy (&(ptr[index]), &(pima->samples [pima->samplecount * pima->channels]), count * sizeof (short)) ;
+ index += count ;
+ pima->samplecount += count / pima->channels ;
+ total = index ;
+ } ;
+
+ 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 total ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pima = (IMA_ADPCM_PRIVATE*) psf->fdata ;
+
+ total = ima_read_block (psf, pima, ptr, len) ;
+
+ 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 ;
+ short *sptr ;
+ int k, bufferlen, readcount = 0, count ;
+ int index = 0, total = 0 ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pima = (IMA_ADPCM_PRIVATE*) psf->fdata ;
+
+ sptr = (short*) psf->buffer ;
+ bufferlen = SF_BUFFER_LEN / sizeof (short) ;
+ while (len > 0)
+ { readcount = (len >= bufferlen) ? bufferlen : len ;
+ count = ima_read_block (psf, pima, sptr, readcount) ;
+ for (k = 0 ; k < readcount ; k++)
+ ptr [index + k] = ((int) sptr [k]) << 16 ;
+ index += readcount ;
+ total += count ;
+ len -= readcount ;
+ } ;
+
+ 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 ;
+ short *sptr ;
+ int k, bufferlen, readcount = 0, count ;
+ int index = 0, total = 0 ;
+ float normfact ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pima = (IMA_ADPCM_PRIVATE*) psf->fdata ;
+
+ normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
+
+ sptr = (short*) psf->buffer ;
+ bufferlen = SF_BUFFER_LEN / sizeof (short) ;
+ while (len > 0)
+ { readcount = (len >= bufferlen) ? bufferlen : len ;
+ count = ima_read_block (psf, pima, sptr, readcount) ;
+ for (k = 0 ; k < readcount ; k++)
+ ptr [index + k] = normfact * (float) (sptr [k]) ;
+ index += readcount ;
+ total += count ;
+ len -= readcount ;
+ } ;
+ 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 ;
+ short *sptr ;
+ int k, bufferlen, readcount = 0, count ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pima = (IMA_ADPCM_PRIVATE*) psf->fdata ;
+
+ normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
+
+ sptr = (short*) psf->buffer ;
+ bufferlen = SF_BUFFER_LEN / sizeof (short) ;
+ while (len > 0)
+ { readcount = (len >= bufferlen) ? bufferlen : len ;
+ count = ima_read_block (psf, pima, sptr, readcount) ;
+ for (k = 0 ; k < readcount ; k++)
+ ptr [index + k] = normfact * (double) (sptr [k]) ;
+ index += readcount ;
+ total += count ;
+ len -= readcount ;
+ } ;
+ 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->fdata)
+ return 0 ;
+ pima = (IMA_ADPCM_PRIVATE*) psf->fdata ;
+
+ if (! (psf->datalength && psf->dataoffset))
+ { psf->error = SFE_BAD_SEEK ;
+ return ((sf_count_t) -1) ;
+ } ;
+
+ if (offset == 0)
+ { psf_fseek (psf->filedes, psf->dataoffset, SEEK_SET) ;
+ pima->blockcount = 0 ;
+ ima_decode_block (psf, pima) ;
+ pima->samplecount = 0 ;
+ return 0 ;
+ } ;
+
+ if (offset < 0 || offset > pima->blocks * pima->samplesperblock)
+ { psf->error = SFE_BAD_SEEK ;
+ return ((sf_count_t) -1) ;
+ } ;
+
+ newblock = offset / pima->samplesperblock ;
+ newsample = offset % pima->samplesperblock ;
+
+ if (mode == SFM_READ)
+ { psf_fseek (psf->filedes, psf->dataoffset + newblock * pima->blocksize, SEEK_SET) ;
+ pima->blockcount = newblock ;
+ ima_decode_block (psf, pima) ;
+ pima->samplecount = newsample ;
+ }
+ else
+ { /* What to do about write??? */
+ psf->error = SFE_BAD_SEEK ;
+ return ((sf_count_t) -1) ;
+ } ;
+
+ 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->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 = malloc (pimasize)))
+ return SFE_MALLOC_FAILED ;
+
+ psf->fdata = (void*) pima ;
+
+ memset (pima, 0, pimasize) ;
+
+ 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 ;
+
+ 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_encode_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima)
+{ int chan, k, step, diff, vpdiff, blockindex, index, indexstart ;
+ 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->stepindex [chan] ;
+ pima->block [chan*4+3] = 0 ;
+ } ;
+
+ pima->previous [0] = pima->samples [0] ;
+ pima->previous [1] = pima->samples [1] ;
+
+ /* 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->stepindex [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->stepindex [chan] += ima_index_adjust [bytecode] ;
+ if (pima->stepindex [chan] < 0)
+ pima->stepindex [chan] = 0 ;
+ else if (pima->stepindex [chan] > 88)
+ pima->stepindex [chan] = 88 ;
+
+ pima->samples [k] = bytecode ;
+ } ;
+
+ /* Pack the 4 bit encoded samples. */
+
+ blockindex = 4 * pima->channels ;
+
+ indexstart = pima->channels ;
+ while (blockindex < pima->blocksize)
+ { for (chan = 0 ; chan < pima->channels ; chan++)
+ { index = indexstart + chan ;
+ for (k = 0 ; k < 4 ; k++)
+ { pima->block [blockindex] = pima->samples [index] & 0x0F ;
+ index += pima->channels ;
+ pima->block [blockindex] |= (pima->samples [index] << 4) & 0xF0 ;
+ index += pima->channels ;
+ blockindex ++ ;
+ } ;
+ } ;
+ indexstart += 8 * pima->channels ;
+ } ;
+
+ /* Write the block to disk. */
+
+ if ((k = psf_fwrite (pima->block, 1, pima->blocksize, psf->filedes)) != 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 ;
+} /* ima_encode_block */
+
+static int
+ima_write_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima, short *ptr, sf_count_t len)
+{ int count, total = 0, index = 0 ;
+
+ while (index < len)
+ { count = (pima->samplesperblock - pima->samplecount) * pima->channels ;
+
+ if (count > len - index)
+ count = len - index ;
+
+ memcpy (&(pima->samples [pima->samplecount * pima->channels]), &(ptr [index]), count * sizeof (short)) ;
+ index += count ;
+ pima->samplecount += count / pima->channels ;
+ total = index ;
+
+ if (pima->samplecount >= pima->samplesperblock)
+ ima_encode_block (psf, pima) ;
+ } ;
+
+ return total ;
+} /* ima_write_block */
+
+static sf_count_t
+ima_write_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
+{ IMA_ADPCM_PRIVATE *pima ;
+ int total ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pima = (IMA_ADPCM_PRIVATE*) psf->fdata ;
+
+ total = ima_write_block (psf, pima, ptr, len) ;
+
+ return total ;
+} /* ima_write_s */
+
+static sf_count_t
+ima_write_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
+{ IMA_ADPCM_PRIVATE *pima ;
+ short *sptr ;
+ int k, bufferlen, writecount = 0, count ;
+ int index = 0, total = 0 ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pima = (IMA_ADPCM_PRIVATE*) psf->fdata ;
+
+ sptr = (short*) psf->buffer ;
+ bufferlen = SF_BUFFER_LEN / sizeof (short) ;
+ while (len > 0)
+ { writecount = (len >= bufferlen) ? bufferlen : len ;
+ for (k = 0 ; k < writecount ; k++)
+ sptr [k] = ptr [index + k] >> 16 ;
+ count = ima_write_block (psf, pima, sptr, writecount) ;
+ index += writecount ;
+ total += count ;
+ len -= writecount ;
+ } ;
+
+ return total ;
+} /* ima_write_i */
+
+static sf_count_t
+ima_write_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ IMA_ADPCM_PRIVATE *pima ;
+ short *sptr ;
+ int k, bufferlen, writecount = 0, count ;
+ int index = 0, total = 0 ;
+ float normfact ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pima = (IMA_ADPCM_PRIVATE*) psf->fdata ;
+
+ normfact = (psf->norm_float == SF_TRUE) ? ((float) 0x8000) : 1.0 ;
+
+ sptr = (short*) psf->buffer ;
+ 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 [index + k]) ;
+ count = ima_write_block (psf, pima, sptr, writecount) ;
+ index += writecount ;
+ total += count ;
+ len -= writecount ;
+ } ;
+ return total ;
+} /* ima_write_f */
+
+static sf_count_t
+ima_write_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ IMA_ADPCM_PRIVATE *pima ;
+ short *sptr ;
+ int k, bufferlen, writecount = 0, count ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pima = (IMA_ADPCM_PRIVATE*) psf->fdata ;
+
+ normfact = (psf->norm_double == SF_TRUE) ? ((double) 0x8000) : 1.0 ;
+
+ sptr = (short*) psf->buffer ;
+ 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 [index + k]) ;
+ count = ima_write_block (psf, pima, sptr, writecount) ;
+ index += writecount ;
+ total += count ;
+ len -= writecount ;
+ } ;
+ return total ;
+} /* ima_write_d */
+
+
--- a/common/libsndfile/src/ircam.c
+++ b/common/libsndfile/src/ircam.c
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 2001 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 2001-2002 Erik de Castro Lopo <[email protected]>
**
** 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
@@ -16,7 +16,6 @@
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
@@ -36,10 +35,15 @@
** values of 0x1, 0x2, 0x03 or 0x04. Hence the need for a marker and a mask.
*/
-#define IRCAM_02_MARKER (MAKE_MARKER (0x00, 0x02, 0xA3, 0x64))
-#define IRCAM_03_MARKER (MAKE_MARKER (0x64, 0xA3, 0x03, 0x00))
-#define IRCAM_04_MARKER (MAKE_MARKER (0x64, 0xA3, 0x04, 0x00))
+#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 (0x00, 0x02, 0xA3, 0x64))
+#define IRCAM_03L_MARKER (MAKE_MARKER (0x64, 0xA3, 0x03, 0x00))
+
#define IRCAM_DATA_OFFSET (1024)
/*------------------------------------------------------------------------------
@@ -59,102 +63,146 @@
** Private static functions.
*/
-static int ircam_close (SF_PRIVATE *psf) ;
-static int ircam_write_header (SF_PRIVATE *psf) ;
+static int ircam_close (SF_PRIVATE *psf) ;
+static int ircam_write_header (SF_PRIVATE *psf) ;
+static int ircam_read_header (SF_PRIVATE *psf) ;
-static int get_encoding (SF_PRIVATE *psf) ;
+static int get_encoding (int subformat) ;
static char* get_encoding_str (int encoding) ;
/*------------------------------------------------------------------------------
-** Public functions.
+** Public function.
*/
int
-ircam_open_read (SF_PRIVATE *psf)
-{ unsigned int marker, encoding ;
- float samplerate ;
- int error = SFE_NO_ERROR ;
+ircam_open (SF_PRIVATE *psf)
+{ int subformat ;
+ int error = SFE_NO_ERROR ;
- psf_binheader_readf (psf, "pm", 0, &marker) ;
-
- if (marker == IRCAM_03_MARKER)
- { psf->endian = SF_ENDIAN_LITTLE ;
+ if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0))
+ { if ((error = ircam_read_header (psf)))
+ return error ;
+ } ;
- if (CPU_IS_LITTLE_ENDIAN)
- marker = ENDSWAP_INT (marker) ;
- psf_log_printf (psf, "marker: 0x%X => little endian\n", marker) ;
-
- psf_binheader_readf (psf, "fll", &samplerate, &(psf->sf.channels), &encoding) ;
+ subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
- psf->sf.samplerate = (int) samplerate ;
- psf_log_printf (psf, " Sample Rate : %d\n", psf->sf.samplerate) ;
- psf_log_printf (psf, " Channels : %d\n", psf->sf.channels) ;
- psf_log_printf (psf, " Encoding : %X => %s\n", encoding, get_encoding_str (encoding)) ;
- }
- else if (marker == IRCAM_02_MARKER || marker == IRCAM_04_MARKER)
- { psf->endian = SF_ENDIAN_BIG ;
+ if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR)
+ { if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_IRCAM)
+ return SFE_BAD_OPEN_FORMAT ;
+
+ psf->endian = psf->sf.format & SF_FORMAT_ENDMASK ;
+ 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)))
+ return error ;
+
+ psf->write_header = ircam_write_header ;
+ } ;
- if (CPU_IS_BIG_ENDIAN)
- marker = ENDSWAP_INT (marker) ;
- psf_log_printf (psf, "marker: 0x%X => big endian\n", marker) ;
+ psf->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 */
- psf_binheader_readf (psf, "FLL", &samplerate, &(psf->sf.channels), &encoding) ;
+/*------------------------------------------------------------------------------
+*/
- psf->sf.samplerate = (int) samplerate ;
- psf_log_printf (psf, " Sample Rate : %d\n", psf->sf.samplerate) ;
- psf_log_printf (psf, " Channels : %d\n", psf->sf.channels) ;
- psf_log_printf (psf, " Encoding : %X => %s\n", encoding, get_encoding_str (encoding)) ;
- }
- else
+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_LE_MASK) != IRCAM_LE_MARKER) &&
+ ((marker & IRCAM_BE_MASK) != IRCAM_BE_MARKER))
+ { psf_log_printf (psf, "marker: 0x%X\n", marker) ;
return SFE_IRCAM_NO_MARKER ;
+ } ;
- /* Sanit checking for endian-ness detection. */
+ psf->endian = SF_ENDIAN_LITTLE ;
+
if (psf->sf.channels > 256)
- return SFE_IRCAM_BAD_CHANNELS ;
+ { 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->sf.sections = 1 ;
- psf->sf.seekable = SF_TRUE ;
+ 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->sf.pcmbitwidth = 16 ;
- psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
+ psf->bytewidth = 2 ;
psf->blockwidth = psf->sf.channels * psf->bytewidth ;
- if (psf->endian == SF_ENDIAN_BIG)
- psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_PCM_BE ;
- else
- psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_PCM_LE ;
-
- error = pcm_read_init (psf) ;
+ psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_PCM_16 ;
break ;
case IRCAM_PCM_32 :
- psf->sf.pcmbitwidth = 32 ;
- psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
+ psf->bytewidth = 4 ;
psf->blockwidth = psf->sf.channels * psf->bytewidth ;
- if (psf->endian == SF_ENDIAN_BIG)
- psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_PCM_BE ;
- else
- psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_PCM_LE ;
-
- error = pcm_read_init (psf) ;
+ psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_PCM_32 ;
break ;
case IRCAM_FLOAT :
- psf->sf.pcmbitwidth = 32 ;
- psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
+ psf->bytewidth = 4 ;
psf->blockwidth = psf->sf.channels * psf->bytewidth ;
- if (psf->endian == SF_ENDIAN_BIG)
- psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_FLOAT_BE ;
- else
- psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_FLOAT_LE ;
+ psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_FLOAT ;
+ break ;
- error = float32_read_init (psf) ;
+ 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 ;
@@ -161,6 +209,11 @@
break ;
} ;
+ if (psf->endian == SF_ENDIAN_BIG)
+ psf->sf.format |= SF_ENDIAN_BIG ;
+ else
+ psf->sf.format |= SF_ENDIAN_LITTLE ;
+
if (error)
return error ;
@@ -175,62 +228,13 @@
psf_binheader_readf (psf, "p", IRCAM_DATA_OFFSET) ;
return 0 ;
-} /* ircam_open_read */
+} /* ircam_read_header */
-/*------------------------------------------------------------------------------
-*/
-
-int
-ircam_open_write (SF_PRIVATE *psf)
-{ unsigned int encoding, subformat ;
- int error = SFE_NO_ERROR ;
-
- if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_IRCAM)
- return SFE_BAD_OPEN_FORMAT ;
-
- subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
-
- if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)
- psf->bytewidth = 1 ;
- else
- psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
-
- psf->sf.seekable = SF_TRUE ;
- psf->error = 0 ;
-
- psf->blockwidth = psf->bytewidth * psf->sf.channels ;
- psf->dataoffset = IRCAM_DATA_OFFSET ;
- psf->datalength = psf->blockwidth * psf->sf.samples ;
- psf->filelength = psf->datalength + psf->dataoffset ;
-
- if (! (encoding = ircam_write_header (psf)))
- return psf->error ;
-
- psf->close = (func_close) ircam_close ;
- psf->write_header = (func_wr_hdr) ircam_write_header ;
-
- switch (encoding)
- { case IRCAM_PCM_16 : /* 16-bit linear PCM. */
- case IRCAM_PCM_32 : /* 32-bit linear PCM. */
- error = pcm_write_init (psf) ;
- break ;
-
- case IRCAM_FLOAT : /* 32-bit linear PCM. */
- error = float32_write_init (psf) ;
- break ;
-
- default : break ;
- } ;
-
- return error ;
-} /* ircam_open_write */
-
-/*------------------------------------------------------------------------------
-*/
-
static int
ircam_close (SF_PRIVATE *psf)
{
+ psf_log_printf (psf, "close\n") ;
+
return 0 ;
} /* ircam_close */
@@ -240,78 +244,48 @@
float samplerate ;
/* This also sets psf->endian. */
- encoding = get_encoding (psf) ;
+ encoding = get_encoding (psf->sf.format & SF_FORMAT_SUBMASK) ;
if (! encoding)
- { psf->error = SFE_BAD_OPEN_FORMAT ;
- return encoding ;
- } ;
+ return SFE_BAD_OPEN_FORMAT ;
/* Reset the current header length to zero. */
psf->header [0] = 0 ;
psf->headindex = 0 ;
- fseek (psf->file, 0, SEEK_SET) ;
+ psf_fseek (psf->filedes, 0, SEEK_SET) ;
samplerate = psf->sf.samplerate ;
if (psf->endian == SF_ENDIAN_BIG)
- { psf_binheader_writef (psf, "mF", IRCAM_02_MARKER, samplerate) ;
- psf_binheader_writef (psf, "LL", psf->sf.channels, encoding) ;
+ { psf_binheader_writef (psf, "Emf", IRCAM_02B_MARKER, samplerate) ;
+ psf_binheader_writef (psf, "E44", psf->sf.channels, encoding) ;
}
else if (psf->endian == SF_ENDIAN_LITTLE)
- { psf_binheader_writef (psf, "mf", IRCAM_03_MARKER, samplerate) ;
- psf_binheader_writef (psf, "ll", psf->sf.channels, encoding) ;
+ { psf_binheader_writef (psf, "emf", IRCAM_03L_MARKER, samplerate) ;
+ psf_binheader_writef (psf, "e44", psf->sf.channels, encoding) ;
}
else
- { psf->error = SFE_BAD_OPEN_FORMAT ;
- return encoding ;
- } ;
+ return SFE_BAD_OPEN_FORMAT ;
psf_binheader_writef (psf, "z", IRCAM_DATA_OFFSET - psf->headindex) ;
/* Header construction complete so write it out. */
- fwrite (psf->header, psf->headindex, 1, psf->file) ;
+ psf_fwrite (psf->header, psf->headindex, 1, psf->filedes) ;
- return encoding ;
+ return 0 ;
} /* ircam_write_header */
static int
-get_encoding (SF_PRIVATE *psf)
-{ unsigned int format, bitwidth ;
-
- format = psf->sf.format & SF_FORMAT_SUBMASK ;
- bitwidth = psf->bytewidth * 8 ;
-
- /* Default endian-ness is the same as host processor unless overridden. */
- if (format == SF_FORMAT_PCM_BE || format == SF_FORMAT_FLOAT_BE)
- psf->endian = SF_ENDIAN_BIG ;
- else if (format == SF_FORMAT_PCM_LE || format == SF_FORMAT_FLOAT_LE)
- psf->endian = SF_ENDIAN_LITTLE ;
- else if (CPU_IS_BIG_ENDIAN)
- psf->endian = SF_ENDIAN_BIG ;
- else
- psf->endian = SF_ENDIAN_LITTLE ;
-
- switch (format)
- { case SF_FORMAT_ULAW : return IRCAM_ULAW ;
+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 ;
- case SF_FORMAT_PCM :
- case SF_FORMAT_PCM_BE :
- case SF_FORMAT_PCM_LE :
- /* For PCM encoding, the header encoding field depends on the bitwidth. */
- switch (bitwidth)
- { case 16 : return IRCAM_PCM_16 ;
- case 32 : return IRCAM_PCM_32 ;
- default : break ;
- } ;
- break ;
-
- case SF_FORMAT_FLOAT :
- case SF_FORMAT_FLOAT_BE :
- case SF_FORMAT_FLOAT_LE :
- return IRCAM_FLOAT ;
-
default : break ;
} ;
--- /dev/null
+++ b/common/libsndfile/src/ms_adpcm.c
@@ -1,0 +1,801 @@
+/*
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
+**
+** 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 <stdio.h>
+#include <unistd.h>
+#include <string.h>
+
+#include "sndfile.h"
+#include "config.h"
+#include "sfendian.h"
+#include "float_cast.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 ;
+ unsigned char dummydata [4] ; /* Dummy size */
+} 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, sf_count_t 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, short *ptr, sf_count_t 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, short *ptr, sf_count_t len) ;
+static sf_count_t msadpcm_write_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
+static sf_count_t msadpcm_write_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
+static sf_count_t msadpcm_write_d (SF_PRIVATE *psf, 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->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->fdata = malloc (pmssize)))
+ return SFE_MALLOC_FAILED ;
+ pms = (MSADPCM_PRIVATE*) psf->fdata ;
+ memset (pms, 0, pmssize) ;
+
+ pms->block = (unsigned char*) pms->dummydata ;
+ pms->samples = (short*) (pms->dummydata + blockalign) ;
+
+ pms->channels = psf->sf.channels ;
+ pms->blocksize = blockalign ;
+ pms->samplesperblock = samplesperblock ;
+
+ if (psf->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, "*** Warning : samplesperblock shoud be %d.\n", count) ;
+
+ psf->sf.samples = (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->mode == SFM_WRITE)
+ { pms->samples = (short*) (pms->dummydata + blockalign) ;
+
+ 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->new_seek = msadpcm_seek ;
+ psf->close = msadpcm_close ;
+
+ return 0 ;
+} /* wav_w64_msadpcm_init */
+
+static int
+msadpcm_decode_block (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms)
+{ int chan, k, blockindex, sampleindex ;
+ 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->filedes)) != 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) ;
+ blockindex = 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) ;
+
+ blockindex = 14 ;
+ } ;
+
+ 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.
+ */
+
+ sampleindex = 2 * pms->channels ;
+ while (blockindex < pms->blocksize)
+ { bytecode = pms->block [blockindex++] ;
+ pms->samples [sampleindex++] = (bytecode >> 4) & 0x0F ;
+ pms->samples [sampleindex++] = 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, sf_count_t len)
+{ sf_count_t count, total = 0, index = 0 ;
+
+ while (index < len)
+ { if (pms->blockcount >= pms->blocks && pms->samplecount >= pms->samplesperblock)
+ { memset (&(ptr[index]), 0, (size_t) ((len - index) * sizeof (short))) ;
+ return total ;
+ } ;
+
+ if (pms->samplecount >= pms->samplesperblock)
+ msadpcm_decode_block (psf, pms) ;
+
+ count = (pms->samplesperblock - pms->samplecount) * pms->channels ;
+ count = (len - index > count) ? count : len - index ;
+
+ memcpy (&(ptr[index]), &(pms->samples [pms->samplecount * pms->channels]), count * sizeof (short)) ;
+ index += count ;
+ pms->samplecount += count / pms->channels ;
+ total = index ;
+ } ;
+
+ 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 total ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pms = (MSADPCM_PRIVATE*) psf->fdata ;
+
+ total = msadpcm_read_block (psf, pms, ptr, len) ;
+
+ return total ;
+} /* msadpcm_read_s */
+
+static sf_count_t
+msadpcm_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
+{ MSADPCM_PRIVATE *pms ;
+ short *sptr ;
+ int k, bufferlen, readcount = 0, count ;
+ int index = 0, total = 0 ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pms = (MSADPCM_PRIVATE*) psf->fdata ;
+
+ sptr = (short*) psf->buffer ;
+ bufferlen = SF_BUFFER_LEN / sizeof (short) ;
+ while (len > 0)
+ { readcount = (len >= bufferlen) ? bufferlen : len ;
+ count = msadpcm_read_block (psf, pms, sptr, readcount) ;
+ for (k = 0 ; k < readcount ; k++)
+ ptr [index + k] = sptr [k] << 16 ;
+ index += readcount ;
+ total += count ;
+ len -= readcount ;
+ } ;
+ return total ;
+} /* msadpcm_read_i */
+
+static sf_count_t
+msadpcm_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ MSADPCM_PRIVATE *pms ;
+ short *sptr ;
+ int k, bufferlen, readcount = 0, count ;
+ int index = 0, total = 0 ;
+ float normfact ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pms = (MSADPCM_PRIVATE*) psf->fdata ;
+
+ normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
+ sptr = (short*) psf->buffer ;
+ bufferlen = SF_BUFFER_LEN / sizeof (short) ;
+ while (len > 0)
+ { readcount = (len >= bufferlen) ? bufferlen : len ;
+ count = msadpcm_read_block (psf, pms, sptr, readcount) ;
+ for (k = 0 ; k < readcount ; k++)
+ ptr [index + k] = normfact * (float) (sptr [k]) ;
+ index += readcount ;
+ total += count ;
+ len -= readcount ;
+ } ;
+ return total ;
+} /* msadpcm_read_f */
+
+static sf_count_t
+msadpcm_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ MSADPCM_PRIVATE *pms ;
+ short *sptr ;
+ int k, bufferlen, readcount = 0, count ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pms = (MSADPCM_PRIVATE*) psf->fdata ;
+
+ sptr = (short*) psf->buffer ;
+ bufferlen = SF_BUFFER_LEN / sizeof (short) ;
+ while (len > 0)
+ { readcount = (len >= bufferlen) ? bufferlen : len ;
+ count = msadpcm_read_block (psf, pms, sptr, readcount) ;
+ for (k = 0 ; k < readcount ; k++)
+ ptr [index + k] = normfact * (double) (sptr [k]) ;
+ index += readcount ;
+ total += count ;
+ len -= readcount ;
+ } ;
+ 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->fdata)
+ return 0 ;
+ pms = (MSADPCM_PRIVATE*) psf->fdata ;
+
+ if (! (psf->datalength && psf->dataoffset))
+ { psf->error = SFE_BAD_SEEK ;
+ return ((sf_count_t) -1) ;
+ } ;
+
+ if (offset == 0)
+ { psf_fseek (psf->filedes, 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 ((sf_count_t) -1) ;
+ } ;
+
+ newblock = offset / pms->samplesperblock ;
+ newsample = offset % pms->samplesperblock ;
+
+ if (mode == SFM_READ)
+ { psf_fseek (psf->filedes, 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 ((sf_count_t) -1) ;
+ } ;
+
+ 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, "e22", AdaptCoeff1 [k], AdaptCoeff2 [k]) ;
+} /* msadpcm_write_adapt_coeffs */
+
+/*==========================================================================================
+*/
+
+static int
+msadpcm_encode_block (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms)
+{ unsigned int blockindex ;
+ 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 ;
+
+ blockindex = 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 [blockindex++] = 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 ;
+
+ blockindex = 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 [blockindex++] = 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->filedes)) != 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, short *ptr, sf_count_t len)
+{ int count, total = 0, index = 0 ;
+
+ while (index < len)
+ { count = (pms->samplesperblock - pms->samplecount) * pms->channels ;
+
+ if (count > len - index)
+ count = len - index ;
+
+ memcpy (&(pms->samples [pms->samplecount * pms->channels]), &(ptr [index]), count * sizeof (short)) ;
+ index += count ;
+ pms->samplecount += count / pms->channels ;
+ total = index ;
+
+ 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, short *ptr, sf_count_t len)
+{ MSADPCM_PRIVATE *pms ;
+ int total ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pms = (MSADPCM_PRIVATE*) psf->fdata ;
+
+ total = msadpcm_write_block (psf, pms, ptr, len) ;
+
+ return total ;
+} /* msadpcm_write_s */
+
+static sf_count_t
+msadpcm_write_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
+{ MSADPCM_PRIVATE *pms ;
+ short *sptr ;
+ int k, bufferlen, writecount = 0, count ;
+ int index = 0, total = 0 ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pms = (MSADPCM_PRIVATE*) psf->fdata ;
+
+ sptr = (short*) psf->buffer ;
+ bufferlen = SF_BUFFER_LEN / sizeof (short) ;
+ while (len > 0)
+ { writecount = (len >= bufferlen) ? bufferlen : len ;
+ for (k = 0 ; k < writecount ; k++)
+ sptr [k] = ptr [index + k] >> 16 ;
+ count = msadpcm_write_block (psf, pms, sptr, writecount) ;
+ index += writecount ;
+ total += count ;
+ len -= writecount ;
+ } ;
+ return total ;
+} /* msadpcm_write_i */
+
+static sf_count_t
+msadpcm_write_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ MSADPCM_PRIVATE *pms ;
+ short *sptr ;
+ int k, bufferlen, writecount = 0, count ;
+ int index = 0, total = 0 ;
+ float normfact ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pms = (MSADPCM_PRIVATE*) psf->fdata ;
+
+ normfact = (psf->norm_float == SF_TRUE) ? ((float) 0x8000) : 1.0 ;
+
+ sptr = (short*) psf->buffer ;
+ 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 [index + k]) ;
+ count = msadpcm_write_block (psf, pms, sptr, writecount) ;
+ index += writecount ;
+ total += count ;
+ len -= writecount ;
+ } ;
+ return total ;
+} /* msadpcm_write_f */
+
+static sf_count_t
+msadpcm_write_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ MSADPCM_PRIVATE *pms ;
+ short *sptr ;
+ int k, bufferlen, writecount = 0, count ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = (psf->norm_double == SF_TRUE) ? ((double) 0x8000) : 1.0 ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pms = (MSADPCM_PRIVATE*) psf->fdata ;
+
+ sptr = (short*) psf->buffer ;
+ 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 [index + k]) ;
+ count = msadpcm_write_block (psf, pms, sptr, writecount) ;
+ index += writecount ;
+ total += count ;
+ len -= writecount ;
+ } ;
+ return total ;
+} /* msadpcm_write_d */
+
+/*========================================================================================
+*/
+
+static int
+msadpcm_close (SF_PRIVATE *psf)
+{ MSADPCM_PRIVATE *pms ;
+
+ if (! psf->fdata)
+ return 0 ;
+
+ pms = (MSADPCM_PRIVATE*) psf->fdata ;
+
+ if (psf->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) ;
+
+ psf_fseek (psf->filedes, 0, SEEK_END) ;
+ psf->filelength = psf_ftell (psf->filedes) ;
+
+ psf->sf.samples = pms->samplesperblock * pms->blockcount ;
+ psf->datalength = psf->filelength - psf->dataoffset ;
+
+ if (psf->write_header)
+ psf->write_header (psf) ;
+ } ;
+
+ if (psf->fdata)
+ free (psf->fdata) ;
+ psf->fdata = NULL ;
+
+ 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 index 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 */
--- a/common/libsndfile/src/nist.c
+++ b/common/libsndfile/src/nist.c
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 1999-2001 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
**
** 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
@@ -44,149 +44,221 @@
*/
static int nist_close (SF_PRIVATE *psf) ;
-static void nist_write_header (SF_PRIVATE *psf) ;
+static int nist_write_header (SF_PRIVATE *psf) ;
+static int nist_read_header (SF_PRIVATE *psf) ;
/*------------------------------------------------------------------------------
*/
int
-nist_open_read (SF_PRIVATE *psf)
-{ char *psf_header ;
- int error ;
+nist_open (SF_PRIVATE *psf)
+{ int subformat, error ;
+
+ if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0))
+ { if ((error = nist_read_header (psf)))
+ return error ;
+ } ;
- fseek (psf->file, 0, SEEK_SET) ;
+ subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
+ if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR)
+ { if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_NIST)
+ return SFE_BAD_OPEN_FORMAT ;
+
+ psf->endian = psf->sf.format & SF_FORMAT_ENDMASK ;
+ 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 ;
+
+ if ((error = nist_write_header (psf)))
+ return error ;
+
+ psf->write_header = nist_write_header ;
+ } ;
+
+ psf->close = nist_close ;
+
+ switch (psf->sf.format & SF_FORMAT_SUBMASK)
+ { case SF_FORMAT_PCM_S8 :
+ psf->chars = SF_CHARS_SIGNED ;
+ 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 int
+nist_read_header (SF_PRIVATE *psf)
+{ char *psf_header ;
+ int bitwidth = 0, bytes = 0, count, encoding ;
+ char str [64], *cptr ;
+ long samples ;
+
+
+ psf->sf.format = SF_FORMAT_NIST ;
+
psf_header = (char*) psf->header ;
+
+ 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) ;
- fgets (psf_header, SF_HEADER_LEN, psf->file) ;
- psf_log_printf (psf, psf_header) ;
- if (strlen (psf_header) != 8 || strcmp (psf_header, "NIST_1A\n"))
- return SFE_NIST_BAD_HEADER ;
+ /* Header is a string, so make sure it is null terminated. */
+ psf_header [NIST_HEADER_LENGTH] = 0 ;
- fgets (psf_header, SF_HEADER_LEN, psf->file) ;
+ /* Now trim the header after the end marker. */
+ if ((cptr = strstr (psf_header, "end_head")))
+ { cptr += strlen ("end_head") + 1 ;
+ cptr [0] = 0 ;
+ } ;
+
psf_log_printf (psf, psf_header) ;
- if (strlen (psf_header) != 8 || atoi (psf_header) != 1024)
- return SFE_NIST_BAD_HEADER ;
+
+ /* Make sure its a NIST file. */
+ if (strstr (psf_header, "NIST_1A\n 1024\n") != psf_header)
+ { printf ("Not a NIST file.\n") ;
+ puts (psf_header) ;
+ exit (1) ;
+ } ;
- while (ftell (psf->file) < 1024 && !ferror (psf->file))
- { fgets (psf_header, SF_HEADER_LEN, psf->file) ;
- psf_log_printf (psf, psf_header) ;
+ /* 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)
+ 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 ")))
+ sscanf (cptr, "channel_count -i %d", &(psf->sf.channels)) ;
- if (strstr (psf_header, "channel_count -i ") == psf_header)
- sscanf (psf_header, "channel_count -i %u", &(psf->sf.channels)) ;
-
- if (strstr (psf_header, "sample_count -i ") == psf_header)
- sscanf (psf_header, "sample_count -i %u", &(psf->sf.samples)) ;
+ if ((cptr = strstr (psf_header, "sample_rate -i ")))
+ sscanf (cptr, "sample_rate -i %d", &(psf->sf.samplerate)) ;
- if (strstr (psf_header, "sample_rate -i ") == psf_header)
- sscanf (psf_header, "sample_rate -i %u", &(psf->sf.samplerate)) ;
+ if ((cptr = strstr (psf_header, "sample_count -i ")))
+ { sscanf (psf_header, "sample_count -i %ld", &samples) ;
+ psf->sf.samples = samples ;
+ } ;
- if (strstr (psf_header, "sample_n_bytes -i ") == psf_header)
- sscanf (psf_header, "sample_n_bytes -i %u", &(psf->bytewidth)) ;
+ if ((cptr = strstr (psf_header, "sample_n_bytes -i ")))
+ sscanf (cptr, "sample_n_bytes -i %d", &(psf->bytewidth)) ;
- if (strstr (psf_header, "sample_sig_bits -i ") == psf_header)
- sscanf (psf_header, "sample_sig_bits -i %u", &(psf->sf.pcmbitwidth)) ;
+ /* Default endian-ness (for 8 bit, u-law, A-law. */
+ psf->endian = (CPU_IS_BIG_ENDIAN) ? SF_ENDIAN_BIG : SF_ENDIAN_LITTLE ;
- if (strstr (psf_header, "sample_byte_format -s") == psf_header)
- { int bytes ;
- char str [8] = { 0, 0, 0, 0, 0, 0, 0, 0 } ;
-
- sscanf (psf_header, "sample_byte_format -s%d %5s", &bytes, str) ;
- if (bytes < 2 || bytes > 4)
+ /* This is where we figure out endian-ness. */
+ if ((cptr = strstr (psf_header, "sample_byte_format -s")))
+ { sscanf (cptr, "sample_byte_format -s%d %8s", &bytes, str) ;
+ if (bytes > 1)
+ { if (psf->bytewidth == 0)
+ psf->bytewidth = bytes ;
+ else if (psf->bytewidth != bytes)
+ { psf_log_printf (psf, "psf->bytewidth (%d) != bytes (%d)\n", psf->bytewidth, bytes) ;
return SFE_NIST_BAD_ENCODING ;
-
- psf->bytewidth = bytes ;
-
+ } ;
+
if (strstr (str, "01") == str)
- { psf->endian = SF_ENDIAN_LITTLE ;
- psf->sf.format = SF_FORMAT_NIST | SF_FORMAT_PCM_LE ;
- }
+ psf->endian = SF_ENDIAN_LITTLE ;
else if (strstr (str, "10"))
- { psf->endian = SF_ENDIAN_BIG ;
- psf->sf.format = SF_FORMAT_NIST | SF_FORMAT_PCM_BE ;
+ psf->endian = SF_ENDIAN_BIG ;
+ else
+ { psf_log_printf (psf, "Weird endian-ness : %s\n", str) ;
+ return SFE_NIST_BAD_ENCODING ;
} ;
} ;
- if (strstr (psf_header, "sample_coding -s") == psf_header)
- return SFE_NIST_BAD_ENCODING ;
+ psf->sf.format |= psf->endian ;
+ } ;
- if (strstr (psf_header, "end_head") == psf_header)
- break ;
+ 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->dataoffset = NIST_HEADER_LENGTH ;
- psf->current = 0 ;
- psf->sf.seekable = SF_TRUE ;
- psf->sf.sections = 1 ;
-
- psf->close = (func_close) nist_close ;
-
psf->blockwidth = psf->sf.channels * psf->bytewidth ;
psf->datalength = psf->filelength - psf->dataoffset ;
- if ((error = pcm_read_init (psf)))
- return error ;
+ psf->close = nist_close ;
- fseek (psf->file, psf->dataoffset, SEEK_SET) ;
+ psf_fseek (psf->filedes, psf->dataoffset, SEEK_SET) ;
- return 0 ;
-} /* nist_open_read */
+ if (encoding == SF_FORMAT_PCM_U8)
+ { switch (psf->bytewidth)
+ { case 1 :
+ psf->chars = SF_CHARS_SIGNED ;
+ psf->sf.format |= SF_FORMAT_PCM_S8 ;
+ break ;
-/*------------------------------------------------------------------------------
-*/
+ case 2 :
+ psf->sf.format |= SF_FORMAT_PCM_16 ;
+ break ;
-int
-nist_open_write (SF_PRIVATE *psf)
-{ int subformat, error ;
-
- if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_NIST)
- return SFE_BAD_OPEN_FORMAT ;
+ case 3 :
+ psf->sf.format |= SF_FORMAT_PCM_24 ;
+ break ;
- subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
+ case 4 :
+ psf->sf.format |= SF_FORMAT_PCM_32 ;
+ break ;
- if (subformat == SF_FORMAT_PCM_BE)
- psf->endian = SF_ENDIAN_BIG ;
- else if (subformat == SF_FORMAT_PCM_LE)
- psf->endian = SF_ENDIAN_LITTLE ;
- else if (CPU_IS_BIG_ENDIAN && subformat == SF_FORMAT_PCM)
- psf->endian = SF_ENDIAN_BIG ;
- else if (CPU_IS_LITTLE_ENDIAN && subformat == SF_FORMAT_PCM)
- psf->endian = SF_ENDIAN_LITTLE ;
+ default : break ;
+ } ;
+ }
+ else if (encoding != 0)
+ psf->sf.format |= encoding ;
else
- return SFE_BAD_OPEN_FORMAT ;
-
- psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
-
- psf->blockwidth = psf->bytewidth * psf->sf.channels ;
- psf->dataoffset = NIST_HEADER_LENGTH ;
- psf->datalength = psf->blockwidth * psf->sf.samples ;
- psf->filelength = psf->datalength + psf->dataoffset ;
- psf->error = 0 ;
+ return SFE_UNIMPLEMENTED ;
- if ((error = pcm_write_init (psf)))
- return error ;
-
- psf->close = (func_close) nist_close ;
- psf->write_header = (func_wr_hdr) nist_write_header ;
-
- nist_write_header (psf) ;
-
return 0 ;
-} /* nist_open_write */
+} /* nist_read_header */
-/*------------------------------------------------------------------------------
-*/
-
static int
nist_close (SF_PRIVATE *psf)
{
- if (psf->mode == SF_MODE_WRITE)
+ if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR)
{ /* Now we know for certain the length of the file we can
** re-write correct values for the datasize header element.
*/
- fseek (psf->file, 0, SEEK_END) ;
- psf->filelength = ftell (psf->file) ;
+ psf_fseek (psf->filedes, 0, SEEK_END) ;
+ psf->filelength = psf_ftell (psf->filedes) ;
psf->dataoffset = NIST_HEADER_LENGTH ;
psf->datalength = psf->filelength - psf->dataoffset ;
@@ -196,10 +268,6 @@
nist_write_header (psf) ;
} ;
- if (psf->fdata)
- free (psf->fdata) ;
- psf->fdata = NULL ;
-
return 0 ;
} /* nist_close */
@@ -206,9 +274,10 @@
/*=========================================================================
*/
-static void
+static int
nist_write_header (SF_PRIVATE *psf)
{ char *end_str ;
+ long samples ;
if (psf->endian == SF_ENDIAN_BIG)
end_str = "10" ;
@@ -219,56 +288,56 @@
/* Clear the whole header. */
memset (psf->header, 0, sizeof (psf->header)) ;
+ psf->headindex = 0 ;
+ psf_fseek (psf->filedes, 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) ;
- psf_asciiheader_printf (psf, "sample_n_bytes -i %d\n", psf->bytewidth) ;
- psf_asciiheader_printf (psf, "sample_byte_format -s%d %s\n", psf->bytewidth, end_str) ;
- psf_asciiheader_printf (psf, "sample_sig_bits -i %d\n", psf->sf.pcmbitwidth) ;
- psf_asciiheader_printf (psf, "sample_count -i %d\n", psf->sf.samples) ;
- psf_asciiheader_printf (psf, "end_head\n") ;
- fseek (psf->file, 0, SEEK_SET) ;
+ switch (psf->sf.format & SF_FORMAT_SUBMASK)
+ { 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.samples ;
+ 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", NIST_HEADER_LENGTH - psf->headindex) ;
- fwrite (psf->header, psf->headindex, 1, psf->file) ;
+ psf_fwrite (psf->header, psf->headindex, 1, psf->filedes) ;
- return ;
+ return 0 ;
} /* nist_write_header */
-/*-
-These were used to parse the sample_byte_format field but were discarded in favour
-os a simpler method using strstr ().
-
-static
-int strictly_ascending (char *str)
-{ int k ;
-
- if (strlen (str) < 2)
- return 0 ;
-
- for (k = 1 ; str [k] ; k++)
- if (str [k] != str [k-1] + 1)
- return 0 ;
-
- return 1 ;
-} /+* strictly_ascending *+/
-
-static int strictly_descending (char *str)
-{ int k ;
-
- if (strlen (str) < 2)
- return 0 ;
-
- for (k = 1 ; str [k] ; k++)
- if (str [k] + 1 != str [k-1])
- return 0 ;
-
- return 1 ;
-} /+* strictly_descending *+/
-
--*/
--- a/common/libsndfile/src/paf.c
+++ b/common/libsndfile/src/paf.c
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 1999-2001 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
**
** 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
@@ -16,7 +16,6 @@
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
@@ -23,10 +22,10 @@
#include <string.h>
#include <ctype.h>
-#include "config.h"
#include "sndfile.h"
+#include "config.h"
#include "sfendian.h"
-#include "floatcast.h"
+#include "float_cast.h"
#include "common.h"
/*------------------------------------------------------------------------------
@@ -40,25 +39,30 @@
** Other defines.
*/
-#define PAF_HEADER_LENGTH 2048
+#define PAF_HEADER_LENGTH 2048
+#define PAF24_SAMPLES_PER_BLOCK 10
+#define PAF24_BLOCK_SIZE 32
+
/*------------------------------------------------------------------------------
** Typedefs.
*/
typedef struct
-{ unsigned int version ;
- unsigned int endianness ;
- unsigned int samplerate ;
- unsigned int format ;
- unsigned int channels ;
- unsigned int source ;
+{ int version ;
+ int endianness ;
+ int samplerate ;
+ int format ;
+ int channels ;
+ int source ;
} PAF_FMT ;
typedef struct
-{ unsigned int index, blocks, channels, samplesperblock, blockcount, blocksize, samplecount ;
- unsigned char *block ;
+{ int max_blocks, channels, samplesperblock, blocksize ;
+ int read_block, write_block, read_count, write_count ;
+ sf_count_t sample_count ;
int *samples ;
+ unsigned char *block ;
unsigned char data [1] ; /* Data size fixed during malloc (). */
} PAF24_PRIVATE ;
@@ -66,49 +70,103 @@
** Private static functions.
*/
-static int paf24_reader_init (SF_PRIVATE *psf) ;
-static int paf24_writer_init (SF_PRIVATE *psf) ;
+static int paf24_init (SF_PRIVATE *psf) ;
-static int paf24_read_block (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24) ;
-
-static int paf24_close (SF_PRIVATE *psf) ;
+static int paf_read_header (SF_PRIVATE *psf) ;
+static int paf_write_header (SF_PRIVATE *psf) ;
-static int paf24_read_s (SF_PRIVATE *psf, short *ptr, int len) ;
-static int paf24_read_i (SF_PRIVATE *psf, int *ptr, int len) ;
-static int paf24_read_f (SF_PRIVATE *psf, float *ptr, int len) ;
-static int paf24_read_d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+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 int paf24_write_s (SF_PRIVATE *psf, short *ptr, int len) ;
-static int paf24_write_i (SF_PRIVATE *psf, int *ptr, int len) ;
-static int paf24_write_f (SF_PRIVATE *psf, float *ptr, int len) ;
-static int paf24_write_d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+static sf_count_t paf24_write_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
+static sf_count_t paf24_write_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
+static sf_count_t paf24_write_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
+static sf_count_t paf24_write_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static long paf24_seek (SF_PRIVATE *psf, long offset, int whence) ;
+static sf_count_t paf24_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
-/*
-static void endswap_paf_fmt (PAF_FMT *ppaf_fmt) ;
-*/
+enum
+{ PAF_PCM_16 = 0,
+ PAF_PCM_24 = 1,
+ PAF_PCM_S8 = 2
+} ;
/*------------------------------------------------------------------------------
-** Public functions.
+** Public function.
*/
int
-paf_open_read (SF_PRIVATE *psf)
-{ PAF_FMT paf_fmt ;
- unsigned int marker ;
- int error ;
+paf_open (SF_PRIVATE *psf)
+{ int subformat, error, endian ;
+
+ psf->dataoffset = PAF_HEADER_LENGTH ;
+
+ if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0))
+ { if ((error = paf_read_header (psf)))
+ return error ;
+ } ;
+
+ subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
+
+ if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR
+ /*- || (psf->mode == SFM_RDWR && psf->filelength <= 0)-*/)
+ { if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_PAF)
+ return SFE_BAD_OPEN_FORMAT ;
+
+ endian = psf->sf.format & SF_FORMAT_ENDMASK ;
+
+ /* 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)))
+ return error ;
+ } ;
+
+ switch (subformat)
+ { case SF_FORMAT_PCM_S8 :
+ psf->chars = SF_CHARS_SIGNED ;
+ 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 :
+ 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 ;
+
psf_binheader_readf (psf, "pm", 0, &marker) ;
- psf_log_printf (psf, "Signature : %D\n", marker) ;
+ psf_log_printf (psf, "Signature : '%D'\n", marker) ;
if (marker == PAF_MARKER)
- { psf_binheader_readf (psf, "LLLLLL", &(paf_fmt.version), &(paf_fmt.endianness),
+ { 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, "llllll", &(paf_fmt.version), &(paf_fmt.endianness),
+ { psf_binheader_readf (psf, "e444444", &(paf_fmt.version), &(paf_fmt.endianness),
&(paf_fmt.samplerate), &(paf_fmt.format), &(paf_fmt.channels), &(paf_fmt.source)) ;
}
else
@@ -115,28 +173,31 @@
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_log_printf (psf, "Little\n", paf_fmt.endianness) ;
+ psf->endian = SF_ENDIAN_LITTLE ;
+ }
else
- psf_log_printf (psf, "Big\n", paf_fmt.endianness) ;
- psf_log_printf (psf, "Sample Rate : %d\n", paf_fmt.samplerate) ;
+ { psf_log_printf (psf, "Big\n", paf_fmt.endianness) ;
+ psf->endian = SF_ENDIAN_BIG ;
+ } ;
if (psf->filelength < PAF_HEADER_LENGTH)
return SFE_PAF_SHORT_HEADER ;
- psf->dataoffset = PAF_HEADER_LENGTH ;
psf->datalength = psf->filelength - psf->dataoffset ;
- psf->current = 0 ;
- psf->endian = paf_fmt.endianness ? SF_ENDIAN_LITTLE : SF_ENDIAN_BIG ;
-
- psf_binheader_readf (psf, "p", psf->dataoffset) ;
+ psf_binheader_readf (psf, "p", (int) psf->dataoffset) ;
psf->sf.samplerate = paf_fmt.samplerate ;
psf->sf.channels = paf_fmt.channels ;
@@ -144,53 +205,42 @@
/* Only fill in type major. */
psf->sf.format = SF_FORMAT_PAF ;
- psf->sf.sections = 1 ;
-
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 0 : psf_log_printf (psf, "16 bit linear PCM\n") ;
- psf->sf.pcmbitwidth = 16 ;
- psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
+ { case PAF_PCM_S8 :
+ psf_log_printf (psf, "8 bit linear PCM\n") ;
+ psf->bytewidth = 1 ;
- psf->sf.format |= paf_fmt.endianness ? SF_FORMAT_PCM_LE : SF_FORMAT_PCM_BE ; ;
+ psf->sf.format |= SF_FORMAT_PCM_S8 ;
+ psf->chars = SF_CHARS_SIGNED ;
- if ((error = pcm_read_init (psf)))
- return error ;
-
psf->blockwidth = psf->bytewidth * psf->sf.channels ;
+ psf->sf.samples = psf->datalength / psf->blockwidth ;
+ break ;
+
+ case PAF_PCM_16 :
+ psf_log_printf (psf, "16 bit linear PCM\n") ;
+ psf->bytewidth = 2 ;
- psf_log_printf (psf, "X blockwidth : %d\n", psf->blockwidth) ;
-
- if (psf->blockwidth)
- psf->sf.samples = psf->datalength / psf->blockwidth ;
- else
- psf_log_printf (psf, "*** Warning : blockwidth == 0.\n") ;
+ psf->sf.format |= SF_FORMAT_PCM_16 ;
- psf_log_printf (psf, "X samples : %d\n", psf->sf.samples) ;
+ psf->blockwidth = psf->bytewidth * psf->sf.channels ;
+ psf->sf.samples = psf->datalength / psf->blockwidth ;
break ;
- case 1 : psf_log_printf (psf, "24 bit linear PCM\n") ;
- psf->sf.pcmbitwidth = 24 ;
- psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
+ case PAF_PCM_24 :
+ psf_log_printf (psf, "24 bit linear PCM\n") ;
+ psf->bytewidth = 3 ;
- psf->sf.format |= paf_fmt.endianness ? SF_FORMAT_PCM_LE : SF_FORMAT_PCM_BE ; ;
+ psf->sf.format |= SF_FORMAT_PCM_24 ;
- psf->read_short = (func_short) paf24_read_s ;
- psf->read_int = (func_int) paf24_read_i ;
- psf->read_float = (func_float) paf24_read_f ;
- psf->read_double = (func_double) paf24_read_d ;
-
- if ((error = paf24_reader_init (psf)))
- return error ;
-
- psf->seek_func = (func_seek) paf24_seek ;
- psf->close = (func_close) paf24_close ;
-
- psf->blockwidth = psf->bytewidth * psf->sf.channels ;
- psf_log_printf (psf, "X blockwidth : %d\n", psf->blockwidth) ;
- psf->sf.samples = 10 * psf->datalength / (32 * psf->sf.channels) ;
- psf_log_printf (psf, "X samples : %d\n", psf->sf.samples) ;
+ psf->blockwidth = 0 ;
+ psf->sf.samples = PAF24_SAMPLES_PER_BLOCK * psf->datalength /
+ (PAF24_BLOCK_SIZE * psf->sf.channels) ;
break ;
default : psf_log_printf (psf, "Unknown\n") ;
@@ -198,7 +248,6 @@
break ;
} ;
- psf_log_printf (psf, "Channels : %d\n", paf_fmt.channels) ;
psf_log_printf (psf, "Source : %d => ", paf_fmt.source) ;
switch (paf_fmt.source)
@@ -215,98 +264,53 @@
} ;
return 0 ;
-} /* paf_open_read */
+} /* paf_read_header */
-/*------------------------------------------------------------------------------
-*/
+static int
+paf_write_header (SF_PRIVATE *psf)
+{ int paf_format ;
-int
-paf_open_write (SF_PRIVATE *psf)
-{ PAF_FMT paf_fmt ;
- int subformat, error, paf_format ;
-
- if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_PAF)
- return SFE_BAD_OPEN_FORMAT ;
+ switch (psf->sf.format & SF_FORMAT_SUBMASK)
+ { case SF_FORMAT_PCM_S8 :
+ paf_format = PAF_PCM_S8 ;
+ break ;
- subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
-
- if (subformat == SF_FORMAT_PCM_BE)
- psf->endian = SF_ENDIAN_BIG ;
- else if (subformat == SF_FORMAT_PCM_LE)
- psf->endian = SF_ENDIAN_LITTLE ;
- else if (CPU_IS_BIG_ENDIAN && subformat == SF_FORMAT_PCM)
- psf->endian = SF_ENDIAN_BIG ;
- else if (CPU_IS_LITTLE_ENDIAN && subformat == SF_FORMAT_PCM)
- psf->endian = SF_ENDIAN_LITTLE ;
- else
- return SFE_BAD_OPEN_FORMAT ;
-
- psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
-
- psf->blockwidth = psf->bytewidth * psf->sf.channels ;
- psf->dataoffset = PAF_HEADER_LENGTH ;
- psf->datalength = psf->blockwidth * psf->sf.samples ;
- psf->filelength = psf->datalength + psf->dataoffset ;
- psf->error = 0 ;
-
- switch (psf->sf.pcmbitwidth)
- { case 16 : paf_format = 0 ;
- psf->bytewidth = 2 ;
+ case SF_FORMAT_PCM_16 :
+ paf_format = PAF_PCM_16 ;
break ;
- case 24 : paf_format = 1 ;
- psf->bytewidth = 3 ;
+ case SF_FORMAT_PCM_24 :
+ paf_format = PAF_PCM_24 ;
break ;
default : return SFE_PAF_UNKNOWN_FORMAT ;
} ;
-
- switch (paf_format)
- { case 0 : /* 16-bit linear PCM. */
- if ((error = pcm_write_init (psf)))
- return error ;
- break ;
- case 1 : /* 24-bit linear PCM */
- psf->write_short = (func_short) paf24_write_s ;
- psf->write_int = (func_int) paf24_write_i ;
- psf->write_float = (func_float) paf24_write_f ;
- psf->write_double = (func_double) paf24_write_d ;
-
- if ((error = paf24_writer_init (psf)))
- return error ;
-
- psf->seek_func = (func_seek) paf24_seek ;
- psf->close = (func_close) paf24_close ;
- break ;
-
- default : break ;
- } ;
-
/* Reset the current header length to zero. */
psf->header [0] = 0 ;
psf->headindex = 0 ;
+ psf_fseek (psf->filedes, 0, SEEK_SET) ;
if (psf->endian == SF_ENDIAN_BIG)
{ /* Marker, version, endianness, samplerate */
- psf_binheader_writef (psf, "mLLL", PAF_MARKER, 0, 0, psf->sf.samplerate) ;
+ psf_binheader_writef (psf, "Em444", PAF_MARKER, 0, 0, psf->sf.samplerate) ;
/* format, channels, source */
- psf_binheader_writef (psf, "LLL", paf_format, psf->sf.channels, paf_fmt.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, "mlll", FAP_MARKER, 0, 1, psf->sf.samplerate) ;
+ psf_binheader_writef (psf, "em444", FAP_MARKER, 0, 1, psf->sf.samplerate) ;
/* format, channels, source */
- psf_binheader_writef (psf, "lll", paf_format, psf->sf.channels, 0) ;
+ psf_binheader_writef (psf, "e444", paf_format, psf->sf.channels, 0) ;
} ;
/* Zero fill to dataoffset. */
- psf_binheader_writef (psf, "z", psf->dataoffset - psf->headindex) ;
+ psf_binheader_writef (psf, "z", (int) (psf->dataoffset - psf->headindex)) ;
- fwrite (psf->header, psf->headindex, 1, psf->file) ;
+ psf_fwrite (psf->header, psf->headindex, 1, psf->filedes) ;
return 0 ;
-} /* paf_open_write */
+} /* paf_write_header */
/*===============================================================================
** 24 bit PAF files have a really weird encoding.
@@ -314,7 +318,7 @@
** 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 fro the mono case. The 32 block bytes are then interleaved
+** 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!!!
@@ -322,49 +326,162 @@
** 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_reader_init (SF_PRIVATE *psf)
-{ PAF24_PRIVATE *ppaf24 ;
- unsigned int paf24size ;
+paf24_init (SF_PRIVATE *psf)
+{ PAF24_PRIVATE *ppaf24 ;
+ int paf24size, max_blocks ;
- paf24size = sizeof (PAF24_PRIVATE) + psf->sf.channels * (32 + 10 * sizeof (int)) ;
+ paf24size = sizeof (PAF24_PRIVATE) + psf->sf.channels *
+ (PAF24_BLOCK_SIZE + PAF24_SAMPLES_PER_BLOCK * sizeof (int)) ;
+
if (! (psf->fdata = malloc (paf24size)))
return SFE_MALLOC_FAILED ;
-
+
ppaf24 = (PAF24_PRIVATE*) psf->fdata ;
memset (ppaf24, 0, paf24size) ;
ppaf24->channels = psf->sf.channels ;
ppaf24->block = (unsigned char*) ppaf24->data ;
- ppaf24->samples = (int*) (ppaf24->data + 32 * ppaf24->channels) ;
+ ppaf24->samples = (int*) (ppaf24->data + PAF24_BLOCK_SIZE * ppaf24->channels) ;
- ppaf24->blocksize = 32 * ppaf24->channels ;
- ppaf24->samplesperblock = 10 ;
+ ppaf24->blocksize = PAF24_BLOCK_SIZE * ppaf24->channels ;
+ ppaf24->samplesperblock = PAF24_SAMPLES_PER_BLOCK ;
- if (psf->datalength % ppaf24->blocksize)
- { psf_log_printf (psf, "*** Warning : file seems to be truncated.\n") ;
- ppaf24->blocks = psf->datalength / ppaf24->blocksize + 1 ;
+ if (psf->mode == SFM_READ || psf->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->mode == SFM_WRITE || psf->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->new_seek = paf24_seek ;
+ psf->close = paf24_close ;
+
+ psf->filelength = psf_get_filelen (psf->filedes) ;
+ psf->datalength = psf->filelength - psf->dataoffset ;
+
+ if (psf->datalength % PAF24_BLOCK_SIZE)
+ { if (psf->mode == SFM_READ)
+ psf_log_printf (psf, "*** Warning : file seems to be truncated.\n") ;
+ max_blocks = psf->datalength / ppaf24->blocksize + 1 ;
}
else
- ppaf24->blocks = psf->datalength / ppaf24->blocksize ;
+ max_blocks = psf->datalength / ppaf24->blocksize ;
+
+ ppaf24->read_block = 0 ;
+ if (psf->mode == SFM_RDWR)
+ ppaf24->write_block = max_blocks ;
+ else
+ ppaf24->write_block = 0 ;
- psf->sf.samples = ppaf24->samplesperblock * ppaf24->blocks ;
+ psf->sf.samples = ppaf24->samplesperblock * max_blocks ;
+ ppaf24->sample_count = psf->sf.samples ;
- paf24_read_block (psf, ppaf24) ; /* Read first block. */
-
return 0 ;
-} /* paf24_reader_init */
+} /* 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->fdata)
+ { psf->error = SFE_INTERNAL ;
+ return ((sf_count_t) -1) ;
+ } ;
+
+ ppaf24 = (PAF24_PRIVATE*) psf->fdata ;
+
+ if (mode == SFM_READ && ppaf24->write_count > 0)
+ paf24_write_block (psf, ppaf24) ;
+
+ newblock = offset / ppaf24->samplesperblock ;
+ newsample = offset % ppaf24->samplesperblock ;
+
+ switch (mode)
+ { case SFM_READ :
+ if (offset > ppaf24->read_block * ppaf24->samplesperblock + ppaf24->read_count)
+ { psf->error = SFE_BAD_SEEK ;
+ return ((sf_count_t) -1) ;
+ } ;
+
+ if (psf->last_op == SFM_WRITE && ppaf24->write_count)
+ paf24_write_block (psf, ppaf24) ;
+
+ psf_fseek (psf->filedes, 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 ((sf_count_t) -1) ;
+ } ;
+
+ if (psf->last_op == SFM_WRITE && ppaf24->write_count)
+ paf24_write_block (psf, ppaf24) ;
+
+ psf_fseek (psf->filedes, psf->dataoffset + newblock * ppaf24->blocksize, SEEK_SET) ;
+ ppaf24->read_block = newblock ;
+ paf24_read_block (psf, ppaf24) ;
+ ppaf24->read_count = newsample ;
+ break ;
+
+ default :
+ psf->error = SFE_BAD_SEEK ;
+ return ((sf_count_t) -1) ;
+ } ;
+
+ return newblock * ppaf24->samplesperblock + newsample ;
+} /* paf24_seek */
+
+static int
+paf24_close (SF_PRIVATE *psf)
+{ PAF24_PRIVATE *ppaf24 ;
+
+ if (! psf->fdata)
+ return 0 ;
+
+ ppaf24 = (PAF24_PRIVATE*) psf->fdata ;
+
+ if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR)
+ { if (ppaf24->write_count > 0)
+ paf24_write_block (psf, ppaf24) ;
+ } ;
+
+ free (psf->fdata) ;
+ psf->fdata = NULL ;
+
+ return 0 ;
+} /* paf24_close */
+
+/*---------------------------------------------------------------------------
+*/
static int
paf24_read_block (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24)
-{ int k, *iptr, newsample, channel ;
+{ int k, channel ;
unsigned char *cptr ;
- ppaf24->blockcount ++ ;
- ppaf24->samplecount = 0 ;
+ ppaf24->read_block ++ ;
+ ppaf24->read_count = 0 ;
- if (ppaf24->blockcount > ppaf24->blocks)
+ if (ppaf24->read_block * ppaf24->samplesperblock > ppaf24->sample_count)
{ memset (ppaf24->samples, 0, ppaf24->samplesperblock * ppaf24->channels) ;
return 1 ;
} ;
@@ -371,25 +488,21 @@
/* Read the block. */
- if ((k = fread (ppaf24->block, 1, ppaf24->blocksize, psf->file)) != ppaf24->blocksize)
+ if ((k = psf_fread (ppaf24->block, 1, ppaf24->blocksize, psf->filedes)) != ppaf24->blocksize)
psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, ppaf24->blocksize) ;
/* Do endian swapping if necessary. */
- iptr = (int*) (ppaf24->data) ;
if ((CPU_IS_BIG_ENDIAN && psf->endian == SF_ENDIAN_LITTLE) ||
(CPU_IS_LITTLE_ENDIAN && psf->endian == SF_ENDIAN_BIG))
- { for (k = 0 ; k < 8 * ppaf24->channels ; k++)
- iptr [k] = ENDSWAP_INT (iptr [k]) ;
+ { endswap_int_array ((int*) ppaf24->data, 8 * ppaf24->channels) ;
} ;
- /* Unpack block. */
-
- for (k = 0 ; k < 10 * ppaf24->channels ; k++)
+ /* Unpack block. */
+ for (k = 0 ; k < PAF24_SAMPLES_PER_BLOCK * ppaf24->channels ; k++)
{ channel = k % ppaf24->channels ;
- cptr = ppaf24->block + 32 * channel + 3 * (k / ppaf24->channels) ;
- newsample = (cptr [0] << 8) | (cptr [1] << 16) | (cptr [2] << 24) ;
- ppaf24->samples [k] = newsample / 256 ;
+ 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 ;
@@ -396,24 +509,24 @@
} /* paf24_read_block */
static int
-paf24_read (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24, int *ptr, int len)
-{ int count, total = 0, index = 0 ;
+paf24_read (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24, int *ptr, sf_count_t len)
+{ sf_count_t count, total = 0, index = 0 ;
while (index < len)
- { if (ppaf24->blockcount >= ppaf24->blocks && ppaf24->samplecount >= ppaf24->samplesperblock)
- { memset (&(ptr[index]), 0, (len - index) * sizeof (int)) ;
+ { if (ppaf24->read_block * ppaf24->samplesperblock >= ppaf24->sample_count)
+ { memset (&(ptr[index]), 0, (size_t) ((len - index) * sizeof (int))) ;
return total ;
} ;
- if (ppaf24->samplecount >= ppaf24->samplesperblock)
+ if (ppaf24->read_count >= ppaf24->samplesperblock)
paf24_read_block (psf, ppaf24) ;
- count = (ppaf24->samplesperblock - ppaf24->samplecount) * ppaf24->channels ;
+ count = (ppaf24->samplesperblock - ppaf24->read_count) * ppaf24->channels ;
count = (len - index > count) ? count : len - index ;
- memcpy (&(ptr[index]), &(ppaf24->samples [ppaf24->samplecount * ppaf24->channels]), count * sizeof (int)) ;
+ memcpy (&(ptr[index]), &(ppaf24->samples [ppaf24->read_count * ppaf24->channels]), count * sizeof (int)) ;
index += count ;
- ppaf24->samplecount += count / ppaf24->channels ;
+ ppaf24->read_count += count / ppaf24->channels ;
total = index ;
} ;
@@ -420,8 +533,8 @@
return total ;
} /* paf24_read */
-static int
-paf24_read_s (SF_PRIVATE *psf, short *ptr, int len)
+static sf_count_t
+paf24_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
{ PAF24_PRIVATE *ppaf24 ;
int *iptr ;
int k, bufferlen, readcount = 0, count ;
@@ -432,12 +545,12 @@
ppaf24 = (PAF24_PRIVATE*) psf->fdata ;
iptr = (int*) psf->buffer ;
- bufferlen = psf->sf.channels * ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (int) ;
+ bufferlen = SF_BUFFER_LEN / sizeof (int) ;
while (len > 0)
{ readcount = (len >= bufferlen) ? bufferlen : len ;
count = paf24_read (psf, ppaf24, iptr, readcount) ;
for (k = 0 ; k < readcount ; k++)
- ptr [index+k] = (short) (iptr [k] / 256) ;
+ ptr [index+k] = iptr [k] >> 16 ;
index += readcount ;
total += count ;
len -= readcount ;
@@ -445,8 +558,8 @@
return total ;
} /* paf24_read_s */
-static int
-paf24_read_i (SF_PRIVATE *psf, int *ptr, int len)
+static sf_count_t
+paf24_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
{ PAF24_PRIVATE *ppaf24 ;
int total ;
@@ -459,24 +572,27 @@
return total ;
} /* paf24_read_i */
-static int
-paf24_read_f (SF_PRIVATE *psf, float *ptr, int len)
+static sf_count_t
+paf24_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
{ PAF24_PRIVATE *ppaf24 ;
int *iptr ;
int k, bufferlen, readcount = 0, count ;
int index = 0, total = 0 ;
+ float normfact ;
if (! psf->fdata)
return 0 ;
ppaf24 = (PAF24_PRIVATE*) psf->fdata ;
-
+
+ normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x80000000) : 1.0 ;
+
iptr = (int*) psf->buffer ;
- bufferlen = psf->sf.channels * ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (int) ;
+ bufferlen = SF_BUFFER_LEN / sizeof (int) ;
while (len > 0)
{ readcount = (len >= bufferlen) ? bufferlen : len ;
count = paf24_read (psf, ppaf24, iptr, readcount) ;
for (k = 0 ; k < readcount ; k++)
- ptr [index+k] = (float) (iptr [k]) ;
+ ptr [index+k] = normfact * iptr [k] ;
index += readcount ;
total += count ;
len -= readcount ;
@@ -484,24 +600,27 @@
return total ;
} /* paf24_read_f */
-static int
-paf24_read_d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+static sf_count_t
+paf24_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
{ PAF24_PRIVATE *ppaf24 ;
int *iptr ;
int k, bufferlen, readcount = 0, count ;
int index = 0, total = 0 ;
+ double normfact ;
if (! psf->fdata)
return 0 ;
ppaf24 = (PAF24_PRIVATE*) psf->fdata ;
-
+
+ normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80000000) : 1.0 ;
+
iptr = (int*) psf->buffer ;
- bufferlen = psf->sf.channels * ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (int) ;
+ bufferlen = SF_BUFFER_LEN / sizeof (int) ;
while (len > 0)
{ readcount = (len >= bufferlen) ? bufferlen : len ;
count = paf24_read (psf, ppaf24, iptr, readcount) ;
for (k = 0 ; k < readcount ; k++)
- ptr [index+k] = (double) (iptr [k]) ;
+ ptr [index+k] = normfact * iptr [k] ;
index += readcount ;
total += count ;
len -= readcount ;
@@ -512,90 +631,59 @@
/*---------------------------------------------------------------------------
*/
-static int
-paf24_writer_init (SF_PRIVATE *psf)
-{ PAF24_PRIVATE *ppaf24 ;
- unsigned int paf24size ;
-
- paf24size = sizeof (PAF24_PRIVATE) + psf->sf.channels * (32 + 10 * sizeof (int)) ;
- if (! (psf->fdata = malloc (paf24size)))
- return SFE_MALLOC_FAILED ;
-
- ppaf24 = (PAF24_PRIVATE*) psf->fdata ;
- memset (ppaf24, 0, paf24size) ;
-
- ppaf24->channels = psf->sf.channels ;
- ppaf24->block = (unsigned char*) ppaf24->data ;
- ppaf24->samples = (int*) (ppaf24->data + 32 * ppaf24->channels) ;
-
- ppaf24->blocksize = 32 * ppaf24->channels ;
- ppaf24->samplesperblock = 10 ;
-
- if (psf->datalength % ppaf24->blocksize)
- { psf_log_printf (psf, "*** Warning : file seems to be truncated.\n") ;
- ppaf24->blocks = psf->datalength / ppaf24->blocksize + 1 ;
- }
- else
- ppaf24->blocks = psf->datalength / ppaf24->blocksize ;
-
- psf->sf.samples = ppaf24->samplesperblock * ppaf24->blocks ;
-
- return 0 ;
-} /* paf24_writer_init */
-
-
static int
paf24_write_block (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24)
-{ int k, *iptr, nextsample, channel ;
+{ int k, nextsample, channel ;
unsigned char *cptr ;
/* First pack block. */
- for (k = 0 ; k < 10 * ppaf24->channels ; k++)
+ for (k = 0 ; k < PAF24_SAMPLES_PER_BLOCK * ppaf24->channels ; k++)
{ channel = k % ppaf24->channels ;
- cptr = ppaf24->block + 32 * channel + 3 * (k / ppaf24->channels) ;
- nextsample = ppaf24->samples [k] ;
- cptr [0] = nextsample & 0xFF ;
- cptr [1] = (nextsample >> 8) & 0xFF ;
- cptr [2] = (nextsample >> 16) & 0xFF ;
+ 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. */
-
- iptr = (int*) (ppaf24->data) ;
if ((CPU_IS_BIG_ENDIAN && psf->endian == SF_ENDIAN_LITTLE) ||
(CPU_IS_LITTLE_ENDIAN && psf->endian == SF_ENDIAN_BIG))
- { for (k = 0 ; k < 8 * ppaf24->channels ; k++)
- iptr [k] = ENDSWAP_INT (iptr [k]) ;
+ { endswap_int_array ((int*) ppaf24->data, 8 * ppaf24->channels) ;
} ;
/* Write block to disk. */
-
- if ((k = fwrite (ppaf24->block, 1, ppaf24->blocksize, psf->file)) != ppaf24->blocksize)
+ if ((k = psf_fwrite (ppaf24->block, 1, ppaf24->blocksize, psf->filedes)) != ppaf24->blocksize)
psf_log_printf (psf, "*** Warning : short write (%d != %d).\n", k, ppaf24->blocksize) ;
- ppaf24->blockcount ++ ;
- ppaf24->samplecount = 0 ;
-
+ if (ppaf24->sample_count < ppaf24->write_block * ppaf24->samplesperblock + ppaf24->write_count)
+ ppaf24->sample_count = ppaf24->write_block * ppaf24->samplesperblock + ppaf24->write_count ;
+
+ if (ppaf24->write_count == ppaf24->samplesperblock)
+ { ppaf24->write_block ++ ;
+ ppaf24->write_count = 0 ;
+ } ;
+
return 1 ;
} /* paf24_write_block */
static int
-paf24_write (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24, int *ptr, int len)
+paf24_write (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24, int *ptr, sf_count_t len)
{ int count, total = 0, index = 0 ;
while (index < len)
- { count = (ppaf24->samplesperblock - ppaf24->samplecount) * ppaf24->channels ;
+ { count = (ppaf24->samplesperblock - ppaf24->write_count) * ppaf24->channels ;
if (count > len - index)
count = len - index ;
- memcpy (&(ppaf24->samples [ppaf24->samplecount * ppaf24->channels]), &(ptr [index]), count * sizeof (int)) ;
+ memcpy (&(ppaf24->samples [ppaf24->write_count * ppaf24->channels]), &(ptr [index]), count * sizeof (int)) ;
index += count ;
- ppaf24->samplecount += count / ppaf24->channels ;
+ ppaf24->write_count += count / ppaf24->channels ;
total = index ;
- if (ppaf24->samplecount >= ppaf24->samplesperblock)
+ if (ppaf24->write_count >= ppaf24->samplesperblock)
paf24_write_block (psf, ppaf24) ;
} ;
@@ -602,8 +690,8 @@
return total ;
} /* paf24_write */
-static int
-paf24_write_s (SF_PRIVATE *psf, short *ptr, int len)
+static sf_count_t
+paf24_write_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
{ PAF24_PRIVATE *ppaf24 ;
int *iptr ;
int k, bufferlen, writecount = 0, count ;
@@ -614,11 +702,11 @@
ppaf24 = (PAF24_PRIVATE*) psf->fdata ;
iptr = (int*) psf->buffer ;
- bufferlen = psf->sf.channels * ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (int) ;
+ bufferlen = SF_BUFFER_LEN / sizeof (int) ;
while (len > 0)
{ writecount = (len >= bufferlen) ? bufferlen : len ;
for (k = 0 ; k < writecount ; k++)
- iptr [k] = ((int) ptr [index+k]) * 256 ;
+ iptr [k] = ptr [index + k] << 16 ;
count = paf24_write (psf, ppaf24, iptr, writecount) ;
index += writecount ;
total += count ;
@@ -627,8 +715,8 @@
return total ;
} /* paf24_write_s */
-static int
-paf24_write_i (SF_PRIVATE *psf, int *ptr, int len)
+static sf_count_t
+paf24_write_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
{ PAF24_PRIVATE *ppaf24 ;
int total = 0 ;
@@ -641,23 +729,26 @@
return total ;
} /* paf24_write_i */
-static int
-paf24_write_f (SF_PRIVATE *psf, float *ptr, int len)
+static sf_count_t
+paf24_write_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
{ PAF24_PRIVATE *ppaf24 ;
int *iptr ;
int k, bufferlen, writecount = 0, count ;
int index = 0, total = 0 ;
+ float normfact ;
if (! psf->fdata)
return 0 ;
ppaf24 = (PAF24_PRIVATE*) psf->fdata ;
-
+
+ normfact = (psf->norm_float == SF_TRUE) ? ((float) 0x80000000) : 1.0 ;
+
iptr = (int*) psf->buffer ;
- bufferlen = psf->sf.channels * ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (int) ;
+ bufferlen = SF_BUFFER_LEN / sizeof (int) ;
while (len > 0)
{ writecount = (len >= bufferlen) ? bufferlen : len ;
for (k = 0 ; k < writecount ; k++)
- iptr [k] = FLOAT_TO_INT (ptr [index+k]) ;
+ iptr [k] = lrintf (normfact * ptr [index+k]) ;
count = paf24_write (psf, ppaf24, iptr, writecount) ;
index += writecount ;
total += count ;
@@ -666,23 +757,26 @@
return total ;
} /* paf24_write_f */
-static int
-paf24_write_d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+static sf_count_t
+paf24_write_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
{ PAF24_PRIVATE *ppaf24 ;
int *iptr ;
int k, bufferlen, writecount = 0, count ;
int index = 0, total = 0 ;
-
+ double normfact ;
+
if (! psf->fdata)
return 0 ;
ppaf24 = (PAF24_PRIVATE*) psf->fdata ;
-
+
+ normfact = (psf->norm_double == SF_TRUE) ? ((double) 0x80000000) : 1.0 ;
+
iptr = (int*) psf->buffer ;
- bufferlen = psf->sf.channels * ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (int) ;
+ bufferlen = SF_BUFFER_LEN / sizeof (int) ;
while (len > 0)
{ writecount = (len >= bufferlen) ? bufferlen : len ;
for (k = 0 ; k < writecount ; k++)
- iptr [k] = DOUBLE_TO_INT (ptr [index+k]) ;
+ iptr [k] = lrint (normfact * ptr [index+k]) ;
count = paf24_write (psf, ppaf24, iptr, writecount) ;
index += writecount ;
total += count ;
@@ -691,108 +785,4 @@
return total ;
} /* paf24_write_d */
-/*---------------------------------------------------------------------------
-*/
-static long
-paf24_seek (SF_PRIVATE *psf, long offset, int whence)
-{ PAF24_PRIVATE *ppaf24 ;
- int newblock, newsample ;
-
- if (! psf->fdata)
- return 0 ;
-
- ppaf24 = (PAF24_PRIVATE*) psf->fdata ;
-
- if (! (psf->blockwidth && psf->datalength && psf->dataoffset))
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
-
- switch (whence)
- { case SEEK_SET :
- if (offset < 0 || offset > ppaf24->blocks * ppaf24->samplesperblock)
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
- newblock = offset / ppaf24->samplesperblock ;
- newsample = offset % ppaf24->samplesperblock ;
- break ;
-
- case SEEK_CUR :
- if (psf->current + offset < 0 || psf->current + offset > ppaf24->blocks * ppaf24->samplesperblock)
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
- newblock = (psf->current + offset) / ppaf24->samplesperblock ;
- newsample = (psf->current + offset) % ppaf24->samplesperblock ;
- break ;
-
- case SEEK_END :
- if (offset > 0 || ppaf24->samplesperblock * ppaf24->blocks + offset < 0)
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
- newblock = (ppaf24->samplesperblock * ppaf24->blocks + offset) / ppaf24->samplesperblock ;
- newsample = (ppaf24->samplesperblock * ppaf24->blocks + offset) % ppaf24->samplesperblock ;
- break ;
-
- default :
- psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
-
- if (psf->mode == SF_MODE_READ)
- { fseek (psf->file, (int) (psf->dataoffset + newblock * ppaf24->blocksize), SEEK_SET) ;
- ppaf24->blockcount = newblock ;
- paf24_read_block (psf, ppaf24) ;
- ppaf24->samplecount = newsample ;
- }
- else
- { /* What to do about write??? */
- psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
-
- psf->current = newblock * ppaf24->samplesperblock + newsample ;
-
- return psf->current ;
-} /* paf24_seek */
-
-/*---------------------------------------------------------------------------
-*/
-
-static int
-paf24_close (SF_PRIVATE *psf)
-{ PAF24_PRIVATE *ppaf24 ;
-
- if (! psf->fdata)
- return 0 ;
-
- ppaf24 = (PAF24_PRIVATE*) psf->fdata ;
-
- if (psf->mode == SF_MODE_WRITE)
- { if (ppaf24->samplecount && ppaf24->samplecount < ppaf24->samplesperblock)
- paf24_write_block (psf, ppaf24) ;
- } ;
-
- free (psf->fdata) ;
- psf->fdata = NULL ;
-
- return 0 ;
-} /* paf24_close */
-
-/*---------------------------------------------------------------------------
-*/
-
-/*-
-static void
-endswap_paf_fmt (PAF_FMT *ppaf_fmt)
-{ ppaf_fmt->version = ENDSWAP_INT (ppaf_fmt->version) ;
- ppaf_fmt->endianness = ENDSWAP_INT (ppaf_fmt->endianness) ;
- ppaf_fmt->samplerate = ENDSWAP_INT (ppaf_fmt->samplerate) ;
- ppaf_fmt->format = ENDSWAP_INT (ppaf_fmt->format) ;
- ppaf_fmt->channels = ENDSWAP_INT (ppaf_fmt->channels) ;
- ppaf_fmt->source = ENDSWAP_INT (ppaf_fmt->source) ;
-} /+* endswap_paf_fmt *+/
--*/
--- a/common/libsndfile/src/pcm.c
+++ b/common/libsndfile/src/pcm.c
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 1999-2001 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
**
** 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
@@ -19,10 +19,10 @@
#include <unistd.h>
-#include "config.h"
#include "sndfile.h"
+#include "config.h"
#include "sfendian.h"
-#include "floatcast.h"
+#include "float_cast.h"
#include "common.h"
/* Important!!! Do not assume that sizeof (tribyte) == 3. Some compilers
@@ -33,284 +33,290 @@
{ char bytes [3] ;
} tribyte ;
-static int pcm_read_sc2s (SF_PRIVATE *psf, short *ptr, int len) ;
-static int pcm_read_uc2s (SF_PRIVATE *psf, short *ptr, int len) ;
-static int pcm_read_bes2s (SF_PRIVATE *psf, short *ptr, int len) ;
-static int pcm_read_les2s (SF_PRIVATE *psf, short *ptr, int len) ;
-static int pcm_read_bet2s (SF_PRIVATE *psf, short *ptr, int len) ;
-static int pcm_read_let2s (SF_PRIVATE *psf, short *ptr, int len) ;
-static int pcm_read_bei2s (SF_PRIVATE *psf, short *ptr, int len) ;
-static int pcm_read_lei2s (SF_PRIVATE *psf, short *ptr, int len) ;
+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 int pcm_read_sc2i (SF_PRIVATE *psf, int *ptr, int len) ;
-static int pcm_read_uc2i (SF_PRIVATE *psf, int *ptr, int len) ;
-static int pcm_read_bes2i (SF_PRIVATE *psf, int *ptr, int len) ;
-static int pcm_read_les2i (SF_PRIVATE *psf, int *ptr, int len) ;
-static int pcm_read_bet2i (SF_PRIVATE *psf, int *ptr, int len) ;
-static int pcm_read_let2i (SF_PRIVATE *psf, int *ptr, int len) ;
-static int pcm_read_bei2i (SF_PRIVATE *psf, int *ptr, int len) ;
-static int pcm_read_lei2i (SF_PRIVATE *psf, int *ptr, int 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 int pcm_read_sc2f (SF_PRIVATE *psf, float *ptr, int len) ;
-static int pcm_read_uc2f (SF_PRIVATE *psf, float *ptr, int len) ;
-static int pcm_read_bes2f (SF_PRIVATE *psf, float *ptr, int len) ;
-static int pcm_read_les2f (SF_PRIVATE *psf, float *ptr, int len) ;
-static int pcm_read_bet2f (SF_PRIVATE *psf, float *ptr, int len) ;
-static int pcm_read_let2f (SF_PRIVATE *psf, float *ptr, int len) ;
-static int pcm_read_bei2f (SF_PRIVATE *psf, float *ptr, int len) ;
-static int pcm_read_lei2f (SF_PRIVATE *psf, float *ptr, int 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 int pcm_read_sc2d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
-static int pcm_read_uc2d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
-static int pcm_read_bes2d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
-static int pcm_read_les2d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
-static int pcm_read_bet2d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
-static int pcm_read_let2d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
-static int pcm_read_bei2d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
-static int pcm_read_lei2d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+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 int pcm_write_s2sc (SF_PRIVATE *psf, short *ptr, int len) ;
-static int pcm_write_s2uc (SF_PRIVATE *psf, short *ptr, int len) ;
-static int pcm_write_s2bes (SF_PRIVATE *psf, short *ptr, int len) ;
-static int pcm_write_s2les (SF_PRIVATE *psf, short *ptr, int len) ;
-static int pcm_write_s2bet (SF_PRIVATE *psf, short *ptr, int len) ;
-static int pcm_write_s2let (SF_PRIVATE *psf, short *ptr, int len) ;
-static int pcm_write_s2bei (SF_PRIVATE *psf, short *ptr, int len) ;
-static int pcm_write_s2lei (SF_PRIVATE *psf, short *ptr, int len) ;
+static sf_count_t pcm_write_s2sc (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_s2uc (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_s2bes (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_s2les (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_s2bet (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_s2let (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_s2bei (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_s2lei (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
-static int pcm_write_i2sc (SF_PRIVATE *psf, int *ptr, int len) ;
-static int pcm_write_i2uc (SF_PRIVATE *psf, int *ptr, int len) ;
-static int pcm_write_i2bes (SF_PRIVATE *psf, int *ptr, int len) ;
-static int pcm_write_i2les (SF_PRIVATE *psf, int *ptr, int len) ;
-static int pcm_write_i2bet (SF_PRIVATE *psf, int *ptr, int len) ;
-static int pcm_write_i2let (SF_PRIVATE *psf, int *ptr, int len) ;
-static int pcm_write_i2bei (SF_PRIVATE *psf, int *ptr, int len) ;
-static int pcm_write_i2lei (SF_PRIVATE *psf, int *ptr, int len) ;
+static sf_count_t pcm_write_i2sc (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_i2uc (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_i2bes (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_i2les (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_i2bet (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_i2let (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_i2bei (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_i2lei (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
-static int pcm_write_f2sc (SF_PRIVATE *psf, float *ptr, int len) ;
-static int pcm_write_f2uc (SF_PRIVATE *psf, float *ptr, int len) ;
-static int pcm_write_f2bes (SF_PRIVATE *psf, float *ptr, int len) ;
-static int pcm_write_f2les (SF_PRIVATE *psf, float *ptr, int len) ;
-static int pcm_write_f2bet (SF_PRIVATE *psf, float *ptr, int len) ;
-static int pcm_write_f2let (SF_PRIVATE *psf, float *ptr, int len) ;
-static int pcm_write_f2bei (SF_PRIVATE *psf, float *ptr, int len) ;
-static int pcm_write_f2lei (SF_PRIVATE *psf, float *ptr, int len) ;
+static sf_count_t pcm_write_f2sc (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_f2uc (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_f2bes (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_f2les (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_f2bet (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_f2let (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_f2bei (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_f2lei (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
-static int pcm_write_d2sc (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
-static int pcm_write_d2uc (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
-static int pcm_write_d2bes (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
-static int pcm_write_d2les (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
-static int pcm_write_d2bet (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
-static int pcm_write_d2let (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
-static int pcm_write_d2bei (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
-static int pcm_write_d2lei (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+static sf_count_t pcm_write_d2sc (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_d2uc (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_d2bes (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_d2les (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_d2bet (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_d2let (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_d2bei (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
+static sf_count_t pcm_write_d2lei (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static void sc2s_array (signed char *buffer, unsigned int count, short *ptr, int index) ;
-static void uc2s_array (unsigned char *buffer, unsigned int count, short *ptr, int index) ;
-static void bet2s_array (tribyte *buffer, unsigned int count, short *ptr, int index) ;
-static void let2s_array (tribyte *buffer, unsigned int count, short *ptr, int index) ;
-static void bei2s_array (int *buffer, unsigned int count, short *ptr, int index) ;
-static void lei2s_array (int *buffer, unsigned int count, short *ptr, int index) ;
+static void sc2s_array (signed char *buffer, unsigned int count, short *ptr) ;
+static void uc2s_array (unsigned char *buffer, unsigned int count, short *ptr) ;
-static void sc2i_array (signed char *buffer, unsigned int count, int *ptr, int index) ;
-static void uc2i_array (unsigned char *buffer, unsigned int count, int *ptr, int index) ;
-static void bes2i_array (short *buffer, unsigned int count, int *ptr, int index) ;
-static void les2i_array (short *buffer, unsigned int count, int *ptr, int index) ;
-static void bet2i_array (tribyte *buffer, unsigned int count, int *ptr, int index) ;
-static void let2i_array (tribyte *buffer, unsigned int count, int *ptr, int index) ;
+static void bet2s_array (tribyte *buffer, unsigned int count, short *ptr) ;
+static void let2s_array (tribyte *buffer, unsigned int count, short *ptr) ;
+static void bei2s_array (int *buffer, unsigned int count, short *ptr) ;
+static void lei2s_array (int *buffer, unsigned int count, short *ptr) ;
-static void sc2f_array (signed char *buffer, unsigned int count, float *ptr, int index, float normfact) ;
-static void uc2f_array (unsigned char *buffer, unsigned int count, float *ptr, int index, float normfact) ;
-static void bes2f_array (short *buffer, unsigned int count, float *ptr, int index, float normfact) ;
-static void les2f_array (short *buffer, unsigned int count, float *ptr, int index, float normfact) ;
-static void bet2f_array (tribyte *buffer, unsigned int count, float *ptr, int index, float normfact) ;
-static void let2f_array (tribyte *buffer, unsigned int count, float *ptr, int index, float normfact) ;
-static void bei2f_array (int *buffer, unsigned int count, float *ptr, int index, float normfact) ;
-static void lei2f_array (int *buffer, unsigned int count, float *ptr, int index, float normfact) ;
+static void sc2i_array (signed char *buffer, unsigned int count, int *ptr) ;
+static void uc2i_array (unsigned char *buffer, unsigned int count, int *ptr) ;
+static void bes2i_array (short *buffer, unsigned int count, int *ptr) ;
+static void les2i_array (short *buffer, unsigned int count, int *ptr) ;
+static void bet2i_array (tribyte *buffer, unsigned int count, int *ptr) ;
+static void let2i_array (tribyte *buffer, unsigned int count, int *ptr) ;
-static void sc2d_array (signed char *buffer, unsigned int count, double *ptr, int index, double normfact) ;
-static void uc2d_array (unsigned char *buffer, unsigned int count, double *ptr, int index, double normfact) ;
-static void bes2d_array (short *buffer, unsigned int count, double *ptr, int index, double normfact) ;
-static void les2d_array (short *buffer, unsigned int count, double *ptr, int index, double normfact) ;
-static void bet2d_array (tribyte *buffer, unsigned int count, double *ptr, int index, double normfact) ;
-static void let2d_array (tribyte *buffer, unsigned int count, double *ptr, int index, double normfact) ;
-static void bei2d_array (int *buffer, unsigned int count, double *ptr, int index, double normfact) ;
-static void lei2d_array (int *buffer, unsigned int count, double *ptr, int index, double normfact) ;
+static void sc2f_array (signed char *buffer, unsigned int count, float *ptr, float normfact) ;
+static void uc2f_array (unsigned char *buffer, unsigned int count, float *ptr, float normfact) ;
+static void bes2f_array (short *buffer, unsigned int count, float *ptr, float normfact) ;
+static void les2f_array (short *buffer, unsigned int count, float *ptr, float normfact) ;
+static void bet2f_array (tribyte *buffer, unsigned int count, float *ptr, float normfact) ;
+static void let2f_array (tribyte *buffer, unsigned int count, float *ptr, float normfact) ;
+static void bei2f_array (int *buffer, unsigned int count, float *ptr, float normfact) ;
+static void lei2f_array (int *buffer, unsigned int count, float *ptr, float normfact) ;
+static void sc2d_array (signed char *buffer, unsigned int count, double *ptr, double normfact) ;
+static void uc2d_array (unsigned char *buffer, unsigned int count, double *ptr, double normfact) ;
+static void bes2d_array (short *buffer, unsigned int count, double *ptr, double normfact) ;
+static void les2d_array (short *buffer, unsigned int count, double *ptr, double normfact) ;
+static void bet2d_array (tribyte *buffer, unsigned int count, double *ptr, double normfact) ;
+static void let2d_array (tribyte *buffer, unsigned int count, double *ptr, double normfact) ;
+static void bei2d_array (int *buffer, unsigned int count, double *ptr, double normfact) ;
+static void lei2d_array (int *buffer, unsigned int count, double *ptr, double normfact) ;
-static void s2sc_array (short *ptr, int index, signed char *buffer, unsigned int count) ;
-static void s2uc_array (short *ptr, int index, unsigned char *buffer, unsigned int count) ;
-static void s2bet_array (short *ptr, int index, tribyte *buffer, unsigned int count) ;
-static void s2let_array (short *ptr, int index, tribyte *buffer, unsigned int count) ;
-static void s2bei_array (short *ptr, int index, int *buffer, unsigned int count) ;
-static void s2lei_array (short *ptr, int index, int *buffer, unsigned int count) ;
-static void i2sc_array (int *ptr, int index, signed char *buffer, unsigned int count) ;
-static void i2uc_array (int *ptr, int index, unsigned char *buffer, unsigned int count) ;
-static void i2bes_array (int *ptr, int index, short *buffer, unsigned int count) ;
-static void i2les_array (int *ptr, int index, short *buffer, unsigned int count) ;
-static void i2bet_array (int *ptr, int index, tribyte *buffer, unsigned int count) ;
-static void i2let_array (int *ptr, int index, tribyte *buffer, unsigned int count) ;
+static void s2sc_array (short *ptr, signed char *buffer, unsigned int count) ;
+static void s2uc_array (short *ptr, unsigned char *buffer, unsigned int count) ;
+static void s2bet_array (short *ptr, tribyte *buffer, unsigned int count) ;
+static void s2let_array (short *ptr, tribyte *buffer, unsigned int count) ;
+static void s2bei_array (short *ptr, int *buffer, unsigned int count) ;
+static void s2lei_array (short *ptr, int *buffer, unsigned int count) ;
-static void f2sc_array (float *ptr, int index, signed char *buffer, unsigned int count, float normfact) ;
-static void f2uc_array (float *ptr, int index, unsigned char *buffer, unsigned int count, float normfact) ;
-static void f2bes_array (float *ptr, int index, short *buffer, unsigned int count, float normfact) ;
-static void f2les_array (float *ptr, int index, short *buffer, unsigned int count, float normfact) ;
-static void f2bet_array (float *ptr, int index, tribyte *buffer, unsigned int count, float normfact) ;
-static void f2let_array (float *ptr, int index, tribyte *buffer, unsigned int count, float normfact) ;
-static void f2bei_array (float *ptr, int index, int *buffer, unsigned int count, float normfact) ;
-static void f2lei_array (float *ptr, int index, int *buffer, unsigned int count, float normfact) ;
+static void i2sc_array (int *ptr, signed char *buffer, unsigned int count) ;
+static void i2uc_array (int *ptr, unsigned char *buffer, unsigned int count) ;
+static void i2bes_array (int *ptr, short *buffer, unsigned int count) ;
+static void i2les_array (int *ptr, short *buffer, unsigned int count) ;
+static void i2bet_array (int *ptr, tribyte *buffer, unsigned int count) ;
+static void i2let_array (int *ptr, tribyte *buffer, unsigned int count) ;
-static void d2sc_array (double *ptr, int index, signed char *buffer, unsigned int count, double normfact) ;
-static void d2uc_array (double *ptr, int index, unsigned char *buffer, unsigned int count, double normfact) ;
-static void d2bes_array (double *ptr, int index, short *buffer, unsigned int count, double normfact) ;
-static void d2les_array (double *ptr, int index, short *buffer, unsigned int count, double normfact) ;
-static void d2bet_array (double *ptr, int index, tribyte *buffer, unsigned int count, double normfact) ;
-static void d2let_array (double *ptr, int index, tribyte *buffer, unsigned int count, double normfact) ;
-static void d2bei_array (double *ptr, int index, int *buffer, unsigned int count, double normfact) ;
-static void d2lei_array (double *ptr, int index, int *buffer, unsigned int count, double normfact) ;
+static void f2sc_array (float *ptr, signed char *buffer, unsigned int count, float normfact) ;
+static void f2uc_array (float *ptr, unsigned char *buffer, unsigned int count, float normfact) ;
+static void f2bes_array (float *ptr, short *buffer, unsigned int count, float normfact) ;
+static void f2les_array (float *ptr, short *buffer, unsigned int count, float normfact) ;
+static void f2bet_array (float *ptr, tribyte *buffer, unsigned int count, float normfact) ;
+static void f2let_array (float *ptr, tribyte *buffer, unsigned int count, float normfact) ;
+static void f2bei_array (float *ptr, int *buffer, unsigned int count, float normfact) ;
+static void f2lei_array (float *ptr, int *buffer, unsigned int count, float normfact) ;
+static void d2sc_array (double *ptr, signed char *buffer, unsigned int count, double normfact) ;
+static void d2uc_array (double *ptr, unsigned char *buffer, unsigned int count, double normfact) ;
+static void d2bes_array (double *ptr, short *buffer, unsigned int count, double normfact) ;
+static void d2les_array (double *ptr, short *buffer, unsigned int count, double normfact) ;
+static void d2bet_array (double *ptr, tribyte *buffer, unsigned int count, double normfact) ;
+static void d2let_array (double *ptr, tribyte *buffer, unsigned int count, double normfact) ;
+static void d2bei_array (double *ptr, int *buffer, unsigned int count, double normfact) ;
+static void d2lei_array (double *ptr, int *buffer, unsigned int count, double normfact) ;
+
/*-----------------------------------------------------------------------------------------------
*/
int
-pcm_read_init (SF_PRIVATE *psf)
+pcm_init (SF_PRIVATE *psf)
{
- if (psf->bytewidth == 1 && psf->chars == SF_CHARS_SIGNED)
- { psf->read_short = (func_short) pcm_read_sc2s ;
- psf->read_int = (func_int) pcm_read_sc2i ;
- psf->read_float = (func_float) pcm_read_sc2f ;
- psf->read_double = (func_double) pcm_read_sc2d ;
- return 0 ;
- }
- else if (psf->bytewidth == 1 && psf->chars == SF_CHARS_UNSIGNED)
- { psf->read_short = (func_short) pcm_read_uc2s ;
- psf->read_int = (func_int) pcm_read_uc2i ;
- psf->read_float = (func_float) pcm_read_uc2f ;
- psf->read_double = (func_double) pcm_read_uc2d ;
- return 0 ;
+ psf->blockwidth = psf->bytewidth * psf->sf.channels ;
+
+ if (psf->mode == SFM_READ || psf->mode == SFM_RDWR)
+ { switch (psf->bytewidth * 0x10000 + psf->endian + psf->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 : return SFE_UNIMPLEMENTED ;
+ } ;
} ;
-
- switch (psf->bytewidth * 0x10000 + psf->endian)
- { case (2 * 0x10000 + SF_ENDIAN_BIG) :
- psf->read_short = (func_short) pcm_read_bes2s ;
- psf->read_int = (func_int) pcm_read_bes2i ;
- psf->read_float = (func_float) pcm_read_bes2f ;
- psf->read_double = (func_double) pcm_read_bes2d ;
- break ;
- case (3 * 0x10000 + SF_ENDIAN_BIG) :
- psf->read_short = (func_short) pcm_read_bet2s ;
- psf->read_int = (func_int) pcm_read_bet2i ;
- psf->read_float = (func_float) pcm_read_bet2f ;
- psf->read_double = (func_double) pcm_read_bet2d ;
- break ;
- case (4 * 0x10000 + SF_ENDIAN_BIG) :
- psf->read_short = (func_short) pcm_read_bei2s ;
- psf->read_int = (func_int) pcm_read_bei2i ;
- psf->read_float = (func_float) pcm_read_bei2f ;
- psf->read_double = (func_double) pcm_read_bei2d ;
- break ;
-
- case (2 * 0x10000 + SF_ENDIAN_LITTLE) :
- psf->read_short = (func_short) pcm_read_les2s ;
- psf->read_int = (func_int) pcm_read_les2i ;
- psf->read_float = (func_float) pcm_read_les2f ;
- psf->read_double = (func_double) pcm_read_les2d ;
- break ;
- case (3 * 0x10000 + SF_ENDIAN_LITTLE) :
- psf->read_short = (func_short) pcm_read_let2s ;
- psf->read_int = (func_int) pcm_read_let2i ;
- psf->read_float = (func_float) pcm_read_let2f ;
- psf->read_double = (func_double) pcm_read_let2d ;
- break ;
- case (4 * 0x10000 + SF_ENDIAN_LITTLE) :
- psf->read_short = (func_short) pcm_read_lei2s ;
- psf->read_int = (func_int) pcm_read_lei2i ;
- psf->read_float = (func_float) pcm_read_lei2f ;
- psf->read_double = (func_double) pcm_read_lei2d ;
- break ;
- default : return SFE_UNIMPLEMENTED ;
- } ;
- return 0 ;
-} /* pcm_read_init */
-
-int
-pcm_write_init (SF_PRIVATE *psf)
-{
- if (psf->bytewidth == 1 && psf->chars == SF_CHARS_SIGNED)
- { psf->write_short = (func_short) pcm_write_s2sc ;
- psf->write_int = (func_int) pcm_write_i2sc ;
- psf->write_float = (func_float) pcm_write_f2sc ;
- psf->write_double = (func_double) pcm_write_d2sc ;
- return 0 ;
- }
- else if (psf->bytewidth == 1 && psf->chars == SF_CHARS_UNSIGNED)
- { psf->write_short = (func_short) pcm_write_s2uc ;
- psf->write_int = (func_int) pcm_write_i2uc ;
- psf->write_float = (func_float) pcm_write_f2uc ;
- psf->write_double = (func_double) pcm_write_d2uc ;
- return 0 ;
+ if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR)
+ { switch (psf->bytewidth * 0x10000 + psf->endian + psf->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 : return SFE_UNIMPLEMENTED ;
+ } ;
+
} ;
-
- switch (psf->bytewidth * 0x10000 + psf->endian)
- { case (2 * 0x10000 + SF_ENDIAN_BIG) :
- psf->write_short = (func_short) pcm_write_s2bes ;
- psf->write_int = (func_int) pcm_write_i2bes ;
- psf->write_float = (func_float) pcm_write_f2bes ;
- psf->write_double = (func_double) pcm_write_d2bes ;
- break ;
-
- case (3 * 0x10000 + SF_ENDIAN_BIG) :
- psf->write_short = (func_short) pcm_write_s2bet ;
- psf->write_int = (func_int) pcm_write_i2bet ;
- psf->write_float = (func_float) pcm_write_f2bet ;
- psf->write_double = (func_double) pcm_write_d2bet ;
- break ;
-
- case (4 * 0x10000 + SF_ENDIAN_BIG) :
- psf->write_short = (func_short) pcm_write_s2bei ;
- psf->write_int = (func_int) pcm_write_i2bei ;
- psf->write_float = (func_float) pcm_write_f2bei ;
- psf->write_double = (func_double) pcm_write_d2bei ;
- break ;
-
- case (2 * 0x10000 + SF_ENDIAN_LITTLE) :
- psf->write_short = (func_short) pcm_write_s2les ;
- psf->write_int = (func_int) pcm_write_i2les ;
- psf->write_float = (func_float) pcm_write_f2les ;
- psf->write_double = (func_double) pcm_write_d2les ;
- break ;
-
- case (3 * 0x10000 + SF_ENDIAN_LITTLE) :
- psf->write_short = (func_short) pcm_write_s2let ;
- psf->write_int = (func_int) pcm_write_i2let ;
- psf->write_float = (func_float) pcm_write_f2let ;
- psf->write_double = (func_double) pcm_write_d2let ;
- break ;
-
- case (4 * 0x10000 + SF_ENDIAN_LITTLE) :
- psf->write_short = (func_short) pcm_write_s2lei ;
- psf->write_int = (func_int) pcm_write_i2lei ;
- psf->write_float = (func_float) pcm_write_f2lei ;
- psf->write_double = (func_double) pcm_write_d2lei ;
- break ;
-
- default : return SFE_UNIMPLEMENTED ;
- } ;
+ psf->filelength = psf_get_filelen (psf->filedes) ;
+ psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset :
+ psf->filelength - psf->dataoffset ;
+ psf->sf.samples = psf->datalength / psf->blockwidth ;
+
return 0 ;
-} /* pcm_read_init */
+} /* pcm_init */
-
/*-----------------------------------------------------------------------------------------------
*/
-static int
-pcm_read_sc2s (SF_PRIVATE *psf, short *ptr, int len)
+static sf_count_t
+pcm_read_sc2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -317,8 +323,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- sc2s_array ((signed char*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ sc2s_array ((signed char*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -333,10 +339,10 @@
return total ;
} /* pcm_read_sc2s */
-static int
-pcm_read_uc2s (SF_PRIVATE *psf, short *ptr, int len)
+static sf_count_t
+pcm_read_uc2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -343,8 +349,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- uc2s_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ uc2s_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -359,13 +365,13 @@
return total ;
} /* pcm_read_uc2s */
-static int
-pcm_read_bes2s (SF_PRIVATE *psf, short *ptr, int len)
+static sf_count_t
+pcm_read_bes2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
{ int total ;
- total = fread (ptr, 1, len * sizeof (short), psf->file) ;
+ total = psf_fread (ptr, 1, len * sizeof (short), psf->filedes) ;
if (CPU_IS_LITTLE_ENDIAN)
- endswap_short_array (ptr, len) ;
+ endswap_short_array (ptr, len) ;
total /= psf->bytewidth ;
if (total < len)
@@ -374,13 +380,13 @@
return total ;
} /* pcm_read_bes2s */
-static int
-pcm_read_les2s (SF_PRIVATE *psf, short *ptr, int len)
+static sf_count_t
+pcm_read_les2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
{ int total ;
- total = fread (ptr, 1, len * sizeof (short), psf->file) ;
+ total = psf_fread (ptr, 1, len * sizeof (short), psf->filedes) ;
if (CPU_IS_BIG_ENDIAN)
- endswap_short_array (ptr, len) ;
+ endswap_short_array (ptr, len) ;
total /= psf->bytewidth ;
if (total < len)
@@ -389,10 +395,10 @@
return total ;
} /* pcm_read_les2s */
-static int
-pcm_read_bet2s (SF_PRIVATE *psf, short *ptr, int len)
+static sf_count_t
+pcm_read_bet2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -399,8 +405,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- bet2s_array ((tribyte*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ bet2s_array ((tribyte*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -415,10 +421,10 @@
return total ;
} /* pcm_read_bet2s */
-static int
-pcm_read_let2s (SF_PRIVATE *psf, short *ptr, int len)
+static sf_count_t
+pcm_read_let2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -425,8 +431,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- let2s_array ((tribyte*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ let2s_array ((tribyte*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -441,10 +447,10 @@
return total ;
} /* pcm_read_let2s */
-static int
-pcm_read_bei2s (SF_PRIVATE *psf, short *ptr, int len)
+static sf_count_t
+pcm_read_bei2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -451,8 +457,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- bei2s_array ((int*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ bei2s_array ((int*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -467,10 +473,10 @@
return total ;
} /* pcm_read_bei2s */
-static int
-pcm_read_lei2s (SF_PRIVATE *psf, short *ptr, int len)
+static sf_count_t
+pcm_read_lei2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -477,8 +483,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- lei2s_array ((int*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ lei2s_array ((int*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -496,10 +502,10 @@
/*-----------------------------------------------------------------------------------------------
*/
-static int
-pcm_read_sc2i (SF_PRIVATE *psf, int *ptr, int len)
+static sf_count_t
+pcm_read_sc2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -506,8 +512,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- sc2i_array ((signed char*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ sc2i_array ((signed char*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -522,10 +528,10 @@
return total ;
} /* pcm_read_sc2i */
-static int
-pcm_read_uc2i (SF_PRIVATE *psf, int *ptr, int len)
+static sf_count_t
+pcm_read_uc2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -532,8 +538,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- uc2i_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ uc2i_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -548,10 +554,10 @@
return total ;
} /* pcm_read_uc2i */
-static int
-pcm_read_bes2i (SF_PRIVATE *psf, int *ptr, int len)
+static sf_count_t
+pcm_read_bes2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -558,8 +564,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- bes2i_array ((short*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ bes2i_array ((short*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -574,10 +580,10 @@
return total ;
} /* pcm_read_bes2i */
-static int
-pcm_read_les2i (SF_PRIVATE *psf, int *ptr, int len)
+static sf_count_t
+pcm_read_les2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -584,8 +590,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- les2i_array ((short*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ les2i_array ((short*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -600,10 +606,10 @@
return total ;
} /* pcm_read_les2i */
-static int
-pcm_read_bet2i (SF_PRIVATE *psf, int *ptr, int len)
+static sf_count_t
+pcm_read_bet2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -610,8 +616,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- bet2i_array ((tribyte*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ bet2i_array ((tribyte*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -626,10 +632,10 @@
return total ;
} /* pcm_read_bet2i */
-static int
-pcm_read_let2i (SF_PRIVATE *psf, int *ptr, int len)
+static sf_count_t
+pcm_read_let2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -636,8 +642,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- let2i_array ((tribyte*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ let2i_array ((tribyte*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -652,11 +658,11 @@
return total ;
} /* pcm_read_let2i */
-static int
-pcm_read_bei2i (SF_PRIVATE *psf, int *ptr, int len)
+static sf_count_t
+pcm_read_bei2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
{ int total ;
- total = fread (ptr, 1, len * sizeof (int), psf->file) ;
+ total = psf_fread (ptr, 1, len * sizeof (int), psf->filedes) ;
if (CPU_IS_LITTLE_ENDIAN)
endswap_int_array (ptr, len) ;
@@ -667,11 +673,11 @@
return total ;
} /* pcm_read_bei2i */
-static int
-pcm_read_lei2i (SF_PRIVATE *psf, int *ptr, int len)
+static sf_count_t
+pcm_read_lei2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
{ int total ;
- total = fread (ptr, 1, len * sizeof (int), psf->file) ;
+ total = psf_fread (ptr, 1, len * sizeof (int), psf->filedes) ;
if (CPU_IS_BIG_ENDIAN)
endswap_int_array (ptr, len) ;
@@ -685,10 +691,10 @@
/*-----------------------------------------------------------------------------------------------
*/
-static int
-pcm_read_sc2f (SF_PRIVATE *psf, float *ptr, int len)
+static sf_count_t
+pcm_read_sc2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
float normfact ;
@@ -698,8 +704,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- sc2f_array ((signed char*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ sc2f_array ((signed char*) (psf->buffer), thisread / psf->bytewidth, ptr + index, normfact) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -714,10 +720,10 @@
return total ;
} /* pcm_read_sc2f */
-static int
-pcm_read_uc2f (SF_PRIVATE *psf, float *ptr, int len)
+static sf_count_t
+pcm_read_uc2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
float normfact ;
@@ -727,8 +733,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- uc2f_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ uc2f_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr + index, normfact) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -743,10 +749,10 @@
return total ;
} /* pcm_read_uc2f */
-static int
-pcm_read_bes2f (SF_PRIVATE *psf, float *ptr, int len)
+static sf_count_t
+pcm_read_bes2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
float normfact ;
@@ -756,8 +762,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- bes2f_array ((short*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ bes2f_array ((short*) (psf->buffer), thisread / psf->bytewidth, ptr + index, normfact) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -772,10 +778,10 @@
return total ;
} /* pcm_read_bes2f */
-static int
-pcm_read_les2f (SF_PRIVATE *psf, float *ptr, int len)
+static sf_count_t
+pcm_read_les2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
float normfact ;
@@ -785,8 +791,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- les2f_array ((short*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ les2f_array ((short*) (psf->buffer), thisread / psf->bytewidth, ptr + index, normfact) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -801,10 +807,10 @@
return total ;
} /* pcm_read_les2f */
-static int
-pcm_read_bet2f (SF_PRIVATE *psf, float *ptr, int len)
+static sf_count_t
+pcm_read_bet2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
float normfact ;
@@ -814,8 +820,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- bet2f_array ((tribyte*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ bet2f_array ((tribyte*) (psf->buffer), thisread / psf->bytewidth, ptr + index, normfact) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -830,10 +836,10 @@
return total ;
} /* pcm_read_bet2f */
-static int
-pcm_read_let2f (SF_PRIVATE *psf, float *ptr, int len)
+static sf_count_t
+pcm_read_let2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
float normfact ;
@@ -843,8 +849,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- let2f_array ((tribyte*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ let2f_array ((tribyte*) (psf->buffer), thisread / psf->bytewidth, ptr + index, normfact) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -859,10 +865,10 @@
return total ;
} /* pcm_read_let2f */
-static int
-pcm_read_bei2f (SF_PRIVATE *psf, float *ptr, int len)
+static sf_count_t
+pcm_read_bei2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
float normfact ;
@@ -872,8 +878,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- bei2f_array ((int*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ bei2f_array ((int*) (psf->buffer), thisread / psf->bytewidth, ptr + index, normfact) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -888,10 +894,10 @@
return total ;
} /* pcm_read_bei2f */
-static int
-pcm_read_lei2f (SF_PRIVATE *psf, float *ptr, int len)
+static sf_count_t
+pcm_read_lei2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
float normfact ;
@@ -901,8 +907,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- lei2f_array ((int*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ lei2f_array ((int*) (psf->buffer), thisread / psf->bytewidth, ptr + index, normfact) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -920,21 +926,21 @@
/*-----------------------------------------------------------------------------------------------
*/
-static int
-pcm_read_sc2d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+static sf_count_t
+pcm_read_sc2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
double normfact ;
- normfact = (normalize ? 1.0 / ((double) 0x80) : 1.0) ;
+ normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80) : 1.0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- sc2d_array ((signed char*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ sc2d_array ((signed char*) (psf->buffer), thisread / psf->bytewidth, ptr + index, normfact) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -949,21 +955,21 @@
return total ;
} /* pcm_read_sc2d */
-static int
-pcm_read_uc2d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+static sf_count_t
+pcm_read_uc2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
double normfact ;
- normfact = (normalize ? 1.0 / ((double) 0x80) : 1.0) ;
+ normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80) : 1.0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- uc2d_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ uc2d_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr + index, normfact) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -978,21 +984,21 @@
return total ;
} /* pcm_read_uc2d */
-static int
-pcm_read_bes2d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+static sf_count_t
+pcm_read_bes2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
double normfact ;
- normfact = (normalize ? 1.0 / ((double) 0x8000) : 1.0) ;
+ normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- bes2d_array ((short*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ bes2d_array ((short*) (psf->buffer), thisread / psf->bytewidth, ptr + index, normfact) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -1007,21 +1013,21 @@
return total ;
} /* pcm_read_bes2d */
-static int
-pcm_read_les2d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+static sf_count_t
+pcm_read_les2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
double normfact ;
- normfact = (normalize ? 1.0 / ((double) 0x8000) : 1.0) ;
+ normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x8000) : 1.0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- les2d_array ((short*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ les2d_array ((short*) (psf->buffer), thisread / psf->bytewidth, ptr + index, normfact) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -1036,21 +1042,21 @@
return total ;
} /* pcm_read_les2d */
-static int
-pcm_read_bet2d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+static sf_count_t
+pcm_read_bet2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
double normfact ;
- normfact = (normalize ? 1.0 / ((double) 0x800000) : 1.0) ;
+ normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x800000) : 1.0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- bet2d_array ((tribyte*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ bet2d_array ((tribyte*) (psf->buffer), thisread / psf->bytewidth, ptr + index, normfact) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -1065,21 +1071,21 @@
return total ;
} /* pcm_read_bet2d */
-static int
-pcm_read_let2d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+static sf_count_t
+pcm_read_let2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
double normfact ;
- normfact = (normalize ? 1.0 / ((double) 0x800000) : 1.0) ;
+ normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x800000) : 1.0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- let2d_array ((tribyte*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ let2d_array ((tribyte*) (psf->buffer), thisread / psf->bytewidth, ptr + index, normfact) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -1094,21 +1100,21 @@
return total ;
} /* pcm_read_let2d */
-static int
-pcm_read_bei2d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+static sf_count_t
+pcm_read_bei2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
double normfact ;
- normfact = (normalize ? 1.0 / ((double) 0x80000000) : 1.0) ;
+ normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80000000) : 1.0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- bei2d_array ((int*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ bei2d_array ((int*) (psf->buffer), thisread / psf->bytewidth, ptr + index, normfact) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -1123,21 +1129,21 @@
return total ;
} /* pcm_read_bei2d */
-static int
-pcm_read_lei2d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+static sf_count_t
+pcm_read_lei2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
{ unsigned int readcount, thisread ;
- int bytecount, bufferlen ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
double normfact ;
- normfact = (normalize ? 1.0 / ((double) 0x80000000) : 1.0) ;
+ normfact = (psf->norm_double == SF_TRUE) ? 1.0 / ((double) 0x80000000) : 1.0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- lei2d_array ((int*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ lei2d_array ((int*) (psf->buffer), thisread / psf->bytewidth, ptr + index, normfact) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -1157,10 +1163,10 @@
**===============================================================================================
*/
-static int
-pcm_write_s2sc (SF_PRIVATE *psf, short *ptr, int len)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_s2sc (SF_PRIVATE *psf, short *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -1167,8 +1173,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- s2sc_array (ptr, index, (signed char*) (psf->buffer), writecount / psf->bytewidth) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ s2sc_array (ptr + index, (signed char*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1183,10 +1189,10 @@
return total ;
} /* pcm_write_s2sc */
-static int
-pcm_write_s2uc (SF_PRIVATE *psf, short *ptr, int len)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_s2uc (SF_PRIVATE *psf, short *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -1193,8 +1199,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- s2uc_array (ptr, index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ s2uc_array (ptr + index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1209,13 +1215,13 @@
return total ;
} /* pcm_write_s2uc */
-static int
-pcm_write_s2bes (SF_PRIVATE *psf, short *ptr, int len)
+static sf_count_t
+pcm_write_s2bes (SF_PRIVATE *psf, short *ptr, sf_count_t len)
{ int total ;
if (CPU_IS_LITTLE_ENDIAN)
endswap_short_array (ptr, len) ;
- total = fwrite (ptr, 1, len * sizeof (short), psf->file) ;
+ total = psf_fwrite (ptr, 1, len * sizeof (short), psf->filedes) ;
if (CPU_IS_LITTLE_ENDIAN)
endswap_short_array (ptr, len) ;
@@ -1226,13 +1232,13 @@
return total ;
} /* pcm_write_s2bes */
-static int
-pcm_write_s2les (SF_PRIVATE *psf, short *ptr, int len)
+static sf_count_t
+pcm_write_s2les (SF_PRIVATE *psf, short *ptr, sf_count_t len)
{ int total ;
if (CPU_IS_BIG_ENDIAN)
endswap_short_array (ptr, len) ;
- total = fwrite (ptr, 1, len * sizeof (short), psf->file) ;
+ total = psf_fwrite (ptr, 1, len * sizeof (short), psf->filedes) ;
if (CPU_IS_BIG_ENDIAN)
endswap_short_array (ptr, len) ;
@@ -1243,10 +1249,10 @@
return total ;
} /* pcm_write_s2les */
-static int
-pcm_write_s2bet (SF_PRIVATE *psf, short *ptr, int len)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_s2bet (SF_PRIVATE *psf, short *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -1253,8 +1259,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- s2bet_array (ptr, index, (tribyte*) (psf->buffer), writecount / psf->bytewidth) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ s2bet_array (ptr + index, (tribyte*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1269,10 +1275,10 @@
return total ;
} /* pcm_write_s2bet */
-static int
-pcm_write_s2let (SF_PRIVATE *psf, short *ptr, int len)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_s2let (SF_PRIVATE *psf, short *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -1279,8 +1285,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- s2let_array (ptr, index, (tribyte*) (psf->buffer), writecount / psf->bytewidth) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ s2let_array (ptr + index, (tribyte*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1295,10 +1301,10 @@
return total ;
} /* pcm_write_s2let */
-static int
-pcm_write_s2bei (SF_PRIVATE *psf, short *ptr, int len)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_s2bei (SF_PRIVATE *psf, short *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -1305,8 +1311,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- s2bei_array (ptr, index, (int*) (psf->buffer), writecount / psf->bytewidth) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ s2bei_array (ptr + index, (int*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1321,10 +1327,10 @@
return total ;
} /* pcm_write_s2bei */
-static int
-pcm_write_s2lei (SF_PRIVATE *psf, short *ptr, int len)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_s2lei (SF_PRIVATE *psf, short *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -1331,8 +1337,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- s2lei_array (ptr, index, (int*) (psf->buffer), writecount / psf->bytewidth) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ s2lei_array (ptr + index, (int*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1350,10 +1356,10 @@
/*-----------------------------------------------------------------------------------------------
*/
-static int
-pcm_write_i2sc (SF_PRIVATE *psf, int *ptr, int len)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_i2sc (SF_PRIVATE *psf, int *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -1360,8 +1366,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- i2sc_array (ptr, index, (signed char*) (psf->buffer), writecount / psf->bytewidth) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ i2sc_array (ptr + index, (signed char*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1376,10 +1382,10 @@
return total ;
} /* pcm_write_i2sc */
-static int
-pcm_write_i2uc (SF_PRIVATE *psf, int *ptr, int len)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_i2uc (SF_PRIVATE *psf, int *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -1386,8 +1392,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- i2uc_array (ptr, index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ i2uc_array (ptr + index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1402,10 +1408,10 @@
return total ;
} /* pcm_write_i2uc */
-static int
-pcm_write_i2bes (SF_PRIVATE *psf, int *ptr, int len)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_i2bes (SF_PRIVATE *psf, int *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -1412,8 +1418,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- i2bes_array (ptr, index, (short*) (psf->buffer), writecount / psf->bytewidth) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ i2bes_array (ptr + index, (short*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1428,10 +1434,10 @@
return total ;
} /* pcm_write_i2bes */
-static int
-pcm_write_i2les (SF_PRIVATE *psf, int *ptr, int len)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_i2les (SF_PRIVATE *psf, int *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -1438,8 +1444,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- i2les_array (ptr, index, (short*) (psf->buffer), writecount / psf->bytewidth) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ i2les_array (ptr + index, (short*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1454,10 +1460,10 @@
return total ;
} /* pcm_write_i2les */
-static int
-pcm_write_i2bet (SF_PRIVATE *psf, int *ptr, int len)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_i2bet (SF_PRIVATE *psf, int *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -1464,8 +1470,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- i2bet_array (ptr, index, (tribyte*) (psf->buffer), writecount / psf->bytewidth) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ i2bet_array (ptr + index, (tribyte*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1480,10 +1486,10 @@
return total ;
} /* pcm_write_i2bet */
-static int
-pcm_write_i2let (SF_PRIVATE *psf, int *ptr, int len)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_i2let (SF_PRIVATE *psf, int *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
@@ -1490,8 +1496,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- i2let_array (ptr, index, (tribyte*) (psf->buffer), writecount / psf->bytewidth) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ i2let_array (ptr + index, (tribyte*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1506,15 +1512,17 @@
return total ;
} /* pcm_write_i2les */
-static int
-pcm_write_i2bei (SF_PRIVATE *psf, int *ptr, int len)
+static sf_count_t
+pcm_write_i2bei (SF_PRIVATE *psf, int *ptr, sf_count_t len)
{ int total ;
- if (CPU_IS_LITTLE_ENDIAN)
+ if (CPU_IS_BIG_ENDIAN)
+ total = psf_fwrite (ptr, 1, len * sizeof (int), psf->filedes) ;
+ else
+ { endswap_int_array (ptr, len) ;
+ total = psf_fwrite (ptr, 1, len * sizeof (int), psf->filedes) ;
endswap_int_array (ptr, len) ;
- total = fwrite (ptr, 1, len * sizeof (int), psf->file) ;
- if (CPU_IS_LITTLE_ENDIAN)
- endswap_int_array (ptr, len) ;
+ } ;
total /= psf->bytewidth ;
if (total < len)
@@ -1523,15 +1531,17 @@
return total ;
} /* pcm_write_i2bei */
-static int
-pcm_write_i2lei (SF_PRIVATE *psf, int *ptr, int len)
+static sf_count_t
+pcm_write_i2lei (SF_PRIVATE *psf, int *ptr, sf_count_t len)
{ int total ;
- if (CPU_IS_BIG_ENDIAN)
+ if (CPU_IS_LITTLE_ENDIAN)
+ total = psf_fwrite (ptr, 1, len * sizeof (int), psf->filedes) ;
+ else
+ { endswap_int_array (ptr, len) ;
+ total = psf_fwrite (ptr, 1, len * sizeof (int), psf->filedes) ;
endswap_int_array (ptr, len) ;
- total = fwrite (ptr, 1, len * sizeof (int), psf->file) ;
- if (CPU_IS_BIG_ENDIAN)
- endswap_int_array (ptr, len) ;
+ } ;
total /= psf->bytewidth ;
if (total < len)
@@ -1543,10 +1553,10 @@
/*-----------------------------------------------------------------------------------------------
*/
-static int
-pcm_write_f2sc (SF_PRIVATE *psf, float *ptr, int len)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_f2sc (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
float normfact ;
@@ -1556,8 +1566,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- f2sc_array (ptr, index, (signed char*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ f2sc_array (ptr + index, (signed char*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1572,10 +1582,10 @@
return total ;
} /* pcm_write_f2sc */
-static int
-pcm_write_f2uc (SF_PRIVATE *psf, float *ptr, int len)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_f2uc (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
float normfact ;
@@ -1585,8 +1595,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- f2uc_array (ptr, index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ f2uc_array (ptr + index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1601,10 +1611,10 @@
return total ;
} /* pcm_write_f2uc */
-static int
-pcm_write_f2bes (SF_PRIVATE *psf, float *ptr, int len)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_f2bes (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
float normfact ;
@@ -1614,8 +1624,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- f2bes_array (ptr, index, (short*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ f2bes_array (ptr + index, (short*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1630,10 +1640,10 @@
return total ;
} /* pcm_write_f2bes */
-static int
-pcm_write_f2les (SF_PRIVATE *psf, float *ptr, int len)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_f2les (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
float normfact ;
@@ -1643,8 +1653,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- f2les_array (ptr, index, (short*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ f2les_array (ptr + index, (short*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1659,10 +1669,10 @@
return total ;
} /* pcm_write_f2les */
-static int
-pcm_write_f2let (SF_PRIVATE *psf, float *ptr, int len)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_f2let (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
float normfact ;
@@ -1672,8 +1682,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- f2let_array (ptr, index, (tribyte*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ f2let_array (ptr + index, (tribyte*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1688,10 +1698,10 @@
return total ;
} /* pcm_write_f2les */
-static int
-pcm_write_f2bet (SF_PRIVATE *psf, float *ptr, int len)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_f2bet (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
float normfact ;
@@ -1702,8 +1712,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- f2bet_array (ptr, index, (tribyte*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ f2bet_array (ptr + index, (tribyte*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1718,10 +1728,10 @@
return total ;
} /* pcm_write_f2bes */
-static int
-pcm_write_f2bei (SF_PRIVATE *psf, float *ptr, int len)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_f2bei (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
float normfact ;
@@ -1732,8 +1742,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- f2bei_array (ptr, index, (int*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ f2bei_array (ptr + index, (int*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1748,10 +1758,10 @@
return total ;
} /* pcm_write_f2bei */
-static int
-pcm_write_f2lei (SF_PRIVATE *psf, float *ptr, int len)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_f2lei (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
float normfact ;
@@ -1761,8 +1771,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- f2lei_array (ptr, index, (int*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ f2lei_array (ptr + index, (int*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1780,21 +1790,21 @@
/*-----------------------------------------------------------------------------------------------
*/
-static int
-pcm_write_d2sc (SF_PRIVATE *psf, double *ptr, int len, int normalize)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_d2sc (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
double normfact ;
- normfact = (normalize ? ((double) 0x80) : 1.0) ;
+ normfact = (psf->norm_double == SF_TRUE) ? ((double) 0x80) : 1.0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- d2sc_array (ptr, index, (signed char*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ d2sc_array (ptr + index, (signed char*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1809,21 +1819,21 @@
return total ;
} /* pcm_write_d2sc */
-static int
-pcm_write_d2uc (SF_PRIVATE *psf, double *ptr, int len, int normalize)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_d2uc (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
double normfact ;
- normfact = (normalize ? ((double) 0x80) : 1.0) ;
+ normfact = (psf->norm_double == SF_TRUE) ? ((double) 0x80) : 1.0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- d2uc_array (ptr, index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ d2uc_array (ptr + index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1838,21 +1848,21 @@
return total ;
} /* pcm_write_d2uc */
-static int
-pcm_write_d2bes (SF_PRIVATE *psf, double *ptr, int len, int normalize)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_d2bes (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
double normfact ;
- normfact = (normalize ? ((double) 0x8000) : 1.0) ;
+ normfact = (psf->norm_double == SF_TRUE) ? ((double) 0x8000) : 1.0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- d2bes_array (ptr, index, (short*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ d2bes_array (ptr + index, (short*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1867,21 +1877,21 @@
return total ;
} /* pcm_write_d2bes */
-static int
-pcm_write_d2les (SF_PRIVATE *psf, double *ptr, int len, int normalize)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_d2les (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
double normfact ;
- normfact = (normalize ? ((double) 0x8000) : 1.0) ;
+ normfact = (psf->norm_double == SF_TRUE) ? ((double) 0x8000) : 1.0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- d2les_array (ptr, index, (short*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ d2les_array (ptr + index, (short*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1896,21 +1906,21 @@
return total ;
} /* pcm_write_d2les */
-static int
-pcm_write_d2let (SF_PRIVATE *psf, double *ptr, int len, int normalize)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_d2let (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
double normfact ;
- normfact = (normalize ? ((double) 0x800000) : 1.0) ;
+ normfact = (psf->norm_double == SF_TRUE) ? ((double) 0x800000) : 1.0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- d2let_array (ptr, index, (tribyte*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ d2let_array (ptr + index, (tribyte*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1925,21 +1935,21 @@
return total ;
} /* pcm_write_d2les */
-static int
-pcm_write_d2bet (SF_PRIVATE *psf, double *ptr, int len, int normalize)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_d2bet (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
double normfact ;
- normfact = (normalize ? ((double) 0x800000) : 1.0) ;
+ normfact = (psf->norm_double == SF_TRUE) ? ((double) 0x800000) : 1.0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- d2bet_array (ptr, index, (tribyte*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ d2bet_array (ptr + index, (tribyte*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1954,21 +1964,21 @@
return total ;
} /* pcm_write_d2bes */
-static int
-pcm_write_d2bei (SF_PRIVATE *psf, double *ptr, int len, int normalize)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_d2bei (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
double normfact ;
- normfact = (normalize ? ((double) 0x80000000) : 1.0) ;
+ normfact = (psf->norm_double == SF_TRUE) ? ((double) 0x80000000) : 1.0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- d2bei_array (ptr, index, (int*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ d2bei_array (ptr + index, (int*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -1983,21 +1993,21 @@
return total ;
} /* pcm_write_d2bei */
-static int
-pcm_write_d2lei (SF_PRIVATE *psf, double *ptr, int len, int normalize)
-{ unsigned int writecount, thiswrite ;
- int bytecount, bufferlen ;
+static sf_count_t
+pcm_write_d2lei (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite ;
+ sf_count_t bytecount, bufferlen ;
int index = 0, total = 0 ;
double normfact ;
- normfact = (normalize ? ((double) 0x80000000) : 1.0) ;
+ normfact = (psf->norm_double == SF_TRUE) ? ((double) 0x80000000) : 1.0 ;
bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- d2lei_array (ptr, index, (int*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ d2lei_array (ptr + index, (int*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -2016,72 +2026,66 @@
*/
static void
-sc2s_array (signed char *buffer, unsigned int count, short *ptr, int index)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { ptr [index] = ((short) buffer [k]) ;
- index ++ ;
+sc2s_array (signed char *buffer, unsigned int count, short *ptr)
+{ while (count)
+ { count -- ;
+ ptr [count] = buffer [count] << 8 ;
} ;
} /* sc2s_array */
static void
-uc2s_array (unsigned char *buffer, unsigned int count, short *ptr, int index)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { ptr [index] = ((((short) buffer [k]) - 128) % 256) ;
- index ++ ;
+uc2s_array (unsigned char *buffer, unsigned int count, short *ptr)
+{ while (count)
+ { count -- ;
+ ptr [count] = (((short) buffer [count]) - 0x80) << 8 ;
} ;
} /* uc2s_array */
static void
-bet2s_array (tribyte *buffer, unsigned int count, short *ptr, int index)
+bet2s_array (tribyte *buffer, unsigned int count, short *ptr)
{ unsigned char *cptr ;
- int k ;
- int value;
- cptr = (unsigned char*) buffer ;
- for (k = 0 ; k < count ; k++)
- { value = (cptr [0] << 24) + (cptr [1] << 16) + (cptr [2] << 8) ;
- value = BE2H_INT (value) ;
- ptr [index] = (short) (value >> 16) ;
- index ++ ;
- cptr += 3 ;
+
+ cptr = ((unsigned char*) buffer) + 3 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 3 ;
+ ptr [count] = (cptr [0] << 8) + cptr [1] ;
} ;
} /* bet2s_array */
static void
-let2s_array (tribyte *buffer, unsigned int count, short *ptr, int index)
+let2s_array (tribyte *buffer, unsigned int count, short *ptr)
{ unsigned char *cptr ;
- int k ;
- int value;
- cptr = (unsigned char*) buffer ;
- for (k = 0 ; k < count ; k++)
- { value = (cptr [0] << 8) + (cptr [1] << 16) + (cptr [2] << 24) ;
- value = LE2H_INT (value) ;
- ptr [index] = (short) (value >> 16) ;
- index ++ ;
- cptr += 3 ;
+
+ cptr = ((unsigned char*) buffer) + 3 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 3 ;
+ ptr [count] = cptr [1] + (cptr [2] << 8) ;
} ;
} /* let2s_array */
static void
-bei2s_array (int *buffer, unsigned int count, short *ptr, int index)
-{ int k ;
- int value ;
- for (k = 0 ; k < count ; k++)
- { value = BE2H_INT (buffer [k]) ;
- ptr [index] = (short) (value >> 16) ;
- index ++ ;
+bei2s_array (int *buffer, unsigned int count, short *ptr)
+{ unsigned char *cptr ;
+
+ cptr = ((unsigned char*) buffer) + 4 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 4 ;
+ ptr [count] = (cptr [0] << 8) + cptr [1] ;
} ;
} /* bei2s_array */
static void
-lei2s_array (int *buffer, unsigned int count, short *ptr, int index)
-{ int k ;
- int value ;
- for (k = 0 ; k < count ; k++)
- { value = LE2H_INT (buffer [k]) ;
- ptr [index] = (short) (value >> 16) ;
- index ++ ;
+lei2s_array (int *buffer, unsigned int count, short *ptr)
+{ unsigned char *cptr ;
+
+ cptr = ((unsigned char*) buffer) + 4 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 4 ;
+ ptr [count] = cptr [2] + (cptr [3] << 8) ;
} ;
} /* lei2s_array */
@@ -2090,70 +2094,66 @@
*/
static void
-sc2i_array (signed char *buffer, unsigned int count, int *ptr, int index)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { ptr [index] = ((int) buffer [k]) ;
- index ++ ;
+sc2i_array (signed char *buffer, unsigned int count, int *ptr)
+{ while (count)
+ { count -- ;
+ ptr [count] = ((int) buffer [count]) << 24 ;
} ;
} /* sc2i_array */
static void
-uc2i_array (unsigned char *buffer, unsigned int count, int *ptr, int index)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { ptr [index] = ((((int) buffer [k]) - 128) % 256) ;
- index ++ ;
+uc2i_array (unsigned char *buffer, unsigned int count, int *ptr)
+{ while (count)
+ { count -- ;
+ ptr [count] = (((int) buffer [count]) - 128) << 24 ;
} ;
} /* uc2i_array */
static void
-bes2i_array (short *buffer, unsigned int count, int *ptr, int index)
-{ int k ;
- short value ;
- for (k = 0 ; k < count ; k++)
- { value = BE2H_SHORT (buffer [k]) ;
- ptr [index] = ((int) value) ;
- index ++ ;
+bes2i_array (short *buffer, unsigned int count, int *ptr)
+{ unsigned char *cptr ;
+
+ cptr = ((unsigned char*) buffer) + 2 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 2 ;
+ ptr [count] = (cptr [0] << 24) + (cptr [1] << 16) ;
} ;
} /* bes2i_array */
static void
-les2i_array (short *buffer, unsigned int count, int *ptr, int index)
-{ int k ;
- short value ;
- for (k = 0 ; k < count ; k++)
- { value = LE2H_SHORT (buffer [k]) ;
- ptr [index] = ((int) value) ;
- index ++ ;
+les2i_array (short *buffer, unsigned int count, int *ptr)
+{ unsigned char *cptr ;
+
+ cptr = ((unsigned char*) buffer) + 2 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 2 ;
+ ptr [count] = (cptr [0] << 16) + (cptr [1] << 24) ;
} ;
} /* les2i_array */
static void
-bet2i_array (tribyte *buffer, unsigned int count, int *ptr, int index)
+bet2i_array (tribyte *buffer, unsigned int count, int *ptr)
{ unsigned char *cptr ;
- int k ;
- int value;
- cptr = (unsigned char*) buffer ;
- for (k = 0 ; k < count ; k++)
- { value = (cptr [0] << 24) + (cptr [1] << 16) + (cptr [2] << 8) ;
- ptr [index] = value / 256 ;
- index ++ ;
- cptr += 3 ;
+
+ cptr = ((unsigned char*) buffer) + 3 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 3 ;
+ ptr [count] = (cptr [0] << 24) + (cptr [1] << 16) + (cptr [2] << 8) ;
} ;
} /* bet2i_array */
static void
-let2i_array (tribyte *buffer, unsigned int count, int *ptr, int index)
+let2i_array (tribyte *buffer, unsigned int count, int *ptr)
{ unsigned char *cptr ;
- int k ;
- int value;
- cptr = (unsigned char*) buffer ;
- for (k = 0 ; k < count ; k++)
- { value = (cptr [0] << 8) + (cptr [1] << 16) + (cptr [2] << 24) ;
- ptr [index] = value / 256 ;
- index ++ ;
- cptr += 3 ;
+
+ cptr = ((unsigned char*) buffer) + 3 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 3 ;
+ ptr [count] = (cptr [0] << 8) + (cptr [1] << 16) + (cptr [2] << 24) ;
} ;
} /* let2i_array */
@@ -2162,186 +2162,205 @@
static void
-sc2f_array (signed char *buffer, unsigned int count, float *ptr, int index, float normfact)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { ptr [index] = ((float) buffer [k]) * normfact ;
- index ++ ;
+sc2f_array (signed char *buffer, unsigned int count, float *ptr, float normfact)
+{ while (count)
+ { count -- ;
+ ptr [count] = ((float) buffer [count]) * normfact ;
} ;
} /* sc2f_array */
static void
-uc2f_array (unsigned char *buffer, unsigned int count, float *ptr, int index, float normfact)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { ptr [index] = ((((int) buffer [k]) - 128) % 256) * normfact ;
- index ++ ;
+uc2f_array (unsigned char *buffer, unsigned int count, float *ptr, float normfact)
+{ while (count)
+ { count -- ;
+ ptr [count] = (((int) buffer [count]) - 128) * normfact ;
} ;
} /* uc2f_array */
static void
-bes2f_array (short *buffer, unsigned int count, float *ptr, int index, float normfact)
-{ int k ;
- short value ;
- for (k = 0 ; k < count ; k++)
- { value = BE2H_SHORT (buffer [k]) ;
- ptr [index] = ((float) value) * normfact ;
- index ++ ;
+bes2f_array (short *buffer, unsigned int count, float *ptr, float normfact)
+{ unsigned char *cptr ;
+ short value;
+
+ cptr = ((unsigned char*) buffer) + 2 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 2 ;
+ value = (cptr [0] << 8) + cptr [1] ;
+ ptr [count] = ((float) value) * normfact ;
} ;
} /* bes2f_array */
static void
-les2f_array (short *buffer, unsigned int count, float *ptr, int index, float normfact)
-{ int k ;
- short value ;
- for (k = 0 ; k < count ; k++)
- { value = LE2H_SHORT (buffer [k]) ;
- ptr [index] = ((float) value) * normfact ;
- index ++ ;
+les2f_array (short *buffer, unsigned int count, float *ptr, float normfact)
+{ unsigned char *cptr ;
+ short value;
+
+ cptr = ((unsigned char*) buffer) + 2 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 2 ;
+ value = cptr [0] + (cptr [1] << 8) ;
+ ptr [count] = ((float) value) * normfact ;
} ;
} /* les2f_array */
static void
-bet2f_array (tribyte *buffer, unsigned int count, float *ptr, int index, float normfact)
+bet2f_array (tribyte *buffer, unsigned int count, float *ptr, float normfact)
{ unsigned char *cptr ;
- int k ;
int value;
- cptr = (unsigned char*) buffer ;
- for (k = 0 ; k < count ; k++)
- { value = (cptr [0] << 24) + (cptr [1] << 16) + (cptr [2] << 8) ;
- ptr [index] = ((float) (value / 256)) * normfact ;
- index ++ ;
- cptr += 3 ;
+
+ cptr = ((unsigned char*) buffer) + 3 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 3 ;
+ value = (cptr [0] << 24) + (cptr [1] << 16) + (cptr [2] << 8) ;
+ ptr [count] = ((float) (value >> 8)) * normfact ;
} ;
} /* bet2f_array */
static void
-let2f_array (tribyte *buffer, unsigned int count, float *ptr, int index, float normfact)
+let2f_array (tribyte *buffer, unsigned int count, float *ptr, float normfact)
{ unsigned char *cptr ;
- int k ;
int value;
- cptr = (unsigned char*) buffer ;
- for (k = 0 ; k < count ; k++)
- { value = (cptr [0] << 8) + (cptr [1] << 16) + (cptr [2] << 24) ;
- ptr [index] = ((float) (value / 256)) * normfact ;
- index ++ ;
- cptr += 3 ;
+
+ cptr = ((unsigned char*) buffer) + 3 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 3 ;
+ value = (cptr [0] << 8) + (cptr [1] << 16) + (cptr [2] << 24) ;
+ ptr [count] = ((float) (value >> 8)) * normfact ;
} ;
} /* let2f_array */
static void
-lei2f_array (int *buffer, unsigned int count, float *ptr, int index, float normfact)
-{ int k ;
- int value ;
- for (k = 0 ; k < count ; k++)
- { value = LE2H_INT (buffer [k]) ;
- ptr [index] = ((float) value) * normfact ;
- index ++ ;
+lei2f_array (int *buffer, unsigned int count, float *ptr, float normfact)
+{ unsigned char *cptr ;
+ int value;
+
+ cptr = ((unsigned char*) buffer) + 4 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 4 ;
+ value = cptr [0] + (cptr [1] << 8) + (cptr [2] << 16) + (cptr [3] << 24) ;
+ ptr [count] = ((float) value) * normfact ;
} ;
} /* lei2f_array */
static void
-bei2f_array (int *buffer, unsigned int count, float *ptr, int index, float normfact)
-{ int k ;
- int value ;
- for (k = 0 ; k < count ; k++)
- { value = BE2H_INT (buffer [k]) ;
- ptr [index] = ((float) value) * normfact ;
- index ++ ;
+bei2f_array (int *buffer, unsigned int count, float *ptr, float normfact)
+{ unsigned char *cptr ;
+ int value;
+
+ cptr = ((unsigned char*) buffer) + 4 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 4 ;
+ value = (cptr [0] << 24) + (cptr [1] << 16) + (cptr [2] << 8) + cptr [3] ;
+ ptr [count] = ((float) value) * normfact ;
} ;
} /* bei2f_array */
-
/*-----------------------------------------------------------------------------------------------
*/
static void
-sc2d_array (signed char *buffer, unsigned int count, double *ptr, int index, double normfact)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { ptr [index] = ((double) buffer [k]) * normfact ;
- index ++ ;
+sc2d_array (signed char *buffer, unsigned int count, double *ptr, double normfact)
+{ while (count)
+ { count -- ;
+ ptr [count] = ((double) buffer [count]) * normfact ;
} ;
} /* sc2d_array */
static void
-uc2d_array (unsigned char *buffer, unsigned int count, double *ptr, int index, double normfact)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { ptr [index] = ((((int) buffer [k]) - 128) % 256) * normfact ;
- index ++ ;
+uc2d_array (unsigned char *buffer, unsigned int count, double *ptr, double normfact)
+{ while (count)
+ { count -- ;
+ ptr [count] = (((int) buffer [count]) - 128) * normfact ;
} ;
} /* uc2d_array */
static void
-bes2d_array (short *buffer, unsigned int count, double *ptr, int index, double normfact)
-{ int k ;
- short value ;
- for (k = 0 ; k < count ; k++)
- { value = BE2H_SHORT (buffer [k]) ;
- ptr [index] = ((double) value) * normfact ;
- index ++ ;
+bes2d_array (short *buffer, unsigned int count, double *ptr, double normfact)
+{ unsigned char *cptr ;
+ short value;
+
+ cptr = ((unsigned char*) buffer) + 2 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 2 ;
+ value = (cptr [0] << 8) + cptr [1] ;
+ ptr [count] = ((double) value) * normfact ;
} ;
} /* bes2d_array */
static void
-les2d_array (short *buffer, unsigned int count, double *ptr, int index, double normfact)
-{ int k ;
- short value ;
- for (k = 0 ; k < count ; k++)
- { value = LE2H_SHORT (buffer [k]) ;
- ptr [index] = ((double) value) * normfact ;
- index ++ ;
+les2d_array (short *buffer, unsigned int count, double *ptr, double normfact)
+{ unsigned char *cptr ;
+ short value;
+
+ cptr = ((unsigned char*) buffer) + 2 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 2 ;
+ value = cptr [0] + (cptr [1] << 8) ;
+ ptr [count] = ((double) value) * normfact ;
} ;
} /* les2d_array */
static void
-bet2d_array (tribyte *buffer, unsigned int count, double *ptr, int index, double normfact)
+bet2d_array (tribyte *buffer, unsigned int count, double *ptr, double normfact)
{ unsigned char *cptr ;
- int k ;
int value;
- cptr = (unsigned char*) buffer ;
- for (k = 0 ; k < count ; k++)
- { value = (cptr [0] << 24) + (cptr [1] << 16) + (cptr [2] << 8) ;
- ptr [index] = ((double) (value / 256)) * normfact ;
- index ++ ;
- cptr += 3 ;
+
+ cptr = ((unsigned char*) buffer) + 3 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 3 ;
+ value = (cptr [0] << 24) + (cptr [1] << 16) + (cptr [2] << 8) ;
+ ptr [count] = ((double) (value >> 8)) * normfact ;
} ;
} /* bet2d_array */
static void
-let2d_array (tribyte *buffer, unsigned int count, double *ptr, int index, double normfact)
+let2d_array (tribyte *buffer, unsigned int count, double *ptr, double normfact)
{ unsigned char *cptr ;
- int k ;
int value;
- cptr = (unsigned char*) buffer ;
- for (k = 0 ; k < count ; k++)
- { value = (cptr [0] << 8) + (cptr [1] << 16) + (cptr [2] << 24) ;
- ptr [index] = ((double) (value / 256)) * normfact ;
- index ++ ;
- cptr += 3 ;
+
+ cptr = ((unsigned char*) buffer) + 3 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 3 ;
+ value = (cptr [0] << 8) + (cptr [1] << 16) + (cptr [2] << 24) ;
+ ptr [count] = ((double) (value >> 8)) * normfact ;
} ;
} /* let2d_array */
static void
-bei2d_array (int *buffer, unsigned int count, double *ptr, int index, double normfact)
-{ int k ;
- int value ;
- for (k = 0 ; k < count ; k++)
- { value = BE2H_INT (buffer [k]) ;
- ptr [index] = ((double) value) * normfact ;
- index ++ ;
+bei2d_array (int *buffer, unsigned int count, double *ptr, double normfact)
+{ unsigned char *cptr ;
+ int value;
+
+ cptr = ((unsigned char*) buffer) + 4 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 4 ;
+ value = (cptr [0] << 24) + (cptr [1] << 16) + (cptr [2] << 8) + cptr [3] ;
+ ptr [count] = ((double) value) * normfact ;
} ;
} /* bei2d_array */
static void
-lei2d_array (int *buffer, unsigned int count, double *ptr, int index, double normfact)
-{ int k ;
- int value ;
- for (k = 0 ; k < count ; k++)
- { value = LE2H_INT (buffer [k]) ;
- ptr [index] = ((double) value) * normfact ;
- index ++ ;
+lei2d_array (int *buffer, unsigned int count, double *ptr, double normfact)
+{ unsigned char *cptr ;
+ int value;
+
+ cptr = ((unsigned char*) buffer) + 4 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 4 ;
+ value = cptr [0] + (cptr [1] << 8) + (cptr [2] << 16) + (cptr [3] << 24) ;
+ ptr [count] = ((double) value) * normfact ;
} ;
} /* lei2d_array */
@@ -2349,137 +2368,154 @@
*/
static void
-s2sc_array (short *ptr, int index, signed char *buffer, unsigned int count)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = (signed char) (ptr [index]) ;
- index ++ ;
+s2sc_array (short *ptr, signed char *buffer, unsigned int count)
+{ while (count)
+ { count -- ;
+ buffer [count] = ptr [count] >> 8 ;
} ;
} /* s2sc_array */
static void
-s2uc_array (short *ptr, int index, unsigned char *buffer, unsigned int count)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = (unsigned char) (ptr [index] + 128) ;
- index ++ ;
+s2uc_array (short *ptr, unsigned char *buffer, unsigned int count)
+{ while (count)
+ { count -- ;
+ buffer [count] = (ptr [count] >> 8) + 0x80 ;
} ;
} /* s2uc_array */
static void
-s2bet_array (short *ptr, int index, tribyte *buffer, unsigned int count)
+s2bet_array (short *ptr, tribyte *buffer, unsigned int count)
{ unsigned char *cptr ;
- int k, value ;
- cptr = (unsigned char*) buffer ;
- for (k = 0 ; k < count ; k++)
- { value = ptr [index] << 8 ;
- cptr [2] = (unsigned char) (value & 0xFF) ;
- cptr [1] = (unsigned char) ((value >> 8) & 0xFF) ;
- cptr [0] = (unsigned char) ((value >> 16) & 0xFF) ;
- index ++ ;
- cptr += 3 ;
+
+ cptr = ((unsigned char*) buffer) + 3 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 3 ;
+ cptr [2] = 0 ;
+ cptr [1] = ptr [count] ;
+ cptr [0] = ptr [count] >> 8 ;
} ;
} /* s2bet_array */
static void
-s2let_array (short *ptr, int index, tribyte *buffer, unsigned int count)
+s2let_array (short *ptr, tribyte *buffer, unsigned int count)
{ unsigned char *cptr ;
- int k, value ;
- cptr = (unsigned char*) buffer ;
- for (k = 0 ; k < count ; k++)
- { value = ptr [index] << 8 ;
- cptr [0] = (unsigned char) (value & 0xFF) ;
- cptr [1] = (unsigned char) ((value >> 8) & 0xFF) ;
- cptr [2] = (unsigned char) ((value >> 16) & 0xFF) ;
- index ++ ;
- cptr += 3 ;
+
+ cptr = ((unsigned char*) buffer) + 3 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 3 ;
+ cptr [0] = 0 ;
+ cptr [1] = ptr [count] ;
+ cptr [2] = ptr [count] >> 8 ;
} ;
} /* s2let_array */
static void
-s2bei_array (short *ptr, int index, int *buffer, unsigned int count)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = H2BE_INT (ptr [index] << 16) ;
- index ++ ;
+s2bei_array (short *ptr, int *buffer, unsigned int count)
+{ unsigned char *cptr ;
+
+ cptr = ((unsigned char*) buffer) + 4 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 4 ;
+ cptr [0] = ptr [count] >> 8 ;
+ cptr [1] = ptr [count] ;
+ cptr [2] = 0 ;
+ cptr [3] = 0 ;
} ;
-} /* s2lei_array */
+} /* s2bei_array */
static void
-s2lei_array (short *ptr, int index, int *buffer, unsigned int count)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = H2LE_INT (ptr [index] << 16) ;
- index ++ ;
+s2lei_array (short *ptr, int *buffer, unsigned int count)
+{ unsigned char *cptr ;
+
+ cptr = ((unsigned char*) buffer) + 4 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 4 ;
+ cptr [0] = 0 ;
+ cptr [1] = 0 ;
+ cptr [2] = ptr [count] ;
+ cptr [3] = ptr [count] >> 8 ;
} ;
} /* s2lei_array */
+
/*-----------------------------------------------------------------------------------------------
*/
static void
-i2sc_array (int *ptr, int index, signed char *buffer, unsigned int count)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = (signed char) (ptr [index]) ;
- index ++ ;
+i2sc_array (int *ptr, signed char *buffer, unsigned int count)
+{ while (count)
+ { count -- ;
+ buffer [count] = (ptr [count] >> 24) ;
} ;
} /* i2sc_array */
static void
-i2uc_array (int *ptr, int index, unsigned char *buffer, unsigned int count)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = (unsigned char) (ptr [index] + 128) ;
- index ++ ;
+i2uc_array (int *ptr, unsigned char *buffer, unsigned int count)
+{ while (count)
+ { count -- ;
+ buffer [count] = ((ptr [count] >> 24) + 128) ;
} ;
} /* i2uc_array */
static void
-i2bes_array (int *ptr, int index, short *buffer, unsigned int count)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = H2BE_SHORT (ptr [index]) ;
- index ++ ;
+i2bes_array (int *ptr, short *buffer, unsigned int count)
+{ unsigned char *cptr ;
+
+ cptr = ((unsigned char*) buffer) + 2 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 2 ;
+ cptr [0] = ptr [count] >> 24 ;
+ cptr [1] = ptr [count] >> 16 ;
} ;
} /* i2bes_array */
static void
-i2les_array (int *ptr, int index, short *buffer, unsigned int count)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = H2LE_SHORT (ptr [index]) ;
- index ++ ;
+i2les_array (int *ptr, short *buffer, unsigned int count)
+{ unsigned char *cptr ;
+
+ cptr = ((unsigned char*) buffer) + 2 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 2 ;
+ cptr [0] = ptr [count] >> 16 ;
+ cptr [1] = ptr [count] >> 24 ;
} ;
} /* i2les_array */
static void
-i2bet_array (int *ptr, int index, tribyte *buffer, unsigned int count)
+i2bet_array (int *ptr, tribyte *buffer, unsigned int count)
{ unsigned char *cptr ;
- int k, value ;
- cptr = (unsigned char*) buffer ;
- for (k = 0 ; k < count ; k++)
- { value = ptr [index] ;
- cptr [0] = (unsigned char) ((value & 0xFF0000) >> 16) ;
- cptr [1] = (unsigned char) ((value >> 8) & 0xFF) ;
- cptr [2] = (unsigned char) (value & 0xFF) ;
- index ++ ;
- cptr += 3 ;
+ int value ;
+
+ cptr = ((unsigned char*) buffer) + 3 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 3 ;
+ value = ptr [count] >> 8 ;
+ cptr [2] = value ;
+ cptr [1] = value >> 8 ;
+ cptr [0] = value >> 16 ;
} ;
} /* i2bet_array */
static void
-i2let_array (int *ptr, int index, tribyte *buffer, unsigned int count)
+i2let_array (int *ptr, tribyte *buffer, unsigned int count)
{ unsigned char *cptr ;
- int k, value ;
- cptr = (unsigned char*) buffer ;
- for (k = 0 ; k < count ; k++)
- { value = ptr [index] ;
- cptr [0] = (unsigned char) (value & 0xFF) ;
- cptr [1] = (unsigned char) ((value >> 8) & 0xFF) ;
- cptr [2] = (unsigned char) ((value >> 16) & 0xFF) ;
- index ++ ;
- cptr += 3 ;
+ int value ;
+
+ cptr = ((unsigned char*) buffer) + 3 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 3 ;
+ value = ptr [count] >> 8 ;
+ cptr [0] = value ;
+ cptr [1] = value >> 8 ;
+ cptr [2] = value >> 16 ;
} ;
} /* i2let_array */
@@ -2487,86 +2523,110 @@
*/
static void
-f2sc_array (float *ptr, int index, signed char *buffer, unsigned int count, float normfact)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = FLOAT_TO_SHORT (ptr [index] * normfact) ;
- index ++ ;
+f2sc_array (float *ptr, signed char *buffer, unsigned int count, float normfact)
+{ while (count)
+ { count -- ;
+ buffer [count] = lrintf (ptr [count] * normfact) ;
} ;
} /* f2sc_array */
static void
-f2uc_array (float *ptr, int index, unsigned char *buffer, unsigned int count, float normfact)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = FLOAT_TO_SHORT (ptr [index] * normfact) + 128 ;
- index ++ ;
+f2uc_array (float *ptr, unsigned char *buffer, unsigned int count, float normfact)
+{ while (count)
+ { count -- ;
+ buffer [count] = lrintf (ptr [count] * normfact) + 128 ;
} ;
} /* f2uc_array */
static void
-f2bes_array (float *ptr, int index, short *buffer, unsigned int count, float normfact)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = H2BE_SHORT (FLOAT_TO_SHORT (ptr [index] * normfact)) ;
- index ++ ;
+f2bes_array (float *ptr, short *buffer, unsigned int count, float normfact)
+{ unsigned char *cptr ;
+ short value ;
+ cptr = ((unsigned char*) buffer) + 2 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 2 ;
+ value = lrintf (ptr [count] * normfact) ;
+ cptr [0] = value >> 8 ;
+ cptr [1] = value ;
} ;
} /* f2bes_array */
static void
-f2les_array (float *ptr, int index, short *buffer, unsigned int count, float normfact)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = H2LE_SHORT (FLOAT_TO_SHORT (ptr [index] * normfact)) ;
- index ++ ;
+f2les_array (float *ptr, short *buffer, unsigned int count, float normfact)
+{ unsigned char *cptr ;
+ short value ;
+ cptr = ((unsigned char*) buffer) + 2 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 2 ;
+ value = lrintf (ptr [count] * normfact) ;
+ cptr [0] = value ;
+ cptr [1] = value >> 8 ;
} ;
} /* f2les_array */
static void
-f2bet_array (float *ptr, int index, tribyte *buffer, unsigned int count, float normfact)
+f2bet_array (float *ptr, tribyte *buffer, unsigned int count, float normfact)
{ unsigned char *cptr ;
- int k, value ;
- cptr = (unsigned char*) buffer ;
- for (k = 0 ; k < count ; k++)
- { value = FLOAT_TO_INT (ptr [index] * normfact) ;
- cptr [2] = (unsigned char) (value & 0xFF) ;
- cptr [1] = (unsigned char) ((value >> 8) & 0xFF) ;
- cptr [0] = (unsigned char) ((value >> 16) & 0xFF) ;
- index ++ ;
- cptr += 3 ;
+ int value ;
+
+ cptr = ((unsigned char*) buffer) + 3 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 3 ;
+ value = lrintf (ptr [count] * normfact) ;
+ cptr [0] = value >> 16 ;
+ cptr [1] = value >> 8 ;
+ cptr [2] = value ;
} ;
} /* f2bet_array */
static void
-f2let_array (float *ptr, int index, tribyte *buffer, unsigned int count, float normfact)
+f2let_array (float *ptr, tribyte *buffer, unsigned int count, float normfact)
{ unsigned char *cptr ;
- int k, value ;
- cptr = (unsigned char*) buffer ;
- for (k = 0 ; k < count ; k++)
- { value = FLOAT_TO_INT (ptr [index] * normfact) ;
- cptr [0] = (unsigned char) (value & 0xFF) ;
- cptr [1] = (unsigned char) ((value >> 8) & 0xFF) ;
- cptr [2] = (unsigned char) ((value >> 16) & 0xFF) ;
- index ++ ;
- cptr += 3 ;
+ int value ;
+
+ cptr = ((unsigned char*) buffer) + 3 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 3 ;
+ value = lrintf (ptr [count] * normfact) ;
+ cptr [0] = value ;
+ cptr [1] = value >> 8 ;
+ cptr [2] = value >> 16 ;
} ;
} /* f2let_array */
static void
-f2bei_array (float *ptr, int index, int *buffer, unsigned int count, float normfact)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = H2BE_INT (FLOAT_TO_INT (ptr [index] * normfact)) ;
- index ++ ;
+f2bei_array (float *ptr, int *buffer, unsigned int count, float normfact)
+{ unsigned char *cptr ;
+ int value ;
+ cptr = ((unsigned char*) buffer) + 4 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 4 ;
+ value = lrintf (ptr [count] * normfact) ;
+ cptr [0] = value >> 24 ;
+ cptr [1] = value >> 16 ;
+ cptr [2] = value >> 8 ;
+ cptr [3] = value ;
} ;
} /* f2bei_array */
-static
-void f2lei_array (float *ptr, int index, int *buffer, unsigned int count, float normfact)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = H2LE_INT (FLOAT_TO_INT (ptr [index] * normfact)) ;
- index ++ ;
+static void
+f2lei_array (float *ptr, int *buffer, unsigned int count, float normfact)
+{ unsigned char *cptr ;
+ int value ;
+ cptr = ((unsigned char*) buffer) + 4 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 4 ;
+ value = lrintf (ptr [count] * normfact) ;
+ cptr [0] = value ;
+ cptr [1] = value >> 8 ;
+ cptr [2] = value >> 16 ;
+ cptr [3] = value >> 24 ;
} ;
} /* f2lei_array */
@@ -2574,86 +2634,112 @@
*/
static void
-d2sc_array (double *ptr, int index, signed char *buffer, unsigned int count, double normfact)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = DOUBLE_TO_SHORT (ptr [index] * normfact) ;
- index ++ ;
+d2sc_array (double *ptr, signed char *buffer, unsigned int count, double normfact)
+{ while (count)
+ { count -- ;
+ buffer [count] = lrint (ptr [count] * normfact) ;
} ;
} /* d2sc_array */
static void
-d2uc_array (double *ptr, int index, unsigned char *buffer, unsigned int count, double normfact)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = DOUBLE_TO_SHORT (ptr [index] * normfact) + 128 ;
- index ++ ;
+d2uc_array (double *ptr, unsigned char *buffer, unsigned int count, double normfact)
+{ while (count)
+ { count -- ;
+ buffer [count] = lrint (ptr [count] * normfact) + 128 ;
} ;
} /* d2uc_array */
static void
-d2bes_array (double *ptr, int index, short *buffer, unsigned int count, double normfact)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = H2BE_SHORT (DOUBLE_TO_SHORT (ptr [index] * normfact)) ;
- index ++ ;
+d2bes_array (double *ptr, short *buffer, unsigned int count, double normfact)
+{ unsigned char *cptr ;
+ short value ;
+ cptr = ((unsigned char*) buffer) + 2 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 2 ;
+ value = lrint (ptr [count] * normfact) ;
+ cptr [0] = value >> 8 ;
+ cptr [1] = value ;
} ;
} /* d2bes_array */
static void
-d2les_array (double *ptr, int index, short *buffer, unsigned int count, double normfact)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = H2LE_SHORT (DOUBLE_TO_SHORT (ptr [index] * normfact)) ;
- index ++ ;
+d2les_array (double *ptr, short *buffer, unsigned int count, double normfact)
+{ unsigned char *cptr ;
+ short value ;
+ cptr = ((unsigned char*) buffer) + 2 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 2 ;
+ value = lrint (ptr [count] * normfact) ;
+ cptr [0] = value ;
+ cptr [1] = value >> 8 ;
} ;
} /* d2les_array */
static void
-d2bet_array (double *ptr, int index, tribyte *buffer, unsigned int count, double normfact)
+d2bet_array (double *ptr, tribyte *buffer, unsigned int count, double normfact)
{ unsigned char *cptr ;
- int k, value ;
- cptr = (unsigned char*) buffer ;
- for (k = 0 ; k < count ; k++)
- { value = DOUBLE_TO_INT (ptr [index] * normfact) ;
- cptr [2] = (unsigned char) (value & 0xFF) ;
- cptr [1] = (unsigned char) ((value >> 8) & 0xFF) ;
- cptr [0] = (unsigned char) ((value >> 16) & 0xFF) ;
- index ++ ;
- cptr += 3 ;
+ int value ;
+
+ cptr = ((unsigned char*) buffer) + 3 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 3 ;
+ value = lrint (ptr [count] * normfact) ;
+ cptr [2] = value ;
+ cptr [1] = value >> 8 ;
+ cptr [0] = value >> 16 ;
} ;
} /* d2bet_array */
static void
-d2let_array (double *ptr, int index, tribyte *buffer, unsigned int count, double normfact)
+d2let_array (double *ptr, tribyte *buffer, unsigned int count, double normfact)
{ unsigned char *cptr ;
- int k, value ;
- cptr = (unsigned char*) buffer ;
- for (k = 0 ; k < count ; k++)
- { value = DOUBLE_TO_INT (ptr [index] * normfact) ;
- cptr [0] = (unsigned char) (value & 0xFF) ;
- cptr [1] = (unsigned char) ((value >> 8) & 0xFF) ;
- cptr [2] = (unsigned char) ((value >> 16) & 0xFF) ;
- index ++ ;
- cptr += 3 ;
+ int value ;
+
+ cptr = ((unsigned char*) buffer) + 3 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 3 ;
+ value = lrint (ptr [count] * normfact) ;
+ cptr [0] = value ;
+ cptr [1] = value >> 8 ;
+ cptr [2] = value >> 16 ;
} ;
} /* d2let_array */
static void
-d2bei_array (double *ptr, int index, int *buffer, unsigned int count, double normfact)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = H2BE_INT (DOUBLE_TO_INT (ptr [index] * normfact)) ;
- index ++ ;
+d2bei_array (double *ptr, int *buffer, unsigned int count, double normfact)
+{ unsigned char *cptr ;
+ int value ;
+ cptr = ((unsigned char*) buffer) + 4 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 4 ;
+ value = lrint (ptr [count] * normfact) ;
+ cptr [0] = value >> 24 ;
+ cptr [1] = value >> 16 ;
+ cptr [2] = value >> 8 ;
+ cptr [3] = value ;
} ;
} /* d2bei_array */
static
-void d2lei_array (double *ptr, int index, int *buffer, unsigned int count, double normfact)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { buffer [k] = H2LE_INT (DOUBLE_TO_INT (ptr [index] * normfact)) ;
- index ++ ;
+void d2lei_array (double *ptr, int *buffer, unsigned int count, double normfact)
+{ unsigned char *cptr ;
+ int value ;
+ cptr = ((unsigned char*) buffer) + 4 * count ;
+ while (count)
+ { count -- ;
+ cptr -= 4 ;
+ value = lrint (ptr [count] * normfact) ;
+ cptr [0] = value ;
+ cptr [1] = value >> 8 ;
+ cptr [2] = value >> 16;
+ cptr [3] = value >> 24 ;
} ;
} /* d2lei_array */
+/*==============================================================================
+*/
--- a/common/libsndfile/src/raw.c
+++ b/common/libsndfile/src/raw.c
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 1999-2001 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
**
** 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
@@ -16,161 +16,86 @@
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-
#include <stdio.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-#include <ctype.h>
#include "sndfile.h"
#include "config.h"
-#include "sfendian.h"
#include "common.h"
-static long raw_seek (SF_PRIVATE *psf, long offset, int whence) ;
+/*-static sf_count_t raw_seek (SF_PRIVATE *psf, sf_count_t offset, int whence) ;-*/
/*------------------------------------------------------------------------------
-** Public functions.
+** Public function.
*/
-int raw_open_read (SF_PRIVATE *psf)
-{ unsigned int subformat ;
- int error ;
-
- if(! psf->sf.channels || ! psf->sf.pcmbitwidth)
- return SFE_RAW_READ_BAD_SPEC ;
+int
+raw_open (SF_PRIVATE *psf)
+{ int subformat, error = SFE_NO_ERROR ;
subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
- psf->endian = 0 ;
+ psf->endian = psf->sf.format & SF_FORMAT_ENDMASK ;
- if (subformat == SF_FORMAT_PCM_BE)
+ if (CPU_IS_BIG_ENDIAN && (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU))
psf->endian = SF_ENDIAN_BIG ;
- else if (subformat == SF_FORMAT_PCM_LE)
+ else if (CPU_IS_LITTLE_ENDIAN && (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU))
psf->endian = SF_ENDIAN_LITTLE ;
- else if (subformat == SF_FORMAT_PCM_S8)
- psf->chars = SF_CHARS_SIGNED ;
- else if (subformat == SF_FORMAT_PCM_U8)
- psf->chars = SF_CHARS_UNSIGNED ;
- else
- return SFE_RAW_READ_BAD_SPEC ;
-
- psf->seek_func = (func_seek) raw_seek ;
- psf->sf.seekable = SF_TRUE ;
- psf->sf.sections = 1 ;
-
+ psf->blockwidth = psf->bytewidth * psf->sf.channels ;
psf->dataoffset = 0 ;
- psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
- psf->blockwidth = psf->sf.channels * psf->bytewidth ;
+ psf->datalength = psf->filelength ;
- if ((error = pcm_read_init (psf)))
- return error ;
-
- if (psf->blockwidth)
- psf->sf.samples = psf->filelength / psf->blockwidth ;
+ switch (subformat)
+ { case SF_FORMAT_PCM_S8 :
+ psf->chars = SF_CHARS_SIGNED ;
+ error = pcm_init (psf) ;
+ break ;
- psf->datalength = psf->filelength - psf->dataoffset ;
-
- psf->current = 0 ;
-
- return 0 ;
-} /* raw_open_read */
-
-/*------------------------------------------------------------------------------
-*/
-
-int raw_open_write (SF_PRIVATE *psf)
-{ unsigned int subformat, big_endian_file ;
- int error ;
+ case SF_FORMAT_PCM_U8 :
+ psf->chars = SF_CHARS_UNSIGNED ;
+ 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 ;
- subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
-
- if (subformat == SF_FORMAT_PCM_BE)
- big_endian_file = 1 ;
- else if (subformat == SF_FORMAT_PCM_LE)
- big_endian_file = 0 ;
- else if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_U8)
- big_endian_file = 0 ;
- else
- return SFE_BAD_OPEN_FORMAT ;
+ case SF_FORMAT_ULAW :
+ error = ulaw_init (psf) ;
+ break ;
- psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
+ case SF_FORMAT_ALAW :
+ error = alaw_init (psf) ;
+ break ;
- psf->endian = big_endian_file ? SF_ENDIAN_BIG : SF_ENDIAN_LITTLE ;
- psf->sf.seekable = SF_TRUE ;
- psf->blockwidth = psf->bytewidth * psf->sf.channels ;
- psf->dataoffset = 0 ;
- psf->datalength = psf->blockwidth * psf->sf.samples ;
- psf->filelength = psf->datalength ;
- psf->error = 0 ;
+ case SF_FORMAT_FLOAT :
+ error = float32_init (psf) ;
+ break ;
- if (subformat == SF_FORMAT_PCM_S8)
- psf->chars = SF_CHARS_SIGNED ;
- else if (subformat == SF_FORMAT_PCM_U8)
- psf->chars = SF_CHARS_UNSIGNED ;
-
- if ((error = pcm_write_init (psf)))
- return error ;
-
- return 0 ;
-} /* raw_open_write */
+ case SF_FORMAT_DOUBLE :
+ error = double64_init (psf) ;
+ break ;
-/*------------------------------------------------------------------------------
-*/
+ case SF_FORMAT_DWVW_12 :
+ error = dwvw_init (psf, 12) ;
+ break ;
-static long
-raw_seek (SF_PRIVATE *psf, long offset, int whence)
-{ long position ;
+ case SF_FORMAT_DWVW_16 :
+ error = dwvw_init (psf, 16) ;
+ break ;
- if (! (psf->blockwidth && psf->datalength))
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
+ case SF_FORMAT_DWVW_24 :
+ error = dwvw_init (psf, 24) ;
+ break ;
- position = ftell (psf->file) ;
- offset = offset * psf->blockwidth ;
-
- switch (whence)
- { case SEEK_SET :
- if (offset < 0 || offset > psf->datalength)
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
+ case SF_FORMAT_GSM610 :
+ error = gsm610_init (psf) ;
break ;
-
- case SEEK_CUR :
- if (psf->current + offset < 0 || psf->current + offset > psf->datalength)
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
- offset = position + offset ;
- break ;
-
- case SEEK_END :
- if (offset > 0 || psf->datalength + offset < 0)
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
- offset = psf->datalength + offset ;
- break ;
-
- default :
- psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
+
+ default : return SFE_BAD_OPEN_FORMAT ;
} ;
-
- if (psf->mode == SF_MODE_READ)
- fseek (psf->file, offset, SEEK_SET) ;
- else
- { /* What to do about write??? */
- psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
- psf->current = offset / psf->blockwidth ;
-
- return psf->current ;
-} /* raw_seek */
-
+ return error ;
+} /* raw_open */
--- /dev/null
+++ b/common/libsndfile/src/rx2.c
@@ -1,0 +1,293 @@
+/*
+** Copyright (C) 2001-2002 Erik de Castro Lopo <[email protected]>
+**
+** 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 <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdarg.h>
+
+#include "sndfile.h"
+#include "config.h"
+#include "sfendian.h"
+#include "common.h"
+
+/*------------------------------------------------------------------------------
+ * 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)
+{ int error, marker, length, glob_offset, slce_count ;
+
+ int sdat_length = 0, slce_total = 0 ;
+
+ /* 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, "%D : %d (should be %d)\n", marker, length, psf->filelength - 8) ;
+ else
+ psf_log_printf (psf, "%D : %d\n", marker, length) ;
+
+ /* 'REX2' marker */
+ psf_binheader_readf (psf, "m", &marker) ;
+ psf_log_printf (psf, "%D", marker) ;
+
+ /* 'HEAD' marker */
+ psf_binheader_readf (psf, "m", &marker) ;
+ psf_log_printf (psf, "%D\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 (psf->buffer))
+ { psf_log_printf (psf, " Text : %d *** Error : Too sf_count_t!\n") ;
+ return -1001 ;
+ }
+
+ memset (psf->buffer, 0, SIGNED_SIZEOF (psf->buffer)) ;
+ psf_binheader_readf (psf, "b", psf->buffer, length) ;
+ psf_log_printf (psf, " Text : \"%s\"\n", psf->buffer) ;
+
+ /* 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, " %D : %d\n", marker, length) ;
+ psf_binheader_readf (psf, "j", length) ;
+ break ;
+
+ case RECY_MARKER:
+ psf_binheader_readf (psf, "E4", &length) ;
+ psf_log_printf (psf, " %D : %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, " %D : %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%D : %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, " %D : %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, " %D\n", marker) ;
+ slce_count = 0 ;
+ break ;
+
+ case SLCE_MARKER:
+ /*-psf_log_printf (psf, " %D\n", marker) ;-*/
+
+ psf_binheader_readf (psf, "E4", &length) ;
+ /*-psf_log_printf (psf, " ???????? : 0x%X\n", length) ;-*/
+
+ psf_binheader_readf (psf, "E4", &length) ;
+ /*-psf_log_printf (psf, " Start ? : %d\n", length) ;-*/
+
+ psf_binheader_readf (psf, "E4", &length) ;
+ /*-psf_log_printf (psf, " Length ? : %d\n", length) ;-*/
+
+ slce_total += length ;
+
+ psf_binheader_readf (psf, "E4", &length) ;
+ /*-psf_log_printf (psf, " ???????? : 0x%X\n", length) ;-*/
+
+ slce_count ++ ;
+ break ;
+
+ case SINF_MARKER:
+ psf_binheader_readf (psf, "E4", &length) ;
+ psf_log_printf (psf, " %D : %d\n", marker, length) ;
+
+ psf_binheader_readf (psf, "E2", &length) ;
+ psf_log_printf (psf, " REX Version : %X ?\n", length) ;
+
+ psf_binheader_readf (psf, "E44", &psf->sf.samplerate, &psf->sf.samples) ;
+ psf_log_printf (psf, " Sample Rate : %d\n", psf->sf.samplerate) ;
+ psf_log_printf (psf, " Samples : %d\n", psf->sf.samples) ;
+
+ 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, " %D : %d (should be %d)\n", marker, length, psf->dataoffset + psf->filelength) ;
+ else
+ psf_log_printf (psf, " %D : %d\n", marker, length) ;
+ break ;
+
+ default :
+ psf_log_printf (psf, "Unknown marker : 0x%X %D", marker, marker) ;
+ return -1003 ;
+ break ;
+ } ;
+
+ /* SDAT always last marker in file. */
+ if (marker == SDAT_MARKER)
+ break ;
+ } ;
+
+ puts (psf->logbuffer) ;
+ puts ("-----------------------------------") ;
+
+ printf ("SDAT length : %d\n", sdat_length) ;
+ printf ("SLCE samples : %d\n", slce_total) ;
+
+ /* Two bytes per sample. */
+ printf ("Comp Ratio : %f:1\n", (2.0 * slce_total) / sdat_length) ;
+
+ puts (" ") ;
+
+ psf->logbuffer [0] = 0 ;
+
+ /* OK, have the header althought not too sure what it all means. */
+
+ psf->endian = SF_ENDIAN_BIG ;
+
+ psf->datalength = psf->filelength - psf->dataoffset ;
+
+ if (psf_fseek (psf->filedes, 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->close = rx2_close ;
+
+ if (! psf->sf.samples && psf->blockwidth)
+ psf->sf.samples = psf->datalength / psf->blockwidth ;
+
+ /* All done. */
+
+ return 0 ;
+} /* rx2_open */
+
+/*------------------------------------------------------------------------------
+*/
+
+static int
+rx2_close (SF_PRIVATE *psf)
+{
+ if (psf->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.
+ */
+
+ } ;
+
+ if (psf->fdata)
+ free (psf->fdata) ;
+ psf->fdata = NULL ;
+
+ return 0 ;
+} /* rx2_close */
+
--- a/common/libsndfile/src/samplitude.c
+++ b/common/libsndfile/src/samplitude.c
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 2000-2001 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 2000-2001-2002 Erik de Castro Lopo <[email protected]>
**
** 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
@@ -16,7 +16,6 @@
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-
#include <stdio.h>
#include <unistd.h>
#include <string.h>
@@ -70,7 +69,8 @@
** Public functions.
*/
-int smpltd_open_read (SF_PRIVATE *psf)
+int
+smpltd_open (SF_PRIVATE *psf)
{ RAP_CHUNK rap ;
psf_binheader_readf (psf, "mm", &(rap.sekd), &(rap.samr)) ;
@@ -91,18 +91,11 @@
printf ("channels : %d\n", rap.channels) ;
-*/
- psf->close = (func_close) smpltd_close ;
+ psf->close = smpltd_close ;
return 0 ;
-} /* smpltd_open_read */
+} /* smpltd_open */
-int
-smpltd_open_write (SF_PRIVATE *psf)
-{
-
- return 0 ;
-} /* smpltd_open_write */
-
/*------------------------------------------------------------------------------
*/
@@ -109,7 +102,7 @@
static int
smpltd_close (SF_PRIVATE *psf)
{
- if (psf->mode == SF_MODE_WRITE)
+ if (psf->mode == SFM_WRITE || psf->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.
*/
@@ -116,10 +109,6 @@
} ;
- if (psf->fdata)
- free (psf->fdata) ;
- psf->fdata = NULL ;
-
return 0 ;
} /* smpltd_close */
--- /dev/null
+++ b/common/libsndfile/src/sd2.c
@@ -1,0 +1,177 @@
+/*
+** Copyright (C) 2001-2002 Erik de Castro Lopo <[email protected]>
+**
+** 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 <stdio.h>
+#include <unistd.h>
+#include <string.h>
+
+#include "sndfile.h"
+#include "config.h"
+#include "sfendian.h"
+#include "common.h"
+
+
+/*------------------------------------------------------------------------------
+ * Macros to handle big/little endian issues.
+*/
+
+#define Sd2f_MARKER MAKE_MARKER ('S', 'd', '2', 'f')
+
+/*------------------------------------------------------------------------------
+ * Typedefs for file chunks.
+*/
+
+
+
+/*------------------------------------------------------------------------------
+ * Private static functions.
+*/
+
+static int sd2_close (SF_PRIVATE *psf) ;
+
+/*------------------------------------------------------------------------------
+** Public functions.
+*/
+
+int
+sd2_open (SF_PRIVATE *psf)
+{ int marker, software, rsrc_offset, len ;
+ int rsrc_data_offset, rsrc_map_offset, rsrc_data_length, rsrc_map_length ;
+ char slen ;
+ float srate ;
+
+ /* Read only so far. */
+
+ psf_binheader_readf (psf, "Epmmj", 0x41, &marker, &software, 14) ;
+
+ if (marker != Sd2f_MARKER)
+ { printf ("Whoops!!!\n") ;
+ puts (psf->logbuffer) ;
+ exit (1) ;
+ } ;
+
+ psf_log_printf (psf, "Marker : %D\n"
+ "Software : %D\n",
+ marker, software) ;
+
+ /* This seems to be a constant for binhex files. */
+ psf->dataoffset = 0x80 ;
+
+ /* All SD2 files are big endian. */
+ psf->endian= SF_ENDIAN_BIG ;
+
+ /*
+ ** Resource header info from:
+ ** http://developer.apple.com/techpubs/mac/MoreToolbox/MoreToolbox-99.html
+ */
+
+ rsrc_offset = psf->datalength + psf->dataoffset ;
+ if (rsrc_offset & 0x7F)
+ rsrc_offset = rsrc_offset - (rsrc_offset & 0x7F) + psf->dataoffset ;
+
+ psf_log_printf (psf, "Resource offset : 0x%X\n", rsrc_offset) ;
+
+ /* Jump to the rsrc_offset fork section. */
+ psf_binheader_readf (psf, "Ep", rsrc_offset) ;
+
+ psf_binheader_readf (psf, "E4444", &rsrc_data_offset, &rsrc_map_offset, &rsrc_data_length, &rsrc_map_length) ;
+
+ rsrc_data_offset += rsrc_offset ;
+ rsrc_map_offset += rsrc_offset ;
+
+ psf_log_printf (psf, " data offset : 0x%X\n"
+ " map offset : 0x%X\n"
+ " data length : 0x%X\n"
+ " map length : 0x%X\n",
+
+ rsrc_data_offset, rsrc_map_offset, rsrc_data_length, rsrc_map_length) ;
+
+ if (rsrc_data_offset + rsrc_data_length > rsrc_map_offset || rsrc_map_offset + rsrc_map_length > psf->filelength)
+ { puts ("##############################") ;
+ puts (psf->logbuffer) ;
+ puts ("##############################") ;
+ exit (1) ;
+ } ;
+
+ memset (psf->buffer, 0, sizeof (psf->buffer)) ;
+
+ psf_binheader_readf (psf, "Ep41", rsrc_data_offset, &len, &slen) ;
+ if (slen + 1 == len)
+ { psf_binheader_readf (psf, "Eb", psf->buffer, len - 1) ;
+ ((char*) psf->buffer) [len - 1] = 0 ;
+ if (sscanf ((char*) psf->buffer, "%d", &len) == 1)
+ psf->bytewidth = len ;
+ } ;
+
+ psf_binheader_readf (psf, "E41", &len, &slen) ;
+ if (slen + 1 == len)
+ { psf_binheader_readf (psf, "Eb", psf->buffer, len - 1) ;
+ ((char*) psf->buffer) [len - 1] = 0 ;
+ if (sscanf ((char*) psf->buffer, "%f", &srate) == 1)
+ psf->sf.samplerate = srate ;
+ } ;
+
+ psf_binheader_readf (psf, "E41", &len, &slen) ;
+ if (slen + 1 == len)
+ { psf_binheader_readf (psf, "Eb", psf->buffer, len - 1) ;
+ ((char*) psf->buffer) [len - 1] = 0 ;
+ if (sscanf ((char*) psf->buffer, "%d", &len) == 1)
+ psf->sf.channels = len ;
+ } ;
+
+ psf_log_printf (psf, " byte width : %d\n", psf->bytewidth) ;
+ psf_log_printf (psf, " sample rate : %d\n", psf->sf.samplerate) ;
+ psf_log_printf (psf, " channels : %d\n", psf->sf.channels) ;
+
+ if (psf->bytewidth == 2)
+ { psf->sf.format = SF_FORMAT_SD2 | SF_FORMAT_PCM_16 ;
+
+ psf->blockwidth = psf->bytewidth * psf->sf.channels ;
+
+ psf->sf.samples = psf->datalength / psf->blockwidth ;
+ } ;
+
+ pcm_init (psf) ;
+
+ psf_fseek (psf->filedes, psf->dataoffset, SEEK_SET) ;
+
+ psf->close = sd2_close ;
+
+ return 0 ;
+} /* sd2_open */
+
+/*------------------------------------------------------------------------------
+*/
+
+static int
+sd2_close (SF_PRIVATE *psf)
+{
+ if (psf->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.
+ */
+
+ } ;
+
+ if (psf->fdata)
+ free (psf->fdata) ;
+ psf->fdata = NULL ;
+
+ return 0 ;
+} /* sd2_close */
+
--- /dev/null
+++ b/common/libsndfile/src/sf_command.h
@@ -1,0 +1,41 @@
+/*
+** Copyright (C) 2001-2002 Erik de Castro Lopo <[email protected]>
+**
+** 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_COMMAND_H_INCLUDED
+#define SF_COMMAND_H_INCLUDED
+
+/* Command values for sf_command (). These are obtained using the Python
+** script sf_command.py in the top level directory of the libsndfile sources.
+*/
+enum
+{
+ SFC_GET_LIB_VERSION = 0x124A0C, /* "get-lib-version" */
+ SFC_GET_LOG_INFO = 0x248A3, /* "get-log-info" */
+ SFC_GET_NORM_DOUBLE = 0x12692D, /* "get-norm-double" */
+ SFC_GET_NORM_FLOAT = 0x934EA, /* "get-norm-float" */
+ SFC_SET_NORM_DOUBLE = 0x17692D, /* "set-norm-double" */
+ SFC_SET_NORM_FLOAT = 0xBB4EA, /* "set-norm-float" */
+ SFC_GET_SIMPLE_COUNT = 0x12145914, /* "get-simple-format-count" */
+ SFC_GET_SIMPLE_FORMAT = 0x485162, /* "get-simple-format" */
+ SFC_TRUE = 0x2E7, /* "true" */
+ SFC_FALSE = 0x45B /* "false" */
+} ;
+
+#endif /* SF_COMMAND_H_INCLUDED */
+
+
--- a/common/libsndfile/src/sfendian.h
+++ b/common/libsndfile/src/sfendian.h
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 1999-2001 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
**
** 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
@@ -18,69 +18,11 @@
#include "config.h"
-#if HAVE_ENDIAN_H
- /* This is the best way to do it. Unfortunately Sparc Solaris (and
- ** possibly others) don't have <endian.h>
- */
- #include <endian.h>
- #if (__BYTE_ORDER == __LITTLE_ENDIAN)
- #define CPU_IS_LITTLE_ENDIAN 1
- #define CPU_IS_BIG_ENDIAN 0
- #elif (__BYTE_ORDER == __BIG_ENDIAN)
- #define CPU_IS_LITTLE_ENDIAN 0
- #define CPU_IS_BIG_ENDIAN 1
- #else
- #error "A bit confused about endian-ness! Have <endian.h> but not __BYTEORDER."
- #endif
-#else
- /* If we don't have <endian.h> use the guess based on target processor
- ** from the autoconf process.
- */
- #if GUESS_LITTLE_ENDIAN
- #define CPU_IS_LITTLE_ENDIAN 1
- #define CPU_IS_BIG_ENDIAN 0
- #elif GUESS_BIG_ENDIAN
- #define CPU_IS_LITTLE_ENDIAN 0
- #define CPU_IS_BIG_ENDIAN 1
- #else
- #error "Endian guess seems incorrect."
- #endif
-#endif
-
-#define ENDSWAP_SHORT(x) ((((x)>>8)&0xFF)|(((x)&0xFF)<<8))
-#define ENDSWAP_INT(x) ((((x)>>24)&0xFF)|(((x)>>8)&0xFF00)|(((x)&0xFF00)<<8)|(((x)&0xFF)<<24))
-
-#if (CPU_IS_LITTLE_ENDIAN == 1)
- #define H2LE_SHORT(x) (x)
- #define H2LE_INT(x) (x)
- #define LE2H_SHORT(x) (x)
- #define LE2H_INT(x) (x)
-
- #define BE2H_INT(x) ENDSWAP_INT(x)
- #define BE2H_SHORT(x) ENDSWAP_SHORT(x)
- #define H2BE_INT(x) ENDSWAP_INT(x)
- #define H2BE_SHORT(x) ENDSWAP_SHORT(x)
-
-#elif (CPU_IS_BIG_ENDIAN == 1)
- #define H2LE_SHORT(x) ENDSWAP_SHORT(x)
- #define H2LE_INT(x) ENDSWAP_INT(x)
- #define LE2H_SHORT(x) ENDSWAP_SHORT(x)
- #define LE2H_INT(x) ENDSWAP_INT(x)
-
- #define BE2H_INT(x) (x)
- #define BE2H_SHORT(x) (x)
- #define H2BE_INT(x) (x)
- #define H2BE_SHORT(x) (x)
-
-#else
- #error "Cannot determine endian-ness of processor."
-#endif
-
-#if (CPU_IS_LITTLE_ENDIAN == 1)
+#if (! CPU_IS_LITTLE_ENDIAN && ! CPU_IS_BIG_ENDIAN)
+#error "Target CPU endian-ness unknown. May need to hand edit src/config.h"
+#elif (CPU_IS_LITTLE_ENDIAN == 1)
# define MAKE_MARKER(a,b,c,d) ((a)|((b)<<8)|((c)<<16)|((d)<<24))
#elif (CPU_IS_BIG_ENDIAN == 1)
# define MAKE_MARKER(a,b,c,d) (((a)<<24)|((b)<<16)|((c)<<8)|(d))
-#else
-# error "Cannot determine endian-ness of processor."
#endif
--- a/common/libsndfile/src/sndfile.c
+++ b/common/libsndfile/src/sndfile.c
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 1999-2001 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
**
** 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
@@ -23,8 +23,12 @@
#include <ctype.h>
#include <math.h>
-/* For the Metrowerks CodeWarrior Pro Compiler (mainly MacOS) */
+/* EMX / gcc compiler for OS/2. */
+#ifdef __EMX__
+#include <sys/types.h>
+#endif
+/* For the Metrowerks CodeWarrior Pro Compiler (mainly MacOS) */
#if (defined (__MWERKS__))
#include <stat.h>
#else
@@ -48,15 +52,15 @@
{
{ SFE_NO_ERROR , "No Error." },
{ 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_OPEN_FORMAT , "Bad format specified for file open." },
{ SFE_BAD_SNDFILE_PTR , "Not a valid SNDFILE* pointer." },
{ SFE_BAD_SF_INFO_PTR , "NULL SF_INFO pointer passed to libsndfile." },
- { SFE_BAD_INT_FD , "Bad file descriptor." },
+ { 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_MALLOC_FAILED , "Internal malloc () failed." },
- { SFE_BAD_SEEK , "Internal fseek() failed." },
- { SFE_NOT_SEEKABLE , "Seek attempted on unseekable file type." },
{ 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." },
@@ -69,8 +73,21 @@
{ SFE_SHORT_READ , "Short read error." },
{ SFE_SHORT_WRITE , "Short write error." },
{ SFE_INTERNAL , "Unspecified internal error." },
+ { SFE_LOG_OVERRUN , "Log buffer has overrun. File probably broken." },
{ SFE_BAD_CONTROL_CMD , "Bad command passed to function sf_command()." },
+ { SFE_BAD_ENDIAN , "Bad endian-ness. Try default endian-ness" },
+ { 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 toopen a pipe in read/write mode." },
+ { SFE_RDWR_POSITION , "Error on RDWR position (cryptic)." },
+
{ 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 file. No 'fmt ' chunk marker." },
@@ -105,7 +122,9 @@
{ SFE_AU_UNKNOWN_FORMAT , "Error in AU file, unknown format." },
{ SFE_AU_NO_DOTSND , "Error in AU file, missing '.snd' or 'dns.' marker." },
- { SFE_RAW_READ_BAD_SPEC , "Error while opening RAW file for read. Must specify format, pcmbitwidth and channels." },
+ { 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_PAF_NO_MARKER , "Error in PAF file, no marker." },
@@ -125,13 +144,35 @@
{ SFE_SMTD_NO_SAMR , "Error in Samplitude file, no 'SAMR' marker." },
{ 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_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_FMT , "Error in W64 file. No 'fmt ' chunk marker." },
+ { SFE_W64_NO_DATA , "Error in W64 file. No 'data' chunk marker." },
+
+ { SFE_W64_FMT_SHORT , "Error in W64 file. Short 'fmt ' chunk." },
+ { SFE_W64_FMT_TOO_BIG , "Error in W64 file. 'fmt ' chunk too large." },
+
+ { 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_DWVW_BAD_BITWIDTH , "Error : Bad bit width for DWVW encoding. Must be 12, 16 or 24." },
+
{ SFE_MAX_ERROR , "Maximum error number." }
} ;
@@ -146,7 +187,7 @@
static void save_header_info (SF_PRIVATE *psf) ;
static void copy_filename (SF_PRIVATE *psf, const char *path) ;
-static int hash_command (const char *cmd) ;
+/*-static int hash_command (const char *cmd) ;-*/
/*------------------------------------------------------------------------------
** Private (static) variables.
@@ -162,8 +203,8 @@
{ if (! (a)) \
return SFE_BAD_SNDFILE_PTR ; \
(b) = (SF_PRIVATE*) (a) ; \
- if (!((b)->file)) \
- return SFE_BAD_INT_FD ; \
+ if (((b)->filedes) < 0) \
+ return SFE_BAD_FILE_PTR ; \
if ((b)->Magick != SNDFILE_MAGICK) \
return SFE_BAD_SNDFILE_PTR ; \
(b)->error = 0 ; \
@@ -174,127 +215,220 @@
*/
SNDFILE*
-sf_open_read (const char *path, SF_INFO *sfinfo)
+sf_open (const char *path, int mode, SF_INFO *sfinfo)
{ SF_PRIVATE *psf ;
- int filetype ;
+ int error ;
+
+ if (mode != SFM_READ && mode != SFM_WRITE && mode != SFM_RDWR)
+ { sf_errno = SFE_BAD_OPEN_MODE ;
+ return NULL ;
+ } ;
+ if (! path)
+ { sf_errno = SFE_BAD_FILE ;
+ return NULL ;
+ } ;
+
if (! sfinfo)
{ sf_errno = SFE_BAD_SF_INFO_PTR ;
return NULL ;
} ;
- sf_errno = 0 ;
+ sf_errno = error = 0 ;
sf_logbuffer [0] = 0 ;
- psf = malloc (sizeof (SF_PRIVATE)) ;
- if (! psf)
+ if (! (psf = malloc (sizeof (SF_PRIVATE))))
{ sf_errno = SFE_MALLOC_FAILED ;
return NULL ;
} ;
memset (psf, 0, sizeof (SF_PRIVATE)) ;
- psf->Magick = SNDFILE_MAGICK ;
- if (! strcmp (path, "-"))
- { psf->file = stdin ;
+ psf_log_printf (psf, "File : %s\n", path) ;
+ copy_filename (psf, path) ;
+
+ psf->Magick = SNDFILE_MAGICK ;
+ psf->norm_float = SF_TRUE ;
+ psf->norm_double = SF_TRUE ;
+ psf->mode = mode ;
+ psf->filelength = -1 ;
+ psf->filedes = -1 ;
+ psf->dataoffset = -1 ;
+ psf->datalength = -1 ;
+ psf->read_current = -1 ;
+ psf->write_current = -1 ;
+
+ psf->new_seek = psf_default_seek ;
+ psf->sf.format = sfinfo->format ;
+
+ if (strcmp (path, "-") == 0)
+ { /* File is a either stdin or stdout. */
psf->sf.seekable = SF_FALSE ;
- }
- else
- { /* fopen with 'b' means binary file mode for Win32 systems. */
- if (! (psf->file = fopen (path, "rb")))
- { sf_errno = SFE_OPEN_FAILED ;
- return NULL ;
+ switch (mode)
+ { case SFM_RDWR :
+ error = SFE_OPEN_PIPE_RDWR ;
+ break ;
+
+ case SFM_READ :
+ psf->filedes = 0 ;
+ break ;
+
+ case SFM_WRITE :
+ psf->filedes = 1 ;
+ break ;
+
+ default :
+ error = SFE_BAD_OPEN_MODE ;
+ break ;
} ;
- psf->sf.seekable = SF_TRUE ;
- } ;
-
- if (! psf->file)
- { sf_errno = SFE_OPEN_FAILED ;
+ psf->filelength = SF_MAX_COUNT ;
+ }
+ else if ((psf->filedes = psf_open (path, mode)) < 0)
+ error = SFE_OPEN_FAILED ;
+
+ if (error)
+ { if (psf->filedes >= 0)
+ psf_fclose (psf->filedes) ;
sf_close (psf) ;
+ sf_errno = error ;
return NULL ;
} ;
-
- psf->mode = SF_MODE_READ ;
-
- psf_log_printf (psf, "%s\n", path) ;
- if (psf->sf.seekable)
- { fseek (psf->file, 0, SEEK_END) ;
- psf->filelength = ftell (psf->file) ;
- fseek (psf->file, 0, SEEK_SET) ;
- psf_log_printf (psf, "size : %d\n", psf->filelength) ;
+
+ /* File is open, so get the length. */
+ psf->filelength = psf_get_filelen (psf->filedes) ;
+
+ memcpy (&(psf->sf), sfinfo, sizeof (SF_INFO)) ;
+
+ psf->sf.seekable = SF_TRUE ;
+ psf->sf.sections = 1 ;
+
+ if (mode == SFM_WRITE || (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_format_check (sfinfo))
+ error = SFE_BAD_OPEN_FORMAT ;
}
- else
- psf->filelength = 0x7FFF0000 ; /* Stupidly big number. */
+ else if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_RAW)
+ { /* If type RAW has not been specified then need to figure out file type. */
+ psf->sf.format = guess_file_type (psf, psf->filename) ;
+ } ;
- copy_filename (psf, path) ;
-
- if ((sfinfo->format & SF_FORMAT_TYPEMASK) == SF_FORMAT_RAW && sfinfo->channels && sfinfo->pcmbitwidth)
- filetype = SF_FORMAT_RAW ;
- else
- { memset (sfinfo, 0, sizeof (SF_INFO)) ;
- filetype = guess_file_type (psf, psf->filename) ;
+ if (error)
+ { if (psf->filedes >= 0)
+ psf_fclose (psf->filedes) ;
+ sf_close (psf) ;
+ sf_errno = error ;
+ return NULL ;
} ;
-
- switch (filetype)
+
+ /* Set bytewidth if known. */
+ switch (sfinfo->format & SF_FORMAT_SUBMASK)
+ { case SF_FORMAT_PCM_S8 :
+ case SF_FORMAT_PCM_U8 :
+ case SF_FORMAT_ULAW :
+ case SF_FORMAT_ALAW :
+ psf->bytewidth = 1 ;
+ break ;
+
+ case SF_FORMAT_PCM_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 (psf->sf.format & SF_FORMAT_TYPEMASK)
{ case SF_FORMAT_WAV :
- sf_errno = wav_open_read (psf) ;
+ error = wav_open (psf) ;
break ;
case SF_FORMAT_AIFF :
- sf_errno = aiff_open_read (psf) ;
+ error = aiff_open (psf) ;
break ;
case SF_FORMAT_AU :
- sf_errno = au_open_read (psf) ;
+ error = au_open (psf) ;
break ;
+ case SF_FORMAT_AU | SF_FORMAT_ULAW :
+ error = au_nh_open (psf) ;
+ break ;
+
case SF_FORMAT_RAW :
- /* For RAW files, need the sfinfo struct data to
- ** figure out the bitwidth, endian-ness etc.
- */
- memcpy (&(psf->sf), sfinfo, sizeof (SF_INFO)) ;
- sf_errno = raw_open_read (psf) ;
+ error = raw_open (psf) ;
break ;
case SF_FORMAT_PAF :
- sf_errno = paf_open_read (psf) ;
+ error = paf_open (psf) ;
break ;
case SF_FORMAT_SVX :
- sf_errno = svx_open_read (psf) ;
+ error = svx_open (psf) ;
break ;
case SF_FORMAT_NIST :
- sf_errno = nist_open_read (psf) ;
+ error = nist_open (psf) ;
break ;
case SF_FORMAT_SMPLTD :
- sf_errno = smpltd_open_read (psf) ;
+ error = smpltd_open (psf) ;
break ;
+ case SF_FORMAT_IRCAM :
+ error = ircam_open (psf) ;
+ break ;
+
case SF_FORMAT_VOC :
- sf_errno = voc_open_read (psf) ;
+ error = voc_open (psf) ;
break ;
- case SF_FORMAT_IRCAM :
- sf_errno = ircam_open_read (psf) ;
+ case SF_FORMAT_W64 :
+ error = w64_open (psf) ;
break ;
+ case SF_FORMAT_SD2 :
+ error = sd2_open (psf) ;
+ break ;
+
+ case SF_FORMAT_REX2 :
+ error = rx2_open (psf) ;
+ break ;
+
+ case SF_FORMAT_TXW :
+ error = txw_open (psf) ;
+ break ;
+
default :
- sf_errno = SFE_UNKNOWN_FORMAT ;
+ error = SFE_UNKNOWN_FORMAT ;
} ;
- /* Both the file format and the file must be seekable to enable sf_seek(). */
- /*-psf->sf.seekable = (psf->sf.seekable && seekable) ? SF_TRUE : SF_FALSE ;-*/
-
- if (sf_errno)
- { save_header_info (psf) ;
+ if (error)
+ { sf_errno = error ;
+ save_header_info (psf) ;
sf_close (psf) ;
return NULL ;
} ;
if (! validate_sfinfo (&(psf->sf)))
- { psf_log_SF_INFO (psf) ;
+ {
+#ifndef REMOVE_ME
+printf ("validate_sfinfo\n") ;
+puts (psf->logbuffer) ;
+#endif
+ psf_log_SF_INFO (psf) ;
save_header_info (psf) ;
sf_errno = SFE_BAD_SF_INFO ;
sf_close (psf) ;
@@ -302,136 +436,46 @@
} ;
if (! validate_psf (psf))
- { printf ("validate_psf\n") ;
+ {
+#ifndef REMOVE_ME
+printf ("validate_psf\n") ;
+puts (psf->logbuffer) ;
+#endif
save_header_info (psf) ;
sf_errno = SFE_INTERNAL ;
sf_close (psf) ;
return NULL ;
} ;
-
+
+ psf->read_current = 0 ;
+ psf->write_current= (psf->mode == SFM_RDWR) ? psf->sf.samples : 0 ;
+
memcpy (sfinfo, &(psf->sf), sizeof (SF_INFO)) ;
return (SNDFILE*) psf ;
-} /* sf_open_read */
+} /* sf_open */
/*------------------------------------------------------------------------------
*/
-SNDFILE*
-sf_open_write (const char *path, const SF_INFO *sfinfo)
-{ SF_PRIVATE *psf ;
+int
+sf_error (SNDFILE *sndfile)
+{ SF_PRIVATE *psf ;
- if (! sfinfo)
- { sf_errno = SFE_BAD_SF_INFO_PTR ;
- return NULL ;
+ if (! sndfile)
+ { if (sf_error)
+ return 1 ;
+ return 0 ;
} ;
-
- if (! sf_format_check (sfinfo))
- { sf_errno = SFE_BAD_OPEN_FORMAT ;
- return NULL ;
- } ;
- sf_errno = 0 ;
- sf_logbuffer [0] = 0 ;
+ VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ;
- psf = malloc (sizeof (SF_PRIVATE)) ;
- if (! psf)
- { sf_errno = SFE_MALLOC_FAILED ;
- return NULL ;
- } ;
+ if (psf->error)
+ return 1 ;
- memset (psf, 0, sizeof (SF_PRIVATE)) ;
- memcpy (&(psf->sf), sfinfo, sizeof (SF_INFO)) ;
+ return 0 ;
+} /* sf_error */
- psf->Magick = SNDFILE_MAGICK ;
-
- if (! strcmp (path, "-"))
- { psf->file = stdout ;
- psf->sf.seekable = SF_FALSE ;
- }
- else
- { /* fopen with 'b' means binary file mode for Win32 systems. */
- if (! (psf->file = fopen (path, "wb")))
- { sf_errno = SFE_OPEN_FAILED ;
- sf_close (psf) ;
- return NULL ;
- } ;
- } ;
-
- psf->mode = SF_MODE_WRITE ;
-
- psf->filelength = ftell (psf->file) ;
- fseek (psf->file, 0, SEEK_SET) ;
-
- copy_filename (psf, path) ;
-
- switch (sfinfo->format & SF_FORMAT_TYPEMASK)
- { case SF_FORMAT_WAV :
- if ((sf_errno = wav_open_write (psf)))
- { sf_close (psf) ;
- return NULL ;
- } ;
- break ;
-
- case SF_FORMAT_AIFF :
- if ((sf_errno = aiff_open_write (psf)))
- { sf_close (psf) ;
- return NULL ;
- } ;
- break ;
-
- case SF_FORMAT_AU :
- case SF_FORMAT_AULE :
- if ((sf_errno = au_open_write (psf)))
- { sf_close (psf) ;
- return NULL ;
- } ;
- break ;
-
- case SF_FORMAT_RAW :
- if ((sf_errno = raw_open_write (psf)))
- { sf_close (psf) ;
- return NULL ;
- } ;
- break ;
-
- case SF_FORMAT_PAF :
- if ((sf_errno = paf_open_write (psf)))
- { sf_close (psf) ;
- return NULL ;
- } ;
- break ;
-
- case SF_FORMAT_SVX :
- if ((sf_errno = svx_open_write (psf)))
- { sf_close (psf) ;
- return NULL ;
- } ;
- break ;
-
- case SF_FORMAT_NIST :
- if ((sf_errno = nist_open_write (psf)))
- { sf_close (psf) ;
- return NULL ;
- } ;
- break ;
-
- case SF_FORMAT_IRCAM :
- if ((sf_errno = ircam_open_write (psf)))
- { sf_close (psf) ;
- return NULL ;
- } ;
- break ;
-
- default :
- sf_errno = SFE_UNKNOWN_FORMAT ;
- sf_close (psf) ;
- return NULL ;
- } ;
-
- return (SNDFILE*) psf ;
-} /* sf_open_write */
-
/*------------------------------------------------------------------------------
*/
@@ -526,8 +570,11 @@
int
sf_format_check (const SF_INFO *info)
-{ int subformat = info->format & SF_FORMAT_SUBMASK ;
+{ int subformat, endian ;
+ subformat = info->format & SF_FORMAT_SUBMASK ;
+ endian = info->format & SF_FORMAT_SUBMASK ;
+
/* 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.
@@ -538,87 +585,143 @@
switch (info->format & SF_FORMAT_TYPEMASK)
{ case SF_FORMAT_WAV :
- if (subformat == SF_FORMAT_PCM && (info->pcmbitwidth >= 8 && info->pcmbitwidth <= 32))
+ /* WAV 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_IMA_ADPCM && info->pcmbitwidth == 16 && info->channels <= 2)
+ if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
return 1 ;
- if (subformat == SF_FORMAT_MS_ADPCM && info->pcmbitwidth == 16 && info->channels <= 2)
+ if ((subformat == SF_FORMAT_IMA_ADPCM || subformat == SF_FORMAT_MS_ADPCM) && info->channels <= 2)
return 1 ;
- if (subformat == SF_FORMAT_GSM610 && info->pcmbitwidth == 16 && info->channels == 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 && info->pcmbitwidth == 32)
+ if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
return 1 ;
break ;
case SF_FORMAT_AIFF :
- if (subformat == SF_FORMAT_PCM && (info->pcmbitwidth >= 8 && info->pcmbitwidth <= 32))
+ /* 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 ;
- if (subformat == SF_FORMAT_PCM_LE && (info->pcmbitwidth >= 8 && info->pcmbitwidth <= 32))
+ /* Other encodings. Check for endian-ness. */
+ if (endian == SF_ENDIAN_LITTLE || endian == SF_ENDIAN_CPU)
+ return 0 ;
+ if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_S8)
return 1 ;
- if (subformat == SF_FORMAT_PCM_BE && (info->pcmbitwidth >= 8 && info->pcmbitwidth <= 32))
+ if (subformat == SF_FORMAT_FLOAT || subformat == SF_FORMAT_DOUBLE)
return 1 ;
- if (subformat == SF_FORMAT_FLOAT && (info->pcmbitwidth == 32))
+ 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 ;
break ;
case SF_FORMAT_AU :
- case SF_FORMAT_AULE :
- if (subformat == SF_FORMAT_PCM && (info->pcmbitwidth >= 8 && info->pcmbitwidth <= 32))
+ 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_FLOAT && (info->pcmbitwidth == 32))
- return 1 ;
break ;
case SF_FORMAT_RAW :
- if (subformat == SF_FORMAT_PCM_S8 && info->pcmbitwidth == 8)
+ if (subformat == SF_FORMAT_PCM_U8 || subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16)
return 1 ;
- if (subformat == SF_FORMAT_PCM_U8 && info->pcmbitwidth == 8)
+ if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
return 1 ;
- if (subformat != SF_FORMAT_PCM_BE && subformat != SF_FORMAT_PCM_LE)
- break ;
- if (! (info->pcmbitwidth % 8) && info->pcmbitwidth <= 32)
+ 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 ;
break ;
case SF_FORMAT_PAF :
- if (subformat == SF_FORMAT_PCM_S8 && info->pcmbitwidth == 8)
+ if (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_16)
return 1 ;
- if (subformat != SF_FORMAT_PCM_BE && subformat != SF_FORMAT_PCM_LE && subformat != SF_FORMAT_PCM)
- break ;
- if ((info->pcmbitwidth % 8) == 0 && info->pcmbitwidth <= 24)
+ if (subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
return 1 ;
break ;
case SF_FORMAT_SVX :
- if (subformat == SF_FORMAT_PCM && (info->pcmbitwidth == 8 || info->pcmbitwidth == 16))
+ /* SVX currently does not support more than one channel. */
+ 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) && info->channels == 1)
return 1 ;
break ;
case SF_FORMAT_NIST :
- if ((subformat == SF_FORMAT_PCM_BE || subformat == SF_FORMAT_PCM_LE || subformat == SF_FORMAT_PCM)
- && info->pcmbitwidth >= 16 && info->pcmbitwidth <= 32)
+ 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_BE || subformat == SF_FORMAT_PCM_LE || subformat == SF_FORMAT_PCM)
- && info->pcmbitwidth >= 16 && info->pcmbitwidth <= 32)
+ if (subformat == SF_FORMAT_PCM_16 || subformat == SF_FORMAT_PCM_24 || subformat == SF_FORMAT_PCM_32)
return 1 ;
- if ((subformat == SF_FORMAT_FLOAT_BE || subformat == SF_FORMAT_FLOAT_LE || subformat == SF_FORMAT_FLOAT)
- && info->pcmbitwidth == 32)
+ 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_SD2 :
+ /* SD2 is strictly big endian. */
+ if (endian == SF_ENDIAN_LITTLE || endian == SF_ENDIAN_CPU)
+ return 0 ;
+ if (subformat == SF_FORMAT_PCM_16)
+ return 1 ;
+ break ;
+
default : break ;
} ;
@@ -628,94 +731,99 @@
/*------------------------------------------------------------------------------
*/
-size_t
-sf_get_header_info (SNDFILE *sndfile, char *buffer, size_t bufferlen, size_t offset)
-{ SF_PRIVATE *psf ;
- int len ;
+int
+sf_command (SNDFILE *sndfile, int command, void *data, int datasize)
+{ SF_PRIVATE *psf = NULL ;
- if (! sndfile)
- { strncpy (buffer, sf_logbuffer, bufferlen - 1) ;
- buffer [bufferlen - 1] = 0 ;
- return strlen (sf_logbuffer) ;
- } ;
-
- VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ;
+ /*-command = hash_command (cmd) ;-*/
- len = strlen (psf->logbuffer) ;
- if (offset < 0 || offset >= len)
+ /* This set of commands do not need the sndfile parameter. */
+ switch (command)
+ { case SFC_GET_LIB_VERSION :
+ strncpy (data, PACKAGE "-" VERSION, datasize - 1) ;
+ ((char*) data) [datasize - 1] = 0 ;
return 0 ;
-
- strncpy (buffer, psf->logbuffer, bufferlen - 1) ;
- buffer [bufferlen - 1] = 0 ;
-
- return strlen (psf->logbuffer) ;
-} /* sf_get_header_info */
-/*------------------------------------------------------------------------------
-*/
-
-size_t
-sf_get_lib_version (char *buffer, size_t bufferlen)
-{ if (! buffer || ! bufferlen)
- return 0 ;
-
- strncpy (buffer, PACKAGE "-" VERSION, bufferlen - 1) ;
- buffer [bufferlen - 1] = 0 ;
+ case SFC_GET_SIMPLE_FORMAT_COUNT :
+ if (! data || datasize != SIGNED_SIZEOF (int))
+ return (sf_errno = SFE_BAD_CONTROL_CMD) ;
+ *((int*) data) = psf_get_format_simple_count () ;
+ return 0 ;
- return strlen (buffer) ;
-} /* sf_get_lib_version */
+ case SFC_GET_SIMPLE_FORMAT :
+ if (! data || datasize != SIGNED_SIZEOF (SF_FORMAT_INFO))
+ return (sf_errno = SFE_BAD_CONTROL_CMD) ;
+ return psf_get_format_simple (data) ;
-/*------------------------------------------------------------------------------
-*/
+ case SFC_GET_FORMAT_MAJOR_COUNT :
+ if (! data || datasize != SIGNED_SIZEOF (int))
+ return (sf_errno = SFE_BAD_CONTROL_CMD) ;
+ *((int*) data) = psf_get_format_major_count () ;
+ return 0 ;
+
+ case SFC_GET_FORMAT_MAJOR :
+ if (! data || datasize != SIGNED_SIZEOF (SF_FORMAT_INFO))
+ return (sf_errno = SFE_BAD_CONTROL_CMD) ;
+ return psf_get_format_major (data) ;
-int
-sf_command (SNDFILE *sndfile, const char *cmd, void *data, int datasize)
-{ SF_PRIVATE *psf ;
- int command ;
-
- command = hash_command (cmd) ;
-
- if (command == SFC_LIB_VERSION)
- { strncpy (data, PACKAGE "-" VERSION, datasize - 1) ;
+ case SFC_GET_FORMAT_SUBTYPE_COUNT :
+ if (! data || datasize != SIGNED_SIZEOF (int))
+ return (sf_errno = SFE_BAD_CONTROL_CMD) ;
+ *((int*) data) = psf_get_format_subtype_count () ;
+ return 0 ;
+
+ case SFC_GET_FORMAT_SUBTYPE :
+ if (! data || datasize != SIGNED_SIZEOF (SF_FORMAT_INFO))
+ return (sf_errno = SFE_BAD_CONTROL_CMD) ;
+ return psf_get_format_subtype (data) ;
+
+ } ;
+
+ if (! sndfile && command == SFC_GET_LOG_INFO)
+ { if (! data)
+ return (psf->error = SFE_BAD_CONTROL_CMD) ;
+ strncpy (data, sf_logbuffer, datasize) ;
((char*) data) [datasize - 1] = 0 ;
- return strlen ((char*) data) ;
+ return 0 ;
} ;
VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ;
-
+
switch (command)
- { case 0 :
- return (psf->error = SFE_BAD_CONTROL_CMD) ;
-
- case SFC_NORM_FLOAT :
- if (! data)
- return (psf->error = SFE_BAD_CONTROL_CMD) ;
- if (! strcmp ("on", data))
- psf->norm_float = SF_TRUE ;
- else if (! strcmp ("off", data))
- psf->norm_float = SF_FALSE ;
- else
- return (psf->error = SFE_BAD_CONTROL_CMD) ;
+ { case SFC_SET_NORM_FLOAT :
+ psf->norm_float = (datasize) ? SF_TRUE : SF_FALSE ;
break ;
-
- case SFC_NORM_DOUBLE :
+
+ case SFC_SET_NORM_DOUBLE :
+ psf->norm_double = (datasize) ? SF_TRUE : SF_FALSE ;
+ break ;
+
+ case SFC_GET_NORM_FLOAT :
+ return psf->norm_float ;
+
+ case SFC_GET_NORM_DOUBLE :
+ return psf->norm_double ;
+
+ case SFC_GET_LOG_INFO :
if (! data)
return (psf->error = SFE_BAD_CONTROL_CMD) ;
- if (! strcmp ("on", data))
- psf->norm_double = SF_TRUE ;
- else if (! strcmp ("off", data))
- psf->norm_double = SF_FALSE ;
- else
+ strncpy (data, psf->logbuffer, datasize) ;
+ ((char*) data) [datasize - 1] = 0 ;
+ break ;
+
+ case SFC_CALC_SIGNAL_MAX :
+ if (! data || datasize != sizeof (double))
return (psf->error = SFE_BAD_CONTROL_CMD) ;
- break ;
-
+ *((double*) data) = psf_calc_signal_max (psf) ;
+ break ;
+
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 = %08X\n", command) ;
- break ;
+ psf_log_printf (psf, "*** sf_command : cmd = 0x%X\n", command) ;
+ return (psf->error = SFE_BAD_CONTROL_CMD) ;
} ;
return 0 ;
@@ -724,156 +832,155 @@
/*------------------------------------------------------------------------------
*/
-double
-sf_signal_max (SNDFILE *sndfile)
-{ SF_PRIVATE *psf ;
- long position ;
- unsigned int k, len, readcount ;
- double max = 0.0, *data, temp ;
-
- VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ;
-
- /* If the file has a PEAK chunk use that information. */
- if (psf->has_peak)
- { for (k = 0 ; k < psf->sf.channels ; k++)
- if (max < fabs (psf->peak.peak [k].value))
- max = fabs (psf->peak.peak [k].value);
- return max ;
- } ;
-
- /* 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 ;
- } ;
-
- /* Brute force. Read the whole file and find the biggest sample. */
- position = sf_seek (sndfile, 0, SEEK_CUR) ; /* Get current position in file */
- sf_seek (sndfile, 0, SEEK_SET) ; /* Go to start of file. */
-
- len = psf->sf.channels * 1024 ;
-
- data = malloc (len * sizeof (double)) ;
- readcount = len ;
- while (readcount == len)
- { readcount = sf_read_double (sndfile, data, len, 0) ;
- for (k = 0 ; k < len ; k++)
- { temp = data [k] ;
- temp = temp < 0.0 ? -temp : temp ;
- max = temp > max ? temp : max ;
- } ;
- } ;
- free (data) ;
-
- sf_seek (sndfile, position, SEEK_SET) ; /* Return to original position. */
-
- return max ;
-} /* sf_signal_max */
-
-/*------------------------------------------------------------------------------
-*/
-
-long
-sf_seek (SNDFILE *sndfile, long offset, int whence)
+sf_count_t
+sf_seek (SNDFILE *sndfile, sf_count_t offset, int whence)
{ SF_PRIVATE *psf ;
- long realseek, position ;
+ sf_count_t seek_from_start = 0, retval ;
VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ;
if (! psf->sf.seekable)
{ psf->error = SFE_NOT_SEEKABLE ;
- return ((long) -1) ;
+ return ((sf_count_t) -1) ;
} ;
- if (psf->seek_func)
- { psf->seek_func (psf, offset, whence) ;
- return psf->current ;
+ /* If the whence parameter has a mode ORed in, check to see that
+ ** it makes sense.
+ */
+ if (((whence & SFM_MASK) == SFM_WRITE && psf->mode == SFM_READ) ||
+ ((whence & SFM_MASK) == SFM_WRITE && psf->mode == SFM_WRITE))
+ { psf->error = SFE_WRONG_SEEK ;
+ return ((sf_count_t) -1) ;
} ;
-
- if (! (psf->blockwidth && psf->datalength && psf->dataoffset))
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
-
+
+ /* Convert all SEEK_CUR and SEEK_END into seek_from_start to be
+ ** used with SEEK_SET.
+ */
switch (whence)
- { case SEEK_SET :
- if (offset < 0 || offset * psf->blockwidth > psf->datalength)
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
- realseek = psf->dataoffset + offset * psf->blockwidth ;
- fseek (psf->file, realseek, SEEK_SET) ;
- position = ftell (psf->file) ;
+ { /* 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 :
- position = (ftell (psf->file) - psf->dataoffset) / psf->blockwidth ;
- if (psf->current + offset > psf->sf.samples)
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
- realseek = psf->dataoffset + (position + offset) * psf->blockwidth ;
- fseek (psf->file, realseek, SEEK_SET) ;
- position = ftell (psf->file) ;
+ if (psf->mode == SFM_READ)
+ seek_from_start = psf->read_current + offset ;
+ else if (psf->mode == SFM_WRITE)
+ 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 :
+ seek_from_start = psf->write_current + offset ;
+ break ;
+
+ /* The SEEK_END */
case SEEK_END :
- if (offset > 0 || psf->sf.samples + offset < 0)
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
- realseek = (psf->sf.samples + offset) * psf->blockwidth + psf->dataoffset ;
+ if (psf->mode != SFM_READ && psf->mode != SFM_WRITE)
+ psf->error = SFE_AMBIGUOUS_SEEK ;
+ else
+ seek_from_start = psf->sf.samples + offset ;
+ break ;
- fseek (psf->file, realseek, SEEK_SET) ;
- position = ftell (psf->file) ;
+ case SEEK_END | SFM_READ :
+ seek_from_start = psf->sf.samples + offset ;
+ /*=======================================
+ if (seek_from_start == psf->read_current)
+ return psf->read_current ;
+ =======================================*/
break ;
-
- default :
+ case SEEK_END | SFM_WRITE :
+ seek_from_start = psf->sf.samples + offset ;
+ break ;
+
+ default :
psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
+ break ;
+ } ;
+
+ if (psf->error)
+ return ((sf_count_t) -1) ;
+
+ if (seek_from_start < 0 || seek_from_start > psf->sf.samples)
+ { psf->error = SFE_BAD_SEEK ;
+ return ((sf_count_t) -1) ;
} ;
- psf->current = (position - psf->dataoffset) / psf->blockwidth ;
- return psf->current ;
+ if (psf->new_seek)
+ { int new_mode = (whence & SFM_MASK) ? (whence & SFM_MASK) : psf->mode ;
+
+ retval = psf->new_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 ((sf_count_t) -1) ;
} /* sf_seek */
/*------------------------------------------------------------------------------
*/
-size_t
-sf_read_raw (SNDFILE *sndfile, void *ptr, size_t bytes)
+sf_count_t
+sf_read_raw (SNDFILE *sndfile, void *ptr, sf_count_t bytes)
{ SF_PRIVATE *psf ;
- size_t count ;
+ sf_count_t count ;
VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ;
- if (psf->mode != SF_MODE_READ)
+ if (psf->mode == SFM_WRITE)
{ psf->error = SFE_NOT_READMODE ;
return 0 ;
} ;
-
- if (psf->current >= psf->datalength)
+
+ if (bytes < 0 || psf->read_current >= psf->datalength)
{ memset (ptr, 0, bytes) ;
return 0 ;
} ;
-
+
if (bytes % (psf->sf.channels * psf->bytewidth))
{ psf->error = SFE_BAD_READ_ALIGN ;
return 0 ;
} ;
-
- count = fread (ptr, 1, bytes, psf->file) ;
-
+
+ count = psf_fread (ptr, 1, bytes, psf->filedes) ;
+
if (count < bytes)
memset (((char*)ptr) + count, 0, bytes - count) ;
- psf->current += count / psf->blockwidth ;
-
+ psf->read_current += count / psf->blockwidth ;
+
+ psf->last_op = SFM_READ ;
+
return count ;
} /* sf_read_raw */
@@ -880,14 +987,14 @@
/*------------------------------------------------------------------------------
*/
-size_t
-sf_read_short (SNDFILE *sndfile, short *ptr, size_t len)
+sf_count_t
+sf_read_short (SNDFILE *sndfile, short *ptr, sf_count_t len)
{ SF_PRIVATE *psf ;
- size_t count, extra ;
+ sf_count_t count, extra ;
VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ;
- if (psf->mode != SF_MODE_READ)
+ if (psf->mode == SFM_WRITE)
{ psf->error = SFE_NOT_READMODE ;
return 0 ;
} ;
@@ -897,63 +1004,75 @@
return 0 ;
} ;
- if (psf->current >= psf->sf.samples)
+ if (len <= 0 || psf->read_current >= psf->sf.samples)
{ memset (ptr, 0, len * sizeof (short)) ;
return 0 ; /* End of file. */
} ;
- if (! psf->read_short)
+ if (! psf->read_short || ! psf->new_seek)
{ psf->error = SFE_UNIMPLEMENTED ;
return 0 ;
} ;
+ if (psf->last_op != SFM_READ)
+ if (psf->new_seek (psf, SFM_READ, psf->read_current) < 0)
+ return 0 ;
+
count = psf->read_short (psf, ptr, len) ;
- if (psf->current + count / psf->sf.channels > psf->sf.samples)
- { count = (psf->sf.samples - psf->current) * psf->sf.channels ;
+ if (psf->read_current + count / psf->sf.channels > psf->sf.samples)
+ { count = (psf->sf.samples - psf->read_current) * psf->sf.channels ;
extra = len - count ;
memset (ptr + count, 0, extra * sizeof (short)) ;
- psf->current = psf->sf.samples ;
+ psf->read_current = psf->sf.samples ;
} ;
- psf->current += count / psf->sf.channels ;
+ psf->read_current += count / psf->sf.channels ;
+ psf->last_op = SFM_READ ;
+
return count ;
} /* sf_read_short */
-size_t
-sf_readf_short (SNDFILE *sndfile, short *ptr, size_t frames)
+sf_count_t
+sf_readf_short (SNDFILE *sndfile, short *ptr, sf_count_t frames)
{ SF_PRIVATE *psf ;
- size_t count, extra ;
+ sf_count_t count, extra ;
VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ;
- if (psf->mode != SF_MODE_READ)
+ if (psf->mode == SFM_WRITE)
{ psf->error = SFE_NOT_READMODE ;
return 0 ;
} ;
- if (psf->current >= psf->sf.samples)
+ if (frames <= 0 || psf->read_current >= psf->sf.samples)
{ memset (ptr, 0, frames * psf->sf.channels * sizeof (short)) ;
return 0 ; /* End of file. */
} ;
- if (! psf->read_short)
+ if (! psf->read_short || ! psf->new_seek)
{ psf->error = SFE_UNIMPLEMENTED ;
return 0 ;
} ;
+ if (psf->last_op != SFM_READ)
+ if (psf->new_seek (psf, SFM_READ, psf->read_current) < 0)
+ return 0 ;
+
count = psf->read_short (psf, ptr, frames * psf->sf.channels) ;
- if (psf->current + count / psf->sf.channels > psf->sf.samples)
- { count = (psf->sf.samples - psf->current) * psf->sf.channels ;
+ if (psf->read_current + count / psf->sf.channels > psf->sf.samples)
+ { count = (psf->sf.samples - psf->read_current) * psf->sf.channels ;
extra = frames * psf->sf.channels - count ;
memset (ptr + count, 0, extra * sizeof (short)) ;
- psf->current = psf->sf.samples ;
+ psf->read_current = psf->sf.samples ;
} ;
- psf->current += count / psf->sf.channels ;
+ psf->read_current += count / psf->sf.channels ;
+ psf->last_op = SFM_READ ;
+
return count / psf->sf.channels ;
} /* sf_readf_short */
@@ -960,14 +1079,14 @@
/*------------------------------------------------------------------------------
*/
-size_t
-sf_read_int (SNDFILE *sndfile, int *ptr, size_t len)
+sf_count_t
+sf_read_int (SNDFILE *sndfile, int *ptr, sf_count_t len)
{ SF_PRIVATE *psf ;
- size_t count, extra ;
+ sf_count_t count, extra ;
VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;
- if (psf->mode != SF_MODE_READ)
+ if (psf->mode == SFM_WRITE)
{ psf->error = SFE_NOT_READMODE ;
return 0 ;
} ;
@@ -977,63 +1096,75 @@
return 0 ;
} ;
- if (psf->current >= psf->sf.samples)
+ if (len <= 0 || psf->read_current >= psf->sf.samples)
{ memset (ptr, 0, len * sizeof (int)) ;
return 0 ;
} ;
- if (! psf->read_int)
+ if (! psf->read_int || ! psf->new_seek)
{ psf->error = SFE_UNIMPLEMENTED ;
return 0 ;
} ;
+ if (psf->last_op != SFM_READ)
+ if (psf->new_seek (psf, SFM_READ, psf->read_current) < 0)
+ return 0 ;
+
count = psf->read_int (psf, ptr, len) ;
- if (psf->current + count / psf->sf.channels > psf->sf.samples)
- { count = (psf->sf.samples - psf->current) * psf->sf.channels ;
+ if (psf->read_current + count / psf->sf.channels > psf->sf.samples)
+ { count = (psf->sf.samples - psf->read_current) * psf->sf.channels ;
extra = len - count ;
memset (ptr + count, 0, extra * sizeof (int)) ;
- psf->current = psf->sf.samples ;
+ psf->read_current = psf->sf.samples ;
} ;
- psf->current += count / psf->sf.channels ;
+ psf->read_current += count / psf->sf.channels ;
+ psf->last_op = SFM_READ ;
+
return count ;
} /* sf_read_int */
-size_t
-sf_readf_int (SNDFILE *sndfile, int *ptr, size_t frames)
+sf_count_t
+sf_readf_int (SNDFILE *sndfile, int *ptr, sf_count_t frames)
{ SF_PRIVATE *psf ;
- size_t count, extra ;
+ sf_count_t count, extra ;
VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;
- if (psf->mode != SF_MODE_READ)
+ if (psf->mode == SFM_WRITE)
{ psf->error = SFE_NOT_READMODE ;
return 0 ;
} ;
- if (psf->current >= psf->sf.samples)
+ if (frames <= 0 || psf->read_current >= psf->sf.samples)
{ memset (ptr, 0, frames * psf->sf.channels * sizeof (int)) ;
return 0 ;
} ;
- if (! psf->read_int)
+ if (! psf->read_int || ! psf->new_seek)
{ psf->error = SFE_UNIMPLEMENTED ;
return 0 ;
} ;
+ if (psf->last_op != SFM_READ)
+ if (psf->new_seek (psf, SFM_READ, psf->read_current) < 0)
+ return 0 ;
+
count = psf->read_int (psf, ptr, frames * psf->sf.channels) ;
- if (psf->current + count / psf->sf.channels > psf->sf.samples)
- { count = (psf->sf.samples - psf->current) * psf->sf.channels ;
+ if (psf->read_current + count / psf->sf.channels > psf->sf.samples)
+ { count = (psf->sf.samples - psf->read_current) * psf->sf.channels ;
extra = frames * psf->sf.channels - count ;
memset (ptr + count, 0, extra * sizeof (int)) ;
- psf->current = psf->sf.samples ;
+ psf->read_current = psf->sf.samples ;
} ;
- psf->current += count / psf->sf.channels ;
+ psf->read_current += count / psf->sf.channels ;
+ psf->last_op = SFM_READ ;
+
return count / psf->sf.channels ;
} /* sf_readf_int */
@@ -1040,14 +1171,14 @@
/*------------------------------------------------------------------------------
*/
-size_t
-sf_read_float (SNDFILE *sndfile, float *ptr, size_t len)
+sf_count_t
+sf_read_float (SNDFILE *sndfile, float *ptr, sf_count_t len)
{ SF_PRIVATE *psf ;
- size_t count, extra ;
+ sf_count_t count, extra ;
VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;
- if (psf->mode != SF_MODE_READ)
+ if (psf->mode == SFM_WRITE)
{ psf->error = SFE_NOT_READMODE ;
return 0 ;
} ;
@@ -1057,63 +1188,75 @@
return 0 ;
} ;
- if (psf->current >= psf->sf.samples)
+ if (len <= 0 || psf->read_current >= psf->sf.samples)
{ memset (ptr, 0, len * sizeof (float)) ;
return 0 ;
} ;
- if (! psf->read_float)
+ if (! psf->read_float || ! psf->new_seek)
{ psf->error = SFE_UNIMPLEMENTED ;
return 0 ;
} ;
+ if (psf->last_op != SFM_READ)
+ if (psf->new_seek (psf, SFM_READ, psf->read_current) < 0)
+ return 0 ;
+
count = psf->read_float (psf, ptr, len) ;
- if (psf->current + count / psf->sf.channels > psf->sf.samples)
- { count = (psf->sf.samples - psf->current) * psf->sf.channels ;
+ if (psf->read_current + count / psf->sf.channels > psf->sf.samples)
+ { count = (psf->sf.samples - psf->read_current) * psf->sf.channels ;
extra = len - count ;
memset (ptr + count, 0, extra * sizeof (float)) ;
- psf->current = psf->sf.samples ;
+ psf->read_current = psf->sf.samples ;
} ;
- psf->current += count / psf->sf.channels ;
+ psf->read_current += count / psf->sf.channels ;
+ psf->last_op = SFM_READ ;
+
return count ;
} /* sf_read_float */
-size_t
-sf_readf_float (SNDFILE *sndfile, float *ptr, size_t frames)
+sf_count_t
+sf_readf_float (SNDFILE *sndfile, float *ptr, sf_count_t frames)
{ SF_PRIVATE *psf ;
- size_t count, extra ;
+ sf_count_t count, extra ;
VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;
- if (psf->mode != SF_MODE_READ)
+ if (psf->mode == SFM_WRITE)
{ psf->error = SFE_NOT_READMODE ;
return 0 ;
} ;
- if (psf->current >= psf->sf.samples)
+ if (frames <= 0 || psf->read_current >= psf->sf.samples)
{ memset (ptr, 0, frames * psf->sf.channels * sizeof (float)) ;
return 0 ;
} ;
- if (! psf->read_float)
+ if (! psf->read_float || ! psf->new_seek)
{ psf->error = SFE_UNIMPLEMENTED ;
return 0 ;
} ;
+ if (psf->last_op != SFM_READ)
+ if (psf->new_seek (psf, SFM_READ, psf->read_current) < 0)
+ return 0 ;
+
count = psf->read_float (psf, ptr, frames * psf->sf.channels) ;
- if (psf->current + count / psf->sf.channels > psf->sf.samples)
- { count = (psf->sf.samples - psf->current) * psf->sf.channels ;
+ if (psf->read_current + count / psf->sf.channels > psf->sf.samples)
+ { count = (psf->sf.samples - psf->read_current) * psf->sf.channels ;
extra = frames * psf->sf.channels - count ;
memset (ptr + count, 0, extra * sizeof (float)) ;
- psf->current = psf->sf.samples ;
+ psf->read_current = psf->sf.samples ;
} ;
- psf->current += count / psf->sf.channels ;
+ psf->read_current += count / psf->sf.channels ;
+ psf->last_op = SFM_READ ;
+
return count / psf->sf.channels ;
} /* sf_readf_float */
@@ -1120,14 +1263,14 @@
/*------------------------------------------------------------------------------
*/
-size_t
-sf_read_double (SNDFILE *sndfile, double *ptr, size_t len, int normalize)
+sf_count_t
+sf_read_double (SNDFILE *sndfile, double *ptr, sf_count_t len)
{ SF_PRIVATE *psf ;
- size_t count, extra ;
+ sf_count_t count, extra ;
VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ;
- if (psf->mode != SF_MODE_READ)
+ if (psf->mode == SFM_WRITE)
{ psf->error = SFE_NOT_READMODE ;
return 0 ;
} ;
@@ -1137,63 +1280,75 @@
return 0 ;
} ;
- if (psf->current >= psf->sf.samples)
+ if (len <= 0 || psf->read_current >= psf->sf.samples)
{ memset (ptr, 0, len * sizeof (double)) ;
return 0 ;
} ;
- if (! psf->read_double)
+ if (! psf->read_double || ! psf->new_seek)
{ psf->error = SFE_UNIMPLEMENTED ;
return 0 ;
} ;
- count = psf->read_double (psf, ptr, len, normalize) ;
+ if (psf->last_op != SFM_READ)
+ if (psf->new_seek (psf, SFM_READ, psf->read_current) < 0)
+ return 0 ;
+
+ count = psf->read_double (psf, ptr, len) ;
- if (psf->current + count / psf->sf.channels > psf->sf.samples)
- { count = (psf->sf.samples - psf->current) * psf->sf.channels ;
+ if (psf->read_current + count / psf->sf.channels > psf->sf.samples)
+ { count = (psf->sf.samples - psf->read_current) * psf->sf.channels ;
extra = len - count ;
memset (ptr + count, 0, extra * sizeof (double)) ;
- psf->current = psf->sf.samples ;
+ psf->read_current = psf->sf.samples ;
} ;
- psf->current += count / psf->sf.channels ;
+ psf->read_current += count / psf->sf.channels ;
+ psf->last_op = SFM_READ ;
+
return count ;
} /* sf_read_double */
-size_t
-sf_readf_double (SNDFILE *sndfile, double *ptr, size_t frames, int normalize)
+sf_count_t
+sf_readf_double (SNDFILE *sndfile, double *ptr, sf_count_t frames)
{ SF_PRIVATE *psf ;
- size_t count, extra ;
+ sf_count_t count, extra ;
VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ;
- if (psf->mode != SF_MODE_READ)
+ if (psf->mode == SFM_WRITE)
{ psf->error = SFE_NOT_READMODE ;
return 0 ;
} ;
- if (psf->current >= psf->sf.samples)
+ if (frames <= 0 || psf->read_current >= psf->sf.samples)
{ memset (ptr, 0, frames * psf->sf.channels * sizeof (double)) ;
return 0 ;
} ;
- if (! psf->read_double)
+ if (! psf->read_double || ! psf->new_seek)
{ psf->error = SFE_UNIMPLEMENTED ;
return 0 ;
} ;
- count = psf->read_double (psf, ptr, frames * psf->sf.channels, normalize) ;
+ if (psf->last_op != SFM_READ)
+ if (psf->new_seek (psf, SFM_READ, psf->read_current) < 0)
+ return 0 ;
+
+ count = psf->read_double (psf, ptr, frames * psf->sf.channels) ;
- if (psf->current + count / psf->sf.channels > psf->sf.samples)
- { count = (psf->sf.samples - psf->current) * psf->sf.channels ;
+ if (psf->read_current + count / psf->sf.channels > psf->sf.samples)
+ { count = (psf->sf.samples - psf->read_current) * psf->sf.channels ;
extra = frames * psf->sf.channels - count ;
memset (ptr + count, 0, extra * sizeof (double)) ;
- psf->current = psf->sf.samples ;
+ psf->read_current = psf->sf.samples ;
} ;
- psf->current += count / psf->sf.channels ;
+ psf->read_current += count / psf->sf.channels ;
+ psf->last_op = SFM_READ ;
+
return count / psf->sf.channels ;
} /* sf_readf_double */
@@ -1200,14 +1355,14 @@
/*------------------------------------------------------------------------------
*/
-size_t
-sf_write_raw (SNDFILE *sndfile, void *ptr, size_t len)
+sf_count_t
+sf_write_raw (SNDFILE *sndfile, void *ptr, sf_count_t len)
{ SF_PRIVATE *psf ;
- size_t count ;
+ sf_count_t count ;
VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ;
- if (psf->mode != SF_MODE_WRITE)
+ if (psf->mode == SFM_READ)
{ psf->error = SFE_NOT_WRITEMODE ;
return 0 ;
} ;
@@ -1217,10 +1372,15 @@
return 0 ;
} ;
- count = fwrite (ptr, 1, len, psf->file) ;
+ count = psf_fwrite (ptr, 1, len, psf->filedes) ;
- psf->current += count / psf->blockwidth ;
+ psf->write_current += count / psf->blockwidth ;
+ if (psf->write_current > psf->sf.samples)
+ psf->sf.samples = psf->write_current ;
+
+ psf->last_op = SFM_WRITE ;
+
return count ;
} /* sf_write_raw */
@@ -1227,14 +1387,14 @@
/*------------------------------------------------------------------------------
*/
-size_t
-sf_write_short (SNDFILE *sndfile, short *ptr, size_t len)
+sf_count_t
+sf_write_short (SNDFILE *sndfile, short *ptr, sf_count_t len)
{ SF_PRIVATE *psf ;
- size_t count ;
+ sf_count_t count ;
VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ;
- if (psf->mode != SF_MODE_WRITE)
+ if (psf->mode == SFM_READ)
{ psf->error = SFE_NOT_WRITEMODE ;
return 0 ;
} ;
@@ -1244,39 +1404,57 @@
return 0 ;
} ;
- if (! psf->write_short)
+ if (! psf->write_short || ! psf->new_seek)
{ psf->error = SFE_UNIMPLEMENTED ;
return 0 ;
} ;
+ if (psf->last_op != SFM_WRITE)
+ if (psf->new_seek (psf, SFM_WRITE, psf->write_current) < 0)
+ return 0 ;
+
count = psf->write_short (sndfile, ptr, len) ;
- psf->current += count / psf->sf.channels ;
+ psf->write_current += count / psf->sf.channels ;
+ if (psf->write_current > psf->sf.samples)
+ psf->sf.samples = psf->write_current ;
+
+ psf->last_op = SFM_WRITE ;
+
return count ;
} /* sf_write_short */
-size_t
-sf_writef_short (SNDFILE *sndfile, short *ptr, size_t frames)
+sf_count_t
+sf_writef_short (SNDFILE *sndfile, short *ptr, sf_count_t frames)
{ SF_PRIVATE *psf ;
- size_t count ;
+ sf_count_t count ;
VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ;
- if (psf->mode != SF_MODE_WRITE)
+ if (psf->mode == SFM_READ)
{ psf->error = SFE_NOT_WRITEMODE ;
return 0 ;
} ;
- if (! psf->write_short)
+ if (! psf->write_short || ! psf->new_seek)
{ psf->error = SFE_UNIMPLEMENTED ;
return 0 ;
} ;
+ if (psf->last_op != SFM_WRITE)
+ if (psf->new_seek (psf, SFM_WRITE, psf->write_current) < 0)
+ return 0 ;
+
count = psf->write_short (sndfile, ptr, frames * psf->sf.channels) ;
- psf->current += count / psf->sf.channels ;
+ psf->write_current += count / psf->sf.channels ;
+ if (psf->write_current > psf->sf.samples)
+ psf->sf.samples = psf->write_current ;
+
+ psf->last_op = SFM_WRITE ;
+
return count / psf->sf.channels ;
} /* sf_writef_short */
@@ -1283,14 +1461,14 @@
/*------------------------------------------------------------------------------
*/
-size_t
-sf_write_int (SNDFILE *sndfile, int *ptr, size_t len)
+sf_count_t
+sf_write_int (SNDFILE *sndfile, int *ptr, sf_count_t len)
{ SF_PRIVATE *psf ;
- size_t count ;
+ sf_count_t count ;
VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ;
- if (psf->mode != SF_MODE_WRITE)
+ if (psf->mode == SFM_READ)
{ psf->error = SFE_NOT_WRITEMODE ;
return 0 ;
} ;
@@ -1300,39 +1478,57 @@
return 0 ;
} ;
- if (! psf->write_int)
+ if (! psf->write_int || ! psf->new_seek)
{ psf->error = SFE_UNIMPLEMENTED ;
return 0 ;
} ;
+ if (psf->last_op != SFM_WRITE)
+ if (psf->new_seek (psf, SFM_WRITE, psf->write_current) < 0)
+ return 0 ;
+
count = psf->write_int (sndfile, ptr, len) ;
- psf->current += count / psf->sf.channels ;
+ psf->write_current += count / psf->sf.channels ;
+ if (psf->write_current > psf->sf.samples)
+ psf->sf.samples = psf->write_current ;
+
+ psf->last_op = SFM_WRITE ;
+
return count ;
} /* sf_write_int */
-size_t
-sf_writef_int (SNDFILE *sndfile, int *ptr, size_t frames)
+sf_count_t
+sf_writef_int (SNDFILE *sndfile, int *ptr, sf_count_t frames)
{ SF_PRIVATE *psf ;
- size_t count ;
+ sf_count_t count ;
VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ;
- if (psf->mode != SF_MODE_WRITE)
+ if (psf->mode == SFM_READ)
{ psf->error = SFE_NOT_WRITEMODE ;
return 0 ;
} ;
- if (! psf->write_int)
+ if (! psf->write_int || ! psf->new_seek)
{ psf->error = SFE_UNIMPLEMENTED ;
return 0 ;
} ;
+ if (psf->last_op != SFM_WRITE)
+ if (psf->new_seek (psf, SFM_WRITE, psf->write_current) < 0)
+ return 0 ;
+
count = psf->write_int (sndfile, ptr, frames * psf->sf.channels) ;
- psf->current += count / psf->sf.channels ;
+ psf->write_current += count / psf->sf.channels ;
+ if (psf->write_current > psf->sf.samples)
+ psf->sf.samples = psf->write_current ;
+
+ psf->last_op = SFM_WRITE ;
+
return count / psf->sf.channels ;
} /* sf_writef_int */
@@ -1339,14 +1535,14 @@
/*------------------------------------------------------------------------------
*/
-size_t
-sf_write_float (SNDFILE *sndfile, float *ptr, size_t len)
+sf_count_t
+sf_write_float (SNDFILE *sndfile, float *ptr, sf_count_t len)
{ SF_PRIVATE *psf ;
- size_t count ;
+ sf_count_t count ;
VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ;
- if (psf->mode != SF_MODE_WRITE)
+ if (psf->mode == SFM_READ)
{ psf->error = SFE_NOT_WRITEMODE ;
return 0 ;
} ;
@@ -1356,39 +1552,58 @@
return 0 ;
} ;
- if (! psf->write_float)
+ if (! psf->write_float || ! psf->new_seek)
{ psf->error = SFE_UNIMPLEMENTED ;
return 0 ;
} ;
+ if (psf->last_op != SFM_WRITE)
+ if (psf->new_seek (psf, SFM_WRITE, psf->write_current) < 0)
+ return 0 ;
+
+
count = psf->write_float (sndfile, ptr, len) ;
- psf->current += count / psf->sf.channels ;
+ psf->write_current += count / psf->sf.channels ;
+ if (psf->write_current > psf->sf.samples)
+ psf->sf.samples = psf->write_current ;
+
+ psf->last_op = SFM_WRITE ;
+
return count ;
} /* sf_write_float */
-size_t
-sf_writef_float (SNDFILE *sndfile, float *ptr, size_t frames)
+sf_count_t
+sf_writef_float (SNDFILE *sndfile, float *ptr, sf_count_t frames)
{ SF_PRIVATE *psf ;
- size_t count ;
+ sf_count_t count ;
VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ;
- if (psf->mode != SF_MODE_WRITE)
+ if (psf->mode == SFM_READ)
{ psf->error = SFE_NOT_WRITEMODE ;
return 0 ;
} ;
- if (! psf->write_float)
+ if (! psf->write_float || ! psf->new_seek)
{ psf->error = SFE_UNIMPLEMENTED ;
return 0 ;
} ;
+ if (psf->last_op != SFM_WRITE)
+ if (psf->new_seek (psf, SFM_WRITE, psf->write_current) < 0)
+ return 0 ;
+
count = psf->write_float (sndfile, ptr, frames * psf->sf.channels) ;
- psf->current += count / psf->sf.channels ;
+ psf->write_current += count / psf->sf.channels ;
+ if (psf->write_current > psf->sf.samples)
+ psf->sf.samples = psf->write_current ;
+
+ psf->last_op = SFM_WRITE ;
+
return count / psf->sf.channels ;
} /* sf_writef_float */
@@ -1395,14 +1610,14 @@
/*------------------------------------------------------------------------------
*/
-size_t
-sf_write_double (SNDFILE *sndfile, double *ptr, size_t len, int normalize)
+sf_count_t
+sf_write_double (SNDFILE *sndfile, double *ptr, sf_count_t len)
{ SF_PRIVATE *psf ;
- size_t count ;
+ sf_count_t count ;
VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ;
- if (psf->mode != SF_MODE_WRITE)
+ if (psf->mode == SFM_READ)
{ psf->error = SFE_NOT_WRITEMODE ;
return 0 ;
} ;
@@ -1412,39 +1627,57 @@
return 0 ;
} ;
- if (! psf->write_double)
+ if (! psf->write_double || ! psf->new_seek)
{ psf->error = SFE_UNIMPLEMENTED ;
return 0 ;
} ;
- count = psf->write_double (sndfile, ptr, len, normalize) ;
+ if (psf->last_op != SFM_WRITE)
+ if (psf->new_seek (psf, SFM_WRITE, psf->write_current) < 0)
+ return 0 ;
+
+ count = psf->write_double (sndfile, ptr, len) ;
- psf->current += count / psf->sf.channels ;
+ psf->write_current += count / psf->sf.channels ;
+ if (psf->write_current > psf->sf.samples)
+ psf->sf.samples = psf->write_current ;
+
+ psf->last_op = SFM_WRITE ;
+
return count ;
} /* sf_write_double */
-size_t
-sf_writef_double (SNDFILE *sndfile, double *ptr, size_t frames, int normalize)
+sf_count_t
+sf_writef_double (SNDFILE *sndfile, double *ptr, sf_count_t frames)
{ SF_PRIVATE *psf ;
- size_t count ;
+ sf_count_t count ;
VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ;
- if (psf->mode != SF_MODE_WRITE)
+ if (psf->mode == SFM_READ)
{ psf->error = SFE_NOT_WRITEMODE ;
return 0 ;
} ;
- if (! psf->write_double)
+ if (! psf->write_double || ! psf->new_seek)
{ psf->error = SFE_UNIMPLEMENTED ;
return 0 ;
} ;
- count = psf->write_double (sndfile, ptr, frames * psf->sf.channels, normalize) ;
+ if (psf->last_op != SFM_WRITE)
+ if (psf->new_seek (psf, SFM_WRITE, psf->write_current) < 0)
+ return 0 ;
+
+ count = psf->write_double (sndfile, ptr, frames * psf->sf.channels) ;
- psf->current += count / psf->sf.channels ;
+ psf->write_current += count / psf->sf.channels ;
+ if (psf->write_current > psf->sf.samples)
+ psf->sf.samples = psf->write_current ;
+
+ psf->last_op = SFM_WRITE ;
+
return count / psf->sf.channels ;
} /* sf_writef_double */
@@ -1461,7 +1694,10 @@
if (psf->close)
error = psf->close (psf) ;
- fclose (psf->file) ;
+ psf_fclose (psf->filedes) ;
+
+ if (psf->fdata)
+ free (psf->fdata) ;
memset (psf, 0, sizeof (SF_PRIVATE)) ;
free (psf) ;
@@ -1469,7 +1705,6 @@
return 0 ;
} /* sf_close */
-
/*=========================================================================
** Private functions.
*/
@@ -1517,10 +1752,14 @@
static int
guess_file_type (SF_PRIVATE *psf, const char *filename)
-{ unsigned int buffer [3] ;
+{ int buffer [3] ;
+ unsigned char cptr [0x40] ;
+
+ if (psf_binheader_readf (psf, "b", &buffer, sizeof (buffer)) != sizeof (buffer))
+ { psf->error = SFE_BAD_FILE_READ ;
+ return 0 ;
+ } ;
- psf_binheader_readf (psf, "B", &buffer, sizeof (buffer)) ;
-
if (buffer [0] == MAKE_MARKER ('R','I','F','F') && buffer [2] == MAKE_MARKER ('W','A','V','E'))
return SF_FORMAT_WAV ;
@@ -1541,9 +1780,6 @@
if (buffer [0] == MAKE_MARKER ('N','I','S','T'))
return SF_FORMAT_NIST ;
- if (buffer [0] == MAKE_MARKER ('S','E','K','D') && buffer [1] == MAKE_MARKER ('S','A','M','R'))
- return SF_FORMAT_SMPLTD ;
-
if (buffer [0] == MAKE_MARKER ('C','r','e','a') && buffer [1] == MAKE_MARKER ('t','i','v','e'))
return SF_FORMAT_VOC ;
@@ -1551,6 +1787,12 @@
(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 ('S','E','K','D') && buffer [1] == MAKE_MARKER ('S','A','M','R'))
+ return SF_FORMAT_SMPLTD ;
+
if (buffer [0] == MAKE_MARKER ('C', 'A', 'T', ' ') && buffer [2] == MAKE_MARKER ('R', 'E', 'X', '2'))
return SF_FORMAT_REX2 ;
@@ -1557,6 +1799,32 @@
if (buffer [0] == MAKE_MARKER (0x30, 0x26, 0xB2, 0x75) && buffer [1] == MAKE_MARKER (0x8E, 0x66, 0xCF, 0x11))
return SF_FORMAT_WMA ;
+ /* Turtle Beach SMP 16-bit */
+ if (buffer [0] == MAKE_MARKER ('S', 'O', 'U', 'N') && buffer [1] == MAKE_MARKER ('D', ' ', 'S', 'A'))
+ return 0 ;
+
+ if (buffer [0] == MAKE_MARKER ('S', 'Y', '8', '0') || buffer [0] == MAKE_MARKER ('S', 'Y', '8', '5'))
+ return 0 ;
+
+ if (buffer [0] == MAKE_MARKER ('L', 'M', '8', '9'))
+ return SF_FORMAT_TXW ;
+
+ if (buffer [0] == MAKE_MARKER ('a', 'j', 'k', 'g'))
+ return SF_FORMAT_SHN ;
+
+ /* Detect wacky MacOS header stuff. This might be "Sound Designer II". */
+ memcpy (cptr , buffer, sizeof (buffer)) ;
+ if (cptr [0] == 0 && cptr [1] > 0 && psf->sf.seekable)
+ { psf_binheader_readf (psf, "pb", 0, &cptr, sizeof (cptr)) ;
+
+ if (cptr [1] < (sizeof (cptr) - 3) && cptr [cptr [1] + 2] == 0 && strlen (((char*) cptr) + 2) == cptr [1])
+ { psf_log_printf (psf, "Weird MacOS Header.\n") ;
+ psf_binheader_readf (psf, "em", &buffer) ;
+ if (buffer [0] == MAKE_MARKER (0, 'S', 'd', '2'))
+ return SF_FORMAT_SD2 ;
+ } ;
+ } ;
+
/* This must be the last one. */
if (filename && is_au_snd_file (filename))
return SF_FORMAT_AU | SF_FORMAT_ULAW ;
@@ -1568,14 +1836,12 @@
static int
validate_sfinfo (SF_INFO *sfinfo)
-{ if (! sfinfo->samplerate)
+{ if (sfinfo->samplerate < 0)
return 0 ;
- if (! sfinfo->samples)
+ if (sfinfo->samples < 0)
return 0 ;
- if (! sfinfo->channels)
+ if (sfinfo->channels < 0)
return 0 ;
- if (! sfinfo->pcmbitwidth)
- return 0 ;
if (! sfinfo->format & SF_FORMAT_TYPEMASK)
return 0 ;
if (! sfinfo->format & SF_FORMAT_SUBMASK)
@@ -1587,14 +1853,20 @@
static int
validate_psf (SF_PRIVATE *psf)
-{ if (! psf->blockwidth)
- return 0 ;
- if (! psf->bytewidth)
- return 0 ;
- if (! psf->datalength)
+{
+ if (psf->datalength < 0)
+ { psf_log_printf (psf, "Invalid SF_PRIVATE field : datalength == %d.\n", psf->datalength) ;
return 0 ;
- if (psf->blockwidth != psf->sf.channels * psf->bytewidth)
+ } ;
+ if (psf->dataoffset < 0)
+ { psf_log_printf (psf, "Invalid SF_PRIVATE field : datalength == %d.\n", psf->datalength) ;
+ 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 */
@@ -1618,7 +1890,7 @@
psf->filename [SF_FILENAME_LEN - 1] = 0 ;
} /* copy_filename */
-static int
+/*-static int
hash_command (const char *cmd)
{ int hash = 0 ;
@@ -1625,11 +1897,11 @@
if (! cmd)
return 0 ;
- while (*cmd)
- { hash = (hash<<1) ^ *cmd ;
+ while (cmd [0])
+ { hash = (hash << 1) ^ cmd [0] ;
cmd ++ ;
} ;
return hash ;
-} /* hash_command */
-
+} /+* hash_command *+/
+-*/
--- a/common/libsndfile/src/sndfile.h
+++ b/common/libsndfile/src/sndfile.h
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 1999-2001 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
**
** 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
@@ -21,9 +21,12 @@
#ifndef SNDFILE_H
#define SNDFILE_H
-#include <stdio.h>
-#include <stdlib.h>
+/* This is the version 1.0.X header file. */
+#define SNDFILE_1
+#include <stdio.h>
+#include <stdlib.h>
+
/* For the Metrowerks CodeWarrior Pro Compiler (mainly MacOS) */
#if (defined (__MWERKS__))
@@ -32,7 +35,7 @@
#include <sys/types.h>
#endif
-#if defined (_WIN32)
+#ifdef _WIN32
#pragma pack(push,1)
#endif
@@ -48,159 +51,225 @@
*/
enum
-{ SF_FORMAT_WAV = 0x10000, /* Microsoft WAV format (little endian). */
- SF_FORMAT_AIFF = 0x20000, /* Apple/SGI AIFF format (big endian). */
- SF_FORMAT_AU = 0x30000, /* Sun/NeXT AU format (big endian). */
- SF_FORMAT_AULE = 0x40000, /* DEC AU format (little endian). */
- SF_FORMAT_RAW = 0x50000, /* RAW PCM data. */
- SF_FORMAT_PAF = 0x60000, /* Ensoniq PARIS file format. */
- SF_FORMAT_SVX = 0x70000, /* Amiga IFF / SVX8 / SV16 format. */
- SF_FORMAT_NIST = 0x80000, /* Sphere NIST format. */
- SF_FORMAT_WMA = 0x90000, /* Windows Media Audio. */
- SF_FORMAT_SMPLTD = 0xA0000, /* Sekd Samplitude. */
- SF_FORMAT_VOC = 0xB0000, /* VOC files. */
- SF_FORMAT_SD2 = 0xC0000, /* Sound Designer 2 */
- SF_FORMAT_REX2 = 0xD0000, /* Propellorheads Rex2 */
- SF_FORMAT_IRCAM = 0xE0000, /* Berkeley/IRCAM/CARL */
+{ 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_REX = 0x090000, /* Propellorheads Rex/Rcy */
+ SF_FORMAT_IRCAM = 0x0A0000, /* Berkeley/IRCAM/CARL */
+ SF_FORMAT_W64 = 0x0B0000, /* Sonic Foundry's 64 bit RIFF/WAV */
+ SF_FORMAT_SD2 = 0x0C0000, /* Sound Designer 2 */
+ SF_FORMAT_REX2 = 0x0D0000, /* Propellorheads Rex2 */
+ SF_FORMAT_TXW = 0x0E0000, /* Yamaha TX16 sampler file */
+ SF_FORMAT_KRZ = 0x0F0000, /* Kurzweil sampler file */
+ SF_FORMAT_OCT = 0x100000, /* Save as a GNU Octave data file */
+ SF_FORMAT_SMPLTD = 0x110000, /* Sekd Samplitude. */
+ SF_FORMAT_WMA = 0x120000, /* Windows Media Audio. */
+ SF_FORMAT_SHN = 0x130000, /* Shorten. */
/* Subtypes from here on. */
- SF_FORMAT_PCM = 0x0001, /* PCM data in 8, 16, 24 or 32 bits. */
- SF_FORMAT_FLOAT = 0x0002, /* 32 bit floats. */
- SF_FORMAT_ULAW = 0x0003, /* U-Law encoded. */
- SF_FORMAT_ALAW = 0x0004, /* A-Law encoded. */
- SF_FORMAT_IMA_ADPCM = 0x0005, /* IMA ADPCM. */
- SF_FORMAT_MS_ADPCM = 0x0006, /* Microsoft ADPCM. */
+ 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_BE = 0x0007, /* Big endian PCM data. */
- SF_FORMAT_PCM_LE = 0x0008, /* Little endian PCM data. */
- SF_FORMAT_PCM_S8 = 0x0009, /* Signed 8 bit PCM. */
- SF_FORMAT_PCM_U8 = 0x000A, /* Unsigned 8 bit PCM. */
+ SF_FORMAT_PCM_U8 = 0x0005, /* Unsigned 8 bit data (WAV and RAW only) */
- SF_FORMAT_SVX_FIB = 0x000B, /* SVX Fibonacci Delta encoding. */
- SF_FORMAT_SVX_EXP = 0x000C, /* SVX Exponential Delta encoding. */
+ SF_FORMAT_FLOAT = 0x0006, /* 32 bit float data */
+ SF_FORMAT_DOUBLE = 0x0007, /* 64 bit float data */
+
+ SF_FORMAT_ULAW = 0x0008, /* U-Law encoded. */
+ SF_FORMAT_ALAW = 0x0009, /* A-Law encoded. */
+ SF_FORMAT_IMA_ADPCM = 0x000A, /* IMA ADPCM. */
+ SF_FORMAT_MS_ADPCM = 0x000B, /* Microsoft ADPCM. */
- SF_FORMAT_GSM610 = 0x000D, /* GSM 6.10 encoding. */
+ SF_FORMAT_GSM610 = 0x000C, /* GSM 6.10 encoding. */
- SF_FORMAT_G721_32 = 0x000E, /* 32kbs G721 ADPCM encoding. */
- SF_FORMAT_G723_24 = 0x000F, /* 24kbs G723 ADPCM encoding. */
+ SF_FORMAT_G721_32 = 0x000D, /* 32kbs G721 ADPCM encoding. */
+ SF_FORMAT_G723_24 = 0x000E, /* 24kbs G723 ADPCM encoding. */
- SF_FORMAT_FLOAT_BE = 0x0010, /* Big endian FLOAT data. */
- SF_FORMAT_FLOAT_LE = 0x0011, /* Little endian FLOAT data. */
+ SF_FORMAT_DWVW_12 = 0x000F, /* 12 bit Delta Width Variable Word encoding. */
+ SF_FORMAT_DWVW_16 = 0x0010, /* 16 bit Delta Width Variable Word encoding. */
+ SF_FORMAT_DWVW_24 = 0x0011, /* 24 bit Delta Width Variable Word encoding. */
+ SF_FORMAT_DWVW_N = 0x0012, /* N bit Delta Width Variable Word encoding. */
- SF_FORMAT_SUBMASK = 0xFFFF,
- SF_FORMAT_TYPEMASK = 0x7FFF0000
+ SF_FORMAT_SVX_FIB = 0x0020, /* SVX Fibonacci Delta encoding. */
+ SF_FORMAT_SVX_EXP = 0x0021, /* SVX Exponential Delta 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
} ;
-/* The following SF_FORMAT_RAW_* identifiers are deprecated. Use the
-** SF_FORMAT_PCM_* identifiers instead.
+/* The following are the valid command numbers for the sf_command()
+** interface.
*/
-#define SF_FORMAT_RAW_BE SF_FORMAT_PCM_BE
-#define SF_FORMAT_RAW_LE SF_FORMAT_PCM_LE
-#define SF_FORMAT_RAW_S8 SF_FORMAT_PCM_S8
-#define SF_FORMAT_RAW_U8 SF_FORMAT_PCM_U8
+enum
+{ SFC_GET_LIB_VERSION = 0x1000,
+ SFC_GET_LOG_INFO,
+
+ SFC_GET_NORM_DOUBLE,
+ SFC_GET_NORM_FLOAT,
+ SFC_SET_NORM_DOUBLE,
+ SFC_SET_NORM_FLOAT,
+
+ SFC_GET_SIMPLE_FORMAT_COUNT,
+ SFC_GET_SIMPLE_FORMAT,
+
+ SFC_GET_FORMAT_MAJOR_COUNT,
+ SFC_GET_FORMAT_MAJOR,
+ SFC_GET_FORMAT_SUBTYPE_COUNT,
+ SFC_GET_FORMAT_SUBTYPE,
+
+ SFC_CALC_SIGNAL_MAX
+} ;
+
+enum
+{ /* True and false */
+ SF_FALSE = 0,
+ SF_TRUE = 1,
+
+ /* Modes for opening files. */
+ SFM_READ = 0x10,
+ SFM_WRITE = 0x20,
+ SFM_RDWR = 0x30
+} ;
+
/* A SNDFILE* pointer can be passed around much like stdio.h's FILE* pointer. */
-typedef void SNDFILE ;
+typedef void SNDFILE ;
+#if (defined (WIN32) || defined (_WIN32))
+ typedef __int64 sf_count_t ;
+#else
+ typedef off_t sf_count_t ;
+#endif
+
/* A pointer to a SF_INFO structure is passed to sf_open_read () and filled in.
** On write, the SF_INFO structure is filled in by the user and passed into
** sf_open_write ().
*/
-typedef struct
-{ unsigned int samplerate ;
- unsigned int samples ;
- unsigned int channels ;
- unsigned int pcmbitwidth ; /* pcmbitwidth is deprecated. */
- unsigned int format ;
- unsigned int sections ;
- unsigned int seekable ;
-} SF_INFO ;
+struct SF_INFO
+{ sf_count_t samples ; /* -1 if unknown. */
+ int samplerate ;
+ int channels ;
+ int format ;
+ int sections ;
+ int seekable ;
+} ;
-/* Open the specified file for read or write. On error, this will return
-** a NULL pointer. To find the error number, pass a NULL SNDFILE to
-** sf_perror () or sf_error_str ().
+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.
*/
-SNDFILE* sf_open_read (const char *path, SF_INFO *sfinfo) ;
-SNDFILE* sf_open_write (const char *path, const SF_INFO *sfinfo) ;
+typedef struct
+{ int format ;
+ const char *name ;
+ const char *extension ;
+} SF_FORMAT_INFO ;
-/* sf_perror () prints out the current error state.
-** sf_error_str () returns the current error message to the caller in the
-** string buffer provided.
+/* 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_perror () or sf_error_str ().
*/
-int sf_perror (SNDFILE *sndfile) ;
-int sf_error_str (SNDFILE *sndfile, char* str, size_t len) ;
+SNDFILE* sf_open (const char *path, int mode, SF_INFO *sfinfo) ;
-int sf_error_number (int errnum, char *str, size_t maxlen) ;
+/* sf_error () returns TRUE if an error has been recorded for the given SNDFILE. */
+int sf_error (SNDFILE *sndfile) ;
-size_t sf_get_header_info (SNDFILE *sndfile, char* buffer, size_t bufferlen, size_t offset) ;
+/* sf_perror () prints the current error string to stderr. */
-/* Get the library version string. */
+int sf_perror (SNDFILE *sndfile) ;
-size_t sf_get_lib_version (char* buffer, size_t bufferlen) ;
+/* sf_error_str () returns the current error message to the caller in the
+** string buffer provided.
+*/
+int sf_error_str (SNDFILE *sndfile, char* str, size_t len) ;
+
+/* sf_error_number () allows the retrieval of the error string for each internal
+** error number. This is provided mainly for testing purposes and most users of
+** this library will not need to use it.
+**
+*/
+
+int sf_error_number (int errnum, char *str, size_t maxlen) ;
+
/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */
-int sf_command (SNDFILE *sndfile, const char *cmd, void *data, int datasize) ;
+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) ;
-/* Return the maximum absolute sample value in the SNDFILE. */
-
-double sf_signal_max (SNDFILE *sndfile) ;
-
/* 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 functions lseek () and fseek ().
+** 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.
-** On error sf_seek returns -1.
+** The sf_read_seek() and sf_write_seek functions only work on files
+** openned in read/write mode allowing the current read and write
+** positions to be manipulated separately.
+** On error all of these functions return -1.
*/
-long sf_seek (SNDFILE *sndfile, long frames, int whence) ;
+sf_count_t sf_seek (SNDFILE *sndfile, sf_count_t frames, int whence) ;
/* Functions for reading/writing the waveform data of a sound file.
*/
-size_t sf_read_raw (SNDFILE *sndfile, void *ptr, size_t bytes) ;
-size_t sf_write_raw (SNDFILE *sndfile, void *ptr, size_t bytes) ;
+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) ;
/* 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_uchar passes data in the unsigned char format
-** sf_xxxx_char passes data in the signed char format
** 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
-** For the double format, if the normalize flag is TRUE, the read/write
-** operations will use floats/doubles in the rangs [-1.0 .. 1.0] to
-** represent the minimum and maximum values of the waveform irrespective
-** of the bitwidth of the input/output file.
** All of these read/write function return number of frames read/written.
*/
-size_t sf_readf_short (SNDFILE *sndfile, short *ptr, size_t frames) ;
-size_t sf_writef_short (SNDFILE *sndfile, short *ptr, size_t frames) ;
+sf_count_t sf_readf_short (SNDFILE *sndfile, short *ptr, sf_count_t frames) ;
+sf_count_t sf_writef_short (SNDFILE *sndfile, short *ptr, sf_count_t frames) ;
-size_t sf_readf_int (SNDFILE *sndfile, int *ptr, size_t frames) ;
-size_t sf_writef_int (SNDFILE *sndfile, int *ptr, size_t frames) ;
+sf_count_t sf_readf_int (SNDFILE *sndfile, int *ptr, sf_count_t frames) ;
+sf_count_t sf_writef_int (SNDFILE *sndfile, int *ptr, sf_count_t frames) ;
-size_t sf_readf_float (SNDFILE *sndfile, float *ptr, size_t frames) ;
-size_t sf_writef_float (SNDFILE *sndfile, float *ptr, size_t frames) ;
+sf_count_t sf_readf_float (SNDFILE *sndfile, float *ptr, sf_count_t frames) ;
+sf_count_t sf_writef_float (SNDFILE *sndfile, float *ptr, sf_count_t frames) ;
-size_t sf_readf_double (SNDFILE *sndfile, double *ptr, size_t frames, int normalize) ;
-size_t sf_writef_double(SNDFILE *sndfile, double *ptr, size_t frames, int normalize) ;
+sf_count_t sf_readf_double (SNDFILE *sndfile, double *ptr, sf_count_t frames) ;
+sf_count_t sf_writef_double(SNDFILE *sndfile, double *ptr, sf_count_t frames) ;
/* Functions for reading and writing the data chunk in terms of items.
** Otherwise similar to above.
@@ -207,17 +276,17 @@
** All of these read/write function return number of items read/written.
*/
-size_t sf_read_short (SNDFILE *sndfile, short *ptr, size_t items) ;
-size_t sf_write_short (SNDFILE *sndfile, short *ptr, size_t items) ;
+sf_count_t sf_read_short (SNDFILE *sndfile, short *ptr, sf_count_t items) ;
+sf_count_t sf_write_short (SNDFILE *sndfile, short *ptr, sf_count_t items) ;
-size_t sf_read_int (SNDFILE *sndfile, int *ptr, size_t items) ;
-size_t sf_write_int (SNDFILE *sndfile, int *ptr, size_t items) ;
+sf_count_t sf_read_int (SNDFILE *sndfile, int *ptr, sf_count_t items) ;
+sf_count_t sf_write_int (SNDFILE *sndfile, int *ptr, sf_count_t items) ;
-size_t sf_read_float (SNDFILE *sndfile, float *ptr, size_t items) ;
-size_t sf_write_float (SNDFILE *sndfile, float *ptr, size_t items) ;
+sf_count_t sf_read_float (SNDFILE *sndfile, float *ptr, sf_count_t items) ;
+sf_count_t sf_write_float (SNDFILE *sndfile, float *ptr, sf_count_t items) ;
-size_t sf_read_double (SNDFILE *sndfile, double *ptr, size_t items, int normalize) ;
-size_t sf_write_double (SNDFILE *sndfile, double *ptr, size_t items, int normalize) ;
+sf_count_t sf_read_double (SNDFILE *sndfile, double *ptr, sf_count_t items) ;
+sf_count_t sf_write_double (SNDFILE *sndfile, double *ptr, sf_count_t items) ;
/* Close the SNDFILE. Returns 0 on success, or an error number. */
@@ -232,7 +301,3 @@
#endif
#endif /* SNDFILE_H */
-
-
-
-
--- a/common/libsndfile/src/svx.c
+++ b/common/libsndfile/src/svx.c
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 1999-2001 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
**
** 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
@@ -16,7 +16,6 @@
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-
#include <stdio.h>
#include <unistd.h>
#include <string.h>
@@ -71,22 +70,70 @@
* Private static functions.
*/
-static int svx_close (SF_PRIVATE *psf) ;
-static int svx_write_header (SF_PRIVATE *psf) ;
+static int svx_close (SF_PRIVATE *psf) ;
+static int svx_write_header (SF_PRIVATE *psf) ;
+static int svx_read_header (SF_PRIVATE *psf) ;
-/*
-static void endswap_vhdr_chunk (VHDR_CHUNK *vhdr) ;
+/*------------------------------------------------------------------------------
+** Public function.
*/
+int
+svx_open (SF_PRIVATE *psf)
+{ int error, subformat ;
+
+ if (psf->mode == SFM_READ || (psf->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.samples = psf->datalength / psf->blockwidth ;
+
+ psf_fseek (psf->filedes, psf->dataoffset, SEEK_SET) ;
+ } ;
+
+ subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
+
+ if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR)
+ { if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_SVX)
+ return SFE_BAD_OPEN_FORMAT ;
+
+ psf->endian = psf->sf.format & SF_FORMAT_ENDMASK ;
+
+ 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) ;
+ if (error)
+ return error ;
+
+ psf->write_header = svx_write_header ;
+ } ;
+
+ psf->close = svx_close ;
+
+ if (psf->bytewidth == 1)
+ psf->chars = SF_CHARS_SIGNED ;
+
+ if ((error = pcm_init (psf)))
+ return error ;
+
+ return 0 ;
+} /* svx_open */
+
/*------------------------------------------------------------------------------
-** Public functions.
*/
-int
-svx_open_read (SF_PRIVATE *psf)
+static int
+svx_read_header (SF_PRIVATE *psf)
{ VHDR_CHUNK vhdr ;
unsigned int FORMsize, vhdrsize, dword, marker ;
- int filetype = 0, parsestage = 0, done = 0, error ;
+ int filetype = 0, parsestage = 0, done = 0 ;
int bytecount = 0, channels ;
psf_binheader_readf (psf, "p", 0) ;
@@ -94,6 +141,8 @@
/* Set default number of channels. */
psf->sf.channels = 1 ;
+ psf->sf.format = SF_FORMAT_SVX ;
+
while (! done)
{ psf_binheader_readf (psf, "m", &marker) ;
switch (marker)
@@ -101,7 +150,7 @@
if (parsestage)
return SFE_SVX_NO_FORM ;
- psf_binheader_readf (psf, "L", &FORMsize) ;
+ psf_binheader_readf (psf, "E4", &FORMsize) ;
if (FORMsize != psf->filelength - 2 * sizeof (dword))
{ dword = psf->filelength - 2 * sizeof (dword);
@@ -126,11 +175,11 @@
if (! (parsestage & (HAVE_FORM | HAVE_SVX)))
return SFE_SVX_NO_FORM ;
- psf_binheader_readf (psf, "L", &vhdrsize) ;
+ psf_binheader_readf (psf, "E4", &vhdrsize) ;
psf_log_printf (psf, " VHDR : %d\n", vhdrsize) ;
- psf_binheader_readf (psf, "LLLWbbL", &(vhdr.oneShotHiSamples), &(vhdr.repeatHiSamples),
+ psf_binheader_readf (psf, "E4442114", &(vhdr.oneShotHiSamples), &(vhdr.repeatHiSamples),
&(vhdr.samplesPerHiCycle), &(vhdr.samplesPerSec), &(vhdr.octave), &(vhdr.compression),
&(vhdr.volume)) ;
@@ -156,9 +205,13 @@
psf->sf.samplerate = vhdr.samplesPerSec ;
if (filetype == SVX8_MARKER)
- psf->sf.pcmbitwidth = 8 ;
+ { psf->sf.format |= SF_FORMAT_PCM_S8 ;
+ psf->bytewidth = 1 ;
+ }
else if (filetype == SV16_MARKER)
- psf->sf.pcmbitwidth = 16 ;
+ { psf->sf.format |= SF_FORMAT_PCM_16 ;
+ psf->bytewidth = 2 ;
+ } ;
parsestage |= HAVE_VHDR ;
break ;
@@ -167,9 +220,11 @@
if (! (parsestage & HAVE_VHDR))
return SFE_SVX_NO_BODY ;
- psf_binheader_readf (psf, "L", &(psf->datalength)) ;
- psf->dataoffset = ftell (psf->file) ;
+ psf_binheader_readf (psf, "E4", &dword) ;
+ psf->datalength = dword ;
+ psf->dataoffset = psf_ftell (psf->filedes) ;
+
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 ;
@@ -182,7 +237,7 @@
if (! psf->sf.seekable)
break ;
- fseek (psf->file, psf->datalength, SEEK_CUR) ;
+ psf_fseek (psf->filedes, psf->datalength, SEEK_CUR) ;
break ;
case NAME_MARKER :
@@ -190,7 +245,7 @@
if (! (parsestage & HAVE_SVX))
return SFE_SVX_NO_FORM ;
- psf_binheader_readf (psf, "L", &dword) ;
+ psf_binheader_readf (psf, "E4", &dword) ;
psf_log_printf (psf, " %D : %d\n", marker, dword) ;
@@ -201,11 +256,11 @@
if (! (parsestage & HAVE_SVX))
return SFE_SVX_NO_FORM ;
- psf_binheader_readf (psf, "L", &dword) ;
+ psf_binheader_readf (psf, "E4", &dword) ;
psf_log_printf (psf, " %D : %d\n", marker, dword) ;
- bytecount += psf_binheader_readf (psf, "L", &channels) ;
+ bytecount += psf_binheader_readf (psf, "E4", &channels) ;
psf_log_printf (psf, " Channels : %d => %d\n", channels) ;
@@ -218,7 +273,7 @@
if (! (parsestage & HAVE_SVX))
return SFE_SVX_NO_FORM ;
- psf_binheader_readf (psf, "L", &dword) ;
+ psf_binheader_readf (psf, "E4", &dword) ;
psf_log_printf (psf, " %D : %d\n", marker, dword) ;
@@ -228,7 +283,7 @@
default :
if (isprint ((marker >> 24) & 0xFF) && isprint ((marker >> 16) & 0xFF)
&& isprint ((marker >> 8) & 0xFF) && isprint (marker & 0xFF))
- { psf_binheader_readf (psf, "L", &dword) ;
+ { psf_binheader_readf (psf, "E4", &dword) ;
psf_log_printf (psf, "%D : %d (unknown marker)\n", marker, dword) ;
@@ -235,7 +290,7 @@
psf_binheader_readf (psf, "j", dword) ;
break ;
} ;
- if ((dword = ftell (psf->file)) & 0x03)
+ if ((dword = psf_ftell (psf->filedes)) & 0x03)
{ psf_log_printf (psf, " Unknown chunk marker at position %d. Resynching.\n", dword - 4) ;
psf_binheader_readf (psf, "j", -3) ;
@@ -245,9 +300,9 @@
done = 1 ;
} ; /* switch (marker) */
- if (ferror (psf->file))
+ if (psf_ferror (psf->filedes))
{ psf_log_printf (psf, "*** Error on file handle. ***\n", marker) ;
- clearerr (psf->file) ;
+ psf_fclearerr (psf->filedes) ;
break ;
} ;
@@ -254,7 +309,7 @@
if (! psf->sf.seekable && (parsestage & HAVE_BODY))
break ;
- if (ftell (psf->file) >= (long) (psf->filelength - (2 * sizeof (dword))))
+ if (psf_ftell (psf->filedes) >= (sf_count_t) (psf->filelength - (2 * sizeof (dword))))
break ;
} ; /* while (1) */
@@ -264,77 +319,20 @@
if (! psf->dataoffset)
return SFE_SVX_NO_DATA ;
- psf->sf.format = (SF_FORMAT_SVX | SF_FORMAT_PCM);
- psf->sf.sections = 1 ;
-
- psf->current = 0 ;
- psf->endian = SF_ENDIAN_BIG ; /* All SVX files are big endian. */
- psf->sf.seekable = SF_TRUE ;
- psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
-
- psf->blockwidth = psf->sf.channels * psf->bytewidth ;
-
- if (psf->blockwidth)
- psf->sf.samples = psf->datalength / psf->blockwidth ;
-
- fseek (psf->file, psf->dataoffset, SEEK_SET) ;
-
- psf->close = (func_close) svx_close ;
-
- psf->chars = SF_CHARS_SIGNED ;
- if ((error = pcm_read_init (psf)))
- return error ;
-
return 0 ;
-} /* svx_open_read */
+} /* svx_read_header */
-int
-svx_open_write (SF_PRIVATE *psf)
-{ int error ;
-
- if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_SVX)
- return SFE_BAD_OPEN_FORMAT ;
- if ((psf->sf.format & SF_FORMAT_SUBMASK) != SF_FORMAT_PCM)
- return SFE_BAD_OPEN_FORMAT ;
- if (psf->sf.pcmbitwidth != 8 && psf->sf.pcmbitwidth != 16)
- return SFE_BAD_OPEN_FORMAT ;
-
- psf->endian = SF_ENDIAN_BIG ; /* All SVX files are big endian. */
- psf->sf.seekable = SF_TRUE ;
- psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
- psf->blockwidth = psf->bytewidth * psf->sf.channels ;
- psf->datalength = psf->blockwidth * psf->sf.samples ;
- psf->filelength = psf->datalength + psf->dataoffset ;
- psf->error = 0 ;
-
- error = svx_write_header (psf) ;
- if (error)
- return error ;
-
- psf->close = (func_close) svx_close ;
- psf->write_header = (func_wr_hdr) svx_write_header ;
-
- psf->chars = SF_CHARS_SIGNED ;
- if ((error = pcm_write_init (psf)))
- return error ;
-
- return 0 ;
-} /* svx_open_write */
-
-/*------------------------------------------------------------------------------
-*/
-
static int
svx_close (SF_PRIVATE *psf)
{
- if (psf->mode == SF_MODE_WRITE)
+ if (psf->mode == SFM_WRITE || psf->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.
*/
- fseek (psf->file, 0, SEEK_END) ;
- psf->filelength = ftell (psf->file) ;
- fseek (psf->file, 0, SEEK_SET) ;
+ psf_fseek (psf->filedes, 0, SEEK_END) ;
+ psf->filelength = psf_ftell (psf->filedes) ;
+ psf_fseek (psf->filedes, 0, SEEK_SET) ;
psf->datalength = psf->filelength - psf->dataoffset ;
@@ -341,10 +339,6 @@
svx_write_header (psf) ;
} ;
- if (psf->fdata)
- free (psf->fdata) ;
- psf->fdata = NULL ;
-
return 0 ;
} /* svx_close */
@@ -354,28 +348,28 @@
psf->header [0] = 0 ;
psf->headindex = 0 ;
- fseek (psf->file, 0, SEEK_SET) ;
+ psf_fseek (psf->filedes, 0, SEEK_SET) ;
/* FORM marker and FORM size. */
- psf_binheader_writef (psf, "mL", FORM_MARKER, psf->filelength - 8) ;
+ psf_binheader_writef (psf, "Etm8", FORM_MARKER, psf->filelength - 8) ;
psf_binheader_writef (psf, "m", (psf->bytewidth == 1) ? SVX8_MARKER : SV16_MARKER) ;
/* VHDR chunk. */
- psf_binheader_writef (psf, "mL", VHDR_MARKER, sizeof (VHDR_CHUNK)) ;
+ psf_binheader_writef (psf, "Em4", VHDR_MARKER, sizeof (VHDR_CHUNK)) ;
/* VHDR : oneShotHiSamples, repeatHiSamples, samplesPerHiCycle */
- psf_binheader_writef (psf, "LLL", psf->sf.samples, 0, 0) ;
+ psf_binheader_writef (psf, "E444", psf->sf.samples, 0, 0) ;
/* VHDR : samplesPerSec, octave, compression */
- psf_binheader_writef (psf, "Wbb", psf->sf.samplerate, 1, 0) ;
+ psf_binheader_writef (psf, "E211", psf->sf.samplerate, 1, 0) ;
/* VHDR : volume */
- psf_binheader_writef (psf, "L", (psf->bytewidth == 1) ? 255 : 0xFFFF) ;
+ psf_binheader_writef (psf, "E4", (psf->bytewidth == 1) ? 255 : 0xFFFF) ;
/* Filename and annotation strings. */
- psf_binheader_writef (psf, "mSmS", NAME_MARKER, psf->filename, ANNO_MARKER, annotation) ;
+ psf_binheader_writef (psf, "Emsms", NAME_MARKER, psf->filename, ANNO_MARKER, annotation) ;
/* BODY marker and size. */
- psf_binheader_writef (psf, "mL", BODY_MARKER, psf->datalength) ;
+ psf_binheader_writef (psf, "Etm8", BODY_MARKER, psf->datalength) ;
- fwrite (psf->header, psf->headindex, 1, psf->file) ;
+ psf_fwrite (psf->header, psf->headindex, 1, psf->filedes) ;
psf->dataoffset = psf->headindex ;
@@ -382,14 +376,4 @@
return 0 ;
} /* svx_write_header */
-/*-
-static void
-endswap_vhdr_chunk (VHDR_CHUNK *vhdr)
-{ vhdr->oneShotHiSamples = ENDSWAP_INT (vhdr->oneShotHiSamples) ;
- vhdr->repeatHiSamples = ENDSWAP_INT (vhdr->repeatHiSamples) ;
- vhdr->samplesPerHiCycle = ENDSWAP_INT (vhdr->samplesPerHiCycle) ;
- vhdr->samplesPerSec = ENDSWAP_SHORT (vhdr->samplesPerSec) ;
- vhdr->volume = ENDSWAP_INT (vhdr->volume) ;
-} /+* endswap_vhdr_chunk *+/
--*/
--- /dev/null
+++ b/common/libsndfile/src/txw.c
@@ -1,0 +1,242 @@
+/*
+** Copyright (C) 2002 Erik de Castro Lopo <[email protected]>
+**
+** 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 <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "sndfile.h"
+#include "config.h"
+#include "sfendian.h"
+#include "common.h"
+#include "au.h"
+
+/*------------------------------------------------------------------------------
+** Markers.
+*/
+
+#define LM89_MARKER (MAKE_MARKER ('L', 'M', '8', '9'))
+#define FIVE3_MARKER (MAKE_MARKER ('5', '3', 0, 0))
+
+#define AU_DATA_OFFSET 24
+
+/*------------------------------------------------------------------------------
+** Known AU file encoding types.
+*/
+
+/*------------------------------------------------------------------------------
+** Private static functions.
+*/
+
+static int txw_close (SF_PRIVATE *psf) ;
+static int txw_read_header (SF_PRIVATE *psf) ;
+static int txw_write_header (SF_PRIVATE *psf) ;
+
+/*------------------------------------------------------------------------------
+** Public functions.
+*/
+
+struct WaveHeader_ {
+ unsigned char
+ filetype [6], /* = "LM8953", */
+ nulls [10],
+ dummy_aeg [6], /* space for the AEG (never mind this) */
+ format, /* 0x49 = looped, 0xC9 = non-looped */
+ sample_rate, /* 1 = 33 kHz, 2 = 50 kHz, 3 = 16 kHz */
+ atc_length [3], /* I'll get to this... */
+ rpt_length [3],
+ unused [2] ; /* set these to null, to be on the safe side */
+} ;
+
+#define ERROR_666 666
+
+int
+txw_open (SF_PRIVATE *psf)
+{ int error ;
+
+ if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0))
+ { if ((error = txw_read_header (psf)))
+ return error ;
+ } ;
+
+ if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR)
+ { psf->dataoffset = psf_ftell (psf->filedes) ;
+ psf->datalength = psf->filelength - psf->dataoffset ;
+
+ if (psf_fseek (psf->filedes, psf->dataoffset, SEEK_SET))
+ return SFE_BAD_SEEK ;
+
+ psf->close = txw_close ;
+
+ /* Only fill in type major. */
+ if (psf->endian == SF_ENDIAN_BIG)
+ psf->sf.format = SF_FORMAT_TXW ;
+ else if (psf->endian == SF_ENDIAN_LITTLE)
+ psf->sf.format = SF_ENDIAN_LITTLE | SF_FORMAT_TXW ;
+
+ psf->sf.format |= SF_FORMAT_PCM_16 ;
+
+ if ((error = txw_write_header (psf)))
+ return error ;
+
+ psf->write_header = txw_write_header ;
+ } ;
+
+ psf->close = txw_close ;
+
+ error = pcm_init (psf) ;
+
+ return error ;
+} /* txw_open */
+
+/*------------------------------------------------------------------------------
+*/
+
+static int
+txw_read_header (SF_PRIVATE *psf)
+{ unsigned char byte ;
+ int marker, dword ;
+ char *strptr ;
+
+ psf_binheader_readf (psf, "pmm", 0, &marker, &dword) ;
+
+ if (marker != LM89_MARKER || dword != FIVE3_MARKER)
+ return ERROR_666 ;
+ psf_log_printf (psf, "LM8953\n") ;
+
+ /* Jump 8 bytes (nulls). */
+ psf_binheader_readf (psf, "j", 8) ;
+
+ /* Jump 6 bytes. (dummp_aeg) */
+ psf_binheader_readf (psf, "j", 6) ;
+
+ /* Read format. */
+ psf_binheader_readf (psf, "1", &byte) ;
+ switch (byte)
+ { case 0x49 :
+ strptr = "looped" ;
+ break ;
+
+ case 0xC9 :
+ strptr = "non-looped" ;
+ break ;
+
+ default :
+ psf_log_printf (psf, " Format : 0x%02x => ?????\n", byte & 0xFF) ;
+ return ERROR_666 ;
+ } ;
+
+ psf_log_printf (psf, " Format : 0x%X => looped\n", byte & 0xFF, strptr) ;
+
+ /* Read format. */
+ psf_binheader_readf (psf, "1", &byte) ;
+ switch (byte)
+ { case 1 :
+ strptr = "33kHz" ;
+ psf->sf.samplerate = 33000 ;
+ break ;
+
+ case 2 :
+ strptr = "50kHz" ;
+ psf->sf.samplerate = 50000 ;
+ break ;
+
+ case 3 :
+ strptr = "16kHz" ;
+ psf->sf.samplerate = 16000 ;
+ break ;
+
+ default :
+ psf_log_printf (psf, " Sample Rate : %d => Unknown\n", byte & 0xFF) ;
+ return ERROR_666 ;
+ break ;
+ } ;
+
+ psf_log_printf (psf, " Sample Rate : %d => %s\n", byte & 0xFF, strptr) ;
+
+ /* Jump 8 bytes (atc_length[3], rpt_length[3], unused[2]). */
+ psf_binheader_readf (psf, "j", 8) ;
+
+ psf->sf.channels = 1 ;
+
+ return 0 ;
+} /* txw_read_header */
+
+/*-
+int
+txw_open_write (SF_PRIVATE *psf)
+{ int subformat ;
+
+ if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_AU)
+ return SFE_BAD_OPEN_FORMAT ;
+
+ subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
+
+ psf->endian = psf->sf.format & SF_FORMAT_ENDMASK ;
+ 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 ;
+
+ psf->error = 0 ;
+
+ return 0 ;
+} /+* txw_open_write *+/
+-*/
+
+static int
+txw_write_header (SF_PRIVATE *psf)
+{
+ return (psf ? 0 : 1) ;
+} /* txw_write_header */
+
+static int
+txw_close (SF_PRIVATE *psf)
+{
+ if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR)
+ { /*
+ ** Now we know for certain the length of the file we can
+ ** re-write correct values for the datasize header element.
+ */
+
+ psf_fseek (psf->filedes, 0, SEEK_END) ;
+ psf->filelength = psf_ftell (psf->filedes) ;
+
+ psf->datalength = psf->filelength - AU_DATA_OFFSET ;
+ psf_fseek (psf->filedes, 0, SEEK_SET) ;
+
+ psf->sf.samples = psf->datalength / psf->blockwidth ;
+ txw_write_header (psf) ;
+ } ;
+
+ if (psf->fdata)
+ free (psf->fdata) ;
+ psf->fdata = NULL ;
+
+ return 0 ;
+} /* txw_close */
+
--- a/common/libsndfile/src/ulaw.c
+++ b/common/libsndfile/src/ulaw.c
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 1999-2001 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
**
** 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
@@ -20,64 +20,69 @@
#include <unistd.h>
#include "sndfile.h"
-#include "floatcast.h"
+#include "float_cast.h"
#include "common.h"
-static int ulaw_read_ulaw2s (SF_PRIVATE *psf, short *ptr, unsigned int len) ;
-static int ulaw_read_ulaw2i (SF_PRIVATE *psf, int *ptr, unsigned int len) ;
-static int ulaw_read_ulaw2f (SF_PRIVATE *psf, float *ptr, unsigned int len) ;
-static int ulaw_read_ulaw2d (SF_PRIVATE *psf, double *ptr, unsigned int len, int normalize) ;
+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 int ulaw_write_s2ulaw (SF_PRIVATE *psf, short *ptr, unsigned int len) ;
-static int ulaw_write_i2ulaw (SF_PRIVATE *psf, int *ptr, unsigned int len) ;
-static int ulaw_write_f2ulaw (SF_PRIVATE *psf, float *ptr, unsigned int len) ;
-static int ulaw_write_d2ulaw (SF_PRIVATE *psf, double *ptr, unsigned int len, int normalize) ;
+static sf_count_t ulaw_write_s2ulaw (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
+static sf_count_t ulaw_write_i2ulaw (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
+static sf_count_t ulaw_write_f2ulaw (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
+static sf_count_t ulaw_write_d2ulaw (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
-static void ulaw2s_array (unsigned char *buffer, unsigned int count, short *ptr, unsigned int index) ;
-static void ulaw2i_array (unsigned char *buffer, unsigned int count, int *ptr, unsigned int index) ;
-static void ulaw2f_array (unsigned char *buffer, unsigned int count, float *ptr, unsigned int index, float normfact) ;
-static void ulaw2d_array (unsigned char *buffer, unsigned int count, double *ptr, unsigned int index, double normfact) ;
+static void ulaw2s_array (unsigned char *buffer, unsigned int count, short *ptr) ;
+static void ulaw2i_array (unsigned char *buffer, unsigned int count, int *ptr) ;
+static void ulaw2f_array (unsigned char *buffer, unsigned int count, float *ptr, float normfact) ;
+static void ulaw2d_array (unsigned char *buffer, unsigned int count, double *ptr, double normfact) ;
-static void s2ulaw_array (short *buffer, unsigned int count, unsigned char *ptr, unsigned int index) ;
-static void i2ulaw_array (int *buffer, unsigned int count, unsigned char *ptr, unsigned int index) ;
-static void f2ulaw_array (float *buffer, unsigned int count, unsigned char *ptr, unsigned int index, float normfact) ;
-static void d2ulaw_array (double *buffer, unsigned int count, unsigned char *ptr, unsigned int index, double normfact) ;
+static void s2ulaw_array (short *buffer, unsigned int count, unsigned char *ptr) ;
+static void i2ulaw_array (int *buffer, unsigned int count, unsigned char *ptr) ;
+static void f2ulaw_array (float *buffer, unsigned int count, unsigned char *ptr, float normfact) ;
+static void d2ulaw_array (double *buffer, unsigned int count, unsigned char *ptr, double normfact) ;
int
-ulaw_read_init (SF_PRIVATE *psf)
+ulaw_init (SF_PRIVATE *psf)
{
- psf->read_short = (func_short) ulaw_read_ulaw2s ;
- psf->read_int = (func_int) ulaw_read_ulaw2i ;
- psf->read_float = (func_float) ulaw_read_ulaw2f ;
- psf->read_double = (func_double) ulaw_read_ulaw2d ;
+ if (psf->mode == SFM_READ || psf->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->mode == SFM_WRITE || psf->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 ;
+ } ;
- return 0 ;
-} /* ulaw_read_int */
+ psf->bytewidth = 1 ;
+ psf->blockwidth = psf->sf.channels ;
-int
-ulaw_write_init (SF_PRIVATE *psf)
-{
- psf->write_short = (func_short) ulaw_write_s2ulaw ;
- psf->write_int = (func_int) ulaw_write_i2ulaw ;
- psf->write_float = (func_float) ulaw_write_f2ulaw ;
- psf->write_double = (func_double) ulaw_write_d2ulaw ;
+ psf->filelength = psf_get_filelen (psf->filedes) ;
+ psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset :
+ psf->filelength - psf->dataoffset ;
+ psf->sf.samples = psf->datalength / psf->blockwidth ;
return 0 ;
-} /* ulaw_write_int */
+} /* ulaw_init */
-static int
-ulaw_read_ulaw2s (SF_PRIVATE *psf, short *ptr, unsigned int len)
-{ unsigned int readcount, thisread, index = 0 ;
- int bytecount, bufferlen ;
- int total = 0 ;
+static sf_count_t
+ulaw_read_ulaw2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
+{ sf_count_t readcount, thisread, index = 0, total = 0 ;
+ sf_count_t bytecount, bufferlen ;
bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- ulaw2s_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ ulaw2s_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -92,18 +97,17 @@
return total ;
} /* ulaw_read_ulaw2s */
-static int
-ulaw_read_ulaw2i (SF_PRIVATE *psf, int *ptr, unsigned int len)
-{ unsigned int readcount, thisread, index = 0 ;
- int bytecount, bufferlen ;
- int total = 0 ;
+static sf_count_t
+ulaw_read_ulaw2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
+{ sf_count_t readcount, thisread, index = 0, total = 0 ;
+ sf_count_t bytecount, bufferlen ;
bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- ulaw2i_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr, index) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ ulaw2i_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr + index) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -118,11 +122,10 @@
return total ;
} /* ulaw_read_ulaw2i */
-static int
-ulaw_read_ulaw2f (SF_PRIVATE *psf, float *ptr, unsigned int len)
-{ unsigned int readcount, thisread, index = 0 ;
- int bytecount, bufferlen ;
- int total = 0 ;
+static sf_count_t
+ulaw_read_ulaw2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ sf_count_t readcount, thisread, index = 0, total = 0 ;
+ sf_count_t bytecount, bufferlen ;
float normfact ;
normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
@@ -131,8 +134,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- ulaw2f_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ ulaw2f_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr + index, normfact) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -147,20 +150,19 @@
return total ;
} /* ulaw_read_ulaw2f */
-static int
-ulaw_read_ulaw2d (SF_PRIVATE *psf, double *ptr, unsigned int len, int normalize)
-{ unsigned int readcount, thisread, index = 0 ;
- int bytecount, bufferlen ;
- int total = 0 ;
+static sf_count_t
+ulaw_read_ulaw2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ sf_count_t readcount, thisread, index = 0, total = 0 ;
+ sf_count_t bytecount, bufferlen ;
double normfact ;
- normfact = (normalize ? 1.0 / ((double) 0x8000) : 1.0) ;
+ normfact = (psf->norm_double) ? 1.0 / ((double) 0x8000) : 1.0 ;
bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ readcount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- thisread = fread (psf->buffer, 1, readcount, psf->file) ;
- ulaw2d_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ thisread = psf_fread (psf->buffer, 1, readcount, psf->filedes) ;
+ ulaw2d_array ((unsigned char*) (psf->buffer), thisread / psf->bytewidth, ptr + index, normfact) ;
total += thisread ;
if (thisread < readcount)
break ;
@@ -178,18 +180,17 @@
/*=============================================================================================
*/
-static int
-ulaw_write_s2ulaw (SF_PRIVATE *psf, short *ptr, unsigned int len)
-{ unsigned int writecount, thiswrite, index = 0 ;
- int bytecount, bufferlen ;
- int total = 0 ;
+static sf_count_t
+ulaw_write_s2ulaw (SF_PRIVATE *psf, short *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite, index = 0, total = 0 ;
+ sf_count_t bytecount, bufferlen ;
bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- s2ulaw_array (ptr, index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ s2ulaw_array (ptr + index, writecount / psf->bytewidth, (unsigned char*) (psf->buffer)) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -204,18 +205,17 @@
return total ;
} /* ulaw_write_s2ulaw */
-static int
-ulaw_write_i2ulaw (SF_PRIVATE *psf, int *ptr, unsigned int len)
-{ unsigned int writecount, thiswrite, index = 0 ;
- int bytecount, bufferlen ;
- int total = 0 ;
+static sf_count_t
+ulaw_write_i2ulaw (SF_PRIVATE *psf, int *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite, index = 0, total = 0 ;
+ sf_count_t bytecount, bufferlen ;
bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- i2ulaw_array (ptr, index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ i2ulaw_array (ptr + index, writecount / psf->bytewidth, (unsigned char*) (psf->buffer)) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -230,11 +230,10 @@
return total ;
} /* ulaw_write_i2ulaw */
-static int
-ulaw_write_f2ulaw (SF_PRIVATE *psf, float *ptr, unsigned int len)
-{ unsigned int writecount, thiswrite, index = 0 ;
- int bytecount, bufferlen ;
- int total = 0 ;
+static sf_count_t
+ulaw_write_f2ulaw (SF_PRIVATE *psf, float *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite, index = 0, total = 0 ;
+ sf_count_t bytecount, bufferlen ;
float normfact ;
normfact = (psf->norm_float == SF_TRUE) ? ((float) 0x8000) : 1.0 ;
@@ -243,8 +242,8 @@
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- f2ulaw_array (ptr, index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ f2ulaw_array (ptr + index, writecount / psf->bytewidth, (unsigned char*) (psf->buffer), normfact) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -259,21 +258,20 @@
return total ;
} /* ulaw_write_f2ulaw */
-static int
-ulaw_write_d2ulaw (SF_PRIVATE *psf, double *ptr, unsigned int len, int normalize)
-{ unsigned int writecount, thiswrite, index = 0 ;
- int bytecount, bufferlen ;
- int total = 0 ;
+static sf_count_t
+ulaw_write_d2ulaw (SF_PRIVATE *psf, double *ptr, sf_count_t len)
+{ sf_count_t writecount, thiswrite, index = 0, total = 0 ;
+ sf_count_t bytecount, bufferlen ;
double normfact ;
- normfact = (normalize ? ((double) 0x8000) : 1.0) ;
+ normfact = (psf->norm_double) ? ((double) 0x8000) : 1.0 ;
bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
bytecount = len * psf->bytewidth ;
while (bytecount > 0)
{ writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
- d2ulaw_array (ptr, index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
- thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ d2ulaw_array (ptr + index, writecount / psf->bytewidth, (unsigned char*) (psf->buffer), normfact) ;
+ thiswrite = psf_fwrite (psf->buffer, 1, writecount, psf->filedes) ;
total += thiswrite ;
if (thiswrite < writecount)
break ;
@@ -999,102 +997,90 @@
} ;
static void
-ulaw2s_array (unsigned char *buffer, unsigned int count, short *ptr, unsigned int index)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { if (buffer [k] & 0x80)
- ptr [index] = -1 * ulaw_decode [((int) buffer [k]) & 0x7F] ;
+ulaw2s_array (unsigned char *buffer, unsigned int count, short *ptr)
+{ while (count)
+ { count -- ;
+ if (buffer [count] & 0x80)
+ ptr [count] = -1 * ulaw_decode [((int) buffer [count]) & 0x7F] ;
else
- ptr [index] = ulaw_decode [((int) buffer [k]) & 0x7F] ;
- index ++ ;
+ ptr [count] = ulaw_decode [((int) buffer [count]) & 0x7F] ;
} ;
} /* ulaw2s_array */
static void
-ulaw2i_array (unsigned char *buffer, unsigned int count, int *ptr, unsigned int index)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { if (buffer [k] & 0x80)
- ptr [index] = -1 * ulaw_decode [((int) buffer [k]) & 0x7F] ;
+ulaw2i_array (unsigned char *buffer, unsigned int count, int *ptr)
+{ while (count)
+ { count -- ;
+ if (buffer [count] & 0x80)
+ ptr [count] = -1 * ulaw_decode [buffer [count] & 0x7F] << 16 ;
else
- ptr [index] = ulaw_decode [((int) buffer [k]) & 0x7F] ;
- index ++ ;
+ ptr [count] = ulaw_decode [buffer [count] & 0x7F] << 16 ;
} ;
} /* ulaw2i_array */
static void
-ulaw2f_array (unsigned char *buffer, unsigned int count, float *ptr, unsigned int index, float normfact)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { if (buffer [k] & 0x80)
- ptr [index] = -normfact * ulaw_decode [((int) buffer [k]) & 0x7F] ;
+ulaw2f_array (unsigned char *buffer, unsigned int count, float *ptr, float normfact)
+{ while (count)
+ { count -- ;
+ if (buffer [count] & 0x80)
+ ptr [count] = -normfact * ulaw_decode [((int) buffer [count]) & 0x7F] ;
else
- ptr [index] = normfact * ulaw_decode [((int) buffer [k]) & 0x7F] ;
- index ++ ;
+ ptr [count] = normfact * ulaw_decode [((int) buffer [count]) & 0x7F] ;
} ;
} /* ulaw2f_array */
static void
-ulaw2d_array (unsigned char *buffer, unsigned int count, double *ptr, unsigned int index, double normfact)
-{ int k ;
- for (k = 0 ; k < count ; k++)
- { if (buffer [k] & 0x80)
- ptr [index] = -normfact * ulaw_decode [((int) buffer [k]) & 0x7F] ;
+ulaw2d_array (unsigned char *buffer, unsigned int count, double *ptr, double normfact)
+{ while (count)
+ { count -- ;
+ if (buffer [count] & 0x80)
+ ptr [count] = -normfact * ulaw_decode [((int) buffer [count]) & 0x7F] ;
else
- ptr [index] = normfact * ulaw_decode [((int) buffer [k]) & 0x7F] ;
- index ++ ;
+ ptr [count] = normfact * ulaw_decode [((int) buffer [count]) & 0x7F] ;
} ;
} /* ulaw2d_array */
static void
-s2ulaw_array (short *ptr, unsigned int index, unsigned char *buffer, unsigned int count)
-{ unsigned int k ;
-
- for (k = 0 ; k < count ; k++)
- { if (ptr [index] >= 0)
- buffer [k] = ulaw_encode [ptr [index] / 4] ;
+s2ulaw_array (short *ptr, unsigned int count, unsigned char *buffer)
+{ while (count)
+ { count -- ;
+ if (ptr [count] >= 0)
+ buffer [count] = ulaw_encode [ptr [count] / 4] ;
else
- buffer [k] = 0x7F & ulaw_encode [ptr [index] / -4] ;
- index ++ ;
+ buffer [count] = 0x7F & ulaw_encode [ptr [count] / -4] ;
} ;
} /* s2ulaw_array */
static void
-i2ulaw_array (int *ptr, unsigned int index, unsigned char *buffer, unsigned int count)
-{ unsigned int k ;
-
- for (k = 0 ; k < count ; k++)
- { if (ptr [index] >= 0)
- buffer [k] = ulaw_encode [ptr [index] / 4] ;
+i2ulaw_array (int *ptr, unsigned int count, unsigned char *buffer)
+{ while (count)
+ { count -- ;
+ if (ptr [count] >= 0)
+ buffer [count] = ulaw_encode [ptr [count] >> (16 + 2)] ;
else
- buffer [k] = 0x7F & ulaw_encode [ptr [index] / -4] ;
- index ++ ;
+ buffer [count] = 0x7F & ulaw_encode [-ptr [count] >> (16 + 2)] ;
} ;
} /* i2ulaw_array */
static void
-f2ulaw_array (float *ptr, unsigned int index, unsigned char *buffer, unsigned int count, float normfact)
-{ unsigned int k ;
-
- for (k = 0 ; k < count ; k++)
- { if (ptr [index] >= 0)
- buffer [k] = ulaw_encode [(FLOAT_TO_INT (normfact * ptr [index])) / 4] ;
+f2ulaw_array (float *ptr, unsigned int count, unsigned char *buffer, float normfact)
+{ while (count)
+ { count -- ;
+ if (ptr [count] >= 0)
+ buffer [count] = ulaw_encode [(lrintf (normfact * ptr [count])) / 4] ;
else
- buffer [k] = 0x7F & ulaw_encode [(FLOAT_TO_INT (normfact * ptr [index])) / -4] ;
- index ++ ;
+ buffer [count] = 0x7F & ulaw_encode [(lrintf (normfact * ptr [count])) / -4] ;
} ;
} /* f2ulaw_array */
static void
-d2ulaw_array (double *ptr, unsigned int index, unsigned char *buffer, unsigned int count, double normfact)
-{ unsigned int k ;
-
- for (k = 0 ; k < count ; k++)
- { if (ptr [index] >= 0)
- buffer [k] = ulaw_encode [(DOUBLE_TO_INT (normfact * ptr [index])) / 4] ;
+d2ulaw_array (double *ptr, unsigned int count, unsigned char *buffer, double normfact)
+{ while (count)
+ { count -- ;
+ if (ptr [count] >= 0)
+ buffer [count] = ulaw_encode [(lrint (normfact * ptr [count])) / 4] ;
else
- buffer [k] = 0x7F & ulaw_encode [(DOUBLE_TO_INT (normfact * ptr [index])) / -4] ;
- index ++ ;
+ buffer [count] = 0x7F & ulaw_encode [(lrint (normfact * ptr [count])) / -4] ;
} ;
} /* d2ulaw_array */
--- a/common/libsndfile/src/voc.c
+++ b/common/libsndfile/src/voc.c
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 2001 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 2001-2002 Erik de Castro Lopo <[email protected]>
**
** 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
@@ -16,12 +16,17 @@
** 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 <stdio.h>
#include <unistd.h>
#include <string.h>
-#include <ctype.h>
-#include <stdarg.h>
#include "sndfile.h"
#include "config.h"
@@ -30,51 +35,130 @@
/*------------------------------------------------------------------------------
- * Macros to handle big/little endian issues.
-*/
-
-#if (CPU_IS_LITTLE_ENDIAN == 1)
-# define MAKE_MARKER(a,b,c,d) ((a)|((b)<<8)|((c)<<16)|((d)<<24))
-#elif (CPU_IS_BIG_ENDIAN == 1)
-# define MAKE_MARKER(a,b,c,d) (((a)<<24)|((b)<<16)|((c)<<8)|(d))
-#else
-# error "Cannot determine endian-ness of processor."
-#endif
-
-/*------------------------------------------------------------------------------
* Typedefs for file chunks.
*/
+#define VOC_MAX_SECTIONS 200
+
enum
-{ VOC_TYPE_TERMINATOR = 0,
- VOC_TYPE_SOUND_DATA = 1,
- VOC_TYPE_SOUND_CONTINUE = 2,
- VOC_TYPE_SILENCE = 3,
- VOC_TYPE_MARKER = 4,
- VOC_TYPE_ASCII = 5,
- VOC_TYPE_REPEAT = 6,
- VOC_TYPE_END_REPEAT = 7,
- VOC_TYPE_EXTENDED = 8,
- VOC_TYPE_9 = 9
+{ 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_close (SF_PRIVATE *psf) ;
+static int voc_write_header (SF_PRIVATE *psf) ;
+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 functions.
+** Public function.
*/
-int
-voc_open_read (SF_PRIVATE *psf)
-{ char creative [20], type ;
- short version ;
+int
+voc_open (SF_PRIVATE *psf)
+{ int subformat, error = 0 ;
+ if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0))
+ { if ((error = voc_read_header (psf)))
+ return error ;
+ } ;
+
+ subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
+
+ if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR)
+ { if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_VOC)
+ return SFE_BAD_OPEN_FORMAT ;
+
+ psf->endian = SF_ENDIAN_LITTLE ;
+
+ if ((error = voc_write_header (psf)))
+ return error ;
+
+ psf->write_header = voc_write_header ;
+ } ;
+
+ psf->blockwidth = psf->bytewidth * psf->sf.channels ;
+
+ psf->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. */
- psf_binheader_readf (psf, "pB", 0, creative, sizeof (creative)) ;
+ offset = psf_binheader_readf (psf, "pb", 0, creative, sizeof (creative)) ;
if (creative [sizeof (creative) - 1] != 0x1A)
return SFE_VOC_NO_CREATIVE ;
@@ -87,188 +171,461 @@
psf_log_printf (psf, "%s\n", creative) ;
- psf_binheader_readf (psf, "ww", &(psf->dataoffset), &version) ;
+ offset += psf_binheader_readf (psf, "e222", &dataoffset, &version, &checksum) ;
- psf_log_printf (psf, "dataoffset : %d\n", psf->dataoffset) ;
- psf_log_printf (psf, "version : %X\n", version) ;
+ 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->fdata = malloc (sizeof (VOC_DATA))))
+ return SFE_MALLOC_FAILED ;
- psf_binheader_readf (psf, "w", &version) ;
- psf_log_printf (psf, "version 2 : %X\n", version) ;
+ pvoc = (VOC_DATA*) psf->fdata ;
+ 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)
- { psf_binheader_readf (psf, "b", &type) ;
+ { offset += psf_binheader_readf (psf, "1", &block_type) ;
+
+ switch (block_type)
+ { case VOC_ASCII :
+ { int size ;
+
+ offset += psf_binheader_readf (psf, "e3", &size) ;
+
+ psf_log_printf (psf, " ASCII : %d\n", size) ;
- switch (type)
- { case VOC_TYPE_TERMINATOR :
- psf_log_printf (psf, " Terminator\n") ;
+ offset += psf_binheader_readf (psf, "b", psf->header, size) ;
+ psf->header [size] = 0 ;
+ psf_log_printf (psf, " text : %s\n", psf->header) ;
+ } ;
+ 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) ;
- case VOC_TYPE_SOUND_DATA :
- { unsigned char rate_byte, compression ;
- int size ;
-
- psf_binheader_readf (psf, "tbb", &size, &rate_byte, &compression) ;
-
- psf_log_printf (psf, " Sound Data : %d\n", size) ;
- psf_log_printf (psf, " sr : %d => %dHz\n", (rate_byte & 0xFF), 1000000 / (256 - rate_byte)) ;
- psf_log_printf (psf, " comp : %d\n", 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) ;
- psf_binheader_readf (psf, "j", size) ;
- } ;
- break ;
+ if (offset + size - 1 > psf->filelength)
+ { psf_log_printf (psf, "Seems to be a truncated file.\n") ;
+ puts ("Seems to be a truncated file.\n") ;
+ psf_log_printf (psf, "offset : %d size : %d filelength : %d\n", 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.\n") ;
+ psf_log_printf (psf, "offset : %d size : %d filelength : %d\n", offset, size, psf->filelength) ;
+ return SFE_VOC_BAD_SECTIONS ;
+ } ;
+
+ psf->dataoffset = offset ;
+ psf->dataend = psf->filelength - 1 ;
- case VOC_TYPE_SOUND_CONTINUE :
- { int size ;
+ psf->sf.channels = 1 ;
+ psf->bytewidth = 1 ;
- psf_binheader_readf (psf, "t", &size) ;
-
- psf_log_printf (psf, " Sound Continue : %d\n", size) ;
+ psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_PCM_U8 ;
+ psf->chars = SF_CHARS_UNSIGNED ;
+
+ return 0 ;
+ } ;
- psf_binheader_readf (psf, "j", size) ;
- } ;
- break ;
+ if (block_type == VOC_EXTENDED)
+ { unsigned char pack, stereo, compression ;
+ unsigned short rate_short ;
+ int size ;
- case VOC_TYPE_SILENCE :
- { unsigned char rate_byte ;
- short length ;
+ 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")) ;
- psf_log_printf (psf, " Silence\n") ;
- psf_binheader_readf (psf, "wb", &length, &rate_byte) ;
- psf_log_printf (psf, " length : %d\n", length) ;
- psf_log_printf (psf, " sr : %d => %dHz\n", (rate_byte & 0xFF), 1000000 / (256 - rate_byte)) ;
- } ;
- break ;
+ 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) ;
+ } ;
- case VOC_TYPE_MARKER :
- { int size ;
- short value ;
+ 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) ;
- psf_log_printf (psf, " Marker\n") ;
- psf_binheader_readf (psf, "tw", &size, &value) ;
-
- psf_log_printf (psf, " size : %d\n", size) ;
- psf_log_printf (psf, " value : %d\n", value) ;
- } ;
- break ;
+ if (offset + size - 1 > psf->filelength)
+ { psf_log_printf (psf, "Seems to be a truncated file.\n") ;
+ puts ("Seems to be a truncated file.\n") ;
+ /*-printf ("offset : %d size : %d filelength : %ld\n", offset, size, psf->filelength) ;-*/
+ return SFE_VOC_BAD_SECTIONS ;
+ }
+ else if (offset + size - 1 < psf->filelength)
+ { /*-printf ("offset : %d size : %d filelength : %ld\n", offset, size, psf->filelength) ;-*/
+ psf_log_printf (psf, "Seems to be a multi-segment file.\n") ;
+ return SFE_VOC_BAD_SECTIONS ;
+ } ;
+
+ psf->dataoffset = offset ;
+ psf->dataend = psf->filelength - 1 ;
- case VOC_TYPE_ASCII :
- { int size ;
+ psf->bytewidth = 1 ;
- psf_binheader_readf (psf, "t", &size) ;
-
- psf_log_printf (psf, " ASCII : %d\n", size) ;
+ psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_PCM_U8 ;
+ psf->chars = SF_CHARS_UNSIGNED ;
+
+ return 0 ;
+ }
- psf_binheader_readf (psf, "B", psf->header, size) ;
- psf->header [size] = 0 ;
- psf_log_printf (psf, " text : %s\n", psf->header) ;
- } ;
- break ;
+ if (block_type == VOC_EXTENDED_II)
+ { unsigned char bitwidth, channels ;
+ int size, fourbytes ;
- case VOC_TYPE_REPEAT :
- { int size ;
- short count ;
+ offset += psf_binheader_readf (psf, "e341124", &size, &psf->sf.samplerate,
+ &bitwidth, &channels, &encoding, &fourbytes) ;
- psf_binheader_readf (psf, "tw", &size, &count) ;
+ if (size * 2 == psf->filelength - 39)
+ { int temp_size = psf->filelength - 31 ;
- psf_log_printf (psf, " Marker : %d\n", size) ;
- psf_log_printf (psf, " value : %d\n", count) ;
- } ;
- break ;
+ 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) ;
- case VOC_TYPE_END_REPEAT :
- psf_log_printf (psf, " End Repeat\n") ;
- break ;
-
- case VOC_TYPE_EXTENDED :
- { unsigned char pack, mode ;
- short rate_short ;
- int size, sample_rate ;
+ psf_log_printf (psf, " sample rate : %d\n"
+ " bit width : %d\n"
+ " channels : %d\n", psf->sf.samplerate, bitwidth, channels) ;
- psf_binheader_readf (psf, "t", &size) ;
- psf_log_printf (psf, " Extended : %d\n", size) ;
-
- psf_binheader_readf (psf, "wbb", &rate_short, &pack, &mode) ;
- psf_log_printf (psf, " size : %d\n", size) ;
- psf_log_printf (psf, " pack : %d\n", pack) ;
- psf_log_printf (psf, " mode : %d\n", mode) ;
-
- if (mode)
- sample_rate = 128000000 / (65536 - rate_short) ;
- else
- sample_rate = 256000000 / (65536 - rate_short) ;
+ 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_log_printf (psf, " sr : %d => %dHz\n", (rate_short & 0xFFFF), sample_rate) ;
- psf_binheader_readf (psf, "j", size) ;
- } ;
+ psf->dataoffset = offset ;
+ psf->dataend = psf->filelength - 1 ;
+
+ 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.\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 ;
+ } ;
- case VOC_TYPE_9 :
- { unsigned char bitwidth, channels, byte6 ;
- int sample_rate, size, bytecount = 0 ;
-
- psf_binheader_readf (psf, "t", &size) ;
- psf_log_printf (psf, " Type 9 : %d\n", size) ;
+ } ;
- bytecount = psf_binheader_readf (psf, "lbbb", &sample_rate, &bitwidth, &channels, &byte6) ;
+ return 0 ;
+} /* voc_read_header */
- psf_log_printf (psf, " sample rate : %d\n", sample_rate) ;
- psf_log_printf (psf, " bit width : %d\n", bitwidth) ;
- psf_log_printf (psf, " channels : %d\n", channels) ;
+/*====================================================================================
+*/
- psf_binheader_readf (psf, "j", size - bytecount) ;
- } ;
- break ;
+static int
+voc_write_header (SF_PRIVATE *psf)
+{ int rate_const, subformat ;
+
+ subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
+ /* Reset the current header length to zero. */
+ psf->header [0] = 0 ;
+ psf->headindex = 0 ;
+ psf_fseek (psf->filedes, 0, SEEK_SET) ;
- default :
- psf_log_printf (psf, "Unknown type : %d\n", type & 0xFF) ;
- return SFE_VOC_BAD_MARKER ;
- } ;
+ /* VOC marker and 0x1A byte. */
+ psf_binheader_writef (psf, "eb1", "Creative Voice File", 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 (ftell (psf->file) >= psf->filelength)
- break ;
- } ;
+ if (subformat == SF_FORMAT_PCM_U8 && psf->sf.channels == 1)
+ { psf->chars = SF_CHARS_UNSIGNED ;
+
+ /* 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)
+ { psf->chars = SF_CHARS_UNSIGNED ;
+
+ /* 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 ;
- psf->sf.seekable = SF_TRUE ;
+ /* 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.samples * 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 ;
- psf->close = (func_close) voc_close ;
+ case SF_FORMAT_PCM_16 :
+ psf->bytewidth = 2 ;
+ length = psf->sf.samples * 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 ;
- return 0 ;
-} /* voc_open_read */
+ case SF_FORMAT_ALAW :
+ psf->bytewidth = 1 ;
+ length = psf->sf.samples * 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.samples * 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 ;
-int
-voc_open_write (SF_PRIVATE *psf)
-{
+ default : return SFE_UNIMPLEMENTED ;
+ } ;
+ } ;
+
+ psf_fwrite (psf->header, psf->headindex, 1, psf->filedes) ;
+ psf->dataoffset = psf->headindex ;
return 0 ;
-} /* voc_open_write */
+} /* voc_write_header */
-/*------------------------------------------------------------------------------
-*/
-
static int
voc_close (SF_PRIVATE *psf)
{
- if (psf->mode == SF_MODE_WRITE)
+ if (psf->mode == SFM_WRITE || psf->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 byte = VOC_TERMINATOR ;
+
+
+ psf_fseek (psf->filedes, 0, SEEK_END) ;
+
+ /* Write terminator */
+ psf_fwrite (&byte, 1, 1, psf->filedes) ;
+
+ psf->filelength = psf_ftell (psf->filedes) ;
+ psf_fseek (psf->filedes, 0, SEEK_SET) ;
+
+ psf->datalength = psf->filelength - psf->dataoffset ;
+ psf->sf.samples = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
+
+ voc_write_header (psf) ;
+ } ;
+
+ 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.samples = 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 ;
+ } ;
- if (psf->fdata)
- free (psf->fdata) ;
- psf->fdata = NULL ;
+ 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_close */
+} /* 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
@@ -374,3 +731,125 @@
-------------------------------------------------------------------------------------*/
+/*=====================================================================================
+**=====================================================================================
+**=====================================================================================
+**=====================================================================================
+*/
+
+/*------------------------------------------------------------------------
+The following is taken from the Audio File Formats FAQ dated 2-Jan-1995
+and submitted by Guido van Rossum <[email protected]>.
+--------------------------------------------------------------------------
+Creative Voice (VOC) file format
+--------------------------------
+
+From: [email protected]
+
+(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
+
+------------------------------------------------------------------------*/
--- /dev/null
+++ b/common/libsndfile/src/w64.c
@@ -1,0 +1,549 @@
+/*
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
+**
+** 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 <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <ctype.h>
+#include <time.h>
+
+#include "sndfile.h"
+#include "config.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)
+
+
+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 *samplesperblock) ;
+static int w64_write_header (SF_PRIVATE *psf) ;
+static int w64_close (SF_PRIVATE *psf) ;
+
+/*------------------------------------------------------------------------------
+** Public function.
+*/
+
+int
+w64_open (SF_PRIVATE *psf)
+{ int subformat, error, blockalign = 0, samplesperblock = 0 ;
+
+ if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR &&psf->filelength > 0))
+ { if ((error = w64_read_header (psf, &blockalign, &samplesperblock)))
+ return error ;
+ };
+
+ if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_W64)
+ return SFE_BAD_OPEN_FORMAT ;
+
+ subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
+
+ if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR)
+ { 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) ;
+ samplesperblock = -1 ;
+
+ /* FIXME : This block must go */
+ psf->filelength = SF_MAX_UINT ;
+ psf->datalength = SF_MAX_UINT ;
+ if (psf->sf.samples <= 0)
+ psf->sf.samples = (psf->blockwidth) ? SF_MAX_COUNT / psf->blockwidth : SF_MAX_COUNT ;
+ /* EMXIF : This block must go */
+ } ;
+
+ if ((error = w64_write_header (psf)))
+ return error ;
+
+ psf->write_header = w64_write_header ;
+ } ;
+
+ psf->close = w64_close ;
+
+ switch (subformat)
+ { case SF_FORMAT_PCM_U8 :
+ psf->chars = SF_CHARS_UNSIGNED ;
+ 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_FLOAT :
+ error = float32_init (psf) ;
+ break ;
+
+ case SF_FORMAT_DOUBLE :
+ error = double64_init (psf) ;
+ break ;
+
+ case SF_FORMAT_ULAW :
+ error = ulaw_init (psf) ;
+ break ;
+
+ case SF_FORMAT_ALAW :
+ error = alaw_init (psf) ;
+ break ;
+
+ case SF_FORMAT_IMA_ADPCM :
+ error = wav_w64_ima_init (psf, blockalign, samplesperblock) ;
+ break ;
+
+ case SF_FORMAT_MS_ADPCM :
+ error = wav_w64_msadpcm_init (psf, blockalign, samplesperblock) ;
+ break ;
+
+ 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 *samplesperblock)
+{ WAV_FMT wav_fmt ;
+ int dword = 0, marker, format = 0 ;
+ sf_count_t chunk_size, bytesread ;
+ int parsestage = 0, error ;
+ /*-char *cptr ; -*/
+
+ /* Set position to start of file to begin reading header. */
+ psf_binheader_readf (psf, "p", 0) ;
+
+ while (1)
+ { /* Read the 4 byte marker and jump 12 bytes. */
+ bytesread = psf_binheader_readf (psf, "h", &marker) ;
+ chunk_size = 0 ;
+
+ switch (marker)
+ { case riff_HASH16 :
+ if (parsestage)
+ return SFE_W64_NO_RIFF ;
+
+ 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 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_W64_NO_FMT ;
+
+ bytesread += psf_binheader_readf (psf, "e8", &chunk_size) ;
+ psf_log_printf (psf, " fmt : %d (0x%X)\n", chunk_size, chunk_size) ;
+
+ /* size of 16 byte marker and 8 byte chunk_size value. */
+ chunk_size -= 24 ;
+
+ if ((error = wav_w64_read_fmt_chunk (psf, &wav_fmt, 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 samples ;
+
+ psf_binheader_readf (psf, "e88", &chunk_size, &samples) ;
+ psf_log_printf (psf, " fact : 0x%X\n"
+ " samples : %d\n",
+ chunk_size, samples) ;
+ } ;
+ 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->filedes) ;
+
+ psf->datalength = chunk_size - 24 ;
+
+ if (chunk_size % 8)
+ chunk_size += 8 - (chunk_size % 8) ;
+
+ psf_log_printf (psf, "data : %d (0x%X)\n", chunk_size, psf->datalength) ;
+
+ parsestage |= HAVE_data ;
+
+ if (! psf->sf.seekable)
+ break ;
+
+ /* Seek past data and continue reading header. */
+ psf_fseek (psf->filedes, chunk_size, SEEK_CUR) ;
+ break ;
+
+ default :
+ if (psf_ftell (psf->filedes) & 0x0F)
+ { 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) ;
+ break ;
+ } ; /* switch (dword) */
+
+ if (! psf->sf.seekable && (parsestage & HAVE_data))
+ break ;
+
+ if (psf_ferror (psf->filedes))
+ { psf_log_printf (psf, "*** Error on file handle. ***\n", marker) ;
+ psf_fclearerr (psf->filedes) ;
+ break ;
+ } ;
+
+ if (psf_ftell (psf->filedes) >= (int) (psf->filelength - (2 * sizeof (dword))))
+ break ;
+
+ if (psf->logindex >= sizeof (psf->logbuffer) - 2)
+ return SFE_LOG_OVERRUN ;
+ } ; /* while (1) */
+
+ if (! psf->dataoffset)
+ return SFE_W64_NO_DATA ;
+
+ psf->endian = SF_ENDIAN_LITTLE ; /* All WAV files are little endian. */
+
+ psf_fseek (psf->filedes, psf->dataoffset, SEEK_SET) ;
+
+ psf->close = w64_close ;
+
+ if (psf->blockwidth)
+ { if (psf->filelength - psf->dataoffset < psf->datalength)
+ psf->sf.samples = (psf->filelength - psf->dataoffset) / psf->blockwidth ;
+ else
+ psf->sf.samples = psf->datalength / psf->blockwidth ;
+ } ;
+
+ switch (format)
+ { case WAVE_FORMAT_PCM :
+ case WAVE_FORMAT_EXTENSIBLE :
+ 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 ;
+ *samplesperblock = 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 ;
+ *samplesperblock = 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)
+{ sf_count_t fmt_size ;
+ int subformat, add_fact_chunk = SF_FALSE ;
+
+ /* Reset the current header length to zero. */
+ psf->header [0] = 0 ;
+ psf->headindex = 0 ;
+ psf_fseek (psf->filedes, 0, SEEK_SET) ;
+
+ /* riff marker, length, wave and 'fmt ' markers. */
+ psf_binheader_writef (psf, "eh8hh", riff_MARKER16, psf->filelength - 8, wave_MARKER16, fmt_MARKER16) ;
+
+ subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
+
+ 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 : 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 : 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 : 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 : 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 ;
+
+ case SF_FORMAT_IMA_ADPCM :
+ { int blockalign, samplesperblock, bytespersec ;
+
+ blockalign = wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ;
+ samplesperblock = 2 * (blockalign - 4 * psf->sf.channels) / psf->sf.channels + 1 ;
+ bytespersec = (psf->sf.samplerate * blockalign) / samplesperblock ;
+
+ /* fmt chunk. */
+ fmt_size = 24 + 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 ;
+
+ /* 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, samplesperblock. */
+ psf_binheader_writef (psf, "e2222", blockalign, 4, 2, samplesperblock) ;
+ } ;
+
+ add_fact_chunk = SF_TRUE ;
+ break ;
+
+ case SF_FORMAT_MS_ADPCM :
+ { int blockalign, samplesperblock, bytespersec, extrabytes ;
+
+ blockalign = wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ;
+ samplesperblock = 2 + 2 * (blockalign - 7 * psf->sf.channels) / psf->sf.channels ;
+ bytespersec = (psf->sf.samplerate * blockalign) / samplesperblock ;
+
+ /* fmt chunk. */
+ extrabytes = 2 + 2 + MSADPCM_ADAPT_COEFF_COUNT * (2 + 2) ;
+ fmt_size = 24 + 2 + 2 + 4 + 4 + 2 + 2 + 2 + extrabytes ;
+
+ /* 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, samplesperblock. */
+ psf_binheader_writef (psf, "e22222", blockalign, 4, extrabytes, samplesperblock, 7) ;
+
+ msadpcm_write_adapt_coeffs (psf) ;
+ } ;
+
+ add_fact_chunk = SF_TRUE ;
+ break ;
+
+ 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 : 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, samplesperblock. */
+ 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_size % 8)
+ psf_binheader_writef (psf, "z", 8 - (fmt_size % 8)) ;
+
+ if (add_fact_chunk)
+ psf_binheader_writef (psf, "eh88", fact_MARKER16, 16 + 8 + 8, psf->sf.samples) ;
+
+ psf_binheader_writef (psf, "eh8", data_MARKER16, psf->datalength + 24) ;
+ psf_fwrite (psf->header, psf->headindex, 1, psf->filedes) ;
+
+ psf->dataoffset = psf->headindex ;
+
+ return 0 ;
+} /* w64_write_header */
+
+static int
+w64_close (SF_PRIVATE *psf)
+{
+ if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR)
+ { /* Now we know for certain the length of the file we can
+ * re-write correct values for the riff and data chunks.
+ */
+
+ psf_fseek (psf->filedes, 0, SEEK_END) ;
+ psf->dataend = psf_ftell (psf->filedes) ;
+
+ psf_fseek (psf->filedes, 0, SEEK_END) ;
+ psf->filelength = psf_ftell (psf->filedes) ;
+ psf_fseek (psf->filedes, 0, SEEK_SET) ;
+
+ psf->datalength = psf->filelength - psf->dataoffset - (psf->filelength - psf->dataend) ;
+ psf->sf.samples = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
+
+ w64_write_header (psf) ;
+ } ;
+
+ return 0 ;
+} /* w64_close */
+
+
--- a/common/libsndfile/src/wav.c
+++ b/common/libsndfile/src/wav.c
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 1999-2001 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
**
** 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
@@ -27,77 +27,9 @@
#include "config.h"
#include "sfendian.h"
#include "common.h"
-#include "wav.h"
+#include "wav_w64.h"
/*------------------------------------------------------------------------------
-** List of known WAV format tags
-*/
-
-enum
-{
- 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_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_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_AF18 = 0x0024, /* Audiofile, Inc. */
- WAVE_FORMAT_APTX = 0x0025, /* Audio Processing Technology */
- WAVE_FORMAT_AUDIOFILE_AF10 = 0x0026, /* Audiofile, Inc. */
-
- 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_ROCKWELL_ADPCM = 0x003B, /* Rockwell International */
- WAVE_FORMAT_ROCKWELL_DIGITALK = 0x003C, /* Rockwell International */
-
- WAVE_FORMAT_G721_ADPCM = 0x0040, /* Antex Electronics Corporation */
- WAVE_FORMAT_MPEG = 0x0050, /* Microsoft Corporation */
-
- WAVE_FORMAT_MPEGLAYER3 = 0x0055, /* MPEG 3 Layer 1 */
-
- 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_CREATIVE_ADPCM = 0x0200, /* Creative Labs, Inc */
-
- WAVE_FORMAT_FM_TOWNS_SND = 0x0300, /* Fujitsu Corp. */
- 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_EXTENSIBLE = 0xFFFE
-} ;
-
-#define FACT_CHUNK_SIZE sizeof (int)
-
-/*------------------------------------------------------------------------------
* Macros to handle big/little endian issues.
*/
@@ -116,6 +48,7 @@
#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'))
@@ -124,6 +57,7 @@
#define acid_MARKER (MAKE_MARKER ('a', 'c', 'i', 'd'))
#define PAD_MARKER (MAKE_MARKER ('P', 'A', 'D', ' '))
#define adtl_MARKER (MAKE_MARKER ('a', 'd', 't', 'l'))
+#define afsp_MARKER (MAKE_MARKER ('a', 'f', 's', 'p'))
#define ISFT_MARKER (MAKE_MARKER ('I', 'S', 'F', 'T'))
#define ICRD_MARKER (MAKE_MARKER ('I', 'C', 'R', 'D'))
@@ -138,10 +72,8 @@
#define ISBJ_MARKER (MAKE_MARKER ('I', 'S', 'B', 'J'))
#define ICMT_MARKER (MAKE_MARKER ('I', 'C', 'M', 'T'))
-
-
-enum {
- HAVE_RIFF = 0x01,
+enum
+{ HAVE_RIFF = 0x01,
HAVE_WAVE = 0x02,
HAVE_fmt = 0x04,
HAVE_fact = 0x08,
@@ -153,28 +85,115 @@
* Private static functions.
*/
-static int wav_close (SF_PRIVATE *psf) ;
+static int wav_read_header (SF_PRIVATE *psf, int *blockalign, int *samplesperblock) ;
+static int wav_write_header (SF_PRIVATE *psf) ;
+static int wav_write_tailer (SF_PRIVATE *psf) ;
-static int read_fmt_chunk (SF_PRIVATE *psf, WAV_FMT *wav_fmt) ;
-static int wav_write_header (SF_PRIVATE *psf) ;
-static int wav_write_tailer (SF_PRIVATE *psf) ;
+static int wav_close (SF_PRIVATE *psf) ;
-static int wav_subchunk_parse (SF_PRIVATE *psf, int chunk) ;
+static int wav_subchunk_parse (SF_PRIVATE *psf, int chunk) ;
-static const char* wav_format_str (int k) ;
-
/*------------------------------------------------------------------------------
-** Public functions.
+** Public function.
*/
int
-wav_open_read (SF_PRIVATE *psf)
-{ WAV_FMT wav_fmt ;
- FACT_CHUNK fact_chunk ;
- unsigned int dword, marker, RIFFsize ;
- int parsestage = 0, error, format = 0 ;
- char *cptr ;
+wav_open (SF_PRIVATE *psf)
+{ int subformat, error, blockalign = 0, samplesperblock = 0 ;
+ if (psf->mode == SFM_READ || (psf->mode == SFM_RDWR && psf->filelength > 0))
+ { if ((error = wav_read_header (psf, &blockalign, &samplesperblock)))
+ return error ;
+ };
+
+ subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
+
+ if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR)
+ { if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_WAV)
+ return SFE_BAD_OPEN_FORMAT ;
+
+ psf->endian = SF_ENDIAN_LITTLE ; /* All WAV 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) ;
+ samplesperblock = -1 ;
+
+ /* FIXME : This block must go */
+ psf->filelength = SF_MAX_UINT ;
+ psf->datalength = SF_MAX_UINT ;
+ if (psf->sf.samples <= 0)
+ psf->sf.samples = (psf->blockwidth) ? SF_MAX_COUNT / psf->blockwidth : SF_MAX_COUNT ;
+ /* EMXIF : This block must go */
+ } ;
+
+ if ((error = wav_write_header (psf)))
+ return error ;
+
+ psf->write_header = wav_write_header ;
+ } ;
+
+ psf->close = wav_close ;
+
+ switch (subformat)
+ { case SF_FORMAT_PCM_U8 :
+ psf->chars = SF_CHARS_UNSIGNED ;
+ 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_FLOAT :
+ error = float32_init (psf) ;
+ break ;
+
+ case SF_FORMAT_DOUBLE :
+ error = double64_init (psf) ;
+ break ;
+
+ case SF_FORMAT_ULAW :
+ error = ulaw_init (psf) ;
+ break ;
+
+ case SF_FORMAT_ALAW :
+ error = alaw_init (psf) ;
+ break ;
+
+ case SF_FORMAT_IMA_ADPCM :
+ error = wav_w64_ima_init (psf, blockalign, samplesperblock) ;
+ break ;
+
+ case SF_FORMAT_MS_ADPCM :
+ error = wav_w64_msadpcm_init (psf, blockalign, samplesperblock) ;
+ break ;
+
+ case SF_FORMAT_GSM610 :
+ error = gsm610_init (psf) ;
+ break ;
+
+ default : return SFE_UNIMPLEMENTED ;
+ } ;
+
+ return error ;
+} /* wav_open */
+
+/*=========================================================================
+** Private functions.
+*/
+
+static int
+wav_read_header (SF_PRIVATE *psf, int *blockalign, int *samplesperblock)
+{ WAV_FMT wav_fmt ;
+ FACT_CHUNK fact_chunk ;
+ int dword, marker, RIFFsize ;
+ int parsestage = 0, error, format = 0 ;
+ char *cptr ;
+
/* Set position to start of file to begin reading header. */
psf_binheader_readf (psf, "p", 0) ;
@@ -185,10 +204,10 @@
if (parsestage)
return SFE_WAV_NO_RIFF ;
- psf_binheader_readf (psf, "l", &RIFFsize) ;
+ psf_binheader_readf (psf, "e4", &RIFFsize) ;
- if (psf->filelength < RIFFsize + 2 * sizeof (dword))
- { dword = psf->filelength - 2 * sizeof (dword);
+ if (psf->filelength < RIFFsize + 2 * SIGNED_SIZEOF (dword))
+ { dword = psf->filelength - 2 * SIGNED_SIZEOF (dword);
psf_log_printf (psf, "RIFF : %d (should be %d)\n", RIFFsize, dword) ;
RIFFsize = dword ;
}
@@ -207,9 +226,13 @@
case fmt_MARKER :
if ((parsestage & (HAVE_RIFF | HAVE_WAVE)) != (HAVE_RIFF | HAVE_WAVE))
return SFE_WAV_NO_FMT ;
- if ((error = read_fmt_chunk (psf, &wav_fmt)))
+
+ psf_binheader_readf (psf, "e4", &dword) ;
+ psf_log_printf (psf, "fmt : %d\n", dword) ;
+
+ if ((error = wav_w64_read_fmt_chunk (psf, &wav_fmt, dword)))
return error ;
-
+
format = wav_fmt.format ;
parsestage |= HAVE_fmt ;
break ;
@@ -218,11 +241,12 @@
if ((parsestage & (HAVE_RIFF | HAVE_WAVE | HAVE_fmt)) != (HAVE_RIFF | HAVE_WAVE | HAVE_fmt))
return SFE_WAV_NO_DATA ;
- psf_binheader_readf (psf, "l", &(psf->datalength)) ;
+ psf_binheader_readf (psf, "e4", &dword) ;
+ psf->datalength = dword ;
- psf->dataoffset = ftell (psf->file) ;
+ psf->dataoffset = psf_ftell (psf->filedes) ;
- if (psf->filelength < psf->dataoffset + psf->datalength)
+ 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 ;
}
@@ -240,11 +264,11 @@
break ;
/* Seek past data and continue reading header. */
- fseek (psf->file, psf->datalength, SEEK_CUR) ;
+ psf_fseek (psf->filedes, psf->datalength, SEEK_CUR) ;
- dword = ftell (psf->file) ;
- if (dword != (long) (psf->dataoffset + psf->datalength))
- psf_log_printf (psf, "*** fseek past end error ***\n", dword, psf->dataoffset + psf->datalength) ;
+ dword = psf_ftell (psf->filedes) ;
+ if (dword != (sf_count_t) (psf->dataoffset + psf->datalength))
+ psf_log_printf (psf, "*** psf_fseek past end error ***\n", dword, psf->dataoffset + psf->datalength) ;
break ;
case fact_MARKER :
@@ -251,12 +275,16 @@
if ((parsestage & (HAVE_RIFF | HAVE_WAVE | HAVE_fmt)) != (HAVE_RIFF | HAVE_WAVE | HAVE_fmt))
return SFE_WAV_BAD_FACT ;
- psf_binheader_readf (psf, "ll", &dword, &(fact_chunk.samples)) ;
+ psf_binheader_readf (psf, "e44", &dword, &(fact_chunk.samples)) ;
- if (dword > sizeof (fact_chunk))
- psf_binheader_readf (psf, "j", (int) (dword - sizeof (fact_chunk))) ;
-
- psf_log_printf (psf, "%D : %d\n", marker, dword) ;
+ if (dword > SIGNED_SIZEOF (fact_chunk))
+ psf_binheader_readf (psf, "j", (int) (dword - SIGNED_SIZEOF (fact_chunk))) ;
+
+ if (dword)
+ psf_log_printf (psf, "%D : %d\n", marker, dword) ;
+ else
+ psf_log_printf (psf, "%D : %d (should not be zero)\n", marker, dword) ;
+
psf_log_printf (psf, " samples : %d\n", fact_chunk.samples) ;
parsestage |= HAVE_fact ;
break ;
@@ -265,21 +293,21 @@
if ((parsestage & (HAVE_RIFF | HAVE_WAVE | HAVE_fmt)) != (HAVE_RIFF | HAVE_WAVE | HAVE_fmt))
return SFE_WAV_PEAK_B4_FMT ;
- psf_binheader_readf (psf, "l", &dword) ;
+ psf_binheader_readf (psf, "e4", &dword) ;
psf_log_printf (psf, "%D : %d\n", marker, dword) ;
- if (dword > sizeof (psf->peak))
+ if (dword > SIGNED_SIZEOF (psf->peak))
{ psf_binheader_readf (psf, "j", dword) ;
psf_log_printf (psf, "*** File PEAK chunk bigger than sizeof (PEAK_CHUNK).\n") ;
return SFE_WAV_BAD_PEAK ;
} ;
- if (dword != sizeof (psf->peak) - sizeof (psf->peak.peak) + psf->sf.channels * sizeof (PEAK_POS))
+ if (dword != SIGNED_SIZEOF (psf->peak) - SIGNED_SIZEOF (psf->peak.peak) + psf->sf.channels * SIGNED_SIZEOF (PEAK_POS))
{ psf_binheader_readf (psf, "j", dword) ;
psf_log_printf (psf, "*** File PEAK chunk size doesn't fit with number of channels.\n") ;
return SFE_WAV_BAD_PEAK ;
} ;
- psf_binheader_readf (psf, "ll", &(psf->peak.version), &(psf->peak.timestamp)) ;
+ psf_binheader_readf (psf, "e44", &(psf->peak.version), &(psf->peak.timestamp)) ;
if (psf->peak.version != 1)
psf_log_printf (psf, " version : %d *** (should be version 1)\n", psf->peak.version) ;
@@ -291,10 +319,10 @@
cptr = (char *) psf->buffer ;
for (dword = 0 ; dword < psf->sf.channels ; dword++)
- { psf_binheader_readf (psf, "fl", &(psf->peak.peak[dword].value),
+ { psf_binheader_readf (psf, "ef4", &(psf->peak.peak[dword].value),
&(psf->peak.peak[dword].position)) ;
- snprintf (cptr, sizeof (psf->buffer), " %2d %-12d %g\n",
+ LSF_SNPRINTF (cptr, sizeof (psf->buffer), " %2d %-12d %g\n",
dword, psf->peak.peak[dword].position, psf->peak.peak[dword].value) ;
cptr [sizeof (psf->buffer) - 1] = 0 ;
psf_log_printf (psf, cptr) ;
@@ -305,7 +333,6 @@
case INFO_MARKER :
case LIST_MARKER :
- psf_log_printf (psf, "%D\n", marker) ;
if ((error = wav_subchunk_parse (psf, marker)))
return error ;
break ;
@@ -314,7 +341,7 @@
case cue_MARKER :
case DISP_MARKER :
case MEXT_MARKER :
- psf_binheader_readf (psf, "l", &dword);
+ psf_binheader_readf (psf, "e4", &dword);
psf_log_printf (psf, "%D : %d\n", marker, dword) ;
dword += (dword & 1) ;
psf_binheader_readf (psf, "j", dword) ;
@@ -323,7 +350,8 @@
case smpl_MARKER :
case acid_MARKER :
case PAD_MARKER :
- psf_binheader_readf (psf, "l", &dword);
+ case afsp_MARKER :
+ psf_binheader_readf (psf, "e4", &dword);
psf_log_printf (psf, " *** %D : %d\n", marker, dword) ;
dword += (dword & 1) ;
psf_binheader_readf (psf, "j", dword) ;
@@ -333,13 +361,13 @@
default :
if (isprint ((marker >> 24) & 0xFF) && isprint ((marker >> 16) & 0xFF)
&& isprint ((marker >> 8) & 0xFF) && isprint (marker & 0xFF))
- { psf_binheader_readf (psf, "l", &dword);
+ { psf_binheader_readf (psf, "e4", &dword);
psf_log_printf (psf, "*** %D : %d (unknown marker)\n", marker, dword) ;
psf_binheader_readf (psf, "j", dword);
break ;
} ;
- if (ftell (psf->file) & 0x03)
+ if (psf_ftell (psf->filedes) & 0x03)
{ psf_log_printf (psf, " Unknown chunk marker at position %d. Resynching.\n", dword - 4) ;
psf_binheader_readf (psf, "j", -3) ;
break ;
@@ -351,26 +379,27 @@
if (! psf->sf.seekable && (parsestage & HAVE_data))
break ;
- if (ferror (psf->file))
+ if (psf_ferror (psf->filedes))
{ psf_log_printf (psf, "*** Error on file handle. ***\n", marker) ;
- clearerr (psf->file) ;
+ psf_fclearerr (psf->filedes) ;
break ;
} ;
- if (ftell (psf->file) >= (int) (psf->filelength - (2 * sizeof (dword))))
+ if (psf_ftell (psf->filedes) >= (int) (psf->filelength - (2 * sizeof (dword))))
break ;
+
+ if (psf->logindex >= sizeof (psf->logbuffer) - 2)
+ return SFE_LOG_OVERRUN ;
} ; /* while (1) */
if (! psf->dataoffset)
return SFE_WAV_NO_DATA ;
- psf->current = 0 ;
- psf->endian = SF_ENDIAN_LITTLE ; /* All WAV files are little endian. */
- psf->sf.sections = 1 ;
+ psf->endian = SF_ENDIAN_LITTLE ; /* All WAV files are little endian. */
- fseek (psf->file, psf->dataoffset, SEEK_SET) ;
+ psf_fseek (psf->filedes, psf->dataoffset, SEEK_SET) ;
- psf->close = (func_close) wav_close ;
+ psf->close = wav_close ;
if (psf->blockwidth)
{ if (psf->filelength - psf->dataoffset < psf->datalength)
@@ -380,264 +409,204 @@
} ;
switch (format)
- { case WAVE_FORMAT_PCM :
- case WAVE_FORMAT_EXTENSIBLE :
- psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_PCM) ;
- if (psf->bytewidth == 1)
- psf->chars = SF_CHARS_UNSIGNED ;
-
- if ((error = pcm_read_init (psf)))
- return error ;
- return 0 ;
+ { case WAVE_FORMAT_PCM :
+ case WAVE_FORMAT_EXTENSIBLE :
+ psf->sf.format = SF_FORMAT_WAV | u_bitwidth_to_subformat (psf->bytewidth * 8) ;
+ break ;
- case WAVE_FORMAT_IEEE_FLOAT :
- psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_FLOAT) ;
- float32_read_init (psf) ;
- return 0 ;
-
- default : return SFE_UNIMPLEMENTED ;
- } ;
-
- return 0 ;
-} /* wav_open_read */
-
-/*------------------------------------------------------------------------------
- */
-
-int
-wav_open_write (SF_PRIVATE *psf)
-{ unsigned int subformat ;
- int error ;
+ case WAVE_FORMAT_MULAW :
+ psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_ULAW) ;
+ break ;
- if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_WAV)
- return SFE_BAD_OPEN_FORMAT ;
-
- psf->endian = SF_ENDIAN_LITTLE ; /* All WAV files are little endian. */
- psf->sf.seekable = SF_TRUE ;
- psf->error = 0 ;
-
- subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
- if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)
- psf->bytewidth = 1 ;
- else
- psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
-
- psf->blockwidth = psf->bytewidth * psf->sf.channels ;
-
- /* Set sample count artifically high and fix later. */
- psf->sf.samples = 0x7FFFFFFF / psf->blockwidth ;
- psf->datalength = psf->blockwidth * psf->sf.samples ;
- psf->filelength = 0x7FFFFFFF ;
-
- /* Set standard wav_close and write_header now, may be overridden in wav_write_header. */
- psf->close = (func_close) wav_close ;
- psf->write_header = (func_wr_hdr) wav_write_header ;
-
- if ((error = wav_write_header (psf)))
- return error ;
-
- return 0 ;
-} /* wav_open_write */
-
-/*------------------------------------------------------------------------------
- */
-
-static int
-wav_close (SF_PRIVATE *psf)
-{
- if (psf->mode == SF_MODE_WRITE)
- { /* Now we know for certain the length of the file we can
- * re-write correct values for the RIFF and data chunks.
- */
-
- fseek (psf->file, 0, SEEK_END) ;
- psf->tailstart = ftell (psf->file) ;
- wav_write_tailer (psf) ;
-
- fseek (psf->file, 0, SEEK_END) ;
- psf->filelength = ftell (psf->file) ;
- fseek (psf->file, 0, SEEK_SET) ;
+ case WAVE_FORMAT_ALAW :
+ psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_ALAW) ;
+ break ;
- psf->datalength = psf->filelength - psf->dataoffset - (psf->filelength - psf->tailstart) ;
- psf->sf.samples = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
+ case WAVE_FORMAT_MS_ADPCM :
+ psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM) ;
+ *blockalign = wav_fmt.msadpcm.blockalign ;
+ *samplesperblock = wav_fmt.msadpcm.samplesperblock ;
+ break ;
- wav_write_header (psf) ;
- } ;
-
- if (psf->fdata)
- free (psf->fdata) ;
- psf->fdata = NULL ;
-
- return 0 ;
-} /* wav_close */
-
-/*=========================================================================
-** Private functions.
-*/
-
-static int
-read_fmt_chunk (SF_PRIVATE *psf, WAV_FMT *wav_fmt)
-{ unsigned int bytesread, k, structsize, bytespersec = 0 ;
-
- memset (wav_fmt, 0, sizeof (WAV_FMT)) ;
-
- psf_binheader_readf (psf, "l", &structsize) ;
-
- psf_log_printf (psf, "fmt : %d\n", structsize) ;
-
- if (structsize < 16)
- return SFE_WAV_FMT_SHORT ;
- if (structsize > sizeof (WAV_FMT))
- return SFE_WAV_FMT_TOO_BIG ;
-
- /* Read the minimal WAV file header here. */
- bytesread =
- psf_binheader_readf (psf, "wwllww", &(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_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) ;
- psf_log_printf (psf, " Block Align : %d\n", wav_fmt->min.blockalign) ;
-
- if (wav_fmt->format == WAVE_FORMAT_GSM610 && wav_fmt->min.bitwidth != 0)
- psf_log_printf (psf, " Bit Width : %d (should be 0)\n", wav_fmt->min.bitwidth) ;
- else
- psf_log_printf (psf, " Bit Width : %d\n", wav_fmt->min.bitwidth) ;
-
- psf->sf.samplerate = wav_fmt->min.samplerate ;
- psf->sf.samples = 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_IMA_ADPCM :
+ psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM) ;
+ *blockalign = wav_fmt.ima.blockalign ;
+ *samplesperblock = wav_fmt.ima.samplesperblock ;
+ break ;
+
+ case WAVE_FORMAT_GSM610 :
+ psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_GSM610) ;
+ break ;
+
case WAVE_FORMAT_IEEE_FLOAT :
- bytespersec = wav_fmt->min.samplerate * wav_fmt->min.blockalign ;
- if (wav_fmt->min.bytespersec != 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->sf.format = SF_FORMAT_WAV ;
+ psf->sf.format |= (psf->bytewidth == 8) ? SF_FORMAT_DOUBLE : SF_FORMAT_FLOAT ;
+ break ;
- psf->sf.pcmbitwidth = wav_fmt->min.bitwidth ;
- psf->bytewidth = BITWIDTH2BYTES (wav_fmt->min.bitwidth) ;
- 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, "wwl", &(wav_fmt->ext.extrabytes), &(wav_fmt->ext.validbits),
- &(wav_fmt->ext.channelmask)) ;
-
- psf_log_printf (psf, " Valid Bits : %d\n", wav_fmt->ext.validbits) ;
- psf_log_printf (psf, " Channel Mask : 0x%X\n", wav_fmt->ext.channelmask) ;
-
- bytesread +=
- psf_binheader_readf (psf, "lww", &(wav_fmt->ext.esf.esf_field1), &(wav_fmt->ext.esf.esf_field2),
- &(wav_fmt->ext.esf.esf_field3)) ;
-
- 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, "b", &(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->sf.pcmbitwidth = wav_fmt->ext.bitwidth ;
- psf->bytewidth = BITWIDTH2BYTES (wav_fmt->ext.bitwidth) ;
- break ;
-
- default : break ;
+ default : return SFE_UNIMPLEMENTED ;
} ;
- if (bytesread > structsize)
- { psf_log_printf (psf, "*** read_fmt_chunk (bytesread > structsize)\n") ;
- return SFE_WAV_FMT_SHORT ;
- }
- else
- fread (psf->buffer, 1, structsize - bytesread, psf->file) ;
-
- psf->blockwidth = wav_fmt->min.channels * psf->bytewidth ;
-
return 0 ;
-} /* read_fmt_chunk */
+} /* wav_read_header */
static int
wav_write_header (SF_PRIVATE *psf)
-{ unsigned int fmt_size ;
- int k, error, subformat ;
+{ int fmt_size, k, subformat, add_fact_chunk = SF_FALSE ;
/* Reset the current header length to zero. */
psf->header [0] = 0 ;
psf->headindex = 0 ;
- fseek (psf->file, 0, SEEK_SET) ;
+ psf_fseek (psf->filedes, 0, SEEK_SET) ;
/* RIFF marker, length, WAVE and 'fmt ' markers. */
- psf_binheader_writef (psf, "mlmm", RIFF_MARKER, psf->filelength - 8, WAVE_MARKER, fmt_MARKER) ;
+ psf_binheader_writef (psf, "etm8mm", RIFF_MARKER, psf->filelength - 8, WAVE_MARKER, fmt_MARKER) ;
subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
switch (subformat)
- { case SF_FORMAT_PCM :
- psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_PCM) ;
-
- if (psf->bytewidth == 1)
- psf->chars = SF_CHARS_UNSIGNED ;
-
- if ((error = pcm_write_init (psf)))
- return error ;
-
+ { 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, "lwwl", fmt_size, WAVE_FORMAT_PCM, psf->sf.channels, psf->sf.samplerate) ;
+ psf_binheader_writef (psf, "e4224", fmt_size, WAVE_FORMAT_PCM, psf->sf.channels, psf->sf.samplerate) ;
/* fmt : bytespersec */
- psf_binheader_writef (psf, "l", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
+ psf_binheader_writef (psf, "e4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
/* fmt : blockalign, bitwidth */
- psf_binheader_writef (psf, "ww", psf->bytewidth * psf->sf.channels, psf->sf.pcmbitwidth) ;
+ psf_binheader_writef (psf, "e22", psf->bytewidth * psf->sf.channels, psf->bytewidth * 8) ;
break ;
- case SF_FORMAT_FLOAT :
- psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_FLOAT) ;
-
+ case SF_FORMAT_FLOAT :
+ case SF_FORMAT_DOUBLE :
/* Add the peak chunk to floating point files. */
psf->has_peak = SF_TRUE ;
psf->peak_loc = SF_PEAK_START ;
- float32_write_init (psf) ;
fmt_size = 2 + 2 + 4 + 4 + 2 + 2 ;
/* fmt : format, channels, samplerate */
- psf_binheader_writef (psf, "lwwl", fmt_size, WAVE_FORMAT_IEEE_FLOAT, psf->sf.channels, psf->sf.samplerate) ;
+ psf_binheader_writef (psf, "e4224", fmt_size, WAVE_FORMAT_IEEE_FLOAT, psf->sf.channels, psf->sf.samplerate) ;
/* fmt : bytespersec */
- psf_binheader_writef (psf, "l", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
+ psf_binheader_writef (psf, "e4", psf->sf.samplerate * psf->bytewidth * psf->sf.channels) ;
/* fmt : blockalign, bitwidth */
- psf_binheader_writef (psf, "ww", psf->bytewidth * psf->sf.channels, psf->sf.pcmbitwidth) ;
+ psf_binheader_writef (psf, "e22", psf->bytewidth * psf->sf.channels, psf->bytewidth * 8) ;
- /* Write 'fact' chunk. */
- psf_binheader_writef (psf, "mll", fact_MARKER, FACT_CHUNK_SIZE, psf->sf.samples) ;
+ add_fact_chunk = SF_TRUE ;
break ;
+ case SF_FORMAT_ULAW :
+ fmt_size = 2 + 2 + 4 + 4 + 2 + 2 ;
+
+ /* fmt : format, channels, samplerate */
+ psf_binheader_writef (psf, "e4224", 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 = 2 + 2 + 4 + 4 + 2 + 2 ;
+
+ /* fmt : format, channels, samplerate */
+ psf_binheader_writef (psf, "e4224", 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 ;
+
+ case SF_FORMAT_IMA_ADPCM :
+ { int blockalign, samplesperblock, bytespersec ;
+
+ blockalign = wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ;
+ samplesperblock = 2 * (blockalign - 4 * psf->sf.channels) / psf->sf.channels + 1 ;
+ bytespersec = (psf->sf.samplerate * blockalign) / samplesperblock ;
+
+ /* fmt chunk. */
+ fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 ;
+
+ /* fmt : size, WAV format type, channels, samplerate, bytespersec */
+ psf_binheader_writef (psf, "e42244", fmt_size, WAVE_FORMAT_IMA_ADPCM,
+ psf->sf.channels, psf->sf.samplerate, bytespersec) ;
+
+ /* fmt : blockalign, bitwidth, extrabytes, samplesperblock. */
+ psf_binheader_writef (psf, "e2222", blockalign, 4, 2, samplesperblock) ;
+ } ;
+ add_fact_chunk = SF_TRUE ;
+ break ;
+
+ case SF_FORMAT_MS_ADPCM :
+ { int blockalign, samplesperblock, bytespersec, extrabytes ;
+
+ blockalign = wav_w64_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ;
+ samplesperblock = 2 + 2 * (blockalign - 7 * psf->sf.channels) / psf->sf.channels ;
+ bytespersec = (psf->sf.samplerate * blockalign) / samplesperblock ;
+
+ /* 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, "e422", 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, samplesperblock. */
+ psf_binheader_writef (psf, "e22222", blockalign, 4, extrabytes, samplesperblock, 7) ;
+
+ msadpcm_write_adapt_coeffs (psf) ;
+ } ;
+
+ add_fact_chunk = SF_TRUE ;
+ break ;
+
+ case SF_FORMAT_GSM610 :
+ { int blockalign, samplesperblock, bytespersec ;
+
+ blockalign = WAV_W64_GSM610_BLOCKSIZE ;
+ samplesperblock = WAV_W64_GSM610_SAMPLES ;
+ bytespersec = (psf->sf.samplerate * blockalign) / samplesperblock ;
+
+ /* fmt chunk. */
+ fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 ;
+
+ /* fmt : size, WAV format type, channels. */
+ psf_binheader_writef (psf, "e422", fmt_size, WAVE_FORMAT_GSM610, psf->sf.channels) ;
+
+ /* fmt : samplerate, bytespersec. */
+ psf_binheader_writef (psf, "e44", psf->sf.samplerate, bytespersec) ;
+
+ /* fmt : blockalign, bitwidth, extrabytes, samplesperblock. */
+ psf_binheader_writef (psf, "e2222", blockalign, 0, 2, samplesperblock) ;
+ } ;
+
+ add_fact_chunk = SF_TRUE ;
+ break ;
+
default : return SFE_UNIMPLEMENTED ;
} ;
+ if (add_fact_chunk)
+ psf_binheader_writef (psf, "em44", fact_MARKER, 4, psf->sf.samples) ;
+
if (psf->has_peak && psf->peak_loc == SF_PEAK_START)
- { psf_binheader_writef (psf, "ml", PEAK_MARKER,
+ { psf_binheader_writef (psf, "em4", PEAK_MARKER,
sizeof (psf->peak) - sizeof (psf->peak.peak) + psf->sf.channels * sizeof (PEAK_POS)) ;
- psf_binheader_writef (psf, "ll", 1, time (NULL)) ;
+ psf_binheader_writef (psf, "e44", 1, time (NULL)) ;
for (k = 0 ; k < psf->sf.channels ; k++)
- psf_binheader_writef (psf, "fl", psf->peak.peak[k].value, psf->peak.peak[k].position) ;
+ psf_binheader_writef (psf, "ef4", psf->peak.peak[k].value, psf->peak.peak[k].position) ;
} ;
- psf_binheader_writef (psf, "ml", data_MARKER, psf->datalength) ;
- fwrite (psf->header, psf->headindex, 1, psf->file) ;
+ psf_binheader_writef (psf, "etm8", data_MARKER, psf->datalength) ;
+ psf_fwrite (psf->header, psf->headindex, 1, psf->filedes) ;
psf->dataoffset = psf->headindex ;
@@ -644,7 +613,7 @@
return 0 ;
} /* wav_write_header */
-static int
+static int
wav_write_tailer (SF_PRIVATE *psf)
{ int k ;
@@ -651,28 +620,64 @@
/* Reset the current header buffer length to zero. */
psf->header [0] = 0 ;
psf->headindex = 0 ;
- fseek (psf->file, 0, SEEK_END) ;
+ psf_fseek (psf->filedes, 0, SEEK_END) ;
if (psf->has_peak && psf->peak_loc == SF_PEAK_END)
- { psf_binheader_writef (psf, "ml", PEAK_MARKER,
+ { psf_binheader_writef (psf, "em4", PEAK_MARKER,
sizeof (psf->peak) - sizeof (psf->peak.peak) + psf->sf.channels * sizeof (PEAK_POS)) ;
- psf_binheader_writef (psf, "ll", 1, time (NULL)) ;
+ psf_binheader_writef (psf, "e44", 1, time (NULL)) ;
for (k = 0 ; k < psf->sf.channels ; k++)
- psf_binheader_writef (psf, "fl", psf->peak.peak[k].value, psf->peak.peak[k].position) ; /* XXXXX */
+ psf_binheader_writef (psf, "ef4", psf->peak.peak[k].value, psf->peak.peak[k].position) ; /* XXXXX */
} ;
if (psf->headindex > 0)
- fwrite (psf->header, psf->headindex, 1, psf->file) ;
+ psf_fwrite (psf->header, psf->headindex, 1, psf->filedes) ;
return 0 ;
} /* wav_write_tailer */
+static int
+wav_close (SF_PRIVATE *psf)
+{
+ if (psf->mode == SFM_WRITE || psf->mode == SFM_RDWR)
+ { /* Now we know for certain the length of the file we can
+ * re-write correct values for the RIFF and data chunks.
+ */
+
+ psf_fseek (psf->filedes, 0, SEEK_END) ;
+ psf->dataend = psf_ftell (psf->filedes) ;
+ wav_write_tailer (psf) ;
+
+ psf_fseek (psf->filedes, 0, SEEK_END) ;
+ psf->filelength = psf_ftell (psf->filedes) ;
+ psf_fseek (psf->filedes, 0, SEEK_SET) ;
+
+ psf->datalength = psf->filelength - psf->dataoffset - (psf->filelength - psf->dataend) ;
+ psf->sf.samples = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
+
+ wav_write_header (psf) ;
+ } ;
+
+ return 0 ;
+} /* wav_close */
+
static int
wav_subchunk_parse (SF_PRIVATE *psf, int chunk)
-{ unsigned int dword, bytesread, length ;
+{ sf_count_t current_pos ;
+ int dword, bytesread, length ;
- bytesread = psf_binheader_readf (psf, "l", &length);
+ current_pos = psf_fseek (psf->filedes, 0, SEEK_CUR) ;
+ bytesread = psf_binheader_readf (psf, "e4", &length);
+
+ if (current_pos + length > psf->filelength)
+ { psf_log_printf (psf, "%D : %d (should be %d)\n", chunk, length, (int) (psf->filelength - current_pos)) ;
+ length = psf->filelength - current_pos ;
+ }
+ else
+ psf_log_printf (psf, "%D : %d\n", chunk, length) ;
+
+
while (bytesread < length)
{ bytesread += psf_binheader_readf (psf, "m", &chunk);
@@ -682,8 +687,13 @@
/* These markers don't contain anything. */
psf_log_printf (psf, " %D\n", chunk) ;
break ;
+
+ case data_MARKER:
+ psf_log_printf (psf, " %D 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 IART_MARKER :
case ICMT_MARKER :
case ICOP_MARKER :
@@ -695,20 +705,21 @@
case ISBJ_MARKER :
case ISFT_MARKER :
case ISRC_MARKER :
- bytesread += psf_binheader_readf (psf, "l", &dword);
+ bytesread += psf_binheader_readf (psf, "e4", &dword);
dword += (dword & 1) ;
- if (dword > sizeof (psf->buffer))
+ if (dword > SIGNED_SIZEOF (psf->buffer))
{ psf_log_printf (psf, " *** %D : %d (too big)\n", chunk, dword) ;
return SFE_INTERNAL ;
} ;
- bytesread += psf_binheader_readf (psf, "B", psf->buffer, dword) ;
+ bytesread += psf_binheader_readf (psf, "b", psf->buffer, dword) ;
psf->buffer [dword - 1] = 0 ;
psf_log_printf (psf, " %D : %s\n", chunk, psf->buffer) ;
break ;
case labl_MARKER :
+ case ltxt_MARKER :
case note_MARKER :
- bytesread += psf_binheader_readf (psf, "l", &dword);
+ bytesread += psf_binheader_readf (psf, "e4", &dword);
dword += (dword & 1) ;
psf_binheader_readf (psf, "j", dword) ;
bytesread += dword ;
@@ -716,117 +727,19 @@
break ;
default :
- bytesread += psf_binheader_readf (psf, "l", &dword);
+ bytesread += psf_binheader_readf (psf, "e4", &dword);
dword += (dword & 1) ;
bytesread += psf_binheader_readf (psf, "j", dword) ;
psf_log_printf (psf, " *** %D : %d\n", chunk, dword) ;
+ if (dword > length)
+ return 0 ;
break ;
} ;
+ if (psf->logindex >= sizeof (psf->logbuffer) - 2)
+ return SFE_LOG_OVERRUN ;
} ;
return 0 ;
} /* wav_subchunk_parse */
-static char const*
-wav_format_str (int k)
-{ switch (k)
- { case WAVE_FORMAT_UNKNOWN :
- return "WAVE_FORMAT_UNKNOWN" ;
- case WAVE_FORMAT_PCM :
- return "WAVE_FORMAT_PCM " ;
- case WAVE_FORMAT_MS_ADPCM :
- return "WAVE_FORMAT_MS_ADPCM" ;
- case WAVE_FORMAT_IEEE_FLOAT :
- return "WAVE_FORMAT_IEEE_FLOAT" ;
- case WAVE_FORMAT_IBM_CVSD :
- return "WAVE_FORMAT_IBM_CVSD" ;
- case WAVE_FORMAT_ALAW :
- return "WAVE_FORMAT_ALAW" ;
- case WAVE_FORMAT_MULAW :
- return "WAVE_FORMAT_MULAW" ;
- case WAVE_FORMAT_OKI_ADPCM :
- return "WAVE_FORMAT_OKI_ADPCM" ;
- case WAVE_FORMAT_IMA_ADPCM :
- return "WAVE_FORMAT_IMA_ADPCM" ;
- case WAVE_FORMAT_MEDIASPACE_ADPCM :
- return "WAVE_FORMAT_MEDIASPACE_ADPCM" ;
- case WAVE_FORMAT_SIERRA_ADPCM :
- return "WAVE_FORMAT_SIERRA_ADPCM" ;
- case WAVE_FORMAT_G723_ADPCM :
- return "WAVE_FORMAT_G723_ADPCM" ;
- case WAVE_FORMAT_DIGISTD :
- return "WAVE_FORMAT_DIGISTD" ;
- case WAVE_FORMAT_DIGIFIX :
- return "WAVE_FORMAT_DIGIFIX" ;
- case WAVE_FORMAT_DIALOGIC_OKI_ADPCM :
- return "WAVE_FORMAT_DIALOGIC_OKI_ADPCM" ;
- case WAVE_FORMAT_MEDIAVISION_ADPCM :
- return "WAVE_FORMAT_MEDIAVISION_ADPCM" ;
- case WAVE_FORMAT_YAMAHA_ADPCM :
- return "WAVE_FORMAT_YAMAHA_ADPCM" ;
- case WAVE_FORMAT_SONARC :
- return "WAVE_FORMAT_SONARC" ;
- case WAVE_FORMAT_DSPGROUP_TRUESPEECH :
- return "WAVE_FORMAT_DSPGROUP_TRUESPEECH " ;
- case WAVE_FORMAT_ECHOSC1 :
- return "WAVE_FORMAT_ECHOSC1" ;
- case WAVE_FORMAT_AUDIOFILE_AF18 :
- return "WAVE_FORMAT_AUDIOFILE_AF18 " ;
- case WAVE_FORMAT_APTX :
- return "WAVE_FORMAT_APTX" ;
- case WAVE_FORMAT_AUDIOFILE_AF10 :
- return "WAVE_FORMAT_AUDIOFILE_AF10 " ;
- case WAVE_FORMAT_DOLBY_AC2 :
- return "WAVE_FORMAT_DOLBY_AC2" ;
- case WAVE_FORMAT_GSM610 :
- return "WAVE_FORMAT_GSM610" ;
- case WAVE_FORMAT_MSNAUDIO :
- return "WAVE_FORMAT_MSNAUDIO" ;
- case WAVE_FORMAT_ANTEX_ADPCME :
- return "WAVE_FORMAT_ANTEX_ADPCME" ;
- case WAVE_FORMAT_CONTROL_RES_VQLPC :
- return "WAVE_FORMAT_CONTROL_RES_VQLPC" ;
- case WAVE_FORMAT_DIGIREAL :
- return "WAVE_FORMAT_DIGIREAL" ;
- case WAVE_FORMAT_DIGIADPCM :
- return "WAVE_FORMAT_DIGIADPCM" ;
- case WAVE_FORMAT_CONTROL_RES_CR10 :
- return "WAVE_FORMAT_CONTROL_RES_CR10" ;
- case WAVE_FORMAT_NMS_VBXADPCM :
- return "WAVE_FORMAT_NMS_VBXADPCM" ;
- case WAVE_FORMAT_ROCKWELL_ADPCM :
- return "WAVE_FORMAT_ROCKWELL_ADPCM" ;
- case WAVE_FORMAT_ROCKWELL_DIGITALK :
- return "WAVE_FORMAT_ROCKWELL_DIGITALK" ;
- case WAVE_FORMAT_G721_ADPCM :
- return "WAVE_FORMAT_G721_ADPCM" ;
- case WAVE_FORMAT_MPEG :
- return "WAVE_FORMAT_MPEG" ;
- case WAVE_FORMAT_MPEGLAYER3 :
- return "WAVE_FORMAT_MPEGLAYER3" ;
- case IBM_FORMAT_MULAW :
- return "IBM_FORMAT_MULAW" ;
- case IBM_FORMAT_ALAW :
- return "IBM_FORMAT_ALAW" ;
- case IBM_FORMAT_ADPCM :
- return "IBM_FORMAT_ADPCM" ;
- case WAVE_FORMAT_CREATIVE_ADPCM :
- return "WAVE_FORMAT_CREATIVE_ADPCM" ;
- case WAVE_FORMAT_FM_TOWNS_SND :
- return "WAVE_FORMAT_FM_TOWNS_SND" ;
- case WAVE_FORMAT_OLIGSM :
- return "WAVE_FORMAT_OLIGSM" ;
- case WAVE_FORMAT_OLIADPCM :
- return "WAVE_FORMAT_OLIADPCM" ;
- case WAVE_FORMAT_OLICELP :
- return "WAVE_FORMAT_OLICELP" ;
- case WAVE_FORMAT_OLISBC :
- return "WAVE_FORMAT_OLISBC" ;
- case WAVE_FORMAT_OLIOPR :
- return "WAVE_FORMAT_OLIOPR" ;
- case WAVE_FORMAT_EXTENSIBLE :
- return "WAVE_FORMAT_EXTENSIBLE" ;
- break ;
- } ;
- return "Unknown format" ;
-} /* wav_format_str */
+
--- a/common/libsndfile/src/wav.h
+++ /dev/null
@@ -1,126 +1,0 @@
-#ifndef WAV_H_INCLUDED
-#define WAV_H_INCLUDED
-
-#ifdef _WIN32
- #pragma pack(push,1)
-#endif
-
-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 samplesperblock ;
-} GSM610_WAV_FMT ;
-
-typedef struct
-{ unsigned int esf_field1 ;
- unsigned short esf_field2 ;
- unsigned short esf_field3 ;
- unsigned 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 ;
- EXTENSIBLE_WAV_FMT ext ;
- GSM610_WAV_FMT gsm610 ;
- WAV_FMT_SIZE20 size20 ;
- char padding [512] ;
-} WAV_FMT ;
-
-typedef struct
-{ unsigned int samples ;
-} FACT_CHUNK ;
-
-/*------------------------------------------------------------------------------------
-** Functions defined in wav_ima_adpcm.c
-*/
-
-int wav_ima_reader_init (SF_PRIVATE *psf, WAV_FMT *fmt) ;
-int wav_ima_writer_init (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------------
-** Functions defined in wav_ms_adpcm.c
-*/
-
-int wav_msadpcm_reader_init (SF_PRIVATE *psf, WAV_FMT *fmt) ;
-int wav_msadpcm_writer_init (SF_PRIVATE *psf) ;
-
-/*------------------------------------------------------------------------------------
-** Functions defined in wav_gsm610.c
-*/
-
-int wav_gsm610_reader_init (SF_PRIVATE *psf, WAV_FMT *fmt) ;
-int wav_gsm610_writer_init (SF_PRIVATE *psf) ;
-
-#ifdef _WIN32
- #pragma pack(pop,1)
-#endif
-
-#endif
--- a/common/libsndfile/src/wav_gsm610.c
+++ /dev/null
@@ -1,624 +1,0 @@
-/*
-** Copyright (C) 1999-2001 Erik de Castro Lopo <[email protected]>
-**
-** 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 <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <math.h>
-
-#include "sndfile.h"
-#include "config.h"
-#include "sfendian.h"
-#include "floatcast.h"
-#include "common.h"
-#include "wav.h"
-#include "GSM610/gsm.h"
-
-#if (CPU_IS_LITTLE_ENDIAN == 1)
-# define MAKE_MARKER(a,b,c,d) ((a)|((b)<<8)|((c)<<16)|((d)<<24))
-#elif (CPU_IS_BIG_ENDIAN == 1)
-# define MAKE_MARKER(a,b,c,d) (((a)<<24)|((b)<<16)|((c)<<8)|(d))
-#else
-# error "Cannot determine endian-ness of processor."
-#endif
-
-#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_GSM610 0x0031
-
-#define GSM610_BLOCKSIZE 65
-#define GSM610_SAMPLES 320
-
-typedef struct
-{ unsigned int blocks ;
- int blockcount, samplecount ;
- unsigned char block [GSM610_BLOCKSIZE] ;
- short samples [GSM610_SAMPLES] ;
- gsm gsm_data ;
-} GSM610_PRIVATE ;
-
-
-static int wav_gsm610_read_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610) ;
-static int wav_gsm610_read (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610, short *ptr, int len) ;
-
-static int wav_gsm610_write_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610) ;
-static int wav_gsm610_write (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610, short *ptr, int len) ;
-
-static long wav_gsm610_seek (SF_PRIVATE *psf, long offset, int whence) ;
-
-static int wav_gsm610_read_s (SF_PRIVATE *psf, short *ptr, int len) ;
-static int wav_gsm610_read_i (SF_PRIVATE *psf, int *ptr, int len) ;
-static int wav_gsm610_read_f (SF_PRIVATE *psf, float *ptr, int len) ;
-static int wav_gsm610_read_d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
-
-static int wav_gsm610_write_s (SF_PRIVATE *psf, short *ptr, int len) ;
-static int wav_gsm610_write_i (SF_PRIVATE *psf, int *ptr, int len) ;
-static int wav_gsm610_write_f (SF_PRIVATE *psf, float *ptr, int len) ;
-static int wav_gsm610_write_d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
-
-static int wav_gsm610_close (SF_PRIVATE *psf) ;
-static int wav_gsm610_write_header (SF_PRIVATE *psf) ;
-
-/*============================================================================================
-** WAV GSM610 Reader initialisation function.
-*/
-
-int
-wav_gsm610_reader_init (SF_PRIVATE *psf, WAV_FMT *fmt)
-{ GSM610_PRIVATE *pgsm610 ;
- int true = 1 ;
-
- psf->sf.seekable = SF_FALSE ;
- /*-psf->sf.seekable = SF_TRUE ; -*/
- psf->seek_func = (func_seek) wav_gsm610_seek ;
-
- psf->read_short = (func_short) wav_gsm610_read_s ;
- psf->read_int = (func_int) wav_gsm610_read_i ;
- psf->read_float = (func_float) wav_gsm610_read_f ;
- psf->read_double = (func_double) wav_gsm610_read_d ;
-
- if (psf->mode != SF_MODE_READ)
- return SFE_BAD_MODE_RW ;
-
- if (! (pgsm610 = malloc (sizeof (GSM610_PRIVATE))))
- return SFE_MALLOC_FAILED ;
-
- psf->fdata = (void*) pgsm610 ;
-
- memset (pgsm610, 0, sizeof (GSM610_PRIVATE)) ;
-
- if (! (pgsm610->gsm_data = gsm_create ()))
- return SFE_MALLOC_FAILED ;
- gsm_option (pgsm610->gsm_data, GSM_OPT_WAV49, &true) ;
-
- if (psf->datalength % GSM610_BLOCKSIZE)
- { psf_log_printf (psf, "*** Warning : data chunk seems to be truncated.\n") ;
- pgsm610->blocks = psf->datalength / GSM610_BLOCKSIZE + 1 ;
- }
- else
- pgsm610->blocks = psf->datalength / GSM610_BLOCKSIZE ;
-
- psf->sf.samples = GSM610_SAMPLES * pgsm610->blocks ;
-
- wav_gsm610_read_block (psf, pgsm610) ; /* Read first block. */
-
- return 0 ;
-} /* wav_gsm610_reader_init */
-
-/*============================================================================================
-** WAV GSM610 writer initialisation function.
-*/
-
-int
-wav_gsm610_writer_init (SF_PRIVATE *psf)
-{ GSM610_PRIVATE *pgsm610 ;
- int true = 1, samplesperblock, bytespersec ;
-
- if (psf->mode != SF_MODE_WRITE)
- return SFE_BAD_MODE_RW ;
-
- if (! (pgsm610 = malloc (sizeof (GSM610_PRIVATE))))
- return SFE_MALLOC_FAILED ;
-
- psf->fdata = (void*) pgsm610 ;
-
- memset (pgsm610, 0, sizeof (GSM610_PRIVATE)) ;
-
- if (! (pgsm610->gsm_data = gsm_create ()))
- return SFE_MALLOC_FAILED ;
- gsm_option (pgsm610->gsm_data, GSM_OPT_WAV49, &true) ;
-
- pgsm610->blockcount = 0 ;
- pgsm610->samplecount = 0 ;
-
- samplesperblock = GSM610_SAMPLES ;
- bytespersec = psf->sf.samplerate * GSM610_BLOCKSIZE / GSM610_SAMPLES ;
-
- if (bytespersec * GSM610_SAMPLES / GSM610_BLOCKSIZE < psf->sf.samplerate)
- bytespersec ++ ;
-
- psf->datalength = (psf->sf.samples / samplesperblock) * samplesperblock ;
- if (psf->sf.samples % samplesperblock)
- psf->datalength += samplesperblock ;
-
- wav_gsm610_write_header (psf) ;
-
- psf->write_short = (func_short) wav_gsm610_write_s ;
- psf->write_int = (func_int) wav_gsm610_write_i ;
- psf->write_float = (func_float) wav_gsm610_write_f ;
- psf->write_double = (func_double) wav_gsm610_write_d ;
-
- psf->seek_func = NULL ; /* Not seekable */
- psf->close = (func_close) wav_gsm610_close ;
- psf->write_header = (func_wr_hdr) wav_gsm610_write_header ;
-
- return 0 ;
-} /* wav_gsm610_writer_init */
-
-/*============================================================================================
-** GSM 6.10 Read Functions.
-*/
-
-static int
-wav_gsm610_read_block (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610)
-{ int k ;
-
- pgsm610->blockcount ++ ;
- pgsm610->samplecount = 0 ;
-
- if (pgsm610->blockcount > pgsm610->blocks)
- { memset (pgsm610->samples, 0, GSM610_SAMPLES * sizeof (short)) ;
- return 1 ;
- } ;
-
- if ((k = fread (pgsm610->block, 1, GSM610_BLOCKSIZE, psf->file)) != 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 gsm_decode() on frame : %d\n", pgsm610->blockcount) ;
- return 0 ;
- } ;
-
- if (gsm_decode (pgsm610->gsm_data, pgsm610->block+(GSM610_BLOCKSIZE+1)/2, pgsm610->samples+GSM610_SAMPLES/2) < 0)
- { psf_log_printf (psf, "Error from gsm_decode() on frame : %d.5\n", pgsm610->blockcount) ;
- return 0 ;
- } ;
-
- return 1 ;
-} /* wav_gsm610_read_block */
-
-static int
-wav_gsm610_read (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610, short *ptr, int len)
-{ int count, total = 0, index = 0 ;
-
- while (index < len)
- { if (pgsm610->blockcount >= pgsm610->blocks && pgsm610->samplecount >= GSM610_SAMPLES)
- { memset (&(ptr[index]), 0, (len - index) * sizeof (short)) ;
- return total ;
- } ;
-
- if (pgsm610->samplecount >= GSM610_SAMPLES)
- wav_gsm610_read_block (psf, pgsm610) ;
-
- count = GSM610_SAMPLES - pgsm610->samplecount ;
- count = (len - index > count) ? count : len - index ;
-
- memcpy (&(ptr[index]), &(pgsm610->samples [pgsm610->samplecount]), count * sizeof (short)) ;
- index += count ;
- pgsm610->samplecount += count ;
- total = index ;
- } ;
-
- return total ;
-} /* wav_gsm610_read */
-
-static int
-wav_gsm610_read_s (SF_PRIVATE *psf, short *ptr, int len)
-{ GSM610_PRIVATE *pgsm610 ;
- int total ;
-
- if (! psf->fdata)
- return 0 ;
- pgsm610 = (GSM610_PRIVATE*) psf->fdata ;
-
- total = wav_gsm610_read (psf, pgsm610, ptr, len) ;
-
- return total ;
-} /* wav_gsm610_read_s */
-
-static int
-wav_gsm610_read_i (SF_PRIVATE *psf, int *ptr, int len)
-{ GSM610_PRIVATE *pgsm610 ;
- short *sptr ;
- int k, bufferlen, readcount = 0, count ;
- int index = 0, total = 0 ;
-
- if (! psf->fdata)
- return 0 ;
- pgsm610 = (GSM610_PRIVATE*) psf->fdata ;
-
- sptr = (short*) psf->buffer ;
- bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ;
- while (len > 0)
- { readcount = (len >= bufferlen) ? bufferlen : len ;
- count = wav_gsm610_read (psf, pgsm610, sptr, readcount) ;
- for (k = 0 ; k < readcount ; k++)
- ptr [index+k] = (int) (sptr [k]) ;
- index += readcount ;
- total += count ;
- len -= readcount ;
- } ;
- return total ;
-} /* wav_gsm610_read_i */
-
-static int
-wav_gsm610_read_f (SF_PRIVATE *psf, float *ptr, int len)
-{ GSM610_PRIVATE *pgsm610 ;
- short *sptr ;
- int k, bufferlen, readcount = 0, count ;
- int index = 0, total = 0 ;
- float normfact ;
-
- if (! psf->fdata)
- return 0 ;
- pgsm610 = (GSM610_PRIVATE*) psf->fdata ;
-
- normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-
- sptr = (short*) psf->buffer ;
- bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ;
- while (len > 0)
- { readcount = (len >= bufferlen) ? bufferlen : len ;
- count = wav_gsm610_read (psf, pgsm610, sptr, readcount) ;
- for (k = 0 ; k < readcount ; k++)
- ptr [index+k] = normfact * (sptr [k]) ;
- index += readcount ;
- total += count ;
- len -= readcount ;
- } ;
- return total ;
-} /* wav_gsm610_read_d */
-
-static int
-wav_gsm610_read_d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
-{ GSM610_PRIVATE *pgsm610 ;
- short *sptr ;
- int k, bufferlen, readcount = 0, count ;
- int index = 0, total = 0 ;
- double normfact ;
-
- normfact = (normalize ? 1.0 / ((double) 0x8000) : 1.0) ;
-
- if (! psf->fdata)
- return 0 ;
- pgsm610 = (GSM610_PRIVATE*) psf->fdata ;
-
- sptr = (short*) psf->buffer ;
- bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ;
- while (len > 0)
- { readcount = (len >= bufferlen) ? bufferlen : len ;
- count = wav_gsm610_read (psf, pgsm610, sptr, readcount) ;
- for (k = 0 ; k < readcount ; k++)
- ptr [index+k] = normfact * (double) (sptr [k]) ;
- index += readcount ;
- total += count ;
- len -= readcount ;
- } ;
- return total ;
-} /* wav_gsm610_read_d */
-
-static long
-wav_gsm610_seek (SF_PRIVATE *psf, long offset, int whence)
-{ GSM610_PRIVATE *pgsm610 ;
- int newblock, newsample ;
-
- if (! psf->fdata)
- return 0 ;
- pgsm610 = (GSM610_PRIVATE*) psf->fdata ;
-
- if (! (psf->blockwidth && psf->datalength && psf->dataoffset))
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
-
- switch (whence)
- { case SEEK_SET :
- if (offset < 0 || offset > pgsm610->blocks * GSM610_SAMPLES)
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
- newblock = offset / GSM610_SAMPLES ;
- newsample = offset % GSM610_SAMPLES ;
- break ;
-
- case SEEK_CUR :
- if (psf->current + offset < 0 || psf->current + offset > pgsm610->blocks * GSM610_SAMPLES)
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
- newblock = (psf->current + offset) / GSM610_SAMPLES ;
- newsample = (psf->current + offset) % GSM610_SAMPLES ;
- break ;
-
- case SEEK_END :
- if (offset > 0 || GSM610_SAMPLES * pgsm610->blocks + offset < 0)
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
- newblock = (GSM610_SAMPLES * pgsm610->blocks + offset) / GSM610_SAMPLES ;
- newsample = (GSM610_SAMPLES * pgsm610->blocks + offset) % GSM610_SAMPLES ;
- break ;
-
- default :
- psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
-
- if (psf->mode == SF_MODE_READ)
- { fseek (psf->file, (int) (psf->dataoffset + newblock * GSM610_BLOCKSIZE), SEEK_SET) ;
- pgsm610->blockcount = newblock ;
- wav_gsm610_read_block (psf, pgsm610) ;
- pgsm610->samplecount = newsample ;
- }
- else
- { /* What to do about write??? */
- psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
-
- psf->current = newblock * GSM610_SAMPLES + newsample ;
- return psf->current ;
-} /* wav_gsm610_seek */
-
-/*==========================================================================================
-** GSM 6.10 Write Functions.
-*/
-
-
-
-/*==========================================================================================
-*/
-
-static int
-wav_gsm610_write_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+GSM610_SAMPLES/2, pgsm610->block+GSM610_BLOCKSIZE/2) ;
-
- /* Write the block to disk. */
- if ((k = fwrite (pgsm610->block, 1, GSM610_BLOCKSIZE, psf->file)) != 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, GSM610_SAMPLES * sizeof (short)) ;
-
- return 1 ;
-} /* wav_gsm610_write_block */
-
-static int
-wav_gsm610_write (SF_PRIVATE *psf, GSM610_PRIVATE *pgsm610, short *ptr, int len)
-{ int count, total = 0, index = 0 ;
-
- while (index < len)
- { count = GSM610_SAMPLES - pgsm610->samplecount ;
-
- if (count > len - index)
- count = len - index ;
-
- memcpy (&(pgsm610->samples [pgsm610->samplecount]), &(ptr [index]), count * sizeof (short)) ;
- index += count ;
- pgsm610->samplecount += count ;
- total = index ;
-
- if (pgsm610->samplecount >= GSM610_SAMPLES)
- wav_gsm610_write_block (psf, pgsm610) ;
- } ;
-
- return total ;
-} /* wav_gsm610_write */
-
-static int
-wav_gsm610_write_s (SF_PRIVATE *psf, short *ptr, int len)
-{ GSM610_PRIVATE *pgsm610 ;
- int total ;
-
- if (! psf->fdata)
- return 0 ;
- pgsm610 = (GSM610_PRIVATE*) psf->fdata ;
-
- total = wav_gsm610_write (psf, pgsm610, ptr, len) ;
-
- return total ;
-} /* wav_gsm610_write_s */
-
-static int
-wav_gsm610_write_i (SF_PRIVATE *psf, int *ptr, int len)
-{ GSM610_PRIVATE *pgsm610 ;
- short *sptr ;
- int k, bufferlen, writecount = 0, count ;
- int index = 0, total = 0 ;
-
- if (! psf->fdata)
- return 0 ;
- pgsm610 = (GSM610_PRIVATE*) psf->fdata ;
-
- sptr = (short*) psf->buffer ;
- bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ;
- while (len > 0)
- { writecount = (len >= bufferlen) ? bufferlen : len ;
- for (k = 0 ; k < writecount ; k++)
- sptr [k] = (short) ptr [index+k] ;
- count = wav_gsm610_write (psf, pgsm610, sptr, writecount) ;
- index += writecount ;
- total += count ;
- len -= writecount ;
- } ;
- return total ;
-} /* wav_gsm610_write_i */
-
-static int
-wav_gsm610_write_f (SF_PRIVATE *psf, float *ptr, int len)
-{ GSM610_PRIVATE *pgsm610 ;
- short *sptr ;
- int k, bufferlen, writecount = 0, count ;
- int index = 0, total = 0 ;
- float normfact ;
-
- if (! psf->fdata)
- return 0 ;
- pgsm610 = (GSM610_PRIVATE*) psf->fdata ;
-
- normfact = (psf->norm_float == SF_TRUE) ? ((float) 0x8000) : 1.0 ;
-
- sptr = (short*) psf->buffer ;
- bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ;
- while (len > 0)
- { writecount = (len >= bufferlen) ? bufferlen : len ;
- for (k = 0 ; k < writecount ; k++)
- sptr [k] = FLOAT_TO_SHORT (normfact * ptr [index+k]) ;
- count = wav_gsm610_write (psf, pgsm610, sptr, writecount) ;
- index += writecount ;
- total += count ;
- len -= writecount ;
- } ;
- return total ;
-} /* wav_gsm610_write_f */
-
-static int
-wav_gsm610_write_d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
-{ GSM610_PRIVATE *pgsm610 ;
- short *sptr ;
- int k, bufferlen, writecount = 0, count ;
- int index = 0, total = 0 ;
- double normfact ;
-
- normfact = (normalize ? (double) 0x8000 : 1.0) ;
-
- if (! psf->fdata)
- return 0 ;
- pgsm610 = (GSM610_PRIVATE*) psf->fdata ;
-
- sptr = (short*) psf->buffer ;
- bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ;
- while (len > 0)
- { writecount = (len >= bufferlen) ? bufferlen : len ;
- for (k = 0 ; k < writecount ; k++)
- sptr [k] = DOUBLE_TO_SHORT (normfact * ptr [index+k]) ;
- count = wav_gsm610_write (psf, pgsm610, sptr, writecount) ;
- index += writecount ;
- total += count ;
- len -= writecount ;
- } ;
- return total ;
-} /* wav_gsm610_write_d */
-
-static int
-wav_gsm610_write_header (SF_PRIVATE *psf)
-{ int fmt_size, blockalign, samplesperblock, bytespersec ;
-
- blockalign = GSM610_BLOCKSIZE ;
- samplesperblock = GSM610_SAMPLES ;
- bytespersec = (psf->sf.samplerate * blockalign) / samplesperblock ;
-
- /* Reset the current header length to zero. */
- psf->header [0] = 0 ;
- psf->headindex = 0 ;
- fseek (psf->file, 0, SEEK_SET) ;
-
- /* RIFF marker, length, WAVE and 'fmt ' markers. */
- psf_binheader_writef (psf, "mlmm", RIFF_MARKER, psf->filelength - 8, WAVE_MARKER, fmt_MARKER) ;
-
- /* fmt chunk. */
- fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 ;
-
- /* fmt : size, WAV format type, channels. */
- psf_binheader_writef (psf, "lww", fmt_size, WAVE_FORMAT_GSM610, psf->sf.channels) ;
-
- /* fmt : samplerate, bytespersec. */
- psf_binheader_writef (psf, "ll", psf->sf.samplerate, bytespersec) ;
-
- /* fmt : blockalign, bitwidth, extrabytes, samplesperblock. */
- psf_binheader_writef (psf, "wwww", blockalign, 0, 2, samplesperblock) ;
-
- /* Fact chunk : marker, chunk size, samples */
- psf_binheader_writef (psf, "mll", fact_MARKER, sizeof (int), psf->sf.samples) ;
-
- /* DATA chunk : marker, datalength. */
- psf_binheader_writef (psf, "ml", data_MARKER, psf->datalength) ;
-
- fwrite (psf->header, psf->headindex, 1, psf->file) ;
-
- psf->dataoffset = psf->headindex ;
-
- psf->datalength = (psf->sf.samples / samplesperblock) * samplesperblock ;
- if (psf->sf.samples % samplesperblock)
- psf->datalength += samplesperblock ;
-
- return 0 ;
-} /* wav_gsm610_write_header */
-
-int
-wav_gsm610_close (SF_PRIVATE *psf)
-{ GSM610_PRIVATE *pgsm610 ;
-
- if (! psf->fdata)
- return 0 ;
-
- pgsm610 = (GSM610_PRIVATE*) psf->fdata ;
-
- if (psf->mode == SF_MODE_WRITE)
- { /* If a block has been partially assembled, write it out
- ** as the final block.
- */
-
- if (pgsm610->samplecount && pgsm610->samplecount < GSM610_SAMPLES)
- wav_gsm610_write_block (psf, pgsm610) ;
-
- /* Now we know for certain the length of the file we can
- ** re-write correct values for the RIFF and data chunks.
- */
-
- fseek (psf->file, 0, SEEK_END) ;
- psf->filelength = ftell (psf->file) ;
-
- psf->sf.samples = GSM610_SAMPLES * pgsm610->blockcount ;
- psf->datalength = psf->filelength - psf->dataoffset ;
-
- wav_gsm610_write_header (psf) ;
- } ;
-
- if (pgsm610->gsm_data)
- gsm_destroy (pgsm610->gsm_data) ;
-
- if (psf->fdata)
- free (psf->fdata) ;
- psf->fdata = NULL ;
-
- return 0 ;
-} /* wav_gsm610_close */
-
--- a/common/libsndfile/src/wav_ima_adpcm.c
+++ /dev/null
@@ -1,816 +1,0 @@
-/*
-** Copyright (C) 1999-2001 Erik de Castro Lopo <[email protected]>
-**
-** 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 <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <math.h>
-
-#include "sndfile.h"
-#include "config.h"
-#include "sfendian.h"
-#include "floatcast.h"
-#include "common.h"
-#include "wav.h"
-
-#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_IMA_ADPCM 0x0011 /* Intel Corporation */
-
-typedef struct
-{ unsigned int channels ;
- unsigned int blocksize ;
- unsigned int samplesperblock ;
-} IMA_ADPCM_PUBLIC ;
-
-typedef struct
-{ unsigned int channels, blocksize, samplesperblock, blocks ;
- int blockcount, samplecount ;
- int previous [2] ;
- int stepindex [2] ;
- unsigned char *block ;
- short *samples ;
- unsigned char data [4] ; /* Dummy size */
-} IMA_ADPCM_PRIVATE ;
-
-/*============================================================================================
-** Predefined IMA ADPCM data.
-*/
-
-static int ima_index_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, IMA_ADPCM_PUBLIC *public) ;
-static int ima_writer_init (SF_PRIVATE *psf, IMA_ADPCM_PUBLIC *public) ;
-
-static int ima_read_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima) ;
-static int ima_read (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima, short *ptr, int len) ;
-
-static int ima_write_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima) ;
-static int ima_write (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima, short *ptr, int len) ;
-
-static int ima_read_s (SF_PRIVATE *psf, short *ptr, int len) ;
-static int ima_read_i (SF_PRIVATE *psf, int *ptr, int len) ;
-static int ima_read_f (SF_PRIVATE *psf, float *ptr, int len) ;
-static int ima_read_d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
-
-static int ima_write_s (SF_PRIVATE *psf, short *ptr, int len) ;
-static int ima_write_i (SF_PRIVATE *psf, int *ptr, int len) ;
-static int ima_write_f (SF_PRIVATE *psf, float *ptr, int len) ;
-static int ima_write_d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
-
-static long ima_seek (SF_PRIVATE *psf, long offset, int whence) ;
-static int wav_ima_close (SF_PRIVATE *psf) ;
-static int wav_ima_write_header (SF_PRIVATE *psf) ;
-
-static unsigned int wav_srate2blocksize (unsigned int srate) ;
-
-/*============================================================================================
-** IMA ADPCM Reader initialisation function.
-*/
-
-int
-wav_ima_reader_init (SF_PRIVATE *psf, WAV_FMT *fmt)
-{ IMA_ADPCM_PUBLIC public ;
-
- public.blocksize = fmt->ima.blockalign ;
- public.channels = fmt->ima.channels ;
- public.samplesperblock = fmt->ima.samplesperblock ;
- return ima_reader_init (psf, &public) ;
-} /* wav_ima_reader_init */
-
-int
-wav_ima_writer_init (SF_PRIVATE *psf)
-{ IMA_ADPCM_PUBLIC public ;
- int error ;
-
- public.blocksize = wav_srate2blocksize (psf->sf.samplerate) ;
- public.channels = psf->sf.channels ;
- public.samplesperblock = 2 * (public.blocksize - 4 * psf->sf.channels) / psf->sf.channels + 1 ;
-
- if ((error = ima_writer_init (psf, &public)))
- return error ;
-
- wav_ima_write_header (psf) ;
-
- psf->write_short = (func_short) ima_write_s ;
- psf->write_int = (func_int) ima_write_i ;
- psf->write_float = (func_float) ima_write_f ;
- psf->write_double = (func_double) ima_write_d ;
- psf->seek_func = (func_seek) ima_seek ;
- psf->close = (func_close) wav_ima_close ;
- psf->write_header = (func_wr_hdr) wav_ima_write_header ;
-
- return 0 ;
-} /* wav_ima_writer_init */
-
-/*============================================================================================
-** IMA ADPCM Read Functions.
-*/
-
-static int
-ima_reader_init (SF_PRIVATE *psf, IMA_ADPCM_PUBLIC *public)
-{ IMA_ADPCM_PRIVATE *pima ;
- unsigned int pimasize, count ;
-
- if (psf->mode != SF_MODE_READ)
- return SFE_BAD_MODE_RW ;
-
- pimasize = sizeof (IMA_ADPCM_PRIVATE) + public->blocksize + 3 * public->channels * public->samplesperblock ;
-
- if (! (pima = malloc (pimasize)))
- return SFE_MALLOC_FAILED ;
-
- psf->fdata = (void*) pima ;
-
- memset (pima, 0, pimasize) ;
-
- pima->block = (unsigned char*) pima->data ;
- pima->samples = (short*) (pima->data + public->blocksize) ;
-
- pima->channels = public->channels ;
- pima->blocksize = public->blocksize ;
- pima->samplesperblock = public->samplesperblock ;
-
- if (psf->datalength % pima->blocksize)
- { psf_log_printf (psf, "*** Warning : data chunk seems to be truncated.\n") ;
- pima->blocks = psf->datalength / pima->blocksize + 1 ;
- }
- else
- pima->blocks = psf->datalength / pima->blocksize ;
-
- count = 2 * (pima->blocksize - 4 * pima->channels) / pima->channels + 1 ;
- if (pima->samplesperblock != count)
- psf_log_printf (psf, "*** Warning : samplesperblock should be %d.\n", count) ;
-
- psf->sf.samples = pima->samplesperblock * pima->blocks ;
-
- ima_read_block (psf, pima) ; /* Read first block. */
-
- psf->read_short = (func_short) ima_read_s ;
- psf->read_int = (func_int) ima_read_i ;
- psf->read_float = (func_float) ima_read_f ;
- psf->read_double = (func_double) ima_read_d ;
-
- psf->seek_func = (func_seek) ima_seek ;
-
- return 0 ;
-} /* ima_reader_init */
-
-static int
-ima_read_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima)
-{ int chan, k, current, blockindex, index, indexstart ;
- short step, diff, bytecode, stepindex [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 = fread (pima->block, 1, pima->blocksize, psf->file)) != 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++)
- { current = pima->block [chan*4] | (pima->block [chan*4+1] << 8) ;
- if (current & 0x8000)
- current -= 0x10000 ;
-
- stepindex [chan] = pima->block [chan*4+2] ;
- if (stepindex [chan] < 0)
- stepindex [chan] = 0 ;
- else if (stepindex [chan] > 88)
- stepindex [chan] = 88 ;
-
- if (pima->block [chan*4+3] != 0)
- psf_log_printf (psf, "IMA ADPCM synchronisation error.\n") ;
-
- pima->samples [chan] = current ;
-
- /* psf_log_printf (psf, "block %d : channel %d (current, index) : (%d, %d)\n",
- ** pima->blockcount, chan, current, stepindex [chan]) ;
- */
- } ;
-
- /* Pull apart the packed 4 bit samples and store them in their
- ** correct sample positions.
- */
-
- blockindex = 4 * pima->channels ;
-
- indexstart = pima->channels ;
- while (blockindex < pima->blocksize)
- { for (chan = 0 ; chan < pima->channels ; chan++)
- { index = indexstart + chan ;
- for (k = 0 ; k < 4 ; k++)
- { bytecode = pima->block [blockindex++] ;
- pima->samples [index] = bytecode & 0x0F ;
- index += pima->channels ;
- pima->samples [index] = (bytecode >> 4) & 0x0F ;
- index += pima->channels ;
- } ;
- } ;
- indexstart += 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 [stepindex [chan]] ;
- current = 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 ;
-
- current += diff ;
-
- if (current > 32767)
- current = 32767;
- else if (current < -32768)
- current = -32768 ;
-
- stepindex [chan] += ima_index_adjust [bytecode] ;
-
- if (stepindex [chan] < 0)
- stepindex [chan] = 0 ;
- else if (stepindex [chan] > 88)
- stepindex [chan] = 88 ;
-
- pima->samples [k] = current ;
- } ;
-
- return 1 ;
-} /* ima_read_block */
-
-static int
-ima_read (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima, short *ptr, int len)
-{ int count, total = 0, index = 0 ;
-
- while (index < len)
- { if (pima->blockcount >= pima->blocks && pima->samplecount >= pima->samplesperblock)
- { memset (&(ptr[index]), 0, (len - index) * sizeof (short)) ;
- return total ;
- } ;
-
- if (pima->samplecount >= pima->samplesperblock)
- ima_read_block (psf, pima) ;
-
- count = (pima->samplesperblock - pima->samplecount) * pima->channels ;
- count = (len - index > count) ? count : len - index ;
-
- memcpy (&(ptr[index]), &(pima->samples [pima->samplecount * pima->channels]), count * sizeof (short)) ;
- index += count ;
- pima->samplecount += count / pima->channels ;
- total = index ;
- } ;
-
- return total ;
-} /* ima_read */
-
-static int
-ima_read_s (SF_PRIVATE *psf, short *ptr, int len)
-{ IMA_ADPCM_PRIVATE *pima ;
- int total ;
-
- if (! psf->fdata)
- return 0 ;
- pima = (IMA_ADPCM_PRIVATE*) psf->fdata ;
-
- total = ima_read (psf, pima, ptr, len) ;
-
- return total ;
-} /* ima_read_s */
-
-static int
-ima_read_i (SF_PRIVATE *psf, int *ptr, int len)
-{ IMA_ADPCM_PRIVATE *pima ;
- short *sptr ;
- int k, bufferlen, readcount = 0, count ;
- int index = 0, total = 0 ;
-
- if (! psf->fdata)
- return 0 ;
- pima = (IMA_ADPCM_PRIVATE*) psf->fdata ;
-
- sptr = (short*) psf->buffer ;
- bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ;
- while (len > 0)
- { readcount = (len >= bufferlen) ? bufferlen : len ;
- count = ima_read (psf, pima, sptr, readcount) ;
- for (k = 0 ; k < readcount ; k++)
- ptr [index+k] = (int) (sptr [k]) ;
- index += readcount ;
- total += count ;
- len -= readcount ;
- } ;
- return total ;
-} /* ima_read_i */
-
-static int
-ima_read_f (SF_PRIVATE *psf, float *ptr, int len)
-{ IMA_ADPCM_PRIVATE *pima ;
- short *sptr ;
- int k, bufferlen, readcount = 0, count ;
- int index = 0, total = 0 ;
- float normfact ;
-
- if (! psf->fdata)
- return 0 ;
- pima = (IMA_ADPCM_PRIVATE*) psf->fdata ;
-
- normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
-
- sptr = (short*) psf->buffer ;
- bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ;
- while (len > 0)
- { readcount = (len >= bufferlen) ? bufferlen : len ;
- count = ima_read (psf, pima, sptr, readcount) ;
- for (k = 0 ; k < readcount ; k++)
- ptr [index+k] = normfact * (float) (sptr [k]) ;
- index += readcount ;
- total += count ;
- len -= readcount ;
- } ;
- return total ;
-} /* ima_read_f */
-
-static int
-ima_read_d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
-{ IMA_ADPCM_PRIVATE *pima ;
- short *sptr ;
- int k, bufferlen, readcount = 0, count ;
- int index = 0, total = 0 ;
- double normfact ;
-
- normfact = (normalize ? 1.0 / ((double) 0x8000) : 1.0) ;
-
- if (! psf->fdata)
- return 0 ;
- pima = (IMA_ADPCM_PRIVATE*) psf->fdata ;
-
- sptr = (short*) psf->buffer ;
- bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ;
- while (len > 0)
- { readcount = (len >= bufferlen) ? bufferlen : len ;
- count = ima_read (psf, pima, sptr, readcount) ;
- for (k = 0 ; k < readcount ; k++)
- ptr [index+k] = normfact * (double) (sptr [k]) ;
- index += readcount ;
- total += count ;
- len -= readcount ;
- } ;
- return total ;
-} /* ima_read_d */
-
-static long
-ima_seek (SF_PRIVATE *psf, long offset, int whence)
-{ IMA_ADPCM_PRIVATE *pima ;
- int newblock, newsample ;
-
- if (! psf->fdata)
- return 0 ;
- pima = (IMA_ADPCM_PRIVATE*) psf->fdata ;
-
- if (! (psf->blockwidth && psf->datalength && psf->dataoffset))
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
-
- switch (whence)
- { case SEEK_SET :
- if (offset < 0 || offset > pima->blocks * pima->samplesperblock)
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
- newblock = offset / pima->samplesperblock ;
- newsample = offset % pima->samplesperblock ;
- break ;
-
- case SEEK_CUR :
- if (psf->current + offset < 0 || psf->current + offset > pima->blocks * pima->samplesperblock)
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
- newblock = (psf->current + offset) / pima->samplesperblock ;
- newsample = (psf->current + offset) % pima->samplesperblock ;
- break ;
-
- case SEEK_END :
- if (offset > 0 || pima->samplesperblock * pima->blocks + offset < 0)
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
- newblock = (pima->samplesperblock * pima->blocks + offset) / pima->samplesperblock ;
- newsample = (pima->samplesperblock * pima->blocks + offset) % pima->samplesperblock ;
- break ;
-
- default :
- psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
-
- if (psf->mode == SF_MODE_READ)
- { fseek (psf->file, (int) (psf->dataoffset + newblock * pima->blocksize), SEEK_SET) ;
- pima->blockcount = newblock ;
- ima_read_block (psf, pima) ;
- pima->samplecount = newsample ;
- }
- else
- { /* What to do about write??? */
- psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
-
- psf->current = newblock * pima->samplesperblock + newsample ;
- return psf->current ;
-} /* ima_seek */
-
-/*==========================================================================================
-** IMA ADPCM Write Functions.
-*/
-
-static int
-ima_writer_init (SF_PRIVATE *psf, IMA_ADPCM_PUBLIC *public)
-{ IMA_ADPCM_PRIVATE *pima ;
- unsigned int pimasize ;
-
- if (psf->mode != SF_MODE_WRITE)
- return SFE_BAD_MODE_RW ;
-
- public->blocksize = wav_srate2blocksize (psf->sf.samplerate) ;
- public->samplesperblock = 2 * (public->blocksize - 4 * public->channels) / public->channels + 1 ;
-
- pimasize = sizeof (IMA_ADPCM_PRIVATE) + public->blocksize + 3 * public->channels * public->samplesperblock ;
-
- if (! (pima = malloc (pimasize)))
- return SFE_MALLOC_FAILED ;
-
- psf->fdata = (void*) pima ;
-
- memset (pima, 0, pimasize) ;
-
- pima->channels = public->channels ;
- pima->blocksize = public->blocksize ;
- pima->samplesperblock = public->samplesperblock ;
-
- pima->block = (unsigned char*) pima->data ;
- pima->samples = (short*) (pima->data + public->blocksize) ;
-
- pima->samplecount = 0 ;
-
- return 0 ;
-} /* ima_writer_init */
-
-
-
-/*==========================================================================================
-*/
-
-static int
-ima_write_block (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima)
-{ int chan, k, step, diff, vpdiff, blockindex, index, indexstart ;
- short bytecode, mask ;
-
- /* Write 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->stepindex [chan] ;
- pima->block [chan*4+3] = 0 ;
- } ;
-
- pima->previous [0] = pima->samples [0] ;
- pima->previous [1] = pima->samples [1] ;
-
- /* 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->stepindex [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->stepindex [chan] += ima_index_adjust [bytecode] ;
- if (pima->stepindex [chan] < 0)
- pima->stepindex [chan] = 0 ;
- else if (pima->stepindex [chan] > 88)
- pima->stepindex [chan] = 88 ;
-
- pima->samples [k] = bytecode ;
- } ;
-
- /* Pack the 4 bit encoded samples. */
-
- blockindex = 4 * pima->channels ;
-
- indexstart = pima->channels ;
- while (blockindex < pima->blocksize)
- { for (chan = 0 ; chan < pima->channels ; chan++)
- { index = indexstart + chan ;
- for (k = 0 ; k < 4 ; k++)
- { pima->block [blockindex] = pima->samples [index] & 0x0F ;
- index += pima->channels ;
- pima->block [blockindex] |= (pima->samples [index] << 4) & 0xF0 ;
- index += pima->channels ;
- blockindex ++ ;
- } ;
- } ;
- indexstart += 8 * pima->channels ;
- } ;
-
- /* Write the block to disk. */
-
- if ((k = fwrite (pima->block, 1, pima->blocksize, psf->file)) != 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 ;
-
- return 1 ;
-} /* ima_write_block */
-
-static int
-ima_write (SF_PRIVATE *psf, IMA_ADPCM_PRIVATE *pima, short *ptr, int len)
-{ int count, total = 0, index = 0 ;
-
- while (index < len)
- { count = (pima->samplesperblock - pima->samplecount) * pima->channels ;
-
- if (count > len - index)
- count = len - index ;
-
- memcpy (&(pima->samples [pima->samplecount * pima->channels]), &(ptr [index]), count * sizeof (short)) ;
- index += count ;
- pima->samplecount += count / pima->channels ;
- total = index ;
-
- if (pima->samplecount >= pima->samplesperblock)
- ima_write_block (psf, pima) ;
- } ;
-
- return total ;
-} /* ima_write */
-
-static int
-ima_write_s (SF_PRIVATE *psf, short *ptr, int len)
-{ IMA_ADPCM_PRIVATE *pima ;
- int total ;
-
- if (! psf->fdata)
- return 0 ;
- pima = (IMA_ADPCM_PRIVATE*) psf->fdata ;
-
- total = ima_write (psf, pima, ptr, len) ;
-
- return total ;
-} /* ima_write_s */
-
-static int
-ima_write_i (SF_PRIVATE *psf, int *ptr, int len)
-{ IMA_ADPCM_PRIVATE *pima ;
- short *sptr ;
- int k, bufferlen, writecount = 0, count ;
- int index = 0, total = 0 ;
-
- if (! psf->fdata)
- return 0 ;
- pima = (IMA_ADPCM_PRIVATE*) psf->fdata ;
-
- sptr = (short*) psf->buffer ;
- bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ;
- while (len > 0)
- { writecount = (len >= bufferlen) ? bufferlen : len ;
- for (k = 0 ; k < writecount ; k++)
- sptr [k] = (short) ptr [index+k] ;
- count = ima_write (psf, pima, sptr, writecount) ;
- index += writecount ;
- total += count ;
- len -= writecount ;
- } ;
- return total ;
-} /* ima_write_i */
-
-static int
-ima_write_f (SF_PRIVATE *psf, float *ptr, int len)
-{ IMA_ADPCM_PRIVATE *pima ;
- short *sptr ;
- int k, bufferlen, writecount = 0, count ;
- int index = 0, total = 0 ;
- float normfact ;
-
- if (! psf->fdata)
- return 0 ;
- pima = (IMA_ADPCM_PRIVATE*) psf->fdata ;
-
- normfact = (psf->norm_float == SF_TRUE) ? ((float) 0x8000) : 1.0 ;
-
- sptr = (short*) psf->buffer ;
- bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ;
- while (len > 0)
- { writecount = (len >= bufferlen) ? bufferlen : len ;
- for (k = 0 ; k < writecount ; k++)
- sptr [k] = FLOAT_TO_SHORT (normfact * ptr [index+k]) ;
- count = ima_write (psf, pima, sptr, writecount) ;
- index += writecount ;
- total += count ;
- len -= writecount ;
- } ;
- return total ;
-} /* ima_write_f */
-
-static int
-ima_write_d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
-{ IMA_ADPCM_PRIVATE *pima ;
- short *sptr ;
- int k, bufferlen, writecount = 0, count ;
- int index = 0, total = 0 ;
- double normfact ;
-
- normfact = (normalize ? ((double) 0x8000) : 1.0) ;
-
- if (! psf->fdata)
- return 0 ;
- pima = (IMA_ADPCM_PRIVATE*) psf->fdata ;
-
- sptr = (short*) psf->buffer ;
- bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ;
- while (len > 0)
- { writecount = (len >= bufferlen) ? bufferlen : len ;
- for (k = 0 ; k < writecount ; k++)
- sptr [k] = DOUBLE_TO_SHORT (normfact * ptr [index+k]) ;
- count = ima_write (psf, pima, sptr, writecount) ;
- index += writecount ;
- total += count ;
- len -= writecount ;
- } ;
- return total ;
-} /* ima_write_d */
-
-static int
-wav_ima_write_header (SF_PRIVATE *psf)
-{ int fmt_size, blockalign, samplesperblock, bytespersec ;
-
- blockalign = wav_srate2blocksize (psf->sf.samplerate) ;
- samplesperblock = 2 * (blockalign - 4 * psf->sf.channels) / psf->sf.channels + 1 ;
- bytespersec = (psf->sf.samplerate * blockalign) / samplesperblock ;
-
- /* Reset the current header length to zero. */
- psf->header [0] = 0 ;
- psf->headindex = 0 ;
- fseek (psf->file, 0, SEEK_SET) ;
-
- /* RIFF marker, length, WAVE and 'fmt ' markers. */
- psf_binheader_writef (psf, "mlmm", RIFF_MARKER, psf->filelength - 8, WAVE_MARKER, fmt_MARKER) ;
-
- /* fmt chunk. */
- fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 + 2 ;
-
- /* fmt : size, WAV format type, channels. */
- psf_binheader_writef (psf, "lww", fmt_size, WAVE_FORMAT_IMA_ADPCM, psf->sf.channels) ;
-
- /* fmt : samplerate, bytespersec. */
- psf_binheader_writef (psf, "ll", psf->sf.samplerate, bytespersec) ;
-
- /* fmt : blockalign, bitwidth, extrabytes, samplesperblock. */
- psf_binheader_writef (psf, "wwww", blockalign, 4, 2, samplesperblock) ;
-
- /* Fact chunk. */
- psf_binheader_writef (psf, "mll", fact_MARKER, sizeof (int), psf->sf.samples) ;
-
- /* DATA chunk. */
- psf_binheader_writef (psf, "ml", data_MARKER, psf->datalength) ;
-
- fwrite (psf->header, psf->headindex, 1, psf->file) ;
-
- psf->dataoffset = psf->headindex ;
-
- psf->datalength = (psf->sf.samples / samplesperblock) * samplesperblock ;
- if (psf->sf.samples % samplesperblock)
- psf->datalength += samplesperblock ;
-
- return 0 ;
-} /* wav_ima_write_header */
-
-static int
-wav_ima_close (SF_PRIVATE *psf)
-{ IMA_ADPCM_PRIVATE *pima ;
-
- if (! psf->fdata)
- return 0 ;
-
- pima = (IMA_ADPCM_PRIVATE*) psf->fdata ;
-
- if (psf->mode == SF_MODE_WRITE)
- { /* If a block has been partially assembled, write it out
- ** as the final block.
- */
-
- if (pima->samplecount && pima->samplecount < pima->samplesperblock)
- ima_write_block (psf, pima) ;
-
- /* Now we know for certain the length of the file we can
- ** re-write the header.
- */
-
- fseek (psf->file, 0, SEEK_END) ;
- psf->filelength = ftell (psf->file) ;
-
- psf->sf.samples = pima->samplesperblock * pima->blockcount ;
- psf->datalength = psf->filelength - psf->dataoffset ;
-
- wav_ima_write_header (psf) ;
- } ;
-
- if (psf->fdata)
- free (psf->fdata) ;
- psf->fdata = NULL ;
-
- return 0 ;
-} /* wav_ima_close */
-
-static unsigned
-int wav_srate2blocksize (unsigned int srate)
-{ if (srate < 12000)
- return 256 ;
- if (srate < 23000)
- return 512 ;
- return 1024 ;
-} /* wav_srate2blocksize */
--- a/common/libsndfile/src/wav_ms_adpcm.c
+++ /dev/null
@@ -1,895 +1,0 @@
-/*
-** Copyright (C) 1999-2001 Erik de Castro Lopo <[email protected]>
-**
-** 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 <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <math.h>
-
-#include "sndfile.h"
-#include "config.h"
-#include "sfendian.h"
-#include "floatcast.h"
-#include "common.h"
-#include "wav.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
-{ unsigned int channels, blocksize, samplesperblock, blocks, dataremaining ;
- int blockcount, samplecount ;
- unsigned char *block ;
- short *samples ;
- unsigned char dummydata [4] ; /* Dummy size */
-} 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 [] =
-{ 256, 512, 0, 192, 240, 460, 392
-} ;
-
-static int AdaptCoeff2 [] =
-{ 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 int msadpcm_read (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms, short *ptr, int len) ;
-
-static int msadpcm_encode_block (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms) ;
-static int msadpcm_write (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms, short *ptr, int len) ;
-
-static int msadpcm_read_s (SF_PRIVATE *psf, short *ptr, int len) ;
-static int msadpcm_read_i (SF_PRIVATE *psf, int *ptr, int len) ;
-static int msadpcm_read_f (SF_PRIVATE *psf, float *ptr, int len) ;
-static int msadpcm_read_d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
-
-static int msadpcm_write_s (SF_PRIVATE *psf, short *ptr, int len) ;
-static int msadpcm_write_i (SF_PRIVATE *psf, int *ptr, int len) ;
-static int msadpcm_write_f (SF_PRIVATE *psf, float *ptr, int len) ;
-static int msadpcm_write_d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
-
-static long msadpcm_seek (SF_PRIVATE *psf, long offset, int whence) ;
-static int msadpcm_close (SF_PRIVATE *psf) ;
-
-static int msadpcm_write_header (SF_PRIVATE *psf) ;
-
-static unsigned int srate2blocksize (unsigned int srate_chan_product) ;
-static void choose_predictor (unsigned int channels, short *data, int *bpred, int *idelta) ;
-
-/*============================================================================================
-** MS ADPCM Read Functions.
-*/
-
-int
-wav_msadpcm_reader_init (SF_PRIVATE *psf, WAV_FMT *fmt)
-{ MSADPCM_PRIVATE *pms ;
- unsigned int pmssize ;
- int count ;
-
- pmssize = sizeof (MSADPCM_PRIVATE) + fmt->msadpcm.blockalign + 3 * fmt->msadpcm.channels * fmt->msadpcm.samplesperblock ;
-
- if (! (psf->fdata = malloc (pmssize)))
- return SFE_MALLOC_FAILED ;
- pms = (MSADPCM_PRIVATE*) psf->fdata ;
- memset (pms, 0, pmssize) ;
-
- pms->block = (unsigned char*) pms->dummydata ;
- pms->samples = (short*) (pms->dummydata + fmt->msadpcm.blockalign) ;
-
- pms->channels = fmt->msadpcm.channels ;
- pms->blocksize = fmt->msadpcm.blockalign ;
- pms->samplesperblock = fmt->msadpcm.samplesperblock ;
-
- 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, "*** Warning : samplesperblock shoud be %d.\n", count) ;
-
- psf->sf.samples = (psf->datalength / pms->blocksize) * pms->samplesperblock ;
-
- psf_log_printf (psf, " bpred idelta\n") ;
-
- msadpcm_decode_block (psf, pms) ;
-
- psf->read_short = (func_short) msadpcm_read_s ;
- psf->read_int = (func_int) msadpcm_read_i ;
- psf->read_float = (func_float) msadpcm_read_f ;
- psf->read_double = (func_double) msadpcm_read_d ;
-
- psf->seek_func = (func_seek) msadpcm_seek ;
-
- return 0 ;
-} /* wav_msadpcm_reader_init */
-
-static int
-msadpcm_decode_block (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms)
-{ int chan, k, blockindex, sampleindex ;
- 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 = fread (pms->block, 1, pms->blocksize, psf->file)) != 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) ;
- blockindex = 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) ;
-
- blockindex = 14 ;
- } ;
-
- 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.
- */
-
- sampleindex = 2 * pms->channels ;
- while (blockindex < pms->blocksize)
- { bytecode = pms->block [blockindex++] ;
- pms->samples [sampleindex++] = (bytecode >> 4) & 0x0F ;
- pms->samples [sampleindex++] = 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 int
-msadpcm_read (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms, short *ptr, int len)
-{ int count, total = 0, index = 0 ;
-
- while (index < len)
- { if (pms->blockcount >= pms->blocks && pms->samplecount >= pms->samplesperblock)
- { memset (&(ptr[index]), 0, (len - index) * sizeof (short)) ;
- return total ;
- } ;
-
- if (pms->samplecount >= pms->samplesperblock)
- msadpcm_decode_block (psf, pms) ;
-
- count = (pms->samplesperblock - pms->samplecount) * pms->channels ;
- count = (len - index > count) ? count : len - index ;
-
- memcpy (&(ptr[index]), &(pms->samples [pms->samplecount * pms->channels]), count * sizeof (short)) ;
- index += count ;
- pms->samplecount += count / pms->channels ;
- total = index ;
- } ;
-
- return total ;
-} /* msadpcm_read */
-
-static int
-msadpcm_read_s (SF_PRIVATE *psf, short *ptr, int len)
-{ MSADPCM_PRIVATE *pms ;
- int total ;
-
- if (! psf->fdata)
- return 0 ;
- pms = (MSADPCM_PRIVATE*) psf->fdata ;
-
- total = msadpcm_read (psf, pms, ptr, len) ;
-
- return total ;
-} /* msadpcm_read_s */
-
-static int
-msadpcm_read_i (SF_PRIVATE *psf, int *ptr, int len)
-{ MSADPCM_PRIVATE *pms ;
- short *sptr ;
- int k, bufferlen, readcount = 0, count ;
- int index = 0, total = 0 ;
-
- if (! psf->fdata)
- return 0 ;
- pms = (MSADPCM_PRIVATE*) psf->fdata ;
-
- sptr = (short*) psf->buffer ;
- bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ;
- while (len > 0)
- { readcount = (len >= bufferlen) ? bufferlen : len ;
- count = msadpcm_read (psf, pms, sptr, readcount) ;
- for (k = 0 ; k < readcount ; k++)
- ptr [index+k] = (int) (sptr [k]) ;
- index += readcount ;
- total += count ;
- len -= readcount ;
- } ;
- return total ;
-} /* msadpcm_read_i */
-
-static int
-msadpcm_read_f (SF_PRIVATE *psf, float *ptr, int len)
-{ MSADPCM_PRIVATE *pms ;
- short *sptr ;
- int k, bufferlen, readcount = 0, count ;
- int index = 0, total = 0 ;
- float normfact ;
-
- if (! psf->fdata)
- return 0 ;
- pms = (MSADPCM_PRIVATE*) psf->fdata ;
-
- normfact = (psf->norm_float == SF_TRUE) ? 1.0 / ((float) 0x8000) : 1.0 ;
- sptr = (short*) psf->buffer ;
- bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ;
- while (len > 0)
- { readcount = (len >= bufferlen) ? bufferlen : len ;
- count = msadpcm_read (psf, pms, sptr, readcount) ;
- for (k = 0 ; k < readcount ; k++)
- ptr [index+k] = normfact * (float) (sptr [k]) ;
- index += readcount ;
- total += count ;
- len -= readcount ;
- } ;
- return total ;
-} /* msadpcm_read_f */
-
-static int
-msadpcm_read_d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
-{ MSADPCM_PRIVATE *pms ;
- short *sptr ;
- int k, bufferlen, readcount = 0, count ;
- int index = 0, total = 0 ;
- double normfact ;
-
- normfact = (normalize ? 1.0 / ((double) 0x8000) : 1.0) ;
-
- if (! psf->fdata)
- return 0 ;
- pms = (MSADPCM_PRIVATE*) psf->fdata ;
-
- sptr = (short*) psf->buffer ;
- bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ;
- while (len > 0)
- { readcount = (len >= bufferlen) ? bufferlen : len ;
- count = msadpcm_read (psf, pms, sptr, readcount) ;
- for (k = 0 ; k < readcount ; k++)
- ptr [index+k] = normfact * (double) (sptr [k]) ;
- index += readcount ;
- total += count ;
- len -= readcount ;
- } ;
- return total ;
-} /* msadpcm_read_d */
-
-static long
-msadpcm_seek (SF_PRIVATE *psf, long offset, int whence)
-{ MSADPCM_PRIVATE *pms ;
- int newblock, newsample ;
-
- if (! psf->fdata)
- return 0 ;
- pms = (MSADPCM_PRIVATE*) psf->fdata ;
-
- if (! (psf->blockwidth && psf->datalength && psf->dataoffset))
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
-
- switch (whence)
- { case SEEK_SET :
- if (offset < 0 || offset > pms->blocks * pms->samplesperblock)
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
- newblock = offset / pms->samplesperblock ;
- newsample = offset % pms->samplesperblock ;
- break ;
-
- case SEEK_CUR :
- if (psf->current + offset < 0 || psf->current + offset > pms->blocks * pms->samplesperblock)
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
- newblock = (psf->current + offset) / pms->samplesperblock ;
- newsample = (psf->current + offset) % pms->samplesperblock ;
- break ;
-
- case SEEK_END :
- if (offset > 0 || pms->samplesperblock * pms->blocks + offset < 0)
- { psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
- newblock = (pms->samplesperblock * pms->blocks + offset) / pms->samplesperblock ;
- newsample = (pms->samplesperblock * pms->blocks + offset) % pms->samplesperblock ;
- break ;
-
- default :
- psf->error = SFE_BAD_SEEK ;
- return ((long) -1) ;
- } ;
-
- if (psf->mode == SF_MODE_READ)
- { fseek (psf->file, (int) (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 ((long) -1) ;
- } ;
-
- psf->current = newblock * pms->samplesperblock + newsample ;
- return psf->current ;
-} /* msadpcm_seek */
-
-/*==========================================================================================
-** MS ADPCM Write Functions.
-*/
-
-int
-wav_msadpcm_writer_init (SF_PRIVATE *psf)
-{ MSADPCM_PRIVATE *pms ;
- unsigned int pmssize, blockalign, samplesperblock ;
-
- blockalign = srate2blocksize (psf->sf.samplerate * psf->sf.channels) ;
- samplesperblock = 2 + 2 * (blockalign - 7 * psf->sf.channels) / psf->sf.channels ;
-
- pmssize = sizeof (MSADPCM_PRIVATE) + blockalign + 3 * psf->sf.channels * samplesperblock ;
-
- if (! (psf->fdata = malloc (pmssize)))
- return SFE_MALLOC_FAILED ;
- pms = (MSADPCM_PRIVATE*) psf->fdata ;
- memset (pms, 0, pmssize) ;
-
- pms->channels = psf->sf.channels ;
- pms->blocksize = blockalign ;
- pms->samplesperblock = samplesperblock ;
-
- pms->block = (unsigned char*) pms->dummydata ;
- pms->samples = (short*) (pms->dummydata + blockalign) ;
-
- pms->samplecount = 0 ;
-
- msadpcm_write_header (psf) ;
-
- psf->write_short = (func_short) msadpcm_write_s ;
- psf->write_int = (func_int) msadpcm_write_i ;
- psf->write_float = (func_float) msadpcm_write_f ;
- psf->write_double = (func_double) msadpcm_write_d ;
-
- psf->seek_func = (func_seek) msadpcm_seek ;
- psf->close = (func_close) msadpcm_close ;
- psf->write_header = (func_wr_hdr) msadpcm_write_header ;
-
- return 0 ;
-} /* wav_msadpcm_writer_init */
-
-/*==========================================================================================
-*/
-
-static int
-msadpcm_encode_block (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms)
-{ unsigned int blockindex ;
- 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 ;
-
- blockindex = 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 [blockindex++] = 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 ;
-
- blockindex = 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 [blockindex++] = 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 = fwrite (pms->block, 1, pms->blocksize, psf->file)) != 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 int
-msadpcm_write (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms, short *ptr, int len)
-{ int count, total = 0, index = 0 ;
-
- while (index < len)
- { count = (pms->samplesperblock - pms->samplecount) * pms->channels ;
-
- if (count > len - index)
- count = len - index ;
-
- memcpy (&(pms->samples [pms->samplecount * pms->channels]), &(ptr [index]), count * sizeof (short)) ;
- index += count ;
- pms->samplecount += count / pms->channels ;
- total = index ;
-
- if (pms->samplecount >= pms->samplesperblock)
- msadpcm_encode_block (psf, pms) ;
- } ;
-
- return total ;
-} /* msadpcm_write */
-
-static int
-msadpcm_write_s (SF_PRIVATE *psf, short *ptr, int len)
-{ MSADPCM_PRIVATE *pms ;
- int total ;
-
- if (! psf->fdata)
- return 0 ;
- pms = (MSADPCM_PRIVATE*) psf->fdata ;
-
- total = msadpcm_write (psf, pms, ptr, len) ;
-
- return total ;
-} /* msadpcm_write_s */
-
-static int
-msadpcm_write_i (SF_PRIVATE *psf, int *ptr, int len)
-{ MSADPCM_PRIVATE *pms ;
- short *sptr ;
- int k, bufferlen, writecount = 0, count ;
- int index = 0, total = 0 ;
-
- if (! psf->fdata)
- return 0 ;
- pms = (MSADPCM_PRIVATE*) psf->fdata ;
-
- sptr = (short*) psf->buffer ;
- bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ;
- while (len > 0)
- { writecount = (len >= bufferlen) ? bufferlen : len ;
- for (k = 0 ; k < writecount ; k++)
- sptr [k] = (short) ptr [index+k] ;
- count = msadpcm_write (psf, pms, sptr, writecount) ;
- index += writecount ;
- total += count ;
- len -= writecount ;
- } ;
- return total ;
-} /* msadpcm_write_i */
-
-static int
-msadpcm_write_f (SF_PRIVATE *psf, float *ptr, int len)
-{ MSADPCM_PRIVATE *pms ;
- short *sptr ;
- int k, bufferlen, writecount = 0, count ;
- int index = 0, total = 0 ;
- float normfact ;
-
- if (! psf->fdata)
- return 0 ;
- pms = (MSADPCM_PRIVATE*) psf->fdata ;
-
- normfact = (psf->norm_float == SF_TRUE) ? ((float) 0x8000) : 1.0 ;
-
- sptr = (short*) psf->buffer ;
- bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ;
- while (len > 0)
- { writecount = (len >= bufferlen) ? bufferlen : len ;
- for (k = 0 ; k < writecount ; k++)
- sptr [k] = FLOAT_TO_SHORT (normfact * ptr [index+k]) ;
- count = msadpcm_write (psf, pms, sptr, writecount) ;
- index += writecount ;
- total += count ;
- len -= writecount ;
- } ;
- return total ;
-} /* msadpcm_write_f */
-
-static int
-msadpcm_write_d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
-{ MSADPCM_PRIVATE *pms ;
- short *sptr ;
- int k, bufferlen, writecount = 0, count ;
- int index = 0, total = 0 ;
- double normfact ;
-
- normfact = (normalize ? ((double) 0x8000) : 1.0) ;
-
- if (! psf->fdata)
- return 0 ;
- pms = (MSADPCM_PRIVATE*) psf->fdata ;
-
- sptr = (short*) psf->buffer ;
- bufferlen = ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (short) ;
- while (len > 0)
- { writecount = (len >= bufferlen) ? bufferlen : len ;
- for (k = 0 ; k < writecount ; k++)
- sptr [k] = DOUBLE_TO_SHORT (normfact * ptr [index+k]) ;
- count = msadpcm_write (psf, pms, sptr, writecount) ;
- index += writecount ;
- total += count ;
- len -= writecount ;
- } ;
- return total ;
-} /* msadpcm_write_d */
-
-/*========================================================================================
-*/
-
-static int
-msadpcm_write_header (SF_PRIVATE *psf)
-{ int k, fmt_size, blockalign, samplesperblock, bytespersec, extrabytes ;
-
- blockalign = srate2blocksize (psf->sf.samplerate * psf->sf.channels) ;
- samplesperblock = 2 + 2 * (blockalign - 7 * psf->sf.channels) / psf->sf.channels ;
- bytespersec = (psf->sf.samplerate * blockalign) / samplesperblock ;
-
- /* Reset the current header length to zero. */
- psf->header [0] = 0 ;
- psf->headindex = 0 ;
- fseek (psf->file, 0, SEEK_SET) ;
-
- /* RIFF marker, length, WAVE and 'fmt ' markers. */
- psf_binheader_writef (psf, "mlmm", RIFF_MARKER, psf->filelength - 8, WAVE_MARKER, fmt_MARKER) ;
-
- /* fmt chunk. */
- extrabytes = 2 + 2 + 7 * (2 + 2) ;
- fmt_size = 2 + 2 + 4 + 4 + 2 + 2 + 2 + extrabytes ;
-
- /* fmt : size, WAV format type, channels. */
- psf_binheader_writef (psf, "lww", fmt_size, WAVE_FORMAT_MS_ADPCM, psf->sf.channels) ;
-
- /* fmt : samplerate, bytespersec. */
- psf_binheader_writef (psf, "ll", psf->sf.samplerate, bytespersec) ;
-
- /* fmt : blockalign, bitwidth, extrabytes, samplesperblock. */
- psf_binheader_writef (psf, "wwwww", blockalign, 4, extrabytes, samplesperblock, 7) ;
-
- for (k = 0 ; k < 7 ; k++)
- psf_binheader_writef (psf, "ww", AdaptCoeff1 [k], AdaptCoeff2 [k]) ;
-
- /* Fact chunk. */
- psf_binheader_writef (psf, "mll", fact_MARKER, sizeof (int), psf->sf.samples) ;
-
- /* DATA chunk. */
- psf_binheader_writef (psf, "ml", data_MARKER, psf->datalength) ;
-
- fwrite (psf->header, psf->headindex, 1, psf->file) ;
-
- psf->dataoffset = psf->headindex ;
-
- psf->datalength = (psf->sf.samples / samplesperblock) * samplesperblock ;
- if (psf->sf.samples % samplesperblock)
- psf->datalength += samplesperblock ;
-
- return 0 ;
-} /* msadpcm_write_header */
-
-static int
-msadpcm_close (SF_PRIVATE *psf)
-{ MSADPCM_PRIVATE *pms ;
-
- if (! psf->fdata)
- return 0 ;
-
- pms = (MSADPCM_PRIVATE*) psf->fdata ;
-
- if (psf->mode == SF_MODE_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) ;
-
- fseek (psf->file, 0, SEEK_END) ;
- psf->filelength = ftell (psf->file) ;
-
- psf->sf.samples = pms->samplesperblock * pms->blockcount ;
- psf->datalength = psf->filelength - psf->dataoffset ;
-
- msadpcm_write_header (psf) ;
- } ;
-
- if (psf->fdata)
- free (psf->fdata) ;
- psf->fdata = NULL ;
-
- return 0 ;
-} /* msadpcm_close */
-
-/*========================================================================================
-** Static functions.
-*/
-
-static unsigned int
-srate2blocksize (unsigned 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 */
-
-/*----------------------------------------------------------------------------------------
-** 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 index 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 */
--- /dev/null
+++ b/common/libsndfile/src/wav_w64.c
@@ -1,0 +1,330 @@
+/*
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
+**
+** 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 <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <ctype.h>
+#include <time.h>
+
+#include "sndfile.h"
+#include "config.h"
+#include "sfendian.h"
+#include "common.h"
+#include "wav_w64.h"
+
+/*------------------------------------------------------------------------------
+ * Private static functions.
+ */
+
+int
+wav_w64_read_fmt_chunk (SF_PRIVATE *psf, WAV_FMT *wav_fmt, int structsize)
+{ int bytesread, k, bytespersec = 0 ;
+
+ memset (wav_fmt, 0, sizeof (WAV_FMT)) ;
+
+ if (structsize < 16)
+ return SFE_WAV_FMT_SHORT ;
+ if (structsize > SIGNED_SIZEOF (WAV_FMT))
+ return SFE_WAV_FMT_TOO_BIG ;
+
+ /* Read the minimal WAV file header here. */
+ bytesread =
+ psf_binheader_readf (psf, "e224422", &(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) ;
+ psf_log_printf (psf, " Block Align : %d\n", wav_fmt->min.blockalign) ;
+
+ if (wav_fmt->format == WAVE_FORMAT_GSM610 && wav_fmt->min.bitwidth != 0)
+ psf_log_printf (psf, " Bit Width : %d (should be 0)\n", wav_fmt->min.bitwidth) ;
+ else
+ psf_log_printf (psf, " Bit Width : %d\n", wav_fmt->min.bitwidth) ;
+
+ psf->sf.samplerate = wav_fmt->min.samplerate ;
+ psf->sf.samples = 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 (structsize >= 18)
+ { bytesread += psf_binheader_readf (psf, "e2", &(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, "e22", &(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->bytewidth = 2 ;
+ 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, "e222", &(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->bytewidth = 2 ;
+ 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 > SIGNED_SIZEOF (MS_ADPCM_WAV_FMT) / SIGNED_SIZEOF (int))
+ { psf_log_printf (psf, " No. of Coeffs : %d ****\n", wav_fmt->msadpcm.numcoeffs) ;
+ wav_fmt->msadpcm.numcoeffs = SIGNED_SIZEOF (MS_ADPCM_WAV_FMT) / SIGNED_SIZEOF (int) ;
+ }
+ 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++)
+ { bytesread +=
+ psf_binheader_readf (psf, "e22", &(wav_fmt->msadpcm.coeffs [k].coeff1), &(wav_fmt->msadpcm.coeffs [k].coeff2)) ;
+ LSF_SNPRINTF ((char*) psf->buffer, sizeof (psf->buffer), " %2d %7d %7d\n", k, wav_fmt->msadpcm.coeffs [k].coeff1, wav_fmt->msadpcm.coeffs [k].coeff2) ;
+ psf_log_printf (psf, (char*) 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, "e22", &(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->bytewidth = 2 ;
+ 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, "e224", &(wav_fmt->ext.extrabytes), &(wav_fmt->ext.validbits),
+ &(wav_fmt->ext.channelmask)) ;
+
+ psf_log_printf (psf, " Valid Bits : %d\n", wav_fmt->ext.validbits) ;
+ psf_log_printf (psf, " Channel Mask : 0x%X\n", wav_fmt->ext.channelmask) ;
+
+ bytesread +=
+ psf_binheader_readf (psf, "e422", &(wav_fmt->ext.esf.esf_field1), &(wav_fmt->ext.esf.esf_field2),
+ &(wav_fmt->ext.esf.esf_field3)) ;
+
+ 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) ;
+ break ;
+
+ default : break ;
+ } ;
+
+ if (bytesread > structsize)
+ { psf_log_printf (psf, "*** wav_w64_read_fmt_chunk (bytesread > structsize)\n") ;
+ return SFE_W64_FMT_SHORT ;
+ }
+ else
+ psf_binheader_readf (psf, "j", structsize - bytesread) ;
+
+ psf->blockwidth = wav_fmt->min.channels * psf->bytewidth ;
+
+ return 0 ;
+} /* wav_w64_read_fmt_chunk */
+
+
+char const*
+wav_w64_format_str (int k)
+{ switch (k)
+ { case WAVE_FORMAT_UNKNOWN :
+ return "WAVE_FORMAT_UNKNOWN" ;
+ case WAVE_FORMAT_PCM :
+ return "WAVE_FORMAT_PCM" ;
+ case WAVE_FORMAT_MS_ADPCM :
+ return "WAVE_FORMAT_MS_ADPCM" ;
+ case WAVE_FORMAT_IEEE_FLOAT :
+ return "WAVE_FORMAT_IEEE_FLOAT" ;
+ case WAVE_FORMAT_IBM_CVSD :
+ return "WAVE_FORMAT_IBM_CVSD" ;
+ case WAVE_FORMAT_ALAW :
+ return "WAVE_FORMAT_ALAW" ;
+ case WAVE_FORMAT_MULAW :
+ return "WAVE_FORMAT_MULAW" ;
+ case WAVE_FORMAT_OKI_ADPCM :
+ return "WAVE_FORMAT_OKI_ADPCM" ;
+ case WAVE_FORMAT_IMA_ADPCM :
+ return "WAVE_FORMAT_IMA_ADPCM" ;
+ case WAVE_FORMAT_MEDIASPACE_ADPCM :
+ return "WAVE_FORMAT_MEDIASPACE_ADPCM" ;
+ case WAVE_FORMAT_SIERRA_ADPCM :
+ return "WAVE_FORMAT_SIERRA_ADPCM" ;
+ case WAVE_FORMAT_G723_ADPCM :
+ return "WAVE_FORMAT_G723_ADPCM" ;
+ case WAVE_FORMAT_DIGISTD :
+ return "WAVE_FORMAT_DIGISTD" ;
+ case WAVE_FORMAT_DIGIFIX :
+ return "WAVE_FORMAT_DIGIFIX" ;
+ case WAVE_FORMAT_DIALOGIC_OKI_ADPCM :
+ return "WAVE_FORMAT_DIALOGIC_OKI_ADPCM" ;
+ case WAVE_FORMAT_MEDIAVISION_ADPCM :
+ return "WAVE_FORMAT_MEDIAVISION_ADPCM" ;
+ case WAVE_FORMAT_YAMAHA_ADPCM :
+ return "WAVE_FORMAT_YAMAHA_ADPCM" ;
+ case WAVE_FORMAT_SONARC :
+ return "WAVE_FORMAT_SONARC" ;
+ case WAVE_FORMAT_DSPGROUP_TRUESPEECH :
+ return "WAVE_FORMAT_DSPGROUP_TRUESPEECH " ;
+ case WAVE_FORMAT_ECHOSC1 :
+ return "WAVE_FORMAT_ECHOSC1" ;
+ case WAVE_FORMAT_AUDIOFILE_AF18 :
+ return "WAVE_FORMAT_AUDIOFILE_AF18 " ;
+ case WAVE_FORMAT_APTX :
+ return "WAVE_FORMAT_APTX" ;
+ case WAVE_FORMAT_AUDIOFILE_AF10 :
+ return "WAVE_FORMAT_AUDIOFILE_AF10 " ;
+ case WAVE_FORMAT_DOLBY_AC2 :
+ return "WAVE_FORMAT_DOLBY_AC2" ;
+ case WAVE_FORMAT_GSM610 :
+ return "WAVE_FORMAT_GSM610" ;
+ case WAVE_FORMAT_MSNAUDIO :
+ return "WAVE_FORMAT_MSNAUDIO" ;
+ case WAVE_FORMAT_ANTEX_ADPCME :
+ return "WAVE_FORMAT_ANTEX_ADPCME" ;
+ case WAVE_FORMAT_CONTROL_RES_VQLPC :
+ return "WAVE_FORMAT_CONTROL_RES_VQLPC" ;
+ case WAVE_FORMAT_DIGIREAL :
+ return "WAVE_FORMAT_DIGIREAL" ;
+ case WAVE_FORMAT_DIGIADPCM :
+ return "WAVE_FORMAT_DIGIADPCM" ;
+ case WAVE_FORMAT_CONTROL_RES_CR10 :
+ return "WAVE_FORMAT_CONTROL_RES_CR10" ;
+ case WAVE_FORMAT_NMS_VBXADPCM :
+ return "WAVE_FORMAT_NMS_VBXADPCM" ;
+ case WAVE_FORMAT_ROCKWELL_ADPCM :
+ return "WAVE_FORMAT_ROCKWELL_ADPCM" ;
+ case WAVE_FORMAT_ROCKWELL_DIGITALK :
+ return "WAVE_FORMAT_ROCKWELL_DIGITALK" ;
+ case WAVE_FORMAT_G721_ADPCM :
+ return "WAVE_FORMAT_G721_ADPCM" ;
+ case WAVE_FORMAT_MPEG :
+ return "WAVE_FORMAT_MPEG" ;
+ case WAVE_FORMAT_MPEGLAYER3 :
+ return "WAVE_FORMAT_MPEGLAYER3" ;
+ case IBM_FORMAT_MULAW :
+ return "IBM_FORMAT_MULAW" ;
+ case IBM_FORMAT_ALAW :
+ return "IBM_FORMAT_ALAW" ;
+ case IBM_FORMAT_ADPCM :
+ return "IBM_FORMAT_ADPCM" ;
+ case WAVE_FORMAT_CREATIVE_ADPCM :
+ return "WAVE_FORMAT_CREATIVE_ADPCM" ;
+ case WAVE_FORMAT_FM_TOWNS_SND :
+ return "WAVE_FORMAT_FM_TOWNS_SND" ;
+ case WAVE_FORMAT_OLIGSM :
+ return "WAVE_FORMAT_OLIGSM" ;
+ case WAVE_FORMAT_OLIADPCM :
+ return "WAVE_FORMAT_OLIADPCM" ;
+ case WAVE_FORMAT_OLICELP :
+ return "WAVE_FORMAT_OLICELP" ;
+ case WAVE_FORMAT_OLISBC :
+ return "WAVE_FORMAT_OLISBC" ;
+ case WAVE_FORMAT_OLIOPR :
+ return "WAVE_FORMAT_OLIOPR" ;
+ case WAVE_FORMAT_EXTENSIBLE :
+ return "WAVE_FORMAT_EXTENSIBLE" ;
+ break ;
+ } ;
+ 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 */
--- /dev/null
+++ b/common/libsndfile/src/wav_w64.h
@@ -1,0 +1,203 @@
+/*
+** Copyright (C) 1999-2002 Erik de Castro Lopo <[email protected]>
+**
+** 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
+{
+ 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_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_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_AF18 = 0x0024, /* Audiofile, Inc. */
+ WAVE_FORMAT_APTX = 0x0025, /* Audio Processing Technology */
+ WAVE_FORMAT_AUDIOFILE_AF10 = 0x0026, /* Audiofile, Inc. */
+
+ 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_ROCKWELL_ADPCM = 0x003B, /* Rockwell International */
+ WAVE_FORMAT_ROCKWELL_DIGITALK = 0x003C, /* Rockwell International */
+
+ WAVE_FORMAT_G721_ADPCM = 0x0040, /* Antex Electronics Corporation */
+ WAVE_FORMAT_MPEG = 0x0050, /* Microsoft Corporation */
+
+ WAVE_FORMAT_MPEGLAYER3 = 0x0055, /* MPEG 3 Layer 1 */
+
+ 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_CREATIVE_ADPCM = 0x0200, /* Creative Labs, Inc */
+
+ WAVE_FORMAT_FM_TOWNS_SND = 0x0300, /* Fujitsu Corp. */
+ 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_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 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 ;
+ EXTENSIBLE_WAV_FMT ext ;
+ GSM610_WAV_FMT gsm610 ;
+ WAV_FMT_SIZE20 size20 ;
+ char padding [512] ;
+} WAV_FMT ;
+
+typedef struct
+{ int samples ;
+} FACT_CHUNK ;
+
+#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_gsm610.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, WAV_FMT *wav_fmt, int structsize) ;
+
+#endif
--- a/frontend/audio.c
+++ b/frontend/audio.c
@@ -16,7 +16,7 @@
** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
**
-** $Id: audio.c,v 1.2 2002/01/21 23:19:54 menno Exp $
+** $Id: audio.c,v 1.3 2002/07/25 12:22:13 menno Exp $
**/
#ifdef _WIN32
@@ -39,20 +39,16 @@
switch (outputFormat)
{
case FAAD_FMT_16BIT:
- aufile->sfinfo.pcmbitwidth = 16;
- aufile->sfinfo.format = ((1<<(fileType+15)) | SF_FORMAT_PCM);
+ aufile->sfinfo.format = ((1<<(fileType+15)) | SF_FORMAT_PCM_16);
break;
case FAAD_FMT_24BIT:
- aufile->sfinfo.pcmbitwidth = 24;
- aufile->sfinfo.format = ((1<<(fileType+15)) | SF_FORMAT_PCM);
+ aufile->sfinfo.format = ((1<<(fileType+15)) | SF_FORMAT_PCM_24);
break;
case FAAD_FMT_32BIT:
- aufile->sfinfo.pcmbitwidth = 32;
- aufile->sfinfo.format = ((1<<(fileType+15)) | SF_FORMAT_PCM);
+ aufile->sfinfo.format = ((1<<(fileType+15)) | SF_FORMAT_PCM_32);
break;
case FAAD_FMT_FLOAT:
- aufile->sfinfo.pcmbitwidth = 32;
- aufile->sfinfo.format = ((1<<(fileType+15)) | SF_FORMAT_FLOAT);
+ aufile->sfinfo.format = ((1<<(fileType+15)) | SF_FORMAT_FLOAT);
break;
}
aufile->sfinfo.channels = channels;
@@ -63,7 +59,7 @@
setmode(fileno(stdout), O_BINARY);
}
#endif
- aufile->sndfile = sf_open_write(infile, &aufile->sfinfo);
+ aufile->sndfile = sf_open(infile, SFM_WRITE, &aufile->sfinfo);
if (aufile->sndfile == NULL)
{