From 9ed18c7064226e1edc06f5a51fd569083971d448 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 20 Oct 2011 04:37:06 +0000 Subject: ported chaos to the Library Template, now with libchaos support svn path=/trunk/externals/bbogart/chaos/; revision=15625 --- COPYING.txt | 340 ------------------------------ LICENSE.txt | 340 ++++++++++++++++++++++++++++++ Makefile | 410 ++++++++++++++++++++++++++++++++++++ Makefile.nt | 97 +++++++++ README.build.txt | 15 -- Release/BuildLog.htm | 87 -------- Release/chaos.dll | Bin 69632 -> 0 bytes Release/chaos.pd_darwin | Bin 13768 -> 0 bytes attract1-help.pd | 35 +++ attract1.c | 2 +- base-help.pd | 28 +++ base.c | 2 +- base3.c | 2 +- chaos-meta.pd | 6 + chaos.h | 25 +++ dejong.c | 2 +- examples/fractal-tools.pd | 27 +++ examples/loop.pd | 43 ++++ examples/martin-test-help.pd | 92 ++++++++ examples/popcorn-test-help.pd | 62 ++++++ examples/quaruptwo-test-help.pd | 69 ++++++ examples/readme-frac-format.pd | 22 ++ examples/readme-fractals.pd | 54 +++++ examples/readme-gen-fractal.pd | 6 + examples/readme-lyapunov.pd | 16 ++ examples/readme-operation.pd | 34 +++ examples/readme-parameter-ranges.pd | 23 ++ examples/readme-searching.pd | 101 +++++++++ examples/search-tools.pd | 186 ++++++++++++++++ gingerbreadman-help.pd | 31 +++ henon-help.pd | 50 +++++ henon.c | 2 +- hopalong-help.pd | 32 +++ hopalong.c | 2 +- ikeda-help.pd | 54 +++++ ikeda.c | 2 +- latoocarfian-help.pd | 35 +++ latoocarfian.c | 2 +- latoomutalpha-help.pd | 35 +++ latoomutalpha.c | 2 +- latoomutbeta-help.pd | 35 +++ latoomutbeta.c | 2 +- latoomutgamma-help.pd | 35 +++ latoomutgamma.c | 2 +- libchaos.c | 90 ++++++++ logistic.c | 2 +- lorenz-help.pd | 54 +++++ lorenz.c | 2 +- lotka_volterra.c | 2 +- lyapunov.c | 90 -------- lyapunov.h | 25 --- makefile | 97 --------- martin-help.pd | 38 ++++ martin.c | 2 +- mlogistic.c | 2 +- pickover.c | 2 +- popcorn-help.pd | 35 +++ popcorn.c | 2 +- quadruptwo.c | 2 +- quaruptwo-help.pd | 32 +++ rossler.c | 2 +- standardmap-help.pd | 32 +++ standardmap.c | 2 +- strange1.c | 2 +- tent.c | 2 +- three_d.c | 2 +- threeply.c | 2 +- tinkerbell.c | 2 +- tools/attract1-help.pd | 35 --- tools/base-help.pd | 28 --- tools/fractal-tools.pd | 27 --- tools/gingerbreadman-help.pd | 31 --- tools/henon-help.pd | 50 ----- tools/hopalong-help.pd | 32 --- tools/ikeda-help.pd | 54 ----- tools/latoocarfian-help.pd | 35 --- tools/latoomutalpha-help.pd | 35 --- tools/latoomutbeta-help.pd | 35 --- tools/latoomutgamma-help.pd | 35 --- tools/loop.pd | 43 ---- tools/lorenz-help.pd | 54 ----- tools/martin-help.pd | 38 ---- tools/martin-test-help.pd | 92 -------- tools/popcorn-help.pd | 35 --- tools/popcorn-test-help.pd | 62 ------ tools/quaruptwo-help.pd | 32 --- tools/quaruptwo-test-help.pd | 69 ------ tools/readme-frac-format.pd | 22 -- tools/readme-fractals.pd | 54 ----- tools/readme-gen-fractal.pd | 6 - tools/readme-lyapunov.pd | 16 -- tools/readme-operation.pd | 34 --- tools/readme-parameter-ranges.pd | 23 -- tools/readme-searching.pd | 101 --------- tools/search-tools.pd | 186 ---------------- tools/standardmap-help.pd | 32 --- 96 files changed, 2290 insertions(+), 1976 deletions(-) delete mode 100644 COPYING.txt create mode 100644 LICENSE.txt create mode 100644 Makefile create mode 100644 Makefile.nt delete mode 100644 README.build.txt delete mode 100644 Release/BuildLog.htm delete mode 100644 Release/chaos.dll delete mode 100644 Release/chaos.pd_darwin create mode 100644 attract1-help.pd create mode 100644 base-help.pd create mode 100644 chaos-meta.pd create mode 100644 chaos.h create mode 100644 examples/fractal-tools.pd create mode 100644 examples/loop.pd create mode 100644 examples/martin-test-help.pd create mode 100644 examples/popcorn-test-help.pd create mode 100644 examples/quaruptwo-test-help.pd create mode 100644 examples/readme-frac-format.pd create mode 100644 examples/readme-fractals.pd create mode 100644 examples/readme-gen-fractal.pd create mode 100644 examples/readme-lyapunov.pd create mode 100644 examples/readme-operation.pd create mode 100644 examples/readme-parameter-ranges.pd create mode 100644 examples/readme-searching.pd create mode 100644 examples/search-tools.pd create mode 100644 gingerbreadman-help.pd create mode 100644 henon-help.pd create mode 100644 hopalong-help.pd create mode 100644 ikeda-help.pd create mode 100644 latoocarfian-help.pd create mode 100644 latoomutalpha-help.pd create mode 100644 latoomutbeta-help.pd create mode 100644 latoomutgamma-help.pd create mode 100644 libchaos.c create mode 100644 lorenz-help.pd delete mode 100644 lyapunov.c delete mode 100644 lyapunov.h delete mode 100644 makefile create mode 100644 martin-help.pd create mode 100644 popcorn-help.pd create mode 100644 quaruptwo-help.pd create mode 100644 standardmap-help.pd delete mode 100644 tools/attract1-help.pd delete mode 100644 tools/base-help.pd delete mode 100644 tools/fractal-tools.pd delete mode 100644 tools/gingerbreadman-help.pd delete mode 100644 tools/henon-help.pd delete mode 100644 tools/hopalong-help.pd delete mode 100644 tools/ikeda-help.pd delete mode 100644 tools/latoocarfian-help.pd delete mode 100644 tools/latoomutalpha-help.pd delete mode 100644 tools/latoomutbeta-help.pd delete mode 100644 tools/latoomutgamma-help.pd delete mode 100644 tools/loop.pd delete mode 100644 tools/lorenz-help.pd delete mode 100644 tools/martin-help.pd delete mode 100644 tools/martin-test-help.pd delete mode 100644 tools/popcorn-help.pd delete mode 100644 tools/popcorn-test-help.pd delete mode 100644 tools/quaruptwo-help.pd delete mode 100644 tools/quaruptwo-test-help.pd delete mode 100644 tools/readme-frac-format.pd delete mode 100644 tools/readme-fractals.pd delete mode 100644 tools/readme-gen-fractal.pd delete mode 100644 tools/readme-lyapunov.pd delete mode 100644 tools/readme-operation.pd delete mode 100644 tools/readme-parameter-ranges.pd delete mode 100644 tools/readme-searching.pd delete mode 100644 tools/search-tools.pd delete mode 100644 tools/standardmap-help.pd diff --git a/COPYING.txt b/COPYING.txt deleted file mode 100644 index 486449c..0000000 --- a/COPYING.txt +++ /dev/null @@ -1,340 +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. - - - Copyright (C) - - 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) year 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. - - , 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/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..486449c --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,340 @@ + 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. + + + Copyright (C) + + 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) year 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. + + , 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/Makefile b/Makefile new file mode 100644 index 0000000..9b667dc --- /dev/null +++ b/Makefile @@ -0,0 +1,410 @@ +## Pd library template version 1.0.11 +# For instructions on how to use this template, see: +# http://puredata.info/docs/developer/MakefileTemplate +LIBRARY_NAME = chaos + +# add your .c source files, one object per file, to the SOURCES +# variable, help files will be included automatically, and for GUI +# objects, the matching .tcl file too +SOURCES = attract1.c base3.c base.c chaos.c dejong.c gingerbreadman.c henon.c hopalong.c ikeda.c latoocarfian.c latoomutalpha.c latoomutbeta.c latoomutgamma.c logistic.c lorenz.c lotka_volterra.c martin.c mlogistic.c pickover.c popcorn.c quadruptwo.c rossler.c standardmap.c strange1.c tent.c three_d.c threeply.c tinkerbell.c unity.c + +# list all pd objects (i.e. myobject.pd) files here, and their helpfiles will +# be included automatically +PDOBJECTS = + +# example patches and related files, in the 'examples' subfolder +EXAMPLES = fractal-tools.pd loop.pd martin-test-help.pd popcorn-test-help.pd quaruptwo-test-help.pd readme-frac-format.pd readme-fractals.pd readme-gen-fractal.pd readme-lyapunov.pd readme-operation.pd readme-parameter-ranges.pd readme-searching.pd search-tools.pd + +# manuals and related files, in the 'manual' subfolder +MANUAL = + +# if you want to include any other files in the source and binary tarballs, +# list them here. This can be anything from header files, test patches, +# documentation, etc. README.txt and LICENSE.txt are required and therefore +# automatically included +EXTRA_DIST = chaos.ncb chaos.sln chaos.suo chaos.vcproj Makefile.nt + + + +#------------------------------------------------------------------------------# +# +# things you might need to edit if you are using other C libraries +# +#------------------------------------------------------------------------------# + +ALL_CFLAGS = -I"$(PD_INCLUDE)" +ALL_LDFLAGS = +SHARED_LDFLAGS = +ALL_LIBS = + + +#------------------------------------------------------------------------------# +# +# you shouldn't need to edit anything below here, if we did it right :) +# +#------------------------------------------------------------------------------# + +# these can be set from outside without (usually) breaking the build +CFLAGS = -Wall -W -g +LDFLAGS = +LIBS = + +# get library version from meta file +LIBRARY_VERSION = $(shell sed -n 's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' $(LIBRARY_NAME)-meta.pd) + +ALL_CFLAGS += -DPD -DVERSION='"$(LIBRARY_VERSION)"' + +PD_INCLUDE = $(PD_PATH)/include/pd +# where to install the library, overridden below depending on platform +prefix = /usr/local +libdir = $(prefix)/lib +pkglibdir = $(libdir)/pd-externals +objectsdir = $(pkglibdir) + +INSTALL = install +INSTALL_PROGRAM = $(INSTALL) -p -m 644 +INSTALL_DATA = $(INSTALL) -p -m 644 +INSTALL_DIR = $(INSTALL) -p -m 755 -d + +ALLSOURCES := $(SOURCES) $(SOURCES_android) $(SOURCES_cygwin) $(SOURCES_macosx) \ + $(SOURCES_iphoneos) $(SOURCES_linux) $(SOURCES_windows) + +DISTDIR=$(LIBRARY_NAME)-$(LIBRARY_VERSION) +ORIGDIR=pd-$(LIBRARY_NAME:~=)_$(LIBRARY_VERSION) + +UNAME := $(shell uname -s) +ifeq ($(UNAME),Darwin) + CPU := $(shell uname -p) + ifeq ($(CPU),arm) # iPhone/iPod Touch + SOURCES += $(SOURCES_iphoneos) + EXTENSION = pd_darwin + SHARED_EXTENSION = dylib + OS = iphoneos + PD_PATH = /Applications/Pd-extended.app/Contents/Resources + IPHONE_BASE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin + CC=$(IPHONE_BASE)/gcc + CPP=$(IPHONE_BASE)/cpp + CXX=$(IPHONE_BASE)/g++ + ISYSROOT = -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk + IPHONE_CFLAGS = -miphoneos-version-min=3.0 $(ISYSROOT) -arch armv6 + OPT_CFLAGS = -fast -funroll-loops -fomit-frame-pointer + ALL_CFLAGS := $(IPHONE_CFLAGS) $(ALL_CFLAGS) + ALL_LDFLAGS += -arch armv6 -bundle -undefined dynamic_lookup $(ISYSROOT) + SHARED_LDFLAGS += -arch armv6 -dynamiclib -undefined dynamic_lookup $(ISYSROOT) + ALL_LIBS += -lc $(LIBS_iphoneos) + STRIP = strip -x + DISTBINDIR=$(DISTDIR)-$(OS) + else # Mac OS X + SOURCES += $(SOURCES_macosx) + EXTENSION = pd_darwin + SHARED_EXTENSION = dylib + OS = macosx + PD_PATH = /Applications/Pd-extended.app/Contents/Resources + OPT_CFLAGS = -ftree-vectorize -ftree-vectorizer-verbose=2 -fast +# build universal 32-bit on 10.4 and 32/64 on newer + ifeq ($(shell uname -r | sed 's|\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*|\1|'), 8) + FAT_FLAGS = -arch ppc -arch i386 -mmacosx-version-min=10.4 + else + FAT_FLAGS = -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4 + SOURCES += $(SOURCES_iphoneos) + endif + ALL_CFLAGS += $(FAT_FLAGS) -fPIC -I/sw/include + # if the 'pd' binary exists, check the linking against it to aid with stripping + BUNDLE_LOADER = $(shell test ! -e $(PD_PATH)/bin/pd || echo -bundle_loader $(PD_PATH)/bin/pd) + ALL_LDFLAGS += $(FAT_FLAGS) -bundle $(BUNDLE_LOADER) -undefined dynamic_lookup -L/sw/lib + SHARED_LDFLAGS += $(FAT_FLAGS) -dynamiclib -undefined dynamic_lookup \ + -install_name @loader_path/$(SHARED_LIB) -compatibility_version 1 -current_version 1.0 + ALL_LIBS += -lc $(LIBS_macosx) + STRIP = strip -x + DISTBINDIR=$(DISTDIR)-$(OS) +# install into ~/Library/Pd on Mac OS X since /usr/local isn't used much + pkglibdir=$(HOME)/Library/Pd + endif +endif +# Tho Android uses Linux, we use this fake uname to provide an easy way to +# setup all this things needed to cross-compile for Android using the NDK +ifeq ($(UNAME),ANDROID) + CPU := arm + SOURCES += $(SOURCES_android) + EXTENSION = pd_linux + SHARED_EXTENSION = so + OS = android + PD_PATH = /usr + NDK_BASE := /usr/local/android-ndk + NDK_PLATFORM_VERSION := 5 + NDK_SYSROOT=$(NDK_BASE)/platforms/android-$(NDK_PLATFORM_VERSION)/arch-arm + NDK_UNAME := $(shell uname -s | tr '[A-Z]' '[a-z]') + NDK_TOOLCHAIN_BASE=$(NDK_BASE)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/$(NDK_UNAME)-x86 + CC := $(NDK_TOOLCHAIN_BASE)/bin/arm-linux-androideabi-gcc --sysroot=$(NDK_SYSROOT) + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + CFLAGS += + LDFLAGS += -rdynamic -shared + SHARED_LDFLAGS += -Wl,-soname,$(SHARED_LIB) -shared + LIBS += -lc $(LIBS_android) + STRIP := $(NDK_TOOLCHAIN_BASE)/bin/arm-linux-androideabi-strip \ + --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m) +endif +ifeq ($(UNAME),Linux) + CPU := $(shell uname -m) + SOURCES += $(SOURCES_linux) + EXTENSION = pd_linux + SHARED_EXTENSION = so + OS = linux + PD_PATH = /usr + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + ALL_CFLAGS += -fPIC + ALL_LDFLAGS += -rdynamic -shared -fPIC -Wl,-rpath,"\$$ORIGIN",--enable-new-dtags + SHARED_LDFLAGS += -Wl,-soname,$(SHARED_LIB) -shared + ALL_LIBS += -lc $(LIBS_linux) + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m) +endif +ifeq ($(UNAME),GNU) + # GNU/Hurd, should work like GNU/Linux for basically all externals + CPU := $(shell uname -m) + SOURCES += $(SOURCES_linux) + EXTENSION = pd_linux + SHARED_EXTENSION = so + OS = linux + PD_PATH = /usr + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + ALL_CFLAGS += -fPIC + ALL_LDFLAGS += -rdynamic -shared -fPIC -Wl,-rpath,"\$$ORIGIN",--enable-new-dtags + SHARED_LDFLAGS += -shared -Wl,-soname,$(SHARED_LIB) + ALL_LIBS += -lc $(LIBS_linux) + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m) +endif +ifeq ($(UNAME),GNU/kFreeBSD) + # Debian GNU/kFreeBSD, should work like GNU/Linux for basically all externals + CPU := $(shell uname -m) + SOURCES += $(SOURCES_linux) + EXTENSION = pd_linux + SHARED_EXTENSION = so + OS = linux + PD_PATH = /usr + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + ALL_CFLAGS += -fPIC + ALL_LDFLAGS += -rdynamic -shared -fPIC -Wl,-rpath,"\$$ORIGIN",--enable-new-dtags + SHARED_LDFLAGS += -shared -Wl,-soname,$(SHARED_LIB) + ALL_LIBS += -lc $(LIBS_linux) + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m) +endif +ifeq (CYGWIN,$(findstring CYGWIN,$(UNAME))) + CPU := $(shell uname -m) + SOURCES += $(SOURCES_cygwin) + EXTENSION = dll + SHARED_EXTENSION = dll + OS = cygwin + PD_PATH = $(shell cygpath $$PROGRAMFILES)/pd + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + ALL_CFLAGS += + ALL_LDFLAGS += -rdynamic -shared -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin" + SHARED_LDFLAGS += -shared -Wl,-soname,$(SHARED_LIB) + ALL_LIBS += -lc -lpd $(LIBS_cygwin) + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS) +endif +ifeq (MINGW,$(findstring MINGW,$(UNAME))) + CPU := $(shell uname -m) + SOURCES += $(SOURCES_windows) + EXTENSION = dll + SHARED_EXTENSION = dll + OS = windows + PD_PATH = $(shell cd "$$PROGRAMFILES/pd" && pwd) + # MinGW doesn't seem to include cc so force gcc + CC=gcc + OPT_CFLAGS = -O3 -funroll-loops -fomit-frame-pointer + ALL_CFLAGS += -mms-bitfields + ALL_LDFLAGS += -s -shared -Wl,--enable-auto-import -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin" -L"$(PD_PATH)/obj" + SHARED_LDFLAGS += -shared + ALL_LIBS += -lpd -lwsock32 -lkernel32 -luser32 -lgdi32 $(LIBS_windows) + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS) +endif + +# in case somebody manually set the HELPPATCHES above +HELPPATCHES ?= $(SOURCES:.c=-help.pd) $(PDOBJECTS:.pd=-help.pd) + +ALL_CFLAGS := $(ALL_CFLAGS) $(CFLAGS) $(OPT_CFLAGS) +ALL_LDFLAGS := $(LDFLAGS) $(ALL_LDFLAGS) +ALL_LIBS := $(LIBS) $(ALL_LIBS) + +SHARED_SOURCE ?= $(shell test ! -e lib$(LIBRARY_NAME).c || \ + echo lib$(LIBRARY_NAME).c ) +SHARED_HEADER ?= $(shell test ! -e $(LIBRARY_NAME).h || echo $(LIBRARY_NAME).h) +SHARED_LIB = $(SHARED_SOURCE:.c=.$(SHARED_EXTENSION)) + +.PHONY = install libdir_install single_install install-doc install-examples install-manual clean distclean dist etags $(LIBRARY_NAME) + +all: $(SOURCES:.c=.$(EXTENSION)) $(SHARED_LIB) + +%.o: %.c + $(CC) $(ALL_CFLAGS) -o "$*.o" -c "$*.c" + +%.$(EXTENSION): %.o $(SHARED_LIB) + $(CC) $(ALL_LDFLAGS) -o "$*.$(EXTENSION)" "$*.o" $(ALL_LIBS) $(SHARED_LIB) + chmod a-x "$*.$(EXTENSION)" + +# this links everything into a single binary file +$(LIBRARY_NAME): $(SOURCES:.c=.o) $(LIBRARY_NAME).o + $(CC) $(ALL_LDFLAGS) -o $(LIBRARY_NAME).$(EXTENSION) $(SOURCES:.c=.o) $(LIBRARY_NAME).o $(ALL_LIBS) + chmod a-x $(LIBRARY_NAME).$(EXTENSION) + +$(SHARED_LIB): $(SHARED_SOURCE:.c=.o) + $(CC) $(SHARED_LDFLAGS) -o $(SHARED_LIB) $(SHARED_SOURCE:.c=.o) $(LIBS) + +install: libdir_install + +# The meta and help files are explicitly installed to make sure they are +# actually there. Those files are not optional, then need to be there. +libdir_install: $(SOURCES:.c=.$(EXTENSION)) $(SHARED_LIB) install-doc install-examples install-manual + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + $(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + test -z "$(strip $(SOURCES))" || (\ + $(INSTALL_PROGRAM) $(SOURCES:.c=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) && \ + $(STRIP) $(addprefix $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/,$(SOURCES:.c=.$(EXTENSION)))) + test -z "$(strip $(SHARED_LIB))" || \ + $(INSTALL_DATA) $(SHARED_LIB) \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + test -z "$(strip $(wildcard $(SOURCES:.c=.tcl)))" || \ + $(INSTALL_DATA) $(wildcard $(SOURCES:.c=.tcl)) \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + test -z "$(strip $(PDOBJECTS))" || \ + $(INSTALL_DATA) $(PDOBJECTS) \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + +# install library linked as single binary +single_install: $(LIBRARY_NAME) install-doc install-examples install-manual + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + $(INSTALL_PROGRAM) $(LIBRARY_NAME).$(EXTENSION) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + $(STRIP) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/$(LIBRARY_NAME).$(EXTENSION) + +install-doc: + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + test -z "$(strip $(SOURCES) $(PDOBJECTS))" || \ + $(INSTALL_DATA) $(HELPPATCHES) \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + $(INSTALL_DATA) README.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/README.txt + $(INSTALL_DATA) LICENSE.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/LICENSE.txt + +install-examples: + test -z "$(strip $(EXAMPLES))" || \ + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples && \ + for file in $(EXAMPLES); do \ + $(INSTALL_DATA) examples/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples; \ + done + +install-manual: + test -z "$(strip $(MANUAL))" || \ + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual && \ + for file in $(MANUAL); do \ + $(INSTALL_DATA) manual/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual; \ + done + + +clean: + -rm -f -- $(SOURCES:.c=.o) $(SOURCES_LIB:.c=.o) $(SHARED_SOURCE:.c=.o) + -rm -f -- $(SOURCES:.c=.$(EXTENSION)) + -rm -f -- $(LIBRARY_NAME).o + -rm -f -- $(LIBRARY_NAME).$(EXTENSION) + -rm -f -- $(SHARED_LIB) + +distclean: clean + -rm -f -- $(DISTBINDIR).tar.gz + -rm -rf -- $(DISTBINDIR) + -rm -f -- $(DISTDIR).tar.gz + -rm -rf -- $(DISTDIR) + -rm -f -- $(ORIGDIR).tar.gz + -rm -rf -- $(ORIGDIR) + + +$(DISTBINDIR): + $(INSTALL_DIR) $(DISTBINDIR) + +libdir: all $(DISTBINDIR) + $(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd $(DISTBINDIR) + $(INSTALL_DATA) $(SOURCES) $(SHARED_SOURCE) $(SHARED_HEADER) $(DISTBINDIR) + $(INSTALL_DATA) $(HELPPATCHES) $(DISTBINDIR) + test -z "$(strip $(EXTRA_DIST))" || \ + $(INSTALL_DATA) $(EXTRA_DIST) $(DISTBINDIR) +# tar --exclude-vcs -czpf $(DISTBINDIR).tar.gz $(DISTBINDIR) + +$(DISTDIR): + $(INSTALL_DIR) $(DISTDIR) + +$(ORIGDIR): + $(INSTALL_DIR) $(ORIGDIR) + +dist: $(DISTDIR) + $(INSTALL_DATA) Makefile $(DISTDIR) + $(INSTALL_DATA) README.txt $(DISTDIR) + $(INSTALL_DATA) LICENSE.txt $(DISTDIR) + $(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd $(DISTDIR) + test -z "$(strip $(ALLSOURCES))" || \ + $(INSTALL_DATA) $(ALLSOURCES) $(DISTDIR) + test -z "$(strip $(wildcard $(ALLSOURCES:.c=.tcl)))" || \ + $(INSTALL_DATA) $(wildcard $(ALLSOURCES:.c=.tcl)) $(DISTDIR) + test -z "$(strip $(SHARED_HEADER))" || \ + $(INSTALL_DATA) $(SHARED_HEADER) $(DISTDIR) + test -z "$(strip $(SHARED_SOURCE))" || \ + $(INSTALL_DATA) $(SHARED_SOURCE) $(DISTDIR) + test -z "$(strip $(PDOBJECTS))" || \ + $(INSTALL_DATA) $(PDOBJECTS) $(DISTDIR) + test -z "$(strip $(HELPPATCHES))" || \ + $(INSTALL_DATA) $(HELPPATCHES) $(DISTDIR) + test -z "$(strip $(EXTRA_DIST))" || \ + $(INSTALL_DATA) $(EXTRA_DIST) $(DISTDIR) + test -z "$(strip $(EXAMPLES))" || \ + $(INSTALL_DIR) $(DISTDIR)/examples && \ + for file in $(EXAMPLES); do \ + $(INSTALL_DATA) examples/$$file $(DISTDIR)/examples; \ + done + test -z "$(strip $(MANUAL))" || \ + $(INSTALL_DIR) $(DISTDIR)/manual && \ + for file in $(MANUAL); do \ + $(INSTALL_DATA) manual/$$file $(DISTDIR)/manual; \ + done + tar --exclude-vcs -czpf $(DISTDIR).tar.gz $(DISTDIR) + +# make a Debian source package +dpkg-source: + debclean + make distclean dist + mv $(DISTDIR) $(ORIGDIR) + tar --exclude-vcs -czpf ../$(ORIGDIR).orig.tar.gz $(ORIGDIR) + rm -f -- $(DISTDIR).tar.gz + rm -rf -- $(DISTDIR) $(ORIGDIR) + cd .. && dpkg-source -b $(LIBRARY_NAME) + +etags: + etags *.h $(SOURCES) ../../pd/src/*.[ch] /usr/include/*.h /usr/include/*/*.h + +showsetup: + @echo "CC: $(CC)" + @echo "CFLAGS: $(CFLAGS)" + @echo "LDFLAGS: $(LDFLAGS)" + @echo "LIBS: $(LIBS)" + @echo "ALL_CFLAGS: $(ALL_CFLAGS)" + @echo "ALL_LDFLAGS: $(ALL_LDFLAGS)" + @echo "ALL_LIBS: $(ALL_LIBS)" + @echo "PD_INCLUDE: $(PD_INCLUDE)" + @echo "PD_PATH: $(PD_PATH)" + @echo "objectsdir: $(objectsdir)" + @echo "LIBRARY_NAME: $(LIBRARY_NAME)" + @echo "LIBRARY_VERSION: $(LIBRARY_VERSION)" + @echo "SOURCES: $(SOURCES)" + @echo "SHARED_HEADER: $(SHARED_HEADER)" + @echo "SHARED_SOURCE: $(SHARED_SOURCE)" + @echo "SHARED_LIB: $(SHARED_LIB)" + @echo "PDOBJECTS: $(PDOBJECTS)" + @echo "ALLSOURCES: $(ALLSOURCES)" + @echo "ALLSOURCES TCL: $(wildcard $(ALLSOURCES:.c=.tcl))" + @echo "UNAME: $(UNAME)" + @echo "CPU: $(CPU)" + @echo "pkglibdir: $(pkglibdir)" + @echo "DISTDIR: $(DISTDIR)" + @echo "ORIGDIR: $(ORIGDIR)" diff --git a/Makefile.nt b/Makefile.nt new file mode 100644 index 0000000..c4d1ac6 --- /dev/null +++ b/Makefile.nt @@ -0,0 +1,97 @@ +NAME=chaos +CSYM=chaos + +current: pd_nt pd_intel pd_linux pd_darwin + +# ----------------------- NT ----------------------- + +pd_nt: $(NAME).dll + +.SUFFIXES: .dll + +PDNTCFLAGS = /W3 /WX /MD /O2 /G6 /DNT /DPD /DMAXLIB /nologo +VC="C:\Programme\Microsoft Visual Studio\VC98" + +PDNTINCLUDE = /I. /Ic:\pd\tcl\include /Ic:\pd\src /I$(VC)\include /Iinclude + +PDNTLDIR = $(VC)\Lib +PDNTLIB = $(PDNTLDIR)\msvcrt.lib \ + $(PDNTLDIR)\oldnames.lib \ + $(PDNTLDIR)\kernel32.lib \ + $(PDNTLDIR)\user32.lib \ + $(PDNTLDIR)\uuid.lib \ + $(PDNTLDIR)\ws2_32.lib \ + $(PDNTLDIR)\pthreadVC.lib \ + c:\pd\bin\pd.lib + +PDNTEXTERNALS = lyapunov.obj henon.obj hopalong.obj ikeda.obj latoocarfian.obj latoomutalpha.obj latoomutbeta.obj latoomutgamma.obj logistic.obj lorenz.obj mlogistic.obj rossler.obj standardmap.obj tent.obj three_d.obj + +.c.dll: + cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c *.c + link /dll /export:$(CSYM)_setup $*.obj $(PDNTEXTERNALS) $(PDNTLIB) + +# ----------------------- Mac OS X (Darwin) ----------------------- + +pd_darwin: $(NAME).pd_darwin + +.SUFFIXES: .pd_darwin + +DARWINCFLAGS = -DPD -DMAXLIB -DUNIX -DMACOSX -O2 \ + -Wall -W -Wshadow -Wstrict-prototypes \ + -Wno-unused -Wno-parentheses -Wno-switch + +# where is your m_pd.h ??? +DARWININCLUDE = -I../../src -I../../obj + +DARWINEXTERNALS = lyapunov.o attract1.o base.o base3.o dejong.o gingerbreadman.o henon.o hopalong.o ikeda.o latoocarfian.o latoomutalpha.o \ +latoomutbeta.o latoomutgamma.o logistic.o lorenz.o martin.o mlogistic.o pickover.o popcorn.o quadruptwo.o rossler.o standardmap.o \ +strange1.o tent.o three_d.o threeply.o tinkerbell.o unity.o lotka_volterra.o + +PD_LOCAL_EXTERNALS = $(HOME)/Library/Pd/Externals +PD_LOCAL_HELP = $(HOME)/Library/Pd/Help +PD_BINARY = /usr/local/pd/bin/pd +MTARGET = $(NAME).pd_darwin +MDARWININCLUDE = -I/usr/local/pd/src + +.c.o: + cc $(DARWINCFLAGS) $(DARWININCLUDE) -c *.c + +.o.pd_darwin: + cc -bundle -bundle_loader $(PD_BINARY) -flat_namespace -o $*.pd_darwin $*.o $(DARWINEXTERNALS) + +pd_darwin: $(DARWINEXTERNALS) + rm -f $*.o ../$*.pd_darwin + ln -s $*/$*.pd_darwin .. + +minstall: $(MTARGET) $(DARWINEXTERNALS) + mv -f $(MTARGET) $(PD_LOCAL_EXTERNALS) + cp -f help-*.pd $(PD_LOCAL_HELP) + +# ----------------------- LINUX i386 ----------------------- + +pd_linux: $(NAME).pd_linux + +.SUFFIXES: .pd_linux + +LINUXCFLAGS = -DPD -DUNIX -O2 -funroll-loops -fomit-frame-pointer \ + -Wall -W -Wshadow \ + -Wno-unused -Wno-parentheses -Wno-switch + +# where is your m_pd.h ??? +LINUXINCLUDE = -I/usr/local/include + +LINUXEXTERNALS = lyapunov.o attract1.o base.o base3.o dejong.o gingerbreadman.o henon.o hopalong.o ikeda.o latoocarfian.o latoomutalpha.o \ +latoomutbeta.o latoomutgamma.o logistic.o lorenz.o martin.o mlogistic.o pickover.o popcorn.o quadruptwo.o rossler.o standardmap.o \ +strange1.o tent.o three_d.o threeply.o tinkerbell.o unity.o lotka_volterra.o + +.c.pd_linux: + cc -O2 -Wall -DPD -fPIC $(LINUXCFLAGS) $(LINUXINCLUDE) -c *.c + ld --export-dynamic -shared -o $*.pd_linux $*.o $(LINUXEXTERNALS) -lc + strip --strip-unneeded $*.pd_linux + +# ---------------------------------------------------------- + +PDDIR=/usr/lib/pd + +clean: + rm -f *.o *.pd_* so_locations diff --git a/README.build.txt b/README.build.txt deleted file mode 100644 index 638cbcb..0000000 --- a/README.build.txt +++ /dev/null @@ -1,15 +0,0 @@ -These objects where developed under Linux and have been tested -in Linux and OSX. The objects should also compile under Windows and IRIX. - -To build (under linux): - -make pd_linux - -To build (under OSX): - -make pd_darwin - - -To Install: - -Copy the .pd_* files where PD will seem them, like the "extra" folder. diff --git a/Release/BuildLog.htm b/Release/BuildLog.htm deleted file mode 100644 index 7b69af8..0000000 --- a/Release/BuildLog.htm +++ /dev/null @@ -1,87 +0,0 @@ - - - - - -
-
-Build Log -
  
-

------- Build started: Project: chaos, Configuration: Release|Win32 ------- -

-
-Environment Space -
  
    ALLUSERSPROFILE=C:\Documents and Settings\All Users
-    APPDATA=C:\Documents and Settings\george\Application Data
-    CLIENTNAME=Console
-    CommonProgramFiles=C:\Program Files\Common Files
-    COMPUTERNAME=BLUE
-    ComSpec=C:\WINDOWS\system32\cmd.exe
-    HOMEDRIVE=C:
-    HOMEPATH=\Documents and Settings\george
-    INCLUDE=C:\Program Files\Microsoft Visual Studio .NET\Vc7\include;C:\Program Files\Microsoft Visual Studio .NET\Vc7\atlmfc\include;C:\Program Files\Microsoft Visual Studio .NET\Vc7\PlatformSDK\include\prerelease;C:\Program Files\Microsoft Visual Studio .NET\Vc7\PlatformSDK\include;C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\include
-    LIB=C:\Program Files\Microsoft Visual Studio .NET\Vc7\lib;C:\Program Files\Microsoft Visual Studio .NET\Vc7\atlmfc\lib;C:\Program Files\Microsoft Visual Studio .NET\Vc7\PlatformSDK\lib\prerelease;C:\Program Files\Microsoft Visual Studio .NET\Vc7\PlatformSDK\lib;C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\lib
-    LIBPATH=
-    LOGONSERVER=\\BLUE
-    NUMBER_OF_PROCESSORS=1
-    OS=Windows_NT
-    Path=C:\Program Files\Microsoft Visual Studio .NET\Vc7\bin;C:\Program Files\Microsoft Visual Studio .NET\Common7\Tools\bin\prerelease;C:\Program Files\Microsoft Visual Studio .NET\Common7\Tools\bin;C:\Program Files\Microsoft Visual Studio .NET\Common7\tools;C:\Program Files\Microsoft Visual Studio .NET\Common7\ide;C:\Program Files\HTML Help Workshop\;C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\bin;C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\PROGRA~1\ULTRAE~1;C:\Program Files\Common Files\Adaptec Shared\System
-    PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.tcl;.py;.pyc;.pyo;.pyw;.pys
-    PROCESSOR_ARCHITECTURE=x86
-    PROCESSOR_IDENTIFIER=x86 Family 6 Model 4 Stepping 2, AuthenticAMD
-    PROCESSOR_LEVEL=6
-    PROCESSOR_REVISION=0402
-    ProgramFiles=C:\Program Files
-    SESSIONNAME=Console
-    SystemDrive=C:
-    SystemRoot=C:\WINDOWS
-    TEMP=C:\DOCUME~1\george\LOCALS~1\Temp
-    TMP=C:\DOCUME~1\george\LOCALS~1\Temp
-    USERDOMAIN=BLUE
-    USERNAME=george
-    USERPROFILE=C:\Documents and Settings\george
-    VSCOMNTOOLS="C:\Program Files\Microsoft Visual Studio .NET\Common7\Tools\"
-    VST_PATH=C:\Audio\Vstplugins
-    windir=C:\WINDOWS
-    _ACP_ATLPROV=C:\Program Files\Microsoft Visual Studio .NET\Vc7\bin\ATLPROV.DLL
-    _ACP_INCLUDE="E:\pd\pd-0.35-1\src";C:\Program Files\Microsoft Visual Studio .NET\Vc7\include;C:\Program Files\Microsoft Visual Studio .NET\Vc7\atlmfc\include;C:\Program Files\Microsoft Visual Studio .NET\Vc7\PlatformSDK\include\prerelease;C:\Program Files\Microsoft Visual Studio .NET\Vc7\PlatformSDK\include;C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\include
-    _ACP_LIB=C:\Program Files\Microsoft Visual Studio .NET\Vc7\lib;C:\Program Files\Microsoft Visual Studio .NET\Vc7\atlmfc\lib;C:\Program Files\Microsoft Visual Studio .NET\Vc7\PlatformSDK\lib\prerelease;C:\Program Files\Microsoft Visual Studio .NET\Vc7\PlatformSDK\lib;C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\lib;"E:\pd\pd-0.35-1\src";C:\Program Files\Microsoft Visual Studio .NET\Vc7\include;C:\Program Files\Microsoft Visual Studio .NET\Vc7\atlmfc\include;C:\Program Files\Microsoft Visual Studio .NET\Vc7\PlatformSDK\include\prerelease;C:\Program Files\Microsoft Visual Studio .NET\Vc7\PlatformSDK\include;C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\include
-    _ACP_PATH=C:\Program Files\Microsoft Visual Studio .NET\Vc7\bin;C:\Program Files\Microsoft Visual Studio .NET\Common7\Tools\bin\prerelease;C:\Program Files\Microsoft Visual Studio .NET\Common7\Tools\bin;C:\Program Files\Microsoft Visual Studio .NET\Common7\tools;C:\Program Files\Microsoft Visual Studio .NET\Common7\ide;C:\Program Files\HTML Help Workshop\;C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\bin;C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\PROGRA~1\ULTRAE~1;C:\Program Files\Common Files\Adaptec Shared\System
-
-Command Lines -
  
Creating temporary file "e:\pd\add_ons\-=[ Ben Bogart ]=-\Chaos Math Externals\chaos\Release\RSP000001.rsp" with contents
-[
-/O2 /Ob1 /Oy /I "E:\pd\pd-0.35-1\src" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "NT" /D "PD" /D "_MBCS" /D "_WINDLL" /GF /FD /EHsc /ML /GS /Gy /YX"stdafx.h" /Fp"Release/chaos.pch" /Fo"Release/" /Fd"Release/vc70.pdb" /W3 /c /Wp64
-"rossler.c"
-"lorenz.c"
-"ikeda.c"
-"henon.c"
-"chaos.c"
-]
-Creating command line "cl.exe @"e:\pd\add_ons\-=[ Ben Bogart ]=-\Chaos Math Externals\chaos\Release\RSP000001.rsp" /nologo"
-Creating temporary file "e:\pd\add_ons\-=[ Ben Bogart ]=-\Chaos Math Externals\chaos\Release\RSP000002.rsp" with contents
-[
-/OUT:"Release/chaos.dll" /INCREMENTAL:NO /NOLOGO /LIBPATH:"E:\pd\pd-0.35-1\bin" /DLL /DEBUG /PDB:"Release/chaos.pdb" /SUBSYSTEM:WINDOWS /OPT:REF /OPT:ICF /MACHINE:IX86 /EXPORT:chaos_setup E:\pd\pd-0.35-1\bin\pd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib "\pd\pd-0.35-1\bin\pd.lib"
-"Release\chaos.obj"
-"Release\henon.obj"
-"Release\ikeda.obj"
-"Release\lorenz.obj"
-"Release\rossler.obj"
-]
-Creating command line "link.exe @"e:\pd\add_ons\-=[ Ben Bogart ]=-\Chaos Math Externals\chaos\Release\RSP000002.rsp""
-
-Output Window -
  
Compiling...
-rossler.c
-lorenz.c
-ikeda.c
-henon.c
-chaos.c
-Linking...
-   Creating library Release/chaos.lib and object Release/chaos.exp
-
-Results -
  
-Build log was saved at "file://e:\pd\add_ons\-=[ Ben Bogart ]=-\Chaos Math Externals\chaos\Release\BuildLog.htm"
-chaos - 0 error(s), 0 warning(s)
-
\ No newline at end of file diff --git a/Release/chaos.dll b/Release/chaos.dll deleted file mode 100644 index a81122f..0000000 Binary files a/Release/chaos.dll and /dev/null differ diff --git a/Release/chaos.pd_darwin b/Release/chaos.pd_darwin deleted file mode 100644 index 2feec5f..0000000 Binary files a/Release/chaos.pd_darwin and /dev/null differ diff --git a/attract1-help.pd b/attract1-help.pd new file mode 100644 index 0000000..cb737b9 --- /dev/null +++ b/attract1-help.pd @@ -0,0 +1,35 @@ +#N canvas 426 137 573 476 10; +#X obj 44 115 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X floatatom 95 116 5 0 0 0 - - -; +#X floatatom 132 393 10 0 0 0 Y - -; +#X floatatom 44 393 10 0 0 0 X - -; +#X text 18 49 (This attractor is not continuous); +#X obj 44 132 metro 50; +#X obj 19 131 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 242 104 readme-fractals; +#X msg 87 245 search; +#X text 138 246 Find a random attractor set; +#X msg 98 266 show; +#X obj 44 316 attract1 0 0 -0.0239362 -0.67834 2.50703 -0.0138538 -1.44072 +2.47917; +#X msg 78 195 param -0.0239362 -0.67834 2.50703 -0.0138538 -1.44072 +2.47917; +#X text 20 18 Attract1 Attractor; +#X text 18 33 Chaos PD Externals - Copyright Michael McGonagle \, 2003 +; +#X obj 278 367 search-tools; +#X connect 0 0 5 0; +#X connect 1 0 5 1; +#X connect 5 0 11 0; +#X connect 6 0 11 0; +#X connect 8 0 11 0; +#X connect 10 0 11 0; +#X connect 11 0 3 0; +#X connect 11 1 2 0; +#X connect 11 2 15 0; +#X connect 11 3 15 1; +#X connect 11 4 15 2; +#X connect 12 0 11 0; +#X connect 15 0 11 0; diff --git a/attract1.c b/attract1.c index a980170..f7082ae 100644 --- a/attract1.c +++ b/attract1.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_a0_lo -3 #define M_a0_hi 3 diff --git a/base-help.pd b/base-help.pd new file mode 100644 index 0000000..bc0fd83 --- /dev/null +++ b/base-help.pd @@ -0,0 +1,28 @@ +#N canvas 680 295 589 492 10; +#X obj 43 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X floatatom 94 135 5 0 0 0 - - -; +#X floatatom 43 332 10 0 0 0 X - -; +#X text 19 50 (This attractor is not continuous); +#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 +; +#X obj 43 151 metro 50; +#X obj 20 154 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 436 18 readme-fractals; +#X text 21 19 Base Attractor; +#X obj 53 262 fractal-tools; +#X obj 43 285 base3 0.1 1.18939 2.24148; +#X msg 61 240 lyapunov 0 100 1000; +#X obj 126 320 search-tools; +#X connect 0 0 5 0; +#X connect 1 0 5 1; +#X connect 5 0 10 0; +#X connect 6 0 10 0; +#X connect 9 0 10 0; +#X connect 10 0 2 0; +#X connect 10 1 12 0; +#X connect 10 2 12 1; +#X connect 10 3 12 2; +#X connect 11 0 9 0; +#X connect 12 0 10 0; diff --git a/base.c b/base.c index 87eef4a..e65ed5d 100644 --- a/base.c +++ b/base.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_a_lo 0 #define M_a_hi 3 diff --git a/base3.c b/base3.c index 697e21b..fab92b8 100644 --- a/base3.c +++ b/base3.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_a_lo 0 #define M_a_hi 3 diff --git a/chaos-meta.pd b/chaos-meta.pd new file mode 100644 index 0000000..6704ede --- /dev/null +++ b/chaos-meta.pd @@ -0,0 +1,6 @@ +#N canvas 15 49 200 200 10; +#N canvas 25 49 420 300 META 1; +#X text 13 41 NAME chaos; +#X text 10 25 AUTHOR Ben Bogart , Michael McGonagle ; +#X text 10 10 VERSION 0.1; +#X restore 10 10 pd META; diff --git a/chaos.h b/chaos.h new file mode 100644 index 0000000..0ed14d3 --- /dev/null +++ b/chaos.h @@ -0,0 +1,25 @@ +/* + a test file for chaos.h + */ + +#ifndef PD_VERSION +#include "m_pd.h" +#endif + +#define MAX_VARS 20 + +/* + * fractal - pointer to the object under test + * calc - the iteration function + * var_count - the number of variables for this fractal class + * vars - pointer to the fractal variables array + */ +double lyapunov(void *fractal, t_gotfn calc, int var_count, double *vars); + +/* + * CAUTION: ON FRACTALS WITH LOTS OF VARIABLES, THIS WILL TAKE A WHILE. + * This is an experimental function to test the ability of the function to + * calculate an accurate exponent by aberating each variable in the fractal. + * returns 'results' on completion. + */ +double *lyapunov_full(void *fractal, t_gotfn calc, int var_count, double *vars, double *results); diff --git a/dejong.c b/dejong.c index 746a6c5..33a5394 100644 --- a/dejong.c +++ b/dejong.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_a_lo -1000 #define M_a_hi 1000 diff --git a/examples/fractal-tools.pd b/examples/fractal-tools.pd new file mode 100644 index 0000000..2170d6a --- /dev/null +++ b/examples/fractal-tools.pd @@ -0,0 +1,27 @@ +#N canvas 0 22 454 304 10; +#X obj 27 252 outlet; +#X msg 149 80 reset; +#X msg 158 101 show; +#X msg 167 122 param; +#X msg 175 143 lyapunov -100 100 1000; +#X msg 183 164 elyapunov; +#X msg 192 186 constrain; +#X msg 198 208 search; +#X obj 27 23 inlet; +#N canvas 0 22 454 304 iterator-tools 0; +#X obj 17 264 outlet; +#X text 17 19 This abstraction is intended to be used to iterate over +the parameter space. Repeatedly performs the following:; +#X text 46 65 1 'param' to set a centerpoint around which to search +; +#X text 46 80 2 'constrain ' to limit the search area; +#X text 46 95 3 'search' to find a fractal within the area; +#X restore 48 53 pd iterator-tools; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; +#X connect 6 0 0 0; +#X connect 7 0 0 0; +#X connect 8 0 0 0; diff --git a/examples/loop.pd b/examples/loop.pd new file mode 100644 index 0000000..19896ab --- /dev/null +++ b/examples/loop.pd @@ -0,0 +1,43 @@ +#N canvas 640 438 490 340 10; +#X obj 52 26 inlet; +#X obj 93 26 inlet; +#X obj 134 26 inlet; +#X obj 52 262 outlet; +#X obj 52 44 route bang float; +#X obj 74 118 f; +#X obj 74 136 -; +#X obj 74 154 /; +#X obj 74 172 i; +#X obj 74 190 + 1; +#X obj 52 208 f; +#X obj 52 226 until; +#X obj 52 244 f; +#X obj 79 244 +; +#X obj 96 99 f; +#X obj 52 62 t b b b; +#X obj 130 262 outlet; +#X obj 74 81 t b f; +#X connect 0 0 4 0; +#X connect 1 0 5 1; +#X connect 2 0 13 1; +#X connect 2 0 7 1; +#X connect 4 0 15 0; +#X connect 4 1 17 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 1; +#X connect 9 0 16 0; +#X connect 10 0 11 0; +#X connect 11 0 12 0; +#X connect 12 0 13 0; +#X connect 12 0 3 0; +#X connect 13 0 12 1; +#X connect 14 0 12 1; +#X connect 15 0 10 0; +#X connect 15 1 5 0; +#X connect 15 2 14 0; +#X connect 17 0 5 0; +#X connect 17 1 14 1; +#X connect 17 1 6 1; diff --git a/examples/martin-test-help.pd b/examples/martin-test-help.pd new file mode 100644 index 0000000..b8f294a --- /dev/null +++ b/examples/martin-test-help.pd @@ -0,0 +1,92 @@ +#N canvas 437 54 668 669 10; +#X obj 35 179 tgl 15 0 empty empty empty 0 -6 32 8 -262144 -1 -1 0 +1; +#X floatatom 86 180 5 0 0 0 - - -; +#X text 81 219 Reset To Initial Conditions; +#X text 94 261 Modify Parameters; +#X msg 80 236 reset 0.1 0.1; +#X floatatom 59 444 10 0 0 0 Y - -; +#X floatatom 32 464 10 0 0 0 X - -; +#X text 19 50 (This attractor is not continuous); +#X text 21 19 Latoocarfian Attractor (from Cliff Pickover); +#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 +; +#X obj 35 196 metro 50; +#X obj 14 197 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1 +-1; +#X obj 25 83 readme-fractals; +#X msg 98 307 search; +#X obj 34 392 martin; +#X msg 89 282 param 1; +#X msg 113 330 show; +#X msg 380 144 1000; +#X obj 336 202 until; +#X obj 279 384 route show search invalid; +#X obj 335 441 print search; +#X obj 279 460 print show; +#X obj 392 422 print invalid; +#X obj 449 403 print somethingelse; +#X msg 346 115 100; +#X msg 311 141 10; +#X msg 309 169 1; +#X obj 474 625 qlist; +#X msg 491 567 print; +#X msg 484 547 clear; +#X msg 474 527 rewind; +#N canvas 0 22 458 308 search 1; +#X floatatom 187 89 5 0 0 0 - - -; +#X obj 142 50 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1 +-1; +#X obj 147 73 loop; +#X floatatom 186 15 5 0 0 0 - - -; +#X floatatom 192 31 5 0 0 0 - - -; +#X floatatom 198 47 5 0 0 0 - - -; +#X obj 31 259 outlet; +#X msg 48 167 param \$1; +#X msg 65 192 constrain 0.01; +#X obj 77 121 t b b f; +#X msg 82 218 search; +#X connect 1 0 2 0; +#X connect 2 0 9 0; +#X connect 2 1 0 0; +#X connect 3 0 2 0; +#X connect 4 0 2 1; +#X connect 5 0 2 2; +#X connect 7 0 6 0; +#X connect 8 0 6 0; +#X connect 9 0 10 0; +#X connect 9 1 8 0; +#X connect 9 2 7 0; +#X connect 10 0 6 0; +#X restore 45 119 pd search; +#X obj 52 146 print sit; +#X msg 136 357 lyapunov 0 10 100; +#X msg 465 504 add martin \$1 \$3 \$6; +#X connect 0 0 10 0; +#X connect 1 0 10 1; +#X connect 4 0 14 0; +#X connect 10 0 14 0; +#X connect 11 0 14 0; +#X connect 13 0 14 0; +#X connect 14 0 6 0; +#X connect 14 1 5 0; +#X connect 14 2 19 0; +#X connect 15 0 14 0; +#X connect 16 0 14 0; +#X connect 17 0 18 0; +#X connect 18 0 13 0; +#X connect 19 0 21 0; +#X connect 19 1 20 0; +#X connect 19 1 34 0; +#X connect 19 2 22 0; +#X connect 19 3 23 0; +#X connect 24 0 18 0; +#X connect 25 0 18 0; +#X connect 26 0 18 0; +#X connect 28 0 27 0; +#X connect 29 0 27 0; +#X connect 30 0 27 0; +#X connect 31 0 32 0; +#X connect 31 0 14 0; +#X connect 33 0 14 0; +#X connect 34 0 27 0; diff --git a/examples/popcorn-test-help.pd b/examples/popcorn-test-help.pd new file mode 100644 index 0000000..cbfdc4b --- /dev/null +++ b/examples/popcorn-test-help.pd @@ -0,0 +1,62 @@ +#N canvas 575 260 589 492 10; +#X obj 43 134 tgl 15 0 empty empty empty 0 -6 160 8 -262144 -1 -1 0 +1; +#X floatatom 94 135 5 0 0 0 - - -; +#X text 79 201 Reset To Initial Conditions; +#X text 99 246 Modify Parameters; +#X msg 76 184 reset 0.1 0.1; +#X floatatom 131 384 10 0 0 0 Y - -; +#X floatatom 43 384 10 0 0 0 X - -; +#X text 19 50 (This attractor is not continuous); +#X text 21 19 Latoocarfian Attractor (from Cliff Pickover); +#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 +; +#X obj 43 151 metro 50; +#X obj 13 150 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1 +-1; +#X obj 25 83 readme-fractals; +#X msg 101 266 search; +#X obj 212 381 print; +#X msg 113 294 show; +#X msg 95 226 param 2.35155; +#X obj 43 347 popcorn 0.1 0 2.35155; +#N canvas 83 103 466 316 search 1; +#X floatatom 187 89 5 0 0 0 - - -; +#X obj 142 50 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1 +-1; +#X obj 147 73 loop; +#X floatatom 186 15 5 0 0 0 - - -; +#X floatatom 192 31 5 0 0 0 - - -; +#X floatatom 198 47 5 0 0 0 - - -; +#X obj 31 259 outlet; +#X msg 48 167 param \$1; +#X obj 77 121 t b b f; +#X msg 82 218 search; +#X msg 65 192 constrain 0.001; +#X connect 1 0 2 0; +#X connect 2 0 8 0; +#X connect 2 1 0 0; +#X connect 3 0 2 0; +#X connect 4 0 2 1; +#X connect 5 0 2 2; +#X connect 7 0 6 0; +#X connect 8 0 9 0; +#X connect 8 1 10 0; +#X connect 8 2 7 0; +#X connect 9 0 6 0; +#X connect 10 0 6 0; +#X restore 229 286 pd search; +#X obj 236 313 print sit; +#X connect 0 0 10 0; +#X connect 1 0 10 1; +#X connect 4 0 17 0; +#X connect 10 0 17 0; +#X connect 11 0 17 0; +#X connect 13 0 17 0; +#X connect 15 0 17 0; +#X connect 16 0 17 0; +#X connect 17 0 6 0; +#X connect 17 1 5 0; +#X connect 17 2 14 0; +#X connect 18 0 19 0; +#X connect 18 0 17 0; diff --git a/examples/quaruptwo-test-help.pd b/examples/quaruptwo-test-help.pd new file mode 100644 index 0000000..4fcc159 --- /dev/null +++ b/examples/quaruptwo-test-help.pd @@ -0,0 +1,69 @@ +#N canvas 559 82 589 492 10; +#X obj 43 134 tgl 15 0 empty empty empty 0 -6 160 8 -262144 -1 -1 0 +1; +#X floatatom 94 135 5 0 0 0 - - -; +#X text 91 208 Reset To Initial Conditions; +#X text 114 281 Modify Parameters; +#X floatatom 197 399 10 0 0 0 Y - -; +#X floatatom 43 399 10 0 0 0 X - -; +#X text 19 50 (This attractor is not continuous); +#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 +; +#X obj 43 151 metro 50; +#X obj 18 150 bng 15 250 50 0 empty empty empty 0 -6 160 8 -262144 +-1 -1; +#X obj 25 83 readme-fractals; +#X msg 117 303 search; +#X obj 327 394 print; +#X text 21 19 QuadrupTwo Attractor; +#X msg 111 243 param 0 1 2; +#X msg 177 335 show; +#X msg 88 191 reset; +#N canvas 0 22 470 320 search 0; +#X floatatom 187 89 5 0 0 0 - - -; +#X obj 142 50 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1 +-1; +#X obj 147 73 loop; +#X floatatom 186 15 5 0 0 0 - - -; +#X floatatom 192 31 5 0 0 0 - - -; +#X floatatom 198 47 5 0 0 0 - - -; +#X obj 31 259 outlet; +#X obj 77 121 t b b f; +#X msg 82 218 search; +#X msg 48 167 param 34 1 \$1; +#X msg 65 192 constrain 0.05; +#X msg 190 149 constrain; +#X msg 238 268 elyapunov; +#X msg 198 198 constrain 0 100 0 2 0 100; +#X msg 218 228 lyapunov 0 10 1000; +#X connect 1 0 2 0; +#X connect 2 0 7 0; +#X connect 2 1 0 0; +#X connect 3 0 2 0; +#X connect 4 0 2 1; +#X connect 5 0 2 2; +#X connect 7 0 8 0; +#X connect 7 2 9 0; +#X connect 8 0 6 0; +#X connect 9 0 6 0; +#X connect 10 0 6 0; +#X connect 11 0 6 0; +#X connect 12 0 6 0; +#X connect 13 0 6 0; +#X connect 14 0 6 0; +#X restore 165 96 pd search; +#X obj 172 123 print sit; +#X obj 43 363 quadruptwo 0.1 0.1 34 1 5; +#X connect 0 0 8 0; +#X connect 1 0 8 1; +#X connect 8 0 19 0; +#X connect 9 0 19 0; +#X connect 11 0 19 0; +#X connect 14 0 19 0; +#X connect 15 0 19 0; +#X connect 16 0 19 0; +#X connect 17 0 18 0; +#X connect 17 0 19 0; +#X connect 19 0 5 0; +#X connect 19 1 4 0; +#X connect 19 2 12 0; diff --git a/examples/readme-frac-format.pd b/examples/readme-frac-format.pd new file mode 100644 index 0000000..950f56c --- /dev/null +++ b/examples/readme-frac-format.pd @@ -0,0 +1,22 @@ +#N canvas 171 208 685 432 10; +#X text 31 36 The format of this file is pretty simple (or tries to +be).; +#X text 55 69 Line 1: name - this is used as the 'c' identifier; +#X text 55 81 Line 2: - integer for each +; +#X text 55 93 Line 3-x: - var name and start state; +#X text 55 105 Line y-z: - param data; +#X text 55 131 Line c: '.' - file must end with a single period '.' +; +#X text 33 180 This file is used by 'gen_fractal_framework' to produce +the 'C' source for the external.; +#X text 62 225 ** - The pseudo-code must not have any spaces. Each +line in the pseudo-code is considered to be a single "assignment" statement. +There is no need to worry about creating storage for any intermediate +(calculated) variables \, as that is done by the translation program. +The pseudo-code represents variables and parameters with a '$' before +the variable name. Locals are allowed \, but are preceded with a '#'. +(Locals are used as 'intermediate' \, computed values that are not +retained from iteration to iteration.); +#X text 55 118 Line a-b: - line(s) of frac 'pseudo-code' +**; diff --git a/examples/readme-fractals.pd b/examples/readme-fractals.pd new file mode 100644 index 0000000..2281c6a --- /dev/null +++ b/examples/readme-fractals.pd @@ -0,0 +1,54 @@ +#N canvas 495 74 487 362 10; +#X obj 56 202 readme-frac-format; +#X obj 56 221 readme-gen-fractal; +#X text 37 183 if you want to add new fractals:; +#X obj 56 144 readme-operation; +#X obj 56 164 readme-searching; +#X text 22 107 Additional Reading \,; +#X text 41 126 if you want to us existing fractals:; +#X obj 56 240 readme-parameter-ranges; +#X text 270 269 Developed using PD 0.36; +#X text 93 295 Copyright 2003 \, Ben Bogart and Michael McGonagle; +#X text 276 282 Released under GNU GPL; +#N canvas 302 96 575 579 available_fractals 0; +#X obj 157 264 henon; +#X obj 157 302 ikeda; +#X obj 157 321 latoocarfian; +#X obj 157 340 latoomutalpha; +#X obj 157 359 latoomutbeta; +#X obj 157 378 latoomutgamma; +#X obj 69 208 logistic; +#X obj 277 208 lorenz; +#X obj 69 227 mlogistic; +#X obj 277 246 rossler; +#X obj 157 473 standardmap; +#X obj 69 246 tent; +#X obj 277 265 three_d; +#X text 57 187 1 variable; +#X text 157 187 2 variables; +#X text 273 187 3 variables; +#X text 24 136 The remaining outputs represent the variables \, corresponding +from left to right as the variables from the '*.frac' data file.; +#X text 24 16 Below \, there is an object for each of the fractals +currently available in the ChaosII collection.; +#X text 23 55 All fractals share the same common structure \, in that +the right-most outlet is used as the "results" outlet. This is used +during the "Searching" operations to return the results of the search +to the user. see 'readme-searching' file for more info on the results +of a search.; +#X obj 157 207 attract1; +#X obj 157 226 dejong; +#X obj 157 245 gingerbreadman; +#X obj 157 283 hopalong; +#X obj 157 416 martin; +#X obj 277 227 pickover; +#X obj 157 435 popcorn; +#X obj 157 454 quadruptwo; +#X obj 157 492 strange1; +#X obj 157 511 tinkerbell; +#X obj 157 530 unity; +#X obj 157 397 lotkavolterra; +#X restore 43 78 pd available_fractals; +#X text 27 28 The Chaos Library provides a means to generate multiple +chaotic datastreams \, as well as the ability to search for new attractor +sets that produce other chaotic datastreams.; diff --git a/examples/readme-gen-fractal.pd b/examples/readme-gen-fractal.pd new file mode 100644 index 0000000..2af4657 --- /dev/null +++ b/examples/readme-gen-fractal.pd @@ -0,0 +1,6 @@ +#N canvas 0 22 478 328 10; +#X text 25 23 This will explain the usage of 'gen_fractal_framework' +\, once the program has become more "stable" and generates what would +be unique to each fractal. Currently \, there is still some redundancy +in the code.; +#X text 282 136 more later...; diff --git a/examples/readme-lyapunov.pd b/examples/readme-lyapunov.pd new file mode 100644 index 0000000..056e6bd --- /dev/null +++ b/examples/readme-lyapunov.pd @@ -0,0 +1,16 @@ +#N canvas 0 22 565 389 10; +#X text 74 61 Lyapunov Exponent; +#X text 25 82 This value is an estimate of the attractors potential +for chaos. It will not necessarily be the same for any given run using +any arbitrary fractal. The description below attempts to put "attractors" +into three catagories.; +#X text 48 262 Don't forget \, just because an "attractor" is not chaotic +\, it does not mean that it will not generate an interesting stream +of number \, if only until they converge.; +#X text 40 151 < 0; +#X text 78 151 These are not chaotic \, may produce a "short-term" +stream of intrest; +#X text 39 179 == 0; +#X text 80 179 Attractors converge to one or more points; +#X text 40 197 > 0; +#X text 80 198 Chaos begins. Higher values indicate "more" chaos.; diff --git a/examples/readme-operation.pd b/examples/readme-operation.pd new file mode 100644 index 0000000..be93969 --- /dev/null +++ b/examples/readme-operation.pd @@ -0,0 +1,34 @@ +#N canvas 159 133 675 651 10; +#X msg 56 219 reset ; +#X msg 56 240 param ; +#X text 36 280 As to the exact variable and parameter ranges to use +\, you will have to consult each fractals help file. You can also use +the "Searching" functions to randomly find a new attractor set \, and +then use those values in either a set of messages to the fractal \, +or in its creation arguments.; +#X msg 56 198 reset; +#X text 98 199 sets the variables back to their initial state **; +#X text 181 221 sets the variables to an explicit state ***; +#X text 195 242 sets parameters to explicit state ****; +#X text 34 26 Create a fractal with or without a set of variables and +parameters \, passed as creation arguments. Without the creation arguments +\, the class defaults will be used for the fractal. With the arguments +\, a new fractal is created using the arguments as the defaults.; +#X text 35 104 To use a fractal \, create the instance \, and optionally +pass it an initial state of variables and a set of parameters. Then +repeatedly 'bang' on the input to iterate thru the fractals variable +states. Using a 'reset' message will return the variables to their +initial state \, or to the explicit values passed.; +#X text 38 369 ** - The initial state can be explicitly set by passing +the arguments at creation time for the fractal \, or (without creation +arguments) the class default value will be used.; +#X text 37 414 *** - When setting the variables to an arbitrary state +\, the stream may not be in a "stable" state. You may need to iterate +the fractal several hundred (or thousand) times to obtain a "stable" +state. If you pass a set of variables that were taken from the 'search' +(or 'show') results \, the values most likely will be in a "stable" +condition.; +#X text 38 500 **** - Do remember that not all combinations of parameters +result in an attractor set.; +#X text 234 577 chaos \, version 2 by Ben Bogart and Michael McGonagle. +Copyright 2003; diff --git a/examples/readme-parameter-ranges.pd b/examples/readme-parameter-ranges.pd new file mode 100644 index 0000000..27fe5f0 --- /dev/null +++ b/examples/readme-parameter-ranges.pd @@ -0,0 +1,23 @@ +#N canvas 0 22 499 399 10; +#X text 33 275 The "classification" of an attractor set uses the full +range of the fractals acceptable parameter ranges. As this method of +"classification" is relative \, it will not describe each fractal uniquely +\, but rather can be used to compare attractor sets that have similar +(closely related) parameter values. NOTE: there needs to be a way to +increase the granularity of the classification system...; +#X text 35 21 Parameter Ranges - Once you have an operational fractal +external \, it is important to make sure that the assigned ranges for +each of the parameters are "optimized" to limit the random number generator +to those ranges. This is important when a variable can only range between +(-1 .. 1) and you have declared that it can range from (-100 .. 100). +Because of the much wider search space \, there is less likelyhood +of finding anything useful \, or at least make the search times longer +due to higher failure rates.; +#X text 35 147 If you are unsure of what the ranges are \, you can +either figure them out mathematically \, or use the "brute-force" method +and iterate over ranges of the defined parameters. The points that +return a fractal (even ones that converge) will give an indication +as to the acceptable ranges for each param. Once you have determined +those ranges \, adjust them in your '*.frac' file and re-make the external +for your fractal. (Or you can just edit the Macros in the C code \, +if you are comfortable with that.); diff --git a/examples/readme-searching.pd b/examples/readme-searching.pd new file mode 100644 index 0000000..0135779 --- /dev/null +++ b/examples/readme-searching.pd @@ -0,0 +1,101 @@ +#N canvas 39 41 1031 669 10; +#X msg 471 344 show; +#X msg 470 295 seed; +#X msg 470 314 seed number; +#X msg 469 234 elyapunov; +#X msg 467 118 constrain; +#X text 601 76 random search for an attractor; +#X text 508 345 displays info on attractor to console; +#X text 543 119 restores full param search area; +#X text 632 138 based on current params \, limits to percentage of +range; +#X msg 465 76 search ; +#X msg 467 137 constrain ; +#X msg 467 156 constrain ; +#X msg 468 200 lyapunov ; +#X msg 465 57 search; +#X text 516 57 random search for an attractor \, variables use defaults +; +#X text 17 403 The search method implemented performs the following: +; +#X text 41 418 1 Set the params randomly based on allowed ranges; +#X text 41 432 2 Calculate the Lyapunov Exponent; +#X text 41 447 3 If the Lyapunov Exponent is within allowed range \, +return the attractor set; +#X text 19 39 Searching for an attractor set can be as simple as sending +a 'search' message to a fractal. This will search the fractals allowable +parameter limits for an attractor set.; +#X text 39 183 arg[1] = Lyapunov Exponent; +#X msg 469 265 classify ; +#X text 591 266 Used to set the "granularity" of the classification +; +#X text 17 323 The Lyapunov Exponent for the attractor set will indicates +one of three states \, (1) Convergence [a negative value] \, (2) Stability +[0 \, of values close to 0] \, and (3) Chaos [a positive value]. Each +class will have different ranges of Lyapunov Exponent.; +#X text 39 196 arg[2] = Classification String ****; +#X text 16 513 **** - The classification method was adopted from Julian +Sprott's method of classification. While it is an arbitrary system +\, and does not "uniquely" identify an attractor set \, it is used +to show a relationship with other attractor sets with similar values. +; +#X text 558 313 seeds search random number generator with number * +; +#X text 507 296 seeds search random number generator with time *; +#X text 543 235 calculates an extended Lyapunov Exponent **; +#X text 648 157 params are limited to explicit ranges ***; +#X text 473 419 * - all fractals of all classes currently share the +same random number generator.; +#X text 473 452 ** - this performs a Lyapunov Exponent calculation +for each variable in the attractor. Ideally \, all results should be +approximately the same. This is an experimental function.; +#X text 473 502 *** - expects there to be a low and high range limit +for each param in the fractal equation.; +#X text 483 217 sets search limits and failure count for Lyapunov Exponent +; +#X text 37 15 Searching - the art of chaos.; +#N canvas 0 22 464 316 simple_example 0; +#X obj 166 106 latoocarfian; +#X msg 173 38 search; +#X text 32 238 This example creates a 'latoocarfian' fractal with the +class defaults. When a search is performed \, the initial state for +the variables are set to the class defaults.; +#X obj 131 14 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1 +-1; +#X floatatom 166 211 10 0 0 0 X - -; +#X floatatom 185 194 10 0 0 1 Y - -; +#X msg 166 16 reset; +#X msg 183 61 show; +#X obj 205 173 print results; +#X obj 225 152 print vars; +#X obj 245 132 print params; +#X connect 0 0 4 0; +#X connect 0 1 5 0; +#X connect 0 2 8 0; +#X connect 0 3 9 0; +#X connect 0 4 10 0; +#X connect 1 0 0 0; +#X connect 3 0 0 0; +#X connect 6 0 0 0; +#X connect 7 0 0 0; +#X restore 286 18 pd simple_example; +#X text 39 210 arg[3] = failure rate before solution *****; +#X text 16 581 ***** - the failure rate is a percentage of the actual +number of failures until a solution is found over the total number +of times the search algorithm will be executed before giving up. This +limit is set via the 'lyapunov' message. This number will also be influenced +by the 'low' and 'high' ranges set.; +#X text 19 93 The values returned from a 'search' message use the 'search' +outlets. These three outlets encapsulate that three pieces of data +of interest. The first of the 'search' outlets holds a list of the +results. This includes:; +#X text 39 170 arg[0] = 'show' \, 'search' \, or 'invalid'; +#X text 18 269 Most likely \, you won't see any failures ('invalid') +\, unless you mess with the 'constrain' or 'lyapunov' messages. 'show' +is returned when you use the 'show' message.; +#X obj 153 376 readme-lyapunov; +#X text 43 475 4 If the Limit Count has been exceeded \, return 'invalid' +\, else goto 1; +#X text 18 154 Search Outlet 0:; +#X text 18 227 Search Outlet 1: list of current variables; +#X text 18 243 Search Outlet 2: list of parameter set; diff --git a/examples/search-tools.pd b/examples/search-tools.pd new file mode 100644 index 0000000..f00a011 --- /dev/null +++ b/examples/search-tools.pd @@ -0,0 +1,186 @@ +#N canvas 619 310 464 533 10; +#X obj -97 556 outlet; +#X obj -97 2 cnv 15 450 220 empty empty Searching_Commands 2 9 1 10 +-233017 -66577 0; +#X msg 104 83 constrain; +#X msg 104 104 constrain \$1; +#X text -77 104 % Constraint; +#X text -77 82 No Constraint; +#X msg 104 30 search; +#X obj 221 52 nbx 5 17 -1e+37 1e+37 0 0 \$0-search_v2 empty empty 0 +-6 1153 10 -262144 -1 -1 0 256; +#X obj 172 52 nbx 5 17 -1e+37 1e+37 0 0 \$0-search_v1 empty empty 0 +-6 1153 10 -262144 -1 -1 0 256; +#X text -78 48 Search w/ inits; +#X text -78 29 Search w/ default inits; +#X obj 86 143 bng 17 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X text -76 142 Set Lyapunov Limits; +#X obj 287 143 nbx 5 17 -1e+37 1e+37 0 0 \$0-lyapunov_v3 empty failure +0 -6 1153 10 -262144 -1 -1 0 256; +#X obj 238 143 nbx 5 17 -1e+37 1e+37 0 0 \$0-lyapunov_v2 empty high +0 -6 1153 10 -262144 -1 -1 0 256; +#X obj 189 143 nbx 5 17 -1e+37 1e+37 0 0 \$0-lyapunov_v1 empty low +0 -6 1153 10 -262144 -1 -1 0 256; +#N canvas 0 22 509 236 lyapunov 0; +#X obj 42 26 inlet; +#X obj 83 26 r \$0-lyapunov_v1; +#X obj 101 61 pack f f f; +#X obj 203 27 r \$0-lyapunov_v2; +#X obj 320 27 r \$0-lyapunov_v3; +#X msg 101 84 lyapunov \$1 \$2 \$3; +#X obj 101 108 s \$0-outlet; +#X connect 0 0 2 0; +#X connect 1 0 2 0; +#X connect 2 0 5 0; +#X connect 3 0 2 1; +#X connect 4 0 2 2; +#X connect 5 0 6 0; +#X restore 106 143 pd lyapunov; +#X obj 86 52 bng 17 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#N canvas 0 22 374 205 search 0; +#X obj 104 104 pack f f; +#X msg 104 127 search \$1 \$2; +#X obj 83 26 r \$0-search_v1; +#X obj 186 26 r \$0-search_v2; +#X obj 94 63 f; +#X obj 104 151 s \$0-outlet; +#X obj 18 26 inlet; +#X connect 0 0 1 0; +#X connect 1 0 5 0; +#X connect 2 0 4 1; +#X connect 3 0 0 1; +#X connect 4 0 0 0; +#X connect 6 0 4 0; +#X restore 104 52 pd search; +#X text -76 164 Extended Lyapunov; +#X msg 104 165 elyapunov; +#X msg 104 186 show; +#X text -75 198 Get Attractor Info; +#X obj 104 226 s \$0-outlet; +#X obj -97 535 r \$0-outlet; +#X obj -14 535 inlet; +#X obj -14 556 s \$0-inlet; +#X obj -97 226 cnv 15 450 300 empty empty Search_Results 2 9 1 10 -233017 +-66577 0; +#N canvas 48 644 700 296 get_results 0; +#X msg 5 39 set \$1; +#X obj 5 17 symbol; +#X obj 5 61 outlet; +#X obj 150 38 s \$0-lyapunov; +#X obj 190 89 s \$0-failure_rate; +#X obj 319 32 s \$0-v1; +#X obj 343 53 s \$0-v2; +#X obj 367 75 s \$0-v3; +#X obj 473 31 s \$0-p1; +#X obj 497 52 s \$0-p2; +#X obj 521 74 s \$0-p3; +#X obj 170 62 s \$0-classification; +#X obj 44 222 r \$0-classification; +#X msg 44 243 set \$1; +#X obj 44 264 outlet; +#X obj 5 -6 r \$0-inlet; +#X obj 80 117 print debug; +#X obj 131 11 unpack s 0 s 0; +#X obj 319 9 unpack 0 0 0 0 0 0; +#X obj 391 96 s \$0-v4; +#X obj 415 117 s \$0-v5; +#X obj 440 138 s \$0-v6; +#X obj 473 9 unpack 0 0 0 0 0 0; +#X obj 545 96 s \$0-p4; +#X obj 569 117 s \$0-p5; +#X obj 594 137 s \$0-p6; +#X obj 318 -12 r \$0-inlet_var; +#X obj 473 -11 r \$0-inlet_param; +#X connect 0 0 2 0; +#X connect 1 0 0 0; +#X connect 12 0 13 0; +#X connect 13 0 14 0; +#X connect 15 0 1 0; +#X connect 15 0 17 0; +#X connect 17 1 3 0; +#X connect 17 2 11 0; +#X connect 17 3 4 0; +#X connect 18 0 5 0; +#X connect 18 1 6 0; +#X connect 18 2 7 0; +#X connect 18 3 19 0; +#X connect 18 4 20 0; +#X connect 18 5 21 0; +#X connect 22 0 8 0; +#X connect 22 1 9 0; +#X connect 22 2 10 0; +#X connect 22 3 23 0; +#X connect 22 4 24 0; +#X connect 22 5 25 0; +#X connect 26 0 18 0; +#X connect 27 0 22 0; +#X restore -14 267 pd get_results; +#X msg -14 288 search; +#X msg 79 288 NOCBNS; +#X text 184 290 Classification; +#X obj 79 309 nbx 10 17 -1e+37 1e+37 0 0 empty \$0-lyapunov empty 0 +-6 577 10 -262144 -1 -1 -0.482697 256; +#X obj 79 330 nbx 10 17 -1e+37 1e+37 0 0 empty \$0-failure_rate empty +0 -6 577 10 -262144 -1 -1 0.005 256; +#X obj -14 371 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-v1 empty 0 -6 577 +10 -262144 -1 -1 0 256; +#X obj -14 391 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-v2 empty 0 -6 577 +10 -262144 -1 -1 0 256; +#X obj -14 411 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-v3 empty 0 -6 577 +10 -262144 -1 -1 0 256; +#X obj 111 371 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-p1 empty 0 -6 577 +10 -262144 -1 -1 0.17869 256; +#X obj 111 391 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-p2 empty 0 -6 577 +10 -262144 -1 -1 0.437724 256; +#X obj 111 411 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-p3 empty 0 -6 577 +10 -262144 -1 -1 -2.31304 256; +#X text 183 331 Failure Rate; +#X text 184 309 Lyapunov Exponent; +#X text 48 372 Var 1; +#X text 48 392 Var 2; +#X text 48 412 Var 3; +#X text 174 373 Param 1; +#X text 174 393 Param 2; +#X text 174 413 Param 3; +#X obj 188 164 readme-lyapunov; +#X obj 171 29 readme-searching; +#X obj -14 431 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-v4 empty 0 -6 577 +10 -262144 -1 -1 0 256; +#X obj -14 451 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-v5 empty 0 -6 577 +10 -262144 -1 -1 0 256; +#X obj -14 471 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-v6 empty 0 -6 577 +10 -262144 -1 -1 0 256; +#X obj 111 431 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-p4 empty 0 -6 577 +10 -262144 -1 -1 -2.74459 256; +#X obj 111 451 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-p5 empty 0 -6 577 +10 -262144 -1 -1 0.00541449 256; +#X obj 111 471 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-p6 empty 0 -6 577 +10 -262144 -1 -1 1.3485 256; +#X text 48 432 Var 4; +#X text 48 452 Var 5; +#X text 48 472 Var 6; +#X text 174 433 Param 4; +#X text 174 453 Param 5; +#X text 174 473 Param 6; +#X obj 62 535 inlet; +#X obj 166 535 inlet; +#X obj 62 556 s \$0-inlet_var; +#X obj 166 556 s \$0-inlet_param; +#X obj 198 104 nbx 5 17 -1e+37 1e+37 0 0 empty empty % 0 -6 1 10 -262144 +-1 -1 0 256; +#X connect 2 0 23 0; +#X connect 3 0 23 0; +#X connect 6 0 23 0; +#X connect 11 0 16 0; +#X connect 17 0 18 0; +#X connect 20 0 23 0; +#X connect 21 0 23 0; +#X connect 24 0 0 0; +#X connect 25 0 26 0; +#X connect 28 0 29 0; +#X connect 28 1 30 0; +#X connect 62 0 64 0; +#X connect 63 0 65 0; +#X connect 66 0 3 0; diff --git a/gingerbreadman-help.pd b/gingerbreadman-help.pd new file mode 100644 index 0000000..701b33e --- /dev/null +++ b/gingerbreadman-help.pd @@ -0,0 +1,31 @@ +#N canvas 615 23 577 480 10; +#X obj 44 115 tgl 15 0 empty empty empty 0 -6 32 8 -262144 -1 -1 0 +1; +#X floatatom 95 116 5 0 0 0 - - -; +#X floatatom 131 348 10 0 0 0 Y - -; +#X floatatom 44 348 10 0 0 0 X - -; +#X text 17 48 (This attractor is not continuous); +#X obj 44 132 metro 50; +#X obj 19 131 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1 +-1; +#X obj 242 104 readme-fractals; +#X msg 113 272 show; +#X msg 76 156 reset; +#X text 120 156 Reset to initial state from creation arguments; +#X text 19 33 Chaos PD Externals - Copyright Michael McGonagle \, 2003 +; +#X text 20 18 Gingerbreadman Attractor; +#X obj 44 316 gingerbreadman; +#X text 91 193 This fractal equation does not have any parameters \, +and thus does not allow the messages 'param' or any of the searching +functions.; +#X msg 96 235 param; +#X connect 0 0 5 0; +#X connect 1 0 5 1; +#X connect 5 0 13 0; +#X connect 6 0 13 0; +#X connect 8 0 13 0; +#X connect 9 0 13 0; +#X connect 13 0 3 0; +#X connect 13 1 2 0; +#X connect 15 0 13 0; diff --git a/henon-help.pd b/henon-help.pd new file mode 100644 index 0000000..b8abd1d --- /dev/null +++ b/henon-help.pd @@ -0,0 +1,50 @@ +#N canvas 196 88 648 460 10; +#X obj 263 81 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X floatatom 314 82 5 0 0 0 - - -; +#X floatatom 291 372 10 0 0 0 Y - -; +#X floatatom 263 348 10 0 0 0 X - -; +#X text 18 49 (This attractor is not continuous); +#X obj 263 98 metro 50; +#X obj 238 97 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X msg 286 209 param 1.4 0.3; +#X text 19 33 Chaos PD Externals - Copyright Ben Bogart 2002; +#X text 20 17 Henon Attractor; +#X obj 263 294 henon 1 1 1.4 0.3; +#X msg 273 176 reset; +#X text 318 176 Reset to initial state from creation arguments; +#X text 390 209 Modify parameters; +#X obj 310 318 search-tools; +#X obj 26 187 metro 50; +#X obj 26 163 tgl 15 0 empty empty empty 20 8 0 8 -262144 -1 -1 0 1 +; +#X floatatom 77 162 5 0 0 0 - - -; +#X floatatom 71 358 5 0 0 0 - - -; +#X text 2 139 Calculate; +#X text 55 234 Reset To Initial Conditions; +#X text 53 273 Modify Parameters; +#X floatatom 26 358 5 0 0 0 - - -; +#X text 20 337 Output; +#X msg 55 256 param 1.4 0.3; +#X obj 26 300 henon; +#X msg 56 216 reset 1 1; +#X connect 0 0 5 0; +#X connect 1 0 5 1; +#X connect 5 0 10 0; +#X connect 6 0 10 0; +#X connect 7 0 10 0; +#X connect 10 0 3 0; +#X connect 10 1 2 0; +#X connect 10 2 14 0; +#X connect 10 3 14 1; +#X connect 10 4 14 2; +#X connect 11 0 10 0; +#X connect 14 0 10 0; +#X connect 15 0 25 0; +#X connect 16 0 15 0; +#X connect 17 0 15 1; +#X connect 24 0 25 0; +#X connect 25 0 22 0; +#X connect 25 1 18 0; +#X connect 26 0 25 0; diff --git a/henon.c b/henon.c index 211205e..533d850 100644 --- a/henon.c +++ b/henon.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_a_lo -1 #define M_a_hi 2 diff --git a/hopalong-help.pd b/hopalong-help.pd new file mode 100644 index 0000000..4b6433b --- /dev/null +++ b/hopalong-help.pd @@ -0,0 +1,32 @@ +#N canvas 473 208 581 484 10; +#X obj 43 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X floatatom 94 135 5 0 0 0 - - -; +#X text 91 208 Reset To Initial Conditions; +#X text 102 251 Modify Parameters; +#X msg 88 191 reset 0.1 0.1; +#X floatatom 115 419 10 0 0 0 Y - -; +#X floatatom 43 388 10 0 0 0 X - -; +#X text 19 50 (This attractor is not continuous); +#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 +; +#X obj 43 151 metro 50; +#X obj 18 150 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 25 83 readme-fractals; +#X text 21 19 Hopalong Attractor; +#X msg 99 234 param -639.064 886.792 -150.226; +#X obj 43 348 hopalong 0.1 0.1 -639.064 886.792 -150.226; +#X obj 220 378 search-tools; +#X connect 0 0 9 0; +#X connect 1 0 9 1; +#X connect 4 0 14 0; +#X connect 9 0 14 0; +#X connect 10 0 14 0; +#X connect 13 0 14 0; +#X connect 14 0 6 0; +#X connect 14 1 5 0; +#X connect 14 2 15 0; +#X connect 14 3 15 1; +#X connect 14 4 15 2; +#X connect 15 0 14 0; diff --git a/hopalong.c b/hopalong.c index 745e78c..76efe66 100644 --- a/hopalong.c +++ b/hopalong.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_a_lo -1000 #define M_a_hi 1000 diff --git a/ikeda-help.pd b/ikeda-help.pd new file mode 100644 index 0000000..ea7436b --- /dev/null +++ b/ikeda-help.pd @@ -0,0 +1,54 @@ +#N canvas 395 111 669 437 10; +#X obj 260 115 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X floatatom 311 116 5 0 0 0 - - -; +#X floatatom 302 379 10 0 0 0 Y - -; +#X floatatom 260 352 10 0 0 0 X - -; +#X text 18 49 (This attractor is not continuous); +#X obj 260 132 metro 50; +#X obj 235 131 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X msg 308 215 param 0.4 0.9 6 1; +#X msg 308 193 param 0.4 0.8 20 1; +#X text 20 18 Ikeda Attractor; +#X text 19 33 Chaos PD Externals - Copyright Ben Bogart 2002; +#X obj 458 104 readme-fractals; +#X obj 260 316 ikeda 0.1 0.1 0.4 0.9 6 1; +#X msg 292 156 reset; +#X text 336 156 Reset to initial state from creation arguments; +#X text 442 193 Modify parameters; +#X obj 372 349 search-tools; +#X obj 20 181 metro 50; +#X obj 20 157 tgl 15 0 empty empty empty 20 8 0 8 -262144 -1 -1 0 1 +; +#X floatatom 71 156 5 0 0 0 - - -; +#X floatatom 65 372 5 0 0 0 - - -; +#X text 52 221 Reset To Initial Conditions; +#X text 53 294 Modify Parameters; +#X floatatom 20 372 5 0 0 0 - - -; +#X text 14 351 Output; +#X obj 20 315 ikeda; +#X msg 55 275 param 0.4 0.9 6 1; +#X msg 55 253 param 0.4 0.8 20 1; +#X msg 53 203 reset 0.1 0.1; +#X connect 0 0 5 0; +#X connect 1 0 5 1; +#X connect 5 0 12 0; +#X connect 6 0 12 0; +#X connect 7 0 12 0; +#X connect 8 0 12 0; +#X connect 12 0 3 0; +#X connect 12 1 2 0; +#X connect 12 2 16 0; +#X connect 12 3 16 1; +#X connect 12 4 16 2; +#X connect 13 0 12 0; +#X connect 16 0 12 0; +#X connect 17 0 25 0; +#X connect 18 0 17 0; +#X connect 19 0 17 1; +#X connect 25 0 23 0; +#X connect 25 1 20 0; +#X connect 26 0 25 0; +#X connect 27 0 25 0; +#X connect 28 0 25 0; diff --git a/ikeda.c b/ikeda.c index a155b81..a9e473e 100644 --- a/ikeda.c +++ b/ikeda.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_a_lo -350 #define M_a_hi 350 diff --git a/latoocarfian-help.pd b/latoocarfian-help.pd new file mode 100644 index 0000000..ee592be --- /dev/null +++ b/latoocarfian-help.pd @@ -0,0 +1,35 @@ +#N canvas 527 258 589 492 10; +#X obj 43 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X floatatom 94 135 5 0 0 0 - - -; +#X text 91 208 Reset To Initial Conditions; +#X text 114 281 Modify Parameters; +#X msg 88 191 reset 0.1 0.1; +#X msg 111 243 param -0.966918 2.87988 0.756145 0.744728; +#X msg 111 264 param -2.90515 -2.03043 1.44055 0.70307; +#X floatatom 136 407 10 0 0 0 Y - -; +#X floatatom 43 367 10 0 0 0 X - -; +#X text 19 50 (This attractor is not continuous); +#X text 21 19 Latoocarfian Attractor (from Cliff Pickover); +#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 +; +#X obj 43 151 metro 50; +#X obj 18 150 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 25 83 readme-fractals; +#X obj 43 347 latoocarfian 0.1 0.1 -2.90515 -2.03043 1.44055 0.70307 +; +#X obj 283 376 search-tools; +#X connect 0 0 12 0; +#X connect 1 0 12 1; +#X connect 4 0 15 0; +#X connect 5 0 15 0; +#X connect 6 0 15 0; +#X connect 12 0 15 0; +#X connect 13 0 15 0; +#X connect 15 0 8 0; +#X connect 15 1 7 0; +#X connect 15 2 16 0; +#X connect 15 3 16 1; +#X connect 15 4 16 2; +#X connect 16 0 15 0; diff --git a/latoocarfian.c b/latoocarfian.c index 098cbec..b70b22c 100644 --- a/latoocarfian.c +++ b/latoocarfian.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_a_lo -3 #define M_a_hi 3 diff --git a/latoomutalpha-help.pd b/latoomutalpha-help.pd new file mode 100644 index 0000000..dda50f5 --- /dev/null +++ b/latoomutalpha-help.pd @@ -0,0 +1,35 @@ +#N canvas 487 49 585 488 10; +#X obj 43 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X floatatom 94 135 5 0 0 0 - - -; +#X text 91 208 Reset To Initial Conditions; +#X text 114 281 Modify Parameters; +#X msg 88 191 reset 0.1 0.1; +#X msg 111 243 param -0.966918 2.87988 0.756145 0.744728; +#X msg 111 264 param -2.90515 -2.03043 1.44055 0.70307; +#X floatatom 138 404 10 0 0 0 Y - -; +#X floatatom 43 367 10 0 0 0 X - -; +#X text 19 50 (This attractor is not continuous); +#X text 21 19 Latoocarfian Attractor (from Cliff Pickover); +#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 +; +#X obj 43 151 metro 50; +#X obj 18 150 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 25 83 readme-fractals; +#X obj 43 347 latoomutalpha 0.1 0.1 -2.90515 -2.03043 1.44055 0.70307 +; +#X obj 289 374 search-tools; +#X connect 0 0 12 0; +#X connect 1 0 12 1; +#X connect 4 0 15 0; +#X connect 5 0 15 0; +#X connect 6 0 15 0; +#X connect 12 0 15 0; +#X connect 13 0 15 0; +#X connect 15 0 8 0; +#X connect 15 1 7 0; +#X connect 15 2 16 0; +#X connect 15 3 16 1; +#X connect 15 4 16 2; +#X connect 16 0 15 0; diff --git a/latoomutalpha.c b/latoomutalpha.c index b3d4ac1..94a8082 100644 --- a/latoomutalpha.c +++ b/latoomutalpha.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_a_lo -3 #define M_a_hi 3 diff --git a/latoomutbeta-help.pd b/latoomutbeta-help.pd new file mode 100644 index 0000000..775b542 --- /dev/null +++ b/latoomutbeta-help.pd @@ -0,0 +1,35 @@ +#N canvas 527 258 585 488 10; +#X obj 43 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X floatatom 94 135 5 0 0 0 - - -; +#X text 91 208 Reset To Initial Conditions; +#X text 114 281 Modify Parameters; +#X msg 88 191 reset 0.1 0.1; +#X msg 111 243 param -0.966918 2.87988 0.756145 0.744728; +#X msg 111 264 param -2.90515 -2.03043 1.44055 0.70307; +#X floatatom 136 399 10 0 0 0 Y - -; +#X floatatom 43 367 10 0 0 0 X - -; +#X text 19 50 (This attractor is not continuous); +#X text 21 19 Latoocarfian Attractor (from Cliff Pickover); +#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 +; +#X obj 43 151 metro 50; +#X obj 18 150 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 25 83 readme-fractals; +#X obj 43 347 latoomutbeta 0.1 0.1 -2.90515 -2.03043 1.44055 0.70307 +; +#X obj 283 373 search-tools; +#X connect 0 0 12 0; +#X connect 1 0 12 1; +#X connect 4 0 15 0; +#X connect 5 0 15 0; +#X connect 6 0 15 0; +#X connect 12 0 15 0; +#X connect 13 0 15 0; +#X connect 15 0 8 0; +#X connect 15 1 7 0; +#X connect 15 2 16 0; +#X connect 15 3 16 1; +#X connect 15 4 16 2; +#X connect 16 0 15 0; diff --git a/latoomutbeta.c b/latoomutbeta.c index 3c2e77b..bace348 100644 --- a/latoomutbeta.c +++ b/latoomutbeta.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_a_lo -3 #define M_a_hi 3 diff --git a/latoomutgamma-help.pd b/latoomutgamma-help.pd new file mode 100644 index 0000000..256b795 --- /dev/null +++ b/latoomutgamma-help.pd @@ -0,0 +1,35 @@ +#N canvas 527 258 581 484 10; +#X obj 43 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X floatatom 94 135 5 0 0 0 - - -; +#X text 91 208 Reset To Initial Conditions; +#X text 114 281 Modify Parameters; +#X msg 88 191 reset 0.1 0.1; +#X msg 111 243 param -0.966918 2.87988 0.756145 0.744728; +#X msg 111 264 param -2.90515 -2.03043 1.44055 0.70307; +#X floatatom 138 406 10 0 0 0 Y - -; +#X floatatom 43 367 10 0 0 0 X - -; +#X text 19 50 (This attractor is not continuous); +#X text 21 19 Latoocarfian Attractor (from Cliff Pickover); +#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 +; +#X obj 43 151 metro 50; +#X obj 18 150 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 25 83 readme-fractals; +#X obj 43 347 latoomutgamma 0.1 0.1 -2.90515 -2.03043 1.44055 0.70307 +; +#X obj 289 374 search-tools; +#X connect 0 0 12 0; +#X connect 1 0 12 1; +#X connect 4 0 15 0; +#X connect 5 0 15 0; +#X connect 6 0 15 0; +#X connect 12 0 15 0; +#X connect 13 0 15 0; +#X connect 15 0 8 0; +#X connect 15 1 7 0; +#X connect 15 2 16 0; +#X connect 15 3 16 1; +#X connect 15 4 16 2; +#X connect 16 0 15 0; diff --git a/latoomutgamma.c b/latoomutgamma.c index dbe4064..6d5c07c 100644 --- a/latoomutgamma.c +++ b/latoomutgamma.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_a_lo -3 #define M_a_hi 3 diff --git a/libchaos.c b/libchaos.c new file mode 100644 index 0000000..f4f6638 --- /dev/null +++ b/libchaos.c @@ -0,0 +1,90 @@ +#include +#include +#include "chaos.h" + +#define LY_ITERATIONS 50000 + +//#define LY_ABERATION 1e-6 +#define LY_ABERATION 10e-15 + +/** + * this expects the fractal to already be stable (ie iterate it a few hundred/thousand times). + + Steps as described by Julian Sprott + 1. Start with any initial condition in the basin of attraction + 2. Iterate until the orbit is on the attractor + 3. Select (almost any) nearby point (separated by d0) + 4. Advancce both orbits one iteration and calculate the new separation d1 + 5. Evaluate log(d1/d0) in any convienient base + 6. Readjust one orbit so its separation is d0 in the same direction as d1 + 7. Repeat steps 4-6 many times and calculate the average of step 5 + */ +double lyapunov_eval(void *fractal, t_gotfn calc, int var_count, double *vars, double *test) { + int i, j; + double exponent = 0.0, sum = 0.0, d2, df, rs; + double diff[MAX_VARS]; + + for(i = 0; i < LY_ITERATIONS; i++) { + // 4. iterate each set + calc(fractal, vars); + calc(fractal, test); + // 5. Evaluate + d2 = 0.0; + for(j = 0; j < var_count; j++) { + diff[j] = test[j] - vars[j]; + //fprintf(stderr, "vars[%d] = %0.30f\n test[%d] = %0.30f\n diff[%d] = %0.30f\n", + // j, vars[j], j, test[j], j, diff[j]); + d2 += diff[j] * diff[j]; + } + df = 1000000000000.0 * d2; + rs = 1.0 / sqrt(df); + sum += log(df); + exponent = 0.721347 * sum / i; + //fprintf(stderr, "%d\n d2 = %0.30f\n df = %0.30f\n rs = %0.30f\n sum = %0.30f\nexponent = %0.30f\n\n", + // i, d2, df, rs, sum, exponent); + // 6. adjust the orbit under test + for(j = 0; j < var_count; j++) { + test[j] = vars[j] + (rs * (test[j] - vars[j])); + } + } + return exponent; +} + +double lyapunov(void *fractal, t_gotfn calc, int var_count, double *vars) { + int i; + double test[MAX_VARS]; + + // 1. + 2. 'vars' is expected to be ready to start computing + // 3. create a test set of variables + test[0] = vars[0] + LY_ABERATION; + for(i = 1; i < var_count; i++) { test[i] = vars[i]; } + + return lyapunov_eval(fractal, calc, var_count, vars, test); +} + +double *lyapunov_full(void *fractal, t_gotfn calc, int var_count, double *vars, double *results) { + int i, j; + double initial[MAX_VARS]; + double test[MAX_VARS]; + + // save the starting values + for(i = 0; i < var_count; i++) { + initial[i] = vars[i]; + } + for(i = 0; i < var_count; i++) { + // aberate each variable in turn + for(j = 0; j < var_count; j++) { + if (j == i) { + test[j] = vars[j] + LY_ABERATION; + } else { + test[j] = vars[j]; + } + } + results[i] = lyapunov_eval(fractal, calc, var_count, vars, test); + // set the vars back the initial values + for(j = 0; j < var_count; j++) { + vars[j] = initial[j]; + } + } + return results; +} diff --git a/logistic.c b/logistic.c index 4966f98..ef92ec2 100644 --- a/logistic.c +++ b/logistic.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_a_lo 0 #define M_a_hi 4 diff --git a/lorenz-help.pd b/lorenz-help.pd new file mode 100644 index 0000000..eefd792 --- /dev/null +++ b/lorenz-help.pd @@ -0,0 +1,54 @@ +#N canvas 185 66 689 426 10; +#X obj 318 105 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 +1; +#X floatatom 369 106 5 0 0 0 - - -; +#X text 407 162 Reset To Initial Conditions; +#X floatatom 363 372 10 0 0 0 Y - -; +#X floatatom 318 350 10 0 0 0 X - -; +#X obj 318 122 metro 50; +#X obj 293 121 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X msg 373 192 param 0.02 10 28 2.66667; +#X floatatom 408 399 10 0 0 0 Z - -; +#X text 20 18 Lorenz Attractor; +#X text 19 33 Chaos PD Externals - Copyright Ben Bogart 2002; +#X obj 20 62 readme-fractals; +#X obj 318 318 lorenz 0.1 0 0 0.02 10 28 2.66667; +#X text 550 194 Modify parameters; +#X msg 363 162 reset; +#X obj 459 345 search-tools; +#X obj 29 174 metro 50; +#X obj 29 150 tgl 15 0 empty empty empty 20 8 0 8 -262144 -1 -1 0 1 +; +#X floatatom 80 149 5 0 0 0 - - -; +#X obj 29 237 lorenz; +#X floatatom 74 345 5 0 0 0 - - -; +#X msg 115 254 param 0.02 10 28 2.667; +#X text 5 126 Calculate; +#X text 113 221 Reset To Initial Conditions; +#X text 115 272 Modify Parameters; +#X floatatom 29 345 5 0 0 0 - - -; +#X floatatom 120 345 5 0 0 0 - - -; +#X text 58 318 Output; +#X msg 114 203 reset 0.1 0 0; +#X connect 0 0 5 0; +#X connect 1 0 5 1; +#X connect 5 0 12 0; +#X connect 6 0 12 0; +#X connect 7 0 12 0; +#X connect 12 0 4 0; +#X connect 12 1 3 0; +#X connect 12 2 8 0; +#X connect 12 3 15 0; +#X connect 12 4 15 1; +#X connect 12 5 15 2; +#X connect 14 0 12 0; +#X connect 15 0 12 0; +#X connect 16 0 19 0; +#X connect 17 0 16 0; +#X connect 18 0 16 1; +#X connect 19 0 25 0; +#X connect 19 1 20 0; +#X connect 19 2 26 0; +#X connect 21 0 19 0; +#X connect 28 0 19 0; diff --git a/lorenz.c b/lorenz.c index 98665d0..7f2864d 100644 --- a/lorenz.c +++ b/lorenz.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_h_lo -1000 #define M_h_hi 1000 diff --git a/lotka_volterra.c b/lotka_volterra.c index 15db274..aad45c4 100644 --- a/lotka_volterra.c +++ b/lotka_volterra.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_a_lo -1000 #define M_a_hi 1000 diff --git a/lyapunov.c b/lyapunov.c deleted file mode 100644 index 04153ba..0000000 --- a/lyapunov.c +++ /dev/null @@ -1,90 +0,0 @@ -#include -#include -#include "lyapunov.h" - -#define LY_ITERATIONS 50000 - -//#define LY_ABERATION 1e-6 -#define LY_ABERATION 10e-15 - -/** - * this expects the fractal to already be stable (ie iterate it a few hundred/thousand times). - - Steps as described by Julian Sprott - 1. Start with any initial condition in the basin of attraction - 2. Iterate until the orbit is on the attractor - 3. Select (almost any) nearby point (separated by d0) - 4. Advancce both orbits one iteration and calculate the new separation d1 - 5. Evaluate log(d1/d0) in any convienient base - 6. Readjust one orbit so its separation is d0 in the same direction as d1 - 7. Repeat steps 4-6 many times and calculate the average of step 5 - */ -double lyapunov_eval(void *fractal, t_gotfn calc, int var_count, double *vars, double *test) { - int i, j; - double exponent = 0.0, sum = 0.0, d2, df, rs; - double diff[MAX_VARS]; - - for(i = 0; i < LY_ITERATIONS; i++) { - // 4. iterate each set - calc(fractal, vars); - calc(fractal, test); - // 5. Evaluate - d2 = 0.0; - for(j = 0; j < var_count; j++) { - diff[j] = test[j] - vars[j]; - //fprintf(stderr, "vars[%d] = %0.30f\n test[%d] = %0.30f\n diff[%d] = %0.30f\n", - // j, vars[j], j, test[j], j, diff[j]); - d2 += diff[j] * diff[j]; - } - df = 1000000000000.0 * d2; - rs = 1.0 / sqrt(df); - sum += log(df); - exponent = 0.721347 * sum / i; - //fprintf(stderr, "%d\n d2 = %0.30f\n df = %0.30f\n rs = %0.30f\n sum = %0.30f\nexponent = %0.30f\n\n", - // i, d2, df, rs, sum, exponent); - // 6. adjust the orbit under test - for(j = 0; j < var_count; j++) { - test[j] = vars[j] + (rs * (test[j] - vars[j])); - } - } - return exponent; -} - -double lyapunov(void *fractal, t_gotfn calc, int var_count, double *vars) { - int i; - double test[MAX_VARS]; - - // 1. + 2. 'vars' is expected to be ready to start computing - // 3. create a test set of variables - test[0] = vars[0] + LY_ABERATION; - for(i = 1; i < var_count; i++) { test[i] = vars[i]; } - - return lyapunov_eval(fractal, calc, var_count, vars, test); -} - -double *lyapunov_full(void *fractal, t_gotfn calc, int var_count, double *vars, double *results) { - int i, j; - double initial[MAX_VARS]; - double test[MAX_VARS]; - - // save the starting values - for(i = 0; i < var_count; i++) { - initial[i] = vars[i]; - } - for(i = 0; i < var_count; i++) { - // aberate each variable in turn - for(j = 0; j < var_count; j++) { - if (j == i) { - test[j] = vars[j] + LY_ABERATION; - } else { - test[j] = vars[j]; - } - } - results[i] = lyapunov_eval(fractal, calc, var_count, vars, test); - // set the vars back the initial values - for(j = 0; j < var_count; j++) { - vars[j] = initial[j]; - } - } - return results; -} diff --git a/lyapunov.h b/lyapunov.h deleted file mode 100644 index d6b71f5..0000000 --- a/lyapunov.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - a test file for lyapunov.h - */ - -#ifndef PD_VERSION -#include "m_pd.h" -#endif - -#define MAX_VARS 20 - -/* - * fractal - pointer to the object under test - * calc - the iteration function - * var_count - the number of variables for this fractal class - * vars - pointer to the fractal variables array - */ -double lyapunov(void *fractal, t_gotfn calc, int var_count, double *vars); - -/* - * CAUTION: ON FRACTALS WITH LOTS OF VARIABLES, THIS WILL TAKE A WHILE. - * This is an experimental function to test the ability of the function to - * calculate an accurate exponent by aberating each variable in the fractal. - * returns 'results' on completion. - */ -double *lyapunov_full(void *fractal, t_gotfn calc, int var_count, double *vars, double *results); diff --git a/makefile b/makefile deleted file mode 100644 index c4d1ac6..0000000 --- a/makefile +++ /dev/null @@ -1,97 +0,0 @@ -NAME=chaos -CSYM=chaos - -current: pd_nt pd_intel pd_linux pd_darwin - -# ----------------------- NT ----------------------- - -pd_nt: $(NAME).dll - -.SUFFIXES: .dll - -PDNTCFLAGS = /W3 /WX /MD /O2 /G6 /DNT /DPD /DMAXLIB /nologo -VC="C:\Programme\Microsoft Visual Studio\VC98" - -PDNTINCLUDE = /I. /Ic:\pd\tcl\include /Ic:\pd\src /I$(VC)\include /Iinclude - -PDNTLDIR = $(VC)\Lib -PDNTLIB = $(PDNTLDIR)\msvcrt.lib \ - $(PDNTLDIR)\oldnames.lib \ - $(PDNTLDIR)\kernel32.lib \ - $(PDNTLDIR)\user32.lib \ - $(PDNTLDIR)\uuid.lib \ - $(PDNTLDIR)\ws2_32.lib \ - $(PDNTLDIR)\pthreadVC.lib \ - c:\pd\bin\pd.lib - -PDNTEXTERNALS = lyapunov.obj henon.obj hopalong.obj ikeda.obj latoocarfian.obj latoomutalpha.obj latoomutbeta.obj latoomutgamma.obj logistic.obj lorenz.obj mlogistic.obj rossler.obj standardmap.obj tent.obj three_d.obj - -.c.dll: - cl $(PDNTCFLAGS) $(PDNTINCLUDE) /c *.c - link /dll /export:$(CSYM)_setup $*.obj $(PDNTEXTERNALS) $(PDNTLIB) - -# ----------------------- Mac OS X (Darwin) ----------------------- - -pd_darwin: $(NAME).pd_darwin - -.SUFFIXES: .pd_darwin - -DARWINCFLAGS = -DPD -DMAXLIB -DUNIX -DMACOSX -O2 \ - -Wall -W -Wshadow -Wstrict-prototypes \ - -Wno-unused -Wno-parentheses -Wno-switch - -# where is your m_pd.h ??? -DARWININCLUDE = -I../../src -I../../obj - -DARWINEXTERNALS = lyapunov.o attract1.o base.o base3.o dejong.o gingerbreadman.o henon.o hopalong.o ikeda.o latoocarfian.o latoomutalpha.o \ -latoomutbeta.o latoomutgamma.o logistic.o lorenz.o martin.o mlogistic.o pickover.o popcorn.o quadruptwo.o rossler.o standardmap.o \ -strange1.o tent.o three_d.o threeply.o tinkerbell.o unity.o lotka_volterra.o - -PD_LOCAL_EXTERNALS = $(HOME)/Library/Pd/Externals -PD_LOCAL_HELP = $(HOME)/Library/Pd/Help -PD_BINARY = /usr/local/pd/bin/pd -MTARGET = $(NAME).pd_darwin -MDARWININCLUDE = -I/usr/local/pd/src - -.c.o: - cc $(DARWINCFLAGS) $(DARWININCLUDE) -c *.c - -.o.pd_darwin: - cc -bundle -bundle_loader $(PD_BINARY) -flat_namespace -o $*.pd_darwin $*.o $(DARWINEXTERNALS) - -pd_darwin: $(DARWINEXTERNALS) - rm -f $*.o ../$*.pd_darwin - ln -s $*/$*.pd_darwin .. - -minstall: $(MTARGET) $(DARWINEXTERNALS) - mv -f $(MTARGET) $(PD_LOCAL_EXTERNALS) - cp -f help-*.pd $(PD_LOCAL_HELP) - -# ----------------------- LINUX i386 ----------------------- - -pd_linux: $(NAME).pd_linux - -.SUFFIXES: .pd_linux - -LINUXCFLAGS = -DPD -DUNIX -O2 -funroll-loops -fomit-frame-pointer \ - -Wall -W -Wshadow \ - -Wno-unused -Wno-parentheses -Wno-switch - -# where is your m_pd.h ??? -LINUXINCLUDE = -I/usr/local/include - -LINUXEXTERNALS = lyapunov.o attract1.o base.o base3.o dejong.o gingerbreadman.o henon.o hopalong.o ikeda.o latoocarfian.o latoomutalpha.o \ -latoomutbeta.o latoomutgamma.o logistic.o lorenz.o martin.o mlogistic.o pickover.o popcorn.o quadruptwo.o rossler.o standardmap.o \ -strange1.o tent.o three_d.o threeply.o tinkerbell.o unity.o lotka_volterra.o - -.c.pd_linux: - cc -O2 -Wall -DPD -fPIC $(LINUXCFLAGS) $(LINUXINCLUDE) -c *.c - ld --export-dynamic -shared -o $*.pd_linux $*.o $(LINUXEXTERNALS) -lc - strip --strip-unneeded $*.pd_linux - -# ---------------------------------------------------------- - -PDDIR=/usr/lib/pd - -clean: - rm -f *.o *.pd_* so_locations diff --git a/martin-help.pd b/martin-help.pd new file mode 100644 index 0000000..ef12d0d --- /dev/null +++ b/martin-help.pd @@ -0,0 +1,38 @@ +#N canvas 203 283 593 496 10; +#X obj 43 134 tgl 15 0 empty empty empty 0 -6 32 8 -262144 -1 -1 0 +1; +#X floatatom 94 135 5 0 0 0 - - -; +#X text 89 174 Reset To Initial Conditions; +#X text 102 216 Modify Parameters; +#X msg 88 191 reset 0.1 0.1; +#X floatatom 51 451 10 0 0 0 Y - -; +#X floatatom 42 427 10 0 0 0 X - -; +#X text 19 50 (This attractor is not continuous); +#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 +; +#X obj 43 151 metro 50; +#X obj 18 150 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1 +-1; +#X obj 25 83 readme-fractals; +#X obj 42 347 martin; +#X text 143 429 This fractal exhibits chaotic tendencies when A (param) +is in the vicinity of an odd multiple of PI.; +#X msg 97 237 param 3.14159; +#X text 21 19 Martin Attractor; +#X obj 68 379 search-tools; +#X obj 204 344 print vars; +#X obj 239 317 print param; +#X connect 0 0 9 0; +#X connect 1 0 9 1; +#X connect 4 0 12 0; +#X connect 9 0 12 0; +#X connect 10 0 12 0; +#X connect 12 0 6 0; +#X connect 12 1 5 0; +#X connect 12 2 16 0; +#X connect 12 3 16 1; +#X connect 12 3 17 0; +#X connect 12 4 16 2; +#X connect 12 4 18 0; +#X connect 14 0 12 0; +#X connect 16 0 12 0; diff --git a/martin.c b/martin.c index 91cb0cc..b1368c3 100644 --- a/martin.c +++ b/martin.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_a_lo 0 #define M_a_hi 1000 diff --git a/mlogistic.c b/mlogistic.c index ad1ea30..cfed03d 100644 --- a/mlogistic.c +++ b/mlogistic.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_c_lo 0 #define M_c_hi 4 diff --git a/pickover.c b/pickover.c index b73d7db..1aae04b 100644 --- a/pickover.c +++ b/pickover.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_a_lo -1000 #define M_a_hi 1000 diff --git a/popcorn-help.pd b/popcorn-help.pd new file mode 100644 index 0000000..119edea --- /dev/null +++ b/popcorn-help.pd @@ -0,0 +1,35 @@ +#N canvas 492 119 593 496 10; +#X obj 43 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X floatatom 94 135 5 0 0 0 - - -; +#X text 79 201 Reset To Initial Conditions; +#X text 99 246 Modify Parameters; +#X msg 76 184 reset 0.1 0.1; +#X floatatom 78 398 10 0 0 0 Y - -; +#X floatatom 43 373 10 0 0 0 X - -; +#X text 19 50 (This attractor is not continuous); +#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 +; +#X obj 43 151 metro 50; +#X obj 13 150 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 25 83 readme-fractals; +#X msg 95 226 param 2.35155; +#X obj 43 347 popcorn 0.1 0 2.35155; +#X text 98 441 This fractal seems to allow is sole parameter to range +over a large range. As the value of the parameter rises \, so does +the Lyapunov Exponent \, but it does not appear to be linear.; +#X text 21 19 Popcorn Attractor (from Cliff Pickover); +#X obj 126 373 search-tools; +#X connect 0 0 9 0; +#X connect 1 0 9 1; +#X connect 4 0 13 0; +#X connect 9 0 13 0; +#X connect 10 0 13 0; +#X connect 12 0 13 0; +#X connect 13 0 6 0; +#X connect 13 1 5 0; +#X connect 13 2 16 0; +#X connect 13 3 16 1; +#X connect 13 4 16 2; +#X connect 16 0 13 0; diff --git a/popcorn.c b/popcorn.c index 2feca37..4ba8db2 100644 --- a/popcorn.c +++ b/popcorn.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_h_lo -1000 #define M_h_hi 1000 diff --git a/quadruptwo.c b/quadruptwo.c index 89543eb..e074bcf 100644 --- a/quadruptwo.c +++ b/quadruptwo.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_a_lo -1000 #define M_a_hi 1000 diff --git a/quaruptwo-help.pd b/quaruptwo-help.pd new file mode 100644 index 0000000..292b46e --- /dev/null +++ b/quaruptwo-help.pd @@ -0,0 +1,32 @@ +#N canvas 527 258 585 488 10; +#X obj 43 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X floatatom 94 135 5 0 0 0 - - -; +#X text 91 208 Reset To Initial Conditions; +#X text 114 263 Modify Parameters; +#X floatatom 78 414 10 0 0 0 Y - -; +#X floatatom 43 392 10 0 0 0 X - -; +#X text 19 50 (This attractor is not continuous); +#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 +; +#X obj 43 151 metro 50; +#X obj 18 150 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 25 83 readme-fractals; +#X text 21 19 QuadrupTwo Attractor; +#X msg 111 243 param 0 1 2; +#X msg 88 191 reset; +#X obj 43 363 quadruptwo 0 0 34 1 5; +#X obj 126 390 search-tools; +#X connect 0 0 8 0; +#X connect 1 0 8 1; +#X connect 8 0 14 0; +#X connect 9 0 14 0; +#X connect 12 0 14 0; +#X connect 13 0 14 0; +#X connect 14 0 5 0; +#X connect 14 1 4 0; +#X connect 14 2 15 0; +#X connect 14 3 15 1; +#X connect 14 4 15 2; +#X connect 15 0 14 0; diff --git a/rossler.c b/rossler.c index 835e908..b9b4027 100644 --- a/rossler.c +++ b/rossler.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_h_lo -1000 #define M_h_hi 1000 diff --git a/standardmap-help.pd b/standardmap-help.pd new file mode 100644 index 0000000..02fb992 --- /dev/null +++ b/standardmap-help.pd @@ -0,0 +1,32 @@ +#N canvas 527 258 585 488 10; +#X obj 43 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X floatatom 94 135 5 0 0 0 - - -; +#X text 91 208 Reset To Initial Conditions; +#X text 112 265 Modify Parameters; +#X msg 88 191 reset 0.1 0.1; +#X floatatom 61 452 10 0 0 0 Y - -; +#X floatatom 43 427 10 0 0 0 X - -; +#X text 19 50 (This attractor is not continuous); +#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 +; +#X obj 43 151 metro 50; +#X obj 18 150 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 25 83 readme-fractals; +#X text 21 19 Standard Map; +#X obj 43 369 standardmap; +#X msg 110 242 param 0.89; +#X obj 70 398 search-tools; +#X connect 0 0 9 0; +#X connect 1 0 9 1; +#X connect 4 0 13 0; +#X connect 9 0 13 0; +#X connect 10 0 13 0; +#X connect 13 0 6 0; +#X connect 13 1 5 0; +#X connect 13 2 15 0; +#X connect 13 3 15 1; +#X connect 13 4 15 2; +#X connect 14 0 13 0; +#X connect 15 0 13 0; diff --git a/standardmap.c b/standardmap.c index c55823c..c062dee 100644 --- a/standardmap.c +++ b/standardmap.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_k_lo -1000 #define M_k_hi 1000 diff --git a/strange1.c b/strange1.c index 3823398..4f01233 100644 --- a/strange1.c +++ b/strange1.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_a0_lo -2 #define M_a0_hi 2 diff --git a/tent.c b/tent.c index 615d2b4..9f68745 100644 --- a/tent.c +++ b/tent.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_r_lo -1000 #define M_r_hi 1000 diff --git a/three_d.c b/three_d.c index f88191a..b80a728 100644 --- a/three_d.c +++ b/three_d.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_a_lo -1000 #define M_a_hi 1000 diff --git a/threeply.c b/threeply.c index 316783f..6b236ff 100644 --- a/threeply.c +++ b/threeply.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_a_lo -1000 #define M_a_hi 1000 diff --git a/tinkerbell.c b/tinkerbell.c index bd4b1bb..7ccdd47 100644 --- a/tinkerbell.c +++ b/tinkerbell.c @@ -24,7 +24,7 @@ #include #include #include -#include "lyapunov.h" +#include "chaos.h" #define M_a_lo -1000 #define M_a_hi 1000 diff --git a/tools/attract1-help.pd b/tools/attract1-help.pd deleted file mode 100644 index cb737b9..0000000 --- a/tools/attract1-help.pd +++ /dev/null @@ -1,35 +0,0 @@ -#N canvas 426 137 573 476 10; -#X obj 44 115 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 -; -#X floatatom 95 116 5 0 0 0 - - -; -#X floatatom 132 393 10 0 0 0 Y - -; -#X floatatom 44 393 10 0 0 0 X - -; -#X text 18 49 (This attractor is not continuous); -#X obj 44 132 metro 50; -#X obj 19 131 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 --1; -#X obj 242 104 readme-fractals; -#X msg 87 245 search; -#X text 138 246 Find a random attractor set; -#X msg 98 266 show; -#X obj 44 316 attract1 0 0 -0.0239362 -0.67834 2.50703 -0.0138538 -1.44072 -2.47917; -#X msg 78 195 param -0.0239362 -0.67834 2.50703 -0.0138538 -1.44072 -2.47917; -#X text 20 18 Attract1 Attractor; -#X text 18 33 Chaos PD Externals - Copyright Michael McGonagle \, 2003 -; -#X obj 278 367 search-tools; -#X connect 0 0 5 0; -#X connect 1 0 5 1; -#X connect 5 0 11 0; -#X connect 6 0 11 0; -#X connect 8 0 11 0; -#X connect 10 0 11 0; -#X connect 11 0 3 0; -#X connect 11 1 2 0; -#X connect 11 2 15 0; -#X connect 11 3 15 1; -#X connect 11 4 15 2; -#X connect 12 0 11 0; -#X connect 15 0 11 0; diff --git a/tools/base-help.pd b/tools/base-help.pd deleted file mode 100644 index bc0fd83..0000000 --- a/tools/base-help.pd +++ /dev/null @@ -1,28 +0,0 @@ -#N canvas 680 295 589 492 10; -#X obj 43 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 -; -#X floatatom 94 135 5 0 0 0 - - -; -#X floatatom 43 332 10 0 0 0 X - -; -#X text 19 50 (This attractor is not continuous); -#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 -; -#X obj 43 151 metro 50; -#X obj 20 154 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 --1; -#X obj 436 18 readme-fractals; -#X text 21 19 Base Attractor; -#X obj 53 262 fractal-tools; -#X obj 43 285 base3 0.1 1.18939 2.24148; -#X msg 61 240 lyapunov 0 100 1000; -#X obj 126 320 search-tools; -#X connect 0 0 5 0; -#X connect 1 0 5 1; -#X connect 5 0 10 0; -#X connect 6 0 10 0; -#X connect 9 0 10 0; -#X connect 10 0 2 0; -#X connect 10 1 12 0; -#X connect 10 2 12 1; -#X connect 10 3 12 2; -#X connect 11 0 9 0; -#X connect 12 0 10 0; diff --git a/tools/fractal-tools.pd b/tools/fractal-tools.pd deleted file mode 100644 index 2170d6a..0000000 --- a/tools/fractal-tools.pd +++ /dev/null @@ -1,27 +0,0 @@ -#N canvas 0 22 454 304 10; -#X obj 27 252 outlet; -#X msg 149 80 reset; -#X msg 158 101 show; -#X msg 167 122 param; -#X msg 175 143 lyapunov -100 100 1000; -#X msg 183 164 elyapunov; -#X msg 192 186 constrain; -#X msg 198 208 search; -#X obj 27 23 inlet; -#N canvas 0 22 454 304 iterator-tools 0; -#X obj 17 264 outlet; -#X text 17 19 This abstraction is intended to be used to iterate over -the parameter space. Repeatedly performs the following:; -#X text 46 65 1 'param' to set a centerpoint around which to search -; -#X text 46 80 2 'constrain ' to limit the search area; -#X text 46 95 3 'search' to find a fractal within the area; -#X restore 48 53 pd iterator-tools; -#X connect 1 0 0 0; -#X connect 2 0 0 0; -#X connect 3 0 0 0; -#X connect 4 0 0 0; -#X connect 5 0 0 0; -#X connect 6 0 0 0; -#X connect 7 0 0 0; -#X connect 8 0 0 0; diff --git a/tools/gingerbreadman-help.pd b/tools/gingerbreadman-help.pd deleted file mode 100644 index 701b33e..0000000 --- a/tools/gingerbreadman-help.pd +++ /dev/null @@ -1,31 +0,0 @@ -#N canvas 615 23 577 480 10; -#X obj 44 115 tgl 15 0 empty empty empty 0 -6 32 8 -262144 -1 -1 0 -1; -#X floatatom 95 116 5 0 0 0 - - -; -#X floatatom 131 348 10 0 0 0 Y - -; -#X floatatom 44 348 10 0 0 0 X - -; -#X text 17 48 (This attractor is not continuous); -#X obj 44 132 metro 50; -#X obj 19 131 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1 --1; -#X obj 242 104 readme-fractals; -#X msg 113 272 show; -#X msg 76 156 reset; -#X text 120 156 Reset to initial state from creation arguments; -#X text 19 33 Chaos PD Externals - Copyright Michael McGonagle \, 2003 -; -#X text 20 18 Gingerbreadman Attractor; -#X obj 44 316 gingerbreadman; -#X text 91 193 This fractal equation does not have any parameters \, -and thus does not allow the messages 'param' or any of the searching -functions.; -#X msg 96 235 param; -#X connect 0 0 5 0; -#X connect 1 0 5 1; -#X connect 5 0 13 0; -#X connect 6 0 13 0; -#X connect 8 0 13 0; -#X connect 9 0 13 0; -#X connect 13 0 3 0; -#X connect 13 1 2 0; -#X connect 15 0 13 0; diff --git a/tools/henon-help.pd b/tools/henon-help.pd deleted file mode 100644 index b8abd1d..0000000 --- a/tools/henon-help.pd +++ /dev/null @@ -1,50 +0,0 @@ -#N canvas 196 88 648 460 10; -#X obj 263 81 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 -; -#X floatatom 314 82 5 0 0 0 - - -; -#X floatatom 291 372 10 0 0 0 Y - -; -#X floatatom 263 348 10 0 0 0 X - -; -#X text 18 49 (This attractor is not continuous); -#X obj 263 98 metro 50; -#X obj 238 97 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 --1; -#X msg 286 209 param 1.4 0.3; -#X text 19 33 Chaos PD Externals - Copyright Ben Bogart 2002; -#X text 20 17 Henon Attractor; -#X obj 263 294 henon 1 1 1.4 0.3; -#X msg 273 176 reset; -#X text 318 176 Reset to initial state from creation arguments; -#X text 390 209 Modify parameters; -#X obj 310 318 search-tools; -#X obj 26 187 metro 50; -#X obj 26 163 tgl 15 0 empty empty empty 20 8 0 8 -262144 -1 -1 0 1 -; -#X floatatom 77 162 5 0 0 0 - - -; -#X floatatom 71 358 5 0 0 0 - - -; -#X text 2 139 Calculate; -#X text 55 234 Reset To Initial Conditions; -#X text 53 273 Modify Parameters; -#X floatatom 26 358 5 0 0 0 - - -; -#X text 20 337 Output; -#X msg 55 256 param 1.4 0.3; -#X obj 26 300 henon; -#X msg 56 216 reset 1 1; -#X connect 0 0 5 0; -#X connect 1 0 5 1; -#X connect 5 0 10 0; -#X connect 6 0 10 0; -#X connect 7 0 10 0; -#X connect 10 0 3 0; -#X connect 10 1 2 0; -#X connect 10 2 14 0; -#X connect 10 3 14 1; -#X connect 10 4 14 2; -#X connect 11 0 10 0; -#X connect 14 0 10 0; -#X connect 15 0 25 0; -#X connect 16 0 15 0; -#X connect 17 0 15 1; -#X connect 24 0 25 0; -#X connect 25 0 22 0; -#X connect 25 1 18 0; -#X connect 26 0 25 0; diff --git a/tools/hopalong-help.pd b/tools/hopalong-help.pd deleted file mode 100644 index 4b6433b..0000000 --- a/tools/hopalong-help.pd +++ /dev/null @@ -1,32 +0,0 @@ -#N canvas 473 208 581 484 10; -#X obj 43 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 -; -#X floatatom 94 135 5 0 0 0 - - -; -#X text 91 208 Reset To Initial Conditions; -#X text 102 251 Modify Parameters; -#X msg 88 191 reset 0.1 0.1; -#X floatatom 115 419 10 0 0 0 Y - -; -#X floatatom 43 388 10 0 0 0 X - -; -#X text 19 50 (This attractor is not continuous); -#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 -; -#X obj 43 151 metro 50; -#X obj 18 150 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 --1; -#X obj 25 83 readme-fractals; -#X text 21 19 Hopalong Attractor; -#X msg 99 234 param -639.064 886.792 -150.226; -#X obj 43 348 hopalong 0.1 0.1 -639.064 886.792 -150.226; -#X obj 220 378 search-tools; -#X connect 0 0 9 0; -#X connect 1 0 9 1; -#X connect 4 0 14 0; -#X connect 9 0 14 0; -#X connect 10 0 14 0; -#X connect 13 0 14 0; -#X connect 14 0 6 0; -#X connect 14 1 5 0; -#X connect 14 2 15 0; -#X connect 14 3 15 1; -#X connect 14 4 15 2; -#X connect 15 0 14 0; diff --git a/tools/ikeda-help.pd b/tools/ikeda-help.pd deleted file mode 100644 index ea7436b..0000000 --- a/tools/ikeda-help.pd +++ /dev/null @@ -1,54 +0,0 @@ -#N canvas 395 111 669 437 10; -#X obj 260 115 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 -1; -#X floatatom 311 116 5 0 0 0 - - -; -#X floatatom 302 379 10 0 0 0 Y - -; -#X floatatom 260 352 10 0 0 0 X - -; -#X text 18 49 (This attractor is not continuous); -#X obj 260 132 metro 50; -#X obj 235 131 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 --1; -#X msg 308 215 param 0.4 0.9 6 1; -#X msg 308 193 param 0.4 0.8 20 1; -#X text 20 18 Ikeda Attractor; -#X text 19 33 Chaos PD Externals - Copyright Ben Bogart 2002; -#X obj 458 104 readme-fractals; -#X obj 260 316 ikeda 0.1 0.1 0.4 0.9 6 1; -#X msg 292 156 reset; -#X text 336 156 Reset to initial state from creation arguments; -#X text 442 193 Modify parameters; -#X obj 372 349 search-tools; -#X obj 20 181 metro 50; -#X obj 20 157 tgl 15 0 empty empty empty 20 8 0 8 -262144 -1 -1 0 1 -; -#X floatatom 71 156 5 0 0 0 - - -; -#X floatatom 65 372 5 0 0 0 - - -; -#X text 52 221 Reset To Initial Conditions; -#X text 53 294 Modify Parameters; -#X floatatom 20 372 5 0 0 0 - - -; -#X text 14 351 Output; -#X obj 20 315 ikeda; -#X msg 55 275 param 0.4 0.9 6 1; -#X msg 55 253 param 0.4 0.8 20 1; -#X msg 53 203 reset 0.1 0.1; -#X connect 0 0 5 0; -#X connect 1 0 5 1; -#X connect 5 0 12 0; -#X connect 6 0 12 0; -#X connect 7 0 12 0; -#X connect 8 0 12 0; -#X connect 12 0 3 0; -#X connect 12 1 2 0; -#X connect 12 2 16 0; -#X connect 12 3 16 1; -#X connect 12 4 16 2; -#X connect 13 0 12 0; -#X connect 16 0 12 0; -#X connect 17 0 25 0; -#X connect 18 0 17 0; -#X connect 19 0 17 1; -#X connect 25 0 23 0; -#X connect 25 1 20 0; -#X connect 26 0 25 0; -#X connect 27 0 25 0; -#X connect 28 0 25 0; diff --git a/tools/latoocarfian-help.pd b/tools/latoocarfian-help.pd deleted file mode 100644 index ee592be..0000000 --- a/tools/latoocarfian-help.pd +++ /dev/null @@ -1,35 +0,0 @@ -#N canvas 527 258 589 492 10; -#X obj 43 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 -; -#X floatatom 94 135 5 0 0 0 - - -; -#X text 91 208 Reset To Initial Conditions; -#X text 114 281 Modify Parameters; -#X msg 88 191 reset 0.1 0.1; -#X msg 111 243 param -0.966918 2.87988 0.756145 0.744728; -#X msg 111 264 param -2.90515 -2.03043 1.44055 0.70307; -#X floatatom 136 407 10 0 0 0 Y - -; -#X floatatom 43 367 10 0 0 0 X - -; -#X text 19 50 (This attractor is not continuous); -#X text 21 19 Latoocarfian Attractor (from Cliff Pickover); -#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 -; -#X obj 43 151 metro 50; -#X obj 18 150 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 --1; -#X obj 25 83 readme-fractals; -#X obj 43 347 latoocarfian 0.1 0.1 -2.90515 -2.03043 1.44055 0.70307 -; -#X obj 283 376 search-tools; -#X connect 0 0 12 0; -#X connect 1 0 12 1; -#X connect 4 0 15 0; -#X connect 5 0 15 0; -#X connect 6 0 15 0; -#X connect 12 0 15 0; -#X connect 13 0 15 0; -#X connect 15 0 8 0; -#X connect 15 1 7 0; -#X connect 15 2 16 0; -#X connect 15 3 16 1; -#X connect 15 4 16 2; -#X connect 16 0 15 0; diff --git a/tools/latoomutalpha-help.pd b/tools/latoomutalpha-help.pd deleted file mode 100644 index dda50f5..0000000 --- a/tools/latoomutalpha-help.pd +++ /dev/null @@ -1,35 +0,0 @@ -#N canvas 487 49 585 488 10; -#X obj 43 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 -; -#X floatatom 94 135 5 0 0 0 - - -; -#X text 91 208 Reset To Initial Conditions; -#X text 114 281 Modify Parameters; -#X msg 88 191 reset 0.1 0.1; -#X msg 111 243 param -0.966918 2.87988 0.756145 0.744728; -#X msg 111 264 param -2.90515 -2.03043 1.44055 0.70307; -#X floatatom 138 404 10 0 0 0 Y - -; -#X floatatom 43 367 10 0 0 0 X - -; -#X text 19 50 (This attractor is not continuous); -#X text 21 19 Latoocarfian Attractor (from Cliff Pickover); -#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 -; -#X obj 43 151 metro 50; -#X obj 18 150 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 --1; -#X obj 25 83 readme-fractals; -#X obj 43 347 latoomutalpha 0.1 0.1 -2.90515 -2.03043 1.44055 0.70307 -; -#X obj 289 374 search-tools; -#X connect 0 0 12 0; -#X connect 1 0 12 1; -#X connect 4 0 15 0; -#X connect 5 0 15 0; -#X connect 6 0 15 0; -#X connect 12 0 15 0; -#X connect 13 0 15 0; -#X connect 15 0 8 0; -#X connect 15 1 7 0; -#X connect 15 2 16 0; -#X connect 15 3 16 1; -#X connect 15 4 16 2; -#X connect 16 0 15 0; diff --git a/tools/latoomutbeta-help.pd b/tools/latoomutbeta-help.pd deleted file mode 100644 index 775b542..0000000 --- a/tools/latoomutbeta-help.pd +++ /dev/null @@ -1,35 +0,0 @@ -#N canvas 527 258 585 488 10; -#X obj 43 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 -; -#X floatatom 94 135 5 0 0 0 - - -; -#X text 91 208 Reset To Initial Conditions; -#X text 114 281 Modify Parameters; -#X msg 88 191 reset 0.1 0.1; -#X msg 111 243 param -0.966918 2.87988 0.756145 0.744728; -#X msg 111 264 param -2.90515 -2.03043 1.44055 0.70307; -#X floatatom 136 399 10 0 0 0 Y - -; -#X floatatom 43 367 10 0 0 0 X - -; -#X text 19 50 (This attractor is not continuous); -#X text 21 19 Latoocarfian Attractor (from Cliff Pickover); -#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 -; -#X obj 43 151 metro 50; -#X obj 18 150 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 --1; -#X obj 25 83 readme-fractals; -#X obj 43 347 latoomutbeta 0.1 0.1 -2.90515 -2.03043 1.44055 0.70307 -; -#X obj 283 373 search-tools; -#X connect 0 0 12 0; -#X connect 1 0 12 1; -#X connect 4 0 15 0; -#X connect 5 0 15 0; -#X connect 6 0 15 0; -#X connect 12 0 15 0; -#X connect 13 0 15 0; -#X connect 15 0 8 0; -#X connect 15 1 7 0; -#X connect 15 2 16 0; -#X connect 15 3 16 1; -#X connect 15 4 16 2; -#X connect 16 0 15 0; diff --git a/tools/latoomutgamma-help.pd b/tools/latoomutgamma-help.pd deleted file mode 100644 index 256b795..0000000 --- a/tools/latoomutgamma-help.pd +++ /dev/null @@ -1,35 +0,0 @@ -#N canvas 527 258 581 484 10; -#X obj 43 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 -; -#X floatatom 94 135 5 0 0 0 - - -; -#X text 91 208 Reset To Initial Conditions; -#X text 114 281 Modify Parameters; -#X msg 88 191 reset 0.1 0.1; -#X msg 111 243 param -0.966918 2.87988 0.756145 0.744728; -#X msg 111 264 param -2.90515 -2.03043 1.44055 0.70307; -#X floatatom 138 406 10 0 0 0 Y - -; -#X floatatom 43 367 10 0 0 0 X - -; -#X text 19 50 (This attractor is not continuous); -#X text 21 19 Latoocarfian Attractor (from Cliff Pickover); -#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 -; -#X obj 43 151 metro 50; -#X obj 18 150 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 --1; -#X obj 25 83 readme-fractals; -#X obj 43 347 latoomutgamma 0.1 0.1 -2.90515 -2.03043 1.44055 0.70307 -; -#X obj 289 374 search-tools; -#X connect 0 0 12 0; -#X connect 1 0 12 1; -#X connect 4 0 15 0; -#X connect 5 0 15 0; -#X connect 6 0 15 0; -#X connect 12 0 15 0; -#X connect 13 0 15 0; -#X connect 15 0 8 0; -#X connect 15 1 7 0; -#X connect 15 2 16 0; -#X connect 15 3 16 1; -#X connect 15 4 16 2; -#X connect 16 0 15 0; diff --git a/tools/loop.pd b/tools/loop.pd deleted file mode 100644 index 19896ab..0000000 --- a/tools/loop.pd +++ /dev/null @@ -1,43 +0,0 @@ -#N canvas 640 438 490 340 10; -#X obj 52 26 inlet; -#X obj 93 26 inlet; -#X obj 134 26 inlet; -#X obj 52 262 outlet; -#X obj 52 44 route bang float; -#X obj 74 118 f; -#X obj 74 136 -; -#X obj 74 154 /; -#X obj 74 172 i; -#X obj 74 190 + 1; -#X obj 52 208 f; -#X obj 52 226 until; -#X obj 52 244 f; -#X obj 79 244 +; -#X obj 96 99 f; -#X obj 52 62 t b b b; -#X obj 130 262 outlet; -#X obj 74 81 t b f; -#X connect 0 0 4 0; -#X connect 1 0 5 1; -#X connect 2 0 13 1; -#X connect 2 0 7 1; -#X connect 4 0 15 0; -#X connect 4 1 17 0; -#X connect 5 0 6 0; -#X connect 6 0 7 0; -#X connect 7 0 8 0; -#X connect 8 0 9 0; -#X connect 9 0 10 1; -#X connect 9 0 16 0; -#X connect 10 0 11 0; -#X connect 11 0 12 0; -#X connect 12 0 13 0; -#X connect 12 0 3 0; -#X connect 13 0 12 1; -#X connect 14 0 12 1; -#X connect 15 0 10 0; -#X connect 15 1 5 0; -#X connect 15 2 14 0; -#X connect 17 0 5 0; -#X connect 17 1 14 1; -#X connect 17 1 6 1; diff --git a/tools/lorenz-help.pd b/tools/lorenz-help.pd deleted file mode 100644 index eefd792..0000000 --- a/tools/lorenz-help.pd +++ /dev/null @@ -1,54 +0,0 @@ -#N canvas 185 66 689 426 10; -#X obj 318 105 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 -1; -#X floatatom 369 106 5 0 0 0 - - -; -#X text 407 162 Reset To Initial Conditions; -#X floatatom 363 372 10 0 0 0 Y - -; -#X floatatom 318 350 10 0 0 0 X - -; -#X obj 318 122 metro 50; -#X obj 293 121 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 --1; -#X msg 373 192 param 0.02 10 28 2.66667; -#X floatatom 408 399 10 0 0 0 Z - -; -#X text 20 18 Lorenz Attractor; -#X text 19 33 Chaos PD Externals - Copyright Ben Bogart 2002; -#X obj 20 62 readme-fractals; -#X obj 318 318 lorenz 0.1 0 0 0.02 10 28 2.66667; -#X text 550 194 Modify parameters; -#X msg 363 162 reset; -#X obj 459 345 search-tools; -#X obj 29 174 metro 50; -#X obj 29 150 tgl 15 0 empty empty empty 20 8 0 8 -262144 -1 -1 0 1 -; -#X floatatom 80 149 5 0 0 0 - - -; -#X obj 29 237 lorenz; -#X floatatom 74 345 5 0 0 0 - - -; -#X msg 115 254 param 0.02 10 28 2.667; -#X text 5 126 Calculate; -#X text 113 221 Reset To Initial Conditions; -#X text 115 272 Modify Parameters; -#X floatatom 29 345 5 0 0 0 - - -; -#X floatatom 120 345 5 0 0 0 - - -; -#X text 58 318 Output; -#X msg 114 203 reset 0.1 0 0; -#X connect 0 0 5 0; -#X connect 1 0 5 1; -#X connect 5 0 12 0; -#X connect 6 0 12 0; -#X connect 7 0 12 0; -#X connect 12 0 4 0; -#X connect 12 1 3 0; -#X connect 12 2 8 0; -#X connect 12 3 15 0; -#X connect 12 4 15 1; -#X connect 12 5 15 2; -#X connect 14 0 12 0; -#X connect 15 0 12 0; -#X connect 16 0 19 0; -#X connect 17 0 16 0; -#X connect 18 0 16 1; -#X connect 19 0 25 0; -#X connect 19 1 20 0; -#X connect 19 2 26 0; -#X connect 21 0 19 0; -#X connect 28 0 19 0; diff --git a/tools/martin-help.pd b/tools/martin-help.pd deleted file mode 100644 index ef12d0d..0000000 --- a/tools/martin-help.pd +++ /dev/null @@ -1,38 +0,0 @@ -#N canvas 203 283 593 496 10; -#X obj 43 134 tgl 15 0 empty empty empty 0 -6 32 8 -262144 -1 -1 0 -1; -#X floatatom 94 135 5 0 0 0 - - -; -#X text 89 174 Reset To Initial Conditions; -#X text 102 216 Modify Parameters; -#X msg 88 191 reset 0.1 0.1; -#X floatatom 51 451 10 0 0 0 Y - -; -#X floatatom 42 427 10 0 0 0 X - -; -#X text 19 50 (This attractor is not continuous); -#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 -; -#X obj 43 151 metro 50; -#X obj 18 150 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1 --1; -#X obj 25 83 readme-fractals; -#X obj 42 347 martin; -#X text 143 429 This fractal exhibits chaotic tendencies when A (param) -is in the vicinity of an odd multiple of PI.; -#X msg 97 237 param 3.14159; -#X text 21 19 Martin Attractor; -#X obj 68 379 search-tools; -#X obj 204 344 print vars; -#X obj 239 317 print param; -#X connect 0 0 9 0; -#X connect 1 0 9 1; -#X connect 4 0 12 0; -#X connect 9 0 12 0; -#X connect 10 0 12 0; -#X connect 12 0 6 0; -#X connect 12 1 5 0; -#X connect 12 2 16 0; -#X connect 12 3 16 1; -#X connect 12 3 17 0; -#X connect 12 4 16 2; -#X connect 12 4 18 0; -#X connect 14 0 12 0; -#X connect 16 0 12 0; diff --git a/tools/martin-test-help.pd b/tools/martin-test-help.pd deleted file mode 100644 index b8f294a..0000000 --- a/tools/martin-test-help.pd +++ /dev/null @@ -1,92 +0,0 @@ -#N canvas 437 54 668 669 10; -#X obj 35 179 tgl 15 0 empty empty empty 0 -6 32 8 -262144 -1 -1 0 -1; -#X floatatom 86 180 5 0 0 0 - - -; -#X text 81 219 Reset To Initial Conditions; -#X text 94 261 Modify Parameters; -#X msg 80 236 reset 0.1 0.1; -#X floatatom 59 444 10 0 0 0 Y - -; -#X floatatom 32 464 10 0 0 0 X - -; -#X text 19 50 (This attractor is not continuous); -#X text 21 19 Latoocarfian Attractor (from Cliff Pickover); -#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 -; -#X obj 35 196 metro 50; -#X obj 14 197 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1 --1; -#X obj 25 83 readme-fractals; -#X msg 98 307 search; -#X obj 34 392 martin; -#X msg 89 282 param 1; -#X msg 113 330 show; -#X msg 380 144 1000; -#X obj 336 202 until; -#X obj 279 384 route show search invalid; -#X obj 335 441 print search; -#X obj 279 460 print show; -#X obj 392 422 print invalid; -#X obj 449 403 print somethingelse; -#X msg 346 115 100; -#X msg 311 141 10; -#X msg 309 169 1; -#X obj 474 625 qlist; -#X msg 491 567 print; -#X msg 484 547 clear; -#X msg 474 527 rewind; -#N canvas 0 22 458 308 search 1; -#X floatatom 187 89 5 0 0 0 - - -; -#X obj 142 50 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1 --1; -#X obj 147 73 loop; -#X floatatom 186 15 5 0 0 0 - - -; -#X floatatom 192 31 5 0 0 0 - - -; -#X floatatom 198 47 5 0 0 0 - - -; -#X obj 31 259 outlet; -#X msg 48 167 param \$1; -#X msg 65 192 constrain 0.01; -#X obj 77 121 t b b f; -#X msg 82 218 search; -#X connect 1 0 2 0; -#X connect 2 0 9 0; -#X connect 2 1 0 0; -#X connect 3 0 2 0; -#X connect 4 0 2 1; -#X connect 5 0 2 2; -#X connect 7 0 6 0; -#X connect 8 0 6 0; -#X connect 9 0 10 0; -#X connect 9 1 8 0; -#X connect 9 2 7 0; -#X connect 10 0 6 0; -#X restore 45 119 pd search; -#X obj 52 146 print sit; -#X msg 136 357 lyapunov 0 10 100; -#X msg 465 504 add martin \$1 \$3 \$6; -#X connect 0 0 10 0; -#X connect 1 0 10 1; -#X connect 4 0 14 0; -#X connect 10 0 14 0; -#X connect 11 0 14 0; -#X connect 13 0 14 0; -#X connect 14 0 6 0; -#X connect 14 1 5 0; -#X connect 14 2 19 0; -#X connect 15 0 14 0; -#X connect 16 0 14 0; -#X connect 17 0 18 0; -#X connect 18 0 13 0; -#X connect 19 0 21 0; -#X connect 19 1 20 0; -#X connect 19 1 34 0; -#X connect 19 2 22 0; -#X connect 19 3 23 0; -#X connect 24 0 18 0; -#X connect 25 0 18 0; -#X connect 26 0 18 0; -#X connect 28 0 27 0; -#X connect 29 0 27 0; -#X connect 30 0 27 0; -#X connect 31 0 32 0; -#X connect 31 0 14 0; -#X connect 33 0 14 0; -#X connect 34 0 27 0; diff --git a/tools/popcorn-help.pd b/tools/popcorn-help.pd deleted file mode 100644 index 119edea..0000000 --- a/tools/popcorn-help.pd +++ /dev/null @@ -1,35 +0,0 @@ -#N canvas 492 119 593 496 10; -#X obj 43 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 -; -#X floatatom 94 135 5 0 0 0 - - -; -#X text 79 201 Reset To Initial Conditions; -#X text 99 246 Modify Parameters; -#X msg 76 184 reset 0.1 0.1; -#X floatatom 78 398 10 0 0 0 Y - -; -#X floatatom 43 373 10 0 0 0 X - -; -#X text 19 50 (This attractor is not continuous); -#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 -; -#X obj 43 151 metro 50; -#X obj 13 150 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 --1; -#X obj 25 83 readme-fractals; -#X msg 95 226 param 2.35155; -#X obj 43 347 popcorn 0.1 0 2.35155; -#X text 98 441 This fractal seems to allow is sole parameter to range -over a large range. As the value of the parameter rises \, so does -the Lyapunov Exponent \, but it does not appear to be linear.; -#X text 21 19 Popcorn Attractor (from Cliff Pickover); -#X obj 126 373 search-tools; -#X connect 0 0 9 0; -#X connect 1 0 9 1; -#X connect 4 0 13 0; -#X connect 9 0 13 0; -#X connect 10 0 13 0; -#X connect 12 0 13 0; -#X connect 13 0 6 0; -#X connect 13 1 5 0; -#X connect 13 2 16 0; -#X connect 13 3 16 1; -#X connect 13 4 16 2; -#X connect 16 0 13 0; diff --git a/tools/popcorn-test-help.pd b/tools/popcorn-test-help.pd deleted file mode 100644 index cbfdc4b..0000000 --- a/tools/popcorn-test-help.pd +++ /dev/null @@ -1,62 +0,0 @@ -#N canvas 575 260 589 492 10; -#X obj 43 134 tgl 15 0 empty empty empty 0 -6 160 8 -262144 -1 -1 0 -1; -#X floatatom 94 135 5 0 0 0 - - -; -#X text 79 201 Reset To Initial Conditions; -#X text 99 246 Modify Parameters; -#X msg 76 184 reset 0.1 0.1; -#X floatatom 131 384 10 0 0 0 Y - -; -#X floatatom 43 384 10 0 0 0 X - -; -#X text 19 50 (This attractor is not continuous); -#X text 21 19 Latoocarfian Attractor (from Cliff Pickover); -#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 -; -#X obj 43 151 metro 50; -#X obj 13 150 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1 --1; -#X obj 25 83 readme-fractals; -#X msg 101 266 search; -#X obj 212 381 print; -#X msg 113 294 show; -#X msg 95 226 param 2.35155; -#X obj 43 347 popcorn 0.1 0 2.35155; -#N canvas 83 103 466 316 search 1; -#X floatatom 187 89 5 0 0 0 - - -; -#X obj 142 50 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1 --1; -#X obj 147 73 loop; -#X floatatom 186 15 5 0 0 0 - - -; -#X floatatom 192 31 5 0 0 0 - - -; -#X floatatom 198 47 5 0 0 0 - - -; -#X obj 31 259 outlet; -#X msg 48 167 param \$1; -#X obj 77 121 t b b f; -#X msg 82 218 search; -#X msg 65 192 constrain 0.001; -#X connect 1 0 2 0; -#X connect 2 0 8 0; -#X connect 2 1 0 0; -#X connect 3 0 2 0; -#X connect 4 0 2 1; -#X connect 5 0 2 2; -#X connect 7 0 6 0; -#X connect 8 0 9 0; -#X connect 8 1 10 0; -#X connect 8 2 7 0; -#X connect 9 0 6 0; -#X connect 10 0 6 0; -#X restore 229 286 pd search; -#X obj 236 313 print sit; -#X connect 0 0 10 0; -#X connect 1 0 10 1; -#X connect 4 0 17 0; -#X connect 10 0 17 0; -#X connect 11 0 17 0; -#X connect 13 0 17 0; -#X connect 15 0 17 0; -#X connect 16 0 17 0; -#X connect 17 0 6 0; -#X connect 17 1 5 0; -#X connect 17 2 14 0; -#X connect 18 0 19 0; -#X connect 18 0 17 0; diff --git a/tools/quaruptwo-help.pd b/tools/quaruptwo-help.pd deleted file mode 100644 index 292b46e..0000000 --- a/tools/quaruptwo-help.pd +++ /dev/null @@ -1,32 +0,0 @@ -#N canvas 527 258 585 488 10; -#X obj 43 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 -; -#X floatatom 94 135 5 0 0 0 - - -; -#X text 91 208 Reset To Initial Conditions; -#X text 114 263 Modify Parameters; -#X floatatom 78 414 10 0 0 0 Y - -; -#X floatatom 43 392 10 0 0 0 X - -; -#X text 19 50 (This attractor is not continuous); -#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 -; -#X obj 43 151 metro 50; -#X obj 18 150 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 --1; -#X obj 25 83 readme-fractals; -#X text 21 19 QuadrupTwo Attractor; -#X msg 111 243 param 0 1 2; -#X msg 88 191 reset; -#X obj 43 363 quadruptwo 0 0 34 1 5; -#X obj 126 390 search-tools; -#X connect 0 0 8 0; -#X connect 1 0 8 1; -#X connect 8 0 14 0; -#X connect 9 0 14 0; -#X connect 12 0 14 0; -#X connect 13 0 14 0; -#X connect 14 0 5 0; -#X connect 14 1 4 0; -#X connect 14 2 15 0; -#X connect 14 3 15 1; -#X connect 14 4 15 2; -#X connect 15 0 14 0; diff --git a/tools/quaruptwo-test-help.pd b/tools/quaruptwo-test-help.pd deleted file mode 100644 index 4fcc159..0000000 --- a/tools/quaruptwo-test-help.pd +++ /dev/null @@ -1,69 +0,0 @@ -#N canvas 559 82 589 492 10; -#X obj 43 134 tgl 15 0 empty empty empty 0 -6 160 8 -262144 -1 -1 0 -1; -#X floatatom 94 135 5 0 0 0 - - -; -#X text 91 208 Reset To Initial Conditions; -#X text 114 281 Modify Parameters; -#X floatatom 197 399 10 0 0 0 Y - -; -#X floatatom 43 399 10 0 0 0 X - -; -#X text 19 50 (This attractor is not continuous); -#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 -; -#X obj 43 151 metro 50; -#X obj 18 150 bng 15 250 50 0 empty empty empty 0 -6 160 8 -262144 --1 -1; -#X obj 25 83 readme-fractals; -#X msg 117 303 search; -#X obj 327 394 print; -#X text 21 19 QuadrupTwo Attractor; -#X msg 111 243 param 0 1 2; -#X msg 177 335 show; -#X msg 88 191 reset; -#N canvas 0 22 470 320 search 0; -#X floatatom 187 89 5 0 0 0 - - -; -#X obj 142 50 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1 --1; -#X obj 147 73 loop; -#X floatatom 186 15 5 0 0 0 - - -; -#X floatatom 192 31 5 0 0 0 - - -; -#X floatatom 198 47 5 0 0 0 - - -; -#X obj 31 259 outlet; -#X obj 77 121 t b b f; -#X msg 82 218 search; -#X msg 48 167 param 34 1 \$1; -#X msg 65 192 constrain 0.05; -#X msg 190 149 constrain; -#X msg 238 268 elyapunov; -#X msg 198 198 constrain 0 100 0 2 0 100; -#X msg 218 228 lyapunov 0 10 1000; -#X connect 1 0 2 0; -#X connect 2 0 7 0; -#X connect 2 1 0 0; -#X connect 3 0 2 0; -#X connect 4 0 2 1; -#X connect 5 0 2 2; -#X connect 7 0 8 0; -#X connect 7 2 9 0; -#X connect 8 0 6 0; -#X connect 9 0 6 0; -#X connect 10 0 6 0; -#X connect 11 0 6 0; -#X connect 12 0 6 0; -#X connect 13 0 6 0; -#X connect 14 0 6 0; -#X restore 165 96 pd search; -#X obj 172 123 print sit; -#X obj 43 363 quadruptwo 0.1 0.1 34 1 5; -#X connect 0 0 8 0; -#X connect 1 0 8 1; -#X connect 8 0 19 0; -#X connect 9 0 19 0; -#X connect 11 0 19 0; -#X connect 14 0 19 0; -#X connect 15 0 19 0; -#X connect 16 0 19 0; -#X connect 17 0 18 0; -#X connect 17 0 19 0; -#X connect 19 0 5 0; -#X connect 19 1 4 0; -#X connect 19 2 12 0; diff --git a/tools/readme-frac-format.pd b/tools/readme-frac-format.pd deleted file mode 100644 index 950f56c..0000000 --- a/tools/readme-frac-format.pd +++ /dev/null @@ -1,22 +0,0 @@ -#N canvas 171 208 685 432 10; -#X text 31 36 The format of this file is pretty simple (or tries to -be).; -#X text 55 69 Line 1: name - this is used as the 'c' identifier; -#X text 55 81 Line 2: - integer for each -; -#X text 55 93 Line 3-x: - var name and start state; -#X text 55 105 Line y-z: - param data; -#X text 55 131 Line c: '.' - file must end with a single period '.' -; -#X text 33 180 This file is used by 'gen_fractal_framework' to produce -the 'C' source for the external.; -#X text 62 225 ** - The pseudo-code must not have any spaces. Each -line in the pseudo-code is considered to be a single "assignment" statement. -There is no need to worry about creating storage for any intermediate -(calculated) variables \, as that is done by the translation program. -The pseudo-code represents variables and parameters with a '$' before -the variable name. Locals are allowed \, but are preceded with a '#'. -(Locals are used as 'intermediate' \, computed values that are not -retained from iteration to iteration.); -#X text 55 118 Line a-b: - line(s) of frac 'pseudo-code' -**; diff --git a/tools/readme-fractals.pd b/tools/readme-fractals.pd deleted file mode 100644 index 2281c6a..0000000 --- a/tools/readme-fractals.pd +++ /dev/null @@ -1,54 +0,0 @@ -#N canvas 495 74 487 362 10; -#X obj 56 202 readme-frac-format; -#X obj 56 221 readme-gen-fractal; -#X text 37 183 if you want to add new fractals:; -#X obj 56 144 readme-operation; -#X obj 56 164 readme-searching; -#X text 22 107 Additional Reading \,; -#X text 41 126 if you want to us existing fractals:; -#X obj 56 240 readme-parameter-ranges; -#X text 270 269 Developed using PD 0.36; -#X text 93 295 Copyright 2003 \, Ben Bogart and Michael McGonagle; -#X text 276 282 Released under GNU GPL; -#N canvas 302 96 575 579 available_fractals 0; -#X obj 157 264 henon; -#X obj 157 302 ikeda; -#X obj 157 321 latoocarfian; -#X obj 157 340 latoomutalpha; -#X obj 157 359 latoomutbeta; -#X obj 157 378 latoomutgamma; -#X obj 69 208 logistic; -#X obj 277 208 lorenz; -#X obj 69 227 mlogistic; -#X obj 277 246 rossler; -#X obj 157 473 standardmap; -#X obj 69 246 tent; -#X obj 277 265 three_d; -#X text 57 187 1 variable; -#X text 157 187 2 variables; -#X text 273 187 3 variables; -#X text 24 136 The remaining outputs represent the variables \, corresponding -from left to right as the variables from the '*.frac' data file.; -#X text 24 16 Below \, there is an object for each of the fractals -currently available in the ChaosII collection.; -#X text 23 55 All fractals share the same common structure \, in that -the right-most outlet is used as the "results" outlet. This is used -during the "Searching" operations to return the results of the search -to the user. see 'readme-searching' file for more info on the results -of a search.; -#X obj 157 207 attract1; -#X obj 157 226 dejong; -#X obj 157 245 gingerbreadman; -#X obj 157 283 hopalong; -#X obj 157 416 martin; -#X obj 277 227 pickover; -#X obj 157 435 popcorn; -#X obj 157 454 quadruptwo; -#X obj 157 492 strange1; -#X obj 157 511 tinkerbell; -#X obj 157 530 unity; -#X obj 157 397 lotkavolterra; -#X restore 43 78 pd available_fractals; -#X text 27 28 The Chaos Library provides a means to generate multiple -chaotic datastreams \, as well as the ability to search for new attractor -sets that produce other chaotic datastreams.; diff --git a/tools/readme-gen-fractal.pd b/tools/readme-gen-fractal.pd deleted file mode 100644 index 2af4657..0000000 --- a/tools/readme-gen-fractal.pd +++ /dev/null @@ -1,6 +0,0 @@ -#N canvas 0 22 478 328 10; -#X text 25 23 This will explain the usage of 'gen_fractal_framework' -\, once the program has become more "stable" and generates what would -be unique to each fractal. Currently \, there is still some redundancy -in the code.; -#X text 282 136 more later...; diff --git a/tools/readme-lyapunov.pd b/tools/readme-lyapunov.pd deleted file mode 100644 index 056e6bd..0000000 --- a/tools/readme-lyapunov.pd +++ /dev/null @@ -1,16 +0,0 @@ -#N canvas 0 22 565 389 10; -#X text 74 61 Lyapunov Exponent; -#X text 25 82 This value is an estimate of the attractors potential -for chaos. It will not necessarily be the same for any given run using -any arbitrary fractal. The description below attempts to put "attractors" -into three catagories.; -#X text 48 262 Don't forget \, just because an "attractor" is not chaotic -\, it does not mean that it will not generate an interesting stream -of number \, if only until they converge.; -#X text 40 151 < 0; -#X text 78 151 These are not chaotic \, may produce a "short-term" -stream of intrest; -#X text 39 179 == 0; -#X text 80 179 Attractors converge to one or more points; -#X text 40 197 > 0; -#X text 80 198 Chaos begins. Higher values indicate "more" chaos.; diff --git a/tools/readme-operation.pd b/tools/readme-operation.pd deleted file mode 100644 index be93969..0000000 --- a/tools/readme-operation.pd +++ /dev/null @@ -1,34 +0,0 @@ -#N canvas 159 133 675 651 10; -#X msg 56 219 reset ; -#X msg 56 240 param ; -#X text 36 280 As to the exact variable and parameter ranges to use -\, you will have to consult each fractals help file. You can also use -the "Searching" functions to randomly find a new attractor set \, and -then use those values in either a set of messages to the fractal \, -or in its creation arguments.; -#X msg 56 198 reset; -#X text 98 199 sets the variables back to their initial state **; -#X text 181 221 sets the variables to an explicit state ***; -#X text 195 242 sets parameters to explicit state ****; -#X text 34 26 Create a fractal with or without a set of variables and -parameters \, passed as creation arguments. Without the creation arguments -\, the class defaults will be used for the fractal. With the arguments -\, a new fractal is created using the arguments as the defaults.; -#X text 35 104 To use a fractal \, create the instance \, and optionally -pass it an initial state of variables and a set of parameters. Then -repeatedly 'bang' on the input to iterate thru the fractals variable -states. Using a 'reset' message will return the variables to their -initial state \, or to the explicit values passed.; -#X text 38 369 ** - The initial state can be explicitly set by passing -the arguments at creation time for the fractal \, or (without creation -arguments) the class default value will be used.; -#X text 37 414 *** - When setting the variables to an arbitrary state -\, the stream may not be in a "stable" state. You may need to iterate -the fractal several hundred (or thousand) times to obtain a "stable" -state. If you pass a set of variables that were taken from the 'search' -(or 'show') results \, the values most likely will be in a "stable" -condition.; -#X text 38 500 **** - Do remember that not all combinations of parameters -result in an attractor set.; -#X text 234 577 chaos \, version 2 by Ben Bogart and Michael McGonagle. -Copyright 2003; diff --git a/tools/readme-parameter-ranges.pd b/tools/readme-parameter-ranges.pd deleted file mode 100644 index 27fe5f0..0000000 --- a/tools/readme-parameter-ranges.pd +++ /dev/null @@ -1,23 +0,0 @@ -#N canvas 0 22 499 399 10; -#X text 33 275 The "classification" of an attractor set uses the full -range of the fractals acceptable parameter ranges. As this method of -"classification" is relative \, it will not describe each fractal uniquely -\, but rather can be used to compare attractor sets that have similar -(closely related) parameter values. NOTE: there needs to be a way to -increase the granularity of the classification system...; -#X text 35 21 Parameter Ranges - Once you have an operational fractal -external \, it is important to make sure that the assigned ranges for -each of the parameters are "optimized" to limit the random number generator -to those ranges. This is important when a variable can only range between -(-1 .. 1) and you have declared that it can range from (-100 .. 100). -Because of the much wider search space \, there is less likelyhood -of finding anything useful \, or at least make the search times longer -due to higher failure rates.; -#X text 35 147 If you are unsure of what the ranges are \, you can -either figure them out mathematically \, or use the "brute-force" method -and iterate over ranges of the defined parameters. The points that -return a fractal (even ones that converge) will give an indication -as to the acceptable ranges for each param. Once you have determined -those ranges \, adjust them in your '*.frac' file and re-make the external -for your fractal. (Or you can just edit the Macros in the C code \, -if you are comfortable with that.); diff --git a/tools/readme-searching.pd b/tools/readme-searching.pd deleted file mode 100644 index 0135779..0000000 --- a/tools/readme-searching.pd +++ /dev/null @@ -1,101 +0,0 @@ -#N canvas 39 41 1031 669 10; -#X msg 471 344 show; -#X msg 470 295 seed; -#X msg 470 314 seed number; -#X msg 469 234 elyapunov; -#X msg 467 118 constrain; -#X text 601 76 random search for an attractor; -#X text 508 345 displays info on attractor to console; -#X text 543 119 restores full param search area; -#X text 632 138 based on current params \, limits to percentage of -range; -#X msg 465 76 search ; -#X msg 467 137 constrain ; -#X msg 467 156 constrain ; -#X msg 468 200 lyapunov ; -#X msg 465 57 search; -#X text 516 57 random search for an attractor \, variables use defaults -; -#X text 17 403 The search method implemented performs the following: -; -#X text 41 418 1 Set the params randomly based on allowed ranges; -#X text 41 432 2 Calculate the Lyapunov Exponent; -#X text 41 447 3 If the Lyapunov Exponent is within allowed range \, -return the attractor set; -#X text 19 39 Searching for an attractor set can be as simple as sending -a 'search' message to a fractal. This will search the fractals allowable -parameter limits for an attractor set.; -#X text 39 183 arg[1] = Lyapunov Exponent; -#X msg 469 265 classify ; -#X text 591 266 Used to set the "granularity" of the classification -; -#X text 17 323 The Lyapunov Exponent for the attractor set will indicates -one of three states \, (1) Convergence [a negative value] \, (2) Stability -[0 \, of values close to 0] \, and (3) Chaos [a positive value]. Each -class will have different ranges of Lyapunov Exponent.; -#X text 39 196 arg[2] = Classification String ****; -#X text 16 513 **** - The classification method was adopted from Julian -Sprott's method of classification. While it is an arbitrary system -\, and does not "uniquely" identify an attractor set \, it is used -to show a relationship with other attractor sets with similar values. -; -#X text 558 313 seeds search random number generator with number * -; -#X text 507 296 seeds search random number generator with time *; -#X text 543 235 calculates an extended Lyapunov Exponent **; -#X text 648 157 params are limited to explicit ranges ***; -#X text 473 419 * - all fractals of all classes currently share the -same random number generator.; -#X text 473 452 ** - this performs a Lyapunov Exponent calculation -for each variable in the attractor. Ideally \, all results should be -approximately the same. This is an experimental function.; -#X text 473 502 *** - expects there to be a low and high range limit -for each param in the fractal equation.; -#X text 483 217 sets search limits and failure count for Lyapunov Exponent -; -#X text 37 15 Searching - the art of chaos.; -#N canvas 0 22 464 316 simple_example 0; -#X obj 166 106 latoocarfian; -#X msg 173 38 search; -#X text 32 238 This example creates a 'latoocarfian' fractal with the -class defaults. When a search is performed \, the initial state for -the variables are set to the class defaults.; -#X obj 131 14 bng 15 250 50 0 empty empty empty 0 -6 32 8 -262144 -1 --1; -#X floatatom 166 211 10 0 0 0 X - -; -#X floatatom 185 194 10 0 0 1 Y - -; -#X msg 166 16 reset; -#X msg 183 61 show; -#X obj 205 173 print results; -#X obj 225 152 print vars; -#X obj 245 132 print params; -#X connect 0 0 4 0; -#X connect 0 1 5 0; -#X connect 0 2 8 0; -#X connect 0 3 9 0; -#X connect 0 4 10 0; -#X connect 1 0 0 0; -#X connect 3 0 0 0; -#X connect 6 0 0 0; -#X connect 7 0 0 0; -#X restore 286 18 pd simple_example; -#X text 39 210 arg[3] = failure rate before solution *****; -#X text 16 581 ***** - the failure rate is a percentage of the actual -number of failures until a solution is found over the total number -of times the search algorithm will be executed before giving up. This -limit is set via the 'lyapunov' message. This number will also be influenced -by the 'low' and 'high' ranges set.; -#X text 19 93 The values returned from a 'search' message use the 'search' -outlets. These three outlets encapsulate that three pieces of data -of interest. The first of the 'search' outlets holds a list of the -results. This includes:; -#X text 39 170 arg[0] = 'show' \, 'search' \, or 'invalid'; -#X text 18 269 Most likely \, you won't see any failures ('invalid') -\, unless you mess with the 'constrain' or 'lyapunov' messages. 'show' -is returned when you use the 'show' message.; -#X obj 153 376 readme-lyapunov; -#X text 43 475 4 If the Limit Count has been exceeded \, return 'invalid' -\, else goto 1; -#X text 18 154 Search Outlet 0:; -#X text 18 227 Search Outlet 1: list of current variables; -#X text 18 243 Search Outlet 2: list of parameter set; diff --git a/tools/search-tools.pd b/tools/search-tools.pd deleted file mode 100644 index f00a011..0000000 --- a/tools/search-tools.pd +++ /dev/null @@ -1,186 +0,0 @@ -#N canvas 619 310 464 533 10; -#X obj -97 556 outlet; -#X obj -97 2 cnv 15 450 220 empty empty Searching_Commands 2 9 1 10 --233017 -66577 0; -#X msg 104 83 constrain; -#X msg 104 104 constrain \$1; -#X text -77 104 % Constraint; -#X text -77 82 No Constraint; -#X msg 104 30 search; -#X obj 221 52 nbx 5 17 -1e+37 1e+37 0 0 \$0-search_v2 empty empty 0 --6 1153 10 -262144 -1 -1 0 256; -#X obj 172 52 nbx 5 17 -1e+37 1e+37 0 0 \$0-search_v1 empty empty 0 --6 1153 10 -262144 -1 -1 0 256; -#X text -78 48 Search w/ inits; -#X text -78 29 Search w/ default inits; -#X obj 86 143 bng 17 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 --1; -#X text -76 142 Set Lyapunov Limits; -#X obj 287 143 nbx 5 17 -1e+37 1e+37 0 0 \$0-lyapunov_v3 empty failure -0 -6 1153 10 -262144 -1 -1 0 256; -#X obj 238 143 nbx 5 17 -1e+37 1e+37 0 0 \$0-lyapunov_v2 empty high -0 -6 1153 10 -262144 -1 -1 0 256; -#X obj 189 143 nbx 5 17 -1e+37 1e+37 0 0 \$0-lyapunov_v1 empty low -0 -6 1153 10 -262144 -1 -1 0 256; -#N canvas 0 22 509 236 lyapunov 0; -#X obj 42 26 inlet; -#X obj 83 26 r \$0-lyapunov_v1; -#X obj 101 61 pack f f f; -#X obj 203 27 r \$0-lyapunov_v2; -#X obj 320 27 r \$0-lyapunov_v3; -#X msg 101 84 lyapunov \$1 \$2 \$3; -#X obj 101 108 s \$0-outlet; -#X connect 0 0 2 0; -#X connect 1 0 2 0; -#X connect 2 0 5 0; -#X connect 3 0 2 1; -#X connect 4 0 2 2; -#X connect 5 0 6 0; -#X restore 106 143 pd lyapunov; -#X obj 86 52 bng 17 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 --1; -#N canvas 0 22 374 205 search 0; -#X obj 104 104 pack f f; -#X msg 104 127 search \$1 \$2; -#X obj 83 26 r \$0-search_v1; -#X obj 186 26 r \$0-search_v2; -#X obj 94 63 f; -#X obj 104 151 s \$0-outlet; -#X obj 18 26 inlet; -#X connect 0 0 1 0; -#X connect 1 0 5 0; -#X connect 2 0 4 1; -#X connect 3 0 0 1; -#X connect 4 0 0 0; -#X connect 6 0 4 0; -#X restore 104 52 pd search; -#X text -76 164 Extended Lyapunov; -#X msg 104 165 elyapunov; -#X msg 104 186 show; -#X text -75 198 Get Attractor Info; -#X obj 104 226 s \$0-outlet; -#X obj -97 535 r \$0-outlet; -#X obj -14 535 inlet; -#X obj -14 556 s \$0-inlet; -#X obj -97 226 cnv 15 450 300 empty empty Search_Results 2 9 1 10 -233017 --66577 0; -#N canvas 48 644 700 296 get_results 0; -#X msg 5 39 set \$1; -#X obj 5 17 symbol; -#X obj 5 61 outlet; -#X obj 150 38 s \$0-lyapunov; -#X obj 190 89 s \$0-failure_rate; -#X obj 319 32 s \$0-v1; -#X obj 343 53 s \$0-v2; -#X obj 367 75 s \$0-v3; -#X obj 473 31 s \$0-p1; -#X obj 497 52 s \$0-p2; -#X obj 521 74 s \$0-p3; -#X obj 170 62 s \$0-classification; -#X obj 44 222 r \$0-classification; -#X msg 44 243 set \$1; -#X obj 44 264 outlet; -#X obj 5 -6 r \$0-inlet; -#X obj 80 117 print debug; -#X obj 131 11 unpack s 0 s 0; -#X obj 319 9 unpack 0 0 0 0 0 0; -#X obj 391 96 s \$0-v4; -#X obj 415 117 s \$0-v5; -#X obj 440 138 s \$0-v6; -#X obj 473 9 unpack 0 0 0 0 0 0; -#X obj 545 96 s \$0-p4; -#X obj 569 117 s \$0-p5; -#X obj 594 137 s \$0-p6; -#X obj 318 -12 r \$0-inlet_var; -#X obj 473 -11 r \$0-inlet_param; -#X connect 0 0 2 0; -#X connect 1 0 0 0; -#X connect 12 0 13 0; -#X connect 13 0 14 0; -#X connect 15 0 1 0; -#X connect 15 0 17 0; -#X connect 17 1 3 0; -#X connect 17 2 11 0; -#X connect 17 3 4 0; -#X connect 18 0 5 0; -#X connect 18 1 6 0; -#X connect 18 2 7 0; -#X connect 18 3 19 0; -#X connect 18 4 20 0; -#X connect 18 5 21 0; -#X connect 22 0 8 0; -#X connect 22 1 9 0; -#X connect 22 2 10 0; -#X connect 22 3 23 0; -#X connect 22 4 24 0; -#X connect 22 5 25 0; -#X connect 26 0 18 0; -#X connect 27 0 22 0; -#X restore -14 267 pd get_results; -#X msg -14 288 search; -#X msg 79 288 NOCBNS; -#X text 184 290 Classification; -#X obj 79 309 nbx 10 17 -1e+37 1e+37 0 0 empty \$0-lyapunov empty 0 --6 577 10 -262144 -1 -1 -0.482697 256; -#X obj 79 330 nbx 10 17 -1e+37 1e+37 0 0 empty \$0-failure_rate empty -0 -6 577 10 -262144 -1 -1 0.005 256; -#X obj -14 371 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-v1 empty 0 -6 577 -10 -262144 -1 -1 0 256; -#X obj -14 391 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-v2 empty 0 -6 577 -10 -262144 -1 -1 0 256; -#X obj -14 411 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-v3 empty 0 -6 577 -10 -262144 -1 -1 0 256; -#X obj 111 371 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-p1 empty 0 -6 577 -10 -262144 -1 -1 0.17869 256; -#X obj 111 391 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-p2 empty 0 -6 577 -10 -262144 -1 -1 0.437724 256; -#X obj 111 411 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-p3 empty 0 -6 577 -10 -262144 -1 -1 -2.31304 256; -#X text 183 331 Failure Rate; -#X text 184 309 Lyapunov Exponent; -#X text 48 372 Var 1; -#X text 48 392 Var 2; -#X text 48 412 Var 3; -#X text 174 373 Param 1; -#X text 174 393 Param 2; -#X text 174 413 Param 3; -#X obj 188 164 readme-lyapunov; -#X obj 171 29 readme-searching; -#X obj -14 431 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-v4 empty 0 -6 577 -10 -262144 -1 -1 0 256; -#X obj -14 451 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-v5 empty 0 -6 577 -10 -262144 -1 -1 0 256; -#X obj -14 471 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-v6 empty 0 -6 577 -10 -262144 -1 -1 0 256; -#X obj 111 431 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-p4 empty 0 -6 577 -10 -262144 -1 -1 -2.74459 256; -#X obj 111 451 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-p5 empty 0 -6 577 -10 -262144 -1 -1 0.00541449 256; -#X obj 111 471 nbx 5 17 -1e+37 1e+37 0 0 empty \$0-p6 empty 0 -6 577 -10 -262144 -1 -1 1.3485 256; -#X text 48 432 Var 4; -#X text 48 452 Var 5; -#X text 48 472 Var 6; -#X text 174 433 Param 4; -#X text 174 453 Param 5; -#X text 174 473 Param 6; -#X obj 62 535 inlet; -#X obj 166 535 inlet; -#X obj 62 556 s \$0-inlet_var; -#X obj 166 556 s \$0-inlet_param; -#X obj 198 104 nbx 5 17 -1e+37 1e+37 0 0 empty empty % 0 -6 1 10 -262144 --1 -1 0 256; -#X connect 2 0 23 0; -#X connect 3 0 23 0; -#X connect 6 0 23 0; -#X connect 11 0 16 0; -#X connect 17 0 18 0; -#X connect 20 0 23 0; -#X connect 21 0 23 0; -#X connect 24 0 0 0; -#X connect 25 0 26 0; -#X connect 28 0 29 0; -#X connect 28 1 30 0; -#X connect 62 0 64 0; -#X connect 63 0 65 0; -#X connect 66 0 3 0; diff --git a/tools/standardmap-help.pd b/tools/standardmap-help.pd deleted file mode 100644 index 02fb992..0000000 --- a/tools/standardmap-help.pd +++ /dev/null @@ -1,32 +0,0 @@ -#N canvas 527 258 585 488 10; -#X obj 43 134 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 -; -#X floatatom 94 135 5 0 0 0 - - -; -#X text 91 208 Reset To Initial Conditions; -#X text 112 265 Modify Parameters; -#X msg 88 191 reset 0.1 0.1; -#X floatatom 61 452 10 0 0 0 Y - -; -#X floatatom 43 427 10 0 0 0 X - -; -#X text 19 50 (This attractor is not continuous); -#X text 20 34 Chaos PD Externals - Copyright Michael McGonagle 2003 -; -#X obj 43 151 metro 50; -#X obj 18 150 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 --1; -#X obj 25 83 readme-fractals; -#X text 21 19 Standard Map; -#X obj 43 369 standardmap; -#X msg 110 242 param 0.89; -#X obj 70 398 search-tools; -#X connect 0 0 9 0; -#X connect 1 0 9 1; -#X connect 4 0 13 0; -#X connect 9 0 13 0; -#X connect 10 0 13 0; -#X connect 13 0 6 0; -#X connect 13 1 5 0; -#X connect 13 2 15 0; -#X connect 13 3 15 1; -#X connect 13 4 15 2; -#X connect 14 0 13 0; -#X connect 15 0 13 0; -- cgit v1.2.1