aboutsummaryrefslogtreecommitdiff
path: root/externals/grill/dynext
diff options
context:
space:
mode:
Diffstat (limited to 'externals/grill/dynext')
-rw-r--r--externals/grill/dynext/dynext.vcproj255
-rw-r--r--externals/grill/dynext/gpl.txt346
-rw-r--r--externals/grill/dynext/license.txt50
-rw-r--r--externals/grill/dynext/package.txt6
-rw-r--r--externals/grill/dynext/pd/dyn~-help.pd169
-rw-r--r--externals/grill/dynext/readme.txt73
-rw-r--r--externals/grill/dynext/src/main.cpp954
7 files changed, 0 insertions, 1853 deletions
diff --git a/externals/grill/dynext/dynext.vcproj b/externals/grill/dynext/dynext.vcproj
deleted file mode 100644
index f7edf246..00000000
--- a/externals/grill/dynext/dynext.vcproj
+++ /dev/null
@@ -1,255 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="dynext"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".\pd-msvc/d"
- IntermediateDirectory=".\pd-msvc/d"
- ConfigurationType="2"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="c:\data\pd\pd-cvs\src;..\flext\source"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;PD"
- BasicRuntimeChecks="3"
- RuntimeLibrary="5"
- RuntimeTypeInfo="TRUE"
- UsePrecompiledHeader="2"
- PrecompiledHeaderFile=".\pd-msvc/d/dyn.pch"
- AssemblerListingLocation=".\pd-msvc/d/"
- ObjectFile=".\pd-msvc/d/"
- ProgramDataBaseFileName=".\pd-msvc/d/"
- BrowseInformation="1"
- WarningLevel="3"
- SuppressStartupBanner="TRUE"
- DebugInformationFormat="4"
- CompileAs="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="pd.lib"
- OutputFile="$(outdir)/dyn~.dll"
- LinkIncremental="1"
- SuppressStartupBanner="TRUE"
- AdditionalLibraryDirectories="C:\data\pd\pd-cvs\bin"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile=".\pd-msvc/d/dyn~.pdb"
- ImportLibrary=".\pd-msvc/d/dyn~.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="_DEBUG"
- MkTypLibCompatible="TRUE"
- SuppressStartupBanner="TRUE"
- TargetEnvironment="1"
- TypeLibraryName=".\pd-msvc/d/dyn.tlb"
- HeaderFileName=""/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="3079"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".\pd-msvc/r"
- IntermediateDirectory=".\pd-msvc/r"
- ConfigurationType="2"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="c:\programme\audio\pd\src,f:\prog\max\flext\source"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;PD"
- StringPooling="TRUE"
- RuntimeLibrary="4"
- EnableFunctionLevelLinking="TRUE"
- UsePrecompiledHeader="2"
- PrecompiledHeaderFile=".\pd-msvc/r/dyn.pch"
- AssemblerListingLocation=".\pd-msvc/r/"
- ObjectFile=".\pd-msvc/r/"
- ProgramDataBaseFileName=".\pd-msvc/r/"
- WarningLevel="3"
- SuppressStartupBanner="TRUE"
- CompileAs="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="pd.lib flext-pdwin.lib pthreadVC.lib"
- OutputFile="pd-msvc/dyn~.dll"
- LinkIncremental="1"
- SuppressStartupBanner="TRUE"
- AdditionalLibraryDirectories="c:\programme\audio\pd/bin,..\flext\pd-msvc"
- ProgramDatabaseFile=".\pd-msvc/r/dyn~.pdb"
- ImportLibrary=".\pd-msvc/r/dyn~.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="NDEBUG"
- MkTypLibCompatible="TRUE"
- SuppressStartupBanner="TRUE"
- TargetEnvironment="1"
- TypeLibraryName=".\pd-msvc/r/dyn.tlb"
- HeaderFileName=""/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="3079"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="PD Shared Release|Win32"
- OutputDirectory="./pd-msvc/sr"
- IntermediateDirectory="./pd-msvc/sr"
- ConfigurationType="2"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="3"
- GlobalOptimizations="TRUE"
- InlineFunctionExpansion="2"
- FavorSizeOrSpeed="2"
- OmitFramePointers="TRUE"
- OptimizeForProcessor="3"
- AdditionalIncludeDirectories="&quot;c:\data\prog\pd\pd-cvs\src&quot;;c:\data\prog\max\flext\source;c:\data\prog\packs\pthreads"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;FLEXT_SYS=2;FLEXT_SHARED"
- StringPooling="TRUE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="TRUE"
- EnableEnhancedInstructionSet="1"
- UsePrecompiledHeader="2"
- PrecompiledHeaderFile="$(outdir)/dyn.pch"
- WarningLevel="3"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="pd.lib pthreadVC.lib"
- OutputFile="$(outdir)/dyn~.dll"
- LinkIncremental="1"
- SuppressStartupBanner="TRUE"
- AdditionalLibraryDirectories="&quot;c:\data\prog\pd\pd-cvs/bin&quot;;&quot;..\flext\pd-msvc&quot;;c:\data\prog\packs\pthreads"
- ProgramDatabaseFile="$(outdir)/dyn~.pdb"
- ImportLibrary="$(outdir)/dyn~.lib"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="NDEBUG"
- MkTypLibCompatible="TRUE"
- SuppressStartupBanner="TRUE"
- TargetEnvironment="1"
- TypeLibraryName=".\pd-msvc/r/dyn.tlb"
- HeaderFileName=""/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="3079"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="doc"
- Filter="">
- <File
- RelativePath="readme.txt">
- </File>
- </Filter>
- <File
- RelativePath="src\main.cpp">
- <FileConfiguration
- Name="Debug|Win32">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_MBCS;_USRDLL;PD;$(NoInherit)"
- BasicRuntimeChecks="3"
- BrowseInformation="1"/>
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_MBCS;_USRDLL;PD;$(NoInherit)"/>
- </FileConfiguration>
- <FileConfiguration
- Name="PD Shared Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- AdditionalIncludeDirectories=""/>
- </FileConfiguration>
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/externals/grill/dynext/gpl.txt b/externals/grill/dynext/gpl.txt
deleted file mode 100644
index 5ea29a7d..00000000
--- a/externals/grill/dynext/gpl.txt
+++ /dev/null
@@ -1,346 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) 19yy <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19yy name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
-
diff --git a/externals/grill/dynext/license.txt b/externals/grill/dynext/license.txt
deleted file mode 100644
index 4a10fba2..00000000
--- a/externals/grill/dynext/license.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-dyn~ - dynamic object management for PD
-Copyright (c) Thomas Grill (xovo@gmx.net)
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-In the official dyn~ distribution, the GNU General Public License is
-in the file gpl.txt
-
----------------------------------------------------------
-
- OTHER COPYRIGHT NOTICES
-
----------------------------------------------------------
-This package uses the flext C++ layer - See its license text below:
-
-
---- flext ----------------------------------------------
-flext - C++ layer for Max/MSP and pd (pure data) externals
-Copyright (C) 2001-2003 Thomas Grill
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-In the official flext distribution, the GNU General Public License is
-in the file gpl.txt
-
-
diff --git a/externals/grill/dynext/package.txt b/externals/grill/dynext/package.txt
deleted file mode 100644
index fd8a7889..00000000
--- a/externals/grill/dynext/package.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-NAME=dyn~
-
-SRCDIR=src
-
-SRCS= main.cpp
-HDRS=
diff --git a/externals/grill/dynext/pd/dyn~-help.pd b/externals/grill/dynext/pd/dyn~-help.pd
deleted file mode 100644
index 078cbeca..00000000
--- a/externals/grill/dynext/pd/dyn~-help.pd
+++ /dev/null
@@ -1,169 +0,0 @@
-#N canvas 50 60 833 552 12;
-#N canvas 71 10 562 569 examples 0;
-#X floatatom 148 239 5 0 0 0 - - -;
-#X floatatom 105 304 5 0 0 0 - - -;
-#X floatatom 113 501 5 0 0 0 - - -;
-#X obj 251 273 +;
-#X floatatom 252 301 5 0 0 0 - - -;
-#X floatatom 155 423 5 0 0 0 - - -;
-#X floatatom 244 424 5 0 0 0 - - -;
-#X floatatom 306 422 5 0 0 0 - - -;
-#X obj 261 468 * 2;
-#X obj 303 469 + 1;
-#X floatatom 270 499 5 0 0 0 - - -;
-#X floatatom 256 238 5 0 0 0 - - -;
-#X floatatom 224 72 5 0 0 0 - - -;
-#X floatatom 98 136 5 0 0 0 - - -;
-#X floatatom 237 133 5 0 0 0 - - -;
-#X obj 236 107 f;
-#X obj 99 107 dyn~ 0 1 0 1;
-#X obj 106 273 dyn~ 0 2 0 1;
-#X obj 113 468 dyn~ 0 3 0 1;
-#X msg 37 36 reset \, newobj . a f \, conn 0 a 0 \, conn a 0 0;
-#X msg 37 197 reset \, newobj . a + \, conn 0 a 0 \, conn 1 a 1 \,
-conn a 0 0;
-#X msg 37 368 reset \, newobj . a * 2 \, newobj . b + 1 \, conn 0 a
-0 \, conn 1 a 1 \, conn a 0 b 0 \, conn 2 b 1 \, conn b 0 0;
-#X connect 0 0 3 0;
-#X connect 0 0 17 1;
-#X connect 3 0 4 0;
-#X connect 5 0 8 0;
-#X connect 5 0 18 1;
-#X connect 6 0 8 1;
-#X connect 6 0 18 2;
-#X connect 7 0 9 1;
-#X connect 7 0 18 3;
-#X connect 8 0 9 0;
-#X connect 9 0 10 0;
-#X connect 11 0 3 1;
-#X connect 11 0 17 2;
-#X connect 12 0 15 0;
-#X connect 12 0 16 1;
-#X connect 15 0 14 0;
-#X connect 16 0 13 0;
-#X connect 17 0 1 0;
-#X connect 18 0 2 0;
-#X connect 19 0 16 0;
-#X connect 20 0 17 0;
-#X connect 21 0 18 0;
-#X restore 514 459 pd examples;
-#X msg 127 70 reset;
-#X text 184 70 clear all objects and connections;
-#X msg 129 231 conn 0 a 0;
-#X text 224 230 connect dyn-inlet 0 to a-inlet 0;
-#X msg 129 260 conn a 0 0;
-#X text 224 259 connect a-outlet 0 to dyn-outlet 0;
-#X msg 129 293 conn x 2 y 3;
-#X text 234 292 connect x-outlet 2 to y-inlet 3;
-#X msg 129 356 del a;
-#X text 181 358 delete object "a";
-#X obj 11 10 cnv 15 700 40 empty empty dyn~ 10 22 0 24 -260818 -1 0
-;
-#X text 282 387 send "message 1" to a-inlet 0;
-#X obj 54 468 dyn~ 0 1 0 2;
-#X text 156 467 dyn sig/msg inlets sig/msg outlets;
-#X msg 165 421 vis \$1;
-#X obj 129 421 tgl 20 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X text 222 417 make patch visible/invisible;
-#X msg 129 323 dis x 2 y 3;
-#X text 234 324 disconnect x-outlet 2 to y-inlet 3;
-#X text 187 98 reload all objects (keep connections);
-#X msg 127 98 reload;
-#X text 218 432 (connections are not drawn at the moment!);
-#N canvas 178 192 594 450 dsp-ex 0;
-#X obj 63 357 dac~;
-#X obj 173 234 hsl 128 15 0 1000 0 0 empty empty empty -2 -6 0 8 -261681
--1 -1 2800 1;
-#X obj 184 259 nbx 5 14 -1e+037 1e+037 0 0 empty empty empty 0 -6 0
-10 -262144 -1 -1 220.472 256;
-#X msg 56 55 reset;
-#X obj 457 300 loadbang;
-#X msg 456 324 \; pd dsp 1;
-#X text 55 33 clear all;
-#X obj 37 255 dyn~ 0 1 2 0;
-#X text 60 84 make an oscillator (left);
-#X text 56 144 add an oscillator (double frq \, right);
-#X text 64 216 select frequency;
-#X obj 47 318 *~ 0.2;
-#X obj 131 317 *~ 0.2;
-#X obj 169 290 hsl 128 15 0.001 1 1 0 empty empty empty -2 -6 0 8 -262131
--1 -1 3300 1;
-#X text 306 286 gain;
-#X msg 54 106 newobj . o1 osc~ 220 \, conn 0 o1 0 \, conn o1 0 0;
-#X msg 57 164 newobj . m * 1.5 \, newobj . o2 osc~ 330 \, conn 0 m
-0 \, conn m 0 o2 0 \, conn o2 0 1;
-#X connect 1 0 2 0;
-#X connect 1 0 7 1;
-#X connect 3 0 7 0;
-#X connect 4 0 5 0;
-#X connect 7 0 11 0;
-#X connect 7 1 12 0;
-#X connect 11 0 0 0;
-#X connect 12 0 0 1;
-#X connect 13 0 11 1;
-#X connect 13 0 12 1;
-#X connect 15 0 7 0;
-#X connect 16 0 7 0;
-#X restore 514 487 pd dsp-ex;
-#X msg 129 156 newmsg . b Hello;
-#X msg 128 124 newobj . a + 1;
-#X text 247 124 make new object [+ 1] with name "a" in root patcher
-(".");
-#X text 269 156 make new message object [Hello( with name "b" in root
-patcher;
-#X msg 128 200 newobj . c pd sub;
-#X text 273 200 make sub patcher;
-#X msg 432 198 newobj c d bang;
-#X text 561 198 make object in sub patcher;
-#X text 133 30 http://grrrr.org/ext;
-#N canvas 132 483 566 544 proxies 0;
-#X text 25 78 Instead you have to create a "real" object that;
-#X text 24 94 gets the message and passes it along to the abstraction.
-;
-#X text 25 123 If you wanted to send float for example you could use
-;
-#X text 24 141 [float] objects as "proxies".;
-#X text 25 29 You can't use send to send directly to an inlet of an
-;
-#X text 24 45 abstraction or subpatcher object you placed inside dyn~.
-;
-#X obj 13 470 dyn~ 0 0 0 0;
-#X text 31 190 create a subpatcher with an inlet and a print object
-in it;
-#X text 35 270 try to send a message to it;
-#X msg 35 290 send mysub 0 Hello!;
-#X msg 30 212 reset \, newobj . mysub pd sub \, newobj mysub in inlet
-\, newobj mysub p print SUB \, conn in 0 p 0;
-#X text 209 289 doesn't work! (watch PD console);
-#X msg 34 360 newobj . proxy symbol \, conn proxy 0 mysub 0;
-#X text 36 388 send to that instead;
-#X msg 33 407 send proxy Hello!;
-#X obj 128 453 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0
-1;
-#X msg 127 470 vis \$1;
-#X text 37 338 create a proxy ([symbol] object in this case);
-#X connect 9 0 6 0;
-#X connect 10 0 6 0;
-#X connect 12 0 6 0;
-#X connect 14 0 6 0;
-#X connect 15 0 16 0;
-#X connect 16 0 6 0;
-#X restore 626 469 pd proxies;
-#X msg 128 387 send a message 1;
-#X text 133 12 dynamic object management \, (C)2003-2006 Thomas Grill
-;
-#X connect 1 0 13 0;
-#X connect 3 0 13 0;
-#X connect 5 0 13 0;
-#X connect 7 0 13 0;
-#X connect 9 0 13 0;
-#X connect 15 0 13 0;
-#X connect 16 0 15 0;
-#X connect 18 0 13 0;
-#X connect 21 0 13 0;
-#X connect 24 0 13 0;
-#X connect 25 0 13 0;
-#X connect 28 0 13 0;
-#X connect 30 0 13 0;
-#X connect 34 0 13 0;
diff --git a/externals/grill/dynext/readme.txt b/externals/grill/dynext/readme.txt
deleted file mode 100644
index c3270f4f..00000000
--- a/externals/grill/dynext/readme.txt
+++ /dev/null
@@ -1,73 +0,0 @@
-dyn~ - dynamic object management for PD
-
-Copyright (c)Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-
-
-----------------------------------------------------------------------------
-
-Attention: dyn~ is bound to the PD version it is compiled for.
-This means that you cannot use a version compiled for PD 0.38 with PD 0.39.
-
-----------------------------------------------------------------------------
-
-You will need the flext C++ layer for PD and Max/MSP externals to compile this.
-see http://grrrr.org/ext
-
-Please see build.txt in the flext package on how to compile dyn~.
-
-----------------------------------------------------------------------------
-
-BUGS:
------
-
-- deletion of subcanvases and objects therein may be crashy
-
-
-CHANGES:
---------
-
-0.1.2:
-- optimized DSP path (less copying, no block delay)
-- separate message and signal proxy objects to save memory
-
-0.1.1:
-- using aligned memory
-- cached several symbols
-- strip .pd extension from abstraction filenames (if stripext attribute is set)
-- debug patcher opens on shift-click
-- made vis an attribute (visibility can now be queried)
-- fixed connecting objects in subpatchers
-- use TablePtrMap type to store named objects
-- allow reuse of names (can be disabled with "symreuse" attribute)
-- guard against messages to canvases ("canvasmsg" attribute)
-- more stable
-- make connections visible
-- fixed send method: any messages do work now not only lists...
-
-0.1.0:
-- first release: PD 0.37 supports all necessary functionality
-- cleaner message-based object creation
-- also messages and comments can be created now
-- handle sub-canvases
-
-0.0.2:
-- give the dyn~ subcanvas a name (hard to access - for the wild scripters out there),
- so that it is different from the canvas where dyn~ is in
-- corrected names of message in- and out-proxies.
-- manually retrigger DSP after loading an abstraction
-
-0.0.1:
-- send loadbangs for loaded abstractions
-- now use "dsp" message to enable dsp in sub-canvas (no need of canvas_addtolist, canvas_takefromlist any more)
-
-
-0.0.0 - initial cvs version
-
-
-
-TODO:
---------
-- add mute attribute
-
diff --git a/externals/grill/dynext/src/main.cpp b/externals/grill/dynext/src/main.cpp
deleted file mode 100644
index d6113c82..00000000
--- a/externals/grill/dynext/src/main.cpp
+++ /dev/null
@@ -1,954 +0,0 @@
-/*
-
-dyn~ - dynamical object management for PD
-
-Copyright (c)2003-2006 Thomas Grill (gr@grrrr.org)
-For information on usage and redistribution, and for a DISCLAIMER OF ALL
-WARRANTIES, see the file, "license.txt," in this distribution.
-
-
--- this is all a bit hacky, but hey, it's PD! --
-
-*/
-
-#define FLEXT_ATTRIBUTES 1
-
-#include <flext.h>
-
-#if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 500)
-#error You need at least flext version 0.5.0
-#endif
-
-#define DYN_VERSION "0.1.2"
-
-
-#if FLEXT_SYS != FLEXT_SYS_PD
-#error Sorry, dyn~ works for PD only!
-#endif
-
-
-#include "flinternal.h"
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef _MSC_VER
-#pragma warning(disable: 4091 4244)
-#endif
-#include "g_canvas.h"
-
-
-class dyn:
- public flext_dsp
-{
- FLEXT_HEADER_S(dyn,flext_dsp,setup)
-public:
- dyn(int argc,const t_atom *argv);
- virtual ~dyn();
-
- void m_reset();
- void m_reload(); // refresh objects/abstractions
- void m_newobj(int argc,const t_atom *argv);
- void m_newmsg(int argc,const t_atom *argv);
- void m_newtext(int argc,const t_atom *argv);
- void m_del(const t_symbol *n);
- void m_connect(int argc,const t_atom *argv) { ConnDis(true,argc,argv); }
- void m_disconnect(int argc,const t_atom *argv) { ConnDis(false,argc,argv); }
- void m_send(int argc,const t_atom *argv);
- void ms_vis(bool vis) { canvas_vis(canvas,vis?1:0); }
- void mg_vis(bool &vis) const { vis = canvas && canvas->gl_editor; }
-
-protected:
-
- virtual void CbClick() { ms_vis(true); }
-
- static const t_symbol *k_obj,*k_msg,*k_text;
-
- class Obj {
- public:
- Obj(t_glist *gl,t_gobj *o): glist(gl),object(o) {}
-
- t_glist *AsGlist() const
- {
- return pd_class(&object->g_pd) == canvas_class?(t_glist *)object:NULL;
- }
-
- t_glist *glist;
- t_gobj *object;
- };
-
- class ObjMap
- :public TablePtrMap<const t_symbol *,Obj *>
- {
- public:
- virtual ~ObjMap() { clear(); }
-
- virtual void clear()
- {
- for(iterator it(*this); it; ++it) delete it.data();
- TablePtrMap<const t_symbol *,Obj *>::clear();
- }
- } root;
-
- typedef TablePtrMap<Obj *,const t_symbol *> GObjMap;
-
- class GLstMap
- :public TablePtrMap<t_glist *,GObjMap *>
- {
- public:
- virtual ~GLstMap() { clear(); }
-
- virtual void clear()
- {
- for(iterator it(*this); it; ++it) delete it.data();
- TablePtrMap<t_glist *,GObjMap *>::clear();
- }
- } groot;
-
- Obj *Find(const t_symbol *n) { return root.find(n); }
- t_glist *FindCanvas(const t_symbol *n);
-
- Obj *Remove(const t_symbol *n);
- bool Add(const t_symbol *n,t_glist *gl,t_gobj *o);
-
- t_gobj *New(const t_symbol *kind,int _argc_,const t_atom *_argv_,bool add = true);
-
- void ConnDis(bool conn,int argc,const t_atom *argv);
-
- void DoInit();
- void DoExit();
- void NewProxies();
- void DelProxies();
-
- virtual bool CbMethodResort(int n,const t_symbol *s,int argc,const t_atom *argv);
- virtual bool CbDsp();
-
-
- // proxy object
- class proxy
- {
- public:
- t_object obj;
- dyn *th;
-
- void init(dyn *t)
- {
- th = t;
- }
- };
-
- // proxy object
- class sigproxy
- : public proxy
- {
- public:
- t_sample defsig;
- int n;
- t_sample *vec;
-
- void init(dyn *t)
- {
- proxy::init(t);
- defsig = 0;
- n = 0,vec = NULL;
- }
-
- void set(int n,t_sample *vec)
- {
- this->n = n;
- this->vec = vec;
- }
- };
-
- // proxy for inbound messages
- class proxyin:
- public proxy
- {
- public:
- void init(dyn *t)
- {
- proxy::init(t);
- outlet_new(&obj,&s_anything);
- }
-
- void Message(const t_symbol *s,int argc,const t_atom *argv)
- {
- outlet_anything(obj.te_outlet,(t_symbol *)s,argc,(t_atom *)argv);
- }
-
- static void px_method(proxyin *obj,const t_symbol *s,int argc,const t_atom *argv)
- {
- obj->Message(s,argc,argv);
- }
- };
-
- // proxy for inbound signals
- class sigproxyin:
- public sigproxy
- {
- public:
- void init(dyn *t)
- {
- sigproxy::init(t);
- outlet_new(&obj,&s_signal);
- }
-
- static void dsp(sigproxyin *x, t_signal **sp);
- };
-
-
- // proxy for outbound messages
- class proxyout:
- public proxy
- {
- public:
- void init(dyn *t,int o)
- {
- proxy::init(t);
- outlet = o;
- }
-
- static void px_method(proxyout *obj,const t_symbol *s,int argc,const t_atom *argv)
- {
- obj->th->ToSysAnything(obj->outlet,s,argc,argv);
- }
-
- protected:
- int outlet;
- };
-
- // proxy for outbound messages
- class sigproxyout:
- public sigproxy
- {
- public:
- void init(dyn *t)
- {
- sigproxy::init(t);
- outlet_new(&obj,&s_signal);
- }
-
- static void dsp(sigproxyout *x, t_signal **sp);
- };
-
- static t_class *pxin_class,*pxout_class;
- static t_class *pxins_class,*pxouts_class;
-
- int s_inlets,m_inlets,s_outlets,m_outlets;
- sigproxyin **pxsin;
- proxyin **pxmin;
- sigproxyout **pxsout;
- proxyout **pxmout;
-
- static t_object *pxin_new() { return (t_object *)pd_new(pxin_class); }
- static t_object *pxins_new() { return (t_object *)pd_new(pxins_class); }
- static t_object *pxout_new() { return (t_object *)pd_new(pxout_class); }
- static t_object *pxouts_new() { return (t_object *)pd_new(pxouts_class); }
-
- t_canvas *canvas;
- bool stripext,canvasmsg,symreuse;
-
-private:
- static void setup(t_classid c);
-
- FLEXT_CALLBACK(m_reset)
- FLEXT_CALLBACK(m_reload)
- FLEXT_CALLBACK_V(m_newobj)
- FLEXT_CALLBACK_V(m_newmsg)
- FLEXT_CALLBACK_V(m_newtext)
- FLEXT_CALLBACK_S(m_del)
- FLEXT_CALLBACK_V(m_connect)
- FLEXT_CALLBACK_V(m_disconnect)
- FLEXT_CALLBACK_V(m_send)
- FLEXT_CALLVAR_B(mg_vis,ms_vis)
-
- FLEXT_ATTRVAR_B(stripext)
- FLEXT_ATTRVAR_B(symreuse)
- FLEXT_ATTRVAR_B(canvasmsg)
-
- static const t_symbol *sym_dot,*sym_dynsin,*sym_dynsout,*sym_dynin,*sym_dynout,*sym_dyncanvas;
- static const t_symbol *sym_vis,*sym_loadbang,*sym_dsp,*sym_pop;
-};
-
-FLEXT_NEW_DSP_V("dyn~",dyn)
-
-
-t_class *dyn::pxin_class = NULL,*dyn::pxout_class = NULL;
-t_class *dyn::pxins_class = NULL,*dyn::pxouts_class = NULL;
-
-const t_symbol *dyn::k_obj = NULL;
-const t_symbol *dyn::k_msg = NULL;
-const t_symbol *dyn::k_text = NULL;
-
-const t_symbol *dyn::sym_dot = NULL;
-const t_symbol *dyn::sym_dynsin = NULL;
-const t_symbol *dyn::sym_dynsout = NULL;
-const t_symbol *dyn::sym_dynin = NULL;
-const t_symbol *dyn::sym_dynout = NULL;
-const t_symbol *dyn::sym_dyncanvas = NULL;
-
-const t_symbol *dyn::sym_vis = NULL;
-const t_symbol *dyn::sym_loadbang = NULL;
-const t_symbol *dyn::sym_dsp = NULL;
-const t_symbol *dyn::sym_pop = NULL;
-
-
-void dyn::setup(t_classid c)
-{
- post("");
- post("dyn~ %s - dynamic object management, (C)2003-2006 Thomas Grill",DYN_VERSION);
- post("");
-
- sym_dynsin = MakeSymbol("dyn_in~");
- sym_dynsout = MakeSymbol("dyn_out~");
- sym_dynin = MakeSymbol("dyn_in");
- sym_dynout = MakeSymbol("dyn_out");
-
- sym_dot = MakeSymbol(".");
- sym_dyncanvas = MakeSymbol(" dyn~-canvas ");
-
- // set up proxy class for inbound messages
- pxin_class = class_new(const_cast<t_symbol *>(sym_dynin),(t_newmethod)pxin_new,NULL,sizeof(proxyin),0, A_NULL);
- add_anything(pxin_class,proxyin::px_method);
-
- // set up proxy class for inbound signals
- pxins_class = class_new(const_cast<t_symbol *>(sym_dynsin),(t_newmethod)pxins_new,NULL,sizeof(sigproxyin),0, A_NULL);
- add_dsp(pxins_class,sigproxyin::dsp);
- CLASS_MAINSIGNALIN(pxins_class, sigproxyin, defsig);
-
- // set up proxy class for outbound messages
- pxout_class = class_new(const_cast<t_symbol *>(sym_dynout),(t_newmethod)pxout_new,NULL,sizeof(proxyout),0, A_NULL);
- add_anything(pxout_class,proxyout::px_method);
-
- // set up proxy class for outbound signals
- pxouts_class = class_new(const_cast<t_symbol *>(sym_dynsout),(t_newmethod)pxouts_new,NULL,sizeof(sigproxyout),0, A_NULL);
- add_dsp(pxouts_class,sigproxyout::dsp);
- CLASS_MAINSIGNALIN(pxouts_class, sigproxyout, defsig);
-
- // set up dyn~
- FLEXT_CADDMETHOD_(c,0,"reset",m_reset);
- FLEXT_CADDMETHOD_(c,0,"reload",m_reload);
- FLEXT_CADDMETHOD_(c,0,"newobj",m_newobj);
- FLEXT_CADDMETHOD_(c,0,"newmsg",m_newmsg);
- FLEXT_CADDMETHOD_(c,0,"newtext",m_newtext);
- FLEXT_CADDMETHOD_(c,0,"del",m_del);
- FLEXT_CADDMETHOD_(c,0,"conn",m_connect);
- FLEXT_CADDMETHOD_(c,0,"dis",m_disconnect);
- FLEXT_CADDMETHOD_(c,0,"send",m_send);
- FLEXT_CADDATTR_VAR(c,"vis",mg_vis,ms_vis);
- FLEXT_CADDATTR_VAR1(c,"stripext",stripext);
- FLEXT_CADDATTR_VAR1(c,"symreuse",symreuse);
- FLEXT_CADDATTR_VAR1(c,"canvasmsg",canvasmsg);
-
- // set up symbols
- k_obj = MakeSymbol("obj");
- k_msg = MakeSymbol("msg");
- k_text = MakeSymbol("text");
-
- sym_vis = MakeSymbol("vis");
- sym_loadbang = MakeSymbol("loadbang");
- sym_dsp = MakeSymbol("dsp");
- sym_pop = MakeSymbol("pop");
-}
-
-
-/*
-There must be a separate canvas for the dynamically created objects as some mechanisms in PD
-(like copy/cut/paste) get confused otherwise.
-On the other hand it seems to be possible to create objects without a canvas.
-They won't receive DSP processing, though, hence it's only possible for message objects.
-Problems arise when an object is not yet loaded... the canvas environment is then needed to
-load it.. if there is no canvas, PD currently crashes.
-
-
-How to create the canvas:
-1) via direct call to canvas_new()
-2) a message to pd_canvasmaker
- con: does not return a pointer for the created canvas
-
-There are two possibilities for the canvas
-1) make a sub canvas to the one where dyn~ resides:
- pro: no problems with environment (abstractions are found and loaded correctly)
-2) make a root canvas:
- pro: it will be in the canvas list per default, hence DSP is processed
- con: canvas environment must be created manually
- (is normally done by pd_canvasmaker if there is a directory set, which is again done somewhere else)
-
-Enabling DSP on the subcanvas
-1) send it a "dsp" message (see rabin~ by K.Czaja)... but, which signal vector should be taken?
- -> answer: NONE! (just send NULL)
-2) add it to the list of _root_ canvases (these will be DSP-processed per default)
- (for this the canvas_addtolist and canvas_takefromlist functions are used)
- however, it's not clear if this can lead to problems since it is no root-canvas!
-
-In all cases the 1)s have been chosen as the cleaner solution
-*/
-
-dyn::dyn(int argc,const t_atom *argv):
- canvas(NULL),
- pxsin(NULL),pxmin(NULL),pxsout(NULL),pxmout(NULL),
- stripext(false),symreuse(true),canvasmsg(false)
-{
- if(argc < 4) {
- post("%s - Syntax: dyn~ sig-ins msg-ins sig-outs msg-outs",thisName());
- InitProblem();
- return;
- }
-
- s_inlets = GetAInt(argv[0]);
- m_inlets = GetAInt(argv[1]);
- s_outlets = GetAInt(argv[2]);
- m_outlets = GetAInt(argv[3]);
-
- // --- make a sub-canvas for dyn~ ------
-
- t_atom arg[6];
- SetInt(arg[0],0); // xpos
- SetInt(arg[1],0); // ypos
- SetInt(arg[2],700); // xwidth
- SetInt(arg[3],520); // xwidth
- SetSymbol(arg[4],sym_dyncanvas); // canvas name
- SetInt(arg[5],0); // visible
-
- canvas = canvas_new(NULL, NULL, 6, arg);
- // pop canvas (must do that...)
- SetInt(arg[0],0);
- pd_typedmess((t_pd *)canvas,(t_symbol *)sym_pop,1,arg);
-
- DoInit();
-
- AddInSignal("Messages (newobj,newmsg,newtext,del,conn,dis)");
- AddInSignal(s_inlets);
- AddInAnything(m_inlets);
- AddOutSignal(s_outlets);
- AddOutAnything(m_outlets);
-}
-
-dyn::~dyn()
-{
- DoExit();
-
- if(canvas) pd_free((t_pd *)canvas);
-}
-
-void dyn::DoInit()
-{
- // add to list of canvases
- groot.insert(canvas,new GObjMap);
-
- NewProxies();
-}
-
-void dyn::DoExit()
-{
- // delete proxies
- DelProxies();
- // remove all objects
- if(canvas) glist_clear(canvas);
- // remove all names
- groot.clear();
- root.clear();
-}
-
-void dyn::NewProxies()
-{
- // --- create inlet proxies ------
- int i;
- if(s_inlets) pxsin = new sigproxyin *[s_inlets];
- if(m_inlets) pxmin = new proxyin *[m_inlets];
- for(i = 0; i < s_inlets+m_inlets; ++i) {
- t_atom lst[5];
- SetInt(lst[0],i*100);
- SetInt(lst[1],10);
- SetSymbol(lst[2],sym_dot);
- SetSymbol(lst[3],sym__);
-
- try {
- if(i < s_inlets) {
- SetSymbol(lst[4],sym_dynsin);
- pxsin[i] = (sigproxyin *)New(k_obj,5,lst,false);
- if(pxsin[i]) pxsin[i]->init(this);
- }
- else {
- int j = i-s_inlets;
- SetSymbol(lst[4],sym_dynin);
- pxmin[j] = (proxyin *)New(k_obj,5,lst,false);
- if(pxmin[j]) pxmin[j]->init(this);
- }
- }
- catch(...) {
- error("%s - Error creating inlet proxy",thisName());
- }
- }
-
- // --- create outlet proxies ------
-
- if(s_outlets) pxsout = new sigproxyout *[s_outlets];
- if(m_outlets) pxmout = new proxyout *[m_outlets];
- for(i = 0; i < s_outlets+m_outlets; ++i) {
- t_atom lst[5];
- SetInt(lst[0],i*100);
- SetInt(lst[1],500);
- SetSymbol(lst[2],sym_dot);
- SetSymbol(lst[3],sym__);
-
- try {
- if(i < s_outlets) {
- SetSymbol(lst[4],sym_dynsout);
- pxsout[i] = (sigproxyout *)New(k_obj,5,lst,false);
- if(pxsout[i]) pxsout[i]->init(this);
- }
- else {
- int j = i-s_outlets;
- SetSymbol(lst[4],sym_dynout);
- pxmout[j] = (proxyout *)New(k_obj,5,lst,false);
- if(pxmout[j]) pxmout[j]->init(this,i);
- }
- }
- catch(...) {
- error("%s - Error creating outlet proxy",thisName());
- }
- }
-}
-
-void dyn::DelProxies()
-{
- int i;
- if(pxsin) {
- for(i = 0; i < s_inlets; ++i) glist_delete(canvas,(t_gobj *)pxsin[i]);
- delete[] pxsin; pxsin = NULL;
- }
- if(pxmin) {
- for(i = 0; i < m_inlets; ++i) glist_delete(canvas,(t_gobj *)pxmin[i]);
- delete[] pxmin; pxmin = NULL;
- }
- if(pxsout) {
- for(i = 0; i < s_outlets; ++i) glist_delete(canvas,(t_gobj *)pxsout[i]);
- delete[] pxsout; pxsout = NULL;
- }
- if(pxmout) {
- for(i = 0; i < m_outlets; ++i) glist_delete(canvas,(t_gobj *)pxmout[i]);
- delete[] pxmout; pxmout = NULL;
- }
-}
-
-t_glist *dyn::FindCanvas(const t_symbol *n)
-{
- if(n == sym_dot)
- return canvas;
- else {
- Obj *o = Find(n);
- t_glist *gl = o->AsGlist();
- return gl && groot.find(gl)?(t_glist *)o->object:NULL;
- }
-}
-
-static t_gobj *GetLast(t_glist *gl)
-{
- t_gobj *go = gl->gl_list;
- if(go)
- while(go->g_next)
- go = go->g_next;
- return go;
-}
-
-bool dyn::Add(const t_symbol *n,t_glist *gl,t_gobj *o)
-{
- // remove previous name entry
- Obj *prv = Remove(n);
- if(prv) delete prv;
-
- // get canvas map
- GObjMap *gm = groot.find(gl);
- // if none existing create one
- if(!gm) return false;
-
- // insert object to canvas map
- Obj *obj = new Obj(gl,o);
- gm->insert(obj,n);
- // insert object to object map
- root.insert(n,obj);
-
- t_glist *nl = obj->AsGlist();
- if(nl) {
- FLEXT_ASSERT(!groot.find(nl));
- groot.insert(nl,new GObjMap);
- }
-
- return true;
-}
-
-dyn::Obj *dyn::Remove(const t_symbol *n)
-{
- // see if there's already an object of the same name
- Obj *prv = root.remove(n);
- if(prv) {
- t_glist *pl = prv->glist;
- // get canvas map
- GObjMap *gm = groot.find(pl);
- FLEXT_ASSERT(gm);
- // remove object from canvas map
- gm->remove(prv);
-
- // non-NULL if object itself is a glist
- t_glist *gl = prv->AsGlist();
- if(gl) {
- GObjMap *gm = groot.remove(gl);
- // if it's a loaded abstraction it need not be in our list
- if(gm) {
- // remove all objects in canvas map
- for(GObjMap::iterator it(*gm); it; ++it) {
- Obj *r = Remove(it.data());
- FLEXT_ASSERT(r);
- delete r;
- }
- // delete canvas map
- delete gm;
- }
- }
- }
- return prv;
-}
-
-t_gobj *dyn::New(const t_symbol *kind,int _argc_,const t_atom *_argv_,bool add)
-{
- t_gobj *newest = NULL;
- const char *err = NULL;
- const t_symbol *name = NULL,*canv = NULL;
- t_glist *glist = NULL;
-
- AtomListStatic<16> args;
-
- if(_argc_ >= 4 && CanbeInt(_argv_[0]) && CanbeInt(_argv_[1]) && IsSymbol(_argv_[2]) && IsSymbol(_argv_[3])) {
- canv = GetSymbol(_argv_[2]);
- name = GetSymbol(_argv_[3]);
-
- args(_argc_-2);
- SetInt(args[0],GetAInt(_argv_[0]));
- SetInt(args[1],GetAInt(_argv_[1]));
- for(int i = 0; i < _argc_; ++i) SetAtom(args[i+2],_argv_[i+4]);
- }
- else if(_argc_ >= 3 && IsSymbol(_argv_[0]) && IsSymbol(_argv_[1])) {
- canv = GetSymbol(_argv_[0]);
- name = GetSymbol(_argv_[1]);
-
- args(_argc_);
- // random position if not given
- SetInt(args[0],rand()%600);
- SetInt(args[1],50+rand()%400);
- for(int i = 0; i < _argc_-2; ++i) SetAtom(args[i+2],_argv_[i+2]);
- }
-
- if(args.Count()) {
- if(name == sym_dot)
- err = ". cannot be redefined";
- else if(!symreuse && root.find(name))
- err = "Name already in use";
- else if(!canv || !(glist = FindCanvas(canv)))
- err = "Canvas could not be found";
- else {
- // convert abstraction filenames
- if(stripext && kind == k_obj && args.Count() >= 3 && IsSymbol(args[2])) {
- const char *c = GetString(args[2]);
- int l = strlen(c);
- // check end of string for .pd file extension
- if(l >= 4 && !memcmp(c+l-3,".pd",4)) {
- // found -> get rid of it
- char tmp[64],*t = tmp;
- if(l > sizeof tmp-1) t = new char[l+1];
- memcpy(tmp,c,l-3); tmp[l-3] = 0;
- SetString(args[2],tmp);
- if(tmp != t) delete[] t;
- }
- }
-
- // set selected canvas as current
- canvas_setcurrent(glist);
-
- t_gobj *last = GetLast(glist);
- pd_typedmess((t_pd *)glist,(t_symbol *)kind,args.Count(),args.Atoms());
- newest = GetLast(glist);
-
- if(kind == k_obj) {
- t_object *o = (t_object *)pd_newest();
-
- if(!o) {
- // PD creates a text object when the intended object could not be created
- t_gobj *trash = GetLast(glist);
-
- // Test for newly created object....
- if(trash && last != trash) {
- // Delete it!
- glist_delete(glist,trash);
- }
- newest = NULL;
- }
- else
- newest = &o->te_g;
- }
-
- // look for latest created object
- if(newest) {
- // add to database
- if(add) {
- bool ok = Add(name,glist,newest);
- FLEXT_ASSERT(ok);
- }
-
- // send loadbang (if it is an abstraction)
- if(pd_class(&newest->g_pd) == canvas_class) {
- // hide the sub-canvas
- pd_vmess((t_pd *)newest,const_cast<t_symbol *>(sym_vis),"i",0);
-
- // loadbang the abstraction
- pd_vmess((t_pd *)newest,const_cast<t_symbol *>(sym_loadbang),"");
- }
-
- // restart dsp - that's necessary because ToCanvas is called manually
- canvas_update_dsp();
- }
- else
- if(!err) err = "Could not create object";
-
- // pop the current canvas
- canvas_unsetcurrent(glist);
- }
- }
- else
- if(!err) err = "new name object [args]";
-
- if(err) throw err;
-
- return newest;
-}
-
-void dyn::m_reset()
-{
- int dsp = canvas_suspend_dsp();
- DoExit();
- DoInit();
- canvas_resume_dsp(dsp);
-}
-
-void dyn::m_reload()
-{
- post("%s - reload: not implemented yet",thisName());
-}
-
-void dyn::m_newobj(int argc,const t_atom *argv)
-{
- try { New(k_obj,argc,argv); }
- catch(const char *err) {
- post("%s - %s",thisName(),err);
- }
- catch(...) {
- post("%s - unknown error",thisName());
- }
-}
-
-void dyn::m_newmsg(int argc,const t_atom *argv)
-{
- try { New(k_msg,argc,argv); }
- catch(const char *err) {
- post("%s - %s",thisName(),err);
- }
- catch(...) {
- post("%s - unknown error",thisName());
- }
-}
-
-void dyn::m_newtext(int argc,const t_atom *argv)
-{
- try { New(k_text,argc,argv); }
- catch(const char *err) {
- post("%s - %s",thisName(),err);
- }
- catch(...) {
- post("%s - unknown error",thisName());
- }
-}
-
-void dyn::m_del(const t_symbol *n)
-{
- Obj *obj = Remove(n);
- if(obj) {
- glist_delete(obj->glist,obj->object);
- delete obj;
- }
- else
- post("%s - del: object not found",thisName());
-}
-
-void dyn::ConnDis(bool conn,int argc,const t_atom *argv)
-{
- const t_symbol *s_n = NULL,*d_n = NULL;
- int s_x,d_x;
-
- if(argc == 4 && IsSymbol(argv[0]) && CanbeInt(argv[1]) && IsSymbol(argv[2]) && CanbeInt(argv[3])) {
- s_n = GetSymbol(argv[0]);
- s_x = GetAInt(argv[1]);
- d_n = GetSymbol(argv[2]);
- d_x = GetAInt(argv[3]);
- }
- else if(argc == 3 && CanbeInt(argv[0]) && IsSymbol(argv[1]) && CanbeInt(argv[2])) {
- s_n = NULL;
- s_x = GetAInt(argv[0]);
- d_n = GetSymbol(argv[1]);
- d_x = GetAInt(argv[2]);
- }
- else if(argc == 3 && IsSymbol(argv[0]) && CanbeInt(argv[1]) && CanbeInt(argv[2])) {
- s_n = GetSymbol(argv[0]);
- s_x = GetAInt(argv[1]);
- d_n = NULL;
- d_x = GetAInt(argv[2]);
- }
- else if(argc == 2 && CanbeInt(argv[0]) && CanbeInt(argv[1])) {
- // direct connection from proxy-in to proxy-out
- s_n = NULL;
- s_x = GetAInt(argv[0]);
- d_n = NULL;
- d_x = GetAInt(argv[1]);
- }
- else {
- post("%s - connect: [src-name] src-slot [dst-name] dst-slot",thisName());
- return;
- }
-
- t_text *s_obj,*d_obj;
- t_glist *s_cnv,*d_cnv;
- if(s_n) {
- Obj *s_o = Find(s_n);
- if(!s_o) {
- post("%s - connect: source \"%s\" not found",thisName(),GetString(s_n));
- return;
- }
- s_obj = (t_text *)s_o->object;
- s_cnv = s_o->glist;
- }
- else if(s_x < 0 && s_x >= s_inlets+m_inlets) {
- post("%s - connect: inlet %i out of range (0..%i)",thisName(),s_x,s_inlets+m_inlets-1);
- return;
- }
- else {
- s_obj = s_x < s_inlets?&pxsin[s_x]->obj:&pxmin[s_x-s_inlets]->obj;
- s_cnv = canvas;
- s_x = 0; // always 0 for proxy
- }
-
- if(d_n) {
- Obj *d_o = Find(d_n);
- if(!d_o) {
- post("%s - connect: destination \"%s\" not found",thisName(),GetString(d_n));
- return;
- }
- d_obj = (t_text *)d_o->object;
- d_cnv = d_o->glist;
- }
- else if(d_x < 0 && d_x >= s_outlets+m_outlets) {
- post("%s - connect: outlet %i out of range (0..%i)",thisName(),d_x,s_outlets+m_outlets-1);
- return;
- }
- else {
- d_obj = d_x < s_outlets?&pxsout[d_x]->obj:&pxmout[d_x-s_outlets]->obj;
- d_cnv = canvas;
- d_x = 0; // always 0 for proxy
- }
-
- if(s_cnv != d_cnv) {
- post("%s - connect: objects \"%s\" and \"%s\" are not on same canvas",thisName(),GetString(s_n),GetString(d_n));
- return;
- }
-
-#ifndef NO_VIS
- int s_oix = canvas_getindex(s_cnv,&s_obj->te_g);
- int d_oix = canvas_getindex(d_cnv,&d_obj->te_g);
-#endif
-
- if(conn) {
- if(!canvas_isconnected(s_cnv,(t_text *)s_obj,s_x,(t_text *)d_obj,d_x)) {
-#ifdef NO_VIS
- if(!obj_connect(s_obj, s_x, d_obj, d_x))
- post("%s - connect: connection could not be made",thisName());
-#else
- canvas_connect(s_cnv,s_oix,s_x,d_oix,d_x);
-#endif
- }
- }
- else {
-#ifdef NO_VIS
- obj_disconnect(s_obj, s_x, d_obj, d_x);
-#else
- canvas_disconnect(s_cnv,s_oix,s_x,d_oix,d_x);
-#endif
- }
-}
-
-
-bool dyn::CbMethodResort(int n,const t_symbol *s,int argc,const t_atom *argv)
-{
- if(n == 0)
- // messages into inlet 0 are for dyn~
- return flext_base::m_method_(n,s,argc,argv);
- else {
- // all other messages are forwarded to proxies (and connected objects)
- if(n >= s_inlets)
- pxmin[n-s_inlets-1]->Message(s,argc,argv);
- else
- post("%s - message to signal inlet",thisName());
- return true;
- }
-}
-
-
-void dyn::m_send(int argc,const t_atom *argv)
-{
- if(argc < 2 || !IsSymbol(argv[0]))
- post("%s - Syntax: send name message [args]",thisName());
- else {
- Obj *o = Find(GetSymbol(argv[0]));
- if(!o)
- post("%s - send: object \"%s\" not found",thisName(),GetString(argv[0]));
- else if(!canvasmsg && o->AsGlist())
- post("%s - send: object \"%s\" is an abstraction, please create proxy",thisName(),GetString(argv[0]));
- else if(IsSymbol(argv[1]))
- // has a tag symbol
- pd_typedmess((t_pd *)o->object,(t_symbol *)GetSymbol(argv[1]),argc-2,(t_atom *)argv+2);
- else
- // assume it's a list
- pd_forwardmess((t_pd *)o->object,argc-1,(t_atom *)argv+1);
- }
-}
-
-void dyn::sigproxyin::dsp(sigproxyin *x,t_signal **sp)
-{
- FLEXT_ASSERT(x->vec && x->n);
- int n = sp[0]->s_n;
- if(n != x->n) {
- post("dyn~ proxyin - blocksize doesn't match!");
- }
- else
- dsp_add_copy(x->vec,sp[0]->s_vec,n);
-}
-
-void dyn::sigproxyout::dsp(sigproxyout *x,t_signal **sp)
-{
- FLEXT_ASSERT(x->vec && x->n);
- int n = sp[0]->s_n;
- if(n != x->n) {
- post("dyn~ proxyout - blocksize doesn't match!");
- }
- else
- dsp_add_copy(sp[0]->s_vec,x->vec,n);
-}
-
-bool dyn::CbDsp()
-{
- int n = Blocksize();
- t_sample *const *in = InSig(),*const *out = OutSig();
- int i;
- for(i = 0; i < s_inlets; ++i) pxsin[i]->set(n,in[i+1]);
- for(i = 0; i < s_outlets; ++i) pxsout[i]->set(n,out[i]);
-
- // add sub canvas to dsp list (no signal vector to borrow from .. set it to NULL)
- mess1((t_pd *)canvas,const_cast<t_symbol *>(sym_dsp),NULL);
- return false;
-}