Parcourir la source

Add files via upload

Richard W Dobson il y a 3 ans
Parent
commit
2806856afb

+ 283 - 0
CMakeLists.txt

@@ -0,0 +1,283 @@
+# RWD development version for newsfsys
+cmake_minimum_required(VERSION 2.8.3)
+
+project (CDP)
+
+# ENABLE_TESTING()
+
+if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+  set(CMAKE_COMPILER_IS_CLANG 1)
+endif()
+
+message(STATUS "${CMAKE_HOME_DIRECTORY}")
+message(STATUS "installing to ${CMAKE_INSTALL_PREFIX}")
+
+set(CMAKE_CXX_FLAGS_RELEASE "-O3 -std=c++11 -stdlib=libc++")
+set(CMAKE_C_FLAGS_RELEASE "-O3 ")
+set(CMAKE_VERBOSE_MAKEFILE OFF)
+
+# Project definitions
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_HOME_DIRECTORY}/NewRelease")
+message(STATUS "building to ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
+
+# Relative install paths
+set(EXECUTABLE_INSTALL_DIR "bin")
+function(my_install name)
+  install(TARGETS ${name}
+	RUNTIME DESTINATION "${EXECUTABLE_INSTALL_DIR}" )
+endfunction(my_install)
+
+
+set(LIBRARY_INSTALL_DIR "lib")
+message(STATUS "LIBRARY INSTALL DIR: ${LIBRARY_INSTALL_DIR}")
+
+include(TestBigEndian)
+include(CheckFunctionExists)
+include(CheckIncludeFile)
+include(CheckIncludeFileCXX)
+include(CheckLibraryExists)
+include(CMakeParseArguments)
+include(CheckCCompilerFlag)
+include(CheckCXXCompilerFlag)
+
+# If FAIL_MISSING is true and the dependencies are not fulfilled,
+# it will abort the cmake run.
+# If FAIL_MISSING is false, it will set the option to OFF.
+# If the target is not enabled, it will do nothing.
+# example: check_deps(BUILD_NEW_PARSER FLEX_EXECUTABLE BISON_EXECUTABLE)
+function(check_deps option)
+    if(${option})
+        set(i 1)
+        while( ${i} LESS ${ARGC} )
+            set(dep ${ARGV${i}})
+            if(NOT ${dep})
+                if(FAIL_MISSING)
+                    message(FATAL_ERROR
+                        "${option} is enabled, but ${dep}=\"${${dep}}\"")
+                else()
+                    message(STATUS "${dep}=\"${${dep}}\", so disabling ${option}")
+                    set(${option} OFF PARENT_SCOPE)
+                    # Set it in the local scope too
+                    set(${option} OFF)
+                endif()
+            endif()
+            math(EXPR i "${i}+1")
+        endwhile()
+    endif()
+    if(${option})
+        message(STATUS "${option} is enabled")
+    else()
+        message(STATUS "${option} is disabled")
+    endif()
+endfunction(check_deps)
+
+### COMPILER OPTIMIZATION FLAGS
+option(USE_COMPILER_OPTIMIZATIONS "Use the default CDP compiler optimization flags" ON)
+if(USE_COMPILER_OPTIMIZATIONS)
+  include(cmake/CompilerOptimizations.cmake)
+endif()
+
+if(APPLE)
+  set(OSX_VERSION " ")
+endif()
+
+# Include this after the install path definitions so we can override them here.
+# Also after function definitions so we can use them there
+find_file(CUSTOM_CMAKE "Custom.cmake" HINTS ${CMAKE_HOME_DIRECTORY})
+if(CUSTOM_CMAKE)
+    message(STATUS "Including Custom.cmake file: ${CUSTOM_CMAKE}")
+    include(${CUSTOM_CMAKE})
+else()
+    message(STATUS "Not using Custom.cmake file.")
+endif()
+
+
+if(WIN32 AND NOT MSVC)
+    if(EXISTS "C:/MinGW/include")
+        include_directories(C:/MinGW/include)
+    else()
+        MESSAGE(STATUS "MinGW include dir not found")
+    endif()
+    set(CMAKE_MODULE_LINKER_FLAGS
+        "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--add-stdcall-alias")
+endif()
+
+if(WIN32)
+    set(CMAKE_SHARED_LIBRARY_PREFIX "")
+    set(CMAKE_SHARED_MODULE_PREFIX "")
+    set(EXTRA_LIBRARIES
+        kernel32
+        user32
+        ole32
+        winspool
+        odbc32
+        gdi32
+        comdlg32
+        advapi32
+        shell32
+        oleaut32
+        uuid)
+    else()
+      set(EXTRA_LIBRARIES "m")
+endif(WIN32)
+
+if(CMAKE_SYSTEM_NAME MATCHES "Linux")
+    set(LINUX YES)
+else()
+    set(LINUX NO)
+endif()
+
+## USER OPTIONS ##
+
+option(FAIL_MISSING "Fail when a required external dependency is not present (useful for packagers)" OFF)
+
+option(BUILD_RELEASE "Build for release" ON)
+
+# Optional targets, they should all default to ON (check_deps will disable them if not possible to build)
+
+##
+
+set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR})
+
+check_c_compiler_flag(-fvisibility=hidden HAS_VISIBILITY_HIDDEN)
+check_cxx_compiler_flag(-fvisibility=hidden HAS_CXX_VISIBILITY_HIDDEN)
+if (HAS_VISIBILITY_HIDDEN)
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
+endif()
+if (HAS_CXX_VISBILITY_HIDDEN)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
+endif()
+
+if(APPLE)
+  if(BUILD_INSTALLER)
+    set(CS_FRAMEWORK_DEST "${CMAKE_INSTALL_PREFIX}")
+  endif()
+
+  set(DEFAULT_OSX_SYSROOT /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/)
+
+  if(NOT CMAKE_OSX_SYSROOT AND EXISTS ${DEFAULT_OSX_SYSROOT})
+    set(CMAKE_OSX_SYSROOT ${DEFAULT_OSX_SYSROOT})
+  endif()
+
+   if(EXISTS ${CMAKE_OSX_SYSROOT})
+    set(CMAKE_OSX_DEPLOYMENT_TARGET 10.8)
+  endif()
+
+endif()
+
+set(CDPLIB "lib")
+
+if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
+    add_definitions("-Wno-format")
+#    add_compiler_flags("-g")
+endif()
+
+set(BUILD_BIN_DIR ${BUILD_DIR/bin})
+set(BUILD_LIB_DIR ${BUILD_DIR}/lib)
+
+message(STATUS "BUILD_BIN_DIR set to ${BUILD_BIN_DIR}")
+message(STATUS "BUILD_LIB_DIR set to ${BUILD_LIB_DIR}")
+
+# OS specific checks
+
+TEST_BIG_ENDIAN(BIG_ENDIAN)
+
+## CONFIGURATION ##
+
+SET(BUILD_SHARED_LIBS OFF)
+
+## HEADER/LIBRARY/OTHER CHECKS ##
+
+option(USE_LOCAL_PORTAUDIO "Build and use PA programs" ON)
+
+if(USE_LOCAL_PORTAUDIO)
+  message(STATUS "paprogs to be built")
+else()
+  message(STATUS "paprogs not built")
+endif()
+  
+set(HEADERS_TO_CHECK
+    unistd.h io.h fcntl.h stdint.h
+    sys/time.h sys/types.h termios.h
+    values.h winsock.h sys/socket.h
+    dirent.h )
+
+foreach(header ${HEADERS_TO_CHECK})
+    # Convert to uppercase and replace [./] with _
+    string(TOUPPER ${header} tmp)
+
+    string(REGEX REPLACE [./] "_" upper_header ${tmp})
+    check_include_file(${header} HAVE_${upper_header})
+endforeach()
+
+##set(LIBCDP_CFLAGS -D__BUILDING_LIBCDP)
+
+include_directories(./dev/include)
+#RWD
+include_directories(./dev/newinclude)
+
+#if(WIN32)
+    include_directories(${PORTAUDIO_INCLUDE_DIRECTORY})
+#endif(WIN32)
+
+
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
+# Add the install target
+###??
+
+
+set(LIBCDP_LIBS
+    ${PORTAUDIO_LIBRARY})
+
+if(WIN32)
+    list(APPEND LIBCDP_LIBS "${CDP_WINDOWS_LIBRARIES}")
+endif()
+
+if(LINUX)
+    message(STATUS "Building on Linux")
+    add_definitions(-DCDP97 -Dunix -Dlinux -D_X86_  -DFILE_AMB_SUPPORT)
+    list(APPEND LIBCDP_LIBS m)
+endif()
+
+if(APPLE)
+    message(STATUS "Building on OSX")
+    add_definitions(-mmacosx-version-min=10.8 -Dunix)
+    list(APPEND LIBCDP_LIBS m)
+endif()
+
+if(WIN32)
+    message(STATUS "Building on Windows")
+    add_definitions(-DWIN32 -D_WIN32)
+endif()
+
+#add_compiler_flags(${LIBCDP_CFLAGS} TARGETS ${CDPLIB})
+
+add_subdirectory(dev)
+
+# # uninstall target
+# configure_file(
+#     "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
+#     "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
+#     IMMEDIATE @ONLY)
+
+# add_custom_target(uninstall
+#     COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
+
+## target etags/tags
+if(UNIX)
+  add_custom_target(tags COMMAND etags `find ${CMAKE_CURRENT_SOURCE_DIR} -name \\*.cc -or -name \\*.hh -or -name \\*.cpp -or -name \\*.h -or -name \\*.c | grep -v " " `)
+  add_custom_target(etags DEPENDS tags)
+endif()
+
+# build a CPack driven installer package
+#include (InstallRequiredSystemLibraries)
+
+set (CPACK_PACKAGE_NAME "cdp")
+set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING")
+set (CPACK_PACKAGE_VERSION "8.0.1")
+set (CPACK_PACKAGE_VERSION_MAJOR "8")
+set (CPACK_PACKAGE_VERSION_MINOR "0")
+set (CPACK_PACKAGE_VERSION_PATCH "1")
+include (CPack)
+

+ 504 - 0
COPYING

@@ -0,0 +1,504 @@
+		  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!
+
+

+ 27 - 0
cmake/CheckAtomic.cmake

@@ -0,0 +1,27 @@
+
+include(CheckCSourceCompiles)
+
+if(USE_DOUBLE)
+    set(type "int64_t")
+else()
+    set(type "int32_t")
+endif()
+
+check_c_source_compiles("
+#include <stdio.h>
+#include <stdlib.h>
+
+int main() {
+  static volatile ${type} val = 0;
+  ${type} u =  __sync_add_and_fetch(&val, 1);
+
+  if(u - 1 == 0) { 
+    return 0;
+  } 
+ 
+  return 1; 
+}
+
+" HAVE_ATOMIC_BUILTIN)
+
+

+ 53 - 0
cmake/CompilerOptimizations.cmake

@@ -0,0 +1,53 @@
+
+check_c_compiler_flag(-ftree-vectorize HAS_TREE_VECTORIZE)
+check_cxx_compiler_flag(-ftree-vectorize HAS_CXX_TREE_VECTORIZE)
+if (HAS_TREE_VECTORISE)
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ftree-vectorize")
+endif()
+if (HAS_CXX_TREE_VECTORISE)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftree-vectorize")
+endif()
+
+
+check_c_compiler_flag(-ffast-math HAS_FAST_MATH)
+check_cxx_compiler_flag(-ffast-math HAS_CXX_FAST_MATH)
+if (HAS_FAST_MATH)
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffast-math")
+endif()
+if (HAS_CXX_FAST_MATH)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffast-math")
+endif()
+
+
+if(NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+
+check_c_compiler_flag(-mfpmath=sse HAS_FPMATH_SSE)
+check_cxx_compiler_flag(-mfpmath=sse HAS_CXX_FPMATH_SSE)
+  if (HAS_FPMATH_SSE)
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfpmath=sse")
+endif()
+if (HAS_CXX_FPMATH_SSE)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpmath=sse")
+endif()
+
+endif()
+
+
+check_c_compiler_flag(-msse2 HAS_SSE2)
+check_cxx_compiler_flag(-msse2 HAS_CXX_SSE2)
+  if (HAS_SSE2)
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2")
+endif()
+if (HAS_CXX_SSE2)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2")
+endif()
+
+
+check_c_compiler_flag(-fomit-frame-pointer HAS_OMIT_FRAME_POINTER)
+check_cxx_compiler_flag(-fomit-frame-pointer HAS_CXX_OMIT_FRAME_POINTER)
+if (HAS_OMIT_FRAME_POINTER)
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fomit-frame-pointer")
+endif()
+if (HAS_CXX_OMIT_FRAME_POINTER)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fomit-frame-pointer")
+endif()

+ 22 - 0
cmake/cmake_uninstall.cmake.in

@@ -0,0 +1,22 @@
+if (NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+    message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
+endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
+
+file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
+string(REGEX REPLACE "\n" ";" files "${files}")
+list(REVERSE files)
+foreach (file ${files})
+    message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
+    if (EXISTS "$ENV{DESTDIR}${file}")
+        execute_process(
+            COMMAND @CMAKE_COMMAND@ -E remove "$ENV{DESTDIR}${file}"
+            OUTPUT_VARIABLE rm_out
+            RESULT_VARIABLE rm_retval
+        )
+        if(NOT ${rm_retval} EQUAL 0)
+            message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
+        endif (NOT ${rm_retval} EQUAL 0)
+    else (EXISTS "$ENV{DESTDIR}${file}")
+        message(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
+    endif (EXISTS "$ENV{DESTDIR}${file}")
+endforeach(file)

+ 28 - 0
include/cdplib.h

@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 1983-2013 Composers Desktop Project Ltd
+ * http://www.composersdesktop.com
+ * This file is part of the CDP System.
+ * The CDP System 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. 
+ *
+ * The CDP System 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 the CDP System; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+ 
+/* RWD now reduced to a few global defs! */
+/* TODO: eliminate this header entirely... */
+#include <math.h>          
+#ifndef PI
+#define PI (3.141592653589793)
+#endif
+#ifndef TWOPI
+#define	TWOPI (2.0 * PI)
+#endif

+ 60 - 0
include/chanmask.h

@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 1983-2013 Richard Dobson and Composers Desktop Project Ltd
+ * http://people.bath.ac.uk/masrwd
+ * http://www.composersdesktop.com
+ * This file is part of the CDP System.
+ * The CDP System 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. 
+ *
+ * The CDP System 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 the CDP System; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+ 
+/*chanmask.h*/
+#ifndef __CHANMASK_H_INCLUDED
+#define __CHANMASK_H_INCLUDED
+
+#define NUM_SPEAKER_POSITIONS (18)
+
+
+#define SPEAKER_FRONT_LEFT              0x1
+#define SPEAKER_FRONT_RIGHT             0x2
+#define SPEAKER_FRONT_CENTER            0x4
+#define SPEAKER_LOW_FREQUENCY           0x8
+#define SPEAKER_BACK_LEFT               0x10
+#define SPEAKER_BACK_RIGHT              0x20
+#define SPEAKER_FRONT_LEFT_OF_CENTER    0x40
+#define SPEAKER_FRONT_RIGHT_OF_CENTER   0x80
+#define SPEAKER_BACK_CENTER             0x100
+#define SPEAKER_SIDE_LEFT               0x200
+#define SPEAKER_SIDE_RIGHT              0x400
+#define SPEAKER_TOP_CENTER              0x800
+#define SPEAKER_TOP_FRONT_LEFT          0x1000
+#define SPEAKER_TOP_FRONT_CENTER        0x2000
+#define SPEAKER_TOP_FRONT_RIGHT         0x4000
+#define SPEAKER_TOP_BACK_LEFT           0x8000
+#define SPEAKER_TOP_BACK_CENTER         0x10000
+#define SPEAKER_TOP_BACK_RIGHT          0x20000
+#define SPEAKER_RESERVED                0x80000000
+
+/* my extras*/
+#define SPKRS_UNASSIGNED    (0)
+#define SPKRS_MONO          (0x00000004)  /* RWD 11:20 correction, was 0x01! */
+#define SPKRS_STEREO        (0x00000003)
+#define SPKRS_GENERIC_QUAD  (0x00000033)
+#define SPKRS_SURROUND_LCRS (0x00000107)
+#define SPKRS_DOLBY5_1      (0x0000003f)
+#define SPKRS_SURR_5_0      (0x00000037)    /* March 2008 */
+#define SPKRS_SURR_6_1      (0x0000013f)    /* RELEASE7 2013 */
+#define SPKRS_SURR_7_1      (0x000000ff)    /* OCT 2009 */
+#define SPKRS_CUBE          (0x0002d033)
+#define SPKRS_ACCEPT_ALL    (0xffffffff)     /*???? no use for a file*/
+#endif

+ 72 - 0
include/osbind.h

@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 1983-2013 Composers Desktop Project Ltd
+ * http://www.composersdesktop.com
+ * This file is part of the CDP System.
+ * The CDP System 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. 
+ *
+ * The CDP System 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 the CDP System; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+ 
+/*
+ *	osbind.h - version for porting from Atari to WindowsNT, DOS and Unix
+ */
+#ifndef __OSBIND_INCLUDED__
+#define __OSBIND_INCLUDED__
+#define OSBIND_H_RCSID "$Id: osbind.h%v 1.3 1995/10/28 17:10:20 martin Exp $"
+/*
+ *	$Log: osbind.h%v $
+ * Revision 1.3  1995/10/28  17:10:20  martin
+ * Change memory size constants to user-visible #defines
+ *
+ * Revision 1.2  1994/12/13  00:46:19  martin
+ * Change declarations for portability of Unix
+ *
+ * Revision 1.1  1994/10/31  15:25:06  martin
+ * Initial revision
+ *
+ */
+/* RWD note: size needs to be a signed value, so we can't use size_t */
+/* NB these decls also in sfsys.h */
+void *Malloc(long size);
+void Mfree(void *ptr);
+
+unsigned int hz200(void);
+unsigned int hz1000(void);
+unsigned int getdrivefreespace(const char *path);
+char *legalfilename(char *filename);
+
+#if !defined(_WIN32) 
+char *_fullpath(char *, const char *, size_t);
+#endif
+
+#if defined unix || defined __GNUWIN32__
+int _stricmp(const char *a, const char *b);
+int _strnicmp(const char *a, const char *b, size_t len);
+
+#ifndef O_BINARY
+#define O_BINARY (0)
+#endif
+
+#endif
+
+#if defined(_WIN32)  || defined __GNUWIN32__
+double drand48(void);
+#endif
+void initrand48(void);
+
+#define	 MIN_CDP_MEMORY_K_BBSIZE	(100)
+#define  MAX_CDP_MEMORY_K_BBSIZE 	(20 * 1024)
+#define  MAX_CDP_MEMORY_BBSIZE 		(20 * 1024 * 1024)
+#define  DEFAULT_CDP_MEMORY_BBSIZE	(1024*1024)
+
+#endif	/*__OSBIND_INCLUDED__*/

+ 122 - 0
include/props.h

@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 1983-2013 Richard Dobson and Composers Desktop Project Ltd
+ * http://people.bath.ac.uk/masrwd
+ * http://www.composersdesktop.com
+ * This file is part of the CDP System.
+ * The CDP System 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. 
+ *
+ * The CDP System 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 the CDP System; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+ 
+//props.h
+// latest stab at complete sfprops def including new 32bit float sound format
+// needs linking with sfsys97.lib for that to happen...
+// RWD SEP97: c++ version
+
+#ifndef __PROPS_INCLUDED__
+#define __PROPS_INCLUDED__
+//RWD: NB this does not include a TEXT filetype TW-style...
+#ifdef __cplusplus
+extern "C" {
+#endif
+#include <sfsys.h>
+#ifdef __cplusplus
+}
+#endif
+
+#ifndef __AFX_H__
+
+# ifndef FALSE
+#  define FALSE false
+# endif
+# ifndef TRUE
+#  define TRUE true
+# endif
+# ifndef BOOL
+#  define BOOL bool
+# endif
+#endif
+
+
+
+//typedef enum {wave,analysis,formant,transposition,pitch} wavetype;
+//typedef enum {SHORT8,SHORT16,FLOAT32}					sampletype;
+//typedef enum format {WAVE,AIFF}							fileformat;
+
+typedef enum {
+	UNKNOWN = 0,		//RWD added
+	TEXTFILE,			//(1)	
+	SNDFILE,			//(2)
+	ANALFILE,			//(3)
+	PITCHFILE,			//(4)
+	TRANSPOSFILE,		//(5)
+	FORMANTFILE			//(6)
+} tw_filetype; 					//TW version used in SPEC, GSPEC
+
+
+#ifdef NOTDEF
+
+typedef struct sfprops 
+{
+	long		srate;
+	long		chans;
+	wavetype	type;
+	sampletype	samptype;		//RWD 07:97
+	fileformat	format;			//RWD.04.98
+	long		origsize;
+	long		origrate;
+	long		origchans;		/* pitch, formant,transpos only */
+	int			specenvcnt;		/* formants only */	
+	float		arate;
+	int			winlen;			// aka Mlen
+	int			decfac;			// aka Dfac
+	//double chan_width;		//see, for example, spechoru.c
+	//double half_chan_width;
+} SFPROPS;
+
+#endif
+
+// must be decleared elsewhere for Cpp progs! 
+//TW version from specg2.h
+
+#ifdef __cplusplus
+struct fileprops {		// may not need this anywhere else...
+	long	srate;
+	long   	channels;
+	tw_filetype filetype;		 		
+	long   	stype;
+	long   	origstype; 		/* float files ony from here downwars */
+	long   	origrate;	
+	long   	origchans;	/* pitch, formant,transpos only */
+	int	specenvcnt;	/* formants only */
+	float  	arate;
+	int    	Mlen;
+	int    	Dfac;
+	fileprops();		  //constructor from spec.cpp
+	virtual ~fileprops();
+	const fileprops& operator=(const fileprops &);
+	int operator==(const fileprops &) const;
+};
+
+typedef struct fileprops *fileptr;		  // probably embed whole struct (or class?)
+
+//these are only semi_object-oriented...should be derived from sffile class...
+//TODO: reconvert read funcs to use pointer to props
+BOOL sfheadread(int fd,SFPROPS &props);
+BOOL sndheadread(int fd,SFPROPS &props);
+BOOL sfwave_headwrite(int fd,const SFPROPS &props);		//const...
+#endif
+
+extern char *props_errstr;
+
+#endif

+ 420 - 0
include/sfsys.h

@@ -0,0 +1,420 @@
+/*
+ * Copyright (c) 1983-2013 Martin Atkins, Richard Dobson and Composers Desktop Project Ltd
+ * http://people.bath.ac.uk/masrwd
+ * http://www.composersdesktop.com
+ *
+ This file is part of the CDP System.
+
+    The CDP System 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.
+
+    The CDP System 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 the CDP System; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA
+ *
+ */
+
+/*
+ *  Sound Filing System - resident library interface header
+ *
+ *  Copyright M. C. Atkins, 1987, 1988, 1989, 1990, RWD revisions 1997,1998,199,2000,2001
+ *  All Rights Reserved.
+ *
+ *  Portable version for WindowsNT, DOS and Unix
+ */
+#ifndef __CDP_SFSYS_INCLUDED__
+#define __CDP_SFSYS_INCLUDED__
+#define SFSYS_H_RCSID   "$Id: sfsys.h%v 4.1 1994/10/31 15:19:34 martin Exp $"
+
+/*
+ *  $Log: sfsys.h%v $
+ * Revision 4.1  1994/10/31  15:19:34  martin
+ * Starting with RCS
+ *
+ */
+
+/*
+ *  This version of sfsys.h was introduced with version 2.33 of sfsys.prg
+ *
+ *  ver 3.04    31/ 1/93 MCA - changes introducing license control
+ *  ver 3.05    25/ 5/93 MCA - add sfdata
+ */
+
+/*  RWD: SFSYSEX version (c) CDP 2000,2001 */
+/* NB  this now defines only the snd~ level routines.
+   all (deprecated) sf~ routines  now in sffuncs.h
+   MAY BE REMOVED ALTOGETHER IN TIME!
+*/
+
+/* RWD March 2008 added MC_SURR_5_0 */
+
+/* RWD Aug 2009 sfsys64, restored this, needed by dirsf */
+/* NB: sfsys64: sf_direct.length now unsigned, so will report a 4GB file size */
+
+/* Feb 2010: discover if we are  64 bit */
+#ifdef __GNUC__ 
+# ifdef __LP64__
+#   define CDPLONG64
+# endif
+#endif
+
+
+extern int _sfverno;
+#define sfverno()   (_sfverno)      /* sfsys version number */
+
+
+/* SFSYSEX: new structures; may be extended even further... */
+typedef enum {wt_wave,wt_analysis,wt_formant,wt_transposition,wt_pitch,wt_binenv} wavetype;
+typedef enum {SHORT8,SHORT16,FLOAT32,INT_32,INT2424,INT2432,INT2024,INT_MASKED}     sampletype;
+/* very likely we will support .au and .snd too, and maybe even raw */
+typedef enum wt_format {FMT_UNKNOWN = -1,WAVE,WAVE_EX,AIFF,AIFC}        fileformat;
+typedef enum  {CDP_CREATE_NORMAL,CDP_CREATE_TEMPORARY,CDP_CREATE_RDONLY} cdp_create_mode;
+/* MC_WAVE_EX is a temporary one to cover abstruse infile formats! */
+typedef enum { STDWAVE,MC_STD,MC_MONO,MC_STEREO,MC_QUAD,MC_LCRS,MC_BFMT,MC_DOLBY_5_1,MC_SURR_5_0,MC_SURR_6_1,MC_SURR_7_1,MC_CUBE,MC_WAVE_EX } channelformat;
+
+/* the main format structure, to be used for all new programs! */
+/* this may expand to include new things, possibly PVOC-EX too */
+/* NB any new fields should be added at the bottom ONLY!. Best of all is to define a new
+ * structure, with SFPROPS as the first element
+ */
+typedef struct sfprops 
+{
+    int     srate;
+    int     chans;
+    wavetype    type;
+    sampletype  samptype;       
+    fileformat  format;         
+    channelformat chformat;     
+    int     origsize;       /*RWD 3:2000 needs UPDATING in pvoc to register all new sample types */
+    int     origrate;
+    int     origchans;      /* pitch, formant,transpos only */
+    int     specenvcnt;     /* formants only */
+    float   arate;
+    int     winlen;                 /*aka Mlen*/
+    int     decfac;                 /* aka Dfac*/
+    /*RWD.6.99 for envelope files*/
+    float   window_size;
+} SFPROPS;
+
+
+
+
+/* SFSYSEX PEAK chunk support: use CHPEAK to avoid likely name clashes (e.g. Release 4!)  */
+typedef struct chpeak {
+    float value;            /* absolute value: 0dBFS = 1.0  */
+    unsigned int position;  /* in (muti-channel)sample frames */
+} CHPEAK;
+
+
+/*
+ *  This is the Sound Filing System initialisation routine, which must be
+ *  called before doing ANYTHING else with the SFSystem.
+ *  It returns 0 on success, or 1 on failure.
+ */
+/* the name is not used! */
+extern int sflinit(const char *progname);
+
+/*
+ *  Print a description of the most-recent error on stderr.
+ *  calling this only makes sense after an error-return from
+ *  a SFSystem routine.
+ */
+extern void  sfperror(const char *msg);
+
+/*
+ *  return the string that would be printed by sfperror.
+ */
+extern char *  sferrstr(void);
+
+/*
+ *  return the numeric error indication.
+ */
+extern int  sferrno();
+
+
+extern int sfinit();     /* deprecated */
+#define sfexit exit      /* deprecated */
+
+/*
+ *  the access routine, etc
+ */
+extern void  sffinish(void);
+
+/* PEAK  support, all sample formats:
+ * ability to write full, minimum or PEAK-only header
+ */
+/* header-size flags*/
+#define SFILE_CDP       (2)
+#define SFILE_PEAKONLY  (1)
+#define SFILE_MINIMUM   (0)
+
+/* support opening read-only files - e.g from CD, also multiple opens */
+/* All new progs should use RDONLY wherever possible, when opening existing files */
+#define CDP_OPEN_RDONLY     (0)
+#define CDP_OPEN_RDWR       (1)
+
+/* return 0 for true */
+int sndreadpeaks(int sfd,int channels,CHPEAK peakdata[],int *peaktime);
+int sndputpeaks(int sfd,int channels,const CHPEAK peakdata[]);
+
+/*
+ *  Next routines for buffered access to files
+ */ 
+int snd_getchanformat(int sfd, channelformat *chformat);
+const char * snd_getfilename(int ifd);                                                               
+int sndgetchanmask(int sfd);
+extern int sndopen(const char *name);
+/* sfsysEx extended version - supports all formats.
+  * requires use of all snd~Ex functions */
+extern int sndopenEx(const char *name, int auto_scale,int access);
+
+extern int sndcreat(const char *name, int size, int stype);
+/* sfsysEx extended version*/
+extern int sndcreat_formatted(const char *fn, int size, int stype,
+                              int channels,int srate,cdp_create_mode mode);  /*SFSYS98*/
+
+/*need this for WAVE_EX,etc*/
+int
+sndcreat_ex(const char *name, int size,SFPROPS *props,int min_header,cdp_create_mode mode);
+
+/* read sfile props into new structure, all in one go */
+extern int snd_headread(int fd,SFPROPS *props);
+
+extern int sndclose(int sfd);
+extern int sndsize(int sfd);
+extern int sndseek(int sfd, int dist, int whence);
+extern int sndtell(int sfd);
+extern int sndsetbuf(int sfd, char *buf, int bufsize);
+extern int snd_makepath(char path[],const char* sfname);
+/*RWD OCT97: as above, for sndfiles*/
+extern int sndgetwordsize(int sfd);
+
+/* set sndfile for deletion */
+extern int sndunlink(int sndfd);                    
+/*recognise shortcuts in WIN32 - ~should~ be portable to unix/mac alias
+ */
+int snd_is_shortcut(int sfd);
+/*#endif*/
+
+/* calls sfformat internally */
+int snd_fileformat(int sfd, fileformat *pfmt);
+
+/*
+ *  float-oriented operations : DEPRECATED;  see below for extended versions 
+ */
+extern int fgetfloat(float *fp, int sfd);
+extern int fputfloat(float *fp, int sfd);
+extern int fgetfbuf(float *fp, int count, int sfd);
+extern int fputfbuf(float *fp, int count, int sfd);
+                                                                             
+/*
+ *  short-oriented operations  : DEPRECATED;
+ */
+extern int fgetshort(short *sp, int sfd);
+extern int fputshort(short *sp, int sfd);
+extern int fgetsbuf(short *sp, int count, int sfd);
+extern int fputsbuf(short *sp, int count, int sfd);
+
+extern int sndgetprop(int sfd, char *propname, char *dest, int lim);
+extern int sndputprop(int sfd, char *propname, char *src, int size);
+extern int sndrmprop(int sfd, char *propname);
+extern int snddirprop(int sfd, int (*func)(char *propname, int propsize));
+
+
+/* sfsysEx extended versions, supporting all formats */
+/* set expect_floats if reading from a type-1 32bit file known to be floats */
+/* it is best not to mix: e.g don;t use fgetfloatEx with sndtell() */ 
+extern int fgetfloatEx(float *fp, int sfd,int expect_floats);
+extern int fgetfbufEx(float *fp, int count, int sfd,int expect_floats);
+extern int fputfloatEx(float *fp, int sfd);
+extern int fputfbufEx(float *fp, int count, int sfd);
+extern int sndcloseEx(int sfd);
+
+extern int fgetshortEx(short *sp, int sfd,int expect_floats);
+extern int fgetsbufEx(short *sp, int count, int sfd,int expect_floats);
+extern int fputshortEx(short *sp, int sfd);
+extern int fputsbufEx(short *sp, int count, int sfd);
+
+extern int sndseekEx(int sfd, int dist, int whence);    /*uses buffered sf_routines*/
+extern int sndsizeEx(int sfd);
+extern int sndtellEx(int sfd);
+
+/*
+ *  definitions for use with sfdir
+ */
+/*
+ *  values for the flags field
+ */
+#define SFFLG_EMPTY     (1) /* the SFile is empty */
+#define SFFLG_LAST      (2) /* the SFile is the last on the disk */
+#define SFFLG_SAMPLE    (4) /* sample type was set (only sfdir) */
+#define SFFLG_ISOPEN    (8) /* file is open (internal use only) */
+#define SFFLG_TODELETE  (16)    /* file to be deleted (ditto) */
+#define SFFLG_IOERROR   (32)    /* sfdir only - error reading file information */
+
+/*
+ *  selectors for sfdir
+ */
+#define SFDIR_EMPTY (1) /* call func with empty SFiles */
+#define SFDIR_USED  (2) /* call func with non-empty SFiles */
+#define SFDIR_SAMPLE    (4) /* call func with (non-empty) sample SFiles */
+
+#define SFDIR_ALL   (3) /* call func with all SFiles */
+
+#define SFDIR_IGPREFIX  (16)    /* show files irrespective of prefix */
+
+#define SFDIR_FOUND (0) /* function accepted file */
+#define SFDIR_NOTFOUND  (1) /* no file was accepted */
+#define SFDIR_ERROR (-1)    /* and error occured during sfdir */
+
+/*
+ *  Other useful constants
+ */
+/* NB in time, these will be REMOVED! */
+#define SECSIZE     (512)       /* bytes/sector on the disk */
+#define LOGSECSIZE  (9)     /* log2(ditto)  */
+
+#ifdef SFFUNCS
+#define SF_MAGIC        (0x15927624)    /* value of _sfmagic() */
+#define SF_CMAGIC       (0x27182835)    /* magic number for configuration */
+#define SF_UNLKMAGIC    (0x46689275)    /* magic value for rdiskunlck() */
+#endif
+
+#define SF_MAXFILES (1000)      /* max no. of SFfiles open at once */
+#define MAXSNDFILES (1000)      /* max no. of sndfiles open at once */
+
+/* RWD  reduced property size, to assist bad unix progs to read soundifles! */
+/* also, we are reducing dependency on CDP props, through new file formats */
+#define PROPSIZE    (800)       /* size of the property area in hdrs */
+#ifndef _WINNT_                 
+# ifdef MAXSHORT
+#  undef MAXSHORT
+# endif
+# define MAXSHORT   (32767.0)   /* maxint for shorts (as a float);  used EVERYWHERE! */
+# ifdef MAXLONG
+#  undef MAXLONG
+# endif
+/* NOT USED in CDP */
+# define MAXLONG  (2147483648.0)      /* RWD 18:March 2008,  was 214748367 */
+# ifdef MAXINT
+#  undef MAXINT
+# endif
+# define MAXINT MAXLONG
+#endif
+/* NB: not used in sfsys or CDP */
+#define MAX24BIT  (8388607.0)
+
+/*
+ *  sample types
+ */
+#define SAMP_SHORT  (0)     /* 16-bit short integers */
+#define SAMP_FLOAT  (1)     /* 32-bit (IEEE) floating point */
+/* sfsysEx Extended type support */
+#define SAMP_BYTE   (2)     /*recognize 8bit soundfiles*/
+#define SAMP_LONG   (3)     /* four most likely formats*/
+#define SAMP_2424   (4)     
+#define SAMP_2432   (5)     /* illegal for AIFF, and probably for WAVE too , but what the...*/
+#define SAMP_2024   (6)     /* curioisity value: used by Alesis ADAT */
+#define SAMP_MASKED (7)     /*some weird WAVE_EX format!*/
+
+
+/*
+ *  Generate the program registration number
+ */
+#define PROGRAM_NUMBER(pn)  unsigned long _SF_prognum = (pn)
+
+/*
+ *  Values for sferrno
+ */
+#define EBASEERR    (100)
+
+#define ESFNOSPACE      (EBASEERR+ 0)
+#define ESFNOTOPEN      (EBASEERR+ 1)
+#define ESFRDERR        (EBASEERR+ 2)
+#define ESFWRERR        (EBASEERR+ 3)
+#define ESFNOSFD        (EBASEERR+ 4)
+#define ESFNOTFOUND     (EBASEERR+ 5)
+#define ESFNOMEM        (EBASEERR+ 6)
+#define ESFDUPFNAME     (EBASEERR+ 7)
+#define ESFBADMAG       (EBASEERR+ 8)
+#define ESFNOCONFIG     (EBASEERR+ 9)
+#define ESFNOTINIT      (EBASEERR+11)
+#define ESFCONSIST      (EBASEERR+12)
+#define ESFNOSTYPE      (EBASEERR+13)
+#define ESFBADRATE      (EBASEERR+14)
+#define ESFBADNCHANS    (EBASEERR+15)
+#define ESFBADPARAM     (EBASEERR+16)
+#define ESFNOSEEK       (EBASEERR+17)
+#define ESFBADSRCDST    (EBASEERR+18)
+#define ESFLOSEDATA     (EBASEERR+19)
+#define ESFBADADDR      (EBASEERR+20)
+#define ESFPTHTOLONG    (EBASEERR+21)
+#define ESFILLSFNAME    (EBASEERR+22)
+#define ESFPREFTOLONG   (EBASEERR+23)
+#define ESFLOCKED       (EBASEERR+24)
+#define ESFILLREGNAM    (EBASEERR+25)
+#define ESFNOSTRMR      (EBASEERR+26)
+#define ESFHARDCONFIG   (EBASEERR+27)
+#define ESFUNDERRUN     (EBASEERR+28)
+#define ESFBUFFOPER     (EBASEERR+29)
+#define ESFSETBUFFER    (EBASEERR+30)
+#define ESFOVERRUN      (EBASEERR+31)
+#define ESFNOTPLAYING   (EBASEERR+32)
+#define ESFPLAYING      (EBASEERR+33)
+#define ESFUSESDMA      (EBASEERR+34)
+#define ESFRECING       (EBASEERR+35)
+#define ESFNOTRECING    (EBASEERR+36)
+#define ESFREADONLY     (EBASEERR+37)
+
+#define ELASTERR        (ESFREADONLY)
+
+/*
+ *  Atari things we we will also have to emulate
+ */
+void *Malloc(long size);
+void Mfree(void *);
+
+/*CDP98: now a func, so can round negative numbers properly!*/
+/* NB in WIN32 sfsys.c: this is implemented in asssembler for great speed! */
+#if defined _MSC_VER || defined __GNUWIN32__
+// NB: needs to be a long as lround is defined as such
+extern long cdp_round(double val);
+#define round(x) cdp_round((x))
+#endif
+#ifdef unix
+#define cdp_round(x) lround((x))
+#endif
+/* unix math.h does not include these macros */
+#ifndef __cplusplus
+#ifndef min
+#define min(x,y)    ( ((x)>(y)) ? (y) : (x) )
+#endif
+
+#ifndef max
+#define max(x,y)    ( ((x)>(y)) ? (x) : (y) )
+#endif
+#endif
+/*
+ *  Globals internal to the porting library
+ */
+extern int rsferrno;
+extern char *rsferrstr;
+extern char *props_errstr;
+
+/*RWD: yet to be tested: only for 32bit platforms */
+#define IS_DENORMAL(f) (((*(unsigned int*)&f)&0x7f800000)==0)
+/* use like this:
+if (IS_DENORMAL(x)) x = 0.0f;
+*/
+
+int sndrewind(int sfd);
+
+#endif      

BIN
libaaio/libaaio-0.3.1.tar.bz2