ref: af9a8b0075884a0e41bc9c95b0511d5bc96fcae6
parent: d09e11ba1abdd440a610d4661ca1e5b5a1ca2cad
author: menno <menno>
date: Wed May 9 15:44:13 EDT 2001
Added libsndfile to the CVS tree, making compilation a lot easier
--- /dev/null
+++ b/common/libsndfile/AUTHORS
@@ -1,0 +1,13 @@
+The main author of libsndfile is Erik de Castro Lopo <[email protected]>.
+
+The code in the src/GSM610 directory was written by Jutta Degener
+<[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
+
+
+
+
+
--- /dev/null
+++ b/common/libsndfile/COPYING
@@ -1,0 +1,503 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
--- /dev/null
+++ b/common/libsndfile/ChangeLog
@@ -1,0 +1,676 @@
+2000-10-16 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.c src/au.c
+ Fixed bug which prevented writing of G723 24kbps AU files.
+
+ * tests/lossy_comp_test.c
+ Corrrection to options for G723 tests.
+
+ * configure.in
+ Added --disable-gcc-pipe option for DJGPP compiler (gcc on MS-DOS) which
+ doesn't allow gcc -pipe option.
+
+2000-09-03 Erik de Castro Lopo <[email protected]>
+
+ * 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 <[email protected]>
+
+ * src/pcm.c
+ Fixed bug in normalisation code (spotted by Steve Lhomme).
+
+ * tests/double_test.c
+ New file to test scaled and unscaled sf_read_double() and sf_write_double()
+ functions.
+
+2000-08-28 Erik de Castro Lopo <[email protected]>
+
+ * COPYING
+ Changed to the LGPL COPYING file (spotted by H. S. Teoh).
+
+2000-08-21 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.h
+ Removed prototype of unimplemented function sf_get_info(). Added prototype for
+ sf_error_number() Thanks to Sigbj�rn Skj�ret for spotting these.
+
+2000-08-18 Erik de Castro Lopo <[email protected]>
+
+ * src/newpcm.h
+ New file to contain a complete rewrite of the PCM data handling.
+
+2000-08-15 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.c
+ Fixed a leak of FILE* pointers in sf_open_write(). Thanks to Sigbj�rn Skj�ret
+ for spotting this one.
+
+2000-08-15 Erik de Castro Lopo <[email protected]>
+
+ * 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 <[email protected]>
+
+ * src/au_g72x.c src/G72x/g72x.c
+ Added G723 encoded AU file support.
+
+ * tests/lossy_comp_test.c
+ Added tests for G721 and G723 encoded AU files.
+
+2000-08-06 Erik de Castro Lopo <[email protected]>
+
+ * 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 [email protected] or copyright under a GPL/LGPL compatible
+ license.
+
+2000-08-06 Erik de Castro Lopo <[email protected]>
+
+ * tests/lossy_comp_test.c
+ Fixed incorrect error message.
+
+ * src/au_g72x.c src/G72x/*
+ G721 encoded AU files now working.
+
+ * Win32/README-Win32.txt
+ Replaced this file with a new one which gives a full explanation
+ of how to build libsndfile under Win32. Thanks to Mike Ricos.
+
+2000-08-05 Erik de Castro Lopo <[email protected]>
+
+ * src/*.[ch]
+ Removed double leading underscores from the start of all variable and
+ function names. Identifiers with a leading underscores are reserved
+ for use by the compiler.
+
+ * src/au_g72x.c src/G72x/*
+ Continued work on G721 encoded AU files.
+
+2000-07-12 Erik de Castro Lopo <[email protected]>
+
+ * src/G72x/*
+ New files for reading/writing G721 and G723 ADPCM audio. These files
+ are from a Sun Microsystems reference implementation released under a
+ free software licence.
+ Extensive changes to this code to make it fit in with libsndfile.
+ See the ChangeLog in this directory for details.
+
+ * src/au_g72x.c
+ New file for G721 encoded AU files.
+
+2000-07-08 Erik de Castro Lopo <[email protected]>
+
+ * libsndfile.spec.in
+ Added a spec file for making RPMs. Thanks to Josh Green for supplying this.
+
+2000-06-28 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.c src/sndfile.h
+ Add checking for and handling of header-less u-law encoded AU/SND files.
+ Any file with a ".au" or ".snd" file extension and without the normal
+ AU file header is treated as an 8kHz, u-law encoded file.
+
+ * src/au.h
+ New function for opening a headerless u-law encoded file for read.
+
+2000-06-04 Erik de Castro Lopo <[email protected]>
+
+ * src/paf.c
+ Add checking for files shorter than minimal PAF file header length.
+
+2000-06-02 Erik de Castro Lopo <[email protected]>
+
+ * tests/write_read_test.c
+ Added extra sf_perror() calls when sf_write_XXXX fails.
+
+2000-05-29 Erik de Castro Lopo <[email protected]>
+
+ * src/common.c
+ Modified usage of va_arg() macro to work correctly on PowerPC
+ Linux. Thanks to Kyle Wheeler for giving me ssh access to his
+ machine while I was trying to track this down.
+
+ * configure.in src/*.[ch]
+ Sorted out some endian-ness issues brought up by PowerPC Linux.
+
+ * tests/read_seek_test.c
+ Added extra debugging for when tests fail.
+
+2000-05-18 Erik de Castro Lopo <[email protected]>
+
+ * 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 <[email protected]>
+
+ * src/sndfile.c src/wav.c src/wav_gsm610.c
+ Finallised writing of GSM 6.10 WAV files.
+
+ * tests/lossy_comp_test.c
+ Wrote new test code for GSM 6.10 files.
+
+ * examples/sfinfo.c
+ Fixed incorrect format in printf() statement.
+
+2000-04-06 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.h.in
+ Fixed comments about sf_perror () and sf_error_str ().
+
+2000-03-14 Erik de Castro Lopo <[email protected]>
+
+ * configure.in
+ Fixed --enable-justsrc option.
+
+2000-03-07 Erik de Castro Lopo <[email protected]>
+
+ * wav.c
+ Fixed checking of bytespersec field of header. Still some weirdness
+ with some files.
+
+2000-03-05 Erik de Castro Lopo <[email protected]>
+
+ * 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 <[email protected]>
+
+ * src/sndfile.c src/wav.c
+ Minor changes to allow writing of GSM 6.10 WAV files.
+
+2000-02-28 Erik de Castro Lopo <[email protected]>
+
+ * configure.in Makefile.am src/Makefile.am
+ Finally got around to figuring out how to build a single library from
+ multiple source directories.
+ Reading GSM 6.10 files now seems to work.
+
+2000-01-03 Erik de Castro Lopo <[email protected]>
+
+ * src/wav.c
+ Added more error reporting in read_fmt_chunk().
+
+1999-12-21 Erik de Castro Lopo <[email protected]>
+
+ * examples/sfinfo.c
+ Modified program to accept multiple filenames from the command line.
+
+1999-11-27 Erik de Castro Lopo <[email protected]>
+
+ * 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 <[email protected]>
+
+ * src/common.c
+ Fixed put_int() and put_short() macros used by _psf_hprintf() which were
+ causing seg. faults on Sparc Solaris.
+
+1999-11-15 Erik de Castro Lopo <[email protected]>
+
+ * src/common.c
+ Added string.h to includes. Thanks to Sigbjxrn Skjfret.
+
+ * src/svx.c
+ Fixed __svx_close() function to ensure FORM and BODY chunks are correctly
+ set.
+
+1999-10-01 Erik de Castro Lopo <[email protected]>
+
+ * src/au.c
+ Fixed handling of incorrect size field in AU header on read. Thanks to
+ Christoph Lauer for finding this problem.
+
+1999-09-28 Erik de Castro Lopo <[email protected]>
+
+ * src/aiff.c
+ Fixed a bug with incorrect SSND chunk length being written. This also lead
+ to finding an minor error in AIFF header parsing. Thanks to Dan Timis for
+ pointing this out.
+
+1999-09-24 Erik de Castro Lopo <[email protected]>
+
+ * src/paf.c
+ Fixed a bug with reading and writing 24 bit stereo PAF files. This problem
+ came to light when implementing tests for the new functions which operate
+ in terms of frames rather than items.
+
+1999-09-23 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.c
+ Modified file type detection to use first 12 bytes of file rather than
+ file name extension. Required this because NIST files use the same
+ filename extension as Microsoft WAV files.
+
+ * src/sndfile.c src/sndfile.h
+ Added short, int and double read/write functions which work in frames rather
+ than items. This was originally suggested by Maurizio Umberto Puxeddu
+
+1999-09-22 Erik de Castro Lopo <[email protected]>
+
+ * src/svx.c
+ Finished off implementation of write using __psf_hprintf().
+
+1999-09-21 Erik de Castro Lopo <[email protected]>
+
+ * src/common.h
+ Added a buffer to SF_PRIVATE for writing the header. This is required
+ to make generating headers for IFF/SVX files easier as well as making
+ it easier to do re-write the headers which will be required when
+ sf_rewrite_header() is implemented.
+
+ * src/common.c
+ Implemented __psf_hprintf() function. This is an internal function
+ which is documented briefly just above the code.
+
+1999-09-05 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.c
+ Fixed a bug in sf_write_raw() where it was returning incorrect values
+ (thanks to Richard Dobson for finding this one). Must put in a test
+ routine for sf_read_raw and sf_write_raw.
+
+ * src/aiff.c
+ Fixed default FORMsize in __aiff_open_write ().
+
+ * src/sndfile.c
+ Added copy of filename to internal data structure. IFF/SVX files
+ contain a NAME header chunk. Both sf_open_read() and sf_open_write()
+ copy the file name (less the leading path information) to the
+ filename field.
+
+ * src/svx.c
+ Started implementing writing of files.
+
+1999-08-04 Erik de Castro Lopo <[email protected]>
+
+ * src/svx.c
+ New file for reading/writing 8SVX and 16SVX files.
+
+ * src/sndfile.[ch] src/common.h
+ Changes for SVX files.
+
+ * src/aiff.c
+ Fixed header parsing when unknown chunk is found.
+
+1999-08-01 Erik de Castro Lopo <[email protected]>
+
+ * src/paf.c
+ New file for reading/writing Ensoniq PARIS audio file format.
+
+ * src/sndfile.[ch] src/common.h
+ Changes for PAF files.
+
+ * src/sndfile.[ch]
+ Added stuff for sf_get_lib_version() function.
+
+
+1999-07-31 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.h MacOS/config.h
+ Fixed minor MacOS configuration issues.
+
+1999-07-30 Erik de Castro Lopo <[email protected]>
+
+ * MacOS/
+ Added a new directory for the MacOS config.h file and the
+ readme file.
+
+ * src/aiff.c
+ Fixed calculation of datalength when reading SSND chunk. Thanks to
+ Sigbj�rn Skj�ret for pointing out this error.
+
+1999-07-29 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.c src/sndfile.h src/raw.c
+ Further fixing of #includes for MacOS.
+
+1999-07-25 Erik de Castro Lopo <[email protected]>
+
+ * src/wav.c src/aiff.c
+ Added call to ferror () in main header parsing loop of __XXX_open_read
+ functions. This should fix problems on platforms (MacOS, AmigaOS) where
+ fseek()ing or fread()ing beyond the end of the file puts the FILE*
+ stream in an error state until clearerr() is called.
+
+ * tests/write_read_test.c
+ Added tests for RAW header-less PCM files.
+
+ * src/common.h
+ Moved definition of struct tribyte to pcm.c which is the only place
+ which needs it.
+
+ * src/pcm.c
+ Modified all code which assumed sizeof (struct tribyte) == 3. This code
+ did not work on MacOS. Thanks to Ben "Jacobs" for pointing this out.
+
+ * src/au.c
+ Removed <sys/stat.h> from list of #includes (not being used).
+
+ * src/sndfile.c
+ Added MacOS specific #ifdef to replace <sys/stat.h>.
+
+ * src/sndfile.h
+ Added MacOS specific #ifdef to replace <sys/stat.h>.
+
+ * src/sndfile.h
+ Added MacOS specific typedef for off_t.
+
+ * MacOS-readme.txt
+ New file with instructions for building libsndfile under MacOS. Thanks
+ to Ben "Jacobs" for supplying these instructions.
+
+1999-07-24 Erik de Castro Lopo <[email protected]>
+
+ * configure.in
+ Removed sndfile.h from generated file list as there were no longer
+ any autoconf substitutions being made.
+
+ * src/raw.c
+ New file for handling raw header-less PCM files. In order to open these
+ for read, the user must specify format, pcmbitwidth and channels in the
+ SF_INFO struct when calling sf_open_read ().
+
+ * src/sndfile.c
+ Added support for raw header-less PCM files.
+
+1999-07-22 Erik de Castro Lopo <[email protected]>
+
+ * examples/sfinfo.c
+ Removed options so the sfinfo program always prints out all the information.
+
+1999-07-19 Erik de Castro Lopo <[email protected]>
+
+ * src/alaw.c
+ New file for A-law encoding (similar to u-law).
+
+ * tests/alaw_test.c
+ New test program to test the A-law encode/decode lookup tables.
+
+ * tests/lossy_comp_test.c
+ Added tests for a-law encoded WAV, AU and AULE files.
+
+1999-07-18 Erik de Castro Lopo <[email protected]>
+
+ * 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 <[email protected]>
+
+ * tests/ulaw_test.c
+ New test program to test the u-law encode/decode lookup tables.
+
+1999-07-16 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.h
+ Made corrections to comments on the return values from sf_seek ().
+
+ * src/sndfile.c
+ Fixed boundary condition checking bug and accounting bug in sf_read_raw ().
+
+1999-07-15 Erik de Castro Lopo <[email protected]>
+
+ * src/au.c src/ulaw.c
+ Finished implementation of u-law encoded AU files.
+
+ * src/wav.c
+ Implemented reading and writing of u-law encoded WAV files.
+
+ * tests/
+ Changed name of adpcm_test.c to lossy_comp_test.c. This test program
+ will now be used to test Ulaw and Alaw encoding as well as APDCM.
+ Added tests for Ulaw encoded WAV files.
+
+1999-07-14 Erik de Castro Lopo <[email protected]>
+
+ * tests/adpcm_test.c
+ Initialised amp variable in gen_signal() to remove compiler warning.
+
+1999-07-12 Erik de Castro Lopo <[email protected]>
+
+ * src/aiff.c
+ In __aiff_open_read () prevented fseek()ing beyond end of file which
+ was causing trouble on MacOS with the MetroWerks compiler. Thanks to
+ Ben "Jacobs" for pointing this out.
+
+ *src/wav.c
+ Fixed as above in __wav_open_read ().
+
+1999-07-01 Erik de Castro Lopo <[email protected]>
+
+ * src/wav_ms_adpcm.c
+ Implemented MS ADPCM encoding. Code cleanup of decoder.
+
+ * tests/adpcm_test.c
+ Added tests for MS ADPCM WAV files.
+
+ * src/wav_ima_adpcm.c
+ Fixed incorrect parameter in call to srate2blocksize () from
+ __ima_writer_init ().
+
+1999-06-23 Erik de Castro Lopo <[email protected]>
+
+ * tests/read_seek_test.c
+ Added test for 8 bit AIFF files.
+
+1999-06-18 Erik de Castro Lopo <[email protected]>
+
+ * tests/write_read_test.c
+ Removed test for IMA ADPCM WAV files which is now done in adpcm_test.c
+
+ * configure.in
+ Added -Wconversion to CFLAGS.
+
+ * src/*.c tests/*.c examples/*.c
+ Fixed all warnings resulting from use of -Wconversion.
+
+1999-06-17 Erik de Castro Lopo <[email protected]>
+
+ * src/wav.c
+ Added fact chunk handling on read and write for all non WAVE_FORMAT_PCM
+ WAV files.
+
+ * src/wav_ima.c
+ Changed block alignment to be dependant on sample rate. This should make
+ WAV files created with libsndfile compatible with the MS Windows media
+ players.
+
+ * tests/adpcm_test.c
+ Reimplemented adpcm_test_short and implemented adpcm_test_int and adpcm_test_double.
+ Now have full testing of IMA ADPCM WAV file read, write and seek.
+
+1999-06-15 Erik de Castro Lopo <[email protected]>
+
+ * src/wav_float.c
+ Fixed function prototype for x86f2d_array () which was causing ocassional
+ seg. faults on Sparc Solaris machines.
+
+1999-06-14 Erik de Castro Lopo <[email protected]>
+
+ * src/aiff.c
+ Fixed bug in __aiff_close where the length fields in the header were
+ not being correctly calculated before writing.
+
+ * tests/write_read_test.c
+ Modified to detect the above bug in WAV, AIFF and AU files.
+
+1999-06-12 Erik de Castro Lopo <[email protected]>
+
+ * Win32/*
+ Added a contribution from Albert Faber to allow libsndfile to compile
+ under Win32 systems. libsndfile will now be used as part of LAME the
+ the MPEG 1 Layer 3 encoder (http://internet.roadrunner.com/~mt/mp3/).
+
+1999-06-11 Erik de Castro Lopo <[email protected]>
+
+ * configure.in
+ Changed to reflect previous changes.
+
+ * src/wav_ima_adpcm.c
+ Fixed incorrect calculation of bytespersec header field (IMA ADPCM only).
+
+ Fixed bug when writing from int or double data to IMA ADPCM file. Will need
+ to write test code for this.
+
+ Fixed bug in __ima_write () whereby the length of the current block was
+ calculated incorrectly. Thanks to Jongcheon Park for pointing this out.
+
+1999-03-27 Erik de Castro Lopo <[email protected]>
+
+ * src/*.c
+ Changed all read/write/lseek function calls to fread/fwrite/
+ fseek/ftell and added error checking of return values from
+ fread and fwrite in critical areas of the code.
+
+ * src/au.c
+ Fixed incorrect datasize element in AU header on write.
+
+ * tests/error_test.c
+ Add new test to check all error values have an associated error
+ string. This will avoid embarrassing real world core dumps.
+
+1999-03-23 Erik de Castro Lopo <[email protected]>
+
+ * src/wav.c src/aiff.c
+ Added handling for unknown chunk markers in the file.
+
+1999-03-22 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.c
+ Filled in missing error strings in SndfileErrors array. Missing entries
+ can cause core dumps when calling sf_error-str (). Thanks to Sam
+ <mrsam at-sign geocities.com> for finding this problem.
+
+1999-03-21 Erik de Castro Lopo <[email protected]>
+
+ * src/wav_ima_adpcm.c
+ Work on wav_ms_adpcm.c uncovered a bug in __ima_read () when reading
+ stereo files. Caused by not adjusting offset into buffer of decoded
+ samples for 2 channels. A similar bug existed in __ima_write ().
+ Need a test for stereo ADPCM files.
+
+ * src/wav_ms_adpcm.c
+ Decoder working correctly.
+
+1999-03-18 Erik de Castro Lopo <[email protected]>
+
+ * configure.in Makefile.am
+ Added --enable-justsrc configuration variable sent by Sam
+ <mrsam at-sign geocities.com>.
+
+ * src/wav_ima_adpcm.c
+ Fixed bug when reading beyond end of data section due to not
+ checking pima->blockcount.
+ This uncovered __ima_seek () bug due to pima->blockcount being set
+ before calling __ima_init_block ().
+
+1999-03-17 Erik de Castro Lopo <[email protected]>
+
+ * src/wav.c
+ Started implementing MS ADPCM decoder.
+ If file is WAVE_FORMAT_ADPCM and length of data chunk is odd, this
+ encoder seems to add an extra byte. Why not just give an even data
+ length?
+
+1999-03-16 Erik de Castro Lopo <[email protected]>
+
+ * src/wav.c
+ Split code out of wav.c to create wav_float.c and wav_ima_adpcm.c.
+ This will make it easier to add and debug other kinds of WAV files
+ in future.
+
+1999-03-14 Erik de Castro Lopo <[email protected]>
+
+ * tests/
+ Added adpcm_test.c which implements test functions for
+ IMA ADPCM reading/writing/seeking etc.
+
+ * src/wav.c
+ Fixed many bugs in IMA ADPCM encoder and decoder.
+
+1999-03-11 Erik de Castro Lopo <[email protected]>
+
+ * src/wav.c
+ Finished implementing IMA ADPCM encoder and decoder (what a bitch!).
+
+1999-03-03 Erik de Castro Lopo <[email protected]>
+
+ * src/wav.c
+ Started implementing IMA ADPCM decoder.
+
+1999-03-02 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.c
+ Fixed bug where the sf_read_XXX functions were returning a
+ incorrect read count when reading past end of file.
+ Fixed bug in sf_seek () when seeking backwards from end of file.
+
+ * tests/read_seek_test.c
+ Added multiple read test to short_test(), int_test () and
+ double_test ().
+ Added extra chunk to all test WAV files to test that reading
+ stops at end of 'data' chunk.
+
+1999-02-21 Erik de Castro Lopo <[email protected]>
+
+ * tests/write_read_test.c
+ Added tests for little DEC endian AU files.
+
+ * src/au.c
+ Add handling for DEC format little endian AU files.
+
+1999-02-20 Erik de Castro Lopo <[email protected]>
+
+ * src/aiff.c src/au.c src/wav.c
+ Add __psf_sprintf calls during header parsing.
+
+ * src/sndfile.c src/common.c
+ Implement sf_header_info (sndfile.c) function and __psf_sprintf (common.c).
+
+ * tests/write_read_test.c
+ Added tests for 8 bit PCM files (WAV, AIFF and AU).
+
+ * src/au.c src/aiff.c
+ Add handling of 8 bit PCM data format.
+
+ * src/aiff.c
+ On write, set blocksize in SSND chunk to zero like everybody else.
+
+1999-02-16 Erik de Castro Lopo <[email protected]>
+
+ * src/pcm.c:
+ Fixed bug in let2s_array (cptr was not being initialised).
+
+ * src/sndfile.c:
+ Fixed bug in sf_read_raw and sf_write_raw. sf_seek should
+ now work when using these functions.
+
+1999-02-15 Erik de Castro Lopo <[email protected]>
+
+ * tests/write_read_test.c:
+ Force test_buffer array to be double aligned. Sparc Solaris
+ requires this.
+
+1999-02-14 Erik de Castro Lopo <[email protected]>
+
+ * src/pcm.c:
+ Fixed a bug which was causing errors in the reading
+ and writing of 24 bit PCM files.
+
+ * doc/api.html
+ Finished of preliminary documentaion.
+
+1999-02-13 Erik de Castro Lopo <[email protected]>
+
+ * src/aiff.c:
+ Changed reading of 'COMM' chunk to avoid reading an int
+ which overlaps an int (4 byte) boundary.
+
--- /dev/null
+++ b/common/libsndfile/INSTALL
@@ -1,0 +1,182 @@
+Basic Installation
+==================
+
+ These are generic installation instructions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, a file
+`config.cache' that saves the results of its tests to speed up
+reconfiguring, and a file `config.log' containing compiler output
+(useful mainly for debugging `configure').
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If at some point `config.cache'
+contains results you don't want to keep, you may remove or edit it.
+
+ The file `configure.in' is used to create `configure' by a program
+called `autoconf'. You only need `configure.in' if you want to change
+it or regenerate `configure' using a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system. If you're
+ using `csh' on an old version of System V, you might need to type
+ `sh ./configure' instead to prevent `csh' from trying to execute
+ `configure' itself.
+
+ Running `configure' takes awhile. While running, it prints some
+ messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Optionally, type `make check' to run any self-tests that come with
+ the package.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 5. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'. There is
+ also a `make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. You can give `configure'
+initial values for variables by setting them in the environment. Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+ CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+Or on systems that have the `env' program, you can do it like this:
+ env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+ If you have to use a `make' that does not supports the `VPATH'
+variable, you have to compile the package for one architecture at a time
+in the source code directory. After you have installed the package for
+one architecture, use `make distclean' before reconfiguring for another
+architecture.
+
+Installation Names
+==================
+
+ By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc. You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=PATH' to specify different values for particular
+kinds of files. Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' can not figure out
+automatically, but needs to determine by the type of host the package
+will run on. Usually `configure' can figure that out, but if it prints
+a message saying it can not guess the host type, give it the
+`--host=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name with three fields:
+ CPU-COMPANY-SYSTEM
+
+See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the host type.
+
+ If you are building compiler tools for cross-compiling, you can also
+use the `--target=TYPE' option to select the type of system they will
+produce code for and the `--build=TYPE' option to select the type of
+system on which you are compiling the package.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Operation Controls
+==================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--cache-file=FILE'
+ Use and save the results of the tests in FILE instead of
+ `./config.cache'. Set FILE to `/dev/null' to disable caching, for
+ debugging `configure'.
+
+`--help'
+ Print a summary of the options to `configure', and exit.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to `/dev/null' (any error
+ messages will still be shown).
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--version'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`configure' also accepts some other, not widely useful, options.
--- /dev/null
+++ b/common/libsndfile/MacOS/MacOS-readme.txt
@@ -1,0 +1,82 @@
+BUILDING LIBSNDFILE FOR MACINTOSH
+---------------------------------
+
+These instructions are current as of libsndfile 0.0.16, and assume the
+following development environment:
+
+- MacOS 8.6
+- Metrowerks CodeWarrior Pro4 (IDE3.3, and all publicly available
+ compiler updates as of June, 1999)
+- Apple Universal Libraries 3.2
+
+The following procedure is recommended for building a libsndfile library
+suitable for inclusion in other MacOS projects:
+
+1. using CodeWarrior, create a new "Empty Project"
+
+2. obtain the libsndfile source distribution (see homepage URL below);
+ add all ".c" files found in the top level of the "src" folder to the
+ project
+
+3. starting from the factory defaults, adjust the following project
+ settings:
+ - Target Settings panel:
+ linker = "MacOS PPC Linker"
+ - PPC Target panel:
+ project type = "Library"
+ file name = "libsndfile"
+
+4. grab the "config.h" file from the MacOS directory and replace the default
+ config.h file
+
+5. Make the project
+
+
+CROSSPLATFORM (x86) BUILDS?
+--------------------------
+
+For situations in which CodeWarrior is being used to develop a project
+for dual-platform operation, it is possible to build an x86 version of
+libsndfile on the mac as well. Use the procedure above to set up the
+PPC target, then perform the following steps:
+
+6. create a new target, by cloning the existing ppc target (created
+ above)
+
+7. adjust the following project settings:
+ - Target Settings panel:
+ linker = "Win32 x86 Linker"
+ - x86 Settings panel:
+ project type = "Library (LIB)"
+ file name = "libsndfile.x32.lib"
+ - Access Paths panel:
+ add this compiler-relative path at the TOP of "System Paths"
+ (note: this must be at the TOP of the path list):
+ "{Compiler}:Win32-x86 Support:Headers:Win32 SDK:sys:"
+
+8. Make the x86 target
+
+
+SEE ALSO
+--------
+
+The file "README" in the libsndfile distribution, for general
+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]>
--- /dev/null
+++ b/common/libsndfile/MacOS/Makefile.am
@@ -1,0 +1,1 @@
+EXTRA_DIST = config.h MacOS-readme.txt
--- /dev/null
+++ b/common/libsndfile/MacOS/Makefile.in
@@ -1,0 +1,184 @@
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_alias = @build_alias@
+build_triplet = @build@
+host_alias = @host_alias@
+host_triplet = @host@
+target_alias = @target_alias@
+target_triplet = @target@
+AS = @AS@
+CC = @CC@
+DLLTOOL = @DLLTOOL@
+LD = @LD@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+MAKEINFO = @MAKEINFO@
+NM = @NM@
+OBJDUMP = @OBJDUMP@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+VERSION = @VERSION@
+subdirs = @subdirs@
+
+EXTRA_DIST = config.h MacOS-readme.txt
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../src/config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps MacOS/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = MacOS
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am:
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am:
+uninstall: uninstall-am
+all-am: Makefile
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am
+ -rm -f libtool
+
+distclean: distclean-am
+
+maintainer-clean-am: 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."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: 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
+
+
+# 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.
+.NOEXPORT:
--- /dev/null
+++ b/common/libsndfile/MacOS/config.h
@@ -1,0 +1,100 @@
+/* src/config.h. Generated automatically by configure. */
+/* src/config.h.in. Generated automatically from configure.in by autoheader. */
+
+/* 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
+#else
+#define GUESS_BIG_ENDIAN 1
+#endif
+#endif
+
+/* Set to 1 if the processor is little endian, otherwise set to 0. */
+#ifdef __MWERKS__
+#ifdef _WIN32
+#define GUESS_LITTLE_ENDIAN 1
+#else
+#define GUESS_LITTLE_ENDIAN 0
+#endif
+#endif
+
+/* Set to 1 if the processor can read and write Intel x86 32 bit floats. */
+/* Otherwise set it to 0. */
+#ifdef __MWERKS__
+#ifdef _WIN32
+#define CAN_READ_WRITE_x86_IEEE 1
+#else
+#define CAN_READ_WRITE_x86_IEEE 0
+#endif
+#endif
+
+/* The number of bytes in a double. */
+#define SIZEOF_DOUBLE 8
+
+/* The number of bytes in a float. */
+#define SIZEOF_FLOAT 4
+
+/* The number of bytes in a int. */
+#define SIZEOF_INT 4
+
+/* The number of bytes in a long. */
+#define SIZEOF_LONG 4
+
+/* The number of bytes in a short. */
+#define SIZEOF_SHORT 2
+
+/* 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 ftell function. */
+#define HAVE_FTELL 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 <endian.h> header file. */
+#define HAVE_ENDIAN_H 1
+
+/* Name of package */
+#define PACKAGE "libsndfile"
+
+/* Version number of package */
+#define VERSION "0.0.21"
+
--- /dev/null
+++ b/common/libsndfile/Makefile.am
@@ -1,0 +1,3 @@
+DIST_SUBDIRS = src examples doc tests Win32 MacOS m4
+SUBDIRS = @subdirs@
+EXTRA_DIST = reconf acconfig.h libsndfile.spec.in libsndfile.spec
--- /dev/null
+++ b/common/libsndfile/Makefile.in
@@ -1,0 +1,366 @@
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = .
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_alias = @build_alias@
+build_triplet = @build@
+host_alias = @host_alias@
+host_triplet = @host@
+target_alias = @target_alias@
+target_triplet = @target@
+AS = @AS@
+CC = @CC@
+DLLTOOL = @DLLTOOL@
+LD = @LD@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+MAKEINFO = @MAKEINFO@
+NM = @NM@
+OBJDUMP = @OBJDUMP@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+VERSION = @VERSION@
+subdirs = @subdirs@
+
+DIST_SUBDIRS = src examples doc tests Win32 MacOS m4
+SUBDIRS = @subdirs@
+EXTRA_DIST = reconf acconfig.h libsndfile.spec.in libsndfile.spec
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ./src/config.h
+CONFIG_CLEAN_FILES = libsndfile.spec
+DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \
+Makefile.in NEWS TODO acconfig.h 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
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu --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
+ cd $(srcdir) && $(ACLOCAL)
+
+config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(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
+
+# 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,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+
+@SET_MAKE@
+
+all-recursive install-data-recursive install-exec-recursive \
+installdirs-recursive install-recursive uninstall-recursive \
+check-recursive installcheck-recursive info-recursive dvi-recursive:
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
+ rev="$$subdir $$rev"; \
+ test "$$subdir" = "." && dot_seen=yes; \
+ done; \
+ test "$$dot_seen" = "no" && rev=". $$rev"; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ -rm -rf $(distdir)
+ GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
+ mkdir $(distdir)/=build
+ mkdir $(distdir)/=inst
+ dc_install_base=`cd $(distdir)/=inst && pwd`; \
+ cd $(distdir)/=build \
+ && ../configure --srcdir=.. --prefix=$$dc_install_base \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) dist
+ -rm -rf $(distdir)
+ @banner="$(distdir).tar.gz is ready for distribution"; \
+ dashes=`echo "$$banner" | sed s/./=/g`; \
+ echo "$$dashes"; \
+ echo "$$banner"; \
+ echo "$$dashes"
+dist: distdir
+ -chmod -R a+r $(distdir)
+ GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+ -rm -rf $(distdir)
+dist-all: distdir
+ -chmod -R a+r $(distdir)
+ GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+ -rm -rf $(distdir)
+distdir: $(DISTFILES)
+ -rm -rf $(distdir)
+ mkdir $(distdir)
+ -chmod 777 $(distdir)
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+ for subdir in $(DIST_SUBDIRS); do \
+ if test "$$subdir" = .; then :; else \
+ test -d $(distdir)/$$subdir \
+ || mkdir $(distdir)/$$subdir \
+ || exit 1; \
+ chmod 777 $(distdir)/$$subdir; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \
+ || exit 1; \
+ fi; \
+ done
+info-am:
+info: info-recursive
+dvi-am:
+dvi: dvi-recursive
+check-am: all-am
+check: check-recursive
+installcheck-am:
+installcheck: installcheck-recursive
+install-exec-am:
+install-exec: install-exec-recursive
+
+install-data-am:
+install-data: install-data-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-recursive
+uninstall-am:
+uninstall: uninstall-recursive
+all-am: Makefile
+all-redirect: all-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs: installdirs-recursive
+installdirs-am:
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic
+
+mostlyclean: mostlyclean-recursive
+
+clean-am: clean-hdr clean-tags clean-generic mostlyclean-am
+
+clean: clean-recursive
+
+distclean-am: distclean-hdr 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
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f config.status
+
+.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
+install-data-recursive uninstall-data-recursive install-exec-recursive \
+uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \
+all-recursive check-recursive installcheck-recursive info-recursive \
+dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \
+maintainer-clean-recursive tags tags-recursive 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-am \
+installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+# 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.
+.NOEXPORT:
--- /dev/null
+++ b/common/libsndfile/NEWS
@@ -1,0 +1,58 @@
+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.
+
+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.
--- /dev/null
+++ b/common/libsndfile/README
@@ -1,0 +1,59 @@
+This is libsndfile, 0.0.16
+
+libsndfile is a library of C routines for reading and writing
+files containing sampled audio data.
+
+The src/ directory contains the source code for library itself.
+
+The doc/ directory contains the libsndfile documentation.
+
+The examples/ directory contains examples of how to write code using
+libsndfile. 'wav32_aiff24' converts a WAV file containing 32 bit floating
+point data into a 24 bit PCM AIFF file. 'sndfile2oct' dumps the audio
+data of a file in a human readable format. 'sfconvert' is the beginnings
+of a audio file format conversion utility. 'make_sine' generates a WAV
+file containing one cycle of a sine wave with 4096 sample points in
+32 bit floating point format. 'sfinfo' opens a sound file and prints
+out information about that file.
+
+The tests/ directory contains programs which link against libsndfile
+and test its functionality.
+
+The Win32/ directory contains files and documentation to allow libsndfile
+to compile under Win32 with the Microsoft Visual C++ compiler.
+
+The MacOS/ directory contains files and documentation to allow libsndfile
+to compile under MacOS with the Metrowerks compiler.
+
+The src/GSM610 directory contains code written by Jutta Degener and Carsten
+Bormann. Their original code can be found at :
+ http://kbs.cs.tu-berlin.de/~jutta/toast.html
+
+
+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 :
+ ./configure
+ make
+ make install
+
+For platforms without the required shell, it is usually sufficient to
+create an approriate config.h file in the src/ directory with correct
+values for the following #defines (this would work for AmigaOS) :
+
+#define __BIG_ENDIAN__ 1
+#define __LITTLE_ENDIAN__ 0
+#define CAN_READ_WRITE_x86_IEEE 0
+
+
+CONTACTS
+--------
+
+libsndfile was written by Erik de Castro Lopo ([email protected]).
+The libsndfile home page is at :
+
+ http://www.zip.com.au/~erikd/libsndfile/
+
--- /dev/null
+++ b/common/libsndfile/TODO
@@ -1,0 +1,48 @@
+Here's a list of what I ([email protected]) think needs to be done. The
+list is by no means comprehensive and people are encouraged to email
+me with suggestions.
+
+ o Add pipe in/out capabilities. libsndfile should be able to read
+ its input from a pipe and write its output to a pipe.
+
+ o Add autoconf type tests for IEEE read/write compatibility.
+
+ o Add checks of the error state after fseek???? Use ferror ().
+
+ o Modify tests/lossy_comp_test.c to add tests for stereo files.
+
+ o Testing compilation and correctness on more platforms.
+
+ o Improve testing routines. Must test all combinations of inputs
+ and outputs.
+
+ o Test sf_seek function on write???
+
+ o 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.
+
+ o Add support for accessing sound formats with multiple audio
+ data sections (ie samples within tracker files, Soundfont II and
+ multi-sample sampler formats).
+
+ o Add an interface to allow reading and writing of sample loop points
+ and other info within AIFF and other file formats. This must be a
+ general solution.
+
+ o Improve documentation. Is HTML documentation good enough?
+
+ o Look into the possibility of optional sample rate convert on file
+ read.
+
+As I am the person who knows libsndfile best, I can probably implement
+any new features faster than anybody else (and you can spend your time
+writing applications with libsndfile). All I need is some
+documentation and some sample files. Please contact me before emailing
+me documentation and sample files. I would much rather pull them off
+the web than have them clogging up my email inbox.
+
+
--- /dev/null
+++ b/common/libsndfile/Win32/Makefile.am
@@ -1,0 +1,3 @@
+EXTRA_DIST = README-Win32.txt README-Win32.txt.old \
+ config.h unistd.h
+
--- /dev/null
+++ b/common/libsndfile/Win32/Makefile.in
@@ -1,0 +1,185 @@
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_alias = @build_alias@
+build_triplet = @build@
+host_alias = @host_alias@
+host_triplet = @host@
+target_alias = @target_alias@
+target_triplet = @target@
+AS = @AS@
+CC = @CC@
+DLLTOOL = @DLLTOOL@
+LD = @LD@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+MAKEINFO = @MAKEINFO@
+NM = @NM@
+OBJDUMP = @OBJDUMP@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+VERSION = @VERSION@
+subdirs = @subdirs@
+
+EXTRA_DIST = README-Win32.txt README-Win32.txt.old config.h unistd.h
+
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../src/config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps Win32/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = Win32
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am:
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am:
+uninstall: uninstall-am
+all-am: Makefile
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am
+ -rm -f libtool
+
+distclean: distclean-am
+
+maintainer-clean-am: 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."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: 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
+
+
+# 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.
+.NOEXPORT:
--- /dev/null
+++ b/common/libsndfile/Win32/README-Win32.txt
@@ -1,0 +1,89 @@
+This is the readme-Win32.txt file associated with the LibSndFile
+library. It describes how the included workspace and project
+was created for Microsoft Visual C++ developer's studio (MSVC),
+version 5.0. Skip to point 7 if you wish to create a new
+project for building an executable.
+
+1. Extracted libsndfile.zip to d:\files\msvc\
+
+2. It created (replace X.Y.Z with the libsndfile version number)
+ d:\files\msvc\libsndfile-X.Y.Z\Win32 *
+ d:\files\msvc\libsndfile-X.Y.Z\src *
+ d:\files\msvc\libsndfile-X.Y.Z\tests *
+ d:\files\msvc\libsndfile-X.Y.Z\examples
+ d:\files\msvc\libsndfile-X.Y.Z\doc
+ d:\files\msvc\libsndfile-X.Y.Z\m4
+ d:\files\msvc\libsndfile-X.Y.Z\MacOS
+
+ * are needed for this example
+
+3. From MSVC:New->Workspace, I created LibSndFileWorkspace at:
+ d:\files\msvc\libsndfile-X.Y.Z\Win32\
+ (workspace files have the extension .dsw)
+
+3. In MSVC, rt-click on "Workspace LibSndFileWorkspace" and add project:
+ Project type: Win32 Static Library
+ Project Name: LibSndFile
+ Project Location: D:\files\msvc\libsndfile-X.Y.Z\Win32
+ Select button: 'Add to current workspace'
+ Platforms: Win32
+
+4. Rt-click newly formed "LibSndFile files" and add files:
+ d:\files\msvc\libsndfile-X.Y.Z\src\*.*
+ d:\files\msvc\libsndfile-X.Y.Z\src\Gsm610\*.*
+ d:\files\msvc\libsndfile-X.Y.Z\src\G72x\*.*
+
+5. Rt-click 'LibSndFile files' and go to Settings
+ a. Select all configurations on the left hand side
+ b. Then select C/C++/Preprocessor and add
+ "..\" (no quotes) to 'Additional include directories'
+ (This allows ..Win32\config.h and unistd.h to be found.)
+
+6. At this point you should be able to build the library. The output
+ will be found in ..\Win32\LibSndFile\Debug\LibSndFile.lib. You can
+ change the LibSndFile project to Release and a similar release
+ path will be created.
+
+The following describes how to add an application project to the
+workspace. You may add as many as you wish. In general, you will
+need one project for each executable you want to create.
+
+7. Rt-click LibSndFileWorkspace and select 'Add project'
+ Project type: Win32 Console Application
+ Project Name: sfversion
+ Location: d:\files\msvc\libsndfile-X.Y.Z\Win32\sfversion
+ Select button: 'Add to current workspace'
+ Platforms: Win32
+
+ Notes:
+ - MSVC will create a directory ..\Win32\sfversion\
+ - MSVC will create the file sfversion.dsp in this directory
+
+8. Rt-click 'sfversion files' and add file:
+ d:\files\msvc\libsndfile-X.Y.Z\tests\sfversion.c
+
+9. Rt-click 'sfversion files' and go to Settings:
+ a. Select 'All configurations' on the left hand side
+ b. Then select C/C++/Preprocessor and add
+ "..\..\src,..\" (no quotes) to 'Additional include directories'
+
+9. Rt-click 'sfversion files' and go to Settings:
+ a. Select 'Debug Configuration' on left hand side
+ b. Then select Link tab and add
+ "..\LibSndFile\Debug\LibSndFile.lib " (no quotes) to
+ the list of 'Object/library modules'. Leave a space between new
+ addition existing lib files.
+
+10. Repeat above for Release build adding Release path info.
+
+11. Build your application, it should link and create an .exe
+
+Final notes:
+
+Files created during build by msvc but are not needed for archive:
+*ncb *.plg *.opt *.obj *.idb *.pch *.lib *.exe
+
+Files associated with LibSndFile but not used by msvc:
+Makefile.in
+Makefile.am
+ - End -
--- /dev/null
+++ b/common/libsndfile/Win32/README-Win32.txt.old
@@ -1,0 +1,32 @@
+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
--- /dev/null
+++ b/common/libsndfile/Win32/config.h
@@ -1,0 +1,82 @@
+/* src/config.h. Generated automatically by configure. */
+/* src/config.h.in. Generated automatically from configure.in by autoheader. */
+
+/* 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 if the processor can read and write Intel x86 32 bit floats. */
+/* Otherwise set it to 0. */
+#define CAN_READ_WRITE_x86_IEEE 1
+
+/* The number of bytes in a double. */
+#define SIZEOF_DOUBLE 8
+
+/* The number of bytes in a float. */
+#define SIZEOF_FLOAT 4
+
+/* The number of bytes in a int. */
+#define SIZEOF_INT 4
+
+/* The number of bytes in a long. */
+#define SIZEOF_LONG 4
+
+/* The number of bytes in a short. */
+#define SIZEOF_SHORT 2
+
+/* 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 ftell function. */
+#define HAVE_FTELL 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 <endian.h> header file. */
+#define HAVE_ENDIAN_H 0
+
+/* Name of package */
+#define PACKAGE "libsndfile"
+
+/* Version number of package */
+#define VERSION "0.0.21"
+
--- /dev/null
+++ b/common/libsndfile/Win32/libsndfile.dsp
@@ -1,0 +1,304 @@
+# Microsoft Developer Studio Project File - Name="libsndfile" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Static Library" 0x0104
+
+CFG=libsndfile - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "libsndfile.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "libsndfile.mak" CFG="libsndfile - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "libsndfile - Win32 Release" (based on "Win32 (x86) Static Library")
+!MESSAGE "libsndfile - Win32 Debug" (based on "Win32 (x86) Static Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "libsndfile - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "..\win32" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c
+# ADD BASE RSC /l 0x413 /d "NDEBUG"
+# ADD RSC /l 0x413 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ELSEIF "$(CFG)" == "libsndfile - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "..\win32" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x413 /d "_DEBUG"
+# ADD RSC /l 0x413 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LIB32=link.exe -lib
+# ADD BASE LIB32 /nologo
+# ADD LIB32 /nologo
+
+!ENDIF
+
+# Begin Target
+
+# Name "libsndfile - Win32 Release"
+# Name "libsndfile - Win32 Debug"
+# Begin Group "Source Files"
+
+# 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\common.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\GSM610\decode.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\G72x\g721.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\G72x\g723_16.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\G72x\g723_24.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\G72x\g723_40.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\G72x\g72x.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\GSM610\gsm_create.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\GSM610\gsm_decode.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\GSM610\gsm_destroy.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\GSM610\gsm_encode.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\GSM610\gsm_option.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\GSM610\long_term.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\GSM610\lpc.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\newpcm.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\paf.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\pcm.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\GSM610\preprocess.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\raw.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\GSM610\rpe.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\ulaw.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\wav.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\wav_float.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\wav_gsm610.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\wav_ima_adpcm.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\wav_ms_adpcm.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\src\alaw.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\au.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\common.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\GSM610\config.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\config.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\G72x\g72x.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\GSM610\gsm.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\pcm.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\G72x\private.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\GSM610\private.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\GSM610\proto.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\sfendian.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\sndfile.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\ulaw.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\unistd.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\GSM610\unproto.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\src\wav.h
+# End Source File
+# End Group
+# End Target
+# End Project
--- /dev/null
+++ b/common/libsndfile/Win32/libsndfile.dsw
@@ -1,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "libsndfile"=".\libsndfile.dsp" - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
--- /dev/null
+++ b/common/libsndfile/Win32/unistd.h
@@ -1,0 +1,44 @@
+/*
+** Copyright (C) 1999 Albert Faber
+**
+** 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.
+*/
+
+/* A hack file in order to compile the libsndfile package for win32 systems
+** Define the things that Bill and his fellows forgot to define
+*/
+
+#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
--- /dev/null
+++ b/common/libsndfile/acconfig.h
@@ -1,0 +1,288 @@
+/* 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 if the processor can read and write Intel x86 32 bit floats. */
+/* Otherwise set it to 0. */
+#undef CAN_READ_WRITE_x86_IEEE
+
--- /dev/null
+++ b/common/libsndfile/aclocal.m4
@@ -1,0 +1,533 @@
+dnl aclocal.m4 generated automatically by aclocal 1.4
+
+dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+dnl PARTICULAR PURPOSE.
+
+# 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.
+
+# serial 1
+
+dnl Usage:
+dnl AM_INIT_AUTOMAKE(package,version, [no-define])
+
+AC_DEFUN(AM_INIT_AUTOMAKE,
+[AC_REQUIRE([AC_PROG_INSTALL])
+PACKAGE=[$1]
+AC_SUBST(PACKAGE)
+VERSION=[$2]
+AC_SUBST(VERSION)
+dnl test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+ifelse([$3],,
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
+AC_REQUIRE([AM_SANITY_CHECK])
+AC_REQUIRE([AC_ARG_PROGRAM])
+dnl FIXME This is truly gross.
+missing_dir=`cd $ac_aux_dir && pwd`
+AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
+AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
+AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
+AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
+AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
+AC_REQUIRE([AC_PROG_MAKE_SET])])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+AC_DEFUN(AM_SANITY_CHECK,
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+ if test "[$]*" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftestfile`
+ fi
+ if test "[$]*" != "X $srcdir/configure conftestfile" \
+ && test "[$]*" != "X conftestfile $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "[$]2" = conftestfile
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+rm -f conftest*
+AC_MSG_RESULT(yes)])
+
+dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
+dnl The program must properly implement --version.
+AC_DEFUN(AM_MISSING_PROG,
+[AC_MSG_CHECKING(for working $2)
+# 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.
+if ($2 --version) < /dev/null > /dev/null 2>&1; then
+ $1=$2
+ AC_MSG_RESULT(found)
+else
+ $1="$3/missing $2"
+ AC_MSG_RESULT(missing)
+fi
+AC_SUBST($1)])
+
+# Like AC_CONFIG_HEADER, but automatically create stamp file.
+
+AC_DEFUN(AM_CONFIG_HEADER,
+[AC_PREREQ([2.12])
+AC_CONFIG_HEADER([$1])
+dnl When config.status generates a header, we must update the stamp-h file.
+dnl This file resides in the same directory as the config header
+dnl that is generated. We must strip everything past the first ":",
+dnl and everything past the last "/".
+AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
+ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
+<<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
+<<am_indx=1
+for am_file in <<$1>>; do
+ case " <<$>>CONFIG_HEADERS " in
+ *" <<$>>am_file "*<<)>>
+ echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
+ ;;
+ esac
+ am_indx=`expr "<<$>>am_indx" + 1`
+done<<>>dnl>>)
+changequote([,]))])
+
+
+# serial 40 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 $host \
+|| 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"
+
+# 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
+])
+
+AC_DEFUN(AC_LIBTOOL_SETUP,
+[AC_PREREQ(2.13)dnl
+AC_REQUIRE([AC_ENABLE_SHARED])dnl
+AC_REQUIRE([AC_ENABLE_STATIC])dnl
+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_NM])dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+dnl
+
+# 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"])
+ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
+[libtool_flags="$libtool_flags --enable-win32-dll"])
+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"
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+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
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ 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])])
+ 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"
+ fi
+ ;;
+
+ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
+[*-*-cygwin* | *-*-mingw*)
+ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+ AC_CHECK_TOOL(AS, as, false)
+ AC_CHECK_TOOL(OBJDUMP, objdump, false)
+ ;;
+])
+esac
+])
+
+# AC_LIBTOOL_DLOPEN - enable checks for dlopen support
+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_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_ARG_ENABLE(shared,
+changequote(<<, >>)dnl
+<< --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
+changequote([, ])dnl
+[p=${PACKAGE-default}
+case "$enableval" in
+yes) enable_shared=yes ;;
+no) enable_shared=no ;;
+*)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+ for pkg in $enableval; do
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$ac_save_ifs"
+ ;;
+esac],
+enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
+])
+
+# AC_DISABLE_SHARED - set the default shared flag to --disable-shared
+AC_DEFUN(AC_DISABLE_SHARED, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_SHARED(no)])
+
+# AC_ENABLE_STATIC - implement the --enable-static flag
+# 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_ARG_ENABLE(static,
+changequote(<<, >>)dnl
+<< --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
+changequote([, ])dnl
+[p=${PACKAGE-default}
+case "$enableval" in
+yes) enable_static=yes ;;
+no) enable_static=no ;;
+*)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+ for pkg in $enableval; do
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$ac_save_ifs"
+ ;;
+esac],
+enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
+])
+
+# AC_DISABLE_STATIC - set the default static flag to --disable-static
+AC_DEFUN(AC_DISABLE_STATIC, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_STATIC(no)])
+
+
+# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
+# 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_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
+yes) enable_fast_install=yes ;;
+no) enable_fast_install=no ;;
+*)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+ for pkg in $enableval; do
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$ac_save_ifs"
+ ;;
+esac],
+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_ENABLE_FAST_INSTALL(no)])
+
+# AC_PROG_LD - find the path to the GNU or non-GNU linker
+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)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+ac_prog=ld
+if test "$ac_cv_prog_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
+ # Accept absolute paths.
+changequote(,)dnl
+ [\\/]* | [A-Za-z]:[\\/]*)
+ re_direlt='/[^/][^/]*/\.\./'
+changequote([,])dnl
+ # 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
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ AC_MSG_CHECKING([for GNU ld])
+else
+ AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(ac_cv_path_LD,
+[if test -z "$LD"; then
+ IFS="${IFS= }"; ac_save_ifs="$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"
+ # 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
+ test "$with_gnu_ld" != no && break
+ else
+ test "$with_gnu_ld" != yes && break
+ fi
+ fi
+ done
+ IFS="$ac_save_ifs"
+else
+ ac_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$ac_cv_path_LD"
+if test -n "$LD"; then
+ AC_MSG_RESULT($LD)
+else
+ AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_SUBST(LD)
+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,
+[# 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
+else
+ ac_cv_prog_gnu_ld=no
+fi])
+])
+
+# 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,
+[if test -n "$NM"; then
+ # Let the user override the test.
+ ac_cv_path_NM="$NM"
+else
+ IFS="${IFS= }"; ac_save_ifs="$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
+ # 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"
+ 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"
+ break
+ else
+ ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/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
+fi])
+NM="$ac_cv_path_NM"
+AC_MSG_RESULT([$NM])
+AC_SUBST(NM)
+])
+
+# AC_CHECK_LIBM - check for math library
+AC_DEFUN(AC_CHECK_LIBM,
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case "$host" in
+*-*-beos* | *-*-cygwin*)
+ # These system don't have libm
+ ;;
+*-ncr-sysv4.3*)
+ AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+ AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
+ ;;
+*)
+ AC_CHECK_LIB(m, main, LIBM="-lm")
+ ;;
+esac
+])
+
+# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
+# the libltdl convenience library, adds --enable-ltdl-convenience to
+# the configure arguments. Note that LIBLTDL is not AC_SUBSTed, nor
+# is AC_CONFIG_SUBDIRS called. If DIR is not provided, it is assumed
+# to be `${top_builddir}/libltdl'. Make sure you start DIR with
+# '${top_builddir}/' (note the single quotes!) if your package is not
+# flat, and, if you're not using automake, define top_builddir as
+# appropriate in the Makefiles.
+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=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdlc.la
+ INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl'])
+])
+
+# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
+# the libltdl installable library, and adds --enable-ltdl-install to
+# the configure arguments. Note that LIBLTDL is not AC_SUBSTed, nor
+# is AC_CONFIG_SUBDIRS called. If DIR is not provided, it is assumed
+# to be `${top_builddir}/libltdl'. Make sure you start DIR with
+# '${top_builddir}/' (note the single quotes!) if your package is not
+# flat, and, if you're not using automake, define top_builddir as
+# appropriate 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_CHECK_LIB(ltdl, main,
+ [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
+ [if test x"$enable_ltdl_install" = xno; then
+ AC_MSG_WARN([libltdl not installed, but installation disabled])
+ else
+ enable_ltdl_install=yes
+ fi
+ ])
+ if test x"$enable_ltdl_install" = x"yes"; then
+ ac_configure_args="$ac_configure_args --enable-ltdl-install"
+ LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdl.la
+ INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl'])
+ else
+ ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
+ LIBLTDL="-lltdl"
+ INCLTDL=
+ fi
+])
+
+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
+
+dnl This is just to silence aclocal about the macro not being used
+ifelse([AC_DISABLE_FAST_INSTALL])dnl
+
--- /dev/null
+++ b/common/libsndfile/config.guess
@@ -1,0 +1,1087 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999
+# Free Software Foundation, Inc.
+#
+# 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
+# (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.
+
+# Written by Per Bothner <[email protected]>.
+# The master version of this file is at the FSF in /home/gd/gnu/lib.
+# Please send patches to the Autoconf mailing list <[email protected]>.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# 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).
+#
+
+# 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
+fi
+
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# ([email protected] 8/24/94.)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+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_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
+ alpha:OSF1:*:*)
+ if test $UNAME_RELEASE = "V4.0"; then
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ fi
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ cat <<EOF >$dummy.s
+ .globl main
+ .ent main
+main:
+ .frame \$30,0,\$26,0
+ .prologue 0
+ .long 0x47e03d80 # implver $0
+ lda \$2,259
+ .long 0x47e20c21 # amask $2,$1
+ srl \$1,8,\$2
+ sll \$2,2,\$2
+ sll \$0,3,\$0
+ addl \$1,\$0,\$0
+ addl \$2,\$0,\$0
+ ret \$31,(\$26),1
+ .end main
+EOF
+ $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
+ if test "$?" = 0 ; then
+ ./$dummy
+ case "$?" in
+ 7)
+ UNAME_MACHINE="alpha"
+ ;;
+ 15)
+ UNAME_MACHINE="alphaev5"
+ ;;
+ 14)
+ UNAME_MACHINE="alphaev56"
+ ;;
+ 10)
+ UNAME_MACHINE="alphapca56"
+ ;;
+ 16)
+ UNAME_MACHINE="alphaev6"
+ ;;
+ esac
+ fi
+ rm -f $dummy.s $dummy
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ exit 0 ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit 0 ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit 0 ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-cbm-sysv4
+ exit 0;;
+ amiga:NetBSD:*:*)
+ echo m68k-cbm-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ amiga:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit 0 ;;
+ arc64:OpenBSD:*:*)
+ echo mips64el-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ arc:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ hkmips:OpenBSD:*:*)
+ echo mips-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ pmax:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sgi:OpenBSD:*:*)
+ echo mips-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ wgrisc:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit 0;;
+ arm32:NetBSD:*:*)
+ echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ exit 0 ;;
+ SR2?01:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit 0;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # [email protected] (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit 0 ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit 0 ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ i86pc:SunOS:5.*:*)
+ echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit 0 ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit 0 ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit 0 ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit 0 ;;
+ atari*:NetBSD:*:*)
+ echo m68k-atari-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ atari*:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit 0 ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit 0 ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit 0 ;;
+ sun3*:NetBSD:*:*)
+ echo m68k-sun-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sun3*:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mac68k:NetBSD:*:*)
+ echo m68k-apple-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mac68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme88k:OpenBSD:*:*)
+ echo m88k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit 0 ;;
+ macppc:NetBSD:*:*)
+ echo powerpc-apple-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit 0 ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit 0 ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+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
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit 0 ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit 0 ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit 0 ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit 0 ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit 0 ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
+ -o ${TARGET_BINARY_INTERFACE}x = x ] ; then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit 0 ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit 0 ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit 0 ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit 0 ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit 0 ;;
+ ????????: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:*:*)
+ echo i386-ibm-aix
+ exit 0 ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $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
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit 0 ;;
+ *:AIX:*:4)
+ 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
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=4.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit 0 ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit 0 ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit 0 ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit 0 ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit 0 ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit 0 ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit 0 ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit 0 ;;
+ 9000/[34678]??:HP-UX:*:*)
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ sed 's/^ //' << EOF >$dummy.c
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ ($CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
+ rm -f $dummy.c $dummy
+ esac
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit 0 ;;
+ 3050*:HI-UX:*:*)
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
+ rm -f $dummy.c $dummy
+ echo unknown-hitachi-hiuxwe2
+ exit 0 ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit 0 ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit 0 ;;
+ *9??*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit 0 ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit 0 ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit 0 ;;
+ i?86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit 0 ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit 0 ;;
+ hppa*:OpenBSD:*:*)
+ echo hppa-unknown-openbsd
+ exit 0 ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit 0 ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit 0 ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit 0 ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit 0 ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit 0 ;;
+ CRAY*X-MP:*:*:*)
+ echo xmp-cray-unicos
+ exit 0 ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE}
+ 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/
+ exit 0 ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE}
+ exit 0 ;;
+ CRAY*T3E:*:*:*)
+ echo t3e-cray-unicosmk${UNAME_RELEASE}
+ exit 0 ;;
+ CRAY-2:*:*:*)
+ echo cray2-cray-unicos
+ exit 0 ;;
+ F300:UNIX_System_V:*:*)
+ 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}"
+ exit 0 ;;
+ F301:UNIX_System_V:*:*)
+ echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
+ exit 0 ;;
+ hp3[0-9][05]:NetBSD:*:*)
+ echo m68k-hp-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ hp300:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ i?86:BSD/386:*:* | i?86:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ *:FreeBSD:*:*)
+ if test -x /usr/bin/objformat; then
+ if test "elf" = "`/usr/bin/objformat`"; then
+ echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'`
+ exit 0
+ fi
+ fi
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit 0 ;;
+ *:NetBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ exit 0 ;;
+ *:OpenBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ exit 0 ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit 0 ;;
+ i*:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ 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
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i386-pc-interix
+ exit 0 ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit 0 ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+ exit 0 ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ *:GNU:*:*)
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit 0 ;;
+ *:Linux:*:*)
+ # uname on the ARM produces all sorts of strangeness, and we need to
+ # filter it out.
+ case "$UNAME_MACHINE" in
+ armv*) UNAME_MACHINE=$UNAME_MACHINE ;;
+ arm* | sa110*) UNAME_MACHINE="arm" ;;
+ esac
+
+ # 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
+ s/[ ][ ]*/ /g
+ s/.*supported emulations: *//
+ s/ .*//
+ p'`
+ case "$ld_supported_emulations" in
+ i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;;
+ i?86coff) 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 ;;
+ m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
+ elf32ppc)
+ # 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 ;;
+ esac
+
+ if test "${UNAME_MACHINE}" = "alpha" ; then
+ sed 's/^ //' <<EOF >$dummy.s
+ .globl main
+ .ent main
+ main:
+ .frame \$30,0,\$26,0
+ .prologue 0
+ .long 0x47e03d80 # implver $0
+ lda \$2,259
+ .long 0x47e20c21 # amask $2,$1
+ srl \$1,8,\$2
+ sll \$2,2,\$2
+ sll \$0,3,\$0
+ addl \$1,\$0,\$0
+ addl \$2,\$0,\$0
+ ret \$31,(\$26),1
+ .end main
+EOF
+ LIBC=""
+ $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
+ if test "$?" = 0 ; then
+ ./$dummy
+ case "$?" in
+ 7)
+ UNAME_MACHINE="alpha"
+ ;;
+ 15)
+ UNAME_MACHINE="alphaev5"
+ ;;
+ 14)
+ UNAME_MACHINE="alphaev56"
+ ;;
+ 10)
+ UNAME_MACHINE="alphapca56"
+ ;;
+ 16)
+ UNAME_MACHINE="alphaev6"
+ ;;
+ 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
+ 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
+ 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
+#include <features.h>
+#ifdef __cplusplus
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+#ifdef __ELF__
+# ifdef __GLIBC__
+# if __GLIBC__ >= 2
+ printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
+# else
+ printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
+# endif
+# else
+ printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
+# endif
+#else
+ printf ("%s-${VENDOR}-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*:*)
+ echo i386-sequent-sysv4
+ exit 0 ;;
+ 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,
+ # I just have to hope. -- rms.
+ # 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.*:*)
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+ i?86:*:5:7*)
+ UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) && UNAME_MACHINE=i586
+ (/bin/uname -X|egrep '^Machine.*Pent.*II' >/dev/null) && UNAME_MACHINE=i686
+ (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) && UNAME_MACHINE=i585
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}${UNAME_VERSION}-sysv${UNAME_RELEASE}
+ exit 0 ;;
+ 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
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit 0 ;;
+ pc:*:*:*)
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i386.
+ echo i386-pc-msdosdjgpp
+ exit 0 ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit 0 ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit 0 ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit 0 ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ 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)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+ 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.*:*)
+ 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]*:*)
+ 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.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit 0 ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit 0 ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit 0 ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit 0 ;;
+ PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <[email protected]>
+ echo i586-unisys-sysv4
+ exit 0 ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <[email protected]>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit 0 ;;
+ *:*:*:FTX*)
+ # From [email protected].
+ echo i860-stratus-sysv4
+ exit 0 ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit 0 ;;
+ news*:NEWS-OS:*:6*)
+ echo mips-sony-newsos6
+ exit 0 ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit 0 ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit 0 ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit 0 ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit 0 ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ 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
+
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+#if !defined (ultrix)
+ printf ("vax-dec-bsd\n"); exit (0);
+#else
+ printf ("vax-dec-ultrix\n"); exit (0);
+#endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0
+rm -f $dummy.c $dummy
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit 0 ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit 0 ;;
+ c34*)
+ echo c34-convex-bsd
+ exit 0 ;;
+ c38*)
+ echo c38-convex-bsd
+ exit 0 ;;
+ c4*)
+ echo c4-convex-bsd
+ exit 0 ;;
+ esac
+fi
+
+#echo '(Unable to guess system type)' 1>&2
+
+exit 1
--- /dev/null
+++ b/common/libsndfile/config.sub
@@ -1,0 +1,1215 @@
+#! /bin/sh
+# Configuration validation subroutine script, version 1.1.
+# Copyright (C) 1991, 92-97, 1998, 1999 Free Software Foundation, Inc.
+# 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.
+#
+# 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
+# (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.
+
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# 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
+
+# First pass through any local machine types.
+case $1 in
+ *local*)
+ echo $1
+ exit 0
+ ;;
+ *)
+ ;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ linux-gnu*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple)
+ os=
+ basic_machine=$1
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=vxworks
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
+ | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
+ | 580 | i960 | h8300 \
+ | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
+ | alpha | alphaev[4-7] | alphaev56 | alphapca5[67] \
+ | we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \
+ | 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
+ | mips64orion | mips64orionel | mipstx39 | mipstx39el \
+ | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
+ | mips64vr5000 | miprs64vr5000el \
+ | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \
+ | thumb | d10v)
+ basic_machine=$basic_machine-unknown
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65)
+ ;;
+
+ # 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)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ vax-* | tahoe-* | i[34567]86-* | i860-* | 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-* \
+ | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \
+ | alpha-* | alphaev[4-7]-* | alphaev56-* | alphapca5[67]-* \
+ | 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-* \
+ | f301-* | armv*-* | t3e-* \
+ | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
+ | thumb-* | v850-* | d30v-* | tic30-* | c30-* )
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-cbm
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-cbm
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-cbm
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ cray2)
+ basic_machine=cray2-cray
+ os=-unicos
+ ;;
+ [ctj]90-cray)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+# I'm not sure what "Sysv32" means. Should this be sysv3.2?
+ i[34567]86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i[34567]86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i[34567]86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i[34567]86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ 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
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | *MiNT)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mipsel*-linux*)
+ basic_machine=mipsel-unknown
+ os=-linux-gnu
+ ;;
+ mips*-linux*)
+ basic_machine=mips-unknown
+ os=-linux-gnu
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ msdos)
+ basic_machine=i386-unknown
+ os=-msdos
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-corel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pentium | p5 | k5 | k6 | nexen)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexen-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-*)
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=rs6000-ibm
+ ;;
+ ppc) basic_machine=powerpc-unknown
+ ;;
+ ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sparclite-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=t3e-cray
+ os=-unicos
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ xmp)
+ basic_machine=xmp-cray
+ os=-unicos
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ mips)
+ if [ x$os = x-linux-gnu ]; then
+ basic_machine=mips-unknown
+ else
+ basic_machine=mips-mips
+ fi
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sparc | sparcv9)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ c4x*)
+ basic_machine=c4x-none
+ os=-coff
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases
+ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
+ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -rhapsody* | -openstep* | -oskit*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+ | -macos* | -mpw* | -magic* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -*MiNT)
+ os=-mint
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-corel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ # This also exists in the configure program, but was not the
+ # default.
+ # os=-sunos4
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f301-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -vxsim* | -vxworks*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -*MiNT)
+ vendor=atari
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
--- /dev/null
+++ b/common/libsndfile/configure
@@ -1,0 +1,2658 @@
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.13
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+ac_help="$ac_help
+ --enable-shared[=PKGS] build shared libraries [default=yes]"
+ac_help="$ac_help
+ --enable-static[=PKGS] build static libraries [default=yes]"
+ac_help="$ac_help
+ --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]"
+ac_help="$ac_help
+ --disable-libtool-lock avoid locking (might break parallel builds)"
+ac_help="$ac_help
+ --enable-justsrc only compile library sources "
+ac_help="$ac_help
+ --disable-gcc-pipe disable gcc -pipe option "
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ case "$ac_option" in
+ -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) ac_optarg= ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case "$ac_option" in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir="$ac_optarg" ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build="$ac_optarg" ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file="$ac_optarg" ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir="$ac_optarg" ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ eval "enable_${ac_feature}=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix="$ac_optarg" ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he)
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+ --cache-file=FILE cache test results in FILE
+ --help print this message
+ --no-create do not create output files
+ --quiet, --silent do not print \`checking...' messages
+ --version print the version of autoconf that created configure
+Directory and file names:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [same as prefix]
+ --bindir=DIR user executables in DIR [EPREFIX/bin]
+ --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
+ --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data in DIR
+ [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data in DIR
+ [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
+ --libdir=DIR object code libraries in DIR [EPREFIX/lib]
+ --includedir=DIR C header files in DIR [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
+ --infodir=DIR info documentation in DIR [PREFIX/info]
+ --mandir=DIR man documentation in DIR [PREFIX/man]
+ --srcdir=DIR find the sources in DIR [configure dir or ..]
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM
+ run sed PROGRAM on installed program names
+EOF
+ cat << EOF
+Host type:
+ --build=BUILD configure for building on BUILD [BUILD=HOST]
+ --host=HOST configure for HOST [guessed]
+ --target=TARGET configure for TARGET [TARGET=HOST]
+Features and packages:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR
+EOF
+ if test -n "$ac_help"; then
+ echo "--enable and --with options recognized:$ac_help"
+ fi
+ exit 0 ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host="$ac_optarg" ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir="$ac_optarg" ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir="$ac_optarg" ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir="$ac_optarg" ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir="$ac_optarg" ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir="$ac_optarg" ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir="$ac_optarg" ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir="$ac_optarg" ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix="$ac_optarg" ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix="$ac_optarg" ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix="$ac_optarg" ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name="$ac_optarg" ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir="$ac_optarg" ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir="$ac_optarg" ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site="$ac_optarg" ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir="$ac_optarg" ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir="$ac_optarg" ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target="$ac_optarg" ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers)
+ echo "configure generated by autoconf version 2.13"
+ exit 0 ;;
+
+ -with-* | --with-*)
+ ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_${ac_package}='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ eval "with_${ac_package}=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes="$ac_optarg" ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries="$ac_optarg" ;;
+
+ -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+ ;;
+
+ *)
+ if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+ echo "configure: warning: $ac_option: invalid host type" 1>&2
+ fi
+ if test "x$nonopt" != xNONE; then
+ { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+ fi
+ nonopt="$ac_option"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+ exec 6>/dev/null
+else
+ exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+ case "$ac_arg" in
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c) ;;
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+ ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+ esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set. These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}" = set; then LANG=C; export LANG; fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=src/sndfile.c
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_prog=$0
+ ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+ test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+ else
+ { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+ fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ echo "loading site script $ac_site_file"
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ echo "loading cache $cache_file"
+ . $cache_file
+else
+ echo "creating cache $cache_file"
+ > $cache_file
+fi
+
+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
+
+ac_exeext=
+ac_objext=o
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+ # Stardent Vistra SVR4 grep lacks -e, says [email protected].
+ if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+ ac_n= ac_c='
+' ac_t=' '
+ else
+ ac_n=-n ac_c= ac_t=
+ fi
+else
+ ac_n= ac_c='\c' ac_t=
+fi
+
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/install-sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f $ac_dir/install.sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+
+# Do some error checking and defaulting for the host and target type.
+# The inputs are:
+# configure --host=HOST --target=TARGET --build=BUILD NONOPT
+#
+# The rules are:
+# 1. You are not allowed to specify --host, --target, and nonopt at the
+# same time.
+# 2. Host defaults to nonopt.
+# 3. If nonopt is not specified, then host defaults to the current host,
+# as determined by config.guess.
+# 4. Target and build default to nonopt.
+# 5. If nonopt is not specified, then target and build default to host.
+
+# The aliases save the names the user supplied, while $host etc.
+# will get canonicalized.
+case $host---$target---$nonopt in
+NONE---*---* | *---NONE---* | *---*---NONE) ;;
+*) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;;
+esac
+
+
+# Make sure we can run config.sub.
+if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
+else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking host system type""... $ac_c" 1>&6
+echo "configure:586: checking host system type" >&5
+
+host_alias=$host
+case "$host_alias" in
+NONE)
+ case $nonopt in
+ NONE)
+ if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
+ else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
+ fi ;;
+ *) host_alias=$nonopt ;;
+ esac ;;
+esac
+
+host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
+host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+echo "$ac_t""$host" 1>&6
+
+echo $ac_n "checking target system type""... $ac_c" 1>&6
+echo "configure:607: checking target system type" >&5
+
+target_alias=$target
+case "$target_alias" in
+NONE)
+ case $nonopt in
+ NONE) target_alias=$host_alias ;;
+ *) target_alias=$nonopt ;;
+ esac ;;
+esac
+
+target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias`
+target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+echo "$ac_t""$target" 1>&6
+
+echo $ac_n "checking build system type""... $ac_c" 1>&6
+echo "configure:625: checking build system type" >&5
+
+build_alias=$build
+case "$build_alias" in
+NONE)
+ case $nonopt in
+ NONE) build_alias=$host_alias ;;
+ *) build_alias=$nonopt ;;
+ esac ;;
+esac
+
+build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
+build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+echo "$ac_t""$build" 1>&6
+
+test "$host_alias" != "$target_alias" &&
+ test "$program_prefix$program_suffix$program_transform_name" = \
+ 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# 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:660: 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
+else
+ IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
+ for ac_dir in $PATH; do
+ # Account for people who put trailing slashes in PATH elements.
+ case "$ac_dir/" in
+ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ if test -f $ac_dir/$ac_prog; then
+ if test $ac_prog = install &&
+ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ else
+ ac_cv_path_install="$ac_dir/$ac_prog -c"
+ break 2
+ fi
+ fi
+ done
+ ;;
+ esac
+ done
+ IFS="$ac_save_IFS"
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL="$ac_cv_path_install"
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL="$ac_install_sh"
+ fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
+echo "configure:713: checking whether build environment is sane" >&5
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftestfile`
+ fi
+ if test "$*" != "X $srcdir/configure conftestfile" \
+ && test "$*" != "X conftestfile $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ { echo "configure: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" 1>&2; exit 1; }
+ fi
+
+ test "$2" = conftestfile
+ )
+then
+ # Ok.
+ :
+else
+ { echo "configure: error: newly created file is older than distributed files!
+Check your system clock" 1>&2; exit 1; }
+fi
+rm -f conftest*
+echo "$ac_t""yes" 1>&6
+if test "$program_transform_name" = s,x,x,; then
+ program_transform_name=
+else
+ # Double any \ or $. echo might interpret backslashes.
+ cat <<\EOF_SED > conftestsed
+s,\\,\\\\,g; s,\$,$$,g
+EOF_SED
+ program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
+ rm -f conftestsed
+fi
+test "$program_prefix" != NONE &&
+ program_transform_name="s,^,${program_prefix},; $program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
+
+# sed with no file args requires a program.
+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:770: 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
+else
+ cat > conftestmake <<\EOF
+all:
+ @echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+ eval ac_cv_prog_make_${ac_make}_set=yes
+else
+ eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftestmake
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ SET_MAKE=
+else
+ echo "$ac_t""no" 1>&6
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+PACKAGE=libsndfile
+
+VERSION=0.0.22
+
+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; }
+fi
+cat >> confdefs.h <<EOF
+#define PACKAGE "$PACKAGE"
+EOF
+
+cat >> confdefs.h <<EOF
+#define VERSION "$VERSION"
+EOF
+
+
+
+missing_dir=`cd $ac_aux_dir && pwd`
+echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
+echo "configure:816: 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.
+if (aclocal --version) < /dev/null > /dev/null 2>&1; then
+ ACLOCAL=aclocal
+ echo "$ac_t""found" 1>&6
+else
+ ACLOCAL="$missing_dir/missing aclocal"
+ echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
+echo "configure:829: 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.
+if (autoconf --version) < /dev/null > /dev/null 2>&1; then
+ AUTOCONF=autoconf
+ echo "$ac_t""found" 1>&6
+else
+ AUTOCONF="$missing_dir/missing autoconf"
+ echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working automake""... $ac_c" 1>&6
+echo "configure:842: 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.
+if (automake --version) < /dev/null > /dev/null 2>&1; then
+ AUTOMAKE=automake
+ echo "$ac_t""found" 1>&6
+else
+ AUTOMAKE="$missing_dir/missing automake"
+ echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
+echo "configure:855: 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.
+if (autoheader --version) < /dev/null > /dev/null 2>&1; then
+ AUTOHEADER=autoheader
+ echo "$ac_t""found" 1>&6
+else
+ AUTOHEADER="$missing_dir/missing autoheader"
+ echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
+echo "configure:868: 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.
+if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
+ MAKEINFO=makeinfo
+ echo "$ac_t""found" 1>&6
+else
+ MAKEINFO="$missing_dir/missing makeinfo"
+ echo "$ac_t""missing" 1>&6
+fi
+
+
+
+
+SHARED_VERSION_INFO="0:8:0"
+
+
+
+
+
+
+# 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:893: 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
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # 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_CC="gcc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$CC"; then
+ # 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:923: 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
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_prog_rejected=no
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# -gt 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ set dummy "$ac_dir/$ac_word" "$@"
+ shift
+ ac_cv_prog_CC="$@"
+ fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test -z "$CC"; then
+ case "`uname -s`" in
+ *win32* | *WIN32*)
+ # 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:974: 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
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # 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_CC="cl"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+ ;;
+ esac
+ fi
+ test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:1006: 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.
+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 1017 "configure"
+#include "confdefs.h"
+
+main(){return(0);}
+EOF
+if { (eval echo configure:1022: \"$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
+ ac_cv_prog_cc_cross=no
+ else
+ ac_cv_prog_cc_cross=yes
+ fi
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ ac_cv_prog_cc_works=no
+fi
+rm -fr 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
+
+echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
+if test $ac_cv_prog_cc_works = no; then
+ { 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:1048: 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:1053: 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
+ cat > conftest.c <<EOF
+#ifdef __GNUC__
+ yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1062: \"$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
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
+if test $ac_cv_prog_gcc = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+
+ac_test_CFLAGS="${CFLAGS+set}"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS=
+echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:1081: 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
+ echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+ ac_cv_prog_cc_g=yes
+else
+ ac_cv_prog_cc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS="$ac_save_CFLAGS"
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+
+# 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:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# 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:1124: 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
+else
+ IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
+ for ac_dir in $PATH; do
+ # Account for people who put trailing slashes in PATH elements.
+ case "$ac_dir/" in
+ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ if test -f $ac_dir/$ac_prog; then
+ if test $ac_prog = install &&
+ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ else
+ ac_cv_path_install="$ac_dir/$ac_prog -c"
+ break 2
+ fi
+ fi
+ done
+ ;;
+ esac
+ done
+ IFS="$ac_save_IFS"
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL="$ac_cv_path_install"
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL="$ac_install_sh"
+ fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
+echo "configure:1178: 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
+else
+ cat > conftestmake <<\EOF
+all:
+ @echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+ eval ac_cv_prog_make_${ac_make}_set=yes
+else
+ eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftestmake
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ SET_MAKE=
+else
+ echo "$ac_t""no" 1>&6
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
+echo "configure:1205: 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
+ rm -f conftestdata
+if ln -s X conftestdata 2>/dev/null
+then
+ rm -f conftestdata
+ ac_cv_prog_LN_S="ln -s"
+else
+ ac_cv_prog_LN_S=ln
+fi
+fi
+LN_S="$ac_cv_prog_LN_S"
+if test "$ac_cv_prog_LN_S" = "ln -s"; then
+ echo "$ac_t""yes" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+# 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
+yes) enable_shared=yes ;;
+no) enable_shared=no ;;
+*)
+ enable_shared=no
+ # Look at the argument we got. We use all the common list separators.
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+ for pkg in $enableval; do
+ if test "X$pkg" = "X$p"; then
+ enable_shared=yes
+ fi
+ done
+ IFS="$ac_save_ifs"
+ ;;
+esac
+else
+ enable_shared=yes
+fi
+
+# Check whether --enable-static or --disable-static was given.
+if test "${enable_static+set}" = set; then
+ enableval="$enable_static"
+ p=${PACKAGE-default}
+case "$enableval" in
+yes) enable_static=yes ;;
+no) enable_static=no ;;
+*)
+ enable_static=no
+ # Look at the argument we got. We use all the common list separators.
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+ for pkg in $enableval; do
+ if test "X$pkg" = "X$p"; then
+ enable_static=yes
+ fi
+ done
+ IFS="$ac_save_ifs"
+ ;;
+esac
+else
+ enable_static=yes
+fi
+
+# Check whether --enable-fast-install or --disable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then
+ enableval="$enable_fast_install"
+ p=${PACKAGE-default}
+case "$enableval" in
+yes) enable_fast_install=yes ;;
+no) enable_fast_install=no ;;
+*)
+ enable_fast_install=no
+ # Look at the argument we got. We use all the common list separators.
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+ for pkg in $enableval; do
+ if test "X$pkg" = "X$p"; then
+ enable_fast_install=yes
+ fi
+ done
+ IFS="$ac_save_ifs"
+ ;;
+esac
+else
+ 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:1297: 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"
+ test "$withval" = no || with_gnu_ld=yes
+else
+ with_gnu_ld=no
+fi
+
+ac_prog=ld
+if test "$ac_cv_prog_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:1336: checking for ld used by GCC" >&5
+ ac_prog=`($CC -print-prog-name=ld) 2>&5`
+ case "$ac_prog" in
+ # Accept absolute paths.
+ [\\/]* | [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
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we aren't using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+elif test "$with_gnu_ld" = yes; then
+ echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
+echo "configure:1360: checking for GNU ld" >&5
+else
+ echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
+echo "configure:1363: checking for non-GNU ld" >&5
+fi
+if eval "test \"`echo '$''{'ac_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-:}"
+ 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"
+ # 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
+ test "$with_gnu_ld" != no && break
+ else
+ test "$with_gnu_ld" != yes && break
+ fi
+ fi
+ done
+ IFS="$ac_save_ifs"
+else
+ ac_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$ac_cv_path_LD"
+if test -n "$LD"; then
+ echo "$ac_t""$LD" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+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:1399: checking if the linker ($LD) is GNU ld" >&5
+if eval "test \"`echo '$''{'ac_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
+else
+ ac_cv_prog_gnu_ld=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6
+
+
+echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
+echo "configure:1415: checking for BSD-compatible nm" >&5
+if eval "test \"`echo '$''{'ac_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"
+else
+ IFS="${IFS= }"; ac_save_ifs="$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
+ # 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"
+ 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"
+ break
+ else
+ ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/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
+fi
+fi
+
+NM="$ac_cv_path_NM"
+echo "$ac_t""$NM" 1>&6
+
+
+
+# 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"
+
+
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+ enableval="$enable_libtool_lock"
+ :
+fi
+
+test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock"
+test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case "$host" in
+*-*-irix6*)
+ # Find out which ABI we are using.
+ echo '#line 1475 "configure"' > conftest.$ac_ext
+ if { (eval echo configure:1476: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ case "`/usr/bin/file conftest.o`" in
+ *32-bit*)
+ LD="${LD-ld} -32"
+ ;;
+ *N32*)
+ LD="${LD-ld} -n32"
+ ;;
+ *64-bit*)
+ LD="${LD-ld} -64"
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+
+*-*-sco3.2v5*)
+ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -belf"
+ echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
+echo "configure:1497: 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 1502 "configure"
+#include "confdefs.h"
+
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:1509: \"$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
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ lt_cv_cc_needs_belf=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6
+ 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"
+ fi
+ ;;
+
+
+esac
+
+
+# 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"
+ ;;
+ *)
+ # `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'
+ ;;
+ esac >> confcache
+if cmp -s $cache_file confcache; then
+ :
+else
+ if test -w $cache_file; then
+ echo "updating cache $cache_file"
+ cat confcache > $cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+
+# 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 $host \
+|| { echo "configure: error: libtool configure failed" 1>&2; exit 1; }
+
+# Reload cache, that may have been modified by ltconfig
+if test -r "$cache_file"; then
+ echo "loading cache $cache_file"
+ . $cache_file
+else
+ echo "creating cache $cache_file"
+ > $cache_file
+fi
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+# Redirect the config.log output again, so that the ltconfig log is not
+# clobbered by the next message.
+exec 5>>./config.log
+
+
+echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+echo "configure:1612: 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 1627 "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:1633: \"$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 1644 "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:1650: \"$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 1661 "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:1667: \"$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
+
+echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
+echo "configure:1692: 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 1697 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1705: \"$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*
+ ac_cv_header_stdc=yes
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+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 1722 "configure"
+#include "confdefs.h"
+#include <string.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "memchr" >/dev/null 2>&1; then
+ :
+else
+ rm -rf conftest*
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+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 1740 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "free" >/dev/null 2>&1; then
+ :
+else
+ rm -rf conftest*
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+if test "$cross_compiling" = yes; then
+ :
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1761 "configure"
+#include "confdefs.h"
+#include <ctype.h>
+#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int main () { int i; for (i = 0; i < 256; i++)
+if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
+exit (0); }
+
+EOF
+if { (eval echo configure:1772: \"$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_header_stdc=no
+fi
+rm -fr conftest*
+fi
+
+fi
+fi
+
+echo "$ac_t""$ac_cv_header_stdc" 1>&6
+if test $ac_cv_header_stdc = yes; then
+ cat >> confdefs.h <<\EOF
+#define STDC_HEADERS 1
+EOF
+
+fi
+
+
+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:1800: 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 1805 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1810: \"$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
+
+
+
+echo $ac_n "checking for size_t""... $ac_c" 1>&6
+echo "configure:1839: 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
+ cat > conftest.$ac_ext <<EOF
+#line 1844 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+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
+ rm -rf conftest*
+ ac_cv_type_size_t=yes
+else
+ rm -rf conftest*
+ ac_cv_type_size_t=no
+fi
+rm -f conftest*
+
+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
+
+fi
+
+echo $ac_n "checking for off_t""... $ac_c" 1>&6
+echo "configure:1872: 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
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1877 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+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
+else
+ rm -rf conftest*
+ ac_cv_type_off_t=no
+fi
+rm -f conftest*
+
+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
+EOF
+
+fi
+
+
+echo $ac_n "checking size of short""... $ac_c" 1>&6
+echo "configure:1906: 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
+ if test "$cross_compiling" = yes; then
+ ac_cv_sizeof_short=2
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1914 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+main()
+{
+ FILE *f=fopen("conftestval", "w");
+ if (!f) exit(1);
+ fprintf(f, "%d\n", sizeof(short));
+ exit(0);
+}
+EOF
+if { (eval echo configure:1925: \"$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
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_sizeof_short=0
+fi
+rm -fr conftest*
+fi
+
+fi
+echo "$ac_t""$ac_cv_sizeof_short" 1>&6
+cat >> confdefs.h <<EOF
+#define SIZEOF_SHORT $ac_cv_sizeof_short
+EOF
+
+
+echo $ac_n "checking size of int""... $ac_c" 1>&6
+echo "configure:1945: 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
+ if test "$cross_compiling" = yes; then
+ ac_cv_sizeof_int=4
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1953 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+main()
+{
+ FILE *f=fopen("conftestval", "w");
+ if (!f) exit(1);
+ fprintf(f, "%d\n", sizeof(int));
+ exit(0);
+}
+EOF
+if { (eval echo configure:1964: \"$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
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_sizeof_int=0
+fi
+rm -fr conftest*
+fi
+
+fi
+echo "$ac_t""$ac_cv_sizeof_int" 1>&6
+cat >> confdefs.h <<EOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+EOF
+
+
+echo $ac_n "checking size of long""... $ac_c" 1>&6
+echo "configure:1984: 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
+ if test "$cross_compiling" = yes; then
+ ac_cv_sizeof_long=8
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1992 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+main()
+{
+ FILE *f=fopen("conftestval", "w");
+ if (!f) exit(1);
+ fprintf(f, "%d\n", sizeof(long));
+ exit(0);
+}
+EOF
+if { (eval echo configure:2003: \"$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
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_sizeof_long=0
+fi
+rm -fr conftest*
+fi
+
+fi
+echo "$ac_t""$ac_cv_sizeof_long" 1>&6
+cat >> confdefs.h <<EOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+EOF
+
+
+echo $ac_n "checking size of float""... $ac_c" 1>&6
+echo "configure:2023: 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
+ if test "$cross_compiling" = yes; then
+ ac_cv_sizeof_float=4
+else
+ cat > conftest.$ac_ext <<EOF
+#line 2031 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+main()
+{
+ FILE *f=fopen("conftestval", "w");
+ if (!f) exit(1);
+ fprintf(f, "%d\n", sizeof(float));
+ exit(0);
+}
+EOF
+if { (eval echo configure:2042: \"$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
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_sizeof_float=0
+fi
+rm -fr conftest*
+fi
+
+fi
+echo "$ac_t""$ac_cv_sizeof_float" 1>&6
+cat >> confdefs.h <<EOF
+#define SIZEOF_FLOAT $ac_cv_sizeof_float
+EOF
+
+
+echo $ac_n "checking size of double""... $ac_c" 1>&6
+echo "configure:2062: 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
+ if test "$cross_compiling" = yes; then
+ ac_cv_sizeof_double=4
+else
+ cat > conftest.$ac_ext <<EOF
+#line 2070 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+main()
+{
+ FILE *f=fopen("conftestval", "w");
+ if (!f) exit(1);
+ fprintf(f, "%d\n", sizeof(double));
+ exit(0);
+}
+EOF
+if { (eval echo configure:2081: \"$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
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_sizeof_double=0
+fi
+rm -fr conftest*
+fi
+
+fi
+echo "$ac_t""$ac_cv_sizeof_double" 1>&6
+cat >> confdefs.h <<EOF
+#define SIZEOF_DOUBLE $ac_cv_sizeof_double
+EOF
+
+
+echo $ac_n "checking size of void*""... $ac_c" 1>&6
+echo "configure:2101: 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
+ if test "$cross_compiling" = yes; then
+ ac_cv_sizeof_voidp=8
+else
+ cat > conftest.$ac_ext <<EOF
+#line 2109 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+main()
+{
+ FILE *f=fopen("conftestval", "w");
+ if (!f) exit(1);
+ fprintf(f, "%d\n", sizeof(void*));
+ exit(0);
+}
+EOF
+if { (eval echo configure:2120: \"$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
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_sizeof_voidp=0
+fi
+rm -fr conftest*
+fi
+
+fi
+echo "$ac_t""$ac_cv_sizeof_voidp" 1>&6
+cat >> confdefs.h <<EOF
+#define SIZEOF_VOIDP $ac_cv_sizeof_voidp
+EOF
+
+
+
+# Check whether --enable-justsrc or --disable-justsrc was given.
+if test "${enable_justsrc+set}" = set; then
+ enableval="$enable_justsrc"
+ ac_arg_justsrc="$enableval"
+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
+
+
+if test $ac_cv_prog_gcc = yes ; then
+ CFLAGS="-g -O2 -Wall -pedantic -Wstrict-prototypes"
+
+ if test $ac_arg_gcc_pipe != "N" ; then
+ CFLAGS="$CFLAGS -pipe"
+ fi
+ fi
+
+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
+ echo "configure: warning: *** and sizeof (int) == 4. If this is not the case there is no " 1>&2
+ echo "configure: warning: *** chance of this working. Please contact the mantainer. " 1>&2
+ echo "configure: warning: *** If the sizeof issues are not a problem you may need to " 1>&2
+ echo "configure: warning: *** undefine CAN_READ_WRITE_x86_IEEE in src/config.h. " 1>&2
+ 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
+ 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
+ echo "configure: warning: ******************************************************************" 1>&2
+ fi
+
+if test $ac_cv_sizeof_double != 8 ; then
+ echo "configure: warning: ******************************************************************" 1>&2
+ echo "configure: warning: *** sizeof (double) != 8. " 1>&2
+ echo "configure: warning: ******************************************************************" 1>&2
+ fi
+
+case "$target_cpu" in
+ alpha* | i?86 )
+ cat >> confdefs.h <<\EOF
+#define GUESS_LITTLE_ENDIAN 1
+EOF
+
+ 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
+
+case "$target_cpu" in
+ i?86 )
+ cat >> confdefs.h <<\EOF
+#define CAN_READ_WRITE_x86_IEEE 1
+EOF
+
+ ;;
+
+ alpha* | hppa* | m68* | mips* | powerpc* | hppa* | sparc*)
+ cat >> confdefs.h <<\EOF
+#define CAN_READ_WRITE_x86_IEEE 0
+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
+
+case $ac_arg_justsrc in
+ 1*|n*|N*)
+ subdirs="src/GSM610 src/G72x src examples doc tests"
+ ;;
+ *)
+ subdirs="src/GSM610 src/G72x src"
+ ;;
+esac
+
+
+
+
+trap '' 1 2 15
+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"
+ ;;
+ *)
+ # `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'
+ ;;
+ esac >> confcache
+if cmp -s $cache_file confcache; then
+ :
+else
+ if test -w $cache_file; then
+ echo "updating cache $cache_file"
+ cat confcache > $cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+DEFS=-DHAVE_CONFIG_H
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+ case "\$ac_option" in
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+ exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+ -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+ echo "$CONFIG_STATUS generated by autoconf version 2.13"
+ exit 0 ;;
+ -help | --help | --hel | --he | --h)
+ echo "\$ac_cs_usage"; exit 0 ;;
+ *) echo "\$ac_cs_usage"; exit 1 ;;
+ esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+trap 'rm -fr `echo "Makefile src/Makefile src/GSM610/Makefile src/G72x/Makefile \
+ examples/Makefile tests/Makefile doc/Makefile Win32/Makefile \
+ MacOS/Makefile m4/Makefile libsndfile.spec src/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@SHELL@%$SHELL%g
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@FFLAGS@%$FFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@host@%$host%g
+s%@host_alias@%$host_alias%g
+s%@host_cpu@%$host_cpu%g
+s%@host_vendor@%$host_vendor%g
+s%@host_os@%$host_os%g
+s%@target@%$target%g
+s%@target_alias@%$target_alias%g
+s%@target_cpu@%$target_cpu%g
+s%@target_vendor@%$target_vendor%g
+s%@target_os@%$target_os%g
+s%@build@%$build%g
+s%@build_alias@%$build_alias%g
+s%@build_cpu@%$build_cpu%g
+s%@build_vendor@%$build_vendor%g
+s%@build_os@%$build_os%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@PACKAGE@%$PACKAGE%g
+s%@VERSION@%$VERSION%g
+s%@ACLOCAL@%$ACLOCAL%g
+s%@AUTOCONF@%$AUTOCONF%g
+s%@AUTOMAKE@%$AUTOMAKE%g
+s%@AUTOHEADER@%$AUTOHEADER%g
+s%@MAKEINFO@%$MAKEINFO%g
+s%@SET_MAKE@%$SET_MAKE%g
+s%@CC@%$CC%g
+s%@LN_S@%$LN_S%g
+s%@RANLIB@%$RANLIB%g
+s%@LD@%$LD%g
+s%@NM@%$NM%g
+s%@LIBTOOL@%$LIBTOOL%g
+s%@CPP@%$CPP%g
+s%@subdirs@%$subdirs%g
+s%@SHARED_VERSION_INFO@%$SHARED_VERSION_INFO%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+ else
+ sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+ fi
+ if test ! -s conftest.s$ac_file; then
+ ac_more_lines=false
+ rm -f conftest.s$ac_file
+ else
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f conftest.s$ac_file"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+ fi
+ ac_file=`expr $ac_file + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_cmds`
+ fi
+done
+if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"Makefile src/Makefile src/GSM610/Makefile src/G72x/Makefile \
+ examples/Makefile tests/Makefile doc/Makefile Win32/Makefile \
+ MacOS/Makefile m4/Makefile libsndfile.spec"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+ else
+ ac_dir_suffix= ac_dots=
+ fi
+
+ case "$ac_given_srcdir" in
+ .) srcdir=.
+ if test -z "$ac_dots"; then top_srcdir=.
+ else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+ /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+ *) # Relative path.
+ srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+ top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ case "$ac_given_INSTALL" in
+ [/$]*) INSTALL="$ac_given_INSTALL" ;;
+ *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+ esac
+
+ echo creating "$ac_file"
+ rm -f "$ac_file"
+ configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+ case "$ac_file" in
+ *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+ *) ac_comsub= ;;
+ esac
+
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='\([ ]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+if test "${CONFIG_HEADERS+set}" != set; then
+EOF
+cat >> $CONFIG_STATUS <<EOF
+ CONFIG_HEADERS="src/config.h"
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+fi
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ echo creating $ac_file
+
+ rm -f conftest.frag conftest.in conftest.out
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ cat $ac_file_inputs > conftest.in
+
+EOF
+
+# Transform confdefs.h into a sed script conftest.vals that substitutes
+# the proper values into config.h.in to produce config.h. And first:
+# Protect against being on the right side of a sed subst in config.status.
+# Protect against being in an unquoted here document in config.status.
+rm -f conftest.vals
+cat > conftest.hdr <<\EOF
+s/[\\&%]/\\&/g
+s%[\\$`]%\\&%g
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
+s%ac_d%ac_u%gp
+s%ac_u%ac_e%gp
+EOF
+sed -n -f conftest.hdr confdefs.h > conftest.vals
+rm -f conftest.hdr
+
+# This sed command replaces #undef with comments. This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >> conftest.vals <<\EOF
+s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+EOF
+
+# Break up conftest.vals because some shells have a limit on
+# the size of here documents, and old seds have small limits too.
+
+rm -f conftest.tail
+while :
+do
+ ac_lines=`grep -c . conftest.vals`
+ # grep -c gives empty output for an empty file on some AIX systems.
+ if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
+ # Write a limited-size here document to conftest.frag.
+ echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+ echo 'CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+' >> $CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
+ rm -f conftest.vals
+ mv conftest.tail conftest.vals
+done
+rm -f conftest.vals
+
+cat >> $CONFIG_STATUS <<\EOF
+ rm -f conftest.frag conftest.h
+ echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
+ cat conftest.in >> conftest.h
+ rm -f conftest.in
+ if cmp -s $ac_file conftest.h 2>/dev/null; then
+ echo "$ac_file is unchanged"
+ rm -f conftest.h
+ else
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ fi
+ rm -f $ac_file
+ mv conftest.h $ac_file
+ fi
+fi; done
+
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+test -z "$CONFIG_HEADERS" || echo timestamp > src/stamp-h
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
+
--- /dev/null
+++ b/common/libsndfile/configure.in
@@ -1,0 +1,145 @@
+# Configure `libsndfile'.
+# Copyright (C) 1999-2000 Erik de Castro Lopo ([email protected]).
+
+dnl Require autoconf version >= 2.12
+
+AC_PREREQ(2.12)
+AC_INIT(src/sndfile.c)
+AC_CANONICAL_SYSTEM
+
+AM_INIT_AUTOMAKE(libsndfile,0.0.22)
+
+dnl This is the version info according to the libtool versioning system.
+dnl It does *not* correspond to the release number.
+
+SHARED_VERSION_INFO="0:8:0"
+
+dnl Process this file with autoconf to produce a configure script.
+
+AM_CONFIG_HEADER(src/config.h)
+
+AC_PROG_CC
+AC_PROG_INSTALL
+
+AC_PROG_MAKE_SET
+AC_PROG_LN_S
+AM_PROG_LIBTOOL
+
+AC_HEADER_STDC
+
+AC_CHECK_HEADERS(endian.h)
+
+dnl AC_CHECK_FUNCS(fopen fread fwrite fclose fseek ftell malloc free)
+
+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="$enableval", ac_arg_justsrc="N")
+
+AC_ARG_ENABLE(gcc-pipe, [ --disable-gcc-pipe disable gcc -pipe option ],
+ ac_arg_gcc_pipe="N", ac_arg_gcc_pipe="Y")
+
+if test $ac_cv_prog_gcc = yes ; then
+ CFLAGS="-g -O2 -Wall -pedantic -Wstrict-prototypes"
+ dnl CFLAGS="-g -O0 -Wall -Werror -Wstrict-prototypes"
+ dnl AC_MSG_WARN([**** Optimisation has been switched off. ****])
+
+ if test $ac_arg_gcc_pipe != "N" ; then
+ CFLAGS="$CFLAGS -pipe"
+ fi
+ fi
+
+if test $cross_compiling = yes ; then
+ AC_MSG_WARN([******************************************************************])
+ AC_MSG_WARN([*** We are cross-compiling, so have to assume sizeof (short) == 2 ])
+ AC_MSG_WARN([*** and sizeof (int) == 4. If this is not the case there is no ])
+ AC_MSG_WARN([*** chance of this working. Please contact the mantainer. ])
+ AC_MSG_WARN([*** If the sizeof issues are not a problem you may need to ])
+ AC_MSG_WARN([*** undefine CAN_READ_WRITE_x86_IEEE in src/config.h. ])
+ 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. ])
+ AC_MSG_WARN([******************************************************************])
+ fi
+
+if test $ac_cv_sizeof_float != 4 ; then
+ AC_MSG_WARN([******************************************************************])
+ AC_MSG_WARN([*** sizeof (float) != 4. ])
+ AC_MSG_WARN([******************************************************************])
+ fi
+
+if test $ac_cv_sizeof_double != 8 ; then
+ AC_MSG_WARN([******************************************************************])
+ AC_MSG_WARN([*** sizeof (double) != 8. ])
+ AC_MSG_WARN([******************************************************************])
+ fi
+
+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)
+ ;;
+
+ *)
+ 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
+
+case "$target_cpu" in
+ i?86 )
+ AC_DEFINE(CAN_READ_WRITE_x86_IEEE,1)
+ ;;
+
+ alpha* | hppa* | m68* | mips* | powerpc* | hppa* | sparc*)
+ AC_DEFINE(CAN_READ_WRITE_x86_IEEE,0)
+ ;;
+
+ *)
+ 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
+
+case $ac_arg_justsrc in
+ 1*|n*|N*)
+ subdirs="src/GSM610 src/G72x src examples doc tests"
+ ;;
+ *)
+ subdirs="src/GSM610 src/G72x src"
+ ;;
+esac
+
+AC_SUBST(subdirs)
+AC_SUBST(SHARED_VERSION_INFO)
+
+AC_OUTPUT(Makefile src/Makefile src/GSM610/Makefile src/G72x/Makefile \
+ examples/Makefile tests/Makefile doc/Makefile Win32/Makefile \
+ MacOS/Makefile m4/Makefile libsndfile.spec)
+
--- /dev/null
+++ b/common/libsndfile/doc/ChangeLog
@@ -1,0 +1,644 @@
+2000-08-15 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.c
+ Fixed a leak of FILE* pointers in sf_opren_read(). Thanks to Sigbj�rn Skj�ret
+ for spotting this one.
+
+2000-08-13 Erik de Castro Lopo <[email protected]>
+
+ * src/au_g72x.c src/G72x/g72x.c
+ Added G723 encoded AU file support.
+
+ * tests/lossy_comp_test.c
+ Added tests for G721 and G723 encoded AU files.
+
+2000-08-06 Erik de Castro Lopo <[email protected]>
+
+ * 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 [email protected] or copyright under a GPL/LGPL compatible
+ license.
+
+2000-08-06 Erik de Castro Lopo <[email protected]>
+
+ * tests/lossy_comp_test.c
+ Fixed incorrect error message.
+
+ * src/au_g72x.c src/G72x/*
+ G721 encoded AU files now working.
+
+ * Win32/README-Win32.txt
+ Replaced this file with a new one which gives a full explanation
+ of how to build libsndfile under Win32. Thanks to Mike Ricos.
+
+2000-08-05 Erik de Castro Lopo <[email protected]>
+
+ * src/*.[ch]
+ Removed double leading underscores from the start of all variable and
+ function names. Identifiers with a leading underscores are reserved
+ for use by the compiler.
+
+ * src/au_g72x.c src/G72x/*
+ Continued work on G721 encoded AU files.
+
+2000-07-12 Erik de Castro Lopo <[email protected]>
+
+ * src/G72x/*
+ New files for reading/writing G721 and G723 ADPCM audio. These files
+ are from a Sun Microsystems reference implementation released under a
+ free software licence.
+ Extensive changes to this code to make it fit in with libsndfile.
+ See the ChangeLog in this directory for details.
+
+ * src/au_g72x.c
+ New file for G721 encoded AU files.
+
+2000-07-08 Erik de Castro Lopo <[email protected]>
+
+ * libsndfile.spec.in
+ Added a spec file for making RPMs. Thanks to Josh Green for supplying this.
+
+2000-06-28 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.c src/sndfile.h
+ Add checking for and handling of header-less u-law encoded AU/SND files.
+ Any file with a ".au" or ".snd" file extension and without the normal
+ AU file header is treated as an 8kHz, u-law encoded file.
+
+ * src/au.h
+ New function for opening a headerless u-law encoded file for read.
+
+2000-06-04 Erik de Castro Lopo <[email protected]>
+
+ * src/paf.c
+ Add checking for files shorter than minimal PAF file header length.
+
+2000-06-02 Erik de Castro Lopo <[email protected]>
+
+ * tests/write_read_test.c
+ Added extra sf_perror() calls when sf_write_XXXX fails.
+
+2000-05-29 Erik de Castro Lopo <[email protected]>
+
+ * src/common.c
+ Modified usage of va_arg() macro to work correctly on PowerPC
+ Linux. Thanks to Kyle Wheeler for giving me ssh access to his
+ machine while I was trying to track this down.
+
+ * configure.in src/*.[ch]
+ Sorted out some endian-ness issues brought up by PowerPC Linux.
+
+ * tests/read_seek_test.c
+ Added extra debugging for when tests fail.
+
+2000-05-18 Erik de Castro Lopo <[email protected]>
+
+ * 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 <[email protected]>
+
+ * src/sndfile.c src/wav.c src/wav_gsm610.c
+ Finallised writing of GSM 6.10 WAV files.
+
+ * tests/lossy_comp_test.c
+ Wrote new test code for GSM 6.10 files.
+
+ * examples/sfinfo.c
+ Fixed incorrect format in printf() statement.
+
+2000-04-06 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.h.in
+ Fixed comments about sf_perror () and sf_error_str ().
+
+2000-03-14 Erik de Castro Lopo <[email protected]>
+
+ * configure.in
+ Fixed --enable-justsrc option.
+
+2000-03-07 Erik de Castro Lopo <[email protected]>
+
+ * wav.c
+ Fixed checking of bytespersec field of header. Still some weirdness
+ with some files.
+
+2000-03-05 Erik de Castro Lopo <[email protected]>
+
+ * 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 <[email protected]>
+
+ * src/sndfile.c src/wav.c
+ Minor changes to allow writing of GSM 6.10 WAV files.
+
+2000-02-28 Erik de Castro Lopo <[email protected]>
+
+ * configure.in Makefile.am src/Makefile.am
+ Finally got around to figuring out how to build a single library from
+ multiple source directories.
+ Reading GSM 6.10 files now seems to work.
+
+2000-01-03 Erik de Castro Lopo <[email protected]>
+
+ * src/wav.c
+ Added more error reporting in read_fmt_chunk().
+
+1999-12-21 Erik de Castro Lopo <[email protected]>
+
+ * examples/sfinfo.c
+ Modified program to accept multiple filenames from the command line.
+
+1999-11-27 Erik de Castro Lopo <[email protected]>
+
+ * 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 <[email protected]>
+
+ * src/common.c
+ Fixed put_int() and put_short() macros used by _psf_hprintf() which were
+ causing seg. faults on Sparc Solaris.
+
+1999-11-15 Erik de Castro Lopo <[email protected]>
+
+ * src/common.c
+ Added string.h to includes. Thanks to Sigbjxrn Skjfret.
+
+ * src/svx.c
+ Fixed __svx_close() function to ensure FORM and BODY chunks are correctly
+ set.
+
+1999-10-01 Erik de Castro Lopo <[email protected]>
+
+ * src/au.c
+ Fixed handling of incorrect size field in AU header on read. Thanks to
+ Christoph Lauer for finding this problem.
+
+1999-09-28 Erik de Castro Lopo <[email protected]>
+
+ * src/aiff.c
+ Fixed a bug with incorrect SSND chunk length being written. This also lead
+ to finding an minor error in AIFF header parsing. Thanks to Dan Timis for
+ pointing this out.
+
+1999-09-24 Erik de Castro Lopo <[email protected]>
+
+ * src/paf.c
+ Fixed a bug with reading and writing 24 bit stereo PAF files. This problem
+ came to light when implementing tests for the new functions which operate
+ in terms of frames rather than items.
+
+1999-09-23 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.c
+ Modified file type detection to use first 12 bytes of file rather than
+ file name extension. Required this because NIST files use the same
+ filename extension as Microsoft WAV files.
+
+ * src/sndfile.c src/sndfile.h
+ Added short, int and double read/write functions which work in frames rather
+ than items. This was originally suggested by Maurizio Umberto Puxeddu
+
+1999-09-22 Erik de Castro Lopo <[email protected]>
+
+ * src/svx.c
+ Finished off implementation of write using __psf_hprintf().
+
+1999-09-21 Erik de Castro Lopo <[email protected]>
+
+ * src/common.h
+ Added a buffer to SF_PRIVATE for writing the header. This is required
+ to make generating headers for IFF/SVX files easier as well as making
+ it easier to do re-write the headers which will be required when
+ sf_rewrite_header() is implemented.
+
+ * src/common.c
+ Implemented __psf_hprintf() function. This is an internal function
+ which is documented briefly just above the code.
+
+1999-09-05 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.c
+ Fixed a bug in sf_write_raw() where it was returning incorrect values
+ (thanks to Richard Dobson for finding this one). Must put in a test
+ routine for sf_read_raw and sf_write_raw.
+
+ * src/aiff.c
+ Fixed default FORMsize in __aiff_open_write ().
+
+ * src/sndfile.c
+ Added copy of filename to internal data structure. IFF/SVX files
+ contain a NAME header chunk. Both sf_open_read() and sf_open_write()
+ copy the file name (less the leading path information) to the
+ filename field.
+
+ * src/svx.c
+ Started implementing writing of files.
+
+1999-08-04 Erik de Castro Lopo <[email protected]>
+
+ * src/svx.c
+ New file for reading/writing 8SVX and 16SVX files.
+
+ * src/sndfile.[ch] src/common.h
+ Changes for SVX files.
+
+ * src/aiff.c
+ Fixed header parsing when unknown chunk is found.
+
+1999-08-01 Erik de Castro Lopo <[email protected]>
+
+ * src/paf.c
+ New file for reading/writing Ensoniq PARIS audio file format.
+
+ * src/sndfile.[ch] src/common.h
+ Changes for PAF files.
+
+ * src/sndfile.[ch]
+ Added stuff for sf_get_lib_version() function.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1999-07-31 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.h MacOS/config.h
+ Fixed minor MacOS configuration issues.
+
+1999-07-30 Erik de Castro Lopo <[email protected]>
+
+ * MacOS/
+ Added a new directory for the MacOS config.h file and the
+ readme file.
+
+ * src/aiff.c
+ Fixed calculation of datalength when reading SSND chunk. Thanks to
+ Sigbj�rn Skj�ret for pointing out this error.
+
+1999-07-29 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.c src/sndfile.h src/raw.c
+ Further fixing of #includes for MacOS.
+
+1999-07-25 Erik de Castro Lopo <[email protected]>
+
+ * src/wav.c src/aiff.c
+ Added call to ferror () in main header parsing loop of __XXX_open_read
+ functions. This should fix problems on platforms (MacOS, AmigaOS) where
+ fseek()ing or fread()ing beyond the end of the file puts the FILE*
+ stream in an error state until clearerr() is called.
+
+ * tests/write_read_test.c
+ Added tests for RAW header-less PCM files.
+
+ * src/common.h
+ Moved definition of struct tribyte to pcm.c which is the only place
+ which needs it.
+
+ * src/pcm.c
+ Modified all code which assumed sizeof (struct tribyte) == 3. This code
+ did not work on MacOS. Thanks to Ben "Jacobs" for pointing this out.
+
+ * src/au.c
+ Removed <sys/stat.h> from list of #includes (not being used).
+
+ * src/sndfile.c
+ Added MacOS specific #ifdef to replace <sys/stat.h>.
+
+ * src/sndfile.h
+ Added MacOS specific #ifdef to replace <sys/stat.h>.
+
+ * src/sndfile.h
+ Added MacOS specific typedef for off_t.
+
+ * MacOS-readme.txt
+ New file with instructions for building libsndfile under MacOS. Thanks
+ to Ben "Jacobs" for supplying these instructions.
+
+1999-07-24 Erik de Castro Lopo <[email protected]>
+
+ * configure.in
+ Removed sndfile.h from generated file list as there were no longer
+ any autoconf substitutions being made.
+
+ * src/raw.c
+ New file for handling raw header-less PCM files. In order to open these
+ for read, the user must specify format, pcmbitwidth and channels in the
+ SF_INFO struct when calling sf_open_read ().
+
+ * src/sndfile.c
+ Added support for raw header-less PCM files.
+
+1999-07-22 Erik de Castro Lopo <[email protected]>
+
+ * examples/sfinfo.c
+ Removed options so the sfinfo program always prints out all the information.
+
+1999-07-19 Erik de Castro Lopo <[email protected]>
+
+ * src/alaw.c
+ New file for A-law encoding (similar to u-law).
+
+ * tests/alaw_test.c
+ New test program to test the A-law encode/decode lookup tables.
+
+ * tests/lossy_comp_test.c
+ Added tests for a-law encoded WAV, AU and AULE files.
+
+1999-07-18 Erik de Castro Lopo <[email protected]>
+
+ * 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 <[email protected]>
+
+ * tests/ulaw_test.c
+ New test program to test the u-law encode/decode lookup tables.
+
+1999-07-16 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.h
+ Made corrections to comments on the return values from sf_seek ().
+
+ * src/sndfile.c
+ Fixed boundary condition checking bug and accounting bug in sf_read_raw ().
+
+1999-07-15 Erik de Castro Lopo <[email protected]>
+
+ * src/au.c src/ulaw.c
+ Finished implementation of u-law encoded AU files.
+
+ * src/wav.c
+ Implemented reading and writing of u-law encoded WAV files.
+
+ * tests/
+ Changed name of adpcm_test.c to lossy_comp_test.c. This test program
+ will now be used to test Ulaw and Alaw encoding as well as APDCM.
+ Added tests for Ulaw encoded WAV files.
+
+1999-07-14 Erik de Castro Lopo <[email protected]>
+
+ * tests/adpcm_test.c
+ Initialised amp variable in gen_signal() to remove compiler warning.
+
+1999-07-12 Erik de Castro Lopo <[email protected]>
+
+ * src/aiff.c
+ In __aiff_open_read () prevented fseek()ing beyond end of file which
+ was causing trouble on MacOS with the MetroWerks compiler. Thanks to
+ Ben "Jacobs" for pointing this out.
+
+ *src/wav.c
+ Fixed as above in __wav_open_read ().
+
+1999-07-01 Erik de Castro Lopo <[email protected]>
+
+ * src/wav_ms_adpcm.c
+ Implemented MS ADPCM encoding. Code cleanup of decoder.
+
+ * tests/adpcm_test.c
+ Added tests for MS ADPCM WAV files.
+
+ * src/wav_ima_adpcm.c
+ Fixed incorrect parameter in call to srate2blocksize () from
+ __ima_writer_init ().
+
+1999-06-23 Erik de Castro Lopo <[email protected]>
+
+ * tests/read_seek_test.c
+ Added test for 8 bit AIFF files.
+
+1999-06-18 Erik de Castro Lopo <[email protected]>
+
+ * tests/write_read_test.c
+ Removed test for IMA ADPCM WAV files which is now done in adpcm_test.c
+
+ * configure.in
+ Added -Wconversion to CFLAGS.
+
+ * src/*.c tests/*.c examples/*.c
+ Fixed all warnings resulting from use of -Wconversion.
+
+1999-06-17 Erik de Castro Lopo <[email protected]>
+
+ * src/wav.c
+ Added fact chunk handling on read and write for all non WAVE_FORMAT_PCM
+ WAV files.
+
+ * src/wav_ima.c
+ Changed block alignment to be dependant on sample rate. This should make
+ WAV files created with libsndfile compatible with the MS Windows media
+ players.
+
+ * tests/adpcm_test.c
+ Reimplemented adpcm_test_short and implemented adpcm_test_int and adpcm_test_double.
+ Now have full testing of IMA ADPCM WAV file read, write and seek.
+
+1999-06-15 Erik de Castro Lopo <[email protected]>
+
+ * src/wav_float.c
+ Fixed function prototype for x86f2d_array () which was causing ocassional
+ seg. faults on Sparc Solaris machines.
+
+1999-06-14 Erik de Castro Lopo <[email protected]>
+
+ * src/aiff.c
+ Fixed bug in __aiff_close where the length fields in the header were
+ not being correctly calculated before writing.
+
+ * tests/write_read_test.c
+ Modified to detect the above bug in WAV, AIFF and AU files.
+
+1999-06-12 Erik de Castro Lopo <[email protected]>
+
+ * Win32/*
+ Added a contribution from Albert Faber to allow libsndfile to compile
+ under Win32 systems. libsndfile will now be used as part of LAME the
+ the MPEG 1 Layer 3 encoder (http://internet.roadrunner.com/~mt/mp3/).
+
+1999-06-11 Erik de Castro Lopo <[email protected]>
+
+ * configure.in
+ Changed to reflect previous changes.
+
+ * src/wav_ima_adpcm.c
+ Fixed incorrect calculation of bytespersec header field (IMA ADPCM only).
+
+ Fixed bug when writing from int or double data to IMA ADPCM file. Will need
+ to write test code for this.
+
+ Fixed bug in __ima_write () whereby the length of the current block was
+ calculated incorrectly. Thanks to Jongcheon Park for pointing this out.
+
+1999-03-27 Erik de Castro Lopo <[email protected]>
+
+ * src/*.c
+ Changed all read/write/lseek function calls to fread/fwrite/
+ fseek/ftell and added error checking of return values from
+ fread and fwrite in critical areas of the code.
+
+ * src/au.c
+ Fixed incorrect datasize element in AU header on write.
+
+ * tests/error_test.c
+ Add new test to check all error values have an associated error
+ string. This will avoid embarrassing real world core dumps.
+
+1999-03-23 Erik de Castro Lopo <[email protected]>
+
+ * src/wav.c src/aiff.c
+ Added handling for unknown chunk markers in the file.
+
+1999-03-22 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.c
+ Filled in missing error strings in SndfileErrors array. Missing entries
+ can cause core dumps when calling sf_error-str (). Thanks to Sam
+ <mrsam at-sign geocities.com> for finding this problem.
+
+1999-03-21 Erik de Castro Lopo <[email protected]>
+
+ * src/wav_ima_adpcm.c
+ Work on wav_ms_adpcm.c uncovered a bug in __ima_read () when reading
+ stereo files. Caused by not adjusting offset into buffer of decoded
+ samples for 2 channels. A similar bug existed in __ima_write ().
+ Need a test for stereo ADPCM files.
+
+ * src/wav_ms_adpcm.c
+ Decoder working correctly.
+
+1999-03-18 Erik de Castro Lopo <[email protected]>
+
+ * configure.in Makefile.am
+ Added --enable-justsrc configuration variable sent by Sam
+ <mrsam at-sign geocities.com>.
+
+ * src/wav_ima_adpcm.c
+ Fixed bug when reading beyond end of data section due to not
+ checking pima->blockcount.
+ This uncovered __ima_seek () bug due to pima->blockcount being set
+ before calling __ima_init_block ().
+
+1999-03-17 Erik de Castro Lopo <[email protected]>
+
+ * src/wav.c
+ Started implementing MS ADPCM decoder.
+ If file is WAVE_FORMAT_ADPCM and length of data chunk is odd, this
+ encoder seems to add an extra byte. Why not just give an even data
+ length?
+
+1999-03-16 Erik de Castro Lopo <[email protected]>
+
+ * src/wav.c
+ Split code out of wav.c to create wav_float.c and wav_ima_adpcm.c.
+ This will make it easier to add and debug other kinds of WAV files
+ in future.
+
+1999-03-14 Erik de Castro Lopo <[email protected]>
+
+ * tests/
+ Added adpcm_test.c which implements test functions for
+ IMA ADPCM reading/writing/seeking etc.
+
+ * src/wav.c
+ Fixed many bugs in IMA ADPCM encoder and decoder.
+
+1999-03-11 Erik de Castro Lopo <[email protected]>
+
+ * src/wav.c
+ Finished implementing IMA ADPCM encoder and decoder (what a bitch!).
+
+1999-03-03 Erik de Castro Lopo <[email protected]>
+
+ * src/wav.c
+ Started implementing IMA ADPCM decoder.
+
+1999-03-02 Erik de Castro Lopo <[email protected]>
+
+ * src/sndfile.c
+ Fixed bug where the sf_read_XXX functions were returning a
+ incorrect read count when reading past end of file.
+ Fixed bug in sf_seek () when seeking backwards from end of file.
+
+ * tests/read_seek_test.c
+ Added multiple read test to short_test(), int_test () and
+ double_test ().
+ Added extra chunk to all test WAV files to test that reading
+ stops at end of 'data' chunk.
+
+1999-02-21 Erik de Castro Lopo <[email protected]>
+
+ * tests/write_read_test.c
+ Added tests for little DEC endian AU files.
+
+ * src/au.c
+ Add handling for DEC format little endian AU files.
+
+1999-02-20 Erik de Castro Lopo <[email protected]>
+
+ * src/aiff.c src/au.c src/wav.c
+ Add __psf_sprintf calls during header parsing.
+
+ * src/sndfile.c src/common.c
+ Implement sf_header_info (sndfile.c) function and __psf_sprintf (common.c).
+
+ * tests/write_read_test.c
+ Added tests for 8 bit PCM files (WAV, AIFF and AU).
+
+ * src/au.c src/aiff.c
+ Add handling of 8 bit PCM data format.
+
+ * src/aiff.c
+ On write, set blocksize in SSND chunk to zero like everybody else.
+
+1999-02-16 Erik de Castro Lopo <[email protected]>
+
+ * src/pcm.c:
+ Fixed bug in let2s_array (cptr was not being initialised).
+
+ * src/sndfile.c:
+ Fixed bug in sf_read_raw and sf_write_raw. sf_seek should
+ now work when using these functions.
+
+1999-02-15 Erik de Castro Lopo <[email protected]>
+
+ * tests/write_read_test.c:
+ Force test_buffer array to be double aligned. Sparc Solaris
+ requires this.
+
+1999-02-14 Erik de Castro Lopo <[email protected]>
+
+ * src/pcm.c:
+ Fixed a bug which was causing errors in the reading
+ and writing of 24 bit PCM files.
+
+ * doc/api.html
+ Finished of preliminary documentaion.
+
+1999-02-13 Erik de Castro Lopo <[email protected]>
+
+ * src/aiff.c:
+ Changed reading of 'COMM' chunk to avoid reading an int
+ which overlaps an int (4 byte) boundary.
+
--- /dev/null
+++ b/common/libsndfile/doc/Makefile.am
@@ -1,0 +1,1 @@
+EXTRA_DIST = index.html libsndfile.jpg api.html bugs.html sfinfo.html
--- /dev/null
+++ b/common/libsndfile/doc/Makefile.in
@@ -1,0 +1,184 @@
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_alias = @build_alias@
+build_triplet = @build@
+host_alias = @host_alias@
+host_triplet = @host@
+target_alias = @target_alias@
+target_triplet = @target@
+AS = @AS@
+CC = @CC@
+DLLTOOL = @DLLTOOL@
+LD = @LD@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+MAKEINFO = @MAKEINFO@
+NM = @NM@
+OBJDUMP = @OBJDUMP@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+VERSION = @VERSION@
+subdirs = @subdirs@
+
+EXTRA_DIST = index.html libsndfile.jpg api.html bugs.html sfinfo.html
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../src/config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = ChangeLog Makefile.am Makefile.in NEWS
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps doc/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = doc
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am:
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am:
+uninstall: uninstall-am
+all-am: Makefile
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am
+ -rm -f libtool
+
+distclean: distclean-am
+
+maintainer-clean-am: 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."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: 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
+
+
+# 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.
+.NOEXPORT:
--- /dev/null
+++ b/common/libsndfile/doc/NEWS
@@ -1,0 +1,58 @@
+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.
+
+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.
--- /dev/null
+++ b/common/libsndfile/doc/api.html
@@ -1,0 +1,329 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN//3.0">
+<HTML>
+
+<HEAD>
+ <TITLE>
+ The libsndfile API.
+ </TITLE>
+ <META NAME="Author" CONTENT="Erik de Castro Lopo">
+ <META NAME="Version" CONTENT="Version 0.0.18">
+ <META NAME="Description" CONTENT="The libsndfile API.">
+ <META NAME="Keywords" CONTENT="WAV AIFF AU libsndfile sound audio dsp Linux">
+
+</HEAD>
+
+<BODY TEXT="#FFFFFF" BGCOLOR="#000000" LINK="#5050FF" VLINK="#5050FF" ALINK="#FF00FF">
+
+<FONT SIZE=3>
+
+<FONT SIZE=+20 COLOR="#5050FF"><BR><B>libsndfile</B></FONT>
+<BR><BR>
+ Libsndfile is a library designed to allow the reading and writing of many
+ different sampled sound file formats (such as MS Windows WAV and the Apple/SGI
+ AIFF format) through one standard library interface.
+<BR><BR>
+
+<FONT SIZE=+5 COLOR="#5050FF"><BR><B>SYNOPSIS</B></FONT>
+<BR><BR>
+
+The functions of linbsndfile are defined as follows:
+
+<PRE>
+ #include <stdio.h>
+ #include <sndfile.h>
+
+ SNDFILE* <A HREF="#open">sf_open_read</A> (const char *path, SF_INFO *sfinfo) ;
+ SNDFILE* <A HREF="#open">sf_open_write</A> (const char *path, const SF_INFO *sfinfo) ;
+
+ off_t <A HREF="#seek">sf_seek</A> (SNDFILE *sndfile, off_t frames, int whence) ;
+
+ size_t <A HREF="#raw">sf_read_raw</A> (SNDFILE *sndfile, void *ptr, size_t bytes) ;
+ size_t <A HREF="#raw">sf_write_raw</A> (SNDFILE *sndfile, void *ptr, size_t bytes) ;
+
+ size_t <A HREF="#read">sf_read_short</A> (SNDFILE *sndfile, short *ptr, size_t items) ;
+ size_t <A HREF="#read">sf_read_int</A> (SNDFILE *sndfile, int *ptr, size_t items) ;
+ size_t <A HREF="#read">sf_read_double</A> (SNDFILE *sndfile, double *ptr, size_t items, int normalize) ;
+
+ size_t <A HREF="#readf">sf_readf_short</A> (SNDFILE *sndfile, short *ptr, size_t frames) ;
+ size_t <A HREF="#readf">sf_readf_int</A> (SNDFILE *sndfile, int *ptr, size_t frames) ;
+ size_t <A HREF="#readf">sf_readf_double</A> (SNDFILE *sndfile, double *ptr, size_t frames, int normalize) ;
+
+ size_t <A HREF="#write">sf_write_short</A> (SNDFILE *sndfile, short *ptr, size_t items) ;
+ size_t <A HREF="#write">sf_write_int</A> (SNDFILE *sndfile, int *ptr, size_t items) ;
+ size_t <A HREF="#write">sf_write_double</A> (SNDFILE *sndfile, double *ptr, size_t items, int normalize) ;
+
+ size_t <A HREF="#writef">sf_writef_short</A> (SNDFILE *sndfile, short *ptr, size_t frames) ;
+ size_t <A HREF="#writef">sf_writef_int</A> (SNDFILE *sndfile, int *ptr, size_t frames) ;
+ size_t <A HREF="#writef">sf_writef_double</A> (SNDFILE *sndfile, double *ptr, size_t frames, int normalize) ;
+
+ int <A HREF="#close">sf_close</A> (SNDFILE *sndfile) ;
+</PRE>
+
+<BR>
+SNDFILE* is an anonymous pointer to data which is private to the library.
+<BR><BR>
+
+<A NAME="open">
+<FONT SIZE=+20 COLOR="#5050FF"><BR><B>File Open Functions</B></FONT>
+
+<PRE>
+ SNDFILE* sf_open_read (const char *path, SF_INFO *wfinfo) ;
+ SNDFILE* sf_open_write (const char *path, const SF_INFO *wfinfo) ;
+</PRE>
+
+The SF_INFO structure is for passing data between the calling function and the library
+when opening a file for read or writing. It is defined in sndfile.h as follows:
+
+<PRE>
+ typedef struct
+ { int samplerate ;
+ int samples ;
+ int channels ;
+ int pcmbitwidth ;
+ int format ;
+ int sections ;
+ int seekable ;
+ } SF_INFO ;
+</PRE>
+
+<BR>
+When opening a file for read (with the exception of RAW files where the caller has
+to fill in the channels, pcmbitwidth and format fields), all the structure members
+are filled in by the library.
+
+<BR><BR>
+When opening a file for write, the caller must fill in structure members samplerate,
+channels, pcmbitwidth and format. For encoded formats (ie u-law, A-law and ADPCM),
+pcmbitwidth is the bit width before encoding or after decoding.
+
+<BR><BR>
+The format field in the above structure is made up of the bit-wise OR of a major
+format type with a value of 0x10000 or greater and a minor format type with a value
+less than 0x10000. The currently understood formats are listed in sndfile.h as
+follows and also includes two bitmasks for separating major and minor file types.
+Not all combinations of major and minor file types are valid.
+
+<PRE>
+ enum
+ { SF_FORMAT_WAV = 0x10000, /* Microsoft WAV format (big endian). */
+ SF_FORMAT_AIFF = 0x20000, /* Apple/SGI AIFF format (little 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_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_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_BE = 0x0007, /* RAW PCM (big endian). */
+ SF_FORMAT_PCM_LE = 0x0008, /* RAW PCM (little endian). */
+ SF_FORMAT_RAW_S8 = 0x0009, /* Signed 8 bit RAW PCM. */
+ SF_FORMAT_RAW_U8 = 0x000A, /* Unsigned 8 bit RAW PCM. */
+
+ SF_FORMAT_SUBMASK = 0xFFFF,
+ SF_FORMAT_TYPEMASK = 0x7FFF0000
+ } ;
+</PRE>
+
+<BR>
+On success, the sf_open functions return a non NULL pointer which should be passed as
+the first parameter to all subsequent libsndfile calls dealing with that audio file.
+On fail, the sf_open functions return a NULL pointer.
+<BR><BR>
+
+
+<A NAME="seek">
+<FONT SIZE=+20 COLOR="#5050FF"><BR><B>File Seek Functions</B></FONT>
+
+<PRE>
+ off_t sf_seek (SNDFILE *sndfile, off_t frames, int whence) ;
+</PRE>
+
+The file seek functions work much like lseek in stdio.h with the exception that
+the non-audio data is ignored and the seek only moves within the audio data section of
+the file. In addition, seeks are defined in number of (multichannel) samples or frames.
+Therefor, for a seek in a stereo file from the current position forward with an offset
+of 1 would skip forward by one sample of both channels.
+<BR><BR>
+Valid values for the whence parameter are defined to be the same as the lseek function
+and behave as follows:
+
+<PRE>
+ SEEK_SET - The offset is set to the start of the audio data plus offset (multichannel) samples.
+ SEEK_CUR - The offset is set to its current location plus offset (multichannel) samples.
+ SEEK_END - The offset is set to the end of the data plus offset (multichannel) samples.
+</PRE>
+
+Note that frames offset can be negative and in fact should be when SEEK_END is used for the
+whence parameter.
+
+<BR><BR>
+sf_seek will return the offset in (multichannel) samples from the start of the audio data
+or -1 if an error occurs (ie an attempt is made to seek beyond the start or end of the file).
+
+<BR>
+<A NAME="read">
+<FONT SIZE=+20 COLOR="#5050FF"><BR><B>File Read Functions (Items)</B></FONT>
+
+<PRE>
+ size_t sf_read_short (SNDFILE *sndfile, short *ptr, size_t items) ;
+ size_t sf_read_int (SNDFILE *sndfile, int *ptr, size_t items) ;
+ size_t sf_read_double (SNDFILE *sndfile, double *ptr, size_t items, int normalize) ;
+</PRE>
+
+The file read items functions fill the array pointed to by ptr with the requested
+number of items. The items parameter must be an integer product of the number
+of channels or an error will occur.
+
+<BR><BR>
+The sf_read_double function has an extra parameter. If normalize is 1, the
+read operation will return data that is normalized so that the maximum possible
+full scale sample value of the file on disk will result in a sample value of 1.0
+in the array, with all other sample values scaled accordingly.
+
+<BR><BR>
+The sf_read_XXXX functions return the number of items read. Unless the end of the
+file was reached during the read, the return value should equal the of items
+requested. Attempts to read beyond the end of the file will not result in an error
+but will cause the sf_read_XXXX functions to return less than the number of items
+requested or 0 if already at the end of the file. On error, a value of -1 is
+returned.
+
+<BR><BR>
+
+<A NAME="readf">
+<FONT SIZE=+20 COLOR="#5050FF"><BR><B>File Read Functions (Frames)</B></FONT>
+
+<PRE>
+ size_t sf_readf_short (SNDFILE *sndfile, short *ptr, size_t frames) ;
+ size_t sf_readf_int (SNDFILE *sndfile, int *ptr, size_t frames) ;
+ size_t sf_readf_double (SNDFILE *sndfile, double *ptr, size_t frames, int normalize) ;
+</PRE>
+
+The file read frames functions fill the array pointed to by ptr with the requested
+number of frames of data. The array must be large enough to hold the product of
+frames and the number of channels.
+
+<BR><BR>
+The sf_readf_double function has an extra parameter. If normalize is 1, the
+read operation will return data that is normalized so that the maximum possible
+full scale sample value of the file on disk will result in a sample value of 1.0
+in the array, with all other sample values scaled accordingly.
+
+<BR><BR>
+The sf_readf_XXXX functions return the number of frames read. Unless the end of the
+file was reached during the read, the return value should equal the of frames
+requested. Attempts to read beyond the end of the file will not result in an error
+but will cause the sf_readf_XXXX functions to return less than the number of frames
+requested or 0 if already at the end of the file. On error, a value of -1 is
+returned.
+
+<BR><BR>
+
+<A NAME="write">
+<FONT SIZE=+20 COLOR="#5050FF"><BR><B>File Write Functions (Items)</B></FONT>
+
+<PRE>
+ size_t sf_write_short (SNDFILE *sndfile, short *ptr, size_t items) ;
+ size_t sf_write_int (SNDFILE *sndfile, int *ptr, size_t items) ;
+ size_t sf_write_double (SNDFILE *sndfile, double *ptr, size_t items, int normalize) ;
+</PRE>
+
+
+The file write items functions write the data in the array pointed to by ptr to the file.
+The items parameter must be an integer product of the number of channels or an error
+will occur.
+
+<BR><BR>
+The sf_write_double function has an extra parameter. If normalize is 1, the write
+operation will assume that data in the array is normalize so that all values are
+between -1 and 1 and will scale the samples to fill the bitwidth of the disk file
+format. If normalize is zero, no scaling will take place and the samples will be
+truncated and written to disk as integers of 8, 16, 24 or 32 bits.
+
+<BR><BR>
+The sf_write_XXXX functions return the number of items written (which should be the
+same as the items parameter) or -1 if an error has occurred.
+<BR><BR>
+
+<A NAME="writef">
+<FONT SIZE=+20 COLOR="#5050FF"><BR><B>File Write Functions (Frames)</B></FONT>
+
+<PRE>
+ size_t sf_writef_short (SNDFILE *sndfile, short *ptr, size_t frames) ;
+ size_t sf_writef_int (SNDFILE *sndfile, int *ptr, size_t frames) ;
+ size_t sf_writef_double (SNDFILE *sndfile, double *ptr, size_t frames, int normalize) ;
+</PRE>
+
+
+The file write frames functions write the data in the array pointed to by ptr to the file.
+The array must be large enough to hold the product of frames and the number of channels.
+
+<BR><BR>
+The sf_writef_double function has an extra parameter. If normalize is 1, the write
+operation will assume that data in the array is normalize so that all values are
+between -1 and 1 and will scale the samples to fill the bitwidth of the disk file
+format. If normalize is zero, no scaling will take place and the samples will be
+truncated and written to disk as integers of 8, 16, 24 or 32 bits.
+
+<BR><BR>
+The sf_writef_XXXX functions return the number of frames written (which should be the
+same as the frames parameter) or -1 if an error has occurred.
+<BR><BR>
+
+<A NAME="raw">
+<FONT SIZE=+20 COLOR="#5050FF"><BR><B>Raw File Read and Write Functions</B></FONT>
+
+
+<PRE>
+ size_t sf_read_raw (SNDFILE *sndfile, void *ptr, size_t bytes) ;
+ size_t sf_write_raw (SNDFILE *sndfile, void *ptr, size_t bytes) ;
+</PRE>
+
+The raw write and write functions read raw audio data from the audio file (not to be
+confused with reading RAW header-less PCM files). The number of bytes read or written
+must always be an integer multiple of the number of channels multiplied by the number
+of bytes required to represent one sample from one channel.
+
+<BR><BR>
+The raw read and write functions return the number of bytes read or written (which
+should be the same as the bytes parameter) or -1 if an error has occurred.
+<BR><BR>
+
+<A NAME="close">
+<FONT SIZE=+20 COLOR="#5050FF"><BR><B>File Close Function</B></FONT>
+
+
+<PRE>
+ int sf_close (SNDFILE *sndfile) ;
+</PRE>
+
+The close function closes the file, deallocates it's internal buffers and returns
+0 on success or an error value.
+
+<BR><BR>
+<BR>
+
+<HR>
+
+<BR><BR>
+ The libsndfile home page is
+ <A HREF="http://www.zip.com.au/~erikd/libsndfile/">here</A>.
+<P>
+Version : 0.0.18
+</P>
+
+
+</FONT>
+</BODY>
+</HTML>
--- /dev/null
+++ b/common/libsndfile/doc/bugs.html
@@ -1,0 +1,61 @@
+<HTML>
+
+<HEAD>
+ <TITLE>
+ Bug Reporting
+ </TITLE>
+ <META NAME="Author" CONTENT="Erik de Castro Lopo ([email protected])">
+</HEAD>
+
+<BODY TEXT="#FFFFFF" BGCOLOR="#000000" LINK="#9090FF" VLINK="#5050FF" ALINK="#FF00FF">
+
+<FONT SIZE=3>
+
+<FONT SIZE=+20 COLOR="#5050FF">
+ <BR>
+ <CENTER>
+ <B>Reporting Bugs in libsndfile</B>
+ </CENTER>
+</FONT>
+
+<BR><BR>
+ I am interested in finding and fixing all genuine bugs in libsndfile. Bugs I want to
+ fix include any of the following problems (and probably others) :
+ <UL>
+ <LI> compilation problems on new platforms
+ <LI> errors being detected during the `make check' process
+ <LI> segmentation faults occuring inside libsndfile
+ <LI> libsndfile hanging when opening a file
+ <LI> supported sound file types being incorrectly read or written
+ <LI> errors or spelling mistakes in the documentation
+ </UL>
+
+<BR>
+ When submitting a bug report you must include :
+ <UL>
+ <LI> the operating system you are using
+ <LI> the compiler you are using
+ <LI> a description of the problem
+ <LI> information generated by the sfinfo program (see next paragraph)
+ </UL>
+
+<BR>
+ If libsndfile compiles and installs correctly but has difficulty reading a particular
+ file or type of file you should run the <B>sfinfo</B> program (from the examples
+ directory of the libsndfile distribution) on the file. See
+ <A HREF="sfinfo.html">here</A>
+ for an example of the use of the <B>sfinfo</B> program.
+
+<BR><BR>
+ Please do not send me a sound file which fails to open under libsndfile unless I
+ specifically ask you to. The above information should usually suffice for most
+ problems.
+
+<BR><BR>
+ Once you have the above information you may mail it to me at
+ <A HREF="mailto:[email protected]">[email protected]</a>.
+
+<BR><BR>
+</FONT>
+</BODY>
+</HTML>
--- /dev/null
+++ b/common/libsndfile/doc/index.html
@@ -1,0 +1,229 @@
+<HTML>
+
+<HEAD>
+ <TITLE>
+ libsndfile
+ </TITLE>
+ <META NAME="Author" CONTENT="Erik de Castro Lopo ([email protected])">
+ <META NAME="Version" CONTENT="libsndfile-0.0.21">
+ <META NAME="Description" CONTENT="The `libsndfile' Home Page">
+ <META NAME="Keywords" CONTENT="WAV AIFF AU libsndfile sound audio dsp Linux">
+ <META NAME="ROBOTS" CONTENT="NOFOLLOW">
+
+</HEAD>
+
+<BODY TEXT="#FFFFFF" BGCOLOR="#000000" LINK="#9090FF" VLINK="#5050FF" ALINK="#FF00FF">
+
+<CENTER>
+ <IMG SRC="libsndfile.jpg" HEIGHT=98 WIDTH=367 ALT="libsndfile.jpg">
+</CENTER>
+
+<CENTER>
+ <A HREF="#History">History</A> -+-
+ <A HREF="#Capabilities">Capabilities</A> -+-
+ <A HREF="#Similar">Similar or Related Projects</A>
+ <BR>
+ <A HREF="api.html">Programming Interface</A> -+-
+ <A HREF="bugs.html">Bug Reporting</A> -+-
+ <A HREF="#Download">Download</A>
+ <BR>
+ <A HREF="NEWS">News</A> -+-
+ <A HREF="ChangeLog">Change Log</A> -+-
+ <A HREF="#Licensing">Licensing Information</A>
+</CENTER>
+
+<FONT SIZE=3>
+
+<BR><BR>
+ Libsndfile is a C library for reading and writing files containing sampled sound
+ (such as MS Windows WAV and the Apple/SGI AIFF format) through one standard
+ library interface. It is released in source code format under the
+ <A HREF="http://www.gnu.org/copyleft/lesser.html">Gnu Lesser General Public License</A>.
+<BR><BR>
+ The library was written to compile and run on a Linux system but should compile
+ and run on just about any Unix. It can also be compiled and run on Win32 systems
+ using the Microsoft compiler and MacOS using the Metrowerks compiler (thanks to
+ Ben "Jacobs"). There are directions for compiling libsndfile on these platforms
+ in the Win32 and MacOS directories of the source code distribution.
+<BR><BR>
+ It was designed to handle both little-endian (such as WAV) and big-endian
+ (such as AIFF) data, and to compile and run correctly on little-endian (such as Intel
+ and DEC/Compaq Alpha) processor systems as well as big-endian processor systems such
+ as Motorola 68k, Power PC, MIPS and Sparc. Hopefully the design of the library will
+ also make it easy to extend for reading and writing new sound file formats.
+<BR><BR>
+ It has so far been compiled and tested on the following systems:
+ <UL>
+ <LI>i586-pc-linux-gnu (Redhat 5.2 glibc)
+ <LI>powerpc-unknown-linux-gnu (Linux PPC)
+ <LI>mips-sgi-irix5.3 (Native IRIX toolset)
+ <LI>sparc-sun-solaris2.7 (gcc)
+ <LI>sparc-sun-solaris2.5.1 (gcc)
+ <LI>mips-sgi-irix5.3 (gcc)
+ <LI>mips-sgi-irix6.3 (cc - native compiler)
+ <BR>
+ <LI>Win32 (Microsoft Visual C++)
+ <LI>MacOS 8.6 (Metrowerks Codewarrior Pro4)
+ </UL>
+<BR>
+
+<A NAME="Capabilities">
+<FONT SIZE=+20 COLOR="#5050FF"><BR><B>Capabilities</B></FONT>
+
+<BR><BR>
+ libsndfile is currently capable of reading and writing the following sound file
+ formats :
+ <UL>
+ <LI> Microsoft WAV 8, 16, 24 and 32 bit integer PCM.
+ <LI> Microsoft 32 bit floating point PCM.
+ <LI> Microsoft IMA/DVI ADPCM WAV format (16 bits per sample compressed to 4 bits per sample).
+ <LI> Microsoft ADPCM WAV format (16 bits per sample compressed to 4 bits per sample).
+ <LI> Microsoft 8 bit A-law an u-law formats (16 bits per sample compressed to 8 bits per sample).
+ <LI> Microsoft WAV files using GSM 6.10 encoding.
+ <LI> Apple/SGI AIFF and AIFC uncompressed 8, 16, 24 and 32 bit integer PCM.
+ <LI> Sun/NeXT AU/SND format (big endian 8, 16, 24 and 32 bit PCM, 8 bit u-law and 8 bit A-law).
+ <LI> Dec AU format (little endian 8, 16, 24 and 32 bit PCM, 8 bit u-law and 8 bit A-law).
+ <LI> Headerless 8kHz 8bit u-law encoded AU/SND files.
+ <LI> G721 and G723 ADPCM encoded AU/SND files.
+ <LI> RAW header-less PCM files of 8 (signed and unsigned), 16, 24 and 32 bits. The 16, 24 and 32
+ bit files may be big or little endian byte ordering. The 8 bit samples may be signed
+ or unsigned values.
+ <LI> Amiga uncompressed IFF / 8SVX / 16SV PCM files (8 and 16 bit).
+ <LI> Ensoniq PARIS big and little endian, 16 and 24 bit PCM files (.PAF).
+ </UL>
+<BR>
+ Some of the file formats I am also interested in adding are:
+ <UL>
+ <LI> Soundfont II.
+ <LI> Gravis Ultrasound patch files.
+ <LI> Kurzweil K2000 sampler files.
+ <LI> MPEG Layer 3.
+ </UL>
+<BR>
+ Other file formats may also be added on request.
+<BR><BR>
+
+<A NAME="History">
+<FONT SIZE=+20 COLOR="#5050FF"><BR><B>History</B></FONT>
+
+<BR><BR>
+ My first attempt at reading and writing WAV files was in 1990 or so under Windows
+ 3.1. I started using Linux in early 1995 and contributed some code to the
+ <A HREF="http://www.vaxxine.com/ve3wwg/gnuwave.html">wavplay</A>
+ program which would eventually mutate into this library. As one of my interests
+ is Digital Signal Processing (DSP) I decided that as well as reading data from an
+ audio file in the native format (typically 16 bit short integers) it would also
+ be useful to be able to have the library do the conversion to floating point numbers
+ for DSP applications. It then dawned on me that whatever file format (anything from
+ 8 bit unsigned chars, to 32 bit floating point numbers) the library should be able
+ to convert the data to whatever format the library user wishes to use it in. For
+ example, in a sound playback program, the library caller typically wants the sound
+ data in 16 bit short integers to dump into a sound card even though the data in the
+ file may be 32 bit floating point numbers (ie Microsoft's WAVE_FORMAT_IEEE_FLOAT
+ format). Another example would be someone doing speech recognition research who has
+ recorded some speech as a 16 bit WAV file but wants to process it as double precision
+ floating point numbers.
+<BR><BR>
+ Here is the release history for libsndfile :
+ <UL>
+ <LI>Version 0.0.8 (Feb 15 1999) First official release.
+ <LI>Version 0.0.9 (Mar 14 1999) Added support for IMA ADPCM WAV files and
+ 8 bit PCM AIFF, AU and WAV files.
+ <LI>Version 0.0.12 (Jun 19 1999) Added <B>read only</B> support for MS ADPCM WAV files plus
+ a number of bug fixes and code cleanups. It now also compiles and runs on Win32 systems
+ using the Microsoft compiler (thanks to the efforts of Albert Faber).
+ <LI>Version 0.0.15 (Jul 30 1999) Added ability to write MS ADPCM WAV files. Added WAV and AU
+ file A-law and u-law encoding/decoding. Added RAW headerless PCM file handling. It now
+ also compiles and runs on MacOS using the Metrowerks compiler (thanks to Ben "Jacobs").
+ <LI>Version 0.0.16 (Jul 31 1999) Fixed minor MacOS problems.
+ <LI>Version 0.0.17 (Nov 16 1999) Added Ensoniq PARIS audio file format, Amiga IFF / 8SVX / 16SV
+ file format and minor bug fixes.
+ <LI>Version 0.0.18 (Apr 25 2000) Added read/write capabilities for GSM 6.10 encoded WAV files.
+ <LI>Version 0.0.19 (May 20 2000) Minor bug fix for GSM 6.10 encoded WAV files on big endian
+ <LI>Version 0.0.20 (May 30 2000) Minor bug fix for LinuxPPC. Fixes endian-ness related compile
+ <LI>Version 0.0.21 (Aug 16 2000) Added handling of headerless AU/SND files. Added handling
+ of G721 and G723 ADPCM AU/SND files. New improved Win32 compiling and use instructions.
+ License change from GPL to LGPL.
+ <LI>Version 0.0.22 (Oct 17 2000) Bug fix for G723 encoded AU files. References to GPL replaced
+ with LGPL.
+ </UL>
+<BR>
+
+<A NAME="Similar">
+<FONT SIZE=+20 COLOR="#5050FF"><BR><B>Similar or Related Projects</B></FONT>
+
+<BR><BR>
+ <UL>
+ <LI><A HREF="http://home.sprynet.com/~cbagwell/sox.html">SoX</A> is a program for
+ converting between sound file formats.
+ <LI><A HREF="http://members.home.com/ve3wwg/gnuwave.html">Wavplay</A> started out
+ as a minimal WAV file player under Linux and has mutated into Gnuwave a client/server
+ application for more general multimedia and games sound playback.
+ <LI><A HREF="http://www.68k.org/~michael/audiofile/">Audiofile</A> (libaudiofile) is
+ a library similar to libsndfile but with a different programming interface. The
+ author Michael Pruett has set out to clone (and fix some bugs) the libaudiofile
+ library which ships with SGI's IRIX OS. If I had known of this project earlier I
+ may not have started on libsndfile.
+ <LI><A HREF="ftp://ccrma-ftp.stanford.edu/pub/Lisp/sndlib.tar.gz">sndlib.tar.gz</A> is
+ another library written by Bill Schottstaedt of CCRMA.
+ </UL>
+<BR>
+
+<A NAME="Licensing">
+<FONT SIZE=+20 COLOR="#5050FF"><BR><B>Licensing</B></FONT>
+
+<BR><BR>
+ libsndfile is released under the terms of the GNU Lesser General Public License. You may
+ read the license
+ <A HREF="http://www.gnu.org/copyleft/lesser.html">here</A>
+ or read a simple explanation of the ideas behind the GPL and the LGPL
+ <A HREF="http://www.gnu.org/copyleft/copyleft.html">here</A>.
+<BR><BR>
+
+<A NAME="Download">
+<FONT SIZE=+20 COLOR="#5050FF"><BR><B>Download</B></FONT>
+
+<BR><BR>
+ Here is the latest version. It is available in the following formats.
+ <UL>
+ <LI>Source code as a .tar.gz :
+ <A HREF="libsndfile-0.0.21.tar.gz">libsndfile-0.0.21.tar.gz</A>
+ <LI>Source code as a Zip file :
+ <A HREF="libsndfile-0_0_21.zip">libsndfile-0_0_21.zip</A>
+ <LI>Linux source RPM :
+ <A HREF="libsndfile-0.0.21-1.src.rpm">libsndfile-0.0.21-1.src.rpm</A>
+ <LI>Linux i386 binary RPM :
+ <A HREF="libsndfile-0.0.21-1.i386.rpm">libsndfile-0.0.21-1.i386.rpm</A>
+ <LI>Linux i386 development RPM :
+ <A HREF="libsndfile-devel-0.0.21-1.i386.rpm">libsndfile-devel-0.0.21-1.i386.rpm</A>
+
+ </UL>
+<BR><BR>
+
+<HR>
+
+<BR>
+ The latest version of this document can be found
+ <A HREF="http://www.zip.com.au/~erikd/libsndfile/">here</A>.
+
+<P>
+Author :
+ <A HREF="mailto:[email protected]">Erik de Castro Lopo</a>
+<BR>
+
+</P>
+
+This page has been accessed
+ <IMG SRC="/cgi-bin/counter?ft=6|frgb=55;55;55|tr=0|trgb=0;0;0|
+ wxh=15;20|md=6|dd=B|st=1|sh=1|df=libsndfile.dat" HEIGHT=30 WIDTH=100>
+times.
+<! Oct 13, 2000 - 20000 hits>
+
+<BR><BR>
+<BR>
+
+</FONT>
+
+
+</BODY>
+</HTML>
binary files /dev/null b/common/libsndfile/doc/libsndfile.jpg differ
--- /dev/null
+++ b/common/libsndfile/doc/sfinfo.html
@@ -1,0 +1,51 @@
+<HTML>
+
+<HEAD>
+ <TITLE>
+ sfinfo
+ </TITLE>
+ <META NAME="Author" CONTENT="Erik de Castro Lopo ([email protected])">
+</HEAD>
+
+<BODY TEXT="#FFFFFF" BGCOLOR="#000000" LINK="#9090FF" VLINK="#5050FF" ALINK="#FF00FF">
+
+<FONT SIZE=3>
+
+<BR>
+ Here is an example of the output from the <B>sfinfo</B> program distributed with libsndfile.
+
+<BR><BR>
+ This file was opened and parsed correctly but had been truncated so that the values
+ in the <B>FORM</B> and <B>SSND</B> chunks were incorrect.
+ <PRE>
+ <B>erikd@hendrix ></B> examples/sfinfo truncated.aiff
+ truncated.aiff
+ size : 200000
+ FORM : 307474 (should be 199992)
+ AIFF
+ COMM : 18
+ Sample Rate : 16000
+ Samples : 76857
+ Channels : 2
+ Sample Size : 16
+ SSND : 307436 (should be 199946)
+ Offset : 0
+ Block Size : 0
+
+ --------------------------------
+ Sample Rate : 16000
+ Samples : 76857
+ Channels : 2
+ Bit Width : 16
+ Format : 0x00020001
+ Sections : 1
+ Seekable : TRUE
+ Signal Max : 32766
+
+ </PRE>
+
+</FONT>
+
+
+</BODY>
+</HTML>
--- /dev/null
+++ b/common/libsndfile/examples/Makefile.am
@@ -1,0 +1,22 @@
+noinst_PROGRAMS = sfconvert sndfile2oct wav32_aiff24 make_sine sfinfo sfhexdump
+
+SNDFILEDIR =../src
+INCLUDES = -I$(srcdir)/$(SNDFILEDIR)
+
+sfconvert_SOURCES = sfconvert.c
+sfconvert_LDADD = $(SNDFILEDIR)/libsndfile.la
+
+sndfile2oct_SOURCES = sndfile2oct.c
+sndfile2oct_LDADD = $(SNDFILEDIR)/libsndfile.la
+
+wav32_aiff24_SOURCES = wav32_aiff24.c
+wav32_aiff24_LDADD = $(SNDFILEDIR)/libsndfile.la
+
+make_sine_SOURCES = make_sine.c
+make_sine_LDADD = $(SNDFILEDIR)/libsndfile.la -lm
+
+sfinfo_SOURCES = sfinfo.c
+sfinfo_LDADD = $(SNDFILEDIR)/libsndfile.la
+
+sfhexdump_SOURCES = sfhexdump.c
+sfhexdump_LDADD = $(SNDFILEDIR)/libsndfile.la
--- /dev/null
+++ b/common/libsndfile/examples/Makefile.in
@@ -1,0 +1,356 @@
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_alias = @build_alias@
+build_triplet = @build@
+host_alias = @host_alias@
+host_triplet = @host@
+target_alias = @target_alias@
+target_triplet = @target@
+AS = @AS@
+CC = @CC@
+DLLTOOL = @DLLTOOL@
+LD = @LD@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+MAKEINFO = @MAKEINFO@
+NM = @NM@
+OBJDUMP = @OBJDUMP@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+VERSION = @VERSION@
+subdirs = @subdirs@
+
+noinst_PROGRAMS = sfconvert sndfile2oct wav32_aiff24 make_sine sfinfo sfhexdump
+
+SNDFILEDIR = ../src
+INCLUDES = -I$(srcdir)/$(SNDFILEDIR)
+
+sfconvert_SOURCES = sfconvert.c
+sfconvert_LDADD = $(SNDFILEDIR)/libsndfile.la
+
+sndfile2oct_SOURCES = sndfile2oct.c
+sndfile2oct_LDADD = $(SNDFILEDIR)/libsndfile.la
+
+wav32_aiff24_SOURCES = wav32_aiff24.c
+wav32_aiff24_LDADD = $(SNDFILEDIR)/libsndfile.la
+
+make_sine_SOURCES = make_sine.c
+make_sine_LDADD = $(SNDFILEDIR)/libsndfile.la -lm
+
+sfinfo_SOURCES = sfinfo.c
+sfinfo_LDADD = $(SNDFILEDIR)/libsndfile.la
+
+sfhexdump_SOURCES = sfhexdump.c
+sfhexdump_LDADD = $(SNDFILEDIR)/libsndfile.la
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../src/config.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+
+
+DEFS = @DEFS@ -I. -I$(srcdir) -I../src
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+sfconvert_OBJECTS = sfconvert.o
+sfconvert_DEPENDENCIES = $(SNDFILEDIR)/libsndfile.la
+sfconvert_LDFLAGS =
+sndfile2oct_OBJECTS = sndfile2oct.o
+sndfile2oct_DEPENDENCIES = $(SNDFILEDIR)/libsndfile.la
+sndfile2oct_LDFLAGS =
+wav32_aiff24_OBJECTS = wav32_aiff24.o
+wav32_aiff24_DEPENDENCIES = $(SNDFILEDIR)/libsndfile.la
+wav32_aiff24_LDFLAGS =
+make_sine_OBJECTS = make_sine.o
+make_sine_DEPENDENCIES = $(SNDFILEDIR)/libsndfile.la
+make_sine_LDFLAGS =
+sfinfo_OBJECTS = sfinfo.o
+sfinfo_DEPENDENCIES = $(SNDFILEDIR)/libsndfile.la
+sfinfo_LDFLAGS =
+sfhexdump_OBJECTS = sfhexdump.o
+sfhexdump_DEPENDENCIES = $(SNDFILEDIR)/libsndfile.la
+sfhexdump_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)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+SOURCES = $(sfconvert_SOURCES) $(sndfile2oct_SOURCES) $(wav32_aiff24_SOURCES) $(make_sine_SOURCES) $(sfinfo_SOURCES) $(sfhexdump_SOURCES)
+OBJECTS = $(sfconvert_OBJECTS) $(sndfile2oct_OBJECTS) $(wav32_aiff24_OBJECTS) $(make_sine_OBJECTS) $(sfinfo_OBJECTS) $(sfhexdump_OBJECTS)
+
+all: all-redirect
+.SUFFIXES:
+.SUFFIXES: .S .c .lo .o .s
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps examples/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+mostlyclean-noinstPROGRAMS:
+
+clean-noinstPROGRAMS:
+ -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
+
+distclean-noinstPROGRAMS:
+
+maintainer-clean-noinstPROGRAMS:
+
+.c.o:
+ $(COMPILE) -c $<
+
+.s.o:
+ $(COMPILE) -c $<
+
+.S.o:
+ $(COMPILE) -c $<
+
+mostlyclean-compile:
+ -rm -f *.o core *.core
+
+clean-compile:
+
+distclean-compile:
+ -rm -f *.tab.c
+
+maintainer-clean-compile:
+
+.c.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+.s.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+.S.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+
+maintainer-clean-libtool:
+
+sfconvert: $(sfconvert_OBJECTS) $(sfconvert_DEPENDENCIES)
+ @rm -f sfconvert
+ $(LINK) $(sfconvert_LDFLAGS) $(sfconvert_OBJECTS) $(sfconvert_LDADD) $(LIBS)
+
+sndfile2oct: $(sndfile2oct_OBJECTS) $(sndfile2oct_DEPENDENCIES)
+ @rm -f sndfile2oct
+ $(LINK) $(sndfile2oct_LDFLAGS) $(sndfile2oct_OBJECTS) $(sndfile2oct_LDADD) $(LIBS)
+
+wav32_aiff24: $(wav32_aiff24_OBJECTS) $(wav32_aiff24_DEPENDENCIES)
+ @rm -f wav32_aiff24
+ $(LINK) $(wav32_aiff24_LDFLAGS) $(wav32_aiff24_OBJECTS) $(wav32_aiff24_LDADD) $(LIBS)
+
+make_sine: $(make_sine_OBJECTS) $(make_sine_DEPENDENCIES)
+ @rm -f make_sine
+ $(LINK) $(make_sine_LDFLAGS) $(make_sine_OBJECTS) $(make_sine_LDADD) $(LIBS)
+
+sfinfo: $(sfinfo_OBJECTS) $(sfinfo_DEPENDENCIES)
+ @rm -f sfinfo
+ $(LINK) $(sfinfo_LDFLAGS) $(sfinfo_OBJECTS) $(sfinfo_LDADD) $(LIBS)
+
+sfhexdump: $(sfhexdump_OBJECTS) $(sfhexdump_DEPENDENCIES)
+ @rm -f sfhexdump
+ $(LINK) $(sfhexdump_LDFLAGS) $(sfhexdump_OBJECTS) $(sfhexdump_LDADD) $(LIBS)
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = examples
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+make_sine.o: make_sine.c ../src/sndfile.h
+sfconvert.o: sfconvert.c ../src/sndfile.h
+sfhexdump.o: sfhexdump.c ../src/sndfile.h
+sfinfo.o: sfinfo.c ../src/sndfile.h
+sndfile2oct.o: sndfile2oct.c ../src/sndfile.h
+wav32_aiff24.o: wav32_aiff24.c ../src/sndfile.h
+
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am:
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am:
+uninstall: uninstall-am
+all-am: Makefile $(PROGRAMS)
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-noinstPROGRAMS mostlyclean-compile \
+ mostlyclean-libtool mostlyclean-tags \
+ mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-noinstPROGRAMS clean-compile clean-libtool clean-tags \
+ clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-noinstPROGRAMS distclean-compile \
+ distclean-libtool distclean-tags distclean-generic \
+ clean-am
+ -rm -f libtool
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-noinstPROGRAMS \
+ maintainer-clean-compile maintainer-clean-libtool \
+ 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."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: mostlyclean-noinstPROGRAMS distclean-noinstPROGRAMS \
+clean-noinstPROGRAMS maintainer-clean-noinstPROGRAMS \
+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
+
+
+# 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.
+.NOEXPORT:
--- /dev/null
+++ b/common/libsndfile/examples/make_sine.c
@@ -1,0 +1,58 @@
+/*
+** Copyright (C) 1999-2000 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 <math.h>
+
+#include <sndfile.h>
+
+#define SINE_LENGTH (4096)
+
+#ifndef M_PI
+ #define M_PI 3.14159
+#endif
+
+int main (void)
+{ SNDFILE *file ;
+ SF_INFO sfinfo ;
+ int k ;
+ double val ;
+
+ memset (&sfinfo, 0, sizeof (sfinfo)) ;
+
+ sfinfo.samplerate = 8000 ;
+ sfinfo.samples = SINE_LENGTH ;
+ sfinfo.pcmbitwidth = 16 ;
+ sfinfo.channels = 1 ;
+ sfinfo.format = (SF_FORMAT_SVX | SF_FORMAT_PCM) ;
+
+ if (! (file = sf_open_write ("sine.svx", &sfinfo)))
+ { printf ("Error : Not able to open output file.\n") ;
+ return 1 ;
+ } ;
+
+ for (k = 0 ; k < SINE_LENGTH ; k++)
+ { val = 32000 * sin (2.0 * M_PI * ((double) k) / ((double) SINE_LENGTH)) ;
+ if (sf_write_double (file, &val, 1, 0) != 1)
+ sf_perror (file) ;
+ } ;
+
+ sf_close (file) ;
+ return 0 ;
+} /* main */
--- /dev/null
+++ b/common/libsndfile/examples/sfconvert.c
@@ -1,0 +1,196 @@
+/*
+** Copyright (C) 1999-2000 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 <string.h>
+#include <ctype.h>
+
+#include <sndfile.h>
+
+#define BUFFER_LEN 1024
+
+
+typedef struct
+{ char *infilename, *outfilename ;
+ SF_INFO infileinfo, outfileinfo ;
+} OptionData ;
+
+static
+void copy_data (SNDFILE *outfile, SNDFILE *infile, unsigned int len, double normfactor)
+{ static double data [BUFFER_LEN] ;
+ unsigned int readcount, k ;
+
+ readcount = len ;
+ while (readcount == len)
+ { readcount = sf_read_double (infile, data, len, 0) ;
+ for (k = 0 ; k < readcount ; k++)
+ data [k] *= normfactor ;
+ sf_write_double (outfile, data, readcount, 0) ;
+ } ;
+
+ return ;
+} /* copy_data */
+
+static
+int guess_output_file_type (char *str, unsigned int format)
+{ char buffer [16], *cptr ;
+ int k ;
+
+ format &= SF_FORMAT_SUBMASK ;
+
+ if (! (cptr = strrchr (str, '.')))
+ return 0 ;
+
+ strncpy (buffer, cptr + 1, 15) ;
+ buffer [15] = 0 ;
+
+ for (k = 0 ; buffer [k] ; k++)
+ buffer [k] = tolower ((buffer [k])) ;
+
+ if (! strncmp (buffer, "aif", 3))
+ return (SF_FORMAT_AIFF | format) ;
+ if (! strcmp (buffer, "wav"))
+ return (SF_FORMAT_WAV | format) ;
+ if (! strcmp (buffer, "au") || ! strcmp (buffer, "snd"))
+ return (SF_FORMAT_AU | format) ;
+ return 0 ;
+} /* guess_output_file_type */
+
+
+static
+void print_usage (char *progname)
+{ printf ("\nUsage : %s [options] <input file> <output file>\n", progname) ;
+ printf ("\n where [options] may be one of the following:\n") ;
+ printf (" -pcm16 : force the output to 16 bit pcm\n") ;
+ printf (" -pcm24 : force the output to 24 bit pcm\n") ;
+ printf (" -pcm32 : force the output to 32 bit pcm\n") ;
+ printf ("\n with one of the following extra specifiers:\n") ;
+ printf (" -fullscale : force the output signal to the full bit width\n") ;
+ printf ("\n") ;
+} /* print_usage */
+
+int main (int argc, char *argv[])
+{ char *progname, *infilename, *outfilename ;
+ SNDFILE *infile, *outfile ;
+ SF_INFO sfinfo ;
+ int k, outfilemajor ;
+ int outfileminor = 0, outfilebits = 0, fullscale = 0 ;
+ double normfactor ;
+
+ progname = strrchr (argv [0], '/') ;
+ progname = progname ? progname + 1 : argv [0] ;
+
+ if (argc < 3 || argc > 5)
+ { print_usage (progname) ;
+ return 1 ;
+ } ;
+
+ infilename = argv [argc-2] ;
+ outfilename = argv [argc-1] ;
+
+ if (! strcmp (infilename, outfilename))
+ { printf ("Error : Input and output filenames are the same.\n\n") ;
+ print_usage (progname) ;
+ return 1 ;
+ } ;
+
+ if (infilename [0] == '-')
+ { printf ("Error : Input filename (%s) looks like an option.\n\n", infilename) ;
+ print_usage (progname) ;
+ return 1 ;
+ } ;
+
+ if (outfilename [0] == '-')
+ { printf ("Error : Output filename (%s) looks like an option.\n\n", outfilename) ;
+ print_usage (progname) ;
+ return 1 ;
+ } ;
+
+ for (k = 1 ; k < argc - 2 ; k++)
+ { printf ("%s\n", argv [k]) ;
+ if (! strcmp (argv [k], "-pcm16"))
+ { outfileminor = SF_FORMAT_PCM ;
+ outfilebits = 16 ;
+ continue ;
+ } ;
+ if (! strcmp (argv [k], "-pcm24"))
+ { outfileminor = SF_FORMAT_PCM ;
+ outfilebits = 24 ;
+ continue ;
+ } ;
+ if (! strcmp (argv [k], "-pcm32"))
+ { outfileminor = SF_FORMAT_PCM ;
+ outfilebits = 32 ;
+ continue ;
+ } ;
+ if (! strcmp (argv [k], "-fullscale"))
+ fullscale = 1 ;
+ } ;
+
+
+ if (! (infile = sf_open_read (infilename, &sfinfo)))
+ { printf ("Not able to open input file %s.\n", infilename) ;
+ sf_perror (NULL) ;
+ return 1 ;
+ } ;
+
+ if (! (sfinfo.format = guess_output_file_type (outfilename, sfinfo.format)))
+ { printf ("Error : Not able to determine output file type for %s.\n", outfilename) ;
+ return 1 ;
+ } ;
+
+ outfilemajor = sfinfo.format & SF_FORMAT_TYPEMASK ;
+
+ if (outfileminor)
+ { sfinfo.format = outfilemajor | outfileminor ;
+ printf ("asdasdasdad\n") ;
+ }
+ else
+ sfinfo.format = outfilemajor | (sfinfo.format & SF_FORMAT_SUBMASK) ;
+
+ if (outfilebits)
+ sfinfo.pcmbitwidth = outfilebits ;
+
+ if (! sf_format_check (&sfinfo))
+ { printf ("Error : output file format is invalid (0x%08X).\n", sfinfo.format) ;
+ return 1 ;
+ } ;
+
+ normfactor = sf_signal_max (infile) ;
+ if (normfactor < 1.0 && normfactor > 0.0)
+ normfactor = fullscale ? 2.0 / normfactor * ((double) (1 << (sfinfo.pcmbitwidth - 2))) :
+ 2.0 * ((double) (1 << (sfinfo.pcmbitwidth - 2))) ;
+ else
+ normfactor = 1.0 ;
+
+ printf ("normfactor : %g\n", normfactor) ;
+
+ if (! (outfile = sf_open_write (outfilename, &sfinfo)))
+ { printf ("Not able to open output file %s.\n", outfilename) ;
+ return 1 ;
+ } ;
+
+ copy_data (outfile, infile, BUFFER_LEN / sfinfo.channels, normfactor) ;
+
+ sf_close (infile) ;
+ sf_close (outfile) ;
+
+ return 0 ;
+} /* main */
+
--- /dev/null
+++ b/common/libsndfile/examples/sfhexdump.c
@@ -1,0 +1,78 @@
+/*
+** Copyright (C) 1999-2000 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 <string.h>
+#include <ctype.h>
+
+#include <sndfile.h>
+
+#define BUFFER_LEN 4096
+
+static
+void print_usage (char *progname)
+{ printf ("\nUsage : %s <file>\n", progname) ;
+ printf ("\n") ;
+} /* print_usage */
+
+int main (int argc, char *argv[])
+{ static char strbuffer [BUFFER_LEN] ;
+ unsigned int linecount ;
+ char *progname, *infilename ;
+ SNDFILE *infile ;
+ SF_INFO sfinfo ;
+ int k, start, readcount ;
+
+ progname = strrchr (argv [0], '/') ;
+ progname = progname ? progname + 1 : argv [0] ;
+
+ if (argc != 2)
+ { print_usage (progname) ;
+ return 1 ;
+ } ;
+
+ infilename = argv [1] ;
+
+ if (! (infile = sf_open_read (infilename, &sfinfo)))
+ { printf ("Error : Not able to open input file %s.\n", infilename) ;
+ sf_perror (NULL) ;
+ sf_get_header_info (NULL, strbuffer, BUFFER_LEN, 0) ;
+ printf (strbuffer) ;
+ return 1 ;
+ } ;
+
+ start = 0 ;
+
+ linecount = 24 ;
+
+ while ((readcount = sf_read_raw (infile, strbuffer, linecount)))
+ { printf ("%08X: ", start) ;
+ for (k = 0 ; k < readcount ; k++)
+ printf ("%02X ", strbuffer [k] & 0xFF) ;
+ for (k = readcount ; k < 16 ; k++)
+ printf (" ") ;
+ printf ("\n") ;
+ start += readcount ;
+ } ;
+
+ sf_close (infile) ;
+
+ return 0 ;
+} /* main */
+
--- /dev/null
+++ b/common/libsndfile/examples/sfinfo.c
@@ -1,0 +1,84 @@
+/*
+** Copyright (C) 1999-2000 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 <string.h>
+#include <ctype.h>
+
+#include <sndfile.h>
+
+#define BUFFER_LEN 4096
+
+static
+void print_usage (char *progname)
+{ char buffer [256] ;
+
+ sf_get_lib_version (buffer, 256) ;
+ printf ("libsndfile version : %s\n\n", buffer) ;
+ printf ("\nUsage : %s <file>\n", progname) ;
+ printf ("\n Prints out information about a sound file.\n") ;
+ printf ("\n") ;
+} /* print_usage */
+
+int main (int argc, char *argv[])
+{ static char strbuffer [BUFFER_LEN] ;
+ char *progname, *infilename ;
+ SNDFILE *infile ;
+ SF_INFO sfinfo ;
+ int k ;
+
+ progname = strrchr (argv [0], '/') ;
+ progname = progname ? progname + 1 : argv [0] ;
+
+ if (argc < 2)
+ { print_usage (progname) ;
+ return 1 ;
+ } ;
+
+ for (k = 1 ; k < argc ; k++)
+ { infilename = argv [k] ;
+
+ infile = sf_open_read (infilename, &sfinfo) ;
+
+ sf_get_header_info (infile, strbuffer, BUFFER_LEN, 0) ;
+ puts (strbuffer) ;
+
+ printf ("--------------------------------\n") ;
+
+ if (infile)
+ { printf ("Sample Rate : %d\n", sfinfo.samplerate) ;
+ printf ("Samples : %d\n", sfinfo.samples) ;
+ printf ("Channels : %d\n", sfinfo.channels) ;
+ printf ("Bit Width : %d\n", sfinfo.pcmbitwidth) ;
+ printf ("Format : 0x%08X\n", sfinfo.format) ;
+ printf ("Sections : %d\n", sfinfo.sections) ;
+ printf ("Seekable : %s\n", (sfinfo.seekable ? "TRUE" : "FALSE")) ;
+ printf ("Signal Max : %g\n", sf_signal_max (infile)) ;
+ }
+ else
+ { printf ("Error : Not able to open input file %s.\n", infilename) ;
+ sf_perror (NULL) ;
+ } ;
+
+ sf_close (infile) ;
+ } ;
+
+ return 0 ;
+} /* main */
+
--- /dev/null
+++ b/common/libsndfile/examples/sndfile2oct.c
@@ -1,0 +1,95 @@
+/*
+** Copyright (C) 1999-2000 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 <string.h>
+#include <ctype.h>
+
+#include <sndfile.h>
+
+#define BUFFER_LEN 400
+
+
+int main (int argc, char *argv[])
+{ static double data [BUFFER_LEN] ;
+ char *progname, *infilename, *outfilename, *cptr ;
+ SNDFILE *infile ;
+ SF_INFO sfinfo ;
+ FILE *outfile ;
+ unsigned int k, readcount, len, total ;
+
+ progname = strrchr (argv [0], '/') ;
+ progname = progname ? progname + 1 : argv [0] ;
+
+ if (argc != 3)
+ { printf ("\n Usage : %s <input file> <output file>\n\n", progname) ;
+ return 1 ;
+ } ;
+
+ infilename = argv [1] ;
+ outfilename = argv [2] ;
+
+ if (! strcmp (infilename, outfilename))
+ { printf ("Error : Input and output filename are the same.\n") ;
+ return 1 ;
+ } ;
+
+ if (! (infile = sf_open_read (infilename, &sfinfo)))
+ { printf ("Not able to open input file %s.\n", infilename) ;
+ sf_perror (NULL) ;
+ return 1 ;
+ } ;
+
+ if (! (outfile = fopen (outfilename, "w")))
+ { printf ("Not able to open output file %s.\n", outfilename) ;
+ sf_perror (NULL) ;
+ return 1 ;
+ } ;
+
+ outfilename = strrchr (argv [2], '/') ;
+ outfilename = outfilename ? outfilename + 1 : argv [2] ;
+ if ((cptr = strchr (outfilename, '.')))
+ *cptr = 0 ;
+
+ fprintf (outfile, "# name: %s\n", outfilename) ;
+ fprintf (outfile, "# type: matrix\n") ;
+ fprintf (outfile, "# rows: %d\n", sfinfo.samples) ;
+ fprintf (outfile, "# columns: %d", sfinfo.channels) ;
+
+ len = BUFFER_LEN - (BUFFER_LEN % sfinfo.channels) ;
+ total = 0 ;
+ while ((readcount = sf_read_double (infile, data, len, 0)))
+ {
+ for (k = 0 ; k < readcount ; k++)
+ { if (! (k % sfinfo.channels))
+ fprintf (outfile, "\n") ;
+ fprintf (outfile, "%g ", data [k]) ;
+ } ;
+ memset (data, 0, len * sizeof (double)) ;
+ total += readcount ;
+ } ;
+ if (total != sfinfo.samples * sfinfo.channels)
+ printf ("Error : Values read (%d) != samples * channels (%d)\n", total, sfinfo.samples * sfinfo.channels) ;
+
+ fclose (outfile) ;
+ sf_close (infile) ;
+
+ return 0 ;
+} /* main */
+
--- /dev/null
+++ b/common/libsndfile/examples/wav32_aiff24.c
@@ -1,0 +1,109 @@
+/*
+** Copyright (C) 1999-2000 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 <string.h>
+#include <ctype.h>
+
+#include <sndfile.h>
+
+#define BUFFER_LEN 1024
+
+static double data [BUFFER_LEN] ;
+
+static
+void copy_data (SNDFILE *outfile, SNDFILE *infile, unsigned int len, double normfactor)
+{ unsigned int readcount, k ;
+
+ readcount = len ;
+ while (readcount == len)
+ { readcount = sf_read_double (infile, data, len, 0) ;
+ for (k = 0 ; k < readcount ; k++)
+ data [k] *= normfactor ;
+ sf_write_double (outfile, data, readcount, 0) ;
+ } ;
+
+ return ;
+} /* copy_data */
+
+static
+void print_usage (char *progname)
+{
+ printf ("\nConverts a 32 bit floating point WAV file into a 24 bit PCM AIFF file.\n") ;
+ printf (" Usage : %s <input file> <output file>\n\n", progname) ;
+} /* print_usage */
+
+int main (int argc, char *argv[])
+{ char *progname, *infilename, *outfilename ;
+ SNDFILE *infile, *outfile ;
+ SF_INFO sfinfo ;
+ double normfactor ;
+
+ progname = strrchr (argv [0], '/') ;
+ progname = progname ? progname + 1 : argv [0] ;
+
+ if (argc != 3)
+ { print_usage (progname) ;
+ return 1 ;
+ } ;
+
+ infilename = argv [1] ;
+ outfilename = argv [2] ;
+
+ if (! strcmp (infilename, outfilename))
+ { printf ("Error : Input and output filenames are the same.\n\n") ;
+ print_usage (progname) ;
+ return 1 ;
+ } ;
+
+ if (! (infile = sf_open_read (infilename, &sfinfo)))
+ { printf ("Not able to open input file %s.\n", infilename) ;
+ sf_perror (NULL) ;
+ return 1 ;
+ } ;
+
+ if (sfinfo.format != (SF_FORMAT_WAV | SF_FORMAT_FLOAT))
+ { printf ("Error : Input file %s is not a 32 bit floating point WAV file.\n", infilename) ;
+ return 1 ;
+ } ;
+
+ sfinfo.format = (SF_FORMAT_AIFF | SF_FORMAT_PCM) ;
+ sfinfo.pcmbitwidth = 24 ;
+
+ normfactor = sf_signal_max (infile) ;
+ if (normfactor < 1.0 && normfactor > 0.0)
+ normfactor = ((double) 0x400000) ;
+ else
+ normfactor = 1.0 ;
+
+ printf ("normfactor : %g\n", normfactor) ;
+
+ if (! (outfile = sf_open_write (outfilename, &sfinfo)))
+ { printf ("Not able to open output file %s.\n", outfilename) ;
+ return 1 ;
+ } ;
+
+ copy_data (outfile, infile, BUFFER_LEN / sfinfo.channels, normfactor) ;
+
+ sf_close (infile) ;
+ sf_close (outfile) ;
+
+ return 0 ;
+} /* main */
+
--- /dev/null
+++ b/common/libsndfile/install-sh
@@ -1,0 +1,119 @@
+#!/bin/sh
+
+#
+# install - install a program, script, or datafile
+# This comes from X11R5; it is not part of GNU.
+#
+# $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+#
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+
+instcmd="$mvprog"
+chmodcmd=""
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+lib=""
+dst=""
+
+while [ x"$1" != x ]; do
+ case $1 in
+ -c) instcmd="$cpprog"
+ shift
+ continue;;
+
+ -m) chmodcmd="$chmodprog $2"
+ shift
+ shift
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd="$stripprog"
+ shift
+ continue;;
+
+ *) if [ x"$lib" = x ]
+ then
+ lib=$1
+ else
+ dst=$1
+ fi
+ shift
+ continue;;
+ esac
+done
+
+if [ x"$lib" = x ]
+then
+ echo "install: no input file specified"
+ exit 1
+fi
+
+if [ x"$dst" = x ]
+then
+ echo "install: no destination specified"
+ exit 1
+fi
+
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+if [ -d $dst ]
+then
+ dst="$dst"/`basename $lib`
+fi
+
+# Make a temp file name in the proper directory.
+
+dstdir=`dirname $dst`
+dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+$doit $instcmd $lib $dsttmp
+
+# and set any options; do chmod last to preserve setuid bits
+
+if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; fi
+if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; fi
+if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; fi
+if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; fi
+
+# Now rename the file to the real destination.
+
+$doit $rmcmd $dst
+$doit $mvcmd $dsttmp $dst
+
+
+exit 0
--- /dev/null
+++ b/common/libsndfile/libsndfile.spec
@@ -1,0 +1,60 @@
+
+%define name libsndfile
+%define version 0.0.22
+%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.spec.in
@@ -1,0 +1,60 @@
+
+%define name @PACKAGE@
+%define version @VERSION@
+%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/ltconfig
@@ -1,0 +1,3017 @@
+#! /bin/sh
+
+# ltconfig - Create a system-specific libtool.
+# Copyright (C) 1996-1999 Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <[email protected]>, 1996
+#
+# 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
+# (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.
+
+# A lot of this script is taken from autoconf-2.10.
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+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
+
+# 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) PATH_SEPARATOR=';' ;;
+ *) PATH_SEPARATOR=':' ;;
+ esac
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "${CDPATH+set}" = set; then CDPATH=; export CDPATH; fi
+
+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' ||
+ test "X`($echo "$echo_test_string") 2>/dev/null`" != X"$echo_test_string"; then
+ # 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="${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' &&
+ test "X`($dir/echo "$echo_test_string") 2>/dev/null`" = 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' &&
+ test "X`(print -r "$echo_test_string") 2>/dev/null`" = 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 ltconfig 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' &&
+ test "X`($echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then
+ # Cool, printf works
+ :
+ elif test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' &&
+ test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = 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 test "X`("$CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' &&
+ test "X`("$CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = 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}" "$0" ${1+"$@"}
+ else
+ # Oops. We lost completely, so just stick with echo.
+ echo=echo
+ fi
+ fi
+ fi
+ fi
+fi
+
+# 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'
+
+# The name of this program.
+progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'`
+
+# Constants:
+PROGRAM=ltconfig
+PACKAGE=libtool
+VERSION=1.3.3
+TIMESTAMP=" (1.385.2.181 1999/07/02 15:49:11)"
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.c 1>&5'
+ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.c $LIBS 1>&5'
+rm="rm -f"
+
+help="Try \`$progname --help' for more information."
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+enable_shared=yes
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+enable_static=yes
+enable_fast_install=yes
+enable_dlopen=unknown
+enable_win32_dll=no
+ltmain=
+silent=
+srcdir=
+ac_config_guess=
+ac_config_sub=
+host=
+nonopt=
+ofile="$default_ofile"
+verify_host=yes
+with_gcc=no
+with_gnu_ld=no
+need_locks=yes
+ac_ext=c
+objext=o
+libext=a
+exeext=
+cache_file=
+
+old_AR="$AR"
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+old_CPPFLAGS="$CPPFLAGS"
+old_LDFLAGS="$LDFLAGS"
+old_LD="$LD"
+old_LN_S="$LN_S"
+old_LIBS="$LIBS"
+old_NM="$NM"
+old_RANLIB="$RANLIB"
+old_DLLTOOL="$DLLTOOL"
+old_OBJDUMP="$OBJDUMP"
+old_AS="$AS"
+
+# Parse the command line options.
+args=
+prev=
+for option
+do
+ case "$option" in
+ -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) optarg= ;;
+ esac
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ eval "$prev=\$option"
+ prev=
+ continue
+ fi
+
+ case "$option" in
+ --help) cat <<EOM
+Usage: $progname [OPTION]... [HOST [LTMAIN]]
+
+Generate a system-specific libtool script.
+
+ --debug enable verbose shell tracing
+ --disable-shared do not build shared libraries
+ --disable-static do not build static libraries
+ --disable-fast-install do not optimize for fast installation
+ --enable-dlopen enable dlopen support
+ --enable-win32-dll enable building dlls on win32 hosts
+ --help display this help and exit
+ --no-verify do not verify that HOST is a valid host type
+-o, --output=FILE specify the output file [default=$default_ofile]
+ --quiet same as \`--silent'
+ --silent do not print informational messages
+ --srcdir=DIR find \`config.guess' in DIR
+ --version output version information and exit
+ --with-gcc assume that the GNU C compiler will be used
+ --with-gnu-ld assume that the C compiler uses the GNU linker
+ --disable-lock disable file locking
+ --cache-file=FILE configure cache file
+
+LTMAIN is the \`ltmain.sh' shell script fragment or \`ltmain.c' program
+that provides basic libtool functionality.
+
+HOST is the canonical host system name [default=guessed].
+EOM
+ exit 0
+ ;;
+
+ --debug)
+ echo "$progname: enabling shell trace mode"
+ set -x
+ ;;
+
+ --disable-shared) enable_shared=no ;;
+
+ --disable-static) enable_static=no ;;
+
+ --disable-fast-install) enable_fast_install=no ;;
+
+ --enable-dlopen) enable_dlopen=yes ;;
+
+ --enable-win32-dll) enable_win32_dll=yes ;;
+
+ --quiet | --silent) silent=yes ;;
+
+ --srcdir) prev=srcdir ;;
+ --srcdir=*) srcdir="$optarg" ;;
+
+ --no-verify) verify_host=no ;;
+
+ --output | -o) prev=ofile ;;
+ --output=*) ofile="$optarg" ;;
+
+ --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"; exit 0 ;;
+
+ --with-gcc) with_gcc=yes ;;
+ --with-gnu-ld) with_gnu_ld=yes ;;
+
+ --disable-lock) need_locks=no ;;
+
+ --cache-file=*) cache_file="$optarg" ;;
+
+ -*)
+ echo "$progname: unrecognized option \`$option'" 1>&2
+ echo "$help" 1>&2
+ exit 1
+ ;;
+
+ *)
+ if test -z "$ltmain"; then
+ ltmain="$option"
+ elif test -z "$host"; then
+# This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1
+# if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then
+# echo "$progname: warning \`$option' is not a valid host type" 1>&2
+# fi
+ host="$option"
+ else
+ echo "$progname: too many arguments" 1>&2
+ echo "$help" 1>&2
+ exit 1
+ fi ;;
+ esac
+done
+
+if test -z "$ltmain"; then
+ echo "$progname: you must specify a LTMAIN file" 1>&2
+ echo "$help" 1>&2
+ exit 1
+fi
+
+if test ! -f "$ltmain"; then
+ echo "$progname: \`$ltmain' does not exist" 1>&2
+ echo "$help" 1>&2
+ exit 1
+fi
+
+# Quote any args containing shell metacharacters.
+ltconfig_args=
+for arg
+do
+ case "$arg" in
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+ ltconfig_args="$ltconfig_args '$arg'" ;;
+ *) ltconfig_args="$ltconfig_args $arg" ;;
+ esac
+done
+
+# A relevant subset of AC_INIT.
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 5 compiler messages saved in config.log
+# 6 checking for... messages and results
+if test "$silent" = yes; then
+ exec 6>/dev/null
+else
+ exec 6>&1
+fi
+exec 5>>./config.log
+
+# NLS nuisances.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LANG+set}" = set; then LANG=C; export LANG; fi
+
+if test -n "$cache_file" && test -r "$cache_file"; then
+ echo "loading cache $cache_file within ltconfig"
+ . $cache_file
+fi
+
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+ # Stardent Vistra SVR4 grep lacks -e, says [email protected].
+ if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+ ac_n= ac_c='
+' ac_t=' '
+ else
+ ac_n=-n ac_c= ac_t=
+ fi
+else
+ ac_n= ac_c='\c' ac_t=
+fi
+
+if test -z "$srcdir"; then
+ # Assume the source directory is the same one as the path to LTMAIN.
+ srcdir=`$echo "X$ltmain" | $Xsed -e 's%/[^/]*$%%'`
+ test "$srcdir" = "$ltmain" && srcdir=.
+fi
+
+trap "$rm conftest*; exit 1" 1 2 15
+if test "$verify_host" = yes; then
+ # Check for config.guess and config.sub.
+ ac_aux_dir=
+ for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/config.guess; then
+ ac_aux_dir=$ac_dir
+ break
+ fi
+ done
+ if test -z "$ac_aux_dir"; then
+ echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2
+ echo "$help" 1>&2
+ exit 1
+ fi
+ ac_config_guess=$ac_aux_dir/config.guess
+ ac_config_sub=$ac_aux_dir/config.sub
+
+ # Make sure we can run config.sub.
+ if $SHELL $ac_config_sub sun4 >/dev/null 2>&1; then :
+ else
+ echo "$progname: cannot run $ac_config_sub" 1>&2
+ echo "$help" 1>&2
+ exit 1
+ fi
+
+ echo $ac_n "checking host system type""... $ac_c" 1>&6
+
+ host_alias=$host
+ case "$host_alias" in
+ "")
+ if host_alias=`$SHELL $ac_config_guess`; then :
+ else
+ echo "$progname: cannot guess host type; you must specify one" 1>&2
+ echo "$help" 1>&2
+ exit 1
+ fi ;;
+ esac
+ host=`$SHELL $ac_config_sub $host_alias`
+ echo "$ac_t$host" 1>&6
+
+ # Make sure the host verified.
+ test -z "$host" && exit 1
+
+elif test -z "$host"; then
+ echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2
+ echo "$help" 1>&2
+ exit 1
+else
+ host_alias=$host
+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
+
+host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+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 "${COLLECT_NAMES+set}" != set; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+ fi
+ ;;
+esac
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR cru $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+# Set a sane default for `AR'.
+test -z "$AR" && AR=ar
+
+# Set a sane default for `OBJDUMP'.
+test -z "$OBJDUMP" && OBJDUMP=objdump
+
+# If RANLIB is not set, then run the test.
+if test "${RANLIB+set}" != "set"; then
+ result=no
+
+ echo $ac_n "checking for ranlib... $ac_c" 1>&6
+ IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
+ for dir in $PATH; do
+ test -z "$dir" && dir=.
+ if test -f $dir/ranlib || test -f $dir/ranlib$ac_exeext; then
+ RANLIB="ranlib"
+ result="ranlib"
+ break
+ fi
+ done
+ IFS="$save_ifs"
+
+ echo "$ac_t$result" 1>&6
+fi
+
+if test -n "$RANLIB"; then
+ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+ old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+fi
+
+# Set sane defaults for `DLLTOOL', `OBJDUMP', and `AS', used on cygwin.
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$AS" && AS=as
+
+# Check to see if we are using GCC.
+if test "$with_gcc" != yes || test -z "$CC"; then
+ # If CC is not set, then try to find GCC or a usable CC.
+ if test -z "$CC"; then
+ echo $ac_n "checking for gcc... $ac_c" 1>&6
+ IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
+ for dir in $PATH; do
+ test -z "$dir" && dir=.
+ if test -f $dir/gcc || test -f $dir/gcc$ac_exeext; then
+ CC="gcc"
+ break
+ fi
+ done
+ IFS="$save_ifs"
+
+ if test -n "$CC"; then
+ echo "$ac_t$CC" 1>&6
+ else
+ echo "$ac_t"no 1>&6
+ fi
+ fi
+
+ # Not "gcc", so try "cc", rejecting "/usr/ucb/cc".
+ if test -z "$CC"; then
+ echo $ac_n "checking for cc... $ac_c" 1>&6
+ IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
+ cc_rejected=no
+ for dir in $PATH; do
+ test -z "$dir" && dir=.
+ if test -f $dir/cc || test -f $dir/cc$ac_exeext; then
+ if test "$dir/cc" = "/usr/ucb/cc"; then
+ cc_rejected=yes
+ continue
+ fi
+ CC="cc"
+ break
+ fi
+ done
+ IFS="$save_ifs"
+ if test $cc_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $CC
+ shift
+ if test $# -gt 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same name, so the bogon will be chosen
+ # first if we set CC to just the name; use the full file name.
+ shift
+ set dummy "$dir/cc" "$@"
+ shift
+ CC="$@"
+ fi
+ fi
+
+ if test -n "$CC"; then
+ echo "$ac_t$CC" 1>&6
+ else
+ echo "$ac_t"no 1>&6
+ fi
+
+ if test -z "$CC"; then
+ echo "$progname: error: no acceptable cc found in \$PATH" 1>&2
+ exit 1
+ fi
+ fi
+
+ # Now see if the compiler is really GCC.
+ with_gcc=no
+ echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6
+ echo "$progname:581: checking whether we are using GNU C" >&5
+
+ $rm conftest.c
+ cat > conftest.c <<EOF
+#ifdef __GNUC__
+ yes;
+#endif
+EOF
+ if { ac_try='${CC-cc} -E conftest.c'; { (eval echo $progname:589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+ with_gcc=yes
+ fi
+ $rm conftest.c
+ echo "$ac_t$with_gcc" 1>&6
+fi
+
+# Allow CC to be a program name with arguments.
+set dummy $CC
+compiler="$2"
+
+echo $ac_n "checking for object suffix... $ac_c" 1>&6
+$rm conftest*
+echo 'int i = 1;' > conftest.c
+echo "$progname:603: checking for object suffix" >& 5
+if { (eval echo $progname:604: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; }; then
+ # Append any warnings to the config.log.
+ cat conftest.err 1>&5
+
+ for ac_file in conftest.*; do
+ case $ac_file in
+ *.c) ;;
+ *) objext=`echo $ac_file | sed -e s/conftest.//` ;;
+ esac
+ done
+else
+ cat conftest.err 1>&5
+ echo "$progname: failed program was:" >&5
+ cat conftest.c >&5
+fi
+$rm conftest*
+echo "$ac_t$objext" 1>&6
+
+echo $ac_n "checking for executable suffix... $ac_c" 1>&6
+if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_cv_exeext="no"
+ $rm conftest*
+ echo 'main () { return 0; }' > conftest.c
+ echo "$progname:629: checking for executable suffix" >& 5
+ if { (eval echo $progname:630: \"$ac_link\") 1>&5; (eval $ac_link) 2>conftest.err; }; then
+ # Append any warnings to the config.log.
+ cat conftest.err 1>&5
+
+ for ac_file in conftest.*; do
+ case $ac_file in
+ *.c | *.err | *.$objext ) ;;
+ *) ac_cv_exeext=.`echo $ac_file | sed -e s/conftest.//` ;;
+ esac
+ done
+ else
+ cat conftest.err 1>&5
+ echo "$progname: failed program was:" >&5
+ cat conftest.c >&5
+ fi
+ $rm conftest*
+fi
+if test "X$ac_cv_exeext" = Xno; then
+ exeext=""
+else
+ exeext="$ac_cv_exeext"
+fi
+echo "$ac_t$ac_cv_exeext" 1>&6
+
+echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6
+pic_flag=
+special_shlib_compile_flags=
+wl=
+link_static_flag=
+no_builtin_flag=
+
+if test "$with_gcc" = yes; then
+ wl='-Wl,'
+ link_static_flag='-static'
+
+ case "$host_os" in
+ beos* | irix5* | irix6* | osf3* | osf4*)
+ # PIC is the default for these OSes.
+ ;;
+ 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
+ # we not sure about C++ programs.
+ link_static_flag="$link_static_flag ${wl}-lC"
+ ;;
+ cygwin* | mingw* | os2*)
+ # We can build DLLs from non-PIC.
+ ;;
+ 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'.
+ pic_flag='-m68020 -resident32 -malways-restore-a4'
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec; then
+ pic_flag=-Kconform_pic
+ fi
+ ;;
+ *)
+ pic_flag='-fPIC'
+ ;;
+ esac
+else
+ # PORTME Check for PIC flags for the system compiler.
+ case "$host_os" in
+ aix3* | aix4*)
+ # All AIX code is PIC.
+ link_static_flag='-bnso -bI:/lib/syscalls.exp'
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ # Is there a better link_static_flag that works with the bundled CC?
+ wl='-Wl,'
+ link_static_flag="${wl}-a ${wl}archive"
+ pic_flag='+Z'
+ ;;
+
+ irix5* | irix6*)
+ wl='-Wl,'
+ link_static_flag='-non_shared'
+ # PIC (with -KPIC) is the default.
+ ;;
+
+ cygwin* | mingw* | os2*)
+ # We can build DLLs from non-PIC.
+ ;;
+
+ osf3* | osf4*)
+ # All OSF/1 code is PIC.
+ wl='-Wl,'
+ link_static_flag='-non_shared'
+ ;;
+
+ sco3.2v5*)
+ pic_flag='-Kpic'
+ link_static_flag='-dn'
+ special_shlib_compile_flags='-belf'
+ ;;
+
+ solaris*)
+ pic_flag='-KPIC'
+ link_static_flag='-Bstatic'
+ wl='-Wl,'
+ ;;
+
+ sunos4*)
+ pic_flag='-PIC'
+ link_static_flag='-Bstatic'
+ wl='-Qoption ld '
+ ;;
+
+ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+ pic_flag='-KPIC'
+ link_static_flag='-Bstatic'
+ wl='-Wl,'
+ ;;
+
+ uts4*)
+ pic_flag='-pic'
+ link_static_flag='-Bstatic'
+ ;;
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ pic_flag='-Kconform_pic'
+ link_static_flag='-Bstatic'
+ fi
+ ;;
+ *)
+ can_build_shared=no
+ ;;
+ esac
+fi
+
+if test -n "$pic_flag"; then
+ echo "$ac_t$pic_flag" 1>&6
+
+ # Check to make sure the pic_flag actually works.
+ echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6
+ $rm conftest*
+ echo "int some_variable = 0;" > conftest.c
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $pic_flag -DPIC"
+ echo "$progname:776: checking if $compiler PIC flag $pic_flag works" >&5
+ if { (eval echo $progname:777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then
+ # Append any warnings to the config.log.
+ cat conftest.err 1>&5
+
+ 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
+ echo "$ac_t"no 1>&6
+ can_build_shared=no
+ pic_flag=
+ else
+ echo "$ac_t"yes 1>&6
+ pic_flag=" $pic_flag"
+ fi
+ ;;
+ *)
+ echo "$ac_t"yes 1>&6
+ pic_flag=" $pic_flag"
+ ;;
+ esac
+ else
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ can_build_shared=no
+ pic_flag=
+ echo "$ac_t"no 1>&6
+ fi
+ CFLAGS="$save_CFLAGS"
+ $rm conftest*
+else
+ echo "$ac_t"none 1>&6
+fi
+
+# Check to see if options -o and -c are simultaneously supported by compiler
+echo $ac_n "checking if $compiler supports -c -o file.o... $ac_c" 1>&6
+$rm -r conftest 2>/dev/null
+mkdir conftest
+cd conftest
+$rm conftest*
+echo "int some_variable = 0;" > conftest.c
+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.o"
+echo "$progname:829: checking if $compiler supports -c -o file.o" >&5
+if { (eval echo $progname:830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.o; 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
+ echo "$ac_t"no 1>&6
+ compiler_c_o=no
+ else
+ echo "$ac_t"yes 1>&6
+ compiler_c_o=yes
+ fi
+else
+ # Append any errors to the config.log.
+ cat out/conftest.err 1>&5
+ compiler_c_o=no
+ echo "$ac_t"no 1>&6
+fi
+CFLAGS="$save_CFLAGS"
+chmod u+w .
+$rm conftest* out/*
+rmdir out
+cd ..
+rmdir conftest
+$rm -r conftest 2>/dev/null
+
+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
+ $rm conftest*
+ echo "int some_variable = 0;" > conftest.c
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -c -o conftest.lo"
+ echo "$progname:862: checking if $compiler supports -c -o file.lo" >&5
+if { (eval echo $progname:863: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.lo; then
+
+ # 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
+ echo "$ac_t"no 1>&6
+ compiler_o_lo=no
+ else
+ echo "$ac_t"yes 1>&6
+ compiler_o_lo=yes
+ fi
+ else
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ compiler_o_lo=no
+ echo "$ac_t"no 1>&6
+ fi
+ CFLAGS="$save_CFLAGS"
+ $rm conftest*
+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
+ 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
+ $rm conftest*
+ if test "$hard_links" = no; then
+ echo "*** WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2
+ need_locks=warn
+ fi
+else
+ need_locks=no
+fi
+
+if test "$with_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
+ $rm conftest*
+ echo "int some_variable = 0;" > conftest.c
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.c"
+ echo "$progname:914: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+ if { (eval echo $progname:915: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then
+
+ # 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
+ echo "$ac_t"no 1>&6
+ compiler_rtti_exceptions=no
+ else
+ echo "$ac_t"yes 1>&6
+ compiler_rtti_exceptions=yes
+ fi
+ else
+ # Append any errors to the config.log.
+ cat conftest.err 1>&5
+ compiler_rtti_exceptions=no
+ echo "$ac_t"no 1>&6
+ fi
+ CFLAGS="$save_CFLAGS"
+ $rm conftest*
+
+ if test "$compiler_rtti_exceptions" = "yes"; then
+ no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
+ else
+ no_builtin_flag=' -fno-builtin'
+ fi
+
+fi
+
+# Check for any special shared library compilation flags.
+if test -n "$special_shlib_compile_flags"; then
+ echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2
+ if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$special_shlib_compile_flags[ ]" >/dev/null; then :
+ else
+ echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2
+ can_build_shared=no
+ fi
+fi
+
+echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6
+$rm conftest*
+echo 'main(){return(0);}' > conftest.c
+save_LDFLAGS="$LDFLAGS"
+LDFLAGS="$LDFLAGS $link_static_flag"
+echo "$progname:958: checking if $compiler static flag $link_static_flag works" >&5
+if { (eval echo $progname:959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ echo "$ac_t$link_static_flag" 1>&6
+else
+ echo "$ac_t"none 1>&6
+ link_static_flag=
+fi
+LDFLAGS="$save_LDFLAGS"
+$rm conftest*
+
+if test -z "$LN_S"; then
+ # Check to see if we can use ln -s, or we need hard links.
+ echo $ac_n "checking whether ln -s works... $ac_c" 1>&6
+ $rm conftest.dat
+ if ln -s X conftest.dat 2>/dev/null; then
+ $rm conftest.dat
+ LN_S="ln -s"
+ else
+ LN_S=ln
+ fi
+ if test "$LN_S" = "ln -s"; then
+ echo "$ac_t"yes 1>&6
+ else
+ echo "$ac_t"no 1>&6
+ fi
+fi
+
+# Make sure LD is an absolute path.
+if test -z "$LD"; then
+ ac_prog=ld
+ if test "$with_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 "$progname:991: checking for ld used by GCC" >&5
+ ac_prog=`($CC -print-prog-name=ld) 2>&5`
+ case "$ac_prog" in
+ # Accept absolute paths.
+ [\\/]* | [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
+ ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+ done
+ test -z "$LD" && LD="$ac_prog"
+ ;;
+ "")
+ # If it fails, then pretend we are not using GCC.
+ ac_prog=ld
+ ;;
+ *)
+ # If it is relative, then search for the first ld in PATH.
+ with_gnu_ld=unknown
+ ;;
+ esac
+ elif test "$with_gnu_ld" = yes; then
+ echo $ac_n "checking for GNU ld... $ac_c" 1>&6
+ echo "$progname:1015: checking for GNU ld" >&5
+ else
+ echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
+ echo "$progname:1018: checking for non-GNU ld" >&5
+ fi
+
+ if test -z "$LD"; then
+ IFS="${IFS= }"; ac_save_ifs="$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
+ 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 "$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
+ fi
+ fi
+ done
+ IFS="$ac_save_ifs"
+ fi
+
+ if test -n "$LD"; then
+ echo "$ac_t$LD" 1>&6
+ else
+ echo "$ac_t"no 1>&6
+ fi
+
+ if test -z "$LD"; then
+ echo "$progname: error: no acceptable ld found in \$PATH" 1>&2
+ exit 1
+ fi
+fi
+
+# Check to see if it really is or is not GNU ld.
+echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6
+# 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
+ with_gnu_ld=yes
+else
+ with_gnu_ld=no
+fi
+echo "$ac_t$with_gnu_ld" 1>&6
+
+# See if the linker supports building shared libraries.
+echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6
+
+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=
+export_dynamic_flag_spec=
+whole_archive_flag_spec=
+thread_safe_flag_spec=
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+hardcode_shlibpath_var=unsupported
+runpath_var=
+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.
+
+case "$host_os" in
+cygwin* | mingw*)
+ # 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 "$with_gcc" != yes; then
+ with_gnu_ld=no
+ fi
+ ;;
+
+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*)
+ # On AIX, the GNU linker is very broken
+ 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 $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $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 $linkopts ${wl}-soname $wl$soname -o $lib'
+ else
+ ld_shlibs=no
+ fi
+ ;;
+
+ cygwin* | mingw*)
+ # 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 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.
+ export_symbols_cmds='test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
+ test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
+ $DLLTOOL --export-all --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --output-def $objdir/$soname-def $objdir/$soname-ltdll.$objext $libobjs $convenience~
+ sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]* ; *//" < $objdir/$soname-def > $export_symbols'
+
+ archive_expsym_cmds='echo EXPORTS > $objdir/$soname-def~
+ _lt_hint=1;
+ for symbol in `cat $export_symbols`; do
+ echo " \$symbol @ \$_lt_hint ; " >> $objdir/$soname-def;
+ _lt_hint=`expr 1 + \$_lt_hint`;
+ done~
+ test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~
+ test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~
+ $CC -Wl,--base-file,$objdir/$soname-base -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
+ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
+ $CC -Wl,--base-file,$objdir/$soname-base $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~
+ $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~
+ $CC $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts'
+
+ old_archive_from_new_cmds='$DLLTOOL --as=$AS --dllname $soname --def $objdir/$soname-def --output-lib $objdir/$libname.a'
+ ;;
+
+ netbsd*)
+ if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+ archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+ else
+ archive_cmds='$LD -Bshareable $libobjs $deplibs $linkopts -o $lib'
+ # can we support soname and/or expsyms with a.out? -oliva
+ fi
+ ;;
+
+ solaris*)
+ 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 $linkopts ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${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 $linkopts'
+ 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 $linkopts ${wl}-soname $wl$soname -o $lib'
+ archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${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*)
+ # dlltool doesn't understand --whole-archive et. al.
+ whole_archive_flag_spec=
+ ;;
+ *)
+ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+ ;;
+ 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 $objdir/$soname $libobjs $deplibs $linkopts -bE:$export_symbols -T512 -H512 -bM:SRE~$AR cru $lib $objdir/$soname'
+ # Note: this linker hardcodes the directories in LIBPATH if there
+ # are no directories specified by -L.
+ hardcode_minus_L=yes
+ if test "$with_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*)
+ hardcode_libdir_flag_spec='${wl}-b ${wl}nolibpath ${wl}-b ${wl}libpath:$libdir:/usr/lib:/lib'
+ hardcode_libdir_separator=':'
+ if test "$with_gcc" = yes; then
+ 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
+ shared_flag='-shared'
+ else
+ shared_flag='${wl}-bM:SRE'
+ hardcode_direct=yes
+ fi
+ allow_undefined_flag=' ${wl}-berok'
+ archive_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bexpall ${wl}-bnoentry${allow_undefined_flag}'
+ archive_expsym_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}'
+ case "$host_os" in aix4.[01]|aix4.[01].*)
+ # According to Greg Wooledge, -bexpall is only supported from AIX 4.2 on
+ always_export_symbols=yes ;;
+ esac
+ ;;
+
+ amigaos*)
+ archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $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*)
+ # 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 $linkopts `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'
+ fix_srcfile_path='`cygpath -w $srcfile`'
+ ;;
+
+ 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 $linkopts /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 $linkopts'
+ 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 $linkopts'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ hpux9* | hpux10* | hpux11*)
+ case "$host_os" in
+ hpux9*) archive_cmds='$rm $objdir/$soname~$LD -b +b $install_libdir -o $objdir/$soname $libobjs $deplibs $linkopts~test $objdir/$soname = $lib || mv $objdir/$soname $lib' ;;
+ *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linkopts' ;;
+ 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*)
+ if test "$with_gcc" = yes; then
+ archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+ else
+ archive_cmds='$LD -shared $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+
+ netbsd*)
+ if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' # a.out
+ else
+ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linkopts' # ELF
+ fi
+ hardcode_libdir_flag_spec='${wl}-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ openbsd*)
+ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts'
+ hardcode_libdir_flag_spec='-R$libdir'
+ hardcode_direct=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ os2*)
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_minus_L=yes
+ allow_undefined_flag=unsupported
+ archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def~$echo DATA >> $objdir/$libname.def~$echo " SINGLE NONSHARED" >> $objdir/$libname.def~$echo EXPORTS >> $objdir/$libname.def~emxexp $libobjs >> $objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $linkopts $objdir/$libname.def'
+ old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def'
+ ;;
+
+ osf3* | osf4*)
+ if test "$with_gcc" = yes; then
+ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib'
+ else
+ allow_undefined_flag=' -expect_unresolved \*'
+ archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib'
+ fi
+ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+ hardcode_libdir_separator=:
+ ;;
+
+ sco3.2v5*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ;;
+
+ solaris*)
+ 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 $linkopts'
+ 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 $linkopts~$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
+ ;;
+
+ sunos4*)
+ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linkopts'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_direct=yes
+ hardcode_minus_L=yes
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+ runpath_var='LD_RUN_PATH'
+ hardcode_shlibpath_var=no
+ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+ ;;
+
+ sysv4.3*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+ hardcode_shlibpath_var=no
+ export_dynamic_flag_spec='-Bexport'
+ ;;
+
+ uts4*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ dgux*)
+ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts'
+ hardcode_libdir_flag_spec='-L$libdir'
+ hardcode_shlibpath_var=no
+ ;;
+
+ sysv4*MP*)
+ if test -d /usr/nec ;then
+ # archive_cmds='$LD -G -z text -h $soname -o $lib$libobjs$deplibs'
+ archive_cmds='$LD -G -h $soname -o $lib$libobjs$deplibs'
+ hardcode_shlibpath_var=no
+ runpath_var=LD_RUN_PATH
+ hardcode_runpath_var=yes
+ ld_shlibs=yes
+ fi
+ ;;
+
+ *)
+ ld_shlibs=no
+ ;;
+ esac
+fi
+echo "$ac_t$ld_shlibs" 1>&6
+test "$ld_shlibs" = no && can_build_shared=no
+
+if test -z "$NM"; then
+ echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6
+ case "$NM" in
+ [\\/]* | [A-Za-z]:[\\/]*) ;; # Let the user override the test with a path.
+ *)
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}"
+ for ac_dir in $PATH /usr/ucb /usr/ccs/bin /bin; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/nm || test -f $ac_dir/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
+ NM="$ac_dir/nm -B"
+ break
+ elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
+ NM="$ac_dir/nm -p"
+ break
+ else
+ NM=${NM="$ac_dir/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 "$NM" && NM=nm
+ ;;
+ esac
+ echo "$ac_t$NM" 1>&6
+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
+
+# 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
+global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
+
+# Define system-specific variables.
+case "$host_os" in
+aix*)
+ symcode='[BCDT]'
+ ;;
+cygwin* | mingw*)
+ symcode='[ABCDGISTW]'
+ ;;
+hpux*) # Its linker distinguishes data from code symbols
+ global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'"
+ ;;
+irix*)
+ symcode='[BCDEGRST]'
+ ;;
+solaris*)
+ symcode='[BDT]'
+ ;;
+sysv4)
+ symcode='[DFNSTU]'
+ ;;
+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.
+ global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode\)[ ][ ]*\($ac_symprfx\)$sympat$/$symxfrm/p'"
+
+ # Check to see that the pipe works correctly.
+ pipe_works=no
+ $rm conftest*
+ cat > conftest.c <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+ echo "$progname:1592: checking if global_symbol_pipe works" >&5
+ if { (eval echo $progname:1593: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then
+ # Now try to grab the symbols.
+ nlist=conftest.nm
+ if { echo "$progname:1596: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $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.c
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+ # Now generate the symbol file.
+ eval "$global_symbol_to_cdecl"' < "$nlist" >> conftest.c'
+
+ cat <<EOF >> conftest.c
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ lt_ptr_t address;
+}
+lt_preloaded_symbols[] =
+{
+EOF
+ sed 's/^. \(.*\) \(.*\)$/ {"\2", (lt_ptr_t) \&\2},/' < "$nlist" >> conftest.c
+ cat <<\EOF >> conftest.c
+ {0, (lt_ptr_t) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+ # Now try linking the two files.
+ mv conftest.$objext conftstm.$objext
+ save_LIBS="$LIBS"
+ save_CFLAGS="$CFLAGS"
+ LIBS="conftstm.$objext"
+ CFLAGS="$CFLAGS$no_builtin_flag"
+ if { (eval echo $progname:1648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+ pipe_works=yes
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.c >&5
+ fi
+ LIBS="$save_LIBS"
+ 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 $global_symbol_pipe" >&5
+ fi
+ else
+ echo "$progname: failed program was:" >&5
+ cat conftest.c >&5
+ fi
+ $rm conftest* conftst*
+
+ # Do not use the global_symbol_pipe unless it works.
+ if test "$pipe_works" = yes; then
+ break
+ else
+ global_symbol_pipe=
+ fi
+done
+if test "$pipe_works" = yes; then
+ echo "${ac_t}ok" 1>&6
+else
+ echo "${ac_t}failed" 1>&6
+fi
+
+if test -z "$global_symbol_pipe"; then
+ global_symbol_to_cdecl=
+fi
+
+# Check hardcoding attributes.
+echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6
+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
+
+
+reload_flag=
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6
+# PORTME Some linkers may need a different reload flag.
+reload_flag='-r'
+echo "$ac_t$reload_flag" 1>&6
+test -n "$reload_flag" && reload_flag=" $reload_flag"
+
+# PORTME Fill in your ld.so 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"
+file_magic_cmd=
+file_magic_test_file=
+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.
+echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6
+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*)
+ version_type=linux
+ # AIX 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.
+ # We preserve .a as extension for shared libraries though AIX4.2
+ # and later linker supports .so
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.a'
+ shlibpath_var=LIBPATH
+ deplibs_check_method=pass_all
+ ;;
+
+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
+ deplibs_check_method=pass_all
+ lt_cv_dlopen="load_add_on"
+ lt_cv_dlopen_libs=
+ lt_cv_dlopen_self=yes
+ ;;
+
+bsdi4*)
+ version_type=linux
+ library_names_spec='${libname}.so$major ${libname}.so'
+ soname_spec='${libname}.so'
+ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+ file_magic_cmd=/usr/bin/file
+ file_magic_test_file=/shlib/libc.so
+ 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"
+ # 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*)
+ version_type=windows
+ need_version=no
+ need_lib_prefix=no
+ if test "$with_gcc" = yes; then
+ library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.a'
+ else
+ library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib'
+ fi
+ dynamic_linker='Win32 ld.exe'
+ deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+ file_magic_cmd='${OBJDUMP} -f'
+ # FIXME: first we should search . and the directory the executable is in
+ shlibpath_var=PATH
+ lt_cv_dlopen="LoadLibrary"
+ lt_cv_dlopen_libs=
+ ;;
+
+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*)
+ deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object'
+ file_magic_cmd=/usr/bin/file
+ file_magic_test_file=`echo /usr/lib/libc.so*`
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+ need_version=no
+ need_lib_prefix=no
+ ;;
+ freebsd-*)
+ deplibs_check_method=unknown
+ library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
+ need_version=yes
+ ;;
+ esac
+ finish_cmds='PATH="\$PATH:/sbin" OBJFORMAT="'"$objformat"'" ldconfig -m $libdir'
+ shlibpath_var=LD_LIBRARY_PATH
+ case "$host_os" in
+ freebsd2* | freebsd3.[01]*)
+ shlibpath_overrides_runpath=yes
+ ;;
+ *) # from 3.2 on
+ shlibpath_overrides_runpath=no
+ ;;
+ 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
+ ;;
+
+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*)
+ version_type=irix
+ 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*)
+ libsuff= shlibsuff=
+ # this will be overridden with pass_all, but let us keep it just in case
+ deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
+ ;;
+ *)
+ 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
+ # this will be overridden with pass_all, but let us keep it just in case
+ deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"
+ ;;
+ 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}"
+ file_magic_cmd=/usr/bin/file
+ file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+ deplibs_check_method='pass_all'
+ ;;
+
+# 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
+ deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+ file_magic_cmd=/usr/bin/file
+ file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+
+ if test -f /lib/ld.so.1; then
+ dynamic_linker='GNU ld.so'
+ else
+ # Only the GNU ld.so supports shared libraries on MkLinux.
+ case "$host_cpu" in
+ powerpc*) dynamic_linker=no ;;
+ *) dynamic_linker='Linux ld.so' ;;
+ esac
+ fi
+ ;;
+
+netbsd*)
+ version_type=sunos
+ 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
+ ;;
+
+openbsd*)
+ version_type=sunos
+ if test "$with_gnu_ld" = yes; then
+ need_lib_prefix=no
+ need_version=no
+ 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*)
+ version_type=osf
+ need_version=no
+ soname_spec='${libname}${release}.so'
+ library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+ shlibpath_var=LD_LIBRARY_PATH
+ # this will be overridden with pass_all, but let us keep it just in case
+ deplibs_check_method='file_magic COFF format alpha shared library'
+ file_magic_cmd=/usr/bin/file
+ file_magic_test_file=/shlib/libc.so
+ deplibs_check_method='pass_all'
+ 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
+ # ldd complains unless libraries are executable
+ postinstall_cmds='chmod +x $lib'
+ deplibs_check_method="file_magic ELF [0-9][0-9]-bit [LM]SB dynamic lib"
+ file_magic_cmd=/usr/bin/file
+ file_magic_test_file=/lib/libc.so
+ ;;
+
+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
+ ncr)
+ deplibs_check_method='pass_all'
+ ;;
+ motorola)
+ need_lib_prefix=no
+ need_version=no
+ shlibpath_overrides_runpath=no
+ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+ 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]'
+ file_magic_cmd=/usr/bin/file
+ file_magic_test_file=`echo /usr/lib/libc.so*`
+ ;;
+ 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 "checking if libtool supports shared libraries... $can_build_shared" 1>&6
+
+# Only try to build win32 dlls if AC_LIBTOOL_WIN32_DLL was used in
+# configure.in, otherwise build static only libraries.
+case "$host_os" in
+cygwin* | mingw* | os2*)
+ if test x$can_build_shared = xyes; then
+ test x$enable_win32_dll = xno && can_build_shared=no
+ echo "checking if package supports dlls... $can_build_shared" 1>&6
+ fi
+;;
+esac
+
+if test -n "$file_magic_test_file" && test -n "$file_magic_cmd"; then
+ case "$deplibs_check_method" in
+ "file_magic "*)
+ file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+ 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
+
+echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6
+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*)
+ test "$enable_shared" = yes && enable_static=no
+ ;;
+esac
+
+echo "$ac_t$enable_shared" 1>&6
+
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+
+echo "checking whether to build static libraries... $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
+
+echo $ac_n "checking for objdir... $ac_c" 1>&6
+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
+echo "$ac_t$objdir" 1>&6
+
+if test "x$enable_dlopen" != xyes; then
+ enable_dlopen=unknown
+ enable_dlopen_self=unknown
+ enable_dlopen_self_static=unknown
+else
+if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then
+ lt_cv_dlopen=no lt_cv_dlopen_libs=
+echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6
+echo "$progname:2170: 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 2178 "ltconfig"
+/* 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 $progname:2188: \"$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 "$progname: 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""... $ac_c" 1>&6
+echo "$progname:2207: 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 2212 "ltconfig"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char dlopen(); 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 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
+if { (eval echo $progname:2234: \"$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 "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ 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 dld_link in -ldld""... $ac_c" 1>&6
+echo "$progname:2251: 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 2259 "ltconfig"
+/* 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 $progname:2269: \"$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 "$progname: 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="dld_link" lt_cv_dlopen_libs="-ldld"
+else
+ echo "$ac_t""no" 1>&6
+echo $ac_n "checking for shl_load""... $ac_c" 1>&6
+echo "$progname:2288: 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 2293 "ltconfig"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char shl_load(); 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 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
+if { (eval echo $progname:2315: \"$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 "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ 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 "$progname:2333: 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 2341 "ltconfig"
+#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 $progname:2352: \"$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 "$progname: 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="-ldld"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+fi
+
+ if test "x$lt_cv_dlopen" != xno; then
+ enable_dlopen=yes
+ fi
+
+ case "$lt_cv_dlopen" in
+ dlopen)
+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 "$progname:2395: 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 2400 "ltconfig"
+#include <$ac_hdr>
+int fnord = 0;
+EOF
+ac_try="$ac_compile conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo $progname:2405: \"$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 "$progname: 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
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+ if test "x$ac_cv_header_dlfcn_h" = xyes; then
+ CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+ fi
+ eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+ LIBS="$lt_cv_dlopen_libs $LIBS"
+
+ echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6
+echo "$progname:2433: checking whether a program can dlopen itself" >&5
+if test "${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
+ cat > conftest.c <<EOF
+#line 2441 "ltconfig"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LTDL_GLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LTDL_GLOBAL DL_GLOBAL
+# else
+# define LTDL_GLOBAL 0
+# endif
+#endif
+
+/* We may have to define LTDL_LAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LTDL_LAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LTDL_LAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LTDL_LAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LTDL_LAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LTDL_LAZY_OR_NOW DL_NOW
+# else
+# define LTDL_LAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+fnord() { int i=42;}
+main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
+ if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
+ if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); }
+
+EOF
+if { (eval echo $progname:2487: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+then
+ lt_cv_dlopen_self=yes
+else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ lt_cv_dlopen_self=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$lt_cv_dlopen_self" 1>&6
+
+ if test "$lt_cv_dlopen_self" = yes; then
+ LDFLAGS="$LDFLAGS $link_static_flag"
+ echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6
+echo "$progname:2506: checking whether a statically linked program can dlopen itself" >&5
+if test "${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
+ cat > conftest.c <<EOF
+#line 2514 "ltconfig"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+# define LTDL_GLOBAL RTLD_GLOBAL
+#else
+# ifdef DL_GLOBAL
+# define LTDL_GLOBAL DL_GLOBAL
+# else
+# define LTDL_GLOBAL 0
+# endif
+#endif
+
+/* We may have to define LTDL_LAZY_OR_NOW in the command line if we
+ find out it does not work in some platform. */
+#ifndef LTDL_LAZY_OR_NOW
+# ifdef RTLD_LAZY
+# define LTDL_LAZY_OR_NOW RTLD_LAZY
+# else
+# ifdef DL_LAZY
+# define LTDL_LAZY_OR_NOW DL_LAZY
+# else
+# ifdef RTLD_NOW
+# define LTDL_LAZY_OR_NOW RTLD_NOW
+# else
+# ifdef DL_NOW
+# define LTDL_LAZY_OR_NOW DL_NOW
+# else
+# define LTDL_LAZY_OR_NOW 0
+# endif
+# endif
+# endif
+# endif
+#endif
+
+fnord() { int i=42;}
+main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW);
+ if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord");
+ if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); }
+
+EOF
+if { (eval echo $progname:2560: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+then
+ lt_cv_dlopen_self_static=yes
+else
+ echo "$progname: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ lt_cv_dlopen_self_static=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6
+fi
+ ;;
+ 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
+
+# Copy echo and quote the copy, instead of the original, because it is
+# used later.
+ltecho="$echo"
+if test "X$ltecho" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+ ltecho="$CONFIG_SHELL \$0 --fallback-echo"
+fi
+LTSHELL="$SHELL"
+
+LTCONFIG_VERSION="$VERSION"
+
+# Only quote variables if we're using ltmain.sh.
+case "$ltmain" in
+*.sh)
+ # Now quote all the things that may contain metacharacters.
+ for var in ltecho old_CC old_CFLAGS old_CPPFLAGS \
+ old_LD old_LDFLAGS old_LIBS \
+ old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS \
+ AR CC LD LN_S NM LTSHELL LTCONFIG_VERSION \
+ 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 \
+ 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 \
+ 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 | \
+ postinstall_cmds | postuninstall_cmds | \
+ finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+ # Double-quote double-evaled strings.
+ eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+ ;;
+ *)
+ eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+ ;;
+ esac
+ done
+
+ case "$ltecho" in
+ *'\$0 --fallback-echo"')
+ ltecho=`$echo "X$ltecho" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
+ ;;
+ esac
+
+ trap "$rm \"$ofile\"; exit 1" 1 2 15
+ echo "creating $ofile"
+ $rm "$ofile"
+ cat <<EOF > "$ofile"
+#! $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 ltconfig or ltmain.sh.
+#
+# Copyright (C) 1996-1999 Free Software Foundation, Inc.
+# 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 "\${CDPATH+set}" = set; then CDPATH=; export CDPATH; fi
+
+### BEGIN LIBTOOL CONFIG
+EOF
+ cfgfile="$ofile"
+ ;;
+
+*)
+ # Double-quote the variables that need it (for aesthetics).
+ for var in old_CC old_CFLAGS old_CPPFLAGS \
+ old_LD old_LDFLAGS old_LIBS \
+ old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS; do
+ eval "$var=\\\"\$var\\\""
+ done
+
+ # Just create a config file.
+ cfgfile="$ofile.cfg"
+ trap "$rm \"$cfgfile\"; exit 1" 1 2 15
+ echo "creating $cfgfile"
+ $rm "$cfgfile"
+ cat <<EOF > "$cfgfile"
+# `$echo "$cfgfile" | sed 's%^.*/%%'` - Libtool configuration file.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+EOF
+ ;;
+esac
+
+cat <<EOF >> "$cfgfile"
+# Libtool was configured as follows, on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# CC=$old_CC CFLAGS=$old_CFLAGS CPPFLAGS=$old_CPPFLAGS \\
+# LD=$old_LD LDFLAGS=$old_LDFLAGS LIBS=$old_LIBS \\
+# NM=$old_NM RANLIB=$old_RANLIB LN_S=$old_LN_S \\
+# DLLTOOL=$old_DLLTOOL OBJDUMP=$old_OBJDUMP AS=$old_AS \\
+# $0$ltconfig_args
+#
+# Compiler and other test output produced by $progname, useful for
+# debugging $progname, is in ./config.log if it exists.
+
+# The version of $progname that generated this script.
+LTCONFIG_VERSION=$LTCONFIG_VERSION
+
+# Shell to use when invoking shell scripts.
+SHELL=$LTSHELL
+
+# 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 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=$ltecho
+
+# The archiver.
+AR=$AR
+
+# The default C compiler.
+CC=$CC
+
+# The linker used to build libraries.
+LD=$LD
+
+# Whether we need hard or soft links.
+LN_S=$LN_S
+
+# A BSD-compatible nm program.
+NM=$NM
+
+# 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=$reload_flag
+reload_cmds=$reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$wl
+
+# Object file suffix (normally "o").
+objext="$objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$pic_flag
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$compiler_c_o
+
+# Can we write directly to a .lo ?
+compiler_o_lo=$compiler_o_lo
+
+# Must we lock files when doing compilation ?
+need_locks=$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=$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=$link_static_flag
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$no_builtin_flag
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$whole_archive_flag_spec
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$thread_safe_flag_spec
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$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=$library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$RANLIB
+old_archive_cmds=$old_archive_cmds
+old_postinstall_cmds=$old_postinstall_cmds
+old_postuninstall_cmds=$old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$old_archive_from_new_cmds
+
+# Commands used to build and install a shared archive.
+archive_cmds=$archive_cmds
+archive_expsym_cmds=$archive_expsym_cmds
+postinstall_cmds=$postinstall_cmds
+postuninstall_cmds=$postuninstall_cmds
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$allow_undefined_flag
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$no_undefined_flag
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$global_symbol_to_cdecl
+
+# 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
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$hardcode_libdir_flag_spec
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$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
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$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=$export_symbols_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$include_expsyms
+
+EOF
+
+case "$ltmain" in
+*.sh)
+ echo '### END LIBTOOL CONFIG' >> "$ofile"
+ echo >> "$ofile"
+ case "$host_os" in
+ aix3*)
+ cat <<\EOF >> "$ofile"
+
+# 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 "${COLLECT_NAMES+set}" != set; then
+ COLLECT_NAMES=
+ export COLLECT_NAMES
+fi
+EOF
+ ;;
+ esac
+
+ # Append the ltmain.sh script.
+ sed '$q' "$ltmain" >> "$ofile" || (rm -f "$ofile"; exit 1)
+
+ chmod +x "$ofile"
+ ;;
+
+*)
+ # Compile the libtool program.
+ echo "FIXME: would compile $ltmain"
+ ;;
+esac
+
+test -n "$cache_file" || exit 0
+
+# AC_CACHE_SAVE
+trap '' 1 2 15
+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"
+ ;;
+ *)
+ # `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'
+ ;;
+ esac >> confcache
+if cmp -s $cache_file confcache; then
+ :
+else
+ if test -w $cache_file; then
+ echo "updating cache $cache_file"
+ cat confcache > $cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+exit 0
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
--- /dev/null
+++ b/common/libsndfile/ltmain.sh
@@ -1,0 +1,3975 @@
+# ltmain.sh - Provide generalized library-building support services.
+# NOTE: Changing this file will not affect anything until you rerun ltconfig.
+#
+# Copyright (C) 1996-1999 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.
+
+# Check that we have a working $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, and then maybe $echo will work.
+ 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 name of this program.
+progname=`$echo "$0" | sed 's%^.*/%%'`
+modename="$progname"
+
+# Constants.
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION=1.3.3
+TIMESTAMP=" (1.385.2.181 1999/07/02 15:49:11)"
+
+default_mode=
+help="Try \`$progname --help' for more information."
+magic="%%%MAGIC variable%%%"
+mkdir="mkdir"
+mv="mv -f"
+rm="rm -f"
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e 1s/^X//'
+sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
+SP2NL='tr \040 \012'
+NL2SP='tr \015\012 \040\040'
+
+# NLS nuisances.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+# We save the old values to restore during execute mode.
+if test "${LC_ALL+set}" = set; then
+ save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
+fi
+if test "${LANG+set}" = set; then
+ 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
+
+if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+ echo "$modename: not configured to build any kind of library" 1>&2
+ echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
+ exit 1
+fi
+
+# Global variables.
+mode=$default_mode
+nonopt=
+prev=
+prevopt=
+run=
+show="$echo"
+show_help=
+execute_dlfiles=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+
+# Parse our command line options once, thoroughly.
+while test $# -gt 0
+do
+ arg="$1"
+ shift
+
+ case "$arg" in
+ -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) optarg= ;;
+ esac
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ case "$prev" in
+ execute_dlfiles)
+ eval "$prev=\"\$$prev \$arg\""
+ ;;
+ *)
+ eval "$prev=\$arg"
+ ;;
+ esac
+
+ prev=
+ prevopt=
+ continue
+ fi
+
+ # Have we seen a non-optional argument yet?
+ case "$arg" in
+ --help)
+ show_help=yes
+ ;;
+
+ --version)
+ echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
+ exit 0
+ ;;
+
+ --config)
+ sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0
+ exit 0
+ ;;
+
+ --debug)
+ echo "$progname: enabling shell trace mode"
+ set -x
+ ;;
+
+ --dry-run | -n)
+ run=:
+ ;;
+
+ --features)
+ echo "host: $host"
+ if test "$build_libtool_libs" = yes; then
+ echo "enable shared libraries"
+ else
+ echo "disable shared libraries"
+ fi
+ if test "$build_old_libs" = yes; then
+ echo "enable static libraries"
+ else
+ echo "disable static libraries"
+ fi
+ exit 0
+ ;;
+
+ --finish) mode="finish" ;;
+
+ --mode) prevopt="--mode" prev=mode ;;
+ --mode=*) mode="$optarg" ;;
+
+ --quiet | --silent)
+ show=:
+ ;;
+
+ -dlopen)
+ prevopt="-dlopen"
+ prev=execute_dlfiles
+ ;;
+
+ -*)
+ $echo "$modename: unrecognized option \`$arg'" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ ;;
+
+ *)
+ nonopt="$arg"
+ break
+ ;;
+ esac
+done
+
+if test -n "$prevopt"; then
+ $echo "$modename: option \`$prevopt' requires an argument" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+fi
+
+if test -z "$show_help"; then
+
+ # Infer the operation mode.
+ if test -z "$mode"; then
+ case "$nonopt" in
+ *cc | *++ | gcc* | *-gcc*)
+ mode=link
+ for arg
+ do
+ case "$arg" in
+ -c)
+ mode=compile
+ break
+ ;;
+ esac
+ done
+ ;;
+ *db | *dbx | *strace | *truss)
+ mode=execute
+ ;;
+ *install*|cp|mv)
+ mode=install
+ ;;
+ *rm)
+ mode=uninstall
+ ;;
+ *)
+ # If we have no mode, but dlfiles were specified, then do execute mode.
+ test -n "$execute_dlfiles" && mode=execute
+
+ # Just use the default operation mode.
+ if test -z "$mode"; then
+ if test -n "$nonopt"; then
+ $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
+ else
+ $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
+ fi
+ fi
+ ;;
+ esac
+ fi
+
+ # Only execute mode is allowed to have -dlopen flags.
+ if test -n "$execute_dlfiles" && test "$mode" != execute; then
+ $echo "$modename: unrecognized option \`-dlopen'" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ # Change the help message to a mode-specific one.
+ generic_help="$help"
+ 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
+ # libtool compile mode
+ compile)
+ modename="$modename: compile"
+ # Get the compilation command and the source file.
+ base_compile=
+ lastarg=
+ srcfile="$nonopt"
+ suppress_output=
+
+ user_target=no
+ for arg
+ do
+ # Accept any command-line options.
+ case "$arg" in
+ -o)
+ if test "$user_target" != "no"; then
+ $echo "$modename: you cannot specify \`-o' more than once" 1>&2
+ exit 1
+ fi
+ user_target=next
+ ;;
+
+ -static)
+ build_old_libs=yes
+ continue
+ ;;
+ esac
+
+ case "$user_target" in
+ next)
+ # The next one is the -o target name
+ user_target=yes
+ continue
+ ;;
+ yes)
+ # We got the output file
+ user_target=set
+ libobj="$arg"
+ continue
+ ;;
+ esac
+
+ # Accept the current argument as the source file.
+ lastarg="$srcfile"
+ srcfile="$arg"
+
+ # Aesthetically quote the previous argument.
+
+ # Backslashify any backslashes, double quotes, and dollar signs.
+ # These are the only characters that are still specially
+ # interpreted inside of double-quoted scrings.
+ 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
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
+ lastarg="\"$lastarg\""
+ ;;
+ esac
+
+ # Add the previous argument to base_compile.
+ if test -z "$base_compile"; then
+ base_compile="$lastarg"
+ else
+ base_compile="$base_compile $lastarg"
+ fi
+ done
+
+ case "$user_target" in
+ set)
+ ;;
+ no)
+ # Get the name of the library object.
+ libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
+ ;;
+ *)
+ $echo "$modename: you must specify a target with \`-o'" 1>&2
+ exit 1
+ ;;
+ esac
+
+ # Recognize several different file suffixes.
+ # If the user specifies -o file.o, it is replaced with file.lo
+ xform='[cCFSfmso]'
+ case "$libobj" in
+ *.ada) xform=ada ;;
+ *.adb) xform=adb ;;
+ *.ads) xform=ads ;;
+ *.asm) xform=asm ;;
+ *.c++) xform=c++ ;;
+ *.cc) xform=cc ;;
+ *.cpp) xform=cpp ;;
+ *.cxx) xform=cxx ;;
+ *.f90) xform=f90 ;;
+ *.for) xform=for ;;
+ esac
+
+ libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
+
+ case "$libobj" in
+ *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
+ *)
+ $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
+ exit 1
+ ;;
+ esac
+
+ if test -z "$base_compile"; then
+ $echo "$modename: you must specify a compilation command" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ # Delete any leftover library objects.
+ if test "$build_old_libs" = yes; then
+ removelist="$obj $libobj"
+ else
+ removelist="$libobj"
+ fi
+
+ $run $rm $removelist
+ trap "$run $rm $removelist; exit 1" 1 2 15
+
+ # 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}
+ lockfile="$output_obj.lock"
+ removelist="$removelist $output_obj $lockfile"
+ trap "$run $rm $removelist; exit 1" 1 2 15
+ else
+ need_locks=no
+ lockfile=
+ fi
+
+ # 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
+ $show "Waiting for $lockfile to be removed"
+ sleep 2
+ done
+ elif test "$need_locks" = warn; then
+ if test -f "$lockfile"; then
+ echo "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $run $rm $removelist
+ exit 1
+ fi
+ echo $srcfile > "$lockfile"
+ fi
+
+ if test -n "$fix_srcfile_path"; then
+ eval srcfile=\"$fix_srcfile_path\"
+ fi
+
+ # Only build a PIC object if we are building libtool libraries.
+ if test "$build_libtool_libs" = yes; then
+ # 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 $pic_flag -DPIC $srcfile"
+ if test "$build_old_libs" = yes; then
+ lo_libobj="$libobj"
+ dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
+ if test "X$dir" = "X$libobj"; then
+ dir="$objdir"
+ else
+ dir="$dir/$objdir"
+ fi
+ libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
+
+ if test -d "$dir"; then
+ $show "$rm $libobj"
+ $run $rm $libobj
+ else
+ $show "$mkdir $dir"
+ $run $mkdir $dir
+ status=$?
+ if test $status -ne 0 && test ! -d $dir; then
+ exit $status
+ fi
+ fi
+ fi
+ if test "$compiler_o_lo" = yes; then
+ output_obj="$libobj"
+ command="$command -o $output_obj"
+ elif test "$compiler_c_o" = yes; then
+ output_obj="$obj"
+ command="$command -o $output_obj"
+ fi
+
+ $run $rm "$output_obj"
+ $show "$command"
+ if $run eval "$command"; then :
+ else
+ test -n "$output_obj" && $run $rm $removelist
+ exit 1
+ fi
+
+ if test "$need_locks" = warn &&
+ test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
+ echo "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $run $rm $removelist
+ exit 1
+ fi
+
+ # Just move the object if needed, then go on to compile the next one
+ if test x"$output_obj" != x"$libobj"; then
+ $show "$mv $output_obj $libobj"
+ if $run $mv $output_obj $libobj; then :
+ else
+ error=$?
+ $run $rm $removelist
+ exit $error
+ fi
+ 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
+ # Rename the .lo from within objdir to obj
+ if test -f $obj; then
+ $show $rm $obj
+ $run $rm $obj
+ fi
+
+ $show "$mv $libobj $obj"
+ if $run $mv $libobj $obj; then :
+ else
+ error=$?
+ $run $rm $removelist
+ exit $error
+ fi
+
+ # Now arrange that obj and lo_libobj become the same file
+ $show "$LN_S $obj $lo_libobj"
+ if $run $LN_S $obj $lo_libobj; then
+ exit 0
+ else
+ error=$?
+ $run $rm $removelist
+ exit $error
+ fi
+ fi
+
+ # Allow error messages only from the first compilation.
+ suppress_output=' >/dev/null 2>&1'
+ fi
+
+ # Only build a position-dependent object if we build old libraries.
+ if test "$build_old_libs" = yes; then
+ command="$base_compile $srcfile"
+ if test "$compiler_c_o" = yes; then
+ command="$command -o $obj"
+ output_obj="$obj"
+ fi
+
+ # Suppress compiler output if we already did a PIC compilation.
+ command="$command$suppress_output"
+ $run $rm "$output_obj"
+ $show "$command"
+ if $run eval "$command"; then :
+ else
+ $run $rm $removelist
+ exit 1
+ fi
+
+ if test "$need_locks" = warn &&
+ test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
+ echo "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together. If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+ $run $rm $removelist
+ exit 1
+ fi
+
+ # Just move the object if needed
+ if test x"$output_obj" != x"$obj"; then
+ $show "$mv $output_obj $obj"
+ if $run $mv $output_obj $obj; then :
+ else
+ error=$?
+ $run $rm $removelist
+ exit $error
+ fi
+ fi
+
+ # Create an invalid libtool object if no PIC, so that we do not
+ # accidentally link it into a program.
+ if test "$build_libtool_libs" != yes; then
+ $show "echo timestamp > $libobj"
+ $run eval "echo timestamp > \$libobj" || exit $?
+ else
+ # Move the .lo from within objdir
+ $show "$mv $libobj $lo_libobj"
+ if $run $mv $libobj $lo_libobj; then :
+ else
+ error=$?
+ $run $rm $removelist
+ exit $error
+ fi
+ fi
+ fi
+
+ # Unlock the critical section if it was locked
+ if test "$need_locks" != no; then
+ $rm "$lockfile"
+ fi
+
+ exit 0
+ ;;
+
+ # libtool link mode
+ link)
+ modename="$modename: link"
+ C_compiler="$CC" # save it, to compile generated C sources
+ CC="$nonopt"
+ case "$host" in
+ *-*-cygwin* | *-*-mingw* | *-*-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
+ # flag for every libtool invokation.
+ # allow_undefined=no
+
+ # FIXME: Unfortunately, there are problems with the above when trying
+ # to make a dll which has undefined symbols, in which case not
+ # even a static library is built. For now, we need to specify
+ # -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
+ compile_command="$CC"
+ finalize_command="$CC"
+
+ compile_rpath=
+ finalize_rpath=
+ compile_shlibpath=
+ finalize_shlibpath=
+ convenience=
+ old_convenience=
+ deplibs=
+ linkopts=
+
+ 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=
+ dlself=no
+ export_dynamic=no
+ export_symbols=
+ export_symbols_regex=
+ generated=
+ libobjs=
+ link_against_libtool_libs=
+ ltlibs=
+ module=no
+ objs=
+ prefer_static_libs=no
+ preload=no
+ prev=
+ prevarg=
+ release=
+ rpath=
+ xrpath=
+ perm_rpath=
+ temp_rpath=
+ thread_safe=no
+ vinfo=
+
+ # We need to know -static, to get the right output filenames.
+ for arg
+ do
+ 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
+ $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
+ fi
+ if test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ else
+ if test -z "$pic_flag" && test -n "$link_static_flag"; then
+ dlopen_self=$dlopen_self_static
+ fi
+ fi
+ build_libtool_libs=no
+ build_old_libs=yes
+ prefer_static_libs=yes
+ break
+ ;;
+ esac
+ done
+
+ # See if our shared archives depend on static archives.
+ test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+ # Go through the arguments, transforming them on the way.
+ while test $# -gt 0; do
+ arg="$1"
+ shift
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$prev"; then
+ case "$prev" in
+ output)
+ compile_command="$compile_command @OUTPUT@"
+ finalize_command="$finalize_command @OUTPUT@"
+ ;;
+ esac
+
+ case "$prev" in
+ dlfiles|dlprefiles)
+ if test "$preload" = no; then
+ # Add the symbol object into the linking commands.
+ compile_command="$compile_command @SYMFILE@"
+ finalize_command="$finalize_command @SYMFILE@"
+ preload=yes
+ fi
+ case "$arg" in
+ *.la | *.lo) ;; # We handle these cases below.
+ force)
+ if test "$dlself" = no; then
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ self)
+ if test "$prev" = dlprefiles; then
+ dlself=yes
+ elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+ dlself=yes
+ else
+ dlself=needless
+ export_dynamic=yes
+ fi
+ prev=
+ continue
+ ;;
+ *)
+ if test "$prev" = dlfiles; then
+ dlfiles="$dlfiles $arg"
+ else
+ dlprefiles="$dlprefiles $arg"
+ fi
+ prev=
+ ;;
+ esac
+ ;;
+ expsyms)
+ export_symbols="$arg"
+ if test ! -f "$arg"; then
+ $echo "$modename: symbol file \`$arg' does not exist"
+ exit 1
+ fi
+ prev=
+ continue
+ ;;
+ expsyms_regex)
+ export_symbols_regex="$arg"
+ prev=
+ continue
+ ;;
+ release)
+ release="-$arg"
+ prev=
+ continue
+ ;;
+ rpath | xrpath)
+ # We need an absolute path.
+ case "$arg" in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ $echo "$modename: only absolute run-paths are allowed" 1>&2
+ exit 1
+ ;;
+ esac
+ if test "$prev" = rpath; then
+ case "$rpath " in
+ *" $arg "*) ;;
+ *) rpath="$rpath $arg" ;;
+ esac
+ else
+ case "$xrpath " in
+ *" $arg "*) ;;
+ *) xrpath="$xrpath $arg" ;;
+ esac
+ fi
+ prev=
+ continue
+ ;;
+ *)
+ eval "$prev=\"\$arg\""
+ prev=
+ continue
+ ;;
+ esac
+ fi
+
+ prevarg="$arg"
+
+ case "$arg" in
+ -all-static)
+ if test -n "$link_static_flag"; then
+ compile_command="$compile_command $link_static_flag"
+ finalize_command="$finalize_command $link_static_flag"
+ fi
+ continue
+ ;;
+
+ -allow-undefined)
+ # FIXME: remove this flag sometime in the future.
+ $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
+ continue
+ ;;
+
+ -avoid-version)
+ avoid_version=yes
+ continue
+ ;;
+
+ -dlopen)
+ prev=dlfiles
+ continue
+ ;;
+
+ -dlpreopen)
+ prev=dlprefiles
+ continue
+ ;;
+
+ -export-dynamic)
+ export_dynamic=yes
+ continue
+ ;;
+
+ -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"
+ exit 1
+ fi
+ if test "X$arg" = "X-export-symbols"; then
+ prev=expsyms
+ else
+ prev=expsyms_regex
+ fi
+ continue
+ ;;
+
+ -L*)
+ dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
+ # We need an absolute path.
+ 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"
+ fi
+ dir="$absdir"
+ ;;
+ esac
+ case " $deplibs " in
+ *" $arg "*) ;;
+ *) deplibs="$deplibs $arg";;
+ 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";;
+ esac
+ ;;
+ esac
+ ;;
+
+ -l*)
+ if test "$arg" = "-lc"; then
+ case "$host" in
+ *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*)
+ # These systems don't actually have c library (as such)
+ continue
+ ;;
+ esac
+ elif test "$arg" = "-lm"; then
+ case "$host" in
+ *-*-cygwin* | *-*-beos*)
+ # These systems don't actually have math library (as such)
+ continue
+ ;;
+ esac
+ fi
+ deplibs="$deplibs $arg"
+ ;;
+
+ -module)
+ module=yes
+ continue
+ ;;
+
+ -no-undefined)
+ allow_undefined=no
+ continue
+ ;;
+
+ -o) prev=output ;;
+
+ -release)
+ prev=release
+ continue
+ ;;
+
+ -rpath)
+ prev=rpath
+ continue
+ ;;
+
+ -R)
+ prev=xrpath
+ continue
+ ;;
+
+ -R*)
+ dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
+ # We need an absolute path.
+ case "$dir" in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ $echo "$modename: only absolute run-paths are allowed" 1>&2
+ exit 1
+ ;;
+ esac
+ case "$xrpath " in
+ *" $dir "*) ;;
+ *) xrpath="$xrpath $dir" ;;
+ esac
+ continue
+ ;;
+
+ -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
+ continue
+ ;;
+
+ -thread-safe)
+ thread_safe=yes
+ continue
+ ;;
+
+ -version-info)
+ prev=vinfo
+ 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
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
+ arg="\"$arg\""
+ ;;
+ esac
+ ;;
+
+ *.o | *.obj | *.a | *.lib)
+ # A standard object.
+ objs="$objs $arg"
+ ;;
+
+ *.lo)
+ # A library object.
+ if test "$prev" = dlfiles; then
+ dlfiles="$dlfiles $arg"
+ if test "$build_libtool_libs" = yes && test "$dlopen" = yes; then
+ prev=
+ continue
+ else
+ # If libtool objects are unsupported, then we need to preload.
+ prev=dlprefiles
+ fi
+ fi
+
+ if test "$prev" = dlprefiles; then
+ # Preload the old-style object.
+ dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"`
+ prev=
+ fi
+ libobjs="$libobjs $arg"
+ ;;
+
+ *.la)
+ # A libtool-controlled library.
+
+ dlname=
+ libdir=
+ library_names=
+ old_library=
+
+ # Check to see that this really is a libtool archive.
+ if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+ else
+ $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2
+ exit 1
+ fi
+
+ # 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 ;;
+ esac
+
+ # 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
+ 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"
+ else
+ dir="$dir/$objdir"
+ 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
+
+ # 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
+ 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
+ fi
+ fi
+
+ # The library was specified with -dlpreopen.
+ if test "$prev" = dlprefiles; then
+ # 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"
+ else
+ dlprefiles="$dlprefiles $dir/$linklib"
+ fi
+ prev=
+ 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
+ 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"
+ 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"
+ esac
+ ;;
+ esac
+
+ case " $sys_lib_dlsearch_path " in
+ *" $libdir "*) ;;
+ *)
+ case "$finalize_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_rpath="$finalize_rpath $libdir"
+ esac
+ ;;
+ esac
+
+ 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
+ ;;
+ 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:";;
+ esac
+ compile_command="$compile_command -l$name"
+ deplibs="$deplibs -l$name"
+ else
+ lib_linked=no
+ fi
+ ;;
+
+ relink)
+ if test "$hardcode_direct" = yes; then
+ compile_command="$compile_command $absdir/$linklib"
+ deplibs="$deplibs $absdir/$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"
+ elif test "$hardcode_shlibpath_var" = yes; then
+ case ":$compile_shlibpath:" in
+ *":$absdir:"*) ;;
+ *) compile_shlibpath="$compile_shlibpath$absdir:";;
+ esac
+ compile_command="$compile_command -l$name"
+ deplibs="$deplibs -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
+
+ # 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"
+ 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
+
+ # 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"
+ 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"
+ fi
+ fi
+
+ # Add in any libraries that this one depends upon.
+ compile_command="$compile_command$dependency_libs"
+ finalize_command="$finalize_command$dependency_libs"
+ 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
+
+ # 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
+
+ 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
+ fi
+
+ if test -n "$deplibs"; then
+ $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
+ fi
+
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$rpath"; then
+ $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$xrpath"; then
+ $echo "$modename: warning: \`-R' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$vinfo"; then
+ $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$release"; then
+ $echo "$modename: warning: \`-release' is ignored for archives" 1>&2
+ fi
+
+ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+ $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
+ fi
+
+ # Now set the variables for building old libraries.
+ build_libtool_libs=no
+ oldlibs="$output"
+ ;;
+
+ *.la)
+ # Make sure we only generate libraries of the form `libNAME.la'.
+ case "$outputname" in
+ lib*)
+ name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+ eval libname=\"$libname_spec\"
+ ;;
+ *)
+ if test "$module" = no; then
+ $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+ if test "$need_lib_prefix" != no; then
+ # Add the "lib" prefix for modules if required
+ name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+ eval libname=\"$libname_spec\"
+ else
+ libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+ fi
+ ;;
+ 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
+ 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
+ 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
+ fi
+ install_libdir="$2"
+
+ oldlibs=
+ if test -z "$rpath"; then
+ if test "$build_libtool_libs" = yes; then
+ # Building a libtool convenience library.
+ libext=al
+ oldlibs="$output_objdir/$libname.$libext $oldlibs"
+ 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
+ fi
+
+ if test -n "$release"; then
+ $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
+ fi
+ else
+
+ # Parse the version information argument.
+ IFS="${IFS= }"; save_ifs="$IFS"; IFS=':'
+ set dummy $vinfo 0 0 0
+ IFS="$save_ifs"
+
+ if test -n "$8"; then
+ $echo "$modename: too many parameters to \`-version-info'" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ current="$2"
+ revision="$3"
+ age="$4"
+
+ # Check that each of the things are valid numbers.
+ case "$current" in
+ 0 | [1-9] | [1-9][0-9]*) ;;
+ *)
+ $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+ exit 1
+ ;;
+ esac
+
+ case "$revision" in
+ 0 | [1-9] | [1-9][0-9]*) ;;
+ *)
+ $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+ exit 1
+ ;;
+ esac
+
+ case "$age" in
+ 0 | [1-9] | [1-9][0-9]*) ;;
+ *)
+ $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+ exit 1
+ ;;
+ esac
+
+ if test $age -gt $current; then
+ $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
+ $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+ exit 1
+ fi
+
+ # Calculate the version variables.
+ major=
+ versuffix=
+ verstring=
+ case "$version_type" in
+ none) ;;
+
+ irix)
+ major=`expr $current - $age + 1`
+ versuffix="$major.$revision"
+ verstring="sgi$major.$revision"
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$revision
+ while test $loop != 0; do
+ iface=`expr $revision - $loop`
+ loop=`expr $loop - 1`
+ verstring="sgi$major.$iface:$verstring"
+ done
+ ;;
+
+ linux)
+ major=.`expr $current - $age`
+ versuffix="$major.$age.$revision"
+ ;;
+
+ osf)
+ major=`expr $current - $age`
+ versuffix=".$current.$age.$revision"
+ verstring="$current.$age.$revision"
+
+ # Add in all the interfaces that we are compatible with.
+ loop=$age
+ while test $loop != 0; do
+ iface=`expr $current - $loop`
+ loop=`expr $loop - 1`
+ verstring="$verstring:${iface}.0"
+ done
+
+ # Make executables depend on our current version.
+ verstring="$verstring:${current}.0"
+ ;;
+
+ sunos)
+ major=".$current"
+ 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.
+ major=`expr $current - $age`
+ versuffix="-$major-$age-$revision"
+ ;;
+
+ *)
+ $echo "$modename: unknown library version type \`$version_type'" 1>&2
+ echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2
+ exit 1
+ ;;
+ esac
+
+ # Clear the version info if we defaulted, and they specified a release.
+ if test -z "$vinfo" && test -n "$release"; then
+ major=
+ verstring="0.0"
+ if test "$need_version" = no; then
+ versuffix=
+ else
+ versuffix=".0.0"
+ fi
+ fi
+
+ # Remove version info from name if versioning should be avoided
+ if test "$avoid_version" = yes && test "$need_version" = no; then
+ major=
+ 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
+ $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
+ build_libtool_libs=no
+ build_old_libs=yes
+ fi
+ else
+ # 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)!
+ ;;
+ *)
+ # 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
+ $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.
+ if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+ oldlibs="$oldlibs $output_objdir/$libname.$libext"
+
+ # Transform .lo files to .o files.
+ oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+ fi
+
+ if test "$build_libtool_libs" = yes; then
+ # Transform deplibs into only deplibs that can be linked in shared.
+ name_save=$name
+ libname_save=$libname
+ release_save=$release
+ versuffix_save=$versuffix
+ major_save=$major
+ # I'm not sure if I'm treating the release correctly. I think
+ # release should show up in the -l (ie -lgmp5) so we don't want to
+ # add it in twice. Is that correct?
+ release=""
+ versuffix=""
+ major=""
+ newdeplibs=
+ droppeddeps=no
+ 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
+ # whether the library exists or not. But this is on
+ # osf3 & osf4 and I'm not really sure... Just
+ # implementing what was already the behaviour.
+ newdeplibs=$deplibs
+ ;;
+ test_compile)
+ # This code stresses the "libraries are programs" paradigm to its
+ # limits. Maybe even breaks it. We compile a program, linking it
+ # against the deplibs as a proxy for the library. Then we can check
+ # whether they linked in statically or dynamically with ldd.
+ $rm conftest.c
+ cat > conftest.c <<EOF
+ int main() { return 0; }
+EOF
+ $rm conftest
+ $C_compiler -o conftest conftest.c $deplibs
+ if test $? -eq 0 ; then
+ ldd_output=`ldd conftest`
+ for i in $deplibs; do
+ name="`expr $i : '-l\(.*\)'`"
+ # If $name is empty we are operating on a -L argument.
+ if test "$name" != "" ; then
+ libname=`eval \\$echo \"$libname_spec\"`
+ deplib_matches=`eval \\$echo \"$library_names_spec\"`
+ set dummy $deplib_matches
+ deplib_match=$2
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ newdeplibs="$newdeplibs $i"
+ else
+ droppeddeps=yes
+ echo
+ echo "*** Warning: This library needs some functionality provided by $i."
+ 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
+ newdeplibs="$newdeplibs $i"
+ fi
+ done
+ else
+ # Error occured in the first compile. Let's try to salvage the situation:
+ # Compile a seperate program for each library.
+ for i in $deplibs; do
+ name="`expr $i : '-l\(.*\)'`"
+ # If $name is empty we are operating on a -L argument.
+ if test "$name" != "" ; then
+ $rm conftest
+ $C_compiler -o conftest conftest.c $i
+ # Did it work?
+ if test $? -eq 0 ; then
+ ldd_output=`ldd conftest`
+ libname=`eval \\$echo \"$libname_spec\"`
+ deplib_matches=`eval \\$echo \"$library_names_spec\"`
+ set dummy $deplib_matches
+ deplib_match=$2
+ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+ newdeplibs="$newdeplibs $i"
+ else
+ droppeddeps=yes
+ echo
+ echo "*** Warning: This library needs some functionality provided by $i."
+ 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
+ droppeddeps=yes
+ echo
+ echo "*** Warning! Library $i is needed by this library but I was not able to"
+ echo "*** make it link in! You will probably need to install it or some"
+ echo "*** library that it depends on before this library will be fully"
+ echo "*** functional. Installing it before continuing would be even better."
+ fi
+ else
+ newdeplibs="$newdeplibs $i"
+ fi
+ done
+ fi
+ ;;
+ file_magic*)
+ set dummy $deplibs_check_method
+ 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
+ libname=`eval \\$echo \"$libname_spec\"`
+ for i in $lib_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
+ fi
+ # The statement above tries to avoid entering an
+ # endless loop below, in case of cyclic links.
+ # We might still enter an endless loop, since a link
+ # loop can be closed while we follow links,
+ # but so what?
+ potlib="$potent_lib"
+ while test -h "$potlib" 2>/dev/null; do
+ potliblink=`ls -ld $potlib | sed 's/.* -> //'`
+ case "$potliblink" in
+ [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+ *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+ esac
+ done
+ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
+ | sed 10q \
+ | egrep "$file_magic_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$//' \
+ -e 's/ -[LR][^ ]*//g' -e 's/[ ]//g' |
+ grep . >/dev/null; then
+ echo
+ if test "X$deplibs_check_method" = "Xnone"; then
+ echo "*** Warning: inter-library dependencies are not supported in this platform."
+ else
+ echo "*** Warning: inter-library dependencies are not known to be supported."
+ fi
+ echo "*** All declared inter-library dependencies are being dropped."
+ droppeddeps=yes
+ fi
+ ;;
+ esac
+ versuffix=$versuffix_save
+ major=$major_save
+ release=$release_save
+ libname=$libname_save
+ name=$name_save
+
+ if test "$droppeddeps" = yes; then
+ if test "$module" = yes; then
+ echo
+ echo "*** Warning: libtool could not satisfy all declared inter-library"
+ echo "*** dependencies of module $libname. Therefore, libtool will create"
+ echo "*** a static module, that should work as long as the dlopening"
+ echo "*** 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
+ oldlibs="$output_objdir/$libname.$libext"
+ build_libtool_libs=module
+ build_old_libs=yes
+ else
+ build_libtool_libs=no
+ fi
+ else
+ 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."
+ fi
+ fi
+ # Done checking deplibs!
+ deplibs=$newdeplibs
+ fi
+
+ # All the library-specific variables (install_libdir is set above).
+ library_names=
+ old_library=
+ dlname=
+
+ # Test again, we may have decided not to build it any more
+ if test "$build_libtool_libs" = yes; then
+ # Get the real and link names of the library.
+ eval library_names=\"$library_names_spec\"
+ set dummy $library_names
+ realname="$2"
+ shift; shift
+
+ if test -n "$soname_spec"; then
+ eval soname=\"$soname_spec\"
+ else
+ soname="$realname"
+ fi
+
+ lib="$output_objdir/$realname"
+ for link
+ do
+ linknames="$linknames $link"
+ done
+
+ # Ensure that we have .o objects for linkers which dislike .lo
+ # (e.g. aix) incase we are running --disable-static
+ for obj in $libobjs; do
+ oldobj=`$echo "X$obj" | $Xsed -e "$lo2o"`
+ if test ! -f $oldobj; then
+ $show "${LN_S} $obj $oldobj"
+ $run ${LN_S} $obj $oldobj || exit $?
+ fi
+ done
+
+ # Use standard objects if they are pic
+ test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+ $show "generating symbol list for \`$libname.la'"
+ export_symbols="$output_objdir/$libname.exp"
+ $run $rm $export_symbols
+ eval cmds=\"$export_symbols_cmds\"
+ IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ if test -n "$export_symbols_regex"; then
+ $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
+ $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+ $show "$mv \"${export_symbols}T\" \"$export_symbols\""
+ $run eval '$mv "${export_symbols}T" "$export_symbols"'
+ fi
+ fi
+ fi
+
+ if test -n "$export_symbols" && test -n "$include_expsyms"; then
+ $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
+ fi
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+ else
+ gentop="$output_objdir/${outputname}x"
+ $show "${rm}r $gentop"
+ $run ${rm}r "$gentop"
+ $show "mkdir $gentop"
+ $run mkdir "$gentop"
+ status=$?
+ if test $status -ne 0 && test ! -d "$gentop"; then
+ exit $status
+ fi
+ generated="$generated $gentop"
+
+ for xlib in $convenience; do
+ # Extract the objects.
+ case "$xlib" in
+ [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+ *) xabs=`pwd`"/$xlib" ;;
+ esac
+ xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+ xdir="$gentop/$xlib"
+
+ $show "${rm}r $xdir"
+ $run ${rm}r "$xdir"
+ $show "mkdir $xdir"
+ $run mkdir "$xdir"
+ status=$?
+ if test $status -ne 0 && test ! -d "$xdir"; then
+ exit $status
+ fi
+ $show "(cd $xdir && $AR x $xabs)"
+ $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+
+ libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
+ done
+ fi
+ fi
+
+ if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+ eval flag=\"$thread_safe_flag_spec\"
+ linkopts="$linkopts $flag"
+ 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\"
+ fi
+ IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+
+ # Create links to the real library.
+ for linkname in $linknames; do
+ if test "$realname" != "$linkname"; then
+ $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
+ $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
+ fi
+ done
+
+ # If -module or -export-dynamic was specified, set the dlname.
+ if test "$module" = yes || test "$export_dynamic" = yes; then
+ # On all known operating systems, these are identical.
+ dlname="$soname"
+ fi
+ 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
+
+ if test -n "$deplibs"; then
+ $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
+ fi
+
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
+ fi
+
+ if test -n "$rpath"; then
+ $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
+ fi
+
+ if test -n "$xrpath"; then
+ $echo "$modename: warning: \`-R' is ignored for objects" 1>&2
+ fi
+
+ if test -n "$vinfo"; then
+ $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
+ fi
+
+ if test -n "$release"; then
+ $echo "$modename: warning: \`-release' is ignored for objects" 1>&2
+ fi
+
+ case "$output" in
+ *.lo)
+ if test -n "$objs"; then
+ $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
+ exit 1
+ fi
+ libobj="$output"
+ obj=`$echo "X$output" | $Xsed -e "$lo2o"`
+ ;;
+ *)
+ libobj=
+ obj="$output"
+ ;;
+ esac
+
+ # Delete the old objects.
+ $run $rm $obj $libobj
+
+ # Objects from convenience libraries. This assumes
+ # single-version convenience libraries. Whenever we create
+ # different ones for PIC/non-PIC, this we'll have to duplicate
+ # the extraction.
+ reload_conv_objs=
+ gentop=
+ # reload_cmds runs $LD directly, so let us get rid of
+ # -Wl from whole_archive_flag_spec
+ wl=
+
+ if test -n "$convenience"; then
+ if test -n "$whole_archive_flag_spec"; then
+ eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
+ else
+ gentop="$output_objdir/${obj}x"
+ $show "${rm}r $gentop"
+ $run ${rm}r "$gentop"
+ $show "mkdir $gentop"
+ $run mkdir "$gentop"
+ status=$?
+ if test $status -ne 0 && test ! -d "$gentop"; then
+ exit $status
+ fi
+ generated="$generated $gentop"
+
+ for xlib in $convenience; do
+ # Extract the objects.
+ case "$xlib" in
+ [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+ *) xabs=`pwd`"/$xlib" ;;
+ esac
+ xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+ xdir="$gentop/$xlib"
+
+ $show "${rm}r $xdir"
+ $run ${rm}r "$xdir"
+ $show "mkdir $xdir"
+ $run mkdir "$xdir"
+ status=$?
+ if test $status -ne 0 && test ! -d "$xdir"; then
+ exit $status
+ fi
+ $show "(cd $xdir && $AR x $xabs)"
+ $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+
+ reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
+ done
+ fi
+ 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"
+
+ output="$obj"
+ eval cmds=\"$reload_cmds\"
+ IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+
+ # Exit if we aren't doing a library object file.
+ if test -z "$libobj"; then
+ if test -n "$gentop"; then
+ $show "${rm}r $gentop"
+ $run ${rm}r $gentop
+ fi
+
+ exit 0
+ fi
+
+ if test "$build_libtool_libs" != yes; then
+ if test -n "$gentop"; then
+ $show "${rm}r $gentop"
+ $run ${rm}r $gentop
+ fi
+
+ # Create an invalid libtool object if no PIC, so that we don't
+ # accidentally link it into a program.
+ $show "echo timestamp > $libobj"
+ $run eval "echo timestamp > $libobj" || exit $?
+ exit 0
+ fi
+
+ if test -n "$pic_flag"; 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='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ else
+ # Just create a symlink.
+ $show $rm $libobj
+ $run $rm $libobj
+ $show "$LN_S $obj $libobj"
+ $run $LN_S $obj $libobj || exit $?
+ fi
+
+ if test -n "$gentop"; then
+ $show "${rm}r $gentop"
+ $run ${rm}r $gentop
+ fi
+
+ exit 0
+ ;;
+
+ # Anything else should be a program.
+ *)
+ if test -n "$vinfo"; then
+ $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
+ fi
+
+ if test -n "$release"; then
+ $echo "$modename: warning: \`-release' is ignored for programs" 1>&2
+ fi
+
+ if test "$preload" = yes; then
+ if test "$dlopen" = 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
+
+ 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" ;;
+ esac
+ done
+ fi
+
+ # Now hardcode the library paths
+ rpath=
+ hardcode_libdirs=
+ for libdir in $compile_rpath $finalize_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\"
+ rpath="$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 rpath=\" $hardcode_libdir_flag_spec\"
+ fi
+ compile_rpath="$rpath"
+
+ rpath=
+ hardcode_libdirs=
+ for libdir in $finalize_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\"
+ rpath="$rpath $flag"
+ fi
+ elif test -n "$runpath_var"; then
+ case "$finalize_perm_rpath " in
+ *" $libdir "*) ;;
+ *) finalize_perm_rpath="$finalize_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 rpath=\" $hardcode_libdir_flag_spec\"
+ 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`
+ finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+ fi
+
+ dlsyms=
+ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+ if test -n "$NM" && test -n "$global_symbol_pipe"; then
+ dlsyms="${outputname}S.c"
+ else
+ $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
+ fi
+ fi
+
+ if test -n "$dlsyms"; then
+ case "$dlsyms" in
+ "") ;;
+ *.c)
+ # Discover the nlist of each of the dlfiles.
+ nlist="$output_objdir/${outputname}.nm"
+
+ $show "$rm $nlist ${nlist}S ${nlist}T"
+ $run $rm "$nlist" "${nlist}S" "${nlist}T"
+
+ # Parse the name list into a source file.
+ $show "creating $output_objdir/$dlsyms"
+
+ test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
+/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
+/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* Prevent the only kind of declaration conflicts we can make. */
+#define lt_preloaded_symbols some_other_symbol
+
+/* External symbol declarations for the compiler. */\
+"
+
+ if test "$dlself" = yes; then
+ $show "generating symbol list for \`$output'"
+
+ test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
+
+ # Add our own program objects to the symbol list.
+ progfiles=`$echo "X$objs" | $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'"
+ done
+
+ if test -n "$exclude_expsyms"; then
+ $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"'
+ fi
+
+ # Prepare the list of exported symbols
+ if test -z "$export_symbols"; then
+ export_symbols="$output_objdir/$output.exp"
+ $run $rm $export_symbols
+ $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+ else
+ $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
+ $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
+ $run eval 'mv "$nlist"T "$nlist"'
+ fi
+ fi
+
+ for arg in $dlprefiles; do
+ $show "extracting global C symbols from \`$arg'"
+ name=`echo "$arg" | sed -e 's%^.*/%%'`
+ $run eval 'echo ": $name " >> "$nlist"'
+ $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+ done
+
+ if test -z "$run"; then
+ # Make sure we have at least an empty file.
+ test -f "$nlist" || : > "$nlist"
+
+ if test -n "$exclude_expsyms"; then
+ egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+ $mv "$nlist"T "$nlist"
+ fi
+
+ # Try sorting and uniquifying the output.
+ if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then
+ :
+ else
+ grep -v "^: " < "$nlist" > "$nlist"S
+ fi
+
+ if test -f "$nlist"S; then
+ eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
+ else
+ echo '/* NONE */' >> "$output_objdir/$dlsyms"
+ fi
+
+ $echo >> "$output_objdir/$dlsyms" "\
+
+#undef lt_preloaded_symbols
+
+#if defined (__STDC__) && __STDC__
+# define lt_ptr_t void *
+#else
+# define lt_ptr_t char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+ const char *name;
+ lt_ptr_t 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"
+
+ $echo >> "$output_objdir/$dlsyms" "\
+ {0, (lt_ptr_t) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+ return lt_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+ fi
+
+ pic_flag_for_symtable=
+ 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
+ # pic_flag when linking with -static. The problem exists in
+ # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+ *-*-freebsd2*|*-*-freebsd3.0*)
+ case "$compile_command " in
+ *" -static "*) ;;
+ *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";;
+ esac
+ esac
+
+ # Now compile the dynamic symbol file.
+ $show "(cd $output_objdir && $C_compiler -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
+ $run eval '(cd $output_objdir && $C_compiler -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
+
+ # Clean up the generated files.
+ $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
+ $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
+
+ # Transform the symbol file into the correct name.
+ compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+ finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+ ;;
+ *)
+ $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
+ exit 1
+ ;;
+ esac
+ else
+ # We keep going just in case the user didn't refer to
+ # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
+ # really was required.
+
+ # Nullify the symbol file.
+ compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+ finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+ fi
+
+ if test -z "$link_against_libtool_libs" || 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"
+
+ # We have no uninstalled library dependencies, so finalize right now.
+ $show "$link_command"
+ $run eval "$link_command"
+ status=$?
+
+ # Delete the generated files.
+ if test -n "$dlsyms"; then
+ $show "$rm $output_objdir/${outputname}S.${objext}"
+ $run $rm "$output_objdir/${outputname}S.${objext}"
+ fi
+
+ exit $status
+ fi
+
+ if test -n "$shlibpath_var"; then
+ # We should set the shlibpath_var
+ rpath=
+ for dir in $temp_rpath; do
+ case "$dir" in
+ [\\/]* | [A-Za-z]:[\\/]*)
+ # Absolute path.
+ rpath="$rpath$dir:"
+ ;;
+ *)
+ # Relative path: add a thisdir entry.
+ rpath="$rpath\$thisdir/$dir:"
+ ;;
+ esac
+ done
+ temp_rpath="$rpath"
+ fi
+
+ if test -n "$compile_shlibpath$finalize_shlibpath"; then
+ compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+ fi
+ if test -n "$finalize_shlibpath"; then
+ finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+ fi
+
+ compile_var=
+ finalize_var=
+ if test -n "$runpath_var"; then
+ if test -n "$perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ if test -n "$finalize_perm_rpath"; then
+ # We should set the runpath_var.
+ rpath=
+ for dir in $finalize_perm_rpath; do
+ rpath="$rpath$dir:"
+ done
+ finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+ fi
+ 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
+ if test "$fast_install" != no; then
+ link_command="$finalize_var$compile_command$finalize_rpath"
+ if test "$fast_install" = yes; then
+ relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+ else
+ # fast_install is set to needless
+ relink_command=
+ fi
+ else
+ link_command="$compile_var$compile_command$compile_rpath"
+ relink_command="$finalize_var$finalize_command$finalize_rpath"
+ fi
+ fi
+
+ # 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
+
+ $show "$link_command"
+ $run eval "$link_command" || exit $?
+
+ # Now create the wrapper script.
+ $show "creating $output"
+
+ # Quote the relink command for shipping.
+ if test -n "$relink_command"; then
+ 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
+ [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
+ *) qecho="$SHELL `pwd`/$0 --fallback-echo";;
+ esac
+ qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
+ else
+ qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
+ fi
+
+ # Only actually do things if our run command is non-null.
+ if test -z "$run"; then
+ # win32 will think the script is a binary if it has
+ # a .exe suffix, so we strip it off here.
+ case $output in
+ *.exe) output=`echo $output|sed 's,.exe$,,'` ;;
+ esac
+ $rm $output
+ trap "$rm $output; exit 1" 1 2 15
+
+ $echo > $output "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test \"\${CDPATH+set}\" = set; then CDPATH=; export CDPATH; fi
+
+relink_command=\"$relink_command\"
+
+# 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'
+else
+ # When we are sourced in execute mode, \$file and \$echo are already set.
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ echo=\"$qecho\"
+ file=\"\$0\"
+ # Make sure echo works.
+ if test \"X\$1\" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+ elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
+ # Yippee, \$echo works!
+ :
+ else
+ # Restart under the correct shell, and then maybe \$echo will work.
+ exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+ fi
+ fi\
+"
+ $echo >> $output "\
+
+ # Find the directory that this script lives in.
+ thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+ test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+ # Follow symbolic links until we get to the real thisdir.
+ file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\`
+ while test -n \"\$file\"; do
+ destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+
+ # If there was a directory component, then change thisdir.
+ if test \"x\$destdir\" != \"x\$file\"; then
+ case \"\$destdir\" in
+ [\\/]* | [A-Za-z]:[\\/]*) thisdir=\"\$destdir\" ;;
+ *) thisdir=\"\$thisdir/\$destdir\" ;;
+ esac
+ fi
+
+ file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+ file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\`
+ done
+
+ # Try to get the absolute directory name.
+ absdir=\`cd \"\$thisdir\" && pwd\`
+ test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+ if test "$fast_install" = yes; then
+ echo >> $output "\
+ program=lt-'$outputname'
+ 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
+
+ file=\"\$\$-\$program\"
+
+ if test ! -d \"\$progdir\"; then
+ $mkdir \"\$progdir\"
+ else
+ $rm \"\$progdir/\$file\"
+ fi"
+
+ echo >> $output "\
+
+ # relink executable if necessary
+ if test -n \"\$relink_command\"; then
+ if (cd \"\$thisdir\" && eval \$relink_command); then :
+ else
+ $rm \"\$progdir/\$file\"
+ exit 1
+ fi
+ fi
+
+ $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+ { $rm \"\$progdir/\$program\";
+ $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+ $rm \"\$progdir/\$file\"
+ fi"
+ else
+ echo >> $output "\
+ program='$outputname$exeext'
+ progdir=\"\$thisdir/$objdir\"
+"
+ fi
+
+ echo >> $output "\
+
+ if test -f \"\$progdir/\$program\"; then"
+
+ # Export our shlibpath_var if we have one.
+ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+ $echo >> $output "\
+ # Add our own library path to $shlibpath_var
+ $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+ # Some systems cannot cope with colon-terminated $shlibpath_var
+ # The second colon is a workaround for a bug in BeOS R4 sed
+ $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+
+ export $shlibpath_var
+"
+ fi
+
+ # fixup the dll searchpath if we need to.
+ if test -n "$dllsearchpath"; then
+ $echo >> $output "\
+ # Add the dll search path components to the executable PATH
+ PATH=$dllsearchpath:\$PATH
+"
+ fi
+
+ $echo >> $output "\
+ if test \"\$libtool_execute_magic\" != \"$magic\"; then
+ # Run the actual program with our arguments.
+"
+ case $host in
+ *-*-cygwin* | *-*-mingw | *-*-os2*)
+ # win32 systems need to use the prog path for dll
+ # lookup to work
+ $echo >> $output "\
+ exec \$progdir\\\\\$program \${1+\"\$@\"}
+"
+ ;;
+ *)
+ $echo >> $output "\
+ # Export the path to the program.
+ PATH=\"\$progdir:\$PATH\"
+ export PATH
+
+ exec \$program \${1+\"\$@\"}
+"
+ ;;
+ esac
+ $echo >> $output "\
+ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
+ exit 1
+ fi
+ else
+ # The program doesn't exist.
+ \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
+ \$echo \"This script is just a wrapper for \$program.\" 1>&2
+ echo \"See the $PACKAGE documentation for more information.\" 1>&2
+ exit 1
+ fi
+fi\
+"
+ chmod +x $output
+ fi
+ exit 0
+ ;;
+ esac
+
+ # See if we need to build an old-fashioned archive.
+ for oldlib in $oldlibs; do
+
+ if test "$build_libtool_libs" = convenience; then
+ oldobjs="$libobjs_save"
+ addlibs="$convenience"
+ build_libtool_libs=no
+ else
+ if test "$build_libtool_libs" = module; then
+ 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`
+ fi
+ addlibs="$old_convenience"
+ fi
+
+ if test -n "$addlibs"; then
+ gentop="$output_objdir/${outputname}x"
+ $show "${rm}r $gentop"
+ $run ${rm}r "$gentop"
+ $show "mkdir $gentop"
+ $run mkdir "$gentop"
+ status=$?
+ if test $status -ne 0 && test ! -d "$gentop"; then
+ exit $status
+ fi
+ generated="$generated $gentop"
+
+ # Add in members from convenience archives.
+ for xlib in $addlibs; do
+ # Extract the objects.
+ case "$xlib" in
+ [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+ *) xabs=`pwd`"/$xlib" ;;
+ esac
+ xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+ xdir="$gentop/$xlib"
+
+ $show "${rm}r $xdir"
+ $run ${rm}r "$xdir"
+ $show "mkdir $xdir"
+ $run mkdir "$xdir"
+ status=$?
+ if test $status -ne 0 && test ! -d "$xdir"; then
+ exit $status
+ fi
+ $show "(cd $xdir && $AR x $xabs)"
+ $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+
+ oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP`
+ done
+ fi
+
+ # Do each command in the archive commands.
+ if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+ eval cmds=\"$old_archive_from_new_cmds\"
+ else
+ # Ensure that we have .o objects in place incase we decided
+ # not to build a shared library, and have fallen back to building
+ # static libs even though --disable-static was passed!
+ for oldobj in $oldobjs; do
+ if test ! -f $oldobj; then
+ obj=`$echo "X$oldobj" | $Xsed -e "$o2lo"`
+ $show "${LN_S} $obj $oldobj"
+ $run ${LN_S} $obj $oldobj || exit $?
+ fi
+ done
+
+ eval cmds=\"$old_archive_cmds\"
+ fi
+ IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ done
+
+ if test -n "$generated"; then
+ $show "${rm}r$generated"
+ $run ${rm}r$generated
+ fi
+
+ # Now create the libtool archive.
+ 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
+
+ # Only create the output if not a dry run.
+ if test -z "$run"; then
+ for installed in no yes; do
+ if test "$installed" = yes; then
+ if test -z "$install_libdir"; then
+ break
+ fi
+ output="$output_objdir/$outputname"i
+ fi
+ $rm $output
+ $echo > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$dlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'\
+"
+ done
+ fi
+
+ # 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 $?
+ ;;
+ esac
+ exit 0
+ ;;
+
+ # libtool install mode
+ install)
+ modename="$modename: install"
+
+ # 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
+ # Aesthetically quote it.
+ arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
+ case "$arg" in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
+ arg="\"$arg\""
+ ;;
+ esac
+ install_prog="$arg "
+ arg="$1"
+ shift
+ else
+ install_prog=
+ arg="$nonopt"
+ fi
+
+ # 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
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
+ arg="\"$arg\""
+ ;;
+ esac
+ install_prog="$install_prog$arg"
+
+ # We need to accept at least all the BSD install flags.
+ dest=
+ files=
+ opts=
+ prev=
+ install_type=
+ isdir=no
+ stripme=
+ for arg
+ do
+ if test -n "$dest"; then
+ files="$files $dest"
+ dest="$arg"
+ continue
+ fi
+
+ case "$arg" in
+ -d) isdir=yes ;;
+ -f) prev="-f" ;;
+ -g) prev="-g" ;;
+ -m) prev="-m" ;;
+ -o) prev="-o" ;;
+ -s)
+ stripme=" -s"
+ continue
+ ;;
+ -*) ;;
+
+ *)
+ # If the previous option needed an argument, then skip it.
+ if test -n "$prev"; then
+ prev=
+ else
+ dest="$arg"
+ continue
+ fi
+ ;;
+ esac
+
+ # Aesthetically quote the argument.
+ arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+ case "$arg" in
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
+ arg="\"$arg\""
+ ;;
+ esac
+ install_prog="$install_prog $arg"
+ done
+
+ if test -z "$install_prog"; then
+ $echo "$modename: you must specify an install program" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ if test -n "$prev"; then
+ $echo "$modename: the \`$prev' option requires an argument" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ if test -z "$files"; then
+ if test -z "$dest"; then
+ $echo "$modename: no file or destination specified" 1>&2
+ else
+ $echo "$modename: you must specify a destination" 1>&2
+ fi
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ # Strip any trailing slash from the destination.
+ dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
+
+ # Check to see that the destination is a directory.
+ test -d "$dest" && isdir=yes
+ if test "$isdir" = yes; then
+ destdir="$dest"
+ destname=
+ else
+ destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$destdir" = "X$dest" && destdir=.
+ destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
+
+ # Not a directory, so check to see that there is only one file specified.
+ set dummy $files
+ if test $# -gt 2; then
+ $echo "$modename: \`$dest' is not a directory" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+ fi
+ case "$destdir" in
+ [\\/]* | [A-Za-z]:[\\/]*) ;;
+ *)
+ for file in $files; do
+ case "$file" in
+ *.lo) ;;
+ *)
+ $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ ;;
+ esac
+ done
+ ;;
+ esac
+
+ # This variable tells wrapper scripts just to set variables rather
+ # than running their programs.
+ libtool_install_magic="$magic"
+
+ staticlibs=
+ future_libdirs=
+ current_libdirs=
+ for file in $files; do
+
+ # Do each installation.
+ case "$file" in
+ *.a | *.lib)
+ # Do the static libraries later.
+ staticlibs="$staticlibs $file"
+ ;;
+
+ *.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 :
+ else
+ $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ library_names=
+ old_library=
+ # If there is no directory component, then add one.
+ case "$file" in
+ */* | *\\*) . $file ;;
+ *) . ./$file ;;
+ esac
+
+ # Add the libdir to current_libdirs if it is the destination.
+ if test "X$destdir" = "X$libdir"; then
+ case "$current_libdirs " in
+ *" $libdir "*) ;;
+ *) current_libdirs="$current_libdirs $libdir" ;;
+ esac
+ else
+ # Note the libdir as a future libdir.
+ case "$future_libdirs " in
+ *" $libdir "*) ;;
+ *) future_libdirs="$future_libdirs $libdir" ;;
+ esac
+ fi
+
+ dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/"
+ test "X$dir" = "X$file/" && dir=
+ dir="$dir$objdir"
+
+ # See the names of the shared library.
+ set dummy $library_names
+ if test -n "$2"; then
+ realname="$2"
+ shift
+ shift
+
+ # Install the shared library and build the symlinks.
+ $show "$install_prog $dir/$realname $destdir/$realname"
+ $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $?
+
+ if test $# -gt 0; then
+ # Delete the old symlinks, and create new ones.
+ for linkname
+ do
+ if test "$linkname" != "$realname"; then
+ $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+ $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+ fi
+ done
+ fi
+
+ # Do each command in the postinstall commands.
+ lib="$destdir/$realname"
+ eval cmds=\"$postinstall_cmds\"
+ IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ fi
+
+ # Install the pseudo-library for information purposes.
+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+ instname="$dir/$name"i
+ $show "$install_prog $instname $destdir/$name"
+ $run eval "$install_prog $instname $destdir/$name" || exit $?
+
+ # Maybe install the static library, too.
+ test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+ ;;
+
+ *.lo)
+ # Install (i.e. copy) a libtool object.
+
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+ destfile="$destdir/$destfile"
+ fi
+
+ # Deduce the name of the destination old-style object file.
+ case "$destfile" in
+ *.lo)
+ staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
+ ;;
+ *.o | *.obj)
+ staticdest="$destfile"
+ destfile=
+ ;;
+ *)
+ $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ ;;
+ esac
+
+ # Install the libtool object if requested.
+ if test -n "$destfile"; then
+ $show "$install_prog $file $destfile"
+ $run eval "$install_prog $file $destfile" || exit $?
+ fi
+
+ # Install the old object if enabled.
+ if test "$build_old_libs" = yes; then
+ # Deduce the name of the old-style object file.
+ staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
+
+ $show "$install_prog $staticobj $staticdest"
+ $run eval "$install_prog \$staticobj \$staticdest" || exit $?
+ fi
+ exit 0
+ ;;
+
+ *)
+ # Figure out destination file name, if it wasn't already specified.
+ if test -n "$destname"; then
+ destfile="$destdir/$destname"
+ else
+ destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+ destfile="$destdir/$destfile"
+ fi
+
+ # 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=
+ relink_command=
+
+ # If there is no directory component, then add one.
+ case "$file" in
+ */* | *\\*) . $file ;;
+ *) . ./$file ;;
+ esac
+
+ # Check the variables that should have been set.
+ if test -z "$link_against_libtool_libs"; then
+ $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2
+ exit 1
+ fi
+
+ finalize=yes
+ for lib in $link_against_libtool_libs; 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
+ */* | *\\*) . $lib ;;
+ *) . ./$lib ;;
+ esac
+ fi
+ libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`"
+ if test -n "$libdir" && test ! -f "$libfile"; then
+ $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
+ finalize=no
+ fi
+ done
+
+ outputname=
+ if test "$fast_install" = no && test -n "$relink_command"; then
+ if test "$finalize" = yes && test -z "$run"; then
+ tmpdir="/tmp"
+ test -n "$TMPDIR" && tmpdir="$TMPDIR"
+ tmpdir="$tmpdir/libtool-$$"
+ if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then :
+ else
+ $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
+ continue
+ fi
+ outputname="$tmpdir/$file"
+ # Replace the output file specification.
+ relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+ $show "$relink_command"
+ if $run eval "$relink_command"; then :
+ else
+ $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+ ${rm}r "$tmpdir"
+ continue
+ fi
+ file="$outputname"
+ else
+ $echo "$modename: warning: cannot relink \`$file'" 1>&2
+ fi
+ else
+ # Install the binary that we compiled earlier.
+ file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+ fi
+ fi
+
+ $show "$install_prog$stripme $file $destfile"
+ $run eval "$install_prog\$stripme \$file \$destfile" || exit $?
+ test -n "$outputname" && ${rm}r "$tmpdir"
+ ;;
+ esac
+ done
+
+ for file in $staticlibs; do
+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+
+ # Set up the ranlib parameters.
+ oldlib="$destdir/$name"
+
+ $show "$install_prog $file $oldlib"
+ $run eval "$install_prog \$file \$oldlib" || exit $?
+
+ # Do each command in the postinstall commands.
+ eval cmds=\"$old_postinstall_cmds\"
+ IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || exit $?
+ done
+ IFS="$save_ifs"
+ done
+
+ if test -n "$future_libdirs"; then
+ $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
+ fi
+
+ 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
+ fi
+
+ exit 0
+ ;;
+
+ # libtool finish mode
+ finish)
+ modename="$modename: finish"
+ libdirs="$nonopt"
+ admincmds=
+
+ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+ for dir
+ do
+ libdirs="$libdirs $dir"
+ done
+
+ for libdir in $libdirs; do
+ if test -n "$finish_cmds"; then
+ # Do each command in the finish commands.
+ eval cmds=\"$finish_cmds\"
+ IFS="${IFS= }"; save_ifs="$IFS"; IFS='~'
+ for cmd in $cmds; do
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd" || admincmds="$admincmds
+ $cmd"
+ done
+ IFS="$save_ifs"
+ fi
+ if test -n "$finish_eval"; then
+ # Do the single finish_eval.
+ eval cmds=\"$finish_eval\"
+ $run eval "$cmds" || admincmds="$admincmds
+ $cmds"
+ fi
+ done
+ fi
+
+ # Exit here if they wanted silent mode.
+ test "$show" = : && exit 0
+
+ echo "----------------------------------------------------------------------"
+ echo "Libraries have been installed in:"
+ for libdir in $libdirs; do
+ echo " $libdir"
+ done
+ 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 "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"
+ echo " during execution"
+ fi
+ if test -n "$runpath_var"; then
+ echo " - add LIBDIR to the \`$runpath_var' environment variable"
+ echo " during linking"
+ fi
+ if test -n "$hardcode_libdir_flag_spec"; then
+ libdir=LIBDIR
+ eval flag=\"$hardcode_libdir_flag_spec\"
+
+ echo " - use the \`$flag' linker flag"
+ fi
+ if test -n "$admincmds"; then
+ echo " - have your system administrator run these commands:$admincmds"
+ fi
+ if test -f /etc/ld.so.conf; then
+ echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+ fi
+ echo
+ echo "See any operating system documentation about shared libraries for"
+ echo "more information, such as the ld(1) and ld.so(8) manual pages."
+ echo "----------------------------------------------------------------------"
+ exit 0
+ ;;
+
+ # libtool execute mode
+ execute)
+ modename="$modename: execute"
+
+ # The first argument is the command name.
+ cmd="$nonopt"
+ if test -z "$cmd"; then
+ $echo "$modename: you must specify a COMMAND" 1>&2
+ $echo "$help"
+ exit 1
+ fi
+
+ # Handle -dlopen flags immediately.
+ for file in $execute_dlfiles; do
+ if test ! -f "$file"; then
+ $echo "$modename: \`$file' is not a file" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ dir=
+ 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 :
+ else
+ $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ # Read the libtool library.
+ dlname=
+ library_names=
+
+ # If there is no directory component, then add one.
+ case "$file" in
+ */* | *\\*) . $file ;;
+ *) . ./$file ;;
+ esac
+
+ # Skip this library if it cannot be dlopened.
+ if test -z "$dlname"; then
+ # Warn if it was a shared library.
+ test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
+ continue
+ fi
+
+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$dir" = "X$file" && dir=.
+
+ if test -f "$dir/$objdir/$dlname"; then
+ dir="$dir/$objdir"
+ else
+ $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
+ exit 1
+ fi
+ ;;
+
+ *.lo)
+ # Just add the directory containing the .lo file.
+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$dir" = "X$file" && dir=.
+ ;;
+
+ *)
+ $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
+ continue
+ ;;
+ esac
+
+ # Get the absolute pathname.
+ absdir=`cd "$dir" && pwd`
+ test -n "$absdir" && dir="$absdir"
+
+ # Now add the directory to shlibpath_var.
+ if eval "test -z \"\$$shlibpath_var\""; then
+ eval "$shlibpath_var=\"\$dir\""
+ else
+ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+ fi
+ done
+
+ # This variable tells wrapper scripts just to set shlibpath_var
+ # rather than running their programs.
+ libtool_execute_magic="$magic"
+
+ # Check if any of the arguments is a wrapper script.
+ args=
+ for file
+ do
+ 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
+ */* | *\\*) . $file ;;
+ *) . ./$file ;;
+ esac
+
+ # Transform arg to wrapped name.
+ file="$progdir/$program"
+ fi
+ ;;
+ esac
+ # Quote arguments (to preserve shell metacharacters).
+ file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
+ args="$args \"$file\""
+ done
+
+ if test -z "$run"; then
+ # Export the shlibpath_var.
+ eval "export $shlibpath_var"
+
+ # Restore saved enviroment variables
+ if test "${save_LC_ALL+set}" = set; then
+ LC_ALL="$save_LC_ALL"; export LC_ALL
+ fi
+ if test "${save_LANG+set}" = set; then
+ LANG="$save_LANG"; export LANG
+ fi
+
+ # Now actually exec the command.
+ eval "exec \$cmd$args"
+
+ $echo "$modename: cannot exec \$cmd$args"
+ exit 1
+ else
+ # Display what would be done.
+ eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
+ $echo "export $shlibpath_var"
+ $echo "$cmd$args"
+ exit 0
+ fi
+ ;;
+
+ # libtool uninstall mode
+ uninstall)
+ modename="$modename: uninstall"
+ rm="$nonopt"
+ files=
+
+ for arg
+ do
+ case "$arg" in
+ -*) rm="$rm $arg" ;;
+ *) files="$files $arg" ;;
+ esac
+ done
+
+ if test -z "$rm"; then
+ $echo "$modename: you must specify an RM program" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ fi
+
+ for file in $files; do
+ dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+ test "X$dir" = "X$file" && dir=.
+ name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+
+ rmfiles="$file"
+
+ 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
+ . $dir/$name
+
+ # Delete the libtool libraries and symlinks.
+ for n in $library_names; do
+ rmfiles="$rmfiles $dir/$n"
+ done
+ test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library"
+
+ $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
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd"
+ done
+ IFS="$save_ifs"
+ 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
+ IFS="$save_ifs"
+ $show "$cmd"
+ $run eval "$cmd"
+ done
+ IFS="$save_ifs"
+ fi
+
+ # FIXME: should reinstall the best remaining shared library.
+ fi
+ ;;
+
+ *.lo)
+ if test "$build_old_libs" = yes; then
+ oldobj=`$echo "X$name" | $Xsed -e "$lo2o"`
+ rmfiles="$rmfiles $dir/$oldobj"
+ fi
+ $show "$rm $rmfiles"
+ $run $rm $rmfiles
+ ;;
+
+ *)
+ $show "$rm $rmfiles"
+ $run $rm $rmfiles
+ ;;
+ esac
+ done
+ exit 0
+ ;;
+
+ "")
+ $echo "$modename: you must specify a MODE" 1>&2
+ $echo "$generic_help" 1>&2
+ exit 1
+ ;;
+ esac
+
+ $echo "$modename: invalid operation mode \`$mode'" 1>&2
+ $echo "$generic_help" 1>&2
+ exit 1
+fi # test -z "$show_help"
+
+# We need to display help for each of the modes.
+case "$mode" in
+"") $echo \
+"Usage: $modename [OPTION]... [MODE-ARG]...
+
+Provide generalized library-building support services.
+
+ --config show all configuration variables
+ --debug enable verbose shell tracing
+-n, --dry-run display commands without modifying any files
+ --features display basic configuration information and exit
+ --finish same as \`--mode=finish'
+ --help display this help message and exit
+ --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS]
+ --quiet same as \`--silent'
+ --silent don't print informational messages
+ --version print version information
+
+MODE must be one of the following:
+
+ 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
+ install install libraries or executables
+ link create a library or an executable
+ uninstall remove libraries from an installed directory
+
+MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for
+a more detailed description of MODE."
+ exit 0
+ ;;
+
+compile)
+ $echo \
+"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+ -o OUTPUT-FILE set the output file name to OUTPUT-FILE
+ -static always build a \`.o' file suitable for static linking
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+ ;;
+
+execute)
+ $echo \
+"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+ -dlopen FILE add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+ ;;
+
+finish)
+ $echo \
+"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges. Use
+the \`--dry-run' option if you just want to see what would be executed."
+ ;;
+
+install)
+ $echo \
+"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command. The first component should be
+either the \`install' or \`cp' program.
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+ ;;
+
+link)
+ $echo \
+"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+ -all-static do not do any dynamic linking at all
+ -avoid-version do not add a version suffix if possible
+ -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
+ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
+ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+ -export-symbols SYMFILE
+ try to export only the symbols listed in SYMFILE
+ -export-symbols-regex REGEX
+ try to export only the symbols matching REGEX
+ -LLIBDIR search LIBDIR for required installed libraries
+ -lNAME OUTPUT-FILE requires the installed library libNAME
+ -module build a library that can dlopened
+ -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
+ -rpath LIBDIR the created library will eventually be installed in LIBDIR
+ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
+ -static do not do any dynamic linking of libtool libraries
+ -version-info CURRENT[:REVISION[:AGE]]
+ specify library version info [each variable defaults to 0]
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename. Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+ ;;
+
+uninstall)
+ $echo \
+"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation 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, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+ ;;
+
+*)
+ $echo "$modename: invalid operation mode \`$mode'" 1>&2
+ $echo "$help" 1>&2
+ exit 1
+ ;;
+esac
+
+echo
+$echo "Try \`$modename --help' for more information about other modes."
+
+exit 0
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
--- /dev/null
+++ b/common/libsndfile/m4/Makefile.am
@@ -1,0 +1,1 @@
+
--- /dev/null
+++ b/common/libsndfile/m4/Makefile.in
@@ -1,0 +1,182 @@
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_alias = @build_alias@
+build_triplet = @build@
+host_alias = @host_alias@
+host_triplet = @host@
+target_alias = @target_alias@
+target_triplet = @target@
+AS = @AS@
+CC = @CC@
+DLLTOOL = @DLLTOOL@
+LD = @LD@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+MAKEINFO = @MAKEINFO@
+NM = @NM@
+OBJDUMP = @OBJDUMP@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+VERSION = @VERSION@
+subdirs = @subdirs@
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../src/config.h
+CONFIG_CLEAN_FILES =
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps m4/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = m4
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am:
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am:
+uninstall: uninstall-am
+all-am: Makefile
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am
+ -rm -f libtool
+
+distclean: distclean-am
+
+maintainer-clean-am: 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."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: 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
+
+
+# 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.
+.NOEXPORT:
--- /dev/null
+++ b/common/libsndfile/missing
@@ -1,0 +1,188 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+# Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+# Franc,ois Pinard <[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, 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.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+fi
+
+case "$1" in
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+
+Supported PROGRAM values:
+ aclocal touch file \`aclocal.m4'
+ autoconf touch file \`configure'
+ autoheader touch file \`config.h.in'
+ automake touch all \`Makefile.in' files
+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
+ flex create \`lex.yy.c', if possible, from existing .c
+ lex create \`lex.yy.c', if possible, from existing .c
+ makeinfo touch the output file
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]"
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing - GNU libit 0.0"
+ ;;
+
+ -*)
+ echo 1>&2 "$0: Unknown \`$1' option"
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+ ;;
+
+ aclocal)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`acinclude.m4' or \`configure.in'. You might want
+ to install the \`Automake' and \`Perl' packages. Grab them from
+ any GNU archive site."
+ touch aclocal.m4
+ ;;
+
+ autoconf)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`configure.in'. You might want to install the
+ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
+ archive site."
+ touch configure
+ ;;
+
+ autoheader)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`acconfig.h' or \`configure.in'. You might want
+ to install the \`Autoconf' and \`GNU m4' packages. Grab them
+ from any GNU archive site."
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER([^):]*:\([^)]*\)).*/\1/p' configure.in`
+ if test -z "$files"; then
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^):]*\)).*/\1/p' configure.in`
+ test -z "$files" || files="$files.in"
+ else
+ files=`echo "$files" | sed -e 's/:/ /g'`
+ fi
+ test -z "$files" && files="config.h.in"
+ touch $files
+ ;;
+
+ automake)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'.
+ You might want to install the \`Automake' and \`Perl' packages.
+ Grab them from any GNU archive site."
+ find . -type f -name Makefile.am -print \
+ | sed 's/^\(.*\).am$/touch \1.in/' \
+ | sh
+ ;;
+
+ bison|yacc)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a \`.y' file. You may need the \`Bison' package
+ in order for those modifications to take effect. You can get
+ \`Bison' from any GNU archive site."
+ rm -f y.tab.c y.tab.h
+ if [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -f y.tab.h ]; then
+ echo >y.tab.h
+ fi
+ if [ ! -f y.tab.c ]; then
+ echo 'main() { return 0; }' >y.tab.c
+ fi
+ ;;
+
+ lex|flex)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a \`.l' file. You may need the \`Flex' package
+ in order for those modifications to take effect. You can get
+ \`Flex' from any GNU archive site."
+ rm -f lex.yy.c
+ if [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -f lex.yy.c ]; then
+ echo 'main() { return 0; }' >lex.yy.c
+ fi
+ ;;
+
+ makeinfo)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified a \`.texi' or \`.texinfo' file, or any other file
+ indirectly affecting the aspect of the manual. The spurious
+ call might also be the consequence of using a buggy \`make' (AIX,
+ DU, IRIX). You might want to install the \`Texinfo' package or
+ the \`GNU make' package. Grab either from any GNU archive site."
+ file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+ if test -z "$file"; then
+ file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
+ fi
+ touch $file
+ ;;
+
+ *)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, and you do not seem to have it handy on your
+ system. You might have modified some files without having the
+ proper tools for further handling them. Check the \`README' file,
+ it often tells you about the needed prerequirements for installing
+ this package. You may also peek at any GNU archive site, in case
+ some other package would contain this missing \`$1' program."
+ exit 1
+ ;;
+esac
+
+exit 0
--- /dev/null
+++ b/common/libsndfile/mkinstalldirs
@@ -1,0 +1,40 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <[email protected]>
+# Created: 1993-05-16
+# Public domain
+
+# $Id: mkinstalldirs,v 1.1 2001/05/09 19:44:12 menno Exp $
+
+errstatus=0
+
+for file
+do
+ set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+ shift
+
+ pathcomp=
+ for d
+ do
+ pathcomp="$pathcomp$d"
+ case "$pathcomp" in
+ -* ) pathcomp=./$pathcomp ;;
+ esac
+
+ if test ! -d "$pathcomp"; then
+ echo "mkdir $pathcomp" 1>&2
+
+ mkdir "$pathcomp" || lasterr=$?
+
+ if test ! -d "$pathcomp"; then
+ errstatus=$lasterr
+ fi
+ fi
+
+ pathcomp="$pathcomp/"
+ done
+done
+
+exit $errstatus
+
+# mkinstalldirs ends here
--- /dev/null
+++ b/common/libsndfile/reconf
@@ -1,0 +1,15 @@
+#!/bin/sh
+
+rm -f config.cache
+
+if [ -d m4 ]; then
+ echo "Looking in m4 directory."
+ aclocal -I m4
+else
+ aclocal
+ fi
+
+autoconf
+autoheader
+automake -a
+exit
--- /dev/null
+++ b/common/libsndfile/src/G72x/ChangeLog
@@ -1,0 +1,45 @@
+2000-07-14 Erik de Castro Lopo <[email protected]>
+
+ * g72x.c
+ Modified g72x_init_state () to fit in with the new structure of the code.
+ Implemented g72x_encode_block () and g72x_decode_block ().
+
+2000-07-12 Erik de Castro Lopo <[email protected]>
+
+ * g72x.h
+ Moved nearly all definitions and function prototypes from this file have been
+ moved to private.h.
+ Added an enum defining the 4 different G72x ADPCM codecs.
+ Added new function prototypes to define a cleaner interface to the encoder
+ and decoder. This new interface also allows samples to be processed in blocks
+ rather than on a sample by sample basis like the original code.
+
+ * private.h
+ Added prototypes moved from g72x.h.
+ Changed struct g72x_state to a typedef struct { .. } G72x_PRIVATE.
+ Added fields to G72x_PRIVATE required for working on blocks of samples.
+
+2000-06-07 Erik de Castro Lopo <[email protected]>
+
+ * g72x.c
+ Fixed all compiler warnings.
+ Removed functions tandem_adjust() which is not required by libsndfile.
+
+ * g721.c
+ Fixed all compiler warnings.
+ Removed functions tandem_adjust_alaw() and tandem_adjust_ulaw () which are not
+ required by libsndfile.
+ Removed second parameter to g721_encoder () which is not required.
+
+ * g72x.h
+ Removed in_coding and out_coding parameters from all functions. These allowed
+ g72x encoding/decoding to/from A-law or u-law and are not required by libsndfile.
+ Removed unneeded defines for A-law, u-law and linear encoding.
+
+ * g723_16.c
+ Removed second parameter (in_coding) for g723_16_encoder().
+ Removed second parameter (out_coding) for g723_16_decoder().
+
+ * private.h
+ New file containing prototypes and tyepdefs private to G72x code.
+
--- /dev/null
+++ b/common/libsndfile/src/G72x/Makefile.am
@@ -1,0 +1,14 @@
+# This file was automatically generated
+# DO NOT EDIT!
+
+EXTRA_DIST = README README.original ChangeLog
+
+noinst_HEADERS = g72x.h private.h
+noinst_LTLIBRARIES = libg72x.la
+
+CFILES = g72x.c g721.c g723_16.c g723_24.c g723_40.c
+
+libg72x_la_SOURCES = $(CFILES) $(noinst_HEADERS)
+
+# Disable autoheader.
+AUTOHEADER=echo
--- /dev/null
+++ b/common/libsndfile/src/G72x/Makefile.in
@@ -1,0 +1,312 @@
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# This file was automatically generated
+# DO NOT EDIT!
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_alias = @build_alias@
+build_triplet = @build@
+host_alias = @host_alias@
+host_triplet = @host@
+target_alias = @target_alias@
+target_triplet = @target@
+AS = @AS@
+CC = @CC@
+DLLTOOL = @DLLTOOL@
+LD = @LD@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+MAKEINFO = @MAKEINFO@
+NM = @NM@
+OBJDUMP = @OBJDUMP@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+VERSION = @VERSION@
+subdirs = @subdirs@
+
+EXTRA_DIST = README README.original ChangeLog
+
+noinst_HEADERS = g72x.h private.h
+noinst_LTLIBRARIES = libg72x.la
+
+CFILES = g72x.c g721.c g723_16.c g723_24.c g723_40.c
+
+libg72x_la_SOURCES = $(CFILES) $(noinst_HEADERS)
+
+# Disable autoheader.
+AUTOHEADER = echo
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../src/config.h
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+
+
+DEFS = @DEFS@ -I. -I$(srcdir) -I../../src
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+libg72x_la_LDFLAGS =
+libg72x_la_LIBADD =
+libg72x_la_OBJECTS = g72x.lo g721.lo g723_16.lo g723_24.lo g723_40.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)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+HEADERS = $(noinst_HEADERS)
+
+DIST_COMMON = README ChangeLog Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+SOURCES = $(libg72x_la_SOURCES)
+OBJECTS = $(libg72x_la_OBJECTS)
+
+all: all-redirect
+.SUFFIXES:
+.SUFFIXES: .S .c .lo .o .s
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps src/G72x/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+mostlyclean-noinstLTLIBRARIES:
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+
+distclean-noinstLTLIBRARIES:
+
+maintainer-clean-noinstLTLIBRARIES:
+
+.c.o:
+ $(COMPILE) -c $<
+
+.s.o:
+ $(COMPILE) -c $<
+
+.S.o:
+ $(COMPILE) -c $<
+
+mostlyclean-compile:
+ -rm -f *.o core *.core
+
+clean-compile:
+
+distclean-compile:
+ -rm -f *.tab.c
+
+maintainer-clean-compile:
+
+.c.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+.s.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+.S.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+
+maintainer-clean-libtool:
+
+libg72x.la: $(libg72x_la_OBJECTS) $(libg72x_la_DEPENDENCIES)
+ $(LINK) $(libg72x_la_LDFLAGS) $(libg72x_la_OBJECTS) $(libg72x_la_LIBADD) $(LIBS)
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = src/G72x
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || 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:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am:
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am:
+uninstall: uninstall-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-noinstLTLIBRARIES mostlyclean-compile \
+ mostlyclean-libtool mostlyclean-tags \
+ mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-noinstLTLIBRARIES clean-compile clean-libtool \
+ clean-tags clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-noinstLTLIBRARIES distclean-compile \
+ distclean-libtool distclean-tags distclean-generic \
+ clean-am
+ -rm -f libtool
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-noinstLTLIBRARIES \
+ maintainer-clean-compile maintainer-clean-libtool \
+ 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."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: mostlyclean-noinstLTLIBRARIES distclean-noinstLTLIBRARIES \
+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
+
+
+# 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.
+.NOEXPORT:
--- /dev/null
+++ b/common/libsndfile/src/G72x/README.original
@@ -1,0 +1,94 @@
+The files in this directory comprise ANSI-C language reference implementations
+of the CCITT (International Telegraph and Telephone Consultative Committee)
+G.711, G.721 and G.723 voice compressions. They have been tested on Sun
+SPARCstations and passed 82 out of 84 test vectors published by CCITT
+(Dec. 20, 1988) for G.721 and G.723. [The two remaining test vectors,
+which the G.721 decoder implementation for u-law samples did not pass,
+may be in error because they are identical to two other vectors for G.723_40.]
+
+This source code is released by Sun Microsystems, Inc. to the public domain.
+Please give your acknowledgement in product literature if this code is used
+in your product implementation.
+
+Sun Microsystems supports some CCITT audio formats in Solaris 2.0 system
+software. However, Sun's implementations have been optimized for higher
+performance on SPARCstations.
+
+
+The source files for CCITT conversion routines in this directory are:
+
+ g72x.h header file for g721.c, g723_24.c and g723_40.c
+ g711.c CCITT G.711 u-law and A-law compression
+ g72x.c common denominator of G.721 and G.723 ADPCM codes
+ g721.c CCITT G.721 32Kbps ADPCM coder (with g72x.c)
+ g723_24.c CCITT G.723 24Kbps ADPCM coder (with g72x.c)
+ g723_40.c CCITT G.723 40Kbps ADPCM coder (with g72x.c)
+
+
+Simple conversions between u-law, A-law, and 16-bit linear PCM are invoked
+as follows:
+
+ unsigned char ucode, acode;
+ short pcm_val;
+
+ ucode = linear2ulaw(pcm_val);
+ ucode = alaw2ulaw(acode);
+
+ acode = linear2alaw(pcm_val);
+ acode = ulaw2alaw(ucode);
+
+ pcm_val = ulaw2linear(ucode);
+ pcm_val = alaw2linear(acode);
+
+
+The other CCITT compression routines are invoked as follows:
+
+ #include "g72x.h"
+
+ struct g72x_state state;
+ int sample, code;
+
+ g72x_init_state(&state);
+ code = {g721,g723_24,g723_40}_encoder(sample, coding, &state);
+ sample = {g721,g723_24,g723_40}_decoder(code, coding, &state);
+
+where
+ coding = AUDIO_ENCODING_ULAW for 8-bit u-law samples
+ AUDIO_ENCODING_ALAW for 8-bit A-law samples
+ AUDIO_ENCODING_LINEAR for 16-bit linear PCM samples
+
+
+
+This directory also includes the following sample programs:
+
+ encode.c CCITT ADPCM encoder
+ decode.c CCITT ADPCM decoder
+ Makefile makefile for the sample programs
+
+
+The sample programs contain examples of how to call the various compression
+routines and pack/unpack the bits. The sample programs read byte streams from
+stdin and write to stdout. The input/output data is raw data (no file header
+or other identifying information is embedded). The sample programs are
+invoked as follows:
+
+ encode [-3|4|5] [-a|u|l] <infile >outfile
+ decode [-3|4|5] [-a|u|l] <infile >outfile
+where:
+ -3 encode to (decode from) G.723 24kbps (3-bit) data
+ -4 encode to (decode from) G.721 32kbps (4-bit) data [the default]
+ -5 encode to (decode from) G.723 40kbps (5-bit) data
+ -a encode from (decode to) A-law data
+ -u encode from (decode to) u-law data [the default]
+ -l encode from (decode to) 16-bit linear data
+
+Examples:
+ # Read 16-bit linear and output G.721
+ encode -4 -l <pcmfile >g721file
+
+ # Read 40Kbps G.723 and output A-law
+ decode -5 -a <g723file >alawfile
+
+ # Compress and then decompress u-law data using 24Kbps G.723
+ encode -3 <ulawin | deoced -3 >ulawout
+
--- /dev/null
+++ b/common/libsndfile/src/G72x/g721.c
@@ -1,0 +1,154 @@
+/*
+ * This source code is a product of Sun Microsystems, Inc. and is provided
+ * for unrestricted use. Users may copy or modify this source code without
+ * charge.
+ *
+ * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
+ * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun source code is provided with no support and without any obligation on
+ * the part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California 94043
+ */
+
+/*
+ * g721.c
+ *
+ * Description:
+ *
+ * g721_encoder(), g721_decoder()
+ *
+ * These routines comprise an implementation of the CCITT G.721 ADPCM
+ * coding algorithm. Essentially, this implementation is identical to
+ * the bit level description except for a few deviations which
+ * take advantage of work station attributes, such as hardware 2's
+ * complement arithmetic and large memory. Specifically, certain time
+ * consuming operations such as multiplications are replaced
+ * with lookup tables and software 2's complement operations are
+ * replaced with hardware 2's complement.
+ *
+ * The deviation from the bit level specification (lookup tables)
+ * preserves the bit level performance specifications.
+ *
+ * As outlined in the G.721 Recommendation, the algorithm is broken
+ * down into modules. Each section of code below is preceded by
+ * the name of the module which it is implementing.
+ *
+ */
+
+#include "g72x.h"
+#include "private.h"
+
+static short qtab_721[7] = {-124, 80, 178, 246, 300, 349, 400};
+/*
+ * Maps G.721 code word to reconstructed scale factor normalized log
+ * magnitude values.
+ */
+static short _dqlntab[16] = {-2048, 4, 135, 213, 273, 323, 373, 425,
+ 425, 373, 323, 273, 213, 135, 4, -2048};
+
+/* Maps G.721 code word to log of scale factor multiplier. */
+static short _witab[16] = {-12, 18, 41, 64, 112, 198, 355, 1122,
+ 1122, 355, 198, 112, 64, 41, 18, -12};
+/*
+ * Maps G.721 code words to a set of values whose long and short
+ * term averages are computed and then compared to give an indication
+ * how stationary (steady state) the signal is.
+ */
+static short _fitab[16] = {0, 0, 0, 0x200, 0x200, 0x200, 0x600, 0xE00,
+ 0xE00, 0x600, 0x200, 0x200, 0x200, 0, 0, 0};
+
+/*
+ * g721_encoder()
+ *
+ * Encodes the input vale of linear PCM, A-law or u-law data sl and returns
+ * the resulting code. -1 is returned for unknown input coding value.
+ */
+int
+g721_encoder(
+ int sl,
+ G72x_STATE *state_ptr)
+{
+ short sezi, se, sez; /* ACCUM */
+ short d; /* SUBTA */
+ short sr; /* ADDB */
+ short y; /* MIX */
+ short dqsez; /* ADDC */
+ short dq, i;
+
+ /* linearize input sample to 14-bit PCM */
+ sl >>= 2; /* 14-bit dynamic range */
+
+ sezi = predictor_zero(state_ptr);
+ sez = sezi >> 1;
+ se = (sezi + predictor_pole(state_ptr)) >> 1; /* estimated signal */
+
+ d = sl - se; /* estimation difference */
+
+ /* quantize the prediction difference */
+ y = step_size(state_ptr); /* quantizer step size */
+ i = quantize(d, y, qtab_721, 7); /* i = ADPCM code */
+
+ dq = reconstruct(i & 8, _dqlntab[i], y); /* quantized est diff */
+
+ sr = (dq < 0) ? se - (dq & 0x3FFF) : se + dq; /* reconst. signal */
+
+ dqsez = sr + sez - se; /* pole prediction diff. */
+
+ update(4, y, _witab[i] << 5, _fitab[i], dq, sr, dqsez, state_ptr);
+
+ return (i);
+}
+
+/*
+ * g721_decoder()
+ *
+ * Description:
+ *
+ * Decodes a 4-bit code of G.721 encoded data of i and
+ * returns the resulting linear PCM, A-law or u-law value.
+ * return -1 for unknown out_coding value.
+ */
+int
+g721_decoder(
+ int i,
+ G72x_STATE *state_ptr)
+{
+ short sezi, sei, sez, se; /* ACCUM */
+ short y; /* MIX */
+ short sr; /* ADDB */
+ short dq;
+ short dqsez;
+
+ i &= 0x0f; /* mask to get proper bits */
+ sezi = predictor_zero(state_ptr);
+ sez = sezi >> 1;
+ sei = sezi + predictor_pole(state_ptr);
+ se = sei >> 1; /* se = estimated signal */
+
+ y = step_size(state_ptr); /* dynamic quantizer step size */
+
+ dq = reconstruct(i & 0x08, _dqlntab[i], y); /* quantized diff. */
+
+ sr = (dq < 0) ? (se - (dq & 0x3FFF)) : se + dq; /* reconst. signal */
+
+ dqsez = sr - se + sez; /* pole prediction diff. */
+
+ update(4, y, _witab[i] << 5, _fitab[i], dq, sr, dqsez, state_ptr);
+
+ /* sr was 14-bit dynamic range */
+ return (sr << 2);
+}
--- /dev/null
+++ b/common/libsndfile/src/G72x/g723_16.c
@@ -1,0 +1,161 @@
+/*
+ * This source code is a product of Sun Microsystems, Inc. and is provided
+ * for unrestricted use. Users may copy or modify this source code without
+ * charge.
+ *
+ * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
+ * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun source code is provided with no support and without any obligation on
+ * the part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California 94043
+ */
+/* 16kbps version created, used 24kbps code and changing as little as possible.
+ * G.726 specs are available from ITU's gopher or WWW site (http://www.itu.ch)
+ * If any errors are found, please contact me at [email protected]
+ * -Marc Randolph
+ */
+
+/*
+ * g723_16.c
+ *
+ * Description:
+ *
+ * g723_16_encoder(), g723_16_decoder()
+ *
+ * These routines comprise an implementation of the CCITT G.726 16 Kbps
+ * ADPCM coding algorithm. Essentially, this implementation is identical to
+ * the bit level description except for a few deviations which take advantage
+ * of workstation attributes, such as hardware 2's complement arithmetic.
+ *
+ */
+
+#include "g72x.h"
+#include "private.h"
+
+/*
+ * Maps G.723_16 code word to reconstructed scale factor normalized log
+ * magnitude values. Comes from Table 11/G.726
+ */
+static short _dqlntab[4] = { 116, 365, 365, 116};
+
+/* Maps G.723_16 code word to log of scale factor multiplier.
+ *
+ * _witab[4] is actually {-22 , 439, 439, -22}, but FILTD wants it
+ * as WI << 5 (multiplied by 32), so we'll do that here
+ */
+static short _witab[4] = {-704, 14048, 14048, -704};
+
+/*
+ * Maps G.723_16 code words to a set of values whose long and short
+ * term averages are computed and then compared to give an indication
+ * how stationary (steady state) the signal is.
+ */
+
+/* Comes from FUNCTF */
+static short _fitab[4] = {0, 0xE00, 0xE00, 0};
+
+/* Comes from quantizer decision level tables (Table 7/G.726)
+ */
+static short qtab_723_16[1] = {261};
+
+
+/*
+ * g723_16_encoder()
+ *
+ * Encodes a linear PCM, A-law or u-law input sample and returns its 2-bit code.
+ * Returns -1 if invalid input coding value.
+ */
+int
+g723_16_encoder(
+ int sl,
+ G72x_STATE *state_ptr)
+{
+ short sei, sezi, se, sez; /* ACCUM */
+ short d; /* SUBTA */
+ short y; /* MIX */
+ short sr; /* ADDB */
+ short dqsez; /* ADDC */
+ short dq, i;
+
+ /* linearize input sample to 14-bit PCM */
+ sl >>= 2; /* sl of 14-bit dynamic range */
+
+ sezi = predictor_zero(state_ptr);
+ sez = sezi >> 1;
+ sei = sezi + predictor_pole(state_ptr);
+ se = sei >> 1; /* se = estimated signal */
+
+ d = sl - se; /* d = estimation diff. */
+
+ /* quantize prediction difference d */
+ y = step_size(state_ptr); /* quantizer step size */
+ i = quantize(d, y, qtab_723_16, 1); /* i = ADPCM code */
+
+ /* Since quantize() only produces a three level output
+ * (1, 2, or 3), we must create the fourth one on our own
+ */
+ if (i == 3) /* i code for the zero region */
+ if ((d & 0x8000) == 0) /* If d > 0, i=3 isn't right... */
+ i = 0;
+
+ dq = reconstruct(i & 2, _dqlntab[i], y); /* quantized diff. */
+
+ sr = (dq < 0) ? se - (dq & 0x3FFF) : se + dq; /* reconstructed signal */
+
+ dqsez = sr + sez - se; /* pole prediction diff. */
+
+ update(2, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr);
+
+ return (i);
+}
+
+/*
+ * g723_16_decoder()
+ *
+ * Decodes a 2-bit CCITT G.723_16 ADPCM code and returns
+ * the resulting 16-bit linear PCM, A-law or u-law sample value.
+ * -1 is returned if the output coding is unknown.
+ */
+int
+g723_16_decoder(
+ int i,
+ G72x_STATE *state_ptr)
+{
+ short sezi, sei, sez, se; /* ACCUM */
+ short y; /* MIX */
+ short sr; /* ADDB */
+ short dq;
+ short dqsez;
+
+ i &= 0x03; /* mask to get proper bits */
+ sezi = predictor_zero(state_ptr);
+ sez = sezi >> 1;
+ sei = sezi + predictor_pole(state_ptr);
+ se = sei >> 1; /* se = estimated signal */
+
+ y = step_size(state_ptr); /* adaptive quantizer step size */
+ dq = reconstruct(i & 0x02, _dqlntab[i], y); /* unquantize pred diff */
+
+ sr = (dq < 0) ? (se - (dq & 0x3FFF)) : (se + dq); /* reconst. signal */
+
+ dqsez = sr - se + sez; /* pole prediction diff. */
+
+ update(2, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr);
+
+ /* sr was of 14-bit dynamic range */
+ return (sr << 2);
+}
--- /dev/null
+++ b/common/libsndfile/src/G72x/g723_24.c
@@ -1,0 +1,138 @@
+/*
+ * This source code is a product of Sun Microsystems, Inc. and is provided
+ * for unrestricted use. Users may copy or modify this source code without
+ * charge.
+ *
+ * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
+ * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun source code is provided with no support and without any obligation on
+ * the part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California 94043
+ */
+
+/*
+ * g723_24.c
+ *
+ * Description:
+ *
+ * g723_24_encoder(), g723_24_decoder()
+ *
+ * These routines comprise an implementation of the CCITT G.723 24 Kbps
+ * ADPCM coding algorithm. Essentially, this implementation is identical to
+ * the bit level description except for a few deviations which take advantage
+ * of workstation attributes, such as hardware 2's complement arithmetic.
+ *
+ */
+
+#include "g72x.h"
+#include "private.h"
+
+/*
+ * Maps G.723_24 code word to reconstructed scale factor normalized log
+ * magnitude values.
+ */
+static short _dqlntab[8] = {-2048, 135, 273, 373, 373, 273, 135, -2048};
+
+/* Maps G.723_24 code word to log of scale factor multiplier. */
+static short _witab[8] = {-128, 960, 4384, 18624, 18624, 4384, 960, -128};
+
+/*
+ * Maps G.723_24 code words to a set of values whose long and short
+ * term averages are computed and then compared to give an indication
+ * how stationary (steady state) the signal is.
+ */
+static short _fitab[8] = {0, 0x200, 0x400, 0xE00, 0xE00, 0x400, 0x200, 0};
+
+static short qtab_723_24[3] = {8, 218, 331};
+
+/*
+ * g723_24_encoder()
+ *
+ * Encodes a linear PCM, A-law or u-law input sample and returns its 3-bit code.
+ * Returns -1 if invalid input coding value.
+ */
+int
+g723_24_encoder(
+ int sl,
+ G72x_STATE *state_ptr)
+{
+ short sei, sezi, se, sez; /* ACCUM */
+ short d; /* SUBTA */
+ short y; /* MIX */
+ short sr; /* ADDB */
+ short dqsez; /* ADDC */
+ short dq, i;
+
+ /* linearize input sample to 14-bit PCM */
+ sl >>= 2; /* sl of 14-bit dynamic range */
+
+ sezi = predictor_zero(state_ptr);
+ sez = sezi >> 1;
+ sei = sezi + predictor_pole(state_ptr);
+ se = sei >> 1; /* se = estimated signal */
+
+ d = sl - se; /* d = estimation diff. */
+
+ /* quantize prediction difference d */
+ y = step_size(state_ptr); /* quantizer step size */
+ i = quantize(d, y, qtab_723_24, 3); /* i = ADPCM code */
+ dq = reconstruct(i & 4, _dqlntab[i], y); /* quantized diff. */
+
+ sr = (dq < 0) ? se - (dq & 0x3FFF) : se + dq; /* reconstructed signal */
+
+ dqsez = sr + sez - se; /* pole prediction diff. */
+
+ update(3, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr);
+
+ return (i);
+}
+
+/*
+ * g723_24_decoder()
+ *
+ * Decodes a 3-bit CCITT G.723_24 ADPCM code and returns
+ * the resulting 16-bit linear PCM, A-law or u-law sample value.
+ * -1 is returned if the output coding is unknown.
+ */
+int
+g723_24_decoder(
+ int i,
+ G72x_STATE *state_ptr)
+{
+ short sezi, sei, sez, se; /* ACCUM */
+ short y; /* MIX */
+ short sr; /* ADDB */
+ short dq;
+ short dqsez;
+
+ i &= 0x07; /* mask to get proper bits */
+ sezi = predictor_zero(state_ptr);
+ sez = sezi >> 1;
+ sei = sezi + predictor_pole(state_ptr);
+ se = sei >> 1; /* se = estimated signal */
+
+ y = step_size(state_ptr); /* adaptive quantizer step size */
+ dq = reconstruct(i & 0x04, _dqlntab[i], y); /* unquantize pred diff */
+
+ sr = (dq < 0) ? (se - (dq & 0x3FFF)) : (se + dq); /* reconst. signal */
+
+ dqsez = sr - se + sez; /* pole prediction diff. */
+
+ update(3, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr);
+
+ return (sr << 2); /* sr was of 14-bit dynamic range */
+}
--- /dev/null
+++ b/common/libsndfile/src/G72x/g723_40.c
@@ -1,0 +1,152 @@
+/*
+ * This source code is a product of Sun Microsystems, Inc. and is provided
+ * for unrestricted use. Users may copy or modify this source code without
+ * charge.
+ *
+ * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
+ * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun source code is provided with no support and without any obligation on
+ * the part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California 94043
+ */
+
+/*
+ * g723_40.c
+ *
+ * Description:
+ *
+ * g723_40_encoder(), g723_40_decoder()
+ *
+ * These routines comprise an implementation of the CCITT G.723 40Kbps
+ * ADPCM coding algorithm. Essentially, this implementation is identical to
+ * the bit level description except for a few deviations which
+ * take advantage of workstation attributes, such as hardware 2's
+ * complement arithmetic.
+ *
+ * The deviation from the bit level specification (lookup tables),
+ * preserves the bit level performance specifications.
+ *
+ * As outlined in the G.723 Recommendation, the algorithm is broken
+ * down into modules. Each section of code below is preceded by
+ * the name of the module which it is implementing.
+ *
+ */
+
+#include "g72x.h"
+#include "private.h"
+
+/*
+ * Maps G.723_40 code word to ructeconstructed scale factor normalized log
+ * magnitude values.
+ */
+static short _dqlntab[32] = {-2048, -66, 28, 104, 169, 224, 274, 318,
+ 358, 395, 429, 459, 488, 514, 539, 566,
+ 566, 539, 514, 488, 459, 429, 395, 358,
+ 318, 274, 224, 169, 104, 28, -66, -2048};
+
+/* Maps G.723_40 code word to log of scale factor multiplier. */
+static short _witab[32] = {448, 448, 768, 1248, 1280, 1312, 1856, 3200,
+ 4512, 5728, 7008, 8960, 11456, 14080, 16928, 22272,
+ 22272, 16928, 14080, 11456, 8960, 7008, 5728, 4512,
+ 3200, 1856, 1312, 1280, 1248, 768, 448, 448};
+
+/*
+ * Maps G.723_40 code words to a set of values whose long and short
+ * term averages are computed and then compared to give an indication
+ * how stationary (steady state) the signal is.
+ */
+static short _fitab[32] = {0, 0, 0, 0, 0, 0x200, 0x200, 0x200,
+ 0x200, 0x200, 0x400, 0x600, 0x800, 0xA00, 0xC00, 0xC00,
+ 0xC00, 0xC00, 0xA00, 0x800, 0x600, 0x400, 0x200, 0x200,
+ 0x200, 0x200, 0x200, 0, 0, 0, 0, 0};
+
+static short qtab_723_40[15] = {-122, -16, 68, 139, 198, 250, 298, 339,
+ 378, 413, 445, 475, 502, 528, 553};
+
+/*
+ * g723_40_encoder()
+ *
+ * Encodes a 16-bit linear PCM, A-law or u-law input sample and retuens
+ * the resulting 5-bit CCITT G.723 40Kbps code.
+ * Returns -1 if the input coding value is invalid.
+ */
+int g723_40_encoder (int sl, G72x_STATE *state_ptr)
+{
+ short sei, sezi, se, sez; /* ACCUM */
+ short d; /* SUBTA */
+ short y; /* MIX */
+ short sr; /* ADDB */
+ short dqsez; /* ADDC */
+ short dq, i;
+
+ /* linearize input sample to 14-bit PCM */
+ sl >>= 2; /* sl of 14-bit dynamic range */
+
+ sezi = predictor_zero(state_ptr);
+ sez = sezi >> 1;
+ sei = sezi + predictor_pole(state_ptr);
+ se = sei >> 1; /* se = estimated signal */
+
+ d = sl - se; /* d = estimation difference */
+
+ /* quantize prediction difference */
+ y = step_size(state_ptr); /* adaptive quantizer step size */
+ i = quantize(d, y, qtab_723_40, 15); /* i = ADPCM code */
+
+ dq = reconstruct(i & 0x10, _dqlntab[i], y); /* quantized diff */
+
+ sr = (dq < 0) ? se - (dq & 0x7FFF) : se + dq; /* reconstructed signal */
+
+ dqsez = sr + sez - se; /* dqsez = pole prediction diff. */
+
+ update(5, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr);
+
+ return (i);
+}
+
+/*
+ * g723_40_decoder()
+ *
+ * Decodes a 5-bit CCITT G.723 40Kbps code and returns
+ * the resulting 16-bit linear PCM, A-law or u-law sample value.
+ * -1 is returned if the output coding is unknown.
+ */
+int g723_40_decoder (int i, G72x_STATE *state_ptr)
+{
+ short sezi, sei, sez, se; /* ACCUM */
+ short y ; /* MIX */
+ short sr; /* ADDB */
+ short dq;
+ short dqsez;
+
+ i &= 0x1f; /* mask to get proper bits */
+ sezi = predictor_zero(state_ptr);
+ sez = sezi >> 1;
+ sei = sezi + predictor_pole(state_ptr);
+ se = sei >> 1; /* se = estimated signal */
+
+ y = step_size(state_ptr); /* adaptive quantizer step size */
+ dq = reconstruct(i & 0x10, _dqlntab[i], y); /* estimation diff. */
+
+ sr = (dq < 0) ? (se - (dq & 0x7FFF)) : (se + dq); /* reconst. signal */
+
+ dqsez = sr - se + sez; /* pole prediction diff. */
+
+ update(5, y, _witab[i], _fitab[i], dq, sr, dqsez, state_ptr);
+
+ return (sr << 2); /* sr was of 14-bit dynamic range */
+}
--- /dev/null
+++ b/common/libsndfile/src/G72x/g72x.c
@@ -1,0 +1,618 @@
+/*
+ * This source code is a product of Sun Microsystems, Inc. and is provided
+ * for unrestricted use. Users may copy or modify this source code without
+ * charge.
+ *
+ * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
+ * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun source code is provided with no support and without any obligation on
+ * the part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California 94043
+ */
+
+/*
+ * g72x.c
+ *
+ * Common routines for G.721 and G.723 conversions.
+ */
+
+#include <stdio.h>
+
+#include "g72x.h"
+#include "private.h"
+
+static
+short power2 [15] =
+{ 1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80,
+ 0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000
+} ;
+
+/*
+ * quan()
+ *
+ * quantizes the input val against the table of size short integers.
+ * It returns i if table[i - 1] <= val < table[i].
+ *
+ * Using linear search for simple coding.
+ */
+static
+int quan (int val, short *table, int size)
+{
+ int i;
+
+ for (i = 0; i < size; i++)
+ if (val < *table++)
+ break;
+ return (i);
+}
+
+/*
+ * fmult()
+ *
+ * returns the integer product of the 14-bit integer "an" and
+ * "floating point" representation (4-bit exponent, 6-bit mantessa) "srn".
+ */
+static
+int fmult (int an, int srn)
+{
+ short anmag, anexp, anmant;
+ short wanexp, wanmant;
+ short retval;
+
+ anmag = (an > 0) ? an : ((-an) & 0x1FFF);
+ anexp = quan(anmag, power2, 15) - 6;
+ anmant = (anmag == 0) ? 32 :
+ (anexp >= 0) ? anmag >> anexp : anmag << -anexp;
+ wanexp = anexp + ((srn >> 6) & 0xF) - 13;
+
+ wanmant = (anmant * (srn & 077) + 0x30) >> 4;
+ retval = (wanexp >= 0) ? ((wanmant << wanexp) & 0x7FFF) :
+ (wanmant >> -wanexp);
+
+ return (((an ^ srn) < 0) ? -retval : retval);
+}
+
+/*
+ * private_init_state()
+ *
+ * This routine initializes and/or resets the G72x_PRIVATE structure
+ * pointed to by 'state_ptr'.
+ * All the initial state values are specified in the CCITT G.721 document.
+ */
+static
+void private_init_state (G72x_STATE *state_ptr)
+{
+ int cnta;
+
+ state_ptr->yl = 34816;
+ state_ptr->yu = 544;
+ state_ptr->dms = 0;
+ state_ptr->dml = 0;
+ state_ptr->ap = 0;
+ for (cnta = 0; cnta < 2; cnta++) {
+ state_ptr->a[cnta] = 0;
+ state_ptr->pk[cnta] = 0;
+ state_ptr->sr[cnta] = 32;
+ }
+ for (cnta = 0; cnta < 6; cnta++) {
+ state_ptr->b[cnta] = 0;
+ state_ptr->dq[cnta] = 32;
+ }
+ state_ptr->td = 0;
+} /* private_init_state */
+
+int g72x_reader_init (G72x_DATA *data, int codec)
+{ G72x_STATE *pstate ;
+
+ if (sizeof (data->private) < sizeof (G72x_STATE))
+ { /* This is for safety only. */
+ return 1 ;
+ } ;
+
+ memset (data, 0, sizeof (G72x_DATA)) ;
+
+ pstate = (G72x_STATE*) data->private ;
+ private_init_state (pstate) ;
+
+ pstate->encoder = NULL ;
+
+ switch (codec)
+ { case G723_16_BITS_PER_SAMPLE : /* 2 bits per sample. */
+ pstate->decoder = g723_16_decoder ;
+ data->blocksize = G723_16_BYTES_PER_BLOCK ;
+ data->samplesperblock = G723_16_SAMPLES_PER_BLOCK ;
+ pstate->codec_bits = 2 ;
+ break ;
+
+ case G723_24_BITS_PER_SAMPLE : /* 3 bits per sample. */
+ pstate->decoder = g723_24_decoder ;
+ data->blocksize = G723_24_BYTES_PER_BLOCK ;
+ data->samplesperblock = G723_24_SAMPLES_PER_BLOCK ;
+ pstate->codec_bits = 3 ;
+ break ;
+
+ case G721_32_BITS_PER_SAMPLE : /* 4 bits per sample. */
+ pstate->decoder = g721_decoder ;
+ data->blocksize = G721_32_BYTES_PER_BLOCK ;
+ data->samplesperblock = G721_32_SAMPLES_PER_BLOCK ;
+ pstate->codec_bits = 4 ;
+ break ;
+
+ case G721_40_BITS_PER_SAMPLE : /* 5 bits per sample. */
+ pstate->decoder = g723_40_decoder ;
+ data->blocksize = G721_40_BYTES_PER_BLOCK ;
+ data->samplesperblock = G721_40_SAMPLES_PER_BLOCK ;
+ pstate->codec_bits = 5 ;
+ break ;
+
+ default : return 1 ;
+ } ;
+
+ return 0 ;
+} /* g72x_reader_init */
+
+int g72x_writer_init (G72x_DATA *data, int codec)
+{ G72x_STATE *pstate ;
+
+ if (sizeof (data->private) < sizeof (G72x_STATE))
+ { /* This is for safety only. Gets optimised out. */
+ return 1 ;
+ } ;
+
+ memset (data, 0, sizeof (G72x_DATA)) ;
+
+ pstate = (G72x_STATE*) data->private ;
+ private_init_state (pstate) ;
+
+ pstate->decoder = NULL ;
+
+ switch (codec)
+ { case G723_16_BITS_PER_SAMPLE : /* 2 bits per sample. */
+ pstate->encoder = g723_16_encoder ;
+ data->blocksize = G723_16_BYTES_PER_BLOCK ;
+ data->samplesperblock = G723_16_SAMPLES_PER_BLOCK ;
+ pstate->codec_bits = 2 ;
+ break ;
+
+ case G723_24_BITS_PER_SAMPLE : /* 3 bits per sample. */
+ pstate->encoder = g723_24_encoder ;
+ data->blocksize = G723_24_BYTES_PER_BLOCK ;
+ data->samplesperblock = G723_24_SAMPLES_PER_BLOCK ;
+ pstate->codec_bits = 3 ;
+ break ;
+
+ case G721_32_BITS_PER_SAMPLE : /* 4 bits per sample. */
+ pstate->encoder = g721_encoder ;
+ data->blocksize = G721_32_BYTES_PER_BLOCK ;
+ data->samplesperblock = G721_32_SAMPLES_PER_BLOCK ;
+ pstate->codec_bits = 4 ;
+ break ;
+
+ case G721_40_BITS_PER_SAMPLE : /* 5 bits per sample. */
+ pstate->encoder = g723_40_encoder ;
+ data->blocksize = G721_40_BYTES_PER_BLOCK ;
+ data->samplesperblock = G721_40_SAMPLES_PER_BLOCK ;
+ pstate->codec_bits = 5 ;
+ break ;
+
+ default : return 1 ;
+ } ;
+
+ return 0 ;
+} /* g72x_writer_init */
+
+static
+int unpack_bytes (G72x_DATA *data, int bits)
+{ unsigned int in_buffer = 0 ;
+ unsigned char in_byte ;
+ int k, in_bits = 0, bindex = 0 ;
+
+ for (k = 0 ; bindex <= data->blocksize && k < G72x_BLOCK_SIZE ; k++)
+ { if (in_bits < bits)
+ { in_byte = data->block [bindex++] ;
+
+ in_buffer |= (in_byte << in_bits);
+ in_bits += 8;
+ }
+ data->samples [k] = in_buffer & ((1 << bits) - 1);
+ in_buffer >>= bits;
+ in_bits -= bits;
+ } ;
+
+ return k ;
+} /* unpack_bytes */
+
+int g72x_decode_block (G72x_DATA *data)
+{ G72x_STATE *pstate ;
+ int k, count ;
+
+ pstate = (G72x_STATE*) data->private ;
+
+ count = unpack_bytes (data, pstate->codec_bits) ;
+
+ for (k = 0 ; k < count ; k++)
+ data->samples [k] = pstate->decoder (data->samples [k], pstate) ;
+
+ return 0 ;
+} /* g72x_decode_block */
+
+static
+int pack_bytes (G72x_DATA *data, int bits)
+{
+ unsigned int out_buffer = 0 ;
+ int k, bindex = 0, out_bits = 0 ;
+ unsigned char out_byte ;
+
+ for (k = 0 ; k < G72x_BLOCK_SIZE ; k++)
+ { out_buffer |= (data->samples [k] << out_bits) ;
+ out_bits += bits ;
+ if (out_bits >= 8)
+ { out_byte = out_buffer & 0xFF ;
+ out_bits -= 8 ;
+ out_buffer >>= 8 ;
+ data->block [bindex++] = out_byte ;
+ }
+ } ;
+
+ return bindex ;
+} /* pack_bytes */
+
+int g72x_encode_block (G72x_DATA *data)
+{ G72x_STATE *pstate ;
+ int k, count ;
+
+ pstate = (G72x_STATE*) data->private ;
+
+ for (k = 0 ; k < data->samplesperblock ; k++)
+ data->samples [k] = pstate->encoder (data->samples [k], pstate) ;
+
+ count = pack_bytes (data, pstate->codec_bits) ;
+
+ return count ;
+} /* g72x_encode_block */
+
+/*
+ * predictor_zero()
+ *
+ * computes the estimated signal from 6-zero predictor.
+ *
+ */
+int predictor_zero (G72x_STATE *state_ptr)
+{
+ int i;
+ int sezi;
+
+ sezi = fmult(state_ptr->b[0] >> 2, state_ptr->dq[0]);
+ for (i = 1; i < 6; i++) /* ACCUM */
+ sezi += fmult(state_ptr->b[i] >> 2, state_ptr->dq[i]);
+ return (sezi);
+}
+/*
+ * predictor_pole()
+ *
+ * computes the estimated signal from 2-pole predictor.
+ *
+ */
+int predictor_pole(G72x_STATE *state_ptr)
+{
+ return (fmult(state_ptr->a[1] >> 2, state_ptr->sr[1]) +
+ fmult(state_ptr->a[0] >> 2, state_ptr->sr[0]));
+}
+/*
+ * step_size()
+ *
+ * computes the quantization step size of the adaptive quantizer.
+ *
+ */
+int step_size (G72x_STATE *state_ptr)
+{
+ int y;
+ int dif;
+ int al;
+
+ if (state_ptr->ap >= 256)
+ return (state_ptr->yu);
+ else {
+ y = state_ptr->yl >> 6;
+ dif = state_ptr->yu - y;
+ al = state_ptr->ap >> 2;
+ if (dif > 0)
+ y += (dif * al) >> 6;
+ else if (dif < 0)
+ y += (dif * al + 0x3F) >> 6;
+ return (y);
+ }
+}
+
+/*
+ * quantize()
+ *
+ * Given a raw sample, 'd', of the difference signal and a
+ * quantization step size scale factor, 'y', this routine returns the
+ * ADPCM codeword to which that sample gets quantized. The step
+ * size scale factor division operation is done in the log base 2 domain
+ * as a subtraction.
+ */
+int quantize(
+ int d, /* Raw difference signal sample */
+ int y, /* Step size multiplier */
+ short *table, /* quantization table */
+ int size) /* table size of short integers */
+{
+ short dqm; /* Magnitude of 'd' */
+ short exp; /* Integer part of base 2 log of 'd' */
+ short mant; /* Fractional part of base 2 log */
+ short dl; /* Log of magnitude of 'd' */
+ short dln; /* Step size scale factor normalized log */
+ int i;
+
+ /*
+ * LOG
+ *
+ * Compute base 2 log of 'd', and store in 'dl'.
+ */
+ dqm = abs(d);
+ exp = quan(dqm >> 1, power2, 15);
+ mant = ((dqm << 7) >> exp) & 0x7F; /* Fractional portion. */
+ dl = (exp << 7) + mant;
+
+ /*
+ * SUBTB
+ *
+ * "Divide" by step size multiplier.
+ */
+ dln = dl - (y >> 2);
+
+ /*
+ * QUAN
+ *
+ * Obtain codword i for 'd'.
+ */
+ i = quan(dln, table, size);
+ if (d < 0) /* take 1's complement of i */
+ return ((size << 1) + 1 - i);
+ else if (i == 0) /* take 1's complement of 0 */
+ return ((size << 1) + 1); /* new in 1988 */
+ else
+ return (i);
+}
+/*
+ * reconstruct()
+ *
+ * Returns reconstructed difference signal 'dq' obtained from
+ * codeword 'i' and quantization step size scale factor 'y'.
+ * Multiplication is performed in log base 2 domain as addition.
+ */
+int
+reconstruct(
+ int sign, /* 0 for non-negative value */
+ int dqln, /* G.72x codeword */
+ int y) /* Step size multiplier */
+{
+ short dql; /* Log of 'dq' magnitude */
+ short dex; /* Integer part of log */
+ short dqt;
+ short dq; /* Reconstructed difference signal sample */
+
+ dql = dqln + (y >> 2); /* ADDA */
+
+ if (dql < 0) {
+ return ((sign) ? -0x8000 : 0);
+ } else { /* ANTILOG */
+ dex = (dql >> 7) & 15;
+ dqt = 128 + (dql & 127);
+ dq = (dqt << 7) >> (14 - dex);
+ return ((sign) ? (dq - 0x8000) : dq);
+ }
+}
+
+
+/*
+ * update()
+ *
+ * updates the state variables for each output code
+ */
+void
+update(
+ int code_size, /* distinguish 723_40 with others */
+ int y, /* quantizer step size */
+ int wi, /* scale factor multiplier */
+ int fi, /* for long/short term energies */
+ int dq, /* quantized prediction difference */
+ int sr, /* reconstructed signal */
+ int dqsez, /* difference from 2-pole predictor */
+ G72x_STATE *state_ptr) /* coder state pointer */
+{
+ int cnt;
+ short mag, exp; /* Adaptive predictor, FLOAT A */
+ short a2p = 0; /* LIMC */
+ short a1ul; /* UPA1 */
+ short pks1; /* UPA2 */
+ short fa1;
+ char tr; /* tone/transition detector */
+ short ylint, thr2, dqthr;
+ short ylfrac, thr1;
+ short pk0;
+
+ pk0 = (dqsez < 0) ? 1 : 0; /* needed in updating predictor poles */
+
+ mag = dq & 0x7FFF; /* prediction difference magnitude */
+ /* TRANS */
+ ylint = state_ptr->yl >> 15; /* exponent part of yl */
+ ylfrac = (state_ptr->yl >> 10) & 0x1F; /* fractional part of yl */
+ thr1 = (32 + ylfrac) << ylint; /* threshold */
+ thr2 = (ylint > 9) ? 31 << 10 : thr1; /* limit thr2 to 31 << 10 */
+ dqthr = (thr2 + (thr2 >> 1)) >> 1; /* dqthr = 0.75 * thr2 */
+ if (state_ptr->td == 0) /* signal supposed voice */
+ tr = 0;
+ else if (mag <= dqthr) /* supposed data, but small mag */
+ tr = 0; /* treated as voice */
+ else /* signal is data (modem) */
+ tr = 1;
+
+ /*
+ * Quantizer scale factor adaptation.
+ */
+
+ /* FUNCTW & FILTD & DELAY */
+ /* update non-steady state step size multiplier */
+ state_ptr->yu = y + ((wi - y) >> 5);
+
+ /* LIMB */
+ if (state_ptr->yu < 544) /* 544 <= yu <= 5120 */
+ state_ptr->yu = 544;
+ else if (state_ptr->yu > 5120)
+ state_ptr->yu = 5120;
+
+ /* FILTE & DELAY */
+ /* update steady state step size multiplier */
+ state_ptr->yl += state_ptr->yu + ((-state_ptr->yl) >> 6);
+
+ /*
+ * Adaptive predictor coefficients.
+ */
+ if (tr == 1) { /* reset a's and b's for modem signal */
+ state_ptr->a[0] = 0;
+ state_ptr->a[1] = 0;
+ state_ptr->b[0] = 0;
+ state_ptr->b[1] = 0;
+ state_ptr->b[2] = 0;
+ state_ptr->b[3] = 0;
+ state_ptr->b[4] = 0;
+ state_ptr->b[5] = 0;
+ } else { /* update a's and b's */
+ pks1 = pk0 ^ state_ptr->pk[0]; /* UPA2 */
+
+ /* update predictor pole a[1] */
+ a2p = state_ptr->a[1] - (state_ptr->a[1] >> 7);
+ if (dqsez != 0) {
+ fa1 = (pks1) ? state_ptr->a[0] : -state_ptr->a[0];
+ if (fa1 < -8191) /* a2p = function of fa1 */
+ a2p -= 0x100;
+ else if (fa1 > 8191)
+ a2p += 0xFF;
+ else
+ a2p += fa1 >> 5;
+
+ if (pk0 ^ state_ptr->pk[1])
+ /* LIMC */
+ if (a2p <= -12160)
+ a2p = -12288;
+ else if (a2p >= 12416)
+ a2p = 12288;
+ else
+ a2p -= 0x80;
+ else if (a2p <= -12416)
+ a2p = -12288;
+ else if (a2p >= 12160)
+ a2p = 12288;
+ else
+ a2p += 0x80;
+ }
+
+ /* TRIGB & DELAY */
+ state_ptr->a[1] = a2p;
+
+ /* UPA1 */
+ /* update predictor pole a[0] */
+ state_ptr->a[0] -= state_ptr->a[0] >> 8;
+ if (dqsez != 0)
+ { if (pks1 == 0)
+ state_ptr->a[0] += 192;
+ else
+ state_ptr->a[0] -= 192;
+ } ;
+
+ /* LIMD */
+ a1ul = 15360 - a2p;
+ if (state_ptr->a[0] < -a1ul)
+ state_ptr->a[0] = -a1ul;
+ else if (state_ptr->a[0] > a1ul)
+ state_ptr->a[0] = a1ul;
+
+ /* UPB : update predictor zeros b[6] */
+ for (cnt = 0; cnt < 6; cnt++) {
+ if (code_size == 5) /* for 40Kbps G.723 */
+ state_ptr->b[cnt] -= state_ptr->b[cnt] >> 9;
+ else /* for G.721 and 24Kbps G.723 */
+ state_ptr->b[cnt] -= state_ptr->b[cnt] >> 8;
+ if (dq & 0x7FFF) { /* XOR */
+ if ((dq ^ state_ptr->dq[cnt]) >= 0)
+ state_ptr->b[cnt] += 128;
+ else
+ state_ptr->b[cnt] -= 128;
+ }
+ }
+ }
+
+ for (cnt = 5; cnt > 0; cnt--)
+ state_ptr->dq[cnt] = state_ptr->dq[cnt-1];
+ /* FLOAT A : convert dq[0] to 4-bit exp, 6-bit mantissa f.p. */
+ if (mag == 0) {
+ state_ptr->dq[0] = (dq >= 0) ? 0x20 : 0xFC20;
+ } else {
+ exp = quan(mag, power2, 15);
+ state_ptr->dq[0] = (dq >= 0) ?
+ (exp << 6) + ((mag << 6) >> exp) :
+ (exp << 6) + ((mag << 6) >> exp) - 0x400;
+ }
+
+ state_ptr->sr[1] = state_ptr->sr[0];
+ /* FLOAT B : convert sr to 4-bit exp., 6-bit mantissa f.p. */
+ if (sr == 0) {
+ state_ptr->sr[0] = 0x20;
+ } else if (sr > 0) {
+ exp = quan(sr, power2, 15);
+ state_ptr->sr[0] = (exp << 6) + ((sr << 6) >> exp);
+ } else if (sr > -32768) {
+ mag = -sr;
+ exp = quan(mag, power2, 15);
+ state_ptr->sr[0] = (exp << 6) + ((mag << 6) >> exp) - 0x400;
+ } else
+ state_ptr->sr[0] = (short) 0xFC20;
+
+ /* DELAY A */
+ state_ptr->pk[1] = state_ptr->pk[0];
+ state_ptr->pk[0] = pk0;
+
+ /* TONE */
+ if (tr == 1) /* this sample has been treated as data */
+ state_ptr->td = 0; /* next one will be treated as voice */
+ else if (a2p < -11776) /* small sample-to-sample correlation */
+ state_ptr->td = 1; /* signal may be data */
+ else /* signal is voice */
+ state_ptr->td = 0;
+
+ /*
+ * Adaptation speed control.
+ */
+ state_ptr->dms += (fi - state_ptr->dms) >> 5; /* FILTA */
+ state_ptr->dml += (((fi << 2) - state_ptr->dml) >> 7); /* FILTB */
+
+ if (tr == 1)
+ state_ptr->ap = 256;
+ else if (y < 1536) /* SUBTC */
+ state_ptr->ap += (0x200 - state_ptr->ap) >> 4;
+ else if (state_ptr->td == 1)
+ state_ptr->ap += (0x200 - state_ptr->ap) >> 4;
+ else if (abs((state_ptr->dms << 2) - state_ptr->dml) >=
+ (state_ptr->dml >> 3))
+ state_ptr->ap += (0x200 - state_ptr->ap) >> 4;
+ else
+ state_ptr->ap += (-state_ptr->ap) >> 4;
+}
+
--- /dev/null
+++ b/common/libsndfile/src/G72x/g72x.h
@@ -1,0 +1,112 @@
+/*
+** Copyright (C) 1999-2000 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 is not the same as the original file from Sun Microsystems. Nearly
+** all the original definitions and function prototypes that were in the file
+** of this name have been moved to private.h.
+*/
+
+#ifndef G72X_HEADER_FILE
+#define G72X_HEADER_FILE
+
+/*
+** Number of samples per block to process.
+** Must be a common multiple of possible bits per sample : 2, 3, 4, 5 and 8.
+*/
+#define G72x_BLOCK_SIZE (3*5*8)
+
+/*
+** Identifiers for the differing kinds of G72x ADPCM codecs.
+** The identifiers also define the number of encoded bits per sample.
+*/
+
+enum
+{ G723_16_BITS_PER_SAMPLE = 2,
+ G723_24_BITS_PER_SAMPLE = 3,
+ 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_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)
+} ;
+
+enum
+{ 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
+} ;
+
+/*
+** This is the public structure for passing data between the caller and
+** the G72x encoder and decoder.
+** The private array is used by the encoder and decoder for internal
+** state information and should not be changed in any way by the caller.
+** When decoding or encoding a stream, the same instance of this struct
+** should be used for every call so that the decoder/encoder keeps the
+** correct state data between calls.
+*/
+
+typedef struct
+{ /* Private data. Don't mess with it. */
+ unsigned char private [256] ;
+
+ /* Public data. Read only. */
+ int blocksize, max_bytes, samplesperblock, bytesperblock ;
+
+ /* Public data. Read and write. */
+ int blocks, blockcount, samplecount ;
+ unsigned char block [G72x_BLOCK_SIZE] ;
+ short samples [G72x_BLOCK_SIZE] ;
+} G72x_DATA ;
+
+/* External function definitions. */
+
+int g72x_reader_init (G72x_DATA *data, int codec) ;
+int g72x_writer_init (G72x_DATA *data, int codec) ;
+/*
+** Initialize the ADPCM state table for the given codec.
+** Return 0 on success, 1 on fail.
+*/
+
+int g72x_decode_block (G72x_DATA *data) ;
+/*
+** The caller fills data->block with data->bytes bytes before calling the
+** function. The value data->bytes must be an integer multiple of
+** data->blocksize and be <= data->max_bytes.
+** When it returns, the caller can read out data->samples samples.
+*/
+
+int g72x_encode_block (G72x_DATA *data) ;
+/*
+** The caller fills state->samples some integer multiple data->samples_per_block
+** (up to G72x_BLOCK_SIZE) samples before calling the function.
+** When it returns, the caller can read out bytes encoded bytes.
+*/
+
+#endif /* !G72X_HEADER_FILE */
--- /dev/null
+++ b/common/libsndfile/src/G72x/private.h
@@ -1,0 +1,108 @@
+/*
+ * This source code is a product of Sun Microsystems, Inc. and is provided
+ * for unrestricted use. Users may copy or modify this source code without
+ * charge.
+ *
+ * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING
+ * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ *
+ * Sun source code is provided with no support and without any obligation on
+ * the part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ *
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE
+ * OR ANY PART THEREOF.
+ *
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ *
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California 94043
+ */
+
+#ifndef G72X_PRIVATE_H
+#define G72X_PRIVATE_H
+
+
+/*
+** The following is the definition of the state structure used by the
+** G.721/G.723 encoder and decoder to preserve their internal state
+** between successive calls. The meanings of the majority of the state
+** structure fields are explained in detail in the CCITT Recommendation
+** G.721. The field names are essentially identical to variable names
+** in the bit level description of the coding algorithm included in this
+** Recommendation.
+*/
+
+typedef struct private_g72x
+{ long yl; /* Locked or steady state step size multiplier. */
+ short yu; /* Unlocked or non-steady state step size multiplier. */
+ short dms; /* Short term energy estimate. */
+ short dml; /* Long term energy estimate. */
+ short ap; /* Linear weighting coefficient of 'yl' and 'yu'. */
+
+ short a[2]; /* Coefficients of pole portion of prediction filter. */
+ short b[6]; /* Coefficients of zero portion of prediction filter. */
+ short pk[2]; /*
+ ** Signs of previous two samples of a partially
+ ** reconstructed signal.
+ **/
+ short dq[6]; /*
+ ** Previous 6 samples of the quantized difference
+ ** signal represented in an internal floating point
+ ** format.
+ **/
+ short sr[2]; /*
+ ** Previous 2 samples of the quantized difference
+ ** signal represented in an internal floating point
+ ** format.
+ */
+ char td; /* delayed tone detect, new in 1988 version */
+
+ /* The following struct members were added for libsndfile. The original
+ ** code worked by calling a set of functions on a sample by sample basis
+ ** which is slow on architectures like Intel x86. For libsndfile, this
+ ** was changed so that the encoding and decoding routines could work on
+ ** a block of samples at a time to reduce the function call overhead.
+ */
+ int (*encoder) (int, struct private_g72x* state) ;
+ int (*decoder) (int, struct private_g72x* state) ;
+
+ int codec_bits ;
+ int byte_index, sample_index ;
+
+} G72x_STATE ;
+
+
+
+int predictor_zero(G72x_STATE *state_ptr);
+
+int predictor_pole(G72x_STATE *state_ptr);
+
+int step_size(G72x_STATE *state_ptr);
+
+int quantize(int d, int y, short *table, int size);
+
+int reconstruct(int sign, int dqln, int y);
+
+void update (int code_size, int y, int wi, int fi, int dq, int sr, int dqsez, G72x_STATE *state_ptr);
+
+int g721_encoder (int sample, G72x_STATE *state_ptr);
+int g721_decoder (int code, G72x_STATE *state_ptr);
+
+int g723_16_encoder (int sample, G72x_STATE *state_ptr);
+int g723_16_decoder (int code, G72x_STATE *state_ptr);
+
+int g723_24_encoder (int sample, G72x_STATE *state_ptr);
+int g723_24_decoder (int code, G72x_STATE *state_ptr);
+
+int g723_40_encoder (int sample, G72x_STATE *state_ptr);
+int g723_40_decoder (int code, G72x_STATE *state_ptr);
+
+
+
+#endif /* G72X_PRIVATE_H */
--- /dev/null
+++ b/common/libsndfile/src/GSM610/COPYRIGHT
@@ -1,0 +1,16 @@
+Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann,
+Technische Universitaet Berlin
+
+Any use of this software is permitted provided that this notice is not
+removed and that neither the authors nor the Technische Universitaet Berlin
+are deemed to have made any representations as to the suitability of this
+software for any purpose nor are held responsible for any defects of
+this software. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
+
+As a matter of courtesy, the authors request to be informed about uses
+this software has found, about bugs in this software, and about any
+improvements that may be of general interest.
+
+Berlin, 28.11.1994
+Jutta Degener
+Carsten Bormann
--- /dev/null
+++ b/common/libsndfile/src/GSM610/ChangeLog
@@ -1,0 +1,10 @@
+2000-02-29 Erik de Castro Lopo <[email protected]>
+
+ * private.h
+ Added #defines to emulate normal compile time options.
+
+2000-02-28 Erik de Castro Lopo <[email protected]>
+
+ * everthing
+ Created this directory and copied files from libgsm.
+ http://kbs.cs.tu-berlin.de/~jutta/toast.html
--- /dev/null
+++ b/common/libsndfile/src/GSM610/Makefile.am
@@ -1,0 +1,15 @@
+# This file was automatically generated
+# DO NOT EDIT!
+
+EXTRA_DIST = README COPYRIGHT ChangeLog
+
+noinst_HEADERS = gsm.h config.h private.h proto.h unproto.h
+noinst_LTLIBRARIES = libgsm.la
+
+CFILES = add.c decode.c gsm_decode.c gsm_encode.c long_term.c preprocess.c \
+ short_term.c code.c gsm_create.c gsm_destroy.c gsm_option.c lpc.c rpe.c table.c
+
+libgsm_la_SOURCES = $(CFILES) $(noinst_HEADERS)
+
+# Disable autoheader.
+AUTOHEADER=echo
--- /dev/null
+++ b/common/libsndfile/src/GSM610/Makefile.in
@@ -1,0 +1,330 @@
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# This file was automatically generated
+# DO NOT EDIT!
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ../..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_alias = @build_alias@
+build_triplet = @build@
+host_alias = @host_alias@
+host_triplet = @host@
+target_alias = @target_alias@
+target_triplet = @target@
+AS = @AS@
+CC = @CC@
+DLLTOOL = @DLLTOOL@
+LD = @LD@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+MAKEINFO = @MAKEINFO@
+NM = @NM@
+OBJDUMP = @OBJDUMP@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+VERSION = @VERSION@
+subdirs = @subdirs@
+
+EXTRA_DIST = README COPYRIGHT ChangeLog
+
+noinst_HEADERS = gsm.h config.h private.h proto.h unproto.h
+noinst_LTLIBRARIES = libgsm.la
+
+CFILES = add.c decode.c gsm_decode.c gsm_encode.c long_term.c preprocess.c short_term.c code.c gsm_create.c gsm_destroy.c gsm_option.c lpc.c rpe.c table.c
+
+
+libgsm_la_SOURCES = $(CFILES) $(noinst_HEADERS)
+
+# Disable autoheader.
+AUTOHEADER = echo
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../../src/config.h
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+
+
+DEFS = @DEFS@ -I. -I$(srcdir) -I../../src
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+libgsm_la_LDFLAGS =
+libgsm_la_LIBADD =
+libgsm_la_OBJECTS = add.lo decode.lo gsm_decode.lo gsm_encode.lo \
+long_term.lo preprocess.lo short_term.lo code.lo gsm_create.lo \
+gsm_destroy.lo gsm_option.lo lpc.lo rpe.lo table.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)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+HEADERS = $(noinst_HEADERS)
+
+DIST_COMMON = README ChangeLog Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+SOURCES = $(libgsm_la_SOURCES)
+OBJECTS = $(libgsm_la_OBJECTS)
+
+all: all-redirect
+.SUFFIXES:
+.SUFFIXES: .S .c .lo .o .s
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps src/GSM610/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+mostlyclean-noinstLTLIBRARIES:
+
+clean-noinstLTLIBRARIES:
+ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+
+distclean-noinstLTLIBRARIES:
+
+maintainer-clean-noinstLTLIBRARIES:
+
+.c.o:
+ $(COMPILE) -c $<
+
+.s.o:
+ $(COMPILE) -c $<
+
+.S.o:
+ $(COMPILE) -c $<
+
+mostlyclean-compile:
+ -rm -f *.o core *.core
+
+clean-compile:
+
+distclean-compile:
+ -rm -f *.tab.c
+
+maintainer-clean-compile:
+
+.c.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+.s.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+.S.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+
+maintainer-clean-libtool:
+
+libgsm.la: $(libgsm_la_OBJECTS) $(libgsm_la_DEPENDENCIES)
+ $(LINK) $(libgsm_la_LDFLAGS) $(libgsm_la_OBJECTS) $(libgsm_la_LIBADD) $(LIBS)
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = src/GSM610
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || 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:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am:
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am:
+uninstall: uninstall-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-noinstLTLIBRARIES mostlyclean-compile \
+ mostlyclean-libtool mostlyclean-tags \
+ mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-noinstLTLIBRARIES clean-compile clean-libtool \
+ clean-tags clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-noinstLTLIBRARIES distclean-compile \
+ distclean-libtool distclean-tags distclean-generic \
+ clean-am
+ -rm -f libtool
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-noinstLTLIBRARIES \
+ maintainer-clean-compile maintainer-clean-libtool \
+ 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."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: mostlyclean-noinstLTLIBRARIES distclean-noinstLTLIBRARIES \
+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
+
+
+# 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.
+.NOEXPORT:
--- /dev/null
+++ b/common/libsndfile/src/GSM610/README
@@ -1,0 +1,36 @@
+GSM 06.10 13 kbit/s RPE/LTP speech codec
+----------------------------------------
+
+All the file in this directory were written by Jutta Degener
+and Carsten Borman for The Communications and Operating Systems
+Research Group (KBS) at the Technische Universitaet Berlin.
+
+Their work was released under the following license which is
+assumed to be compatible with The GNU Lesser General Public License.
+
+----------------------------------------------------------------------------
+
+Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann,
+Technische Universitaet Berlin
+
+Any use of this software is permitted provided that this notice is not
+removed and that neither the authors nor the Technische Universitaet Berlin
+are deemed to have made any representations as to the suitability of this
+software for any purpose nor are held responsible for any defects of
+this software. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
+
+As a matter of courtesy, the authors request to be informed about uses
+this software has found, about bugs in this software, and about any
+improvements that may be of general interest.
+
+Berlin, 28.11.1994
+Jutta Degener ([email protected])
+Carsten Bormann ([email protected])
+
+----------------------------------------------------------------------------
+
+Jutta Degener and Carsten Bormann's work can be found on their homepage
+at:
+
+ http://kbs.cs.tu-berlin.de/~jutta/toast.html
+
--- /dev/null
+++ b/common/libsndfile/src/GSM610/add.c
@@ -1,0 +1,251 @@
+/*
+ * 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/faac/common/libsndfile/src/GSM610/Attic/add.c,v 1.1 2001/05/09 19:44:12 menno Exp $ */
+
+/*
+ * See private.h for the more commonly used macro versions.
+ */
+
+#include <stdio.h>
+#include <assert.h>
+
+#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)
+{
+ longword sum = (longword)a + (longword)b;
+ return saturate(sum);
+}
+
+word gsm_sub P2((a,b), word a, word b)
+{
+ longword diff = (longword)a - (longword)b;
+ return saturate(diff);
+}
+
+word gsm_mult P2((a,b), 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)
+{
+ if (b == MIN_WORD && a == MIN_WORD) return MAX_WORD;
+ else {
+ longword prod = (longword)a * (longword)b + 16384;
+ prod >>= 15;
+ return prod & 0xFFFF;
+ }
+}
+
+word gsm_abs P1((a), word a)
+{
+ return a < 0 ? (a == MIN_WORD ? MAX_WORD : -a) : a;
+}
+
+longword gsm_L_mult P2((a,b),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)
+{
+ if (a < 0) {
+ if (b >= 0) return a + b;
+ else {
+ ulongword A = (ulongword)-(a + 1) + (ulongword)-(b + 1);
+ return A >= MAX_LONGWORD ? MIN_LONGWORD :-(longword)A-2;
+ }
+ }
+ else if (b <= 0) return a + b;
+ else {
+ ulongword A = (ulongword)a + (ulongword)b;
+ return A > MAX_LONGWORD ? MAX_LONGWORD : A;
+ }
+}
+
+longword gsm_L_sub P2((a,b), longword a, longword b)
+{
+ if (a >= 0) {
+ if (b >= 0) return a - b;
+ else {
+ /* a>=0, b<0 */
+
+ ulongword A = (ulongword)a + -(b + 1);
+ return A >= MAX_LONGWORD ? MAX_LONGWORD : (A + 1);
+ }
+ }
+ else if (b <= 0) return a - b;
+ else {
+ /* a<0, b>0 */
+
+ ulongword A = (ulongword)-(a + 1) + b;
+ return A >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)A - 1;
+ }
+}
+
+static unsigned char const bitoff[ 256 ] = {
+ 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+word gsm_norm P1((a), longword a )
+/*
+ * the number of left shifts needed to normalize the 32 bit
+ * variable L_var1 for positive values on the interval
+ *
+ * with minimum of
+ * minimum of 1073741824 (01000000000000000000000000000000) and
+ * maximum of 2147483647 (01111111111111111111111111111111)
+ *
+ *
+ * and for negative values on the interval with
+ * minimum of -2147483648 (-10000000000000000000000000000000) and
+ * maximum of -1073741824 ( -1000000000000000000000000000000).
+ *
+ * in order to normalize the result, the following
+ * operation must be done: L_norm_var1 = L_var1 << norm( L_var1 );
+ *
+ * (That's 'ffs', only from the left, not the right..)
+ */
+{
+ assert(a != 0);
+
+ if (a < 0) {
+ if (a <= -1073741824) return 0;
+ a = ~a;
+ }
+
+ return a & 0xffff0000
+ ? ( a & 0xff000000
+ ? -1 + bitoff[ 0xFF & (a >> 24) ]
+ : 7 + bitoff[ 0xFF & (a >> 16) ] )
+ : ( a & 0xff00
+ ? 15 + bitoff[ 0xFF & (a >> 8) ]
+ : 23 + bitoff[ 0xFF & a ] );
+}
+
+longword gsm_L_asl (longword a, int n)
+{
+ if (n >= 32) return 0;
+ if (n <= -32) return -(a < 0);
+ if (n < 0) return gsm_L_asr(a, -n);
+ return a << n;
+}
+
+word gsm_asr (word a, int n)
+{
+ if (n >= 16) return -(a < 0);
+ if (n <= -16) return 0;
+ if (n < 0) return a << -n;
+
+# ifdef SASR
+ return a >> n;
+# else
+ if (a >= 0) return a >> n;
+ else return -(word)( -(uword)a >> n );
+# endif
+}
+
+word gsm_asl (word a, int n)
+{
+ if (n >= 16) return 0;
+ if (n <= -16) return -(a < 0);
+ if (n < 0) return gsm_asr(a, -n);
+ return a << n;
+}
+
+longword gsm_L_asr (longword a, int n)
+{
+ if (n >= 32) return -(a < 0);
+ if (n <= -32) return 0;
+ if (n < 0) return a << -n;
+
+# ifdef SASR
+ return a >> n;
+# else
+ if (a >= 0) return a >> n;
+ else return -(longword)( -(ulongword)a >> n );
+# endif
+}
+
+/*
+** word gsm_asr (word a, int n)
+** {
+** if (n >= 16) return -(a < 0);
+** if (n <= -16) return 0;
+** if (n < 0) return a << -n;
+**
+** # ifdef SASR
+** return a >> n;
+** # else
+** if (a >= 0) return a >> n;
+** else return -(word)( -(uword)a >> n );
+** # endif
+** }
+**
+*/
+/*
+ * (From p. 46, end of section 4.2.5)
+ *
+ * NOTE: The following lines gives [sic] one correct implementation
+ * of the div(num, denum) arithmetic operation. Compute div
+ * which is the integer division of num by denum: with denum
+ * >= num > 0
+ */
+
+word gsm_div P2((num,denum), word num, word denum)
+{
+ longword L_num = num;
+ longword L_denum = denum;
+ word div = 0;
+ int k = 15;
+
+ /* The parameter num sometimes becomes zero.
+ * Although this is explicitly guarded against in 4.2.5,
+ * we assume that the result should then be zero as well.
+ */
+
+ /* assert(num != 0); */
+
+ assert(num >= 0 && denum >= num);
+ if (num == 0)
+ return 0;
+
+ while (k--) {
+ div <<= 1;
+ L_num <<= 1;
+
+ if (L_num >= L_denum) {
+ L_num -= L_denum;
+ div++;
+ }
+ }
+
+ return div;
+}
--- /dev/null
+++ b/common/libsndfile/src/GSM610/code.c
@@ -1,0 +1,99 @@
+/*
+ * 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/faac/common/libsndfile/src/GSM610/Attic/code.c,v 1.1 2001/05/09 19:44:12 menno Exp $ */
+
+#include "config.h"
+
+
+#ifdef HAS_STDLIB_H
+#include <stdlib.h>
+#else
+# include "proto.h"
+ extern char * memcpy P((char *, char *, int));
+#endif
+
+#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),
+
+ struct gsm_state * S,
+
+ word * s, /* [0..159] samples IN */
+
+/*
+ * The RPE-LTD coder works on a frame by frame basis. The length of
+ * the frame is equal to 160 samples. Some computations are done
+ * once per frame to produce at the output of the coder the
+ * LARc[1..8] parameters which are the coded LAR coefficients and
+ * also to realize the inverse filtering operation for the entire
+ * frame (160 samples of signal d[0..159]). These parts produce at
+ * the output of the coder:
+ */
+
+ word * LARc, /* [0..7] LAR coefficients OUT */
+
+/*
+ * Procedure 4.2.11 to 4.2.18 are to be executed four times per
+ * frame. That means once for each sub-segment RPE-LTP analysis of
+ * 40 samples. These parts produce at the output of the coder:
+ */
+
+ word * Nc, /* [0..3] LTP lag OUT */
+ word * bc, /* [0..3] coded LTP gain OUT */
+ word * Mc, /* [0..3] RPE grid selection OUT */
+ word * xmaxc,/* [0..3] Coded maximum amplitude OUT */
+ word * xMc /* [13*4] normalized RPE samples OUT */
+)
+{
+ int k;
+ word * dp = S->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);
+
+ for (k = 0; k <= 3; k++, xMc += 13) {
+
+ Gsm_Long_Term_Predictor ( S,
+ so+k*40, /* d [0..39] IN */
+ dp, /* dp [-120..-1] IN */
+ e + 5, /* e [0..39] OUT */
+ dpp, /* dpp [0..39] OUT */
+ Nc++,
+ bc++);
+
+ Gsm_RPE_Encoding ( S,
+ e + 5, /* e ][0..39][ IN/OUT */
+ xmaxc++, Mc++, xMc );
+ /*
+ * Gsm_Update_of_reconstructed_short_time_residual_signal
+ * ( dpp, e + 5, dp );
+ */
+
+ { register int i;
+ register longword ltmp;
+ for (i = 0; i <= 39; i++)
+ dp[ i ] = GSM_ADD( e[5 + i], dpp[i] );
+ }
+ dp += 40;
+ dpp += 40;
+
+ }
+ (void)memcpy( (char *)S->dp0, (char *)(S->dp0 + 160),
+ 120 * sizeof(*S->dp0) );
+}
--- /dev/null
+++ b/common/libsndfile/src/GSM610/config.h
@@ -1,0 +1,37 @@
+/*
+ * 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/faac/common/libsndfile/src/GSM610/Attic/config.h,v 1.1 2001/05/09 19:44:12 menno Exp $*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+//*efine SIGHANDLER_T int /* signal handlers are void */
+//*efine HAS_SYSV_SIGNAL 1 /* sigs not blocked/reset? */
+
+#define HAS_STDLIB_H 1 /* /usr/include/stdlib.h */
+//*efine HAS_LIMITS_H 1 /* /usr/include/limits.h */
+#define HAS_FCNTL_H 1 /* /usr/include/fcntl.h */
+//*efine HAS_ERRNO_DECL 1 /* errno.h declares errno */
+
+#define HAS_FSTAT 1 /* fstat syscall */
+#define HAS_FCHMOD 1 /* fchmod syscall */
+#define HAS_CHMOD 1 /* chmod syscall */
+#define HAS_FCHOWN 1 /* fchown syscall */
+#define HAS_CHOWN 1 /* chown syscall */
+//*efine HAS__FSETMODE 1 /* _fsetmode -- set file mode */
+
+#define HAS_STRING_H 1 /* /usr/include/string.h */
+//*efine HAS_STRINGS_H 1 /* /usr/include/strings.h */
+
+#define HAS_UNISTD_H 1 /* /usr/include/unistd.h */
+#define HAS_UTIME 1 /* POSIX utime(path, times) */
+//*efine HAS_UTIMES 1 /* use utimes() syscall instead */
+#define HAS_UTIME_H 1 /* UTIME header file */
+//*efine HAS_UTIMBUF 1 /* struct utimbuf */
+//*efine HAS_UTIMEUSEC 1 /* microseconds in utimbuf? */
+
+#endif /* CONFIG_H */
--- /dev/null
+++ b/common/libsndfile/src/GSM610/decode.c
@@ -1,0 +1,63 @@
+/*
+ * 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/faac/common/libsndfile/src/GSM610/Attic/decode.c,v 1.1 2001/05/09 19:44:12 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),
+ struct gsm_state * S,
+ register word * s)
+{
+ register int k;
+ register word msr = S->msr;
+ register longword ltmp; /* for GSM_ADD */
+ register word tmp;
+
+ for (k = 160; k--; s++) {
+ tmp = GSM_MULT_R( msr, 28180 );
+ msr = GSM_ADD(*s, tmp); /* Deemphasis */
+ *s = GSM_ADD(msr, msr) & 0xFFF8; /* Truncation & Upscaling */
+ }
+ S->msr = msr;
+}
+
+void Gsm_Decoder P8((S,LARcr, Ncr,bcr,Mcr,xmaxcr,xMcr,s),
+ struct gsm_state * S,
+
+ word * LARcr, /* [0..7] IN */
+
+ word * Ncr, /* [0..3] IN */
+ word * bcr, /* [0..3] IN */
+ word * Mcr, /* [0..3] IN */
+ word * xmaxcr, /* [0..3] IN */
+ word * xMcr, /* [0..13*4] IN */
+
+ word * s) /* [0..159] OUT */
+{
+ int j, k;
+ word erp[40], wt[160];
+ word * drp = S->dp0 + 120;
+
+ for (j=0; j <= 3; j++, xmaxcr++, bcr++, Ncr++, Mcr++, xMcr += 13) {
+
+ Gsm_RPE_Decoding( S, *xmaxcr, *Mcr, xMcr, erp );
+ Gsm_Long_Term_Synthesis_Filtering( S, *Ncr, *bcr, erp, drp );
+
+ for (k = 0; k <= 39; k++) wt[ j * 40 + k ] = drp[ k ];
+ }
+
+ Gsm_Short_Term_Synthesis_Filter( S, LARcr, wt, s );
+ Postprocessing(S, s);
+}
--- /dev/null
+++ b/common/libsndfile/src/GSM610/gsm.h
@@ -1,0 +1,71 @@
+/*
+ * 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/faac/common/libsndfile/src/GSM610/Attic/gsm.h,v 1.1 2001/05/09 19:44:12 menno Exp $*/
+
+#ifndef GSM_H
+#define GSM_H
+
+#ifdef __cplusplus
+# define NeedFunctionPrototypes 1
+#endif
+
+#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 unsigned char gsm_byte;
+typedef gsm_byte gsm_frame[33]; /* 33 * 8 bits */
+
+#define GSM_MAGIC 0xD /* 13 kbit/s RPE-LTP */
+
+#define GSM_PATCHLEVEL 10
+#define GSM_MINOR 0
+#define GSM_MAJOR 1
+
+#define GSM_OPT_VERBOSE 1
+#define GSM_OPT_FAST 2
+#define GSM_OPT_LTP_CUT 3
+#define GSM_OPT_WAV49 4
+#define GSM_OPT_FRAME_INDEX 5
+#define GSM_OPT_FRAME_CHAIN 6
+
+extern gsm gsm_create GSM_P((void));
+extern void gsm_destroy GSM_P((gsm));
+
+extern int gsm_print GSM_P((FILE *, gsm, gsm_byte *));
+extern int gsm_option GSM_P((gsm, int, int *));
+
+extern void gsm_encode GSM_P((gsm, gsm_signal *, gsm_byte *));
+extern int gsm_decode GSM_P((gsm, gsm_byte *, gsm_signal *));
+
+extern int gsm_explode GSM_P((gsm, gsm_byte *, gsm_signal *));
+extern void gsm_implode GSM_P((gsm, gsm_signal *, gsm_byte *));
+
+#undef GSM_P
+
+#endif /* GSM_H */
--- /dev/null
+++ b/common/libsndfile/src/GSM610/gsm_create.c
@@ -1,0 +1,45 @@
+/*
+ * 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.
+ */
+
+static char const ident[] = "$Header: /home/cvs/f/fa/faac/faac/common/libsndfile/src/GSM610/Attic/gsm_create.c,v 1.1 2001/05/09 19:44:12 menno Exp $";
+
+#include "config.h"
+
+#ifdef HAS_STRING_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 r;
+
+ r = (gsm)malloc(sizeof(struct gsm_state));
+ if (!r) return r;
+
+ memset((char *)r, 0, sizeof(*r));
+ r->nrp = 40;
+
+ return r;
+}
--- /dev/null
+++ b/common/libsndfile/src/GSM610/gsm_decode.c
@@ -1,0 +1,361 @@
+/*
+ * 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/faac/common/libsndfile/src/GSM610/Attic/gsm_decode.c,v 1.1 2001/05/09 19:44:12 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)
+{
+ word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4];
+
+#ifdef WAV49
+ if (s->wav_fmt) {
+
+ uword sr = 0;
+
+ s->frame_index = !s->frame_index;
+ if (s->frame_index) {
+
+ sr = *c++;
+ LARc[0] = sr & 0x3f; sr >>= 6;
+ sr |= (uword)*c++ << 2;
+ LARc[1] = sr & 0x3f; sr >>= 6;
+ sr |= (uword)*c++ << 4;
+ LARc[2] = sr & 0x1f; sr >>= 5;
+ LARc[3] = sr & 0x1f; sr >>= 5;
+ sr |= (uword)*c++ << 2;
+ LARc[4] = sr & 0xf; sr >>= 4;
+ LARc[5] = sr & 0xf; sr >>= 4;
+ sr |= (uword)*c++ << 2; /* 5 */
+ LARc[6] = sr & 0x7; sr >>= 3;
+ LARc[7] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 4;
+ Nc[0] = sr & 0x7f; sr >>= 7;
+ bc[0] = sr & 0x3; sr >>= 2;
+ Mc[0] = sr & 0x3; sr >>= 2;
+ sr |= (uword)*c++ << 1;
+ xmaxc[0] = sr & 0x3f; sr >>= 6;
+ xmc[0] = sr & 0x7; sr >>= 3;
+ sr = *c++;
+ xmc[1] = sr & 0x7; sr >>= 3;
+ xmc[2] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 2;
+ xmc[3] = sr & 0x7; sr >>= 3;
+ xmc[4] = sr & 0x7; sr >>= 3;
+ xmc[5] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 1; /* 10 */
+ xmc[6] = sr & 0x7; sr >>= 3;
+ xmc[7] = sr & 0x7; sr >>= 3;
+ xmc[8] = sr & 0x7; sr >>= 3;
+ sr = *c++;
+ xmc[9] = sr & 0x7; sr >>= 3;
+ xmc[10] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 2;
+ xmc[11] = sr & 0x7; sr >>= 3;
+ xmc[12] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 4;
+ Nc[1] = sr & 0x7f; sr >>= 7;
+ bc[1] = sr & 0x3; sr >>= 2;
+ Mc[1] = sr & 0x3; sr >>= 2;
+ sr |= (uword)*c++ << 1;
+ xmaxc[1] = sr & 0x3f; sr >>= 6;
+ xmc[13] = sr & 0x7; sr >>= 3;
+ sr = *c++; /* 15 */
+ xmc[14] = sr & 0x7; sr >>= 3;
+ xmc[15] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 2;
+ xmc[16] = sr & 0x7; sr >>= 3;
+ xmc[17] = sr & 0x7; sr >>= 3;
+ xmc[18] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 1;
+ xmc[19] = sr & 0x7; sr >>= 3;
+ xmc[20] = sr & 0x7; sr >>= 3;
+ xmc[21] = sr & 0x7; sr >>= 3;
+ sr = *c++;
+ xmc[22] = sr & 0x7; sr >>= 3;
+ xmc[23] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 2;
+ xmc[24] = sr & 0x7; sr >>= 3;
+ xmc[25] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 4; /* 20 */
+ Nc[2] = sr & 0x7f; sr >>= 7;
+ bc[2] = sr & 0x3; sr >>= 2;
+ Mc[2] = sr & 0x3; sr >>= 2;
+ sr |= (uword)*c++ << 1;
+ xmaxc[2] = sr & 0x3f; sr >>= 6;
+ xmc[26] = sr & 0x7; sr >>= 3;
+ sr = *c++;
+ xmc[27] = sr & 0x7; sr >>= 3;
+ xmc[28] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 2;
+ xmc[29] = sr & 0x7; sr >>= 3;
+ xmc[30] = sr & 0x7; sr >>= 3;
+ xmc[31] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 1;
+ xmc[32] = sr & 0x7; sr >>= 3;
+ xmc[33] = sr & 0x7; sr >>= 3;
+ xmc[34] = sr & 0x7; sr >>= 3;
+ sr = *c++; /* 25 */
+ xmc[35] = sr & 0x7; sr >>= 3;
+ xmc[36] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 2;
+ xmc[37] = sr & 0x7; sr >>= 3;
+ xmc[38] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 4;
+ Nc[3] = sr & 0x7f; sr >>= 7;
+ bc[3] = sr & 0x3; sr >>= 2;
+ Mc[3] = sr & 0x3; sr >>= 2;
+ sr |= (uword)*c++ << 1;
+ xmaxc[3] = sr & 0x3f; sr >>= 6;
+ xmc[39] = sr & 0x7; sr >>= 3;
+ sr = *c++;
+ xmc[40] = sr & 0x7; sr >>= 3;
+ xmc[41] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 2; /* 30 */
+ xmc[42] = sr & 0x7; sr >>= 3;
+ xmc[43] = sr & 0x7; sr >>= 3;
+ xmc[44] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 1;
+ xmc[45] = sr & 0x7; sr >>= 3;
+ xmc[46] = sr & 0x7; sr >>= 3;
+ xmc[47] = sr & 0x7; sr >>= 3;
+ sr = *c++;
+ xmc[48] = sr & 0x7; sr >>= 3;
+ xmc[49] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 2;
+ xmc[50] = sr & 0x7; sr >>= 3;
+ xmc[51] = sr & 0x7; sr >>= 3;
+
+ s->frame_chain = sr & 0xf;
+ }
+ else {
+ sr = s->frame_chain;
+ sr |= (uword)*c++ << 4; /* 1 */
+ LARc[0] = sr & 0x3f; sr >>= 6;
+ LARc[1] = sr & 0x3f; sr >>= 6;
+ sr = *c++;
+ LARc[2] = sr & 0x1f; sr >>= 5;
+ sr |= (uword)*c++ << 3;
+ LARc[3] = sr & 0x1f; sr >>= 5;
+ LARc[4] = sr & 0xf; sr >>= 4;
+ sr |= (uword)*c++ << 2;
+ LARc[5] = sr & 0xf; sr >>= 4;
+ LARc[6] = sr & 0x7; sr >>= 3;
+ LARc[7] = sr & 0x7; sr >>= 3;
+ sr = *c++; /* 5 */
+ Nc[0] = sr & 0x7f; sr >>= 7;
+ sr |= (uword)*c++ << 1;
+ bc[0] = sr & 0x3; sr >>= 2;
+ Mc[0] = sr & 0x3; sr >>= 2;
+ sr |= (uword)*c++ << 5;
+ xmaxc[0] = sr & 0x3f; sr >>= 6;
+ xmc[0] = sr & 0x7; sr >>= 3;
+ xmc[1] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 1;
+ xmc[2] = sr & 0x7; sr >>= 3;
+ xmc[3] = sr & 0x7; sr >>= 3;
+ xmc[4] = sr & 0x7; sr >>= 3;
+ sr = *c++;
+ xmc[5] = sr & 0x7; sr >>= 3;
+ xmc[6] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 2; /* 10 */
+ xmc[7] = sr & 0x7; sr >>= 3;
+ xmc[8] = sr & 0x7; sr >>= 3;
+ xmc[9] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 1;
+ xmc[10] = sr & 0x7; sr >>= 3;
+ xmc[11] = sr & 0x7; sr >>= 3;
+ xmc[12] = sr & 0x7; sr >>= 3;
+ sr = *c++;
+ Nc[1] = sr & 0x7f; sr >>= 7;
+ sr |= (uword)*c++ << 1;
+ bc[1] = sr & 0x3; sr >>= 2;
+ Mc[1] = sr & 0x3; sr >>= 2;
+ sr |= (uword)*c++ << 5;
+ xmaxc[1] = sr & 0x3f; sr >>= 6;
+ xmc[13] = sr & 0x7; sr >>= 3;
+ xmc[14] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 1; /* 15 */
+ xmc[15] = sr & 0x7; sr >>= 3;
+ xmc[16] = sr & 0x7; sr >>= 3;
+ xmc[17] = sr & 0x7; sr >>= 3;
+ sr = *c++;
+ xmc[18] = sr & 0x7; sr >>= 3;
+ xmc[19] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 2;
+ xmc[20] = sr & 0x7; sr >>= 3;
+ xmc[21] = sr & 0x7; sr >>= 3;
+ xmc[22] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 1;
+ xmc[23] = sr & 0x7; sr >>= 3;
+ xmc[24] = sr & 0x7; sr >>= 3;
+ xmc[25] = sr & 0x7; sr >>= 3;
+ sr = *c++;
+ Nc[2] = sr & 0x7f; sr >>= 7;
+ sr |= (uword)*c++ << 1; /* 20 */
+ bc[2] = sr & 0x3; sr >>= 2;
+ Mc[2] = sr & 0x3; sr >>= 2;
+ sr |= (uword)*c++ << 5;
+ xmaxc[2] = sr & 0x3f; sr >>= 6;
+ xmc[26] = sr & 0x7; sr >>= 3;
+ xmc[27] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 1;
+ xmc[28] = sr & 0x7; sr >>= 3;
+ xmc[29] = sr & 0x7; sr >>= 3;
+ xmc[30] = sr & 0x7; sr >>= 3;
+ sr = *c++;
+ xmc[31] = sr & 0x7; sr >>= 3;
+ xmc[32] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 2;
+ xmc[33] = sr & 0x7; sr >>= 3;
+ xmc[34] = sr & 0x7; sr >>= 3;
+ xmc[35] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 1; /* 25 */
+ xmc[36] = sr & 0x7; sr >>= 3;
+ xmc[37] = sr & 0x7; sr >>= 3;
+ xmc[38] = sr & 0x7; sr >>= 3;
+ sr = *c++;
+ Nc[3] = sr & 0x7f; sr >>= 7;
+ sr |= (uword)*c++ << 1;
+ bc[3] = sr & 0x3; sr >>= 2;
+ Mc[3] = sr & 0x3; sr >>= 2;
+ sr |= (uword)*c++ << 5;
+ xmaxc[3] = sr & 0x3f; sr >>= 6;
+ xmc[39] = sr & 0x7; sr >>= 3;
+ xmc[40] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 1;
+ xmc[41] = sr & 0x7; sr >>= 3;
+ xmc[42] = sr & 0x7; sr >>= 3;
+ xmc[43] = sr & 0x7; sr >>= 3;
+ sr = *c++; /* 30 */
+ xmc[44] = sr & 0x7; sr >>= 3;
+ xmc[45] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 2;
+ xmc[46] = sr & 0x7; sr >>= 3;
+ xmc[47] = sr & 0x7; sr >>= 3;
+ xmc[48] = sr & 0x7; sr >>= 3;
+ sr |= (uword)*c++ << 1;
+ xmc[49] = sr & 0x7; sr >>= 3;
+ xmc[50] = sr & 0x7; sr >>= 3;
+ xmc[51] = sr & 0x7; sr >>= 3;
+ }
+ }
+ else
+#endif
+ {
+ /* GSM_MAGIC = (*c >> 4) & 0xF; */
+
+ if (((*c >> 4) & 0x0F) != GSM_MAGIC) return -1;
+
+ LARc[0] = (*c++ & 0xF) << 2; /* 1 */
+ LARc[0] |= (*c >> 6) & 0x3;
+ LARc[1] = *c++ & 0x3F;
+ LARc[2] = (*c >> 3) & 0x1F;
+ LARc[3] = (*c++ & 0x7) << 2;
+ LARc[3] |= (*c >> 6) & 0x3;
+ LARc[4] = (*c >> 2) & 0xF;
+ LARc[5] = (*c++ & 0x3) << 2;
+ LARc[5] |= (*c >> 6) & 0x3;
+ LARc[6] = (*c >> 3) & 0x7;
+ LARc[7] = *c++ & 0x7;
+ Nc[0] = (*c >> 1) & 0x7F;
+ bc[0] = (*c++ & 0x1) << 1;
+ bc[0] |= (*c >> 7) & 0x1;
+ Mc[0] = (*c >> 5) & 0x3;
+ xmaxc[0] = (*c++ & 0x1F) << 1;
+ xmaxc[0] |= (*c >> 7) & 0x1;
+ xmc[0] = (*c >> 4) & 0x7;
+ xmc[1] = (*c >> 1) & 0x7;
+ xmc[2] = (*c++ & 0x1) << 2;
+ xmc[2] |= (*c >> 6) & 0x3;
+ xmc[3] = (*c >> 3) & 0x7;
+ xmc[4] = *c++ & 0x7;
+ xmc[5] = (*c >> 5) & 0x7;
+ xmc[6] = (*c >> 2) & 0x7;
+ xmc[7] = (*c++ & 0x3) << 1; /* 10 */
+ xmc[7] |= (*c >> 7) & 0x1;
+ xmc[8] = (*c >> 4) & 0x7;
+ xmc[9] = (*c >> 1) & 0x7;
+ xmc[10] = (*c++ & 0x1) << 2;
+ xmc[10] |= (*c >> 6) & 0x3;
+ xmc[11] = (*c >> 3) & 0x7;
+ xmc[12] = *c++ & 0x7;
+ Nc[1] = (*c >> 1) & 0x7F;
+ bc[1] = (*c++ & 0x1) << 1;
+ bc[1] |= (*c >> 7) & 0x1;
+ Mc[1] = (*c >> 5) & 0x3;
+ xmaxc[1] = (*c++ & 0x1F) << 1;
+ xmaxc[1] |= (*c >> 7) & 0x1;
+ xmc[13] = (*c >> 4) & 0x7;
+ xmc[14] = (*c >> 1) & 0x7;
+ xmc[15] = (*c++ & 0x1) << 2;
+ xmc[15] |= (*c >> 6) & 0x3;
+ xmc[16] = (*c >> 3) & 0x7;
+ xmc[17] = *c++ & 0x7;
+ xmc[18] = (*c >> 5) & 0x7;
+ xmc[19] = (*c >> 2) & 0x7;
+ xmc[20] = (*c++ & 0x3) << 1;
+ xmc[20] |= (*c >> 7) & 0x1;
+ xmc[21] = (*c >> 4) & 0x7;
+ xmc[22] = (*c >> 1) & 0x7;
+ xmc[23] = (*c++ & 0x1) << 2;
+ xmc[23] |= (*c >> 6) & 0x3;
+ xmc[24] = (*c >> 3) & 0x7;
+ xmc[25] = *c++ & 0x7;
+ Nc[2] = (*c >> 1) & 0x7F;
+ bc[2] = (*c++ & 0x1) << 1; /* 20 */
+ bc[2] |= (*c >> 7) & 0x1;
+ Mc[2] = (*c >> 5) & 0x3;
+ xmaxc[2] = (*c++ & 0x1F) << 1;
+ xmaxc[2] |= (*c >> 7) & 0x1;
+ xmc[26] = (*c >> 4) & 0x7;
+ xmc[27] = (*c >> 1) & 0x7;
+ xmc[28] = (*c++ & 0x1) << 2;
+ xmc[28] |= (*c >> 6) & 0x3;
+ xmc[29] = (*c >> 3) & 0x7;
+ xmc[30] = *c++ & 0x7;
+ xmc[31] = (*c >> 5) & 0x7;
+ xmc[32] = (*c >> 2) & 0x7;
+ xmc[33] = (*c++ & 0x3) << 1;
+ xmc[33] |= (*c >> 7) & 0x1;
+ xmc[34] = (*c >> 4) & 0x7;
+ xmc[35] = (*c >> 1) & 0x7;
+ xmc[36] = (*c++ & 0x1) << 2;
+ xmc[36] |= (*c >> 6) & 0x3;
+ xmc[37] = (*c >> 3) & 0x7;
+ xmc[38] = *c++ & 0x7;
+ Nc[3] = (*c >> 1) & 0x7F;
+ bc[3] = (*c++ & 0x1) << 1;
+ bc[3] |= (*c >> 7) & 0x1;
+ Mc[3] = (*c >> 5) & 0x3;
+ xmaxc[3] = (*c++ & 0x1F) << 1;
+ xmaxc[3] |= (*c >> 7) & 0x1;
+ xmc[39] = (*c >> 4) & 0x7;
+ xmc[40] = (*c >> 1) & 0x7;
+ xmc[41] = (*c++ & 0x1) << 2;
+ xmc[41] |= (*c >> 6) & 0x3;
+ xmc[42] = (*c >> 3) & 0x7;
+ xmc[43] = *c++ & 0x7; /* 30 */
+ xmc[44] = (*c >> 5) & 0x7;
+ xmc[45] = (*c >> 2) & 0x7;
+ xmc[46] = (*c++ & 0x3) << 1;
+ xmc[46] |= (*c >> 7) & 0x1;
+ xmc[47] = (*c >> 4) & 0x7;
+ xmc[48] = (*c >> 1) & 0x7;
+ xmc[49] = (*c++ & 0x1) << 2;
+ xmc[49] |= (*c >> 6) & 0x3;
+ xmc[50] = (*c >> 3) & 0x7;
+ xmc[51] = *c & 0x7; /* 33 */
+ }
+
+ Gsm_Decoder(s, LARc, Nc, bc, Mc, xmaxc, xmc, target);
+
+ return 0;
+}
--- /dev/null
+++ b/common/libsndfile/src/GSM610/gsm_destroy.c
@@ -1,0 +1,26 @@
+/*
+ * 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/faac/common/libsndfile/src/GSM610/Attic/gsm_destroy.c,v 1.1 2001/05/09 19:44:12 menno Exp $ */
+
+#include "gsm.h"
+#include "config.h"
+#include "proto.h"
+
+#ifdef HAS_STDLIB_H
+# include <stdlib.h>
+#else
+# ifdef HAS_MALLOC_H
+# include <malloc.h>
+# else
+ extern void free();
+# endif
+#endif
+
+void gsm_destroy P1((S), gsm S)
+{
+ if (S) free((char *)S);
+}
--- /dev/null
+++ b/common/libsndfile/src/GSM610/gsm_encode.c
@@ -1,0 +1,451 @@
+/*
+ * 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/faac/common/libsndfile/src/GSM610/Attic/gsm_encode.c,v 1.1 2001/05/09 19:44:12 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)
+{
+ word LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4];
+
+ Gsm_Coder(s, source, LARc, Nc, bc, Mc, xmaxc, xmc);
+
+
+ /* variable size
+
+ GSM_MAGIC 4
+
+ LARc[0] 6
+ LARc[1] 6
+ LARc[2] 5
+ LARc[3] 5
+ LARc[4] 4
+ LARc[5] 4
+ LARc[6] 3
+ LARc[7] 3
+
+ Nc[0] 7
+ bc[0] 2
+ Mc[0] 2
+ xmaxc[0] 6
+ xmc[0] 3
+ xmc[1] 3
+ xmc[2] 3
+ xmc[3] 3
+ xmc[4] 3
+ xmc[5] 3
+ xmc[6] 3
+ xmc[7] 3
+ xmc[8] 3
+ xmc[9] 3
+ xmc[10] 3
+ xmc[11] 3
+ xmc[12] 3
+
+ Nc[1] 7
+ bc[1] 2
+ Mc[1] 2
+ xmaxc[1] 6
+ xmc[13] 3
+ xmc[14] 3
+ xmc[15] 3
+ xmc[16] 3
+ xmc[17] 3
+ xmc[18] 3
+ xmc[19] 3
+ xmc[20] 3
+ xmc[21] 3
+ xmc[22] 3
+ xmc[23] 3
+ xmc[24] 3
+ xmc[25] 3
+
+ Nc[2] 7
+ bc[2] 2
+ Mc[2] 2
+ xmaxc[2] 6
+ xmc[26] 3
+ xmc[27] 3
+ xmc[28] 3
+ xmc[29] 3
+ xmc[30] 3
+ xmc[31] 3
+ xmc[32] 3
+ xmc[33] 3
+ xmc[34] 3
+ xmc[35] 3
+ xmc[36] 3
+ xmc[37] 3
+ xmc[38] 3
+
+ Nc[3] 7
+ bc[3] 2
+ Mc[3] 2
+ xmaxc[3] 6
+ xmc[39] 3
+ xmc[40] 3
+ xmc[41] 3
+ xmc[42] 3
+ xmc[43] 3
+ xmc[44] 3
+ xmc[45] 3
+ xmc[46] 3
+ xmc[47] 3
+ xmc[48] 3
+ xmc[49] 3
+ xmc[50] 3
+ xmc[51] 3
+ */
+
+#ifdef WAV49
+
+ if (s->wav_fmt) {
+ s->frame_index = !s->frame_index;
+ if (s->frame_index) {
+
+ uword sr;
+
+ sr = 0;
+ sr = sr >> 6 | LARc[0] << 10;
+ sr = sr >> 6 | LARc[1] << 10;
+ *c++ = sr >> 4;
+ sr = sr >> 5 | LARc[2] << 11;
+ *c++ = sr >> 7;
+ sr = sr >> 5 | LARc[3] << 11;
+ sr = sr >> 4 | LARc[4] << 12;
+ *c++ = sr >> 6;
+ sr = sr >> 4 | LARc[5] << 12;
+ sr = sr >> 3 | LARc[6] << 13;
+ *c++ = sr >> 7;
+ sr = sr >> 3 | LARc[7] << 13;
+ sr = sr >> 7 | Nc[0] << 9;
+ *c++ = sr >> 5;
+ sr = sr >> 2 | bc[0] << 14;
+ sr = sr >> 2 | Mc[0] << 14;
+ sr = sr >> 6 | xmaxc[0] << 10;
+ *c++ = sr >> 3;
+ sr = sr >> 3 | xmc[0] << 13;
+ *c++ = sr >> 8;
+ sr = sr >> 3 | xmc[1] << 13;
+ sr = sr >> 3 | xmc[2] << 13;
+ sr = sr >> 3 | xmc[3] << 13;
+ *c++ = sr >> 7;
+ sr = sr >> 3 | xmc[4] << 13;
+ sr = sr >> 3 | xmc[5] << 13;
+ sr = sr >> 3 | xmc[6] << 13;
+ *c++ = sr >> 6;
+ sr = sr >> 3 | xmc[7] << 13;
+ sr = sr >> 3 | xmc[8] << 13;
+ *c++ = sr >> 8;
+ sr = sr >> 3 | xmc[9] << 13;
+ sr = sr >> 3 | xmc[10] << 13;
+ sr = sr >> 3 | xmc[11] << 13;
+ *c++ = sr >> 7;
+ sr = sr >> 3 | xmc[12] << 13;
+ sr = sr >> 7 | Nc[1] << 9;
+ *c++ = sr >> 5;
+ sr = sr >> 2 | bc[1] << 14;
+ sr = sr >> 2 | Mc[1] << 14;
+ sr = sr >> 6 | xmaxc[1] << 10;
+ *c++ = sr >> 3;
+ sr = sr >> 3 | xmc[13] << 13;
+ *c++ = sr >> 8;
+ sr = sr >> 3 | xmc[14] << 13;
+ sr = sr >> 3 | xmc[15] << 13;
+ sr = sr >> 3 | xmc[16] << 13;
+ *c++ = sr >> 7;
+ sr = sr >> 3 | xmc[17] << 13;
+ sr = sr >> 3 | xmc[18] << 13;
+ sr = sr >> 3 | xmc[19] << 13;
+ *c++ = sr >> 6;
+ sr = sr >> 3 | xmc[20] << 13;
+ sr = sr >> 3 | xmc[21] << 13;
+ *c++ = sr >> 8;
+ sr = sr >> 3 | xmc[22] << 13;
+ sr = sr >> 3 | xmc[23] << 13;
+ sr = sr >> 3 | xmc[24] << 13;
+ *c++ = sr >> 7;
+ sr = sr >> 3 | xmc[25] << 13;
+ sr = sr >> 7 | Nc[2] << 9;
+ *c++ = sr >> 5;
+ sr = sr >> 2 | bc[2] << 14;
+ sr = sr >> 2 | Mc[2] << 14;
+ sr = sr >> 6 | xmaxc[2] << 10;
+ *c++ = sr >> 3;
+ sr = sr >> 3 | xmc[26] << 13;
+ *c++ = sr >> 8;
+ sr = sr >> 3 | xmc[27] << 13;
+ sr = sr >> 3 | xmc[28] << 13;
+ sr = sr >> 3 | xmc[29] << 13;
+ *c++ = sr >> 7;
+ sr = sr >> 3 | xmc[30] << 13;
+ sr = sr >> 3 | xmc[31] << 13;
+ sr = sr >> 3 | xmc[32] << 13;
+ *c++ = sr >> 6;
+ sr = sr >> 3 | xmc[33] << 13;
+ sr = sr >> 3 | xmc[34] << 13;
+ *c++ = sr >> 8;
+ sr = sr >> 3 | xmc[35] << 13;
+ sr = sr >> 3 | xmc[36] << 13;
+ sr = sr >> 3 | xmc[37] << 13;
+ *c++ = sr >> 7;
+ sr = sr >> 3 | xmc[38] << 13;
+ sr = sr >> 7 | Nc[3] << 9;
+ *c++ = sr >> 5;
+ sr = sr >> 2 | bc[3] << 14;
+ sr = sr >> 2 | Mc[3] << 14;
+ sr = sr >> 6 | xmaxc[3] << 10;
+ *c++ = sr >> 3;
+ sr = sr >> 3 | xmc[39] << 13;
+ *c++ = sr >> 8;
+ sr = sr >> 3 | xmc[40] << 13;
+ sr = sr >> 3 | xmc[41] << 13;
+ sr = sr >> 3 | xmc[42] << 13;
+ *c++ = sr >> 7;
+ sr = sr >> 3 | xmc[43] << 13;
+ sr = sr >> 3 | xmc[44] << 13;
+ sr = sr >> 3 | xmc[45] << 13;
+ *c++ = sr >> 6;
+ sr = sr >> 3 | xmc[46] << 13;
+ sr = sr >> 3 | xmc[47] << 13;
+ *c++ = sr >> 8;
+ sr = sr >> 3 | xmc[48] << 13;
+ sr = sr >> 3 | xmc[49] << 13;
+ sr = sr >> 3 | xmc[50] << 13;
+ *c++ = sr >> 7;
+ sr = sr >> 3 | xmc[51] << 13;
+ sr = sr >> 4;
+ *c = sr >> 8;
+ s->frame_chain = *c;
+ }
+ else {
+ uword sr;
+
+ sr = 0;
+ sr = sr >> 4 | s->frame_chain << 12;
+ sr = sr >> 6 | LARc[0] << 10;
+ *c++ = sr >> 6;
+ sr = sr >> 6 | LARc[1] << 10;
+ *c++ = sr >> 8;
+ sr = sr >> 5 | LARc[2] << 11;
+ sr = sr >> 5 | LARc[3] << 11;
+ *c++ = sr >> 6;
+ sr = sr >> 4 | LARc[4] << 12;
+ sr = sr >> 4 | LARc[5] << 12;
+ *c++ = sr >> 6;
+ sr = sr >> 3 | LARc[6] << 13;
+ sr = sr >> 3 | LARc[7] << 13;
+ *c++ = sr >> 8;
+ sr = sr >> 7 | Nc[0] << 9;
+ sr = sr >> 2 | bc[0] << 14;
+ *c++ = sr >> 7;
+ sr = sr >> 2 | Mc[0] << 14;
+ sr = sr >> 6 | xmaxc[0] << 10;
+ *c++ = sr >> 7;
+ sr = sr >> 3 | xmc[0] << 13;
+ sr = sr >> 3 | xmc[1] << 13;
+ sr = sr >> 3 | xmc[2] << 13;
+ *c++ = sr >> 6;
+ sr = sr >> 3 | xmc[3] << 13;
+ sr = sr >> 3 | xmc[4] << 13;
+ *c++ = sr >> 8;
+ sr = sr >> 3 | xmc[5] << 13;
+ sr = sr >> 3 | xmc[6] << 13;
+ sr = sr >> 3 | xmc[7] << 13;
+ *c++ = sr >> 7;
+ sr = sr >> 3 | xmc[8] << 13;
+ sr = sr >> 3 | xmc[9] << 13;
+ sr = sr >> 3 | xmc[10] << 13;
+ *c++ = sr >> 6;
+ sr = sr >> 3 | xmc[11] << 13;
+ sr = sr >> 3 | xmc[12] << 13;
+ *c++ = sr >> 8;
+ sr = sr >> 7 | Nc[1] << 9;
+ sr = sr >> 2 | bc[1] << 14;
+ *c++ = sr >> 7;
+ sr = sr >> 2 | Mc[1] << 14;
+ sr = sr >> 6 | xmaxc[1] << 10;
+ *c++ = sr >> 7;
+ sr = sr >> 3 | xmc[13] << 13;
+ sr = sr >> 3 | xmc[14] << 13;
+ sr = sr >> 3 | xmc[15] << 13;
+ *c++ = sr >> 6;
+ sr = sr >> 3 | xmc[16] << 13;
+ sr = sr >> 3 | xmc[17] << 13;
+ *c++ = sr >> 8;
+ sr = sr >> 3 | xmc[18] << 13;
+ sr = sr >> 3 | xmc[19] << 13;
+ sr = sr >> 3 | xmc[20] << 13;
+ *c++ = sr >> 7;
+ sr = sr >> 3 | xmc[21] << 13;
+ sr = sr >> 3 | xmc[22] << 13;
+ sr = sr >> 3 | xmc[23] << 13;
+ *c++ = sr >> 6;
+ sr = sr >> 3 | xmc[24] << 13;
+ sr = sr >> 3 | xmc[25] << 13;
+ *c++ = sr >> 8;
+ sr = sr >> 7 | Nc[2] << 9;
+ sr = sr >> 2 | bc[2] << 14;
+ *c++ = sr >> 7;
+ sr = sr >> 2 | Mc[2] << 14;
+ sr = sr >> 6 | xmaxc[2] << 10;
+ *c++ = sr >> 7;
+ sr = sr >> 3 | xmc[26] << 13;
+ sr = sr >> 3 | xmc[27] << 13;
+ sr = sr >> 3 | xmc[28] << 13;
+ *c++ = sr >> 6;
+ sr = sr >> 3 | xmc[29] << 13;
+ sr = sr >> 3 | xmc[30] << 13;
+ *c++ = sr >> 8;
+ sr = sr >> 3 | xmc[31] << 13;
+ sr = sr >> 3 | xmc[32] << 13;
+ sr = sr >> 3 | xmc[33] << 13;
+ *c++ = sr >> 7;
+ sr = sr >> 3 | xmc[34] << 13;
+ sr = sr >> 3 | xmc[35] << 13;
+ sr = sr >> 3 | xmc[36] << 13;
+ *c++ = sr >> 6;
+ sr = sr >> 3 | xmc[37] << 13;
+ sr = sr >> 3 | xmc[38] << 13;
+ *c++ = sr >> 8;
+ sr = sr >> 7 | Nc[3] << 9;
+ sr = sr >> 2 | bc[3] << 14;
+ *c++ = sr >> 7;
+ sr = sr >> 2 | Mc[3] << 14;
+ sr = sr >> 6 | xmaxc[3] << 10;
+ *c++ = sr >> 7;
+ sr = sr >> 3 | xmc[39] << 13;
+ sr = sr >> 3 | xmc[40] << 13;
+ sr = sr >> 3 | xmc[41] << 13;
+ *c++ = sr >> 6;
+ sr = sr >> 3 | xmc[42] << 13;
+ sr = sr >> 3 | xmc[43] << 13;
+ *c++ = sr >> 8;
+ sr = sr >> 3 | xmc[44] << 13;
+ sr = sr >> 3 | xmc[45] << 13;
+ sr = sr >> 3 | xmc[46] << 13;
+ *c++ = sr >> 7;
+ sr = sr >> 3 | xmc[47] << 13;
+ sr = sr >> 3 | xmc[48] << 13;
+ sr = sr >> 3 | xmc[49] << 13;
+ *c++ = sr >> 6;
+ sr = sr >> 3 | xmc[50] << 13;
+ sr = sr >> 3 | xmc[51] << 13;
+ *c++ = sr >> 8;
+ }
+ }
+
+ else
+
+#endif /* WAV49 */
+ {
+
+ *c++ = ((GSM_MAGIC & 0xF) << 4) /* 1 */
+ | ((LARc[0] >> 2) & 0xF);
+ *c++ = ((LARc[0] & 0x3) << 6)
+ | (LARc[1] & 0x3F);
+ *c++ = ((LARc[2] & 0x1F) << 3)
+ | ((LARc[3] >> 2) & 0x7);
+ *c++ = ((LARc[3] & 0x3) << 6)
+ | ((LARc[4] & 0xF) << 2)
+ | ((LARc[5] >> 2) & 0x3);
+ *c++ = ((LARc[5] & 0x3) << 6)
+ | ((LARc[6] & 0x7) << 3)
+ | (LARc[7] & 0x7);
+ *c++ = ((Nc[0] & 0x7F) << 1)
+ | ((bc[0] >> 1) & 0x1);
+ *c++ = ((bc[0] & 0x1) << 7)
+ | ((Mc[0] & 0x3) << 5)
+ | ((xmaxc[0] >> 1) & 0x1F);
+ *c++ = ((xmaxc[0] & 0x1) << 7)
+ | ((xmc[0] & 0x7) << 4)
+ | ((xmc[1] & 0x7) << 1)
+ | ((xmc[2] >> 2) & 0x1);
+ *c++ = ((xmc[2] & 0x3) << 6)
+ | ((xmc[3] & 0x7) << 3)
+ | (xmc[4] & 0x7);
+ *c++ = ((xmc[5] & 0x7) << 5) /* 10 */
+ | ((xmc[6] & 0x7) << 2)
+ | ((xmc[7] >> 1) & 0x3);
+ *c++ = ((xmc[7] & 0x1) << 7)
+ | ((xmc[8] & 0x7) << 4)
+ | ((xmc[9] & 0x7) << 1)
+ | ((xmc[10] >> 2) & 0x1);
+ *c++ = ((xmc[10] & 0x3) << 6)
+ | ((xmc[11] & 0x7) << 3)
+ | (xmc[12] & 0x7);
+ *c++ = ((Nc[1] & 0x7F) << 1)
+ | ((bc[1] >> 1) & 0x1);
+ *c++ = ((bc[1] & 0x1) << 7)
+ | ((Mc[1] & 0x3) << 5)
+ | ((xmaxc[1] >> 1) & 0x1F);
+ *c++ = ((xmaxc[1] & 0x1) << 7)
+ | ((xmc[13] & 0x7) << 4)
+ | ((xmc[14] & 0x7) << 1)
+ | ((xmc[15] >> 2) & 0x1);
+ *c++ = ((xmc[15] & 0x3) << 6)
+ | ((xmc[16] & 0x7) << 3)
+ | (xmc[17] & 0x7);
+ *c++ = ((xmc[18] & 0x7) << 5)
+ | ((xmc[19] & 0x7) << 2)
+ | ((xmc[20] >> 1) & 0x3);
+ *c++ = ((xmc[20] & 0x1) << 7)
+ | ((xmc[21] & 0x7) << 4)
+ | ((xmc[22] & 0x7) << 1)
+ | ((xmc[23] >> 2) & 0x1);
+ *c++ = ((xmc[23] & 0x3) << 6)
+ | ((xmc[24] & 0x7) << 3)
+ | (xmc[25] & 0x7);
+ *c++ = ((Nc[2] & 0x7F) << 1) /* 20 */
+ | ((bc[2] >> 1) & 0x1);
+ *c++ = ((bc[2] & 0x1) << 7)
+ | ((Mc[2] & 0x3) << 5)
+ | ((xmaxc[2] >> 1) & 0x1F);
+ *c++ = ((xmaxc[2] & 0x1) << 7)
+ | ((xmc[26] & 0x7) << 4)
+ | ((xmc[27] & 0x7) << 1)
+ | ((xmc[28] >> 2) & 0x1);
+ *c++ = ((xmc[28] & 0x3) << 6)
+ | ((xmc[29] & 0x7) << 3)
+ | (xmc[30] & 0x7);
+ *c++ = ((xmc[31] & 0x7) << 5)
+ | ((xmc[32] & 0x7) << 2)
+ | ((xmc[33] >> 1) & 0x3);
+ *c++ = ((xmc[33] & 0x1) << 7)
+ | ((xmc[34] & 0x7) << 4)
+ | ((xmc[35] & 0x7) << 1)
+ | ((xmc[36] >> 2) & 0x1);
+ *c++ = ((xmc[36] & 0x3) << 6)
+ | ((xmc[37] & 0x7) << 3)
+ | (xmc[38] & 0x7);
+ *c++ = ((Nc[3] & 0x7F) << 1)
+ | ((bc[3] >> 1) & 0x1);
+ *c++ = ((bc[3] & 0x1) << 7)
+ | ((Mc[3] & 0x3) << 5)
+ | ((xmaxc[3] >> 1) & 0x1F);
+ *c++ = ((xmaxc[3] & 0x1) << 7)
+ | ((xmc[39] & 0x7) << 4)
+ | ((xmc[40] & 0x7) << 1)
+ | ((xmc[41] >> 2) & 0x1);
+ *c++ = ((xmc[41] & 0x3) << 6) /* 30 */
+ | ((xmc[42] & 0x7) << 3)
+ | (xmc[43] & 0x7);
+ *c++ = ((xmc[44] & 0x7) << 5)
+ | ((xmc[45] & 0x7) << 2)
+ | ((xmc[46] >> 1) & 0x3);
+ *c++ = ((xmc[46] & 0x1) << 7)
+ | ((xmc[47] & 0x7) << 4)
+ | ((xmc[48] & 0x7) << 1)
+ | ((xmc[49] >> 2) & 0x1);
+ *c++ = ((xmc[49] & 0x3) << 6)
+ | ((xmc[50] & 0x7) << 3)
+ | (xmc[51] & 0x7);
+
+ }
+}
--- /dev/null
+++ b/common/libsndfile/src/GSM610/gsm_option.c
@@ -1,0 +1,69 @@
+/*
+ * 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/faac/common/libsndfile/src/GSM610/Attic/gsm_option.c,v 1.1 2001/05/09 19:44:12 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 result = -1;
+
+ switch (opt) {
+ case GSM_OPT_LTP_CUT:
+#ifdef LTP_CUT
+ result = r->ltp_cut;
+ if (val) r->ltp_cut = *val;
+#endif
+ break;
+
+ case GSM_OPT_VERBOSE:
+#ifndef NDEBUG
+ result = r->verbose;
+ if (val) r->verbose = *val;
+#endif
+ break;
+
+ case GSM_OPT_FAST:
+
+#if defined(FAST) && defined(USE_FLOAT_MUL)
+ result = r->fast;
+ if (val) r->fast = !!*val;
+#endif
+ break;
+
+ case GSM_OPT_FRAME_CHAIN:
+
+#ifdef WAV49
+ result = r->frame_chain;
+ if (val) r->frame_chain = *val;
+#endif
+ break;
+
+ case GSM_OPT_FRAME_INDEX:
+
+#ifdef WAV49
+ result = r->frame_index;
+ if (val) r->frame_index = *val;
+#endif
+ break;
+
+ case GSM_OPT_WAV49:
+
+#ifdef WAV49
+ result = r->wav_fmt;
+ if (val) r->wav_fmt = !!*val;
+#endif
+ break;
+
+ default:
+ break;
+ }
+ return result;
+}
--- /dev/null
+++ b/common/libsndfile/src/GSM610/long_term.c
@@ -1,0 +1,949 @@
+/*
+ * 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/faac/common/libsndfile/src/GSM610/Attic/long_term.c,v 1.1 2001/05/09 19:44:12 menno Exp $ */
+
+#include <stdio.h>
+#include <assert.h>
+
+#include "private.h"
+
+#include "gsm.h"
+#include "proto.h"
+
+/*
+ * 4.2.11 .. 4.2.12 LONG TERM PREDICTOR (LTP) SECTION
+ */
+
+
+/*
+ * This module computes the LTP gain (bc) and the LTP lag (Nc)
+ * for the long term analysis filter. This is done by calculating a
+ * maximum of the cross-correlation function between the current
+ * sub-segment short term residual signal d[0..39] (output of
+ * the short term analysis filter; for simplification the index
+ * of this array begins at 0 and ends at 39 for each sub-segment of the
+ * RPE-LTP analysis) and the previous reconstructed short term
+ * residual signal dp[ -120 .. -1 ]. A dynamic scaling must be
+ * performed to avoid overflow.
+ */
+
+ /* The next procedure exists in six versions. First two integer
+ * version (if USE_FLOAT_MUL is not defined); then four floating
+ * point versions, twice with proper scaling (USE_FLOAT_MUL defined),
+ * once without (USE_FLOAT_MUL and FAST defined, and fast run-time
+ * option used). Every pair has first a Cut version (see the -C
+ * option to toast or the LTP_CUT option to gsm_option()), then the
+ * uncut one. (For a detailed explanation of why this is altogether
+ * a bad idea, see Henry Spencer and Geoff Collyer, ``#ifdef Considered
+ * Harmful''.)
+ */
+
+#ifndef USE_FLOAT_MUL
+
+#ifdef LTP_CUT
+
+static void Cut_Calculation_of_the_LTP_parameters P5((st, d,dp,bc_out,Nc_out),
+
+ struct gsm_state * st,
+
+ register word * d, /* [0..39] IN */
+ register word * dp, /* [-120..-1] IN */
+ word * bc_out, /* OUT */
+ word * Nc_out /* OUT */
+)
+{
+ register int k, lambda;
+ word Nc, bc;
+ word wt[40];
+
+ longword L_result;
+ longword L_max, L_power;
+ word R, S, dmax, scal, best_k;
+ word ltp_cut;
+
+ register word temp, wt_k;
+
+ /* Search of the optimum scaling of d[0..39].
+ */
+ dmax = 0;
+ for (k = 0; k <= 39; k++) {
+ temp = d[k];
+ temp = GSM_ABS( temp );
+ if (temp > dmax) {
+ dmax = temp;
+ best_k = k;
+ }
+ }
+ temp = 0;
+ if (dmax == 0) scal = 0;
+ else {
+ assert(dmax > 0);
+ temp = gsm_norm( (longword)dmax << 16 );
+ }
+ if (temp > 6) scal = 0;
+ else scal = 6 - temp;
+ assert(scal >= 0);
+
+ /* Search for the maximum cross-correlation and coding of the LTP lag
+ */
+ L_max = 0;
+ Nc = 40; /* index for the maximum cross-correlation */
+ wt_k = SASR(d[best_k], scal);
+
+ for (lambda = 40; lambda <= 120; lambda++) {
+ L_result = (longword)wt_k * dp[best_k - lambda];
+ if (L_result > L_max) {
+ Nc = lambda;
+ L_max = L_result;
+ }
+ }
+ *Nc_out = Nc;
+ L_max <<= 1;
+
+ /* Rescaling of L_max
+ */
+ assert(scal <= 100 && scal >= -100);
+ L_max = L_max >> (6 - scal); /* sub(6, scal) */
+
+ assert( Nc <= 120 && Nc >= 40);
+
+ /* Compute the power of the reconstructed short term residual
+ * signal dp[..]
+ */
+ L_power = 0;
+ for (k = 0; k <= 39; k++) {
+
+ register longword L_temp;
+
+ L_temp = SASR( dp[k - Nc], 3 );
+ L_power += L_temp * L_temp;
+ }
+ L_power <<= 1; /* from L_MULT */
+
+ /* Normalization of L_max and L_power
+ */
+
+ if (L_max <= 0) {
+ *bc_out = 0;
+ return;
+ }
+ if (L_max >= L_power) {
+ *bc_out = 3;
+ return;
+ }
+
+ temp = gsm_norm( L_power );
+
+ R = SASR( L_max << temp, 16 );
+ S = SASR( L_power << temp, 16 );
+
+ /* Coding of the LTP gain
+ */
+
+ /* Table 4.3a must be used to obtain the level DLB[i] for the
+ * quantization of the LTP gain b to get the coded version bc.
+ */
+ for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break;
+ *bc_out = bc;
+}
+
+#endif /* LTP_CUT */
+
+static void Calculation_of_the_LTP_parameters P4((d,dp,bc_out,Nc_out),
+ register word * d, /* [0..39] IN */
+ register word * dp, /* [-120..-1] IN */
+ word * bc_out, /* OUT */
+ word * Nc_out /* OUT */
+)
+{
+ register int k, lambda;
+ word Nc, bc;
+ word wt[40];
+
+ longword L_max, L_power;
+ word R, S, dmax, scal;
+ register word temp;
+
+ /* Search of the optimum scaling of d[0..39].
+ */
+ dmax = 0;
+
+ for (k = 0; k <= 39; k++) {
+ temp = d[k];
+ temp = GSM_ABS( temp );
+ if (temp > dmax) dmax = temp;
+ }
+
+ temp = 0;
+ if (dmax == 0) scal = 0;
+ else {
+ assert(dmax > 0);
+ temp = gsm_norm( (longword)dmax << 16 );
+ }
+
+ if (temp > 6) scal = 0;
+ else scal = 6 - temp;
+
+ assert(scal >= 0);
+
+ /* Initialization of a working array wt
+ */
+
+ for (k = 0; k <= 39; k++) wt[k] = SASR( d[k], scal );
+
+ /* Search for the maximum cross-correlation and coding of the LTP lag
+ */
+ L_max = 0;
+ Nc = 40; /* index for the maximum cross-correlation */
+
+ for (lambda = 40; lambda <= 120; lambda++) {
+
+# undef STEP
+# define STEP(k) (longword)wt[k] * dp[k - lambda]
+
+ register longword L_result;
+
+ L_result = STEP(0) ; L_result += STEP(1) ;
+ L_result += STEP(2) ; L_result += STEP(3) ;
+ L_result += STEP(4) ; L_result += STEP(5) ;
+ L_result += STEP(6) ; L_result += STEP(7) ;
+ L_result += STEP(8) ; L_result += STEP(9) ;
+ L_result += STEP(10) ; L_result += STEP(11) ;
+ L_result += STEP(12) ; L_result += STEP(13) ;
+ L_result += STEP(14) ; L_result += STEP(15) ;
+ L_result += STEP(16) ; L_result += STEP(17) ;
+ L_result += STEP(18) ; L_result += STEP(19) ;
+ L_result += STEP(20) ; L_result += STEP(21) ;
+ L_result += STEP(22) ; L_result += STEP(23) ;
+ L_result += STEP(24) ; L_result += STEP(25) ;
+ L_result += STEP(26) ; L_result += STEP(27) ;
+ L_result += STEP(28) ; L_result += STEP(29) ;
+ L_result += STEP(30) ; L_result += STEP(31) ;
+ L_result += STEP(32) ; L_result += STEP(33) ;
+ L_result += STEP(34) ; L_result += STEP(35) ;
+ L_result += STEP(36) ; L_result += STEP(37) ;
+ L_result += STEP(38) ; L_result += STEP(39) ;
+
+ if (L_result > L_max) {
+
+ Nc = lambda;
+ L_max = L_result;
+ }
+ }
+
+ *Nc_out = Nc;
+
+ L_max <<= 1;
+
+ /* Rescaling of L_max
+ */
+ assert(scal <= 100 && scal >= -100);
+ L_max = L_max >> (6 - scal); /* sub(6, scal) */
+
+ assert( Nc <= 120 && Nc >= 40);
+
+ /* Compute the power of the reconstructed short term residual
+ * signal dp[..]
+ */
+ L_power = 0;
+ for (k = 0; k <= 39; k++) {
+
+ register longword L_temp;
+
+ L_temp = SASR( dp[k - Nc], 3 );
+ L_power += L_temp * L_temp;
+ }
+ L_power <<= 1; /* from L_MULT */
+
+ /* Normalization of L_max and L_power
+ */
+
+ if (L_max <= 0) {
+ *bc_out = 0;
+ return;
+ }
+ if (L_max >= L_power) {
+ *bc_out = 3;
+ return;
+ }
+
+ temp = gsm_norm( L_power );
+
+ R = SASR( L_max << temp, 16 );
+ S = SASR( L_power << temp, 16 );
+
+ /* Coding of the LTP gain
+ */
+
+ /* Table 4.3a must be used to obtain the level DLB[i] for the
+ * quantization of the LTP gain b to get the coded version bc.
+ */
+ for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break;
+ *bc_out = bc;
+}
+
+#else /* USE_FLOAT_MUL */
+
+#ifdef LTP_CUT
+
+static void Cut_Calculation_of_the_LTP_parameters P5((st, d,dp,bc_out,Nc_out),
+ struct gsm_state * st, /* IN */
+ register word * d, /* [0..39] IN */
+ register word * dp, /* [-120..-1] IN */
+ word * bc_out, /* OUT */
+ word * Nc_out /* OUT */
+)
+{
+ register int k, lambda;
+ word Nc, bc;
+ word ltp_cut;
+
+ float wt_float[40];
+ float dp_float_base[120], * dp_float = dp_float_base + 120;
+
+ longword L_max, L_power;
+ word R, S, dmax, scal;
+ register word temp;
+
+ /* Search of the optimum scaling of d[0..39].
+ */
+ dmax = 0;
+
+ for (k = 0; k <= 39; k++) {
+ temp = d[k];
+ temp = GSM_ABS( temp );
+ if (temp > dmax) dmax = temp;
+ }
+
+ temp = 0;
+ if (dmax == 0) scal = 0;
+ else {
+ assert(dmax > 0);
+ temp = gsm_norm( (longword)dmax << 16 );
+ }
+
+ if (temp > 6) scal = 0;
+ else scal = 6 - temp;
+
+ assert(scal >= 0);
+ ltp_cut = (longword)SASR(dmax, scal) * st->ltp_cut / 100;
+
+
+ /* Initialization of a working array wt
+ */
+
+ for (k = 0; k < 40; k++) {
+ register word w = SASR( d[k], scal );
+ if (w < 0 ? w > -ltp_cut : w < ltp_cut) {
+ wt_float[k] = 0.0;
+ }
+ else {
+ wt_float[k] = w;
+ }
+ }
+ for (k = -120; k < 0; k++) dp_float[k] = dp[k];
+
+ /* Search for the maximum cross-correlation and coding of the LTP lag
+ */
+ L_max = 0;
+ Nc = 40; /* index for the maximum cross-correlation */
+
+ for (lambda = 40; lambda <= 120; lambda += 9) {
+
+ /* Calculate L_result for l = lambda .. lambda + 9.
+ */
+ register float *lp = dp_float - lambda;
+
+ register float W;
+ register float a = lp[-8], b = lp[-7], c = lp[-6],
+ d = lp[-5], e = lp[-4], f = lp[-3],
+ g = lp[-2], h = lp[-1];
+ register float E;
+ register float S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0,
+ S5 = 0, S6 = 0, S7 = 0, S8 = 0;
+
+# undef STEP
+# define STEP(K, a, b, c, d, e, f, g, h) \
+ if ((W = wt_float[K]) != 0.0) { \
+ E = W * a; S8 += E; \
+ E = W * b; S7 += E; \
+ E = W * c; S6 += E; \
+ E = W * d; S5 += E; \
+ E = W * e; S4 += E; \
+ E = W * f; S3 += E; \
+ E = W * g; S2 += E; \
+ E = W * h; S1 += E; \
+ a = lp[K]; \
+ E = W * a; S0 += E; } else (a = lp[K])
+
+# define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h)
+# define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a)
+# define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b)
+# define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c)
+# define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d)
+# define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e)
+# define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f)
+# define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g)
+
+ STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3);
+ STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7);
+
+ STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11);
+ STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15);
+
+ STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19);
+ STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23);
+
+ STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27);
+ STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31);
+
+ STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35);
+ STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39);
+
+ if (S0 > L_max) { L_max = S0; Nc = lambda; }
+ if (S1 > L_max) { L_max = S1; Nc = lambda + 1; }
+ if (S2 > L_max) { L_max = S2; Nc = lambda + 2; }
+ if (S3 > L_max) { L_max = S3; Nc = lambda + 3; }
+ if (S4 > L_max) { L_max = S4; Nc = lambda + 4; }
+ if (S5 > L_max) { L_max = S5; Nc = lambda + 5; }
+ if (S6 > L_max) { L_max = S6; Nc = lambda + 6; }
+ if (S7 > L_max) { L_max = S7; Nc = lambda + 7; }
+ if (S8 > L_max) { L_max = S8; Nc = lambda + 8; }
+
+ }
+ *Nc_out = Nc;
+
+ L_max <<= 1;
+
+ /* Rescaling of L_max
+ */
+ assert(scal <= 100 && scal >= -100);
+ L_max = L_max >> (6 - scal); /* sub(6, scal) */
+
+ assert( Nc <= 120 && Nc >= 40);
+
+ /* Compute the power of the reconstructed short term residual
+ * signal dp[..]
+ */
+ L_power = 0;
+ for (k = 0; k <= 39; k++) {
+
+ register longword L_temp;
+
+ L_temp = SASR( dp[k - Nc], 3 );
+ L_power += L_temp * L_temp;
+ }
+ L_power <<= 1; /* from L_MULT */
+
+ /* Normalization of L_max and L_power
+ */
+
+ if (L_max <= 0) {
+ *bc_out = 0;
+ return;
+ }
+ if (L_max >= L_power) {
+ *bc_out = 3;
+ return;
+ }
+
+ temp = gsm_norm( L_power );
+
+ R = SASR( L_max << temp, 16 );
+ S = SASR( L_power << temp, 16 );
+
+ /* Coding of the LTP gain
+ */
+
+ /* Table 4.3a must be used to obtain the level DLB[i] for the
+ * quantization of the LTP gain b to get the coded version bc.
+ */
+ for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break;
+ *bc_out = bc;
+}
+
+#endif /* LTP_CUT */
+
+static void Calculation_of_the_LTP_parameters P4((d,dp,bc_out,Nc_out),
+ register word * d, /* [0..39] IN */
+ register word * dp, /* [-120..-1] IN */
+ word * bc_out, /* OUT */
+ word * Nc_out /* OUT */
+)
+{
+ register int k, lambda;
+ word Nc, bc;
+
+ float wt_float[40];
+ float dp_float_base[120], * dp_float = dp_float_base + 120;
+
+ longword L_max, L_power;
+ word R, S, dmax, scal;
+ register word temp;
+
+ /* Search of the optimum scaling of d[0..39].
+ */
+ dmax = 0;
+
+ for (k = 0; k <= 39; k++) {
+ temp = d[k];
+ temp = GSM_ABS( temp );
+ if (temp > dmax) dmax = temp;
+ }
+
+ temp = 0;
+ if (dmax == 0) scal = 0;
+ else {
+ assert(dmax > 0);
+ temp = gsm_norm( (longword)dmax << 16 );
+ }
+
+ if (temp > 6) scal = 0;
+ else scal = 6 - temp;
+
+ assert(scal >= 0);
+
+ /* Initialization of a working array wt
+ */
+
+ for (k = 0; k < 40; k++) wt_float[k] = SASR( d[k], scal );
+ for (k = -120; k < 0; k++) dp_float[k] = dp[k];
+
+ /* Search for the maximum cross-correlation and coding of the LTP lag
+ */
+ L_max = 0;
+ Nc = 40; /* index for the maximum cross-correlation */
+
+ for (lambda = 40; lambda <= 120; lambda += 9) {
+
+ /* Calculate L_result for l = lambda .. lambda + 9.
+ */
+ register float *lp = dp_float - lambda;
+
+ register float W;
+ register float a = lp[-8], b = lp[-7], c = lp[-6],
+ d = lp[-5], e = lp[-4], f = lp[-3],
+ g = lp[-2], h = lp[-1];
+ register float E;
+ register float S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0,
+ S5 = 0, S6 = 0, S7 = 0, S8 = 0;
+
+# undef STEP
+# define STEP(K, a, b, c, d, e, f, g, h) \
+ W = wt_float[K]; \
+ E = W * a; S8 += E; \
+ E = W * b; S7 += E; \
+ E = W * c; S6 += E; \
+ E = W * d; S5 += E; \
+ E = W * e; S4 += E; \
+ E = W * f; S3 += E; \
+ E = W * g; S2 += E; \
+ E = W * h; S1 += E; \
+ a = lp[K]; \
+ E = W * a; S0 += E
+
+# define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h)
+# define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a)
+# define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b)
+# define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c)
+# define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d)
+# define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e)
+# define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f)
+# define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g)
+
+ STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3);
+ STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7);
+
+ STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11);
+ STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15);
+
+ STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19);
+ STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23);
+
+ STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27);
+ STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31);
+
+ STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35);
+ STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39);
+
+ if (S0 > L_max) { L_max = S0; Nc = lambda; }
+ if (S1 > L_max) { L_max = S1; Nc = lambda + 1; }
+ if (S2 > L_max) { L_max = S2; Nc = lambda + 2; }
+ if (S3 > L_max) { L_max = S3; Nc = lambda + 3; }
+ if (S4 > L_max) { L_max = S4; Nc = lambda + 4; }
+ if (S5 > L_max) { L_max = S5; Nc = lambda + 5; }
+ if (S6 > L_max) { L_max = S6; Nc = lambda + 6; }
+ if (S7 > L_max) { L_max = S7; Nc = lambda + 7; }
+ if (S8 > L_max) { L_max = S8; Nc = lambda + 8; }
+ }
+ *Nc_out = Nc;
+
+ L_max <<= 1;
+
+ /* Rescaling of L_max
+ */
+ assert(scal <= 100 && scal >= -100);
+ L_max = L_max >> (6 - scal); /* sub(6, scal) */
+
+ assert( Nc <= 120 && Nc >= 40);
+
+ /* Compute the power of the reconstructed short term residual
+ * signal dp[..]
+ */
+ L_power = 0;
+ for (k = 0; k <= 39; k++) {
+
+ register longword L_temp;
+
+ L_temp = SASR( dp[k - Nc], 3 );
+ L_power += L_temp * L_temp;
+ }
+ L_power <<= 1; /* from L_MULT */
+
+ /* Normalization of L_max and L_power
+ */
+
+ if (L_max <= 0) {
+ *bc_out = 0;
+ return;
+ }
+ if (L_max >= L_power) {
+ *bc_out = 3;
+ return;
+ }
+
+ temp = gsm_norm( L_power );
+
+ R = SASR( L_max << temp, 16 );
+ S = SASR( L_power << temp, 16 );
+
+ /* Coding of the LTP gain
+ */
+
+ /* Table 4.3a must be used to obtain the level DLB[i] for the
+ * quantization of the LTP gain b to get the coded version bc.
+ */
+ for (bc = 0; bc <= 2; bc++) if (R <= gsm_mult(S, gsm_DLB[bc])) break;
+ *bc_out = bc;
+}
+
+#ifdef FAST
+#ifdef LTP_CUT
+
+static void Cut_Fast_Calculation_of_the_LTP_parameters P5((st,
+ d,dp,bc_out,Nc_out),
+ struct gsm_state * st, /* IN */
+ register word * d, /* [0..39] IN */
+ register word * dp, /* [-120..-1] IN */
+ word * bc_out, /* OUT */
+ word * Nc_out /* OUT */
+)
+{
+ register int k, lambda;
+ register float wt_float;
+ word Nc, bc;
+ word wt_max, best_k, ltp_cut;
+
+ float dp_float_base[120], * dp_float = dp_float_base + 120;
+
+ register float L_result, L_max, L_power;
+
+ wt_max = 0;
+
+ for (k = 0; k < 40; ++k) {
+ if ( d[k] > wt_max) wt_max = d[best_k = k];
+ else if (-d[k] > wt_max) wt_max = -d[best_k = k];
+ }
+
+ assert(wt_max >= 0);
+ wt_float = (float)wt_max;
+
+ for (k = -120; k < 0; ++k) dp_float[k] = (float)dp[k];
+
+ /* Search for the maximum cross-correlation and coding of the LTP lag
+ */
+ L_max = 0;
+ Nc = 40; /* index for the maximum cross-correlation */
+
+ for (lambda = 40; lambda <= 120; lambda++) {
+ L_result = wt_float * dp_float[best_k - lambda];
+ if (L_result > L_max) {
+ Nc = lambda;
+ L_max = L_result;
+ }
+ }
+
+ *Nc_out = Nc;
+ if (L_max <= 0.) {
+ *bc_out = 0;
+ return;
+ }
+
+ /* Compute the power of the reconstructed short term residual
+ * signal dp[..]
+ */
+ dp_float -= Nc;
+ L_power = 0;
+ for (k = 0; k < 40; ++k) {
+ register float f = dp_float[k];
+ L_power += f * f;
+ }
+
+ if (L_max >= L_power) {
+ *bc_out = 3;
+ return;
+ }
+
+ /* Coding of the LTP gain
+ * Table 4.3a must be used to obtain the level DLB[i] for the
+ * quantization of the LTP gain b to get the coded version bc.
+ */
+ lambda = L_max / L_power * 32768.;
+ for (bc = 0; bc <= 2; ++bc) if (lambda <= gsm_DLB[bc]) break;
+ *bc_out = bc;
+}
+
+#endif /* LTP_CUT */
+
+static void Fast_Calculation_of_the_LTP_parameters P4((d,dp,bc_out,Nc_out),
+ register word * d, /* [0..39] IN */
+ register word * dp, /* [-120..-1] IN */
+ word * bc_out, /* OUT */
+ word * Nc_out /* OUT */
+)
+{
+ register int k, lambda;
+ word Nc, bc;
+
+ float wt_float[40];
+ float dp_float_base[120], * dp_float = dp_float_base + 120;
+
+ register float L_max, L_power;
+
+ for (k = 0; k < 40; ++k) wt_float[k] = (float)d[k];
+ for (k = -120; k < 0; ++k) dp_float[k] = (float)dp[k];
+
+ /* Search for the maximum cross-correlation and coding of the LTP lag
+ */
+ L_max = 0;
+ Nc = 40; /* index for the maximum cross-correlation */
+
+ for (lambda = 40; lambda <= 120; lambda += 9) {
+
+ /* Calculate L_result for l = lambda .. lambda + 9.
+ */
+ register float *lp = dp_float - lambda;
+
+ register float W;
+ register float a = lp[-8], b = lp[-7], c = lp[-6],
+ d = lp[-5], e = lp[-4], f = lp[-3],
+ g = lp[-2], h = lp[-1];
+ register float E;
+ register float S0 = 0, S1 = 0, S2 = 0, S3 = 0, S4 = 0,
+ S5 = 0, S6 = 0, S7 = 0, S8 = 0;
+
+# undef STEP
+# define STEP(K, a, b, c, d, e, f, g, h) \
+ W = wt_float[K]; \
+ E = W * a; S8 += E; \
+ E = W * b; S7 += E; \
+ E = W * c; S6 += E; \
+ E = W * d; S5 += E; \
+ E = W * e; S4 += E; \
+ E = W * f; S3 += E; \
+ E = W * g; S2 += E; \
+ E = W * h; S1 += E; \
+ a = lp[K]; \
+ E = W * a; S0 += E
+
+# define STEP_A(K) STEP(K, a, b, c, d, e, f, g, h)
+# define STEP_B(K) STEP(K, b, c, d, e, f, g, h, a)
+# define STEP_C(K) STEP(K, c, d, e, f, g, h, a, b)
+# define STEP_D(K) STEP(K, d, e, f, g, h, a, b, c)
+# define STEP_E(K) STEP(K, e, f, g, h, a, b, c, d)
+# define STEP_F(K) STEP(K, f, g, h, a, b, c, d, e)
+# define STEP_G(K) STEP(K, g, h, a, b, c, d, e, f)
+# define STEP_H(K) STEP(K, h, a, b, c, d, e, f, g)
+
+ STEP_A( 0); STEP_B( 1); STEP_C( 2); STEP_D( 3);
+ STEP_E( 4); STEP_F( 5); STEP_G( 6); STEP_H( 7);
+
+ STEP_A( 8); STEP_B( 9); STEP_C(10); STEP_D(11);
+ STEP_E(12); STEP_F(13); STEP_G(14); STEP_H(15);
+
+ STEP_A(16); STEP_B(17); STEP_C(18); STEP_D(19);
+ STEP_E(20); STEP_F(21); STEP_G(22); STEP_H(23);
+
+ STEP_A(24); STEP_B(25); STEP_C(26); STEP_D(27);
+ STEP_E(28); STEP_F(29); STEP_G(30); STEP_H(31);
+
+ STEP_A(32); STEP_B(33); STEP_C(34); STEP_D(35);
+ STEP_E(36); STEP_F(37); STEP_G(38); STEP_H(39);
+
+ if (S0 > L_max) { L_max = S0; Nc = lambda; }
+ if (S1 > L_max) { L_max = S1; Nc = lambda + 1; }
+ if (S2 > L_max) { L_max = S2; Nc = lambda + 2; }
+ if (S3 > L_max) { L_max = S3; Nc = lambda + 3; }
+ if (S4 > L_max) { L_max = S4; Nc = lambda + 4; }
+ if (S5 > L_max) { L_max = S5; Nc = lambda + 5; }
+ if (S6 > L_max) { L_max = S6; Nc = lambda + 6; }
+ if (S7 > L_max) { L_max = S7; Nc = lambda + 7; }
+ if (S8 > L_max) { L_max = S8; Nc = lambda + 8; }
+ }
+ *Nc_out = Nc;
+
+ if (L_max <= 0.) {
+ *bc_out = 0;
+ return;
+ }
+
+ /* Compute the power of the reconstructed short term residual
+ * signal dp[..]
+ */
+ dp_float -= Nc;
+ L_power = 0;
+ for (k = 0; k < 40; ++k) {
+ register float f = dp_float[k];
+ L_power += f * f;
+ }
+
+ if (L_max >= L_power) {
+ *bc_out = 3;
+ return;
+ }
+
+ /* Coding of the LTP gain
+ * Table 4.3a must be used to obtain the level DLB[i] for the
+ * quantization of the LTP gain b to get the coded version bc.
+ */
+ lambda = L_max / L_power * 32768.;
+ for (bc = 0; bc <= 2; ++bc) if (lambda <= gsm_DLB[bc]) break;
+ *bc_out = bc;
+}
+
+#endif /* FAST */
+#endif /* USE_FLOAT_MUL */
+
+
+/* 4.2.12 */
+
+static void Long_term_analysis_filtering P6((bc,Nc,dp,d,dpp,e),
+ word bc, /* IN */
+ word Nc, /* IN */
+ register word * dp, /* previous d [-120..-1] IN */
+ register word * d, /* d [0..39] IN */
+ register word * dpp, /* estimate [0..39] OUT */
+ register word * e /* long term res. signal [0..39] OUT */
+)
+/*
+ * In this part, we have to decode the bc parameter to compute
+ * the samples of the estimate dpp[0..39]. The decoding of bc needs the
+ * use of table 4.3b. The long term residual signal e[0..39]
+ * is then calculated to be fed to the RPE encoding section.
+ */
+{
+ register int k;
+ register longword ltmp;
+
+# undef STEP
+# define STEP(BP) \
+ for (k = 0; k <= 39; k++) { \
+ dpp[k] = GSM_MULT_R( BP, dp[k - Nc]); \
+ e[k] = GSM_SUB( d[k], dpp[k] ); \
+ }
+
+ switch (bc) {
+ case 0: STEP( 3277 ); break;
+ case 1: STEP( 11469 ); break;
+ case 2: STEP( 21299 ); break;
+ case 3: STEP( 32767 ); break;
+ }
+}
+
+void Gsm_Long_Term_Predictor P7((S,d,dp,e,dpp,Nc,bc), /* 4x for 160 samples */
+
+ struct gsm_state * S,
+
+ word * d, /* [0..39] residual signal IN */
+ word * dp, /* [-120..-1] d' IN */
+
+ word * e, /* [0..39] OUT */
+ word * dpp, /* [0..39] OUT */
+ word * Nc, /* correlation lag OUT */
+ word * bc /* gain factor OUT */
+)
+{
+ assert( d ); assert( dp ); assert( e );
+ assert( dpp); assert( Nc ); assert( bc );
+
+#if defined(FAST) && defined(USE_FLOAT_MUL)
+ if (S->fast)
+#if defined (LTP_CUT)
+ if (S->ltp_cut)
+ Cut_Fast_Calculation_of_the_LTP_parameters(S,
+ d, dp, bc, Nc);
+ else
+#endif /* LTP_CUT */
+ Fast_Calculation_of_the_LTP_parameters(d, dp, bc, Nc );
+ else
+#endif /* FAST & USE_FLOAT_MUL */
+#ifdef LTP_CUT
+ if (S->ltp_cut)
+ Cut_Calculation_of_the_LTP_parameters(S, d, dp, bc, Nc);
+ else
+#endif
+ Calculation_of_the_LTP_parameters(d, dp, bc, Nc);
+
+ Long_term_analysis_filtering( *bc, *Nc, dp, d, dpp, e );
+}
+
+/* 4.3.2 */
+void Gsm_Long_Term_Synthesis_Filtering P5((S,Ncr,bcr,erp,drp),
+ struct gsm_state * S,
+
+ word Ncr,
+ word bcr,
+ register word * erp, /* [0..39] IN */
+ register word * drp /* [-120..-1] IN, [-120..40] OUT */
+)
+/*
+ * This procedure uses the bcr and Ncr parameter to realize the
+ * long term synthesis filtering. The decoding of bcr needs
+ * table 4.3b.
+ */
+{
+ register longword ltmp; /* for ADD */
+ register int k;
+ word brp, drpp, Nr;
+
+ /* Check the limits of Nr.
+ */
+ Nr = Ncr < 40 || Ncr > 120 ? S->nrp : Ncr;
+ S->nrp = Nr;
+ assert(Nr >= 40 && Nr <= 120);
+
+ /* Decoding of the LTP gain bcr
+ */
+ brp = gsm_QLB[ bcr ];
+
+ /* Computation of the reconstructed short term residual
+ * signal drp[0..39]
+ */
+ assert(brp != MIN_WORD);
+
+ for (k = 0; k <= 39; k++) {
+ drpp = GSM_MULT_R( brp, drp[ k - Nr ] );
+ drp[k] = GSM_ADD( erp[k], drpp );
+ }
+
+ /*
+ * Update of the reconstructed short term residual signal
+ * drp[ -1..-120 ]
+ */
+
+ for (k = 0; k <= 119; k++) drp[ -120 + k ] = drp[ -80 + k ];
+}
--- /dev/null
+++ b/common/libsndfile/src/GSM610/lpc.c
@@ -1,0 +1,341 @@
+/*
+ * 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/faac/common/libsndfile/src/GSM610/Attic/lpc.c,v 1.1 2001/05/09 19:44:12 menno Exp $ */
+
+#include <stdio.h>
+#include <assert.h>
+
+#include "private.h"
+
+#include "gsm.h"
+#include "proto.h"
+
+#undef P
+
+/*
+ * 4.2.4 .. 4.2.7 LPC ANALYSIS SECTION
+ */
+
+/* 4.2.4 */
+
+
+static void Autocorrelation P2((s, L_ACF),
+ word * s, /* [0..159] IN/OUT */
+ longword * L_ACF) /* [0..8] OUT */
+/*
+ * The goal is to compute the array L_ACF[k]. The signal s[i] must
+ * be scaled in order to avoid an overflow situation.
+ */
+{
+ register int k, i;
+
+ word temp, smax, scalauto;
+
+#ifdef USE_FLOAT_MUL
+ float float_s[160];
+#endif
+
+ /* Dynamic scaling of the array s[0..159]
+ */
+
+ /* Search for the maximum.
+ */
+ smax = 0;
+ for (k = 0; k <= 159; k++) {
+ temp = GSM_ABS( s[k] );
+ if (temp > smax) smax = temp;
+ }
+
+ /* Computation of the scaling factor.
+ */
+ if (smax == 0) scalauto = 0;
+ else {
+ assert(smax > 0);
+ scalauto = 4 - gsm_norm( (longword)smax << 16 );/* sub(4,..) */
+ }
+
+ /* Scaling of the array s[0...159]
+ */
+
+ if (scalauto > 0) {
+
+# ifdef USE_FLOAT_MUL
+# define SCALE(n) \
+ case n: for (k = 0; k <= 159; k++) \
+ float_s[k] = (float) \
+ (s[k] = GSM_MULT_R(s[k], 16384 >> (n-1)));\
+ break;
+# else
+# define SCALE(n) \
+ case n: for (k = 0; k <= 159; k++) \
+ s[k] = GSM_MULT_R( s[k], 16384 >> (n-1) );\
+ break;
+# endif /* USE_FLOAT_MUL */
+
+ switch (scalauto) {
+ SCALE(1)
+ SCALE(2)
+ SCALE(3)
+ SCALE(4)
+ }
+# undef SCALE
+ }
+# ifdef USE_FLOAT_MUL
+ else for (k = 0; k <= 159; k++) float_s[k] = (float) s[k];
+# endif
+
+ /* Compute the L_ACF[..].
+ */
+ {
+# ifdef USE_FLOAT_MUL
+ register float * sp = float_s;
+ register float sl = *sp;
+
+# define STEP(k) L_ACF[k] += (longword)(sl * sp[ -(k) ]);
+# else
+ word * sp = s;
+ word sl = *sp;
+
+# define STEP(k) L_ACF[k] += ((longword)sl * sp[ -(k) ]);
+# endif
+
+# define NEXTI sl = *++sp
+
+
+ for (k = 9; k--; L_ACF[k] = 0) ;
+
+ STEP (0);
+ NEXTI;
+ STEP(0); STEP(1);
+ NEXTI;
+ STEP(0); STEP(1); STEP(2);
+ NEXTI;
+ STEP(0); STEP(1); STEP(2); STEP(3);
+ NEXTI;
+ STEP(0); STEP(1); STEP(2); STEP(3); STEP(4);
+ NEXTI;
+ STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5);
+ NEXTI;
+ STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6);
+ NEXTI;
+ STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6); STEP(7);
+
+ for (i = 8; i <= 159; i++) {
+
+ NEXTI;
+
+ STEP(0);
+ STEP(1); STEP(2); STEP(3); STEP(4);
+ STEP(5); STEP(6); STEP(7); STEP(8);
+ }
+
+ for (k = 9; k--; L_ACF[k] <<= 1) ;
+
+ }
+ /* Rescaling of the array s[0..159]
+ */
+ if (scalauto > 0) {
+ assert(scalauto <= 4);
+ for (k = 160; k--; *s++ <<= scalauto) ;
+ }
+}
+
+#if defined(USE_FLOAT_MUL) && defined(FAST)
+
+static void Fast_Autocorrelation P2((s, L_ACF),
+ word * s, /* [0..159] IN/OUT */
+ longword * L_ACF) /* [0..8] OUT */
+{
+ register int k, i;
+ float f_L_ACF[9];
+ float scale;
+
+ float s_f[160];
+ register float *sf = s_f;
+
+ for (i = 0; i < 160; ++i) sf[i] = s[i];
+ for (k = 0; k <= 8; k++) {
+ register float L_temp2 = 0;
+ register float *sfl = sf - k;
+ for (i = k; i < 160; ++i) L_temp2 += sf[i] * sfl[i];
+ f_L_ACF[k] = L_temp2;
+ }
+ scale = MAX_LONGWORD / f_L_ACF[0];
+
+ for (k = 0; k <= 8; k++) {
+ L_ACF[k] = f_L_ACF[k] * scale;
+ }
+}
+#endif /* defined (USE_FLOAT_MUL) && defined (FAST) */
+
+/* 4.2.5 */
+
+static void Reflection_coefficients P2( (L_ACF, r),
+ longword * L_ACF, /* 0...8 IN */
+ register word * r /* 0...7 OUT */
+)
+{
+ register int i, m, n;
+ register word temp;
+ register longword ltmp;
+ word ACF[9]; /* 0..8 */
+ word P[ 9]; /* 0..8 */
+ word K[ 9]; /* 2..8 */
+
+ /* Schur recursion with 16 bits arithmetic.
+ */
+
+ if (L_ACF[0] == 0) {
+ for (i = 8; i--; *r++ = 0) ;
+ return;
+ }
+
+ assert( L_ACF[0] != 0 );
+ temp = gsm_norm( L_ACF[0] );
+
+ assert(temp >= 0 && temp < 32);
+
+ /* ? overflow ? */
+ for (i = 0; i <= 8; i++) ACF[i] = SASR( L_ACF[i] << temp, 16 );
+
+ /* Initialize array P[..] and K[..] for the recursion.
+ */
+
+ for (i = 1; i <= 7; i++) K[ i ] = ACF[ i ];
+ for (i = 0; i <= 8; i++) P[ i ] = ACF[ i ];
+
+ /* Compute reflection coefficients
+ */
+ for (n = 1; n <= 8; n++, r++) {
+
+ temp = P[1];
+ temp = GSM_ABS(temp);
+ if (P[0] < temp) {
+ for (i = n; i <= 8; i++) *r++ = 0;
+ return;
+ }
+
+ *r = gsm_div( temp, P[0] );
+
+ assert(*r >= 0);
+ if (P[1] > 0) *r = -*r; /* r[n] = sub(0, r[n]) */
+ assert (*r != MIN_WORD);
+ if (n == 8) return;
+
+ /* Schur recursion
+ */
+ temp = GSM_MULT_R( P[1], *r );
+ P[0] = GSM_ADD( P[0], temp );
+
+ for (m = 1; m <= 8 - n; m++) {
+ temp = GSM_MULT_R( K[ m ], *r );
+ P[m] = GSM_ADD( P[ m+1 ], temp );
+
+ temp = GSM_MULT_R( P[ m+1 ], *r );
+ K[m] = GSM_ADD( K[ m ], temp );
+ }
+ }
+}
+
+/* 4.2.6 */
+
+static void Transformation_to_Log_Area_Ratios P1((r),
+ register word * r /* 0..7 IN/OUT */
+)
+/*
+ * The following scaling for r[..] and LAR[..] has been used:
+ *
+ * r[..] = integer( real_r[..]*32768. ); -1 <= real_r < 1.
+ * LAR[..] = integer( real_LAR[..] * 16384 );
+ * with -1.625 <= real_LAR <= 1.625
+ */
+{
+ register word temp;
+ register int i;
+
+
+ /* Computation of the LAR[0..7] from the r[0..7]
+ */
+ for (i = 1; i <= 8; i++, r++) {
+
+ temp = *r;
+ temp = GSM_ABS(temp);
+ assert(temp >= 0);
+
+ if (temp < 22118) {
+ temp >>= 1;
+ } else if (temp < 31130) {
+ assert( temp >= 11059 );
+ temp -= 11059;
+ } else {
+ assert( temp >= 26112 );
+ temp -= 26112;
+ temp <<= 2;
+ }
+
+ *r = *r < 0 ? -temp : temp;
+ assert( *r != MIN_WORD );
+ }
+}
+
+/* 4.2.7 */
+
+static void Quantization_and_coding P1((LAR),
+ register word * LAR /* [0..7] IN/OUT */
+)
+{
+ register word temp;
+ longword ltmp;
+
+
+ /* This procedure needs four tables; the following equations
+ * give the optimum scaling for the constants:
+ *
+ * A[0..7] = integer( real_A[0..7] * 1024 )
+ * B[0..7] = integer( real_B[0..7] * 512 )
+ * MAC[0..7] = maximum of the LARc[0..7]
+ * MIC[0..7] = minimum of the LARc[0..7]
+ */
+
+# undef STEP
+# define STEP( A, B, MAC, MIC ) \
+ temp = GSM_MULT( A, *LAR ); \
+ temp = GSM_ADD( temp, B ); \
+ temp = GSM_ADD( temp, 256 ); \
+ temp = SASR( temp, 9 ); \
+ *LAR = temp>MAC ? MAC - MIC : (temp<MIC ? 0 : temp - MIC); \
+ LAR++;
+
+ STEP( 20480, 0, 31, -32 );
+ STEP( 20480, 0, 31, -32 );
+ STEP( 20480, 2048, 15, -16 );
+ STEP( 20480, -2560, 15, -16 );
+
+ STEP( 13964, 94, 7, -8 );
+ STEP( 15360, -1792, 7, -8 );
+ STEP( 8534, -341, 3, -4 );
+ STEP( 9036, -1144, 3, -4 );
+
+# undef STEP
+}
+
+void Gsm_LPC_Analysis P3((S, s,LARc),
+ struct gsm_state *S,
+ word * s, /* 0..159 signals IN/OUT */
+ word * LARc) /* 0..7 LARc's OUT */
+{
+ longword L_ACF[9];
+
+#if defined(USE_FLOAT_MUL) && defined(FAST)
+ if (S->fast) Fast_Autocorrelation (s, L_ACF );
+ else
+#endif
+ Autocorrelation (s, L_ACF );
+ Reflection_coefficients (L_ACF, LARc );
+ Transformation_to_Log_Area_Ratios (LARc);
+ Quantization_and_coding (LARc);
+}
--- /dev/null
+++ b/common/libsndfile/src/GSM610/preprocess.c
@@ -1,0 +1,113 @@
+/*
+ * 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/faac/common/libsndfile/src/GSM610/Attic/preprocess.c,v 1.1 2001/05/09 19:44:12 menno Exp $ */
+
+#include <stdio.h>
+#include <assert.h>
+
+#include "private.h"
+
+#include "gsm.h"
+#include "proto.h"
+
+/* 4.2.0 .. 4.2.3 PREPROCESSING SECTION
+ *
+ * After A-law to linear conversion (or directly from the
+ * Ato D converter) the following scaling is assumed for
+ * input to the RPE-LTP algorithm:
+ *
+ * in: 0.1.....................12
+ * S.v.v.v.v.v.v.v.v.v.v.v.v.*.*.*
+ *
+ * Where S is the sign bit, v a valid bit, and * a "don't care" bit.
+ * The original signal is called sop[..]
+ *
+ * out: 0.1................... 12
+ * S.S.v.v.v.v.v.v.v.v.v.v.v.v.0.0
+ */
+
+
+void Gsm_Preprocess P3((S, s, so),
+ struct gsm_state * S,
+ word * s,
+ word * so ) /* [0..159] IN/OUT */
+{
+
+ word z1 = S->z1;
+ longword L_z2 = S->L_z2;
+ word mp = S->mp;
+
+ word s1;
+ longword L_s2;
+
+ longword L_temp;
+
+ word msp, lsp;
+ word SO;
+
+ longword ltmp; /* for ADD */
+ ulongword utmp; /* for L_ADD */
+
+ register int k = 160;
+
+ while (k--) {
+
+ /* 4.2.1 Downscaling of the input signal
+ */
+ SO = SASR( *s, 3 ) << 2;
+ s++;
+
+ assert (SO >= -0x4000); /* downscaled by */
+ assert (SO <= 0x3FFC); /* previous routine. */
+
+
+ /* 4.2.2 Offset compensation
+ *
+ * This part implements a high-pass filter and requires extended
+ * arithmetic precision for the recursive part of this filter.
+ * The input of this procedure is the array so[0...159] and the
+ * output the array sof[ 0...159 ].
+ */
+ /* Compute the non-recursive part
+ */
+
+ s1 = SO - z1; /* s1 = gsm_sub( *so, z1 ); */
+ z1 = SO;
+
+ assert(s1 != MIN_WORD);
+
+ /* Compute the recursive part
+ */
+ L_s2 = s1;
+ L_s2 <<= 15;
+
+ /* Execution of a 31 bv 16 bits multiplication
+ */
+
+ msp = SASR( L_z2, 15 );
+ lsp = L_z2-((longword)msp<<15); /* gsm_L_sub(L_z2,(msp<<15)); */
+
+ L_s2 += GSM_MULT_R( lsp, 32735 );
+ L_temp = (longword)msp * 32735; /* GSM_L_MULT(msp,32735) >> 1;*/
+ L_z2 = GSM_L_ADD( L_temp, L_s2 );
+
+ /* Compute sof[k] with rounding
+ */
+ L_temp = GSM_L_ADD( L_z2, 16384 );
+
+ /* 4.2.3 Preemphasis
+ */
+
+ msp = GSM_MULT_R( mp, -28180 );
+ mp = SASR( L_temp, 15 );
+ *so++ = GSM_ADD( mp, msp );
+ }
+
+ S->z1 = z1;
+ S->L_z2 = L_z2;
+ S->mp = mp;
+}
--- /dev/null
+++ b/common/libsndfile/src/GSM610/private.h
@@ -1,0 +1,278 @@
+/*
+ * 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/faac/common/libsndfile/src/GSM610/Attic/private.h,v 1.1 2001/05/09 19:44:12 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
+#define WAV49
+/* Added by Erik de Castro Lopo */
+
+
+
+typedef short word; /* 16 bit signed int */
+typedef int longword; /* 32 bit signed int */
+
+typedef unsigned short uword; /* unsigned word */
+typedef unsigned int ulongword; /* unsigned longword */
+
+struct gsm_state {
+
+ word dp0[ 280 ];
+
+ word z1; /* preprocessing.c, Offset_com. */
+ longword L_z2; /* Offset_com. */
+ int mp; /* Preemphasis */
+
+ word u[8]; /* short_term_aly_filter.c */
+ word LARpp[2][8]; /* */
+ word j; /* */
+
+ word ltp_cut; /* long_term.c, LTP crosscorr. */
+ word nrp; /* 40 */ /* long_term.c, synthesis */
+ word v[9]; /* short_term.c, synthesis */
+ word msr; /* decoder.c, Postprocessing */
+
+ char verbose; /* only used if !NDEBUG */
+ char fast; /* only used if FAST */
+
+ char wav_fmt; /* only used if WAV49 defined */
+ unsigned char frame_index; /* odd/even chaining */
+ unsigned char frame_chain; /* half-byte to carry forward */
+};
+
+
+#define MIN_WORD (-32767 - 1)
+#define MAX_WORD 32767
+
+#define MIN_LONGWORD (-2147483647 - 1)
+#define MAX_LONGWORD 2147483647
+
+#ifdef SASR /* flag: >> is a signed arithmetic shift right */
+#undef SASR
+#define SASR(x, by) ((x) >> (by))
+#else
+#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);
+
+extern word gsm_div (word num, word denum);
+
+extern word gsm_add (word a, word b );
+extern 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);
+
+extern word gsm_abs (word a);
+
+extern word gsm_norm (longword a );
+
+extern longword gsm_L_asl (longword a, int n);
+extern word gsm_asl (word a, int n);
+
+extern longword gsm_L_asr (longword a, int n);
+extern word gsm_asr (word a, int n);
+
+/*
+ * Inlined functions from add.h
+ */
+
+/*
+ * #define GSM_MULT_R(a, b) (* word a, word b, !(a == b == MIN_WORD) *) \
+ * (0x0FFFF & SASR(((longword)(a) * (longword)(b) + 16384), 15))
+ */
+#define GSM_MULT_R(a, b) /* word a, word b, !(a == b == MIN_WORD) */ \
+ (SASR( ((longword)(a) * (longword)(b) + 16384), 15 ))
+
+# define GSM_MULT(a,b) /* word a, word b, !(a == b == MIN_WORD) */ \
+ (SASR( ((longword)(a) * (longword)(b)), 15 ))
+
+# define GSM_L_MULT(a, b) /* word a, word b */ \
+ (((longword)(a) * (longword)(b)) << 1)
+
+# define GSM_L_ADD(a, b) \
+ ( (a) < 0 ? ( (b) >= 0 ? (a) + (b) \
+ : (utmp = (ulongword)-((a) + 1) + (ulongword)-((b) + 1)) \
+ >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)utmp-2 ) \
+ : ((b) <= 0 ? (a) + (b) \
+ : (utmp = (ulongword)(a) + (ulongword)(b)) >= MAX_LONGWORD \
+ ? MAX_LONGWORD : utmp))
+
+/*
+ * # define GSM_ADD(a, b) \
+ * ((ltmp = (longword)(a) + (longword)(b)) >= MAX_WORD \
+ * ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp)
+ */
+/* Nonportable, but faster: */
+
+#define GSM_ADD(a, b) \
+ ((ulongword)((ltmp = (longword)(a) + (longword)(b)) - MIN_WORD) > \
+ MAX_WORD - MIN_WORD ? (ltmp > 0 ? MAX_WORD : MIN_WORD) : ltmp)
+
+# define GSM_SUB(a, b) \
+ ((ltmp = (longword)(a) - (longword)(b)) >= MAX_WORD \
+ ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp)
+
+# define GSM_ABS(a) ((a) < 0 ? ((a) == MIN_WORD ? MAX_WORD : -(a)) : (a))
+
+/* Use these if necessary:
+
+# define GSM_MULT_R(a, b) gsm_mult_r(a, b)
+# define GSM_MULT(a, b) gsm_mult(a, b)
+# define GSM_L_MULT(a, b) gsm_L_mult(a, b)
+
+# define GSM_L_ADD(a, b) gsm_L_add(a, b)
+# define GSM_ADD(a, b) gsm_add(a, b)
+# define GSM_SUB(a, b) gsm_sub(a, b)
+
+# define GSM_ABS(a) gsm_abs(a)
+
+*/
+
+/*
+ * More prototypes from implementations..
+ */
+extern void Gsm_Coder P((
+ struct gsm_state * S,
+ word * s, /* [0..159] samples IN */
+ word * LARc, /* [0..7] LAR coefficients OUT */
+ word * Nc, /* [0..3] LTP lag OUT */
+ word * bc, /* [0..3] coded LTP gain OUT */
+ word * Mc, /* [0..3] RPE grid selection OUT */
+ word * xmaxc,/* [0..3] Coded maximum amplitude OUT */
+ word * xMc /* [13*4] normalized RPE samples OUT */));
+
+extern void Gsm_Long_Term_Predictor P(( /* 4x for 160 samples */
+ struct gsm_state * S,
+ word * d, /* [0..39] residual signal IN */
+ word * dp, /* [-120..-1] d' IN */
+ word * e, /* [0..40] OUT */
+ word * dpp, /* [0..40] OUT */
+ word * Nc, /* correlation lag OUT */
+ word * bc /* gain factor OUT */));
+
+extern void Gsm_LPC_Analysis P((
+ struct gsm_state * S,
+ word * s, /* 0..159 signals IN/OUT */
+ word * LARc)); /* 0..7 LARc's OUT */
+
+extern void Gsm_Preprocess P((
+ struct gsm_state * S,
+ word * s, word * so));
+
+extern void Gsm_Encoding P((
+ struct gsm_state * S,
+ word * e,
+ word * ep,
+ word * xmaxc,
+ word * Mc,
+ word * xMc));
+
+extern void Gsm_Short_Term_Analysis_Filter P((
+ struct gsm_state * S,
+ word * LARc, /* coded log area ratio [0..7] IN */
+ word * d /* st res. signal [0..159] IN/OUT */));
+
+extern void Gsm_Decoder P((
+ struct gsm_state * S,
+ word * LARcr, /* [0..7] IN */
+ word * Ncr, /* [0..3] IN */
+ word * bcr, /* [0..3] IN */
+ word * Mcr, /* [0..3] IN */
+ word * xmaxcr, /* [0..3] IN */
+ word * xMcr, /* [0..13*4] IN */
+ word * s)); /* [0..159] OUT */
+
+extern void Gsm_Decoding P((
+ struct gsm_state * S,
+ word xmaxcr,
+ word Mcr,
+ word * xMcr, /* [0..12] IN */
+ word * erp)); /* [0..39] OUT */
+
+extern void Gsm_Long_Term_Synthesis_Filtering P((
+ struct gsm_state* S,
+ word Ncr,
+ word bcr,
+ word * erp, /* [0..39] IN */
+ word * drp)); /* [-120..-1] IN, [0..40] OUT */
+
+void Gsm_RPE_Decoding P((
+ struct gsm_state *S,
+ word xmaxcr,
+ word Mcr,
+ word * xMcr, /* [0..12], 3 bits IN */
+ word * erp)); /* [0..39] OUT */
+
+void Gsm_RPE_Encoding P((
+ 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 */
+
+extern void Gsm_Short_Term_Synthesis_Filter P((
+ 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 */
+
+extern void Gsm_Update_of_reconstructed_short_time_residual_signal P((
+ word * dpp, /* [0...39] IN */
+ word * ep, /* [0...39] IN */
+ word * dp)); /* [-120...-1] IN/OUT */
+
+/*
+ * Tables from table.c
+ */
+#ifndef GSM_TABLE_C
+
+extern word gsm_A[8], gsm_B[8], gsm_MIC[8], gsm_MAC[8];
+extern word gsm_INVA[8];
+extern word gsm_DLB[4], gsm_QLB[4];
+extern word gsm_H[11];
+extern word gsm_NRFAC[8];
+extern word gsm_FAC[8];
+
+#endif /* GSM_TABLE_C */
+
+/*
+ * Debugging
+ */
+#ifdef NDEBUG
+
+# define gsm_debug_words(a, b, c, d) /* nil */
+# define gsm_debug_longwords(a, b, c, d) /* nil */
+# define gsm_debug_word(a, b) /* nil */
+# define gsm_debug_longword(a, b) /* nil */
+
+#else /* !NDEBUG => DEBUG */
+
+ 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));
+
+#endif /* !NDEBUG */
+
+#include "unproto.h"
+
+#endif /* PRIVATE_H */
--- /dev/null
+++ b/common/libsndfile/src/GSM610/proto.h
@@ -1,0 +1,65 @@
+/*
+ * 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/faac/common/libsndfile/src/GSM610/Attic/proto.h,v 1.1 2001/05/09 19:44:12 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 */
--- /dev/null
+++ b/common/libsndfile/src/GSM610/rpe.c
@@ -1,0 +1,488 @@
+/*
+ * 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/faac/common/libsndfile/src/GSM610/Attic/rpe.c,v 1.1 2001/05/09 19:44:12 menno Exp $ */
+
+#include <stdio.h>
+#include <assert.h>
+
+#include "private.h"
+
+#include "gsm.h"
+#include "proto.h"
+
+/* 4.2.13 .. 4.2.17 RPE ENCODING SECTION
+ */
+
+/* 4.2.13 */
+
+static void Weighting_filter P2((e, x),
+ register word * e, /* signal [-5..0.39.44] IN */
+ word * x /* signal [0..39] OUT */
+)
+/*
+ * The coefficients of the weighting filter are stored in a table
+ * (see table 4.4). The following scaling is used:
+ *
+ * H[0..10] = integer( real_H[ 0..10] * 8192 );
+ */
+{
+ /* word wt[ 50 ]; */
+
+ register longword L_result;
+ register int k /* , i */ ;
+
+ /* Initialization of a temporary working array wt[0...49]
+ */
+
+ /* for (k = 0; k <= 4; k++) wt[k] = 0;
+ * for (k = 5; k <= 44; k++) wt[k] = *e++;
+ * for (k = 45; k <= 49; k++) wt[k] = 0;
+ *
+ * (e[-5..-1] and e[40..44] are allocated by the caller,
+ * are initially zero and are not written anywhere.)
+ */
+ e -= 5;
+
+ /* Compute the signal x[0..39]
+ */
+ for (k = 0; k <= 39; k++) {
+
+ L_result = 8192 >> 1;
+
+ /* for (i = 0; i <= 10; i++) {
+ * L_temp = GSM_L_MULT( wt[k+i], gsm_H[i] );
+ * L_result = GSM_L_ADD( L_result, L_temp );
+ * }
+ */
+
+#undef STEP
+#define STEP( i, H ) (e[ k + i ] * (longword)H)
+
+ /* Every one of these multiplications is done twice --
+ * but I don't see an elegant way to optimize this.
+ * Do you?
+ */
+
+#ifdef STUPID_COMPILER
+ L_result += STEP( 0, -134 ) ;
+ L_result += STEP( 1, -374 ) ;
+ /* + STEP( 2, 0 ) */
+ L_result += STEP( 3, 2054 ) ;
+ L_result += STEP( 4, 5741 ) ;
+ L_result += STEP( 5, 8192 ) ;
+ L_result += STEP( 6, 5741 ) ;
+ L_result += STEP( 7, 2054 ) ;
+ /* + STEP( 8, 0 ) */
+ L_result += STEP( 9, -374 ) ;
+ L_result += STEP( 10, -134 ) ;
+#else
+ L_result +=
+ STEP( 0, -134 )
+ + STEP( 1, -374 )
+ /* + STEP( 2, 0 ) */
+ + STEP( 3, 2054 )
+ + STEP( 4, 5741 )
+ + STEP( 5, 8192 )
+ + STEP( 6, 5741 )
+ + STEP( 7, 2054 )
+ /* + STEP( 8, 0 ) */
+ + STEP( 9, -374 )
+ + STEP(10, -134 )
+ ;
+#endif
+
+ /* L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x2) *)
+ * L_result = GSM_L_ADD( L_result, L_result ); (* scaling(x4) *)
+ *
+ * x[k] = SASR( L_result, 16 );
+ */
+
+ /* 2 adds vs. >>16 => 14, minus one shift to compensate for
+ * those we lost when replacing L_MULT by '*'.
+ */
+
+ L_result = SASR( L_result, 13 );
+ x[k] = ( L_result < MIN_WORD ? MIN_WORD
+ : (L_result > MAX_WORD ? MAX_WORD : L_result ));
+ }
+}
+
+/* 4.2.14 */
+
+static void RPE_grid_selection P3((x,xM,Mc_out),
+ word * x, /* [0..39] IN */
+ word * xM, /* [0..12] OUT */
+ word * Mc_out /* OUT */
+)
+/*
+ * The signal x[0..39] is used to select the RPE grid which is
+ * represented by Mc.
+ */
+{
+ /* register word temp1; */
+ register int /* m, */ i;
+ register longword L_result, L_temp;
+ longword EM; /* xxx should be L_EM? */
+ word Mc;
+
+ longword L_common_0_3;
+
+ EM = 0;
+ Mc = 0;
+
+ /* for (m = 0; m <= 3; m++) {
+ * L_result = 0;
+ *
+ *
+ * for (i = 0; i <= 12; i++) {
+ *
+ * temp1 = SASR( x[m + 3*i], 2 );
+ *
+ * assert(temp1 != MIN_WORD);
+ *
+ * L_temp = GSM_L_MULT( temp1, temp1 );
+ * L_result = GSM_L_ADD( L_temp, L_result );
+ * }
+ *
+ * if (L_result > EM) {
+ * Mc = m;
+ * EM = L_result;
+ * }
+ * }
+ */
+
+#undef STEP
+#define STEP( m, i ) L_temp = SASR( x[m + 3 * i], 2 ); \
+ L_result += L_temp * L_temp;
+
+ /* common part of 0 and 3 */
+
+ L_result = 0;
+ STEP( 0, 1 ); STEP( 0, 2 ); STEP( 0, 3 ); STEP( 0, 4 );
+ STEP( 0, 5 ); STEP( 0, 6 ); STEP( 0, 7 ); STEP( 0, 8 );
+ STEP( 0, 9 ); STEP( 0, 10); STEP( 0, 11); STEP( 0, 12);
+ L_common_0_3 = L_result;
+
+ /* i = 0 */
+
+ STEP( 0, 0 );
+ L_result <<= 1; /* implicit in L_MULT */
+ EM = L_result;
+
+ /* i = 1 */
+
+ L_result = 0;
+ STEP( 1, 0 );
+ STEP( 1, 1 ); STEP( 1, 2 ); STEP( 1, 3 ); STEP( 1, 4 );
+ STEP( 1, 5 ); STEP( 1, 6 ); STEP( 1, 7 ); STEP( 1, 8 );
+ STEP( 1, 9 ); STEP( 1, 10); STEP( 1, 11); STEP( 1, 12);
+ L_result <<= 1;
+ if (L_result > EM) {
+ Mc = 1;
+ EM = L_result;
+ }
+
+ /* i = 2 */
+
+ L_result = 0;
+ STEP( 2, 0 );
+ STEP( 2, 1 ); STEP( 2, 2 ); STEP( 2, 3 ); STEP( 2, 4 );
+ STEP( 2, 5 ); STEP( 2, 6 ); STEP( 2, 7 ); STEP( 2, 8 );
+ STEP( 2, 9 ); STEP( 2, 10); STEP( 2, 11); STEP( 2, 12);
+ L_result <<= 1;
+ if (L_result > EM) {
+ Mc = 2;
+ EM = L_result;
+ }
+
+ /* i = 3 */
+
+ L_result = L_common_0_3;
+ STEP( 3, 12 );
+ L_result <<= 1;
+ if (L_result > EM) {
+ Mc = 3;
+ EM = L_result;
+ }
+
+ /**/
+
+ /* Down-sampling by a factor 3 to get the selected xM[0..12]
+ * RPE sequence.
+ */
+ for (i = 0; i <= 12; i ++) xM[i] = x[Mc + 3*i];
+ *Mc_out = Mc;
+}
+
+/* 4.12.15 */
+
+static void APCM_quantization_xmaxc_to_exp_mant P3((xmaxc,exp_out,mant_out),
+ word xmaxc, /* IN */
+ word * exp_out, /* OUT */
+ word * mant_out ) /* OUT */
+{
+ word exp, mant;
+
+ /* Compute exponent and mantissa of the decoded version of xmaxc
+ */
+
+ exp = 0;
+ if (xmaxc > 15) exp = SASR(xmaxc, 3) - 1;
+ mant = xmaxc - (exp << 3);
+
+ if (mant == 0) {
+ exp = -4;
+ mant = 7;
+ }
+ else {
+ while (mant <= 7) {
+ mant = mant << 1 | 1;
+ exp--;
+ }
+ mant -= 8;
+ }
+
+ assert( exp >= -4 && exp <= 6 );
+ assert( mant >= 0 && mant <= 7 );
+
+ *exp_out = exp;
+ *mant_out = mant;
+}
+
+static void APCM_quantization P5((xM,xMc,mant_out,exp_out,xmaxc_out),
+ word * xM, /* [0..12] IN */
+
+ word * xMc, /* [0..12] OUT */
+ word * mant_out, /* OUT */
+ word * exp_out, /* OUT */
+ word * xmaxc_out /* OUT */
+)
+{
+ int i, itest;
+
+ word xmax, xmaxc, temp, temp1, temp2;
+ word exp, mant;
+
+
+ /* Find the maximum absolute value xmax of xM[0..12].
+ */
+
+ xmax = 0;
+ for (i = 0; i <= 12; i++) {
+ temp = xM[i];
+ temp = GSM_ABS(temp);
+ if (temp > xmax) xmax = temp;
+ }
+
+ /* Qantizing and coding of xmax to get xmaxc.
+ */
+
+ exp = 0;
+ temp = SASR( xmax, 9 );
+ itest = 0;
+
+ for (i = 0; i <= 5; i++) {
+
+ itest |= (temp <= 0);
+ temp = SASR( temp, 1 );
+
+ assert(exp <= 5);
+ if (itest == 0) exp++; /* exp = add (exp, 1) */
+ }
+
+ assert(exp <= 6 && exp >= 0);
+ temp = exp + 5;
+
+ assert(temp <= 11 && temp >= 0);
+ xmaxc = gsm_add( SASR(xmax, temp), exp << 3 );
+
+ /* Quantizing and coding of the xM[0..12] RPE sequence
+ * to get the xMc[0..12]
+ */
+
+ APCM_quantization_xmaxc_to_exp_mant( xmaxc, &exp, &mant );
+
+ /* This computation uses the fact that the decoded version of xmaxc
+ * can be calculated by using the exponent and the mantissa part of
+ * xmaxc (logarithmic table).
+ * So, this method avoids any division and uses only a scaling
+ * of the RPE samples by a function of the exponent. A direct
+ * multiplication by the inverse of the mantissa (NRFAC[0..7]
+ * found in table 4.5) gives the 3 bit coded version xMc[0..12]
+ * of the RPE samples.
+ */
+
+
+ /* Direct computation of xMc[0..12] using table 4.5
+ */
+
+ assert( exp <= 4096 && exp >= -4096);
+ assert( mant >= 0 && mant <= 7 );
+
+ temp1 = 6 - exp; /* normalization by the exponent */
+ temp2 = gsm_NRFAC[ mant ]; /* inverse mantissa */
+
+ for (i = 0; i <= 12; i++) {
+
+ assert(temp1 >= 0 && temp1 < 16);
+
+ temp = xM[i] << temp1;
+ temp = GSM_MULT( temp, temp2 );
+ temp = SASR(temp, 12);
+ xMc[i] = temp + 4; /* see note below */
+ }
+
+ /* NOTE: This equation is used to make all the xMc[i] positive.
+ */
+
+ *mant_out = mant;
+ *exp_out = exp;
+ *xmaxc_out = xmaxc;
+}
+
+/* 4.2.16 */
+
+static void APCM_inverse_quantization P4((xMc,mant,exp,xMp),
+ register word * xMc, /* [0..12] IN */
+ word mant,
+ word exp,
+ register word * xMp) /* [0..12] OUT */
+/*
+ * This part is for decoding the RPE sequence of coded xMc[0..12]
+ * samples to obtain the xMp[0..12] array. Table 4.6 is used to get
+ * the mantissa of xmaxc (FAC[0..7]).
+ */
+{
+ int i;
+ word temp, temp1, temp2, temp3;
+ longword ltmp;
+
+ assert( mant >= 0 && mant <= 7 );
+
+ temp1 = gsm_FAC[ mant ]; /* see 4.2-15 for mant */
+ temp2 = gsm_sub( 6, exp ); /* see 4.2-15 for exp */
+ temp3 = gsm_asl( 1, gsm_sub( temp2, 1 ));
+
+ for (i = 13; i--;) {
+
+ assert( *xMc <= 7 && *xMc >= 0 ); /* 3 bit unsigned */
+
+ /* temp = gsm_sub( *xMc++ << 1, 7 ); */
+ temp = (*xMc++ << 1) - 7; /* restore sign */
+ assert( temp <= 7 && temp >= -7 ); /* 4 bit signed */
+
+ temp <<= 12; /* 16 bit signed */
+ temp = GSM_MULT_R( temp1, temp );
+ temp = GSM_ADD( temp, temp3 );
+ *xMp++ = gsm_asr( temp, temp2 );
+ }
+}
+
+/* 4.2.17 */
+
+static void RPE_grid_positioning P3((Mc,xMp,ep),
+ word Mc, /* grid position IN */
+ register word * xMp, /* [0..12] IN */
+ register word * ep /* [0..39] OUT */
+)
+/*
+ * This procedure computes the reconstructed long term residual signal
+ * ep[0..39] for the LTP analysis filter. The inputs are the Mc
+ * which is the grid position selection and the xMp[0..12] decoded
+ * RPE samples which are upsampled by a factor of 3 by inserting zero
+ * values.
+ */
+{
+ int i = 13;
+
+ assert(0 <= Mc && Mc <= 3);
+
+ switch (Mc) {
+ case 3: *ep++ = 0;
+ case 2: do {
+ *ep++ = 0;
+ case 1: *ep++ = 0;
+ case 0: *ep++ = *xMp++;
+ } while (--i);
+ }
+ while (++Mc < 4) *ep++ = 0;
+
+ /*
+
+ int i, k;
+ for (k = 0; k <= 39; k++) ep[k] = 0;
+ for (i = 0; i <= 12; i++) {
+ ep[ Mc + (3*i) ] = xMp[i];
+ }
+ */
+}
+
+/* 4.2.18 */
+
+/* This procedure adds the reconstructed long term residual signal
+ * ep[0..39] to the estimated signal dpp[0..39] from the long term
+ * analysis filter to compute the reconstructed short term residual
+ * signal dp[-40..-1]; also the reconstructed short term residual
+ * array dp[-120..-41] is updated.
+ */
+
+#if 0 /* Has been inlined in code.c */
+void Gsm_Update_of_reconstructed_short_time_residual_signal P3((dpp, ep, dp),
+ word * dpp, /* [0...39] IN */
+ word * ep, /* [0...39] IN */
+ word * dp) /* [-120...-1] IN/OUT */
+{
+ int k;
+
+ for (k = 0; k <= 79; k++)
+ dp[ -120 + k ] = dp[ -80 + k ];
+
+ for (k = 0; k <= 39; k++)
+ dp[ -40 + k ] = gsm_add( ep[k], dpp[k] );
+}
+#endif /* Has been inlined in code.c */
+
+void Gsm_RPE_Encoding P5((S,e,xmaxc,Mc,xMc),
+
+ struct gsm_state * S,
+
+ word * e, /* -5..-1][0..39][40..44 IN/OUT */
+ word * xmaxc, /* OUT */
+ word * Mc, /* OUT */
+ word * xMc) /* [0..12] OUT */
+{
+ word x[40];
+ word xM[13], xMp[13];
+ word mant, exp;
+
+ Weighting_filter(e, x);
+ RPE_grid_selection(x, xM, Mc);
+
+ APCM_quantization( xM, xMc, &mant, &exp, xmaxc);
+ APCM_inverse_quantization( xMc, mant, exp, xMp);
+
+ RPE_grid_positioning( *Mc, xMp, e );
+
+}
+
+void Gsm_RPE_Decoding P5((S, xmaxcr, Mcr, xMcr, erp),
+ struct gsm_state * S,
+
+ word xmaxcr,
+ word Mcr,
+ word * xMcr, /* [0..12], 3 bits IN */
+ word * erp /* [0..39] OUT */
+)
+{
+ word exp, mant;
+ word xMp[ 13 ];
+
+ APCM_quantization_xmaxc_to_exp_mant( xmaxcr, &exp, &mant );
+ APCM_inverse_quantization( xMcr, mant, exp, xMp );
+ RPE_grid_positioning( Mcr, xMp, erp );
+
+}
--- /dev/null
+++ b/common/libsndfile/src/GSM610/short_term.c
@@ -1,0 +1,429 @@
+/*
+ * 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/faac/common/libsndfile/src/GSM610/Attic/short_term.c,v 1.1 2001/05/09 19:44:12 menno Exp $ */
+
+#include <stdio.h>
+#include <assert.h>
+
+#include "private.h"
+
+#include "gsm.h"
+#include "proto.h"
+
+/*
+ * SHORT TERM ANALYSIS FILTERING SECTION
+ */
+
+/* 4.2.8 */
+
+static void Decoding_of_the_coded_Log_Area_Ratios P2((LARc,LARpp),
+ word * LARc, /* coded log area ratio [0..7] IN */
+ word * LARpp) /* out: decoded .. */
+{
+ register word temp1 /* , temp2 */;
+ register long ltmp; /* for GSM_ADD */
+
+ /* This procedure requires for efficient implementation
+ * two tables.
+ *
+ * INVA[1..8] = integer( (32768 * 8) / real_A[1..8])
+ * MIC[1..8] = minimum value of the LARc[1..8]
+ */
+
+ /* Compute the LARpp[1..8]
+ */
+
+ /* for (i = 1; i <= 8; i++, B++, MIC++, INVA++, LARc++, LARpp++) {
+ *
+ * temp1 = GSM_ADD( *LARc, *MIC ) << 10;
+ * temp2 = *B << 1;
+ * temp1 = GSM_SUB( temp1, temp2 );
+ *
+ * assert(*INVA != MIN_WORD);
+ *
+ * temp1 = GSM_MULT_R( *INVA, temp1 );
+ * *LARpp = GSM_ADD( temp1, temp1 );
+ * }
+ */
+
+#undef STEP
+#define STEP( B, MIC, INVA ) \
+ temp1 = GSM_ADD( *LARc++, MIC ) << 10; \
+ temp1 = GSM_SUB( temp1, B << 1 ); \
+ temp1 = GSM_MULT_R( INVA, temp1 ); \
+ *LARpp++ = GSM_ADD( temp1, temp1 );
+
+ STEP( 0, -32, 13107 );
+ STEP( 0, -32, 13107 );
+ STEP( 2048, -16, 13107 );
+ STEP( -2560, -16, 13107 );
+
+ STEP( 94, -8, 19223 );
+ STEP( -1792, -8, 17476 );
+ STEP( -341, -4, 31454 );
+ STEP( -1144, -4, 29708 );
+
+ /* NOTE: the addition of *MIC is used to restore
+ * the sign of *LARc.
+ */
+}
+
+/* 4.2.9 */
+/* Computation of the quantized reflection coefficients
+ */
+
+/* 4.2.9.1 Interpolation of the LARpp[1..8] to get the LARp[1..8]
+ */
+
+/*
+ * Within each frame of 160 analyzed speech samples the short term
+ * analysis and synthesis filters operate with four different sets of
+ * coefficients, derived from the previous set of decoded LARs(LARpp(j-1))
+ * and the actual set of decoded LARs (LARpp(j))
+ *
+ * (Initial value: LARpp(j-1)[1..8] = 0.)
+ */
+
+static void Coefficients_0_12 P3((LARpp_j_1, LARpp_j, LARp),
+ register word * LARpp_j_1,
+ register word * LARpp_j,
+ register word * LARp)
+{
+ register int i;
+ register longword ltmp;
+
+ for (i = 1; i <= 8; i++, LARp++, LARpp_j_1++, LARpp_j++) {
+ *LARp = GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 ));
+ *LARp = GSM_ADD( *LARp, SASR( *LARpp_j_1, 1));
+ }
+}
+
+static void Coefficients_13_26 P3((LARpp_j_1, LARpp_j, LARp),
+ register word * LARpp_j_1,
+ register word * LARpp_j,
+ register word * LARp)
+{
+ register int i;
+ register longword ltmp;
+ for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) {
+ *LARp = GSM_ADD( SASR( *LARpp_j_1, 1), SASR( *LARpp_j, 1 ));
+ }
+}
+
+static void Coefficients_27_39 P3((LARpp_j_1, LARpp_j, LARp),
+ register word * LARpp_j_1,
+ register word * LARpp_j,
+ register word * LARp)
+{
+ register int i;
+ register longword ltmp;
+
+ for (i = 1; i <= 8; i++, LARpp_j_1++, LARpp_j++, LARp++) {
+ *LARp = GSM_ADD( SASR( *LARpp_j_1, 2 ), SASR( *LARpp_j, 2 ));
+ *LARp = GSM_ADD( *LARp, SASR( *LARpp_j, 1 ));
+ }
+}
+
+
+static void Coefficients_40_159 P2((LARpp_j, LARp),
+ register word * LARpp_j,
+ register word * LARp)
+{
+ register int i;
+
+ for (i = 1; i <= 8; i++, LARp++, LARpp_j++)
+ *LARp = *LARpp_j;
+}
+
+/* 4.2.9.2 */
+
+static void LARp_to_rp P1((LARp),
+ register word * LARp) /* [0..7] IN/OUT */
+/*
+ * The input of this procedure is the interpolated LARp[0..7] array.
+ * The reflection coefficients, rp[i], are used in the analysis
+ * filter and in the synthesis filter.
+ */
+{
+ register int i;
+ register word temp;
+ register longword ltmp;
+
+ for (i = 1; i <= 8; i++, LARp++) {
+
+ /* temp = GSM_ABS( *LARp );
+ *
+ * if (temp < 11059) temp <<= 1;
+ * else if (temp < 20070) temp += 11059;
+ * else temp = GSM_ADD( temp >> 2, 26112 );
+ *
+ * *LARp = *LARp < 0 ? -temp : temp;
+ */
+
+ if (*LARp < 0) {
+ temp = *LARp == MIN_WORD ? MAX_WORD : -(*LARp);
+ *LARp = - ((temp < 11059) ? temp << 1
+ : ((temp < 20070) ? temp + 11059
+ : GSM_ADD( temp >> 2, 26112 )));
+ } else {
+ temp = *LARp;
+ *LARp = (temp < 11059) ? temp << 1
+ : ((temp < 20070) ? temp + 11059
+ : GSM_ADD( temp >> 2, 26112 ));
+ }
+ }
+}
+
+
+/* 4.2.10 */
+static void Short_term_analysis_filtering P4((S,rp,k_n,s),
+ struct gsm_state * S,
+ register word * rp, /* [0..7] IN */
+ register int k_n, /* k_end - k_start */
+ register word * s /* [0..n-1] IN/OUT */
+)
+/*
+ * This procedure computes the short term residual signal d[..] to be fed
+ * to the RPE-LTP loop from the s[..] signal and from the local rp[..]
+ * array (quantized reflection coefficients). As the call of this
+ * procedure can be done in many ways (see the interpolation of the LAR
+ * coefficient), it is assumed that the computation begins with index
+ * k_start (for arrays d[..] and s[..]) and stops with index k_end
+ * (k_start and k_end are defined in 4.2.9.1). This procedure also
+ * needs to keep the array u[0..7] in memory for each call.
+ */
+{
+ register word * u = S->u;
+ register int i;
+ register word di, zzz, ui, sav, rpi;
+ register longword ltmp;
+
+ for (; k_n--; s++) {
+
+ di = sav = *s;
+
+ for (i = 0; i < 8; i++) { /* YYY */
+
+ ui = u[i];
+ rpi = rp[i];
+ u[i] = sav;
+
+ zzz = GSM_MULT_R(rpi, di);
+ sav = GSM_ADD( ui, zzz);
+
+ zzz = GSM_MULT_R(rpi, ui);
+ di = GSM_ADD( di, zzz );
+ }
+
+ *s = di;
+ }
+}
+
+#if defined(USE_FLOAT_MUL) && defined(FAST)
+
+static void Fast_Short_term_analysis_filtering P4((S,rp,k_n,s),
+ struct gsm_state * S,
+ register word * rp, /* [0..7] IN */
+ register int k_n, /* k_end - k_start */
+ register word * s /* [0..n-1] IN/OUT */
+)
+{
+ register word * u = S->u;
+ register int i;
+
+ float uf[8],
+ rpf[8];
+
+ register float scalef = 3.0517578125e-5;
+ register float sav, di, temp;
+
+ for (i = 0; i < 8; ++i) {
+ uf[i] = u[i];
+ rpf[i] = rp[i] * scalef;
+ }
+ for (; k_n--; s++) {
+ sav = di = *s;
+ for (i = 0; i < 8; ++i) {
+ register float rpfi = rpf[i];
+ register float ufi = uf[i];
+
+ uf[i] = sav;
+ temp = rpfi * di + ufi;
+ di += rpfi * ufi;
+ sav = temp;
+ }
+ *s = di;
+ }
+ for (i = 0; i < 8; ++i) u[i] = uf[i];
+}
+#endif /* ! (defined (USE_FLOAT_MUL) && defined (FAST)) */
+
+static void Short_term_synthesis_filtering P5((S,rrp,k,wt,sr),
+ struct gsm_state * S,
+ register word * rrp, /* [0..7] IN */
+ register int k, /* k_end - k_start */
+ register word * wt, /* [0..k-1] IN */
+ register word * sr /* [0..k-1] OUT */
+)
+{
+ register word * v = S->v;
+ register int i;
+ register word sri, tmp1, tmp2;
+ register longword ltmp; /* for GSM_ADD & GSM_SUB */
+
+ while (k--) {
+ sri = *wt++;
+ for (i = 8; i--;) {
+
+ /* sri = GSM_SUB( sri, gsm_mult_r( rrp[i], v[i] ) );
+ */
+ tmp1 = rrp[i];
+ tmp2 = v[i];
+ tmp2 = ( tmp1 == MIN_WORD && tmp2 == MIN_WORD
+ ? MAX_WORD
+ : 0x0FFFF & (( (longword)tmp1 * (longword)tmp2
+ + 16384) >> 15)) ;
+
+ sri = GSM_SUB( sri, tmp2 );
+
+ /* v[i+1] = GSM_ADD( v[i], gsm_mult_r( rrp[i], sri ) );
+ */
+ tmp1 = ( tmp1 == MIN_WORD && sri == MIN_WORD
+ ? MAX_WORD
+ : 0x0FFFF & (( (longword)tmp1 * (longword)sri
+ + 16384) >> 15)) ;
+
+ v[i+1] = GSM_ADD( v[i], tmp1);
+ }
+ *sr++ = v[0] = sri;
+ }
+}
+
+
+#if defined(FAST) && defined(USE_FLOAT_MUL)
+
+static void Fast_Short_term_synthesis_filtering P5((S,rrp,k,wt,sr),
+ struct gsm_state * S,
+ register word * rrp, /* [0..7] IN */
+ register int k, /* k_end - k_start */
+ register word * wt, /* [0..k-1] IN */
+ register word * sr /* [0..k-1] OUT */
+)
+{
+ register word * v = S->v;
+ register int i;
+
+ float va[9], rrpa[8];
+ register float scalef = 3.0517578125e-5, temp;
+
+ for (i = 0; i < 8; ++i) {
+ va[i] = v[i];
+ rrpa[i] = (float)rrp[i] * scalef;
+ }
+ while (k--) {
+ register float sri = *wt++;
+ for (i = 8; i--;) {
+ sri -= rrpa[i] * va[i];
+ if (sri < -32768.) sri = -32768.;
+ else if (sri > 32767.) sri = 32767.;
+
+ temp = va[i] + rrpa[i] * sri;
+ if (temp < -32768.) temp = -32768.;
+ else if (temp > 32767.) temp = 32767.;
+ va[i+1] = temp;
+ }
+ *sr++ = va[0] = sri;
+ }
+ for (i = 0; i < 9; ++i) v[i] = va[i];
+}
+
+#endif /* defined(FAST) && defined(USE_FLOAT_MUL) */
+
+void Gsm_Short_Term_Analysis_Filter P3((S,LARc,s),
+
+ struct gsm_state * S,
+
+ word * LARc, /* coded log area ratio [0..7] IN */
+ word * s /* signal [0..159] IN/OUT */
+)
+{
+ word * LARpp_j = S->LARpp[ S->j ];
+ word * LARpp_j_1 = S->LARpp[ S->j ^= 1 ];
+
+ word LARp[8];
+
+#undef FILTER
+#if defined(FAST) && defined(USE_FLOAT_MUL)
+# define FILTER (* (S->fast \
+ ? Fast_Short_term_analysis_filtering \
+ : Short_term_analysis_filtering ))
+
+#else
+# define FILTER Short_term_analysis_filtering
+#endif
+
+ Decoding_of_the_coded_Log_Area_Ratios( LARc, LARpp_j );
+
+ Coefficients_0_12( LARpp_j_1, LARpp_j, LARp );
+ LARp_to_rp( LARp );
+ FILTER( S, LARp, 13, s);
+
+ Coefficients_13_26( LARpp_j_1, LARpp_j, LARp);
+ LARp_to_rp( LARp );
+ FILTER( S, LARp, 14, s + 13);
+
+ Coefficients_27_39( LARpp_j_1, LARpp_j, LARp);
+ LARp_to_rp( LARp );
+ FILTER( S, LARp, 13, s + 27);
+
+ Coefficients_40_159( LARpp_j, LARp);
+ LARp_to_rp( LARp );
+ FILTER( S, LARp, 120, s + 40);
+}
+
+void Gsm_Short_Term_Synthesis_Filter P4((S, LARcr, wt, s),
+ struct gsm_state * S,
+
+ word * LARcr, /* received log area ratios [0..7] IN */
+ word * wt, /* received d [0..159] IN */
+
+ word * s /* signal s [0..159] OUT */
+)
+{
+ word * LARpp_j = S->LARpp[ S->j ];
+ word * LARpp_j_1 = S->LARpp[ S->j ^=1 ];
+
+ word LARp[8];
+
+#undef FILTER
+#if defined(FAST) && defined(USE_FLOAT_MUL)
+
+# define FILTER (* (S->fast \
+ ? Fast_Short_term_synthesis_filtering \
+ : Short_term_synthesis_filtering ))
+#else
+# define FILTER Short_term_synthesis_filtering
+#endif
+
+ Decoding_of_the_coded_Log_Area_Ratios( LARcr, LARpp_j );
+
+ Coefficients_0_12( LARpp_j_1, LARpp_j, LARp );
+ LARp_to_rp( LARp );
+ FILTER( S, LARp, 13, wt, s );
+
+ Coefficients_13_26( LARpp_j_1, LARpp_j, LARp);
+ LARp_to_rp( LARp );
+ FILTER( S, LARp, 14, wt + 13, s + 13 );
+
+ Coefficients_27_39( LARpp_j_1, LARpp_j, LARp);
+ LARp_to_rp( LARp );
+ FILTER( S, LARp, 13, wt + 27, s + 27 );
+
+ Coefficients_40_159( LARpp_j, LARp );
+ LARp_to_rp( LARp );
+ FILTER(S, LARp, 120, wt + 40, s + 40);
+}
--- /dev/null
+++ b/common/libsndfile/src/GSM610/table.c
@@ -1,0 +1,63 @@
+/*
+ * 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/faac/common/libsndfile/src/GSM610/Attic/table.c,v 1.1 2001/05/09 19:44:12 menno Exp $ */
+
+/* Most of these tables are inlined at their point of use.
+ */
+
+/* 4.4 TABLES USED IN THE FIXED POINT IMPLEMENTATION OF THE RPE-LTP
+ * CODER AND DECODER
+ *
+ * (Most of them inlined, so watch out.)
+ */
+
+#define GSM_TABLE_C
+#include "private.h"
+#include "gsm.h"
+
+/* Table 4.1 Quantization of the Log.-Area Ratios
+ */
+/* i 1 2 3 4 5 6 7 8 */
+word gsm_A[8] = {20480, 20480, 20480, 20480, 13964, 15360, 8534, 9036};
+word gsm_B[8] = { 0, 0, 2048, -2560, 94, -1792, -341, -1144};
+word gsm_MIC[8] = { -32, -32, -16, -16, -8, -8, -4, -4 };
+word gsm_MAC[8] = { 31, 31, 15, 15, 7, 7, 3, 3 };
+
+
+/* Table 4.2 Tabulation of 1/A[1..8]
+ */
+word gsm_INVA[8]={ 13107, 13107, 13107, 13107, 19223, 17476, 31454, 29708 };
+
+
+/* Table 4.3a Decision level of the LTP gain quantizer
+ */
+/* bc 0 1 2 3 */
+word gsm_DLB[4] = { 6554, 16384, 26214, 32767 };
+
+
+/* Table 4.3b Quantization levels of the LTP gain quantizer
+ */
+/* bc 0 1 2 3 */
+word gsm_QLB[4] = { 3277, 11469, 21299, 32767 };
+
+
+/* Table 4.4 Coefficients of the weighting filter
+ */
+/* i 0 1 2 3 4 5 6 7 8 9 10 */
+word gsm_H[11] = {-134, -374, 0, 2054, 5741, 8192, 5741, 2054, 0, -374, -134 };
+
+
+/* Table 4.5 Normalized inverse mantissa used to compute xM/xmax
+ */
+/* i 0 1 2 3 4 5 6 7 */
+word gsm_NRFAC[8] = { 29128, 26215, 23832, 21846, 20165, 18725, 17476, 16384 };
+
+
+/* Table 4.6 Normalized direct mantissa used to compute xM/xmax
+ */
+/* i 0 1 2 3 4 5 6 7 */
+word gsm_FAC[8] = { 18431, 20479, 22527, 24575, 26623, 28671, 30719, 32767 };
--- /dev/null
+++ b/common/libsndfile/src/GSM610/unproto.h
@@ -1,0 +1,23 @@
+/*
+ * 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/faac/common/libsndfile/src/GSM610/Attic/unproto.h,v 1.1 2001/05/09 19:44:12 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 */
--- /dev/null
+++ b/common/libsndfile/src/Makefile.am
@@ -1,0 +1,22 @@
+# 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 pcm.h ulaw.h alaw.h wav.h au.h
+
+COMMON = common.c newpcm.c pcm.c ulaw.c alaw.c sndfile.c
+FILESPECIFIC = aiff.c au.c au_g72x.c paf.c raw.c svx.c wav.c wav_float.c \
+ wav_gsm610.c wav_ima_adpcm.c wav_ms_adpcm.c
+
+libsndfile_la_SOURCES = $(FILESPECIFIC) $(COMMON) sndfile.h common.h
+libsndfile_la_LDFLAGS = -version-info @SHARED_VERSION_INFO@
+libsndfile_la_LIBADD = GSM610/libgsm.la G72x/libg72x.la
+
+# Disable autoheader.
+AUTOHEADER=echo
--- /dev/null
+++ b/common/libsndfile/src/Makefile.in
@@ -1,0 +1,489 @@
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# This file was automatically generated
+# DO NOT EDIT!
+#
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_alias = @build_alias@
+build_triplet = @build@
+host_alias = @host_alias@
+host_triplet = @host@
+target_alias = @target_alias@
+target_triplet = @target@
+AS = @AS@
+CC = @CC@
+DLLTOOL = @DLLTOOL@
+LD = @LD@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+MAKEINFO = @MAKEINFO@
+NM = @NM@
+OBJDUMP = @OBJDUMP@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+VERSION = @VERSION@
+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 pcm.h ulaw.h alaw.h wav.h au.h
+
+COMMON = common.c newpcm.c pcm.c ulaw.c alaw.c sndfile.c
+FILESPECIFIC = aiff.c au.c au_g72x.c paf.c raw.c svx.c wav.c wav_float.c wav_gsm610.c wav_ima_adpcm.c wav_ms_adpcm.c
+
+
+libsndfile_la_SOURCES = $(FILESPECIFIC) $(COMMON) sndfile.h common.h
+libsndfile_la_LDFLAGS = -version-info @SHARED_VERSION_INFO@
+libsndfile_la_LIBADD = GSM610/libgsm.la G72x/libg72x.la
+
+# Disable autoheader.
+AUTOHEADER = echo
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES =
+LTLIBRARIES = $(lib_LTLIBRARIES)
+
+
+DEFS = @DEFS@ -I. -I$(srcdir) -I.
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+libsndfile_la_DEPENDENCIES = GSM610/libgsm.la G72x/libg72x.la
+libsndfile_la_OBJECTS = aiff.lo au.lo au_g72x.lo paf.lo raw.lo svx.lo \
+wav.lo wav_float.lo wav_gsm610.lo wav_ima_adpcm.lo wav_ms_adpcm.lo \
+common.lo newpcm.lo pcm.lo ulaw.lo alaw.lo sndfile.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)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+HEADERS = $(include_HEADERS) $(noinst_HEADERS)
+
+DIST_COMMON = ./stamp-h.in Makefile.am Makefile.in config.h.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+SOURCES = $(libsndfile_la_SOURCES)
+OBJECTS = $(libsndfile_la_OBJECTS)
+
+all: all-redirect
+.SUFFIXES:
+.SUFFIXES: .S .c .lo .o .s
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps src/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+config.h: stamp-h
+ @if test ! -f $@; then \
+ rm -f stamp-h; \
+ $(MAKE) stamp-h; \
+ else :; fi
+stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES= CONFIG_HEADERS=src/config.h \
+ $(SHELL) ./config.status
+ @echo timestamp > stamp-h 2> /dev/null
+$(srcdir)/config.h.in: $(srcdir)/stamp-h.in
+ @if test ! -f $@; then \
+ rm -f $(srcdir)/stamp-h.in; \
+ $(MAKE) $(srcdir)/stamp-h.in; \
+ else :; fi
+$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOHEADER)
+ @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null
+
+mostlyclean-hdr:
+
+clean-hdr:
+
+distclean-hdr:
+ -rm -f config.h
+
+maintainer-clean-hdr:
+
+mostlyclean-libLTLIBRARIES:
+
+clean-libLTLIBRARIES:
+ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+
+distclean-libLTLIBRARIES:
+
+maintainer-clean-libLTLIBRARIES:
+
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(libdir)
+ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p"; \
+ $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(libdir)/$$p; \
+ else :; fi; \
+ done
+
+uninstall-libLTLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ list='$(lib_LTLIBRARIES)'; for p in $$list; do \
+ $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \
+ done
+
+.c.o:
+ $(COMPILE) -c $<
+
+.s.o:
+ $(COMPILE) -c $<
+
+.S.o:
+ $(COMPILE) -c $<
+
+mostlyclean-compile:
+ -rm -f *.o core *.core
+
+clean-compile:
+
+distclean-compile:
+ -rm -f *.tab.c
+
+maintainer-clean-compile:
+
+.c.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+.s.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+.S.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+
+maintainer-clean-libtool:
+
+libsndfile.la: $(libsndfile_la_OBJECTS) $(libsndfile_la_DEPENDENCIES)
+ $(LINK) -rpath $(libdir) $(libsndfile_la_LDFLAGS) $(libsndfile_la_OBJECTS) $(libsndfile_la_LIBADD) $(LIBS)
+
+install-includeHEADERS: $(include_HEADERS)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(includedir)
+ @list='$(include_HEADERS)'; for p in $$list; do \
+ if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \
+ echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/$$p"; \
+ $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/$$p; \
+ done
+
+uninstall-includeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ list='$(include_HEADERS)'; for p in $$list; do \
+ rm -f $(DESTDIR)$(includedir)/$$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,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+
+@SET_MAKE@
+
+all-recursive install-data-recursive install-exec-recursive \
+installdirs-recursive install-recursive uninstall-recursive \
+check-recursive installcheck-recursive info-recursive dvi-recursive:
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
+ rev="$$subdir $$rev"; \
+ test "$$subdir" = "." && dot_seen=yes; \
+ done; \
+ test "$$dot_seen" = "no" && rev=". $$rev"; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = src
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+ for subdir in $(DIST_SUBDIRS); do \
+ if test "$$subdir" = .; then :; else \
+ test -d $(distdir)/$$subdir \
+ || mkdir $(distdir)/$$subdir \
+ || exit 1; \
+ chmod 777 $(distdir)/$$subdir; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \
+ || exit 1; \
+ fi; \
+ done
+aiff.lo aiff.o : aiff.c sndfile.h config.h sfendian.h common.h pcm.h
+alaw.lo alaw.o : alaw.c sndfile.h common.h
+au.lo au.o : au.c sndfile.h config.h sfendian.h common.h pcm.h au.h \
+ ulaw.h alaw.h
+au_g721.lo au_g721.o : au_g721.c sndfile.h config.h sfendian.h common.h \
+ au.h G72x/g72x.h
+au_g721_32.lo au_g721_32.o : au_g721_32.c sndfile.h config.h sfendian.h \
+ common.h au.h G72x/g72x.h
+au_g72x.lo au_g72x.o : au_g72x.c sndfile.h config.h sfendian.h common.h \
+ au.h G72x/g72x.h
+common.lo common.o : common.c sndfile.h sfendian.h config.h common.h
+newpcm.lo newpcm.o : newpcm.c config.h sndfile.h common.h sfendian.h \
+ pcm.h
+paf.lo paf.o : paf.c sndfile.h config.h sfendian.h common.h pcm.h
+pcm.lo pcm.o : pcm.c config.h sndfile.h common.h sfendian.h pcm.h
+raw.lo raw.o : raw.c sndfile.h config.h sfendian.h common.h pcm.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 pcm.h
+ulaw.lo ulaw.o : ulaw.c sndfile.h common.h
+wav.lo wav.o : wav.c sndfile.h config.h sfendian.h common.h pcm.h ulaw.h \
+ alaw.h wav.h
+wav_float.lo wav_float.o : wav_float.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 \
+ 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 common.h wav.h
+wav_ms_adpcm.lo wav_ms_adpcm.o : wav_ms_adpcm.c sndfile.h config.h \
+ sfendian.h common.h wav.h
+
+info-am:
+info: info-recursive
+dvi-am:
+dvi: dvi-recursive
+check-am: all-am
+check: check-recursive
+installcheck-am:
+installcheck: installcheck-recursive
+all-recursive-am: config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+install-exec-am: install-libLTLIBRARIES
+install-exec: install-exec-recursive
+
+install-data-am: install-includeHEADERS
+install-data: install-data-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-recursive
+uninstall-am: uninstall-libLTLIBRARIES uninstall-includeHEADERS
+uninstall: uninstall-recursive
+all-am: Makefile $(LTLIBRARIES) $(HEADERS) config.h
+all-redirect: all-recursive-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs: installdirs-recursive
+installdirs-am:
+ $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir)
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-hdr mostlyclean-libLTLIBRARIES \
+ mostlyclean-compile mostlyclean-libtool \
+ mostlyclean-tags mostlyclean-generic
+
+mostlyclean: mostlyclean-recursive
+
+clean-am: clean-hdr clean-libLTLIBRARIES clean-compile clean-libtool \
+ clean-tags clean-generic mostlyclean-am
+
+clean: clean-recursive
+
+distclean-am: distclean-hdr distclean-libLTLIBRARIES distclean-compile \
+ distclean-libtool distclean-tags distclean-generic \
+ clean-am
+ -rm -f libtool
+
+distclean: distclean-recursive
+
+maintainer-clean-am: maintainer-clean-hdr \
+ maintainer-clean-libLTLIBRARIES \
+ maintainer-clean-compile maintainer-clean-libtool \
+ 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."
+
+maintainer-clean: maintainer-clean-recursive
+
+.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
+mostlyclean-libLTLIBRARIES distclean-libLTLIBRARIES \
+clean-libLTLIBRARIES maintainer-clean-libLTLIBRARIES \
+uninstall-libLTLIBRARIES install-libLTLIBRARIES mostlyclean-compile \
+distclean-compile clean-compile maintainer-clean-compile \
+mostlyclean-libtool distclean-libtool clean-libtool \
+maintainer-clean-libtool uninstall-includeHEADERS \
+install-includeHEADERS install-data-recursive uninstall-data-recursive \
+install-exec-recursive uninstall-exec-recursive installdirs-recursive \
+uninstalldirs-recursive all-recursive check-recursive \
+installcheck-recursive info-recursive dvi-recursive \
+mostlyclean-recursive distclean-recursive clean-recursive \
+maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
+distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
+dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \
+install-exec-am install-exec install-data-am install-data install-am \
+install uninstall-am uninstall all-redirect all-am all installdirs-am \
+installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+# 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.
+.NOEXPORT:
--- /dev/null
+++ b/common/libsndfile/src/aiff.c
@@ -1,0 +1,512 @@
+/*
+** Copyright (C) 1999-2000 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 "sndfile.h"
+#include "config.h"
+#include "sfendian.h"
+#include "common.h"
+#include "pcm.h"
+
+
+/*------------------------------------------------------------------------------
+ * 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
+
+#define FORM_MARKER (MAKE_MARKER ('F', 'O', 'R', 'M'))
+#define AIFF_MARKER (MAKE_MARKER ('A', 'I', 'F', 'F'))
+#define AIFC_MARKER (MAKE_MARKER ('A', 'I', 'F', 'C'))
+#define COMM_MARKER (MAKE_MARKER ('C', 'O', 'M', 'M'))
+#define SSND_MARKER (MAKE_MARKER ('S', 'S', 'N', 'D'))
+#define MARK_MARKER (MAKE_MARKER ('M', 'A', 'R', 'K'))
+#define INST_MARKER (MAKE_MARKER ('I', 'N', 'S', 'T'))
+#define APPL_MARKER (MAKE_MARKER ('A', 'P', 'P', 'L'))
+
+#define c_MARKER (MAKE_MARKER ('(', 'c', ')', ' '))
+#define NAME_MARKER (MAKE_MARKER ('N', 'A', 'M', 'E'))
+#define AUTH_MARKER (MAKE_MARKER ('A', 'U', 'T', 'H'))
+#define ANNO_MARKER (MAKE_MARKER ('A', 'N', 'N', 'O'))
+#define FVER_MARKER (MAKE_MARKER ('F', 'V', 'E', 'R'))
+
+#define NONE_MARKER (MAKE_MARKER ('N', 'O', 'N', 'E'))
+
+#define REAL_COMM_SIZE (2+4+2+10)
+
+/*------------------------------------------------------------------------------
+ * Typedefs for file chunks.
+ */
+
+typedef struct
+{ short numChannels ;
+ unsigned int numSampleFrames ;
+ short sampleSize ;
+ unsigned char sampleRate [10] ;
+} COMM_CHUNK ;
+
+typedef struct
+{ unsigned int offset ;
+ unsigned int blocksize ;
+} SSND_CHUNK ;
+
+
+typedef struct
+{ short playMode;
+ int beginLoop;
+ int endLoop;
+} INST_CHUNK ;
+
+/*------------------------------------------------------------------------------
+ * Private static functions.
+ */
+
+static int aiff_close (SF_PRIVATE *psf) ;
+
+static int tenbytefloat2int (unsigned char *bytes) ;
+static void uint2tenbytefloat (unsigned int num, unsigned char *bytes) ;
+
+static
+void endswap_comm_fmt (COMM_CHUNK *comm)
+{ 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 */
+
+
+/*------------------------------------------------------------------------------
+** Public functions.
+*/
+
+int aiff_open_read (SF_PRIVATE *psf)
+{ COMM_CHUNK comm_fmt ;
+ SSND_CHUNK ssnd_fmt ;
+ int marker, dword ;
+ long FORMsize, commsize, SSNDsize ;
+ int filetype, parsestage = 0, done = 0 ;
+
+ while (! done)
+ { fread (&marker, sizeof (marker), 1, psf->file) ;
+ switch (marker)
+ { case FORM_MARKER :
+ if (parsestage != 0)
+ return SFE_AIFF_NO_FORM ;
+ fread (&dword, sizeof (dword), 1, psf->file) ;
+ FORMsize = BE2H_INT (dword) ;
+
+ if (FORMsize != psf->filelength - 2 * sizeof (dword))
+ { dword = psf->filelength - 2 * sizeof (dword);
+ psf_sprintf (psf, "FORM : %d (should be %d)\n", FORMsize, dword) ;
+ FORMsize = dword ;
+ }
+ else
+ psf_sprintf (psf, "FORM : %d\n", FORMsize) ;
+ parsestage = 1 ;
+ break ;
+
+ case AIFC_MARKER :
+ case AIFF_MARKER :
+ if (parsestage != 1)
+ return SFE_AIFF_NO_FORM ;
+ filetype = marker ;
+ psf_sprintf (psf, " %D\n", marker) ;
+ parsestage = 2 ;
+ break ;
+
+ case COMM_MARKER :
+ if (parsestage != 2)
+ return SFE_AIFF_NO_FORM ;
+ fread (&dword, sizeof (dword), 1, psf->file) ;
+ commsize = BE2H_INT (dword) ;
+
+ /* The COMM chunk has an int aligned to a word boundary. Some procesors
+ ** are not able to deal with this (ie bus fault) so we have to take
+ ** special care.
+ */
+
+ fread (&(comm_fmt.numChannels), sizeof (comm_fmt.numChannels), 1, psf->file) ;
+ fread (&(comm_fmt.numSampleFrames), sizeof (comm_fmt.numSampleFrames), 1, psf->file) ;
+ fread (&(comm_fmt.sampleSize), sizeof (comm_fmt.sampleSize), 1, psf->file) ;
+ fread (&(comm_fmt.sampleRate), sizeof (comm_fmt.sampleRate), 1, psf->file) ;
+
+ if (CPU_IS_LITTLE_ENDIAN)
+ endswap_comm_fmt (&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.format = (SF_FORMAT_AIFF | SF_FORMAT_PCM);
+ psf->sf.sections = 1 ;
+
+ psf_sprintf (psf, " COMM : %d\n", commsize) ;
+ psf_sprintf (psf, " Sample Rate : %d\n", psf->sf.samplerate) ;
+ psf_sprintf (psf, " Samples : %d\n", comm_fmt.numSampleFrames) ;
+ psf_sprintf (psf, " Channels : %d\n", comm_fmt.numChannels) ;
+ psf_sprintf (psf, " Sample Size : %d\n", comm_fmt.sampleSize) ;
+
+ if (commsize > REAL_COMM_SIZE)
+ { fread (&dword, sizeof (dword), 1, psf->file) ;
+ if (dword != NONE_MARKER)
+ { psf_sprintf (psf, "AIFC : Unimplemented format : %D\n", dword) ;
+ return SFE_UNIMPLEMENTED ;
+ } ;
+ fseek (psf->file, commsize - (long) (sizeof (dword) + REAL_COMM_SIZE), SEEK_CUR) ;
+ } ;
+
+ parsestage = 3 ;
+ break ;
+
+ case SSND_MARKER :
+ if (parsestage != 3)
+ return SFE_AIFF_NO_SSND ;
+ fread (&dword, sizeof (dword), 1, psf->file) ;
+ SSNDsize = BE2H_INT (dword) ;
+
+ fread (&ssnd_fmt, sizeof (SSND_CHUNK), 1, psf->file) ;
+ if (CPU_IS_LITTLE_ENDIAN)
+ endswap_ssnd_fmt (&ssnd_fmt) ;
+
+ psf->dataoffset = ftell (psf->file) ;
+ psf->datalength = psf->filelength - psf->dataoffset ;
+ if (SSNDsize != psf->datalength + sizeof (SSND_CHUNK))
+ psf_sprintf (psf, " SSND : %d (should be %d)\n", SSNDsize, psf->datalength + sizeof (SSND_CHUNK)) ;
+ else
+ psf_sprintf (psf, " SSND : %d\n", SSNDsize) ;
+
+ psf_sprintf (psf, " Offset : %d\n", ssnd_fmt.offset) ;
+ psf_sprintf (psf, " Block Size : %d\n", ssnd_fmt.blocksize) ;
+
+
+ fseek (psf->file, psf->datalength, SEEK_CUR) ;
+ dword = ftell (psf->file) ;
+ if (dword != (off_t) (psf->dataoffset + psf->datalength))
+ psf_sprintf (psf, "*** fseek past end error ***\n", dword, psf->dataoffset + psf->datalength) ;
+ parsestage = 4 ;
+ break ;
+
+ case NAME_MARKER :
+ case AUTH_MARKER :
+ case ANNO_MARKER :
+ case c_MARKER :
+ case FVER_MARKER :
+ if (parsestage < 2)
+ return SFE_AIFF_NO_FORM ;
+ fread (&dword, sizeof (dword), 1, psf->file) ;
+ dword = BE2H_INT (dword) ;
+ psf_sprintf (psf, " %D : %d\n", marker, dword) ;
+ fseek (psf->file, dword, SEEK_CUR) ;
+ break ;
+
+ case MARK_MARKER :
+ case INST_MARKER :
+ case APPL_MARKER :
+ if (parsestage < 2)
+ return SFE_AIFF_NO_FORM ;
+ fread (&dword, sizeof (dword), 1, psf->file) ;
+ dword = BE2H_INT (dword) ;
+ psf_sprintf (psf, " %D : %d\n", marker, dword) ;
+ fseek (psf->file, dword, SEEK_CUR) ;
+ break ;
+
+ default :
+ if (isprint ((marker >> 24) & 0xFF) && isprint ((marker >> 16) & 0xFF)
+ && isprint ((marker >> 8) & 0xFF) && isprint (marker & 0xFF))
+ { fread (&dword, sizeof (dword), 1, psf->file) ;
+ psf_sprintf (psf, "%D : %d (unknown marker)\n", marker, dword) ;
+ fseek (psf->file, dword, SEEK_CUR) ;
+ break ;
+ } ;
+ if ((dword = ftell (psf->file)) & 0x03)
+ { psf_sprintf (psf, " Unknown chunk marker at position %d. Resynching.\n", dword - 4) ;
+ fseek (psf->file, -3, SEEK_CUR) ;
+ break ;
+ } ;
+ psf_sprintf (psf, "*** Unknown chunk marker : %X. Exiting parser.\n", marker) ;
+ done = 1 ;
+ break ;
+ } ; /* switch (marker) */
+
+ if (ferror (psf->file))
+ { psf_sprintf (psf, "*** Error on file handle. ***\n") ;
+ clearerr (psf->file) ;
+ break ;
+ } ;
+
+ if (ftell (psf->file) >= (off_t) (psf->filelength - (2 * sizeof (dword))))
+ break ;
+ } ; /* while (1) */
+
+ if (! psf->dataoffset)
+ return SFE_AIFF_NO_DATA ;
+
+ psf->current = 0 ;
+ psf->endian = SF_ENDIAN_BIG ; /* All AIF* files are big endian. */
+ psf->sf.seekable = SF_TRUE ;
+ psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
+
+ psf->blockwidth = psf->sf.channels * psf->bytewidth ;
+
+ fseek (psf->file, psf->dataoffset, SEEK_SET) ;
+
+ psf->close = (func_close) aiff_close ;
+
+ switch (psf->bytewidth)
+ { case 1 :
+ psf->read_short = (func_short) pcm_read_sc2s ;
+ psf->read_int = (func_int) pcm_read_sc2i ;
+ psf->read_double = (func_double) pcm_read_sc2d ;
+ break ;
+ case 2 :
+ psf->read_short = (func_short) pcm_read_bes2s ;
+ psf->read_int = (func_int) pcm_read_bes2i ;
+ psf->read_double = (func_double) pcm_read_bes2d ;
+ break ;
+ case 3 :
+ psf->read_short = (func_short) pcm_read_bet2s ;
+ psf->read_int = (func_int) pcm_read_bet2i ;
+ psf->read_double = (func_double) pcm_read_bet2d ;
+ break ;
+ case 4 :
+ psf->read_short = (func_short) pcm_read_bei2s ;
+ psf->read_int = (func_int) pcm_read_bei2i ;
+ psf->read_double = (func_double) pcm_read_bei2d ;
+ break ;
+ default :
+ /* printf ("Weird bytewidth (%d)\n", psf->bytewidth) ; */
+ return SFE_UNIMPLEMENTED ;
+ } ;
+
+ return 0 ;
+} /* aiff_open_read */
+
+/*------------------------------------------------------------------------------
+ */
+
+int aiff_open_write (SF_PRIVATE *psf)
+{ COMM_CHUNK comm_fmt ;
+ SSND_CHUNK ssnd_fmt ;
+ unsigned int dword, FORMsize ;
+
+ if ((psf->sf.format & SF_FORMAT_TYPEMASK) != SF_FORMAT_AIFF)
+ return SFE_BAD_OPEN_FORMAT ;
+ if ((psf->sf.format & SF_FORMAT_SUBMASK) != SF_FORMAT_PCM)
+ return SFE_BAD_OPEN_FORMAT ;
+
+ psf->endian = SF_ENDIAN_BIG ; /* All AIF* files are big endian. */
+ psf->sf.seekable = SF_TRUE ;
+ psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
+ psf->blockwidth = psf->bytewidth * psf->sf.channels ;
+ psf->dataoffset = 5 * sizeof (dword) + REAL_COMM_SIZE + 4 * sizeof (dword) ;
+ psf->datalength = psf->blockwidth * psf->sf.samples ;
+ psf->filelength = psf->datalength + psf->dataoffset ;
+ psf->error = 0 ;
+
+ FORMsize = 0x7FFFFFFF ; /* Correct this when closing file. */
+
+ comm_fmt.numChannels = psf->sf.channels ;
+ comm_fmt.numSampleFrames = psf->sf.samples ;
+ comm_fmt.sampleSize = psf->sf.pcmbitwidth ;
+ uint2tenbytefloat (psf->sf.samplerate, comm_fmt.sampleRate) ;
+
+ if (CPU_IS_LITTLE_ENDIAN)
+ endswap_comm_fmt (&comm_fmt) ;
+
+ ssnd_fmt.offset = 0 ;
+ ssnd_fmt.blocksize = 0 ; /* Not normally used. */
+
+ if (CPU_IS_LITTLE_ENDIAN)
+ endswap_ssnd_fmt (&ssnd_fmt) ;
+
+ dword = FORM_MARKER ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+ dword = H2BE_INT (FORMsize) ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+
+ dword = AIFF_MARKER ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+ dword = COMM_MARKER ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+
+ dword = H2BE_INT (REAL_COMM_SIZE) ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+
+ fwrite (&(comm_fmt.numChannels), sizeof (comm_fmt.numChannels), 1, psf->file) ;
+ fwrite (&(comm_fmt.numSampleFrames), sizeof (comm_fmt.numSampleFrames), 1, psf->file) ;
+ fwrite (&(comm_fmt.sampleSize), sizeof (comm_fmt.sampleSize), 1, psf->file) ;
+ fwrite (&(comm_fmt.sampleRate), sizeof (comm_fmt.sampleRate), 1, psf->file) ;
+
+ dword = SSND_MARKER ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+ dword = H2BE_INT (psf->datalength + sizeof (SSND_CHUNK)) ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+
+ fwrite (&ssnd_fmt, sizeof (ssnd_fmt), 1, psf->file) ;
+
+ psf->close = (func_close) aiff_close ;
+
+ switch (psf->bytewidth)
+ { case 1 :
+ psf->write_short = (func_short) pcm_write_s2sc ;
+ psf->write_int = (func_int) pcm_write_i2sc ;
+ psf->write_double = (func_double) pcm_write_d2sc ;
+ break ;
+ case 2 :
+ psf->write_short = (func_short) pcm_write_s2bes ;
+ psf->write_int = (func_int) pcm_write_i2bes ;
+ psf->write_double = (func_double) pcm_write_d2bes ;
+ break ;
+ case 3 :
+ psf->write_short = (func_short) pcm_write_s2bet ;
+ psf->write_int = (func_int) pcm_write_i2bet ;
+ psf->write_double = (func_double) pcm_write_d2bet ;
+ break ;
+ case 4 :
+ psf->write_short = (func_short) pcm_write_s2bei ;
+ psf->write_int = (func_int) pcm_write_i2bei ;
+ psf->write_double = (func_double) pcm_write_d2bei ;
+ break ;
+ default : return SFE_UNIMPLEMENTED ;
+ } ;
+
+ return 0 ;
+} /* aiff_open_write */
+
+/*------------------------------------------------------------------------------
+ */
+
+int aiff_close (SF_PRIVATE *psf)
+{ unsigned int dword ;
+
+ if (psf->mode == SF_MODE_WRITE)
+ { /* Now we know for certain the length of the file we can re-write
+ ** correct values for the FORM, COMM and SSND chunks.
+ */
+
+ fseek (psf->file, 0, SEEK_END) ;
+ psf->filelength = ftell (psf->file) ;
+
+ dword = psf->filelength - 2 * sizeof (dword) ;
+ fseek (psf->file, sizeof (dword), SEEK_SET) ;
+ dword = H2BE_INT (dword) ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ; /* FORM */
+
+ fseek (psf->file, psf->dataoffset - (long)((sizeof (SSND_CHUNK) + sizeof (dword))), SEEK_SET) ;
+ psf->datalength = psf->filelength - psf->dataoffset ;
+ dword = H2BE_INT (psf->datalength + sizeof (SSND_CHUNK)) ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ; /* SSND */
+
+ fseek (psf->file, 5 * sizeof (dword) + sizeof (short), SEEK_SET) ;
+ dword = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
+ dword = H2BE_INT (dword) ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ; /* COMM.numSampleFrames */
+ } ;
+
+ if (psf->fdata)
+ free (psf->fdata) ;
+ psf->fdata = NULL ;
+
+ return 0 ;
+} /* aiff_close */
+
+/*==========================================================================================
+** Rough hack at converting from 80 bit IEEE float in AIFF header to an int and
+** back again. It assumes that all sample rates are between 1 and 800MHz, which
+** should be OK as other sound file formats use a 32 bit integer to store sample
+** rate.
+** There is another (probably better) version in the source code to the SoX but it
+** has a copyright which probably prevents it from being allowable as GPL/LGPL.
+*/
+
+static
+int tenbytefloat2int (unsigned char *bytes)
+{ int val = 3 ;
+
+ if (bytes [0] & 0x80) /* Negative number. */
+ return 0 ;
+
+ if (bytes [0] <= 0x3F) /* Less than 1. */
+ return 1 ;
+
+ if (bytes [0] > 0x40) /* Way too big. */
+ return 0x4000000 ;
+
+ if (bytes [0] == 0x40 && bytes [1] > 0x1C) /* Too big. */
+ return 800000000 ;
+
+ /* Ok, can handle it. */
+
+ val = (bytes [2] << 23) | (bytes [3] << 15) | (bytes [4] << 7) | (bytes [5] >> 1) ;
+
+ val >>= (29 - bytes [1]) ;
+
+ return val ;
+} /* tenbytefloat2int */
+
+static
+void uint2tenbytefloat (unsigned int num, unsigned char *bytes)
+{ int count, mask = 0x40000000 ;
+
+ memset (bytes, 0, 10) ;
+
+ if (num <= 1)
+ { bytes [0] = 0x3F ;
+ bytes [1] = 0xFF ;
+ bytes [2] = 0x80 ;
+ return ;
+ } ;
+
+ bytes [0] = 0x40 ;
+
+ if (num >= mask)
+ { bytes [1] = 0x1D ;
+ return ;
+ } ;
+
+ for (count = 0 ; count <= 32 ; count ++)
+ { if (num & mask)
+ break ;
+ mask >>= 1 ;
+ } ;
+
+ num <<= count + 1 ;
+ bytes [1] = 29 - count ;
+ bytes [2] = (num >> 24) & 0xFF ;
+ bytes [3] = (num >> 16) & 0xFF ;
+ bytes [4] = (num >> 8) & 0xFF ;
+ bytes [5] = num & 0xFF ;
+
+} /* uint2tenbytefloat */
+
--- /dev/null
+++ b/common/libsndfile/src/alaw.c
@@ -1,0 +1,468 @@
+/*
+** Copyright (C) 1999-2000 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 <unistd.h>
+
+#include "sndfile.h"
+#include "common.h"
+
+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 alaw2d_array (unsigned char *buffer, unsigned int count, double *ptr, unsigned int index, 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 d2alaw_array (double *buffer, unsigned int count, unsigned char *ptr, unsigned int index, double normfact) ;
+
+
+int alaw_read_alaw2s (SF_PRIVATE *psf, short *ptr, unsigned int len)
+{ unsigned int readcount, thisread, index = 0 ;
+ int bytecount, bufferlen ;
+ int 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) ;
+ alaw2s_array ((unsigned char*) (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 ;
+} /* alaw_read_alaw2s */
+
+int alaw_read_alaw2i (SF_PRIVATE *psf, int *ptr, unsigned int len)
+{ unsigned int readcount, thisread, index = 0 ;
+ int bytecount, bufferlen ;
+ int 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) ;
+ alaw2i_array ((unsigned char*) (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 ;
+} /* alaw_read_alaw2i */
+
+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 ;
+ double normfact ;
+
+ normfact = (normalize ? 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) ;
+ 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 ;
+} /* alaw_read_alaw2d */
+
+/*=============================================================================================
+*/
+
+int alaw_write_s2alaw (SF_PRIVATE *psf, short *ptr, unsigned int len)
+{ unsigned int writecount, thiswrite, index = 0 ;
+ int bytecount, bufferlen ;
+ int total = 0 ;
+
+ 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) ;
+ total += thiswrite ;
+ if (thiswrite < writecount)
+ break ;
+ index += thiswrite / psf->bytewidth ;
+ bytecount -= thiswrite ;
+ } ;
+
+ total /= psf->bytewidth ;
+ if (total < len)
+ psf->error = SFE_SHORT_READ ;
+
+ return total ;
+} /* alaw_write_s2alaw */
+
+int alaw_write_i2alaw (SF_PRIVATE *psf, int *ptr, unsigned int len)
+{ unsigned int writecount, thiswrite, index = 0 ;
+ int bytecount, bufferlen ;
+ int total = 0 ;
+
+ 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) ;
+ total += thiswrite ;
+ if (thiswrite < writecount)
+ break ;
+ index += thiswrite / psf->bytewidth ;
+ bytecount -= thiswrite ;
+ } ;
+
+ total /= psf->bytewidth ;
+ if (total < len)
+ psf->error = SFE_SHORT_READ ;
+
+ return total ;
+} /* alaw_write_i2alaw */
+
+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 ;
+ double normfact ;
+
+ normfact = (normalize ? ((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) ;
+ total += thiswrite ;
+ if (thiswrite < writecount)
+ break ;
+ index += thiswrite / psf->bytewidth ;
+ bytecount -= thiswrite ;
+ } ;
+
+ total /= psf->bytewidth ;
+ if (total < len)
+ psf->error = SFE_SHORT_READ ;
+
+ return total ;
+} /* alaw_write_d2alaw */
+
+
+
+
+/*=============================================================================================
+ * Private static functions and data.
+ */
+
+static
+short alaw_decode [128] =
+{ -5504, -5248, -6016, -5760, -4480, -4224, -4992, -4736,
+ -7552, -7296, -8064, -7808, -6528, -6272, -7040, -6784,
+ -2752, -2624, -3008, -2880, -2240, -2112, -2496, -2368,
+ -3776, -3648, -4032, -3904, -3264, -3136, -3520, -3392,
+ -22016, -20992, -24064, -23040, -17920, -16896, -19968, -18944,
+ -30208, -29184, -32256, -31232, -26112, -25088, -28160, -27136,
+ -11008, -10496, -12032, -11520, -8960, -8448, -9984, -9472,
+ -15104, -14592, -16128, -15616, -13056, -12544, -14080, -13568,
+ -344, -328, -376, -360, -280, -264, -312, -296,
+ -472, -456, -504, -488, -408, -392, -440, -424,
+ -88, -72, -120, -104, -24, -8, -56, -40,
+ -216, -200, -248, -232, -152, -136, -184, -168,
+ -1376, -1312, -1504, -1440, -1120, -1056, -1248, -1184,
+ -1888, -1824, -2016, -1952, -1632, -1568, -1760, -1696,
+ -688, -656, -752, -720, -560, -528, -624, -592,
+ -944, -912, -1008, -976, -816, -784, -880, -848
+} ; /* alaw_decode */
+
+static
+unsigned char alaw_encode [2049] =
+{ 0xD5, 0xD4, 0xD7, 0xD6, 0xD1, 0xD0, 0xD3, 0xD2, 0xDD, 0xDC, 0xDF, 0xDE,
+ 0xD9, 0xD8, 0xDB, 0xDA, 0xC5, 0xC4, 0xC7, 0xC6, 0xC1, 0xC0, 0xC3, 0xC2,
+ 0xCD, 0xCC, 0xCF, 0xCE, 0xC9, 0xC8, 0xCB, 0xCA, 0xF5, 0xF5, 0xF4, 0xF4,
+ 0xF7, 0xF7, 0xF6, 0xF6, 0xF1, 0xF1, 0xF0, 0xF0, 0xF3, 0xF3, 0xF2, 0xF2,
+ 0xFD, 0xFD, 0xFC, 0xFC, 0xFF, 0xFF, 0xFE, 0xFE, 0xF9, 0xF9, 0xF8, 0xF8,
+ 0xFB, 0xFB, 0xFA, 0xFA, 0xE5, 0xE5, 0xE5, 0xE5, 0xE4, 0xE4, 0xE4, 0xE4,
+ 0xE7, 0xE7, 0xE7, 0xE7, 0xE6, 0xE6, 0xE6, 0xE6, 0xE1, 0xE1, 0xE1, 0xE1,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE3, 0xE3, 0xE3, 0xE3, 0xE2, 0xE2, 0xE2, 0xE2,
+ 0xED, 0xED, 0xED, 0xED, 0xEC, 0xEC, 0xEC, 0xEC, 0xEF, 0xEF, 0xEF, 0xEF,
+ 0xEE, 0xEE, 0xEE, 0xEE, 0xE9, 0xE9, 0xE9, 0xE9, 0xE8, 0xE8, 0xE8, 0xE8,
+ 0xEB, 0xEB, 0xEB, 0xEB, 0xEA, 0xEA, 0xEA, 0xEA, 0x95, 0x95, 0x95, 0x95,
+ 0x95, 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
+ 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x96, 0x96, 0x96, 0x96,
+ 0x96, 0x96, 0x96, 0x96, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
+ 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x93, 0x93, 0x93, 0x93,
+ 0x93, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
+ 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9C, 0x9C, 0x9C, 0x9C,
+ 0x9C, 0x9C, 0x9C, 0x9C, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
+ 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x99, 0x99, 0x99, 0x99,
+ 0x99, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
+ 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0xB5, 0xB5, 0xB5, 0xB5,
+ 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
+ 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
+ 0xB5, 0xB5, 0xB5, 0xB5, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4,
+ 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4,
+ 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4,
+ 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7,
+ 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7,
+ 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB6, 0xB6, 0xB6, 0xB6,
+ 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6,
+ 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6,
+ 0xB6, 0xB6, 0xB6, 0xB6, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1,
+ 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1,
+ 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1,
+ 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0,
+ 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0,
+ 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB3, 0xB3, 0xB3, 0xB3,
+ 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3,
+ 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3,
+ 0xB3, 0xB3, 0xB3, 0xB3, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,
+ 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,
+ 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,
+ 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD,
+ 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD,
+ 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBC, 0xBC, 0xBC, 0xBC,
+ 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC,
+ 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC,
+ 0xBC, 0xBC, 0xBC, 0xBC, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF,
+ 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF,
+ 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF,
+ 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE,
+ 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE,
+ 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xB9, 0xB9, 0xB9, 0xB9,
+ 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9,
+ 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9,
+ 0xB9, 0xB9, 0xB9, 0xB9, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8,
+ 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8,
+ 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8,
+ 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
+ 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
+ 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBA, 0xBA, 0xBA, 0xBA,
+ 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA,
+ 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA,
+ 0xBA, 0xBA, 0xBA, 0xBA, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
+ 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
+ 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
+ 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
+ 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
+ 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4,
+ 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+ 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+ 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+ 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+ 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+ 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,
+ 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,
+ 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,
+ 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,
+ 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,
+ 0xA7, 0xA7, 0xA7, 0xA7, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
+ 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
+ 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
+ 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
+ 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
+ 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA1, 0xA1, 0xA1, 0xA1,
+ 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
+ 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
+ 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
+ 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
+ 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA2, 0xA2, 0xA2, 0xA2,
+ 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,
+ 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,
+ 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,
+ 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,
+ 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,
+ 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,
+ 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,
+ 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,
+ 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,
+ 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,
+ 0xAD, 0xAD, 0xAD, 0xAD, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+ 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+ 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+ 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+ 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+ 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAF, 0xAF, 0xAF, 0xAF,
+ 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,
+ 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,
+ 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,
+ 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,
+ 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,
+ 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
+ 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
+ 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
+ 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
+ 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
+ 0xAE, 0xAE, 0xAE, 0xAE, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,
+ 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,
+ 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,
+ 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,
+ 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,
+ 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA8, 0xA8, 0xA8, 0xA8,
+ 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,
+ 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,
+ 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,
+ 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,
+ 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,
+ 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
+ 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
+ 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
+ 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
+ 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
+ 0xAB, 0xAB, 0xAB, 0xAB, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
+ 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
+ 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
+ 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
+ 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
+ 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x2A
+} ; /* 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] ;
+ else
+ ptr [index] = alaw_decode [((int)buffer [k]) & 0x7F] ;
+ index ++ ;
+ } ;
+} /* 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] ;
+ else
+ ptr [index] = alaw_decode [((int)buffer [k]) & 0x7F] ;
+ index ++ ;
+ } ;
+} /* alaw2i_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] ;
+ else
+ ptr [index] = normfact * alaw_decode [((int)buffer [k]) & 0x7F] ;
+ index ++ ;
+ } ;
+} /* 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] ;
+ else
+ buffer [k] = 0x7F & alaw_encode [ptr [index] / -16] ;
+ index ++ ;
+ } ;
+} /* 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] ;
+ else
+ buffer [k] = 0x7F & alaw_encode [ptr [index] / -16] ;
+ index ++ ;
+ } ;
+} /* i2alaw_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 [((int) (normfact * ptr [index])) / 16] ;
+ else
+ buffer [k] = 0x7F & alaw_encode [((int) (normfact * ptr [index])) / -16] ;
+ index ++ ;
+ } ;
+} /* d2alaw_array */
+
--- /dev/null
+++ b/common/libsndfile/src/alaw.h
@@ -1,0 +1,27 @@
+/*
+** Copyright (C) 1999-2000 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.
+*/
+
+
+int alaw_read_alaw2s (SF_PRIVATE *psf, short *ptr, unsigned int len) ;
+int alaw_read_alaw2i (SF_PRIVATE *psf, short *ptr, unsigned int len) ;
+int alaw_read_alaw2d (SF_PRIVATE *psf, short *ptr, unsigned int len) ;
+
+int alaw_write_s2alaw (SF_PRIVATE *psf, short *ptr, unsigned int len) ;
+int alaw_write_i2alaw (SF_PRIVATE *psf, short *ptr, unsigned int len) ;
+int alaw_write_d2alaw (SF_PRIVATE *psf, short *ptr, unsigned int len) ;
+
--- /dev/null
+++ b/common/libsndfile/src/au.c
@@ -1,0 +1,594 @@
+/*
+** Copyright (C) 1999-2000 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 <fcntl.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "sndfile.h"
+#include "config.h"
+#include "sfendian.h"
+#include "common.h"
+#include "pcm.h"
+#include "au.h"
+#include "ulaw.h"
+#include "alaw.h"
+
+
+/*------------------------------------------------------------------------------
+** 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
+
+#define DOTSND_MARKER (MAKE_MARKER ('.', 's', 'n', 'd'))
+#define DNSDOT_MARKER (MAKE_MARKER ('d', 'n', 's', '.'))
+
+/*------------------------------------------------------------------------------
+** Known AU file encoding types.
+*/
+
+enum
+{ AU_ENCODING_ULAW_8 = 1, /* 8-bit u-law samples */
+ AU_ENCODING_PCM_8 = 2, /* 8-bit linear samples */
+ AU_ENCODING_PCM_16 = 3, /* 16-bit linear samples */
+ AU_ENCODING_PCM_24 = 4, /* 24-bit linear samples */
+ AU_ENCODING_PCM_32 = 5, /* 32-bit linear samples */
+
+ AU_ENCODING_FLOAT = 6, /* floating-point samples */
+ AU_ENCODING_DOUBLE = 7, /* double-precision float samples */
+ AU_ENCODING_INDIRECT = 8, /* fragmented sampled data */
+ AU_ENCODING_NESTED = 9, /* ? */
+ AU_ENCODING_DSP_CORE = 10, /* DSP program */
+ AU_ENCODING_DSP_DATA_8 = 11, /* 8-bit fixed-point samples */
+ AU_ENCODING_DSP_DATA_16 = 12, /* 16-bit fixed-point samples */
+ AU_ENCODING_DSP_DATA_24 = 13, /* 24-bit fixed-point samples */
+ AU_ENCODING_DSP_DATA_32 = 14, /* 32-bit fixed-point samples */
+
+ AU_ENCODING_DISPLAY = 16, /* non-audio display data */
+ AU_ENCODING_MULAW_SQUELCH = 17, /* ? */
+ AU_ENCODING_EMPHASIZED = 18, /* 16-bit linear with emphasis */
+ AU_ENCODING_NEXT = 19, /* 16-bit linear with compression (NEXT) */
+ AU_ENCODING_COMPRESSED_EMPHASIZED = 20, /* A combination of the two above */
+ AU_ENCODING_DSP_COMMANDS = 21, /* Music Kit DSP commands */
+ AU_ENCODING_DSP_COMMANDS_SAMPLES = 22, /* ? */
+
+ AU_ENCODING_ADPCM_G721_32 = 23, /* G721 32 kbs ADPCM - 4 bits per sample. */
+ AU_ENCODING_ADPCM_G722 = 24,
+ AU_ENCODING_ADPCM_G723_24 = 25, /* G723 24 kbs ADPCM - 3 bits per sample. */
+ AU_ENCODING_ADPCM_G723_5 = 26,
+
+ AU_ENCODING_ALAW_8 = 27
+} ;
+
+/*------------------------------------------------------------------------------
+** Typedefs.
+*/
+
+typedef struct
+{ int dataoffset ;
+ int datasize ;
+ int encoding ;
+ int samplerate ;
+ int channels ;
+} AU_FMT ;
+
+
+/*------------------------------------------------------------------------------
+** Private static functions.
+*/
+
+static int au_close (SF_PRIVATE *psf) ;
+
+static int get_encoding (unsigned int format, unsigned int bitwidth) ;
+static char* get_encoding_str(int format) ;
+static void endswap_au_fmt (AU_FMT *pau_fmt) ;
+
+
+/*------------------------------------------------------------------------------
+** Public functions.
+*/
+
+int au_open_read (SF_PRIVATE *psf)
+{ AU_FMT au_fmt ;
+ unsigned int marker, dword ;
+ int big_endian_file, error = SFE_NO_ERROR ;
+
+ fread (&marker, sizeof (marker), 1, psf->file) ;
+ if (marker == DOTSND_MARKER)
+ big_endian_file = 1 ;
+ else if (marker == DNSDOT_MARKER)
+ big_endian_file = 0 ;
+ else
+ return SFE_AU_NO_DOTSND ;
+
+ psf_sprintf (psf, "%D\n", marker) ;
+
+ fread (&au_fmt, sizeof (AU_FMT), 1, psf->file) ;
+
+ if (CPU_IS_LITTLE_ENDIAN && big_endian_file)
+ endswap_au_fmt (&au_fmt) ;
+ else if (CPU_IS_BIG_ENDIAN && ! big_endian_file)
+ endswap_au_fmt (&au_fmt) ;
+
+ psf_sprintf (psf, " Data Offset : %d\n", au_fmt.dataoffset) ;
+
+ if (au_fmt.dataoffset + au_fmt.datasize != psf->filelength)
+ { dword = psf->filelength - au_fmt.dataoffset ;
+ psf_sprintf (psf, " Data Size : %d (should be %d)\n", au_fmt.datasize, dword) ;
+ au_fmt.datasize = dword ;
+ }
+ else
+ psf_sprintf (psf, " Data Size : %d\n", au_fmt.datasize) ;
+
+ psf->dataoffset = au_fmt.dataoffset ;
+ psf->datalength = psf->filelength - psf->dataoffset ;
+
+ psf->current = 0 ;
+ psf->endian = big_endian_file ? SF_ENDIAN_BIG : SF_ENDIAN_LITTLE ;
+ psf->sf.seekable = SF_TRUE ;
+
+ if (fseek (psf->file, psf->dataoffset, SEEK_SET))
+ return SFE_BAD_SEEK ;
+
+ psf->close = (func_close) au_close ;
+
+ psf->sf.samplerate = au_fmt.samplerate ;
+ psf->sf.channels = au_fmt.channels ;
+
+ /* Only fill in type major. */
+ psf->sf.format = big_endian_file ? SF_FORMAT_AU : SF_FORMAT_AULE ;
+
+ psf->sf.sections = 1 ;
+
+ psf_sprintf (psf, " Encoding : %d => %s\n", au_fmt.encoding, get_encoding_str (au_fmt.encoding)) ;
+
+ psf_sprintf (psf, " Sample Rate : %d\n", au_fmt.samplerate) ;
+ psf_sprintf (psf, " Channels : %d\n", au_fmt.channels) ;
+
+ switch (au_fmt.encoding)
+ { case AU_ENCODING_ULAW_8 :
+ psf->sf.pcmbitwidth = 16 ; /* After decoding */
+ psf->bytewidth = 1 ; /* Before decoding */
+ psf->blockwidth = psf->sf.channels * psf->bytewidth ;
+
+ psf->sf.format |= SF_FORMAT_ULAW ;
+
+ psf->read_short = (func_short) ulaw_read_ulaw2s ;
+ psf->read_int = (func_int) ulaw_read_ulaw2i ;
+ psf->read_double = (func_double) ulaw_read_ulaw2d ;
+
+ break ;
+
+ 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 ;
+
+ psf->read_short = (func_short) pcm_read_sc2s ;
+ psf->read_int = (func_int) pcm_read_sc2i ;
+ psf->read_double = (func_double) pcm_read_sc2d ;
+ 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 (big_endian_file)
+ { psf->read_short = (func_short) pcm_read_bes2s ;
+ psf->read_int = (func_int) pcm_read_bes2i ;
+ psf->read_double = (func_double) pcm_read_bes2d ;
+ }
+ else
+ { psf->read_short = (func_short) pcm_read_les2s ;
+ psf->read_int = (func_int) pcm_read_les2i ;
+ psf->read_double = (func_double) pcm_read_les2d ;
+ } ;
+ 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 (big_endian_file)
+ { psf->read_short = (func_short) pcm_read_bet2s ;
+ psf->read_int = (func_int) pcm_read_bet2i ;
+ psf->read_double = (func_double) pcm_read_bet2d ;
+ }
+ else
+ { psf->read_short = (func_short) pcm_read_let2s ;
+ psf->read_int = (func_int) pcm_read_let2i ;
+ psf->read_double = (func_double) pcm_read_let2d ;
+ } ;
+ 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 (big_endian_file)
+ { psf->read_short = (func_short) pcm_read_bei2s ;
+ psf->read_int = (func_int) pcm_read_bei2i ;
+ psf->read_double = (func_double) pcm_read_bei2d ;
+ }
+ else
+ { psf->read_short = (func_short) pcm_read_lei2s ;
+ psf->read_int = (func_int) pcm_read_lei2i ;
+ psf->read_double = (func_double) pcm_read_lei2d ;
+ } ;
+ break ;
+
+ case AU_ENCODING_ALAW_8 :
+ psf->sf.pcmbitwidth = 16 ; /* After decoding */
+ psf->bytewidth = 1 ; /* Before decoding */
+ psf->blockwidth = psf->sf.channels * psf->bytewidth ;
+
+ psf->sf.format |= SF_FORMAT_ALAW ;
+
+ psf->read_short = (func_short) alaw_read_alaw2s ;
+ psf->read_int = (func_int) alaw_read_alaw2i ;
+ psf->read_double = (func_double) alaw_read_alaw2d ;
+ break ;
+
+ case AU_ENCODING_ADPCM_G721_32 : /* G721 32kbs ADPCM */
+ if (psf->sf.channels != 1)
+ { psf_sprintf (psf, "Channels != 1\n") ;
+ break ;
+ } ;
+ psf->sf.pcmbitwidth = 16 ; /* After decoding */
+
+ psf->sf.format |= SF_FORMAT_G721_32 ;
+
+ error = au_g72x_reader_init (psf, AU_H_G721_32) ;
+ psf->sf.seekable = SF_FALSE ;
+ break ;
+
+ case AU_ENCODING_ADPCM_G723_24 : /* G723 24kbs ADPCM */
+ if (psf->sf.channels != 1)
+ { psf_sprintf (psf, "Channels != 1\n") ;
+ break ;
+ } ;
+ psf->sf.pcmbitwidth = 16 ; /* After decoding */
+
+ psf->sf.format |= SF_FORMAT_G723_24 ;
+
+ error = au_g72x_reader_init (psf, AU_H_G723_24) ;
+ psf->sf.seekable = SF_FALSE ;
+ break ;
+
+ case AU_ENCODING_NEXT :
+ error = SFE_AU_UNKNOWN_FORMAT ;
+ break ;
+
+ default :
+ error = SFE_AU_UNKNOWN_FORMAT ;
+ break ;
+ } ;
+
+ 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_nh_open_read (SF_PRIVATE *psf)
+{ if (fseek (psf->file, psf->dataoffset, SEEK_SET))
+ return SFE_BAD_SEEK ;
+
+ psf_sprintf (psf, "Setting up for 8kHz, mono, u-law.\n") ;
+
+ psf->sf.format = SF_FORMAT_AU | SF_FORMAT_ULAW ;
+
+ psf->dataoffset = 0 ;
+ psf->current = 0 ;
+ psf->endian = 0 ; /* Irrelevant but it must be something. */
+ psf->sf.seekable = SF_TRUE ;
+ psf->sf.samplerate = 8000 ;
+ psf->sf.channels = 1 ;
+ psf->sf.sections = 1 ;
+ psf->sf.pcmbitwidth = 16 ; /* After decoding */
+ psf->bytewidth = 1 ; /* Before decoding */
+
+ psf->read_short = (func_short) ulaw_read_ulaw2s ;
+ psf->read_int = (func_int) ulaw_read_ulaw2i ;
+ psf->read_double = (func_double) ulaw_read_ulaw2d ;
+ psf->close = (func_close) au_close ;
+
+ psf->blockwidth = 1 ;
+ psf->sf.samples = psf->filelength ;
+ psf->datalength = psf->filelength ;
+
+ return 0 ;
+} /* au_open_read */
+
+/*------------------------------------------------------------------------------
+*/
+
+int au_open_write (SF_PRIVATE *psf)
+{ AU_FMT au_fmt ;
+ unsigned int dword, encoding, format, subformat, big_endian_file ;
+ int error = 0 ;
+
+ format = psf->sf.format & SF_FORMAT_TYPEMASK ;
+ subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
+ if (format == SF_FORMAT_AU)
+ big_endian_file = 1 ;
+ else if (format == SF_FORMAT_AULE)
+ big_endian_file = 0 ;
+ 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->endian = big_endian_file ? SF_ENDIAN_BIG : SF_ENDIAN_LITTLE ;
+ psf->sf.seekable = SF_TRUE ;
+ psf->blockwidth = psf->bytewidth * psf->sf.channels ;
+ psf->dataoffset = 6 * sizeof (dword) ;
+ psf->datalength = psf->blockwidth * psf->sf.samples ;
+ psf->filelength = psf->datalength + psf->dataoffset ;
+ psf->error = 0 ;
+
+ encoding = get_encoding (subformat, psf->bytewidth * 8) ;
+ if (! encoding)
+ return SFE_BAD_OPEN_FORMAT ;
+
+ au_fmt.dataoffset = 24 ;
+ au_fmt.datasize = psf->datalength ;
+ au_fmt.encoding = encoding ;
+ au_fmt.samplerate = psf->sf.samplerate ;
+ au_fmt.channels = psf->sf.channels ;
+
+ if (CPU_IS_LITTLE_ENDIAN && big_endian_file)
+ endswap_au_fmt (&au_fmt) ;
+ else if (CPU_IS_BIG_ENDIAN && ! big_endian_file)
+ endswap_au_fmt (&au_fmt) ;
+
+ dword = big_endian_file ? DOTSND_MARKER : DNSDOT_MARKER ; /* Marker */
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+
+ fwrite (&au_fmt, sizeof (AU_FMT), 1, psf->file) ;
+
+ psf->close = (func_close) au_close ;
+
+ switch (encoding)
+ { case AU_ENCODING_ULAW_8 : /* 8-bit Ulaw encoding. */
+ psf->write_short = (func_short) ulaw_write_s2ulaw ;
+ psf->write_int = (func_int) ulaw_write_i2ulaw ;
+ psf->write_double = (func_double) ulaw_write_d2ulaw ;
+ break ;
+
+ case AU_ENCODING_PCM_8 : /* 8-bit linear PCM. */
+ psf->write_short = (func_short) pcm_write_s2sc ;
+ psf->write_int = (func_int) pcm_write_i2sc ;
+ psf->write_double = (func_double) pcm_write_d2sc ;
+ break ;
+
+ case AU_ENCODING_PCM_16 : /* 16-bit linear PCM. */
+ if (big_endian_file)
+ { psf->write_short = (func_short) pcm_write_s2bes ;
+ psf->write_int = (func_int) pcm_write_i2bes ;
+ psf->write_double = (func_double) pcm_write_d2bes ;
+ }
+ else
+ { psf->write_short = (func_short) pcm_write_s2les ;
+ psf->write_int = (func_int) pcm_write_i2les ;
+ psf->write_double = (func_double) pcm_write_d2les ;
+ } ;
+ break ;
+
+ case AU_ENCODING_PCM_24 : /* 24-bit linear PCM */
+ if (big_endian_file)
+ { psf->write_short = (func_short) pcm_write_s2bet ;
+ psf->write_int = (func_int) pcm_write_i2bet ;
+ psf->write_double = (func_double) pcm_write_d2bet ;
+ }
+ else
+ { psf->write_short = (func_short) pcm_write_s2let ;
+ psf->write_int = (func_int) pcm_write_i2let ;
+ psf->write_double = (func_double) pcm_write_d2let ;
+ } ;
+ break ;
+
+ case AU_ENCODING_PCM_32 : /* 32-bit linear PCM. */
+ if (big_endian_file)
+ { psf->write_short = (func_short) pcm_write_s2bei ;
+ psf->write_int = (func_int) pcm_write_i2bei ;
+ psf->write_double = (func_double) pcm_write_d2bei ;
+ }
+ else
+ { psf->write_short = (func_short) pcm_write_s2lei ;
+ psf->write_int = (func_int) pcm_write_i2lei ;
+ psf->write_double = (func_double) pcm_write_d2lei ;
+ } ;
+ break ;
+
+ case AU_ENCODING_ALAW_8 : /* 8-bit Alaw encoding. */
+ psf->write_short = (func_short) alaw_write_s2alaw ;
+ psf->write_int = (func_int) alaw_write_i2alaw ;
+ psf->write_double = (func_double) alaw_write_d2alaw ;
+ break ;
+
+ case AU_ENCODING_ADPCM_G721_32 :
+ if (psf->sf.channels != 1)
+ { psf_sprintf (psf, "Channels != 1\n") ;
+ break ;
+ } ;
+ psf->sf.pcmbitwidth = 16 ; /* After decoding */
+ psf->bytewidth = 0 ;
+ psf->blockwidth = psf->sf.channels * psf->bytewidth ;
+
+ psf->sf.format |= SF_FORMAT_G721_32 ;
+
+ error = au_g72x_writer_init (psf, AU_H_G721_32) ;
+ break ;
+
+ case AU_ENCODING_ADPCM_G723_24 :
+ if (psf->sf.channels != 1)
+ { psf_sprintf (psf, "Channels != 1\n") ;
+ break ;
+ } ;
+ psf->sf.pcmbitwidth = 16 ; /* After decoding */
+ psf->bytewidth = 0 ;
+ psf->blockwidth = psf->sf.channels * psf->bytewidth ;
+
+ psf->sf.format |= SF_FORMAT_G721_32 ;
+
+ error = au_g72x_writer_init (psf, AU_H_G723_24) ;
+ break ;
+
+ default : break ;
+ } ;
+
+ return error ;
+} /* au_open_write */
+
+/*------------------------------------------------------------------------------
+*/
+
+int au_close (SF_PRIVATE *psf)
+{ unsigned int dword ;
+
+ if (psf->mode == SF_MODE_WRITE)
+ { /* 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->datalength = psf->filelength - psf->dataoffset ;
+ fseek (psf->file, 2 * sizeof (dword), SEEK_SET) ;
+
+ if (psf->endian == SF_ENDIAN_BIG)
+ dword = H2BE_INT (psf->datalength) ;
+ else if (psf->endian == SF_ENDIAN_LITTLE)
+ dword = H2LE_INT (psf->datalength) ;
+ else
+ dword = 0xFFFFFFFF ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+ } ;
+
+ if (psf->fdata)
+ free (psf->fdata) ;
+ psf->fdata = NULL ;
+
+ return 0 ;
+} /* au_close */
+
+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 ;
+
+ if (format == SF_FORMAT_G721_32)
+ return AU_ENCODING_ADPCM_G721_32 ;
+
+ if (format == SF_FORMAT_G723_24)
+ return AU_ENCODING_ADPCM_G723_24 ;
+
+ if (format != SF_FORMAT_PCM)
+ return 0 ;
+
+ /* 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 ;
+ } ;
+ return 0 ;
+} /* get encoding */
+
+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 */
+
+static
+char* get_encoding_str (int format)
+{ switch (format)
+ { case AU_ENCODING_ULAW_8 :
+ return "8-bit ISDN u-law" ;
+
+ case AU_ENCODING_PCM_8 :
+ return "8-bit linear PCM" ;
+
+ case AU_ENCODING_PCM_16 :
+ return "16-bit linear PCM" ;
+
+ case AU_ENCODING_PCM_24 :
+ return "24-bit linear PCM" ;
+
+ case AU_ENCODING_PCM_32 :
+ return "32-bit linear PCM" ;
+
+ case AU_ENCODING_ALAW_8 :
+ return "8-bit ISDN A-law" ;
+
+ case AU_ENCODING_ADPCM_G721_32 :
+ return "G721 32kbs ADPCM" ;
+
+ case AU_ENCODING_ADPCM_G723_24 :
+ return "G723 24kbs ADPCM" ;
+
+ case AU_ENCODING_NEXT :
+ return "Weird NeXT encoding format (unsupported)" ;
+ } ;
+ return "Unknown!!" ;
+} /* get_encoding_str */
+
+
--- /dev/null
+++ b/common/libsndfile/src/au.h
@@ -1,0 +1,31 @@
+/*
+** Copyright (C) 1999-2000 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 AU_HEADER_FILE
+#define AU_HEADER_FILE
+
+
+enum
+{ AU_H_G721_32 = 200,
+ AU_H_G723_24 = 201
+} ;
+
+int au_g72x_reader_init (SF_PRIVATE *psf, int codec) ;
+int au_g72x_writer_init (SF_PRIVATE *psf, int codec) ;
+
+#endif /* AU_HEADER_FILE */
--- /dev/null
+++ b/common/libsndfile/src/au_g72x.c
@@ -1,0 +1,495 @@
+/*
+** Copyright (C) 1999-2000 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 "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_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_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_d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+
+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_d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+
+static off_t au_g72x_seek (SF_PRIVATE *psf, off_t offset, int whence) ;
+
+static int au_g72x_close (SF_PRIVATE *psf) ;
+
+
+/*============================================================================================
+** WAV G721 Reader initialisation function.
+*/
+
+int au_g72x_reader_init (SF_PRIVATE *psf, int codec)
+{ G72x_DATA *pg72x ;
+ int bitspersample ;
+
+ 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 ;
+
+ psf->fdata = (void*) pg72x ;
+
+ pg72x->blockcount = 0 ;
+ pg72x->samplecount = 0 ;
+
+ switch (codec)
+ { case AU_H_G721_32 :
+ g72x_reader_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_reader_init (pg72x, G723_24_BITS_PER_SAMPLE) ;
+ pg72x->bytesperblock = G723_24_BYTES_PER_BLOCK ;
+ bitspersample = G723_24_BITS_PER_SAMPLE ;
+ break ;
+ default : return 0 ;
+ } ;
+
+ psf->read_short = (func_short) au_g72x_read_s ;
+ psf->read_int = (func_int) au_g72x_read_i ;
+ psf->read_double = (func_double) au_g72x_read_d ;
+
+ psf->seek_func = (func_seek) au_g72x_seek ;
+ psf->close = (func_close) au_g72x_close ;
+
+ 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_sprintf (psf, "*** Warning : weird psf->datalength.\n") ;
+
+ psf->blockwidth = psf->bytewidth = 1 ;
+
+ au_g72x_read_block (psf, pg72x) ;
+
+ return 0 ;
+} /* au_g72x_reader_init */
+
+/*============================================================================================
+** WAV G721 writer initialisation function.
+*/
+
+int au_g72x_writer_init (SF_PRIVATE *psf, int codec)
+{ G72x_DATA *pg72x ;
+
+ 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 ;
+
+ psf->fdata = (void*) pg72x ;
+
+ pg72x->blockcount = 0 ;
+ pg72x->samplecount = 0 ;
+
+ switch (codec)
+ { case AU_H_G721_32 :
+ g72x_writer_init (pg72x, G721_32_BITS_PER_SAMPLE) ;
+ pg72x->bytesperblock = G721_32_BYTES_PER_BLOCK ;
+ break ;
+
+ case AU_H_G723_24:
+ g72x_writer_init (pg72x, G723_24_BITS_PER_SAMPLE) ;
+ pg72x->bytesperblock = G723_24_BYTES_PER_BLOCK ;
+ break ;
+ default : return 0 ;
+ } ;
+
+ psf->write_short = (func_short) au_g72x_write_s ;
+ psf->write_int = (func_int) au_g72x_write_i ;
+ psf->write_double = (func_double) au_g72x_write_d ;
+
+ psf->seek_func = (func_seek) au_g72x_seek ;
+ psf->close = (func_close) au_g72x_close ;
+
+ psf->blockwidth = psf->bytewidth = 1 ;
+
+ return 0 ;
+} /* au_g72x_writer_init */
+
+
+
+/*============================================================================================
+** G721 Read Functions.
+*/
+
+static
+int au_g72x_read_block (SF_PRIVATE *psf, G72x_DATA *pg72x)
+{ int k ;
+
+ pg72x->blockcount ++ ;
+ pg72x->samplecount = 0 ;
+
+ if (pg72x->samplecount > pg72x->blocksize)
+ { memset (pg72x->samples, 0, G72x_BLOCK_SIZE * sizeof (short)) ;
+ return 1 ;
+ } ;
+
+ if ((k = fread (pg72x->block, 1, pg72x->bytesperblock, psf->file)) != pg72x->bytesperblock)
+ psf_sprintf (psf, "*** Warning : short read (%d != %d).\n", k, pg72x->bytesperblock) ;
+
+ pg72x->blocksize = k ;
+ g72x_decode_block (pg72x) ;
+
+ return 1 ;
+} /* au_g72x_read_block */
+
+static
+int au_g72x_read (SF_PRIVATE *psf, G72x_DATA *pg72x, short *ptr, int len)
+{ int count, total = 0, index = 0 ;
+
+ while (index < len)
+ { if (pg72x->blockcount >= pg72x->blocks && pg72x->samplecount >= pg72x->samplesperblock)
+ { memset (&(ptr[index]), 0, (len - index) * sizeof (short)) ;
+ return total ;
+ } ;
+
+ if (pg72x->samplecount >= pg72x->samplesperblock)
+ au_g72x_read_block (psf, pg72x) ;
+
+ count = pg72x->samplesperblock - pg72x->samplecount ;
+ count = (len - index > count) ? count : len - index ;
+
+ memcpy (&(ptr[index]), &(pg72x->samples [pg72x->samplecount]), count * sizeof (short)) ;
+ index += count ;
+ pg72x->samplecount += count ;
+ total = index ;
+ } ;
+
+ return total ;
+} /* au_g72x_read */
+
+static
+int au_g72x_read_s (SF_PRIVATE *psf, short *ptr, int len)
+{ G72x_DATA *pg72x ;
+ int total ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pg72x = (G72x_DATA*) psf->fdata ;
+
+ total = au_g72x_read (psf, pg72x, ptr, len) ;
+
+ return total ;
+} /* au_g72x_read_s */
+
+static
+int au_g72x_read_i (SF_PRIVATE *psf, int *ptr, int len)
+{ G72x_DATA *pg72x ;
+ short *sptr ;
+ int k, bufferlen, readcount = 0, count ;
+ int index = 0, total = 0 ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pg72x = (G72x_DATA*) psf->fdata ;
+
+ 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) ;
+ for (k = 0 ; k < readcount ; k++)
+ ptr [index+k] = (int) (sptr [k]) ;
+ index += readcount ;
+ total += count ;
+ len -= readcount ;
+ } ;
+ return total ;
+} /* au_g72x_read_i */
+
+static
+int au_g72x_read_d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ G72x_DATA *pg72x ;
+ short *sptr ;
+ int k, bufferlen, readcount = 0, count ;
+ int index = 0, total = 0 ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pg72x = (G72x_DATA*) psf->fdata ;
+
+ 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) ;
+ for (k = 0 ; k < readcount ; k++)
+ ptr [index+k] = (double) (sptr [k]) ;
+ index += readcount ;
+ total += count ;
+ len -= readcount ;
+ } ;
+
+ return total ;
+} /* au_g72x_read_d */
+
+static
+off_t au_g72x_seek (SF_PRIVATE *psf, off_t offset, int whence)
+{
+
+ /* No simple solution. To do properly, would need to seek
+ ** to start of file and decode everything up to seek position.
+ ** Maybe implement SEEK_SET to 0 only?
+ */
+ return 0 ;
+
+/*
+** G72x_DATA *pg72x ;
+** int newblock, newsample, samplecount ;
+**
+** if (! psf->fdata)
+** return 0 ;
+** pg72x = (G72x_DATA*) psf->fdata ;
+**
+** if (! (psf->datalength && psf->dataoffset))
+** { psf->error = SFE_BAD_SEEK ;
+** return ((off_t) -1) ;
+** } ;
+**
+** samplecount = (8 * psf->datalength) / G721_32_BITS_PER_SAMPLE ;
+**
+** switch (whence)
+** { case SEEK_SET :
+** if (offset < 0 || offset > samplecount)
+** { psf->error = SFE_BAD_SEEK ;
+** return ((off_t) -1) ;
+** } ;
+** newblock = offset / pg72x->samplesperblock ;
+** newsample = offset % pg72x->samplesperblock ;
+** break ;
+**
+** case SEEK_CUR :
+** if (psf->current + offset < 0 || psf->current + offset > samplecount)
+** { psf->error = SFE_BAD_SEEK ;
+** return ((off_t) -1) ;
+** } ;
+** newblock = (8 * (psf->current + offset)) / pg72x->samplesperblock ;
+** newsample = (8 * (psf->current + offset)) % pg72x->samplesperblock ;
+** break ;
+**
+** case SEEK_END :
+** if (offset > 0 || samplecount + offset < 0)
+** { psf->error = SFE_BAD_SEEK ;
+** return ((off_t) -1) ;
+** } ;
+** newblock = (samplecount + offset) / pg72x->samplesperblock ;
+** newsample = (samplecount + offset) % pg72x->samplesperblock ;
+** break ;
+**
+** default :
+** psf->error = SFE_BAD_SEEK ;
+** return ((off_t) -1) ;
+** } ;
+**
+** if (psf->mode == SF_MODE_READ)
+** { fseek (psf->file, (int) (psf->dataoffset + newblock * pg72x->blocksize), SEEK_SET) ;
+** pg72x->blockcount = newblock ;
+** au_g72x_read_block (psf, pg72x) ;
+** pg72x->samplecount = newsample ;
+** }
+** else
+** { /+* What to do about write??? *+/
+** psf->error = SFE_BAD_SEEK ;
+** return ((off_t) -1) ;
+** } ;
+**
+** psf->current = newblock * pg72x->samplesperblock + newsample ;
+** return psf->current ;
+**
+*/
+} /* au_g72x_seek */
+
+/*==========================================================================================
+** G721 Write Functions.
+*/
+
+
+
+/*==========================================================================================
+*/
+
+static
+int au_g72x_write_block (SF_PRIVATE *psf, G72x_DATA *pg72x)
+{ int k ;
+
+ /* Encode the samples. */
+ g72x_encode_block (pg72x) ;
+
+ /* Write the block to disk. */
+ if ((k = fwrite (pg72x->block, 1, pg72x->blocksize, psf->file)) != pg72x->blocksize)
+ psf_sprintf (psf, "*** Warning : short write (%d != %d).\n", k, pg72x->blocksize) ;
+
+ pg72x->samplecount = 0 ;
+ pg72x->blockcount ++ ;
+
+ /* Set samples to zero for next block. */
+ memset (pg72x->samples, 0, G72x_BLOCK_SIZE * sizeof (short)) ;
+
+ return 1 ;
+} /* au_g72x_write_block */
+
+static
+int au_g72x_write (SF_PRIVATE *psf, G72x_DATA *pg72x, short *ptr, int len)
+{ int count, total = 0, index = 0 ;
+
+ while (index < len)
+ { count = pg72x->samplesperblock - pg72x->samplecount ;
+
+ if (count > len - index)
+ count = len - index ;
+
+ memcpy (&(pg72x->samples [pg72x->samplecount]), &(ptr [index]), count * sizeof (short)) ;
+ index += count ;
+ pg72x->samplecount += count ;
+ total = index ;
+
+ if (pg72x->samplecount >= pg72x->samplesperblock)
+ au_g72x_write_block (psf, pg72x) ;
+ } ;
+
+ return total ;
+} /* au_g72x_write */
+
+static
+int au_g72x_write_s (SF_PRIVATE *psf, short *ptr, int len)
+{ G72x_DATA *pg72x ;
+ int total ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pg72x = (G72x_DATA*) psf->fdata ;
+
+ total = au_g72x_write (psf, pg72x, ptr, len) ;
+
+ return total ;
+} /* au_g72x_write_s */
+
+static
+int au_g72x_write_i (SF_PRIVATE *psf, int *ptr, int len)
+{ G72x_DATA *pg72x ;
+ short *sptr ;
+ int k, bufferlen, writecount = 0, count ;
+ int index = 0, total = 0 ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pg72x = (G72x_DATA*) 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 = au_g72x_write (psf, pg72x, sptr, writecount) ;
+ index += writecount ;
+ total += count ;
+ len -= writecount ;
+ } ;
+ return total ;
+} /* au_g72x_write_i */
+
+static
+int au_g72x_write_d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ G72x_DATA *pg72x ;
+ short *sptr ;
+ int k, bufferlen, writecount = 0, count ;
+ int index = 0, total = 0 ;
+
+ if (! psf->fdata)
+ return 0 ;
+ pg72x = (G72x_DATA*) 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 = au_g72x_write (psf, pg72x, sptr, writecount) ;
+ index += writecount ;
+ total += count ;
+ len -= writecount ;
+ } ;
+ return total ;
+} /* au_g72x_write_d */
+
+static
+int au_g72x_close (SF_PRIVATE *psf)
+{ G72x_DATA *pg72x ;
+
+ if (! psf->fdata)
+ return 0 ;
+
+ pg72x = (G72x_DATA*) psf->fdata ;
+
+ if (psf->mode == SF_MODE_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) ;
+
+
+
+ /* Now we know for certain the length of the file we can
+ ** re-write correct values for the RIFF and data chunks.
+ */
+
+ } ;
+
+ if (psf->fdata)
+ free (psf->fdata) ;
+ psf->fdata = NULL ;
+
+ return 0 ;
+} /* au_g72x_close */
+
--- /dev/null
+++ b/common/libsndfile/src/common.c
@@ -1,0 +1,367 @@
+/*
+** Copyright (C) 1999-2000 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 <stdarg.h>
+#include <string.h>
+
+#include "sndfile.h"
+#include "sfendian.h"
+#include "common.h"
+
+/*-----------------------------------------------------------------------------------------------
+ */
+
+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 */
+
+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 */
+
+/*-----------------------------------------------------------------------------------------------
+ */
+
+#define psf_putchar(a,b) \
+ if ((a)->strindex < SF_BUFFER_LEN - 1) \
+ { (a)->strbuffer [(a)->strindex++] = (b) ; \
+ (a)->strbuffer [(a)->strindex] = 0 ; \
+ } ;
+
+void psf_sprintf (SF_PRIVATE *psf, char *format, ...)
+{ va_list ap ;
+ int d, tens, shift ;
+ char c, *strptr, istr [5] ;
+
+ va_start(ap, format);
+
+ /* printf ("psf_sprintf : %s\n", format) ; */
+
+ while ((c = *format++))
+ { if (c != '%')
+ { psf_putchar (psf, c) ;
+ continue ;
+ } ;
+
+ switch((c = *format++))
+ { case 's': /* string */
+ strptr = va_arg (ap, char *) ;
+ while (*strptr)
+ psf_putchar (psf, *strptr++) ;
+ break;
+
+ case 'd': /* int */
+ d = va_arg (ap, int) ;
+
+ if (d == 0)
+ { psf_putchar (psf, '0') ;
+ break ;
+ }
+ if (d < 0)
+ { psf_putchar (psf, '-') ;
+ d = -d ;
+ } ;
+ tens = 1 ;
+ while (d / tens >= 10)
+ tens *= 10 ;
+ while (tens > 0)
+ { psf_putchar (psf, '0' + d / tens) ;
+ d %= tens ;
+ tens /= 10 ;
+ } ;
+ break;
+
+ case 'X': /* hex */
+ d = va_arg (ap, int) ;
+
+ if (d == 0)
+ { psf_putchar (psf, '0') ;
+ break ;
+ } ;
+ shift = 28 ;
+ while (! ((0xF << shift) & d))
+ shift -= 4 ;
+ while (shift >= 0)
+ { c = (d >> shift) & 0xF ;
+ psf_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)
+ { istr [0] = d & 0xFF ;
+ istr [1] = (d >> 8) & 0xFF ;
+ istr [2] = (d >> 16) & 0xFF ;
+ istr [3] = (d >> 24) & 0xFF ;
+ }
+ else
+ { istr [3] = d & 0xFF ;
+ istr [2] = (d >> 8) & 0xFF ;
+ istr [1] = (d >> 16) & 0xFF ;
+ istr [0] = (d >> 24) & 0xFF ;
+ } ;
+ istr [4] = 0 ;
+ strptr = istr ;
+ while (*strptr)
+ { c = *strptr++ ;
+ psf_putchar (psf, c) ;
+ } ;
+ break;
+
+ default :
+ psf_putchar (psf, '?') ;
+ psf_putchar (psf, c) ;
+ psf_putchar (psf, '?') ;
+ break ;
+ } /* switch */
+ } /* while */
+
+ va_end(ap);
+ return ;
+} /* psf_sprintf */
+
+/*------------------------------------------------------------------------------
+** Format specifiers for psf_hprintf are as follows
+** m - marker - four bytes - no endian problems
+** w - two byte value - little endian
+** W - two byte value - big endian
+** l - four byte value - little endian
+** L - four byte value - big endian
+** s - string preceded by a little endian four byte length
+** S - string preceded by a big endian four byte length
+** b - binary data (see below)
+**
+** To write a word followed by a long (both little endian) use:
+** psf_hprintf ("wl", wordval, longval) ;
+**
+** To write binary data use:
+** psf_hprintf ("b", &bindata, sizeof (bindata)) ;
+*/
+
+/* These macros may seem a bit messy but do prevent problems with processors which
+** seg. fault when asked to write an int or short to a non-int/short aligned address.
+*/
+
+#if (CPU_IS_BIG_ENDIAN == 1)
+#define put_int(psf,x) { (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_short(psf,x) { (psf)->header [(psf)->headindex++] = ((x) >> 8) & 0xFF ; \
+ (psf)->header [(psf)->headindex++] = (x) & 0xFF ; }
+#elif (CPU_IS_LITTLE_ENDIAN == 1)
+#define put_int(psf,x) { (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) { (psf)->header [(psf)->headindex++] = (x) & 0xFF ; \
+ (psf)->header [(psf)->headindex++] = ((x) >> 8) & 0xFF ; }
+
+#else
+# error "Cannot determine endian-ness of processor."
+#endif
+
+void psf_hprintf (SF_PRIVATE *psf, char *format, ...)
+{ va_list argptr ;
+ unsigned int longdata ;
+ unsigned short worddata ;
+ void *bindata ;
+ size_t size ;
+ char c, *strptr ;
+
+ va_start(argptr, format);
+
+ while ((c = *format++))
+ { switch (c)
+ { case 'm' :
+ longdata = va_arg (argptr, unsigned int) ;
+ put_int (psf, longdata) ;
+ break ;
+
+ case 'l' :
+ longdata = va_arg (argptr, unsigned int) ;
+ longdata = H2LE_INT (longdata) ;
+ put_int (psf, longdata) ;
+ break ;
+
+ case 'L' :
+ longdata = va_arg (argptr, unsigned int) ;
+ longdata = H2BE_INT (longdata) ;
+ put_int (psf, longdata) ;
+ break ;
+
+ case 'w' :
+ worddata = va_arg (argptr, int) & 0xFFFF ;
+ worddata = H2LE_SHORT (worddata) ;
+ put_short (psf, worddata) ;
+ break ;
+
+ case 'W' :
+ worddata = va_arg (argptr, int) & 0xFFFF ;
+ worddata = H2BE_SHORT (worddata) ;
+ put_short (psf, worddata) ;
+ break ;
+
+ case 'b' :
+ bindata = va_arg (argptr, void *) ;
+ size = va_arg (argptr, size_t) ;
+ memcpy (&(psf->header [psf->headindex]), bindata, size) ;
+ psf->headindex += size ;
+ break ;
+
+ case 's' :
+ strptr = va_arg (argptr, char *) ;
+ size = strlen (strptr) + 1 ;
+ size += (size & 1) ;
+ longdata = H2LE_INT (size) ;
+ put_int (psf, longdata) ;
+ memcpy (&(psf->header [psf->headindex]), strptr, size) ;
+ psf->headindex += size ;
+ break ;
+
+ case 'S' :
+ strptr = va_arg (argptr, char *) ;
+ size = strlen (strptr) + 1 ;
+ size += (size & 1) ;
+ longdata = H2BE_INT (size) ;
+ put_int (psf, longdata) ;
+ memcpy (&(psf->header [psf->headindex]), strptr, size) ;
+ psf->headindex += size ;
+ break ;
+
+ default : break ;
+ } ;
+ } ;
+
+ va_end(argptr);
+ return ;
+} /* psf_hprintf */
+
+
+/*-----------------------------------------------------------------------------------------------
+*/
+
+void psf_hsetf (SF_PRIVATE *psf, unsigned int marker, char *format, ...)
+{ va_list argptr ;
+ unsigned int longdata, oldheadindex ;
+ unsigned short worddata ;
+ void *bindata ;
+ size_t size ;
+ char c, *strptr ;
+
+ /* Save old head index. */
+ oldheadindex = psf->headindex ;
+ psf->headindex = 0 ;
+
+ /* Find the marker. */
+ while (psf->headindex < oldheadindex)
+ { if (*((unsigned int*) &(psf->header[psf->headindex])) == marker)
+ break ;
+ psf->headindex += 4 ;
+ } ;
+
+ /* If not found return. */
+ if (psf->headindex >= oldheadindex)
+ return ;
+
+ /* Move past marker. */
+ psf->headindex += 4 ;
+
+ va_start(argptr, format);
+
+ while ((c = *format++))
+ { switch (c)
+ { case 'm' :
+ longdata = va_arg (argptr, unsigned int) ;
+ put_int (psf, longdata) ;
+ break ;
+
+ case 'l' :
+ longdata = va_arg (argptr, unsigned int) ;
+ longdata = H2LE_INT (longdata) ;
+ put_int (psf, longdata) ;
+ break ;
+
+ case 'L' :
+ longdata = va_arg (argptr, unsigned int) ;
+ longdata = H2BE_INT (longdata) ;
+ put_int (psf, longdata) ;
+ break ;
+
+ case 'w' :
+ worddata = va_arg (argptr, int) & 0xFFFF ;
+ worddata = H2LE_SHORT (worddata) ;
+ put_short (psf, worddata) ;
+ break ;
+
+ case 'W' :
+ worddata = va_arg (argptr, int) & 0xFFFF ;
+ worddata = H2BE_SHORT (worddata) ;
+ put_short (psf, worddata) ;
+ break ;
+
+ case 'b' :
+ bindata = va_arg (argptr, void *) ;
+ size = va_arg (argptr, size_t) ;
+ memcpy (&(psf->header [psf->headindex]), bindata, size) ;
+ psf->headindex += size ;
+ break ;
+
+ case 's' :
+ strptr = va_arg (argptr, char *) ;
+ size = strlen (strptr) + 1 ;
+ size += (size & 1) ;
+ longdata = H2LE_INT (size) ;
+ put_int (psf, longdata) ;
+ memcpy (&(psf->header [psf->headindex]), strptr, size) ;
+ psf->headindex += size ;
+ break ;
+
+ case 'S' :
+ strptr = va_arg (argptr, char *) ;
+ size = strlen (strptr) + 1 ;
+ size += (size & 1) ;
+ longdata = H2BE_INT (size) ;
+ put_int (psf, longdata) ;
+ memcpy (&(psf->header [psf->headindex]), strptr, size) ;
+ psf->headindex += size ;
+ break ;
+
+ default : break ;
+ } ;
+ } ;
+
+ va_end(argptr);
+
+ psf->headindex = oldheadindex ;
+ return ;
+} /* psf_hsetf */
--- /dev/null
+++ b/common/libsndfile/src/common.h
@@ -1,0 +1,200 @@
+/*
+** Copyright (C) 1999-2000 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 COMMON_H_INCLUDED
+#define COMMON_H_INCLUDED
+
+#ifdef _WIN32
+ #pragma pack(push,1)
+#endif
+
+
+#define SF_BUFFER_LEN (4096)
+#define SF_FILENAME_LEN (256)
+#define SF_HEADER_LEN (2048)
+
+#define BITWIDTH2BYTES(x) (((x) + 7) / 8)
+
+enum
+{ SF_MODE_READ = 1,
+ SF_MODE_WRITE = 2,
+ SF_MODE_RW = 3
+} ;
+
+enum
+{ SF_ENDIAN_LITTLE = 100,
+ SF_ENDIAN_BIG = 200
+} ;
+
+enum
+{ SF_FALSE = 0,
+ SF_TRUE = 1
+} ;
+
+typedef int (*func_seek) (void*, int, int) ;
+
+typedef int (*func_short) (void*, short *ptr, unsigned int len) ;
+typedef int (*func_int) (void*, int *ptr, unsigned int len) ;
+typedef int (*func_double) (void*, double *ptr, unsigned int len, int normalize) ;
+
+typedef int (*func_close) (void*) ;
+
+typedef struct
+{ /* Force the compiler to double align the start of buffer. */
+ double buffer [SF_BUFFER_LEN/sizeof(double)] ;
+ char strbuffer [SF_BUFFER_LEN] ;
+ char filename [SF_FILENAME_LEN] ;
+ char header [SF_HEADER_LEN] ;
+ int Magick ;
+ unsigned int strindex ;
+ unsigned int headindex ;
+ FILE *file ;
+ int mode ;
+ int error ;
+ int endian ;
+
+ SF_INFO sf ;
+
+ long dataoffset ; /* Offset in number of bytes from beginning of file. */
+ long datalength ; /* Length in bytes of the audio data. */
+ unsigned int blockwidth ; /* Size in bytes of one set of interleaved samples. */
+ unsigned int bytewidth ; /* Size in bytes of one sample (one channel). */
+
+ long filelength ;
+ long current ;
+
+ void *fdata ;
+
+ double normfactor ;
+
+ func_seek seek_func ;
+
+ func_short read_short ;
+ func_int read_int ;
+ func_double read_double ;
+
+ func_short write_short ;
+ func_int write_int ;
+ func_double write_double ;
+
+ func_close close ;
+
+} SF_PRIVATE ;
+
+enum
+{ SFE_NO_ERROR = 0,
+
+ SFE_BAD_FILE,
+ SFE_OPEN_FAILED,
+ SFE_BAD_OPEN_FORMAT,
+ SFE_BAD_SNDFILE_PTR,
+ SFE_BAD_SF_INFO_PTR,
+ SFE_BAD_INT_FD,
+ SFE_BAD_INT_PTR,
+ SFE_MALLOC_FAILED,
+ SFE_BAD_SEEK,
+ SFE_NOT_SEEKABLE,
+ SFE_UNIMPLEMENTED,
+ SFE_BAD_READ_ALIGN,
+ SFE_BAD_WRITE_ALIGN,
+ SFE_UNKNOWN_FORMAT,
+ SFE_NOT_READMODE,
+ SFE_NOT_WRITEMODE,
+ SFE_BAD_MODE_RW,
+ SFE_BAD_SF_INFO,
+ SFE_SHORT_READ,
+ SFE_SHORT_WRITE,
+ SFE_INTERNAL,
+
+ SFE_WAV_NO_RIFF,
+ SFE_WAV_NO_WAVE,
+ SFE_WAV_NO_FMT,
+ SFE_WAV_FMT_SHORT,
+ SFE_WAV_FMT_TOO_BIG,
+ SFE_WAV_BAD_FORMAT,
+ SFE_WAV_BAD_BLOCKALIGN,
+ SFE_WAV_NO_DATA,
+ SFE_WAV_ADPCM_NOT4BIT,
+ SFE_WAV_ADPCM_CHANNELS,
+ SFE_WAV_GSM610_FORMAT,
+ SFE_WAV_UNKNOWN_CHUNK,
+
+ SFE_AIFF_NO_FORM,
+ SFE_AIFF_UNKNOWN_CHUNK,
+ SFE_COMM_CHUNK_SIZE,
+ SFE_AIFF_NO_SSND,
+ SFE_AIFF_NO_DATA,
+
+ SFE_AU_UNKNOWN_FORMAT,
+ SFE_AU_NO_DOTSND,
+
+ SFE_RAW_READ_BAD_SPEC,
+ SFE_RAW_BAD_BITWIDTH,
+
+ SFE_PAF_NO_MARKER,
+ SFE_PAF_VERSION,
+ SFE_PAF_UNKNOWN_FORMAT,
+ SFE_PAF_SHORT_HEADER,
+
+ SFE_SVX_NO_FORM,
+ SFE_SVX_NO_BODY,
+ SFE_SVX_NO_DATA,
+ SFE_SVX_BAD_COMP,
+
+ SFE_NIST_BAD_HEADER,
+ SFE_NIST_BAD_ENCODING,
+
+ SFE_MAX_ERROR /* This must be last in list. */
+} ;
+
+void endswap_short_array (short *ptr, int len) ;
+void endswap_int_array (int *ptr, int len) ;
+
+void psf_sprintf (SF_PRIVATE *psf, char *format, ...) ;
+void psf_hprintf (SF_PRIVATE *psf, char *format, ...) ;
+void psf_hsetf (SF_PRIVATE *psf, unsigned int marker, char *format, ...) ;
+
+int aiff_open_read (SF_PRIVATE *psf) ;
+int aiff_open_write (SF_PRIVATE *psf) ;
+
+int au_open_read (SF_PRIVATE *psf) ;
+int au_nh_open_read (SF_PRIVATE *psf) ;
+int au_open_write (SF_PRIVATE *psf) ;
+
+int wav_open_read (SF_PRIVATE *psf) ;
+int wav_open_write (SF_PRIVATE *psf) ;
+
+int raw_open_read (SF_PRIVATE *psf) ;
+int raw_open_write (SF_PRIVATE *psf) ;
+
+int paf_open_read (SF_PRIVATE *psf) ;
+int paf_open_write (SF_PRIVATE *psf) ;
+
+int svx_open_read (SF_PRIVATE *psf) ;
+int svx_open_write (SF_PRIVATE *psf) ;
+
+int aunist_open_read (SF_PRIVATE *psf) ;
+int aunist_open_write (SF_PRIVATE *psf) ;
+
+
+#ifdef _WIN32
+ #pragma pack(pop,1)
+#endif
+
+#endif /* COMMON_H_INCLUDED */
+
--- /dev/null
+++ b/common/libsndfile/src/config.h.in
@@ -1,0 +1,57 @@
+/* src/config.h.in. Generated automatically from configure.in by autoheader. */
+
+/* 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 if the processor can read and write Intel x86 32 bit floats. */
+/* Otherwise set it to 0. */
+#undef CAN_READ_WRITE_x86_IEEE
+
+/* The number of bytes in a double. */
+#undef SIZEOF_DOUBLE
+
+/* The number of bytes in a float. */
+#undef SIZEOF_FLOAT
+
+/* The number of bytes in a int. */
+#undef SIZEOF_INT
+
+/* The number of bytes in a long. */
+#undef SIZEOF_LONG
+
+/* The number of bytes in a short. */
+#undef SIZEOF_SHORT
+
+/* The number of bytes in a void*. */
+#undef SIZEOF_VOIDP
+
+/* Define if you have the <endian.h> header file. */
+#undef HAVE_ENDIAN_H
+
+/* Name of package */
+#undef PACKAGE
+
+/* Version number of package */
+#undef VERSION
+
--- /dev/null
+++ b/common/libsndfile/src/newpcm.c
@@ -1,0 +1,44 @@
+/*
+** Copyright (C) 1999-2000 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 <unistd.h>
+
+#include "config.h"
+#include "sndfile.h"
+#include "common.h"
+#include "sfendian.h"
+#include "pcm.h"
+
+
+/*==================================================================================
+*/
+
+int pcm_read_init (SF_PRIVATE *psf, int channels, int bytewidth)
+{
+
+ return 0 ;
+} /* pcm_read_init */
+
+int pcm_write_init (SF_PRIVATE *psf, int channels, int bytewidth)
+{
+
+ return 0 ;
+} /* pcm_read_init */
+
+
--- /dev/null
+++ b/common/libsndfile/src/paf.c
@@ -1,0 +1,774 @@
+/*
+** Copyright (C) 1999-2000 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 <fcntl.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "sndfile.h"
+#include "config.h"
+#include "sfendian.h"
+#include "common.h"
+#include "pcm.h"
+
+
+/*------------------------------------------------------------------------------
+** 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
+
+#define FAP_MARKER (MAKE_MARKER ('f', 'a', 'p', ' '))
+#define PAF_MARKER (MAKE_MARKER (' ', 'p', 'a', 'f'))
+
+/*------------------------------------------------------------------------------
+** Other defines.
+*/
+
+#define PAF_HEADER_LENGTH 2048
+
+/*------------------------------------------------------------------------------
+** Typedefs.
+*/
+
+typedef struct
+{ unsigned int version ;
+ unsigned int endianness ;
+ unsigned int samplerate ;
+ unsigned int format ;
+ unsigned int channels ;
+ unsigned int source ;
+} PAF_FMT ;
+
+typedef struct
+{ unsigned int index, blocks, channels, samplesperblock, blockcount, blocksize, samplecount ;
+ unsigned char *block ;
+ int *samples ;
+ unsigned char data [4] ;
+} PAF24_PRIVATE ;
+
+
+
+/*------------------------------------------------------------------------------
+** Private static functions.
+*/
+
+static int paf24_reader_init (SF_PRIVATE *psf) ;
+static int paf24_writer_init (SF_PRIVATE *psf) ;
+
+static int paf24_read_block (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24) ;
+
+static int paf24_close (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_d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+
+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_d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+
+static off_t paf24_seek (SF_PRIVATE *psf, off_t offset, int whence) ;
+
+static void endswap_paf_fmt (PAF_FMT *ppaf_fmt) ;
+
+/*------------------------------------------------------------------------------
+** Public functions.
+*/
+
+int paf_open_read (SF_PRIVATE *psf)
+{ PAF_FMT paf_fmt ;
+ unsigned int marker ;
+ int error ;
+
+ fread (&marker, sizeof (marker), 1, psf->file) ;
+ if (marker != PAF_MARKER && marker != FAP_MARKER)
+ return SFE_PAF_NO_MARKER ;
+
+ psf_sprintf (psf, "Signature : %D\n", marker) ;
+
+ fread (&paf_fmt, sizeof (PAF_FMT), 1, psf->file) ;
+
+ if (CPU_IS_LITTLE_ENDIAN && marker == PAF_MARKER)
+ endswap_paf_fmt (&paf_fmt) ;
+ else if (CPU_IS_BIG_ENDIAN && marker == FAP_MARKER)
+ endswap_paf_fmt (&paf_fmt) ;
+
+ psf_sprintf (psf, "Version : %d\n", paf_fmt.version) ;
+ if (paf_fmt.version != 0)
+ { psf_sprintf (psf, "*** Bad version number. Should be zero.\n") ;
+ return SFE_PAF_VERSION ;
+ } ;
+
+ psf_sprintf (psf, "Endianness : %d => ", paf_fmt.endianness) ;
+ if (paf_fmt.endianness)
+ psf_sprintf (psf, "Little\n", paf_fmt.endianness) ;
+ else
+ psf_sprintf (psf, "Big\n", paf_fmt.endianness) ;
+ psf_sprintf (psf, "Sample Rate : %d\n", paf_fmt.samplerate) ;
+
+
+ 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->sf.seekable = SF_TRUE ;
+
+ if (fseek (psf->file, psf->dataoffset, SEEK_SET))
+ return SFE_BAD_SEEK ;
+
+ psf->sf.samplerate = paf_fmt.samplerate ;
+ psf->sf.channels = paf_fmt.channels ;
+
+ /* Only fill in type major. */
+ psf->sf.format = SF_FORMAT_PAF ;
+
+ psf->sf.sections = 1 ;
+
+ psf_sprintf (psf, "Format : %d => ", paf_fmt.format) ;
+
+ switch (paf_fmt.format)
+ { case 0 : psf_sprintf (psf, "16 bit linear PCM\n") ;
+ psf->sf.pcmbitwidth = 16 ;
+ psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
+
+ psf->sf.format |= paf_fmt.endianness ? SF_FORMAT_PCM_LE : SF_FORMAT_PCM_BE ; ;
+
+ if (psf->endian == SF_ENDIAN_BIG)
+ { psf->read_short = (func_short) pcm_read_bes2s ;
+ psf->read_int = (func_int) pcm_read_bes2i ;
+ psf->read_double = (func_double) pcm_read_bes2d ;
+ }
+ else
+ { psf->read_short = (func_short) pcm_read_les2s ;
+ psf->read_int = (func_int) pcm_read_les2i ;
+ psf->read_double = (func_double) pcm_read_les2d ;
+ } ;
+ psf->blockwidth = psf->bytewidth * psf->sf.channels ;
+
+ psf_sprintf (psf, "X blockwidth : %d\n", psf->blockwidth) ;
+
+ if (psf->blockwidth)
+ psf->sf.samples = psf->datalength / psf->blockwidth ;
+ else
+ psf_sprintf (psf, "*** Warning : blockwidth == 0.\n") ;
+
+ psf_sprintf (psf, "X samples : %d\n", psf->sf.samples) ;
+ break ;
+
+ case 1 : psf_sprintf (psf, "24 bit linear PCM\n") ;
+ psf->sf.pcmbitwidth = 24 ;
+ psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
+
+ psf->sf.format |= paf_fmt.endianness ? SF_FORMAT_PCM_LE : SF_FORMAT_PCM_BE ; ;
+
+ psf->read_short = (func_short) paf24_read_s ;
+ psf->read_int = (func_int) paf24_read_i ;
+ 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_sprintf (psf, "X blockwidth : %d\n", psf->blockwidth) ;
+ psf->sf.samples = 10 * psf->datalength / (32 * psf->sf.channels) ;
+ psf_sprintf (psf, "X samples : %d\n", psf->sf.samples) ;
+ break ;
+
+ default : psf_sprintf (psf, "Unknown\n") ;
+ return SFE_PAF_UNKNOWN_FORMAT ;
+ break ;
+ } ;
+
+ psf_sprintf (psf, "Channels : %d\n", paf_fmt.channels) ;
+ psf_sprintf (psf, "Source : %d => ", paf_fmt.source) ;
+
+ switch (paf_fmt.source)
+ { case 1 : psf_sprintf (psf, "Analog Recording\n") ;
+ break ;
+ case 2 : psf_sprintf (psf, "Digital Transfer\n") ;
+ break ;
+ case 3 : psf_sprintf (psf, "Multi-track Mixdown\n") ;
+ break ;
+ case 5 : psf_sprintf (psf, "Audio Resulting From DSP Processing\n") ;
+ break ;
+ default : psf_sprintf (psf, "Unknown\n") ;
+ break ;
+ } ;
+
+ return 0 ;
+} /* paf_open_read */
+
+/*------------------------------------------------------------------------------
+*/
+
+int paf_open_write (SF_PRIVATE *psf)
+{ PAF_FMT paf_fmt ;
+ int format, subformat, error, count ;
+ unsigned int marker, big_endian_file ;
+
+ format = psf->sf.format & SF_FORMAT_TYPEMASK ;
+ subformat = psf->sf.format & SF_FORMAT_SUBMASK ;
+
+ if (format != SF_FORMAT_PAF)
+ return SFE_BAD_OPEN_FORMAT ;
+
+ if (subformat == SF_FORMAT_PCM_BE)
+ { big_endian_file = 1 ;
+ paf_fmt.endianness = 0 ;
+ }
+ else if (subformat == SF_FORMAT_PCM_LE)
+ { big_endian_file = 0 ;
+ paf_fmt.endianness = 1 ;
+ }
+ else
+ return SFE_BAD_OPEN_FORMAT ;
+
+ paf_fmt.version = 0 ;
+ paf_fmt.samplerate = psf->sf.samplerate ;
+
+ switch (psf->sf.pcmbitwidth)
+ { case 16 : paf_fmt.format = 0 ;
+ psf->bytewidth = 2 ;
+ break ;
+
+ case 24 : paf_fmt.format = 1 ;
+ psf->bytewidth = 3 ;
+ break ;
+
+ default : return SFE_PAF_UNKNOWN_FORMAT ;
+ } ;
+
+ paf_fmt.channels = psf->sf.channels ;
+ paf_fmt.source = 0 ;
+
+ psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
+
+ 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 = PAF_HEADER_LENGTH ;
+ psf->datalength = psf->blockwidth * psf->sf.samples ;
+ psf->filelength = psf->datalength + psf->dataoffset ;
+ psf->error = 0 ;
+
+ switch (paf_fmt.format)
+ { case 0 : /* 16-bit linear PCM. */
+ if (big_endian_file)
+ { psf->write_short = (func_short) pcm_write_s2bes ;
+ psf->write_int = (func_int) pcm_write_i2bes ;
+ psf->write_double = (func_double) pcm_write_d2bes ;
+ }
+ else
+ { psf->write_short = (func_short) pcm_write_s2les ;
+ psf->write_int = (func_int) pcm_write_i2les ;
+ psf->write_double = (func_double) pcm_write_d2les ;
+ } ;
+ 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_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 ;
+ } ;
+
+ if (big_endian_file)
+ { if (CPU_IS_LITTLE_ENDIAN)
+ endswap_paf_fmt (&paf_fmt) ;
+ marker = PAF_MARKER ;
+ }
+ else
+ { if (CPU_IS_BIG_ENDIAN)
+ endswap_paf_fmt (&paf_fmt) ;
+ marker = FAP_MARKER ;
+ } ;
+
+ fwrite (&marker, sizeof (marker), 1, psf->file) ;
+ fwrite (&paf_fmt, sizeof (PAF_FMT), 1, psf->file) ;
+
+ /* Fill the file from current position to dataoffset with zero bytes. */
+ memset (psf->buffer, 0, sizeof (psf->buffer)) ;
+ count = psf->dataoffset - ftell (psf->file) ;
+ while (count > 0)
+ { int current = (count > sizeof (psf->buffer)) ? sizeof (psf->buffer) : count ;
+ fwrite (psf->buffer, current, 1, psf->file) ;
+ count -= current ;
+ } ;
+
+ return 0 ;
+} /* paf_open_write */
+
+/*===============================================================================
+** 24 bit PAF files have a really weird encoding.
+** For a mono file, 10 samples (each being 3 bytes) are packed into a 32 byte
+** block. The 8 ints in this 32 byte block are then endian swapped (as ints)
+** if necessary before being written to disk.
+** For a stereo file, blocks of 10 samples from the same channel are encoded
+** into 32 bytes as fro the mono case. The 32 block bytes are then interleaved
+** on disk.
+** Reading has to reverse the above process :-).
+** Weird!!!
+**
+** The code below attempts to gain efficiency while maintaining readability.
+*/
+
+static
+int paf24_reader_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_sprintf (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 ;
+
+ paf24_read_block (psf, ppaf24) ; /* Read first block. */
+
+ return 0 ;
+} /* paf24_reader_init */
+
+
+static
+int paf24_read_block (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24)
+{ int k, *iptr, newsample, channel ;
+ unsigned char *cptr ;
+
+ ppaf24->blockcount ++ ;
+ ppaf24->samplecount = 0 ;
+
+ if (ppaf24->blockcount > ppaf24->blocks)
+ { memset (ppaf24->samples, 0, ppaf24->samplesperblock * ppaf24->channels) ;
+ return 1 ;
+ } ;
+
+ /* Read the block. */
+
+ if ((k = fread (ppaf24->block, 1, ppaf24->blocksize, psf->file)) != ppaf24->blocksize)
+ psf_sprintf (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]) ;
+ } ;
+
+ /* Unpack block. */
+
+ for (k = 0 ; k < 10 * 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 ;
+ } ;
+
+ return 1 ;
+} /* paf24_read_block */
+
+static
+int paf24_read (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24, int *ptr, int len)
+{ int 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)) ;
+ return total ;
+ } ;
+
+ if (ppaf24->samplecount >= ppaf24->samplesperblock)
+ paf24_read_block (psf, ppaf24) ;
+
+ count = (ppaf24->samplesperblock - ppaf24->samplecount) * ppaf24->channels ;
+ count = (len - index > count) ? count : len - index ;
+
+ memcpy (&(ptr[index]), &(ppaf24->samples [ppaf24->samplecount * ppaf24->channels]), count * sizeof (int)) ;
+ index += count ;
+ ppaf24->samplecount += count / ppaf24->channels ;
+ total = index ;
+ } ;
+
+ return total ;
+} /* paf24_read */
+
+static
+int paf24_read_s (SF_PRIVATE *psf, short *ptr, int len)
+{ PAF24_PRIVATE *ppaf24 ;
+ int *iptr ;
+ int k, bufferlen, readcount = 0, count ;
+ int index = 0, total = 0 ;
+
+ if (! psf->fdata)
+ return 0 ;
+ ppaf24 = (PAF24_PRIVATE*) psf->fdata ;
+
+ iptr = (int*) psf->buffer ;
+ bufferlen = psf->sf.channels * ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / 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) ;
+ index += readcount ;
+ total += count ;
+ len -= readcount ;
+ } ;
+ return total ;
+} /* paf24_read_s */
+
+static
+int paf24_read_i (SF_PRIVATE *psf, int *ptr, int len)
+{ PAF24_PRIVATE *ppaf24 ;
+ int total ;
+
+ if (! psf->fdata)
+ return 0 ;
+ ppaf24 = (PAF24_PRIVATE*) psf->fdata ;
+
+ total = paf24_read (psf, ppaf24, ptr, len) ;
+
+ return total ;
+} /* paf24_read_i */
+
+static
+int paf24_read_d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ PAF24_PRIVATE *ppaf24 ;
+ int *iptr ;
+ int k, bufferlen, readcount = 0, count ;
+ int index = 0, total = 0 ;
+
+ if (! psf->fdata)
+ return 0 ;
+ ppaf24 = (PAF24_PRIVATE*) psf->fdata ;
+
+ iptr = (int*) psf->buffer ;
+ bufferlen = psf->sf.channels * ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / 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]) ;
+ index += readcount ;
+ total += count ;
+ len -= readcount ;
+ } ;
+ return total ;
+} /* paf24_read_d */
+
+/*---------------------------------------------------------------------------
+*/
+
+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_sprintf (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 ;
+ unsigned char *cptr ;
+
+ /* First pack block. */
+
+ for (k = 0 ; k < 10 * 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 ;
+ } ;
+
+ /* 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]) ;
+ } ;
+
+ /* Write block to disk. */
+
+ if ((k = fwrite (ppaf24->block, 1, ppaf24->blocksize, psf->file)) != ppaf24->blocksize)
+ psf_sprintf (psf, "*** Warning : short write (%d != %d).\n", k, ppaf24->blocksize) ;
+
+ ppaf24->blockcount ++ ;
+ ppaf24->samplecount = 0 ;
+
+ return 1 ;
+} /* paf24_write_block */
+
+static
+int paf24_write (SF_PRIVATE *psf, PAF24_PRIVATE *ppaf24, int *ptr, int len)
+{ int count, total = 0, index = 0 ;
+
+ while (index < len)
+ { count = (ppaf24->samplesperblock - ppaf24->samplecount) * ppaf24->channels ;
+
+ if (count > len - index)
+ count = len - index ;
+
+ memcpy (&(ppaf24->samples [ppaf24->samplecount * ppaf24->channels]), &(ptr [index]), count * sizeof (int)) ;
+ index += count ;
+ ppaf24->samplecount += count / ppaf24->channels ;
+ total = index ;
+
+ if (ppaf24->samplecount >= ppaf24->samplesperblock)
+ paf24_write_block (psf, ppaf24) ;
+ } ;
+
+ return total ;
+} /* paf24_write */
+
+static
+int paf24_write_s (SF_PRIVATE *psf, short *ptr, int len)
+{ PAF24_PRIVATE *ppaf24 ;
+ int *iptr ;
+ int k, bufferlen, writecount = 0, count ;
+ int index = 0, total = 0 ;
+
+ if (! psf->fdata)
+ return 0 ;
+ ppaf24 = (PAF24_PRIVATE*) psf->fdata ;
+
+ iptr = (int*) psf->buffer ;
+ bufferlen = psf->sf.channels * ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (int) ;
+ while (len > 0)
+ { writecount = (len >= bufferlen) ? bufferlen : len ;
+ for (k = 0 ; k < writecount ; k++)
+ iptr [k] = ((int) ptr [index+k]) * 256 ;
+ count = paf24_write (psf, ppaf24, iptr, writecount) ;
+ index += writecount ;
+ total += count ;
+ len -= writecount ;
+ } ;
+ return total ;
+} /* paf24_write_s */
+
+static
+int paf24_write_i (SF_PRIVATE *psf, int *ptr, int len)
+{ PAF24_PRIVATE *ppaf24 ;
+ int total = 0 ;
+
+ if (! psf->fdata)
+ return 0 ;
+ ppaf24 = (PAF24_PRIVATE*) psf->fdata ;
+
+ total = paf24_write (psf, ppaf24, ptr, len) ;
+
+ return total ;
+} /* paf24_write_i */
+
+static
+int paf24_write_d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ PAF24_PRIVATE *ppaf24 ;
+ int *iptr ;
+ int k, bufferlen, writecount = 0, count ;
+ int index = 0, total = 0 ;
+
+ if (! psf->fdata)
+ return 0 ;
+ ppaf24 = (PAF24_PRIVATE*) psf->fdata ;
+
+ iptr = (int*) psf->buffer ;
+ bufferlen = psf->sf.channels * ((SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth) / sizeof (int) ;
+ while (len > 0)
+ { writecount = (len >= bufferlen) ? bufferlen : len ;
+ for (k = 0 ; k < writecount ; k++)
+ iptr [k] = (int) ptr [index+k] ;
+ count = paf24_write (psf, ppaf24, iptr, writecount) ;
+ index += writecount ;
+ total += count ;
+ len -= writecount ;
+ } ;
+ return total ;
+} /* paf24_write_d */
+
+/*---------------------------------------------------------------------------
+*/
+
+static
+off_t paf24_seek (SF_PRIVATE *psf, off_t 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 ((off_t) -1) ;
+ } ;
+
+ switch (whence)
+ { case SEEK_SET :
+ if (offset < 0 || offset > ppaf24->blocks * ppaf24->samplesperblock)
+ { psf->error = SFE_BAD_SEEK ;
+ return ((off_t) -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 ((off_t) -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 ((off_t) -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 ((off_t) -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 ((off_t) -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 */
--- /dev/null
+++ b/common/libsndfile/src/pcm.c
@@ -1,0 +1,1955 @@
+/*
+** Copyright (C) 1999-2000 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 <unistd.h>
+
+#include "config.h"
+#include "sndfile.h"
+#include "common.h"
+#include "sfendian.h"
+#include "pcm.h"
+
+/* Important!!! Do not assume that sizeof (tribyte) == 3. Some compilers
+** (Metrowerks CodeWarrior for Mac is one) pad the struct with an extra byte.
+*/
+
+typedef struct
+{ char bytes [3] ;
+} tribyte ;
+
+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 f2s_array (float *buffer, unsigned int count, short *ptr, int index) ;
+
+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 f2i_array (float *buffer, unsigned int count, int *ptr, int index) ;
+
+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 f2d_array (float *buffer, unsigned int count, double *ptr, int index, 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 s2f_array (short *ptr, int index, float *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 i2f_array (int *ptr, int index, float *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 d2f_array (double *ptr, int index, float *buffer, unsigned int count, double normfact) ;
+
+
+/*-----------------------------------------------------------------------------------------------
+ */
+
+int pcm_read_sc2s (SF_PRIVATE *psf, short *ptr, int 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 = fread (psf->buffer, 1, readcount, psf->file) ;
+ sc2s_array ((signed char*) (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 ;
+} /* pcm_read_sc2s */
+
+int pcm_read_uc2s (SF_PRIVATE *psf, short *ptr, int 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 = fread (psf->buffer, 1, readcount, psf->file) ;
+ uc2s_array ((unsigned char*) (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 ;
+} /* pcm_read_uc2s */
+
+int pcm_read_bes2s (SF_PRIVATE *psf, short *ptr, int len)
+{ int total ;
+
+ total = fread (ptr, 1, len * sizeof (short), psf->file) ;
+ if (CPU_IS_LITTLE_ENDIAN)
+ endswap_short_array (ptr, len) ;
+
+ total /= psf->bytewidth ;
+ if (total < len)
+ psf->error = SFE_SHORT_READ ;
+
+ return total ;
+} /* pcm_read_bes2s */
+
+int pcm_read_les2s (SF_PRIVATE *psf, short *ptr, int len)
+{ int total ;
+
+ total = fread (ptr, 1, len * sizeof (short), psf->file) ;
+ if (CPU_IS_BIG_ENDIAN)
+ endswap_short_array (ptr, len) ;
+
+ total /= psf->bytewidth ;
+ if (total < len)
+ psf->error = SFE_SHORT_READ ;
+
+ return total ;
+} /* pcm_read_les2s */
+
+int pcm_read_bet2s (SF_PRIVATE *psf, short *ptr, int 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 = fread (psf->buffer, 1, readcount, psf->file) ;
+ bet2s_array ((tribyte*) (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 ;
+} /* pcm_read_bet2s */
+
+int pcm_read_let2s (SF_PRIVATE *psf, short *ptr, int 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 = fread (psf->buffer, 1, readcount, psf->file) ;
+ let2s_array ((tribyte*) (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 ;
+} /* pcm_read_let2s */
+
+int pcm_read_bei2s (SF_PRIVATE *psf, short *ptr, int 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 = fread (psf->buffer, 1, readcount, psf->file) ;
+ bei2s_array ((int*) (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 ;
+} /* pcm_read_bei2s */
+
+int pcm_read_lei2s (SF_PRIVATE *psf, short *ptr, int 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 = fread (psf->buffer, 1, readcount, psf->file) ;
+ lei2s_array ((int*) (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 ;
+} /* pcm_read_lei2s */
+
+int pcm_read_f2s (SF_PRIVATE *psf, short *ptr, int 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 = fread (psf->buffer, 1, readcount, psf->file) ;
+ f2s_array ((float*) (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 ;
+} /* pcm_read_f2s */
+
+/*-----------------------------------------------------------------------------------------------
+ */
+
+int pcm_read_sc2i (SF_PRIVATE *psf, int *ptr, int 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 = fread (psf->buffer, 1, readcount, psf->file) ;
+ sc2i_array ((signed char*) (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 ;
+} /* pcm_read_sc2i */
+
+int pcm_read_uc2i (SF_PRIVATE *psf, int *ptr, int 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 = fread (psf->buffer, 1, readcount, psf->file) ;
+ uc2i_array ((unsigned char*) (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 ;
+} /* pcm_read_uc2i */
+
+int pcm_read_bes2i (SF_PRIVATE *psf, int *ptr, int 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 = fread (psf->buffer, 1, readcount, psf->file) ;
+ bes2i_array ((short*) (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 ;
+} /* pcm_read_bes2i */
+
+int pcm_read_les2i (SF_PRIVATE *psf, int *ptr, int 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 = fread (psf->buffer, 1, readcount, psf->file) ;
+ les2i_array ((short*) (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 ;
+} /* pcm_read_les2i */
+
+int pcm_read_bet2i (SF_PRIVATE *psf, int *ptr, int 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 = fread (psf->buffer, 1, readcount, psf->file) ;
+ bet2i_array ((tribyte*) (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 ;
+} /* pcm_read_bet2i */
+
+int pcm_read_let2i (SF_PRIVATE *psf, int *ptr, int 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 = fread (psf->buffer, 1, readcount, psf->file) ;
+ let2i_array ((tribyte*) (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 ;
+} /* pcm_read_let2i */
+
+int pcm_read_bei2i (SF_PRIVATE *psf, int *ptr, int len)
+{ int total ;
+
+ total = fread (ptr, 1, len * sizeof (int), psf->file) ;
+ if (CPU_IS_LITTLE_ENDIAN)
+ endswap_int_array (ptr, len) ;
+
+ total /= psf->bytewidth ;
+ if (total < len)
+ psf->error = SFE_SHORT_READ ;
+
+ return total ;
+} /* pcm_read_bei2i */
+
+int pcm_read_lei2i (SF_PRIVATE *psf, int *ptr, int len)
+{ int total ;
+
+ total = fread (ptr, 1, len * sizeof (int), psf->file) ;
+ if (CPU_IS_BIG_ENDIAN)
+ endswap_int_array (ptr, len) ;
+
+ total /= psf->bytewidth ;
+ if (total < len)
+ psf->error = SFE_SHORT_READ ;
+
+ return total ;
+} /* pcm_read_lei2i */
+
+int pcm_read_f2i (SF_PRIVATE *psf, int *ptr, int 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 = fread (psf->buffer, 1, readcount, psf->file) ;
+ f2i_array ((float*) (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 ;
+} /* pcm_read_f2i */
+
+/*-----------------------------------------------------------------------------------------------
+ */
+
+int pcm_read_sc2d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ unsigned int readcount, thisread ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = (normalize ? 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) ;
+ 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 ;
+} /* pcm_read_sc2d */
+
+int pcm_read_uc2d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ unsigned int readcount, thisread ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = (normalize ? 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) ;
+ 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 ;
+} /* pcm_read_uc2d */
+
+int pcm_read_bes2d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ unsigned int readcount, thisread ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = (normalize ? 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) ;
+ 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 ;
+} /* pcm_read_bes2d */
+
+int pcm_read_les2d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ unsigned int readcount, thisread ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = (normalize ? 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) ;
+ 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 ;
+} /* pcm_read_les2d */
+
+int pcm_read_bet2d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ unsigned int readcount, thisread ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = (normalize ? 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) ;
+ 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 ;
+} /* pcm_read_bet2d */
+
+int pcm_read_let2d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ unsigned int readcount, thisread ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = (normalize ? 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) ;
+ 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 ;
+} /* pcm_read_let2d */
+
+int pcm_read_bei2d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ unsigned int readcount, thisread ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = (normalize ? 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) ;
+ 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 ;
+} /* pcm_read_bei2d */
+
+int pcm_read_lei2d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ unsigned int readcount, thisread ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = (normalize ? 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) ;
+ 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 ;
+} /* pcm_read_lei2d */
+
+int pcm_read_f2d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ unsigned int readcount, thisread ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = normalize ? 1.0 : 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) ;
+ f2d_array ((float*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ 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 ;
+} /* pcm_read_f2d */
+
+/*===============================================================================================
+ *-----------------------------------------------------------------------------------------------
+ *===============================================================================================
+ */
+
+int pcm_write_s2sc (SF_PRIVATE *psf, short *ptr, int 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 ;
+ s2sc_array (ptr, index, (signed char*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ 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 ;
+} /* pcm_write_s2sc */
+
+int pcm_write_s2uc (SF_PRIVATE *psf, short *ptr, int 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 ;
+ s2uc_array (ptr, index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ 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 ;
+} /* pcm_write_s2uc */
+
+int pcm_write_s2bes (SF_PRIVATE *psf, short *ptr, int len)
+{ int total ;
+
+ if (CPU_IS_LITTLE_ENDIAN)
+ endswap_short_array (ptr, len) ;
+ total = fwrite (ptr, 1, len * sizeof (short), psf->file) ;
+ if (CPU_IS_LITTLE_ENDIAN)
+ endswap_short_array (ptr, len) ;
+
+ total /= psf->bytewidth ;
+ if (total < len)
+ psf->error = SFE_SHORT_WRITE ;
+
+ return total ;
+} /* pcm_write_s2bes */
+
+int pcm_write_s2les (SF_PRIVATE *psf, short *ptr, int len)
+{ int total ;
+
+ if (CPU_IS_BIG_ENDIAN)
+ endswap_short_array (ptr, len) ;
+ total = fwrite (ptr, 1, len * sizeof (short), psf->file) ;
+ if (CPU_IS_BIG_ENDIAN)
+ endswap_short_array (ptr, len) ;
+
+ total /= psf->bytewidth ;
+ if (total < len)
+ psf->error = SFE_SHORT_WRITE ;
+
+ return total ;
+} /* pcm_write_s2les */
+
+int pcm_write_s2bet (SF_PRIVATE *psf, short *ptr, int 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 ;
+ s2bet_array (ptr, index, (tribyte*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ 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 ;
+} /* pcm_write_s2bet */
+
+int pcm_write_s2let (SF_PRIVATE *psf, short *ptr, int 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 ;
+ s2let_array (ptr, index, (tribyte*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ 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 ;
+} /* pcm_write_s2let */
+
+int pcm_write_s2bei (SF_PRIVATE *psf, short *ptr, int 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 ;
+ s2bei_array (ptr, index, (int*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ 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 ;
+} /* pcm_write_s2bei */
+
+int pcm_write_s2lei (SF_PRIVATE *psf, short *ptr, int 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 ;
+ s2lei_array (ptr, index, (int*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ 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 ;
+} /* pcm_write_s2lei */
+
+int pcm_write_s2f (SF_PRIVATE *psf, short *ptr, int 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 ;
+ s2f_array (ptr, index, (float*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ 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 ;
+} /* pcm_write_s2f */
+
+/*-----------------------------------------------------------------------------------------------
+ */
+
+int pcm_write_i2sc (SF_PRIVATE *psf, int *ptr, int 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 ;
+ i2sc_array (ptr, index, (signed char*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ 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 ;
+} /* pcm_write_i2sc */
+
+int pcm_write_i2uc (SF_PRIVATE *psf, int *ptr, int 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 ;
+ i2uc_array (ptr, index, (unsigned char*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ 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 ;
+} /* pcm_write_i2uc */
+
+int pcm_write_i2bes (SF_PRIVATE *psf, int *ptr, int 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 ;
+ i2bes_array (ptr, index, (short*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ 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 ;
+} /* pcm_write_i2bes */
+
+int pcm_write_i2les (SF_PRIVATE *psf, int *ptr, int 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 ;
+ i2les_array (ptr, index, (short*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ 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 ;
+} /* pcm_write_i2les */
+
+int pcm_write_i2bet (SF_PRIVATE *psf, int *ptr, int 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 ;
+ i2bet_array (ptr, index, (tribyte*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ 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 ;
+} /* pcm_write_i2bet */
+
+int pcm_write_i2let (SF_PRIVATE *psf, int *ptr, int 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 ;
+ i2let_array (ptr, index, (tribyte*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ 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 ;
+} /* pcm_write_i2les */
+
+int pcm_write_i2bei (SF_PRIVATE *psf, int *ptr, int len)
+{ int total ;
+
+ if (CPU_IS_LITTLE_ENDIAN)
+ 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)
+ psf->error = SFE_SHORT_WRITE ;
+
+ return total ;
+} /* pcm_write_i2bei */
+
+int pcm_write_i2lei (SF_PRIVATE *psf, int *ptr, int len)
+{ int total ;
+
+ if (CPU_IS_BIG_ENDIAN)
+ 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)
+ psf->error = SFE_SHORT_WRITE ;
+
+ return total ;
+} /* pcm_write_i2lei */
+
+int pcm_write_i2f (SF_PRIVATE *psf, int *ptr, int 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 ;
+ i2f_array (ptr, index, (float*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ 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 ;
+} /* pcm_write_i2f */
+
+/*-----------------------------------------------------------------------------------------------
+ */
+
+int pcm_write_d2sc (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ unsigned int writecount, thiswrite ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = (normalize ? ((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) ;
+ 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 ;
+} /* pcm_write_d2sc */
+
+int pcm_write_d2uc (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ unsigned int writecount, thiswrite ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = (normalize ? ((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) ;
+ 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 ;
+} /* pcm_write_d2uc */
+
+int pcm_write_d2bes (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ unsigned int writecount, thiswrite ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = (normalize ? ((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) ;
+ 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 ;
+} /* pcm_write_d2bes */
+
+int pcm_write_d2les (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ unsigned int writecount, thiswrite ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = (normalize ? ((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) ;
+ 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 ;
+} /* pcm_write_d2les */
+
+int pcm_write_d2let (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ unsigned int writecount, thiswrite ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = (normalize ? ((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) ;
+ 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 ;
+} /* pcm_write_d2les */
+
+int pcm_write_d2bet (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ unsigned int writecount, thiswrite ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = (normalize ? ((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) ;
+ 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 ;
+} /* pcm_write_d2bes */
+
+int pcm_write_d2bei (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ unsigned int writecount, thiswrite ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = (normalize ? ((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) ;
+ 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 ;
+} /* pcm_write_d2bei */
+
+int pcm_write_d2lei (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ unsigned int writecount, thiswrite ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = (normalize ? ((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) ;
+ 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 ;
+} /* pcm_write_d2lei */
+
+int pcm_write_d2f (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ unsigned int writecount, thiswrite ;
+ int bytecount, bufferlen ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = (normalize) ? 1.0 : 1.0 ;
+
+ bufferlen = SF_BUFFER_LEN - (SF_BUFFER_LEN % psf->blockwidth) ;
+ bytecount = len * psf->bytewidth ;
+ while (bytecount > 0)
+ { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
+ d2f_array (ptr, index, (float*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
+ thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ 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 ;
+} /* pcm_write_d2f */
+
+/*-----------------------------------------------------------------------------------------------
+ */
+
+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 */
+
+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 */
+
+static
+void bet2s_array (tribyte *buffer, unsigned int count, short *ptr, int index)
+{ 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 ;
+ } ;
+} /* bet2s_array */
+
+static
+void let2s_array (tribyte *buffer, unsigned int count, short *ptr, int index)
+{ 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 ;
+ } ;
+} /* 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 */
+
+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 */
+
+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 */
+
+
+/*-----------------------------------------------------------------------------------------------
+ */
+
+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 */
+
+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 */
+
+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 */
+
+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 */
+
+static
+void bet2i_array (tribyte *buffer, unsigned int count, int *ptr, int index)
+{ 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 ;
+ } ;
+} /* bet2i_array */
+
+static
+void let2i_array (tribyte *buffer, unsigned int count, int *ptr, int index)
+{ 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 ;
+ } ;
+} /* let2i_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 */
+
+
+/*-----------------------------------------------------------------------------------------------
+ */
+
+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 */
+
+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 */
+
+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 */
+
+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 */
+
+static
+void bet2d_array (tribyte *buffer, unsigned int count, double *ptr, int index, 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 ;
+ } ;
+} /* bet2d_array */
+
+static
+void let2d_array (tribyte *buffer, unsigned int count, double *ptr, int index, 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 ;
+ } ;
+} /* 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 */
+
+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 */
+
+static
+void f2d_array (float *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 ++ ;
+ } ;
+} /* f2d_array */
+
+
+/*-----------------------------------------------------------------------------------------------
+ */
+
+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 */
+
+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 */
+
+static
+void s2bet_array (short *ptr, int index, 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 ;
+ } ;
+} /* s2bet_array */
+
+static
+void s2let_array (short *ptr, int index, 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 ;
+ } ;
+} /* 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 ++ ;
+ } ;
+} /* s2lei_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 */
+
+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 */
+
+
+/*-----------------------------------------------------------------------------------------------
+ */
+
+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 */
+
+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 */
+
+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 */
+
+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 */
+
+static
+void i2bet_array (int *ptr, int index, 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 ;
+ } ;
+} /* i2bet_array */
+
+static
+void i2let_array (int *ptr, int index, 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 ;
+ } ;
+} /* i2let_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 */
+
+
+/*-----------------------------------------------------------------------------------------------
+ */
+
+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] = (signed char) (ptr [index] * normfact) ;
+ index ++ ;
+ } ;
+} /* 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] = (unsigned char) ((ptr [index] * normfact) + 128) ;
+ index ++ ;
+ } ;
+} /* 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 ((int) (ptr [index] * normfact)) ;
+ index ++ ;
+ } ;
+} /* 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 ((int) (ptr [index] * normfact)) ;
+ index ++ ;
+ } ;
+} /* d2les_array */
+
+static
+void d2bet_array (double *ptr, int index, tribyte *buffer, unsigned int count, double normfact)
+{ unsigned char *cptr ;
+ int k, value ;
+ cptr = (unsigned char*) buffer ;
+ for (k = 0 ; k < count ; k++)
+ { value = (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 ;
+ } ;
+} /* d2bet_array */
+
+static
+void d2let_array (double *ptr, int index, tribyte *buffer, unsigned int count, double normfact)
+{ unsigned char *cptr ;
+ int k, value ;
+ cptr = (unsigned char*) buffer ;
+ for (k = 0 ; k < count ; k++)
+ { value = (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 ;
+ } ;
+} /* 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 ((int) (ptr [index] * normfact)) ;
+ index ++ ;
+ } ;
+} /* 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 ((int) (ptr [index] * normfact)) ;
+ index ++ ;
+ } ;
+} /* d2lei_array */
+
+static
+void d2f_array (double *ptr, int index, float *buffer, unsigned int count, double normfact)
+{ int k ;
+ for (k = 0 ; k < count ; k++)
+ { buffer [k] = (float) (ptr [index] * normfact) ;
+ index ++ ;
+ } ;
+} /* d2f_array */
+
+
+
--- /dev/null
+++ b/common/libsndfile/src/pcm.h
@@ -1,0 +1,81 @@
+/*
+** Copyright (C) 1999-2000 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.
+*/
+
+
+int pcm_read_sc2s (SF_PRIVATE *psf, short *ptr, int len) ;
+int pcm_read_uc2s (SF_PRIVATE *psf, short *ptr, int len) ;
+int pcm_read_bes2s (SF_PRIVATE *psf, short *ptr, int len) ;
+int pcm_read_les2s (SF_PRIVATE *psf, short *ptr, int len) ;
+int pcm_read_bet2s (SF_PRIVATE *psf, short *ptr, int len) ;
+int pcm_read_let2s (SF_PRIVATE *psf, short *ptr, int len) ;
+int pcm_read_bei2s (SF_PRIVATE *psf, short *ptr, int len) ;
+int pcm_read_lei2s (SF_PRIVATE *psf, short *ptr, int len) ;
+int pcm_read_f2s (SF_PRIVATE *psf, short *ptr, int len) ;
+
+int pcm_read_sc2i (SF_PRIVATE *psf, int *ptr, int len) ;
+int pcm_read_uc2i (SF_PRIVATE *psf, int *ptr, int len) ;
+int pcm_read_bes2i (SF_PRIVATE *psf, int *ptr, int len) ;
+int pcm_read_les2i (SF_PRIVATE *psf, int *ptr, int len) ;
+int pcm_read_bet2i (SF_PRIVATE *psf, int *ptr, int len) ;
+int pcm_read_let2i (SF_PRIVATE *psf, int *ptr, int len) ;
+int pcm_read_bei2i (SF_PRIVATE *psf, int *ptr, int len) ;
+int pcm_read_lei2i (SF_PRIVATE *psf, int *ptr, int len) ;
+int pcm_read_f2i (SF_PRIVATE *psf, int *ptr, int len) ;
+
+int pcm_read_sc2d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+int pcm_read_uc2d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+int pcm_read_bes2d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+int pcm_read_les2d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+int pcm_read_bet2d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+int pcm_read_let2d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+int pcm_read_bei2d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+int pcm_read_lei2d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+int pcm_read_f2d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+
+
+
+int pcm_write_s2sc (SF_PRIVATE *psf, short *ptr, int len) ;
+int pcm_write_s2uc (SF_PRIVATE *psf, short *ptr, int len) ;
+int pcm_write_s2bes (SF_PRIVATE *psf, short *ptr, int len) ;
+int pcm_write_s2les (SF_PRIVATE *psf, short *ptr, int len) ;
+int pcm_write_s2bet (SF_PRIVATE *psf, short *ptr, int len) ;
+int pcm_write_s2let (SF_PRIVATE *psf, short *ptr, int len) ;
+int pcm_write_s2bei (SF_PRIVATE *psf, short *ptr, int len) ;
+int pcm_write_s2lei (SF_PRIVATE *psf, short *ptr, int len) ;
+int pcm_write_s2f (SF_PRIVATE *psf, short *ptr, int len) ;
+
+int pcm_write_i2sc (SF_PRIVATE *psf, int *ptr, int len) ;
+int pcm_write_i2uc (SF_PRIVATE *psf, int *ptr, int len) ;
+int pcm_write_i2bes (SF_PRIVATE *psf, int *ptr, int len) ;
+int pcm_write_i2les (SF_PRIVATE *psf, int *ptr, int len) ;
+int pcm_write_i2bet (SF_PRIVATE *psf, int *ptr, int len) ;
+int pcm_write_i2let (SF_PRIVATE *psf, int *ptr, int len) ;
+int pcm_write_i2bei (SF_PRIVATE *psf, int *ptr, int len) ;
+int pcm_write_i2lei (SF_PRIVATE *psf, int *ptr, int len) ;
+int pcm_write_i2f (SF_PRIVATE *psf, int *ptr, int len) ;
+
+int pcm_write_d2sc (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+int pcm_write_d2uc (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+int pcm_write_d2bes (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+int pcm_write_d2les (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+int pcm_write_d2bet (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+int pcm_write_d2let (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+int pcm_write_d2bei (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+int pcm_write_d2lei (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+int pcm_write_d2f (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+
--- /dev/null
+++ b/common/libsndfile/src/raw.c
@@ -1,0 +1,216 @@
+/*
+** Copyright (C) 1999-2000 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 <fcntl.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "sndfile.h"
+#include "config.h"
+#include "sfendian.h"
+#include "common.h"
+#include "pcm.h"
+
+/*------------------------------------------------------------------------------
+** Private static functions.
+*/
+
+/*------------------------------------------------------------------------------
+** Public functions.
+*/
+
+int raw_open_read (SF_PRIVATE *psf)
+{ unsigned int subformat ;
+
+ if(! psf->sf.channels || ! psf->sf.pcmbitwidth)
+ return SFE_RAW_READ_BAD_SPEC ;
+
+ 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 (subformat == SF_FORMAT_PCM_S8 || subformat == SF_FORMAT_PCM_U8)
+ psf->endian = 0 ;
+ else
+ return SFE_RAW_READ_BAD_SPEC ;
+
+ psf->sf.seekable = SF_TRUE ;
+
+ psf->sf.sections = 1 ;
+
+ switch (psf->sf.pcmbitwidth)
+ { case 8 : if (subformat == SF_FORMAT_PCM_S8)
+ { psf->read_short = (func_short) pcm_read_sc2s ;
+ psf->read_int = (func_int) pcm_read_sc2i ;
+ psf->read_double = (func_double) pcm_read_sc2d ;
+ }
+ else if (subformat == SF_FORMAT_PCM_U8)
+ { psf->read_short = (func_short) pcm_read_uc2s ;
+ psf->read_int = (func_int) pcm_read_uc2i ;
+ psf->read_double = (func_double) pcm_read_uc2d ;
+ }
+ break ;
+
+ case 16 : if (subformat == SF_FORMAT_PCM_BE)
+ { psf->read_short = (func_short) pcm_read_bes2s ;
+ psf->read_int = (func_int) pcm_read_bes2i ;
+ psf->read_double = (func_double) pcm_read_bes2d ;
+ }
+ else
+ { psf->read_short = (func_short) pcm_read_les2s ;
+ psf->read_int = (func_int) pcm_read_les2i ;
+ psf->read_double = (func_double) pcm_read_les2d ;
+ } ;
+ break ;
+
+ case 24 : if (subformat == SF_FORMAT_PCM_BE)
+ { psf->read_short = (func_short) pcm_read_bet2s ;
+ psf->read_int = (func_int) pcm_read_bet2i ;
+ psf->read_double = (func_double) pcm_read_bet2d ;
+ }
+ else
+ { psf->read_short = (func_short) pcm_read_let2s ;
+ psf->read_int = (func_int) pcm_read_let2i ;
+ psf->read_double = (func_double) pcm_read_let2d ;
+ } ;
+ break ;
+
+ case 32 : if (subformat == SF_FORMAT_PCM_BE)
+ { psf->read_short = (func_short) pcm_read_bei2s ;
+ psf->read_int = (func_int) pcm_read_bei2i ;
+ psf->read_double = (func_double) pcm_read_bei2d ;
+ }
+ else
+ { psf->read_short = (func_short) pcm_read_lei2s ;
+ psf->read_int = (func_int) pcm_read_lei2i ;
+ psf->read_double = (func_double) pcm_read_lei2d ;
+ } ;
+ break ;
+
+ default : return SFE_RAW_BAD_BITWIDTH ;
+ break ;
+ } ;
+
+ psf->dataoffset = 0 ;
+ psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
+ psf->blockwidth = psf->sf.channels * psf->bytewidth ;
+
+ if (psf->blockwidth)
+ psf->sf.samples = psf->filelength / psf->blockwidth ;
+
+ 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 ;
+
+ 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 ;
+
+ psf->bytewidth = BITWIDTH2BYTES (psf->sf.pcmbitwidth) ;
+
+ 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 ;
+
+ switch (psf->sf.pcmbitwidth)
+ { case 8 : if (subformat == SF_FORMAT_PCM_S8)
+ { psf->write_short = (func_short) pcm_write_s2sc ;
+ psf->write_int = (func_int) pcm_write_i2sc ;
+ psf->write_double = (func_double) pcm_write_d2sc ;
+ }
+ else if (subformat == SF_FORMAT_PCM_U8)
+ { psf->write_short = (func_short) pcm_write_s2uc ;
+ psf->write_int = (func_int) pcm_write_i2uc ;
+ psf->write_double = (func_double) pcm_write_d2uc ;
+ }
+ break ;
+
+ case 16 : if (big_endian_file)
+ { psf->write_short = (func_short) pcm_write_s2bes ;
+ psf->write_int = (func_int) pcm_write_i2bes ;
+ psf->write_double = (func_double) pcm_write_d2bes ;
+ }
+ else
+ { psf->write_short = (func_short) pcm_write_s2les ;
+ psf->write_int = (func_int) pcm_write_i2les ;
+ psf->write_double = (func_double) pcm_write_d2les ;
+ } ;
+ break ;
+
+ case 24 : if (big_endian_file)
+ { psf->write_short = (func_short) pcm_write_s2bet ;
+ psf->write_int = (func_int) pcm_write_i2bet ;
+ psf->write_double = (func_double) pcm_write_d2bet ;
+ }
+ else
+ { psf->write_short = (func_short) pcm_write_s2let ;
+ psf->write_int = (func_int) pcm_write_i2let ;
+ psf->write_double = (func_double) pcm_write_d2let ;
+ } ;
+ break ;
+
+ case 32 : if (big_endian_file)
+ { psf->write_short = (func_short) pcm_write_s2bei ;
+ psf->write_int = (func_int) pcm_write_i2bei ;
+ psf->write_double = (func_double) pcm_write_d2bei ;
+ }
+ else
+ { psf->write_short = (func_short) pcm_write_s2lei ;
+ psf->write_int = (func_int) pcm_write_i2lei ;
+ psf->write_double = (func_double) pcm_write_d2lei ;
+ } ;
+ break ;
+
+ default : return SFE_BAD_OPEN_FORMAT ;
+ } ;
+
+ return 0 ;
+} /* raw_open_write */
+
+/*------------------------------------------------------------------------------
+*/
+
+
+/*==============================================================================
+*/
+
--- /dev/null
+++ b/common/libsndfile/src/sfendian.h
@@ -1,0 +1,78 @@
+/*
+** Copyright (C) 1999-2000 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 "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
+
--- /dev/null
+++ b/common/libsndfile/src/sndfile.c
@@ -1,0 +1,1274 @@
+/*
+** Copyright (C) 1999-2000 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 <fcntl.h>
+#include <string.h>
+#include <ctype.h>
+
+/* For the Metrowerks CodeWarrior Pro Compiler (mainly MacOS) */
+
+#if (defined (__MWERKS__))
+#include <stat.h>
+#else
+#include <sys/stat.h>
+#endif
+
+#include "sndfile.h"
+#include "config.h"
+#include "sfendian.h"
+#include "common.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 SNDFILE_MAGICK 0x1234C0DE
+
+typedef struct
+{ int error ;
+ char *str ;
+} ErrorStruct ;
+
+static
+ErrorStruct SndfileErrors [] =
+{
+ { SFE_NO_ERROR , "No Error." },
+ { SFE_BAD_FILE , "File does not exist or is not a regular file (possibly a pipe?)." },
+ { 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_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." },
+ { SFE_UNKNOWN_FORMAT , "File contains data in an unknown format." },
+ { SFE_NOT_READMODE , "Read attempted on file currently open for write." },
+ { SFE_NOT_WRITEMODE , "Write attempted on file currently open for read." },
+ { SFE_BAD_MODE_RW , "This file format does not support read/write mode." },
+ { SFE_BAD_SF_INFO , "Internal error : SF_INFO struct incomplete." },
+
+ { SFE_SHORT_READ , "Short read error." },
+ { SFE_SHORT_WRITE , "Short write error." },
+ { SFE_INTERNAL , "Unspecified internal error." },
+
+ { SFE_WAV_NO_RIFF , "Error in WAV file. No 'RIFF' chunk marker." },
+ { SFE_WAV_NO_WAVE , "Error in WAV file. No 'WAVE' chunk marker." },
+ { SFE_WAV_NO_FMT , "Error in WAV file. No 'fmt ' chunk marker." },
+ { SFE_WAV_FMT_SHORT , "Error in WAV file. Short 'fmt ' chunk." },
+
+ { SFE_WAV_FMT_TOO_BIG , "Error in WAV file. 'fmt ' chunk too large." },
+
+ { SFE_WAV_BAD_FORMAT , "Error in WAV file. Errors in 'fmt ' chunk." },
+ { SFE_WAV_BAD_BLOCKALIGN , "Error in WAV file. Block alignment in 'fmt ' chunk is incorrect." },
+ { SFE_WAV_NO_DATA , "Error in WAV file. No 'data' chunk marker." },
+ { SFE_WAV_UNKNOWN_CHUNK , "Error in WAV file. File contains an unknown chunk marker." },
+
+ { SFE_WAV_ADPCM_NOT4BIT , "Error in ADPCM WAV file. Invalid bit width."},
+ { SFE_WAV_ADPCM_CHANNELS , "Error in ADPCM WAV file. Invalid number of channels."},
+ { SFE_WAV_GSM610_FORMAT , "Error in GSM610 WAV file. Invalid format chunk."},
+
+ { SFE_AIFF_NO_FORM , "Error in AIFF file, bad 'FORM' marker."},
+ { SFE_AIFF_UNKNOWN_CHUNK , "Error in AIFF file, unknown chunk."},
+ { SFE_COMM_CHUNK_SIZE , "Error in AIFF file, bad 'COMM' chunk size."},
+ { SFE_AIFF_NO_SSND , "Error in AIFF file, bad 'SSND' chunk."},
+ { SFE_AIFF_NO_DATA , "Error in AIFF file, no sound data."},
+
+ { 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_BAD_BITWIDTH , "Error. RAW file bitwidth must be a multiple of 8."},
+
+ { SFE_PAF_NO_MARKER , "Error in PAF file, no marker."},
+ { SFE_PAF_VERSION , "Error in PAF file, bad version."},
+ { SFE_PAF_UNKNOWN_FORMAT , "Error in PAF file, unknown format."},
+ { SFE_PAF_SHORT_HEADER , "Error in PAF file. File shorter than minimal header."},
+
+ { SFE_SVX_NO_FORM , "Error in 8SVX / 16SV file, no 'FORM' marker."},
+ { SFE_SVX_NO_BODY , "Error in 8SVX / 16SV file, no 'BODY' marker."},
+ { SFE_SVX_NO_DATA , "Error in 8SVX / 16SV file, no sound data."},
+ { SFE_SVX_BAD_COMP , "Error in 8SVX / 16SV file, unsupported compression format."},
+
+ { SFE_NIST_BAD_HEADER , "Error in NIST file, bad header."},
+ { SFE_NIST_BAD_ENCODING , "Error in NIST file, unsupported compression format."},
+
+ { SFE_MAX_ERROR , "Maximum error number." }
+} ;
+
+/*------------------------------------------------------------------------------
+** Private (static) variables.
+*/
+
+static int sf_errno = 0 ;
+static char sf_strbuffer [SF_BUFFER_LEN] = { 0 } ;
+
+/*------------------------------------------------------------------------------
+** Private static functions.
+*/
+
+
+#define VALIDATE_SNDFILE_AND_ASSIGN_PSF(a,b) \
+ { if (! (a)) \
+ return SFE_BAD_SNDFILE_PTR ; \
+ (b) = (SF_PRIVATE*) (a) ; \
+ if (!((b)->file)) \
+ return SFE_BAD_INT_FD ; \
+ if ((b)->Magick != SNDFILE_MAGICK) \
+ return SFE_BAD_SNDFILE_PTR ; \
+ (b)->error = 0 ; \
+ }
+
+static
+int does_extension_match (const char *ext, const char *test)
+{ char c1, c2 ;
+
+ if ((! ext) || (! test))
+ return 0 ;
+
+ if (strlen (ext) != strlen (test))
+ return 0 ;
+
+ while (*ext && *test)
+ { c1 = tolower (*ext) ;
+ c2 = tolower (*test) ;
+ if (c1 > c2)
+ return 0 ;
+ if (c1 < c2)
+ return 0 ;
+ ext ++ ;
+ test ++ ;
+ }
+
+ return 1 ;
+} /* does_extension_match */
+
+static
+int is_au_snd_file (const char *filename)
+{ const char *cptr ;
+
+ if (! (cptr = strrchr (filename, '.')))
+ return 0 ;
+ cptr ++ ;
+
+ if (does_extension_match (cptr, "au"))
+ return 1 ;
+
+ if (does_extension_match (cptr, "snd"))
+ return 1 ;
+
+ return 0 ;
+} /* is_au_snd_file */
+
+static
+int guess_file_type (FILE *file, const char *filename)
+{ unsigned int buffer [3] ;
+
+ fread (buffer, sizeof(buffer), 1, file) ;
+ fseek (file, 0, SEEK_SET) ;
+
+ if (buffer [0] == MAKE_MARKER ('R','I','F','F') && buffer [2] == MAKE_MARKER ('W','A','V','E'))
+ return SF_FORMAT_WAV ;
+
+ if (buffer [0] == MAKE_MARKER ('F','O','R','M'))
+ { if (buffer [2] == MAKE_MARKER ('A','I','F','F') || buffer [2] == MAKE_MARKER ('A','I','F','C'))
+ return SF_FORMAT_AIFF ;
+ if (buffer [2] == MAKE_MARKER ('8','S','V','X') || buffer [2] == MAKE_MARKER ('1','6','S','V'))
+ return SF_FORMAT_SVX ;
+ return 0 ;
+ } ;
+
+ if ((buffer [0] == MAKE_MARKER ('.','s','n','d') || buffer [0] == MAKE_MARKER ('d','n','s','.')))
+ return SF_FORMAT_AU ;
+
+ if ((buffer [0] == MAKE_MARKER ('f','a','p',' ') || buffer [0] == MAKE_MARKER (' ','p','a','f')))
+ return SF_FORMAT_PAF ;
+
+ if (buffer [0] == MAKE_MARKER ('N','I','S','T'))
+ return SF_FORMAT_NIST ;
+
+ if (filename && is_au_snd_file (filename))
+ return SF_FORMAT_AU | SF_FORMAT_ULAW ;
+
+ /* Default to header-less RAW PCM file type. */
+ return SF_FORMAT_RAW ;
+} /* guess_file_type */
+
+
+static
+int validate_sfinfo (SF_INFO *sfinfo)
+{ if (! sfinfo->samplerate)
+ return 0 ;
+ if (! sfinfo->samples)
+ return 0 ;
+ if (! sfinfo->channels)
+ return 0 ;
+ if (! sfinfo->pcmbitwidth)
+ return 0 ;
+ if (! sfinfo->format & SF_FORMAT_TYPEMASK)
+ return 0 ;
+ if (! sfinfo->format & SF_FORMAT_SUBMASK)
+ return 0 ;
+ if (! sfinfo->sections)
+ return 0 ;
+ return 1 ;
+} /* validate_sfinfo */
+
+static
+int validate_psf (SF_PRIVATE *psf)
+{ if (! psf->blockwidth)
+ return 0 ;
+ if (! psf->bytewidth)
+ return 0 ;
+ if (! psf->datalength)
+ return 0 ;
+ if (psf->blockwidth != psf->sf.channels * psf->bytewidth)
+ return 0 ;
+ return 1 ;
+} /* validate_psf */
+
+static
+void save_header_info (SF_PRIVATE *psf)
+{ memset (sf_strbuffer, 0, sizeof (sf_strbuffer)) ;
+ strcpy (sf_strbuffer, psf->strbuffer) ;
+} /* validate_psf */
+
+static
+void copy_filename (SF_PRIVATE *psf, const char *path)
+{ const char *cptr ;
+
+ if ((cptr = strrchr (path, '/')) || (cptr = strrchr (path, '\\')))
+ cptr ++ ;
+ else
+ cptr = path ;
+
+ memset (psf->filename, 0, SF_FILENAME_LEN) ;
+ strncpy (psf->filename, cptr, SF_FILENAME_LEN - 1) ;
+ psf->filename [SF_FILENAME_LEN - 1] = 0 ;
+} /* copy_filename */
+
+/*------------------------------------------------------------------------------
+** Public functions.
+*/
+
+SNDFILE* sf_open_read (const char *path, SF_INFO *sfinfo)
+{ SF_PRIVATE *psf ;
+ int filetype, seekable ;
+
+ if (! sfinfo)
+ { sf_errno = SFE_BAD_SF_INFO_PTR ;
+ return NULL ;
+ } ;
+
+ sf_errno = 0 ;
+ sf_strbuffer [0] = 0 ;
+
+ psf = malloc (sizeof (SF_PRIVATE)) ;
+ if (! psf)
+ { sf_errno = SFE_MALLOC_FAILED ;
+ return NULL ;
+ } ;
+
+ memset (psf, 0, sizeof (SF_PRIVATE)) ;
+ psf->Magick = SNDFILE_MAGICK ;
+
+ if (! strcmp (path, "-"))
+ { psf->file = stdin ;
+ seekable = SF_FALSE ;
+ }
+ else
+ { /* fopen with 'b' means binary file mode for Win32 systems. */
+ psf->file = fopen (path, "rb") ;
+ seekable = SF_TRUE ;
+ } ;
+
+ if (! psf->file)
+ { sf_errno = SFE_OPEN_FAILED ;
+ sf_close (psf) ;
+ return NULL ;
+ } ;
+
+ psf->mode = SF_MODE_READ ;
+
+ psf_sprintf (psf, "%s\n", path) ;
+ if (seekable)
+ { fseek (psf->file, 0, SEEK_END) ;
+ psf->filelength = ftell (psf->file) ;
+ fseek (psf->file, 0, SEEK_SET) ;
+ psf_sprintf (psf, "size : %d\n", psf->filelength) ;
+ }
+ else
+ psf->filelength = 2048 ;
+
+ copy_filename (psf, path) ;
+
+ filetype = guess_file_type (psf->file, psf->filename) ;
+ fseek (psf->file, 0, SEEK_SET) ;
+ switch (filetype)
+ { case SF_FORMAT_WAV :
+ sf_errno = wav_open_read (psf) ;
+ break ;
+
+ case SF_FORMAT_AIFF :
+ sf_errno = aiff_open_read (psf) ;
+ break ;
+
+ case SF_FORMAT_AU :
+ sf_errno = au_open_read (psf) ;
+ break ;
+
+ case SF_FORMAT_AU | SF_FORMAT_ULAW :
+ psf_sprintf (psf, "Headers-less u-law encoded file.\n") ;
+ sf_errno = au_nh_open_read (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) ;
+ break ;
+
+ case SF_FORMAT_PAF :
+ sf_errno = paf_open_read (psf) ;
+ break ;
+
+ case SF_FORMAT_SVX :
+ sf_errno = svx_open_read (psf) ;
+ break ;
+
+ default :
+ sf_errno = 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) ;
+ sf_close (psf) ;
+ return NULL ;
+ } ;
+
+ if (! validate_sfinfo (&(psf->sf)))
+ { save_header_info (psf) ;
+ sf_errno = SFE_BAD_SF_INFO ;
+ sf_close (psf) ;
+ return NULL ;
+ } ;
+
+ if (! validate_psf (psf))
+ { save_header_info (psf) ;
+ sf_errno = SFE_INTERNAL ;
+ sf_close (psf) ;
+ return NULL ;
+ } ;
+
+ memcpy (sfinfo, &(psf->sf), sizeof (SF_INFO)) ;
+
+ return (SNDFILE*) psf ;
+} /* sf_open_read */
+
+/*------------------------------------------------------------------------------
+*/
+
+SNDFILE* sf_open_write (const char *path, const SF_INFO *sfinfo)
+{ SF_PRIVATE *psf ;
+
+ if (! sfinfo)
+ { sf_errno = SFE_BAD_SF_INFO_PTR ;
+ return NULL ;
+ } ;
+
+ if (! sf_format_check (sfinfo))
+ { sf_errno = SFE_BAD_OPEN_FORMAT ;
+ return NULL ;
+ } ;
+
+ sf_errno = 0 ;
+ sf_strbuffer [0] = 0 ;
+
+ psf = malloc (sizeof (SF_PRIVATE)) ;
+ if (! psf)
+ { sf_errno = SFE_MALLOC_FAILED ;
+ return NULL ;
+ } ;
+
+ memset (psf, 0, sizeof (SF_PRIVATE)) ;
+ memcpy (&(psf->sf), sfinfo, sizeof (SF_INFO)) ;
+
+ psf->Magick = SNDFILE_MAGICK ;
+
+ /* 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 ;
+
+ default :
+ sf_errno = SFE_UNKNOWN_FORMAT ;
+ sf_close (psf) ;
+ return NULL ;
+ } ;
+
+ return (SNDFILE*) psf ;
+} /* sf_open_write */
+
+/*------------------------------------------------------------------------------
+*/
+
+int sf_perror (SNDFILE *sndfile)
+{ SF_PRIVATE *psf ;
+ int k, errnum ;
+
+ if (! sndfile)
+ { errnum = sf_errno ;
+ }
+ else
+ { VALIDATE_SNDFILE_AND_ASSIGN_PSF(sndfile,psf) ;
+ errnum = psf->error ;
+ } ;
+
+ errnum = (errnum >= SFE_MAX_ERROR || errnum < 0) ? 0 : errnum ;
+
+ for (k = 0 ; SndfileErrors[k].str ; k++)
+ if (errnum == SndfileErrors[k].error)
+ { printf ("%s\n", SndfileErrors[k].str) ;
+ return SFE_NO_ERROR ;
+ } ;
+
+ printf ("No error string for error number %d.\n", errnum) ;
+ return SFE_NO_ERROR ;
+} /* sf_perror */
+
+
+/*------------------------------------------------------------------------------
+*/
+
+int sf_error_str (SNDFILE *sndfile, char *str, size_t maxlen)
+{ SF_PRIVATE *psf ;
+ int errnum, k ;
+
+ if (! sndfile)
+ { errnum = sf_errno ;
+ }
+ else
+ { VALIDATE_SNDFILE_AND_ASSIGN_PSF(sndfile,psf) ;
+ errnum = psf->error ;
+ } ;
+
+ errnum = (errnum >= SFE_MAX_ERROR || errnum < 0) ? 0 : errnum ;
+
+ for (k = 0 ; SndfileErrors[k].str ; k++)
+ if (errnum == SndfileErrors[k].error)
+ { strncpy (str, SndfileErrors [errnum].str, maxlen) ;
+ str [maxlen-1] = 0 ;
+ return SFE_NO_ERROR ;
+ } ;
+
+ strncpy (str, "No error defined for this error number. This is a bug in libsndfile.", maxlen) ;
+ str [maxlen-1] = 0 ;
+
+ return SFE_NO_ERROR ;
+} /* sf_error_str */
+
+/*------------------------------------------------------------------------------
+*/
+
+int sf_error_number (int errnum, char *str, size_t maxlen)
+{ int k ;
+
+ errnum = (errnum >= SFE_MAX_ERROR || errnum < 0) ? 0 : errnum ;
+
+ for (k = 0 ; SndfileErrors[k].str ; k++)
+ if (errnum == SndfileErrors[k].error)
+ { strncpy (str, SndfileErrors [errnum].str, maxlen) ;
+ str [maxlen-1] = 0 ;
+ return SFE_NO_ERROR ;
+ } ;
+
+ strncpy (str, "No error defined for this error number. This is a bug in libsndfile.", maxlen) ;
+ str [maxlen-1] = 0 ;
+
+ return SFE_NO_ERROR ;
+} /* sf_error_number */
+
+/*------------------------------------------------------------------------------
+*/
+
+int sf_format_check (const SF_INFO *info)
+{ int subformat = 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.
+ */
+
+ if (info->channels < 1 || info->channels > 256)
+ return 0 ;
+
+ switch (info->format & SF_FORMAT_TYPEMASK)
+ { case SF_FORMAT_WAV :
+ if (subformat == SF_FORMAT_PCM && (info->pcmbitwidth >= 8 && info->pcmbitwidth <= 32))
+ return 1 ;
+ if (subformat == SF_FORMAT_FLOAT && info->pcmbitwidth == 32)
+ return 1 ;
+ if (subformat == SF_FORMAT_IMA_ADPCM && info->pcmbitwidth == 16 && info->channels <= 2)
+ return 1 ;
+ if (subformat == SF_FORMAT_MS_ADPCM && info->pcmbitwidth == 16 && info->channels <= 2)
+ return 1 ;
+ if (subformat == SF_FORMAT_GSM610 && info->pcmbitwidth == 16 && info->channels == 1)
+ return 1 ;
+ if (subformat == SF_FORMAT_ULAW || subformat == SF_FORMAT_ALAW)
+ return 1 ;
+ break ;
+
+ case SF_FORMAT_AIFF :
+ if (subformat == SF_FORMAT_PCM && (info->pcmbitwidth >= 8 && info->pcmbitwidth <= 32))
+ return 1 ;
+ break ;
+
+ case SF_FORMAT_AU :
+ case SF_FORMAT_AULE :
+ if (subformat == SF_FORMAT_PCM && (info->pcmbitwidth >= 8 && info->pcmbitwidth <= 32))
+ return 1 ;
+ if (subformat == SF_FORMAT_ULAW)
+ return 1 ;
+ if (subformat == SF_FORMAT_ALAW)
+ return 1 ;
+ if (subformat == SF_FORMAT_G721_32 && info->channels == 1)
+ return 1 ;
+ if (subformat == SF_FORMAT_G723_24 && info->channels == 1)
+ return 1 ;
+ break ;
+
+ case SF_FORMAT_RAW :
+ if (subformat == SF_FORMAT_PCM_S8 && info->pcmbitwidth == 8)
+ return 1 ;
+ if (subformat == SF_FORMAT_PCM_U8 && info->pcmbitwidth == 8)
+ return 1 ;
+ if (subformat != SF_FORMAT_PCM_BE && subformat != SF_FORMAT_PCM_LE)
+ break ;
+ if (info->pcmbitwidth % 8 || info->pcmbitwidth > 32)
+ break ;
+ return 1 ;
+ break ;
+
+ case SF_FORMAT_PAF :
+ if (subformat == SF_FORMAT_PCM_S8 && info->pcmbitwidth == 8)
+ return 1 ;
+ if (subformat != SF_FORMAT_PCM_BE && subformat != SF_FORMAT_PCM_LE)
+ break ;
+ if (info->pcmbitwidth % 8 || info->pcmbitwidth > 24)
+ break ;
+ return 1 ;
+ break ;
+
+ case SF_FORMAT_SVX :
+ if (subformat == SF_FORMAT_PCM && (info->pcmbitwidth == 8 || info->pcmbitwidth == 16))
+ return 1 ;
+ break ;
+
+ default : break ;
+ } ;
+
+ return 0 ;
+} /* sf_format_check */
+
+/*------------------------------------------------------------------------------
+*/
+
+size_t sf_get_header_info (SNDFILE *sndfile, char *buffer, size_t bufferlen, size_t offset)
+{ SF_PRIVATE *psf ;
+ int len ;
+
+ if (! sndfile)
+ { strncpy (buffer, sf_strbuffer, bufferlen - 1) ;
+ buffer [bufferlen - 1] = 0 ;
+ return strlen (sf_strbuffer) ;
+ } ;
+
+ VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;
+
+ len = strlen (psf->strbuffer) ;
+ if (offset < 0 || offset >= len)
+ return 0 ;
+
+ strncpy (buffer, psf->strbuffer, bufferlen - 1) ;
+ buffer [bufferlen - 1] = 0 ;
+
+ return strlen (psf->strbuffer) ;
+} /* sf_get_header_info */
+
+/*------------------------------------------------------------------------------
+*/
+
+size_t sf_get_lib_version (char *buffer, size_t bufferlen)
+{ if (! buffer || ! bufferlen)
+ return 0 ;
+
+ strncpy (buffer, PACKAGE, bufferlen - 1) ;
+ buffer [bufferlen - 1] = 0 ;
+ strncat (buffer, "-", bufferlen - strlen (buffer) - 1) ;
+ strncat (buffer, VERSION, bufferlen - strlen (buffer) - 1) ;
+
+ return strlen (buffer) ;
+} /* sf_get_lib_version */
+
+/*------------------------------------------------------------------------------
+*/
+
+double sf_signal_max (SNDFILE *sndfile)
+{ SF_PRIVATE *psf ;
+ off_t position ;
+ unsigned int k, len, readcount ;
+ double max = 0.0, *data, temp ;
+
+ VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;
+
+ if (! psf->sf.seekable)
+ { psf->error = SFE_NOT_SEEKABLE ;
+ return 0.0 ;
+ } ;
+
+
+ if (! psf->read_double)
+ { psf->error = SFE_UNIMPLEMENTED ;
+ return -1 ;
+ } ;
+
+ 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 = psf->read_double (psf, 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 */
+
+/*------------------------------------------------------------------------------
+*/
+
+off_t sf_seek (SNDFILE *sndfile, off_t offset, int whence)
+{ SF_PRIVATE *psf ;
+ off_t realseek, position ;
+
+ VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;
+
+ if (! psf->sf.seekable)
+ { psf->error = SFE_NOT_SEEKABLE ;
+ return ((off_t) -1) ;
+ } ;
+
+ if (psf->seek_func)
+ return psf->seek_func (psf, offset, whence) ;
+
+ if (! (psf->blockwidth && psf->datalength && psf->dataoffset))
+ { psf->error = SFE_BAD_SEEK ;
+ return ((off_t) -1) ;
+ } ;
+
+ switch (whence)
+ { case SEEK_SET :
+ if (offset < 0 || offset * psf->blockwidth > psf->datalength)
+ { psf->error = SFE_BAD_SEEK ;
+ return ((off_t) -1) ;
+ } ;
+ realseek = psf->dataoffset + offset * psf->blockwidth ;
+ fseek (psf->file, realseek, SEEK_SET) ;
+ position = ftell (psf->file) ;
+ break ;
+
+ case SEEK_CUR :
+ realseek = offset * psf->blockwidth ;
+ position = ftell (psf->file) - psf->dataoffset ;
+ if (position + realseek > psf->datalength || position + realseek < 0)
+ { psf->error = SFE_BAD_SEEK ;
+ return ((off_t) -1) ;
+ } ;
+ fseek (psf->file, realseek, SEEK_CUR) ;
+ position = ftell (psf->file) ;
+ break ;
+
+ case SEEK_END :
+ if (offset > 0 || psf->sf.samples + offset < 0)
+ { psf->error = SFE_BAD_SEEK ;
+ return ((off_t) -1) ;
+ } ;
+ realseek = (psf->sf.samples + offset) * psf->blockwidth + psf->dataoffset ;
+
+ fseek (psf->file, realseek, SEEK_SET) ;
+ position = ftell (psf->file) ;
+ break ;
+
+ default :
+ psf->error = SFE_BAD_SEEK ;
+ return ((off_t) -1) ;
+ } ;
+
+ psf->current = (position - psf->dataoffset) / psf->blockwidth ;
+ return psf->current ;
+} /* sf_seek */
+
+/*------------------------------------------------------------------------------
+*/
+
+size_t sf_read_raw (SNDFILE *sndfile, void *ptr, size_t bytes)
+{ SF_PRIVATE *psf ;
+ size_t count ;
+
+ VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;
+
+ if (psf->mode != SF_MODE_READ)
+ { psf->error = SFE_NOT_READMODE ;
+ return ((size_t) -1) ;
+ } ;
+
+ if (psf->current >= psf->datalength)
+ { memset (ptr, 0, bytes) ;
+ return 0 ;
+ } ;
+
+ if (bytes % (psf->sf.channels * psf->bytewidth))
+ { psf->error = SFE_BAD_READ_ALIGN ;
+ return (size_t) -1 ;
+ } ;
+
+ count = fread (ptr, 1, bytes, psf->file) ;
+
+ if (count < bytes)
+ memset (((char*)ptr) + count, 0, bytes - count) ;
+
+ psf->current += count / psf->blockwidth ;
+
+ return count ;
+} /* sf_read_raw */
+
+/*------------------------------------------------------------------------------
+*/
+
+size_t sf_read_short (SNDFILE *sndfile, short *ptr, size_t len)
+{ SF_PRIVATE *psf ;
+ size_t count, extra ;
+
+ VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;
+
+ if (psf->mode != SF_MODE_READ)
+ { psf->error = SFE_NOT_READMODE ;
+ return (size_t) -1 ;
+ } ;
+
+ if (len % psf->sf.channels)
+ { psf->error = SFE_BAD_READ_ALIGN ;
+ return (size_t) -1 ;
+ } ;
+
+ if (psf->current >= psf->sf.samples)
+ { memset (ptr, 0, len * sizeof (short)) ;
+ return 0 ; /* End of file. */
+ } ;
+
+ if (! psf->read_short)
+ { psf->error = SFE_UNIMPLEMENTED ;
+ return (size_t) -1 ;
+ } ;
+
+ 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 ;
+ extra = len - count ;
+ memset (ptr + count, 0, extra * sizeof (short)) ;
+ psf->current = psf->sf.samples ;
+ } ;
+
+ psf->current += count / psf->sf.channels ;
+
+ return count ;
+} /* sf_read_short */
+
+size_t sf_readf_short (SNDFILE *sndfile, short *ptr, size_t frames)
+{ SF_PRIVATE *psf ;
+ size_t count, extra ;
+
+ VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;
+
+ if (psf->mode != SF_MODE_READ)
+ { psf->error = SFE_NOT_READMODE ;
+ return (size_t) -1 ;
+ } ;
+
+ if (psf->current >= psf->sf.samples)
+ { memset (ptr, 0, frames * psf->sf.channels * sizeof (short)) ;
+ return 0 ; /* End of file. */
+ } ;
+
+ if (! psf->read_short)
+ { psf->error = SFE_UNIMPLEMENTED ;
+ return (size_t) -1 ;
+ } ;
+
+ 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 ;
+ extra = frames * psf->sf.channels - count ;
+ memset (ptr + count, 0, extra * sizeof (short)) ;
+ psf->current = psf->sf.samples ;
+ } ;
+
+ psf->current += count / psf->sf.channels ;
+
+ return count / psf->sf.channels ;
+} /* sf_readf_short */
+
+/*------------------------------------------------------------------------------
+*/
+
+size_t sf_read_int (SNDFILE *sndfile, int *ptr, size_t len)
+{ SF_PRIVATE *psf ;
+ size_t count, extra ;
+
+ VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;
+
+ if (psf->mode != SF_MODE_READ)
+ return SFE_NOT_READMODE ;
+
+ if (len % psf->sf.channels)
+ return (psf->error = SFE_BAD_READ_ALIGN) ;
+
+ if (psf->current >= psf->sf.samples)
+ { memset (ptr, 0, len * sizeof (int)) ;
+ return 0 ;
+ } ;
+
+ if (! psf->read_int)
+ { psf->error = SFE_UNIMPLEMENTED ;
+ return (size_t) -1 ;
+ } ;
+
+ 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 ;
+ extra = len - count ;
+ memset (ptr + count, 0, extra * sizeof (int)) ;
+ psf->current = psf->sf.samples ;
+ } ;
+
+ psf->current += count / psf->sf.channels ;
+
+ return count ;
+} /* sf_read_int */
+
+size_t sf_readf_int (SNDFILE *sndfile, int *ptr, size_t frames)
+{ SF_PRIVATE *psf ;
+ size_t count, extra ;
+
+ VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;
+
+ if (psf->mode != SF_MODE_READ)
+ return SFE_NOT_READMODE ;
+
+ if (psf->current >= psf->sf.samples)
+ { memset (ptr, 0, frames * psf->sf.channels * sizeof (int)) ;
+ return 0 ;
+ } ;
+
+ if (! psf->read_int)
+ { psf->error = SFE_UNIMPLEMENTED ;
+ return (size_t) -1 ;
+ } ;
+
+ 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 ;
+ extra = frames * psf->sf.channels - count ;
+ memset (ptr + count, 0, extra * sizeof (int)) ;
+ psf->current = psf->sf.samples ;
+ } ;
+
+ psf->current += count / psf->sf.channels ;
+
+ return count / psf->sf.channels ;
+} /* sf_readf_int */
+
+/*------------------------------------------------------------------------------
+*/
+
+size_t sf_read_double (SNDFILE *sndfile, double *ptr, size_t len, int normalize)
+{ SF_PRIVATE *psf ;
+ size_t count, extra ;
+
+ VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ;
+
+ if (psf->mode != SF_MODE_READ)
+ return SFE_NOT_READMODE ;
+
+ if (len % psf->sf.channels)
+ return (psf->error = SFE_BAD_READ_ALIGN) ;
+
+ if (psf->current >= psf->sf.samples)
+ { memset (ptr, 0, len * sizeof (double)) ;
+ return 0 ;
+ } ;
+
+ if (! psf->read_double)
+ { psf->error = SFE_UNIMPLEMENTED ;
+ return (size_t) -1 ;
+ } ;
+
+ count = psf->read_double (psf, ptr, len, normalize) ;
+
+ if (psf->current + count / psf->sf.channels > psf->sf.samples)
+ { count = (psf->sf.samples - psf->current) * psf->sf.channels ;
+ extra = len - count ;
+ memset (ptr + count, 0, extra * sizeof (double)) ;
+ psf->current = psf->sf.samples ;
+ } ;
+
+ psf->current += count / psf->sf.channels ;
+
+ return count ;
+} /* sf_read_double */
+
+size_t sf_readf_double (SNDFILE *sndfile, double *ptr, size_t frames, int normalize)
+{ SF_PRIVATE *psf ;
+ size_t count, extra ;
+
+ VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile, psf) ;
+
+ if (psf->mode != SF_MODE_READ)
+ return SFE_NOT_READMODE ;
+
+ if (psf->current >= psf->sf.samples)
+ { memset (ptr, 0, frames * psf->sf.channels * sizeof (double)) ;
+ return 0 ;
+ } ;
+
+ if (! psf->read_double)
+ { psf->error = SFE_UNIMPLEMENTED ;
+ return (size_t) -1 ;
+ } ;
+
+ count = psf->read_double (psf, ptr, frames * psf->sf.channels, normalize) ;
+
+ if (psf->current + count / psf->sf.channels > psf->sf.samples)
+ { count = (psf->sf.samples - psf->current) * psf->sf.channels ;
+ extra = frames * psf->sf.channels - count ;
+ memset (ptr + count, 0, extra * sizeof (double)) ;
+ psf->current = psf->sf.samples ;
+ } ;
+
+ psf->current += count / psf->sf.channels ;
+
+ return count / psf->sf.channels ;
+} /* sf_readf_double */
+
+/*------------------------------------------------------------------------------
+*/
+
+size_t sf_write_raw (SNDFILE *sndfile, void *ptr, size_t len)
+{ SF_PRIVATE *psf ;
+ size_t count ;
+
+ VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;
+
+ if (psf->mode != SF_MODE_WRITE)
+ { psf->error = SFE_NOT_WRITEMODE ;
+ return (size_t) -1 ;
+ } ;
+
+ if (len % (psf->sf.channels * psf->bytewidth))
+ { psf->error = SFE_BAD_WRITE_ALIGN ;
+ return (size_t) -1 ;
+ } ;
+
+ count = fwrite (ptr, 1, len, psf->file) ;
+
+ psf->current += count / psf->blockwidth ;
+
+ return count ;
+} /* sf_write_raw */
+
+/*------------------------------------------------------------------------------
+*/
+
+size_t sf_write_short (SNDFILE *sndfile, short *ptr, size_t len)
+{ SF_PRIVATE *psf ;
+ size_t count ;
+
+ VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;
+
+ if (psf->mode != SF_MODE_WRITE)
+ { psf->error = SFE_NOT_WRITEMODE ;
+ return (size_t) -1 ;
+ } ;
+
+ if (len % psf->sf.channels)
+ { psf->error = SFE_BAD_WRITE_ALIGN ;
+ return (size_t) -1 ;
+ } ;
+
+ if (! psf->write_short)
+ { psf->error = SFE_UNIMPLEMENTED ;
+ return (size_t) -1 ;
+ } ;
+
+ count = psf->write_short (sndfile, ptr, len) ;
+
+ psf->current += count / psf->sf.channels ;
+
+ return count ;
+} /* sf_write_short */
+
+size_t sf_writef_short (SNDFILE *sndfile, short *ptr, size_t frames)
+{ SF_PRIVATE *psf ;
+ size_t count ;
+
+ VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;
+
+ if (psf->mode != SF_MODE_WRITE)
+ { psf->error = SFE_NOT_WRITEMODE ;
+ return (size_t) -1 ;
+ } ;
+
+ if (! psf->write_short)
+ { psf->error = SFE_UNIMPLEMENTED ;
+ return (size_t) -1 ;
+ } ;
+
+ count = psf->write_short (sndfile, ptr, frames * psf->sf.channels) ;
+
+ psf->current += count / psf->sf.channels ;
+
+ return count / psf->sf.channels ;
+} /* sf_writef_short */
+
+/*------------------------------------------------------------------------------
+*/
+
+size_t sf_write_int (SNDFILE *sndfile, int *ptr, size_t len)
+{ SF_PRIVATE *psf ;
+ size_t count ;
+
+ VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;
+
+ if (psf->mode != SF_MODE_WRITE)
+ { psf->error = SFE_NOT_WRITEMODE ;
+ return (size_t) -1 ;
+ } ;
+
+ if (len % psf->sf.channels)
+ { psf->error = SFE_BAD_WRITE_ALIGN ;
+ return (size_t) -1 ;
+ } ;
+
+ if (! psf->write_int)
+ { psf->error = SFE_UNIMPLEMENTED ;
+ return (size_t) -1 ;
+ } ;
+
+ count = psf->write_int (sndfile, ptr, len) ;
+
+ psf->current += count / psf->sf.channels ;
+
+ return count ;
+} /* sf_write_int */
+
+size_t sf_writef_int (SNDFILE *sndfile, int *ptr, size_t frames)
+{ SF_PRIVATE *psf ;
+ size_t count ;
+
+ VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;
+
+ if (psf->mode != SF_MODE_WRITE)
+ { psf->error = SFE_NOT_WRITEMODE ;
+ return (size_t) -1 ;
+ } ;
+
+ if (! psf->write_int)
+ { psf->error = SFE_UNIMPLEMENTED ;
+ return (size_t) -1 ;
+ } ;
+
+ count = psf->write_int (sndfile, ptr, frames * psf->sf.channels) ;
+
+ psf->current += count / psf->sf.channels ;
+
+ return count / psf->sf.channels ;
+} /* sf_writef_int */
+
+/*------------------------------------------------------------------------------
+*/
+
+size_t sf_write_double (SNDFILE *sndfile, double *ptr, size_t len, int normalize)
+{ SF_PRIVATE *psf ;
+ size_t count ;
+
+ VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;
+
+ if (psf->mode != SF_MODE_WRITE)
+ { psf->error = SFE_NOT_WRITEMODE ;
+ return (size_t) -1 ;
+ } ;
+
+ if (len % psf->sf.channels)
+ { psf->error = SFE_BAD_WRITE_ALIGN ;
+ return (size_t) -1 ;
+ } ;
+
+ if (! psf->write_double)
+ { psf->error = SFE_UNIMPLEMENTED ;
+ return (size_t) -1 ;
+ } ;
+
+ count = psf->write_double (sndfile, ptr, len, normalize) ;
+
+ psf->current += count / psf->sf.channels ;
+
+ return count ;
+} /* sf_write_double */
+
+size_t sf_writef_double (SNDFILE *sndfile, double *ptr, size_t frames, int normalize)
+{ SF_PRIVATE *psf ;
+ size_t count ;
+
+ VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;
+
+ if (psf->mode != SF_MODE_WRITE)
+ { psf->error = SFE_NOT_WRITEMODE ;
+ return (size_t) -1 ;
+ } ;
+
+ if (! psf->write_double)
+ { psf->error = SFE_UNIMPLEMENTED ;
+ return (size_t) -1 ;
+ } ;
+
+ count = psf->write_double (sndfile, ptr, frames * psf->sf.channels, normalize) ;
+
+ psf->current += count / psf->sf.channels ;
+
+ return count / psf->sf.channels ;
+} /* sf_writef_double */
+
+/*------------------------------------------------------------------------------
+*/
+
+int sf_close (SNDFILE *sndfile)
+{ SF_PRIVATE *psf ;
+ int error ;
+
+ VALIDATE_SNDFILE_AND_ASSIGN_PSF (sndfile,psf) ;
+
+ if (psf->close)
+ error = psf->close (psf) ;
+
+ fclose (psf->file) ;
+ memset (psf, 0, sizeof (SF_PRIVATE)) ;
+
+ free (psf) ;
+
+ return 0 ;
+} /* sf_close */
+
+
+/*=========================================================================
+** Private functions.
+*/
+
+
--- /dev/null
+++ b/common/libsndfile/src/sndfile.h
@@ -1,0 +1,218 @@
+/*
+** Copyright (C) 1999-2000 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.
+*/
+
+/* sndfile.h -- system-wide definitions */
+
+#ifndef SNDFILE_H
+#define SNDFILE_H
+
+#include <stdio.h>
+#include <stdlib.h>
+
+/* For the Metrowerks CodeWarrior Pro Compiler (mainly MacOS) */
+
+#if (defined (__MWERKS__))
+#include <unix.h>
+#else
+#include <sys/types.h>
+#endif
+
+#ifdef _WIN32
+ #pragma pack(push,1)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/* The following file types can be read and written.
+** A file type would consist of a major type (ie SF_FORMAT_WAV) bitwise
+** ORed with a minor type (ie SF_FORMAT_PCM). SF_FORMAT_TYPEMASK and
+** SF_FORMAT_SUBMASK can be used to separate the major and minor file
+** types.
+*/
+
+enum
+{ SF_FORMAT_WAV = 0x10000, /* Microsoft WAV format (big endian). */
+ SF_FORMAT_AIFF = 0x20000, /* Apple/SGI AIFF format (little 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_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_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_SVX_FIB = 0x000B, /* SVX Fibonacci Delta encoding. */
+ SF_FORMAT_SVX_EXP = 0x000C, /* SVX Exponential Delta encoding. */
+
+ SF_FORMAT_GSM610 = 0x000D, /* GSM 6.10 encoding. */
+
+ SF_FORMAT_G721_32 = 0x000E, /* 32kbs G721 ADPCM encoding. */
+ SF_FORMAT_G723_24 = 0x000F, /* 24kbs G723 ADPCM encoding. */
+
+ SF_FORMAT_SUBMASK = 0xFFFF,
+ SF_FORMAT_TYPEMASK = 0x7FFF0000
+} ;
+
+/* Th following SF_FORMAT_RAW_* identifiers are deprecated. Use the
+** SF_FORMAT_PCM_* idetifiers instead.
+*/
+#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
+
+/* A SNDFILE* pointer can be passed around much like stdio.h's FILE* pointer. */
+
+typedef void SNDFILE ;
+
+/* 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 ;
+
+
+/* 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 ().
+*/
+
+SNDFILE* sf_open_read (const char *path, SF_INFO *wfinfo) ;
+SNDFILE* sf_open_write (const char *path, const SF_INFO *wfinfo) ;
+
+/* sf_perror () prints out the current error state.
+** sf_error_str () returns the current error message to the caller in the
+** string buffer provided.
+*/
+
+int sf_perror (SNDFILE *sndfile) ;
+int sf_error_str (SNDFILE *sndfile, char* str, size_t len) ;
+
+int sf_error_number (int errnum, char *str, size_t maxlen) ;
+
+
+size_t sf_get_header_info (SNDFILE *sndfile, char* buffer, size_t bufferlen, size_t offset) ;
+
+/* Get the library version string. */
+
+size_t sf_get_lib_version (char* buffer, size_t bufferlen) ;
+
+/* 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 ().
+** 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.
+*/
+
+off_t sf_seek (SNDFILE *sndfile, off_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) ;
+
+/* 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) ;
+
+size_t sf_readf_int (SNDFILE *sndfile, int *ptr, size_t frames) ;
+size_t sf_writef_int (SNDFILE *sndfile, int *ptr, size_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) ;
+
+/* Functions for reading and writing the data chunk in terms of items.
+** Otherwise similar to above.
+** All of these read/write function return number of items read/written.
+*/
+
+size_t sf_read_short (SNDFILE *sndfile, short *ptr, size_t items) ;
+size_t sf_write_short (SNDFILE *sndfile, short *ptr, size_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) ;
+
+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) ;
+
+/* Close the SNDFILE. Returns 0 on success, or an error number. */
+
+int sf_close (SNDFILE *sndfile) ;
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#ifdef _WIN32
+ #pragma pack(pop,1)
+#endif
+
+#endif /* SNDFILE_H */
+
+
+
+
--- /dev/null
+++ b/common/libsndfile/src/stamp-h.in
@@ -1,0 +1,1 @@
+timestamp
--- /dev/null
+++ b/common/libsndfile/src/svx.c
@@ -1,0 +1,376 @@
+/*
+** Copyright (C) 1999-2000 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"
+#include "pcm.h"
+
+
+/*------------------------------------------------------------------------------
+ * 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
+
+#define FORM_MARKER (MAKE_MARKER ('F', 'O', 'R', 'M'))
+#define SVX8_MARKER (MAKE_MARKER ('8', 'S', 'V', 'X'))
+#define SV16_MARKER (MAKE_MARKER ('1', '6', 'S', 'V'))
+#define VHDR_MARKER (MAKE_MARKER ('V', 'H', 'D', 'R'))
+#define BODY_MARKER (MAKE_MARKER ('B', 'O', 'D', 'Y'))
+
+#define ATAK_MARKER (MAKE_MARKER ('A','T','A','K'))
+#define RLSE_MARKER (MAKE_MARKER ('R','L','S','E'))
+
+#define c_MARKER (MAKE_MARKER ('(', 'c', ')', ' '))
+#define NAME_MARKER (MAKE_MARKER ('N', 'A', 'M', 'E'))
+#define AUTH_MARKER (MAKE_MARKER ('A', 'U', 'T', 'H'))
+#define ANNO_MARKER (MAKE_MARKER ('A', 'N', 'N', 'O'))
+#define CHAN_MARKER (MAKE_MARKER ('C', 'H', 'A', 'N'))
+
+
+/*------------------------------------------------------------------------------
+ * Typedefs for file chunks.
+*/
+
+typedef struct
+{ unsigned int oneShotHiSamples, repeatHiSamples, samplesPerHiCycle ;
+ unsigned short samplesPerSec ;
+ unsigned char octave, compression ;
+ unsigned int volume ;
+} VHDR_CHUNK ;
+
+/*------------------------------------------------------------------------------
+ * Private static functions.
+*/
+
+static int svx_close (SF_PRIVATE *psf) ;
+
+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 */
+
+/*------------------------------------------------------------------------------
+** Public functions.
+*/
+
+int svx_open_read (SF_PRIVATE *psf)
+{ VHDR_CHUNK vhdr ;
+ unsigned int FORMsize, vhdrsize, dword, marker ;
+ int filetype = 0, parsestage = 0, done = 0 ;
+
+ /* Set default number of channels. */
+ psf->sf.channels = 1 ;
+
+ while (! done)
+ { fread (&marker, sizeof (marker), 1, psf->file) ;
+ switch (marker)
+ { case FORM_MARKER :
+ if (parsestage != 0)
+ return SFE_SVX_NO_FORM ;
+ fread (&dword, sizeof (dword), 1, psf->file) ;
+ FORMsize = BE2H_INT (dword) ;
+
+ if (FORMsize != psf->filelength - 2 * sizeof (dword))
+ { dword = psf->filelength - 2 * sizeof (dword);
+ psf_sprintf (psf, "FORM : %d (should be %d)\n", FORMsize, dword) ;
+ FORMsize = dword ;
+ }
+ else
+ psf_sprintf (psf, "FORM : %d\n", FORMsize) ;
+ parsestage = 1 ;
+ break ;
+
+ case SVX8_MARKER :
+ case SV16_MARKER :
+ if (parsestage != 1)
+ return SFE_SVX_NO_FORM ;
+ filetype = marker ;
+ psf_sprintf (psf, " %D\n", marker) ;
+ parsestage = 2 ;
+ break ;
+
+ case VHDR_MARKER :
+ if (parsestage != 2)
+ return SFE_SVX_NO_FORM ;
+ fread (&dword, sizeof (dword), 1, psf->file) ;
+ vhdrsize = BE2H_INT (dword) ;
+
+ psf_sprintf (psf, " VHDR : %d\n", vhdrsize) ;
+
+ fread (&vhdr, sizeof (vhdr), 1, psf->file) ;
+ if (CPU_IS_LITTLE_ENDIAN)
+ endswap_vhdr_chunk (&vhdr) ;
+
+ psf_sprintf (psf, " OneShotHiSamples : %d\n", vhdr.oneShotHiSamples) ;
+ psf_sprintf (psf, " RepeatHiSamples : %d\n", vhdr.repeatHiSamples) ;
+ psf_sprintf (psf, " samplesPerHiCycle : %d\n", vhdr.samplesPerHiCycle) ;
+ psf_sprintf (psf, " Sample Rate : %d\n", vhdr.samplesPerSec) ;
+ psf_sprintf (psf, " Octave : %d\n", vhdr.octave) ;
+
+ psf_sprintf (psf, " Compression : %d => ", vhdr.compression) ;
+
+ switch (vhdr.compression)
+ { case 0 : psf_sprintf (psf, "None.\n") ;
+ break ;
+ case 1 : psf_sprintf (psf, "Fibonacci delta\n") ;
+ break ;
+ case 2 : psf_sprintf (psf, "Exponential delta\n") ;
+ break ;
+ } ;
+
+ psf_sprintf (psf, " Volume : %d\n", vhdr.volume) ;
+
+ psf->sf.samplerate = vhdr.samplesPerSec ;
+
+ if (filetype == SVX8_MARKER)
+ psf->sf.pcmbitwidth = 8 ;
+ else if (filetype == SV16_MARKER)
+ psf->sf.pcmbitwidth = 16 ;
+
+ parsestage = 3 ;
+ break ;
+
+ case BODY_MARKER :
+ if (parsestage != 3)
+ return SFE_SVX_NO_BODY ;
+ fread (&dword, sizeof (dword), 1, psf->file) ;
+
+ psf->datalength = BE2H_INT (dword) ;
+ psf->dataoffset = ftell (psf->file) ;
+
+ if (psf->datalength > psf->filelength - psf->dataoffset)
+ { psf_sprintf (psf, " BODY : %d (should be %d)\n", psf->datalength, psf->filelength - psf->dataoffset) ;
+ psf->datalength = psf->filelength - psf->dataoffset ;
+ }
+ else
+ psf_sprintf (psf, " BODY : %d\n", psf->datalength) ;
+
+ fseek (psf->file, psf->datalength, SEEK_CUR) ;
+ parsestage = 4 ;
+ break ;
+
+ case NAME_MARKER :
+ case ANNO_MARKER :
+ if (parsestage < 2)
+ return SFE_SVX_NO_FORM ;
+ fread (&dword, sizeof (dword), 1, psf->file) ;
+ dword = BE2H_INT (dword) ;
+ psf_sprintf (psf, " %D : %d\n", marker, dword) ;
+ fseek (psf->file, (int) dword, SEEK_CUR) ;
+ break ;
+
+ case AUTH_MARKER :
+ case c_MARKER :
+ case CHAN_MARKER :
+ if (parsestage < 2)
+ return SFE_SVX_NO_FORM ;
+ fread (&dword, sizeof (dword), 1, psf->file) ;
+ dword = BE2H_INT (dword) ;
+ psf_sprintf (psf, " %D : %d\n", marker, dword) ;
+ fseek (psf->file, (int) dword, SEEK_CUR) ;
+ break ;
+
+ default :
+ if (isprint ((marker >> 24) & 0xFF) && isprint ((marker >> 16) & 0xFF)
+ && isprint ((marker >> 8) & 0xFF) && isprint (marker & 0xFF))
+ { fread (&dword, sizeof (dword), 1, psf->file) ;
+ psf_sprintf (psf, "%D : %d (unknown marker)\n", marker, dword) ;
+ fseek (psf->file, (int) dword, SEEK_CUR) ;
+ break ;
+ } ;
+ if ((dword = ftell (psf->file)) & 0x03)
+ { psf_sprintf (psf, " Unknown chunk marker at position %d. Resynching.\n", dword - 4) ;
+ fseek (psf->file, -3, SEEK_CUR) ;
+ break ;
+ } ;
+ psf_sprintf (psf, "*** Unknown chunk marker : %X. Exiting parser.\n", marker) ;
+ done = 1 ;
+ } ; /* switch (marker) */
+
+ if (ferror (psf->file))
+ { psf_sprintf (psf, "*** Error on file handle. ***\n", marker) ;
+ clearerr (psf->file) ;
+ break ;
+ } ;
+
+ if (ftell (psf->file) >= (off_t) (psf->filelength - (2 * sizeof (dword))))
+ break ;
+ } ; /* while (1) */
+
+ if (vhdr.compression)
+ return SFE_SVX_BAD_COMP ;
+
+ 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 ;
+
+ switch (psf->bytewidth)
+ { case 1 :
+ psf->read_short = (func_short) pcm_read_sc2s ;
+ psf->read_int = (func_int) pcm_read_sc2i ;
+ psf->read_double = (func_double) pcm_read_sc2d ;
+ break ;
+ case 2 :
+ psf->read_short = (func_short) pcm_read_bes2s ;
+ psf->read_int = (func_int) pcm_read_bes2i ;
+ psf->read_double = (func_double) pcm_read_bes2d ;
+ break ;
+ default :
+ /* printf ("Weird bytewidth (%d)\n", psf->bytewidth) ; */
+ return SFE_UNIMPLEMENTED ;
+ } ;
+
+ return 0 ;
+} /* svx_open_read */
+
+int svx_open_write (SF_PRIVATE *psf)
+{ static char annotation [] = "libsndfile by Erik de Castro Lopo\0\0\0" ;
+ VHDR_CHUNK vhdr ;
+ unsigned int FORMsize ;
+
+ 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 ;
+
+ FORMsize = 0x7FFFFFFF ; /* Correct this when closing file. */
+
+ vhdr.oneShotHiSamples = psf->sf.samples ;
+ vhdr.repeatHiSamples = 0 ;
+ vhdr.samplesPerHiCycle = 0 ;
+ vhdr.samplesPerSec = psf->sf.samplerate ;
+ vhdr.octave = 1 ;
+ vhdr.compression = 0 ;
+ vhdr.volume = (psf->bytewidth == 1) ? 255 : 0xFFFF ;
+
+ if (CPU_IS_LITTLE_ENDIAN)
+ endswap_vhdr_chunk (&vhdr) ;
+
+ psf_hprintf (psf, "mL" , FORM_MARKER, FORMsize) ;
+ psf_hprintf (psf, "m" , (psf->bytewidth == 1) ? SVX8_MARKER : SV16_MARKER) ;
+ psf_hprintf (psf, "mLb" , VHDR_MARKER, sizeof (VHDR_CHUNK), &vhdr, sizeof (VHDR_CHUNK)) ;
+ psf_hprintf (psf, "mSmS", NAME_MARKER, psf->filename, ANNO_MARKER, annotation) ;
+ psf_hprintf (psf, "mL" , BODY_MARKER, psf->datalength) ;
+
+
+ fwrite (psf->header, psf->headindex, 1, psf->file) ;
+
+ psf->dataoffset = ftell (psf->file) ;
+
+ psf->close = (func_close) svx_close ;
+
+ switch (psf->bytewidth)
+ { case 1 :
+ psf->write_short = (func_short) pcm_write_s2sc ;
+ psf->write_int = (func_int) pcm_write_i2sc ;
+ psf->write_double = (func_double) pcm_write_d2sc ;
+ break ;
+ case 2 :
+ psf->write_short = (func_short) pcm_write_s2bes ;
+ psf->write_int = (func_int) pcm_write_i2bes ;
+ psf->write_double = (func_double) pcm_write_d2bes ;
+ break ;
+ case 3 :
+ psf->write_short = (func_short) pcm_write_s2bet ;
+ psf->write_int = (func_int) pcm_write_i2bet ;
+ psf->write_double = (func_double) pcm_write_d2bet ;
+ break ;
+ case 4 :
+ psf->write_short = (func_short) pcm_write_s2bei ;
+ psf->write_int = (func_int) pcm_write_i2bei ;
+ psf->write_double = (func_double) pcm_write_d2bei ;
+ break ;
+ default : return SFE_UNIMPLEMENTED ;
+ } ;
+
+ return 0 ;
+} /* svx_open_write */
+
+/*------------------------------------------------------------------------------
+*/
+
+int svx_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 FORM, 8SVX and BODY chunks.
+ */
+
+ fseek (psf->file, 0, SEEK_END) ;
+ psf->filelength = ftell (psf->file) ;
+
+ psf_hsetf (psf, FORM_MARKER, "L", psf->filelength - 8) ;
+ psf_hsetf (psf, BODY_MARKER, "L", psf->filelength - psf->dataoffset) ;
+
+ fseek (psf->file, 0, SEEK_SET) ;
+ fwrite (psf->header, psf->headindex, 1, psf->file) ;
+ } ;
+
+ if (psf->fdata)
+ free (psf->fdata) ;
+ psf->fdata = NULL ;
+
+ return 0 ;
+} /* svx_close */
+
--- /dev/null
+++ b/common/libsndfile/src/ulaw.c
@@ -1,0 +1,979 @@
+/*
+** Copyright (C) 1999-2000 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 <unistd.h>
+
+#include "sndfile.h"
+#include "common.h"
+
+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 ulaw2d_array (unsigned char *buffer, unsigned int count, double *ptr, unsigned int index, 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 d2ulaw_array (double *buffer, unsigned int count, unsigned char *ptr, unsigned int index, double normfact) ;
+
+
+int ulaw_read_ulaw2s (SF_PRIVATE *psf, short *ptr, unsigned int len)
+{ unsigned int readcount, thisread, index = 0 ;
+ int bytecount, bufferlen ;
+ int 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) ;
+ ulaw2s_array ((unsigned char*) (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 ;
+} /* ulaw_read_ulaw2s */
+
+int ulaw_read_ulaw2i (SF_PRIVATE *psf, int *ptr, unsigned int len)
+{ unsigned int readcount, thisread, index = 0 ;
+ int bytecount, bufferlen ;
+ int 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) ;
+ ulaw2i_array ((unsigned char*) (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 ;
+} /* ulaw_read_ulaw2i */
+
+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 ;
+ double normfact ;
+
+ normfact = (normalize ? 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) ;
+ 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 ;
+} /* ulaw_read_ulaw2d */
+
+/*=============================================================================================
+*/
+
+int ulaw_write_s2ulaw (SF_PRIVATE *psf, short *ptr, unsigned int len)
+{ unsigned int writecount, thiswrite, index = 0 ;
+ int bytecount, bufferlen ;
+ int total = 0 ;
+
+ 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) ;
+ total += thiswrite ;
+ if (thiswrite < writecount)
+ break ;
+ index += thiswrite / psf->bytewidth ;
+ bytecount -= thiswrite ;
+ } ;
+
+ total /= psf->bytewidth ;
+ if (total < len)
+ psf->error = SFE_SHORT_READ ;
+
+ return total ;
+} /* ulaw_write_s2ulaw */
+
+int ulaw_write_i2ulaw (SF_PRIVATE *psf, int *ptr, unsigned int len)
+{ unsigned int writecount, thiswrite, index = 0 ;
+ int bytecount, bufferlen ;
+ int total = 0 ;
+
+ 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) ;
+ total += thiswrite ;
+ if (thiswrite < writecount)
+ break ;
+ index += thiswrite / psf->bytewidth ;
+ bytecount -= thiswrite ;
+ } ;
+
+ total /= psf->bytewidth ;
+ if (total < len)
+ psf->error = SFE_SHORT_READ ;
+
+ return total ;
+} /* ulaw_write_i2ulaw */
+
+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 ;
+ double normfact ;
+
+ normfact = (normalize ? ((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) ;
+ total += thiswrite ;
+ if (thiswrite < writecount)
+ break ;
+ index += thiswrite / psf->bytewidth ;
+ bytecount -= thiswrite ;
+ } ;
+
+ total /= psf->bytewidth ;
+ if (total < len)
+ psf->error = SFE_SHORT_READ ;
+
+ return total ;
+} /* ulaw_write_d2ulaw */
+
+
+
+
+/*=============================================================================================
+ * Private static functions and data.
+ */
+
+static short ulaw_decode [128] =
+{ -32124, -31100, -30076, -29052, -28028, -27004, -25980, -24956,
+ -23932, -22908, -21884, -20860, -19836, -18812, -17788, -16764,
+ -15996, -15484, -14972, -14460, -13948, -13436, -12924, -12412,
+ -11900, -11388, -10876, -10364, -9852, -9340, -8828, -8316,
+ -7932, -7676, -7420, -7164, -6908, -6652, -6396, -6140,
+ -5884, -5628, -5372, -5116, -4860, -4604, -4348, -4092,
+ -3900, -3772, -3644, -3516, -3388, -3260, -3132, -3004,
+ -2876, -2748, -2620, -2492, -2364, -2236, -2108, -1980,
+ -1884, -1820, -1756, -1692, -1628, -1564, -1500, -1436,
+ -1372, -1308, -1244, -1180, -1116, -1052, -988, -924,
+ -876, -844, -812, -780, -748, -716, -684, -652,
+ -620, -588, -556, -524, -492, -460, -428, -396,
+ -372, -356, -340, -324, -308, -292, -276, -260,
+ -244, -228, -212, -196, -180, -164, -148, -132,
+ -120, -112, -104, -96, -88, -80, -72, -64,
+ -56, -48, -40, -32, -24, -16, -8, 0,
+} ;
+
+static
+unsigned char ulaw_encode [8193] =
+{ 0xFF, 0xFE, 0xFE, 0xFD, 0xFD, 0xFC, 0xFC, 0xFB, 0xFB, 0xFA, 0xFA, 0xF9,
+ 0xF9, 0xF8, 0xF8, 0xF7, 0xF7, 0xF6, 0xF6, 0xF5, 0xF5, 0xF4, 0xF4, 0xF3,
+ 0xF3, 0xF2, 0xF2, 0xF1, 0xF1, 0xF0, 0xF0, 0xEF, 0xEF, 0xEF, 0xEF, 0xEE,
+ 0xEE, 0xEE, 0xEE, 0xED, 0xED, 0xED, 0xED, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB,
+ 0xEB, 0xEB, 0xEB, 0xEA, 0xEA, 0xEA, 0xEA, 0xE9, 0xE9, 0xE9, 0xE9, 0xE8,
+ 0xE8, 0xE8, 0xE8, 0xE7, 0xE7, 0xE7, 0xE7, 0xE6, 0xE6, 0xE6, 0xE6, 0xE5,
+ 0xE5, 0xE5, 0xE5, 0xE4, 0xE4, 0xE4, 0xE4, 0xE3, 0xE3, 0xE3, 0xE3, 0xE2,
+ 0xE2, 0xE2, 0xE2, 0xE1, 0xE1, 0xE1, 0xE1, 0xE0, 0xE0, 0xE0, 0xE0, 0xDF,
+ 0xDF, 0xDF, 0xDF, 0xDF, 0xDF, 0xDF, 0xDF, 0xDE, 0xDE, 0xDE, 0xDE, 0xDE,
+ 0xDE, 0xDE, 0xDE, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDD, 0xDC,
+ 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDC, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB,
+ 0xDB, 0xDB, 0xDB, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0xDA, 0xD9,
+ 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD9, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8,
+ 0xD8, 0xD8, 0xD8, 0xD7, 0xD7, 0xD7, 0xD7, 0xD7, 0xD7, 0xD7, 0xD7, 0xD6,
+ 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD5, 0xD5, 0xD5, 0xD5, 0xD5,
+ 0xD5, 0xD5, 0xD5, 0xD4, 0xD4, 0xD4, 0xD4, 0xD4, 0xD4, 0xD4, 0xD4, 0xD3,
+ 0xD3, 0xD3, 0xD3, 0xD3, 0xD3, 0xD3, 0xD3, 0xD2, 0xD2, 0xD2, 0xD2, 0xD2,
+ 0xD2, 0xD2, 0xD2, 0xD1, 0xD1, 0xD1, 0xD1, 0xD1, 0xD1, 0xD1, 0xD1, 0xD0,
+ 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xD0, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF,
+ 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCF, 0xCE,
+ 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE, 0xCE,
+ 0xCE, 0xCE, 0xCE, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD,
+ 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCD, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
+ 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCB,
+ 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB,
+ 0xCB, 0xCB, 0xCB, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA,
+ 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9,
+ 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC9, 0xC8,
+ 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8, 0xC8,
+ 0xC8, 0xC8, 0xC8, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7,
+ 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC7, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6,
+ 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC5,
+ 0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC5, 0xC5,
+ 0xC5, 0xC5, 0xC5, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4,
+ 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC4, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3,
+ 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC3, 0xC2,
+ 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2, 0xC2,
+ 0xC2, 0xC2, 0xC2, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1,
+ 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC1, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
+ 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xBF,
+ 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF,
+ 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF,
+ 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE,
+ 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE,
+ 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE, 0xBE,
+ 0xBE, 0xBE, 0xBE, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD,
+ 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD,
+ 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBD, 0xBC,
+ 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC,
+ 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC,
+ 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBC, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
+ 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
+ 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
+ 0xBB, 0xBB, 0xBB, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA,
+ 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA,
+ 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xBA, 0xB9,
+ 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9,
+ 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9,
+ 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB9, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8,
+ 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8,
+ 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8, 0xB8,
+ 0xB8, 0xB8, 0xB8, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7,
+ 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7,
+ 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB7, 0xB6,
+ 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6,
+ 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6,
+ 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB6, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
+ 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
+ 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5, 0xB5,
+ 0xB5, 0xB5, 0xB5, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4,
+ 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4,
+ 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB4, 0xB3,
+ 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3,
+ 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3,
+ 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB3, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,
+ 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,
+ 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2, 0xB2,
+ 0xB2, 0xB2, 0xB2, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1,
+ 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1,
+ 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB1, 0xB0,
+ 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0,
+ 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0,
+ 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xB0, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,
+ 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,
+ 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,
+ 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,
+ 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF,
+ 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAE,
+ 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
+ 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
+ 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
+ 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
+ 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE, 0xAE,
+ 0xAE, 0xAE, 0xAE, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,
+ 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,
+ 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,
+ 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,
+ 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD,
+ 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAD, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+ 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+ 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+ 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+ 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC,
+ 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAC, 0xAB,
+ 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
+ 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
+ 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
+ 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
+ 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB, 0xAB,
+ 0xAB, 0xAB, 0xAB, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
+ 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
+ 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
+ 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
+ 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
+ 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,
+ 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,
+ 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,
+ 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,
+ 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9,
+ 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA9, 0xA8,
+ 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,
+ 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,
+ 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,
+ 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,
+ 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8,
+ 0xA8, 0xA8, 0xA8, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,
+ 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,
+ 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,
+ 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,
+ 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7,
+ 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA7, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
+ 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
+ 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
+ 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
+ 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
+ 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA5,
+ 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
+ 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
+ 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
+ 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
+ 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5,
+ 0xA5, 0xA5, 0xA5, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+ 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+ 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+ 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+ 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4,
+ 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA4, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3,
+ 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA3, 0xA2,
+ 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,
+ 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,
+ 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,
+ 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,
+ 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2, 0xA2,
+ 0xA2, 0xA2, 0xA2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
+ 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
+ 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
+ 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
+ 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1,
+ 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0,
+ 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0xA0, 0x9F,
+ 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
+ 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
+ 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
+ 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
+ 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
+ 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
+ 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
+ 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
+ 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
+ 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F,
+ 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9F, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+ 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+ 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+ 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+ 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+ 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+ 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+ 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+ 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+ 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+ 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E,
+ 0x9E, 0x9E, 0x9E, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D,
+ 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D,
+ 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D,
+ 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D,
+ 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D,
+ 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D,
+ 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D,
+ 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D,
+ 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D,
+ 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D,
+ 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9D, 0x9C,
+ 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C,
+ 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C,
+ 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C,
+ 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C,
+ 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C,
+ 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C,
+ 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C,
+ 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C,
+ 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C,
+ 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C,
+ 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9C, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B,
+ 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B,
+ 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B,
+ 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B,
+ 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B,
+ 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B,
+ 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B,
+ 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B,
+ 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B,
+ 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B,
+ 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B,
+ 0x9B, 0x9B, 0x9B, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A,
+ 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x9A, 0x99,
+ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
+ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
+ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
+ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
+ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
+ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
+ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
+ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
+ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
+ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
+ 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x98, 0x98, 0x98, 0x98, 0x98,
+ 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
+ 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
+ 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
+ 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
+ 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
+ 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
+ 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
+ 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
+ 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
+ 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
+ 0x98, 0x98, 0x98, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
+ 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
+ 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
+ 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
+ 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
+ 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
+ 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
+ 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
+ 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
+ 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97,
+ 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x97, 0x96,
+ 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
+ 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
+ 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
+ 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
+ 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
+ 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
+ 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
+ 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
+ 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
+ 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96,
+ 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x96, 0x95, 0x95, 0x95, 0x95, 0x95,
+ 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
+ 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
+ 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
+ 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
+ 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
+ 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
+ 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
+ 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
+ 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
+ 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95,
+ 0x95, 0x95, 0x95, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
+ 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
+ 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
+ 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
+ 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
+ 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
+ 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
+ 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
+ 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
+ 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
+ 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x93,
+ 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
+ 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
+ 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
+ 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
+ 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
+ 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
+ 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
+ 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
+ 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
+ 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93,
+ 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x93, 0x92, 0x92, 0x92, 0x92, 0x92,
+ 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
+ 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
+ 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
+ 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
+ 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
+ 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
+ 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
+ 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
+ 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
+ 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
+ 0x92, 0x92, 0x92, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
+ 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
+ 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
+ 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
+ 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
+ 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
+ 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
+ 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
+ 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
+ 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91,
+ 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x91, 0x90,
+ 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
+ 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
+ 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
+ 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
+ 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
+ 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
+ 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
+ 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
+ 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
+ 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
+ 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F,
+ 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8F, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E, 0x8E,
+ 0x8E, 0x8E, 0x8E, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D,
+ 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8D, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C,
+ 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B,
+ 0x8B, 0x8B, 0x8B, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A,
+ 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x8A, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89,
+ 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x89, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
+ 0x88, 0x88, 0x88, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87,
+ 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86,
+ 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x86, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
+ 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
+ 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83,
+ 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x83, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
+ 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00
+} ;
+
+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] ;
+ else
+ ptr [index] = ulaw_decode [((int)buffer [k]) & 0x7F] ;
+ index ++ ;
+ } ;
+} /* 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] ;
+ else
+ ptr [index] = ulaw_decode [((int)buffer [k]) & 0x7F] ;
+ index ++ ;
+ } ;
+} /* ulaw2i_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] ;
+ else
+ ptr [index] = normfact * ulaw_decode [((int)buffer [k]) & 0x7F] ;
+ index ++ ;
+ } ;
+} /* 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] ;
+ else
+ buffer [k] = 0x7F & ulaw_encode [ptr [index] / -4] ;
+ index ++ ;
+ } ;
+} /* 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] ;
+ else
+ buffer [k] = 0x7F & ulaw_encode [ptr [index] / -4] ;
+ index ++ ;
+ } ;
+} /* i2ulaw_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 [((int) (normfact * ptr [index])) / 4] ;
+ else
+ buffer [k] = 0x7F & ulaw_encode [((int) (normfact * ptr [index])) / -4] ;
+ index ++ ;
+ } ;
+} /* d2ulaw_array */
+
--- /dev/null
+++ b/common/libsndfile/src/ulaw.h
@@ -1,0 +1,27 @@
+/*
+** Copyright (C) 1999-2000 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.
+*/
+
+
+int ulaw_read_ulaw2s (SF_PRIVATE *psf, short *ptr, unsigned int len) ;
+int ulaw_read_ulaw2i (SF_PRIVATE *psf, short *ptr, unsigned int len) ;
+int ulaw_read_ulaw2d (SF_PRIVATE *psf, short *ptr, unsigned int len) ;
+
+int ulaw_write_s2ulaw (SF_PRIVATE *psf, short *ptr, unsigned int len) ;
+int ulaw_write_i2ulaw (SF_PRIVATE *psf, short *ptr, unsigned int len) ;
+int ulaw_write_d2ulaw (SF_PRIVATE *psf, short *ptr, unsigned int len) ;
+
--- /dev/null
+++ b/common/libsndfile/src/wav.c
@@ -1,0 +1,1022 @@
+/*
+** Copyright (C) 1999-2000 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 "sndfile.h"
+#include "config.h"
+#include "sfendian.h"
+#include "common.h"
+#include "pcm.h"
+#include "ulaw.h"
+#include "alaw.h"
+#include "wav.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
+} ;
+
+/*------------------------------------------------------------------------------
+ * 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
+
+#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 data_MARKER (MAKE_MARKER ('d', 'a', 't', 'a'))
+#define cue_MARKER (MAKE_MARKER ('c', 'u', 'e', ' '))
+#define LIST_MARKER (MAKE_MARKER ('L', 'I', 'S', 'T'))
+#define slnt_MARKER (MAKE_MARKER ('s', 'l', 'n', 't'))
+#define wavl_MARKER (MAKE_MARKER ('w', 'a', 'v', 'l'))
+#define INFO_MARKER (MAKE_MARKER ('I', 'N', 'F', 'O'))
+#define plst_MARKER (MAKE_MARKER ('p', 'l', 's', 't'))
+#define adtl_MARKER (MAKE_MARKER ('a', 'd', 't', 'l'))
+#define labl_MARKER (MAKE_MARKER ('l', 'a', 'b', 'l'))
+#define note_MARKER (MAKE_MARKER ('n', 'o', 't', 'e'))
+#define fact_MARKER (MAKE_MARKER ('f', 'a', 'c', 't'))
+#define smpl_MARKER (MAKE_MARKER ('s', 'm', 'p', 'l'))
+#define bext_MARKER (MAKE_MARKER ('b', 'e', 'x', 't'))
+#define MEXT_MARKER (MAKE_MARKER ('M', 'E', 'X', 'T'))
+#define DISP_MARKER (MAKE_MARKER ('D', 'I', 'S', 'P'))
+
+/*------------------------------------------------------------------------------
+ * Private static functions.
+ */
+
+static int read_fmt_chunk (SF_PRIVATE *psf, WAV_FMT *wav_fmt) ;
+static int write_header (SF_PRIVATE *psf, WAV_FMT *wav_fmt, unsigned int size, int do_fact) ;
+
+static const char* wav_format_str (int k) ;
+
+static void le2h_wav_fmt (WAV_FMT *fmt) ;
+static void h2le_wav_fmt (WAV_FMT *fmt) ;
+
+/*------------------------------------------------------------------------------
+ * Public functions.
+ */
+
+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 ;
+
+ psf->sf.seekable = SF_TRUE ;
+
+ while (1)
+ { fread (&marker, sizeof (marker), 1, psf->file) ;
+ switch (marker)
+ { case RIFF_MARKER :
+ if (parsestage != 0)
+ return SFE_WAV_NO_RIFF ;
+ fread (&dword, sizeof (dword), 1, psf->file) ;
+ RIFFsize = LE2H_INT (dword) ;
+ if (psf->filelength < RIFFsize + 2 * sizeof (dword))
+ { dword = psf->filelength - 2 * sizeof (dword);
+ psf_sprintf (psf, "RIFF : %d (should be %d)\n", RIFFsize, dword) ;
+ RIFFsize = dword ;
+ }
+ else
+ psf_sprintf (psf, "RIFF : %d\n", RIFFsize) ;
+ parsestage = 1 ;
+ break ;
+
+ case WAVE_MARKER :
+ if (parsestage != 1)
+ return SFE_WAV_NO_WAVE ;
+ psf_sprintf (psf, "WAVE\n") ;
+ parsestage = 2 ;
+ break ;
+
+ case fmt_MARKER :
+ if (parsestage != 2)
+ return SFE_WAV_NO_FMT ;
+ if ((error = read_fmt_chunk (psf, &wav_fmt)))
+ return error ;
+
+ format = wav_fmt.format ;
+ parsestage = 3 ;
+ break ;
+
+ case data_MARKER :
+ if (parsestage < 3)
+ return SFE_WAV_NO_DATA ;
+ fread (&dword, sizeof (dword), 1, psf->file) ;
+ psf->datalength = LE2H_INT (dword) ;
+ psf->dataoffset = ftell (psf->file) ;
+
+ if (psf->filelength < psf->dataoffset + psf->datalength)
+ { psf_sprintf (psf, "data : %d (should be %d)\n", psf->datalength, psf->filelength - psf->dataoffset) ;
+ psf->datalength = psf->filelength - psf->dataoffset ;
+ }
+ else
+ psf_sprintf (psf, "data : %d\n", psf->datalength) ;
+
+ if (format == WAVE_FORMAT_MS_ADPCM && psf->datalength % 2)
+ { psf->datalength ++ ;
+ psf_sprintf (psf, "*** Data length odd. Increasing it by 1.\n") ;
+ } ;
+
+ fseek (psf->file, psf->datalength, SEEK_CUR) ;
+ dword = ftell (psf->file) ;
+ if (dword != (off_t) (psf->dataoffset + psf->datalength))
+ psf_sprintf (psf, "*** fseek past end error ***\n", dword, psf->dataoffset + psf->datalength) ;
+ break ;
+
+ case fact_MARKER :
+ fread (&dword, sizeof (dword), 1, psf->file) ;
+ dword = LE2H_INT (dword) ;
+ fread (&fact_chunk, sizeof (fact_chunk), 1, psf->file) ;
+ if (dword > sizeof (fact_chunk))
+ fseek (psf->file, (int) (dword - sizeof (fact_chunk)), SEEK_CUR) ;
+ fact_chunk.samples = LE2H_INT (fact_chunk.samples) ;
+ psf_sprintf (psf, "%D : %d\n", marker, dword) ;
+ psf_sprintf (psf, " samples : %d\n", fact_chunk.samples) ;
+ break ;
+
+ case cue_MARKER :
+ case LIST_MARKER :
+ case INFO_MARKER :
+ case smpl_MARKER :
+ case bext_MARKER :
+ case MEXT_MARKER :
+ case DISP_MARKER :
+ fread (&dword, sizeof (dword), 1, psf->file) ;
+ dword = LE2H_INT (dword) ;
+ psf_sprintf (psf, "%D : %d\n", marker, dword) ;
+ fseek (psf->file, (int) dword, SEEK_CUR) ;
+ break ;
+
+ default :
+ if (isprint ((marker >> 24) & 0xFF) && isprint ((marker >> 16) & 0xFF)
+ && isprint ((marker >> 8) & 0xFF) && isprint (marker & 0xFF))
+ { fread (&dword, sizeof (dword), 1, psf->file) ;
+ psf_sprintf (psf, "%D : %d (unknown marker)\n", marker, dword) ;
+ fseek (psf->file, (int) dword, SEEK_CUR) ;
+ break ;
+ } ;
+ if ((dword = ftell (psf->file)) & 0x03)
+ { psf_sprintf (psf, " Unknown chunk marker at position %d. Resynching.\n", dword - 4) ;
+ fseek (psf->file, -3, SEEK_CUR) ;
+ break ;
+ } ;
+ psf_sprintf (psf, "*** Unknown chunk marker : %X. Exiting parser.\n", marker) ;
+ break ;
+ } ; /* switch (dword) */
+
+ if (ferror (psf->file))
+ { psf_sprintf (psf, "*** Error on file handle. ***\n", marker) ;
+ clearerr (psf->file) ;
+ break ;
+ } ;
+
+ if (ftell (psf->file) >= (int) (psf->filelength - (2 * sizeof (dword))))
+ break ;
+ } ; /* 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 ;
+
+ fseek (psf->file, psf->dataoffset, SEEK_SET) ;
+
+ psf->close = (func_close) wav_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 :
+ break ;
+
+ case WAVE_FORMAT_MULAW :
+ psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_ULAW) ;
+ psf->read_short = (func_short) ulaw_read_ulaw2s ;
+ psf->read_int = (func_int) ulaw_read_ulaw2i ;
+ psf->read_double = (func_double) ulaw_read_ulaw2d ;
+ return 0 ;
+
+ case WAVE_FORMAT_ALAW :
+ psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_ALAW) ;
+ psf->read_short = (func_short) alaw_read_alaw2s ;
+ psf->read_int = (func_int) alaw_read_alaw2i ;
+ psf->read_double = (func_double) alaw_read_alaw2d ;
+ return 0 ;
+
+ case WAVE_FORMAT_MS_ADPCM :
+ psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM) ;
+ if ((error = msadpcm_reader_init (psf, &wav_fmt)))
+ return error ;
+ psf->read_short = (func_short) msadpcm_read_s ;
+ psf->read_int = (func_int) msadpcm_read_i ;
+ psf->read_double = (func_double) msadpcm_read_d ;
+ psf->seek_func = (func_seek) msadpcm_seek ;
+ return 0 ;
+
+ case WAVE_FORMAT_IMA_ADPCM :
+ psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM) ;
+ if ((error = wav_ima_reader_init (psf, &wav_fmt)))
+ return error ;
+ psf->read_short = (func_short) ima_read_s ;
+ psf->read_int = (func_int) ima_read_i ;
+ psf->read_double = (func_double) ima_read_d ;
+ psf->seek_func = (func_seek) ima_seek ;
+ return 0 ;
+
+ case WAVE_FORMAT_GSM610 :
+ psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_GSM610) ;
+ if ((error = wav_gsm610_reader_init (psf, &wav_fmt)))
+ return error ;
+ psf->read_short = (func_short) wav_gsm610_read_s ;
+ psf->read_int = (func_int) wav_gsm610_read_i ;
+ psf->read_double = (func_double) wav_gsm610_read_d ;
+ psf->seek_func = NULL ; /* Not seekable */
+ return 0 ;
+
+ case WAVE_FORMAT_IEEE_FLOAT :
+ psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_FLOAT) ;
+ if (CAN_READ_WRITE_x86_IEEE)
+ { psf->read_short = (func_short) pcm_read_f2s ;
+ psf->read_int = (func_int) pcm_read_f2i ;
+ psf->read_double = (func_double) pcm_read_f2d ;
+ }
+ else
+ { psf->read_short = (func_short) wav_read_x86f2s ;
+ psf->read_int = (func_int) wav_read_x86f2i ;
+ psf->read_double = (func_double) wav_read_x86f2d ;
+ } ;
+ return 0 ;
+
+ default : return SFE_UNIMPLEMENTED ;
+ } ;
+
+ psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_PCM) ;
+ switch (psf->bytewidth)
+ { case 1 :
+ psf->read_short = (func_short) pcm_read_uc2s ;
+ psf->read_int = (func_int) pcm_read_uc2i ;
+ psf->read_double = (func_double) pcm_read_uc2d ;
+ break ;
+ case 2 :
+ psf->read_short = (func_short) pcm_read_les2s ;
+ psf->read_int = (func_int) pcm_read_les2i ;
+ psf->read_double = (func_double) pcm_read_les2d ;
+ break ;
+ case 3 :
+ psf->read_short = (func_short) pcm_read_let2s ;
+ psf->read_int = (func_int) pcm_read_let2i ;
+ psf->read_double = (func_double) pcm_read_let2d ;
+ break ;
+ case 4 :
+ psf->read_short = (func_short) pcm_read_lei2s ;
+ psf->read_int = (func_int) pcm_read_lei2i ;
+ psf->read_double = (func_double) pcm_read_lei2d ;
+ break ;
+ default : return SFE_UNIMPLEMENTED ;
+ } ;
+
+ return 0 ;
+} /* wav_open_read */
+
+/*------------------------------------------------------------------------------
+ */
+
+int wav_open_write (SF_PRIVATE *psf)
+{ WAV_FMT wav_fmt ;
+ unsigned int dword, subformat ;
+ int error ;
+
+ 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 ;
+
+ wav_fmt.min.channels = psf->sf.channels ;
+ wav_fmt.min.samplerate = psf->sf.samplerate ;
+ wav_fmt.min.bytespersec = psf->sf.samplerate * psf->bytewidth * psf->sf.channels ;
+ wav_fmt.min.blockalign = psf->bytewidth * psf->sf.channels ;
+ wav_fmt.min.bitwidth = psf->sf.pcmbitwidth ;
+
+
+ switch (psf->sf.format & SF_FORMAT_SUBMASK)
+ { case SF_FORMAT_PCM :
+ wav_fmt.format = WAVE_FORMAT_PCM ;
+
+ psf->dataoffset = 7 * sizeof (dword) + sizeof (MIN_WAV_FMT) ;
+ psf->datalength = psf->blockwidth * psf->sf.samples ;
+ psf->filelength = psf->datalength + psf->dataoffset ;
+
+ write_header (psf, &wav_fmt, sizeof (MIN_WAV_FMT), 0) ;
+ break ;
+
+ case SF_FORMAT_FLOAT :
+ wav_fmt.format = WAVE_FORMAT_IEEE_FLOAT ;
+
+ psf->dataoffset = 9 * sizeof (dword) + sizeof (MIN_WAV_FMT) + sizeof (FACT_CHUNK) ;
+ psf->datalength = psf->blockwidth * psf->sf.samples ;
+ psf->filelength = psf->datalength + psf->dataoffset ;
+
+ write_header (psf, &wav_fmt, sizeof (MIN_WAV_FMT), 1) ;
+ break ;
+
+ case SF_FORMAT_ULAW :
+ wav_fmt.format = WAVE_FORMAT_MULAW ;
+
+ wav_fmt.size20.bitwidth = 8 ;
+ wav_fmt.size20.extrabytes = 2 ;
+ wav_fmt.size20.dummy = 0 ;
+
+ psf->dataoffset = 9 * sizeof (dword) + sizeof (WAV_FMT_SIZE20) + sizeof (FACT_CHUNK) ;
+
+ psf->datalength = psf->blockwidth * psf->sf.samples ;
+ psf->filelength = psf->datalength + psf->dataoffset ;
+
+ write_header (psf, &wav_fmt, sizeof (WAV_FMT_SIZE20), 1) ;
+ break ;
+
+ case SF_FORMAT_ALAW :
+ wav_fmt.format = WAVE_FORMAT_ALAW ;
+
+ wav_fmt.size20.bitwidth = 8 ;
+ wav_fmt.size20.extrabytes = 2 ;
+ wav_fmt.size20.dummy = 0 ;
+
+ psf->dataoffset = 9 * sizeof (dword) + sizeof (WAV_FMT_SIZE20) + sizeof (FACT_CHUNK) ;
+
+ psf->datalength = psf->blockwidth * psf->sf.samples ;
+ psf->filelength = psf->datalength + psf->dataoffset ;
+
+ write_header (psf, &wav_fmt, sizeof (WAV_FMT_SIZE20), 1) ;
+ break ;
+
+ case SF_FORMAT_IMA_ADPCM :
+ wav_fmt.format = WAVE_FORMAT_IMA_ADPCM ;
+ if ((error = wav_ima_writer_init (psf, &wav_fmt)))
+ return error ;
+
+ psf->dataoffset = 9 * sizeof (dword) + sizeof (IMA_ADPCM_WAV_FMT) + sizeof (FACT_CHUNK) ;
+ if (psf->sf.samples % wav_fmt.ima.samplesperblock)
+ psf->datalength = ((psf->sf.samples / wav_fmt.ima.samplesperblock) + 1) * wav_fmt.ima.samplesperblock ;
+ else
+ psf->datalength = psf->sf.samples ;
+ psf->filelength = psf->datalength + psf->dataoffset ;
+
+ write_header (psf, &wav_fmt, sizeof (IMA_ADPCM_WAV_FMT), 1) ;
+ break ;
+
+ case SF_FORMAT_MS_ADPCM :
+ wav_fmt.format = WAVE_FORMAT_MS_ADPCM ;
+ msadpcm_writer_init (psf, &wav_fmt) ;
+
+ psf->dataoffset = 9 * sizeof (dword) + sizeof (MS_ADPCM_WAV_FMT) + sizeof (FACT_CHUNK) ;
+ if (psf->sf.samples % wav_fmt.msadpcm.samplesperblock)
+ psf->datalength = ((psf->sf.samples / wav_fmt.msadpcm.samplesperblock) + 1) * wav_fmt.msadpcm.samplesperblock ;
+ else
+ psf->datalength = psf->sf.samples ;
+ psf->filelength = psf->datalength + psf->dataoffset ;
+
+ write_header (psf, &wav_fmt, sizeof (MS_ADPCM_WAV_FMT), 1) ;
+ break ;
+
+ case SF_FORMAT_GSM610 :
+ wav_fmt.format = WAVE_FORMAT_GSM610 ;
+ wav_gsm610_writer_init (psf, &wav_fmt) ;
+
+ psf->dataoffset = 9 * sizeof (dword) + sizeof (GSM610_WAV_FMT) + sizeof (FACT_CHUNK) ;
+ if (psf->sf.samples % wav_fmt.gsm610.samplesperblock)
+ psf->datalength = ((psf->sf.samples / wav_fmt.gsm610.samplesperblock) + 1) * wav_fmt.gsm610.samplesperblock ;
+ else
+ psf->datalength = psf->sf.samples ;
+ psf->filelength = psf->datalength + psf->dataoffset ;
+
+ write_header (psf, &wav_fmt, sizeof (GSM610_WAV_FMT), 1) ;
+ break ;
+
+ default : return SFE_UNIMPLEMENTED ;
+ } ;
+
+
+ dword = data_MARKER ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+
+ dword = H2LE_INT (psf->datalength) ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+
+ psf->close = (func_close) wav_close ;
+
+ if ((psf->sf.format & SF_FORMAT_SUBMASK) == SF_FORMAT_FLOAT)
+ { psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_FLOAT) ;
+ if (CAN_READ_WRITE_x86_IEEE)
+ { psf->write_short = (func_short) pcm_write_s2f ;
+ psf->write_int = (func_int) pcm_write_i2f ;
+ psf->write_double = (func_double) pcm_write_d2f ;
+ }
+ else
+ { psf->write_short = (func_short) wav_write_s2x86f ;
+ psf->write_int = (func_int) wav_write_i2x86f ;
+ psf->write_double = (func_double) wav_write_d2x86f ;
+ } ;
+ return 0 ;
+ } ;
+
+ if ((psf->sf.format & SF_FORMAT_SUBMASK) == SF_FORMAT_IMA_ADPCM)
+ { psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM) ;
+ psf->write_short = (func_short) ima_write_s ;
+ psf->write_int = (func_int) ima_write_i ;
+ psf->write_double = (func_double) ima_write_d ;
+ psf->seek_func = (func_seek) ima_seek ;
+ psf->close = (func_close) wav_ima_close ;
+ return 0 ;
+ } ;
+
+ if ((psf->sf.format & SF_FORMAT_SUBMASK) == SF_FORMAT_MS_ADPCM)
+ { psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM) ;
+ psf->write_short = (func_short) msadpcm_write_s ;
+ psf->write_int = (func_int) msadpcm_write_i ;
+ psf->write_double = (func_double) msadpcm_write_d ;
+ psf->seek_func = (func_seek) msadpcm_seek ;
+ psf->close = (func_close) msadpcm_close ;
+ return 0 ;
+ } ;
+
+ if ((psf->sf.format & SF_FORMAT_SUBMASK) == SF_FORMAT_GSM610)
+ { psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_GSM610) ;
+ psf->write_short = (func_short) wav_gsm610_write_s ;
+ psf->write_int = (func_int) wav_gsm610_write_i ;
+ psf->write_double = (func_double) wav_gsm610_write_d ;
+ psf->seek_func = NULL ; /* Not seekable */
+ psf->close = (func_close) wav_gsm610_close ;
+ return 0 ;
+ } ;
+
+ if ((psf->sf.format & SF_FORMAT_SUBMASK) == SF_FORMAT_ULAW)
+ { psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_ULAW) ;
+ psf->write_short = (func_short) ulaw_write_s2ulaw ;
+ psf->write_int = (func_int) ulaw_write_i2ulaw ;
+ psf->write_double = (func_double) ulaw_write_d2ulaw ;
+ return 0 ;
+ } ;
+
+ if ((psf->sf.format & SF_FORMAT_SUBMASK) == SF_FORMAT_ALAW)
+ { psf->sf.format = (SF_FORMAT_WAV | SF_FORMAT_ALAW) ;
+ psf->write_short = (func_short) alaw_write_s2alaw ;
+ psf->write_int = (func_int) alaw_write_i2alaw ;
+ psf->write_double = (func_double) alaw_write_d2alaw ;
+ return 0 ;
+ } ;
+
+ if ((psf->sf.format & SF_FORMAT_SUBMASK) != SF_FORMAT_PCM)
+ return SFE_UNIMPLEMENTED ;
+
+ switch (psf->bytewidth)
+ { case 1 :
+ psf->write_short = (func_short) pcm_write_s2uc ;
+ psf->write_int = (func_int) pcm_write_i2uc ;
+ psf->write_double = (func_double) pcm_write_d2uc ;
+ break ;
+ case 2 :
+ psf->write_short = (func_short) pcm_write_s2les ;
+ psf->write_int = (func_int) pcm_write_i2les ;
+ psf->write_double = (func_double) pcm_write_d2les ;
+ break ;
+ case 3 :
+ psf->write_short = (func_short) pcm_write_s2let ;
+ psf->write_int = (func_int) pcm_write_i2let ;
+ psf->write_double = (func_double) pcm_write_d2let ;
+ break ;
+ case 4 :
+ psf->write_short = (func_short) pcm_write_s2lei ;
+ psf->write_int = (func_int) pcm_write_i2lei ;
+ psf->write_double = (func_double) pcm_write_d2lei ;
+ break ;
+ default : return SFE_UNIMPLEMENTED ;
+ } ;
+
+ return 0 ;
+} /* wav_open_write */
+
+/*------------------------------------------------------------------------------
+ */
+
+int wav_close (SF_PRIVATE *psf)
+{ unsigned int dword ;
+
+ 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->filelength = ftell (psf->file) ;
+
+ /* Fix RIFF size. */
+ dword = H2LE_INT (psf->filelength - 2 * sizeof (dword)) ;
+ fseek (psf->file, sizeof (dword), SEEK_SET) ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+
+ psf->datalength = psf->filelength - psf->dataoffset ;
+ psf->sf.samples = psf->datalength / (psf->sf.channels * psf->bytewidth) ;
+ fseek (psf->file, (int) (psf->dataoffset - sizeof (dword)), SEEK_SET) ;
+ dword = H2LE_INT (psf->datalength) ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+ } ;
+
+ 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 dword, bytesread, k, structsize, bytespersec = 0 ;
+
+ memset (wav_fmt, 0, sizeof (WAV_FMT)) ;
+ bytesread = 0 ;
+
+ fread (&dword, sizeof (dword), 1, psf->file) ;
+ structsize = LE2H_INT (dword) ;
+
+ psf_sprintf (psf, "fmt : %d\n", structsize) ;
+
+ if (structsize < 16)
+ return SFE_WAV_FMT_SHORT ;
+ if (structsize > sizeof (WAV_FMT))
+ return SFE_WAV_FMT_TOO_BIG ;
+
+ fread (wav_fmt, structsize, 1, psf->file) ;
+ bytesread += structsize ;
+ if (CPU_IS_BIG_ENDIAN)
+ le2h_wav_fmt (wav_fmt) ;
+
+ psf_sprintf (psf, " Format : 0x%X => %s\n", wav_fmt->format, wav_format_str (wav_fmt->format)) ;
+ psf_sprintf (psf, " Channels : %d\n", wav_fmt->min.channels) ;
+ psf_sprintf (psf, " Sample Rate : %d\n", wav_fmt->min.samplerate) ;
+ psf_sprintf (psf, " Block Align : %d\n", wav_fmt->min.blockalign) ;
+ psf_sprintf (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 != bytespersec)
+ psf_sprintf (psf, " Bytes/sec : %d (should be %d)\n", wav_fmt->min.bytespersec, bytespersec) ;
+ else
+ psf_sprintf (psf, " Bytes/sec : %d\n", wav_fmt->min.bytespersec) ;
+
+ psf->sf.pcmbitwidth = wav_fmt->min.bitwidth ;
+ 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_sprintf (psf, " Bytes/sec : %d (should be %d)\n", wav_fmt->min.bytespersec, wav_fmt->min.samplerate * wav_fmt->min.blockalign) ;
+ else
+ psf_sprintf (psf, " Bytes/sec : %d\n", wav_fmt->min.bytespersec) ;
+
+ psf->sf.pcmbitwidth = 16 ;
+ psf->bytewidth = 1 ;
+ if (structsize >= 18)
+ psf_sprintf (psf, " Extra Bytes : %d\n", wav_fmt->size20.extrabytes) ;
+ 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 ;
+
+ bytespersec = (wav_fmt->msadpcm.samplerate * wav_fmt->msadpcm.blockalign) / wav_fmt->msadpcm.samplesperblock ;
+ if (wav_fmt->min.bytespersec == bytespersec)
+ psf_sprintf (psf, " Bytes/sec : %d\n", wav_fmt->min.bytespersec) ;
+ else if (wav_fmt->min.bytespersec == (wav_fmt->msadpcm.samplerate / wav_fmt->msadpcm.samplesperblock) * wav_fmt->msadpcm.blockalign)
+ psf_sprintf (psf, " Bytes/sec : %d (should be %d (MS BUG!))\n", wav_fmt->min.bytespersec, bytespersec) ;
+ else
+ psf_sprintf (psf, " Bytes/sec : %d (should be %d)\n", wav_fmt->min.bytespersec, bytespersec) ;
+
+ psf->sf.pcmbitwidth = 16 ;
+ psf->bytewidth = 2 ;
+ psf_sprintf (psf, " Extra Bytes : %d\n", wav_fmt->msadpcm.extrabytes) ;
+ psf_sprintf (psf, " Samples/Block : %d\n", wav_fmt->msadpcm.samplesperblock) ;
+ if (wav_fmt->msadpcm.numcoeffs > sizeof (MS_ADPCM_WAV_FMT) / sizeof (int))
+ { psf_sprintf (psf, " No. of Coeffs : %d ****\n", wav_fmt->msadpcm.numcoeffs) ;
+ wav_fmt->msadpcm.numcoeffs = sizeof (MS_ADPCM_WAV_FMT) / sizeof (int) ;
+ }
+ else
+ psf_sprintf (psf, " No. of Coeffs : %d\n", wav_fmt->msadpcm.numcoeffs) ;
+ psf_sprintf (psf, " Coeff 1 : ") ;
+ for (k = 0 ; k < wav_fmt->msadpcm.numcoeffs ; k++)
+ psf_sprintf (psf, "%d ", wav_fmt->msadpcm.coeffs [k].coeff1) ;
+ psf_sprintf (psf, "\n Coeff 2 : ") ;
+ for (k = 0 ; k < wav_fmt->msadpcm.numcoeffs ; k++)
+ psf_sprintf (psf, "%d ", wav_fmt->msadpcm.coeffs [k].coeff2) ;
+ psf_sprintf (psf, "\n") ;
+ break ;
+
+ case WAVE_FORMAT_IMA_ADPCM :
+ if (wav_fmt->ima.bitwidth != 4)
+ return SFE_WAV_ADPCM_NOT4BIT ;
+ if (wav_fmt->ima.channels < 1 || wav_fmt->ima.channels > 2)
+ return SFE_WAV_ADPCM_CHANNELS ;
+
+ bytespersec = (wav_fmt->ima.samplerate * wav_fmt->ima.blockalign) / wav_fmt->ima.samplesperblock ;
+ if (wav_fmt->ima.bytespersec != bytespersec)
+ psf_sprintf (psf, " Bytes/sec : %d (should be %d)\n", wav_fmt->ima.bytespersec, bytespersec) ;
+ else
+ psf_sprintf (psf, " Bytes/sec : %d\n", wav_fmt->ima.bytespersec) ;
+
+ psf->sf.pcmbitwidth = 16 ;
+ psf->bytewidth = 2 ;
+ psf_sprintf (psf, " Extra Bytes : %d\n", wav_fmt->ima.extrabytes) ;
+ psf_sprintf (psf, " Samples/Block : %d\n", wav_fmt->ima.samplesperblock) ;
+ break ;
+
+ case WAVE_FORMAT_EXTENSIBLE :
+ if (wav_fmt->ext.bytespersec / wav_fmt->ext.blockalign != wav_fmt->ext.samplerate)
+ psf_sprintf (psf, " Bytes/sec : %d (should be %d)\n", wav_fmt->ext.bytespersec, wav_fmt->ext.samplerate * wav_fmt->ext.blockalign) ;
+ else
+ psf_sprintf (psf, " Bytes/sec : %d\n", wav_fmt->ext.bytespersec) ;
+
+ psf_sprintf (psf, " Valid Bits : %d\n", wav_fmt->ext.validbits) ;
+ psf_sprintf (psf, " Channel Mask : 0x%X\n", wav_fmt->ext.channelmask) ;
+ psf_sprintf (psf, " Subformat\n") ;
+ psf_sprintf (psf, " esf_field1 : 0x%X\n", wav_fmt->ext.esf.esf_field1) ;
+ psf_sprintf (psf, " esf_field2 : 0x%X\n", wav_fmt->ext.esf.esf_field2) ;
+ psf_sprintf (psf, " esf_field3 : 0x%X\n", wav_fmt->ext.esf.esf_field3) ;
+ psf_sprintf (psf, " esf_field4 : ") ;
+ for (k = 0 ; k < 8 ; k++)
+ psf_sprintf (psf, "0x%X ", wav_fmt->ext.esf.esf_field4 [k] & 0xFF) ;
+ psf_sprintf (psf, "\n") ;
+ psf->sf.pcmbitwidth = wav_fmt->ext.bitwidth ;
+ psf->bytewidth = BITWIDTH2BYTES (wav_fmt->ext.bitwidth) ;
+ break ;
+
+ case WAVE_FORMAT_GSM610 :
+ if (wav_fmt->gsm610.channels != 1 || wav_fmt->gsm610.blockalign != 65)
+ return SFE_WAV_GSM610_FORMAT ;
+
+ 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 != bytespersec)
+ psf_sprintf (psf, " Bytes/sec : %d (should be %d)\n", wav_fmt->gsm610.bytespersec, bytespersec) ;
+ else
+ psf_sprintf (psf, " Bytes/sec : %d\n", wav_fmt->gsm610.bytespersec) ;
+
+ psf->sf.pcmbitwidth = 16 ;
+ psf->bytewidth = 2 ;
+ psf_sprintf (psf, " Extra Bytes : %d\n", wav_fmt->gsm610.extrabytes) ;
+ psf_sprintf (psf, " Samples/Block : %d\n", wav_fmt->gsm610.samplesperblock) ;
+ break ;
+ default : break ;
+ } ;
+
+ psf->blockwidth = wav_fmt->min.channels * psf->bytewidth ;
+
+ return 0 ;
+} /* read_fmt_chunk */
+
+static
+int write_header (SF_PRIVATE *psf, WAV_FMT *wav_fmt, unsigned int size, int do_fact)
+{ FACT_CHUNK fact_chunk ;
+ unsigned int dword, RIFFsize ;
+
+ RIFFsize = psf->filelength - 2 * sizeof (dword) ;
+
+ dword = RIFF_MARKER ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+ dword = H2LE_INT (RIFFsize) ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+
+ dword = WAVE_MARKER ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+ dword = fmt_MARKER ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+
+ dword = H2LE_INT (size) ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+ if (CPU_IS_BIG_ENDIAN)
+ h2le_wav_fmt (wav_fmt) ;
+ fwrite (wav_fmt, size, 1, psf->file) ;
+
+ if (do_fact)
+ { dword = fact_MARKER ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+ dword = H2LE_INT (sizeof (FACT_CHUNK)) ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+ fact_chunk.samples = H2LE_INT (psf->sf.samples) ;
+ fwrite (&fact_chunk, sizeof (fact_chunk), 1, psf->file) ;
+ } ;
+
+ return 0 ;
+} /* write_header */
+
+static
+void le2h_wav_fmt (WAV_FMT *fmt)
+{ int k ;
+
+ fmt->min.format = ENDSWAP_SHORT (fmt->min.format) ;
+ fmt->min.channels = ENDSWAP_SHORT (fmt->min.channels) ;
+ fmt->min.samplerate = ENDSWAP_INT (fmt->min.samplerate) ;
+ fmt->min.bytespersec = ENDSWAP_INT (fmt->min.bytespersec) ;
+ fmt->min.blockalign = ENDSWAP_SHORT (fmt->min.blockalign) ;
+ fmt->min.bitwidth = ENDSWAP_SHORT (fmt->min.bitwidth) ;
+
+ switch (fmt->format)
+ { case WAVE_FORMAT_MS_ADPCM :
+ fmt->msadpcm.extrabytes = ENDSWAP_SHORT (fmt->msadpcm.extrabytes) ;
+ fmt->msadpcm.samplesperblock = ENDSWAP_SHORT (fmt->msadpcm.samplesperblock) ;
+ fmt->msadpcm.numcoeffs = ENDSWAP_SHORT (fmt->msadpcm.numcoeffs) ;
+ for (k = 0 ; k < fmt->msadpcm.numcoeffs ; k++)
+ { fmt->msadpcm.coeffs [k].coeff1 = ENDSWAP_SHORT (fmt->msadpcm.coeffs [k].coeff1) ;
+ fmt->msadpcm.coeffs [k].coeff2 = ENDSWAP_SHORT (fmt->msadpcm.coeffs [k].coeff2) ;
+ } ;
+ break ;
+
+ case WAVE_FORMAT_IMA_ADPCM :
+ fmt->ima.extrabytes = ENDSWAP_SHORT (fmt->ima.extrabytes) ;
+ fmt->ima.samplesperblock = ENDSWAP_SHORT (fmt->ima.samplesperblock) ;
+ break ;
+
+ case WAVE_FORMAT_ALAW :
+ case WAVE_FORMAT_MULAW :
+ fmt->size20.extrabytes = ENDSWAP_SHORT (fmt->size20.extrabytes) ;
+ fmt->size20.dummy = ENDSWAP_SHORT (fmt->size20.dummy) ;
+ break ;
+
+ case WAVE_FORMAT_GSM610 :
+ fmt->gsm610.extrabytes = ENDSWAP_SHORT (fmt->gsm610.extrabytes) ;
+ fmt->gsm610.samplesperblock = ENDSWAP_SHORT (fmt->gsm610.samplesperblock) ;
+ break ;
+
+ default : break ;
+ } ;
+
+} /* le2h_wav_fmt */
+
+static
+void h2le_wav_fmt (WAV_FMT *fmt)
+{ int k ;
+
+ switch (fmt->format)
+ { case WAVE_FORMAT_MS_ADPCM :
+ for (k = 0 ; k < fmt->msadpcm.numcoeffs ; k++)
+ { fmt->msadpcm.coeffs [k].coeff1 = ENDSWAP_SHORT (fmt->msadpcm.coeffs [k].coeff1) ;
+ fmt->msadpcm.coeffs [k].coeff2 = ENDSWAP_SHORT (fmt->msadpcm.coeffs [k].coeff2) ;
+ } ;
+ fmt->msadpcm.numcoeffs = ENDSWAP_SHORT (fmt->msadpcm.numcoeffs) ;
+ fmt->msadpcm.extrabytes = ENDSWAP_SHORT (fmt->msadpcm.extrabytes) ;
+ fmt->msadpcm.samplesperblock = ENDSWAP_SHORT (fmt->msadpcm.samplesperblock) ;
+ break ;
+
+ case WAVE_FORMAT_IMA_ADPCM :
+ fmt->ima.extrabytes = ENDSWAP_SHORT (fmt->ima.extrabytes) ;
+ fmt->ima.samplesperblock = ENDSWAP_SHORT (fmt->ima.samplesperblock) ;
+ break ;
+
+ case WAVE_FORMAT_ALAW :
+ case WAVE_FORMAT_MULAW :
+ fmt->size20.extrabytes = ENDSWAP_SHORT (fmt->size20.extrabytes) ;
+ fmt->size20.dummy = ENDSWAP_SHORT (fmt->size20.dummy) ;
+ break ;
+
+ case WAVE_FORMAT_GSM610 :
+ fmt->gsm610.extrabytes = ENDSWAP_SHORT (fmt->gsm610.extrabytes) ;
+ fmt->gsm610.samplesperblock = ENDSWAP_SHORT (fmt->gsm610.samplesperblock) ;
+ break ;
+
+ default : break ;
+ } ;
+
+ fmt->min.format = ENDSWAP_SHORT (fmt->min.format) ;
+ fmt->min.channels = ENDSWAP_SHORT (fmt->min.channels) ;
+ fmt->min.samplerate = ENDSWAP_INT (fmt->min.samplerate) ;
+ fmt->min.bytespersec = ENDSWAP_INT (fmt->min.bytespersec) ;
+ fmt->min.blockalign = ENDSWAP_SHORT (fmt->min.blockalign) ;
+ fmt->min.bitwidth = ENDSWAP_SHORT (fmt->min.bitwidth) ;
+
+} /* h2le_wav_fmt */
+
+static
+const char* 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 */
--- /dev/null
+++ b/common/libsndfile/src/wav.h
@@ -1,0 +1,178 @@
+#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 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 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 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.c
+*/
+
+int wav_close (SF_PRIVATE *psf) ;
+
+/*------------------------------------------------------------------------------------
+** Functions defined in wav_float.c
+*/
+
+int wav_read_x86f2s (SF_PRIVATE *psf, short *ptr, int len) ;
+int wav_read_x86f2i (SF_PRIVATE *psf, int *ptr, int len) ;
+int wav_read_x86f2d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+
+int wav_write_s2x86f (SF_PRIVATE *psf, short *ptr, int len) ;
+int wav_write_i2x86f (SF_PRIVATE *psf, int *ptr, int len) ;
+int wav_write_d2x86f (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+
+/*------------------------------------------------------------------------------------
+** Functions defined in wav_ima_adpcm.c
+*/
+
+off_t ima_seek (SF_PRIVATE *psf, off_t offset, int whence) ;
+int wav_ima_close (SF_PRIVATE *psf) ;
+
+int wav_ima_reader_init (SF_PRIVATE *psf, WAV_FMT *fmt) ;
+int ima_read_s (SF_PRIVATE *psf, short *ptr, int len) ;
+int ima_read_i (SF_PRIVATE *psf, int *ptr, int len) ;
+int ima_read_d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+
+int wav_ima_writer_init (SF_PRIVATE *psf, WAV_FMT *fmt) ;
+int ima_write_s (SF_PRIVATE *psf, short *ptr, int len) ;
+int ima_write_i (SF_PRIVATE *psf, int *ptr, int len) ;
+int ima_write_d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+
+/*------------------------------------------------------------------------------------
+** Functions defined in wav_ms_adpcm.c
+*/
+
+off_t msadpcm_seek (SF_PRIVATE *psf, off_t offset, int whence) ;
+int msadpcm_close (SF_PRIVATE *psf) ;
+
+int msadpcm_reader_init (SF_PRIVATE *psf, WAV_FMT *fmt) ;
+int msadpcm_read_s (SF_PRIVATE *psf, short *ptr, int len) ;
+int msadpcm_read_i (SF_PRIVATE *psf, int *ptr, int len) ;
+int msadpcm_read_d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+
+int msadpcm_writer_init (SF_PRIVATE *psf, WAV_FMT *fmt) ;
+int msadpcm_write_s (SF_PRIVATE *psf, short *ptr, int len) ;
+int msadpcm_write_i (SF_PRIVATE *psf, int *ptr, int len) ;
+int msadpcm_write_d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+
+
+/*------------------------------------------------------------------------------------
+** Functions defined in wav_gsm610.c
+*/
+
+/*
+** off_t wav_gsm610_seek (SF_PRIVATE *psf, off_t offset, int whence) ;
+*/
+int wav_gsm610_close (SF_PRIVATE *psf) ;
+
+int wav_gsm610_reader_init (SF_PRIVATE *psf, WAV_FMT *fmt) ;
+int wav_gsm610_read_s (SF_PRIVATE *psf, short *ptr, int len) ;
+int wav_gsm610_read_i (SF_PRIVATE *psf, int *ptr, int len) ;
+int wav_gsm610_read_d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+
+int wav_gsm610_writer_init (SF_PRIVATE *psf, WAV_FMT *fmt) ;
+int wav_gsm610_write_s (SF_PRIVATE *psf, short *ptr, int len) ;
+int wav_gsm610_write_i (SF_PRIVATE *psf, int *ptr, int len) ;
+int wav_gsm610_write_d (SF_PRIVATE *psf, double *ptr, int len, int normalize) ;
+
+
+#ifdef _WIN32
+ #pragma pack(pop,1)
+#endif
+
+#endif
--- /dev/null
+++ b/common/libsndfile/src/wav_float.c
@@ -1,0 +1,326 @@
+/*
+** Copyright (C) 1999-2000 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 "common.h"
+#include "wav.h"
+
+/*--------------------------------------------------------------------------------------------
+** Prototypes for private functions.
+*/
+
+static void x86f2s_array (float *buffer, unsigned int count, short *ptr, int index) ;
+static void x86f2i_array (float *buffer, unsigned int count, int *ptr, int index) ;
+static void x86f2d_array (float *buffer, unsigned int count, double *ptr, int index, double normfact) ;
+
+static void s2x86f_array (short *ptr, int index, float *buffer, unsigned int count) ;
+static void i2x86f_array (int *ptr, int index, float *buffer, unsigned int count) ;
+static void d2x86f_array (double *ptr, int index, float *buffer, unsigned int count, double normfact) ;
+
+/*--------------------------------------------------------------------------------------------
+** Exported functions.
+*/
+
+int wav_read_x86f2s (SF_PRIVATE *psf, short *ptr, int len)
+{ unsigned int bytecount, readcount, bufferlen, thisread ;
+ int 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) ;
+ x86f2s_array ((float*) (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 ;
+} /* wav_read_x86f2s */
+
+int wav_read_x86f2i (SF_PRIVATE *psf, int *ptr, int len)
+{ unsigned int bytecount, readcount, bufferlen, thisread ;
+ int 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) ;
+ x86f2i_array ((float*) (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 ;
+} /* wav_read_x86f2i */
+
+
+int wav_read_x86f2d (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ unsigned int bytecount, readcount, bufferlen, thisread ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = normalize ? 1.0 : 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) ;
+ x86f2d_array ((float*) (psf->buffer), thisread / psf->bytewidth, ptr, index, normfact) ;
+ 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 ;
+} /* wav_read_x86f2d */
+
+int wav_write_s2x86f (SF_PRIVATE *psf, short *ptr, int len)
+{ unsigned int bytecount, writecount, bufferlen, thiswrite ;
+ int index = 0, total = 0 ;
+
+ bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
+ bytecount = len * psf->bytewidth ;
+ while (bytecount > 0)
+ { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
+ s2x86f_array (ptr, index, (float*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ 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 ;
+} /* wav_write_s2x86f */
+
+int wav_write_i2x86f (SF_PRIVATE *psf, int *ptr, int len)
+{ unsigned int bytecount, writecount, bufferlen, thiswrite ;
+ int index = 0, total = 0 ;
+
+ bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
+ bytecount = len * psf->bytewidth ;
+ while (bytecount > 0)
+ { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
+ i2x86f_array (ptr, index, (float*) (psf->buffer), writecount / psf->bytewidth) ;
+ thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ 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 ;
+} /* wav_write_i2x86f */
+
+int wav_write_d2x86f (SF_PRIVATE *psf, double *ptr, int len, int normalize)
+{ unsigned int bytecount, writecount, bufferlen, thiswrite ;
+ int index = 0, total = 0 ;
+ double normfact ;
+
+ normfact = (normalize) ? 1.0 : 1.0 ;
+
+ bufferlen = (SF_BUFFER_LEN / psf->blockwidth) * psf->blockwidth ;
+ bytecount = len * psf->bytewidth ;
+ while (bytecount > 0)
+ { writecount = (bytecount >= bufferlen) ? bufferlen : bytecount ;
+ d2x86f_array (ptr, index, (float*) (psf->buffer), writecount / psf->bytewidth, normfact) ;
+ thiswrite = fwrite (psf->buffer, 1, writecount, psf->file) ;
+ 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 ;
+} /* wav_write_d2x86f */
+
+/*==============================================================================================
+** Private functions.
+*/
+
+static
+float read_x86float (unsigned char *cptr)
+{ int exponent, mantissa ;
+ float fvalue ;
+
+ exponent = ((cptr [3] & 0x7F) << 1) | ((cptr [2] & 0x80) ? 1 : 0);
+ mantissa = ((cptr [2] & 0x7F) << 16) | (cptr [1] << 8) | (cptr [0]) ;
+
+ if (! (exponent || mantissa))
+ return 0.0 ;
+
+ mantissa |= 0x800000 ;
+ exponent = exponent ? exponent - 127 : 0 ;
+
+ fvalue = mantissa ? ((float) mantissa) / ((float) 0x800000) : 0.0 ;
+
+ if (cptr [3] & 0x80)
+ fvalue *= -1 ;
+
+ if (exponent > 0)
+ fvalue *= (1 << exponent) ;
+ else if (exponent < 0)
+ fvalue /= (1 << abs (exponent)) ;
+
+ return fvalue ;
+} /* read_x86float */
+
+static
+void write_x86float (double in, unsigned char *out)
+{ int exponent, mantissa ;
+
+ *((int*) out) = 0 ;
+
+ if (in == 0.0)
+ return ;
+
+ if (in < 0.0)
+ { in *= -1.0 ;
+ out [3] |= 0x80 ;
+ } ;
+
+ in = frexp (in, &exponent) ;
+
+ exponent += 126 ;
+
+ if (exponent & 0x01)
+ out [2] |= 0x80 ;
+ out [3] |= (exponent >> 1) & 0x7F ;
+
+ in *= (float) 0x1000000 ;
+ mantissa = (((int) in) & 0x7FFFFF) ;
+
+ out [0] = mantissa & 0xFF ;
+ out [1] = (mantissa >> 8) & 0xFF ;
+ out [2] |= (mantissa >> 16) & 0x7F ;
+
+ return ;
+} /* write_x86float */
+
+/*----------------------------------------------------------------------------------------------
+*/
+
+static
+void x86f2s_array (float *buffer, unsigned int count, short *ptr, int index)
+{ int k ;
+
+ for (k = 0 ; k < count ; k++)
+ { ptr [index] = ((short) read_x86float ((unsigned char *) (buffer +k))) ;
+ index ++ ;
+ } ;
+} /* x86f2s_array */
+
+static
+void x86f2i_array (float *buffer, unsigned int count, int *ptr, int index)
+{ int k ;
+
+ for (k = 0 ; k < count ; k++)
+ { ptr [index] = ((int) read_x86float ((unsigned char *) (buffer +k))) ;
+ index ++ ;
+ } ;
+} /* x86f2i_array */
+
+static
+void x86f2d_array (float *buffer, unsigned int count, double *ptr, int index, double normfact)
+{ int k ;
+
+ for (k = 0 ; k < count ; k++)
+ { ptr [index] = ((double) read_x86float ((unsigned char *) (buffer +k))) * normfact ;
+ index ++ ;
+ } ;
+} /* x86f2d_array */
+
+static
+void s2x86f_array (short *ptr, int index, float *buffer, unsigned int count)
+{ int k ;
+ float value ;
+ for (k = 0 ; k < count ; k++)
+ { value = (float) (ptr [index]) ;
+ write_x86float (value, (unsigned char*) (buffer + k)) ;
+ index ++ ;
+ } ;
+} /* s2x86f_array */
+
+static
+void i2x86f_array (int *ptr, int index, float *buffer, unsigned int count)
+{ int k ;
+ float value ;
+ for (k = 0 ; k < count ; k++)
+ { value = (float) (ptr [index]) ;
+ write_x86float (value, (unsigned char*) (buffer + k)) ;
+ index ++ ;
+ } ;
+} /* i2x86f_array */
+
+static
+void d2x86f_array (double *ptr, int index, float *buffer, unsigned int count, double normfact)
+{ int k ;
+ float value ;
+ for (k = 0 ; k < count ; k++)
+ { value = (float) (ptr [index] * normfact) ;
+ write_x86float (value, (unsigned char*) (buffer + k)) ;
+ index ++ ;
+ } ;
+} /* d2x86f_array */
+
--- /dev/null
+++ b/common/libsndfile/src/wav_gsm610.c
@@ -1,0 +1,474 @@
+/*
+** Copyright (C) 1999-2000 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 "common.h"
+#include "wav.h"
+#include "GSM610/gsm.h"
+
+#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) ;
+
+
+
+/*============================================================================================
+** 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 ;
+
+ 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_sprintf (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, WAV_FMT *fmt)
+{ GSM610_PRIVATE *pgsm610 ;
+ int true = 1 ;
+
+ if (fmt->format != 0x0031)
+ psf_sprintf (psf, "*** Warning : format tag != WAVE_FORMAT_GSM610.\n") ;
+
+ 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 ;
+
+ fmt->gsm610.blockalign = GSM610_BLOCKSIZE ;
+ fmt->gsm610.bitwidth = 0 ;
+ fmt->gsm610.extrabytes = 2 ;
+ fmt->gsm610.samplesperblock = GSM610_SAMPLES ;
+ fmt->gsm610.bytespersec = fmt->gsm610.samplerate * GSM610_BLOCKSIZE / GSM610_SAMPLES ;
+
+ if (fmt->gsm610.bytespersec * GSM610_SAMPLES / GSM610_BLOCKSIZE < fmt->gsm610.samplerate)
+ fmt->gsm610.bytespersec ++ ;
+
+ 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_sprintf (psf, "*** Warning : short read (%d != %d).\n", k, GSM610_BLOCKSIZE) ;
+
+ if (gsm_decode (pgsm610->gsm_data, pgsm610->block, pgsm610->samples) < 0)
+ { psf_sprintf (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_sprintf (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 */
+
+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 */
+
+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 */
+
+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 */
+
+
+off_t wav_gsm610_seek (SF_PRIVATE *psf, off_t 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 ((off_t) -1) ;
+ } ;
+
+ switch (whence)
+ { case SEEK_SET :
+ if (offset < 0 || offset > pgsm610->blocks * GSM610_SAMPLES)
+ { psf->error = SFE_BAD_SEEK ;
+ return ((off_t) -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 ((off_t) -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 ((off_t) -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 ((off_t) -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 ((off_t) -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_sprintf (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 */
+
+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 */
+
+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 */
+
+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] = (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 */
+
+int wav_gsm610_close (SF_PRIVATE *psf)
+{ GSM610_PRIVATE *pgsm610 ;
+ unsigned int dword ;
+
+ if (! psf->fdata)
+ return wav_close (psf) ;
+
+ 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) ;
+
+ /* Fix RIFF size. */
+ dword = H2LE_INT (psf->filelength - 2 * sizeof (dword)) ;
+ fseek (psf->file, sizeof (dword), SEEK_SET) ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+
+ psf->datalength = psf->filelength - psf->dataoffset ;
+ fseek (psf->file, (int) (psf->dataoffset - sizeof (dword)), SEEK_SET) ;
+ dword = H2LE_INT (psf->datalength) ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+ } ;
+
+ if (pgsm610->gsm_data)
+ gsm_destroy (pgsm610->gsm_data) ;
+
+ if (psf->fdata)
+ free (psf->fdata) ;
+ psf->fdata = NULL ;
+
+ return 0 ;
+} /* wav_gsm610_close */
+
--- /dev/null
+++ b/common/libsndfile/src/wav_ima_adpcm.c
@@ -1,0 +1,679 @@
+/*
+** Copyright (C) 1999-2000 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 "common.h"
+#include "wav.h"
+
+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_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 unsigned int wav_srate2blocksize (unsigned int srate) ;
+
+
+
+/*============================================================================================
+** IMA ADPCM Reader initialisation function.
+*/
+
+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_sprintf (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_sprintf (psf, "*** Warning : samplesperblock should be %d.\n", count) ;
+
+ psf->sf.samples = pima->samplesperblock * pima->blocks ;
+
+ ima_read_block (psf, pima) ; /* Read first block. */
+
+ return 0 ;
+} /* ima_reader_init */
+
+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 */
+
+
+
+/*============================================================================================
+** IMA ADPCM Read Functions.
+*/
+
+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 */
+
+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_sprintf (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_sprintf (psf, "IMA ADPCM synchronisation error.\n") ;
+
+ pima->samples [chan] = current ;
+
+ /* psf_sprintf (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 */
+
+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 */
+
+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 */
+
+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 */
+
+
+off_t ima_seek (SF_PRIVATE *psf, off_t 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 ((off_t) -1) ;
+ } ;
+
+ switch (whence)
+ { case SEEK_SET :
+ if (offset < 0 || offset > pima->blocks * pima->samplesperblock)
+ { psf->error = SFE_BAD_SEEK ;
+ return ((off_t) -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 ((off_t) -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 ((off_t) -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 ((off_t) -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 ((off_t) -1) ;
+ } ;
+
+ psf->current = newblock * pima->samplesperblock + newsample ;
+ return psf->current ;
+} /* ima_seek */
+
+/*==========================================================================================
+** IMA ADPCM Write Functions.
+*/
+
+int wav_ima_writer_init (SF_PRIVATE *psf, WAV_FMT *fmt)
+{ IMA_ADPCM_PUBLIC public ;
+ int error ;
+
+ if (fmt->format != 0x0011)
+ psf_sprintf (psf, "*** Warning : format tag != WAVE_FORMAT_IMA_ADPCM.\n") ;
+
+ public.blocksize = wav_srate2blocksize (fmt->ima.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 ;
+
+ fmt->ima.blockalign = public.blocksize ;
+ fmt->ima.bitwidth = 4 ;
+ fmt->ima.extrabytes = 2 ;
+ fmt->ima.samplesperblock = public.samplesperblock ;
+ fmt->ima.bytespersec = (fmt->ima.samplerate * fmt->ima.blockalign) / fmt->ima.samplesperblock ;
+
+ return 0 ;
+} /* wav_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_sprintf (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 */
+
+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 */
+
+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 */
+
+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] = (short) (normfact * ptr [index+k]) ;
+ count = ima_write (psf, pima, sptr, writecount) ;
+ index += writecount ;
+ total += count ;
+ len -= writecount ;
+ } ;
+ return total ;
+} /* ima_write_d */
+
+int wav_ima_close (SF_PRIVATE *psf)
+{ IMA_ADPCM_PRIVATE *pima ;
+ unsigned int dword ;
+
+ if (! psf->fdata)
+ return wav_close (psf) ;
+
+ 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 correct values for the RIFF and data chunks.
+ */
+
+ fseek (psf->file, 0, SEEK_END) ;
+ psf->filelength = ftell (psf->file) ;
+
+ /* Fix RIFF size. */
+ dword = H2LE_INT (psf->filelength - 2 * sizeof (dword)) ;
+ fseek (psf->file, sizeof (dword), SEEK_SET) ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+
+ psf->datalength = psf->filelength - psf->dataoffset ;
+ fseek (psf->file, (int) (psf->dataoffset - sizeof (dword)), SEEK_SET) ;
+ dword = H2LE_INT (psf->datalength) ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+ } ;
+
+ 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 */
--- /dev/null
+++ b/common/libsndfile/src/wav_ms_adpcm.c
@@ -1,0 +1,755 @@
+/*
+** Copyright (C) 1999-2000 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 "common.h"
+#include "wav.h"
+
+
+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_read_block (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms) ;
+static int msadpcm_read (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms, short *ptr, int len) ;
+
+static int msadpcm_write_block (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms) ;
+static int msadpcm_write (SF_PRIVATE *psf, MSADPCM_PRIVATE *pms, short *ptr, int len) ;
+
+static unsigned int srate2blocksize (unsigned int srate) ;
+static void choose_predictor (unsigned int channels, short *data, int *bpred, int *idelta) ;
+
+/*============================================================================================
+** MS ADPCM Read Functions.
+*/
+
+int 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_sprintf (psf, "*** Warning : samplesperblock shoud be %d.\n", count) ;
+
+ psf->sf.samples = (psf->datalength / pms->blocksize) * pms->samplesperblock ;
+
+ psf_sprintf (psf, " bpred idelta\n") ;
+
+ msadpcm_read_block (psf, pms) ;
+
+ return 0 ;
+} /* msadpcm_reader_init */
+
+static
+int msadpcm_read_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_sprintf (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_sprintf (psf, "MS ADPCM synchronisation error (%d).\n", bpred [0]) ;
+
+ chan_idelta [0] = pms->block [1] | (pms->block [2] << 8) ;
+ chan_idelta [1] = 0 ;
+
+ psf_sprintf (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_sprintf (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_sprintf (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_read_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_read_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 */
+
+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 */
+
+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 */
+
+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 */
+
+
+off_t msadpcm_seek (SF_PRIVATE *psf, off_t 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 ((off_t) -1) ;
+ } ;
+
+ switch (whence)
+ { case SEEK_SET :
+ if (offset < 0 || offset > pms->blocks * pms->samplesperblock)
+ { psf->error = SFE_BAD_SEEK ;
+ return ((off_t) -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 ((off_t) -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 ((off_t) -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 ((off_t) -1) ;
+ } ;
+
+ if (psf->mode == SF_MODE_READ)
+ { fseek (psf->file, (int) (psf->dataoffset + newblock * pms->blocksize), SEEK_SET) ;
+ pms->blockcount = newblock ;
+ msadpcm_read_block (psf, pms) ;
+ pms->samplecount = newsample ;
+ }
+ else
+ { /* What to do about write??? */
+ psf->error = SFE_BAD_SEEK ;
+ return ((off_t) -1) ;
+ } ;
+
+ psf->current = newblock * pms->samplesperblock + newsample ;
+ return psf->current ;
+} /* msadpcm_seek */
+
+/*==========================================================================================
+** MS ADPCM Write Functions.
+*/
+
+int msadpcm_writer_init (SF_PRIVATE *psf, WAV_FMT *fmt)
+{ MSADPCM_PRIVATE *pms ;
+ unsigned int k, pmssize ;
+
+ if (fmt->format != 0x0002)
+ psf_sprintf (psf, "*** Warning : format tag != WAVE_FORMAT_MS_ADPCM.\n") ;
+
+ fmt->msadpcm.blockalign = srate2blocksize (fmt->msadpcm.samplerate) ;
+ fmt->msadpcm.bitwidth = 4 ;
+ fmt->msadpcm.extrabytes = 32 ;
+ fmt->msadpcm.samplesperblock = 2 + 2 * (fmt->msadpcm.blockalign - 7 * fmt->msadpcm.channels) / fmt->msadpcm.channels ;
+
+ fmt->msadpcm.bytespersec = (fmt->msadpcm.samplerate * fmt->msadpcm.blockalign) / fmt->msadpcm.samplesperblock ;
+
+ fmt->msadpcm.numcoeffs = 7 ;
+ for (k = 0 ; k < 7 ; k++)
+ { fmt->msadpcm.coeffs[k].coeff1 = AdaptCoeff1 [k] ;
+ fmt->msadpcm.coeffs[k].coeff2 = AdaptCoeff2 [k] ;
+ } ;
+
+ 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->channels = fmt->msadpcm.channels ;
+ pms->blocksize = fmt->msadpcm.blockalign ;
+ pms->samplesperblock = fmt->msadpcm.samplesperblock ;
+
+ pms->block = (unsigned char*) pms->dummydata ;
+ pms->samples = (short*) (pms->dummydata + fmt->msadpcm.blockalign) ;
+
+ pms->samplecount = 0 ;
+
+ return 0 ;
+} /* msadpcm_writer_init */
+
+/*==========================================================================================
+*/
+
+static
+int msadpcm_write_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 < pms->samplesperblock ; k+=2)
+ { chan = chan ? 0 : 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 (k % 2)
+ { pms->block [blockindex++] = byte ;
+ byte = 0 ;
+ } ;
+
+ idelta [chan] = (idelta [chan] * AdaptationTable [errordelta]) >> 8 ;
+ if (idelta [chan] < 16)
+ idelta [chan] = 16 ;
+ pms->samples [k-2] = newsamp ;
+ } ;
+ } ;
+
+ /* Write the block to disk. */
+
+ if ((k = fwrite (pms->block, 1, pms->blocksize, psf->file)) != pms->blocksize)
+ psf_sprintf (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_write_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_write_block (psf, pms) ;
+ } ;
+
+ return total ;
+} /* msadpcm_write */
+
+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 */
+
+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 */
+
+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] = (short) (normfact * ptr [index+k]) ;
+ count = msadpcm_write (psf, pms, sptr, writecount) ;
+ index += writecount ;
+ total += count ;
+ len -= writecount ;
+ } ;
+ return total ;
+} /* msadpcm_write_d */
+
+/*========================================================================================
+*/
+
+int msadpcm_close (SF_PRIVATE *psf)
+{ MSADPCM_PRIVATE *pms ;
+ unsigned int dword ;
+
+ if (! psf->fdata)
+ return wav_close (psf) ;
+
+ pms = (MSADPCM_PRIVATE*) psf->fdata ;
+
+ 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.
+ */
+
+ if (pms->samplecount && pms->samplecount < pms->samplesperblock)
+ msadpcm_write_block (psf, pms) ;
+
+ fseek (psf->file, 0, SEEK_END) ;
+ psf->filelength = ftell (psf->file) ;
+
+ /* Fix RIFF size. */
+ dword = H2LE_INT (psf->filelength - 2 * sizeof (dword)) ;
+ fseek (psf->file, sizeof (dword), SEEK_SET) ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+
+ psf->datalength = psf->filelength - psf->dataoffset ;
+ fseek (psf->file, (int) (psf->dataoffset - sizeof (dword)), SEEK_SET) ;
+ dword = H2LE_INT (psf->datalength) ;
+ fwrite (&dword, sizeof (dword), 1, psf->file) ;
+ } ;
+
+ if (psf->fdata)
+ free (psf->fdata) ;
+ psf->fdata = NULL ;
+
+ return 0 ;
+} /* msadpcm_close */
+
+/*========================================================================================
+** Static functions.
+*/
+
+static
+unsigned int srate2blocksize (unsigned int srate)
+{ if (srate < 12000)
+ return 256 ;
+ if (srate < 23000)
+ return 512 ;
+ return 1024 ;
+} /* 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/tests/Makefile.am
@@ -1,0 +1,103 @@
+noinst_PROGRAMS = sfversion read_seek_test double_test write_read_test \
+ lossy_comp_test error_test ulaw_test alaw_test sftest
+
+SNDFILEDIR =../src
+INCLUDES = -I$(srcdir)/$(SNDFILEDIR)
+
+sfversion_SOURCES = sfversion.c
+sfversion_LDADD = $(SNDFILEDIR)/libsndfile.la
+
+read_seek_test_SOURCES = read_seek_test.c
+read_seek_test_LDADD = $(SNDFILEDIR)/libsndfile.la
+
+write_read_test_SOURCES = write_read_test.c
+write_read_test_LDADD = $(SNDFILEDIR)/libsndfile.la
+
+lossy_comp_test_SOURCES = lossy_comp_test.c
+lossy_comp_test_LDADD = $(SNDFILEDIR)/libsndfile.la -lm
+
+error_test_SOURCES = error_test.c
+error_test_LDADD = $(SNDFILEDIR)/libsndfile.la
+
+ulaw_test_SOURCES = ulaw_test.c
+ulaw_test_LDADD = $(SNDFILEDIR)/libsndfile.la
+
+alaw_test_SOURCES = alaw_test.c
+alaw_test_LDADD = $(SNDFILEDIR)/libsndfile.la
+
+double_test_SOURCES = double_test.c
+double_test_LDADD = $(SNDFILEDIR)/libsndfile.la -lm
+
+sftest_SOURCES = sftest.c
+sftest_LDADD = $(SNDFILEDIR)/libsndfile.la
+
+check: generic-test ulaw_test alaw_test double_test first-test \
+ wav-tests aiff-tests au-tests raw-tests paf-tests svx-tests
+
+generic-test : error_test
+ ./error_test
+ ./ulaw_test
+ ./alaw_test
+ ./double_test
+ @echo "--------------------------------------------------------------------"
+ @echo " `./sfversion` passed common tests."
+ @echo "--------------------------------------------------------------------"
+
+first-test: read_seek_test
+ ./read_seek_test wav
+ ./read_seek_test aiff
+ ./read_seek_test au
+ @echo "--------------------------------------------------------------------"
+ @echo " `./sfversion` passed first set of tests."
+ @echo "--------------------------------------------------------------------"
+
+wav-tests: write_read_test
+ ./write_read_test wav
+ ./lossy_comp_test wav_ima
+ ./lossy_comp_test wav_msadpcm
+ ./lossy_comp_test wav_ulaw
+ ./lossy_comp_test wav_alaw
+ ./lossy_comp_test wav_gsm610
+ @echo "--------------------------------------------------------------------"
+ @echo " `./sfversion` passed tests on WAV files."
+ @echo "--------------------------------------------------------------------"
+
+aiff-tests: write_read_test
+ ./write_read_test aiff
+ @echo "--------------------------------------------------------------------"
+ @echo " `./sfversion` passed tests on AIFF files."
+ @echo "--------------------------------------------------------------------"
+
+au-tests: write_read_test
+ ./write_read_test au
+ ./write_read_test aule
+ ./lossy_comp_test au_ulaw
+ ./lossy_comp_test au_alaw
+ ./lossy_comp_test aule_ulaw
+ ./lossy_comp_test aule_alaw
+ ./lossy_comp_test au_g721
+ ./lossy_comp_test au_g723
+ ./lossy_comp_test aule_g721
+ ./lossy_comp_test aule_g723
+ @echo "--------------------------------------------------------------------"
+ @echo " `./sfversion` passed tests on AU files."
+ @echo "--------------------------------------------------------------------"
+
+raw-tests: write_read_test
+ ./write_read_test raw
+ @echo "--------------------------------------------------------------------"
+ @echo " `./sfversion` passed tests on RAW (header-less PCM) files."
+ @echo "--------------------------------------------------------------------"
+
+paf-tests: write_read_test
+ ./write_read_test paf
+ @echo "--------------------------------------------------------------------"
+ @echo " `./sfversion` passed tests on PAF files."
+ @echo "--------------------------------------------------------------------"
+
+svx-tests: write_read_test
+ ./write_read_test svx
+ @echo "--------------------------------------------------------------------"
+ @echo " `./sfversion` passed tests on SVX files."
+ @echo "--------------------------------------------------------------------"
+
--- /dev/null
+++ b/common/libsndfile/tests/Makefile.in
@@ -1,0 +1,460 @@
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_alias = @build_alias@
+build_triplet = @build@
+host_alias = @host_alias@
+host_triplet = @host@
+target_alias = @target_alias@
+target_triplet = @target@
+AS = @AS@
+CC = @CC@
+DLLTOOL = @DLLTOOL@
+LD = @LD@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+MAKEINFO = @MAKEINFO@
+NM = @NM@
+OBJDUMP = @OBJDUMP@
+PACKAGE = @PACKAGE@
+RANLIB = @RANLIB@
+SHARED_VERSION_INFO = @SHARED_VERSION_INFO@
+VERSION = @VERSION@
+subdirs = @subdirs@
+
+noinst_PROGRAMS = sfversion read_seek_test double_test write_read_test lossy_comp_test error_test ulaw_test alaw_test sftest
+
+
+SNDFILEDIR = ../src
+INCLUDES = -I$(srcdir)/$(SNDFILEDIR)
+
+sfversion_SOURCES = sfversion.c
+sfversion_LDADD = $(SNDFILEDIR)/libsndfile.la
+
+read_seek_test_SOURCES = read_seek_test.c
+read_seek_test_LDADD = $(SNDFILEDIR)/libsndfile.la
+
+write_read_test_SOURCES = write_read_test.c
+write_read_test_LDADD = $(SNDFILEDIR)/libsndfile.la
+
+lossy_comp_test_SOURCES = lossy_comp_test.c
+lossy_comp_test_LDADD = $(SNDFILEDIR)/libsndfile.la -lm
+
+error_test_SOURCES = error_test.c
+error_test_LDADD = $(SNDFILEDIR)/libsndfile.la
+
+ulaw_test_SOURCES = ulaw_test.c
+ulaw_test_LDADD = $(SNDFILEDIR)/libsndfile.la
+
+alaw_test_SOURCES = alaw_test.c
+alaw_test_LDADD = $(SNDFILEDIR)/libsndfile.la
+
+double_test_SOURCES = double_test.c
+double_test_LDADD = $(SNDFILEDIR)/libsndfile.la -lm
+
+sftest_SOURCES = sftest.c
+sftest_LDADD = $(SNDFILEDIR)/libsndfile.la
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../src/config.h
+CONFIG_CLEAN_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+
+
+DEFS = @DEFS@ -I. -I$(srcdir) -I../src
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+sfversion_OBJECTS = sfversion.o
+sfversion_DEPENDENCIES = $(SNDFILEDIR)/libsndfile.la
+sfversion_LDFLAGS =
+read_seek_test_OBJECTS = read_seek_test.o
+read_seek_test_DEPENDENCIES = $(SNDFILEDIR)/libsndfile.la
+read_seek_test_LDFLAGS =
+double_test_OBJECTS = double_test.o
+double_test_DEPENDENCIES = $(SNDFILEDIR)/libsndfile.la
+double_test_LDFLAGS =
+write_read_test_OBJECTS = write_read_test.o
+write_read_test_DEPENDENCIES = $(SNDFILEDIR)/libsndfile.la
+write_read_test_LDFLAGS =
+lossy_comp_test_OBJECTS = lossy_comp_test.o
+lossy_comp_test_DEPENDENCIES = $(SNDFILEDIR)/libsndfile.la
+lossy_comp_test_LDFLAGS =
+error_test_OBJECTS = error_test.o
+error_test_DEPENDENCIES = $(SNDFILEDIR)/libsndfile.la
+error_test_LDFLAGS =
+ulaw_test_OBJECTS = ulaw_test.o
+ulaw_test_DEPENDENCIES = $(SNDFILEDIR)/libsndfile.la
+ulaw_test_LDFLAGS =
+alaw_test_OBJECTS = alaw_test.o
+alaw_test_DEPENDENCIES = $(SNDFILEDIR)/libsndfile.la
+alaw_test_LDFLAGS =
+sftest_OBJECTS = sftest.o
+sftest_DEPENDENCIES = $(SNDFILEDIR)/libsndfile.la
+sftest_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)
+CCLD = $(CC)
+LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+SOURCES = $(sfversion_SOURCES) $(read_seek_test_SOURCES) $(double_test_SOURCES) $(write_read_test_SOURCES) $(lossy_comp_test_SOURCES) $(error_test_SOURCES) $(ulaw_test_SOURCES) $(alaw_test_SOURCES) $(sftest_SOURCES)
+OBJECTS = $(sfversion_OBJECTS) $(read_seek_test_OBJECTS) $(double_test_OBJECTS) $(write_read_test_OBJECTS) $(lossy_comp_test_OBJECTS) $(error_test_OBJECTS) $(ulaw_test_OBJECTS) $(alaw_test_OBJECTS) $(sftest_OBJECTS)
+
+all: all-redirect
+.SUFFIXES:
+.SUFFIXES: .S .c .lo .o .s
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps tests/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+mostlyclean-noinstPROGRAMS:
+
+clean-noinstPROGRAMS:
+ -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
+
+distclean-noinstPROGRAMS:
+
+maintainer-clean-noinstPROGRAMS:
+
+.c.o:
+ $(COMPILE) -c $<
+
+.s.o:
+ $(COMPILE) -c $<
+
+.S.o:
+ $(COMPILE) -c $<
+
+mostlyclean-compile:
+ -rm -f *.o core *.core
+
+clean-compile:
+
+distclean-compile:
+ -rm -f *.tab.c
+
+maintainer-clean-compile:
+
+.c.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+.s.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+.S.lo:
+ $(LIBTOOL) --mode=compile $(COMPILE) -c $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+
+maintainer-clean-libtool:
+
+sfversion: $(sfversion_OBJECTS) $(sfversion_DEPENDENCIES)
+ @rm -f sfversion
+ $(LINK) $(sfversion_LDFLAGS) $(sfversion_OBJECTS) $(sfversion_LDADD) $(LIBS)
+
+read_seek_test: $(read_seek_test_OBJECTS) $(read_seek_test_DEPENDENCIES)
+ @rm -f read_seek_test
+ $(LINK) $(read_seek_test_LDFLAGS) $(read_seek_test_OBJECTS) $(read_seek_test_LDADD) $(LIBS)
+
+double_test: $(double_test_OBJECTS) $(double_test_DEPENDENCIES)
+ @rm -f double_test
+ $(LINK) $(double_test_LDFLAGS) $(double_test_OBJECTS) $(double_test_LDADD) $(LIBS)
+
+write_read_test: $(write_read_test_OBJECTS) $(write_read_test_DEPENDENCIES)
+ @rm -f write_read_test
+ $(LINK) $(write_read_test_LDFLAGS) $(write_read_test_OBJECTS) $(write_read_test_LDADD) $(LIBS)
+
+lossy_comp_test: $(lossy_comp_test_OBJECTS) $(lossy_comp_test_DEPENDENCIES)
+ @rm -f lossy_comp_test
+ $(LINK) $(lossy_comp_test_LDFLAGS) $(lossy_comp_test_OBJECTS) $(lossy_comp_test_LDADD) $(LIBS)
+
+error_test: $(error_test_OBJECTS) $(error_test_DEPENDENCIES)
+ @rm -f error_test
+ $(LINK) $(error_test_LDFLAGS) $(error_test_OBJECTS) $(error_test_LDADD) $(LIBS)
+
+ulaw_test: $(ulaw_test_OBJECTS) $(ulaw_test_DEPENDENCIES)
+ @rm -f ulaw_test
+ $(LINK) $(ulaw_test_LDFLAGS) $(ulaw_test_OBJECTS) $(ulaw_test_LDADD) $(LIBS)
+
+alaw_test: $(alaw_test_OBJECTS) $(alaw_test_DEPENDENCIES)
+ @rm -f alaw_test
+ $(LINK) $(alaw_test_LDFLAGS) $(alaw_test_OBJECTS) $(alaw_test_LDADD) $(LIBS)
+
+sftest: $(sftest_OBJECTS) $(sftest_DEPENDENCIES)
+ @rm -f sftest
+ $(LINK) $(sftest_LDFLAGS) $(sftest_OBJECTS) $(sftest_LDADD) $(LIBS)
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = tests
+
+distdir: $(DISTFILES)
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+alaw_test.o: alaw_test.c ../src/sndfile.h
+double_test.o: double_test.c ../src/sndfile.h
+error_test.o: error_test.c ../src/sndfile.h
+lossy_comp_test.o: lossy_comp_test.c ../src/sndfile.h
+read_seek_test.o: read_seek_test.c ../src/sndfile.h
+sftest.o: sftest.c ../src/sndfile.h
+sfversion.o: sfversion.c ../src/sndfile.h
+ulaw_test.o: ulaw_test.c ../src/sndfile.h
+write_read_test.o: write_read_test.c ../src/sndfile.h
+
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am:
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am:
+uninstall: uninstall-am
+all-am: Makefile $(PROGRAMS)
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-noinstPROGRAMS mostlyclean-compile \
+ mostlyclean-libtool mostlyclean-tags \
+ mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-noinstPROGRAMS clean-compile clean-libtool clean-tags \
+ clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-noinstPROGRAMS distclean-compile \
+ distclean-libtool distclean-tags distclean-generic \
+ clean-am
+ -rm -f libtool
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-noinstPROGRAMS \
+ maintainer-clean-compile maintainer-clean-libtool \
+ 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."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: mostlyclean-noinstPROGRAMS distclean-noinstPROGRAMS \
+clean-noinstPROGRAMS maintainer-clean-noinstPROGRAMS \
+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
+
+
+check: generic-test ulaw_test alaw_test double_test first-test \
+ wav-tests aiff-tests au-tests raw-tests paf-tests svx-tests
+
+generic-test : error_test
+ ./error_test
+ ./ulaw_test
+ ./alaw_test
+ ./double_test
+ @echo "--------------------------------------------------------------------"
+ @echo " `./sfversion` passed common tests."
+ @echo "--------------------------------------------------------------------"
+
+first-test: read_seek_test
+ ./read_seek_test wav
+ ./read_seek_test aiff
+ ./read_seek_test au
+ @echo "--------------------------------------------------------------------"
+ @echo " `./sfversion` passed first set of tests."
+ @echo "--------------------------------------------------------------------"
+
+wav-tests: write_read_test
+ ./write_read_test wav
+ ./lossy_comp_test wav_ima
+ ./lossy_comp_test wav_msadpcm
+ ./lossy_comp_test wav_ulaw
+ ./lossy_comp_test wav_alaw
+ ./lossy_comp_test wav_gsm610
+ @echo "--------------------------------------------------------------------"
+ @echo " `./sfversion` passed tests on WAV files."
+ @echo "--------------------------------------------------------------------"
+
+aiff-tests: write_read_test
+ ./write_read_test aiff
+ @echo "--------------------------------------------------------------------"
+ @echo " `./sfversion` passed tests on AIFF files."
+ @echo "--------------------------------------------------------------------"
+
+au-tests: write_read_test
+ ./write_read_test au
+ ./write_read_test aule
+ ./lossy_comp_test au_ulaw
+ ./lossy_comp_test au_alaw
+ ./lossy_comp_test aule_ulaw
+ ./lossy_comp_test aule_alaw
+ ./lossy_comp_test au_g721
+ ./lossy_comp_test au_g723
+ ./lossy_comp_test aule_g721
+ ./lossy_comp_test aule_g723
+ @echo "--------------------------------------------------------------------"
+ @echo " `./sfversion` passed tests on AU files."
+ @echo "--------------------------------------------------------------------"
+
+raw-tests: write_read_test
+ ./write_read_test raw
+ @echo "--------------------------------------------------------------------"
+ @echo " `./sfversion` passed tests on RAW (header-less PCM) files."
+ @echo "--------------------------------------------------------------------"
+
+paf-tests: write_read_test
+ ./write_read_test paf
+ @echo "--------------------------------------------------------------------"
+ @echo " `./sfversion` passed tests on PAF files."
+ @echo "--------------------------------------------------------------------"
+
+svx-tests: write_read_test
+ ./write_read_test svx
+ @echo "--------------------------------------------------------------------"
+ @echo " `./sfversion` passed tests on SVX files."
+ @echo "--------------------------------------------------------------------"
+
+# 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.
+.NOEXPORT:
--- /dev/null
+++ b/common/libsndfile/tests/alaw_test.c
@@ -1,0 +1,243 @@
+/*
+** Copyright (C) 1999-2000 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 <sndfile.h>
+
+#define BUFFER_SIZE (65536)
+
+static unsigned char alaw_encode (int sample) ;
+static int alaw_decode (unsigned int alawbyte) ;
+
+static short short_buffer [BUFFER_SIZE] ;
+static unsigned char alaw_buffer [BUFFER_SIZE] ;
+
+int main (int argc, char *argv[])
+{ SNDFILE *file ;
+ SF_INFO sfinfo ;
+ char *filename ;
+ int k ;
+
+ filename = "test.au" ;
+
+ sfinfo.format = SF_FORMAT_AU | SF_FORMAT_ALAW ;
+ sfinfo.samplerate = 44100 ;
+ sfinfo.samples = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
+ sfinfo.channels = 1 ;
+ sfinfo.pcmbitwidth = 16 ;
+
+ if (! (file = sf_open_write (filename, &sfinfo)))
+ { printf ("sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ /* Generate a file containing all possible 16 bit sample values
+ ** and write it to disk as alaw encoded samples.
+ */
+
+ for (k = 0 ; k < 0x10000 ; k++)
+ short_buffer [k] = k & 0xFFFF ;
+
+ sf_write_short (file, short_buffer, BUFFER_SIZE) ;
+ sf_close (file) ;
+
+ /* Now open that file and compare the alaw encoded sample values
+ ** with what they should be.
+ */
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sf_read_raw (file, alaw_buffer, BUFFER_SIZE) != BUFFER_SIZE)
+ { printf ("sf_read_raw : ") ;
+ sf_perror (file) ;
+ exit (1) ;
+ } ;
+
+ for (k = 0 ; k < 0x10000 ; k++)
+ if (alaw_encode (short_buffer [k]) != alaw_buffer [k])
+ { printf ("Encoder error : sample #%d (0x%02X should be 0x%02X)\n", k, alaw_buffer [k], alaw_encode (short_buffer [k])) ;
+ exit (1) ;
+ } ;
+
+ sf_close (file) ;
+
+ printf (" alaw_test : encoder ... ok\n") ;
+
+ /* Now generate a file containing all possible 8 bit encoded
+ ** sample values and write it to disk as alaw encoded samples.
+ */
+
+ if (! (file = sf_open_write (filename, &sfinfo)))
+ { printf ("sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ for (k = 0 ; k < 256 ; k++)
+ alaw_buffer [k] = k & 0xFF ;
+
+ sf_write_raw (file, alaw_buffer, 256) ;
+ sf_close (file) ;
+
+ /* Now open that file and compare the alaw decoded sample values
+ ** with what they should be.
+ */
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sf_read_short (file, short_buffer, 256) != 256)
+ { printf ("sf_read_short : ") ;
+ sf_perror (file) ;
+ exit (1) ;
+ } ;
+
+
+ for (k = 0 ; k < 256 ; k++)
+ if (short_buffer [k] != alaw_decode (alaw_buffer [k]))
+ { printf ("Decoder error : sample #%d (0x%02X should be 0x%02X)\n", k, short_buffer [k], alaw_decode (alaw_buffer [k])) ;
+ exit (1) ;
+ } ;
+
+ sf_close (file) ;
+
+ printf (" alaw_test : decoder ... ok\n") ;
+
+ unlink (filename) ;
+
+ return 0 ;
+} /* main */
+
+
+/*=================================================================================
+** The following routines came from the sox-12.15 (Sound eXcahcnge) distribution.
+**
+** This code is not compiled into libsndfile. It is only used to test the
+** libsndfile lookup tables for correctness.
+**
+** I have included the original authors comments.
+*/
+
+/*
+** A-law routines by Graeme W. Gill.
+** Date: 93/5/7
+**
+** References:
+** 1) CCITT Recommendation G.711
+**
+*/
+
+#define ACLIP 31744
+
+static
+unsigned char alaw_encode (int sample)
+{ static int exp_lut[128] = {1,1,2,2,3,3,3,3,
+ 4,4,4,4,4,4,4,4,
+ 5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,
+ 6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,
+ 7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7};
+
+ int sign, exponent, mantissa;
+ unsigned char Alawbyte;
+
+ /* Get the sample into sign-magnitude. */
+ sign = ((~sample) >> 8) & 0x80 ; /* set aside the sign */
+ if (sign == 0)
+ sample = -sample ; /* get magnitude */
+ if (sample > ACLIP)
+ sample = ACLIP ; /* clip the magnitude */
+
+ /* Convert from 16 bit linear to ulaw. */
+ if (sample >= 256)
+ { exponent = exp_lut [(sample >> 8) & 0x7F] ;
+ mantissa = ( sample >> ( exponent + 3 ) ) & 0x0F ;
+ Alawbyte = ((exponent << 4) | mantissa) ;
+ }
+ else
+ Alawbyte = (sample >> 4) ;
+
+ Alawbyte ^= (sign ^ 0x55) ;
+
+ return Alawbyte ;
+} /* alaw_encode */
+
+static
+int alaw_decode (unsigned int Alawbyte)
+{ static int exp_lut[8] = { 0, 264, 528, 1056, 2112, 4224, 8448, 16896 } ;
+ int sign, exponent, mantissa, sample ;
+
+ Alawbyte ^= 0x55 ;
+ sign = ( Alawbyte & 0x80 ) ;
+ Alawbyte &= 0x7f ; /* get magnitude */
+ if (Alawbyte >= 16)
+ { exponent = (Alawbyte >> 4 ) & 0x07 ;
+ mantissa = Alawbyte & 0x0F ;
+ sample = exp_lut[exponent] + (mantissa << ( exponent + 3 )) ;
+ }
+ else
+ sample = (Alawbyte << 4) + 8 ;
+ if (sign == 0)
+ sample = -sample ;
+
+ return sample ;
+} /* alaw_decode */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null
+++ b/common/libsndfile/tests/double_test.c
@@ -1,0 +1,182 @@
+/*
+** Copyright (C) 1999-2000 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 <string.h>
+#include <unistd.h>
+#include <math.h>
+
+
+#include <sndfile.h>
+
+#define SAMPLE_RATE 11025
+#define BUFFER_SIZE (1<<14)
+
+static void scaled_test (char *str, char *filename, int filetype, int bitwidth, double tolerance) ;
+
+static int error_function (double data, double orig, double margin) ;
+static void gen_signal (double *data, unsigned int datalen) ;
+
+static double orig_data [BUFFER_SIZE] ;
+static double test_data [BUFFER_SIZE] ;
+
+int main (int argc, char *argv[])
+{
+ scaled_test ("pcm8" , "test.wav", SF_FORMAT_WAV | SF_FORMAT_PCM, 8, 0.001) ;
+ scaled_test ("pcm16", "test.wav", SF_FORMAT_WAV | SF_FORMAT_PCM, 16, 0.001) ;
+ scaled_test ("pcm24", "test.wav", SF_FORMAT_WAV | SF_FORMAT_PCM, 24, 0.001) ;
+ scaled_test ("pcm32", "test.wav", SF_FORMAT_WAV | SF_FORMAT_PCM, 32, 0.001) ;
+
+ scaled_test ("ulaw", "test.au", SF_FORMAT_AU | SF_FORMAT_ULAW, 16, 0.05) ;
+ scaled_test ("alaw", "test.au", SF_FORMAT_AU | SF_FORMAT_ALAW, 16, 0.05) ;
+
+ scaled_test ("imaadpcm", "test.wav", SF_FORMAT_WAV | SF_FORMAT_IMA_ADPCM, 16, 0.21) ;
+ scaled_test ("msadpcm" , "test.wav", SF_FORMAT_WAV | SF_FORMAT_MS_ADPCM, 16, 0.7) ;
+ scaled_test ("gsm610" , "test.wav", SF_FORMAT_WAV | SF_FORMAT_GSM610, 16, 3.0) ;
+
+ scaled_test ("g721_32", "test.au", SF_FORMAT_AU | SF_FORMAT_G721_32, 16, 1.1) ;
+ scaled_test ("g723_24", "test.au", SF_FORMAT_AU | SF_FORMAT_G723_24, 16, 1.1) ;
+
+ return 0;
+} /* main */
+
+/*============================================================================================
+ * Here are the test functions.
+ */
+
+static
+void scaled_test (char *str, char *filename, int filetype, int bitwidth, double tolerance)
+{ SNDFILE *file ;
+ SF_INFO sfinfo ;
+ unsigned int k ;
+ double scale ;
+
+ printf (" scaled_test : %s ", str) ;
+ for (k = strlen (str) ; k < 10 ; k++)
+ putchar ('.') ;
+ putchar (' ') ;
+
+ gen_signal (orig_data, BUFFER_SIZE) ;
+
+ sfinfo.samplerate = SAMPLE_RATE ;
+ sfinfo.samples = BUFFER_SIZE ;
+ sfinfo.channels = 1 ;
+ sfinfo.pcmbitwidth = bitwidth ;
+ sfinfo.format = filetype ;
+
+ if (! (file = sf_open_write (filename, &sfinfo)))
+ { printf ("sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sf_write_double (file, orig_data, BUFFER_SIZE, 1) != BUFFER_SIZE)
+ { printf ("sf_write_int failed with error : ") ;
+ sf_perror (file) ;
+ exit (1) ;
+ } ;
+
+ sf_close (file) ;
+
+ memset (test_data, 0, sizeof (test_data)) ;
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("sf_open_read failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.format != filetype)
+ { printf ("Returned format incorrect (0x%08X => 0x%08X).\n", filetype, sfinfo.format) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples < BUFFER_SIZE)
+ { printf ("Incorrect number of samples in file (too short). (%d should be %d)\n", sfinfo.samples, BUFFER_SIZE) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.channels != 1)
+ { printf ("Incorrect number of channels in file.\n") ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.pcmbitwidth != bitwidth)
+ { printf ("Incorrect bit width (%d => %d).\n", bitwidth, sfinfo.pcmbitwidth) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_read_double (file, test_data, BUFFER_SIZE, 1)) < 0.99 * BUFFER_SIZE)
+ { printf ("short read (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ sf_close (file) ;
+
+ scale = bitwidth > 8 ? 32000.0 : 120.0 ;
+ for (k = 0 ; k < BUFFER_SIZE ; k++)
+ if (error_function (scale * test_data [k], scale * orig_data [k], tolerance))
+ { printf ("Incorrect sample (#%d : %f should be %f).\n", k, test_data [k], orig_data [k]) ;
+ exit (1) ;
+ } ;
+
+ unlink (filename) ;
+
+ printf ("ok\n") ;
+} /* scaled_test */
+
+/*========================================================================================
+** Auxiliary functions
+*/
+
+static
+void gen_signal (double *data, unsigned int datalen)
+{ unsigned int k, ramplen ;
+ double amp = 0.0 ;
+
+ ramplen = datalen / 20 ;
+
+ for (k = 0 ; k < datalen ; k++)
+ { if (k <= ramplen)
+ amp = k / ((double) ramplen) ;
+ else if (k > datalen - ramplen)
+ amp = (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 */
+
+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 */
+
--- /dev/null
+++ b/common/libsndfile/tests/error_test.c
@@ -1,0 +1,53 @@
+/*
+** Copyright (C) 1999-2000 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 <string.h>
+#include <unistd.h>
+
+#include <sndfile.h>
+
+extern int sf_error_number (int errnum, char *str, size_t maxlen) ;
+
+#define BUFFER_SIZE (1<<15)
+#define SHORT_BUFFER (256)
+
+static char strbuffer [BUFFER_SIZE] ;
+static char noerror [SHORT_BUFFER] ;
+
+int main (int argc, char *argv[])
+{ int k ;
+
+ sf_error_number (0, noerror, SHORT_BUFFER) ;
+
+ printf ("Testing to see if all internal error numbers have corresponding error messages :\n") ;
+
+ for (k = 1 ; k < 1000 ; k++)
+ { sf_error_number (k, strbuffer, BUFFER_SIZE) ;
+ printf ("\t%3d : %s\n", k, strbuffer) ;
+ if (! strcmp (strbuffer, noerror))
+ break ;
+ if (strstr (strbuffer, "This is a bug in libsndfile."))
+ return 1 ;
+ } ;
+
+ return 0 ;
+} /* main */
+
--- /dev/null
+++ b/common/libsndfile/tests/lossy_comp_test.c
@@ -1,0 +1,1472 @@
+/*
+** Copyright (C) 1999-2000 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 <string.h>
+#include <unistd.h>
+#include <math.h>
+
+#include <sndfile.h>
+
+#ifndef M_PI
+ #define M_PI 3.14159
+#endif
+
+#define BUFFER_SIZE (1<<14)
+#define SAMPLE_RATE 11025
+
+static void lcomp_test_short (char *str, char *filename, int typemajor, int typeminor, double margin) ;
+static void lcomp_test_int (char *str, char *filename, int typemajor, int typeminor, double margin) ;
+static void lcomp_test_double (char *str, char *filename, int typemajor, int typeminor, double margin) ;
+
+static void sdlcomp_test_short (char *str, char *filename, int typemajor, int typeminor, double margin) ;
+static void sdlcomp_test_int (char *str, char *filename, int typemajor, int typeminor, double margin) ;
+static void sdlcomp_test_double (char *str, char *filename, int typemajor, int typeminor, double margin) ;
+
+static int error_function (double data, double orig, double margin) ;
+static int decay_response (int k) ;
+static void gen_signal (double *data, unsigned int datalen) ;
+static void smoothed_diff_short (short *data, unsigned int datalen) ;
+static void smoothed_diff_int (int *data, unsigned int datalen) ;
+static void smoothed_diff_double (double *data, unsigned int datalen) ;
+
+/* Force the start of these buffers to be double aligned. Sparc-solaris will
+** choke if they are not.
+*/
+static double data_buffer [BUFFER_SIZE + 1] ;
+static double orig_buffer [BUFFER_SIZE + 1] ;
+static double smooth_buffer [BUFFER_SIZE + 1] ;
+
+int main (int argc, char *argv[])
+{ char *filename ;
+ 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 (" wav_ima - test IMA ADPCM WAV file functions\n") ;
+ printf (" wav_msadpcm - test MS ADPCM WAV file functions\n") ;
+ printf (" wav_gsm610 - test GSM 6.10 WAV file functions\n") ;
+ printf (" wav_ulaw - test u-law WAV file functions\n") ;
+ printf (" wav_alaw - test A-law WAV file functions\n") ;
+ printf (" wav_pcm - test PCM WAV file functions\n") ;
+ printf (" all - perform all tests\n") ;
+ exit (1) ;
+ } ;
+
+ bDoAll = !strcmp (argv [1], "all") ;
+
+ if (bDoAll || ! strcmp (argv [1], "wav_pcm"))
+ { filename = "test.wav" ;
+ lcomp_test_short ("wav_pcm", filename, SF_FORMAT_WAV, SF_FORMAT_PCM, 0.00001) ;
+ lcomp_test_int ("wav_pcm", filename, SF_FORMAT_WAV, SF_FORMAT_PCM, 0.00001) ;
+ lcomp_test_double ("wav_pcm", filename, SF_FORMAT_WAV, SF_FORMAT_PCM, 0.005) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (bDoAll || ! strcmp (argv [1], "wav_ima"))
+ { filename = "test.wav" ;
+ lcomp_test_short ("wav_ima", filename, SF_FORMAT_WAV, SF_FORMAT_IMA_ADPCM, 0.17) ;
+ lcomp_test_int ("wav_ima", filename, SF_FORMAT_WAV, SF_FORMAT_IMA_ADPCM, 0.17) ;
+ lcomp_test_double ("wav_ima", filename, SF_FORMAT_WAV, SF_FORMAT_IMA_ADPCM, 0.17) ;
+
+ sdlcomp_test_short ("wav_ima", filename, SF_FORMAT_WAV, SF_FORMAT_IMA_ADPCM, 0.17) ;
+ sdlcomp_test_int ("wav_ima", filename, SF_FORMAT_WAV, SF_FORMAT_IMA_ADPCM, 0.17) ;
+ sdlcomp_test_double ("wav_ima", filename, SF_FORMAT_WAV, SF_FORMAT_IMA_ADPCM, 0.17) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (bDoAll || ! strcmp (argv [1], "wav_msadpcm"))
+ { filename = "test.wav" ;
+ lcomp_test_short ("wav_msadpcm", filename, SF_FORMAT_WAV, SF_FORMAT_MS_ADPCM, 0.36) ;
+ lcomp_test_int ("wav_msadpcm", filename, SF_FORMAT_WAV, SF_FORMAT_MS_ADPCM, 0.36) ;
+ lcomp_test_double ("wav_msadpcm", filename, SF_FORMAT_WAV, SF_FORMAT_MS_ADPCM, 0.36) ;
+
+ sdlcomp_test_short ("wav_msadpcm", filename, SF_FORMAT_WAV, SF_FORMAT_MS_ADPCM, 0.36) ;
+ sdlcomp_test_int ("wav_msadpcm", filename, SF_FORMAT_WAV, SF_FORMAT_MS_ADPCM, 0.36) ;
+ sdlcomp_test_double ("wav_msadpcm", filename, SF_FORMAT_WAV, SF_FORMAT_MS_ADPCM, 0.36) ;
+
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (bDoAll || ! strcmp (argv [1], "wav_ulaw"))
+ { filename = "test.wav" ;
+ lcomp_test_short ("wav_ulaw", filename, SF_FORMAT_WAV, SF_FORMAT_ULAW, 0.04) ;
+ lcomp_test_int ("wav_ulaw", filename, SF_FORMAT_WAV, SF_FORMAT_ULAW, 0.04) ;
+ lcomp_test_double ("wav_ulaw", filename, SF_FORMAT_WAV, SF_FORMAT_ULAW, 0.04) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (bDoAll || ! strcmp (argv [1], "wav_alaw"))
+ { filename = "test.wav" ;
+ lcomp_test_short ("wav_alaw", filename, SF_FORMAT_WAV, SF_FORMAT_ALAW, 0.04) ;
+ lcomp_test_int ("wav_alaw", filename, SF_FORMAT_WAV, SF_FORMAT_ALAW, 0.04) ;
+ lcomp_test_double ("wav_alaw", filename, SF_FORMAT_WAV, SF_FORMAT_ALAW, 0.04) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (bDoAll || ! strcmp (argv [1], "wav_gsm610"))
+ { filename = "test.wav" ;
+ sdlcomp_test_short ("wav_gsm610", filename, SF_FORMAT_WAV, SF_FORMAT_GSM610, 0.2) ;
+ sdlcomp_test_int ("wav_gsm610", filename, SF_FORMAT_WAV, SF_FORMAT_GSM610, 0.2) ;
+ sdlcomp_test_double ("wav_gsm610", filename, SF_FORMAT_WAV, SF_FORMAT_GSM610, 0.2) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (bDoAll || ! strcmp (argv [1], "au_ulaw"))
+ { filename = "test.au" ;
+ lcomp_test_short ("au_ulaw", filename, SF_FORMAT_AU, SF_FORMAT_ULAW, 0.04) ;
+ lcomp_test_int ("au_ulaw", filename, SF_FORMAT_AU, SF_FORMAT_ULAW, 0.04) ;
+ lcomp_test_double ("au_ulaw", filename, SF_FORMAT_AU, SF_FORMAT_ULAW, 0.04) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (bDoAll || ! strcmp (argv [1], "au_alaw"))
+ { filename = "test.au" ;
+ lcomp_test_short ("au_alaw", filename, SF_FORMAT_AU, SF_FORMAT_ALAW, 0.04) ;
+ lcomp_test_int ("au_alaw", filename, SF_FORMAT_AU, SF_FORMAT_ALAW, 0.04) ;
+ lcomp_test_double ("au_alaw", filename, SF_FORMAT_AU, SF_FORMAT_ALAW, 0.04) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (bDoAll || ! strcmp (argv [1], "aule_ulaw"))
+ { filename = "test.au" ;
+ lcomp_test_short ("aule_ulaw", filename, SF_FORMAT_AULE, SF_FORMAT_ULAW, 0.04) ;
+ lcomp_test_int ("aule_ulaw", filename, SF_FORMAT_AULE, SF_FORMAT_ULAW, 0.04) ;
+ lcomp_test_double ("aule_ulaw", filename, SF_FORMAT_AULE, SF_FORMAT_ULAW, 0.04) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (bDoAll || ! strcmp (argv [1], "aule_alaw"))
+ { filename = "test.au" ;
+ lcomp_test_short ("aule_alaw", filename, SF_FORMAT_AULE, SF_FORMAT_ALAW, 0.04) ;
+ lcomp_test_int ("aule_alaw", filename, SF_FORMAT_AULE, SF_FORMAT_ALAW, 0.04) ;
+ lcomp_test_double ("aule_alaw", filename, SF_FORMAT_AULE, SF_FORMAT_ALAW, 0.04) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (bDoAll || ! strcmp (argv [1], "au_g721"))
+ { filename = "test.au" ;
+ lcomp_test_short ("au_g721", filename, SF_FORMAT_AU, SF_FORMAT_G721_32, 0.05) ;
+ lcomp_test_int ("au_g721", filename, SF_FORMAT_AU, SF_FORMAT_G721_32, 0.05) ;
+ lcomp_test_double ("au_g721", filename, SF_FORMAT_AU, SF_FORMAT_G721_32, 0.05) ;
+
+ sdlcomp_test_short ("au_g721", filename, SF_FORMAT_AU, SF_FORMAT_G721_32, 0.05) ;
+ sdlcomp_test_int ("au_g721", filename, SF_FORMAT_AU, SF_FORMAT_G721_32, 0.05) ;
+ sdlcomp_test_double ("au_g721", filename, SF_FORMAT_AU, SF_FORMAT_G721_32, 0.05) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (bDoAll || ! strcmp (argv [1], "aule_g721"))
+ { filename = "test.au" ;
+ lcomp_test_short ("aule_g721", filename, SF_FORMAT_AULE, SF_FORMAT_G721_32, 0.05) ;
+ lcomp_test_int ("aule_g721", filename, SF_FORMAT_AULE, SF_FORMAT_G721_32, 0.05) ;
+ lcomp_test_double ("aule_g721", filename, SF_FORMAT_AULE, SF_FORMAT_G721_32, 0.05) ;
+
+ sdlcomp_test_short ("aule_g721", filename, SF_FORMAT_AULE, SF_FORMAT_G721_32, 0.05) ;
+ sdlcomp_test_int ("aule_g721", filename, SF_FORMAT_AULE, SF_FORMAT_G721_32, 0.05) ;
+ sdlcomp_test_double ("aule_g721", filename, SF_FORMAT_AULE, SF_FORMAT_G721_32, 0.05) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (bDoAll || ! strcmp (argv [1], "au_g723"))
+ { filename = "test.au" ;
+ lcomp_test_short ("au_g723", filename, SF_FORMAT_AU, SF_FORMAT_G723_24, 0.15) ;
+ lcomp_test_int ("au_g723", filename, SF_FORMAT_AU, SF_FORMAT_G723_24, 0.15) ;
+ lcomp_test_double ("au_g723", filename, SF_FORMAT_AU, SF_FORMAT_G723_24, 0.15) ;
+
+ sdlcomp_test_short ("au_g723", filename, SF_FORMAT_AU, SF_FORMAT_G723_24, 0.15) ;
+ sdlcomp_test_int ("au_g723", filename, SF_FORMAT_AU, SF_FORMAT_G723_24, 0.15) ;
+ sdlcomp_test_double ("au_g723", filename, SF_FORMAT_AU, SF_FORMAT_G723_24, 0.15) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (bDoAll || ! strcmp (argv [1], "aule_g723"))
+ { filename = "test.au" ;
+ lcomp_test_short ("aule_g723", filename, SF_FORMAT_AULE, SF_FORMAT_G723_24, 0.15) ;
+ lcomp_test_int ("aule_g723", filename, SF_FORMAT_AULE, SF_FORMAT_G723_24, 0.15) ;
+ lcomp_test_double ("aule_g723", filename, SF_FORMAT_AULE, SF_FORMAT_G723_24, 0.15) ;
+
+ sdlcomp_test_short ("aule_g723", filename, SF_FORMAT_AULE, SF_FORMAT_G723_24, 0.15) ;
+ sdlcomp_test_int ("aule_g723", filename, SF_FORMAT_AULE, SF_FORMAT_G723_24, 0.15) ;
+ sdlcomp_test_double ("aule_g723", filename, SF_FORMAT_AULE, SF_FORMAT_G723_24, 0.15) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (nTests == 0)
+ { printf ("************************************\n") ;
+ printf ("* No '%s' test defined.\n", argv [1]) ;
+ printf ("************************************\n") ;
+ return 1 ;
+ } ;
+
+ return 0;
+} /* main */
+
+/*============================================================================================
+** Here are the test functions.
+*/
+
+static
+void lcomp_test_short (char *str, char *filename, int typemajor, int typeminor, double margin)
+{ SNDFILE *file ;
+ SF_INFO sfinfo ;
+ int k, m, seekpos ;
+ unsigned int datalen ;
+ short *orig, *data ;
+
+ printf (" lcomp_test_short : %s ... ", str) ;
+
+ datalen = BUFFER_SIZE ;
+
+ orig = (short*) orig_buffer ;
+ data = (short*) data_buffer ;
+ gen_signal (orig_buffer, datalen) ;
+ for (k = 0 ; k < datalen ; k++)
+ orig [k] = (short) (orig_buffer [k]) ;
+
+ sfinfo.samplerate = SAMPLE_RATE ;
+ sfinfo.samples = 123456789 ; /* Ridiculous value. */
+ sfinfo.channels = 1 ;
+ sfinfo.pcmbitwidth = 16 ;
+ sfinfo.format = (typemajor | typeminor) ;
+
+ if (! (file = sf_open_write (filename, &sfinfo)))
+ { printf ("sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_write_short (file, orig, datalen)) != datalen)
+ { printf ("sf_write_short failed with short write (%d => %d).\n", datalen, k) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ memset (data, 0, datalen * sizeof (short)) ;
+ memset (&sfinfo, 0, sizeof (sfinfo)) ;
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("sf_open_read failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.format != (typemajor | typeminor))
+ { printf ("Returned format incorrect (0x%08X => 0x%08X).\n", (typemajor | typeminor), sfinfo.format) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples < datalen)
+ { printf ("Too few samples in file. (%d should be a little more than %d)\n", datalen, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples > (datalen + datalen/2))
+ { printf ("Too many samples in file. (%d should be a little more than %d)\n", sfinfo.samples, datalen) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.channels != 1)
+ { printf ("Incorrect number of channels in file.\n") ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.pcmbitwidth != 16)
+ { printf ("Incorrect bit width (%d).\n", sfinfo.pcmbitwidth) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_read_short (file, data, datalen)) < 0.99 * datalen)
+ { printf ("short read (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ for (k = 0 ; k < datalen ; k++)
+ { if (error_function ((double) data [k], (double) orig [k], margin))
+ { printf ("Incorrect sample A (#%d : %d should be %d).\n", k, data [k], orig [k]) ;
+ exit (1) ;
+ } ;
+ } ;
+
+ if ((k = sf_read_short (file, data, datalen)) != sfinfo.samples - datalen)
+ { printf ("Incorrect read length A (%d should be %d).\n", sfinfo.samples - datalen, k) ;
+ exit (1) ;
+ } ;
+
+ if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM)
+ for (k = 0 ; k < sfinfo.samples - datalen ; k++)
+ if (abs (data [k]) > decay_response (k))
+ { printf ("Incorrect sample B (#%d : abs (%d) should be < %d).\n", datalen + k, data [k], decay_response (k)) ;
+ exit (1) ;
+ } ;
+
+ if (! sfinfo.seekable)
+ { printf ("ok\n") ;
+ return ;
+ } ;
+
+ /* Now test sf_seek function. */
+
+ if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
+ { printf ("Seek to start of file failed (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ for (m = 0 ; m < 3 ; m++)
+ { if ((k = sf_read_short (file, data, datalen/7)) != datalen / 7)
+ { printf ("Incorrect read length B (%d => %d).\n", datalen / 7, k) ;
+ exit (1) ;
+ } ;
+
+ for (k = 0 ; k < datalen/7 ; k++)
+ if (error_function ((double) data [k], (double) orig [k + m * (datalen / 7)], margin))
+ { printf ("Incorrect sample C (#%d : %d => %d).\n", k + m * (datalen / 7), orig [k + m * (datalen / 7)], data [k]) ;
+ for (m = 0 ; m < 10 ; m++)
+ printf ("%d ", data [k]) ;
+ printf ("\n") ;
+ exit (1) ;
+ } ;
+ } ;
+
+ seekpos = BUFFER_SIZE / 10 ;
+
+ /* Check seek from start of file. */
+ if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
+ { printf ("Seek to start of file + %d failed (%d).\n", seekpos, k) ;
+ exit (1) ;
+ } ;
+ if ((k = sf_read_short (file, data, 1)) != 1)
+ { printf ("sf_read_short (file, data, 1) returned %d.\n", k) ;
+ exit (1) ;
+ } ;
+
+ if (error_function ((double) data [0], (double) orig [seekpos], margin))
+ { printf ("sf_seek (SEEK_SET) followed by sf_read_short failed (%d, %d).\n", orig [1], data [0]) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
+ { printf ("sf_seek (SEEK_CUR) with 0 offset failed (%d should be %d)\n", k, seekpos + 1) ;
+ exit (1) ;
+ } ;
+
+ seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
+ k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
+ sf_read_short (file, data, 1) ;
+ if (error_function ((double) data [0], (double) orig [seekpos], margin) || k != seekpos)
+ { printf ("sf_seek (forwards, SEEK_CUR) followed by sf_read_short failed (%d, %d) (%d, %d).\n", data [0], orig [seekpos], k, seekpos + 1) ;
+ exit (1) ;
+ } ;
+
+ seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
+ /* Check seek backward from current position. */
+ k = sf_seek (file, -20, SEEK_CUR) ;
+ sf_read_short (file, data, 1) ;
+ if (error_function ((double) data [0], (double) orig [seekpos], margin) || k != seekpos)
+ { printf ("sf_seek (backwards, SEEK_CUR) followed by sf_read_short failed (%d, %d) (%d, %d).\n", data [0], orig [seekpos], k, seekpos) ;
+ exit (1) ;
+ } ;
+
+ /* Check that read past end of file returns number of items. */
+ sf_seek (file, (int) datalen, SEEK_SET) ;
+
+ if ((k = sf_read_short (file, data, datalen)) != sfinfo.samples - datalen)
+ { printf ("Return value from sf_read_short past end of file incorrect (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ /* Check seek backward from end. */
+ if ((k = sf_seek (file, 5 - (int) sfinfo.samples, SEEK_END)) != 5)
+ { printf ("sf_seek (SEEK_END) returned %d instead of %d.\n", k, 5) ;
+ exit (1) ;
+ } ;
+
+ sf_read_short (file, data, 1) ;
+ if (error_function ((double) data [0], (double) orig [5], margin))
+ { printf ("sf_seek (SEEK_END) followed by sf_read_short failed (%d should be %d).\n", data [0], orig [5]) ;
+ exit (1) ;
+ } ;
+
+ sf_close (file) ;
+
+ printf ("ok\n") ;
+} /* lcomp_test_short */
+
+/*--------------------------------------------------------------------------------------------
+*/
+
+static
+void lcomp_test_int (char *str, char *filename, int typemajor, int typeminor, double margin)
+{ SNDFILE *file ;
+ SF_INFO sfinfo ;
+ int k, m, seekpos ;
+ unsigned int datalen ;
+ int *orig, *data ;
+
+ printf (" lcomp_test_int : %s ... ", str) ;
+
+ datalen = BUFFER_SIZE ;
+
+ data = (int*) data_buffer ;
+ orig = (int*) orig_buffer ;
+ gen_signal (orig_buffer, datalen) ;
+ for (k = 0 ; k < datalen ; k++)
+ orig [k] = (int) (orig_buffer [k]) ;
+
+ sfinfo.samplerate = SAMPLE_RATE ;
+ sfinfo.samples = 123456789 ; /* Ridiculous value. */
+ sfinfo.channels = 1 ;
+ sfinfo.pcmbitwidth = 16 ;
+ sfinfo.format = (typemajor | typeminor) ;
+
+ if (! (file = sf_open_write (filename, &sfinfo)))
+ { printf ("sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_write_int (file, orig, datalen)) != datalen)
+ { printf ("sf_write_int failed with short write (%d => %d).\n", datalen, k) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ memset (data, 0, datalen * sizeof (short)) ;
+ memset (&sfinfo, 0, sizeof (sfinfo)) ;
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("sf_open_read failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.format != (typemajor | typeminor))
+ { printf ("Returned format incorrect (0x%08X => 0x%08X).\n", (typemajor | typeminor), sfinfo.format) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples < datalen)
+ { printf ("Too few samples in file. (%d should be a little more than %d)\n", datalen, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples > (datalen + datalen/2))
+ { printf ("Too many samples in file. (%d should be a little more than %d)\n", datalen, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.channels != 1)
+ { printf ("Incorrect number of channels in file.\n") ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.pcmbitwidth != 16)
+ { printf ("Incorrect bit width (%d).\n", sfinfo.pcmbitwidth) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_read_int (file, data, datalen)) != datalen)
+ { printf ("short read (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ for (k = 0 ; k < datalen ; k++)
+ { if (error_function ((double) data [k], (double) orig [k], margin))
+ { printf ("Incorrect sample A (#%d : %d should be %d).\n", k, data [k], orig [k]) ;
+ exit (1) ;
+ } ;
+ } ;
+
+ if ((k = sf_read_int (file, data, datalen)) != sfinfo.samples - datalen)
+ { printf ("Incorrect read length A (%d should be %d).\n", sfinfo.samples - datalen, k) ;
+ exit (1) ;
+ } ;
+
+ if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM)
+ for (k = 0 ; k < sfinfo.samples - datalen ; k++)
+ if (abs (data [k]) > decay_response (k))
+ { printf ("Incorrect sample B (#%d : abs (%d) should be < %d).\n", datalen + k, data [k], decay_response (k)) ;
+ exit (1) ;
+ } ;
+
+ if (! sfinfo.seekable)
+ { printf ("ok\n") ;
+ return ;
+ } ;
+
+ /* Now test sf_seek function. */
+
+ if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
+ { printf ("Seek to start of file failed (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ for (m = 0 ; m < 3 ; m++)
+ { if ((k = sf_read_int (file, data, datalen/7)) != datalen / 7)
+ { printf ("Incorrect read length B (%d => %d).\n", datalen / 7, k) ;
+ exit (1) ;
+ } ;
+
+ for (k = 0 ; k < datalen/7 ; k++)
+ if (error_function ((double) data [k], (double) orig [k + m * (datalen / 7)], margin))
+ { printf ("Incorrect sample C (#%d : %d => %d).\n", k + m * (datalen / 7), orig [k + m * (datalen / 7)], data [k]) ;
+ for (m = 0 ; m < 10 ; m++)
+ printf ("%d ", data [k]) ;
+ printf ("\n") ;
+ exit (1) ;
+ } ;
+ } ;
+
+ seekpos = BUFFER_SIZE / 10 ;
+
+ /* Check seek from start of file. */
+ if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
+ { printf ("Seek to start of file + %d failed (%d).\n", seekpos, k) ;
+ exit (1) ;
+ } ;
+ if ((k = sf_read_int (file, data, 1)) != 1)
+ { printf ("sf_read_int (file, data, 1) returned %d.\n", k) ;
+ exit (1) ;
+ } ;
+
+ if (error_function ((double) data [0], (double) orig [seekpos], margin))
+ { printf ("sf_seek (SEEK_SET) followed by sf_read_int failed (%d, %d).\n", orig [1], data [0]) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
+ { printf ("sf_seek (SEEK_CUR) with 0 offset failed (%d should be %d)\n", k, seekpos + 1) ;
+ exit (1) ;
+ } ;
+
+ seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
+ k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
+ sf_read_int (file, data, 1) ;
+ if (error_function ((double) data [0], (double) orig [seekpos], margin) || k != seekpos)
+ { printf ("sf_seek (forwards, SEEK_CUR) followed by sf_read_int failed (%d, %d) (%d, %d).\n", data [0], orig [seekpos], k, seekpos + 1) ;
+ exit (1) ;
+ } ;
+
+ seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
+ /* Check seek backward from current position. */
+ k = sf_seek (file, -20, SEEK_CUR) ;
+ sf_read_int (file, data, 1) ;
+ if (error_function ((double) data [0], (double) orig [seekpos], margin) || k != seekpos)
+ { printf ("sf_seek (backwards, SEEK_CUR) followed by sf_read_int failed (%d, %d) (%d, %d).\n", data [0], orig [seekpos], k, seekpos) ;
+ exit (1) ;
+ } ;
+
+ /* Check that read past end of file returns number of items. */
+ sf_seek (file, (int) datalen, SEEK_SET) ;
+
+ if ((k = sf_read_int (file, data, datalen)) != sfinfo.samples - datalen)
+ { printf ("Return value from sf_read_int past end of file incorrect (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ /* Check seek backward from end. */
+ if ((k = sf_seek (file, 5 - (int) sfinfo.samples, SEEK_END)) != 5)
+ { printf ("sf_seek (SEEK_END) returned %d instead of %d.\n", k, 5) ;
+ exit (1) ;
+ } ;
+
+ sf_read_int (file, data, 1) ;
+ if (error_function ((double) data [0], (double) orig [5], margin))
+ { printf ("sf_seek (SEEK_END) followed by sf_read_short failed (%d should be %d).\n", data [0], orig [5]) ;
+ exit (1) ;
+ } ;
+
+ sf_close (file) ;
+
+ printf ("ok\n") ;
+} /* lcomp_test_int */
+
+/*--------------------------------------------------------------------------------------------
+*/
+
+static
+void lcomp_test_double (char *str, char *filename, int typemajor, int typeminor, double margin)
+{ SNDFILE *file ;
+ SF_INFO sfinfo ;
+ int k, m, seekpos ;
+ unsigned int datalen ;
+ double *orig, *data ;
+
+ printf (" lcomp_test_double : %s ... ", str) ;
+
+ datalen = BUFFER_SIZE ;
+
+ orig = (double*) orig_buffer ;
+ data = (double*) data_buffer ;
+ gen_signal (orig_buffer, datalen) ;
+
+ sfinfo.samplerate = SAMPLE_RATE ;
+ sfinfo.samples = 123456789 ; /* Ridiculous value. */
+ sfinfo.channels = 1 ;
+ sfinfo.pcmbitwidth = 16 ;
+ sfinfo.format = (typemajor | typeminor) ;
+
+ if (! (file = sf_open_write (filename, &sfinfo)))
+ { printf ("sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_write_double (file, orig, datalen, 0)) != datalen)
+ { printf ("sf_write_double failed with double write (%d => %d).\n", datalen, k) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ memset (data, 0, datalen * sizeof (double)) ;
+ memset (&sfinfo, 0, sizeof (sfinfo)) ;
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("sf_open_read failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.format != (typemajor | typeminor))
+ { printf ("Returned format incorrect (0x%08X => 0x%08X).\n", (typemajor | typeminor), sfinfo.format) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples < datalen)
+ { printf ("Too few samples in file. (%d should be a little more than %d)\n", datalen, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples > (datalen + datalen/2))
+ { printf ("Too many samples in file. (%d should be a little more than %d)\n", datalen, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.channels != 1)
+ { printf ("Incorrect number of channels in file.\n") ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.pcmbitwidth != 16)
+ { printf ("Incorrect bit width (%d).\n", sfinfo.pcmbitwidth) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_read_double (file, data, datalen, 0)) != datalen)
+ { printf ("double read (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ for (k = 0 ; k < datalen ; k++)
+ if (error_function (data [k], orig [k], margin))
+ { printf ("Incorrect sample A (#%d : %f should be %f).\n", k, data [k], orig [k]) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_read_double (file, data, datalen, 0)) != sfinfo.samples - datalen)
+ { printf ("Incorrect read length A (%d should be %d).\n", sfinfo.samples - datalen, k) ;
+ exit (1) ;
+ } ;
+
+ if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM)
+ for (k = 0 ; k < sfinfo.samples - datalen ; k++)
+ if (abs ((int) data [k]) > decay_response (k))
+ { printf ("Incorrect sample B (#%d : abs (%d) should be < %d).\n", datalen + k, (int) data [k], decay_response (k)) ;
+ exit (1) ;
+ } ;
+
+ if (! sfinfo.seekable)
+ { printf ("ok\n") ;
+ return ;
+ } ;
+
+ /* Now test sf_seek function. */
+
+ if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
+ { printf ("Seek to start of file failed (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ for (m = 0 ; m < 3 ; m++)
+ { if ((k = sf_read_double (file, data, datalen/7, 0)) != datalen / 7)
+ { printf ("Incorrect read length B (%d => %d).\n", datalen / 7, k) ;
+ exit (1) ;
+ } ;
+
+ for (k = 0 ; k < datalen/7 ; k++)
+ if (error_function (data [k], orig [k + m * (datalen / 7)], margin))
+ { printf ("Incorrect sample C (#%d : %d => %d).\n", k + m * (datalen / 7), (int) orig [k + m * (datalen / 7)], (int) data [k]) ;
+ for (m = 0 ; m < 10 ; m++)
+ printf ("%d ", (int) data [k]) ;
+ printf ("\n") ;
+ exit (1) ;
+ } ;
+ } ;
+
+ seekpos = BUFFER_SIZE / 10 ;
+
+ /* Check seek from start of file. */
+ if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
+ { printf ("Seek to start of file + %d failed (%d).\n", seekpos, k) ;
+ exit (1) ;
+ } ;
+ if ((k = sf_read_double (file, data, 1, 0)) != 1)
+ { printf ("sf_read_double (file, data, 1, 0) returned %d.\n", k) ;
+ exit (1) ;
+ } ;
+
+ if (error_function ((double) data [0], (double) orig [seekpos], margin))
+ { printf ("sf_seek (SEEK_SET) followed by sf_read_double failed (%d, %d).\n", (int) orig [1], (int) data [0]) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
+ { printf ("sf_seek (SEEK_CUR) with 0 offset failed (%d should be %d)\n", k, seekpos + 1) ;
+ exit (1) ;
+ } ;
+
+ seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
+ k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
+ sf_read_double (file, data, 1, 0) ;
+ if (error_function ((double) data [0], (double) orig [seekpos], margin) || k != seekpos)
+ { printf ("sf_seek (forwards, SEEK_CUR) followed by sf_read_double failed (%d, %d) (%d, %d).\n", (int) data [0], (int) orig [seekpos], k, seekpos + 1) ;
+ exit (1) ;
+ } ;
+
+ seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
+ /* Check seek backward from current position. */
+ k = sf_seek (file, -20, SEEK_CUR) ;
+ sf_read_double (file, data, 1, 0) ;
+ if (error_function ((double) data [0], (double) orig [seekpos], margin) || k != seekpos)
+ { printf ("sf_seek (backwards, SEEK_CUR) followed by sf_read_double failed (%d, %d) (%d, %d).\n", (int) data [0], (int) orig [seekpos], k, seekpos) ;
+ exit (1) ;
+ } ;
+
+ /* Check that read past end of file returns number of items. */
+ sf_seek (file, (int) datalen, SEEK_SET) ;
+
+ if ((k = sf_read_double (file, data, datalen, 0)) != sfinfo.samples - datalen)
+ { printf ("Return value from sf_read_double past end of file incorrect (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ /* Check seek backward from end. */
+ if ((k = sf_seek (file, 5 - (int) sfinfo.samples, SEEK_END)) != 5)
+ { printf ("sf_seek (SEEK_END) returned %d instead of %d.\n", k, 5) ;
+ exit (1) ;
+ } ;
+
+ sf_read_double (file, data, 1, 0) ;
+ if (error_function (data [0], orig [5], margin))
+ { printf ("sf_seek (SEEK_END) followed by sf_read_double failed (%d, %d).\n", (int) data [0], (int) orig [5]) ;
+ exit (1) ;
+ } ;
+
+ sf_close (file) ;
+
+ printf ("ok\n") ;
+} /* lcomp_test_double */
+
+/*========================================================================================
+** Smoothed differential loss compression tests.
+*/
+
+static
+void sdlcomp_test_short (char *str, char *filename, int typemajor, int typeminor, double margin)
+{ SNDFILE *file ;
+ SF_INFO sfinfo ;
+ int k, m, seekpos ;
+ unsigned int datalen ;
+ short *orig, *data, *smooth ;
+
+ printf (" sdlcomp_test_short : %s ... ", str) ;
+
+ datalen = BUFFER_SIZE ;
+
+ orig = (short*) orig_buffer ;
+ data = (short*) data_buffer ;
+ smooth = (short*) smooth_buffer ;
+
+ gen_signal (orig_buffer, datalen) ;
+ for (k = 0 ; k < datalen ; k++)
+ orig [k] = (short) (orig_buffer [k]) ;
+
+ sfinfo.samplerate = SAMPLE_RATE ;
+ sfinfo.samples = 123456789 ; /* Ridiculous value. */
+ sfinfo.channels = 1 ;
+ sfinfo.pcmbitwidth = 16 ;
+ sfinfo.format = (typemajor | typeminor) ;
+
+ if (! (file = sf_open_write (filename, &sfinfo)))
+ { printf ("sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_write_short (file, orig, datalen)) != datalen)
+ { printf ("sf_write_short failed with short write (%d => %d).\n", datalen, k) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ memset (data, 0, datalen * sizeof (short)) ;
+ memset (&sfinfo, 0, sizeof (sfinfo)) ;
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("sf_open_read failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.format != (typemajor | typeminor))
+ { printf ("Returned format incorrect (0x%08X => 0x%08X).\n", (typemajor | typeminor), sfinfo.format) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples < datalen)
+ { printf ("Too few samples in file. (%d should be a little more than %d)\n", datalen, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples > (datalen + 400))
+ { printf ("Too many samples in file. (%d should be a little more than %d)\n", sfinfo.samples, datalen) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.channels != 1)
+ { printf ("Incorrect number of channels in file.\n") ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.pcmbitwidth != 16)
+ { printf ("Incorrect bit width (%d).\n", sfinfo.pcmbitwidth) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_read_short (file, data, datalen)) != datalen)
+ { printf ("short read (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ memcpy (smooth, orig, datalen * sizeof (short)) ;
+ smoothed_diff_short (data, datalen) ;
+ smoothed_diff_short (smooth, datalen) ;
+
+ for (k = 1 ; k < datalen ; k++)
+ { if (error_function ((double) data [k], (double) smooth [k], margin))
+ { printf ("Incorrect sample A (#%d : %d should be %d).\n", k, data [k], smooth [k]) ;
+ exit (1) ;
+ } ;
+ } ;
+
+ if ((k = sf_read_short (file, data, datalen)) != sfinfo.samples - datalen)
+ { printf ("Incorrect read length A (%d should be %d).\n", k, sfinfo.samples - datalen) ;
+ exit (1) ;
+ } ;
+
+ if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM &&
+ (sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_GSM610)
+ for (k = 0 ; k < sfinfo.samples - datalen ; k++)
+ if (abs (data [k]) > decay_response (k))
+ { printf ("Incorrect sample B (#%d : abs (%d) should be < %d).\n", datalen + k, data [k], decay_response (k)) ;
+ exit (1) ;
+ } ;
+
+ /* Now test sf_seek function. */
+ if (sfinfo.seekable)
+ { if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
+ { printf ("Seek to start of file failed (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ for (m = 0 ; m < 3 ; m++)
+ { if ((k = sf_read_short (file, data, datalen/7)) != datalen / 7)
+ { printf ("Incorrect read length B (%d => %d).\n", datalen / 7, k) ;
+ exit (1) ;
+ } ;
+
+ smoothed_diff_short (data, datalen/7) ;
+ memcpy (smooth, orig + m * datalen/7, datalen/7 * sizeof (short)) ;
+ smoothed_diff_short (smooth, datalen/7) ;
+
+ for (k = 0 ; k < datalen/7 ; k++)
+ if (error_function ((double) data [k], (double) smooth [k], margin))
+ { printf ("Incorrect sample C (#%d (%d) : %d => %d).\n", k, k + m * (datalen / 7), smooth [k], data [k]) ;
+ for (m = 0 ; m < 10 ; m++)
+ printf ("%d ", data [k]) ;
+ printf ("\n") ;
+ exit (1) ;
+ } ;
+ } ; /* for (m = 0 ; m < 3 ; m++) */
+
+ seekpos = BUFFER_SIZE / 10 ;
+
+ /* Check seek from start of file. */
+ if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
+ { printf ("Seek to start of file + %d failed (%d).\n", seekpos, k) ;
+ exit (1) ;
+ } ;
+ if ((k = sf_read_short (file, data, 1)) != 1)
+ { printf ("sf_read_short (file, data, 1) returned %d.\n", k) ;
+ exit (1) ;
+ } ;
+
+ if (error_function ((double) data [0], (double) orig [seekpos], margin))
+ { printf ("sf_seek (SEEK_SET) followed by sf_read_short failed (%d, %d).\n", orig [1], data [0]) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
+ { printf ("sf_seek (SEEK_CUR) with 0 offset failed (%d should be %d)\n", k, seekpos + 1) ;
+ exit (1) ;
+ } ;
+
+ seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
+ k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
+ sf_read_short (file, data, 1) ;
+ if (error_function ((double) data [0], (double) orig [seekpos], margin) || k != seekpos)
+ { printf ("sf_seek (forwards, SEEK_CUR) followed by sf_read_short failed (%d, %d) (%d, %d).\n", data [0], orig [seekpos], k, seekpos + 1) ;
+ exit (1) ;
+ } ;
+
+ seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
+ /* Check seek backward from current position. */
+ k = sf_seek (file, -20, SEEK_CUR) ;
+ sf_read_short (file, data, 1) ;
+ if (error_function ((double) data [0], (double) orig [seekpos], margin) || k != seekpos)
+ { printf ("sf_seek (backwards, SEEK_CUR) followed by sf_read_short failed (%d, %d) (%d, %d).\n", data [0], orig [seekpos], k, seekpos) ;
+ exit (1) ;
+ } ;
+
+ /* Check that read past end of file returns number of items. */
+ sf_seek (file, (int) datalen, SEEK_SET) ;
+
+ if ((k = sf_read_short (file, data, datalen)) != sfinfo.samples - datalen)
+ { printf ("Return value from sf_read_short past end of file incorrect (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ /* Check seek backward from end. */
+
+ if ((k = sf_seek (file, 5 - (int) sfinfo.samples, SEEK_END)) != 5)
+ { printf ("sf_seek (SEEK_END) returned %d instead of %d.\n", k, 5) ;
+ exit (1) ;
+ } ;
+
+ sf_read_short (file, data, 1) ;
+ if (error_function ((double) data [0], (double) orig [5], margin))
+ { printf ("sf_seek (SEEK_END) followed by sf_read_short failed (%d should be %d).\n", data [0], orig [5]) ;
+ exit (1) ;
+ } ;
+ } /* if (sfinfo.seekable) */
+
+ sf_close (file) ;
+
+ printf ("ok\n") ;
+} /* sdlcomp_test_short */
+
+static
+void sdlcomp_test_int (char *str, char *filename, int typemajor, int typeminor, double margin)
+{ SNDFILE *file ;
+ SF_INFO sfinfo ;
+ int k, m, seekpos ;
+ unsigned int datalen ;
+ int *orig, *data, *smooth ;
+
+ printf (" sdlcomp_test_int : %s ... ", str) ;
+
+ datalen = BUFFER_SIZE ;
+
+ orig = (int*) orig_buffer ;
+ data = (int*) data_buffer ;
+ smooth = (int*) smooth_buffer ;
+
+ gen_signal (orig_buffer, datalen) ;
+ for (k = 0 ; k < datalen ; k++)
+ orig [k] = (int) (orig_buffer [k]) ;
+
+ sfinfo.samplerate = SAMPLE_RATE ;
+ sfinfo.samples = 123456789 ; /* Ridiculous value. */
+ sfinfo.channels = 1 ;
+ sfinfo.pcmbitwidth = 16 ;
+ sfinfo.format = (typemajor | typeminor) ;
+
+ if (! (file = sf_open_write (filename, &sfinfo)))
+ { printf ("sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_write_int (file, orig, datalen)) != datalen)
+ { printf ("sf_write_int failed with int write (%d => %d).\n", datalen, k) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ memset (data, 0, datalen * sizeof (int)) ;
+ memset (&sfinfo, 0, sizeof (sfinfo)) ;
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("sf_open_read failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.format != (typemajor | typeminor))
+ { printf ("Returned format incorrect (0x%08X => 0x%08X).\n", (typemajor | typeminor), sfinfo.format) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples < datalen)
+ { printf ("Too few samples in file. (%d should be a little more than %d)\n", datalen, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples > (datalen + 400))
+ { printf ("Too many samples in file. (%d should be a little more than %d)\n", sfinfo.samples, datalen) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.channels != 1)
+ { printf ("Incorrect number of channels in file.\n") ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.pcmbitwidth != 16)
+ { printf ("Incorrect bit width (%d).\n", sfinfo.pcmbitwidth) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_read_int (file, data, datalen)) != datalen)
+ { printf ("int read (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ memcpy (smooth, orig, datalen * sizeof (int)) ;
+ smoothed_diff_int (data, datalen) ;
+ smoothed_diff_int (smooth, datalen) ;
+
+ for (k = 1 ; k < datalen ; k++)
+ { if (error_function ((double) data [k], (double) smooth [k], margin))
+ { printf ("Incorrect sample A (#%d : %d should be %d).\n", k, data [k], smooth [k]) ;
+ exit (1) ;
+ } ;
+ } ;
+
+ if ((k = sf_read_int (file, data, datalen)) != sfinfo.samples - datalen)
+ { printf ("Incorrect read length A (%d should be %d).\n", k, sfinfo.samples - datalen) ;
+ exit (1) ;
+ } ;
+
+ if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM &&
+ (sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_GSM610)
+ for (k = 0 ; k < sfinfo.samples - datalen ; k++)
+ if (abs (data [k]) > decay_response (k))
+ { printf ("Incorrect sample B (#%d : abs (%d) should be < %d).\n", datalen + k, data [k], decay_response (k)) ;
+ exit (1) ;
+ } ;
+
+ /* Now test sf_seek function. */
+ if (sfinfo.seekable)
+ { if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
+ { printf ("Seek to start of file failed (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ for (m = 0 ; m < 3 ; m++)
+ { if ((k = sf_read_int (file, data, datalen/7)) != datalen / 7)
+ { printf ("Incorrect read length B (%d => %d).\n", datalen / 7, k) ;
+ exit (1) ;
+ } ;
+
+ smoothed_diff_int (data, datalen/7) ;
+ memcpy (smooth, orig + m * datalen/7, datalen/7 * sizeof (int)) ;
+ smoothed_diff_int (smooth, datalen/7) ;
+
+ for (k = 0 ; k < datalen/7 ; k++)
+ if (error_function ((double) data [k], (double) smooth [k], margin))
+ { printf ("Incorrect sample C (#%d (%d) : %d => %d).\n", k, k + m * (datalen / 7), smooth [k], data [k]) ;
+ for (m = 0 ; m < 10 ; m++)
+ printf ("%d ", data [k]) ;
+ printf ("\n") ;
+ exit (1) ;
+ } ;
+ } ; /* for (m = 0 ; m < 3 ; m++) */
+
+ seekpos = BUFFER_SIZE / 10 ;
+
+ /* Check seek from start of file. */
+ if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
+ { printf ("Seek to start of file + %d failed (%d).\n", seekpos, k) ;
+ exit (1) ;
+ } ;
+ if ((k = sf_read_int (file, data, 1)) != 1)
+ { printf ("sf_read_int (file, data, 1) returned %d.\n", k) ;
+ exit (1) ;
+ } ;
+
+ if (error_function ((double) data [0], (double) orig [seekpos], margin))
+ { printf ("sf_seek (SEEK_SET) followed by sf_read_int failed (%d, %d).\n", orig [1], data [0]) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
+ { printf ("sf_seek (SEEK_CUR) with 0 offset failed (%d should be %d)\n", k, seekpos + 1) ;
+ exit (1) ;
+ } ;
+
+ seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
+ k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
+ sf_read_int (file, data, 1) ;
+ if (error_function ((double) data [0], (double) orig [seekpos], margin) || k != seekpos)
+ { printf ("sf_seek (forwards, SEEK_CUR) followed by sf_read_int failed (%d, %d) (%d, %d).\n", data [0], orig [seekpos], k, seekpos + 1) ;
+ exit (1) ;
+ } ;
+
+ seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
+ /* Check seek backward from current position. */
+ k = sf_seek (file, -20, SEEK_CUR) ;
+ sf_read_int (file, data, 1) ;
+ if (error_function ((double) data [0], (double) orig [seekpos], margin) || k != seekpos)
+ { printf ("sf_seek (backwards, SEEK_CUR) followed by sf_read_int failed (%d, %d) (%d, %d).\n", data [0], orig [seekpos], k, seekpos) ;
+ exit (1) ;
+ } ;
+
+ /* Check that read past end of file returns number of items. */
+ sf_seek (file, (int) datalen, SEEK_SET) ;
+
+ if ((k = sf_read_int (file, data, datalen)) != sfinfo.samples - datalen)
+ { printf ("Return value from sf_read_int past end of file incorrect (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ /* Check seek backward from end. */
+
+ if ((k = sf_seek (file, 5 - (int) sfinfo.samples, SEEK_END)) != 5)
+ { printf ("sf_seek (SEEK_END) returned %d instead of %d.\n", k, 5) ;
+ exit (1) ;
+ } ;
+
+ sf_read_int (file, data, 1) ;
+ if (error_function ((double) data [0], (double) orig [5], margin))
+ { printf ("sf_seek (SEEK_END) followed by sf_read_int failed (%d should be %d).\n", data [0], orig [5]) ;
+ exit (1) ;
+ } ;
+ } /* if (sfinfo.seekable) */
+
+ sf_close (file) ;
+
+ printf ("ok\n") ;
+} /* sdlcomp_test_int */
+
+static
+void sdlcomp_test_double (char *str, char *filename, int typemajor, int typeminor, double margin)
+{ SNDFILE *file ;
+ SF_INFO sfinfo ;
+ int k, m, seekpos ;
+ unsigned int datalen ;
+ double *orig, *data, *smooth ;
+
+ printf (" sdlcomp_test_double : %s ... ", str) ;
+
+ datalen = BUFFER_SIZE ;
+
+ orig = orig_buffer ;
+ data = data_buffer ;
+ smooth = smooth_buffer ;
+
+ gen_signal (orig_buffer, datalen) ;
+
+ sfinfo.samplerate = SAMPLE_RATE ;
+ sfinfo.samples = 123456789 ; /* Ridiculous value. */
+ sfinfo.channels = 1 ;
+ sfinfo.pcmbitwidth = 16 ;
+ sfinfo.format = (typemajor | typeminor) ;
+
+ if (! (file = sf_open_write (filename, &sfinfo)))
+ { printf ("sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_write_double (file, orig, datalen, 0)) != datalen)
+ { printf ("sf_write_double failed with int write (%d => %d).\n", datalen, k) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ memset (data, 0, datalen * sizeof (double)) ;
+ memset (&sfinfo, 0, sizeof (sfinfo)) ;
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("sf_open_read failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.format != (typemajor | typeminor))
+ { printf ("Returned format incorrect (0x%08X => 0x%08X).\n", (typemajor | typeminor), sfinfo.format) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples < datalen)
+ { printf ("Too few samples in file. (%d should be a little more than %d)\n", datalen, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples > (datalen + 400))
+ { printf ("Too many samples in file. (%d should be a little more than %d)\n", sfinfo.samples, datalen) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.channels != 1)
+ { printf ("Incorrect number of channels in file.\n") ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.pcmbitwidth != 16)
+ { printf ("Incorrect bit width (%d).\n", sfinfo.pcmbitwidth) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_read_double (file, data, datalen, 0)) != datalen)
+ { printf ("int read (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ memcpy (smooth, orig, datalen * sizeof (double)) ;
+ smoothed_diff_double (data, datalen) ;
+ smoothed_diff_double (smooth, datalen) ;
+
+ for (k = 1 ; k < datalen ; k++)
+ { if (error_function (data [k], smooth [k], margin))
+ { printf ("Incorrect sample A (#%d : %d should be %d).\n", k, (int) data [k], (int) smooth [k]) ;
+ exit (1) ;
+ } ;
+ } ;
+
+ if ((k = sf_read_double (file, data, datalen, 0)) != sfinfo.samples - datalen)
+ { printf ("Incorrect read length A (%d should be %d).\n", k, sfinfo.samples - datalen) ;
+ exit (1) ;
+ } ;
+
+ if ((sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_MS_ADPCM &&
+ (sfinfo.format & SF_FORMAT_SUBMASK) != SF_FORMAT_GSM610)
+ for (k = 0 ; k < sfinfo.samples - datalen ; k++)
+ if (abs (data [k]) > decay_response (k))
+ { printf ("Incorrect sample B (#%d : abs (%d) should be < %d).\n", datalen + k, (int) data [k], (int) decay_response (k)) ;
+ exit (1) ;
+ } ;
+
+ /* Now test sf_seek function. */
+ if (sfinfo.seekable)
+ { if ((k = sf_seek (file, 0, SEEK_SET)) != 0)
+ { printf ("Seek to start of file failed (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ for (m = 0 ; m < 3 ; m++)
+ { if ((k = sf_read_double (file, data, datalen/7, 0)) != datalen / 7)
+ { printf ("Incorrect read length B (%d => %d).\n", datalen / 7, k) ;
+ exit (1) ;
+ } ;
+
+ smoothed_diff_double (data, datalen/7) ;
+ memcpy (smooth, orig + m * datalen/7, datalen/7 * sizeof (double)) ;
+ smoothed_diff_double (smooth, datalen/7) ;
+
+ for (k = 0 ; k < datalen/7 ; k++)
+ if (error_function ((double) data [k], (double) smooth [k], margin))
+ { printf ("Incorrect sample C (#%d (%d) : %d => %d).\n", k, k + m * (datalen / 7), (int) smooth [k], (int) data [k]) ;
+ for (m = 0 ; m < 10 ; m++)
+ printf ("%d ", (int) data [k]) ;
+ printf ("\n") ;
+ exit (1) ;
+ } ;
+ } ; /* for (m = 0 ; m < 3 ; m++) */
+
+ seekpos = BUFFER_SIZE / 10 ;
+
+ /* Check seek from start of file. */
+ if ((k = sf_seek (file, seekpos, SEEK_SET)) != seekpos)
+ { printf ("Seek to start of file + %d failed (%d).\n", seekpos, k) ;
+ exit (1) ;
+ } ;
+ if ((k = sf_read_double (file, data, 1, 0)) != 1)
+ { printf ("sf_read_double (file, data, 1) returned %d.\n", k) ;
+ exit (1) ;
+ } ;
+
+ if (error_function ((double) data [0], (double) orig [seekpos], margin))
+ { printf ("sf_seek (SEEK_SET) followed by sf_read_double failed (%d, %d).\n", (int) orig [1], (int) data [0]) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_seek (file, 0, SEEK_CUR)) != seekpos + 1)
+ { printf ("sf_seek (SEEK_CUR) with 0 offset failed (%d should be %d)\n", k, seekpos + 1) ;
+ exit (1) ;
+ } ;
+
+ seekpos = sf_seek (file, 0, SEEK_CUR) + BUFFER_SIZE / 5 ;
+ k = sf_seek (file, BUFFER_SIZE / 5, SEEK_CUR) ;
+ sf_read_double (file, data, 1, 0) ;
+ if (error_function ((double) data [0], (double) orig [seekpos], margin) || k != seekpos)
+ { printf ("sf_seek (forwards, SEEK_CUR) followed by sf_read_double failed (%d, %d) (%d, %d).\n", (int) data [0], (int) orig [seekpos], k, seekpos + 1) ;
+ exit (1) ;
+ } ;
+
+ seekpos = sf_seek (file, 0, SEEK_CUR) - 20 ;
+ /* Check seek backward from current position. */
+ k = sf_seek (file, -20, SEEK_CUR) ;
+ sf_read_double (file, data, 1, 0) ;
+ if (error_function ((double) data [0], (double) orig [seekpos], margin) || k != seekpos)
+ { printf ("sf_seek (backwards, SEEK_CUR) followed by sf_read_double failed (%d, %d) (%d, %d).\n", (int) data [0], (int) orig [seekpos], k, seekpos) ;
+ exit (1) ;
+ } ;
+
+ /* Check that read past end of file returns number of items. */
+ sf_seek (file, (int) datalen, SEEK_SET) ;
+
+ if ((k = sf_read_double (file, data, datalen, 0)) != sfinfo.samples - datalen)
+ { printf ("Return value from sf_read_double past end of file incorrect (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ /* Check seek backward from end. */
+
+ if ((k = sf_seek (file, 5 - (int) sfinfo.samples, SEEK_END)) != 5)
+ { printf ("sf_seek (SEEK_END) returned %d instead of %d.\n", k, 5) ;
+ exit (1) ;
+ } ;
+
+ sf_read_double (file, data, 1, 0) ;
+ if (error_function ((double) data [0], (double) orig [5], margin))
+ { printf ("sf_seek (SEEK_END) followed by sf_read_double failed (%d should be %d).\n", (int) data [0], (int) orig [5]) ;
+ exit (1) ;
+ } ;
+ } /* if (sfinfo.seekable) */
+
+ sf_close (file) ;
+
+ printf ("ok\n") ;
+} /* sdlcomp_test_double */
+
+/*========================================================================================
+** Auxiliary functions
+*/
+
+static
+int decay_response (int k)
+{ if (k < 1)
+ return ((int) 30000.0) ;
+ return (int) (30000.0 / (0.5 * k * k)) ;
+} /* decay_response */
+
+static
+void gen_signal (double *data, unsigned int datalen)
+{ unsigned int k, ramplen ;
+ double amp = 0.0 ;
+
+ ramplen = datalen / 20 ;
+
+ for (k = 0 ; k < datalen ; k++)
+ { if (k <= ramplen)
+ amp = 30000.0 * k / ((double) ramplen) ;
+ else if (k > datalen - ramplen)
+ amp = 30000.0 * (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 */
+
+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
+void smoothed_diff_short (short *data, unsigned int datalen)
+{ unsigned int k ;
+ double memory = 0.0 ;
+
+ /* Calculate the smoothed sample-to-sample difference. */
+ for (k = 0 ; k < datalen - 1 ; k++)
+ { memory = 0.7 * memory + (1 - 0.7) * (double) (data [k+1] - data [k]) ;
+ data [k] = (short) memory ;
+ } ;
+ data [datalen-1] = data [datalen-2] ;
+
+} /* smoothed_diff_short */
+
+static
+void smoothed_diff_int (int *data, unsigned int datalen)
+{ unsigned int k ;
+ double memory = 0.0 ;
+
+ /* Calculate the smoothed sample-to-sample difference. */
+ for (k = 0 ; k < datalen - 1 ; k++)
+ { memory = 0.7 * memory + (1 - 0.7) * (double) (data [k+1] - data [k]) ;
+ data [k] = (int) memory ;
+ } ;
+ data [datalen-1] = data [datalen-2] ;
+
+} /* smoothed_diff_int */
+
+static
+void smoothed_diff_double (double *data, unsigned int datalen)
+{ unsigned int k ;
+ double memory = 0.0 ;
+
+ /* Calculate the smoothed sample-to-sample difference. */
+ for (k = 0 ; k < datalen - 1 ; k++)
+ { memory = 0.7 * memory + (1 - 0.7) * (data [k+1] - data [k]) ;
+ data [k] = memory ;
+ } ;
+ data [datalen-1] = data [datalen-2] ;
+
+} /* smoothed_diff_double */
--- /dev/null
+++ b/common/libsndfile/tests/read_seek_test.c
@@ -1,0 +1,627 @@
+/*
+** Copyright (C) 1999-2000 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 <sys/stat.h>
+#include <fcntl.h>
+
+#include <sndfile.h>
+
+static unsigned char wav_ieee [] =
+{ 0x52, 0x49, 0x46, 0x46, 0x64, 0x00, 0x00, 0x00,
+ 0x57, 0x41, 0x56, 0x45, 0x66, 0x6D, 0x74, 0x20,
+ 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x00,
+ 0x34, 0x12, 0x00, 0x00, 0xD0, 0x48, 0x00, 0x00,
+ 0x04, 0x00, 0x20, 0x00, 0x64, 0x61, 0x74, 0x61,
+ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x40,
+ 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x80, 0x40,
+ 0x00, 0x00, 0xA0, 0x40, 0x00, 0x00, 0xC0, 0x40,
+ 0x00, 0x00, 0xE0, 0x40, 0x00, 0x00, 0x00, 0x41,
+ 0x00, 0x00, 0x10, 0x41, 0x00, 0x00, 0x20, 0x41,
+ 0x00, 0x00, 0x30, 0x41, 0x00, 0x00, 0x40, 0x41,
+ 0x00, 0x00, 0x50, 0x41, 0x00, 0x00, 0x60, 0x41,
+ 0x00, 0x00, 0x70, 0x41, 0x49, 0x4E, 0x46, 0x4F,
+ 0x04, 0x00, 0x00, 0x00, 0xFE, 0xED, 0xC0, 0xDE
+} ; /* wav_ieee */
+
+static unsigned char wav_pcm32 [] =
+{ 0x52, 0x49, 0x46, 0x46, 0x64, 0x00, 0x00, 0x00,
+ 0x57, 0x41, 0x56, 0x45, 0x66, 0x6D, 0x74, 0x20,
+ 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
+ 0x34, 0x12, 0x00, 0x00, 0xD0, 0x48, 0x00, 0x00,
+ 0x04, 0x00, 0x20, 0x00, 0x64, 0x61, 0x74, 0x61,
+ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
+ 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x09, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00,
+ 0x0B, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00,
+ 0x0D, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00,
+ 0x0F, 0x00, 0x00, 0x00, 0x49, 0x4E, 0x46, 0x4F,
+ 0x04, 0x00, 0x00, 0x00, 0xFE, 0xED, 0xC0, 0xDE
+} ; /* wav_pcm32 */
+
+static unsigned char wav_pcm24 [] =
+{ 0x52, 0x49, 0x46, 0x46, 0x54, 0x00, 0x00, 0x00,
+ 0x57, 0x41, 0x56, 0x45, 0x66, 0x6D, 0x74, 0x20,
+ 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
+ 0x34, 0x12, 0x00, 0x00, 0x9C, 0x36, 0x00, 0x00,
+ 0x03, 0x00, 0x18, 0x00, 0x64, 0x61, 0x74, 0x61,
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00,
+ 0x04, 0x00, 0x00, 0x05, 0x00, 0x00, 0x06, 0x00,
+ 0x00, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x09,
+ 0x00, 0x00, 0x0A, 0x00, 0x00, 0x0B, 0x00, 0x00,
+ 0x0C, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x0E, 0x00,
+ 0x00, 0x0F, 0x00, 0x00, 0x49, 0x4E, 0x46, 0x4F,
+ 0x04, 0x00, 0x00, 0x00, 0xFE, 0xED, 0xC0, 0xDE
+} ; /* wav_pcm24 */
+
+static unsigned char wav_pcm16 [] =
+{ 0x52, 0x49, 0x46, 0x46, 0x44, 0x00, 0x00, 0x00,
+ 0x57, 0x41, 0x56, 0x45, 0x66, 0x6D, 0x74, 0x20,
+ 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
+ 0x34, 0x12, 0x00, 0x00, 0x24, 0x68, 0x00, 0x00,
+ 0x02, 0x00, 0x10, 0x00, 0x64, 0x61, 0x74, 0x61,
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00,
+ 0x06, 0x00, 0x07, 0x00, 0x08, 0x00, 0x09, 0x00,
+ 0x0A, 0x00, 0x0B, 0x00, 0x0C, 0x00, 0x0D, 0x00,
+ 0x0E, 0x00, 0x0F, 0x00, 0x49, 0x4E, 0x46, 0x4F,
+ 0x04, 0x00, 0x00, 0x00, 0xFE, 0xED, 0xC0, 0xDE
+} ; /* wav_pcm16 */
+
+static unsigned char wav_pcm8 [] =
+{ 0x52, 0x49, 0x46, 0x46, 0x34, 0x00, 0x00, 0x00,
+ 0x57, 0x41, 0x56, 0x45, 0x66, 0x6D, 0x74, 0x20,
+ 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
+ 0x34, 0x12, 0x00, 0x00, 0x34, 0x12, 0x00, 0x00,
+ 0x01, 0x00, 0x08, 0x00, 0x64, 0x61, 0x74, 0x61,
+ 0x10, 0x00, 0x00, 0x00, 0x80, 0x81, 0x82, 0x83,
+ 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B,
+ 0x8C, 0x8D, 0x8E, 0x8F, 0x49, 0x4E, 0x46, 0x4F,
+ 0x04, 0x00, 0x00, 0x00, 0xFE, 0xED, 0xC0, 0xDE
+} ; /* wav_pcm8 */
+
+static unsigned char aiff_pcm32 [] =
+{ 0x46, 0x4F, 0x52, 0x4D, 0x00, 0x00, 0x00, 0x6E,
+ 0x41, 0x49, 0x46, 0x46, 0x43, 0x4F, 0x4D, 0x4D,
+ 0x00, 0x00, 0x00, 0x12, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x10, 0x00, 0x20, 0x40, 0x0B, 0x91, 0xA0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x53,
+ 0x4E, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
+ 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
+ 0x00, 0x08, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00,
+ 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00,
+ 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00,
+ 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0F
+} ; /* aiff_pcm32 */
+
+static unsigned char aiff_pcm24 [] =
+{ 0x46, 0x4F, 0x52, 0x4D, 0x00, 0x00, 0x00, 0x5E,
+ 0x41, 0x49, 0x46, 0x46, 0x43, 0x4F, 0x4D, 0x4D,
+ 0x00, 0x00, 0x00, 0x12, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x10, 0x00, 0x18, 0x40, 0x0B, 0x91, 0xA0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x53,
+ 0x4E, 0x44, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x05,
+ 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00,
+ 0x08, 0x00, 0x00, 0x09, 0x00, 0x00, 0x0A, 0x00,
+ 0x00, 0x0B, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x0D,
+ 0x00, 0x00, 0x0E, 0x00, 0x00, 0x0F
+} ; /* aiff_pcm24 */
+
+static unsigned char aiff_pcm16 [] =
+{ 0x46, 0x4F, 0x52, 0x4D, 0x00, 0x00, 0x00, 0x4E,
+ 0x41, 0x49, 0x46, 0x46, 0x43, 0x4F, 0x4D, 0x4D,
+ 0x00, 0x00, 0x00, 0x12, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x10, 0x00, 0x10, 0x40, 0x0B, 0x91, 0xA0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x53,
+ 0x4E, 0x44, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04,
+ 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08,
+ 0x00, 0x09, 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x0C,
+ 0x00, 0x0D, 0x00, 0x0E, 0x00, 0x0F
+} ; /* aiff_pcm16 */
+
+
+static unsigned char aiff_pcm8 [] =
+{ 0x46, 0x4F, 0x52, 0x4D, 0x00, 0x00, 0x00, 0x3E,
+ 0x41, 0x49, 0x46, 0x46, 0x43, 0x4F, 0x4D, 0x4D,
+ 0x00, 0x00, 0x00, 0x12, 0x00, 0x01, 0x00, 0x00,
+ 0x00, 0x10, 0x00, 0x08, 0x40, 0x0B, 0x91, 0xA0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x53,
+ 0x4E, 0x44, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
+ 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
+} ; /* aiff_pcm8 */
+
+
+static unsigned char au_pcm32 [] =
+{ 0x2E, 0x73, 0x6E, 0x64, 0x00, 0x00, 0x00, 0x18,
+ 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x05,
+ 0x00, 0x00, 0x12, 0x34, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05,
+ 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07,
+ 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09,
+ 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0B,
+ 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0D,
+ 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x0F
+} ; /* au_pcm32 */
+
+static unsigned char au_pcm24 [] =
+{ 0x2E, 0x73, 0x6E, 0x64, 0x00, 0x00, 0x00, 0x18,
+ 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x04,
+ 0x00, 0x00, 0x12, 0x34, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00,
+ 0x00, 0x05, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07,
+ 0x00, 0x00, 0x08, 0x00, 0x00, 0x09, 0x00, 0x00,
+ 0x0A, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x0C, 0x00,
+ 0x00, 0x0D, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x0F
+} ; /* au_pcm24 */
+
+static unsigned char au_pcm16 [] =
+{ 0x2E, 0x73, 0x6E, 0x64, 0x00, 0x00, 0x00, 0x18,
+ 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x03,
+ 0x00, 0x00, 0x12, 0x34, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03,
+ 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07,
+ 0x00, 0x08, 0x00, 0x09, 0x00, 0x0A, 0x00, 0x0B,
+ 0x00, 0x0C, 0x00, 0x0D, 0x00, 0x0E, 0x00, 0x0F
+} ; /* au_pcm16 */
+
+static unsigned char au_pcm8 [] =
+{ 0x2E, 0x73, 0x6E, 0x64, 0x00, 0x00, 0x00, 0x18,
+ 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x02,
+ 0x00, 0x00, 0x12, 0x34, 0x00, 0x00, 0x00, 0x01,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
+} ; /* au_pcm8 */
+
+static
+void write_file (char *filename, unsigned char *data, size_t len)
+{ FILE* fp = NULL ;
+
+ fp = fopen (filename,"wb") ;
+
+ if (fp == NULL)
+ { printf ("Could not open file '%s' for writing.\n", filename) ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (fwrite (data, 1, len, fp) != len)
+ { printf ("Write to file '%s' failed.\n", filename) ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ fclose (fp) ;
+} /* write_file */
+
+static
+void double_test (char *filename, int length)
+{ int k, count ;
+ SNDFILE *file ;
+ SF_INFO sfinfo ;
+ double *readdata ;
+
+ printf (" double_test (%s) ... ", filename) ;
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("Could not open file '%s' for read.\n", filename) ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples != length)
+ { printf ("Expecting %d samples in file, found %d.\n", length, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ readdata = (double*) malloc (sfinfo.samples * sizeof (double)) ;
+
+ if ((count = sf_read_double (file, readdata, sfinfo.samples, 0)) != sfinfo.samples)
+ { printf ("sf_read_double failed (%d items read).\n", count) ;
+ exit (1) ;
+ } ;
+
+ for (k = 0 ; k < sfinfo.samples ; k++)
+ if (readdata [k] != (double) (k))
+ { printf ("Incorrect sample (#%d => %g).\n", k, readdata [k]) ;
+ exit (1) ;
+ } ;
+
+ /* Check seek from start of file. */
+ k = sf_seek (file, 1, SEEK_SET) ;
+ sf_read_double (file, readdata, 1, 0) ;
+ if (readdata [0] != 1 || k != 1)
+ { printf ("sf_seek (SEEK_SET) followed by sf_read_XXXX failed (%d, %d).\n", ((int) readdata [0]), k) ;
+ exit (1) ;
+ } ;
+
+ /* Check seek forward from current position. */
+ k = sf_seek (file, 2, SEEK_CUR) ;
+ sf_read_double (file, readdata, 1, 0) ;
+ if (readdata [0] != 4 || k != 4)
+ { printf ("sf_seek (SEEK_CUR) followed by sf_read_XXXX failed (%d, %d).\n", ((int) readdata [0]), k) ;
+ exit (1) ;
+ } ;
+
+ /* Check seek backward from current position. */
+ k = sf_seek (file, -2, SEEK_CUR) ;
+ sf_read_double (file, readdata, 1, 0) ;
+ if (readdata [0] != 3 || k != 3)
+ { printf ("sf_seek (SEEK_CUR) followed by sf_read_XXXX failed (%d, %d).\n", ((int) readdata [0]), k) ;
+ exit (1) ;
+ } ;
+
+ /* Check that read past end of file returns number of items. */
+ if ((k = sf_read_double (file, readdata, sfinfo.samples, 0)) != 12)
+ { printf ("Return value from short sf_read_XXXX incorrect (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ /* Check seek backward from end. */
+ k = sf_seek (file, -14, SEEK_END) ;
+ sf_read_double (file, readdata, 1, 0) ;
+ if (readdata [0] != 2 || k != 2)
+ { printf ("sf_seek (SEEK_END) followed by sf_read_XXXX failed (%d, %d).\n", ((int) readdata [0]), k) ;
+ exit (1) ;
+ } ;
+
+ /* Check multiple reads. */
+ k = sf_seek (file, 0, SEEK_SET) ;
+ count = 0 ;
+ while ((k = sf_read_double (file, readdata, 3, 0)))
+ count += k ;
+ if (count != sfinfo.samples)
+ { printf ("failed multiple read test (%d, %d).\n", count, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ free (readdata) ;
+ sf_close (file) ;
+
+ printf ("ok\n") ;
+
+} /* double_test */
+
+
+static
+void int_test (char *filename, int length)
+{ int count, k ;
+ SNDFILE *file ;
+ SF_INFO sfinfo ;
+ int *readdata ;
+
+ printf (" int_test (%s) ... ", filename) ;
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("Could not open file '%s' for read.\n", filename) ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples != length)
+ { printf ("Expecting %d samples in file, found %d.\n", length, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ readdata = (int*) malloc (sfinfo.samples * sizeof (int)) ;
+
+ if ((count = sf_read_int (file, readdata, sfinfo.samples)) != sfinfo.samples)
+ { printf ("sf_read_int failed (%d items read).\n", count) ;
+ exit (1) ;
+ } ;
+
+ for (k = 0 ; k < sfinfo.samples ; k++)
+ if (readdata [k] != (int) (k))
+ { printf ("Incorrect sample (#%d => %d).\n", k, readdata [k]) ;
+ exit (1) ;
+ } ;
+
+ /* Check seek from start of file. */
+ k = sf_seek (file, 1, SEEK_SET) ;
+ sf_read_int (file, readdata, 1) ;
+ if (readdata [0] != 1 || k != 1)
+ { printf ("sf_seek (SEEK_SET) followed by sf_read_XXXX failed (%d, %d).\n", readdata [0], k) ;
+ exit (1) ;
+ } ;
+
+ /* Check seek forward from current position. */
+ k = sf_seek (file, 2, SEEK_CUR) ;
+ sf_read_int (file, readdata, 1) ;
+ if (readdata [0] != 4 || k != 4)
+ { printf ("sf_seek (SEEK_CUR) followed by sf_read_XXXX failed (%d, %d).\n", readdata [0], k) ;
+ exit (1) ;
+ } ;
+
+ /* Check seek backward from current position. */
+ k = sf_seek (file, -2, SEEK_CUR) ;
+ sf_read_int (file, readdata, 1) ;
+ if (readdata [0] != 3 || k != 3)
+ { printf ("sf_seek (SEEK_CUR) followed by sf_read_XXXX failed (%d, %d).\n", readdata [0], k) ;
+ exit (1) ;
+ } ;
+
+ /* Check that read past end of file returns number of items. */
+ if ((k = sf_read_int (file, readdata, sfinfo.samples)) != 12)
+ { printf ("Return value from short sf_read_XXXX incorrect (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ /* Check seek backward from end. */
+ k = sf_seek (file, -14, SEEK_END) ;
+ sf_read_int (file, readdata, 1) ;
+ if (readdata [0] != 2 || k != 2)
+ { printf ("sf_seek (SEEK_END) followed by sf_read_XXXX failed (%d, %d).\n", readdata [0], k) ;
+ exit (1) ;
+ } ;
+
+ /* Check multiple reads. */
+ k = sf_seek (file, 0, SEEK_SET) ;
+ count = 0 ;
+ while ((k = sf_read_int (file, readdata, 3)))
+ count += k ;
+ if (count != sfinfo.samples)
+ { printf ("failed multiple read test (%d, %d).\n", count, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ free (readdata) ;
+ sf_close (file) ;
+
+ printf ("ok\n") ;
+
+} /* int_test */
+
+static
+void short_test (char *filename, int length)
+{ int count, k ;
+ SNDFILE *file ;
+ SF_INFO sfinfo ;
+ short *readdata ;
+
+ printf (" short_test (%s) ... ", filename) ;
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("Could not open file '%s' for read.\n", filename) ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples != length)
+ { printf ("Expecting %d samples in file, found %d.\n", length, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ readdata = (short*) malloc (sfinfo.samples * sizeof (short)) ;
+
+ if ((count = sf_read_short (file, readdata, sfinfo.samples)) != sfinfo.samples)
+ { printf ("sf_read_short failed (%d items read).\n", count) ;
+ exit (1) ;
+ } ;
+
+ for (k = 0 ; k < sfinfo.samples ; k++)
+ if (readdata [k] != (short) (k))
+ { printf ("Incorrect sample (#%d => %d).\n", k, readdata [k]) ;
+ exit (1) ;
+ } ;
+
+ /* Check seek from start of file. */
+ k = sf_seek (file, 1, SEEK_SET) ;
+ sf_read_short (file, readdata, 1) ;
+ if (readdata [0] != 1 || k != 1)
+ { printf ("sf_seek (SEEK_SET) followed by sf_read_XXXX failed (%d, %d).\n", readdata [0], k) ;
+ exit (1) ;
+ } ;
+
+ /* Check seek forward from current position. */
+ k = sf_seek (file, 2, SEEK_CUR) ;
+ sf_read_short (file, readdata, 1) ;
+ if (readdata [0] != 4 || k != 4)
+ { printf ("sf_seek (SEEK_CUR) followed by sf_read_XXXX failed (%d, %d).\n", readdata [0], k) ;
+ exit (1) ;
+ } ;
+
+ /* Check seek backward from current position. */
+ k = sf_seek (file, -2, SEEK_CUR) ;
+ sf_read_short (file, readdata, 1) ;
+ if (readdata [0] != 3 || k != 3)
+ { printf ("sf_seek (SEEK_CUR) followed by sf_read_XXXX failed (%d, %d).\n", readdata [0], k) ;
+ exit (1) ;
+ } ;
+
+ /* Check that read past end of file returns number of items. */
+ if ((k = sf_read_short (file, readdata, sfinfo.samples)) != 12)
+ { printf ("Return value from short sf_read_XXXX incorrect (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ /* Check seek backward from end. */
+ k = sf_seek (file, -14, SEEK_END) ;
+ sf_read_short (file, readdata, 1) ;
+ if (readdata [0] != 2 || k != 2)
+ { printf ("sf_seek (SEEK_END) followed by sf_read_XXXX failed (%d, %d).\n", readdata [0], k) ;
+ exit (1) ;
+ } ;
+
+ /* Check multiple reads. */
+ k = sf_seek (file, 0, SEEK_SET) ;
+ count = 0 ;
+ while ((k = sf_read_short (file, readdata, 3)))
+ count += k ;
+ if (count != sfinfo.samples)
+ { printf ("failed multiple read test (%d, %d).\n", count, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ free (readdata) ;
+ sf_close (file) ;
+
+ printf ("ok\n") ;
+
+} /* short_test */
+
+int main (int argc, char *argv [])
+{ char *filename ;
+ 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 (" wav - test WAV file functions (little endian)\n") ;
+ printf (" aiff - test AIFF file functions (big endian)\n") ;
+ printf (" au - test AU file functions (big endian)\n") ;
+ /*
+ ** printf (" paf - test PAF file functions (little endian)\n") ;
+ ** printf (" svx - test SVX file functions (big endian)\n") ;
+ ** printf (" nist - test NIST file functions (little endian)\n") ;
+ */
+ printf (" all - perform all tests\n") ;
+ exit (1) ;
+ } ;
+
+ bDoAll = !strcmp (argv [1], "all") ;
+
+ if (bDoAll || ! strcmp (argv [1], "wav"))
+ { filename = "wav_pcm8.wav" ;
+ write_file (filename, wav_pcm8, sizeof (wav_pcm8)) ;
+ short_test (filename, 16) ;
+ int_test (filename, 16) ;
+ double_test (filename, 16) ;
+ unlink (filename) ;
+
+ filename = "wav_pcm16.wav" ;
+ write_file (filename, wav_pcm16, sizeof (wav_pcm16)) ;
+ short_test (filename, 16) ;
+ int_test (filename, 16) ;
+ double_test (filename, 16) ;
+ unlink (filename) ;
+
+ filename = "wav_pcm24.wav" ;
+ write_file (filename, wav_pcm24, sizeof (wav_pcm24)) ;
+ int_test (filename, 16) ;
+ double_test (filename, 16) ;
+ unlink (filename) ;
+
+ filename = "wav_pcm32.wav" ;
+ write_file (filename, wav_pcm32, sizeof (wav_pcm32)) ;
+ int_test (filename, 16) ;
+ double_test (filename, 16) ;
+ unlink (filename) ;
+
+ filename = "wav_ieee.wav" ;
+ write_file (filename, wav_ieee, sizeof (wav_ieee)) ;
+ short_test (filename, 16) ;
+ int_test (filename, 16) ;
+ double_test (filename, 16) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (bDoAll || ! strcmp (argv [1], "aiff"))
+ { filename = "aiff_pcm8.aiff" ;
+ write_file (filename, aiff_pcm8, sizeof (aiff_pcm8)) ;
+ short_test (filename, 16) ;
+ int_test (filename, 16) ;
+ double_test (filename, 16) ;
+ unlink (filename) ;
+
+ filename = "aiff_pcm16.aiff" ;
+ write_file (filename, aiff_pcm16, sizeof (aiff_pcm16)) ;
+ short_test (filename, 16) ;
+ int_test (filename, 16) ;
+ double_test (filename, 16) ;
+ unlink (filename) ;
+
+ filename = "aiff_pcm24.aiff" ;
+ write_file (filename, aiff_pcm24, sizeof (aiff_pcm24)) ;
+ int_test (filename, 16) ;
+ double_test (filename, 16) ;
+ unlink (filename) ;
+
+ filename = "aiff_pcm32.aiff" ;
+ write_file (filename, aiff_pcm32, sizeof (aiff_pcm32)) ;
+ int_test (filename, 16) ;
+ double_test (filename, 16) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (bDoAll || ! strcmp (argv [1], "au"))
+ { filename = "au_pcm8.au" ;
+ write_file (filename, au_pcm8, sizeof (au_pcm8)) ;
+ short_test (filename, 16) ;
+ int_test (filename, 16) ;
+ double_test (filename, 16) ;
+ unlink (filename) ;
+
+ filename = "au_pcm16.au" ;
+ write_file (filename, au_pcm16, sizeof (au_pcm16)) ;
+ short_test (filename, 16) ;
+ int_test (filename, 16) ;
+ double_test (filename, 16) ;
+ unlink (filename) ;
+
+ filename = "au_pcm24.au" ;
+ write_file (filename, au_pcm24, sizeof (au_pcm24)) ;
+ int_test (filename, 16) ;
+ double_test (filename, 16) ;
+ unlink (filename) ;
+
+ filename = "au_pcm32.au" ;
+ write_file (filename, au_pcm32, sizeof (au_pcm32)) ;
+ int_test (filename, 16) ;
+ double_test (filename, 16) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (nTests == 0)
+ { printf ("************************************\n") ;
+ printf ("* No '%s' test defined.\n", argv [1]) ;
+ printf ("************************************\n") ;
+ return 1 ;
+ }
+
+ return 0;
+} /* main */
+
+/*============================================================================================
+ * Here are the test functions.
+ */
+
--- /dev/null
+++ b/common/libsndfile/tests/sftest.c
@@ -1,0 +1,62 @@
+/*
+** Copyright (C) 1999-2000 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 <sndfile.h>
+
+#define BUFFER_SIZE (1024)
+
+
+static short buffer [BUFFER_SIZE] ;
+
+int main (int argc, char *argv[])
+{ SNDFILE *file ;
+ SF_INFO sfinfo ;
+ int k, count, max = 0, total = 0 ;
+
+ if (argc < 2)
+ { printf ("Expecting input file name.\n") ;
+ return 0 ;
+ } ;
+
+ if (! (file = sf_open_read (argv [1], &sfinfo)))
+ { printf ("sf_open_read failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ while ((count = sf_read_short (file, buffer, BUFFER_SIZE)))
+ { for (k = 0 ; k < count ; k++)
+ if (abs (buffer [k]) > max)
+ max = abs (buffer [k]) ;
+ total += count ;
+ } ;
+
+ printf ("Total : %d\n", total) ;
+ printf ("Maximun value : %d\n", max) ;
+
+ sf_close (file) ;
+
+ return 0 ;
+} /* main */
+
+
--- /dev/null
+++ b/common/libsndfile/tests/sfversion.c
@@ -1,0 +1,38 @@
+/*
+** Copyright (C) 1999-2000 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 <string.h>
+#include <unistd.h>
+
+#include <sndfile.h>
+
+#define BUFFER_SIZE (256)
+
+static char strbuffer [BUFFER_SIZE] ;
+
+int main (int argc, char *argv[])
+{ sf_get_lib_version (strbuffer, BUFFER_SIZE) ;
+
+ printf (strbuffer) ;
+
+ return 0 ;
+} /* main */
+
--- /dev/null
+++ b/common/libsndfile/tests/ulaw_test.c
@@ -1,0 +1,241 @@
+/*
+** Copyright (C) 1999-2000 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 <sndfile.h>
+
+#define BUFFER_SIZE (65536)
+
+static unsigned char ulaw_encode (int sample) ;
+static int ulaw_decode (unsigned int ulawbyte) ;
+
+static short short_buffer [BUFFER_SIZE] ;
+static unsigned char ulaw_buffer [BUFFER_SIZE] ;
+
+int main (int argc, char *argv[])
+{ SNDFILE *file ;
+ SF_INFO sfinfo ;
+ char *filename ;
+ int k ;
+
+ filename = "test.au" ;
+
+ sfinfo.format = SF_FORMAT_AU | SF_FORMAT_ULAW ;
+ sfinfo.samplerate = 44100 ;
+ sfinfo.samples = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
+ sfinfo.channels = 1 ;
+ sfinfo.pcmbitwidth = 16 ;
+
+ if (! (file = sf_open_write (filename, &sfinfo)))
+ { printf ("sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ /* Generate a file containing all possible 16 bit sample values
+ ** and write it to disk as ulaw encoded samples.
+ */
+
+ for (k = 0 ; k < 0x10000 ; k++)
+ short_buffer [k] = k & 0xFFFF ;
+
+ sf_write_short (file, short_buffer, BUFFER_SIZE) ;
+ sf_close (file) ;
+
+ /* Now open that file and compare the ulaw encoded sample values
+ ** with what they should be.
+ */
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sf_read_raw (file, ulaw_buffer, BUFFER_SIZE) != BUFFER_SIZE)
+ { printf ("sf_read_raw : ") ;
+ sf_perror (file) ;
+ exit (1) ;
+ } ;
+
+ for (k = 0 ; k < 0x10000 ; k++)
+ if (ulaw_encode (short_buffer [k]) != ulaw_buffer [k])
+ { printf ("Encoder error : sample #%d (0x%02X should be 0x%02X)\n", k, ulaw_buffer [k], ulaw_encode (short_buffer [k])) ;
+ exit (1) ;
+ } ;
+
+ sf_close (file) ;
+
+ printf (" ulaw_test : encoder ... ok\n") ;
+
+ /* Now generate a file containing all possible 8 bit encoded
+ ** sample values and write it to disk as ulaw encoded samples.
+ */
+
+ if (! (file = sf_open_write (filename, &sfinfo)))
+ { printf ("sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ for (k = 0 ; k < 256 ; k++)
+ ulaw_buffer [k] = k & 0xFF ;
+
+ sf_write_raw (file, ulaw_buffer, 256) ;
+ sf_close (file) ;
+
+ /* Now open that file and compare the ulaw decoded sample values
+ ** with what they should be.
+ */
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sf_read_short (file, short_buffer, 256) != 256)
+ { printf ("sf_read_short : ") ;
+ sf_perror (file) ;
+ exit (1) ;
+ } ;
+
+
+ for (k = 0 ; k < 256 ; k++)
+ if (short_buffer [k] != ulaw_decode (ulaw_buffer [k]))
+ { printf ("Decoder error : sample #%d (0x%04X should be 0x%04X)\n", k, short_buffer [k], ulaw_decode (ulaw_buffer [k])) ;
+ exit (1) ;
+ } ;
+
+ sf_close (file) ;
+
+ printf (" ulaw_test : decoder ... ok\n") ;
+
+ unlink (filename) ;
+
+ return 0 ;
+} /* main */
+
+
+/*=================================================================================
+** The following routines came from the sox-12.15 (Sound eXcahcnge) distribution.
+**
+** This code is not compiled into libsndfile. It is only used to test the
+** libsndfile lookup tables for correctness.
+**
+** I have included the original authors comments.
+*/
+
+/*
+** This routine converts from linear to ulaw.
+**
+** Craig Reese: IDA/Supercomputing Research Center
+** Joe Campbell: Department of Defense
+** 29 September 1989
+**
+** References:
+** 1) CCITT Recommendation G.711 (very difficult to follow)
+** 2) "A New Digital Technique for Implementation of Any
+** Continuous PCM Companding Law," Villeret, Michel,
+** et al. 1973 IEEE Int. Conf. on Communications, Vol 1,
+** 1973, pg. 11.12-11.17
+** 3) MIL-STD-188-113,"Interoperability and Performance Standards
+** for Analog-to_Digital Conversion Techniques,"
+** 17 February 1987
+**
+** Input: Signed 16 bit linear sample
+** Output: 8 bit ulaw sample
+*/
+
+#define uBIAS 0x84 /* define the add-in bias for 16 bit samples */
+#define uCLIP 32635
+
+static
+unsigned char ulaw_encode (int sample)
+{ static int exp_lut[256] = {0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,
+ 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+ 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7};
+ int sign, exponent, mantissa;
+ unsigned char ulawbyte;
+
+ /* Get the sample into sign-magnitude. */
+ sign = (sample >> 8) & 0x80 ; /* set aside the sign */
+ if ( sign != 0 )
+ sample = -sample ; /* get magnitude */
+ if ( sample > uCLIP )
+ sample = uCLIP ; /* clip the magnitude */
+
+ /* Convert from 16 bit linear to ulaw. */
+ sample = sample + uBIAS;
+ exponent = exp_lut[( sample >> 7 ) & 0xFF];
+ mantissa = ( sample >> ( exponent + 3 ) ) & 0x0F;
+ ulawbyte = ~ ( sign | ( exponent << 4 ) | mantissa );
+
+ return ulawbyte;
+} /* ulaw_encode */
+
+
+/*
+** This routine converts from ulaw to 16 bit linear.
+**
+** Craig Reese: IDA/Supercomputing Research Center
+** 29 September 1989
+**
+** References:
+** 1) CCITT Recommendation G.711 (very difficult to follow)
+** 2) MIL-STD-188-113,"Interoperability and Performance Standards
+** for Analog-to_Digital Conversion Techniques,"
+** 17 February 1987
+**
+** Input: 8 bit ulaw sample
+** Output: signed 16 bit linear sample
+*/
+
+static
+int ulaw_decode (unsigned int ulawbyte)
+{ static int exp_lut[8] = { 0, 132, 396, 924, 1980, 4092, 8316, 16764 };
+ int sign, exponent, mantissa, sample;
+
+ ulawbyte = ~ ulawbyte ;
+ sign = (ulawbyte & 0x80) ;
+ exponent = (ulawbyte >> 4) & 0x07 ;
+ mantissa = ulawbyte & 0x0F ;
+ sample = exp_lut [exponent] + (mantissa << (exponent + 3)) ;
+ if ( sign != 0 )
+ sample = -sample ;
+
+ return sample;
+} /* ulaw_decode */
+
--- /dev/null
+++ b/common/libsndfile/tests/write_read_test.c
@@ -1,0 +1,947 @@
+/*
+** Copyright (C) 1999-2000 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 <string.h>
+#include <unistd.h>
+#include <math.h>
+
+#include <sndfile.h>
+
+#define BUFFER_SIZE (1<<15)
+
+static void pcm_test_char (char *str, char *filename, int typemajor, int typeminor) ;
+static void pcm_test_short (char *str, char *filename, int typemajor, int typeminor) ;
+static void pcm_test_24bit (char *str, char *filename, int typemajor, int typeminor, int long_file_ok) ;
+static void pcm_test_int (char *str, char *filename, int typemajor, int typeminor) ;
+
+static void pcm_float_test (char *str, char *filename, int typemajor) ;
+
+/* Force the start of this buffer to be double aligned. Sparc-solaris will
+** choke if its not.
+*/
+static double test_buffer [(BUFFER_SIZE/sizeof(double))+1] ;
+
+int main (int argc, char *argv[])
+{ char *filename ;
+ 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 (" wav - test WAV file functions (little endian)\n") ;
+ printf (" aiff - test AIFF file functions (big endian)\n") ;
+ printf (" au - test AU file functions (big endian)\n") ;
+ printf (" aule - test little endian AU file functions\n") ;
+ printf (" raw - test RAW header-less PCM file functions\n") ;
+ printf (" paf - test PAF file functions\n") ;
+ printf (" svx - test 8SVX/16SV file functions\n") ;
+ printf (" all - perform all tests\n") ;
+ exit (1) ;
+ } ;
+
+ bDoAll=!strcmp (argv [1], "all");
+
+ if (bDoAll || ! strcmp (argv [1], "wav"))
+ { filename = "test.wav" ;
+ pcm_test_char ("wav", filename, SF_FORMAT_WAV, SF_FORMAT_PCM) ;
+ pcm_test_short ("wav", filename, SF_FORMAT_WAV, SF_FORMAT_PCM) ;
+ pcm_test_24bit ("wav", filename, SF_FORMAT_WAV, SF_FORMAT_PCM, 0) ;
+ pcm_test_int ("wav", filename, SF_FORMAT_WAV, SF_FORMAT_PCM) ;
+ pcm_float_test ("wav", filename, SF_FORMAT_WAV) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (bDoAll || ! strcmp (argv [1], "aiff"))
+ { filename = "test.aiff" ;
+ pcm_test_char ("aiff", filename, SF_FORMAT_AIFF, SF_FORMAT_PCM) ;
+ pcm_test_short ("aiff", filename, SF_FORMAT_AIFF, SF_FORMAT_PCM) ;
+ pcm_test_24bit ("aiff", filename, SF_FORMAT_AIFF, SF_FORMAT_PCM, 0) ;
+ pcm_test_int ("aiff", filename, SF_FORMAT_AIFF, SF_FORMAT_PCM) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (bDoAll || ! strcmp (argv [1], "au"))
+ { filename = "test.au" ;
+ pcm_test_char ("au", filename, SF_FORMAT_AU, SF_FORMAT_PCM) ;
+ pcm_test_short ("au", filename, SF_FORMAT_AU, SF_FORMAT_PCM) ;
+ pcm_test_24bit ("au", filename, SF_FORMAT_AU, SF_FORMAT_PCM, 0) ;
+ pcm_test_int ("au", filename, SF_FORMAT_AU, SF_FORMAT_PCM) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (bDoAll || ! strcmp (argv [1], "aule"))
+ { filename = "test.au" ;
+ pcm_test_char ("aule", filename, SF_FORMAT_AULE, SF_FORMAT_PCM) ;
+ pcm_test_short ("aule", filename, SF_FORMAT_AULE, SF_FORMAT_PCM) ;
+ pcm_test_24bit ("aule", filename, SF_FORMAT_AULE, SF_FORMAT_PCM, 0) ;
+ pcm_test_int ("aule", filename, SF_FORMAT_AULE, SF_FORMAT_PCM) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (bDoAll || ! strcmp (argv [1], "raw"))
+ { filename = "test.raw" ;
+ pcm_test_char ("raw-s8", filename, SF_FORMAT_RAW, SF_FORMAT_PCM_S8) ;
+ pcm_test_char ("raw-u8", filename, SF_FORMAT_RAW, SF_FORMAT_PCM_U8) ;
+ pcm_test_short ("raw-le", filename, SF_FORMAT_RAW, SF_FORMAT_PCM_LE) ;
+ pcm_test_short ("raw-be", filename, SF_FORMAT_RAW, SF_FORMAT_PCM_BE) ;
+ pcm_test_24bit ("raw-le", filename, SF_FORMAT_RAW, SF_FORMAT_PCM_LE, 0) ;
+ pcm_test_24bit ("raw-be", filename, SF_FORMAT_RAW, SF_FORMAT_PCM_BE, 0) ;
+ pcm_test_int ("raw-le", filename, SF_FORMAT_RAW, SF_FORMAT_PCM_LE) ;
+ pcm_test_int ("raw-be", filename, SF_FORMAT_RAW, SF_FORMAT_PCM_BE) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (bDoAll || ! strcmp (argv [1], "paf"))
+ { filename = "test.paf" ;
+ pcm_test_short ("paf-le", filename, SF_FORMAT_PAF, SF_FORMAT_PCM_LE) ;
+ pcm_test_short ("paf-be", filename, SF_FORMAT_PAF, SF_FORMAT_PCM_BE) ;
+ pcm_test_24bit ("paf-le", filename, SF_FORMAT_PAF, SF_FORMAT_PCM_LE, 1) ;
+ pcm_test_24bit ("paf-be", filename, SF_FORMAT_PAF, SF_FORMAT_PCM_BE, 1) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (bDoAll || ! strcmp (argv [1], "svx"))
+ { filename = "test.svx" ;
+ pcm_test_char ("svx", filename, SF_FORMAT_SVX, SF_FORMAT_PCM) ;
+ pcm_test_short ("svx", filename, SF_FORMAT_SVX, SF_FORMAT_PCM) ;
+ unlink (filename) ;
+ nTests++ ;
+ } ;
+
+ if (nTests == 0)
+ { printf ("Mono : ************************************\n") ;
+ printf ("Mono : * No '%s' test defined.\n", argv [1]) ;
+ printf ("Mono : ************************************\n") ;
+ return 1 ;
+ } ;
+
+ return 0;
+} /* main */
+
+/*============================================================================================
+ * Here are the test functions.
+ */
+
+static
+void pcm_test_char (char *str, char *filename, int typemajor, int typeminor)
+{ SNDFILE *file ;
+ SF_INFO sfinfo ;
+ unsigned int k, items, frames ;
+ short *data ;
+
+ printf (" pcm_test_char : %s ... ", str) ;
+
+ items = 127 ;
+
+ data = (short*) test_buffer ;
+ for (k = 0 ; k < items ; k++)
+ data [k] = k * ((k % 2) ? 1 : -1) ;
+
+ sfinfo.samplerate = 44100 ;
+ sfinfo.samples = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
+ sfinfo.channels = 1 ;
+ sfinfo.pcmbitwidth = 8 ;
+ sfinfo.format = (typemajor | typeminor) ;
+
+ if (! (file = sf_open_write (filename, &sfinfo)))
+ { printf ("Mono : sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_write_short (file, data, items)) != items)
+ { printf ("Mono : sf_write_short failed with short write (%d => %d).\n", items, k) ;
+ sf_perror (file) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ memset (data, 0, items * sizeof (short)) ;
+
+ if (typemajor != SF_FORMAT_RAW)
+ memset (&sfinfo, 0, sizeof (sfinfo)) ;
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("Mono : sf_open_read failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.format != (typemajor | typeminor))
+ { printf ("Mono : Returned format incorrect (0x%08X => 0x%08X).\n", (typemajor | typeminor), sfinfo.format) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples != items)
+ { printf ("Mono : Incorrect number of samples in file. (%u => %u)\n", items, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.channels != 1)
+ { printf ("Mono : Incorrect number of channels in file.\n") ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.pcmbitwidth != 8)
+ { printf ("Mono : Incorrect bit width (%d).\n", sfinfo.pcmbitwidth) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_read_short (file, data, items)) != items)
+ { printf ("Mono : short read (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ for (k = 0 ; k < items ; k++)
+ if (data [k] != k * ((k % 2) ? 1 : -1))
+ { printf ("Mono : Incorrect sample (#%d : %d => %d).\n", k, k * ((k % 2) ? 1 : -1), data [k]) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ /* Now test Stereo. */
+
+ if (typemajor == SF_FORMAT_SVX)
+ { printf ("ok\n") ;
+ return ;
+ } ;
+
+ items = 126 ;
+
+ data = (short*) test_buffer ;
+ for (k = 0 ; k < items ; k++)
+ data [k] = k * ((k % 2) ? 1 : -1) ;
+
+ sfinfo.samplerate = 44100 ;
+ sfinfo.samples = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
+ sfinfo.channels = 2 ;
+ sfinfo.pcmbitwidth = 8 ;
+ sfinfo.format = (typemajor | typeminor) ;
+
+ frames = items / sfinfo.channels ;
+
+ if (! (file = sf_open_write (filename, &sfinfo)))
+ { printf ("Stereo : sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_writef_short (file, data, frames)) != frames)
+ { printf ("Stereo : sf_writef_short failed with short write (%d => %d).\n", frames, k) ;
+ sf_perror (file) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ memset (data, 0, items * sizeof (short)) ;
+
+ if (typemajor != SF_FORMAT_RAW)
+ memset (&sfinfo, 0, sizeof (sfinfo)) ;
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("Stereo : sf_open_read failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.format != (typemajor | typeminor))
+ { printf ("Stereo : Returned format incorrect (0x%08X => 0x%08X).\n", (typemajor | typeminor), sfinfo.format) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples != frames)
+ { printf ("Stereo : Incorrect number of samples in file. (%u => %u)\n", frames, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.channels != 2)
+ { printf ("Stereo : Incorrect number of channels in file.\n") ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.pcmbitwidth != 8)
+ { printf ("Stereo : Incorrect bit width (%d).\n", sfinfo.pcmbitwidth) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_readf_short (file, data, frames)) != frames)
+ { printf ("Stereo : short read (%d).\n", k) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ for (k = 0 ; k < items ; k++)
+ if (data [k] != k * ((k % 2) ? 1 : -1))
+ { printf ("Stereo : Incorrect sample (#%d : %d => %d).\n", k, k * ((k % 2) ? 1 : -1), data [k]) ;
+ exit (1) ;
+ } ;
+
+ printf ("ok\n") ;
+} /* pcm_test_char */
+
+static
+void pcm_test_short (char *str, char *filename, int typemajor, int typeminor)
+{ SNDFILE *file ;
+ SF_INFO sfinfo ;
+ unsigned int k, items, frames ;
+ short *data ;
+
+ printf (" pcm_test_short : %s ... ", str) ;
+
+ items = BUFFER_SIZE / sizeof (short) ;
+
+ data = (short*) test_buffer ;
+ for (k = 0 ; k < items ; k++)
+ data [k] = k * ((k % 2) ? 1 : -1) ;
+
+ sfinfo.samplerate = 44100 ;
+ sfinfo.samples = items ;
+ sfinfo.channels = 1 ;
+ sfinfo.pcmbitwidth = 16 ;
+ sfinfo.format = (typemajor | typeminor) ;
+
+ if (! (file = sf_open_write (filename, &sfinfo)))
+ { printf ("Mono : sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_write_short (file, data, items)) != items)
+ { printf ("Mono : sf_write_short failed with short write (%d => %d).\n", items, k) ;
+ sf_perror (file) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ memset (data, 0, items * sizeof (short)) ;
+
+ if (typemajor != SF_FORMAT_RAW)
+ memset (&sfinfo, 0, sizeof (sfinfo)) ;
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("Mono : sf_open_read failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.format != (typemajor | typeminor))
+ { printf ("Mono : Returned format incorrect (0x%08X => 0x%08X).\n", (typemajor | typeminor), sfinfo.format) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples != items)
+ { printf ("Mono : Incorrect number of samples in file. (%d => %d)\n", items, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.channels != 1)
+ { printf ("Mono : Incorrect number of channels in file.\n") ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.pcmbitwidth != 16)
+ { printf ("Mono : Incorrect bit width (%d).\n", sfinfo.pcmbitwidth) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_read_short (file, data, items)) != items)
+ { printf ("Mono : short read (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ for (k = 0 ; k < items ; k++)
+ if (data [k] != k * ((k % 2) ? 1 : -1))
+ { printf ("Mono : Incorrect sample (#%d : %d => %d).\n", k, k * ((k % 2) ? 1 : -1), data [k]) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ /* Now test Stereo. */
+
+ if (typemajor == SF_FORMAT_SVX)
+ { printf ("ok\n") ;
+ return ;
+ } ;
+
+ items = BUFFER_SIZE / sizeof (short) ;
+
+ data = (short*) test_buffer ;
+ for (k = 0 ; k < items ; k++)
+ data [k] = k * ((k % 2) ? 1 : -1) ;
+
+ sfinfo.samplerate = 44100 ;
+ sfinfo.samples = items ;
+ sfinfo.channels = 2 ;
+ sfinfo.pcmbitwidth = 16 ;
+ sfinfo.format = (typemajor | typeminor) ;
+
+ frames = items / sfinfo.channels ;
+
+ if (! (file = sf_open_write (filename, &sfinfo)))
+ { printf ("Stereo : sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_writef_short (file, data, frames)) != frames)
+ { printf ("Stereo : sf_writef_short failed with short write (%d => %d).\n", frames, k) ;
+ sf_perror (file) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ memset (data, 0, items * sizeof (short)) ;
+
+ if (typemajor != SF_FORMAT_RAW)
+ memset (&sfinfo, 0, sizeof (sfinfo)) ;
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("Stereo : sf_open_read failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.format != (typemajor | typeminor))
+ { printf ("Stereo : Returned format incorrect (0x%08X => 0x%08X).\n", (typemajor | typeminor), sfinfo.format) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples != frames)
+ { printf ("Stereo : Incorrect number of samples in file. (%d => %d)\n", frames, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.channels != 2)
+ { printf ("Stereo : Incorrect number of channels in file.\n") ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.pcmbitwidth != 16)
+ { printf ("Stereo : Incorrect bit width (%d).\n", sfinfo.pcmbitwidth) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_readf_short (file, data, frames)) != frames)
+ { printf ("Stereo : short read (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ for (k = 0 ; k < items ; k++)
+ if (data [k] != k * ((k % 2) ? 1 : -1))
+ { printf ("Stereo : Incorrect sample (#%d : %d => %d).\n", k, k * ((k % 2) ? 1 : -1), data [k]) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ printf ("ok\n") ;
+} /* pcm_test_short */
+
+static
+void pcm_test_24bit (char *str, char *filename, int typemajor, int typeminor, int long_file_ok)
+{ SNDFILE *file ;
+ SF_INFO sfinfo ;
+ unsigned int k, items, frames ;
+ int *data ;
+
+ printf (" pcm_test_24bit : %s ... ", str) ;
+
+ items = BUFFER_SIZE / sizeof (int) ;
+
+ data = (int*) test_buffer ;
+ for (k = 0 ; k < items ; k++)
+ data [k] = k * 256 * ((k % 2) ? 1 : -1) ;
+
+ sfinfo.samplerate = 44100 ;
+ sfinfo.samples = items ;
+ sfinfo.channels = 1 ;
+ sfinfo.pcmbitwidth = 24 ;
+ sfinfo.format = (typemajor | typeminor) ;
+
+ if (! (file = sf_open_write (filename, &sfinfo)))
+ { printf ("Mono : sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sf_write_int (file, data, items) != items)
+ { printf ("Mono : sf_write_int failed with error : ") ;
+ sf_perror (file) ;
+ exit (1) ;
+ } ;
+
+ sf_close (file) ;
+
+ memset (data, 0, items * 3) ;
+
+ if (typemajor != SF_FORMAT_RAW)
+ memset (&sfinfo, 0, sizeof (sfinfo)) ;
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("Mono : sf_open_read failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.format != (typemajor | typeminor))
+ { printf ("Mono : Returned format incorrect (0x%08X => 0x%08X).\n", (typemajor | typeminor), sfinfo.format) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples < items)
+ { printf ("Mono : Incorrect number of samples in file (too short). (%d should be %d)\n", sfinfo.samples, items) ;
+ exit (1) ;
+ } ;
+
+ if (! long_file_ok && sfinfo.samples > items)
+ { printf ("Mono : Incorrect number of samples in file (too long). (%d should be %d)\n", sfinfo.samples, items) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.channels != 1)
+ { printf ("Mono : Incorrect number of channels in file.\n") ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.pcmbitwidth != 24)
+ { printf ("Mono : Incorrect bit width (%d).\n", sfinfo.pcmbitwidth) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_read_int (file, data, items)) != items)
+ { printf ("Mono : short read (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ for (k = 0 ; k < items ; k++)
+ if (data [k] != k * 256 * ((k % 2) ? 1 : -1))
+ { printf ("Mono : Incorrect sample (#%d : %d => %d).\n", k, k * 256 * ((k % 2) ? 1 : -1), data [k]) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ /* Now test Stereo. */
+
+ if (typemajor == SF_FORMAT_SVX)
+ { printf ("ok\n") ;
+ return ;
+ } ;
+
+ items = BUFFER_SIZE / sizeof (int) ;
+
+ data = (int*) test_buffer ;
+ for (k = 0 ; k < items ; k++)
+ data [k] = k * 256 * ((k % 2) ? 1 : -1) ;
+
+ sfinfo.samplerate = 44100 ;
+ sfinfo.samples = items ;
+ sfinfo.channels = 2 ;
+ sfinfo.pcmbitwidth = 24 ;
+ sfinfo.format = (typemajor | typeminor) ;
+
+ frames = items / sfinfo.channels ;
+
+ if (! (file = sf_open_write (filename, &sfinfo)))
+ { printf ("Stereo : sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sf_writef_int (file, data, frames) != frames)
+ { printf ("Stereo : sf_writef_int failed with error : ") ;
+ sf_perror (file) ;
+ exit (1) ;
+ } ;
+
+ sf_close (file) ;
+
+ memset (data, 0, items * 3) ;
+
+ if (typemajor != SF_FORMAT_RAW)
+ memset (&sfinfo, 0, sizeof (sfinfo)) ;
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("Stereo : sf_open_read failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.format != (typemajor | typeminor))
+ { printf ("Stereo : Returned format incorrect (0x%08X => 0x%08X).\n", (typemajor | typeminor), sfinfo.format) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples < frames)
+ { printf ("Stereo : Incorrect number of samples in file (too short). (%d should be %d)\n", sfinfo.samples, frames) ;
+ exit (1) ;
+ } ;
+
+ if (! long_file_ok && sfinfo.samples > frames)
+ { printf ("Stereo : Incorrect number of samples in file (too long). (%d should be %d)\n", sfinfo.samples, frames) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.channels != 2)
+ { printf ("Stereo : Incorrect number of channels in file.\n") ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.pcmbitwidth != 24)
+ { printf ("Stereo : Incorrect bit width (%d).\n", sfinfo.pcmbitwidth) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_readf_int (file, data, frames)) != frames)
+ { printf ("Stereo : short read (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ for (k = 0 ; k < items ; k++)
+ if (data [k] != k * 256 * ((k % 2) ? 1 : -1))
+ { printf ("Stereo : Incorrect sample (#%d : %d => %d).\n", k, k * 256 * ((k % 2) ? 1 : -1), data [k]) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ printf ("ok\n") ;
+} /* pcm_test_24bit */
+
+static
+void pcm_test_int (char *str, char *filename, int typemajor, int typeminor)
+{ SNDFILE *file ;
+ SF_INFO sfinfo ;
+ unsigned int k, items, frames ;
+ int sign, *data ;
+
+ printf (" pcm_test_int : %s ... ", str) ;
+
+ items = BUFFER_SIZE / sizeof (int) ;
+
+ data = (int*) test_buffer ;
+ for (sign = 1, k = 0 ; k < items ; k++)
+ data [k] = k * 200000 * ((k % 2) ? 1 : -1) ;
+
+ sfinfo.samplerate = 44100 ;
+ sfinfo.samples = items ;
+ sfinfo.channels = 1 ;
+ sfinfo.pcmbitwidth = 32 ;
+ sfinfo.format = (typemajor | typeminor) ;
+
+ if (! (file = sf_open_write (filename, &sfinfo)))
+ { printf ("Mono : sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sf_write_int (file, data, items) != items)
+ { printf ("Mono : sf_write_int failed with error : ") ;
+ sf_perror (file) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ memset (data, 0, items * sizeof (short)) ;
+
+ if (typemajor != SF_FORMAT_RAW)
+ memset (&sfinfo, 0, sizeof (sfinfo)) ;
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("Mono : sf_open_read failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.format != (typemajor | typeminor))
+ { printf ("Mono : Returned format incorrect (0x%08X => 0x%08X).\n", (typemajor | typeminor), sfinfo.format) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples != items)
+ { printf ("Mono : Incorrect number of samples in file. (%d => %d)\n", items, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.channels != 1)
+ { printf ("Mono : Incorrect number of channels in file.\n") ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.pcmbitwidth != 32)
+ { printf ("Mono : Incorrect bit width (%d).\n", sfinfo.pcmbitwidth) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_read_int (file, data, items)) != items)
+ { printf ("Mono : short read (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ for (sign = 1, k = 0 ; k < items ; k++)
+ if (data [k] != k * 200000 * ((k % 2) ? 1 : -1))
+ { printf ("Mono : Incorrect sample (#%d : %d => %d).\n", k, (k % 2) ? 1 : -1, data [k]) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ /* Now test Stereo. */
+
+ if (typemajor == SF_FORMAT_SVX)
+ { printf ("ok\n") ;
+ return ;
+ } ;
+
+ items = BUFFER_SIZE / sizeof (int) ;
+
+ data = (int*) test_buffer ;
+ for (sign = 1, k = 0 ; k < items ; k++)
+ data [k] = k * 200000 * ((k % 2) ? 1 : -1) ;
+
+ sfinfo.samplerate = 44100 ;
+ sfinfo.samples = items ;
+ sfinfo.channels = 2 ;
+ sfinfo.pcmbitwidth = 32 ;
+ sfinfo.format = (typemajor | typeminor) ;
+
+ frames = items / sfinfo.channels ;
+
+ if (! (file = sf_open_write (filename, &sfinfo)))
+ { printf ("Stereo : sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sf_writef_int (file, data, frames) != frames)
+ { printf ("Stereo : sf_writef_int failed with error : ") ;
+ sf_perror (file) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ memset (data, 0, items * sizeof (short)) ;
+
+ if (typemajor != SF_FORMAT_RAW)
+ memset (&sfinfo, 0, sizeof (sfinfo)) ;
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("Stereo : sf_open_read failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.format != (typemajor | typeminor))
+ { printf ("Stereo : Returned format incorrect (0x%08X => 0x%08X).\n", (typemajor | typeminor), sfinfo.format) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples != frames)
+ { printf ("Stereo : Incorrect number of samples in file. (%d => %d)\n", frames, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.channels != 2)
+ { printf ("Stereo : Incorrect number of channels in file.\n") ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.pcmbitwidth != 32)
+ { printf ("Stereo : Incorrect bit width (%d).\n", sfinfo.pcmbitwidth) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_readf_int (file, data, frames)) != frames)
+ { printf ("Stereo : short read (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ for (sign = 1, k = 0 ; k < items ; k++)
+ if (data [k] != k * 200000 * ((k % 2) ? 1 : -1))
+ { printf ("Stereo : Incorrect sample (#%d : %d => %d).\n", k, (k % 2) ? 1 : -1, data [k]) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ printf ("ok\n") ;
+} /* pcm_test_int */
+
+static
+void pcm_float_test (char *str, char *filename, int typemajor)
+{ SNDFILE *file ;
+ SF_INFO sfinfo ;
+ unsigned int k, items, frames ;
+ int sign ;
+ double *data, error ;
+
+ printf (" pcm_float_test : %s ... ", str) ;
+
+ items = BUFFER_SIZE / sizeof (double) ;
+
+ data = (double*) test_buffer ;
+ for (sign = 1, k = 0 ; k < items ; k++)
+ data [k] = ((double) k) / 100.0 * (sign *= -1) ;
+
+ sfinfo.samplerate = 44100 ;
+ sfinfo.samples = items ;
+ sfinfo.channels = 1 ;
+ sfinfo.pcmbitwidth = 32 ;
+ sfinfo.format = (typemajor | SF_FORMAT_FLOAT) ;
+
+ if (! (file = sf_open_write (filename, &sfinfo)))
+ { printf ("Mono : sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sf_write_double (file, data, items, 0) != items)
+ { printf ("Mono : sf_write_int failed with error : ") ;
+ sf_perror (file) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ memset (data, 0, items * sizeof (double)) ;
+ memset (&sfinfo, 0, sizeof (sfinfo)) ;
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("Mono : sf_open_read failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.format != (typemajor | SF_FORMAT_FLOAT))
+ { printf ("Mono : Returned format incorrect (0x%08X => 0x%08X).\n", (typemajor | SF_FORMAT_FLOAT), sfinfo.format) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples != items)
+ { printf ("Mono : Incorrect number of samples in file. (%d => %d)\n", items, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.channels != 1)
+ { printf ("Mono : Incorrect number of channels in file.\n") ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.pcmbitwidth != 32)
+ { printf ("Mono : Incorrect bit width (%d).\n", sfinfo.pcmbitwidth) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_read_double (file, data, items, 0)) != items)
+ { printf ("Mono : short read (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ for (sign = 1, k = 0 ; k < items ; k++)
+ { error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
+ if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
+ { printf ("Mono : Incorrect sample (#%d : %f => %f).\n", k, ((double) k) / 100.0, data [k]) ;
+ exit (1) ;
+ } ;
+ } ;
+ sf_close (file) ;
+
+ /* Now test Stereo. */
+
+ if (typemajor == SF_FORMAT_SVX)
+ { printf ("ok\n") ;
+ return ;
+ } ;
+
+ items = BUFFER_SIZE / sizeof (double) ;
+
+ data = (double*) test_buffer ;
+ for (sign = 1, k = 0 ; k < items ; k++)
+ data [k] = ((double) k) / 100.0 * (sign *= -1) ;
+
+ sfinfo.samplerate = 44100 ;
+ sfinfo.samples = items ;
+ sfinfo.channels = 2 ;
+ sfinfo.pcmbitwidth = 32 ;
+ sfinfo.format = (typemajor | SF_FORMAT_FLOAT) ;
+
+ frames = items / sfinfo.channels ;
+
+ if (! (file = sf_open_write (filename, &sfinfo)))
+ { printf ("Stereo : sf_open_write failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sf_writef_double (file, data, frames, 0) != frames)
+ { printf ("Stereo : sf_writef_int failed with error : ") ;
+ sf_perror (file) ;
+ exit (1) ;
+ } ;
+ sf_close (file) ;
+
+ memset (data, 0, items * sizeof (double)) ;
+ memset (&sfinfo, 0, sizeof (sfinfo)) ;
+
+ if (! (file = sf_open_read (filename, &sfinfo)))
+ { printf ("Stereo : sf_open_read failed with error : ") ;
+ sf_perror (NULL) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.format != (typemajor | SF_FORMAT_FLOAT))
+ { printf ("Stereo : Returned format incorrect (0x%08X => 0x%08X).\n", (typemajor | SF_FORMAT_FLOAT), sfinfo.format) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.samples != frames)
+ { printf ("Stereo : Incorrect number of samples in file. (%d => %d)\n", frames, sfinfo.samples) ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.channels != 2)
+ { printf ("Stereo : Incorrect number of channels in file.\n") ;
+ exit (1) ;
+ } ;
+
+ if (sfinfo.pcmbitwidth != 32)
+ { printf ("Stereo : Incorrect bit width (%d).\n", sfinfo.pcmbitwidth) ;
+ exit (1) ;
+ } ;
+
+ if ((k = sf_readf_double (file, data, frames, 0)) != frames)
+ { printf ("Stereo : short read (%d).\n", k) ;
+ exit (1) ;
+ } ;
+
+ for (sign = 1, k = 0 ; k < items ; k++)
+ { error = fabs (data [k] - ((double) k) / 100.0 * (sign *= -1)) ;
+ if (fabs (data [k]) > 1e-100 && fabs (error / data [k]) > 1e-5)
+ { printf ("Stereo : Incorrect sample (#%d : %f => %f).\n", k, ((double) k) / 100.0, data [k]) ;
+ exit (1) ;
+ } ;
+ } ;
+ sf_close (file) ;
+
+ printf ("ok\n") ;
+} /* pcm_float_test */
+
--- a/frontend/faac.dsp
+++ b/frontend/faac.dsp
@@ -42,7 +42,7 @@
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /O2 /I "../include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /O2 /I "../include" /I "../common/libsndfile/src" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x413 /d "NDEBUG"
# ADD RSC /l 0x413 /d "NDEBUG"
BSC32=bscmake.exe
@@ -50,7 +50,7 @@
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 libsndfile.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# SUBTRACT LINK32 /profile /debug /nodefaultlib
!ELSEIF "$(CFG)" == "faac - Win32 Debug"
@@ -67,7 +67,7 @@
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../include" /I "../common/libsndfile/src" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD BASE RSC /l 0x413 /d "_DEBUG"
# ADD RSC /l 0x413 /d "_DEBUG"
BSC32=bscmake.exe
@@ -75,7 +75,7 @@
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 libsndfiled.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
!ENDIF
--- a/frontend/faac.dsw
+++ b/frontend/faac.dsw
@@ -14,11 +14,26 @@
Begin Project Dependency
Project_Dep_Name libfaac
End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name libsndfile
+ End Project Dependency
}}}
###############################################################################
Project: "libfaac"=..\LIBFAAC\libfaac.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libsndfile"=..\common\libsndfile\Win32\libsndfile.dsp - Package Owner=<4>
Package=<5>
{{{
--- a/frontend/faacgui.dsp
+++ b/frontend/faacgui.dsp
@@ -43,7 +43,7 @@
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /GX /O2 /I "../include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "../include" /I "../common/libsndfile/src" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x413 /d "NDEBUG"
@@ -53,7 +53,7 @@
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 libsndfile.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
# SUBTRACT LINK32 /profile /nodefaultlib
!ELSEIF "$(CFG)" == "faacgui - Win32 Debug"
@@ -70,7 +70,7 @@
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
-# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../include" /I "../common/libsndfile/src" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x413 /d "_DEBUG"
@@ -80,7 +80,7 @@
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 libsndfiled.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
!ENDIF
--- a/frontend/faacgui.dsw
+++ b/frontend/faacgui.dsw
@@ -14,11 +14,26 @@
Begin Project Dependency
Project_Dep_Name libfaac
End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name libsndfile
+ End Project Dependency
}}}
###############################################################################
Project: "libfaac"=..\libfaac\libfaac.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libsndfile"=..\common\libsndfile\Win32\libsndfile.dsp - Package Owner=<4>
Package=<5>
{{{
--- a/wingui/faac_wingui.dsp
+++ b/wingui/faac_wingui.dsp
@@ -43,7 +43,7 @@
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /Yu"stdafx.h" /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "../include" /I "C:\Eigene Dateien\Programmierung\C_Projekte\Downloaded_GNU\libsndfile\libsndfile-0.0.22\src" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../include" /I "../common/libsndfile/src" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /Yu"stdafx.h" /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x407 /d "NDEBUG" /d "_AFXDLL"
@@ -53,7 +53,7 @@
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 /nologo /subsystem:windows /machine:I386
-# ADD LINK32 libsndfile.lib /nologo /subsystem:windows /machine:I386
+# ADD LINK32 /nologo /subsystem:windows /machine:I386
!ELSEIF "$(CFG)" == "faac_wingui - Win32 Debug"
@@ -69,7 +69,7 @@
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /Yu"stdafx.h" /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../include" /I "C:\Eigene Dateien\Programmierung\C_Projekte\Downloaded_GNU\libsndfile\libsndfile-0.0.22\src" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../include" /I "../common/libsndfile/src" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x407 /d "_DEBUG" /d "_AFXDLL"
@@ -79,7 +79,7 @@
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 libsndfile.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
!ENDIF
--- a/wingui/faac_wingui.dsw
+++ b/wingui/faac_wingui.dsw
@@ -14,11 +14,26 @@
Begin Project Dependency
Project_Dep_Name libfaac
End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name libsndfile
+ End Project Dependency
}}}
###############################################################################
Project: "libfaac"=..\libfaac\libfaac.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "libsndfile"=..\common\libsndfile\Win32\libsndfile.dsp - Package Owner=<4>
Package=<5>
{{{