Richard W Dobson 3 жил өмнө
parent
commit
1c39d4063a
12 өөрчлөгдсөн 0 нэмэгдсэн , 3166 устгасан
  1. 0 18
      blur/CMakeLists.txt
  2. 0 314
      blur/Makefile
  3. 0 34
      blur/Makefile.linux
  4. 0 35
      blur/Makefile.mingw
  5. 0 34
      blur/Makefile.osx
  6. 0 36
      blur/Makefiled.osx
  7. 0 1066
      blur/ap_blur.c
  8. BIN
      blur/ap_blur.o
  9. 0 1391
      blur/blur.c
  10. BIN
      blur/blur.o
  11. 0 238
      blur/main.c
  12. BIN
      blur/main.o

+ 0 - 18
blur/CMakeLists.txt

@@ -1,18 +0,0 @@
-if(APPLE)
-  set(CMAKE_C_FLAGS "-O2 -Wall -mmacosx-version-min=10.8 -Dunix")
-else()
-  if(MINGW)
-    set(CMAKE_C_FLAGS "-O2 -Wall -DWIN32 -D_WIN32")
-  else()
-    set(CMAKE_C_FLAGS "-O2 -Wall -Dlinux -Dunix")
-  endif()
-endif()
-
-link_directories(../cdp2k ../sfsys)
-
-include_directories(../../include)
-
-add_executable(blur main.c ap_blur.c blur.c)
-
-target_link_libraries(blur cdp2k sfsys ${EXTRA_LIBRARIES})
-my_install(blur)

+ 0 - 314
blur/Makefile

@@ -1,314 +0,0 @@
-# CMAKE generated file: DO NOT EDIT!
-# Generated by "Unix Makefiles" Generator, CMake Version 3.14
-
-# Default target executed when no arguments are given to make.
-default_target: all
-
-.PHONY : default_target
-
-# Allow only one "make -f Makefile2" at a time, but pass parallelism.
-.NOTPARALLEL:
-
-
-#=============================================================================
-# Special targets provided by cmake.
-
-# Disable implicit rules so canonical targets will work.
-.SUFFIXES:
-
-
-# Remove some rules from gmake that .SUFFIXES does not remove.
-SUFFIXES =
-
-.SUFFIXES: .hpux_make_needs_suffix_list
-
-
-# Suppress display of executed commands.
-$(VERBOSE).SILENT:
-
-
-# A target that is always out of date.
-cmake_force:
-
-.PHONY : cmake_force
-
-#=============================================================================
-# Set environment variables for the build.
-
-# The shell in which to execute make rules.
-SHELL = /bin/sh
-
-# The CMake executable.
-CMAKE_COMMAND = /usr/local/bin/cmake
-
-# The command to remove a file.
-RM = /usr/local/bin/cmake -E remove -f
-
-# Escaping for special characters.
-EQUALS = =
-
-# The top-level source directory on which CMake was run.
-CMAKE_SOURCE_DIR = /Users/Leverhulme/cdp/Mac64/CDPrelease7src
-
-# The top-level build directory on which CMake was run.
-CMAKE_BINARY_DIR = /Users/Leverhulme/cdp/Mac64/CDPrelease7src
-
-#=============================================================================
-# Targets provided globally by CMake.
-
-# Special rule for the target install/local
-install/local: preinstall
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
-	/usr/local/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
-.PHONY : install/local
-
-# Special rule for the target install/local
-install/local/fast: preinstall/fast
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
-	/usr/local/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
-.PHONY : install/local/fast
-
-# Special rule for the target install/strip
-install/strip: preinstall
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
-	/usr/local/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
-.PHONY : install/strip
-
-# Special rule for the target install/strip
-install/strip/fast: preinstall/fast
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
-	/usr/local/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
-.PHONY : install/strip/fast
-
-# Special rule for the target install
-install: preinstall
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
-	/usr/local/bin/cmake -P cmake_install.cmake
-.PHONY : install
-
-# Special rule for the target install
-install/fast: preinstall/fast
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
-	/usr/local/bin/cmake -P cmake_install.cmake
-.PHONY : install/fast
-
-# Special rule for the target list_install_components
-list_install_components:
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\""
-.PHONY : list_install_components
-
-# Special rule for the target list_install_components
-list_install_components/fast: list_install_components
-
-.PHONY : list_install_components/fast
-
-# Special rule for the target package_source
-package_source:
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool for source..."
-	cd /Users/Leverhulme/cdp/Mac64/CDPrelease7src && /usr/local/bin/cpack --config ./CPackSourceConfig.cmake /Users/Leverhulme/cdp/Mac64/CDPrelease7src/CPackSourceConfig.cmake
-.PHONY : package_source
-
-# Special rule for the target package_source
-package_source/fast: package_source
-
-.PHONY : package_source/fast
-
-# Special rule for the target rebuild_cache
-rebuild_cache:
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
-	/usr/local/bin/cmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
-.PHONY : rebuild_cache
-
-# Special rule for the target rebuild_cache
-rebuild_cache/fast: rebuild_cache
-
-.PHONY : rebuild_cache/fast
-
-# Special rule for the target edit_cache
-edit_cache:
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
-	/usr/local/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
-.PHONY : edit_cache
-
-# Special rule for the target edit_cache
-edit_cache/fast: edit_cache
-
-.PHONY : edit_cache/fast
-
-# Special rule for the target package
-package: preinstall
-	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Run CPack packaging tool..."
-	cd /Users/Leverhulme/cdp/Mac64/CDPrelease7src && /usr/local/bin/cpack --config ./CPackConfig.cmake
-.PHONY : package
-
-# Special rule for the target package
-package/fast: package
-
-.PHONY : package/fast
-
-# The main all target
-all: cmake_check_build_system
-	cd /Users/Leverhulme/cdp/Mac64/CDPrelease7src && $(CMAKE_COMMAND) -E cmake_progress_start /Users/Leverhulme/cdp/Mac64/CDPrelease7src/CMakeFiles /Users/Leverhulme/cdp/Mac64/CDPrelease7src/dev/blur/CMakeFiles/progress.marks
-	cd /Users/Leverhulme/cdp/Mac64/CDPrelease7src && $(MAKE) -f CMakeFiles/Makefile2 dev/blur/all
-	$(CMAKE_COMMAND) -E cmake_progress_start /Users/Leverhulme/cdp/Mac64/CDPrelease7src/CMakeFiles 0
-.PHONY : all
-
-# The main clean target
-clean:
-	cd /Users/Leverhulme/cdp/Mac64/CDPrelease7src && $(MAKE) -f CMakeFiles/Makefile2 dev/blur/clean
-.PHONY : clean
-
-# The main clean target
-clean/fast: clean
-
-.PHONY : clean/fast
-
-# Prepare targets for installation.
-preinstall: all
-	cd /Users/Leverhulme/cdp/Mac64/CDPrelease7src && $(MAKE) -f CMakeFiles/Makefile2 dev/blur/preinstall
-.PHONY : preinstall
-
-# Prepare targets for installation.
-preinstall/fast:
-	cd /Users/Leverhulme/cdp/Mac64/CDPrelease7src && $(MAKE) -f CMakeFiles/Makefile2 dev/blur/preinstall
-.PHONY : preinstall/fast
-
-# clear depends
-depend:
-	cd /Users/Leverhulme/cdp/Mac64/CDPrelease7src && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
-.PHONY : depend
-
-# Convenience name for target.
-dev/blur/CMakeFiles/blur.dir/rule:
-	cd /Users/Leverhulme/cdp/Mac64/CDPrelease7src && $(MAKE) -f CMakeFiles/Makefile2 dev/blur/CMakeFiles/blur.dir/rule
-.PHONY : dev/blur/CMakeFiles/blur.dir/rule
-
-# Convenience name for target.
-blur: dev/blur/CMakeFiles/blur.dir/rule
-
-.PHONY : blur
-
-# fast build rule for target.
-blur/fast:
-	cd /Users/Leverhulme/cdp/Mac64/CDPrelease7src && $(MAKE) -f dev/blur/CMakeFiles/blur.dir/build.make dev/blur/CMakeFiles/blur.dir/build
-.PHONY : blur/fast
-
-ap_blur.o: ap_blur.c.o
-
-.PHONY : ap_blur.o
-
-# target to build an object file
-ap_blur.c.o:
-	cd /Users/Leverhulme/cdp/Mac64/CDPrelease7src && $(MAKE) -f dev/blur/CMakeFiles/blur.dir/build.make dev/blur/CMakeFiles/blur.dir/ap_blur.c.o
-.PHONY : ap_blur.c.o
-
-ap_blur.i: ap_blur.c.i
-
-.PHONY : ap_blur.i
-
-# target to preprocess a source file
-ap_blur.c.i:
-	cd /Users/Leverhulme/cdp/Mac64/CDPrelease7src && $(MAKE) -f dev/blur/CMakeFiles/blur.dir/build.make dev/blur/CMakeFiles/blur.dir/ap_blur.c.i
-.PHONY : ap_blur.c.i
-
-ap_blur.s: ap_blur.c.s
-
-.PHONY : ap_blur.s
-
-# target to generate assembly for a file
-ap_blur.c.s:
-	cd /Users/Leverhulme/cdp/Mac64/CDPrelease7src && $(MAKE) -f dev/blur/CMakeFiles/blur.dir/build.make dev/blur/CMakeFiles/blur.dir/ap_blur.c.s
-.PHONY : ap_blur.c.s
-
-blur.o: blur.c.o
-
-.PHONY : blur.o
-
-# target to build an object file
-blur.c.o:
-	cd /Users/Leverhulme/cdp/Mac64/CDPrelease7src && $(MAKE) -f dev/blur/CMakeFiles/blur.dir/build.make dev/blur/CMakeFiles/blur.dir/blur.c.o
-.PHONY : blur.c.o
-
-blur.i: blur.c.i
-
-.PHONY : blur.i
-
-# target to preprocess a source file
-blur.c.i:
-	cd /Users/Leverhulme/cdp/Mac64/CDPrelease7src && $(MAKE) -f dev/blur/CMakeFiles/blur.dir/build.make dev/blur/CMakeFiles/blur.dir/blur.c.i
-.PHONY : blur.c.i
-
-blur.s: blur.c.s
-
-.PHONY : blur.s
-
-# target to generate assembly for a file
-blur.c.s:
-	cd /Users/Leverhulme/cdp/Mac64/CDPrelease7src && $(MAKE) -f dev/blur/CMakeFiles/blur.dir/build.make dev/blur/CMakeFiles/blur.dir/blur.c.s
-.PHONY : blur.c.s
-
-main.o: main.c.o
-
-.PHONY : main.o
-
-# target to build an object file
-main.c.o:
-	cd /Users/Leverhulme/cdp/Mac64/CDPrelease7src && $(MAKE) -f dev/blur/CMakeFiles/blur.dir/build.make dev/blur/CMakeFiles/blur.dir/main.c.o
-.PHONY : main.c.o
-
-main.i: main.c.i
-
-.PHONY : main.i
-
-# target to preprocess a source file
-main.c.i:
-	cd /Users/Leverhulme/cdp/Mac64/CDPrelease7src && $(MAKE) -f dev/blur/CMakeFiles/blur.dir/build.make dev/blur/CMakeFiles/blur.dir/main.c.i
-.PHONY : main.c.i
-
-main.s: main.c.s
-
-.PHONY : main.s
-
-# target to generate assembly for a file
-main.c.s:
-	cd /Users/Leverhulme/cdp/Mac64/CDPrelease7src && $(MAKE) -f dev/blur/CMakeFiles/blur.dir/build.make dev/blur/CMakeFiles/blur.dir/main.c.s
-.PHONY : main.c.s
-
-# Help Target
-help:
-	@echo "The following are some of the valid targets for this Makefile:"
-	@echo "... all (the default if no target is provided)"
-	@echo "... clean"
-	@echo "... depend"
-	@echo "... install/local"
-	@echo "... install/strip"
-	@echo "... install"
-	@echo "... list_install_components"
-	@echo "... package_source"
-	@echo "... rebuild_cache"
-	@echo "... edit_cache"
-	@echo "... package"
-	@echo "... blur"
-	@echo "... ap_blur.o"
-	@echo "... ap_blur.i"
-	@echo "... ap_blur.s"
-	@echo "... blur.o"
-	@echo "... blur.i"
-	@echo "... blur.s"
-	@echo "... main.o"
-	@echo "... main.i"
-	@echo "... main.s"
-.PHONY : help
-
-
-
-#=============================================================================
-# Special targets to cleanup operation of make.
-
-# Special rule to run CMake to check the build system integrity.
-# No rule that depends on this can have commands that come from listfiles
-# because they might be regenerated.
-cmake_check_build_system:
-	cd /Users/Leverhulme/cdp/Mac64/CDPrelease7src && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
-.PHONY : cmake_check_build_system
-

+ 0 - 34
blur/Makefile.linux

@@ -1,34 +0,0 @@
-#
-#	Linux makefile for blur © Richard Dobson, CDP Ltd 2014
-#
-#
-CC=gcc
-CFLAGS= -O2 -Wall -Dlinux -Dunix -I ../include -I ../../include
-SFSYS= ../../lib/libsfsys.a
-CDP2K= ../../lib/libcdp2k.a
-PROG=blur
-BINS= main.o ap_blur.o blur.o
-.c.o:
-	$(CC) $(CFLAGS) -c $<
-#
-#	targets
-#
-all:	$(PROG)
-
-$(PROG):	$(BINS)
-	$(CC) $(CFLAGS) $(BINS) -o $(PROG) $(CDP2K) $(SFSYS) -lm
-
-clean:
-	rm -f $(PROG)
-
-veryclean:	clean
-	rm -f *.o
-
-install:	$(PROG)
-	cp $(PROG) ../Release
-#
-#	dependencies
-#
-
-
-

+ 0 - 35
blur/Makefile.mingw

@@ -1,35 +0,0 @@
-#
-#	mingw makefile for blur © Richard Dobson, CDP Ltd 2014
-#
-#
-CC=gcc
-CFLAGS= -O2 -Wall -DWIN32 -D_WIN32 -I ../include -I ../../include
-SFSYS= ../../lib/libsfsys.a
-CDP2K= ../../lib/libcdp2k.a
-MSLIBS= -lkernel32 -luser32 -lole32 -lwinspool -lodbc32 -lgdi32 -lcomdlg32 -ladvapi32 -lshell32 -loleaut32 -luuid
-PROG=blur.exe
-BINS= main.o ap_blur.o blur.o
-.c.o:
-	$(CC) $(CFLAGS) -c $<
-#
-#	targets
-#
-all:	$(PROG)
-
-$(PROG):	$(BINS)
-	$(CC) $(CFLAGS) $(BINS) -o $(PROG) $(CDP2K) $(SFSYS) $(MSLIBS)
-
-clean:
-	rm -f $(PROG)
-
-veryclean:	clean
-	rm -f *.o
-
-install:	$(PROG)
-	cp $(PROG) ../Release
-#
-#	dependencies
-#
-
-
-

+ 0 - 34
blur/Makefile.osx

@@ -1,34 +0,0 @@
-#
-#	OSX makefile for blur � Richard Dobson, CDP Ltd 2014
-#
-#
-CC=cc
-CFLAGS= -O -Wall -mmacosx-version-min=10.8 -Dunix -I ../include -I ../../include
-SFSYS= ../../lib/libsfsys.a
-CDP2K= ../../lib/libcdp2k.a
-PROG=blur
-BINS= main.o ap_blur.o blur.o
-.c.o:
-	$(CC) $(CFLAGS) -c $<
-#
-#	targets
-#
-all:	$(PROG)
-
-$(PROG):	$(BINS)
-	$(CC) $(CFLAGS) $(BINS) -o $(PROG) $(CDP2K) $(SFSYS)
-
-clean:
-	rm -f $(PROG)
-
-veryclean:	clean
-	rm -f *.o
-
-install:	$(PROG)
-	cp $(PROG) ../Release
-#
-#	dependencies
-#
-
-
-

+ 0 - 36
blur/Makefiled.osx

@@ -1,36 +0,0 @@
-#
-#	OSX debug makefile (with PVOCEX support)  for blur � Richard Dobson, CDP Ltd 2014,2022
-#
-#
-CC=cc
-OPT = -g
-CFLAGS= $(OPT) -Wall -mmacosx-version-min=10.8 -Dunix -I ../newinclude -I ../include
-LIBDIR = ../../lib
-LIBS = -lsfsysd -lcdp2kd -lpvxio2d
-
-PROG=blur
-BINS= main.o ap_blur.o blur.o
-.c.o:
-	$(CC) $(CFLAGS) -c $<
-#
-#	targets
-#
-all:	$(PROG)
-
-$(PROG):	$(BINS)
-	$(CC) $(CFLAGS) $(BINS) -o $(PROG) -L$(LIBDIR) $(LIBS)
-
-clean:
-	rm -f $(PROG)
-
-veryclean:	clean
-	rm -f *.o
-
-install:	$(PROG)
-	cp $(PROG) ../Release
-#
-#	dependencies
-#
-
-
-

+ 0 - 1066
blur/ap_blur.c

@@ -1,1066 +0,0 @@
-/*
- * Copyright (c) 1983-2013 Trevor Wishart and Composers Desktop Project Ltd
- * http://www.trevorwishart.co.uk
- * 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
- *
- */
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <structures.h>
-#include <cdpmain.h>
-#include <tkglobals.h>
-#include <pnames.h>
-#include <blur.h>
-#include <processno.h>
-#include <modeno.h>
-#include <globcon.h>
-#include <logic.h>
-#include <filetype.h>
-#include <mixxcon.h>
-#include <flags.h>
-#include <speccon.h>
-#include <arrays.h>
-#include <special.h>
-#include <formants.h>
-#include <sfsys.h>
-#include <osbind.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-#include <srates.h>
-
-/********************************************************************************************/
-/********************************** FORMERLY IN buffers.c ***********************************/
-/********************************************************************************************/
-
-static int      allocate_weave_buffer(dataptr dz);
-
-/********************************************************************************************/
-/********************************** FORMERLY IN pconsistency.c ******************************/
-/********************************************************************************************/
-
-static int      check_consistency_of_scat_params(dataptr dz);
-
-/********************************************************************************************/
-/********************************** FORMERLY IN preprocess.c ********************************/
-/********************************************************************************************/
-
-#define RSIZE           (4)             /* Number of windowfulls of rand numbers in CHORU */
-static int  avrg_preprocess(dataptr dz);
-static int  chor_preprocess(dataptr dz);
-static int  set_chorus_processing_type(dataptr dz);
-static int  setup_randtables_for_rapid_rand_processing(dataptr dz);
-static int  drnk_preprocess(dataptr dz);
-static int  scat_preprocess(dataptr dz);
-static int  convert_params_for_scat(dataptr dz);
-static int  setup_internal_arrays_and_preset_internal_variables_for_scat(dataptr dz);
-
-/********************************************************************************************/
-/********************************** FORMERLY IN specialin.c *********************************/
-/********************************************************************************************/
-
-//static int  read_specshuffle_data(char *str,dataptr dz);
-static int  read_specweave_data(char *filename,dataptr dz);
-static int  check_for_viable_weave(int *maxbaktrak,dataptr dz);
-static int  read_numeric_value_from_weavefile_text(char **str,int n,dataptr dz);
-
-/***************************************************************************************/
-/****************************** FORMERLY IN aplinit.c **********************************/
-/***************************************************************************************/
-
-/***************************** ESTABLISH_BUFPTRS_AND_EXTRA_BUFFERS **************************/
-
-int establish_bufptrs_and_extra_buffers(dataptr dz)
-{
-    //int is_spec = FALSE;
-    dz->extra_bufcnt = -1;  /* ENSURE EVERY CASE HAS A PAIR OF ENTRIES !! */
-    dz->bptrcnt = 0;
-    dz->bufcnt  = 0;
-    switch(dz->process) {
-    case(AVRG):                     dz->extra_bufcnt =  0; dz->bptrcnt = 1;         /*is_spec = TRUE;*/             break;
-    case(BLUR):                     dz->extra_bufcnt =  0; dz->bptrcnt = 4;         /*is_spec = TRUE;*/             break;
-    case(SUPR):                     dz->extra_bufcnt =  0; dz->bptrcnt = 1;         /*is_spec = TRUE;*/             break;
-    case(CHORUS):                   dz->extra_bufcnt =  1; dz->bptrcnt = 1;         /*is_spec = TRUE;*/             break;
-    case(DRUNK):                    dz->extra_bufcnt =  0; dz->bptrcnt = 4;         /*is_spec = TRUE;*/             break;
-    case(SHUFFLE):                  dz->extra_bufcnt =  0; dz->bptrcnt = 5;         /*is_spec = TRUE;*/             break;
-    case(WEAVE):                    dz->extra_bufcnt =  0; dz->bptrcnt = 5;         /*is_spec = TRUE;*/             break;
-    case(NOISE):                    dz->extra_bufcnt =  0; dz->bptrcnt = 1;         /*is_spec = TRUE;*/             break;
-    case(SCAT):                     dz->extra_bufcnt =  0; dz->bptrcnt = 1;         /*is_spec = TRUE;*/             break;
-    case(SPREAD):                   dz->extra_bufcnt =  0; dz->bptrcnt = 1;         /*is_spec = TRUE;*/             break;
-    default:
-        sprintf(errstr,"Unknown program type [%d] in establish_bufptrs_and_extra_buffers()\n",dz->process);
-        return(PROGRAM_ERROR);
-    }
-
-    if(dz->extra_bufcnt < 0) {
-        sprintf(errstr,"bufcnts have not been set: establish_bufptrs_and_extra_buffers()\n");
-        return(PROGRAM_ERROR);
-    }
-    return establish_spec_bufptrs_and_extra_buffers(dz);
-}
-
-/***************************** SETUP_INTERNAL_ARRAYS_AND_ARRAY_POINTERS **************************/
-
-int setup_internal_arrays_and_array_pointers(dataptr dz)
-{
-    int n;
-    dz->ptr_cnt    = -1;            /* base constructor...process */
-    dz->array_cnt  = -1;
-    dz->iarray_cnt = -1;
-    dz->larray_cnt = -1;
-    switch(dz->process) {
-    case(AVRG):     dz->array_cnt = 0; dz->iarray_cnt = 0; dz->larray_cnt = 0; dz->ptr_cnt = 0; dz->fptr_cnt = 0;   break;
-    case(BLUR):     dz->array_cnt = 0; dz->iarray_cnt = 0; dz->larray_cnt = 0; dz->ptr_cnt = 0; dz->fptr_cnt = 0;   break;
-    case(SUPR):     dz->array_cnt = 0; dz->iarray_cnt = 0; dz->larray_cnt = 0; dz->ptr_cnt = 0; dz->fptr_cnt = 0;   break;
-    case(CHORUS):   dz->array_cnt =2;  dz->iarray_cnt = 0; dz->larray_cnt = 0; dz->ptr_cnt = 0; dz->fptr_cnt = 0;   break;
-    case(DRUNK):    dz->array_cnt = 0; dz->iarray_cnt = 0; dz->larray_cnt = 0; dz->ptr_cnt = 0; dz->fptr_cnt = 0;   break;
-    case(SHUFFLE):  dz->array_cnt = 0; dz->iarray_cnt =1;  dz->larray_cnt = 0; dz->ptr_cnt = 0; dz->fptr_cnt = 0;   break;
-    case(WEAVE):    dz->array_cnt = 0; dz->iarray_cnt =1;  dz->larray_cnt = 0; dz->ptr_cnt = 0; dz->fptr_cnt = 0;   break;
-    case(NOISE):    dz->array_cnt = 0; dz->iarray_cnt = 0; dz->larray_cnt = 0; dz->ptr_cnt = 0; dz->fptr_cnt = 0;   break;
-    case(SCAT):     dz->array_cnt = 0; dz->iarray_cnt =1;  dz->larray_cnt = 0; dz->ptr_cnt = 0; dz->fptr_cnt = 0;   break;
-    case(SPREAD):   dz->array_cnt = 0; dz->iarray_cnt = 0; dz->larray_cnt = 0; dz->ptr_cnt = 0; dz->fptr_cnt = 0;   break;
-    }
-
-    /*** WARNING ***
-         ANY APPLICATION DEALING WITH A NUMLIST INPUT: MUST establish AT LEAST 1 double array: i.e. dz->array_cnt = at least 1
-         **** WARNING ***/
-
-
-    if(dz->array_cnt < 0 || dz->iarray_cnt < 0 || dz->larray_cnt < 0 || dz->ptr_cnt < 0 || dz->fptr_cnt < 0) {
-        sprintf(errstr,"array_cnt not set in setup_internal_arrays_and_array_pointers()\n");
-        return(PROGRAM_ERROR);
-    }
-
-    if(dz->array_cnt > 0) {
-        if((dz->parray  = (double **)malloc(dz->array_cnt * sizeof(double *)))==NULL) {
-            sprintf(errstr,"INSUFFICIENT MEMORY for internal double arrays.\n");
-            return(MEMORY_ERROR);
-        }
-        for(n=0;n<dz->array_cnt;n++)
-            dz->parray[n] = NULL;
-    }
-    if(dz->iarray_cnt > 0) {
-        if((dz->iparray = (int     **)malloc(dz->iarray_cnt * sizeof(int *)))==NULL) {
-            sprintf(errstr,"INSUFFICIENT MEMORY for internal int arrays.\n");
-            return(MEMORY_ERROR);
-        }
-        for(n=0;n<dz->iarray_cnt;n++)
-            dz->iparray[n] = NULL;
-    }
-    if(dz->larray_cnt > 0) {
-        if((dz->lparray = (int    **)malloc(dz->larray_cnt * sizeof(int *)))==NULL) {
-            sprintf(errstr,"INSUFFICIENT MEMORY for internal int arrays.\n");
-            return(MEMORY_ERROR);
-        }
-        for(n=0;n<dz->larray_cnt;n++)
-            dz->lparray[n] = NULL;
-    }
-    if(dz->ptr_cnt > 0)   {
-        if((dz->ptr     = (double  **)malloc(dz->ptr_cnt  * sizeof(double *)))==NULL) {
-            sprintf(errstr,"INSUFFICIENT MEMORY for internal pointer arrays.\n");
-            return(MEMORY_ERROR);
-        }
-        for(n=0;n<dz->ptr_cnt;n++)
-            dz->ptr[n] = NULL;
-    }
-    if(dz->fptr_cnt > 0)   {
-        if((dz->fptr = (float  **)malloc(dz->fptr_cnt * sizeof(float *)))==NULL) {
-            sprintf(errstr,"INSUFFICIENT MEMORY for internal float-pointer arrays.\n");
-            return(MEMORY_ERROR);
-        }
-        for(n=0;n<dz->fptr_cnt;n++)
-            dz->fptr[n] = NULL;
-    }
-    return(FINISHED);
-}
-
-/****************************** ASSIGN_PROCESS_LOGIC *********************************/
-
-int assign_process_logic(dataptr dz)
-{
-    switch(dz->process) {
-    case(AVRG):                     setup_process_logic(ANALFILE_ONLY,                      EQUAL_ANALFILE,         ANALFILE_OUT,   dz);    break;
-    case(BLUR):                     setup_process_logic(ANALFILE_ONLY,                      EQUAL_ANALFILE,         ANALFILE_OUT,   dz);    break;
-    case(SUPR):                     setup_process_logic(ANALFILE_ONLY,                      EQUAL_ANALFILE,         ANALFILE_OUT,   dz);    break;
-    case(CHORUS):           setup_process_logic(ANALFILE_ONLY,                      EQUAL_ANALFILE,         ANALFILE_OUT,   dz);    break;
-    case(DRUNK):            setup_process_logic(ANALFILE_ONLY,                      BIG_ANALFILE,           ANALFILE_OUT,   dz);    break;
-    case(SHUFFLE):          setup_process_logic(ANALFILE_ONLY,                      BIG_ANALFILE,           ANALFILE_OUT,   dz);    break;
-    case(WEAVE):            setup_process_logic(ANALFILE_ONLY,                      BIG_ANALFILE,           ANALFILE_OUT,   dz);    break;
-    case(NOISE):            setup_process_logic(ANALFILE_ONLY,                      EQUAL_ANALFILE,         ANALFILE_OUT,   dz);    break;
-    case(SCAT):                     setup_process_logic(ANALFILE_ONLY,                      EQUAL_ANALFILE,         ANALFILE_OUT,   dz);    break;
-    case(SPREAD):           setup_process_logic(ANALFILE_ONLY,                      EQUAL_ANALFILE,         ANALFILE_OUT,   dz);    break;
-    default:
-        sprintf(errstr,"Unknown process: assign_process_logic()\n");
-        return(PROGRAM_ERROR);
-        break;
-    }
-    if(dz->has_otherfile) {
-        switch(dz->input_data_type) {
-        case(ALL_FILES):
-        case(TWO_SNDFILES):
-        case(SNDFILE_AND_ENVFILE):
-        case(SNDFILE_AND_BRKFILE):
-        case(SNDFILE_AND_UNRANGED_BRKFILE):
-        case(SNDFILE_AND_DB_BRKFILE):
-            break;
-        case(MANY_SNDFILES):
-            if(dz->process==INFO_TIMELIST)
-                break;
-            /* fall thro */
-        default:
-            sprintf(errstr,"Most processes accepting files with different properties\n"
-                    "can only take 2 sound infiles.\n");
-            return(PROGRAM_ERROR);
-        }
-    }
-    return(FINISHED);
-}
-
-/***************************** SET_LEGAL_INFILE_STRUCTURE **************************
- *
- * Allows 2nd infile to have different props to first infile.
- */
-
-void set_legal_infile_structure(dataptr dz)
-{
-    switch(dz->process) {
-    default:
-        dz->has_otherfile = FALSE;
-        break;
-    }
-}
-
-/***************************************************************************************/
-/****************************** FORMERLY IN internal.c *********************************/
-/***************************************************************************************/
-
-/****************************** SET_LEGAL_INTERNALPARAM_STRUCTURE *********************************/
-
-int set_legal_internalparam_structure(int process,int mode,aplptr ap)
-{
-    int exit_status = FINISHED;
-    switch(process) {
-    case(AVRG):                     exit_status = set_internalparam_data("i",ap);                                   break;
-    case(BLUR):                     return(FINISHED);
-    case(SUPR):                     return(FINISHED);
-    case(CHORUS):           exit_status = set_internalparam_data("ii",ap);                                  break;
-    case(DRUNK):            exit_status = set_internalparam_data("i",ap);                                   break;
-    case(SHUFFLE):          exit_status = set_internalparam_data("iiiiii",ap);                              break;
-    case(WEAVE):            exit_status = set_internalparam_data("i",ap);                                   break;
-    case(NOISE):            return(FINISHED);
-    case(SCAT):                     exit_status = set_internalparam_data("ii",ap);                                  break;
-    case(SPREAD):           return(FINISHED);
-    default:
-        sprintf(errstr,"Unknown process in set_legal_internalparam_structure()\n");
-        return(PROGRAM_ERROR);
-    }
-    return(exit_status);
-}
-
-/********************************************************************************************/
-/********************************** FORMERLY IN specialin.c *********************************/
-/********************************************************************************************/
-
-/********************** READ_SPECIAL_DATA ************************/
-
-int read_special_data(char *str,dataptr dz)
-{
-    aplptr ap = dz->application;
-
-    switch(ap->special_data) {
-    case(SHUFFLE_DATA):             return read_shuffle_data(SHUF_DMNCNT,SHUF_IMGCNT,SHUF_MAP,str,dz);
-    case(WEAVE_DATA):                       return read_specweave_data(str,dz);
-    default:
-        sprintf(errstr,"Unknown special_data type: read_special_data()\n");
-        return(PROGRAM_ERROR);
-    }
-    return(FINISHED);       /* NOTREACHED */
-}
-
-/***************************** READ_SPECWEAVE_DATA ****************************/
-
-int read_specweave_data(char *filename,dataptr dz)
-{
-    int exit_status;
-    FILE *fp;
-    char temp[200], *p;
-    int arraysize = BIGARRAY, cnt = 0;
-    if((dz->iparray[WEAVE_WEAV] = (int *)malloc(arraysize * sizeof(int)))==NULL) {
-        sprintf(errstr,"INSUFFICIENT MEMORY for weave array.\n");
-        return(MEMORY_ERROR);
-    }
-    if((fp = fopen(filename,"r"))==NULL) {
-        sprintf(errstr,"Cannot open weave file '%s'\n",filename);
-        return(DATA_ERROR);
-    }
-    while(fgets(temp,200,fp)!=NULL) {
-        p = temp;
-        while((exit_status = read_numeric_value_from_weavefile_text(&p,cnt,dz))==CONTINUE) {
-            if(++cnt>=arraysize) {
-                arraysize += BIGARRAY;
-                if((dz->iparray[WEAVE_WEAV] =
-                    (int *)realloc((char *)dz->iparray[WEAVE_WEAV],arraysize * sizeof(int)))==NULL) {
-                    sprintf(errstr,"INSUFFICIENT MEMORY to reallocate weave array.");
-                    return(MEMORY_ERROR);
-                }
-            }
-        }
-        if(exit_status<0)
-            return(exit_status);
-    }
-    if(cnt==0) {
-        sprintf(errstr,"No data in weave file.\n");
-        return(DATA_ERROR);
-    }
-    if((dz->iparray[WEAVE_WEAV] = (int *)realloc((char *)dz->iparray[WEAVE_WEAV],cnt * sizeof(int)))==NULL) {
-        sprintf(errstr,"INSUFFICIENT MEMORY to reallocate weave array.\n");
-        return(MEMORY_ERROR);
-    }
-    dz->itemcnt = cnt;
-    return check_for_viable_weave(&(dz->iparam[WEAVE_BAKTRAK]),dz);
-}
-
-/****************************** CHECK_FOR_VIABLE_WEAVE **************************/
-
-int check_for_viable_weave(int *maxbaktrak,dataptr dz)
-{
-    int n, m;
-    int weavhere   = 0;
-    int pos_relative_to_this_start;
-    int maxbaktrak_from_this_start;
-    *maxbaktrak = 0;
-    for(n=0; n<dz->itemcnt; n++) {
-        if((weavhere += dz->iparray[WEAVE_WEAV][n]) < 0) {
-            sprintf(errstr,"You cannot weave to before weave-start.\n");
-            return(DATA_ERROR);
-        }
-    }
-    if(weavhere <= 0) {
-        sprintf(errstr,"Weave must progress aint file.\n");
-        return(DATA_ERROR);
-    }
-    for(n=1; n<dz->itemcnt; n++) {
-        pos_relative_to_this_start = 0;
-        maxbaktrak_from_this_start = 0;
-        for(m=n; m<dz->itemcnt; m++) {
-            if((pos_relative_to_this_start += dz->iparray[WEAVE_WEAV][n]) < 0)
-                maxbaktrak_from_this_start = min(pos_relative_to_this_start,maxbaktrak_from_this_start);
-        }
-        *maxbaktrak = min(*maxbaktrak,maxbaktrak_from_this_start);
-    }
-    fprintf(stdout,"INFO: Output duration approx %.2lf times that of input.\n",
-            (double)dz->itemcnt/(double)weavhere);
-    fflush(stdout);
-    *maxbaktrak = -(*maxbaktrak);
-    return(FINISHED);
-}
-
-/************************** READ_NUMERIC_VALUE_FROM_WEAVEFILE_TEXT **************************
- *
- * takes a pointer TO A POINTER to a string. If it succeeds in finding
- * a char it returns the char value (*val), and it's new position in the
- * string (*str).
- */
-
-int read_numeric_value_from_weavefile_text(char **str,int n,dataptr dz)
-{       char *p, *q, *digitstart, *end;
-    int numero;
-    p = *str;
-    while(isspace(*p))
-        p++;
-    q = p;
-    if(*p=='\0')
-        return(FINISHED);
-    if(!isdigit(*p) && *p!='-') {
-        sprintf(errstr,"Invalid character ('%c') in weave file.\n",*p);
-        return(DATA_ERROR);
-    }
-    if(*p == '-')
-        p++;
-    digitstart = p;
-    while(isdigit(*p))
-        p++;
-    if(p - digitstart <= 0) {
-        sprintf(errstr,"Invalid character sequence in weave file.\n");
-        return(DATA_ERROR);
-    }
-    if(!isspace(*p) && *p!='\0') {
-        sprintf(errstr,"Invalid character in weave file.\n");
-        return(DATA_ERROR);
-    }
-    end = p;
-    if(sscanf(q,"%d",&numero)!=1) {
-        sprintf(errstr,"Failed to read value from weave file.\n");
-        return(DATA_ERROR);
-    }
-    if(numero > dz->application->max_special || numero < dz->application->min_special) {
-        sprintf(errstr,"Weave value %d out of range (%.0lf to %.0lf) for this file.\n",
-                n+1,dz->application->min_special,dz->application->max_special);
-        return(USER_ERROR);
-    }
-    dz->iparray[WEAVE_WEAV][n] = numero;
-    *str = end;
-    return(CONTINUE);
-}
-
-/********************************************************************************************/
-/********************************** FORMERLY IN preprocess.c ********************************/
-/********************************************************************************************/
-
-
-/****************************** PARAM_PREPROCESS *********************************/
-
-int param_preprocess(dataptr dz)
-{
-    switch(dz->process) {
-    case(AVRG):                 return avrg_preprocess(dz);
-    case(SUPR):                     return setup_ring(dz);
-    case(CHORUS):           return chor_preprocess(dz);
-    case(DRUNK):            return drnk_preprocess(dz);
-    case(SCAT):                     return scat_preprocess(dz);
-
-    case(BLUR):     case(SHUFFLE):  case(WEAVE):    case(NOISE):    case(SPREAD):
-        return(FINISHED);
-    default:
-        sprintf(errstr,"PROGRAMMING PROBLEM: Unknown process in param_preprocess()\n");
-        return(PROGRAM_ERROR);
-    }
-    return(FINISHED);       /* NOTREACHED */
-}
-
-/************************** AVRG_PREPROCESS ******************************/
-
-int avrg_preprocess(dataptr dz)
-{
-    if(dz->brksize[AVRG_AVRG]==0) {
-        dz->iparam[AVRG_AVRGSPAN] = dz->iparam[AVRG_AVRG]/2;
-        dz->iparam[AVRG_AVRG]     = (dz->iparam[AVRG_AVRGSPAN] * 2) + 1;/* ALWAYS ODD */
-    }
-    return(FINISHED);
-}
-
-/************************** CHOR_PREPROCESS ******************************/
-
-int chor_preprocess(dataptr dz)
-{
-    int exit_status;
-    dz->iparam[CHORU_RTABSIZE] = dz->wanted * RSIZE;
-    if((exit_status = set_chorus_processing_type(dz))<0)
-        return(exit_status);
-    return setup_randtables_for_rapid_rand_processing(dz);
-}
-
-/*************************** SET_CHORUS_PROCESSING_TYPE *************************/
-
-int set_chorus_processing_type(dataptr dz)
-{
-    switch(dz->mode) {
-    case(CH_AMP):
-        if(dz->brksize[CHORU_AMPR]==0)   dz->iparam[CHORU_SPRTYPE] = A_FIX;
-        else                                                     dz->iparam[CHORU_SPRTYPE] = A_VAR;
-        break;
-    case(CH_FRQ):
-    case(CH_FRQ_UP):
-    case(CH_FRQ_DN):
-        if(dz->brksize[CHORU_FRQR]==0)   dz->iparam[CHORU_SPRTYPE] = F_FIX;
-        else                                                     dz->iparam[CHORU_SPRTYPE] = F_VAR;
-        break;
-    case(CH_AMP_FRQ):
-    case(CH_AMP_FRQ_UP):
-    case(CH_AMP_FRQ_DN):
-        if(dz->brksize[CHORU_AMPR]==0) {
-            if(dz->brksize[CHORU_FRQR]==0)  dz->iparam[CHORU_SPRTYPE] = AF_FIX;
-            else                                                    dz->iparam[CHORU_SPRTYPE] = A_FIX_F_VAR;
-        } else {
-            if(dz->brksize[CHORU_FRQR]==0)  dz->iparam[CHORU_SPRTYPE] = A_VAR_F_FIX;
-            else                                                    dz->iparam[CHORU_SPRTYPE] = AF_VAR;
-        }
-        break;
-    default:
-        sprintf(errstr,"Unknown program mode in set_chorus_processing_type()\n");
-        return(PROGRAM_ERROR);
-    }
-    return(FINISHED);
-}
-
-/****************** SETUP_RANDTABLES_FOR_RAPID_RAND_PROCESSING ***************/
-
-int setup_randtables_for_rapid_rand_processing(dataptr dz)
-{
-    int n;
-    double z;
-    if(dz->iparam[CHORU_SPRTYPE] & IS_A) {
-        if((dz->parray[CHORU_RTABA] = (double *)malloc(dz->iparam[CHORU_RTABSIZE] * sizeof(double)))==NULL) {
-            sprintf(errstr,"INSUFFICIENT MEMORY for chorusing amplitude random table.\n");
-            return(MEMORY_ERROR);
-        }
-        for(n=0;n<dz->iparam[CHORU_RTABSIZE];n++) {
-            z  = drand48() * 2.0;
-            dz->parray[CHORU_RTABA][n] = z - 1.0;
-        }
-        if(dz->iparam[CHORU_SPRTYPE] & A_FIX) {
-            for(n=0;n<dz->iparam[CHORU_RTABSIZE];n++)
-                dz->parray[CHORU_RTABA][n] = (double)pow(dz->param[CHORU_AMPR],dz->parray[CHORU_RTABA][n]);
-        }
-    }
-    if(dz->iparam[CHORU_SPRTYPE] & IS_F) {
-        if((dz->parray[CHORU_RTABF] = (double *)malloc(dz->iparam[CHORU_RTABSIZE] * sizeof(double)))==NULL) {
-            sprintf(errstr,"INSUFFICIENT MEMORY for chorusing frq random table.\n");
-            return(MEMORY_ERROR);
-        }
-        switch(dz->mode) {
-        case(CH_FRQ_DN):
-        case(CH_AMP_FRQ_DN): /* downwards only  */
-            for(n=0;n<dz->iparam[CHORU_RTABSIZE];n++) {
-                z  = drand48();
-                dz->parray[CHORU_RTABF][n] = z - 1.0;
-            }
-            break;
-        case(CH_FRQ_UP):
-        case(CH_AMP_FRQ_UP):    /* upwards only */
-            for(n=0;n<dz->iparam[CHORU_RTABSIZE];n++)
-                dz->parray[CHORU_RTABF][n]  = drand48();
-            break;
-        default: /* normal */
-            for(n=0;n<dz->iparam[CHORU_RTABSIZE];n++) {
-                z  = drand48() * 2.0;
-                dz->parray[CHORU_RTABF][n] = z - 1.0;
-            }
-            break;
-        }
-        if(dz->iparam[CHORU_SPRTYPE] & F_FIX) {
-            for(n=0;n<dz->iparam[CHORU_RTABSIZE];n++)
-                dz->parray[CHORU_RTABF][n] = pow(dz->param[CHORU_FRQR],dz->parray[CHORU_RTABF][n]);
-        }
-    }
-    return(FINISHED);
-}
-
-/************************** DRNK_PREPROCESS ******************************/
-
-int drnk_preprocess(dataptr dz)
-{
-    initrand48();
-    dz->iparam[DRNK_TWICERANGE] = (dz->iparam[DRNK_RANGE] * 2) + 1;
-    return(FINISHED);
-}
-
-/************************** SCAT_PREPROCESS ******************************/
-
-int scat_preprocess(dataptr dz)
-{
-    int exit_status;
-    if((exit_status = convert_params_for_scat(dz))<0)
-        return(exit_status);
-    return setup_internal_arrays_and_preset_internal_variables_for_scat(dz);
-}
-
-/************ CONVERT_PARAMS_FOR_SCAT *************
- *
- * convert frq width input to channel cnt, for bloksize
- */
-
-int convert_params_for_scat(dataptr dz)
-{
-    double *p;
-    int n;
-    if(dz->brksize[SCAT_BLOKSIZE]==0)
-        dz->iparam[SCAT_BLOKSIZE] = round(dz->param[SCAT_BLOKSIZE]/dz->chwidth);
-    else {
-        p = dz->brk[SCAT_BLOKSIZE] + 1;
-        for(n=0;n < dz->brksize[SCAT_BLOKSIZE];n++) {
-            *p /= dz->chwidth;
-            p  += 2;
-        }       /* AND ensure bloksize is now ROUNDED TO INT when read from brktable */
-        dz->is_int[SCAT_BLOKSIZE] = 1;
-    }
-    return(FINISHED);
-}
-
-/************ SETUP_INTERNAL_ARRAYS_AND_PRESET_INTERNAL_VARIABLES_FOR_SCAT *********/
-
-int setup_internal_arrays_and_preset_internal_variables_for_scat(dataptr dz)
-{
-    if((dz->iparray[SCAT_KEEP]
-        = (int *)malloc((dz->clength+1) * sizeof(int)))==NULL) {
-        sprintf(errstr,"INSUFFICIENT MEMORY for scatter keep table.\n");
-        return(MEMORY_ERROR);
-    }
-    if(dz->brksize[SCAT_CNT]==0)
-        dz->iparam[SCAT_THISCNT] = dz->iparam[SCAT_CNT];
-    if(dz->brksize[SCAT_BLOKSIZE]==0) {
-        dz->iparam[SCAT_BLOKS_PER_WINDOW] = dz->clength/dz->iparam[SCAT_BLOKSIZE];
-        if((dz->iparam[SCAT_BLOKS_PER_WINDOW]*dz->iparam[SCAT_BLOKSIZE])!=dz->clength)
-            dz->iparam[SCAT_BLOKS_PER_WINDOW]++;
-    }
-    if(dz->brksize[SCAT_BLOKSIZE]==0 && dz->brksize[SCAT_CNT]==0
-       && dz->iparam[SCAT_CNT] >= dz->iparam[SCAT_BLOKS_PER_WINDOW]) {
-        sprintf(errstr,"Block count exceeds number of blocks per window.\n");
-        return(USER_ERROR);
-    }
-    return(FINISHED);
-}
-
-/********************************************************************************************/
-/********************************** FORMERLY IN procspec.c **********************************/
-/********************************************************************************************/
-
-/**************************** SPEC_PROCESS_FILE ****************************/
-
-int spec_process_file(dataptr dz)
-{
-    dz->total_windows = 0;
-
-    display_virtual_time(0L,dz);
-
-    switch(dz->process) {
-    case(AVRG):             return outer_loop(dz);
-    case(SUPR):             return outer_loop(dz);
-    case(CHORUS):   return outer_loop(dz);
-    case(NOISE):    return outer_loop(dz);
-    case(SCAT):             return outer_loop(dz);
-    case(SPREAD):   return outer_loop(dz);
-
-    case(BLUR):             return spec_blur_and_bltr(dz);
-    case(DRUNK):    return specdrunk(dz);
-    case(SHUFFLE):  return specshuffle(dz);
-    case(WEAVE):    return specweave(dz);
-    default:
-        sprintf(errstr,"Unknown process in procspec()\n");
-        return(PROGRAM_ERROR);
-    }
-    return(FINISHED);       /* NOTREACHED */
-}
-
-/**************************** INNER_LOOP ****************************/
-
-int inner_loop
-(int *peakscore,int *descnt,int *in_start_portion,int *least,int *pitchcnt,int windows_in_buf,dataptr dz)
-{
-    int exit_status;
-    int local_zero_set = FALSE;
-    int wc;
-
-    for(wc=0; wc<windows_in_buf; wc++) {
-        if(dz->total_windows==0) {
-            if((exit_status = skip_or_special_operation_on_window_zero(dz))<0)
-                return(exit_status);
-            if(exit_status==TRUE) {
-                dz->flbufptr[0] += dz->wanted;
-                dz->total_windows++;
-                dz->time = (float)(dz->time + dz->frametime);
-                continue;
-            }
-        }
-        if((exit_status = read_values_from_all_existing_brktables((double)dz->time,dz))<0)
-            return(exit_status);
-
-        switch(dz->process) {
-        case(AVRG):             exit_status = specavrg(dz);                                                     break;
-        case(CHORUS):   exit_status = specchorus(dz);                                           break;
-        case(NOISE):    exit_status = specnoise(dz);                                            break;
-        case(SCAT):             exit_status = specscat(dz);                                             break;
-        case(SPREAD):   exit_status = specspread(dz);                                           break;
-        case(SUPR):             exit_status = specsupr(dz);                                                     break;
-        default:
-            sprintf(errstr,"unknown process in inner_loop()\n");
-            return(PROGRAM_ERROR);
-        }
-        if(exit_status<0)
-            return(exit_status);
-        dz->flbufptr[0] += dz->wanted;
-        dz->total_windows++;
-        dz->time = (float)(dz->time + dz->frametime);
-    }
-    if(!dz->zeroset && local_zero_set==TRUE) {
-        fprintf(stdout,"WARNING: Zero-amp spectral window(s) encountered: orig window(s) substituted.\n");
-        fflush(stdout);
-        dz->zeroset = TRUE;
-    }
-    return(FINISHED);
-}
-
-/***************** SKIP_OR_SPECIAL_OPERATION_ON_WINDOW_ZERO ************/
-
-int skip_or_special_operation_on_window_zero(dataptr dz)
-{
-    switch(dz->process) {
-    case(AVRG):
-    case(SPREAD):
-        return(TRUE);
-    }
-    return(FALSE);
-}
-
-/*********************************** SPEC_BLUR_AND_BLTR ***********************************/
-
-int spec_blur_and_bltr(dataptr dz)
-{
-    int exit_status;
-    int     blurcnt = 0, blurfactor = 0, samps_read, got, w_to_buf, wc;
-    int     last_total_windows = 0;
-    float   *ampdif, *freqdif;
-    dz->time = 0.0f;
-    if((exit_status = float_array(&ampdif,dz->clength))<0)
-        return(exit_status);
-    if((exit_status = float_array(&freqdif,dz->clength))<0)
-        return(exit_status);
-    dz->flbufptr[1] = dz->flbufptr[2];
-    if((exit_status = read_samps(dz->bigfbuf,dz)) < 0)
-        return exit_status;
-
-    while((samps_read = dz->ssampsread) > 0) {
-        got                = samps_read;
-        dz->flbufptr[0] = dz->bigfbuf;
-        w_to_buf       = got/dz->wanted;
-        for(wc=0; wc<w_to_buf; wc++) {
-            if(blurcnt==0) {
-                if(dz->total_windows > 0) {
-                    if((exit_status = do_the_bltr(&last_total_windows,ampdif,freqdif,blurfactor,dz))<0)
-                        return(exit_status);
-                }
-                if(dz->brksize[BLUR_BLURF]) {
-                    if((exit_status = read_value_from_brktable((double)dz->time,BLUR_BLURF,dz))<0)
-                        return(exit_status);
-                }
-                blurfactor = dz->iparam[BLUR_BLURF];
-                if(dz->total_windows + blurfactor >= dz->wlength)         /* number of windows to skip */
-                    blurfactor = dz->wlength - dz->total_windows - 1; /* must not exceed total no of windows */
-
-                blurcnt = blurfactor;
-
-                /* SEPARATE THE AMP AND FREQ DATA IN (NEXT) INITIAL WINDOW */
-                if((exit_status = get_amp_and_frq(dz->flbufptr[0],dz))<0)
-                    return(exit_status);
-            }
-            blurcnt--;
-            dz->flbufptr[0] += dz->wanted;
-            dz->total_windows++;
-            dz->time = (float)(dz->time + dz->frametime);
-        }
-        if((exit_status = read_samps(dz->bigfbuf,dz)) < 0)
-            return exit_status;
-    }
-    if((exit_status = put_amp_and_frq(dz->flbufptr[1],dz))<0) /* transfer last window to output buffer */
-        return(exit_status);
-    dz->flbufptr[1] += dz->wanted;
-    return write_exact_samps(dz->flbufptr[2],(dz->flbufptr[1] - dz->flbufptr[2]),dz);
-}
-
-/****************************** DO_THE_BLTR ***************************/
-
-int do_the_bltr(int *last_total_windows,float *ampdif,float *freqdif,int blurfactor,dataptr dz)
-{
-    int exit_status = FINISHED;
-    int thiswindow, j;
-    int cc, vc;
-    for( cc = 0 ,vc = 0; cc < dz->clength; cc++, vc += 2){
-        ampdif[cc]   = dz->flbufptr[0][AMPP] - dz->amp[cc];
-        ampdif[cc]  /= (float)blurfactor;
-        freqdif[cc]  = dz->flbufptr[0][FREQ] - dz->freq[cc];
-        freqdif[cc] /= (float)blurfactor;
-    }
-    for(thiswindow = *last_total_windows,j=0;thiswindow<dz->total_windows;thiswindow++,j++) {
-        for(cc = 0, vc = 0; cc < dz->clength; cc++, vc += 2){  /* BLUR amp AND freq */
-            dz->flbufptr[1][AMPP] = dz->amp[cc]  + ((float)j * ampdif[cc]);
-            dz->flbufptr[1][FREQ] = dz->freq[cc] + ((float)j * freqdif[cc]);
-        }
-        dz->flbufptr[1] += dz->wanted;
-        if(dz->flbufptr[1] >= dz->flbufptr[3]) {
-            if((exit_status = write_exact_samps(dz->flbufptr[2],dz->buflen,dz))<0)
-                return(exit_status);
-            dz->flbufptr[1] = dz->flbufptr[2];
-        }
-    }
-
-    *last_total_windows = dz->total_windows;
-    return(FINISHED);
-}
-
-/********************************************************************************************/
-/********************************** FORMERLY IN pconsistency.c ******************************/
-/********************************************************************************************/
-
-/****************************** CHECK_PARAM_VALIDITY_AND_CONSISTENCY *********************************/
-
-int check_param_validity_and_consistency(dataptr dz)
-{
-    handle_pitch_zeros(dz);
-    switch(dz->process) {
-    case(SCAT):                return check_consistency_of_scat_params(dz);
-    }
-    return(FINISHED);
-}
-
-/************ CHECK_CONSISTENCY_OF_SCAT_PARAMS *************/
-
-int check_consistency_of_scat_params(dataptr dz)
-{
-    int bloksize, bpw;
-    if(dz->brksize[SCAT_BLOKSIZE]==0 && dz->brksize[SCAT_CNT]==0) {
-        bloksize = round(dz->param[SCAT_BLOKSIZE]/dz->chwidth);
-        bpw = dz->clength/bloksize;
-        if((bpw * bloksize)!=dz->clength)
-            bpw++;
-        if(dz->iparam[SCAT_CNT] >= bpw) {
-            sprintf(errstr,"No. of blocks to keep exceeds number of blocks per window.\n");
-            return(USER_ERROR);
-        }
-    }
-    return(FINISHED);
-}
-
-/********************************************************************************************/
-/********************************** FORMERLY IN buffers.c ***********************************/
-/********************************************************************************************/
-
-/**************************** ALLOCATE_LARGE_BUFFERS ******************************/
-
-int allocate_large_buffers(dataptr dz)
-{
-    switch(dz->process) {
-    case(AVRG):             case(SUPR):             case(CHORUS):
-    case(NOISE):    case(SCAT):             case(SPREAD):
-        return allocate_single_buffer(dz);
-
-    case(BLUR):     case(DRUNK):    case(SHUFFLE):
-        return allocate_double_buffer(dz);
-
-    case(WEAVE):
-        return allocate_weave_buffer(dz);
-    default:
-        sprintf(errstr,"Unknown program no. in allocate_large_buffers()\n");
-        return(PROGRAM_ERROR);
-    }
-    return(FINISHED);       /* NOTREACHED */
-}
-
-/*************************** ALLOCATE_WEAVE_BUFFER ****************************/
-
-int allocate_weave_buffer(dataptr dz)
-{
-    unsigned int buffersize;
-    if(dz->bptrcnt < 5) {
-        sprintf(errstr,"Insufficient bufptrs established in allocate_weave_buffer()\n");
-        return(PROGRAM_ERROR);
-    }
-    //TW CONVERTED FO FLT
-    buffersize = dz->wanted * BUF_MULTIPLIER;
-    dz->buflen = buffersize;
-    buffersize *= 2;
-    buffersize += (dz->iparam[WEAVE_BAKTRAK] * dz->wanted);
-    if((dz->bigfbuf = (float*)malloc((size_t)buffersize * sizeof(float)))==NULL) {
-        sprintf(errstr,"INSUFFICIENT MEMORY for sound buffers.\n");
-        return(MEMORY_ERROR);
-    }
-    dz->big_fsize   = dz->buflen;                                               /* BIGBUF is start of baktrak buf */
-    //TW ADDED
-    dz->flbufptr[0]   = dz->bigfbuf + (dz->iparam[WEAVE_BAKTRAK] * dz->wanted);             /* start of input buf */
-    dz->flbufptr[2] = dz->flbufptr[0] + dz->big_fsize;   /* start of outbuf (&& initially end of input buf) */
-    dz->flbufptr[3] = dz->flbufptr[2] + dz->big_fsize;                                                           /* end of output buf */
-    dz->flbufptr[4] = dz->flbufptr[2] - (dz->iparam[WEAVE_BAKTRAK] * dz->wanted);               /* wrap-around marker */
-    return(FINISHED);
-}
-
-/********************************************************************************************/
-/********************************** FORMERLY IN cmdline.c ***********************************/
-/********************************************************************************************/
-
-int get_process_no(char *prog_identifier_from_cmdline,dataptr dz)
-{
-    if     (!strcmp(prog_identifier_from_cmdline,"avrg"))                   dz->process = AVRG;
-    else if(!strcmp(prog_identifier_from_cmdline,"blur"))                   dz->process = BLUR;
-    else if(!strcmp(prog_identifier_from_cmdline,"suppress"))               dz->process = SUPR;
-    else if(!strcmp(prog_identifier_from_cmdline,"chorus"))                 dz->process = CHORUS;
-    else if(!strcmp(prog_identifier_from_cmdline,"drunk"))                  dz->process = DRUNK;
-    else if(!strcmp(prog_identifier_from_cmdline,"shuffle"))                dz->process = SHUFFLE;
-    else if(!strcmp(prog_identifier_from_cmdline,"weave"))                  dz->process = WEAVE;
-    else if(!strcmp(prog_identifier_from_cmdline,"noise"))                  dz->process = NOISE;
-    else if(!strcmp(prog_identifier_from_cmdline,"scatter"))                dz->process = SCAT;
-    else if(!strcmp(prog_identifier_from_cmdline,"spread"))                 dz->process = SPREAD;
-    else {
-        sprintf(errstr,"Unknown program identification string '%s'\n",prog_identifier_from_cmdline);
-        return(USAGE_ONLY);
-    }
-    //TW UPDATE
-    return(FINISHED);
-}
-
-/********************************************************************************************/
-/********************************** FORMERLY IN usage.c *************************************/
-/********************************************************************************************/
-
-/******************************** USAGE1 ********************************/
-
-int usage1(void)
-{
-    sprintf(errstr,
-            "\nBLURRING OPERATIONS ON A SPECTRAL FILE\n\n"
-            "USAGE: blur NAME (mode) infile outfile parameters: \n"
-            "\n"
-            "where NAME can be any one of\n"
-            "\n"
-            "avrg      blur      suppress    chorus      drunk\n"
-            "shuffle   weave     noise       scatter     spread\n\n"
-            "Type 'blur avrg' for more info on blur avrg..ETC.\n");
-    return(USAGE_ONLY);
-}
-
-int usage2(char *str)
-{
-    if(!strcmp(str,"avrg")) {
-        fprintf(stdout,
-                "blur avrg infile outfile N\n"
-                "\n"
-                "AVERAGE SPECTRAL ENERGY OVER N ADJACENT CHANNELS\n"
-                "\n"
-                "N must be ODD and <= half the -N param used in original analysis.\n"
-                "\n"
-                "N may vary over time.\n");
-    } else if(!strcmp(str,"blur")) {
-        fprintf(stdout,
-                "blur blur infile outfile blurring\n"
-                "\n"
-                "TIME-AVERAGE THE SPECTRUM\n"
-                "\n"
-                "blurring   is number of windows over which to average the spectrum.\n"
-                "\n"
-                "blurring may vary over time. \n");
-    } else if(!strcmp(str,"suppress")) {
-        fprintf(stdout,
-                "blur suppress infile outfile N\n"
-                "\n"
-                "SUPPRESS THE N LOUDEST PARTIALS (ON A WINDOW-BY-WINDOW BASIS)\n"
-                "\n"
-                "N   is number of spectral components to reject.\n"
-                "\n"
-                "N may vary over time.  \n");
-    } else if(!strcmp(str,"chorus")) {
-        fprintf(stdout,
-                "blur chorus 1   infile outfile aspread        \n"
-                "blur chorus 2-4 infile outfile         fspread\n"
-                "blur chorus 5-7 infile outfile aspread fspread\n"
-                "\n"
-                "CHORUSING BY RANDOMISING AMPLITUDES AND/OR FREQUENCIES OF PARTIALS\n"
-                "\n"
-                "MODES :-\n"
-                "1  Randomise partial amplitudes.\n"
-                "2  Randomise partial frequencies.\n"
-                "3  Randomise partial frequencies upwards only.\n"
-                "4  Randomise partial frequencies downwards only.\n"
-                "5  Randomise partial amplitudes AND frequencies.\n"
-                "6  Randomise partial amplitudes, and frequencies upwards only.\n"
-                "7  Randomise partial amplitudes, and frequencies downwards only.\n"
-                "\n"
-                "aspread   is maximum random scatter of partial-amps (Range 1-%.0lf)\n"
-                "fspread   is maximum random scatter of partial-frqs (Range 1-%.0lf)\n"
-                "\n"
-                "aspread and fspread may vary over time.\n",CHORU_MAXAMP,CHORU_MAXFRQ);
-    } else if(!strcmp(str,"drunk")) {
-        fprintf(stdout,
-                "blur drunk infile outfile range starttime duration [-z]\n\n"
-                "MODIFY SOUND BY DRUNKEN WALK ALONG ANALYSIS WINDOWS.\n\n"
-                "RANGE     is maximum step (in windows) for drunken walk.\n"
-                "STARTTIME is time (in secs) in file to begin walk.\n"
-                "DURATION  is required duration of outfile after resynthesis.\n"
-                "-z        eliminates zero steps (window-repeats) in the drunken walk.\n"
-                "\n");
-    } else if(!strcmp(str,"shuffle")) {
-        fprintf(stdout,
-                "blur shuffle infile outfile domain-image grpsize\n\n"
-                "SHUFFLE ORDER OF ANALYSIS WINDOWS IN FILE\n\n"
-                "domain-image is 2 strings of letters, separated by a '-'\n"
-                "The first string is the DOMAIN, and the 2nd, the IMAGE.\n\n"
-                "e.g. 'abc-abbabcc'\n\n"
-                "The DOMAIN letters represent a group of consecutive inputfile analysis_windows.\n\n"
-                "e.g. 'abcd'\n\n"
-                "The IMAGE is any permutation of, or selection from, these domain letters.\n"
-                "(domain letters may be omitted or repeated in the image string).\n\n"
-                "e.g. 'aaaaaaadaaa'\n\n"
-                "Inputfile windows are shuffled according to this same mapping.\n\n"
-                "grpsize Windows may be grouped in sets of GRPSIZE\n"
-                "        before being shuffled (as groups).\n"
-                "        In this case,each domain-letter represents a group of GRPSIZE windows.\n"
-                "\n");
-    } else if(!strcmp(str,"weave")) {
-        fprintf(stdout,
-                "blur weave infile outfile weavfile\n\n"
-                "MODIFY SOUND BY WEAVING AMONGST ANALYSIS WINDOWS.\n\n"
-                "WEAVFILE contains a list of integers which define successive steps (in windows)\n"
-                "through the input file. Steps may be forward or backwards.\n"
-                "The step sequence is repeated until end of infile is reached.\n\n"
-                "Weave must obey the following rules....\n\n"
-                "RULE 1:  NO step can exceed the length of the file, in windows, forwards or backwards.\n"
-                "RULE 2:  NO window reached in a weave can be BEFORE startwindow of the weave.\n"
-                "RULE 3:  FINAL window must be AFTER the weave startwindow.\n\n"
-                "Otherwise, weave may be forward or backward, or remain at same window.\n"
-                "\n");
-    } else if(!strcmp(str,"noise")) {
-        fprintf(stdout,
-                "blur noise infile outfile noise\n"
-                "\n"
-                "PUT NOISE IN THE SPECTRUM\n"
-                "\n"
-                "noise   Range 0 (no noise in spectrum) to 1 (spectrum saturated with noise).\n"
-                "\n"
-                "noise may vary over time.\n");
-    } else if(!strcmp(str,"scatter")) {
-        fprintf(stdout,
-                "blur scatter infile outfile keep [-bblocksize] [-r] [-n] \n"
-                "\n"
-                "RANDOMLY THIN OUT THE SPECTRUM\n"
-                "\n"
-                "keep      number of (randomly-chosen) blocks to keep, in each spectral window.\n"
-                "blocksize is freq range of each block (default is width of 1 analysis channel).\n"
-                "          (Rounded internally to a multiple of channel width).\n"
-                "-r        number of blocks actually selected is randomised between 1 & keep.\n"
-                "-n        Turn OFF normalisation of resulting sound.\n"
-                "\n"
-                "keep & blocksize may vary over time.\n");
-    } else if(!strcmp(str,"spread")) {
-        fprintf(stdout,
-                "blur spread infile outfile -fN|-pN [-i] [-sspread]\n"
-                "\n"
-                "SPREAD PEAKS OF SPECTRUM, INTRODUCING CONTROLLED NOISINESS\n"
-                "\n"
-                "-f   extract formant envelope linear frqwise,\n"
-                "     using 1 point for every N equally-spaced frequency-channels.\n"
-                "-p   extract formant envelope linear pitchwise,\n"
-                "     using N equally-spaced pitch-bands per octave.\n"
-                "-i   quicksearch for formants (less accurate).\n"
-                "\n"
-                "spread    degree of spreading of spectrum (Range 0-1 : Default 1).\n"
-                "\n"
-                "spread may vary over time.\n");
-    } else
-        fprintf(stdout,"Unknown option '%s'\n",str);
-    return(USAGE_ONLY);
-}
-
-/******************************** USAGE3 ********************************/
-
-int usage3(char *str1,char *str2)
-{
-    sprintf(errstr,"Insufficient parameters on command line.\n");
-    return(USAGE_ONLY);
-}

BIN
blur/ap_blur.o


+ 0 - 1391
blur/blur.c

@@ -1,1391 +0,0 @@
-/*
- * Copyright (c) 1983-2013 Trevor Wishart and Composers Desktop Project Ltd
- * http://www.trevorwishart.co.uk
- * 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
- *
- */
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <structures.h>
-#include <tkglobals.h>
-#include <globcon.h>
-#include <pnames.h>
-#include <modeno.h>
-#include <arrays.h>
-#include <flags.h>
-#include <blur.h>
-#include <cdpmain.h>
-#include <formants.h>
-#include <speccon.h>
-#include <sfsys.h>
-#include <osbind.h>
-#include <string.h>
-#include <blur.h>
-
-#define FIRST_ACCESS_OF_RANDTABLE_REACHES_END_FIRST   (1)
-#define SECOND_ACCESS_OF_RANDTABLE_REACHES_END_FIRST  (2)
-#define BOTH_ACCESSES_OF_RANDTABLE_REACH_END_TOGETHER (0)
-
-static int  randomly_select_blokstokeep_and_sort_in_ascending_order(dataptr dz);
-static int  delete_unwanted_bloks(dataptr dz);
-static int  insert(int k,int n,int *iarray,int permcnt);
-static int  shuflup(int n,int * iarray,int permcnt);
-static int  read_domain_samps(int *reached_end_of_file,int *ssampsread,int windows_wanted,dataptr dz);
-static int  copy_domain_to_domainbuf(int *reached_end_of_infile,int *ssampsread,int bufwlen,int permcnt,
-                                     int shuf_d_windows,float *dbufptr,float *dbufend,dataptr dz);
-static int  copywindows_from_domain_to_image(float *domainbuf,float * dbufend,dataptr dz);
-static int      get_randplace(int *randh,int *rande,dataptr dz);
-static int  get_other_randplace(int *order,int randh,int rande,int *randh2,int *rande2,dataptr dz);
-static int  chorusing(int cc,int cc2,int randend,int randend2,int order,dataptr dz);
-static int  do_afix_ffix(int *cc,int *cc2,int *vc,dataptr dz);
-static int  do_a(int cc,int vc,int randend,dataptr dz);
-static int  do_fvar(int cc,int vc,int randend,dataptr dz);
-static int  do_afix_f(int *cc,int *cc2,int *vc,dataptr dz);
-static int  do_a_ffix(int *cc,int *cc2,int *vc,dataptr dz);
-static int  do_a_f(int *cc,int *cc2,int *vc,dataptr dz);
-static int  do_afix(int cc,int vc,int randend, dataptr dz);
-static int  do_ffix(int cc,int vc,int randend,dataptr dz);
-static int  getnewfrq_choru(int cc,int vc,dataptr dz);
-static int  getnewfrq2_choru(int cc,int vc,dataptr dz);
-static int  get_sbufposition_corresponding_to_frq(int *channo,double frq,dataptr dz);
-static int  advance_to_starttime(float **inputbuf_end,int *samps_read,int *drnk_bufno,dataptr dz);
-static int  copy_window_to_outbuf(dataptr dz);
-static int  get_randstep(int *step,dataptr dz);
-static int  adjust_buffers(int *step,float **inputbuf_end,int *samps_read,int *drnk_bufno, dataptr dz);
-static int  flush_outbuf(dataptr dz);
-static int  invert_step_back_to_step_fwd_at_start_of_file(int *step,int reflect_off_end,dataptr dz);
-static int  place_sbufptr_in_bigbuf_range(int *bigbufs_baktrak,dataptr dz);
-static int  invert_step_back_to_step_fwd(int *step,float *orig_sbuf,int *samps_read,
-                                         float **inputbuf_end, int reflect_off_end,int drnk_bufno,dataptr dz);
-static int  baktrak_to_correct_bigbuf(int bigbufs_baktrak,int *samps_read,float **inputbuf_end,
-                                      int *drnk_bufno,dataptr dz);
-static int  invert_step_fwd_to_step_back_at_end_of_file(int *step,int reflect_off_start,int drnk_bufno,dataptr dz);
-static int  advance_to_correct_bigbuf(float **inputbuf_end,int *samps_read,int *drnk_bufno,dataptr dz);
-static int  invert_step_fwd_to_step_back(int *step,float *orig_sbuf,int *samps_read,
-                                         float **inputbuf_end,int reflect_off_start,int drnk_bufno,dataptr dz);
-static int  read_first_inbuf(dataptr dz);
-static int  wrap_samps(unsigned int wrapsamps,float **insbuf,dataptr dz);
-static int  copy_1st_window(dataptr dz);
-
-/********************************** SPECAVRG **********************************/
-
-int specavrg(dataptr dz)
-{
-    int exit_status;
-    int cc, vc, k=0, n, m, q;
-    if(dz->brksize[AVRG_AVRG]) {
-        dz->iparam[AVRG_AVRGSPAN] = dz->iparam[AVRG_AVRG]/2;
-        dz->iparam[AVRG_AVRG]     = (dz->iparam[AVRG_AVRGSPAN] * 2) + 1; /* always odd */
-    }
-    if(dz->iparam[AVRG_AVRGSPAN]>0) {
-        if((exit_status = get_amp(dz->flbufptr[0],dz))<0)
-            return(exit_status);
-        for(cc = 0, vc = 0; cc < dz->iparam[AVRG_AVRGSPAN]; cc++, vc+=2) {
-            dz->amp[cc] = 0.0f;
-            k = cc + dz->iparam[AVRG_AVRGSPAN] + 1;                         /* SMALL AVERAGE AT BOTTOM */
-            for(n = 0, m = 0; n < k; n++, m += 2)
-                dz->amp[cc] = (float)(dz->amp[cc] + dz->flbufptr[0][m]);
-            dz->amp[cc] = (float)(dz->amp[cc]/(double)(k));
-        }
-        q = dz->clength - dz->iparam[AVRG_AVRGSPAN];
-        m = dz->iparam[AVRG_AVRGSPAN] * 2;
-        for(cc = dz->iparam[AVRG_AVRGSPAN], vc = m; cc < q; cc++, vc += 2) {
-            dz->amp[cc] = 0.0f;                                                             /* TRUE AVERAGE */
-            for(n = vc - m;n <= vc + m; n += 2)
-                dz->amp[cc] = (float)(dz->amp[cc] + dz->flbufptr[0][n]);
-            dz->amp[cc] = (float)(dz->amp[cc]/(double)dz->iparam[AVRG_AVRG]);
-        }
-        for(cc = q, vc = k*q; cc < dz->clength; cc++, vc+=2) {
-            dz->amp[cc] = 0.0f;
-            k = cc - dz->iparam[AVRG_AVRGSPAN];                             /* SMALL AVERAGE AT TOP */
-            for(n = k, m = k*2; n < dz->clength; n++, m += 2)
-                dz->amp[cc] = (float)(dz->amp[cc] + dz->flbufptr[0][m]);
-            dz->amp[cc] = (float)(dz->amp[cc]/(double)(dz->clength-k));
-        }
-        if((exit_status = put_amp(dz->flbufptr[0],dz))<0)
-            return(exit_status);
-    }
-    return(FINISHED);
-}
-
-/************************** SPECSUPR *****************************/
-
-int specsupr(dataptr dz)
-{
-    int exit_status;
-    chvptr quietest, loudest;
-    int invtrindex, vc;
-    if(dz->iparam[SUPR_INDX]>(dz->clength/2)) {         /* IF MORE CHANS TO SUPPRESS THAN TO KEEP */
-        invtrindex = dz->clength - dz->iparam[SUPR_INDX];
-        if((exit_status = initialise_ring_vals(invtrindex,BIGAMP,dz))<0) /* PRESET RING VALS TO MAX */
-            return(exit_status);
-        for(vc = 0; vc < dz->wanted; vc += 2) {                 /* IF QUIETER THAN PREVIOUS CHANS, STORE */
-            if((exit_status = if_one_of_quietest_chans_store_in_ring(vc,dz))<0)
-                return(exit_status);
-            dz->flbufptr[0][vc] = 0.0f;                                     /* ZERO ALL CHANNELS AS WE GO */
-        }
-        quietest = dz->ringhead;
-        do {                                                                                    /* REINSERT AMP OF QUIETEST CHANS ONLY */
-            dz->flbufptr[0][quietest->loc] = quietest->val;
-        } while((quietest = quietest->next)!=dz->ringhead);
-    } else {                                                                                    /* IF MORE CHANS TO KEEP THAN TO SUPPRESS */
-        if((exit_status = initialise_ring_vals(dz->iparam[SUPR_INDX],-BIGAMP,dz))<0)
-            return(exit_status);                                            /* PRESET RING VALS TO MIN */
-        for(vc = 0; vc < dz->wanted; vc += 2) {
-            if((exit_status = if_one_of_loudest_chans_store_in_ring(vc,dz))<0)
-                return(exit_status);                                    /* IF LOUDER THAN PREVIOUS CHANS, STORE */
-        }
-        loudest = dz->ringhead;
-        do {
-            dz->flbufptr[0][loudest->loc] = 0.0f;           /* ZERO AMPLITUDE IN LOUDEST CHANNELS ONLY */
-        } while((loudest = loudest->next)!=dz->ringhead);
-    }
-    return(FINISHED);
-}
-
-/************************ SPECSCAT *****************************/
-
-int specscat(dataptr dz)
-{
-    int exit_status;
-    double pre_totalamp = 0.0, post_totalamp;
-    if(dz->brksize[SCAT_CNT])
-        dz->iparam[SCAT_THISCNT] = dz->iparam[SCAT_CNT];
-    if(dz->brksize[SCAT_BLOKSIZE]) {
-        dz->iparam[SCAT_BLOKS_PER_WINDOW] = dz->clength/dz->iparam[SCAT_BLOKSIZE];
-        if((dz->iparam[SCAT_BLOKS_PER_WINDOW]*dz->iparam[SCAT_BLOKSIZE])!=dz->clength)
-            dz->iparam[SCAT_BLOKS_PER_WINDOW]++;
-    }
-    if((dz->brksize[SCAT_CNT] || dz->brksize[SCAT_BLOKSIZE])
-       &&  dz->iparam[SCAT_CNT] >= dz->iparam[SCAT_BLOKS_PER_WINDOW]) {
-        sprintf(errstr,"Blokcnt exceeds number of blocks per window at %.4lf secs\n",
-                dz->time - dz->frametime);
-        return(USER_ERROR);
-    }
-
-    if(!dz->vflag[SCAT_NO_NORM]) {
-        if((exit_status = get_totalamp(&pre_totalamp,dz->flbufptr[0],dz->wanted))<0)
-            return(exit_status);
-    }
-    if(dz->vflag[SCAT_RANDCNT])
-        dz->iparam[SCAT_THISCNT] = (int)((drand48() * dz->iparam[SCAT_CNT]) + 1.0); /* TRUNCATE */
-    if((exit_status = randomly_select_blokstokeep_and_sort_in_ascending_order(dz))<0)
-        return(exit_status);
-    if((exit_status = delete_unwanted_bloks(dz))<0)
-        return(exit_status);
-    if(!dz->vflag[SCAT_NO_NORM]) {
-        if((exit_status = get_totalamp(&post_totalamp,dz->flbufptr[0],dz->wanted))<0)
-            return(exit_status);
-        if((exit_status = normalise(pre_totalamp,post_totalamp,dz))<0)
-            return(exit_status);
-    }
-    return(FINISHED);
-}
-
-/********** RANDOMLY_SELECT_BLOKSTOKEEP_AND_SORT_IN_ASCENDING_ORDER **********
- *
- * (1)  preset all SCAT_KEEP array vals to max.
- * (2)  insert blokno between 0 and SCAT_BLOKS_PER_WINDOW in 1st position  in SCAT_KEEP array.
- * (3)  insert blokno between 0 and SCAT_BLOKS_PER_WINDOW in next position in SCAT_KEEP array.
- * (4)  ensure its a NEW value
- * (5)  if it's not a new value, try again.
- * (6)  order the existing new values
- */
-
-int randomly_select_blokstokeep_and_sort_in_ascending_order(dataptr dz)
-{
-    int exit_status;
-    int n, m, k, keepcnt, bad_value, inserted;
-    for(n=0;n<dz->clength+1;n++)
-        dz->iparray[SCAT_KEEP][n] = dz->clength+1;                              /* 1 */
-    k = (int)(drand48() * dz->iparam[SCAT_BLOKS_PER_WINDOW]);/* TRUNC */
-    dz->iparray[SCAT_KEEP][0] = k;                                                      /* 2 */
-    keepcnt = 1;
-    for(n=1;n<dz->iparam[SCAT_THISCNT];n++) {
-        k = (int)(drand48() * dz->iparam[SCAT_BLOKS_PER_WINDOW]);/* TRUNC */    /* 3 */
-        bad_value = 0;
-        inserted  = 0;
-        for(m=0;m<keepcnt;m++) {                                                                /* 4 */
-            if(k==dz->iparray[SCAT_KEEP][m]) {
-                bad_value = 1;
-                break;
-            }
-        }                                                                                                               /* 5 */
-        if(bad_value) {
-            n--;
-            continue;
-        }
-        for(m=0;m<keepcnt;m++) {                                                                /* 6 */
-            if(k<dz->iparray[SCAT_KEEP][m]) {
-                if((exit_status = insert(k,m,dz->iparray[SCAT_KEEP],keepcnt))<0)
-                    return(exit_status);
-                inserted = 1;
-                break;
-            }
-        }
-        if(!inserted)
-            dz->iparray[SCAT_KEEP][keepcnt] = k;
-        keepcnt++;
-    }
-    if(keepcnt!=dz->iparam[SCAT_THISCNT]) {
-        sprintf(errstr,"Error in perm arithmetic.randomly_select_blokstokeep_and_sort_in_ascending_order()\n");
-        return(PROGRAM_ERROR);
-    }
-    return(FINISHED);
-}
-
-/****************************** DELETE_UNWANTED_BLOKS *****************************/
-
-int delete_unwanted_bloks(dataptr dz)
-{
-    int this_blok = 0;              /* INDEX TO BLKS TO RETAIN */
-    int n, c_end, vc_end;
-    int cc = 0, vc;
-    for(n = 0; n < dz->iparam[SCAT_BLOKS_PER_WINDOW]; n++) {
-        if(n==dz->iparray[SCAT_KEEP][this_blok]) {                              /* If keeping it */
-            if((cc += dz->iparam[SCAT_BLOKSIZE]) >= dz->clength)/* Jump over it, and, if at window end, break */
-                break;
-            if(++this_blok >= dz->iparam[SCAT_THISCNT]) {           /* If at end of kept bloks */
-                vc = cc * 2;
-                while(vc < dz->wanted) {                                                /* zero any remaining chans */
-                    dz->flbufptr[0][AMPP] = 0.0F;
-                    vc += 2;
-                }
-                break;
-            }
-        } else {                                                                                                /* if NOT keeping it */
-            if((c_end = cc + dz->iparam[SCAT_BLOKSIZE]) >= dz->clength)
-                c_end = dz->clength;                                                    /* mark end of blok */
-            vc = cc * 2;
-            vc_end = c_end * 2;
-            while(vc < vc_end) {                                                            /* zero it */
-                dz->flbufptr[0][AMPP] = 0.0F;
-                vc += 2;
-            }
-            if(vc >= dz->wanted)                                                            /* If at window end, break */
-                break;
-        }
-    }
-    return(FINISHED);
-}
-
-/****************************** INSERT ***************************/
-
-int insert(int k,int n,int *iarray,int permcnt)
-{
-    int exit_status;
-    if((exit_status = shuflup(n,iarray,permcnt))<0)
-        return(exit_status);
-    iarray[n] = k;
-    return(FINISHED);
-}
-
-/****************************** SHUFLUP ***************************/
-
-int shuflup(int n,int * iarray,int permcnt)
-{
-    int z = permcnt;
-    while(z > n) {
-        iarray[z] = iarray[z-1];
-        z--;
-    }
-    return(FINISHED);
-}
-
-/**************************** SPECSPREAD ***************************/
-
-int specspread(dataptr dz)
-{
-    int exit_status;
-    int cc, vc;
-    double specenv_amp, ampdiff, pre_totalamp, post_totalamp;
-    rectify_window(dz->flbufptr[0],dz);
-    if((exit_status = extract_specenv(0,0,dz))<0)
-        return(exit_status);
-    if((exit_status = get_totalamp(&pre_totalamp,dz->flbufptr[0],dz->wanted))<0)
-        return(exit_status);
-    for( cc = 0 ,vc = 0; cc < dz->clength; cc++, vc += 2) {
-        if((exit_status = getspecenvamp(&specenv_amp,(double)dz->flbufptr[0][FREQ],0,dz))<0)
-            return(exit_status);
-        ampdiff              = specenv_amp - dz->flbufptr[0][AMPP];
-        dz->flbufptr[0][AMPP] = (float)(dz->flbufptr[0][AMPP] + (ampdiff * dz->param[SPREAD_SPRD]));
-    }
-    if((exit_status = get_totalamp(&post_totalamp,dz->flbufptr[0],dz->wanted))<0)
-        return(exit_status);
-    if((exit_status = normalise(pre_totalamp,post_totalamp,dz))<0)
-        return(exit_status);
-    return(FINISHED);
-}
-
-/******************************** SPECSHUFFLE *****************************/
-
-int specshuffle(dataptr dz)
-{
-    int   exit_status;
-    int  permcnt = 0, ssampsread;
-    int  shuf_d_windows = dz->iparam[SHUF_DMNCNT] * dz->iparam[SHUF_GRPSIZE];
-    int  bufwlen = dz->buflen/dz->wanted;
-    float *domainbuf, *dbufptr, *dbufend;
-    int   reached_end_of_infile = FALSE;
-    int  min_windows_to_get = min(shuf_d_windows+1,bufwlen);
-    dz->flbufptr[0] = dz->bigfbuf;
-    dz->flbufptr[1] = dz->flbufptr[2];
-    if(sloom)
-        dz->total_samps_read = 0;
-    if((domainbuf = (float *)malloc((size_t)(shuf_d_windows * (dz->wanted * sizeof(float)))))==NULL) {
-        sprintf(errstr,"INSUFFICIENT MEMORY for domain buffer.\n");
-        return(MEMORY_ERROR);
-    }
-    dbufptr = domainbuf;
-    dbufend = domainbuf + (shuf_d_windows * dz->wanted);
-
-    if((exit_status = read_domain_samps(&reached_end_of_infile,&ssampsread,min_windows_to_get,dz))<0)
-        return(exit_status);
-    if(exit_status == FINISHED) {
-        sprintf(errstr,"Insufficient data in soundfile to do this shuffle.\n");
-        return(GOAL_FAILED);
-    }
-
-    copy_1st_window(dz);
-    for(;;) {
-        dbufptr = domainbuf;
-        if((exit_status = copy_domain_to_domainbuf
-            (&reached_end_of_infile,&ssampsread,bufwlen,permcnt,shuf_d_windows,dbufptr,dbufend,dz))<0)
-            return(exit_status);
-        if(exit_status==FINISHED)
-            break;
-        copywindows_from_domain_to_image(domainbuf,dbufend,dz);
-        permcnt++;
-    }
-    if(dz->flbufptr[1] > dz->flbufptr[2])
-        return write_samps(dz->flbufptr[2],(dz->flbufptr[1] - dz->flbufptr[2]),dz);
-    return(FINISHED);
-
-}
-
-/********************** READ_DOMAIN_SAMPS *******************/
-
-int read_domain_samps(int *reached_end_of_file,int *ssampsread,int windows_wanted,dataptr dz)
-{
-    int exit_status;
-
-    if((exit_status = read_samps(dz->bigfbuf,dz)) < 0)
-        return exit_status;
-    if(dz->ssampsread < windows_wanted * dz->wanted)
-        return(FINISHED);
-    *ssampsread = dz->ssampsread;
-    if(dz->ssampsread < dz->buflen)
-        *reached_end_of_file = TRUE;
-    return(CONTINUE);
-}
-
-/********************** COPY_DOMAIN_TO_DOMAINBUF *******************/
-
-int copy_domain_to_domainbuf
-(int *reached_end_of_infile,int *ssampsread,int bufwlen,int permcnt,int shuf_d_windows,
- float *dbufptr,float *dbufend,dataptr dz)
-{
-    int exit_status;
-    int n, windows_needed;
-    float *data_end;
-    if(reached_end_of_infile)
-        data_end = dz->bigfbuf + *ssampsread;
-    else
-        data_end = dz->flbufptr[2];
-    for(n=0;n<shuf_d_windows;n++) {
-        if(dbufptr >= dbufend) {
-            sprintf(errstr,"Error in buffer arithmetic: specshuffle()\n");
-            return(PROGRAM_ERROR);
-        }
-        if(dz->flbufptr[0] >= data_end) {
-            if(!(*reached_end_of_infile)) {
-                windows_needed = min(shuf_d_windows-n,bufwlen);
-                if((exit_status = read_domain_samps(reached_end_of_infile,ssampsread,windows_needed,dz))<0)
-                    return(exit_status);
-                if(*reached_end_of_infile)
-                    data_end = dz->bigfbuf + *ssampsread;
-                dz->flbufptr[0] = dz->bigfbuf;
-            } else
-                exit_status = FINISHED;
-            if(exit_status==FINISHED) {
-                if(permcnt==0) {
-                    sprintf(errstr,"Insufficient data in soundfile to do this shuffle.\n");
-                    return(GOAL_FAILED);
-                }
-                return(FINISHED);
-            }
-        }
-        memmove((char *)dbufptr,(char *)dz->flbufptr[0],(size_t)(dz->wanted * sizeof(float)));
-        dbufptr        += dz->wanted;
-        dz->flbufptr[0] += dz->wanted;
-    }
-    return(CONTINUE);
-}
-
-/************************** COPYWINDOWS_FROM_DOMAIN_TO_IMAGE ********************************/
-
-int copywindows_from_domain_to_image(float *domainbuf,float * dbufend,dataptr dz)
-{
-    int exit_status;
-    int n, m;
-    float *srcptr;
-    for(n=0;n<dz->iparam[SHUF_IMGCNT];n++) {
-        srcptr  = domainbuf + (dz->iparray[SHUF_MAP][n] * dz->iparam[SHUF_GRPSIZE] * dz->wanted);
-        for(m=0;m < dz->iparam[SHUF_GRPSIZE]; m++) {
-            if(srcptr >= dbufend) {
-                sprintf(errstr,"Error in buffer arithmetic: copywindows_from_domain_to_image()\n");
-                return(PROGRAM_ERROR);
-            }
-            if(dz->flbufptr[1] >= dz->flbufptr[3]) {
-                if((exit_status = write_exact_samps(dz->flbufptr[2],dz->buflen,dz))<0)
-                    return(exit_status);
-                dz->flbufptr[1] = dz->flbufptr[2];
-            }
-            memmove((char *)dz->flbufptr[1],(char *)srcptr,(size_t)(dz->wanted * sizeof(float)));
-            srcptr         += dz->wanted;
-            dz->flbufptr[1] += dz->wanted;
-        }
-    }
-    return(FINISHED);
-}
-
-/************************* SPECCHORUS ***************************/
-
-int specchorus(dataptr dz)
-{
-    int exit_status;
-    //TW cc2 is never set for modes other than CH_AMP_FRQ, CH_AMP_FRQ_UP, CH_AMP_FRQ_DN
-    int cc, cc2 = 0, order = 0;
-    int randhere = 0, randhere2 = 0, randend = 0, randend2 = 0;
-    double pre_totalamp = 0.0, post_totalamp;
-    if((exit_status = get_randplace(&randhere,&randend,dz))<0)
-        return(exit_status);
-    cc = randhere;
-    if(dz->mode == CH_AMP_FRQ || dz->mode == CH_AMP_FRQ_UP || dz->mode == CH_AMP_FRQ_DN) {
-        if((exit_status = get_other_randplace(&order,randhere,randend,&randhere2,&randend2,dz))<0)
-            return(exit_status);
-        cc2 = randhere2;
-    }
-    if(dz->iparam[CHORU_SPRTYPE]!=F_VAR && dz->iparam[CHORU_SPRTYPE]!=F_FIX) {
-        if((exit_status = get_totalamp(&pre_totalamp,dz->flbufptr[0],dz->wanted))<0)
-            return(exit_status);
-    }
-    if((exit_status = chorusing(cc,cc2,randend,randend2,order,dz))<0)
-        return(exit_status);
-    if(dz->iparam[CHORU_SPRTYPE]!=F_VAR && dz->iparam[CHORU_SPRTYPE]!=F_FIX) {
-        if((exit_status = get_totalamp(&post_totalamp,dz->flbufptr[0],dz->wanted))<0)
-            return(exit_status);
-        if((exit_status = normalise(pre_totalamp,post_totalamp,dz))<0)
-            return(exit_status);
-    }
-    return(FINISHED);
-}
-
-/************************** GET_RANDPLACE *************************/
-
-int     get_randplace(int *randh,int *rande,dataptr dz)
-{
-    *randh = (int)(drand48() * dz->iparam[CHORU_RTABSIZE]);
-    if((*rande = *randh + dz->clength) >= dz->iparam[CHORU_RTABSIZE])
-        *rande = dz->iparam[CHORU_RTABSIZE];
-    return(FINISHED);
-}
-
-/************************** GET_OTHER_RANDPLACE **************************/
-
-int get_other_randplace(int *order,int randh,int rande,int *randh2,int *rande2,dataptr dz)
-{
-    int firstlen, firstlen2;
-    *randh2 = (int)(drand48() * dz->iparam[CHORU_RTABSIZE]);
-    if((*rande2 = *randh2 + dz->clength) > dz->iparam[CHORU_RTABSIZE])
-        *rande2 = dz->iparam[CHORU_RTABSIZE];
-    firstlen  = rande   - randh;
-    firstlen2 = *rande2 - *randh2;
-    if(firstlen<firstlen2)  /* 1 */
-        *order = FIRST_ACCESS_OF_RANDTABLE_REACHES_END_FIRST;
-    else if(firstlen2<firstlen)     /* 2 */
-        *order = SECOND_ACCESS_OF_RANDTABLE_REACHES_END_FIRST;
-    else
-        *order = BOTH_ACCESSES_OF_RANDTABLE_REACH_END_TOGETHER;                         /* 3 */
-    return(FINISHED);
-}
-
-/******************************* CHORUSING *****************************/
-
-int chorusing(int cc,int cc2,int randend,int randend2,int order,dataptr dz)
-{
-    int exit_status;
-    int vc;
-    switch(dz->iparam[CHORU_SPRTYPE]) {
-    case(A_FIX):
-        vc = 0;
-        if((exit_status = do_afix(cc,vc,randend,dz))<0)
-            return(exit_status);
-        break;
-    case(F_FIX):
-        vc = 1;
-        memset((char *)dz->windowbuf[0],0,(size_t)(dz->wanted * sizeof(float)));
-        if((exit_status = do_ffix(cc,vc,randend,dz))<0)
-            return(exit_status);
-        memmove((char *)dz->flbufptr[0],(char *)dz->windowbuf[0],(size_t)(dz->wanted * sizeof(float)));
-        break;
-    case(AF_FIX):
-        vc = 0;
-        memset((char *)dz->windowbuf[0],0,(size_t)(dz->wanted * sizeof(float)));
-        switch(order) {
-        case(BOTH_ACCESSES_OF_RANDTABLE_REACH_END_TOGETHER):
-            while(cc<randend) {
-                if((exit_status = do_afix_ffix(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            cc = cc2 = 0;
-            while(vc < dz->wanted) {
-                if((exit_status = do_afix_ffix(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            break;
-        case(FIRST_ACCESS_OF_RANDTABLE_REACHES_END_FIRST):
-            while(cc<randend) {
-                if((exit_status = do_afix_ffix(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            cc  = 0;
-            while(cc2 < randend2) {
-                if((exit_status = do_afix_ffix(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            cc2 = 0;
-            while(vc < dz->wanted) {
-                if((exit_status = do_afix_ffix(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            break;
-        case(SECOND_ACCESS_OF_RANDTABLE_REACHES_END_FIRST):
-            while(cc2<randend2) {
-                if((exit_status = do_afix_ffix(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            cc2  = 0;
-            while(cc < randend) {
-                if((exit_status = do_afix_ffix(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            cc = 0;
-            while(vc < dz->wanted) {
-                if((exit_status = do_afix_ffix(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            break;
-        }
-        memmove((char *)dz->flbufptr[0],(char *)dz->windowbuf[0],(size_t)(dz->wanted * sizeof(float)));
-        break;
-    case(A_VAR):
-        vc = 0;
-        if((exit_status = do_a(cc,vc,randend,dz))<0)
-            return(exit_status);
-        break;
-    case(F_VAR):
-        vc = 1;
-        memset((char *)dz->windowbuf[0],0,(size_t)(dz->wanted * sizeof(float)));
-        if((exit_status = do_fvar(cc,vc,randend,dz))<0)
-            return(exit_status);
-        memmove((char *)dz->flbufptr[0],(char *)dz->windowbuf[0],(size_t)(dz->wanted * sizeof(float)));
-        break;
-    case(A_FIX_F_VAR):
-        vc = 0;
-        memset((char *)dz->windowbuf[0],0,(size_t)(dz->wanted * sizeof(float)));
-        switch(order) {
-        case(BOTH_ACCESSES_OF_RANDTABLE_REACH_END_TOGETHER):
-            while(cc<randend) {
-                if((exit_status = do_afix_f(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            cc = cc2 = 0;
-            while(vc < dz->wanted) {
-                if((exit_status = do_afix_f(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            break;
-        case(FIRST_ACCESS_OF_RANDTABLE_REACHES_END_FIRST):
-            while(cc<randend) {
-                if((exit_status = do_afix_f(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            cc  = 0;
-            while(cc2 < randend2) {
-                if((exit_status = do_afix_f(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            cc2 = 0;
-            while(vc < dz->wanted) {
-                if((exit_status = do_afix_f(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            break;
-        case(SECOND_ACCESS_OF_RANDTABLE_REACHES_END_FIRST):
-            while(cc2<randend2) {
-                if((exit_status = do_afix_f(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            cc2  = 0;
-            while(cc < randend) {
-                if((exit_status = do_afix_f(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            cc = 0;
-            while(vc < dz->wanted) {
-                if((exit_status = do_afix_f(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            break;
-        default:
-            sprintf(errstr,"Impossible order value %d: chorusing()\n",order);
-            return(PROGRAM_ERROR);
-        }
-        memmove((char *)dz->flbufptr[0],(char *)dz->windowbuf[0],(size_t)(dz->wanted * sizeof(float)));
-        break;
-    case(A_VAR_F_FIX):
-        vc = 0;
-        memset((char *)dz->windowbuf[0],0,(size_t)(dz->wanted * sizeof(float)));
-        switch(order) {
-        case(BOTH_ACCESSES_OF_RANDTABLE_REACH_END_TOGETHER):
-            while(cc<randend) {
-                if((exit_status = do_a_ffix(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            cc = cc2 = 0;
-            while(vc < dz->wanted) {
-                if((exit_status = do_a_ffix(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            break;
-        case(FIRST_ACCESS_OF_RANDTABLE_REACHES_END_FIRST):
-            while(cc<randend) {
-                if((exit_status = do_a_ffix(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            cc  = 0;
-            while(cc2 < randend2) {
-                if((exit_status = do_a_ffix(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            cc2 = 0;
-            while(vc < dz->wanted) {
-                if((exit_status = do_a_ffix(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            break;
-        case(SECOND_ACCESS_OF_RANDTABLE_REACHES_END_FIRST):
-            while(cc2<randend2) {
-                if((exit_status = do_a_ffix(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            cc2  = 0;
-            while(cc < randend) {
-                if((exit_status = do_a_ffix(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            cc = 0;
-            while(vc < dz->wanted) {
-                if((exit_status = do_a_ffix(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            break;
-        default:
-            sprintf(errstr,"Impossible (2) order value %d: chorusing()\n",order);
-            return(PROGRAM_ERROR);
-        }
-        memmove((char *)dz->flbufptr[0],(char *)dz->windowbuf[0],(size_t)(dz->wanted * sizeof(float)));
-        break;
-    case(AF_VAR):
-        vc = 0;
-        memset((char *)dz->windowbuf[0],0,(size_t)(dz->wanted * sizeof(float)));
-        switch(order) {
-        case(BOTH_ACCESSES_OF_RANDTABLE_REACH_END_TOGETHER):
-            while(cc<randend)  {
-                if((exit_status = do_a_f(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            cc = cc2 = 0;
-            while(vc < dz->wanted) {
-                if((exit_status = do_a_f(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            break;
-        case(FIRST_ACCESS_OF_RANDTABLE_REACHES_END_FIRST):
-            while(cc<randend) {
-                if((exit_status = do_a_f(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            cc  = 0;
-            while(cc2 < randend2) {
-                if((exit_status = do_a_f(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            cc2 = 0;
-            while(vc < dz->wanted) {
-                if((exit_status = do_a_f(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            break;
-        case(SECOND_ACCESS_OF_RANDTABLE_REACHES_END_FIRST):
-            while(cc2<randend2) {
-                if((exit_status = do_a_f(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            cc2  = 0;
-            while(cc < randend) {
-                if((exit_status = do_a_f(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            cc = 0;
-            while(vc < dz->wanted) {
-                if((exit_status = do_a_f(&cc,&cc2,&vc,dz))<0)
-                    return(exit_status);
-            }
-            break;
-        default:
-            sprintf(errstr,"Impossible (3) order value %d: chorusing()\n",order);
-            return(PROGRAM_ERROR);
-        }
-        memmove((char *)dz->flbufptr[0],(char *)dz->windowbuf[0],(size_t)(dz->wanted * sizeof(float)));
-        break;
-    default:
-        sprintf(errstr,"Impossible sprtype value %d in chorusing()\n",dz->iparam[CHORU_SPRTYPE]);
-        return(PROGRAM_ERROR);
-    }
-    return(FINISHED);
-}
-
-/******************************* DO_AFIX_FFIX *********************/
-
-int do_afix_ffix(int *cc,int *cc2,int *vc,dataptr dz)
-{
-    int exit_status;
-    dz->flbufptr[0][*vc] = (float)(dz->flbufptr[0][*vc] * dz->parray[CHORU_RTABA][*cc]);
-    (*cc)++;
-    (*vc)++;
-    if((exit_status = getnewfrq_choru(*cc2,*vc,dz))<0)
-        return(exit_status);
-    (*cc2)++;
-    (*vc)++;
-    return(FINISHED);                                       /* number in flbufptr[0] */
-}
-
-/*************************** DO_A ****************************/
-
-int do_a(int cc,int vc,int randend,dataptr dz)
-{
-    while(cc < randend) {
-        dz->flbufptr[0][vc] = (float)(pow(dz->param[CHORU_AMPR],dz->parray[CHORU_RTABA][cc]) * dz->flbufptr[0][vc]);
-        cc++;
-        vc += 2;
-    }
-    cc = 0;
-    while(vc < dz->wanted) {
-        dz->flbufptr[0][vc] = (float)(pow(dz->param[CHORU_AMPR],dz->parray[CHORU_RTABA][cc]) * dz->flbufptr[0][vc]);
-        cc++;
-        vc += 2;
-    }
-    return(FINISHED);
-}
-
-/***************************** DO_FVAR *****************************/
-
-int do_fvar(int cc,int vc,int randend,dataptr dz)
-{
-    int exit_status;
-    while(cc < randend) {
-        if((exit_status = getnewfrq2_choru(cc,vc,dz))<0)
-            return(exit_status);
-        cc++;
-        vc += 2;
-    }
-    cc = 0;
-    while(vc < dz->wanted) {
-        if((exit_status = getnewfrq2_choru(cc,vc,dz))<0)
-            return(exit_status);
-        cc++;
-        vc += 2;
-    }
-    return(FINISHED);
-}
-
-/******************************* DO_AFIX_F *********************/
-
-int do_afix_f(int *cc,int *cc2,int *vc,dataptr dz)
-{
-    int exit_status;
-    dz->flbufptr[0][*vc] = (float)(dz->flbufptr[0][*vc] * dz->parray[CHORU_RTABA][*cc]);
-    (*cc)++;
-    (*vc)++;
-    if((exit_status = getnewfrq2_choru(*cc2,*vc,dz))<0)
-        return(exit_status);
-    (*cc2)++;
-    (*vc)++;
-    return(FINISHED);
-}
-
-/************************* DO_A_FFIX ***************************/
-
-int do_a_ffix(int *cc,int *cc2,int *vc,dataptr dz)
-{
-    int exit_status;
-    dz->flbufptr[0][*vc] = (float)(dz->flbufptr[0][*vc] * pow(dz->param[CHORU_AMPR],dz->parray[CHORU_RTABA][*cc]));
-    (*cc)++;
-    (*vc)++;
-    if((exit_status = getnewfrq_choru(*cc2,*vc,dz))<0)
-        return(exit_status);
-    (*cc2)++;
-    (*vc)++;
-    return(FINISHED);
-}
-
-/************************* DO_A_F ***************************/
-
-int do_a_f(int *cc,int *cc2,int *vc,dataptr dz)
-{
-    int exit_status;
-    dz->flbufptr[0][*vc] = (float)(dz->flbufptr[0][*vc] * pow(dz->param[CHORU_AMPR],dz->parray[CHORU_RTABA][*cc]));
-    (*cc)++;
-    (*vc)++;
-    if((exit_status = getnewfrq_choru(*cc2,*vc,dz))<0)
-        return(exit_status);
-    (*cc2)++;
-    (*vc)++;
-    return(FINISHED);
-}
-
-/***************************** DO_AFIX *************************/
-
-int do_afix(int cc,int vc,int randend, dataptr dz)
-{
-    while(cc < randend)     {
-        dz->flbufptr[0][vc] = (float)(dz->flbufptr[0][vc] * dz->parray[CHORU_RTABA][cc]);
-        cc++;
-        vc += 2;
-    }
-    cc = 0;
-    while(vc < dz->wanted) {
-        dz->flbufptr[0][vc] = (float)(dz->flbufptr[0][vc] * dz->parray[CHORU_RTABA][cc]);
-        cc++;
-        vc += 2;
-    }
-    return(FINISHED);
-}
-
-/*************************** DO_FFIX *************************/
-
-int do_ffix(int cc,int vc,int randend,dataptr dz)
-{
-    int exit_status;
-    while(cc < randend) {
-        if((exit_status = getnewfrq_choru(cc,vc,dz))<0)
-            return(exit_status);
-        cc++;
-        vc += 2;
-    }
-    cc = 0;
-    while(vc < dz->wanted) {
-        if((exit_status = getnewfrq_choru(cc,vc,dz))<0)
-            return(exit_status);
-        cc++;
-        vc += 2;
-    }
-    return(FINISHED);
-}
-
-/************************* GETNEWFRQ_CHORU ****************************
- *
- * (1)  If scatter takes frq > current chan, do the scatter     downwards instead.
- * (1)  If scatter takes frq < current chan, do the scatter upwards instead.
- * (3)  Otherwise, keep originally calculated value.
- */
-
-int getnewfrq_choru(int cc,int vc,dataptr dz)
-{
-    int exit_status;
-    float amp;
-    double newval;
-    int new_chan;
-    newval = dz->flbufptr[0][vc] * dz->parray[CHORU_RTABF][cc];
-    if(newval > dz->nyquist || newval < dz->halfchwidth)
-        return(FINISHED);
-    if((exit_status = get_sbufposition_corresponding_to_frq(&new_chan,newval,dz))<0)
-        return(exit_status);
-    if((amp = dz->flbufptr[0][vc-1]) > dz->windowbuf[0][new_chan]) {
-        dz->windowbuf[0][new_chan++] = amp;
-        dz->windowbuf[0][new_chan]   = (float)newval;
-    }
-    return(FINISHED);
-}
-
-/************************** GETNEWFRQ2_CHORU *************************/
-
-int getnewfrq2_choru(int cc,int vc,dataptr dz)
-{
-    int exit_status;
-    float amp;
-    double newval, newscat = pow(dz->param[CHORU_FRQR],dz->parray[CHORU_RTABF][cc]);
-    int new_vc;
-    newval = dz->flbufptr[0][vc] * newscat;
-    if(newval > dz->nyquist || newval < dz->halfchwidth)
-        return(FINISHED);
-    if((exit_status = get_sbufposition_corresponding_to_frq(&new_vc,newval,dz))<0)
-        return(exit_status);
-    if((amp = dz->flbufptr[0][vc-1]) > dz->windowbuf[0][new_vc]) {
-        dz->windowbuf[0][new_vc++] = amp;
-        dz->windowbuf[0][new_vc]   = (float)newval;
-    }
-    return(FINISHED);
-}
-
-/****************************** GET_SBUFPOSITION_CORRESPONDING_TO_FRQ ****************************/
-
-int get_sbufposition_corresponding_to_frq(int *channo,double frq,dataptr dz)
-{
-    frq  += dz->halfchwidth;
-    *channo = (int)(frq/dz->chwidth);/* TRUNCATE */ /* find channel number */
-    *channo = min(dz->clength-1,max(0,*channo));    /* Outside range TRAP */
-    (*channo) *= 2;
-    return(FINISHED);                                       /* number in flbufptr[0] */
-}
-
-/**************************** SPECNOISE ***************************/
-
-int specnoise(dataptr dz)
-{
-    int exit_status;
-    int vc;
-    double totalamp;
-    if((exit_status = get_totalamp(&totalamp,dz->flbufptr[0],dz->wanted))<0)
-        return(exit_status);
-    totalamp /= dz->clength;
-    for(vc = 0; vc < dz->wanted; vc += 2)
-        dz->flbufptr[0][vc] =
-            (float)(((totalamp - dz->flbufptr[0][vc]) * dz->param[NOISE_NOIS]) + dz->flbufptr[0][vc]);
-    return(FINISHED);
-}
-
-/****************************** SPECDRUNK ***************************/
-
-int specdrunk(dataptr dz)
-{
-    int exit_status;
-    int samps_read=0, step;
-    float *inputbuf_end;
-    int drnk_bufno = -1;
-    dz->time = 0.0f;
-    if((exit_status = advance_to_starttime(&inputbuf_end,&samps_read,&drnk_bufno,dz))<0)
-        return(exit_status);
-    dz->flbufptr[1] = dz->flbufptr[2];
-    for(;;) {
-        if((exit_status = copy_window_to_outbuf(dz))<0)
-            return(exit_status);
-        if((dz->time = (float)(dz->time + dz->frametime)) >= dz->param[DRNK_DUR])
-            break;
-        if((exit_status = get_randstep(&step,dz))<0)
-            return(exit_status);
-        dz->flbufptr[0] += step * dz->wanted;
-        if(dz->flbufptr[0] < dz->bigfbuf || dz->flbufptr[0] >= inputbuf_end) {
-            if((exit_status = adjust_buffers(&step,&inputbuf_end,&samps_read,&drnk_bufno,dz))<0)
-                return(exit_status);
-        }
-    }
-    if((exit_status = flush_outbuf(dz))<0)
-        return(exit_status);
-    return(FINISHED);
-}
-
-/****************************** ADVANCE_TO_STARTTIME ***************************/
-
-int advance_to_starttime(float **inputbuf_end,int *samps_read,int *drnk_bufno,dataptr dz)
-{
-    int exit_status;
-    double  time_read = 0.0, previous_time_read = 0.0, time_in_buf;
-    int     startwindow_in_buf, w_to_buf;
-    while(time_read <= dz->param[DRNK_STIME]) {
-        if((exit_status = read_samps(dz->bigfbuf,dz)) < 0) {
-            sprintf(errstr,"No data found in input analysis file.\n");
-            return(SYSTEM_ERROR);
-        }
-        if(dz->ssampsread == 0) {
-            sprintf(errstr,"No data found in input analysis file.\n");
-            return(DATA_ERROR);
-        }
-        *samps_read = dz->ssampsread;
-
-        (*drnk_bufno)++;
-        w_to_buf                   = dz->ssampsread/dz->wanted;
-        previous_time_read = time_read;
-        time_read         += (w_to_buf * dz->frametime);
-    }
-    *inputbuf_end      = dz->bigfbuf + dz->ssampsread;
-    time_in_buf        = dz->param[DRNK_STIME] - previous_time_read;
-    startwindow_in_buf = round(time_in_buf/dz->frametime);
-    dz->flbufptr[0]     = dz->bigfbuf + (startwindow_in_buf * dz->wanted);
-    return(FINISHED);
-}
-
-/****************************** COPY_WINDOW_TO_OUTBUF ***************************/
-
-int copy_window_to_outbuf(dataptr dz)
-{
-    int exit_status;
-    int vc;
-    for(vc = 0; vc < dz->wanted; vc++)
-        dz->flbufptr[1][vc] = dz->flbufptr[0][vc];
-    if((dz->flbufptr[1] += dz->wanted) >= dz->flbufptr[3]) {
-        if((exit_status = write_exact_samps(dz->flbufptr[2],dz->buflen,dz))<0)
-            return(exit_status);
-        dz->flbufptr[1] = dz->flbufptr[2];
-    }
-    return(FINISHED);
-}
-
-/****************************** GET_RANDSTEP ***************************/
-
-int get_randstep(int *step,dataptr dz)
-{
-    switch(dz->vflag[DRNK_NO_ZEROSTEPS]) {
-    case(FALSE):
-        *step  = (int)(drand48() * dz->iparam[DRNK_TWICERANGE]);                        /* TRUNCATE */
-        *step -= dz->iparam[DRNK_RANGE];
-        break;
-    case(TRUE):
-        do {
-            *step  = (int)(drand48() * dz->iparam[DRNK_TWICERANGE]);                /* TRUNCATE */
-            *step -= dz->iparam[DRNK_RANGE];
-        } while(*step==0);
-        break;
-    default:
-        sprintf(errstr,"unknown case in get_randstep()\n");
-        return(PROGRAM_ERROR);
-    }
-    return(FINISHED);
-}
-
-/****************************** ADJUST_BUFFERS ***********************/
-
-int adjust_buffers(int *step,float **inputbuf_end,int *samps_read,int *drnk_bufno, dataptr dz)
-{
-    //TW UPDATED
-    int exit_status;
-    int bigbufs_baktrak = 0;
-    int baksamps, total_samps_read, seektest;
-    int reflect_off_start = FALSE, reflect_off_end = FALSE;
-    if(*drnk_bufno < 0) {
-        sprintf(errstr,"ADJUST_BUFFERS START bufno = %d (less than zero)\n",*drnk_bufno);
-        return(PROGRAM_ERROR);
-    }
-    do {
-        if(dz->flbufptr[0] < dz->bigfbuf) {                     /* IF OFF START OF BUFFER */
-            if(*drnk_bufno == 0)    {               /* IF OFF START OF FILE */
-                if((exit_status = invert_step_back_to_step_fwd_at_start_of_file(step,reflect_off_end,dz))<0)
-                    return(exit_status);
-                reflect_off_start = TRUE;
-            } else {                                                                /* ELSE NOT OFF START OF FILE */
-                if((exit_status = place_sbufptr_in_bigbuf_range(&bigbufs_baktrak,dz))<0)
-                    return(exit_status);
-                baksamps = (bigbufs_baktrak * dz->buflen) + *samps_read;
-                if((seektest = sndseekEx(dz->ifd[0],-baksamps,1)) <= 0) {       /* IF FELL OF FILE START */
-                    if(seektest<0) {
-                        sprintf(errstr,"sndseekEx() failed.\n");
-                        return(SYSTEM_ERROR);
-                    }
-                    if((exit_status = invert_step_back_to_step_fwd
-                        (step,dz->flbufptr[0],samps_read,inputbuf_end,reflect_off_end,*drnk_bufno,dz))<0)
-                        return(exit_status);
-                    reflect_off_start = TRUE;
-                } else {
-                    if((exit_status = baktrak_to_correct_bigbuf(bigbufs_baktrak,samps_read,inputbuf_end,drnk_bufno,dz))<0)
-                        return(exit_status);
-                    reflect_off_start = FALSE;
-                }
-            }
-        } else
-            reflect_off_start = FALSE;
-        total_samps_read = min(dz->insams[0],(*drnk_bufno+1) * dz->buflen);
-
-        if(dz->flbufptr[0] >= *inputbuf_end) {                          /* IF OFF END OF BUFFER */
-            if(total_samps_read >= dz->insams[0]) { /* IF OFF END OF FILE */
-                if((exit_status = invert_step_fwd_to_step_back_at_end_of_file(step,reflect_off_start,*drnk_bufno,dz))<0)
-                    return(exit_status);
-                reflect_off_end = TRUE;
-            } else {                                                                        /* ELSE NOT END OF FILE */
-                if((exit_status = advance_to_correct_bigbuf(inputbuf_end,samps_read,drnk_bufno,dz))<0)
-                    return(exit_status);
-                if(dz->flbufptr[0] >= *inputbuf_end) {          /* IF FELL OFF END OF FILE */
-                    if((exit_status = invert_step_fwd_to_step_back
-                        (step,dz->flbufptr[0],samps_read,inputbuf_end,reflect_off_start,*drnk_bufno,dz))<0)
-                        return(exit_status);
-                    reflect_off_end = TRUE;
-                } else
-                    reflect_off_end = FALSE;
-            }
-        } else
-            reflect_off_end = FALSE;
-    } while(reflect_off_end);
-    if(*drnk_bufno < 0) {
-        sprintf(errstr,"ADJUST_BUFFERS END bufno = %d (less than zero)\n",*drnk_bufno);
-        return(PROGRAM_ERROR);
-    }
-    return(FINISHED);
-}
-
-/****************************** FLUSH_OUTBUF ***************************/
-
-int flush_outbuf(dataptr dz)
-{
-    int exit_status;
-    int samps_to_write;
-    if(dz->flbufptr[1] != dz->flbufptr[2]) {
-        samps_to_write = dz->flbufptr[1] - dz->flbufptr[2];
-        if((exit_status = write_samps(dz->flbufptr[2],samps_to_write,dz))<0)
-            return(exit_status);
-    }
-    return(FINISHED);
-}
-
-/****************************** INVERT_STEP_BACK_TO_STEP_FWD_AT_START_OF_FILE ***********************/
-
-int invert_step_back_to_step_fwd_at_start_of_file(int *step,int reflect_off_end,dataptr dz)
-{
-    if(reflect_off_end) {
-        sprintf(errstr,"Step turned out to be too large.\n");
-        return(DATA_ERROR);
-    }
-    *step = -(*step);                       /* REFLECT FROM START OF FILE */
-    dz->flbufptr[0] += (*step) * 2 * dz->wanted;
-    return(FINISHED);
-}
-
-/****************************** PLACE_SBUFPTR_IN_BIGBUF_RANGE ***********************/
-
-int place_sbufptr_in_bigbuf_range(int *bigbufs_baktrak,dataptr dz)
-{
-    while(dz->flbufptr[0] < dz->bigfbuf) {          /* GO BACK THROUGH BUFS */
-        dz->flbufptr[0] += dz->big_fsize;
-        (*bigbufs_baktrak)++;
-    }
-    return(FINISHED);
-}
-
-/****************************** INVERT_STEP_BACK_TO_STEP_FWD  ***********************/
-
-int invert_step_back_to_step_fwd
-(int *step,float *orig_sbuf,int *samps_read,float **inputbuf_end, int reflect_off_end,int drnk_bufno,dataptr dz)
-{
-    int exit_status;
-    if(reflect_off_end) {
-        sprintf(errstr,"Step turned out ot be too large.\n");
-        return(DATA_ERROR);
-    }
-    if(sndseekEx(dz->ifd[0],drnk_bufno * dz->buflen,0)<0) {
-        sprintf(errstr,"Seek problem in invert_step_back_to_step_fwd().\n");
-        return(SYSTEM_ERROR);
-    }
-    if((exit_status = read_samps(dz->bigfbuf,dz)) < 0) {
-        sprintf(errstr,"Problem reading buffer:in invert_step_back_to_step_fwd().\n");
-        return(SYSTEM_ERROR);
-    }
-    if(dz->ssampsread == 0) {
-        sprintf(errstr,"Problem reading buffer:in invert_step_back_to_step_fwd().\n");
-        return(DATA_ERROR);
-    }
-    *samps_read = dz->ssampsread;
-    *inputbuf_end  = dz->bigfbuf + dz->ssampsread;
-    *step              = -(*step);          /* REVERSE STEP */
-    dz->flbufptr[0] = orig_sbuf + ((*step) * 2 * dz->wanted);
-    return(FINISHED);
-}
-
-/****************************** BAKTRAK_TO_CORRECT_BIGBUF ***********************/
-
-int baktrak_to_correct_bigbuf(int bigbufs_baktrak,int *samps_read,float **inputbuf_end,int *drnk_bufno,dataptr dz)
-{
-    int exit_status;
-    *drnk_bufno -= bigbufs_baktrak;
-    if((exit_status = read_samps(dz->bigfbuf,dz)) < 0) {
-        sprintf(errstr,"Problem reading buffer in baktrak_to_correct_bigbuf().\n");
-        return(SYSTEM_ERROR);
-    }
-    if(dz->ssampsread == 0) {
-        sprintf(errstr,"Problem reading buffer in baktrak_to_correct_bigbuf().\n");
-        return(DATA_ERROR);
-    }
-    *samps_read = dz->ssampsread;
-    *inputbuf_end = dz->bigfbuf + dz->ssampsread;
-    return(FINISHED);
-}
-
-/****************************** INVERT_STEP_FWD_TO_STEP_BACK_AT_END_OF_FILE ***********************/
-
-int invert_step_fwd_to_step_back_at_end_of_file(int *step,int reflect_off_start,int drnk_bufno,dataptr dz)
-{
-    if(reflect_off_start) {         /* IF OFF END OF FILE */
-        sprintf(errstr,"Step turned out ot be too large.\n");
-        return(DATA_ERROR);              /* REFLECTED FROM BOTH ENDS !! */
-    }
-    *step      = -(*step);                  /* REFLECT FROM END OF FILE */
-    dz->flbufptr[0]  += (*step) * 2 * dz->wanted;
-    if(dz->flbufptr[0] < dz->bigfbuf && drnk_bufno == 0) {
-        sprintf(errstr,"Step turned out ot be too large.\n");
-        return(DATA_ERROR);             /* REFLECTED FROM BOTH ENDS !! */
-    }
-    return(FINISHED);
-}
-
-/****************************** ADVANCE_TO_CORRECT_BIGBUF ***********************/
-
-int advance_to_correct_bigbuf(float **inputbuf_end,int *samps_read,int *drnk_bufno,dataptr dz)
-{
-    int exit_status;
-    if(*drnk_bufno < 0) {
-        sprintf(errstr,"advance_to_correct_bigbuf: drnk_bufno = %d (less than zero)\n",*drnk_bufno);
-        return(PROGRAM_ERROR);
-    }
-    while(dz->flbufptr[0] >= *inputbuf_end) {       /* ADVANCE ALONG FILE */
-        if((exit_status = read_samps(dz->bigfbuf,dz)) < 0)
-            return(exit_status);
-        *samps_read = dz->ssampsread;
-        if(dz->ssampsread == 0)
-            break;
-        *inputbuf_end = dz->bigfbuf + dz->ssampsread;
-        (*drnk_bufno)++;
-        dz->flbufptr[0] -= dz->big_fsize;
-    }
-    return(FINISHED);
-}
-
-/****************************** INVERT_STEP_FWD_TO_STEP_BACK ***********************/
-
-int invert_step_fwd_to_step_back
-(int *step,float *orig_sbuf,int *samps_read,float **inputbuf_end,int reflect_off_start,int drnk_bufno,dataptr dz)
-{
-    int exit_status;
-    if(reflect_off_start) {
-        sprintf(errstr,"Step turned out ot be too large.\n");
-        return(DATA_ERROR);             /* REFLECTED FROM BOTH ENDS!! */
-    }
-    if(sndseekEx(dz->ifd[0],drnk_bufno * dz->buflen,0)<0) {
-        sprintf(errstr,"Seek problem in invert_step_fwd_to_step_back().\n");
-        return(SYSTEM_ERROR);
-    }
-    if((exit_status = read_samps(dz->bigfbuf,dz)) < 0)  {
-        sprintf(errstr,"Problem reading buffer in invert_step_fwd_to_step_back().\n");
-        return exit_status;
-    }
-    if(dz->ssampsread == 0) {
-        sprintf(errstr,"Problem reading buffer in invert_step_fwd_to_step_back().\n");
-        return(PROGRAM_ERROR);
-    }
-    *samps_read = dz->ssampsread;
-    *inputbuf_end = dz->bigfbuf + dz->ssampsread;
-    *step             = -(*step);   /* REVERSE STEP */
-    dz->flbufptr[0] = orig_sbuf + ((*step) * 2 * dz->wanted);
-    return(FINISHED);
-}
-
-/****************************** SPECWEAVE ***************************/
-
-int specweave(dataptr dz)
-{
-    int exit_status;
-    int vc;
-    int samps_to_write, n = 0;
-    float *insbuf  = dz->flbufptr[0];
-    float *outsbuf = dz->flbufptr[2];
-    unsigned int wrapsamps = dz->iparam[WEAVE_BAKTRAK] * dz->wanted;
-    if((exit_status = read_first_inbuf(dz))<0)
-        return(exit_status);
-    for(;;) {
-        for(vc = 0; vc < dz->wanted; vc++)
-            outsbuf[vc] = insbuf[vc];
-        insbuf += dz->iparray[WEAVE_WEAV][n] * dz->wanted;
-        if(insbuf < dz->bigfbuf) {
-            sprintf(errstr,"Backtracking failure in specweave().\n");
-            return(PROGRAM_ERROR);
-        }
-        if(insbuf >= dz->flbufptr[1]) {
-            if((exit_status = wrap_samps(wrapsamps,&insbuf,dz))<0)
-                return(exit_status);
-            if(exit_status == FINISHED) {
-                outsbuf += dz->wanted;
-                break;
-            }
-        }
-        if(++n>=dz->itemcnt)
-            n = 0;
-        if((outsbuf += dz->wanted)>= dz->flbufptr[3]) { /* outbuf full */
-            if((exit_status = write_exact_samps(dz->flbufptr[2],dz->buflen,dz))<0)
-                return(exit_status);
-            outsbuf = dz->flbufptr[2];
-        }
-    }
-    if(outsbuf != dz->flbufptr[2]) {
-        samps_to_write = outsbuf - dz->flbufptr[2];
-        if((exit_status = write_samps(dz->flbufptr[2],samps_to_write,dz))<0)
-            return(exit_status);
-    }
-    return(FINISHED);
-}
-
-/****************************** READ_FIRST_INBUF ***************************/
-
-int read_first_inbuf(dataptr dz)
-{
-    int exit_status;
-    if((exit_status = read_samps(dz->flbufptr[0],dz)) < 0) {
-        sprintf(errstr,"Failed to read data from infile.\n");
-        return(exit_status);
-    }
-    dz->flbufptr[1]  = dz->flbufptr[0] + dz->ssampsread;    /* mark current end of inbuf */
-    return(FINISHED);
-}
-
-/****************************** WRAP_SAMPS ***************************/
-
-int wrap_samps(unsigned int wrapsamps,float **insbuf,dataptr dz)
-{
-    int exit_status;
-    memmove((char *)dz->bigfbuf,(char *)dz->flbufptr[4],(size_t)(wrapsamps * sizeof(float)));
-    if((exit_status = read_samps(dz->flbufptr[0],dz)) < 0)
-        return exit_status;
-    if(dz->ssampsread == 0)
-        return(FINISHED);                                               /* no more data in infile */
-    dz->flbufptr[1] = dz->flbufptr[0] + dz->ssampsread;                     /* mark current end of inbuf */
-    if((*insbuf -= dz->big_fsize) >= dz->flbufptr[1])/* must have weaved off end of infile */
-        return(FINISHED);
-    return(CONTINUE);
-}
-
-/*************************** COPY_1ST_WINDOW ***********************/
-
-int copy_1st_window(dataptr dz)
-{
-    memmove((char *)dz->flbufptr[1],(char *)dz->flbufptr[0],(size_t)(dz->wanted * sizeof(float)));
-    dz->flbufptr[0] += dz->wanted;
-    dz->flbufptr[1] += dz->wanted;
-    return(FINISHED);
-}

BIN
blur/blur.o


+ 0 - 238
blur/main.c

@@ -1,238 +0,0 @@
-/*
- * Copyright (c) 1983-2013 Trevor Wishart and Composers Desktop Project Ltd
- * http://www.trevorwishart.co.uk
- * 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
- *
- */
-
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <structures.h>
-#include <tkglobals.h>
-#include <blur.h>
-#include <filetype.h>
-#include <processno.h>
-#include <modeno.h>
-#include <formants.h>
-#include <cdpmain.h>
-#include <special.h>
-#include <logic.h>
-#include <globcon.h>
-#include <cdpmain.h>
-#include <sfsys.h>
-#include <ctype.h>
-
-#include <string.h>
-char errstr[2400];
-
-/*extern*/ int sloom = 0;
-/*extern*/ int  sloombatch = 0;
-/*extern*/ int anal_infiles = 1;
-/*extern*/ int is_converted_to_stereo = -1;
-
-/**************************************** MAIN *********************************************/
-
-const char* cdp_version = "7.1.0";
-
-int main(int argc,char *argv[])
-{
-    int exit_status;
-    /*      FILE *fp   = NULL;*/
-    dataptr dz = NULL;
-    //      char *special_data_string = NULL;
-    char **cmdline;
-    int  cmdlinecnt;
-    //aplptr ap;
-    int *valid = NULL;
-    int is_launched = FALSE;
-    int  validcnt = 0;
-
-    /* CHECK FOR SOUNDLOOM */
-    //TW UPDATE
-    if((argc==2) && strcmp(argv[1],"--version")==0) {
-        fprintf(stdout,"%s\n",cdp_version);
-        fflush(stdout);
-        return 0;
-    }
-    if((sloom = sound_loom_in_use(&argc,&argv)) > 1) {
-        sloom = 0;
-        sloombatch = 1;
-    }
-
-    if(!sloom) {
-        if((exit_status = allocate_and_initialise_validity_flags(&valid,&validcnt))<0) {
-            print_messages_and_close_sndfiles(exit_status,is_launched,dz);
-            return(FAILED);
-        }
-    }
-
-    if(sflinit("cdp")){
-        sfperror("cdp: initialisation\n");
-        return(FAILED);
-    }
-
-    /* SET UP THE PRINCIPLE DATASTRUCTURE */
-    if((exit_status = establish_datastructure(&dz))<0) {
-        print_messages_and_close_sndfiles(exit_status,is_launched,dz);
-        return(FAILED);
-    }
-
-    if(!sloom) {
-        /* INITIAL CHECK OF CMDLINE DATA */
-        if((exit_status = make_initial_cmdline_check(&argc,&argv))<0) {
-            print_messages_and_close_sndfiles(exit_status,is_launched,dz);
-            return(FAILED);
-        }
-        cmdline    = argv;      /* GET PRE_DATA, ALLOCATE THE APPLICATION, CHECK FOR EXTRA INFILES */
-        cmdlinecnt = argc;
-        if((exit_status = get_process_and_mode_from_cmdline(&cmdlinecnt,&cmdline,dz))<0) {
-            print_messages_and_close_sndfiles(exit_status,is_launched,dz);
-            return(FAILED);
-        }
-        if((exit_status = setup_particular_application(dz))<0) {
-            print_messages_and_close_sndfiles(exit_status,is_launched,dz);
-            return(FAILED);
-        }
-        if((exit_status = count_and_allocate_for_infiles(cmdlinecnt,cmdline,dz))<0) {
-            print_messages_and_close_sndfiles(exit_status,is_launched,dz);
-            return(FAILED);
-        }
-    } else {
-        if((exit_status = parse_tk_data(argc,argv,&cmdline,&cmdlinecnt,dz))<0) {        /* includes setup_particular_application()      */
-            exit_status = print_messages_and_close_sndfiles(exit_status,is_launched,dz);/* and cmdlinelength check = sees extra-infiles */
-            return(exit_status);
-        }
-    }
-
-    //ap = dz->application;
-
-    /*********************************************************************************************************************
-           cmdline[0]                                             2 vals                                                          ACTIVE
-TK              (infile) (more-infiles) (outfile) (flag val) (formantsqksrch) (special) params  options   variant-params  flags
-CMDLINE (infile) (more-infiles) (outfile) (formants) (formantsqksrch) (special) params  POSSIBLY  POSSIBLY              POSSIBLY
-                                                                                  1 val
-    *********************************************************************************************************************/
-
-    if((exit_status = parse_infile_and_hone_type(cmdline[0],valid,dz))<0) {
-        print_messages_and_close_sndfiles(exit_status,is_launched,dz);
-        return(FAILED);
-    }
-
-    if((exit_status = setup_param_ranges_and_defaults(dz))<0) {
-        print_messages_and_close_sndfiles(exit_status,is_launched,dz);
-        return(FAILED);
-    }
-
-    /* OPEN FIRST INFILE AND STORE DATA, AND INFORMATION, APPROPRIATELY */
-
-    if(dz->input_data_type!=NO_FILE_AT_ALL) {
-        if((exit_status = open_first_infile(cmdline[0],dz))<0) {
-            print_messages_and_close_sndfiles(exit_status,is_launched,dz);
-            return(FAILED);
-        }
-        cmdlinecnt--;
-        cmdline++;
-    }
-
-    /*********************************************************************************************************************
-                cmdline[0]                                 2 vals                                                          ACTIVE
-TK              (more-infiles) (outfile) (flag val) (formantsqksrch) (special) params  options   variant-params  flags
-CMDLINE (more-infiles) (outfile) (formants) (formantsqksrch) (special) params  POSSIBLY  POSSIBLY                 POSSIBLY
-                                                                   1 val
-    *********************************************************************************************************************/
-
-    if((exit_status = handle_extra_infiles(&cmdline,&cmdlinecnt,dz))<0) {
-        print_messages_and_close_sndfiles(exit_status,is_launched,dz);
-        return(FAILED);
-    }
-
-    /*********************************************************************************************************************
-                cmdline[0]        2                                                                 ACTIVE
-TK              (outfile) (flag val) (formantsqksrch) (special) params  options   variant-params  flags
-CMDLINE (outfile) (formants) (formantsqksrch) (special) params  POSSIBLY  POSSIBLY                 POSSIBLY
-                                          1
-    *********************************************************************************************************************/
-
-    if((exit_status = handle_outfile(&cmdlinecnt,&cmdline,is_launched,dz))<0) {
-        print_messages_and_close_sndfiles(exit_status,is_launched,dz);
-        return(FAILED);
-    }
-
-    /****************************************************************************************
-                cmdline[0]                                                     ACTIVE
-TK              (flag val) (formantsqksrch) (special) params  options   variant-params  flags
-CMDLINE (formants) (formantsqksrch) (special) params  POSSIBLY  POSSIBLY                POSSIBLY
-    *****************************************************************************************/
-
-    if((exit_status = handle_formants(&cmdlinecnt,&cmdline,dz))<0) {
-        print_messages_and_close_sndfiles(exit_status,is_launched,dz);
-        return(FAILED);
-    }
-    if((exit_status = handle_formant_quiksearch(&cmdlinecnt,&cmdline,dz))<0) {
-        print_messages_and_close_sndfiles(exit_status,is_launched,dz);
-        return(FAILED);
-    }
-    if((exit_status = handle_special_data(&cmdlinecnt,&cmdline,dz))<0) {
-        print_messages_and_close_sndfiles(exit_status,is_launched,dz);
-        return(FAILED);
-    }
-
-    /****************************************************************************************
-                cmdline[0]
-TK              active_params   options                 variant-params  flags
-CMDLINE active_params   POSSIBLY                POSSIBLY                POSSIBLY
-    *****************************************************************************************/
-
-    if((exit_status = read_parameters_and_flags(&cmdline,&cmdlinecnt,dz))<0) {
-        print_messages_and_close_sndfiles(exit_status,is_launched,dz);
-        return(FAILED);
-    }
-
-    if((exit_status = check_param_validity_and_consistency(dz))<0) {
-        print_messages_and_close_sndfiles(exit_status,is_launched,dz);
-        return(FAILED);
-    }
-
-    is_launched = TRUE;
-
-    if((exit_status = allocate_large_buffers(dz))<0){
-        print_messages_and_close_sndfiles(exit_status,is_launched,dz);
-        return(FAILED);
-    }
-    if((exit_status = param_preprocess(dz))<0){
-        print_messages_and_close_sndfiles(exit_status,is_launched,dz);
-        return(FAILED);
-    }
-
-    if((exit_status = spec_process_file(dz))<0) {
-        print_messages_and_close_sndfiles(exit_status,is_launched,dz);
-        return(FAILED);
-    }
-
-    if((exit_status = complete_output(dz))<0) {
-        print_messages_and_close_sndfiles(exit_status,is_launched,dz);
-        return(FAILED);
-    }
-    exit_status = print_messages_and_close_sndfiles(FINISHED,is_launched,dz);
-    free(dz);
-    return(SUCCEEDED);
-}

BIN
blur/main.o