From b4c7ff205c0314e711aa76942b968b9dfc44450b Mon Sep 17 00:00:00 2001
From: Jonathan Wilkes <jon.w.wilkes@gmail.com>
Date: Fri, 26 Aug 2016 17:36:49 -0400
Subject: [PATCH] update iem_spec2 to Sourceforge svn

---
 externals/iem/iem_spec2/src/VC6/iem_spec2.dsp | 85 +++++++++++++++++++
 externals/iem/iem_spec2/src/VC6/iem_spec2.dsw | 29 +++++++
 externals/iem/iem_spec2/src/VC6/makefile_win  | 59 +++++++++++++
 .../iem/iem_spec2/src/VC7/iem_spec2.vcproj    | 52 ++++++++++++
 .../iem/iem_spec2/src/VC7/makefile_vc7proj    | 54 ++++++++++++
 externals/iem/iem_spec2/src/VC9/iem_spec2.sln | 20 +++++
 .../iem/iem_spec2/src/VC9/iem_spec2.vcproj    | 77 +++++++++++++++++
 .../iem/iem_spec2/src/VC9/makefile_vc9proj    | 53 ++++++++++++
 externals/iem/iem_spec2/src/iem_spec2.sln     | 20 +++++
 externals/iem/iem_spec2/src/iem_spec2.vcproj  | 77 +++++++++++++++++
 externals/iem/iem_spec2/src/iemlib.h          | 12 +--
 externals/iem/iem_spec2/src/makefile_vc9proj  | 54 ++++++++++++
 .../iem/iem_spec2/src/spec2_1p1z_freq~.c      |  2 +-
 .../iem/iem_spec2/src/spec2_1p1z_time~.c      |  2 +-
 externals/iem/iem_spec2/src/spec2_abs~.c      |  2 +-
 .../iem/iem_spec2/src/spec2_add_scalar~.c     |  2 +-
 externals/iem/iem_spec2/src/spec2_add~.c      |  2 +-
 .../iem/iem_spec2/src/spec2_block_delay~.c    |  2 +-
 externals/iem/iem_spec2/src/spec2_clip_max~.c |  2 +-
 externals/iem/iem_spec2/src/spec2_clip_min~.c |  2 +-
 externals/iem/iem_spec2/src/spec2_dbtopow~.c  |  2 +-
 externals/iem/iem_spec2/src/spec2_dbtorms~.c  |  2 +-
 .../iem_spec2/src/spec2_matrix_bundle_stat~.c |  2 +-
 .../iem/iem_spec2/src/spec2_mul_scalar~.c     |  2 +-
 externals/iem/iem_spec2/src/spec2_mul~.c      |  2 +-
 externals/iem/iem_spec2/src/spec2_powtodb~.c  |  2 +-
 externals/iem/iem_spec2/src/spec2_rmstodb~.c  |  2 +-
 externals/iem/iem_spec2/src/spec2_shift~.c    |  2 +-
 externals/iem/iem_spec2/src/spec2_sqrt~.c     | 57 ++++---------
 externals/iem/iem_spec2/src/spec2_stretch~.c  |  2 +-
 externals/iem/iem_spec2/src/spec2_sub~.c      |  2 +-
 externals/iem/iem_spec2/src/spec2_sum~.c      |  2 +-
 externals/iem/iem_spec2/src/spec2_tab_conv~.c |  2 +-
 .../iem_spec2/src/spec2_tabreceive_enable~.c  |  2 +-
 .../iem/iem_spec2/src/spec2_tabreceive~.c     |  2 +-
 35 files changed, 626 insertions(+), 67 deletions(-)
 create mode 100644 externals/iem/iem_spec2/src/VC6/iem_spec2.dsp
 create mode 100644 externals/iem/iem_spec2/src/VC6/iem_spec2.dsw
 create mode 100644 externals/iem/iem_spec2/src/VC6/makefile_win
 create mode 100644 externals/iem/iem_spec2/src/VC7/iem_spec2.vcproj
 create mode 100644 externals/iem/iem_spec2/src/VC7/makefile_vc7proj
 create mode 100644 externals/iem/iem_spec2/src/VC9/iem_spec2.sln
 create mode 100644 externals/iem/iem_spec2/src/VC9/iem_spec2.vcproj
 create mode 100644 externals/iem/iem_spec2/src/VC9/makefile_vc9proj
 create mode 100644 externals/iem/iem_spec2/src/iem_spec2.sln
 create mode 100644 externals/iem/iem_spec2/src/iem_spec2.vcproj
 create mode 100644 externals/iem/iem_spec2/src/makefile_vc9proj

diff --git a/externals/iem/iem_spec2/src/VC6/iem_spec2.dsp b/externals/iem/iem_spec2/src/VC6/iem_spec2.dsp
new file mode 100644
index 000000000..1bf63c111
--- /dev/null
+++ b/externals/iem/iem_spec2/src/VC6/iem_spec2.dsp
@@ -0,0 +1,85 @@
+# Microsoft Developer Studio Project File - Name="iem_spec2" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) External Target" 0x0106
+
+CFG=iem_spec2 - Win32 Debug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE 
+!MESSAGE NMAKE /f "iem_spec2.mak".
+!MESSAGE 
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE 
+!MESSAGE NMAKE /f "iem_spec2.mak" CFG="iem_spec2 - Win32 Debug"
+!MESSAGE 
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE 
+!MESSAGE "iem_spec2 - Win32 Release" (basierend auf  "Win32 (x86) External Target")
+!MESSAGE "iem_spec2 - Win32 Debug" (basierend auf  "Win32 (x86) External Target")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+
+!IF  "$(CFG)" == "iem_spec2 - Win32 Release"
+
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Cmd_Line "NMAKE /f makefile_win"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "makefile_win.exe"
+# PROP BASE Bsc_Name "makefile_win.bsc"
+# PROP BASE Target_Dir ""
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Cmd_Line "NMAKE /f makefile_win"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "iem_spec2.exe"
+# PROP Bsc_Name "iem_spec2.bsc"
+# PROP Target_Dir ""
+
+!ELSEIF  "$(CFG)" == "iem_spec2 - Win32 Debug"
+
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Cmd_Line "NMAKE /f makefile_win"
+# PROP BASE Rebuild_Opt "/a"
+# PROP BASE Target_File "makefile_win.exe"
+# PROP BASE Bsc_Name "makefile_win.bsc"
+# PROP BASE Target_Dir ""
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Cmd_Line "NMAKE /f makefile_win"
+# PROP Rebuild_Opt "/a"
+# PROP Target_File "iem_spec2.exe"
+# PROP Bsc_Name "iem_spec2.bsc"
+# PROP Target_Dir ""
+
+!ENDIF 
+
+# Begin Target
+
+# Name "iem_spec2 - Win32 Release"
+# Name "iem_spec2 - Win32 Debug"
+
+!IF  "$(CFG)" == "iem_spec2 - Win32 Release"
+
+!ELSEIF  "$(CFG)" == "iem_spec2 - Win32 Debug"
+
+!ENDIF 
+
+# Begin Source File
+
+SOURCE=.\makefile_win
+# End Source File
+# End Target
+# End Project
diff --git a/externals/iem/iem_spec2/src/VC6/iem_spec2.dsw b/externals/iem/iem_spec2/src/VC6/iem_spec2.dsw
new file mode 100644
index 000000000..0434831a8
--- /dev/null
+++ b/externals/iem/iem_spec2/src/VC6/iem_spec2.dsw
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNUNG: DIESE ARBEITSBEREICHSDATEI DARF NICHT BEARBEITET ODER GELÖSCHT WERDEN!
+
+###############################################################################
+
+Project: "iem_spec2"=.\iem_spec2.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/externals/iem/iem_spec2/src/VC6/makefile_win b/externals/iem/iem_spec2/src/VC6/makefile_win
new file mode 100644
index 000000000..ad427e275
--- /dev/null
+++ b/externals/iem/iem_spec2/src/VC6/makefile_win
@@ -0,0 +1,59 @@
+
+all: ..\iem_spec2.dll
+
+VIS_CPP_PATH = "C:\Programme\Microsoft Visual Studio\Vc98"
+
+PD_INST_PATH = "C:\Programme\pd"
+
+PD_WIN_INCLUDE_PATH = /I. /I$(PD_INST_PATH)\src /I$(VIS_CPP_PATH)\include
+
+PD_WIN_C_FLAGS = /nologo /W3 /WX /DMSW /DNT /DPD /DWIN32 /DWINDOWS /Ox -DPA_LITTLE_ENDIAN
+
+PD_WIN_L_FLAGS = /nologo
+
+PD_WIN_LIB = /NODEFAULTLIB:libc /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel /NODEFAULTLIB:uuid \
+	$(VIS_CPP_PATH)\lib\libc.lib \
+	$(VIS_CPP_PATH)\lib\oldnames.lib \
+	$(VIS_CPP_PATH)\lib\kernel32.lib \
+	$(VIS_CPP_PATH)\lib\wsock32.lib \
+	$(VIS_CPP_PATH)\lib\winmm.lib \
+	$(PD_INST_PATH)\bin\pd.lib
+
+
+SRC =	spec2_1p1z_freq~.c \
+	spec2_1p1z_time~.c \
+	spec2_abs~.c \
+	spec2_add_scalar~.c \
+	spec2_add~.c \
+	spec2_block_delay~.c \
+	spec2_clip_max~.c \
+	spec2_clip_min~.c \
+	spec2_dbtopow~.c \
+	spec2_dbtorms~.c \
+	spec2_matrix_bundle_stat~.c \
+	spec2_mul_scalar~.c \
+	spec2_mul~.c \
+  	spec2_powtodb~.c \
+	spec2_rmstodb~.c \
+	spec2_shift~.c \
+	spec2_sqrt~.c \
+	spec2_stretch~.c \
+	spec2_sub~.c \
+	spec2_sum~.c \
+	spec2_tab_conv~.c \
+	spec2_tabreceive_enable~.c \
+	spec2_tabreceive~.c \
+	iem_spec2.c
+
+
+OBJ = $(SRC:.c=.obj)
+
+.c.obj:
+	cl $(PD_WIN_C_FLAGS) $(PD_WIN_INCLUDE_PATH) /c $*.c
+
+..\iem_spec2.dll: $(OBJ)
+	link $(PD_WIN_L_FLAGS) /dll /export:iem_spec2_setup \
+	/out:..\iem_spec2.dll $(OBJ) $(PD_WIN_LIB)
+
+clean:
+	del *.obj
diff --git a/externals/iem/iem_spec2/src/VC7/iem_spec2.vcproj b/externals/iem/iem_spec2/src/VC7/iem_spec2.vcproj
new file mode 100644
index 000000000..8f507df2a
--- /dev/null
+++ b/externals/iem/iem_spec2/src/VC7/iem_spec2.vcproj
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="7.10"
+	Name="iem_spec2"
+	ProjectGUID="{6A44952F-0D55-44EE-9032-928368583BEC}"
+	SccProjectName=""
+	SccLocalPath=""
+	Keyword="MakeFileProj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\Debug"
+			IntermediateDirectory=".\Debug"
+			ConfigurationType="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="NMAKE /f makefile_vc7proj"
+				ReBuildCommandLine="NMAKE /f makefile_vc7proj /a"
+				Output="iem_spec2.exe"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\Release"
+			IntermediateDirectory=".\Release"
+			ConfigurationType="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE">
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="NMAKE /f makefile_vc7proj"
+				ReBuildCommandLine="NMAKE /f makefile_vc7proj /a"
+				Output="iem_spec2.exe"/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="iem_spec2.bsc">
+		</File>
+		<File
+			RelativePath="makefile_vc7proj">
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/externals/iem/iem_spec2/src/VC7/makefile_vc7proj b/externals/iem/iem_spec2/src/VC7/makefile_vc7proj
new file mode 100644
index 000000000..8dce1707f
--- /dev/null
+++ b/externals/iem/iem_spec2/src/VC7/makefile_vc7proj
@@ -0,0 +1,54 @@
+TARGET = iem_spec2
+
+all: ..\$(TARGET).dll
+
+VIS_CPP_PATH = "C:\Programme\Microsoft Visual Studio .NET 2003\Vc7"
+VIS_SDK_PATH = "C:\Programme\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK"
+PD_INST_PATH = "C:\Programme\pd-0.42-5"
+PD_WIN_INCLUDE_PATH = /I. /I$(PD_INST_PATH)\src /I$(VIS_CPP_PATH)\include
+PD_WIN_C_FLAGS = /nologo /W3 /WX /DMSW /DNT /DPD /DWIN32 /DWINDOWS /Ox -D_CRT_SECURE_NO_WARNINGS
+PD_WIN_L_FLAGS = /nologo
+
+PD_WIN_LIB = /NODEFAULTLIB:libcmt /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel32 \
+	$(VIS_CPP_PATH)\lib\libcmt.lib \
+	$(VIS_CPP_PATH)\lib\oldnames.lib \
+	$(VIS_SDK_PATH)\lib\kernel32.lib \
+	$(PD_INST_PATH)\bin\pd.lib
+
+SRC =	spec2_1p1z_freq~.c \
+	spec2_1p1z_time~.c \
+	spec2_abs~.c \
+	spec2_add_scalar~.c \
+	spec2_add~.c \
+	spec2_block_delay~.c \
+	spec2_clip_max~.c \
+	spec2_clip_min~.c \
+	spec2_dbtopow~.c \
+	spec2_dbtorms~.c \
+	spec2_matrix_bundle_stat~.c \
+	spec2_mul_scalar~.c \
+	spec2_mul~.c \
+  	spec2_powtodb~.c \
+	spec2_rmstodb~.c \
+	spec2_shift~.c \
+	spec2_sqrt~.c \
+	spec2_stretch~.c \
+	spec2_sub~.c \
+	spec2_sum~.c \
+	spec2_tab_conv~.c \
+	spec2_tabreceive_enable~.c \
+	spec2_tabreceive~.c \
+	iem_spec2.c
+
+
+OBJ = $(SRC:.c=.obj)
+
+.c.obj:
+	cl $(PD_WIN_C_FLAGS) $(PD_WIN_INCLUDE_PATH) /c $*.c
+
+..\$(TARGET).dll: $(OBJ)
+	link $(PD_WIN_L_FLAGS) /dll /export:$(TARGET)_setup \
+	/out:..\$(TARGET).dll $(OBJ) $(PD_WIN_LIB)
+
+clean:
+	del *.obj
diff --git a/externals/iem/iem_spec2/src/VC9/iem_spec2.sln b/externals/iem/iem_spec2/src/VC9/iem_spec2.sln
new file mode 100644
index 000000000..f4b9113b4
--- /dev/null
+++ b/externals/iem/iem_spec2/src/VC9/iem_spec2.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iem_spec2", "iem_spec2.vcproj", "{6A44952F-0D55-44EE-9032-928368583BEC}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{6A44952F-0D55-44EE-9032-928368583BEC}.Debug|Win32.ActiveCfg = Debug|Win32
+		{6A44952F-0D55-44EE-9032-928368583BEC}.Debug|Win32.Build.0 = Debug|Win32
+		{6A44952F-0D55-44EE-9032-928368583BEC}.Release|Win32.ActiveCfg = Release|Win32
+		{6A44952F-0D55-44EE-9032-928368583BEC}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/externals/iem/iem_spec2/src/VC9/iem_spec2.vcproj b/externals/iem/iem_spec2/src/VC9/iem_spec2.vcproj
new file mode 100644
index 000000000..24243119e
--- /dev/null
+++ b/externals/iem/iem_spec2/src/VC9/iem_spec2.vcproj
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="iem_spec2"
+	ProjectGUID="{6A44952F-0D55-44EE-9032-928368583BEC}"
+	Keyword="MakeFileProj"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\Debug"
+			IntermediateDirectory=".\Debug"
+			ConfigurationType="0"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="NMAKE /f makefile_vc9proj"
+				ReBuildCommandLine="NMAKE /f makefile_vc9proj /a"
+				CleanCommandLine=""
+				Output="iem_spec2.exe"
+				PreprocessorDefinitions=""
+				IncludeSearchPath=""
+				ForcedIncludes=""
+				AssemblySearchPath=""
+				ForcedUsingAssemblies=""
+				CompileAsManaged=""
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\Release"
+			IntermediateDirectory=".\Release"
+			ConfigurationType="0"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="NMAKE /f makefile_vc9proj"
+				ReBuildCommandLine="NMAKE /f makefile_vc9proj /a"
+				CleanCommandLine=""
+				Output="iem_spec2.exe"
+				PreprocessorDefinitions=""
+				IncludeSearchPath=""
+				ForcedIncludes=""
+				AssemblySearchPath=""
+				ForcedUsingAssemblies=""
+				CompileAsManaged=""
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="iem_spec2.bsc"
+			>
+		</File>
+		<File
+			RelativePath="makefile_vc9proj"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/externals/iem/iem_spec2/src/VC9/makefile_vc9proj b/externals/iem/iem_spec2/src/VC9/makefile_vc9proj
new file mode 100644
index 000000000..e2e820569
--- /dev/null
+++ b/externals/iem/iem_spec2/src/VC9/makefile_vc9proj
@@ -0,0 +1,53 @@
+TARGET = iem_spec2
+
+all: ..\$(TARGET).dll
+
+VIS_CPP_PATH = "C:\Program Files\Microsoft Visual Studio 9.0\VC"
+VIS_SDK_PATH = "C:\Program Files\Microsoft SDKs\Windows\v6.0A"
+PD_INST_PATH = "C:\Program Files\pd-0.43.0"
+PD_WIN_INCLUDE_PATH = /I. /I$(PD_INST_PATH)\src /I$(VIS_CPP_PATH)\include
+PD_WIN_C_FLAGS = /nologo /W3 /WX /DMSW /DNT /DPD /DWIN32 /DWINDOWS /Ox -D_CRT_SECURE_NO_WARNINGS
+PD_WIN_L_FLAGS = /nologo
+
+PD_WIN_LIB = /NODEFAULTLIB:libcmt /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel32 \
+	$(VIS_CPP_PATH)\lib\libcmt.lib \
+	$(VIS_CPP_PATH)\lib\oldnames.lib \
+	$(VIS_SDK_PATH)\lib\kernel32.lib \
+	$(PD_INST_PATH)\bin\pd.lib
+
+SRC =	spec2_1p1z_freq~.c \
+	spec2_1p1z_time~.c \
+	spec2_abs~.c \
+	spec2_add_scalar~.c \
+	spec2_add~.c \
+	spec2_block_delay~.c \
+	spec2_clip_max~.c \
+	spec2_clip_min~.c \
+	spec2_dbtopow~.c \
+	spec2_dbtorms~.c \
+	spec2_matrix_bundle_stat~.c \
+	spec2_mul_scalar~.c \
+	spec2_mul~.c \
+  	spec2_powtodb~.c \
+	spec2_rmstodb~.c \
+	spec2_shift~.c \
+	spec2_sqrt~.c \
+	spec2_stretch~.c \
+	spec2_sub~.c \
+	spec2_sum~.c \
+	spec2_tab_conv~.c \
+	spec2_tabreceive_enable~.c \
+	spec2_tabreceive~.c \
+	iem_spec2.c
+
+OBJ = $(SRC:.c=.obj)
+
+.c.obj:
+	cl $(PD_WIN_C_FLAGS) $(PD_WIN_INCLUDE_PATH) /c $*.c
+
+..\$(TARGET).dll: $(OBJ)
+	link $(PD_WIN_L_FLAGS) /dll /export:$(TARGET)_setup \
+	/out:..\$(TARGET).dll $(OBJ) $(PD_WIN_LIB)
+
+clean:
+	del *.obj
diff --git a/externals/iem/iem_spec2/src/iem_spec2.sln b/externals/iem/iem_spec2/src/iem_spec2.sln
new file mode 100644
index 000000000..f4b9113b4
--- /dev/null
+++ b/externals/iem/iem_spec2/src/iem_spec2.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "iem_spec2", "iem_spec2.vcproj", "{6A44952F-0D55-44EE-9032-928368583BEC}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{6A44952F-0D55-44EE-9032-928368583BEC}.Debug|Win32.ActiveCfg = Debug|Win32
+		{6A44952F-0D55-44EE-9032-928368583BEC}.Debug|Win32.Build.0 = Debug|Win32
+		{6A44952F-0D55-44EE-9032-928368583BEC}.Release|Win32.ActiveCfg = Release|Win32
+		{6A44952F-0D55-44EE-9032-928368583BEC}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/externals/iem/iem_spec2/src/iem_spec2.vcproj b/externals/iem/iem_spec2/src/iem_spec2.vcproj
new file mode 100644
index 000000000..24243119e
--- /dev/null
+++ b/externals/iem/iem_spec2/src/iem_spec2.vcproj
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9,00"
+	Name="iem_spec2"
+	ProjectGUID="{6A44952F-0D55-44EE-9032-928368583BEC}"
+	Keyword="MakeFileProj"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\Debug"
+			IntermediateDirectory=".\Debug"
+			ConfigurationType="0"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="NMAKE /f makefile_vc9proj"
+				ReBuildCommandLine="NMAKE /f makefile_vc9proj /a"
+				CleanCommandLine=""
+				Output="iem_spec2.exe"
+				PreprocessorDefinitions=""
+				IncludeSearchPath=""
+				ForcedIncludes=""
+				AssemblySearchPath=""
+				ForcedUsingAssemblies=""
+				CompileAsManaged=""
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\Release"
+			IntermediateDirectory=".\Release"
+			ConfigurationType="0"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			>
+			<Tool
+				Name="VCNMakeTool"
+				BuildCommandLine="NMAKE /f makefile_vc9proj"
+				ReBuildCommandLine="NMAKE /f makefile_vc9proj /a"
+				CleanCommandLine=""
+				Output="iem_spec2.exe"
+				PreprocessorDefinitions=""
+				IncludeSearchPath=""
+				ForcedIncludes=""
+				AssemblySearchPath=""
+				ForcedUsingAssemblies=""
+				CompileAsManaged=""
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath="iem_spec2.bsc"
+			>
+		</File>
+		<File
+			RelativePath="makefile_vc9proj"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/externals/iem/iem_spec2/src/iemlib.h b/externals/iem/iem_spec2/src/iemlib.h
index 97b088bab..ac1ffced3 100644
--- a/externals/iem/iem_spec2/src/iemlib.h
+++ b/externals/iem/iem_spec2/src/iemlib.h
@@ -1,12 +1,13 @@
 /* For information on usage and redistribution, and for a DISCLAIMER OF ALL
 * WARRANTIES, see the file, "LICENSE.txt," in this distribution.
 
-iemlib written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2009 */
+iemlib written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2012 */
 
 #ifndef __IEMLIB_H__
 #define __IEMLIB_H__
 
 
+#define IS_A_NULL(atom,index) ((atom+index)->a_type == A_NULL)
 #define IS_A_POINTER(atom,index) ((atom+index)->a_type == A_POINTER)
 #define IS_A_FLOAT(atom,index) ((atom+index)->a_type == A_FLOAT)
 #define IS_A_SYMBOL(atom,index) ((atom+index)->a_type == A_SYMBOL)
@@ -15,6 +16,8 @@ iemlib written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 2009 *
 #define IS_A_SEMI(atom,index) ((atom+index)->a_type == A_SEMI)
 #define IS_A_COMMA(atom,index) ((atom+index)->a_type == A_COMMA)
 
+#define SETNULL(atom) ((atom)->a_type = A_NULL)
+
 /* now miller's code starts : 
      for 4 point interpolation
      for lookup tables
@@ -53,11 +56,11 @@ extern int sys_noloadbang;
 #define int32 long
 #endif /* MSW */
 
-#if defined(__FreeBSD__) || defined(__APPLE__)
+#if defined(__FreeBSD__) || defined(__APPLE__) || defined(__FreeBSD_kernel__)
 #include <machine/endian.h>
 #endif
 
-#ifdef __linux__
+#if defined(__linux__) || defined(__CYGWIN__) || defined(__GNU__) || defined(ANDROID)
 #include <endian.h>
 #endif
 
@@ -100,7 +103,7 @@ union tabfudge_f
 #endif
 
 /* on 64bit systems we cannot use garray_getfloatarray... */
-#if (defined __x86_64__)
+#if ((defined PD_MAJOR_VERSION && defined PD_MINOR_VERSION) && (PD_MAJOR_VERSION > 0 || PD_MINOR_VERSION > 40))
 # define iemarray_t t_word
 # define iemarray_getarray garray_getfloatwords
 # define iemarray_getfloat(pointer, index) (pointer[index].w_float)
@@ -112,5 +115,4 @@ union tabfudge_f
 # define iemarray_setfloat(pointer, index, fvalue) (pointer[index] = fvalue)
 #endif
 
-
 #endif
diff --git a/externals/iem/iem_spec2/src/makefile_vc9proj b/externals/iem/iem_spec2/src/makefile_vc9proj
new file mode 100644
index 000000000..1d07adb0d
--- /dev/null
+++ b/externals/iem/iem_spec2/src/makefile_vc9proj
@@ -0,0 +1,54 @@
+TARGET = iem_spec2
+
+all: ..\$(TARGET).dll
+
+VIS_CPP_PATH = "$(PROGRAMFILES)\Microsoft Visual Studio 9.0\VC"
+VIS_SDK_PATH = "$(PROGRAMFILES)\Microsoft SDKs\Windows\v6.0A"
+PD_INST_PATH = "$(PROGRAMFILES)\pd"
+PD_WIN_INCLUDE_PATH = /I. /I..\..\include /I$(PD_INST_PATH)\src /I$(VIS_CPP_PATH)\include
+PD_WIN_C_FLAGS = /nologo /W3 /WX /DMSW /DNT /DPD /DWIN32 /DWINDOWS /DHAVE_G_CANVAS_H /Ox -D_CRT_SECURE_NO_WARNINGS
+PD_WIN_L_FLAGS = /nologo
+
+PD_WIN_LIB = /NODEFAULTLIB:libcmt /NODEFAULTLIB:oldnames /NODEFAULTLIB:kernel32 \
+	$(VIS_CPP_PATH)\lib\libcmt.lib \
+	$(VIS_CPP_PATH)\lib\oldnames.lib \
+	$(VIS_SDK_PATH)\lib\kernel32.lib \
+	$(PD_INST_PATH)\bin\pd.lib
+
+SRC =	spec2_1p1z_freq~.c \
+	spec2_1p1z_time~.c \
+	spec2_abs~.c \
+	spec2_add_scalar~.c \
+	spec2_add~.c \
+	spec2_block_delay~.c \
+	spec2_clip_max~.c \
+	spec2_clip_min~.c \
+	spec2_dbtopow~.c \
+	spec2_dbtorms~.c \
+	spec2_matrix_bundle_stat~.c \
+	spec2_mul_scalar~.c \
+	spec2_mul~.c \
+  	spec2_powtodb~.c \
+	spec2_rmstodb~.c \
+	spec2_shift~.c \
+	spec2_sqrt~.c \
+	spec2_stretch~.c \
+	spec2_sub~.c \
+	spec2_sum~.c \
+	spec2_tab_conv~.c \
+	spec2_tabreceive_enable~.c \
+	spec2_tabreceive~.c \
+	$(TARGET).c
+
+
+OBJ = $(SRC:.c=.obj)
+
+.c.obj:
+	cl $(PD_WIN_C_FLAGS) $(PD_WIN_INCLUDE_PATH) /c $*.c
+
+..\$(TARGET).dll: $(OBJ)
+	link $(PD_WIN_L_FLAGS) /dll /export:$(TARGET)_setup \
+	/out:..\$(TARGET).dll $(OBJ) $(PD_WIN_LIB)
+
+clean:
+	del *.obj
diff --git a/externals/iem/iem_spec2/src/spec2_1p1z_freq~.c b/externals/iem/iem_spec2/src/spec2_1p1z_freq~.c
index 0655f1683..6d95a8649 100644
--- a/externals/iem/iem_spec2/src/spec2_1p1z_freq~.c
+++ b/externals/iem/iem_spec2/src/spec2_1p1z_freq~.c
@@ -498,7 +498,7 @@ void spec2_1p1z_freq_tilde_setup(void)
   spec2_1p1z_freq_tilde_class = class_new(gensym("spec2_1p1z_freq~"), (t_newmethod)spec2_1p1z_freq_tilde_new,
     (t_method)spec2_1p1z_freq_tilde_free, sizeof(t_spec2_1p1z_freq_tilde), 0, A_GIMME, 0);
   CLASS_MAINSIGNALIN(spec2_1p1z_freq_tilde_class, t_spec2_1p1z_freq_tilde, x_msi);
-  class_addmethod(spec2_1p1z_freq_tilde_class, (t_method)spec2_1p1z_freq_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_1p1z_freq_tilde_class, (t_method)spec2_1p1z_freq_tilde_dsp, gensym("dsp"), 0);
   class_addlist(spec2_1p1z_freq_tilde_class, (t_method)spec2_1p1z_freq_tilde_list);
 //  class_sethelpsymbol(spec2_1p1z_freq_tilde_class, gensym("iemhelp2/spec2_1p1z_freq~-help"));
 }
diff --git a/externals/iem/iem_spec2/src/spec2_1p1z_time~.c b/externals/iem/iem_spec2/src/spec2_1p1z_time~.c
index 8d2dd1cdd..852ea9908 100644
--- a/externals/iem/iem_spec2/src/spec2_1p1z_time~.c
+++ b/externals/iem/iem_spec2/src/spec2_1p1z_time~.c
@@ -210,6 +210,6 @@ void spec2_1p1z_time_tilde_setup(void)
     sizeof(t_spec2_1p1z_time_tilde), 0, A_GIMME, 0);
   CLASS_MAINSIGNALIN(spec2_1p1z_time_tilde_class, t_spec2_1p1z_time_tilde, x_msi);
   class_addlist(spec2_1p1z_time_tilde_class, (t_method)spec2_1p1z_time_tilde_list);
-  class_addmethod(spec2_1p1z_time_tilde_class, (t_method)spec2_1p1z_time_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_1p1z_time_tilde_class, (t_method)spec2_1p1z_time_tilde_dsp, gensym("dsp"), 0);
 //  class_sethelpsymbol(spec2_1p1z_time_tilde_class, gensym("iemhelp2/spec2_1p1z_time~-help"));
 }
diff --git a/externals/iem/iem_spec2/src/spec2_abs~.c b/externals/iem/iem_spec2/src/spec2_abs~.c
index f3664bd24..521b0e0f9 100644
--- a/externals/iem/iem_spec2/src/spec2_abs~.c
+++ b/externals/iem/iem_spec2/src/spec2_abs~.c
@@ -87,6 +87,6 @@ void spec2_abs_tilde_setup(void)
   spec2_abs_tilde_class = class_new(gensym("spec2_abs~"), (t_newmethod)spec2_abs_tilde_new,
     0, sizeof(t_spec2_abs_tilde), 0, 0);
   CLASS_MAINSIGNALIN(spec2_abs_tilde_class, t_spec2_abs_tilde, x_msi);
-  class_addmethod(spec2_abs_tilde_class, (t_method)spec2_abs_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_abs_tilde_class, (t_method)spec2_abs_tilde_dsp, gensym("dsp"), 0);
 //  class_sethelpsymbol(spec2_abs_tilde_class, gensym("iemhelp2/spec2_abs~-help"));
 }
diff --git a/externals/iem/iem_spec2/src/spec2_add_scalar~.c b/externals/iem/iem_spec2/src/spec2_add_scalar~.c
index 7a849fcdd..219baeefc 100644
--- a/externals/iem/iem_spec2/src/spec2_add_scalar~.c
+++ b/externals/iem/iem_spec2/src/spec2_add_scalar~.c
@@ -101,6 +101,6 @@ void spec2_add_scalar_tilde_setup(void)
   class_addcreator((t_newmethod)spec2_add_scalar_tilde_new, gensym("spec2+s~"), A_DEFFLOAT, 0);
   CLASS_MAINSIGNALIN(spec2_add_scalar_tilde_class, t_spec2_add_scalar_tilde, x_msi);
   class_addmethod(spec2_add_scalar_tilde_class, (t_method)spec2_add_scalar_tilde_ft1, gensym("ft1"), A_FLOAT, 0);
-  class_addmethod(spec2_add_scalar_tilde_class, (t_method)spec2_add_scalar_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_add_scalar_tilde_class, (t_method)spec2_add_scalar_tilde_dsp, gensym("dsp"), 0);
 //  class_sethelpsymbol(spec2_add_scalar_tilde_class, gensym("iemhelp2/spec2_add_scalar~-help"));
 }
diff --git a/externals/iem/iem_spec2/src/spec2_add~.c b/externals/iem/iem_spec2/src/spec2_add~.c
index e9cfbb0f9..cfb7249f6 100644
--- a/externals/iem/iem_spec2/src/spec2_add~.c
+++ b/externals/iem/iem_spec2/src/spec2_add~.c
@@ -96,6 +96,6 @@ void spec2_add_tilde_setup(void)
     sizeof(t_spec2_add_tilde), 0, 0);
   class_addcreator((t_newmethod)spec2_add_tilde_new, gensym("spec2+~"), 0);
   CLASS_MAINSIGNALIN(spec2_add_tilde_class, t_spec2_add_tilde, x_msi);
-  class_addmethod(spec2_add_tilde_class, (t_method)spec2_add_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_add_tilde_class, (t_method)spec2_add_tilde_dsp, gensym("dsp"), 0);
 //  class_sethelpsymbol(spec2_add_tilde_class, gensym("iemhelp2/spec2_add~-help"));
 }
diff --git a/externals/iem/iem_spec2/src/spec2_block_delay~.c b/externals/iem/iem_spec2/src/spec2_block_delay~.c
index cd1bba499..5c52b2863 100644
--- a/externals/iem/iem_spec2/src/spec2_block_delay~.c
+++ b/externals/iem/iem_spec2/src/spec2_block_delay~.c
@@ -152,6 +152,6 @@ void spec2_block_delay_tilde_setup(void)
   spec2_block_delay_tilde_class = class_new(gensym("spec2_block_delay~"), (t_newmethod)spec2_block_delay_tilde_new, (t_method)spec2_block_delay_tilde_free,
     sizeof(t_spec2_block_delay_tilde), 0, 0);
   CLASS_MAINSIGNALIN(spec2_block_delay_tilde_class, t_spec2_block_delay_tilde, x_msi);
-  class_addmethod(spec2_block_delay_tilde_class, (t_method)spec2_block_delay_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_block_delay_tilde_class, (t_method)spec2_block_delay_tilde_dsp, gensym("dsp"), 0);
 //  class_sethelpsymbol(spec2_block_delay_tilde_class, gensym("iemhelp2/spec2_block_delay~-help"));
 }
diff --git a/externals/iem/iem_spec2/src/spec2_clip_max~.c b/externals/iem/iem_spec2/src/spec2_clip_max~.c
index f21a43cec..2aebcdc64 100644
--- a/externals/iem/iem_spec2/src/spec2_clip_max~.c
+++ b/externals/iem/iem_spec2/src/spec2_clip_max~.c
@@ -162,6 +162,6 @@ void spec2_clip_max_tilde_setup(void)
   spec2_clip_max_tilde_class = class_new(gensym("spec2_clip_max~"), (t_newmethod)spec2_clip_max_tilde_new, (t_method)spec2_clip_max_tilde_free,
     sizeof(t_spec2_clip_max_tilde), 0, 0);
   CLASS_MAINSIGNALIN(spec2_clip_max_tilde_class, t_spec2_clip_max_tilde, x_msi);
-  class_addmethod(spec2_clip_max_tilde_class, (t_method)spec2_clip_max_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_clip_max_tilde_class, (t_method)spec2_clip_max_tilde_dsp, gensym("dsp"), 0);
 //  class_sethelpsymbol(spec2_clip_max_tilde_class, gensym("iemhelp2/spec2_clip_max~-help"));
 }
diff --git a/externals/iem/iem_spec2/src/spec2_clip_min~.c b/externals/iem/iem_spec2/src/spec2_clip_min~.c
index 72fce1de8..ccdbf12cb 100644
--- a/externals/iem/iem_spec2/src/spec2_clip_min~.c
+++ b/externals/iem/iem_spec2/src/spec2_clip_min~.c
@@ -162,6 +162,6 @@ void spec2_clip_min_tilde_setup(void)
   spec2_clip_min_tilde_class = class_new(gensym("spec2_clip_min~"), (t_newmethod)spec2_clip_min_tilde_new, (t_method)spec2_clip_min_tilde_free,
     sizeof(t_spec2_clip_min_tilde), 0, 0);
   CLASS_MAINSIGNALIN(spec2_clip_min_tilde_class, t_spec2_clip_min_tilde, x_msi);
-  class_addmethod(spec2_clip_min_tilde_class, (t_method)spec2_clip_min_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_clip_min_tilde_class, (t_method)spec2_clip_min_tilde_dsp, gensym("dsp"), 0);
 //  class_sethelpsymbol(spec2_clip_min_tilde_class, gensym("iemhelp2/spec2_clip_min~-help"));
 }
diff --git a/externals/iem/iem_spec2/src/spec2_dbtopow~.c b/externals/iem/iem_spec2/src/spec2_dbtopow~.c
index 6efae54fc..e780af45b 100644
--- a/externals/iem/iem_spec2/src/spec2_dbtopow~.c
+++ b/externals/iem/iem_spec2/src/spec2_dbtopow~.c
@@ -62,6 +62,6 @@ void spec2_dbtopow_tilde_setup(void)
   spec2_dbtopow_tilde_class = class_new(gensym("spec2_dbtopow~"), (t_newmethod)spec2_dbtopow_tilde_new,
     0, sizeof(t_spec2_dbtopow_tilde), 0, 0);
   CLASS_MAINSIGNALIN(spec2_dbtopow_tilde_class, t_spec2_dbtopow_tilde, x_msi);
-  class_addmethod(spec2_dbtopow_tilde_class, (t_method)spec2_dbtopow_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_dbtopow_tilde_class, (t_method)spec2_dbtopow_tilde_dsp, gensym("dsp"), 0);
 //  class_sethelpsymbol(spec2_dbtopow_tilde_class, gensym("iemhelp2/spec2_dbtopow~-help"));
 }
diff --git a/externals/iem/iem_spec2/src/spec2_dbtorms~.c b/externals/iem/iem_spec2/src/spec2_dbtorms~.c
index a5f5199d9..b89ff9b49 100644
--- a/externals/iem/iem_spec2/src/spec2_dbtorms~.c
+++ b/externals/iem/iem_spec2/src/spec2_dbtorms~.c
@@ -62,6 +62,6 @@ void spec2_dbtorms_tilde_setup(void)
   spec2_dbtorms_tilde_class = class_new(gensym("spec2_dbtorms~"), (t_newmethod)spec2_dbtorms_tilde_new,
     0, sizeof(t_spec2_dbtorms_tilde), 0, 0);
   CLASS_MAINSIGNALIN(spec2_dbtorms_tilde_class, t_spec2_dbtorms_tilde, x_msi);
-  class_addmethod(spec2_dbtorms_tilde_class, (t_method)spec2_dbtorms_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_dbtorms_tilde_class, (t_method)spec2_dbtorms_tilde_dsp, gensym("dsp"), 0);
 //  class_sethelpsymbol(spec2_dbtorms_tilde_class, gensym("iemhelp2/spec2_dbtorms~-help"));
 }
diff --git a/externals/iem/iem_spec2/src/spec2_matrix_bundle_stat~.c b/externals/iem/iem_spec2/src/spec2_matrix_bundle_stat~.c
index 72624fd97..b4efea449 100644
--- a/externals/iem/iem_spec2/src/spec2_matrix_bundle_stat~.c
+++ b/externals/iem/iem_spec2/src/spec2_matrix_bundle_stat~.c
@@ -277,7 +277,7 @@ void spec2_matrix_bundle_stat_tilde_setup(void)
   spec2_matrix_bundle_stat_tilde_class = class_new(gensym("spec2_matrix_bundle_stat~"), (t_newmethod)spec2_matrix_bundle_stat_tilde_new, (t_method)spec2_matrix_bundle_stat_tilde_free,
     sizeof(t_spec2_matrix_bundle_stat_tilde), 0, A_GIMME, 0);
   CLASS_MAINSIGNALIN(spec2_matrix_bundle_stat_tilde_class, t_spec2_matrix_bundle_stat_tilde, x_msi);
-  class_addmethod(spec2_matrix_bundle_stat_tilde_class, (t_method)spec2_matrix_bundle_stat_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_matrix_bundle_stat_tilde_class, (t_method)spec2_matrix_bundle_stat_tilde_dsp, gensym("dsp"), 0);
   class_addlist(spec2_matrix_bundle_stat_tilde_class, (t_method)spec2_matrix_bundle_stat_tilde_list);
   class_addmethod(spec2_matrix_bundle_stat_tilde_class, (t_method)spec2_matrix_bundle_stat_tilde_element, gensym("element"), A_GIMME, 0);
   class_addmethod(spec2_matrix_bundle_stat_tilde_class, (t_method)spec2_matrix_bundle_stat_tilde_bundle, gensym("bundle"), A_GIMME, 0);
diff --git a/externals/iem/iem_spec2/src/spec2_mul_scalar~.c b/externals/iem/iem_spec2/src/spec2_mul_scalar~.c
index 941d9e7c1..3ff5a7e52 100644
--- a/externals/iem/iem_spec2/src/spec2_mul_scalar~.c
+++ b/externals/iem/iem_spec2/src/spec2_mul_scalar~.c
@@ -100,6 +100,6 @@ void spec2_mul_scalar_tilde_setup(void)
   class_addcreator((t_newmethod)spec2_mul_scalar_tilde_new, gensym("spec2*s~"), A_DEFFLOAT, 0);
   CLASS_MAINSIGNALIN(spec2_mul_scalar_tilde_class, t_spec2_mul_scalar_tilde, x_msi);
   class_addmethod(spec2_mul_scalar_tilde_class, (t_method)spec2_mul_scalar_tilde_ft1, gensym("ft1"), A_FLOAT, 0);
-  class_addmethod(spec2_mul_scalar_tilde_class, (t_method)spec2_mul_scalar_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_mul_scalar_tilde_class, (t_method)spec2_mul_scalar_tilde_dsp, gensym("dsp"), 0);
 //  class_sethelpsymbol(spec2_mul_scalar_tilde_class, gensym("iemhelp2/spec2_mul_scalar~-help"));
 }
diff --git a/externals/iem/iem_spec2/src/spec2_mul~.c b/externals/iem/iem_spec2/src/spec2_mul~.c
index 2d7d753ac..97b8605a5 100644
--- a/externals/iem/iem_spec2/src/spec2_mul~.c
+++ b/externals/iem/iem_spec2/src/spec2_mul~.c
@@ -95,6 +95,6 @@ void spec2_mul_tilde_setup(void)
     sizeof(t_spec2_mul_tilde), 0, 0);
   class_addcreator((t_newmethod)spec2_mul_tilde_new, gensym("spec2*~"), 0);
   CLASS_MAINSIGNALIN(spec2_mul_tilde_class, t_spec2_mul_tilde, x_msi);
-  class_addmethod(spec2_mul_tilde_class, (t_method)spec2_mul_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_mul_tilde_class, (t_method)spec2_mul_tilde_dsp, gensym("dsp"), 0);
 //  class_sethelpsymbol(spec2_mul_tilde_class, gensym("iemhelp2/spec2_mul~-help"));
 }
diff --git a/externals/iem/iem_spec2/src/spec2_powtodb~.c b/externals/iem/iem_spec2/src/spec2_powtodb~.c
index 9099c8a47..d9fa7cba5 100644
--- a/externals/iem/iem_spec2/src/spec2_powtodb~.c
+++ b/externals/iem/iem_spec2/src/spec2_powtodb~.c
@@ -61,6 +61,6 @@ void spec2_powtodb_tilde_setup(void)
   spec2_powtodb_tilde_class = class_new(gensym("spec2_powtodb~"), (t_newmethod)spec2_powtodb_tilde_new,
     0, sizeof(t_spec2_powtodb_tilde), 0, 0);
   CLASS_MAINSIGNALIN(spec2_powtodb_tilde_class, t_spec2_powtodb_tilde, x_msi);
-  class_addmethod(spec2_powtodb_tilde_class, (t_method)spec2_powtodb_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_powtodb_tilde_class, (t_method)spec2_powtodb_tilde_dsp, gensym("dsp"), 0);
 //  class_sethelpsymbol(spec2_powtodb_tilde_class, gensym("iemhelp2/spec2_powtodb~-help"));
 }
diff --git a/externals/iem/iem_spec2/src/spec2_rmstodb~.c b/externals/iem/iem_spec2/src/spec2_rmstodb~.c
index 57dc92c5f..0bba8e3b9 100644
--- a/externals/iem/iem_spec2/src/spec2_rmstodb~.c
+++ b/externals/iem/iem_spec2/src/spec2_rmstodb~.c
@@ -62,6 +62,6 @@ void spec2_rmstodb_tilde_setup(void)
   spec2_rmstodb_tilde_class = class_new(gensym("spec2_rmstodb~"), (t_newmethod)spec2_rmstodb_tilde_new,
     0, sizeof(t_spec2_rmstodb_tilde), 0, 0);
   CLASS_MAINSIGNALIN(spec2_rmstodb_tilde_class, t_spec2_rmstodb_tilde, x_msi);
-  class_addmethod(spec2_rmstodb_tilde_class, (t_method)spec2_rmstodb_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_rmstodb_tilde_class, (t_method)spec2_rmstodb_tilde_dsp, gensym("dsp"), 0);
 //  class_sethelpsymbol(spec2_rmstodb_tilde_class, gensym("iemhelp2/spec2_rmstodb~-help"));
 }
diff --git a/externals/iem/iem_spec2/src/spec2_shift~.c b/externals/iem/iem_spec2/src/spec2_shift~.c
index 7c63c545f..de3471e6b 100644
--- a/externals/iem/iem_spec2/src/spec2_shift~.c
+++ b/externals/iem/iem_spec2/src/spec2_shift~.c
@@ -101,7 +101,7 @@ void spec2_shift_tilde_setup(void)
   spec2_shift_tilde_class = class_new(gensym("spec2_shift~"), (t_newmethod)spec2_shift_tilde_new,
     0, sizeof(t_spec2_shift_tilde), 0, A_DEFFLOAT, 0);
   CLASS_MAINSIGNALIN(spec2_shift_tilde_class, t_spec2_shift_tilde, x_msi);
-  class_addmethod(spec2_shift_tilde_class, (t_method)spec2_shift_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_shift_tilde_class, (t_method)spec2_shift_tilde_dsp, gensym("dsp"), 0);
   class_addfloat(spec2_shift_tilde_class, (t_method)spec2_shift_tilde_add);
 //  class_sethelpsymbol(spec2_shift_tilde_class, gensym("iemhelp/spec2_shift~-help"));
 }
diff --git a/externals/iem/iem_spec2/src/spec2_sqrt~.c b/externals/iem/iem_spec2/src/spec2_sqrt~.c
index 67410c301..6f25ee133 100644
--- a/externals/iem/iem_spec2/src/spec2_sqrt~.c
+++ b/externals/iem/iem_spec2/src/spec2_sqrt~.c
@@ -11,32 +11,6 @@ iem_spec2 written by Thomas Musil, Copyright (c) IEM KUG Graz Austria 2000 - 200
 
 static t_class *spec2_sqrt_tilde_class;
 
-#define SPEC2DUMTAB1SIZE 256
-#define SPEC2DUMTAB2SIZE 1024
-
-static t_float spec2_rsqrt_exptab[SPEC2DUMTAB1SIZE], spec2_rsqrt_mantissatab[SPEC2DUMTAB2SIZE];
-
-static void init_spec2_rsqrt(void)
-{
-  int i;
-  
-  for (i=0; i<SPEC2DUMTAB1SIZE; i++)
-  {
-    t_float f;
-    long l = (i ? (i == SPEC2DUMTAB1SIZE-1 ? SPEC2DUMTAB1SIZE-2 : i) : 1)<< 23;
-    
-    *(long *)(&f) = l;
-    spec2_rsqrt_exptab[i] = 1.0f/sqrt(f); 
-  }
-  
-  for (i=0; i<SPEC2DUMTAB2SIZE; i++)
-  {
-    t_float f = 1.0f + (1.0f / (t_float)SPEC2DUMTAB2SIZE) * (t_float)i;
-    
-    spec2_rsqrt_mantissatab[i] = 1.0f / sqrt(f);  
-  }
-}
-
 typedef struct _spec2_sqrt_tilde
 {
   t_object  x_obj;
@@ -50,17 +24,22 @@ static t_int *spec2_sqrt_tilde_perform(t_int *w)
   int n = w[3]+1;
   
   while(n--)
-  { 
-    t_float f = *in;
-    long l = *(long *)(in++);
-    
-    if(f < 0.0f)
-      *out++ = 0.0f;
-    else
-    {
-      t_float g = spec2_rsqrt_exptab[(l >> 23) & 0xff] * spec2_rsqrt_mantissatab[(l >> 13) & 0x3ff];
-      
-      *out++ = f*g*(1.5f - 0.5f*g*g*f);
+  {
+    t_sample f = *in++;
+
+    if (f<0.0)
+	{
+      *out++=0.0;
+    }
+	else
+	{
+#if ((defined PD_MAJOR_VERSION && defined PD_MINOR_VERSION) && (PD_MAJOR_VERSION > 0 || PD_MINOR_VERSION > 43))
+	  t_float g = q8_rsqrt(f);
+            
+      *out++ = f*g*(1.5 - 0.5 * g * g * f);
+#else
+	  *out++ = sqrt(f);
+#endif
     }
   }
   return(w+4);
@@ -84,10 +63,8 @@ static void *spec2_sqrt_tilde_new(void)
 
 void spec2_sqrt_tilde_setup(void)
 {
-  init_spec2_rsqrt();
   spec2_sqrt_tilde_class = class_new(gensym("spec2_sqrt~"), (t_newmethod)spec2_sqrt_tilde_new,
     0, sizeof(t_spec2_sqrt_tilde), 0, 0);
   CLASS_MAINSIGNALIN(spec2_sqrt_tilde_class, t_spec2_sqrt_tilde, x_msi);
-  class_addmethod(spec2_sqrt_tilde_class, (t_method)spec2_sqrt_tilde_dsp, gensym("dsp"), A_CANT, 0);
-//  class_sethelpsymbol(spec2_sqrt_tilde_class, gensym("iemhelp2/spec2_sqrt~-help"));
+  class_addmethod(spec2_sqrt_tilde_class, (t_method)spec2_sqrt_tilde_dsp, gensym("dsp"), 0);
 }
diff --git a/externals/iem/iem_spec2/src/spec2_stretch~.c b/externals/iem/iem_spec2/src/spec2_stretch~.c
index 6e7a580ef..9d060af5e 100644
--- a/externals/iem/iem_spec2/src/spec2_stretch~.c
+++ b/externals/iem/iem_spec2/src/spec2_stretch~.c
@@ -99,7 +99,7 @@ void spec2_stretch_tilde_setup(void)
   spec2_stretch_tilde_class = class_new(gensym("spec2_stretch~"), (t_newmethod)spec2_stretch_tilde_new,
     0, sizeof(t_spec2_stretch_tilde), 0, A_DEFFLOAT, 0);
   CLASS_MAINSIGNALIN(spec2_stretch_tilde_class, t_spec2_stretch_tilde, x_msi);
-  class_addmethod(spec2_stretch_tilde_class, (t_method)spec2_stretch_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_stretch_tilde_class, (t_method)spec2_stretch_tilde_dsp, gensym("dsp"), 0);
   class_addfloat(spec2_stretch_tilde_class, (t_method)spec2_stretch_tilde_mul);
 //  class_sethelpsymbol(spec2_stretch_tilde_class, gensym("iemhelp/spec2_stretch~-help"));
 }
diff --git a/externals/iem/iem_spec2/src/spec2_sub~.c b/externals/iem/iem_spec2/src/spec2_sub~.c
index fd562400b..b972d4fd0 100644
--- a/externals/iem/iem_spec2/src/spec2_sub~.c
+++ b/externals/iem/iem_spec2/src/spec2_sub~.c
@@ -95,6 +95,6 @@ void spec2_sub_tilde_setup(void)
     sizeof(t_spec2_sub_tilde), 0, 0);
   class_addcreator((t_newmethod)spec2_sub_tilde_new, gensym("spec2-~"), 0);
   CLASS_MAINSIGNALIN(spec2_sub_tilde_class, t_spec2_sub_tilde, x_msi);
-  class_addmethod(spec2_sub_tilde_class, (t_method)spec2_sub_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_sub_tilde_class, (t_method)spec2_sub_tilde_dsp, gensym("dsp"), 0);
 //  class_sethelpsymbol(spec2_sub_tilde_class, gensym("iemhelp2/spec2_sub~-help"));
 }
diff --git a/externals/iem/iem_spec2/src/spec2_sum~.c b/externals/iem/iem_spec2/src/spec2_sum~.c
index b698c9bf0..796447de7 100644
--- a/externals/iem/iem_spec2/src/spec2_sum~.c
+++ b/externals/iem/iem_spec2/src/spec2_sum~.c
@@ -115,6 +115,6 @@ void spec2_sum_tilde_setup(void)
   spec2_sum_tilde_class = class_new(gensym("spec2_sum~"), (t_newmethod)spec2_sum_tilde_new,
     0, sizeof(t_spec2_sum_tilde), 0, 0);
   CLASS_MAINSIGNALIN(spec2_sum_tilde_class, t_spec2_sum_tilde, x_msi);
-  class_addmethod(spec2_sum_tilde_class, (t_method)spec2_sum_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_sum_tilde_class, (t_method)spec2_sum_tilde_dsp, gensym("dsp"), 0);
 //  class_sethelpsymbol(spec2_sum_tilde_class, gensym("iemhelp2/spec2_sum~-help"));
 }
diff --git a/externals/iem/iem_spec2/src/spec2_tab_conv~.c b/externals/iem/iem_spec2/src/spec2_tab_conv~.c
index d0666428c..d9ac5cdf5 100644
--- a/externals/iem/iem_spec2/src/spec2_tab_conv~.c
+++ b/externals/iem/iem_spec2/src/spec2_tab_conv~.c
@@ -143,7 +143,7 @@ void spec2_tab_conv_tilde_setup(void)
   spec2_tab_conv_tilde_class = class_new(gensym("spec2_tab_conv~"), (t_newmethod)spec2_tab_conv_tilde_new,
     (t_method)spec2_tab_conv_tilde_free, sizeof(t_spec2_tab_conv_tilde), 0, A_GIMME, 0);
   CLASS_MAINSIGNALIN(spec2_tab_conv_tilde_class, t_spec2_tab_conv_tilde, x_msi);
-  class_addmethod(spec2_tab_conv_tilde_class, (t_method)spec2_tab_conv_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_tab_conv_tilde_class, (t_method)spec2_tab_conv_tilde_dsp, gensym("dsp"), 0);
   class_addmethod(spec2_tab_conv_tilde_class, (t_method)spec2_tab_conv_tilde_set, gensym("set"), A_GIMME, 0);
 //  class_sethelpsymbol(spec2_tab_conv_tilde_class, gensym("iemhelp/spec2_tab_conv~-help"));
 }
diff --git a/externals/iem/iem_spec2/src/spec2_tabreceive_enable~.c b/externals/iem/iem_spec2/src/spec2_tabreceive_enable~.c
index e2c9f243c..e9f0eb06d 100644
--- a/externals/iem/iem_spec2/src/spec2_tabreceive_enable~.c
+++ b/externals/iem/iem_spec2/src/spec2_tabreceive_enable~.c
@@ -163,7 +163,7 @@ void spec2_tabreceive_enable_tilde_setup(void)
 {
   spec2_tabreceive_enable_tilde_class = class_new(gensym("spec2_tabreceive_enable~"), (t_newmethod)spec2_tabreceive_enable_tilde_new,
     0, sizeof(t_spec2_tabreceive_enable_tilde), 0, A_GIMME, 0);
-  class_addmethod(spec2_tabreceive_enable_tilde_class, (t_method)spec2_tabreceive_enable_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_tabreceive_enable_tilde_class, (t_method)spec2_tabreceive_enable_tilde_dsp, gensym("dsp"), 0);
   class_addsymbol(spec2_tabreceive_enable_tilde_class, (t_method)spec2_tabreceive_enable_tilde_symbol);
   class_addfloat(spec2_tabreceive_enable_tilde_class, (t_method)spec2_tabreceive_enable_tilde_float);
 //  class_sethelpsymbol(spec2_tabreceive_enable_tilde_class, gensym("iemhelp2/spec2_tabreceive_enable~-help"));
diff --git a/externals/iem/iem_spec2/src/spec2_tabreceive~.c b/externals/iem/iem_spec2/src/spec2_tabreceive~.c
index bcc1c39cb..ac30b5c56 100644
--- a/externals/iem/iem_spec2/src/spec2_tabreceive~.c
+++ b/externals/iem/iem_spec2/src/spec2_tabreceive~.c
@@ -144,7 +144,7 @@ void spec2_tabreceive_tilde_setup(void)
 {
   spec2_tabreceive_tilde_class = class_new(gensym("spec2_tabreceive~"), (t_newmethod)spec2_tabreceive_tilde_new,
     0, sizeof(t_spec2_tabreceive_tilde), 0, A_DEFSYM, 0);
-  class_addmethod(spec2_tabreceive_tilde_class, (t_method)spec2_tabreceive_tilde_dsp, gensym("dsp"), A_CANT, 0);
+  class_addmethod(spec2_tabreceive_tilde_class, (t_method)spec2_tabreceive_tilde_dsp, gensym("dsp"), 0);
   class_addsymbol(spec2_tabreceive_tilde_class, (t_method)spec2_tabreceive_tilde_symbol);
 //  class_sethelpsymbol(spec2_tabreceive_tilde_class, gensym("iemhelp/spec2_tabreceive~-help"));
 }
-- 
GitLab