| @@ -0,0 +1,196 @@ | |||
| Release 0.1.1 | |||
| Main app changes: | |||
| Back to one window GUI with seperate movable areas | |||
| Fixed Plugin window events/drawing bug | |||
| Echo/Delay crash bug fix | |||
| Less C code in SpiralSynthModular.C (Andy Preston) | |||
| Ability to load ssm files from command line (Dan Bethell) | |||
| gcc3.1 fixes + dynamic linking bugfix (Takashi Iwai) | |||
| configure + make fixes (Takashi Iwai) | |||
| configure option --with-plugindir=xxx added (Takashi Iwai) | |||
| Plugin changes: | |||
| LFOPlugin (Andy Preston) | |||
| MeterPlugin (Andy Preston) | |||
| StereoMixerPlugin fix (Andy Preston) | |||
| Scaling fix and name sorting for the LADSPAPlugin (Mike Rawes) | |||
| Sequencer bugfix for dragging note events | |||
| Matrix now 64X24 + tweaked GUI | |||
| Matrix can be controlled by an external clock pulse | |||
| Matrix copy/paste and transpose functionality (Andy Preston) | |||
| JackPlugin fixed for recent versions of jack (Takashi Iwai) | |||
| Release 0.1.0 | |||
| Main app changes: | |||
| New GUI code, main app window has now become the editor window, with a new | |||
| window for plugin dialogues. (build fltk with ./configure --enable-shared) | |||
| New default theme. | |||
| New load/save system for external files like samples. (external files stored | |||
| in a directory) | |||
| configure fixes (Takashi Iwai) | |||
| ppc fix (Takashi Iwai) | |||
| gcc 3 fixes (Takashi Iwai) | |||
| wav loading fixes | |||
| Graph sorted node execution order to remove internal latency. | |||
| Plugin changes: | |||
| Scope plugin bugfix | |||
| DistributorPlugin (Fade) | |||
| JoystickPlugin (Bill Bland) | |||
| Release 0.0.9 Thursday Febuary 14 2002 | |||
| Main app changes: | |||
| Right click plugin menu | |||
| More error boxes, all asserts out of SSM app, better recovery from bad files | |||
| Audio engine can now be run in callback mode for plugins like the JackPlugin | |||
| Options save (Bill Bland) | |||
| Plugin changes: | |||
| PoshSampler, with loop points, editing and dirty timestretching | |||
| ComplexEnvelope, describe envelopes with arbitary lines or Bezier curves | |||
| MidiPlugin updated to support all controller channels, with multiple ports | |||
| Rewritten the midi parser | |||
| Controller plugin save problem fixed | |||
| Matrix stream out leaner | |||
| SpiralLoopPlugin Close file dialog crash fixed | |||
| StreamPlugin crash on mono wavs fixed | |||
| :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | |||
| Release 0.0.8 Thursday Febuary 14 2002 | |||
| Main app changes: | |||
| All plugin communication now in 32bit floating point. | |||
| New configure/make system (Erik de Castro Lopo) | |||
| Warning and error dialogs | |||
| FLTK 1.1.0 supported (Takashi Iwai) | |||
| gcc-3 fixes (Takashi Iwai) | |||
| Proper tooltips implemented | |||
| Options GUI | |||
| Crash bug fix | |||
| Plugin changes: | |||
| OSS output now does input, and with duplex - simultaneous i/o. | |||
| StreamPlugin | |||
| XFadePlugin | |||
| SpiralLoopPlugin | |||
| :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | |||
| Release 0.0.7 Tuesday November 21 2001. | |||
| Main app changes: | |||
| Wavfile fix for PPC machines. (Yves Usson) | |||
| PNG fix for images with an alpha channel. (Yves Usson) | |||
| All windows are now double buffered by default. | |||
| Misc gui tweaks | |||
| Plugin changes: | |||
| RiffWav loader attempts to decode non standard wavs | |||
| Ladspa plugin should compile whether ladspa is installed or not. | |||
| SampleHoldPlugin (Yves Usson) | |||
| NoteSnapPlugin | |||
| WaveShaperPlugin GUI updated. (Yves Usson) | |||
| AmpPlugin GUI updated. (Yves Usson) | |||
| Sampler plugin streams paths with spaces properly. | |||
| :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | |||
| Release 0.0.6 Wednesday October 31 2001. | |||
| Main app changes: | |||
| Put a version number in the .SpiralSynthModular, so there's no need | |||
| to break the file format again. | |||
| Basic theme support - png loading needs libpng | |||
| Clear first buffer to stop noise on startup. | |||
| Different samplerates should be handled properly now. | |||
| RiffWav rewritten - automatically mixes stereo wavs into mono. | |||
| Deals with header much better, stores samplerate etc. | |||
| Plugin changes: | |||
| Output : Buffer size now handled correctly (Fragment settings in .rc file). | |||
| SeqSelector : Should always loop now. | |||
| SamplerPlugin : Individual sample outputs added. | |||
| SamplerPlugin : Pitch takes samplerate into account. | |||
| SequencerPlugin : Speed takes samplerate into account. | |||
| :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | |||
| Release 0.0.5 Thursday October 20 2001. | |||
| Main app changes: | |||
| Plugin Tooltips | |||
| Layout text comments | |||
| Toolbox GUI sorted | |||
| Low level optimisation begun, to stop processing silent sample buffers. | |||
| Removed asserts from low level sample code (only for releases). | |||
| Removed tons of old SpiralSynth legacy code and dependancies. | |||
| File confirmation added. | |||
| Plugin changes: | |||
| WaveShaper Plugin added (thx to Yves Usson) | |||
| SeqSelector GUI finished | |||
| Oscillator & Wavetable octave fix (Yves Usson) | |||
| Oscillator, Echo and envelope GUI additions (Yves Usson) | |||
| Envelope plugin bug fixed (warning volume will need to be increased on saved layouts) | |||
| Controller plugin now much more versatile. | |||
| LADSPA plugin | |||
| Moog filter optimised | |||
| SVF filter optimised | |||
| Splitter plugin now has 4 outputs | |||
| :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | |||
| Release 0.0.4 Thursday September 13 2001. | |||
| Main app changes: | |||
| Crash bugs related to deleting of devices located and fixed. | |||
| Big endian PPC support back in. | |||
| :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | |||
| Release 0.0.3 Monday September 10 2001. | |||
| Main app changes: | |||
| Fixed an include problem that some people were getting. | |||
| Added functionality for plugind to change their device | |||
| properties while running. | |||
| Plugin changes: | |||
| Sequencer Plugin finished, records note CV input, and can hold up to 16 | |||
| different patterns. | |||
| Added the SeqSelecta, which can be used to step through patterns on the | |||
| sequencer or matrix plugins. | |||
| WaveTableOsc plugin - Sine, Square, Saw, InvSaw, Triangle, 2 Pulse and InvSine | |||
| waveshapes generated. Should be much faster than the old oscillator, but with | |||
| less modulation options. | |||
| Oscillator optimisations. | |||
| Improved the delay plugin (now linearly interpolated) | |||
| Sampler plugin now pitches samples offset from their input frequency, | |||
| for tuning of samples used in melodies. | |||
| Output no longer exits if it can't open the soundcard, | |||
| wav recording is still enabled. | |||
| Midi device wasn't opening the file in .SpiralSynthModular - fixed. | |||
| :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | |||
| First release 0.0.2 Monday July 2 2001. | |||
| @@ -0,0 +1,339 @@ | |||
| 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 | |||
| Appendix: How to Apply These Terms to Your New Programs | |||
| If you develop a new program, and you want it to be of the greatest | |||
| possible use to the public, the best way to achieve this is to make it | |||
| free software which everyone can redistribute and change under these terms. | |||
| To do so, attach the following notices to the program. It is safest | |||
| to attach them to the start of each source file to most effectively | |||
| convey the exclusion of warranty; and each file should have at least | |||
| the "copyright" line and a pointer to where the full notice is found. | |||
| <one line to give the program's name and a brief idea of what it does.> | |||
| Copyright (C) 19yy <name of author> | |||
| This program is free software; you can redistribute it and/or modify | |||
| it under the terms of the GNU General Public License as published by | |||
| the Free Software Foundation; either version 2 of the License, or | |||
| (at your option) any later version. | |||
| This program is distributed in the hope that it will be useful, | |||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| GNU General Public License for more details. | |||
| You should have received a copy of the GNU General Public License | |||
| along with this program; if not, write to the Free Software Foundation, | |||
| Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |||
| Also add information on how to contact you by electronic and paper mail. | |||
| If the program is interactive, make it output a short notice like this | |||
| when it starts in an interactive mode: | |||
| Gnomovision version 69, Copyright (C) 19yy name of author | |||
| Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. | |||
| This is free software, and you are welcome to redistribute it | |||
| under certain conditions; type `show c' for details. | |||
| The hypothetical commands `show w' and `show c' should show the appropriate | |||
| parts of the General Public License. Of course, the commands you use may | |||
| be called something other than `show w' and `show c'; they could even be | |||
| mouse-clicks or menu items--whatever suits your program. | |||
| You should also get your employer (if you work as a programmer) or your | |||
| school, if any, to sign a "copyright disclaimer" for the program, if | |||
| necessary. Here is a sample; alter the names: | |||
| Yoyodyne, Inc., hereby disclaims all copyright interest in the program | |||
| `Gnomovision' (which makes passes at compilers) written by James Hacker. | |||
| <signature of Ty Coon>, 1 April 1989 | |||
| Ty Coon, President of Vice | |||
| This General Public License does not permit incorporating your program into | |||
| proprietary programs. If your program is a subroutine library, you may | |||
| consider it more useful to permit linking proprietary applications with the | |||
| library. If this is what you want to do, use the GNU Library General | |||
| Public License instead of this License. | |||
| @@ -0,0 +1,128 @@ | |||
| SpiralSynthModular File Ver 3 | |||
| 253 149 724 420 253 501 724 420 | |||
| SectionList | |||
| 23 | |||
| Device 0 Plugin 0 | |||
| 873 153 0 76 47 | |||
| Device 1 Plugin 13 | |||
| 523 78 0 76 47 | |||
| 1 1 0.36389 | |||
| Device 2 Plugin 13 | |||
| 522 150 0 76 47 | |||
| 1 1 0.38383 | |||
| Device 3 Plugin 13 | |||
| 525 223 0 76 47 | |||
| 1 1 0.36274 | |||
| Device 7 Plugin 6 | |||
| 420 102 0 0 0 | |||
| Device 8 Plugin 6 | |||
| 455 189 0 0 0 | |||
| Device 12 Plugin 7 | |||
| 611 156 0 76 47 | |||
| 1 1 1 1 1 | |||
| Device 13 Plugin 8 | |||
| 783 153 0 76 47 | |||
| 1 1 0.5 1 0.5 1 0.5 1 0.5 | |||
| Device 16 Plugin 1 | |||
| 697 153 1 445 67 | |||
| Device 17 Plugin 23 | |||
| 276 198 1 186 73 | |||
| 1 0 -3 0.0258332 1 | |||
| Device 18 Plugin 23 | |||
| 340 262 1 180 205 | |||
| 1 0 -3 0.00586802 1 | |||
| Device 19 Plugin 23 | |||
| 410 331 1 432 205 | |||
| 1 0 -3 0.0843751 1 | |||
| Device 20 Plugin 3 | |||
| 184 100 1 103 83 | |||
| 3 1 -0.42 1 | |||
| 1 | |||
| 4 | |||
| Name -1 1 0.71 | |||
| Device 21 Plugin 23 | |||
| 267 98 0 76 47 | |||
| 1 0 -2 0.187005 1 | |||
| Device 22 Plugin 23 | |||
| 337 100 0 76 47 | |||
| 1 2 -3 0.325557 1 | |||
| Device 23 Plugin -1 | |||
| 272 16 0 0 0 | |||
| 1 53 This layout generates a signal with lots of harmonics | |||
| Device 24 Plugin -1 | |||
| 278 30 0 0 0 | |||
| 1 55 and filters the signal with three bandpass moog filters | |||
| Device 25 Plugin -1 | |||
| 196 78 0 0 0 | |||
| 1 26 Change this to alter pitch | |||
| Device 26 Plugin -1 | |||
| 665 98 0 0 0 | |||
| 1 43 Have a look at the waveform generated in an | |||
| Device 27 Plugin -1 | |||
| 667 111 0 0 0 | |||
| 1 47 audio editor such as audacity, that can display | |||
| Device 28 Plugin -1 | |||
| 625 125 0 0 0 | |||
| 1 27 the frequencies as colours. | |||
| Device 29 Plugin -1 | |||
| 248 330 0 0 0 | |||
| 1 39 These oscillators change the modulation | |||
| Device 30 Plugin -1 | |||
| 202 345 0 0 0 | |||
| 1 21 of the three filters. | |||
| 17 | |||
| 7 4 1 8 5 0 | |||
| 8 5 0 2 2 0 | |||
| 8 5 1 3 3 0 | |||
| 7 4 0 1 1 0 | |||
| 1 1 1 12 6 0 | |||
| 2 2 1 12 6 1 | |||
| 3 3 1 12 6 2 | |||
| 13 7 0 0 0 0 | |||
| 13 7 1 0 0 1 | |||
| 12 6 0 16 8 0 | |||
| 16 8 0 13 7 0 | |||
| 17 9 0 1 1 1 | |||
| 18 10 0 2 2 1 | |||
| 19 11 0 3 3 1 | |||
| 22 14 0 7 4 0 | |||
| 21 13 0 22 14 0 | |||
| 20 12 0 21 13 0 | |||
| @@ -0,0 +1,78 @@ | |||
| SpiralSynthModular File Ver 3 | |||
| 314 503 724 461 238 186 724 420 | |||
| SectionList | |||
| 14 | |||
| Device 0 Plugin 0 | |||
| 612 241 0 100 100 | |||
| Device 2 Plugin 4 | |||
| 348 109 1 95 160 | |||
| 1 2 2 0.0149791 0.53 0 0.019 0.299 | |||
| Device 4 Plugin 6 | |||
| 240 254 0 0 0 | |||
| Device 5 Plugin 1 | |||
| 419 246 1 349 157 | |||
| Device 7 Plugin 9 | |||
| 276 109 1 447 33 | |||
| 1 0.1132 0.0377 | |||
| Device 8 Plugin 9 | |||
| 420 109 1 448 291 | |||
| 1 1.1698 0.566 | |||
| Device 12 Plugin 8 | |||
| 520 239 0 100 100 | |||
| 1 0.27 0.5 0.8 0.5 1 0.5 1 0.5 | |||
| Device 13 Plugin -1 | |||
| 226 36 0 0 0 | |||
| 1 40 This uses SSM's ability to feedback data | |||
| Device 14 Plugin -1 | |||
| 198 49 0 0 0 | |||
| 1 27 from one plugin to another. | |||
| Device 15 Plugin -1 | |||
| 208 200 0 0 0 | |||
| 1 37 This is where the signal is fed back. | |||
| Device 16 Plugin -1 | |||
| 232 63 0 0 0 | |||
| 1 41 Feedback generates quite a chaotic sound, | |||
| Device 17 Plugin -1 | |||
| 221 76 0 0 0 | |||
| 1 36 try changing some of the parameters. | |||
| Device 18 Plugin 23 | |||
| 200 109 1 95 47 | |||
| 1 0 -3 0.158165 1 | |||
| Device 19 Plugin 23 | |||
| 491 108 1 92 274 | |||
| 1 0 -1 0.202252 1 | |||
| 10 | |||
| 7 4 0 2 1 0 | |||
| 2 1 0 8 5 0 | |||
| 4 2 0 5 3 0 | |||
| 12 6 0 0 0 0 | |||
| 12 6 1 0 0 1 | |||
| 5 3 0 12 6 0 | |||
| 18 12 0 7 4 0 | |||
| 8 5 0 19 13 0 | |||
| 19 13 0 4 2 0 | |||
| 4 2 1 18 12 0 | |||
| @@ -0,0 +1,121 @@ | |||
| SpiralSynthModular File Ver 3 | |||
| 134 396 750 484 601 192 724 420 | |||
| SectionList | |||
| 21 | |||
| Device 0 Plugin 4 | |||
| 443 77 1 84 7 | |||
| 1 2 0 1.47687 0 0 0 1 | |||
| Device 1 Plugin 4 | |||
| 445 11 1 84 119 | |||
| 1 2 -1 0.960617 0 0 1.17928e-38 1 | |||
| Device 2 Plugin 4 | |||
| 442 144 1 84 232 | |||
| 1 2 0 0.733381 0.23 0 2.2772e-38 1 | |||
| Device 3 Plugin 4 | |||
| 442 212 1 84 345 | |||
| 1 2 0 0.983196 0.87 0 0 1 | |||
| Device 4 Plugin 8 | |||
| 729 107 0 100 100 | |||
| 1 1 0.5 1 0.5 1 0.5 1 0.5 | |||
| Device 5 Plugin 7 | |||
| 593 106 0 100 100 | |||
| 1 1 1 1 1 | |||
| Device 6 Plugin 13 | |||
| 662 107 1 539 157 | |||
| 1 0.0943 0.07142 | |||
| Device 8 Plugin 0 | |||
| 799 105 0 100 100 | |||
| Device 9 Plugin 2 | |||
| 157 127 0 100 100 | |||
| 2 0 0 0 | |||
| Device 10 Plugin 6 | |||
| 282 118 0 0 0 | |||
| Device 13 Plugin 6 | |||
| 202 241 0 0 0 | |||
| Device 14 Plugin 5 | |||
| 442 281 1 529 22 | |||
| 1 0.3844 0.1156 0.91 2.1609 0.5 0.01 | |||
| Device 15 Plugin 6 | |||
| 282 186 0 0 0 | |||
| Device 18 Plugin 5 | |||
| 513 214 1 331 345 | |||
| 1 0.8281 3.2761 0 0 0.5 0.01 | |||
| Device 19 Plugin 5 | |||
| 513 145 1 331 234 | |||
| 1 0.6241 0.3249 0 0 0.5 0.01 | |||
| Device 20 Plugin 5 | |||
| 512 79 1 330 122 | |||
| 1 0.7225 1.8496 0 1 0.5 0.01 | |||
| Device 21 Plugin 5 | |||
| 514 11 1 332 9 | |||
| 1 0.0529 2.6896 0 0 0.5 0.01 | |||
| Device 22 Plugin 7 | |||
| 512 284 1 417 208 | |||
| 1 1.47 0.07 1 1 | |||
| Device 24 Plugin -1 | |||
| 216 36 0 0 0 | |||
| 1 42 A fairly complicated synth, 4 oscillators, | |||
| Device 25 Plugin -1 | |||
| 248 48 0 0 0 | |||
| 1 53 with an extra envelope and LFO modulating the filter. | |||
| Device 26 Plugin 23 | |||
| 446 347 1 486 344 | |||
| 1 0 0 0.457092 1 | |||
| 27 | |||
| 5 5 0 6 6 0 | |||
| 4 4 0 8 7 0 | |||
| 4 4 1 8 7 1 | |||
| 9 8 0 10 9 0 | |||
| 9 8 1 13 10 0 | |||
| 6 6 0 4 4 0 | |||
| 1 1 0 21 16 1 | |||
| 0 0 0 20 15 1 | |||
| 2 2 0 19 14 1 | |||
| 3 3 0 18 13 1 | |||
| 13 10 0 15 12 0 | |||
| 21 16 1 5 5 0 | |||
| 20 15 1 5 5 1 | |||
| 19 14 1 5 5 2 | |||
| 18 13 1 5 5 3 | |||
| 14 11 0 22 17 0 | |||
| 13 10 1 14 11 0 | |||
| 22 17 0 6 6 1 | |||
| 15 12 0 21 16 0 | |||
| 15 12 1 20 15 0 | |||
| 15 12 2 19 14 0 | |||
| 15 12 3 18 13 0 | |||
| 10 9 0 1 1 0 | |||
| 10 9 1 0 0 0 | |||
| 10 9 2 2 2 0 | |||
| 10 9 3 3 3 0 | |||
| 26 20 0 22 17 1 | |||
| @@ -0,0 +1,96 @@ | |||
| SpiralSynthModular File Ver 3 | |||
| 283 72 724 482 284 586 724 420 | |||
| SectionList | |||
| 16 | |||
| Device 0 Plugin 86 | |||
| 279 121 0 0 0 | |||
| Device 1 Plugin 2 | |||
| 205 117 0 36 100 | |||
| 2 0 0 0 | |||
| Device 2 Plugin 23 | |||
| 372 242 1 97 350 | |||
| 1 0 0 1 1 | |||
| Device 3 Plugin 23 | |||
| 373 51 1 98 15 | |||
| 1 0 0 1 1 | |||
| Device 4 Plugin 23 | |||
| 372 114 1 97 127 | |||
| 1 0 0 1 1 | |||
| Device 5 Plugin 23 | |||
| 373 179 1 97 238 | |||
| 1 0 0 1 1 | |||
| Device 6 Plugin 5 | |||
| 439 245 1 344 349 | |||
| 1 0 0.5 1 1 0.5 0.01 | |||
| Device 7 Plugin 5 | |||
| 439 181 1 344 237 | |||
| 1 0 0.5 1 1 0.5 0.01 | |||
| Device 8 Plugin 5 | |||
| 439 115 1 344 126 | |||
| 1 0 0.5 1 1 0.5 0.01 | |||
| Device 9 Plugin 5 | |||
| 441 52 1 344 15 | |||
| 1 0 0.5 1 1 0.5 0.01 | |||
| Device 10 Plugin 8 | |||
| 515 125 1 491 147 | |||
| 1 1 0.5 1 0.5 1 0.5 1 0.5 | |||
| Device 11 Plugin 0 | |||
| 580 139 0 36 100 | |||
| Device 12 Plugin -1 | |||
| 227 29 0 0 0 | |||
| 1 48 This patch uses the distributor plugin to create | |||
| Device 13 Plugin -1 | |||
| 215 44 0 0 0 | |||
| 1 24 a polyphonic synthesizer | |||
| Device 15 Plugin -1 | |||
| 225 301 0 0 0 | |||
| 1 46 The distributor sends each note recieved to a | |||
| Device 18 Plugin -1 | |||
| 237 317 0 0 0 | |||
| 1 51 different identical wavetable/envelope synth voice. | |||
| 20 | |||
| 1 1 0 0 0 0 | |||
| 1 1 1 0 0 1 | |||
| 10 10 0 11 11 0 | |||
| 10 10 1 11 11 1 | |||
| 0 0 0 3 3 0 | |||
| 0 0 2 4 4 0 | |||
| 0 0 4 5 5 0 | |||
| 0 0 6 2 2 0 | |||
| 3 3 0 9 9 1 | |||
| 4 4 0 8 8 1 | |||
| 5 5 0 7 7 1 | |||
| 2 2 0 6 6 1 | |||
| 0 0 1 9 9 0 | |||
| 0 0 3 8 8 0 | |||
| 0 0 5 7 7 0 | |||
| 0 0 7 6 6 0 | |||
| 6 6 1 10 10 3 | |||
| 9 9 1 10 10 0 | |||
| 8 8 1 10 10 1 | |||
| 7 7 1 10 10 2 | |||
| @@ -0,0 +1,74 @@ | |||
| SpiralSynthModular File Ver 3 | |||
| 259 103 724 420 362 504 906 420 | |||
| SectionList | |||
| 13 | |||
| Device 3 Plugin 0 | |||
| 772 162 0 100 100 | |||
| Device 5 Plugin 5 | |||
| 560 161 1 530 87 | |||
| 1 0.0289 0.3249 0 0 0.51 0 | |||
| Device 7 Plugin 8 | |||
| 702 162 0 100 100 | |||
| 1 1 0.5 1 0.5 1 0.5 1 0.5 | |||
| Device 9 Plugin 14 | |||
| 631 162 1 376 21 | |||
| 1 0.396 0.62 | |||
| Device 12 Plugin 13 | |||
| 491 162 1 380 141 | |||
| 1 1 0.43934 | |||
| Device 20 Plugin 4 | |||
| 217 68 1 100 100 | |||
| 1 3 -3 0.119661 0.5 0 2.98023e-09 1 | |||
| Device 25 Plugin -1 | |||
| 485 102 0 0 0 | |||
| 1 37 A design that generates random events | |||
| Device 26 Plugin 51 | |||
| 327 104 0 0 0 | |||
| Device 27 Plugin 23 | |||
| 152 160 1 99 16 | |||
| 1 0 1 0.0326008 1 | |||
| Device 28 Plugin 6 | |||
| 231 160 0 0 0 | |||
| Device 29 Plugin 23 | |||
| 419 161 1 99 138 | |||
| 1 1 -3 0.933262 1 | |||
| Device 30 Plugin 4 | |||
| 217 251 1 100 100 | |||
| 1 3 0 1 0.5 0 1.70555e-38 1 | |||
| Device 31 Plugin 51 | |||
| 328 218 0 0 0 | |||
| 14 | |||
| 7 2 0 3 0 0 | |||
| 7 2 1 3 0 1 | |||
| 9 3 0 7 2 0 | |||
| 12 4 0 5 1 1 | |||
| 5 1 1 9 3 0 | |||
| 27 8 0 28 9 0 | |||
| 20 5 0 26 7 0 | |||
| 29 10 0 12 4 0 | |||
| 28 9 2 31 12 1 | |||
| 30 11 0 31 12 0 | |||
| 31 12 0 12 4 1 | |||
| 28 9 0 5 1 0 | |||
| 28 9 1 26 7 1 | |||
| 26 7 0 29 10 0 | |||
| @@ -0,0 +1,76 @@ | |||
| SpiralSynthModular File Ver 3 | |||
| 314 503 724 461 238 186 724 420 | |||
| SectionList | |||
| 10 | |||
| Device 0 Plugin 18 | |||
| 159 82 1 111 149 | |||
| 2 0 0.0459186 21 1 0 | |||
| 32 6.6 3 | |||
| 1 1 7 1 13 1 15 1 19 1 23 1 25 1 29 1 30 3 0 4 2 4 6 4 10 4 12 4 14 4 18 4 20 4 24 4 28 4 31 6 4 11 8 11 16 11 22 11 26 11 -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 | |||
| Device 1 Plugin 4 | |||
| 252 59 1 119 34 | |||
| 1 2 1 1 0.21 0 nan 1 | |||
| Device 2 Plugin 0 | |||
| 629 79 0 100 100 | |||
| Device 3 Plugin 8 | |||
| 557 79 0 100 100 | |||
| 1 0.39 0 0.36 1 1 0.5 1 0.5 | |||
| Device 4 Plugin 14 | |||
| 472 51 0 100 100 | |||
| 1 0.321 0.31 | |||
| Device 5 Plugin 13 | |||
| 330 83 1 382 35 | |||
| 1 0 0.37002 | |||
| Device 7 Plugin 5 | |||
| 252 128 1 512 36 | |||
| 1 0.0121 0.16 0 0 0.92 0 | |||
| Device 8 Plugin 6 | |||
| 403 83 0 0 0 | |||
| Device 9 Plugin 14 | |||
| 473 119 0 100 100 | |||
| 1 0.34 0.31 | |||
| Device 11 Plugin -1 | |||
| 396 224 0 0 0 | |||
| 1 51 Using the Matrix plugin to create a robotic melody. | |||
| 11 | |||
| 0 0 0 1 1 0 | |||
| 3 3 0 2 2 0 | |||
| 3 3 1 2 2 1 | |||
| 1 1 0 5 5 0 | |||
| 0 0 1 7 6 0 | |||
| 7 6 0 5 5 1 | |||
| 5 5 0 8 7 0 | |||
| 8 7 0 4 4 0 | |||
| 8 7 1 9 8 0 | |||
| 9 8 0 3 3 1 | |||
| 4 4 0 3 3 0 | |||
| @@ -0,0 +1,109 @@ | |||
| SpiralSynthModular File Ver 3 | |||
| 129 183 990 413 500 456 724 420 | |||
| SectionList | |||
| 19 | |||
| Device 0 Plugin 2 | |||
| 144 177 0 103 22 | |||
| 2 0 0 0 | |||
| Device 1 Plugin 4 | |||
| 377 215 0 101 247 | |||
| 1 2 -1 1 0 0 0 1 | |||
| Device 2 Plugin 4 | |||
| 375 147 0 103 134 | |||
| 1 2 0 0.992771 0 0 0 1 | |||
| Device 3 Plugin 4 | |||
| 375 79 0 103 20 | |||
| 1 2 1 1 0.5 0 0 1 | |||
| Device 4 Plugin 6 | |||
| 306 81 0 0 0 | |||
| Device 6 Plugin 7 | |||
| 519 149 0 500 124 | |||
| 1 0.77 0.67 0.31 1 | |||
| Device 7 Plugin 13 | |||
| 591 148 0 495 11 | |||
| 1 0.6981 0.34483 | |||
| Device 8 Plugin 5 | |||
| 446 215 0 350 248 | |||
| 1 0 0.9216 0.45 1 0.42 0.01 | |||
| Device 9 Plugin 5 | |||
| 447 147 0 350 134 | |||
| 1 0 0.3844 0.08 1 0.5 0.01 | |||
| Device 10 Plugin 5 | |||
| 447 80 0 351 19 | |||
| 1 0 0.9216 1 1.4161 0.28 0.01 | |||
| Device 11 Plugin 6 | |||
| 249 178 0 0 0 | |||
| Device 13 Plugin 5 | |||
| 517 213 0 604 130 | |||
| 1 0.9216 0.2601 0 3.0625 0.6 0.01 | |||
| Device 15 Plugin 14 | |||
| 662 149 0 618 11 | |||
| 1 0.377 0.39 | |||
| Device 17 Plugin 8 | |||
| 804 151 0 103 22 | |||
| 1 1 0.5 1 0.5 1 0.5 1 0.5 | |||
| Device 18 Plugin 0 | |||
| 876 149 0 751 11 | |||
| Device 19 Plugin 4 | |||
| 305 12 0 720 256 | |||
| 1 2 -3 0.0167674 0.5 0 0 1 | |||
| Device 20 Plugin 1 | |||
| 733 150 0 496 252 | |||
| Device 21 Plugin 20 | |||
| 234 83 0 103 22 | |||
| 1 0.114 0.151 | |||
| Device 22 Plugin -1 | |||
| 367 282 0 0 0 | |||
| 1 63 SpiralSynth, with a moog filter. (and stuck in monophonic mode) | |||
| 24 | |||
| 4 4 0 3 3 0 | |||
| 0 0 1 11 10 0 | |||
| 3 3 0 10 9 1 | |||
| 2 2 0 9 8 1 | |||
| 1 1 0 8 7 1 | |||
| 8 7 1 6 5 2 | |||
| 9 8 1 6 5 1 | |||
| 10 9 1 6 5 0 | |||
| 6 5 0 7 6 0 | |||
| 13 11 0 7 6 1 | |||
| 7 6 0 15 12 0 | |||
| 17 13 0 18 14 0 | |||
| 17 13 1 18 14 1 | |||
| 19 15 0 3 3 1 | |||
| 15 12 0 20 16 0 | |||
| 20 16 0 17 13 0 | |||
| 21 17 0 4 4 0 | |||
| 0 0 0 21 17 0 | |||
| 4 4 1 2 2 0 | |||
| 4 4 2 1 1 0 | |||
| 11 10 0 10 9 0 | |||
| 11 10 1 9 8 0 | |||
| 11 10 2 8 7 0 | |||
| 11 10 3 13 11 0 | |||
| @@ -0,0 +1,205 @@ | |||
| SpiralSynthModular File Ver 3 | |||
| 288 90 724 420 291 544 724 420 | |||
| SectionList | |||
| 40 | |||
| Device 0 Plugin -1 | |||
| 371 24 0 0 0 | |||
| 1 36 Tutorial 1 - First principles of SSM | |||
| Device 1 Plugin -1 | |||
| 371 40 0 0 0 | |||
| 1 90 This is a comment, click somewhere in the middle of me to move me, right click to edit me. | |||
| Device 2 Plugin 0 | |||
| 541 115 1 493 101 | |||
| Device 3 Plugin 23 | |||
| 216 115 1 178 106 | |||
| 1 0 0 1 1 | |||
| Device 4 Plugin -1 | |||
| 230 81 0 0 0 | |||
| 1 31 The simplest noisemaking layout | |||
| Device 5 Plugin -1 | |||
| 230 81 0 0 0 | |||
| 1 31 The simplest noisemaking layout | |||
| Device 6 Plugin -1 | |||
| 254 93 0 0 0 | |||
| 1 41 A sinewave generating wavetable plugin... | |||
| Device 7 Plugin -1 | |||
| 537 93 0 0 0 | |||
| 1 18 ... and an output. | |||
| Device 15 Plugin -1 | |||
| 222 184 0 0 0 | |||
| 1 36 Change the frequency and wave shape. | |||
| Device 16 Plugin -1 | |||
| 540 176 0 0 0 | |||
| 1 40 This outputs the sound to the soundcard. | |||
| Device 17 Plugin -1 | |||
| 534 189 0 0 0 | |||
| 1 55 You can change the volume, or record the sound to disk. | |||
| Device 18 Plugin -1 | |||
| 374 133 0 0 0 | |||
| 1 41 This connects the output of the wavetable | |||
| Device 21 Plugin -1 | |||
| 374 133 0 0 0 | |||
| 1 41 This connects the output of the wavetable | |||
| Device 22 Plugin -1 | |||
| 370 144 0 0 0 | |||
| 1 38 To the input of the OSS output plugin. | |||
| Device 23 Plugin -1 | |||
| 373 114 0 0 0 | |||
| 1 51 Create/Delete connections by clicking on the ports. | |||
| Device 24 Plugin 2 | |||
| 198 286 0 158 214 | |||
| 2 0 0 0 | |||
| Device 26 Plugin -1 | |||
| 258 295 0 0 0 | |||
| 1 9 <-------- | |||
| Device 27 Plugin -1 | |||
| 165 65 0 0 0 | |||
| 1 3 (1) | |||
| Device 28 Plugin -1 | |||
| 166 250 0 0 0 | |||
| 1 3 (2) | |||
| Device 29 Plugin -1 | |||
| 389 288 0 0 0 | |||
| 1 44 To get this to work, click on this port, and | |||
| Device 30 Plugin -1 | |||
| 400 301 0 0 0 | |||
| 1 45 then on the WaveTable's one free input above. | |||
| Device 31 Plugin -1 | |||
| 266 264 0 0 0 | |||
| 1 44 Controlling the sound with MIDI/PC keyboard. | |||
| Device 32 Plugin -1 | |||
| 389 337 0 0 0 | |||
| 1 50 To change the pitch of the tone, press keys in the | |||
| Device 35 Plugin -1 | |||
| 389 362 0 0 0 | |||
| 1 51 to have midi, just bash those black and white keys. | |||
| Device 37 Plugin -1 | |||
| 396 226 0 0 0 | |||
| 1 103 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | |||
| Device 38 Plugin 5 | |||
| 401 470 1 313 235 | |||
| 1 0.0529 0.8281 0 0 0.5 0.01 | |||
| Device 39 Plugin -1 | |||
| 386 394 0 0 0 | |||
| 1 103 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: | |||
| Device 40 Plugin -1 | |||
| 168 421 0 0 0 | |||
| 1 3 (3) | |||
| Device 41 Plugin -1 | |||
| 248 435 0 0 0 | |||
| 1 36 Using an envelope to shape the sound | |||
| Device 42 Plugin -1 | |||
| 242 491 0 0 0 | |||
| 1 47 Connect this to the WaveTable's output -------> | |||
| Device 43 Plugin -1 | |||
| 270 466 0 0 0 | |||
| 1 33 Connect this to the second output | |||
| Device 44 Plugin -1 | |||
| 277 478 0 0 0 | |||
| 1 33 down on the Midi plugin. -------> | |||
| Device 45 Plugin -1 | |||
| 518 488 0 0 0 | |||
| 1 34 <------ Connect this to one of the | |||
| Device 46 Plugin -1 | |||
| 529 501 0 0 0 | |||
| 1 20 OSS plugin's inputs. | |||
| Device 47 Plugin -1 | |||
| 398 547 0 0 0 | |||
| 1 65 The layout will now look a little messy, but should now cause the | |||
| Device 48 Plugin -1 | |||
| 405 560 0 0 0 | |||
| 1 67 sound to appear and then slowly die away after a note is triggered. | |||
| Device 49 Plugin -1 | |||
| 420 573 0 0 0 | |||
| 1 74 Try changing the [A]ttack [D]ecay [S]ustain and [R]elease of the envelope. | |||
| Device 51 Plugin -1 | |||
| 325 447 0 0 0 | |||
| 1 73 Click on the WaveTable's output port, so the first connection is deleted. | |||
| Device 52 Plugin -1 | |||
| 394 532 0 0 0 | |||
| 1 55 Now hit a key. (In the midi plugin window if necessary) | |||
| Device 53 Plugin -1 | |||
| 387 349 0 0 0 | |||
| 1 47 main window on your PC keyboard, or if you are | |||
| 1 | |||
| 3 3 0 2 2 0 | |||
| @@ -0,0 +1,133 @@ | |||
| SpiralSynthModular File Ver 3 | |||
| 288 90 724 420 292 545 724 420 | |||
| SectionList | |||
| 25 | |||
| Device 2 Plugin 0 | |||
| 631 196 1 539 111 | |||
| Device 3 Plugin 23 | |||
| 236 103 1 104 120 | |||
| 1 0 0 1 1 | |||
| Device 24 Plugin 2 | |||
| 171 176 0 100 100 | |||
| 2 0 0 0 | |||
| Device 38 Plugin 5 | |||
| 446 190 1 374 121 | |||
| 1 0.0529 0.8281 0 0 0.5 0.01 | |||
| Device 53 Plugin 1 | |||
| 312 186 0 100 100 | |||
| Device 55 Plugin 1 | |||
| 382 103 0 100 100 | |||
| Device 56 Plugin 1 | |||
| 512 104 0 100 100 | |||
| Device 58 Plugin -1 | |||
| 372 -32 0 0 0 | |||
| 1 32 Tutorial 2 - CV's and Audio data | |||
| Device 59 Plugin -1 | |||
| 371 -16 0 0 0 | |||
| 1 107 This is a closer look at what is going on in tutorial 1. It's exactly the same design, but with some scopes | |||
| Device 60 Plugin -1 | |||
| 377 -2 0 0 0 | |||
| 1 60 to see what is beaing passed through the network of plugins. | |||
| Device 61 Plugin -1 | |||
| 378 88 0 0 0 | |||
| 1 7 Scope 1 | |||
| Device 62 Plugin -1 | |||
| 307 170 0 0 0 | |||
| 1 7 Scope 2 | |||
| Device 63 Plugin -1 | |||
| 506 89 0 0 0 | |||
| 1 7 Scope 3 | |||
| Device 64 Plugin -1 | |||
| 390 21 0 0 0 | |||
| 1 113 All data in SSM is treated the same, anything can be plugged into anything else. However, it is important to know | |||
| Device 65 Plugin -1 | |||
| 199 33 0 0 0 | |||
| 1 32 the different uses of this data. | |||
| Device 66 Plugin -1 | |||
| 367 58 0 0 0 | |||
| 1 104 Open Scope 1, you will see the output of the WaveTable oscillator, which is used here to generate audio. | |||
| Device 67 Plugin -1 | |||
| 315 270 0 0 0 | |||
| 1 76 Now open scope 2, and press a key. What you see is the value going from zero | |||
| Device 68 Plugin -1 | |||
| 322 284 0 0 0 | |||
| 1 85 in the center, to a high value (if using a midi keyboard - the velocity of the note). | |||
| Device 69 Plugin -1 | |||
| 389 298 0 0 0 | |||
| 1 109 This data is CV, or Control Voltage data (the name comes from old synths that acually used votages to control | |||
| Device 70 Plugin -1 | |||
| 388 313 0 0 0 | |||
| 1 112 bits of the synth.) You wouldn't actually want to output this data to the speaker, but you use it to control the | |||
| Device 71 Plugin -1 | |||
| 168 327 0 0 0 | |||
| 1 14 other plugins. | |||
| Device 72 Plugin -1 | |||
| 395 341 0 0 0 | |||
| 1 115 If you open Scope 3, you'll see the amount the envelope is amplifying the WaveTable's signal, triggered by the midi | |||
| Device 73 Plugin -1 | |||
| 314 356 0 0 0 | |||
| 1 80 Look at scope 4 (the actual output), and all together they make it much clearer. | |||
| Device 74 Plugin 1 | |||
| 543 196 0 100 100 | |||
| Device 75 Plugin -1 | |||
| 537 181 0 0 0 | |||
| 1 7 Scope 4 | |||
| 8 | |||
| 24 2 0 3 1 0 | |||
| 24 2 1 53 4 0 | |||
| 53 4 0 38 3 0 | |||
| 3 1 0 55 5 0 | |||
| 55 5 0 38 3 1 | |||
| 38 3 0 56 6 0 | |||
| 38 3 1 74 23 0 | |||
| 74 23 0 2 0 0 | |||
| @@ -0,0 +1,129 @@ | |||
| SpiralSynthModular File Ver 3 | |||
| 401 127 724 420 402 579 724 420 | |||
| SectionList | |||
| 24 | |||
| Device 0 Plugin 23 | |||
| 263 170 1 99 99 | |||
| 1 3 0 1 1 | |||
| Device 1 Plugin 2 | |||
| 175 194 0 115 69 | |||
| 2 0 0 0 | |||
| Device 2 Plugin 5 | |||
| 264 238 1 335 227 | |||
| 1 0.0289 0.16 0.08 1.0404 0.58 0.01 | |||
| Device 3 Plugin 13 | |||
| 379 171 1 349 100 | |||
| 1 0 0.37137 | |||
| Device 4 Plugin 0 | |||
| 628 171 0 593 69 | |||
| Device 6 Plugin 1 | |||
| 484 171 1 472 93 | |||
| Device 7 Plugin -1 | |||
| 382 10 0 0 0 | |||
| 1 17 Tutorial design 2 | |||
| Device 8 Plugin -1 | |||
| 381 26 0 0 0 | |||
| 1 19 A subtractive synth | |||
| Device 9 Plugin -1 | |||
| 170 176 0 0 0 | |||
| 1 15 Note in signals | |||
| Device 11 Plugin -1 | |||
| 260 152 0 0 0 | |||
| 1 15 Sound generator | |||
| Device 12 Plugin -1 | |||
| 263 304 0 0 0 | |||
| 1 43 Generates the signal to control the filter. | |||
| Device 13 Plugin -1 | |||
| 377 235 0 0 0 | |||
| 1 23 Filters the frequencies | |||
| Device 14 Plugin -1 | |||
| 389 249 0 0 0 | |||
| 1 26 from the WaveTable plugin, | |||
| Device 15 Plugin -1 | |||
| 401 262 0 0 0 | |||
| 1 32 the envelope passes the value to | |||
| Device 16 Plugin -1 | |||
| 420 275 0 0 0 | |||
| 1 43 control the cutoff frequency of the filter. | |||
| Device 17 Plugin -1 | |||
| 332 50 0 0 0 | |||
| 1 73 This synth uses what is known as subtractive synthesis to produce sounds. | |||
| Device 19 Plugin -1 | |||
| 333 65 0 0 0 | |||
| 1 81 The heart of a subtractive synths is the filter, as it is what the filter removes | |||
| Device 20 Plugin -1 | |||
| 236 80 0 0 0 | |||
| 1 32 that dictates the sound produced | |||
| Device 21 Plugin -1 | |||
| 348 95 0 0 0 | |||
| 1 81 The waveshape the oscillator uses should contain as many frequencies as possible, | |||
| Device 22 Plugin -1 | |||
| 348 110 0 0 0 | |||
| 1 86 (in this case a triangle wave) so that the filter has more of an effect on it's sound. | |||
| Device 25 Plugin 6 | |||
| 561 171 0 0 0 | |||
| Device 28 Plugin -1 | |||
| 339 352 0 0 0 | |||
| 1 79 This is how many of the first analogue synths worked, such as the moogs - hence | |||
| Device 29 Plugin -1 | |||
| 223 366 0 0 0 | |||
| 1 32 the use of the moog filter here. | |||
| Device 30 Plugin -1 | |||
| 238 317 0 0 0 | |||
| 1 29 Triggered by keypress events. | |||
| 8 | |||
| 1 1 0 0 0 0 | |||
| 1 1 1 2 2 0 | |||
| 2 2 0 3 3 1 | |||
| 0 0 0 3 3 0 | |||
| 3 3 0 6 5 0 | |||
| 6 5 0 25 20 0 | |||
| 25 20 0 4 4 0 | |||
| 25 20 1 4 4 1 | |||
| @@ -0,0 +1,110 @@ | |||
| SpiralSynthModular File Ver 3 | |||
| 401 127 724 420 402 579 724 420 | |||
| SectionList | |||
| 20 | |||
| Device 0 Plugin 1 | |||
| 495 175 1 477 128 | |||
| Device 1 Plugin 0 | |||
| 629 174 0 100 100 | |||
| Device 2 Plugin 6 | |||
| 562 175 0 0 0 | |||
| Device 3 Plugin 23 | |||
| 219 175 1 95 14 | |||
| 1 0 2 0.421244 1 | |||
| Device 4 Plugin 23 | |||
| 357 175 1 90 259 | |||
| 1 0 -3 1 1 | |||
| Device 5 Plugin 5 | |||
| 289 165 1 143 134 | |||
| 1 0 0.3249 0.96 1 1 0.01 | |||
| Device 6 Plugin 5 | |||
| 426 165 1 328 136 | |||
| 1 0.0289 0.4624 0.26 1 0.5 0.01 | |||
| Device 7 Plugin 2 | |||
| 149 175 0 100 100 | |||
| 2 0 0 0 | |||
| Device 8 Plugin 6 | |||
| 200 93 0 0 0 | |||
| Device 9 Plugin -1 | |||
| 362 11 0 0 0 | |||
| 1 31 Tutorial 3 - Additive Synthesis | |||
| Device 10 Plugin -1 | |||
| 362 30 0 0 0 | |||
| 1 94 Additive synthesis works on the principle of building up sounds by combining simpler elements. | |||
| Device 11 Plugin -1 | |||
| 357 44 0 0 0 | |||
| 1 95 In this case, two oscillators are used, one modulating the pitch of the other. This is known as | |||
| Device 14 Plugin -1 | |||
| 284 241 0 0 0 | |||
| 1 10 Envelope 1 | |||
| Device 15 Plugin -1 | |||
| 422 242 0 0 0 | |||
| 1 10 Envelope 2 | |||
| Device 16 Plugin -1 | |||
| 347 324 0 0 0 | |||
| 1 80 Envelope 1 controls the amount of modulation that the second ocillator recieves, | |||
| Device 17 Plugin -1 | |||
| 312 338 0 0 0 | |||
| 1 60 The second envelope shapes the amplitude of the final sound. | |||
| Device 18 Plugin -1 | |||
| 212 58 0 0 0 | |||
| 1 28 frequency modulation, or FM. | |||
| Device 19 Plugin -1 | |||
| 337 72 0 0 0 | |||
| 1 84 The first digital synths used this technique, such as the DX range of Yamaha synths. | |||
| Device 22 Plugin -1 | |||
| 216 246 0 0 0 | |||
| 1 12 Oscillator 1 | |||
| Device 23 Plugin -1 | |||
| 352 243 0 0 0 | |||
| 1 12 Oscillator 2 | |||
| 11 | |||
| 2 2 0 1 1 0 | |||
| 2 2 1 1 1 1 | |||
| 0 0 0 2 2 0 | |||
| 3 3 0 5 5 1 | |||
| 4 4 0 6 6 1 | |||
| 6 6 1 0 0 0 | |||
| 7 7 1 8 8 0 | |||
| 8 8 1 5 5 0 | |||
| 8 8 0 6 6 0 | |||
| 7 7 0 3 3 0 | |||
| 5 5 1 4 4 0 | |||
| @@ -0,0 +1,99 @@ | |||
| SpiralSynthModular File Ver 3 | |||
| 225 58 903 467 306 558 724 420 | |||
| SectionList | |||
| 12 | |||
| Device 1 Plugin 0 | |||
| 556 127 0 100 100 | |||
| Device 2 Plugin 18 | |||
| 230 98 1 86 49 | |||
| 2 0 0.127474 17 1 0 | |||
| 32 5.4 0 | |||
| 0 0 2 0 4 0 6 0 8 0 10 0 12 0 14 0 16 0 18 0 20 0 22 0 24 0 26 0 28 0 30 0 4 1 12 1 20 1 28 1 0 2 8 2 16 2 24 2 -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 | |||
| Device 3 Plugin 16 | |||
| 316 97 1 634 10 | |||
| 2 1 1 4 None 0 | |||
| 1 1 4 None 1 | |||
| 1 1 4 None 2 | |||
| 1 1 4 None 3 | |||
| 1 1 4 None 4 | |||
| 1 1 4 None 5 | |||
| 1 1 4 None 6 | |||
| 1 1 4 None 7 | |||
| Device 4 Plugin 6 | |||
| 481 128 0 0 0 | |||
| Device 5 Plugin -1 | |||
| 358 21 0 0 0 | |||
| 1 31 Tutorial 4 - Matrix and Sampler | |||
| Device 6 Plugin -1 | |||
| 364 36 0 0 0 | |||
| 1 99 This design won't produce sound by itself, you'll have to load some samples into the sampler first. | |||
| Device 7 Plugin -1 | |||
| 342 50 0 0 0 | |||
| 1 83 Open the sampler plugin window and load up samples (wav format) from your hardrive. | |||
| Device 8 Plugin -1 | |||
| 375 65 0 0 0 | |||
| 1 105 Hihat for the first sample, kickdrum and snare for the others (not that it really matters what they are). | |||
| Device 9 Plugin -1 | |||
| 386 311 0 0 0 | |||
| 1 104 This represents a very common combination of plugins in ssm, the matrix and sampler. This design is used | |||
| Device 10 Plugin -1 | |||
| 361 325 0 0 0 | |||
| 1 92 mainly creating drum loops. Open the matrix and change the trigger notes to change the beat. | |||
| Device 11 Plugin -1 | |||
| 395 339 0 0 0 | |||
| 1 108 If you move your mouse over the two columns of ports on the matrix and sampler, you'll see that the triggers | |||
| Device 12 Plugin -1 | |||
| 256 353 0 0 0 | |||
| 1 49 are connected up to fire the samples off. Simple! | |||
| 11 | |||
| 4 3 0 1 0 0 | |||
| 4 3 1 1 0 1 | |||
| 3 2 0 4 3 0 | |||
| 2 1 2 3 2 1 | |||
| 2 1 3 3 2 3 | |||
| 2 1 4 3 2 5 | |||
| 2 1 5 3 2 7 | |||
| 2 1 6 3 2 9 | |||
| 2 1 7 3 2 11 | |||
| 2 1 8 3 2 13 | |||
| 2 1 9 3 2 15 | |||
| @@ -0,0 +1,101 @@ | |||
| SpiralSynthModular File Ver 3 | |||
| 291 68 724 461 289 564 724 420 | |||
| SectionList | |||
| 15 | |||
| Device 0 Plugin 23 | |||
| 300 144 0 100 100 | |||
| 1 3 0 1 1 | |||
| Device 1 Plugin 2 | |||
| 152 170 0 100 100 | |||
| 2 0 0 0 | |||
| Device 2 Plugin 5 | |||
| 299 208 0 100 100 | |||
| 1 0.0529 0.8281 0.49 0.3844 0.5 0.01 | |||
| Device 3 Plugin 13 | |||
| 367 153 1 350 26 | |||
| 1 0 0.30583 | |||
| Device 4 Plugin 0 | |||
| 628 151 0 100 100 | |||
| Device 6 Plugin 1 | |||
| 498 151 1 105 19 | |||
| Device 25 Plugin 6 | |||
| 563 151 0 0 0 | |||
| Device 31 Plugin 14 | |||
| 432 152 1 491 28 | |||
| 1 0.321 0.56 | |||
| Device 32 Plugin 17 | |||
| 222 162 1 107 147 | |||
| 2 1.73101 8.82 1 1 0 0 EventMap 1 2 0 10 50 1 8.82 86 0 100 8 19 5.48 63 0.1 1 5.96 66 0.1 1 6.4 70 0.14 1 6.92 63 0.14 1 7.46 66 0.14 1 7.94 70 0.2 1 0.1 63 0.14 1 0.46 66 0.1 1 0.86 70 0.1 1 1.5 63 0.2 1 2.14 66 0.14 1 2.58 70 0.2 1 3.74 63 0.1 1 4.02 66 0.14 1 4.46 70 0.14 1 8.34 39 0.2 1 1.24 39 0.14 1 3 46 0.3 1 4.86 42 0.2 1 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| Device 33 Plugin -1 | |||
| 357 33 0 0 0 | |||
| 1 32 Tutorial 5 - Using the sequencer | |||
| Device 34 Plugin -1 | |||
| 368 58 0 0 0 | |||
| 1 96 This is the same synth design as in tutorial 2, but with a sequencer controlling it's behavoiur. | |||
| Device 35 Plugin -1 | |||
| 364 72 0 0 0 | |||
| 1 93 (and some echo) This sequencer is quite different to the matrix, in that it is much better at | |||
| Device 36 Plugin -1 | |||
| 374 86 0 0 0 | |||
| 1 96 playing back melodies. The sequencer also records input, so keys you press while the midi plugin | |||
| Device 37 Plugin -1 | |||
| 358 100 0 0 0 | |||
| 1 89 is connected, will be played back. Open up the Sequencer plugin and scroll the piano roll | |||
| Device 38 Plugin -1 | |||
| 363 113 0 0 0 | |||
| 1 87 down, you should see the events. These can be moved, deleted or resized with the mouse. | |||
| 11 | |||
| 2 2 0 3 3 1 | |||
| 0 0 0 3 3 0 | |||
| 6 5 0 25 6 0 | |||
| 25 6 0 4 4 0 | |||
| 25 6 1 4 4 1 | |||
| 3 3 0 31 7 0 | |||
| 31 7 0 6 5 0 | |||
| 1 1 0 32 8 2 | |||
| 1 1 1 32 8 3 | |||
| 32 8 0 0 0 0 | |||
| 32 8 1 2 2 0 | |||
| @@ -0,0 +1,125 @@ | |||
| SpiralSynthModular File Ver 3 | |||
| 291 68 724 461 289 564 724 420 | |||
| SectionList | |||
| 19 | |||
| Device 0 Plugin 23 | |||
| 279 186 1 100 100 | |||
| 1 3 1 1 1 | |||
| Device 1 Plugin 2 | |||
| 160 215 0 100 100 | |||
| 2 0 0 0 | |||
| Device 2 Plugin 5 | |||
| 280 251 1 481 220 | |||
| 1 0.0036 0.3844 0 0.1156 0.5 0.01 | |||
| Device 3 Plugin 13 | |||
| 347 187 1 350 100 | |||
| 1 0.3208 0.26683 | |||
| Device 4 Plugin 0 | |||
| 638 187 0 100 100 | |||
| Device 25 Plugin 6 | |||
| 487 157 0 0 0 | |||
| Device 31 Plugin 6 | |||
| 212 144 0 0 0 | |||
| Device 32 Plugin 5 | |||
| 413 144 1 482 101 | |||
| 1 0 0.0784 1 0.2601 0.43 0.01 | |||
| Device 33 Plugin 22 | |||
| 571 187 0 415 148 | |||
| 2 0.714 /usr/local/lib/ladspa/cmt.so freeverb3 8 -1 -1 -1 0 0 0 0 0 1 1 1 1 1 1 1 1 | |||
| Device 34 Plugin 3 | |||
| 435 245 1 95 215 | |||
| 3 6 -0.06 0.78 -0.52 0.5 0.22 0.82 1 | |||
| 6 | |||
| 6 | |||
| Freeze -1 1 0.53 | |||
| 4 | |||
| Room -1 1 0.11 | |||
| 4 | |||
| Damp -1 1 0.76 | |||
| 3 | |||
| Wet -1 1 0.25 | |||
| 3 | |||
| Dry -1 1 0.39 | |||
| 5 | |||
| Width -1 1 0.09 | |||
| Device 35 Plugin -1 | |||
| 374 13 0 0 0 | |||
| 1 33 Tutorial 6 - Using LADSPA Plugins | |||
| Device 36 Plugin -1 | |||
| 375 29 0 0 0 | |||
| 1 71 If you have LADSPA installed, the plugins should be fully connected up. | |||
| Device 37 Plugin -1 | |||
| 377 43 0 0 0 | |||
| 1 36 If not, then this won't work at all. | |||
| Device 38 Plugin -1 | |||
| 566 171 0 0 0 | |||
| 1 10 (FreeVerb) | |||
| Device 40 Plugin -1 | |||
| 370 72 0 0 0 | |||
| 1 82 This shows you how you can set up the CV slider plugin to control a LADSPA plugin. | |||
| Device 41 Plugin -1 | |||
| 380 86 0 0 0 | |||
| 1 91 It's handy to name the sliders according to what they are controlling. Also important is to | |||
| Device 42 Plugin -1 | |||
| 385 99 0 0 0 | |||
| 1 92 tweak the input scales so the plugin behaves correctly. Most plugins set these automatically | |||
| Device 43 Plugin -1 | |||
| 277 113 0 0 0 | |||
| 1 45 as this one does, but you have to be careful. | |||
| Device 44 Plugin -1 | |||
| 387 356 0 0 0 | |||
| 1 112 Open the LADSPA plugin to load other plugins. When a new plugin is selected, all the connections will be broken. | |||
| 18 | |||
| 1 1 0 0 0 0 | |||
| 2 2 0 3 3 1 | |||
| 0 0 0 3 3 0 | |||
| 1 1 1 31 6 0 | |||
| 3 3 0 32 7 1 | |||
| 31 6 0 32 7 0 | |||
| 31 6 1 2 2 0 | |||
| 34 9 0 33 8 2 | |||
| 34 9 1 33 8 3 | |||
| 34 9 2 33 8 4 | |||
| 34 9 3 33 8 5 | |||
| 34 9 4 33 8 6 | |||
| 34 9 5 33 8 7 | |||
| 33 8 0 4 4 0 | |||
| 33 8 1 4 4 1 | |||
| 25 5 0 33 8 0 | |||
| 25 5 1 33 8 1 | |||
| 32 7 1 25 5 0 | |||
| @@ -0,0 +1,324 @@ | |||
| SpiralSynthModular File Ver 3 | |||
| 24 32 1244 544 19 534 1248 481 | |||
| SectionList | |||
| 48 | |||
| Device 3 Plugin 0 | |||
| 1092 304 0 265 123 | |||
| Device 5 Plugin 5 | |||
| 792 123 1 763 66 | |||
| 1 0 0.0529 1 0.16 0.5 0.01 | |||
| Device 7 Plugin 8 | |||
| 1024 304 0 265 123 | |||
| 1 1.52 0.5 1.01 0.5 1.3 0.5 1 0.5 | |||
| Device 9 Plugin 14 | |||
| 927 124 1 1031 63 | |||
| 1 0.321 0.5 | |||
| Device 12 Plugin 13 | |||
| 859 124 1 907 65 | |||
| 1 0.2642 0.21074 | |||
| Device 13 Plugin 18 | |||
| 445 124 0 265 123 | |||
| 2 0 0.0976591 6 1 0 | |||
| 32 6 5 | |||
| 16 0 20 0 21 0 24 0 28 0 0 2 1 2 4 2 5 2 8 2 12 2 17 5 19 5 27 5 29 5 18 12 22 12 23 12 26 12 30 12 2 14 3 14 6 14 10 14 14 14 -1 32 6 5 | |||
| 20 0 22 0 24 0 26 0 28 0 30 0 0 2 2 2 4 2 6 2 8 2 10 2 12 2 14 2 16 2 18 2 17 7 25 12 7 14 15 14 -1 32 6 5 | |||
| 6 0 8 0 10 0 0 2 30 2 2 4 28 4 18 5 4 7 26 7 12 14 16 14 20 14 22 14 24 14 -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 | |||
| Device 17 Plugin 6 | |||
| 589 123 0 0 0 | |||
| Device 20 Plugin 23 | |||
| 654 95 1 513 14 | |||
| 1 2 0 1.01382 1 | |||
| Device 21 Plugin 23 | |||
| 653 164 1 513 129 | |||
| 1 2 0 0.992295 1 | |||
| Device 22 Plugin 7 | |||
| 724 124 0 265 123 | |||
| 1 1 1 1 1 | |||
| Device 23 Plugin 21 | |||
| 366 183 0 265 123 | |||
| 1 8 0 1 0 0 0 0 0 0 0 1 -1 0 0 0 0 0 0 0 -1 0 0 0 0 0 2 0 -1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 -1 0 0 0 0 0 1 0 -1 0 0 0 0 0 2 0 -1 0 0 0 0 0 | |||
| Device 24 Plugin 18 | |||
| 294 174 0 265 123 | |||
| 2 0 0.0976591 6 1 0 | |||
| 32 6 0 | |||
| 31 0 -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 | |||
| Device 25 Plugin 23 | |||
| 591 298 1 95 220 | |||
| 1 2 1 1.00361 1 | |||
| Device 26 Plugin 23 | |||
| 590 362 1 95 333 | |||
| 1 2 -1 1 1 | |||
| Device 27 Plugin 6 | |||
| 519 325 0 0 0 | |||
| Device 28 Plugin 7 | |||
| 664 325 0 265 123 | |||
| 1 1 1 1 1 | |||
| Device 30 Plugin 13 | |||
| 832 309 1 489 278 | |||
| 1 0.4528 0.35798 | |||
| Device 31 Plugin 5 | |||
| 732 325 1 343 278 | |||
| 1 0 0 1 0.2025 0.5 0.01 | |||
| Device 32 Plugin 18 | |||
| 450 325 0 265 123 | |||
| 2 1 0.0860509 6 1 0 | |||
| 32 6 3 | |||
| 4 0 8 0 9 0 10 0 14 0 22 0 23 0 24 0 25 0 26 0 0 2 1 2 2 2 12 2 16 2 17 2 20 2 18 5 30 9 -1 32 6 3 | |||
| 14 0 22 0 23 0 24 0 25 0 26 0 2 2 6 2 10 2 16 2 17 2 20 2 30 2 18 5 -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 32 1 0 | |||
| -1 | |||
| Device 33 Plugin 23 | |||
| 732 391 0 265 123 | |||
| 1 0 0 0.00163394 1 | |||
| Device 34 Plugin 9 | |||
| 802 391 0 265 123 | |||
| 1 0.2642 0 | |||
| Device 35 Plugin 23 | |||
| 755 497 1 762 241 | |||
| 1 2 0 1 1 | |||
| Device 36 Plugin 20 | |||
| 689 497 0 265 123 | |||
| 1 0.16 0.17 | |||
| Device 37 Plugin 17 | |||
| 617 516 0 149 229 | |||
| 2 7.05675 16.45 1 0 0 0 EventMap 1 2 0 10 50 1 16.45 352 0 100 8 10 4.04 74 0.2 1 5.3 77 0.4 1 6.86 79 -6.86 1 0.74 77 0.14 1 1.12 74 0.14 1 2.24 72 0.2 1 3 74 0.2 1 8.92 60 0.2 1 11.8 65 0.3 1 12.92 62 0.14 1 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| EventMap 1 1 0 10 100 1 2 0 0 100 8 0 | |||
| Device 38 Plugin 2 | |||
| 546 539 0 265 123 | |||
| 2 0 0 0 | |||
| Device 39 Plugin 5 | |||
| 824 492 1 1015 352 | |||
| 1 0.0784 0.0289 0.66 1.2769 0.28 0.01 | |||
| Device 40 Plugin 11 | |||
| 893 506 1 839 355 | |||
| 1 1893.56 3.7 0 0 | |||
| Device 41 Plugin -1 | |||
| 637 22 0 0 0 | |||
| 1 32 Tutorial 8 - Advanced Sequencing | |||
| Device 42 Plugin -1 | |||
| 638 37 0 0 0 | |||
| 1 59 This design shows you how to use sequencers to build songs. | |||
| Device 43 Plugin -1 | |||
| 633 47 0 0 0 | |||
| 1 59 Once the oscillators have settled onto the right frequency, | |||
| Device 44 Plugin -1 | |||
| 641 58 0 0 0 | |||
| 1 49 you should hear three patterns, playing together. | |||
| Device 45 Plugin -1 | |||
| 302 123 0 0 0 | |||
| 1 45 The SeqSelector is the main controlling part. | |||
| Device 46 Plugin -1 | |||
| 286 138 0 0 0 | |||
| 1 51 It tells the sequencers what part to play and when. | |||
| Device 47 Plugin -1 | |||
| 298 375 0 0 0 | |||
| 1 35 This matrix acts as the main clock. | |||
| Device 48 Plugin -1 | |||
| 306 386 0 0 0 | |||
| 1 39 It's one event triggers the seqselector | |||
| Device 49 Plugin -1 | |||
| 305 397 0 0 0 | |||
| 1 22 to move on a pattern. | |||
| Device 50 Plugin -1 | |||
| 690 634 0 0 0 | |||
| 1 39 This part was recorded from midi notes. | |||
| Device 51 Plugin -1 | |||
| 695 646 0 0 0 | |||
| 1 83 You can see them, if you open the Sequencer plugin window, and scroll around a bit. | |||
| Device 52 Plugin -1 | |||
| 728 257 0 0 0 | |||
| 1 92 Open the SeqSelector to see the patterns it's sending to the two matrixes and the sequencer. | |||
| Device 53 Plugin -1 | |||
| 698 656 0 0 0 | |||
| 1 77 The midi plugin is still connected, so it'll still record any incoming notes. | |||
| Device 55 Plugin -1 | |||
| 637 69 0 0 0 | |||
| 1 54 (The sequencer also takes some time to get in rhythm.) | |||
| Device 56 Plugin 7 | |||
| 519 112 0 265 123 | |||
| 1 0.46 1 1 1 | |||
| Device 57 Plugin 23 | |||
| 318 51 1 264 13 | |||
| 1 0 -1 1.3716 1 | |||
| Device 58 Plugin 9 | |||
| 453 51 0 265 123 | |||
| 1 -0.0377 0 | |||
| Device 59 Plugin 9 | |||
| 385 51 0 265 123 | |||
| 1 0.0377 0 | |||
| Device 60 Plugin 5 | |||
| 824 559 1 1013 238 | |||
| 1 0.1156 0.2025 1 1 0.23 0.01 | |||
| Device 61 Plugin 6 | |||
| 691 561 0 0 0 | |||
| Device 62 Plugin 14 | |||
| 960 447 0 265 123 | |||
| 1 0.415 0.58 | |||
| 43 | |||
| 7 2 0 3 0 0 | |||
| 7 2 1 3 0 1 | |||
| 9 3 0 7 2 0 | |||
| 13 5 1 5 1 0 | |||
| 17 6 0 20 7 0 | |||
| 17 6 1 21 8 0 | |||
| 21 8 0 22 9 1 | |||
| 20 7 0 22 9 0 | |||
| 24 11 1 23 10 0 | |||
| 23 10 0 13 5 0 | |||
| 23 10 1 32 18 0 | |||
| 32 18 0 27 14 0 | |||
| 27 14 0 25 12 0 | |||
| 27 14 1 26 13 0 | |||
| 25 12 0 28 15 0 | |||
| 26 13 0 28 15 1 | |||
| 32 18 1 31 17 0 | |||
| 28 15 0 31 17 1 | |||
| 31 17 1 30 16 0 | |||
| 30 16 0 7 2 1 | |||
| 33 19 0 34 20 0 | |||
| 34 20 0 30 16 1 | |||
| 36 22 0 35 21 0 | |||
| 38 24 0 37 23 2 | |||
| 38 24 1 37 23 3 | |||
| 37 23 0 36 22 0 | |||
| 23 10 2 37 23 0 | |||
| 35 21 0 39 25 1 | |||
| 39 25 1 40 26 0 | |||
| 22 9 0 5 1 1 | |||
| 5 1 1 12 4 0 | |||
| 12 4 0 9 3 0 | |||
| 58 43 0 56 41 0 | |||
| 13 5 0 56 41 1 | |||
| 56 41 0 17 6 0 | |||
| 57 42 0 59 44 0 | |||
| 59 44 0 58 43 0 | |||
| 37 23 1 61 46 0 | |||
| 61 46 0 39 25 0 | |||
| 61 46 1 60 45 0 | |||
| 60 45 0 40 26 1 | |||
| 40 26 0 62 47 0 | |||
| 62 47 0 7 2 2 | |||
| @@ -0,0 +1,552 @@ | |||
| /* XPM */ | |||
| static char * SpiralIcon_xpm[] = { | |||
| "64 64 485 2", | |||
| " c None", | |||
| ". c #393354", | |||
| "+ c #292247", | |||
| "@ c #221A41", | |||
| "# c #3B3556", | |||
| "$ c #352E50", | |||
| "% c #2E274B", | |||
| "& c #3A3355", | |||
| "* c #2F274B", | |||
| "= c #706C84", | |||
| "- c #928FA2", | |||
| "; c #C2C0CB", | |||
| "> c #FFFFFF", | |||
| ", c #B0ACBA", | |||
| "' c #322B4E", | |||
| ") c #3F395A", | |||
| "! c #2F284D", | |||
| "~ c #EFEEF1", | |||
| "{ c #8B879B", | |||
| "] c #352E51", | |||
| "^ c #757087", | |||
| "/ c #CBCAD3", | |||
| "( c #DCDAE0", | |||
| "_ c #2F284C", | |||
| ": c #767189", | |||
| "< c #908C9F", | |||
| "[ c #2D264A", | |||
| "} c #726E85", | |||
| "| c #332C4F", | |||
| "1 c #393255", | |||
| "2 c #A9A6B5", | |||
| "3 c #251D43", | |||
| "4 c #261D47", | |||
| "5 c #D0CDD6", | |||
| "6 c #362F52", | |||
| "7 c #1E163D", | |||
| "8 c #21193E", | |||
| "9 c #030404", | |||
| "0 c #373636", | |||
| "a c #403F49", | |||
| "b c #626160", | |||
| "c c #383151", | |||
| "d c #C8C5CE", | |||
| "e c #1D153D", | |||
| "f c #231C42", | |||
| "g c #000000", | |||
| "h c #B0B1B0", | |||
| "i c #C1C1C1", | |||
| "j c #F3F3F0", | |||
| "k c #362D56", | |||
| "l c #40395A", | |||
| "m c #3B3454", | |||
| "n c #241E43", | |||
| "o c #E5E3E7", | |||
| "p c #DCDBE3", | |||
| "q c #C6C6C6", | |||
| "r c #FBFBFB", | |||
| "s c #444444", | |||
| "t c #5D557D", | |||
| "u c #332C50", | |||
| "v c #A6A2B2", | |||
| "w c #A2A0AE", | |||
| "x c #352F52", | |||
| "y c #B7B6C3", | |||
| "z c #252043", | |||
| "A c #3B3458", | |||
| "B c #9E99B2", | |||
| "C c #515050", | |||
| "D c #DFE0DF", | |||
| "E c #403A5B", | |||
| "F c #504B69", | |||
| "G c #ADADAD", | |||
| "H c #D2D2D2", | |||
| "I c #645B84", | |||
| "J c #9792A7", | |||
| "K c #ECEBEE", | |||
| "L c #3F3758", | |||
| "M c #322B4F", | |||
| "N c #C7C6D0", | |||
| "O c #1D143E", | |||
| "P c #8B85A2", | |||
| "Q c #0C0B1A", | |||
| "R c #342C4F", | |||
| "S c #4A4363", | |||
| "T c #262044", | |||
| "U c #AFAFAF", | |||
| "V c #191919", | |||
| "W c #040404", | |||
| "X c #151612", | |||
| "Y c #A8A3B4", | |||
| "Z c #989A93", | |||
| "` c #BABABA", | |||
| " . c #373053", | |||
| ".. c #160E36", | |||
| "+. c #575757", | |||
| "@. c #ACACAC", | |||
| "#. c #333333", | |||
| "$. c #736E86", | |||
| "%. c #CDCDCD", | |||
| "&. c #020202", | |||
| "*. c #9E9CAC", | |||
| "=. c #120A32", | |||
| "-. c #B0B0B0", | |||
| ";. c #C8C8C8", | |||
| ">. c #8D8D8D", | |||
| ",. c #BDBAC6", | |||
| "'. c #3E3959", | |||
| "). c #2E264C", | |||
| "!. c #DEDEE3", | |||
| "~. c #C3C3C3", | |||
| "{. c #919191", | |||
| "]. c #9895A7", | |||
| "^. c #0E062F", | |||
| "/. c #9F9F9F", | |||
| "(. c #D1D1D1", | |||
| "_. c #626262", | |||
| ":. c #3C3556", | |||
| "<. c #271F45", | |||
| "[. c #31294D", | |||
| "}. c #30294D", | |||
| "|. c #383154", | |||
| "1. c #3E3859", | |||
| "2. c #9F9CAD", | |||
| "3. c #8F8F8F", | |||
| "4. c #FFFFFB", | |||
| "5. c #B7B4C5", | |||
| "6. c #150C36", | |||
| "7. c #EBEBED", | |||
| "8. c #2F2F2F", | |||
| "9. c #F4F4F4", | |||
| "0. c #2D2D2D", | |||
| "a. c #373736", | |||
| "b. c #9590A3", | |||
| "c. c #2C2449", | |||
| "d. c #6E6981", | |||
| "e. c #938FA1", | |||
| "f. c #848196", | |||
| "g. c #C7C7C7", | |||
| "h. c #B9B7C3", | |||
| "i. c #30284E", | |||
| "j. c #2D2F26", | |||
| "k. c #989997", | |||
| "l. c #C0BDCB", | |||
| "m. c #322A4D", | |||
| "n. c #292246", | |||
| "o. c #251E43", | |||
| "p. c #706A82", | |||
| "q. c #B8B5C1", | |||
| "r. c #CFCED6", | |||
| "s. c #726E86", | |||
| "t. c #E3E3E3", | |||
| "u. c #4B4B4B", | |||
| "v. c #09070F", | |||
| "w. c #40395C", | |||
| "x. c #342D51", | |||
| "y. c #352D53", | |||
| "z. c #645C83", | |||
| "A. c #696188", | |||
| "B. c #383057", | |||
| "C. c #171425", | |||
| "D. c #DBDDD6", | |||
| "E. c #9B97AA", | |||
| "F. c #1F183F", | |||
| "G. c #261F45", | |||
| "H. c #221A42", | |||
| "I. c #F3F4F5", | |||
| "J. c #2E274A", | |||
| "K. c #EEEDEF", | |||
| "L. c #010101", | |||
| "M. c #433F56", | |||
| "N. c #5E587E", | |||
| "O. c #80807F", | |||
| "P. c #211941", | |||
| "Q. c #170F37", | |||
| "R. c #0F072F", | |||
| "S. c #30284D", | |||
| "T. c #E0DFE1", | |||
| "U. c #827C9A", | |||
| "V. c #BEBDC7", | |||
| "W. c #30294C", | |||
| "X. c #66607A", | |||
| "Y. c #DDDDDD", | |||
| "Z. c #CFCFCF", | |||
| "`. c #C0C0C0", | |||
| " + c #BFBFBF", | |||
| ".+ c #BEBEBE", | |||
| "++ c #CECECE", | |||
| "@+ c #5E5F54", | |||
| "#+ c #757770", | |||
| "$+ c #373835", | |||
| "%+ c #222222", | |||
| "&+ c #202020", | |||
| "*+ c #1D1D1D", | |||
| "=+ c #171717", | |||
| "-+ c #9E9E9F", | |||
| ";+ c #B6B3C0", | |||
| ">+ c #3D3658", | |||
| ",+ c #9492A4", | |||
| "'+ c #0F1013", | |||
| ")+ c #0C0A0F", | |||
| "!+ c #13130F", | |||
| "~+ c #635B82", | |||
| "{+ c #161422", | |||
| "]+ c #D3D0DC", | |||
| "^+ c #BDBAC4", | |||
| "/+ c #332D4F", | |||
| "(+ c #C5C2CC", | |||
| "_+ c #7F7E86", | |||
| ":+ c #3D3758", | |||
| "<+ c #3B3456", | |||
| "[+ c #000004", | |||
| "}+ c #D9D7E3", | |||
| "|+ c #959591", | |||
| "1+ c #050505", | |||
| "2+ c #342D50", | |||
| "3+ c #241C43", | |||
| "4+ c #2E264A", | |||
| "5+ c #716A8D", | |||
| "6+ c #383153", | |||
| "7+ c #40385E", | |||
| "8+ c #969696", | |||
| "9+ c #090909", | |||
| "0+ c #656562", | |||
| "a+ c #373051", | |||
| "b+ c #2B2548", | |||
| "c+ c #514871", | |||
| "d+ c #070709", | |||
| "e+ c #211940", | |||
| "f+ c #ABA8B5", | |||
| "g+ c #E9E9E8", | |||
| "h+ c #C0BBCF", | |||
| "i+ c #100D21", | |||
| "j+ c #606161", | |||
| "k+ c #E9EAE4", | |||
| "l+ c #362E53", | |||
| "m+ c #7C788D", | |||
| "n+ c #363052", | |||
| "o+ c #CACAD1", | |||
| "p+ c #F8F7FE", | |||
| "q+ c #949496", | |||
| "r+ c #E4E4E4", | |||
| "s+ c #F1F1F1", | |||
| "t+ c #373052", | |||
| "u+ c #AFACB9", | |||
| "v+ c #3E3E40", | |||
| "w+ c #3D3D3D", | |||
| "x+ c #565656", | |||
| "y+ c #8F8F90", | |||
| "z+ c #BDB9C1", | |||
| "A+ c #40385B", | |||
| "B+ c #2F284B", | |||
| "C+ c #D0D0D0", | |||
| "D+ c #CECDD5", | |||
| "E+ c #332D50", | |||
| "F+ c #C4C3CD", | |||
| "G+ c #BDBDBD", | |||
| "H+ c #EAEAEA", | |||
| "I+ c #2D2A3E", | |||
| "J+ c #312A4E", | |||
| "K+ c #2A243B", | |||
| "L+ c #4B4757", | |||
| "M+ c #1A1139", | |||
| "N+ c #D2CFD7", | |||
| "O+ c #ADADAC", | |||
| "P+ c #02000C", | |||
| "Q+ c #60597D", | |||
| "R+ c #312A4F", | |||
| "S+ c #68627F", | |||
| "T+ c #B3B3B6", | |||
| "U+ c #020203", | |||
| "V+ c #373153", | |||
| "W+ c #BCBAC5", | |||
| "X+ c #FDFDFD", | |||
| "Y+ c #EFEFEF", | |||
| "Z+ c #080808", | |||
| "`+ c #686186", | |||
| " @ c #C5C7BF", | |||
| ".@ c #4D4D51", | |||
| "+@ c #0A0814", | |||
| "@@ c #7D7C7F", | |||
| "#@ c #69657F", | |||
| "$@ c #393254", | |||
| "%@ c #CCCCD3", | |||
| "&@ c #3C3658", | |||
| "*@ c #3E3758", | |||
| "=@ c #6D6881", | |||
| "-@ c #040405", | |||
| ";@ c #645C81", | |||
| ">@ c #2A2248", | |||
| ",@ c #424047", | |||
| "'@ c #4B4C4B", | |||
| ")@ c #282146", | |||
| "!@ c #EDECEF", | |||
| "~@ c #6C6882", | |||
| "{@ c #878787", | |||
| "]@ c #625C7D", | |||
| "^@ c #F0EFF1", | |||
| "/@ c #D6D5DC", | |||
| "(@ c #322B4D", | |||
| "_@ c #2D274B", | |||
| ":@ c #362F53", | |||
| "<@ c #231B42", | |||
| "[@ c #1E183E", | |||
| "}@ c #31294C", | |||
| "|@ c #3F3859", | |||
| "1@ c #928DA3", | |||
| "2@ c #7C798F", | |||
| "3@ c #312A4D", | |||
| "4@ c #21193F", | |||
| "5@ c #535353", | |||
| "6@ c #EEEDF0", | |||
| "7@ c #676085", | |||
| "8@ c #252239", | |||
| "9@ c #BFC0BF", | |||
| "0@ c #A29FB0", | |||
| "a@ c #292146", | |||
| "b@ c #FEFFFF", | |||
| "c@ c #3B3B3B", | |||
| "d@ c #F3F3F3", | |||
| "e@ c #443E5E", | |||
| "f@ c #1A133A", | |||
| "g@ c #322A50", | |||
| "h@ c #655D82", | |||
| "i@ c #6A628A", | |||
| "j@ c #EDEBEE", | |||
| "k@ c #362F51", | |||
| "l@ c #C1BEC9", | |||
| "m@ c #F0F0F0", | |||
| "n@ c #A5A4B3", | |||
| "o@ c #2A2247", | |||
| "p@ c #2E264B", | |||
| "q@ c #151518", | |||
| "r@ c #322D40", | |||
| "s@ c #333042", | |||
| "t@ c #1D182A", | |||
| "u@ c #888495", | |||
| "v@ c #9F9BB1", | |||
| "w@ c #4A4557", | |||
| "x@ c #151025", | |||
| "y@ c #373738", | |||
| "z@ c #CBC8D2", | |||
| "A@ c #989898", | |||
| "B@ c #261E44", | |||
| "C@ c #2B2348", | |||
| "D@ c #D9D8DE", | |||
| "E@ c #FBFBFA", | |||
| "F@ c #A7A8A3", | |||
| "G@ c #262723", | |||
| "H@ c #C3C1CB", | |||
| "I@ c #E8E7EA", | |||
| "J@ c #383053", | |||
| "K@ c #C3C3C1", | |||
| "L@ c #221C41", | |||
| "M@ c #181039", | |||
| "N@ c #121212", | |||
| "O@ c #F7F6FA", | |||
| "P@ c #E1E0E6", | |||
| "Q@ c #DFDEE5", | |||
| "R@ c #BCB8CB", | |||
| "S@ c #262434", | |||
| "T@ c #292929", | |||
| "U@ c #C1BECA", | |||
| "V@ c #F0F0F2", | |||
| "W@ c #716A84", | |||
| "X@ c #827D94", | |||
| "Y@ c #B4B1BE", | |||
| "Z@ c #292349", | |||
| "`@ c #534B73", | |||
| " # c #241D42", | |||
| ".# c #3E3759", | |||
| "+# c #797979", | |||
| "@# c #F9F9F9", | |||
| "## c #CCC9D7", | |||
| "$# c #4A4853", | |||
| "%# c #A19EAE", | |||
| "&# c #918EA1", | |||
| "*# c #261E45", | |||
| "=# c #DAD7E4", | |||
| "-# c #B3B4B4", | |||
| ";# c #A5A5A5", | |||
| "># c #AAA8B5", | |||
| ",# c #A7A6B5", | |||
| "'# c #B9B9B9", | |||
| ")# c #020009", | |||
| "!# c #9998A1", | |||
| "~# c #D5D4DC", | |||
| "{# c #3A3354", | |||
| "]# c #2E274C", | |||
| "^# c #2A2347", | |||
| "/# c #E7E5E9", | |||
| "(# c #403C50", | |||
| "_# c #3A3A3A", | |||
| ":# c #20183F", | |||
| "<# c #463F5F", | |||
| "[# c #231B41", | |||
| "}# c #525252", | |||
| "|# c #7B7983", | |||
| "1# c #AEADB1", | |||
| "2# c #332C4D", | |||
| "3# c #FAFAFB", | |||
| "4# c #FAFAFA", | |||
| "5# c #8A869A", | |||
| "6# c #453E5F", | |||
| "7# c #343434", | |||
| "8# c #F1F0F6", | |||
| "9# c #5E5773", | |||
| "0# c #3C3557", | |||
| "a# c #F6F5F8", | |||
| "b# c #FDFDFF", | |||
| "c# c #332B4E", | |||
| "d# c #494362", | |||
| "e# c #2D2549", | |||
| "f# c #B1B1B1", | |||
| "g# c #353535", | |||
| "h# c #010202", | |||
| "i# c #B8B5C2", | |||
| "j# c #D5D4DA", | |||
| "k# c #2B2448", | |||
| "l# c #B4B4B4", | |||
| "m# c #2B2B2B", | |||
| "n# c #646566", | |||
| "o# c #0D0E0E", | |||
| "p# c #FCFBFD", | |||
| "q# c #403959", | |||
| "r# c #837E92", | |||
| "s# c #B4B4B5", | |||
| "t# c #070707", | |||
| "u# c #2C293F", | |||
| "v# c #FBFBFF", | |||
| "w# c #5F5A75", | |||
| "x# c #CAC7D1", | |||
| "y# c #46405F", | |||
| "z# c #1F173D", | |||
| "A# c #BABABC", | |||
| "B# c #060606", | |||
| "C# c #020100", | |||
| "D# c #676088", | |||
| "E# c #292148", | |||
| "F# c #EFEEF0", | |||
| "G# c #2E284B", | |||
| "H# c #7B768D", | |||
| "I# c #AFACBB", | |||
| "J# c #707070", | |||
| "K# c #BABBBA", | |||
| "L# c #3A3A37", | |||
| "M# c #60577E", | |||
| "N# c #E1DFE4", | |||
| "O# c #F2F2F5", | |||
| "P# c #FAFAFD", | |||
| "Q# c #342C53", | |||
| "R# c #3C3657", | |||
| "S# c #CFCED5", | |||
| "T# c #282045", | |||
| "U# c #D2D0D2", | |||
| "V# c #6F6F72", | |||
| "W# c #2C2549", | |||
| "X# c #DADAE2", | |||
| "Y# c #271F44", | |||
| "Z# c #79748B", | |||
| "`# c #4E456F", | |||
| " $ c #554C75", | |||
| ".$ c #6E6983", | |||
| "+$ c #F2F1F3", | |||
| "@$ c #C3C2CC", | |||
| "#$ c #231C41", | |||
| "$$ c #878297", | |||
| "%$ c #E0DFE5", | |||
| "&$ c #817B92", | |||
| "*$ c #2A2348", | |||
| "=$ c #68627D", | |||
| "-$ c #8B879A", | |||
| ";$ c #C5C4CD", | |||
| ">$ c #BEBCC7", | |||
| ",$ c #F8F8F9", | |||
| "'$ c #ABA9B7", | |||
| ")$ c #CDCAD3", | |||
| "!$ c #66617B", | |||
| "~$ c #2D2649", | |||
| "{$ c #827E93", | |||
| "]$ c #3A3254", | |||
| "^$ c #BEBCC8", | |||
| "/$ c #CDCAD4", | |||
| "($ c #CECBD5", | |||
| "_$ c #9D9AAA", | |||
| ":$ c #261F44", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " . + @ + # $ % & ", | |||
| " * = - ; > > > , ' ) ! > ~ { & ", | |||
| " ] ^ / > > ( _ : > > > > < & [ > > > > > > } | ", | |||
| " 1 2 > > > > > 3 > > > > > 4 > > > > > > > 5 6 ", | |||
| " > > > > > > 7 8 > > > > 9 0 a b > > > > > > > > c ", | |||
| " $ d > > > > > e f > > > > g g g g h > > > > i j k l ", | |||
| " m | n > > o > > ' p > > q g g g g r > > > s g g t u v w ", | |||
| " x y > > z A B C g D > > % E F > > G g g g g > > > H g g g g I J > > K L ", | |||
| " M N > > > o O P Q g g g > > R S T > > U g g g V > > > W g g g g g X > > > > ", | |||
| " | Y > > > > > > Z g g g g ` > ] ...> > U g g g +.> > @.g g g g g g #.> > > > v ", | |||
| " $.> > > > > %.&.g g g g g g > > *.=.> > -.g g g ;.> > g g &.g g g >.> > > > ,.'. ", | |||
| " ).!.> > > > > ~.g g g g g g g {.> ].^.> > /.g g g (.> %.g g g g g _.> > > :.<.[.}.|.1. ", | |||
| " u 2.> > > > > > > > 3.g g g g g g 4.5.6.7.> 8.g g g 9.> 0.g g g g a.> > b.@ _ % c.d.> e. ", | |||
| " |.f.> > > > > > > > > > g.g g g g g g h.i.> > j.g g g > > g g g g k.> l.m.n.o.p.q.> > > r.' ", | |||
| " s.> > > > > > > > > > > > t.u.g g g v. w.x.y. z.A. B. C.g g D.> E.F.G.H.I.> > > > > > n. ", | |||
| " J.K.> > > > > > > > > > > > > > > L.g M. N.O. P.Q.R.> > > > > > > > > S. ", | |||
| " .> > > > > > > > > > > > > > > > > T. U.> > > > > > > > > > V.W. ", | |||
| " X.> > > > > > Y.Z.`.i +.+++> > > > @+#+$+%+&+*+=+g g -+> > ;+>+ ", | |||
| " # ,+> > > > > g g g g g g g g g '+)+!+ ~+g g g g g g g g g {+]+^+ ", | |||
| " /+(+> > > > _+g g g g g g g g g g g g g g g g g g L.g g :+ ", | |||
| " <+> > > > > [+g g g g g g g g g g g g .}+|+g g g g g 1+g g ", | |||
| " 2+3+@ 4+5+g g g g g g g g g g g g g 6+u 7+ > > > 8+g g g 9+g 0+ ", | |||
| " a+b+T n c+g g g d+g g g g g g g g g . e+f+> g+g h+i+g j+> > > > %.L.g g k+l+ ", | |||
| " > > > > > g g g g g g g g g g g m+> n+o+> > p+g g > > g g g q+> > > > > r+s+> > t+ ", | |||
| " :+u+> > > > > v+g g g g w+s x+y+z+> > > A+ B+> > > g g g > > g g g g C+> > > > > > > D+ . ", | |||
| " E+F+> > > > > G+H+> > > > > > > > > > > I+ J+> > K+g g L+> > g g g g g > > > > > > M+6+ ", | |||
| " ' N+> > > > > > > > > > > > > > > > O+g P+Q+ ' R+S+g g T+> > U+g g g g g > > > > :+ ", | |||
| " V+W+> > > > > > > > X+> > > > > Y+Z+g g g `+ @> > > .@g g g +@@@> > > #@$@ c.%@&@l ", | |||
| " *@=@> > > > > > > > > > > > > x+g g -@g g ;@ >@> > > > ,@g '@ > > > $@ )@!@> > ", | |||
| " ~@> > > > X+> > > > > > {@g g g g g g g | > > > > ]@ 2+4+B+ % ^@> > > /@(@ ", | |||
| " _@> > > X+> > > > > Z.g g g g g g g g g > :@J+ | <@[@}@|@ 1@> > > > > 2@3@ ", | |||
| " 4@> > > > > > > > 5@g g g g g g g g g t.> > 6@|. 7@8@9@> > > > > > 0@V+ ", | |||
| " a@b@> > > > > c@g g g L.g g g g g g d@> > > > e@<+ f@g@ h@i@ g g &.> > > > > > > j@] ", | |||
| " k@l@> > > > m@g g g g g g g g g g ++> > > > n@o@p@> > > q@r@s@s@t@u@v@w@x@g g g g g g y@> > > > > > > z@V+ ", | |||
| " > > > > > g g g g &.g g g g A@> > > > > B@C@D@> > E@g g g g g F@> > G@g g g g g g g g H@> > > > > > I@V+ ", | |||
| " J@> > > > > K@g g g g g g g _.> > > > > L@' M@> > > > g g g g g g > > > N@g g g g g g g g O@> > > > > > P@ .*@ ", | |||
| " 4+Q@> > > > R@S@g g g g g T@> > > > > U@2+}.> > > > > g g g g g g > > > > g g g g g g g g g > > > > > > > V@W@] ", | |||
| " |@X@> > > Y@Z@`@g g g g g > > > > > > #.#e > > > > +#g g g g L.g @#> > > ##g g g g g g g g $#> > > > > > > > %#x. ", | |||
| " 6+> > &#*#c.=#-#g g g ;#> > > > > >#t+t+,#> > > > T@g g g g L.g '#> > > > )#g g g g g g g g !#> > > > > > > > ~#<+ ", | |||
| " {#]#^#u /#> > (#g _#> > > > > > :#<#[#> > X+> > g g g g g 1+g }#> > > > |#g g g g g g g g g 1#> > > > > > > > 2# ", | |||
| " 3#> > > > > > > 4#> > > 5#V+|@6#> > > > H g g g g g g g 7#> > > > 8#g g g g g &.g g g g > > > > > > > 9#0# ", | |||
| " .a#> > b#> > > > > > > > > c#d#e#> > > > > f#g g g g g g g g#> > > > > g g g g g g g g g h#> > > > > > i#M ", | |||
| " |.j#> > > > > > > > > > > > k#d#e > > > > > l#g g g g g 1+g m#> > > > > n#g g g g g g g o#> > > > > > i#[ ", | |||
| " p#> > > > > > > > > > q#1.$@r#> > > > > s#g g g g g t#g 9+> > > > > (.g g g g g g u#v#> > > > > w#M ", | |||
| " x#> > > > > > X+> 6@W.y#z#> > > > > > A#g g g g g B#g g > > > > > > g g g g C#D# E#> > > F#G#<+ ", | |||
| " % H#> > > > > > > o@ V+I#> > > > > > J#g g g g g B#g g > > > > > > K#g g L#M# * M ", | |||
| " V+ N#> > > > Y@6 o.> > > > > > > g g g g g g L.g g > > > > > > > O#P#> Q# ", | |||
| " l R#S#> > > T# e > > > > > X+> U#V#g g g g g B#1+> > > > > > > > > > W# ", | |||
| " ' X#Y# |@Z#> > > > > > > > > > > `# $> > > > > > > > > > > > .$>+ ", | |||
| " ' +$> > > > > > > > > > @$J+#$> > > > > > > > > > > > B+ ", | |||
| " k@> > > > > > > > > > > $$|@o@> > > > > > > > > %$&$*$ ", | |||
| " =$-$;$>$,$> > > > > <+'$> > > > > > )$!$~$|@ ", | |||
| " 0#6 _ n. {$ 1. ]$^$/$($_$ :$2+ ", | |||
| " :+| 2+0# ", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " "}; | |||
| @@ -0,0 +1,510 @@ | |||
| /* Canvas Widget | |||
| * Copyleft (C) 2002 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "Fl/fl_draw.H" | |||
| #include "Fl_Canvas.h" | |||
| #include "Fl_DeviceGUI.h" | |||
| #include <iostream> | |||
| #include "../../SpiralSynthModularInfo.h" | |||
| //#define IMG_BACKGROUND | |||
| #ifdef IMG_BACKGROUND | |||
| #include <png.h> | |||
| #endif | |||
| //////////////////////////////////////////////////////////////////////// | |||
| Fl_Canvas::Fl_Canvas(int x, int y, int w, int h, char *name) : | |||
| Fl_Group(x,y,w,h,name), | |||
| cb_Connection(NULL), | |||
| cb_Unconnect(NULL), | |||
| cb_AddDevice(NULL), | |||
| m_ToolMenu(false) | |||
| { | |||
| m_IncompleteWire.OutputChild=-1; | |||
| m_IncompleteWire.OutputPort=-1; | |||
| m_IncompleteWire.InputChild=-1; | |||
| m_IncompleteWire.InputPort=-1; | |||
| m_BG=NULL; | |||
| m_BGData=NULL; | |||
| #ifdef IMG_BACKGROUND | |||
| if (SpiralSynthModularInfo::BGIMG=="None") return; | |||
| FILE *fp=fopen(SpiralSynthModularInfo::BGIMG.c_str(),"rb"); | |||
| if (!fp) | |||
| { | |||
| SpiralInfo::Alert("Couldn't open image ["+SpiralSynthModularInfo::BGIMG+"]"); | |||
| } | |||
| else | |||
| { | |||
| png_structp png_ptr; | |||
| png_infop info_ptr; | |||
| png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); | |||
| info_ptr = png_create_info_struct(png_ptr); | |||
| png_init_io(png_ptr, fp); | |||
| png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_IDENTITY, NULL); | |||
| fclose(fp); | |||
| m_BGData = new char[png_ptr->rowbytes*png_ptr->height]; | |||
| int p=0; | |||
| for (unsigned int row = 0; row < png_ptr->height; row++) | |||
| { | |||
| for (unsigned int i=0; i<png_ptr->rowbytes; i++) | |||
| { | |||
| m_BGData[p]=(char)info_ptr->row_pointers[row][i]; | |||
| p++; | |||
| } | |||
| } | |||
| #if FL_MAJOR_VERSION == 1 && FL_MINOR_VERSION == 0 | |||
| m_BG = new Fl_Image((unsigned char*)m_BGData, | |||
| (int)png_ptr->width, | |||
| (int)png_ptr->height,(int)png_ptr->rowbytes/(int)png_ptr->width); | |||
| #else | |||
| m_BG = new Fl_RGB_Image((unsigned char*)m_BGData,(int)png_ptr->width,(int)png_ptr->height); | |||
| #endif | |||
| png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); | |||
| } | |||
| #endif | |||
| } | |||
| Fl_Canvas::~Fl_Canvas() | |||
| { | |||
| #ifdef IMG_BACKGROUND | |||
| if (m_BGData) delete[] m_BGData; | |||
| #endif | |||
| } | |||
| void Fl_Canvas::draw() | |||
| { | |||
| Fl_Widget*const* a = array(); | |||
| if (damage() & ~FL_DAMAGE_CHILD) // redraw the entire thing: | |||
| { | |||
| if (m_BG) | |||
| { | |||
| int X=0,Y=0; | |||
| while (Y<w()) | |||
| { | |||
| while (X<h()) | |||
| { | |||
| m_BG->draw(parent()->x()+X,parent()->y()+Y); | |||
| #if FL_MAJOR_VERSION == 1 && FL_MINOR_VERSION == 0 | |||
| X+=m_BG->w; | |||
| #else | |||
| X+=m_BG->w(); | |||
| #endif | |||
| } | |||
| #if FL_MAJOR_VERSION == 1 && FL_MINOR_VERSION == 0 | |||
| Y+=m_BG->h; | |||
| #else | |||
| Y+=m_BG->h(); | |||
| #endif | |||
| X=0; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| draw_box(); | |||
| } | |||
| for (int i=children(); i--;) | |||
| { | |||
| Fl_Widget& o = **a++; | |||
| draw_child(o); | |||
| draw_outside_label(o); | |||
| } | |||
| DrawWires(); | |||
| } | |||
| else // only redraw the children that need it: | |||
| { | |||
| for (int i=children(); i--;) update_child(**a++); | |||
| } | |||
| if (m_ToolMenu) | |||
| { | |||
| int Pos=0,X=0,Y=0,textw,texth; | |||
| int DegreesPerItem=30; | |||
| float conv=3.151/180.0f; | |||
| bool selected=false; | |||
| m_Selected=-1; | |||
| fl_font(fl_font(),10); | |||
| for (vector< pair<string,int> >::iterator i=m_PluginNameList.begin(); | |||
| i!=m_PluginNameList.end(); ++i) | |||
| { | |||
| textw=0; | |||
| fl_font(fl_font(),10); | |||
| fl_measure(i->first.c_str(), textw, texth); | |||
| X=m_x-(textw/2); | |||
| Y=m_y-(m_PluginNameList.size()*5)+Pos*10; | |||
| if (Fl::event_y()>Y-10 && Fl::event_y()<Y && | |||
| Fl::event_x()>X && Fl::event_x()<X+textw) | |||
| { | |||
| fl_font(fl_font(),15); | |||
| fl_measure(i->first.c_str(), textw, texth); | |||
| X=m_x-(textw/2); | |||
| m_Selected=i->second; | |||
| selected=true; | |||
| } | |||
| else selected=false; | |||
| fl_color(FL_GRAY); | |||
| fl_color(FL_WHITE); | |||
| fl_draw(i->first.c_str(),X-1,Y+1); | |||
| if (selected) fl_color(FL_BLUE); | |||
| else fl_color(FL_BLACK); | |||
| fl_draw(i->first.c_str(),X,Y); | |||
| Pos+=1; | |||
| } | |||
| } | |||
| } | |||
| void Fl_Canvas::DrawWires() | |||
| { | |||
| for(vector<CanvasWire>::iterator i=m_WireVec.begin(); | |||
| i!=m_WireVec.end(); i++) | |||
| { | |||
| if (i->OutputChild>children() || i->InputChild>children()) | |||
| { | |||
| cerr<<"wire output child = "<<i->OutputChild<<endl; | |||
| cerr<<"wire input child = "<<i->InputChild<<endl; | |||
| SpiralInfo::Alert("Wire drawing mismatch!"); | |||
| return; | |||
| } | |||
| Fl_DeviceGUI* SourceDevice = (Fl_DeviceGUI*)(child(i->OutputChild)); | |||
| Fl_DeviceGUI* DestDevice = (Fl_DeviceGUI*)(child(i->InputChild)); | |||
| if (!SourceDevice || !DestDevice) | |||
| { | |||
| SpiralInfo::Alert("Cant find source or dest device while drawing wires"); | |||
| return; | |||
| } | |||
| //============================= | |||
| // wire colour stuff - dan b. | |||
| //============================= | |||
| Fl_Color col = (Fl_Color) WIRE_COL0; | |||
| switch (SourceDevice->GetPortType(i->OutputPort+SourceDevice->GetInfo()->NumInputs)) { | |||
| case 0: col = (Fl_Color) WIRE_COL0; | |||
| break; | |||
| case 1: col = (Fl_Color) WIRE_COL1; | |||
| break; | |||
| case 2: col = (Fl_Color) WIRE_COL2; | |||
| break; | |||
| case 3: col = (Fl_Color) WIRE_COL3; | |||
| break; | |||
| case 4: col = (Fl_Color) WIRE_COL4; | |||
| break; | |||
| default: col = (Fl_Color) WIRE_COL0; | |||
| } | |||
| fl_color(col); | |||
| //============================= | |||
| fl_line(SourceDevice->GetPortX(i->OutputPort+SourceDevice->GetInfo()->NumInputs), | |||
| SourceDevice->GetPortY(i->OutputPort+SourceDevice->GetInfo()->NumInputs), | |||
| DestDevice->GetPortX(i->InputPort), | |||
| DestDevice->GetPortY(i->InputPort)); | |||
| } | |||
| } | |||
| int Fl_Canvas::handle(int event) | |||
| { | |||
| if (Fl_Group::handle(event)) return 1; | |||
| if (Fl::event_button()==3) | |||
| { | |||
| if (event==FL_PUSH) | |||
| { | |||
| m_ToolMenu=true; | |||
| m_x=Fl::event_x(); | |||
| m_y=Fl::event_y(); | |||
| redraw(); | |||
| } | |||
| if (event==FL_DRAG) redraw(); | |||
| if (event==FL_RELEASE && Fl::event_button()==3) | |||
| { | |||
| m_ToolMenu=false; | |||
| if (m_Selected!=-1 && cb_AddDevice) | |||
| { | |||
| int args[3]; | |||
| args[0]=m_Selected; | |||
| args[1]=m_x; | |||
| args[2]=m_y; | |||
| cb_AddDevice(this,args); | |||
| } | |||
| redraw(); | |||
| } | |||
| } | |||
| return 1; | |||
| } | |||
| void Fl_Canvas::PortClicked(Fl_DeviceGUI* Device, int Type, int Port, bool Value) | |||
| { | |||
| // find out which child this comes from. | |||
| int ChildNum=-1; | |||
| for(int n=0; n<children(); n++) | |||
| { | |||
| if(child(n)==Device) | |||
| { | |||
| ChildNum=n; | |||
| } | |||
| } | |||
| if (ChildNum==-1) | |||
| { | |||
| SpiralInfo::Alert("Port clicked callback can't find source child."); | |||
| return; | |||
| } | |||
| if(Value) // Turned on the port | |||
| { | |||
| if(m_IncompleteWire.InputChild==-1 || m_IncompleteWire.OutputChild==-1) | |||
| { | |||
| if (Type==Fl_DeviceGUI::OUTPUT) | |||
| { | |||
| // make sure we don't make a output->output connection | |||
| if (m_IncompleteWire.OutputChild==-1) | |||
| { | |||
| m_IncompleteWire.OutputChild=ChildNum; | |||
| m_IncompleteWire.OutputPort=Port; | |||
| m_IncompleteWire.OutputID=Device->GetID(); | |||
| } | |||
| else | |||
| { | |||
| m_IncompleteWire.Clear(); | |||
| } | |||
| } | |||
| else | |||
| { | |||
| // make sure we don't make a input->input connection | |||
| if (m_IncompleteWire.InputChild==-1) | |||
| { | |||
| m_IncompleteWire.InputChild=ChildNum; | |||
| m_IncompleteWire.InputPort=Port; | |||
| m_IncompleteWire.InputID=Device->GetID(); | |||
| } | |||
| else | |||
| { | |||
| m_IncompleteWire.Clear(); | |||
| } | |||
| } | |||
| // if both have now been set... | |||
| if (m_IncompleteWire.InputChild!=-1 && m_IncompleteWire.OutputChild!=-1) | |||
| { | |||
| m_WireVec.push_back(m_IncompleteWire); | |||
| // send the connect callback | |||
| cb_Connection(this,(void*)&m_IncompleteWire); | |||
| m_Graph.AddConnection(m_IncompleteWire.OutputID,m_IncompleteWire.InputID); | |||
| m_IncompleteWire.Clear(); | |||
| redraw(); | |||
| } | |||
| } | |||
| } | |||
| else // Turned off the port | |||
| { | |||
| // Find the connection | |||
| for(vector<CanvasWire>::iterator i=m_WireVec.begin(); | |||
| i!=m_WireVec.end(); i++) | |||
| { | |||
| if ((Type==Fl_DeviceGUI::OUTPUT && i->OutputChild==ChildNum && i->OutputPort==Port) || | |||
| (Type==Fl_DeviceGUI::INPUT && i->InputChild==ChildNum && i->InputPort==Port)) | |||
| { | |||
| // Turn off both ports | |||
| ((Fl_DeviceGUI*)(child(i->OutputChild)))->ForcePortValue(i->OutputPort+ | |||
| ((Fl_DeviceGUI*)(child(i->OutputChild)))->GetInfo()->NumInputs,false); | |||
| ((Fl_DeviceGUI*)(child(i->InputChild)))->ForcePortValue(i->InputPort,false); | |||
| // send the unconnect callback | |||
| cb_Unconnect(this,(void*)&(*i)); | |||
| m_Graph.RemoveConnection(i->OutputID,i->InputID); | |||
| // Remove the wire | |||
| m_WireVec.erase(i); | |||
| redraw(); | |||
| break; | |||
| } | |||
| } | |||
| // Clear the current selection | |||
| m_IncompleteWire.Clear(); | |||
| } | |||
| } | |||
| void Fl_Canvas::ClearConnections(Fl_DeviceGUI* Device) | |||
| { | |||
| // find out which child this comes from. | |||
| int ChildNum=-1; | |||
| for(int n=0; n<children(); n++) | |||
| { | |||
| if(child(n)==Device) | |||
| { | |||
| ChildNum=n; | |||
| } | |||
| } | |||
| if (ChildNum==-1) | |||
| { | |||
| SpiralInfo::Alert("Clear connections callback can't find source child."); | |||
| return; | |||
| } | |||
| bool removedall=false; | |||
| while (!removedall) | |||
| { | |||
| removedall=true; | |||
| for (vector<CanvasWire>::iterator i=m_WireVec.begin(); | |||
| i!=m_WireVec.end(); i++) | |||
| { | |||
| if (i->OutputChild==ChildNum || | |||
| i->InputChild==ChildNum) | |||
| { | |||
| // Turn off both ports | |||
| ((Fl_DeviceGUI*)(child(i->OutputChild)))->ForcePortValue(i->OutputPort+ | |||
| ((Fl_DeviceGUI*)(child(i->OutputChild)))->GetInfo()->NumInputs,false); | |||
| ((Fl_DeviceGUI*)(child(i->InputChild)))->ForcePortValue(i->InputPort,false); | |||
| // send the unconnect callback | |||
| cb_Unconnect(this,(void*)&(*i)); | |||
| m_Graph.RemoveConnection(i->OutputID,i->InputID); | |||
| m_WireVec.erase(i); | |||
| removedall=false; | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| void Fl_Canvas::RemoveDevice(Fl_DeviceGUI* Device) | |||
| { | |||
| // find out which child this comes from. | |||
| int ChildNum=-1; | |||
| for(int n=0; n<children(); n++) | |||
| { | |||
| if(child(n)==Device) | |||
| { | |||
| ChildNum=n; | |||
| } | |||
| } | |||
| if (ChildNum==-1) | |||
| { | |||
| SpiralInfo::Alert("Remove device callback can't find source child."); | |||
| return; | |||
| } | |||
| ClearConnections(Device); | |||
| for (vector<CanvasWire>::iterator i=m_WireVec.begin(); | |||
| i!=m_WireVec.end(); i++) | |||
| { | |||
| if (i->OutputChild>ChildNum) i->OutputChild--; | |||
| if (i->InputChild>ChildNum) i->InputChild--; | |||
| } | |||
| remove(child(ChildNum)); | |||
| redraw(); | |||
| } | |||
| void Fl_Canvas::Clear() | |||
| { | |||
| m_Graph.Clear(); | |||
| int kids=children(); | |||
| for(int n=0; n<kids; n++) | |||
| { | |||
| remove(child(0)); | |||
| } | |||
| m_WireVec.clear(); | |||
| redraw(); | |||
| } | |||
| istream &operator>>(istream &s, Fl_Canvas &o) | |||
| { | |||
| int NumWires; | |||
| s>>NumWires; | |||
| for(int n=0; n<NumWires; n++) | |||
| { | |||
| CanvasWire NewWire; | |||
| s>>NewWire.OutputID; | |||
| s>>NewWire.OutputChild; | |||
| s>>NewWire.OutputPort; | |||
| s>>NewWire.InputID; | |||
| s>>NewWire.InputChild; | |||
| s>>NewWire.InputPort; | |||
| o.m_WireVec.push_back(NewWire); | |||
| // Notify connection by callback | |||
| o.cb_Connection(&o,(void*)&NewWire); | |||
| o.m_Graph.AddConnection(NewWire.OutputID,NewWire.InputID); | |||
| // Turn on both ports | |||
| ((Fl_DeviceGUI*)(o.child(NewWire.OutputChild)))->ForcePortValue(NewWire.OutputPort+ | |||
| ((Fl_DeviceGUI*)(o.child(NewWire.OutputChild)))->GetInfo()->NumInputs,true); | |||
| ((Fl_DeviceGUI*)(o.child(NewWire.InputChild)))->ForcePortValue(NewWire.InputPort,true); | |||
| } | |||
| return s; | |||
| } | |||
| ostream &operator<<(ostream &s, Fl_Canvas &o) | |||
| { | |||
| s<<o.m_WireVec.size()<<endl; | |||
| for(vector<CanvasWire>::iterator i=o.m_WireVec.begin(); | |||
| i!=o.m_WireVec.end(); i++) | |||
| { | |||
| s<<i->OutputID<<" "; | |||
| s<<i->OutputChild<<" "; | |||
| s<<i->OutputPort<<" "; | |||
| s<<i->InputID<<" "; | |||
| s<<i->InputChild<<" "; | |||
| s<<i->InputPort<<endl; | |||
| } | |||
| return s; | |||
| } | |||
| @@ -0,0 +1,104 @@ | |||
| /* Canvas Widget | |||
| * Copyleft (C) 2002 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include <FL/Fl_Group.h> | |||
| #include <FL/Fl_Output.h> | |||
| #include <FL/Fl_Image.h> | |||
| #include <vector> | |||
| #include <string> | |||
| #include "../../GraphSort.h" | |||
| #ifndef CANVAS_WIDGET | |||
| #define CANVAS_WIDGET | |||
| using namespace std; | |||
| class Fl_DeviceGUI; | |||
| class CanvasWire | |||
| { | |||
| public: | |||
| CanvasWire() { Clear(); } | |||
| void Clear() | |||
| { | |||
| OutputChild=-1; | |||
| OutputPort=-1; | |||
| OutputID=-1; | |||
| InputChild=-1; | |||
| InputPort=-1; | |||
| InputID=-1; | |||
| } | |||
| int OutputID; | |||
| int OutputChild; | |||
| int OutputPort; | |||
| int InputID; | |||
| int InputChild; | |||
| int InputPort; | |||
| }; | |||
| class Fl_Canvas : public Fl_Group | |||
| { | |||
| public: | |||
| Fl_Canvas(int x, int y, int w, int h, char *name); | |||
| ~Fl_Canvas(); | |||
| virtual void draw(); | |||
| virtual int handle(int event); | |||
| void PortClicked(Fl_DeviceGUI* Device, int Type, int Port, bool Value); | |||
| void SetConnectionCallback(Fl_Callback* s) { cb_Connection=s; } | |||
| void SetUnconnectCallback(Fl_Callback* s) { cb_Unconnect=s; } | |||
| void SetAddDeviceCallback(Fl_Callback* s) { cb_AddDevice=s; } | |||
| void ClearConnections(Fl_DeviceGUI* Device); | |||
| void RemoveDevice(Fl_DeviceGUI* Device); | |||
| void Clear(); | |||
| void AddPluginName(const string &s, int ID) | |||
| { m_PluginNameList.push_back(pair<string,int>(s,ID)); } | |||
| GraphSort* GetGraph() { return &m_Graph; } | |||
| private: | |||
| void DrawWires(); | |||
| Fl_Image *m_BG; | |||
| char *m_BGData; | |||
| void (*cb_Connection)(Fl_Widget*, void*); | |||
| void (*cb_Unconnect)(Fl_Widget*, void*); | |||
| void (*cb_AddDevice)(Fl_Widget*, void*); | |||
| vector<CanvasWire> m_WireVec; | |||
| CanvasWire m_IncompleteWire; | |||
| bool m_ToolMenu, m_ButtonDown; | |||
| int m_x,m_y,m_Selected; | |||
| vector< pair<string,int> > m_PluginNameList; | |||
| GraphSort m_Graph; | |||
| friend istream &operator>>(istream &s, Fl_Canvas &o); | |||
| friend ostream &operator<<(ostream &s, Fl_Canvas &o); | |||
| }; | |||
| istream &operator>>(istream &s, Fl_Canvas &o); | |||
| ostream &operator<<(ostream &s, Fl_Canvas &o); | |||
| #endif | |||
| @@ -0,0 +1,93 @@ | |||
| /* DeviceGUI composite Widget | |||
| * Copyleft (C) 2002 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "Fl_CommentGUI.h" | |||
| #include <FL/fl_ask.H> | |||
| #include <FL/fl_draw.H> | |||
| #include "../../SpiralSynthModularInfo.h" | |||
| Fl_CommentGUI::Fl_CommentGUI(const DeviceGUIInfo& Info, Fl_Window *PW, Fl_Pixmap *Icon) : | |||
| Fl_DeviceGUI(Info,PW,Icon), | |||
| m_Comment("double click to edit.") | |||
| { | |||
| box(FL_NO_BOX); | |||
| m_DragBar->box(FL_NO_BOX); | |||
| m_DragBar->label(m_Comment.c_str()); | |||
| m_DragBar->color(SpiralSynthModularInfo::GUICOL_Device); | |||
| // m_DragBar->align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE); | |||
| } | |||
| int Fl_CommentGUI::handle(int event) | |||
| { | |||
| if (Fl::event_button()==1 && event==FL_PUSH && Fl::event_clicks()==1) | |||
| { | |||
| const char *t=fl_input("and your comment is:", m_Comment.c_str()); | |||
| if (t) | |||
| { | |||
| string temp(t); | |||
| if (temp!="") | |||
| { | |||
| m_Comment=temp; | |||
| m_DragBar->label(m_Comment.c_str()); | |||
| redraw(); | |||
| //int x,y; | |||
| //fl_measure(m_Comment.c_str(),x,y); | |||
| //m_DragBar->size(x,y); | |||
| } | |||
| } | |||
| } | |||
| return Fl_DeviceGUI::handle(event); | |||
| } | |||
| void Fl_CommentGUI::Setup(const DeviceGUIInfo& Info, bool FirstTime) | |||
| { | |||
| Fl_DeviceGUI::Setup(Info,FirstTime); | |||
| } | |||
| void Fl_CommentGUI::Clear() | |||
| { | |||
| Fl_DeviceGUI::Clear(); | |||
| } | |||
| void Fl_CommentGUI::StreamOut(ostream &s) | |||
| { | |||
| s<<1<<" "; | |||
| s<<m_Comment.size()<<" "; | |||
| s<<m_Comment<<endl; | |||
| } | |||
| void Fl_CommentGUI::StreamIn(istream &s) | |||
| { | |||
| unsigned int size,version; | |||
| string temp; | |||
| s>>version; | |||
| s>>size; | |||
| size++; // see below | |||
| char *str = new char[size+1]; | |||
| s.read(str,size); | |||
| str[size]='\0'; | |||
| // have to move the pointer on by one, as the string | |||
| // starts with " ", as the file pointer starts on | |||
| // a blank space (after streaming the size) | |||
| m_Comment=str+1; | |||
| delete[] str; | |||
| m_DragBar->label(m_Comment.c_str()); | |||
| } | |||
| @@ -0,0 +1,41 @@ | |||
| /* DeviceGUI composite Widget | |||
| * Copyleft (C) 2002 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include <FL/Fl_Input.h> | |||
| #include "Fl_DeviceGUI.h" | |||
| #ifndef COMMENTGUI | |||
| #define COMMENTGUI | |||
| class Fl_CommentGUI : public Fl_DeviceGUI | |||
| { | |||
| public: | |||
| Fl_CommentGUI(const DeviceGUIInfo& Info, Fl_Window *PW, Fl_Pixmap *Icon); | |||
| virtual int handle(int event); | |||
| virtual void Setup(const DeviceGUIInfo& Info, bool FirstTime = false); | |||
| virtual void Clear(); | |||
| virtual void StreamOut(ostream &s); | |||
| virtual void StreamIn(istream &s); | |||
| protected: | |||
| string m_Comment; | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,214 @@ | |||
| /* DeviceGUI composite Widget | |||
| * Copyleft (C) 2002 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "Fl_DeviceGUI.h" | |||
| #include "Fl_Canvas.h" | |||
| #include "../../SpiralSynthModularInfo.h" | |||
| int Fl_DeviceGUI::Numbers[512]; | |||
| Fl_DeviceGUI::Fl_DeviceGUI(const DeviceGUIInfo& Info, Fl_Group *PW, Fl_Pixmap *Icon) : | |||
| Fl_Group(Info.XPos, Info.YPos, Info.Width+(PortGroupWidth*2), Info.Height+TitleBarHeight, ""), | |||
| m_PluginWindow(NULL), | |||
| m_Icon(NULL), | |||
| m_Name(Info.Name), | |||
| m_ID(-1), | |||
| m_DelMe(false) | |||
| { | |||
| for (int n=0; n<512; n++) Numbers[n]=n; | |||
| type(1); | |||
| box(FL_PLASTIC_UP_BOX); | |||
| labeltype(FL_ENGRAVED_LABEL); | |||
| align(FL_ALIGN_TOP_LEFT|FL_ALIGN_INSIDE); | |||
| color(SpiralSynthModularInfo::GUICOL_Device); | |||
| m_Icon=Icon; | |||
| m_DragBar = new Fl_DragBar(Info.XPos, Info.YPos, Info.Width+PortGroupWidth*2, TitleBarHeight, m_Name.c_str()); | |||
| m_DragBar->labelsize(10); | |||
| m_DragBar->type(Fl_DragBar::FLDRAG); | |||
| m_DragBar->color(SpiralSynthModularInfo::GUICOL_Device); | |||
| m_PluginWindow = PW; | |||
| //Add the input/output ports | |||
| Setup(Info, true); | |||
| } | |||
| void Fl_DeviceGUI::Clear() | |||
| { | |||
| end(); | |||
| } | |||
| int Fl_DeviceGUI::handle(int event) | |||
| { | |||
| int t=Fl_Group::handle(event); | |||
| if (t==0) | |||
| { | |||
| if (event==FL_PUSH && Fl::event_button()==1) | |||
| { | |||
| if (m_PluginWindow && !m_DelMe) | |||
| { | |||
| if(!m_PluginWindow->visible()) | |||
| { | |||
| m_PluginWindow->show(); | |||
| } | |||
| /*else | |||
| { | |||
| m_PluginWindow->hide(); | |||
| }*/ | |||
| } | |||
| } | |||
| if (event==FL_RELEASE && Fl::event_button()==2) | |||
| { | |||
| m_DelMe = true; | |||
| } | |||
| } | |||
| return t; | |||
| } | |||
| void Fl_DeviceGUI::draw() | |||
| { | |||
| Fl_Group::draw(); | |||
| if (m_Icon) | |||
| { | |||
| int Centx=x()+w()/2; | |||
| int Centy=y()+h()/2; | |||
| m_Icon->draw(Centx-m_Icon->w()/2,Centy-m_Icon->h()/2); | |||
| } | |||
| } | |||
| void Fl_DeviceGUI::Setup(const DeviceGUIInfo& Info, bool FirstTime) | |||
| { | |||
| m_Info=Info; | |||
| // Remove all current connections - it's the safest thing to do. | |||
| if (parent() && !FirstTime) | |||
| { | |||
| ((Fl_Canvas*)(parent()))->ClearConnections(this); | |||
| } | |||
| // delete the current ports | |||
| for(vector<Fl_Button*>::iterator i=m_PortVec.begin(); | |||
| i!=m_PortVec.end(); i++) | |||
| { | |||
| remove(*i); | |||
| delete(*i); | |||
| } | |||
| m_PortVec.clear(); | |||
| int InputX=x()+2; | |||
| int OutputX=x()+PortGroupWidth+Info.Width+4; | |||
| int StartY=y()+TitleBarHeight; | |||
| int PortDist=10; | |||
| int PortNum=0; | |||
| h(Info.Height+TitleBarHeight); | |||
| for (int n=0; n<Info.NumInputs; n++) | |||
| { | |||
| Fl_Button* NewInput = new Fl_Button(InputX,StartY+PortDist*n,PortSize,PortSize,""); | |||
| NewInput->type(1); | |||
| NewInput->value(false); | |||
| NewInput->box(FL_ROUNDED_BOX); | |||
| Fl_Color col = (Fl_Color) WIRE_COL0; | |||
| switch (Info.PortTypes[n]) { | |||
| case 0: col = (Fl_Color) WIRE_COL0; | |||
| break; | |||
| case 1: col = (Fl_Color) WIRE_COL1; | |||
| break; | |||
| case 2: col = (Fl_Color) WIRE_COL2; | |||
| break; | |||
| case 3: col = (Fl_Color) WIRE_COL3; | |||
| break; | |||
| case 4: col = (Fl_Color) WIRE_COL4; | |||
| break; | |||
| default: col = (Fl_Color) WIRE_COL0; | |||
| } | |||
| NewInput->selection_color(col); | |||
| NewInput->down_box(FL_ROUNDED_BOX); | |||
| NewInput->tooltip(Info.PortTips[n].c_str()); | |||
| NewInput->callback((Fl_Callback*)cb_Port,(void*)&Numbers[PortNum]); | |||
| m_PortVec.push_back(NewInput); | |||
| add(NewInput); | |||
| PortNum++; | |||
| } | |||
| for (int n=0; n<Info.NumOutputs; n++) | |||
| { | |||
| Fl_Button* NewOutput = new Fl_Button(OutputX,StartY+PortDist*n,PortSize,PortSize,""); | |||
| NewOutput->type(1); | |||
| NewOutput->value(false); | |||
| NewOutput->box(FL_ROUNDED_BOX); | |||
| Fl_Color col = (Fl_Color) WIRE_COL0; | |||
| switch (Info.PortTypes[n+Info.NumInputs]) { | |||
| case 0: col = (Fl_Color) WIRE_COL0; | |||
| break; | |||
| case 1: col = (Fl_Color) WIRE_COL1; | |||
| break; | |||
| case 2: col = (Fl_Color) WIRE_COL2; | |||
| break; | |||
| case 3: col = (Fl_Color) WIRE_COL3; | |||
| break; | |||
| case 4: col = (Fl_Color) WIRE_COL4; | |||
| break; | |||
| default: col = (Fl_Color) WIRE_COL0; | |||
| } | |||
| NewOutput->selection_color(col); | |||
| NewOutput->down_box(FL_ROUNDED_BOX); | |||
| NewOutput->tooltip(Info.PortTips[n+Info.NumInputs].c_str()); | |||
| NewOutput->callback((Fl_Callback*)cb_Port,(void*)&Numbers[PortNum]); | |||
| m_PortVec.push_back(NewOutput); | |||
| add(NewOutput); | |||
| PortNum++; | |||
| } | |||
| } | |||
| inline void Fl_DeviceGUI::cb_Port_i(Fl_Button* o, void* v) | |||
| { | |||
| int Port=*(int*)(v); | |||
| PortType Pt; | |||
| if (m_DelMe) return; | |||
| // Find out if this is an input or an output. | |||
| if (Port<m_Info.NumInputs) | |||
| { | |||
| Pt=INPUT; | |||
| } | |||
| else | |||
| { | |||
| Pt=OUTPUT; | |||
| Port-=m_Info.NumInputs; | |||
| } | |||
| ((Fl_Canvas*)(parent()))->PortClicked(this,Pt,Port,o->value()); | |||
| } | |||
| void Fl_DeviceGUI::cb_Port(Fl_Button* o, void* v) | |||
| {((Fl_DeviceGUI*)(o->parent()))->cb_Port_i(o,v);} | |||
| @@ -0,0 +1,107 @@ | |||
| /* DeviceGUI composite Widget | |||
| * Copyleft (C) 2002 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include <FL/Fl.H> | |||
| #include <FL/Fl_Group.H> | |||
| #include <FL/Fl_Button.H> | |||
| #include <FL/Fl_Pixmap.h> | |||
| #include <iostream> | |||
| #include <vector> | |||
| #include <string> | |||
| #include "Fl_DragBar.H" | |||
| #include <stdio.h> | |||
| #ifndef DEVICEGUI | |||
| #define DEVICEGUI | |||
| #define WIRE_COL0 91 | |||
| #define WIRE_COL1 FL_GREEN | |||
| #define WIRE_COL2 FL_YELLOW | |||
| #define WIRE_COL3 FL_BLUE | |||
| #define WIRE_COL4 FL_CYAN | |||
| using namespace std; | |||
| static const int TitleBarHeight = 12; | |||
| static const int PortGroupWidth = 12; | |||
| static const int PortSize=6; | |||
| struct DeviceGUIInfo | |||
| { | |||
| int XPos; | |||
| int YPos; | |||
| int Width; | |||
| int Height; | |||
| int NumInputs; | |||
| int NumOutputs; | |||
| vector<string> PortTips; | |||
| string Name; | |||
| vector<int> PortTypes; | |||
| }; | |||
| class Fl_DeviceGUI : public Fl_Group | |||
| { | |||
| public: | |||
| Fl_DeviceGUI(const DeviceGUIInfo& Info, Fl_Group *PW, Fl_Pixmap *Icon); | |||
| virtual int handle(int event); | |||
| virtual void draw(); | |||
| enum PortType {INPUT,OUTPUT}; | |||
| int GetID() { return m_ID; } | |||
| void SetID(int s) { m_ID=s; /*DisplayID(s);*/ } | |||
| /*char did[8]; | |||
| void DisplayID(int s) { sprintf(did,"%d",s); label(did); }*/ | |||
| bool Killed() { return m_DelMe; } | |||
| int GetPortX(int n) { return m_PortVec[n]->x()+PortSize/2; } | |||
| int GetPortY(int n) { return m_PortVec[n]->y()+PortSize/2; } | |||
| void ForcePortValue(int n, bool v) { m_PortVec[n]->value(v); } | |||
| const DeviceGUIInfo* GetInfo() { return &m_Info; } | |||
| Fl_Group* GetPluginWindow() { return m_PluginWindow; } | |||
| // automatically called from the constructor, but may be redone at any time. | |||
| virtual void Setup(const DeviceGUIInfo& Info, bool FirstTime = false); | |||
| virtual void Clear(); | |||
| int GetPortType(int n) { return m_Info.PortTypes[n]; } | |||
| protected: | |||
| DeviceGUIInfo m_Info; | |||
| Fl_DragBar* m_DragBar; | |||
| Fl_Group* m_PluginWindow; | |||
| Fl_Pixmap* m_Icon; | |||
| private: | |||
| inline void cb_Port_i(Fl_Button* o, void* v); | |||
| static void cb_Port(Fl_Button* o, void* v); | |||
| vector<Fl_Button*> m_PortVec; | |||
| static int Numbers[512]; | |||
| string m_Name; | |||
| int m_ID; | |||
| bool m_DelMe; | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,23 @@ | |||
| // generated by Fast Light User Interface Designer (fluid) version 1.0010 | |||
| #ifndef Fl_DragBar_H | |||
| #define Fl_DragBar_H | |||
| #include <FL/Fl.H> | |||
| #include <FL/fl_draw.H> | |||
| #include <FL/Fl_Widget.H> | |||
| #include <FL/Fl_Window.H> | |||
| class Fl_DragBar : public Fl_Widget { | |||
| int old_rx,old_ry; | |||
| int _type; | |||
| public: | |||
| enum DragType {WINDRAG=0,NICEWINDRAG,FLDRAG,NICEFLDRAG}; | |||
| Fl_DragBar(int x,int y,int w,int h,const char *l=0); | |||
| ~Fl_DragBar(); | |||
| private: | |||
| void draw(); | |||
| int handle(int event); | |||
| public: | |||
| void type(int t); | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,166 @@ | |||
| // generated by Fast Light User Interface Designer (fluid) version 1.0010 | |||
| #include "Fl_DragBar.H" | |||
| #include <string.h> | |||
| Fl_DragBar::Fl_DragBar(int x,int y,int w,int h,const char *l): Fl_Widget(x,y,w,h,l) { | |||
| _type = Fl_DragBar::NICEFLDRAG; | |||
| } | |||
| Fl_DragBar::~Fl_DragBar() { | |||
| fl_cursor(FL_CURSOR_DEFAULT); | |||
| } | |||
| void Fl_DragBar::draw() { | |||
| int ww,hh; | |||
| uchar r,g,b; | |||
| uchar rb,gb,bb; | |||
| uchar rd,gd,bd; | |||
| int val; | |||
| draw_box(); | |||
| int x1 = x()+5; | |||
| int x2 = x()+w()-5; | |||
| int y1 = y()+5; | |||
| int y2 = y()+h()-5; | |||
| Fl::get_color(color(),r,g,b); | |||
| val = (int)r + 64; rb = val > 255 ? 255:val; | |||
| val = (int)g + 64; gb = val > 255 ? 255:val; | |||
| val = (int)b + 64; bb = val > 255 ? 255:val; | |||
| val = (int)r - 64; rd = val < 0 ? 0:val; | |||
| val = (int)g - 64; gd = val < 0 ? 0:val; | |||
| val = (int)b - 64; bd = val < 0 ? 0:val; | |||
| if (h()<w()) | |||
| { | |||
| if ((_type==Fl_DragBar::NICEWINDRAG) || (_type==Fl_DragBar::NICEFLDRAG)) | |||
| { | |||
| fl_line_style(FL_DASH); | |||
| for (int i = y() + 4; i < y()+h()-5;i+=3) | |||
| { | |||
| fl_line_style(FL_DASH); | |||
| fl_color(rb,gb,bb); | |||
| fl_line(x1,i,x2,i); | |||
| fl_color(rd,gd,bd); | |||
| fl_line(x1,i+1,x2,i+1); | |||
| } | |||
| fl_line_style(FL_SOLID); | |||
| } | |||
| fl_color(color()); | |||
| const char *l = label(); | |||
| ww = labelsize()*strlen(l)/2; | |||
| //ww = (int)fl_width(l); | |||
| hh = h() - 4; | |||
| if (align() & FL_ALIGN_RIGHT) | |||
| { | |||
| x1 = x() + w() - 5 - ww; | |||
| } | |||
| else | |||
| if (align() & FL_ALIGN_CENTER) | |||
| { | |||
| x1 = x() + 5; | |||
| } | |||
| else | |||
| { | |||
| x1 = x() + (w() - ww) / 2; | |||
| } | |||
| //fl_rectf(x1,y()+(h() - hh) / 2, ww, hh); | |||
| draw_label(); | |||
| } | |||
| else | |||
| if ((_type==Fl_DragBar::NICEWINDRAG) || (_type==Fl_DragBar::NICEFLDRAG)) | |||
| { | |||
| fl_line_style(FL_DASH); | |||
| for (int i = x() + 4; i < x()+w()-5;i+=3) | |||
| { | |||
| fl_color(rb,gb,bb); | |||
| fl_line(i,y1,i,y2); | |||
| fl_color(rd,gd,bd); | |||
| fl_line(i+1,y1,i+1,y2); | |||
| } | |||
| fl_line_style(FL_SOLID); | |||
| } | |||
| } | |||
| int Fl_DragBar::handle(int event) { | |||
| int rx,ry,xx,yy; | |||
| int mx,my; | |||
| if (Fl::event_button()!=1) return 0; | |||
| if (_type < (int)Fl_DragBar::FLDRAG) | |||
| { | |||
| rx = Fl::event_x_root(); | |||
| ry = Fl::event_y_root(); | |||
| } | |||
| else | |||
| { | |||
| rx = Fl::event_x(); | |||
| ry = Fl::event_y(); | |||
| } | |||
| switch(event) | |||
| { | |||
| case FL_PUSH: | |||
| { | |||
| window()->show(); | |||
| fl_cursor(FL_CURSOR_MOVE); | |||
| if (_type < (int)Fl_DragBar::FLDRAG) | |||
| { | |||
| old_rx = rx - window()->x(); | |||
| old_ry = ry - window()->y(); | |||
| } | |||
| else | |||
| { | |||
| old_rx = rx - parent()->x(); | |||
| old_ry = ry - parent()->y(); | |||
| } | |||
| return 1; | |||
| } | |||
| case FL_RELEASE: | |||
| { | |||
| fl_cursor(FL_CURSOR_DEFAULT); | |||
| do_callback(); | |||
| return 1; | |||
| } | |||
| case FL_DRAG: | |||
| { | |||
| if ((rx != old_rx) || (ry != old_ry)) | |||
| { | |||
| xx = rx - old_rx; | |||
| yy = ry - old_ry; | |||
| if (_type < (int)Fl_DragBar::FLDRAG) | |||
| { | |||
| window()->position(xx,yy); | |||
| } | |||
| else | |||
| { | |||
| parent()->position(xx,yy); | |||
| if (parent()->parent()) | |||
| parent()->parent()->redraw(); | |||
| else | |||
| window()->redraw(); | |||
| } | |||
| } | |||
| return 1; | |||
| } | |||
| case FL_MOVE: | |||
| { | |||
| return 0; | |||
| } | |||
| case FL_ENTER : | |||
| { | |||
| return 0; | |||
| } | |||
| case FL_LEAVE : | |||
| { | |||
| fl_cursor(FL_CURSOR_DEFAULT); | |||
| return 1; | |||
| } | |||
| default : | |||
| return 0; | |||
| } | |||
| } | |||
| void Fl_DragBar::type(int t) { | |||
| _type = t; | |||
| } | |||
| @@ -0,0 +1,180 @@ | |||
| # data file for the Fltk User Interface Designer (fluid) | |||
| version 1.0010 | |||
| header_name {.H} | |||
| code_name {.cxx} | |||
| gridx 2 | |||
| gridy 2 | |||
| snap 1 | |||
| decl {\#include <FL/fl_draw.H>} {public | |||
| } | |||
| decl {\#include <FL/Fl_Widget.H>} {public | |||
| } | |||
| decl {\#include <FL/Fl_Window.H>} {public | |||
| } | |||
| class Fl_DragBar {open : {public Fl_Widget} | |||
| } { | |||
| decl {int old_rx,old_ry;} {} | |||
| decl {int _type;} {} | |||
| decl {enum DragType {WINDRAG=0,NICEWINDRAG,FLDRAG,NICEFLDRAG};} {public | |||
| } | |||
| Function {Fl_DragBar(int x,int y,int w,int h,const char *l=0): Fl_Widget(x,y,w,h,l)} {open | |||
| } { | |||
| code {_type = Fl_DragBar::NICEFLDRAG;} {} | |||
| } | |||
| Function {~Fl_DragBar()} {} {} | |||
| Function {draw()} {private | |||
| } { | |||
| code {int ww,hh; | |||
| uchar r,g,b; | |||
| uchar rb,gb,bb; | |||
| uchar rd,gd,bd; | |||
| int val; | |||
| draw_box(); | |||
| int x1 = x()+5; | |||
| int x2 = x()+w()-5; | |||
| int y1 = y()+5; | |||
| int y2 = y()+h()-5; | |||
| Fl::get_color(color(),r,g,b); | |||
| val = (int)r + 64; rb = val > 255 ? 255:val; | |||
| val = (int)g + 64; gb = val > 255 ? 255:val; | |||
| val = (int)b + 64; bb = val > 255 ? 255:val; | |||
| val = (int)r - 64; rd = val < 0 ? 0:val; | |||
| val = (int)g - 64; gd = val < 0 ? 0:val; | |||
| val = (int)b - 64; bd = val < 0 ? 0:val; | |||
| if (h()<w()) | |||
| { | |||
| if ((_type==Fl_DragBar::NICEWINDRAG) || (_type==Fl_DragBar::NICEFLDRAG)) | |||
| { | |||
| fl_line_style(FL_DASH); | |||
| for (int i = y() + 4; i < y()+h()-5;i+=3) | |||
| { | |||
| fl_line_style(FL_DASH); | |||
| fl_color(rb,gb,bb); | |||
| fl_line(x1,i,x2,i); | |||
| fl_color(rd,gd,bd); | |||
| fl_line(x1,i+1,x2,i+1); | |||
| } | |||
| fl_line_style(FL_SOLID); | |||
| } | |||
| fl_color(color()); | |||
| const char *l = label(); | |||
| ww = labelsize()*strlen(l)/2; | |||
| //ww = (int)fl_width(l); | |||
| hh = h() - 4; | |||
| if (align() & FL_ALIGN_RIGHT) | |||
| { | |||
| x1 = x() + w() - 5 - ww; | |||
| } | |||
| else | |||
| if (align() & FL_ALIGN_CENTER) | |||
| { | |||
| x1 = x() + 5; | |||
| } | |||
| else | |||
| { | |||
| x1 = x() + (w() - ww) / 2; | |||
| } | |||
| fl_rectf(x1,y()+(h() - hh) / 2, ww, hh); | |||
| draw_label(); | |||
| } | |||
| else | |||
| if ((_type==Fl_DragBar::NICEWINDRAG) || (_type==Fl_DragBar::NICEFLDRAG)) | |||
| { | |||
| fl_line_style(FL_DASH); | |||
| for (int i = x() + 4; i < x()+w()-5;i+=3) | |||
| { | |||
| fl_color(rb,gb,bb); | |||
| fl_line(i,y1,i,y2); | |||
| fl_color(rd,gd,bd); | |||
| fl_line(i+1,y1,i+1,y2); | |||
| } | |||
| fl_line_style(FL_SOLID); | |||
| }} {selected | |||
| } | |||
| } | |||
| Function {handle(int event)} {private return_type int | |||
| } { | |||
| code {int rx,ry,xx,yy; | |||
| int mx,my; | |||
| if (_type < (int)Fl_DragBar::FLDRAG) | |||
| { | |||
| rx = Fl::event_x_root(); | |||
| ry = Fl::event_y_root(); | |||
| } | |||
| else | |||
| { | |||
| rx = Fl::event_x(); | |||
| ry = Fl::event_y(); | |||
| } | |||
| switch(event) | |||
| { | |||
| case FL_PUSH: | |||
| { | |||
| window()->show(); | |||
| fl_cursor(FL_CURSOR_MOVE); | |||
| if (_type < (int)Fl_DragBar::FLDRAG) | |||
| { | |||
| old_rx = rx - window()->x(); | |||
| old_ry = ry - window()->y(); | |||
| } | |||
| else | |||
| { | |||
| old_rx = rx - parent()->x(); | |||
| old_ry = ry - parent()->y(); | |||
| } | |||
| return 1; | |||
| } | |||
| case FL_RELEASE: | |||
| { | |||
| fl_cursor(FL_CURSOR_DEFAULT); | |||
| do_callback(); | |||
| return 1; | |||
| } | |||
| case FL_DRAG: | |||
| { | |||
| if ((rx != old_rx) || (ry != old_ry)) | |||
| { | |||
| xx = rx - old_rx; | |||
| yy = ry - old_ry; | |||
| if (_type < (int)Fl_DragBar::FLDRAG) | |||
| { | |||
| window()->position(xx,yy); | |||
| } | |||
| else | |||
| { | |||
| parent()->position(xx,yy); | |||
| if (parent()->parent()) | |||
| parent()->parent()->redraw(); | |||
| else | |||
| window()->redraw(); | |||
| } | |||
| } | |||
| return 1; | |||
| } | |||
| case FL_MOVE: | |||
| { | |||
| return 0; | |||
| } | |||
| case FL_ENTER : | |||
| { | |||
| return 0; | |||
| } | |||
| case FL_LEAVE : | |||
| { | |||
| fl_cursor(FL_CURSOR_DEFAULT); | |||
| return 1; | |||
| } | |||
| default : | |||
| return 0; | |||
| }} {} | |||
| } | |||
| Function {type(int t)} {} { | |||
| code {_type = t;} {} | |||
| } | |||
| } | |||
| @@ -0,0 +1,40 @@ | |||
| /* XPM */ | |||
| static char * comment_xpm[] = { | |||
| "15 15 22 1", | |||
| " c None", | |||
| ". c #000000", | |||
| "+ c #191919", | |||
| "@ c #3D3D3D", | |||
| "# c #525252", | |||
| "$ c #343434", | |||
| "% c #FFFFFF", | |||
| "& c #FDFDFD", | |||
| "* c #080808", | |||
| "= c #E1E1E1", | |||
| "- c #DBDBDB", | |||
| "; c #C0C0C0", | |||
| "> c #9A9A9A", | |||
| ", c #C8C8C8", | |||
| "' c #555555", | |||
| ") c #9F9F9F", | |||
| "! c #121212", | |||
| "~ c #1F1F1F", | |||
| "{ c #ECECEC", | |||
| "] c #141414", | |||
| "^ c #020202", | |||
| "/ c #242424", | |||
| " ", | |||
| " .+@#.. ", | |||
| " ..$%&*.. ", | |||
| " ....=-.... ", | |||
| " ....;>.... ", | |||
| " ....,'.... ", | |||
| " ....)!.... ", | |||
| " .......... ", | |||
| " . ....'~.... ", | |||
| " .......>{].. ", | |||
| " ... ..^/.. ", | |||
| " .. ", | |||
| " ", | |||
| " .. ", | |||
| " "}; | |||
| @@ -0,0 +1,555 @@ | |||
| /* XPM */ | |||
| static char * edit_xpm[] = { | |||
| "48 51 501 2", | |||
| " c None", | |||
| ". c #0E0F16", | |||
| "+ c #191B28", | |||
| "@ c #232538", | |||
| "# c #2C2F47", | |||
| "$ c #323552", | |||
| "% c #36395A", | |||
| "& c #3C3F65", | |||
| "* c #3B3F66", | |||
| "= c #000000", | |||
| "- c #2E3045", | |||
| "; c #7C82BD", | |||
| "> c #8389C9", | |||
| ", c #8389CC", | |||
| "' c #8188CD", | |||
| ") c #7E85CC", | |||
| "! c #7C83CA", | |||
| "~ c #7980C9", | |||
| "{ c #767DC8", | |||
| "] c #6F76BF", | |||
| "^ c #5E65AA", | |||
| "/ c #2A306C", | |||
| "( c #2D2F45", | |||
| "_ c #868DCF", | |||
| ": c #838ACE", | |||
| "< c #8087CD", | |||
| "[ c #7E85CB", | |||
| "} c #7B82CA", | |||
| "| c #787FC9", | |||
| "1 c #757DC7", | |||
| "2 c #727AC6", | |||
| "3 c #615669", | |||
| "4 c #8C5717", | |||
| "5 c #333466", | |||
| "6 c #1F2131", | |||
| "7 c #7F85C7", | |||
| "8 c #7E85CA", | |||
| "9 c #7D84CB", | |||
| "0 c #7A81CA", | |||
| "a c #777FC8", | |||
| "b c #757CC7", | |||
| "c c #7279C6", | |||
| "d c #6F76C5", | |||
| "e c #5C62A3", | |||
| "f c #936E5D", | |||
| "g c #BE7210", | |||
| "h c #462900", | |||
| "i c #111119", | |||
| "j c #6E5138", | |||
| "k c #564C59", | |||
| "l c #7981C9", | |||
| "m c #777EC8", | |||
| "n c #747BC7", | |||
| "o c #7178C5", | |||
| "p c #6E76C4", | |||
| "q c #6B73C3", | |||
| "r c #6970C2", | |||
| "s c #636BBE", | |||
| "t c #564966", | |||
| "u c #C37200", | |||
| "v c #8D5200", | |||
| "w c #C77400", | |||
| "x c #A76E2D", | |||
| "y c #555274", | |||
| "z c #737AC6", | |||
| "A c #7078C5", | |||
| "B c #6D75C4", | |||
| "C c #6B72C3", | |||
| "D c #6870C1", | |||
| "E c #5B62AD", | |||
| "F c #5259A1", | |||
| "G c #2E346F", | |||
| "H c #0A0600", | |||
| "I c #A66100", | |||
| "J c #E28300", | |||
| "K c #5F3700", | |||
| "L c #696FB0", | |||
| "M c #6F77C5", | |||
| "N c #6D74C3", | |||
| "O c #6A72C2", | |||
| "P c #676FC1", | |||
| "Q c #646CC0", | |||
| "R c #584C60", | |||
| "S c #A76920", | |||
| "T c #403A5D", | |||
| "U c #754400", | |||
| "V c #DA7F00", | |||
| "W c #E48500", | |||
| "X c #DE8100", | |||
| "Y c #5A5F9A", | |||
| "Z c #6F76C4", | |||
| "` c #6C74C3", | |||
| " . c #6971C2", | |||
| ".. c #666EC1", | |||
| "+. c #646CBF", | |||
| "@. c #6169BE", | |||
| "#. c #535AA6", | |||
| "$. c #786376", | |||
| "%. c #C57715", | |||
| "&. c #613900", | |||
| "*. c #020100", | |||
| "=. c #D77D00", | |||
| "-. c #CE7800", | |||
| ";. c #4B5084", | |||
| ">. c #6870C2", | |||
| ",. c #666EC0", | |||
| "'. c #636BBF", | |||
| "). c #6068BE", | |||
| "!. c #5D65BC", | |||
| "~. c #5B63BB", | |||
| "{. c #575FB8", | |||
| "]. c #3F3E71", | |||
| "^. c #935600", | |||
| "/. c #B76A00", | |||
| "(. c #281700", | |||
| "_. c #C47200", | |||
| ":. c #DD8100", | |||
| "<. c #3E426F", | |||
| "[. c #686FC1", | |||
| "}. c #656DC0", | |||
| "|. c #626ABF", | |||
| "1. c #5F67BD", | |||
| "2. c #5A62BB", | |||
| "3. c #575FB9", | |||
| "4. c #535CB7", | |||
| "5. c #303670", | |||
| "6. c #512F00", | |||
| "7. c #D07900", | |||
| "8. c #8E5200", | |||
| "9. c #E08300", | |||
| "0. c #161723", | |||
| "a. c #1A1C2A", | |||
| "b. c #0F1019", | |||
| "c. c #040407", | |||
| "d. c #31355B", | |||
| "e. c #5C64BC", | |||
| "f. c #5961BA", | |||
| "g. c #565FB9", | |||
| "h. c #535CB8", | |||
| "i. c #5059B6", | |||
| "j. c #30366E", | |||
| "k. c #190F00", | |||
| "l. c #B66A00", | |||
| "m. c #D67D00", | |||
| "n. c #AE7942", | |||
| "o. c #5A5C88", | |||
| "p. c #6F76BC", | |||
| "q. c #666DB1", | |||
| "r. c #555A95", | |||
| "s. c #414677", | |||
| "t. c #070711", | |||
| "u. c #1F223B", | |||
| "v. c #585FA9", | |||
| "w. c #5C64B5", | |||
| "x. c #5C64B8", | |||
| "y. c #5861BA", | |||
| "z. c #555EB9", | |||
| "A. c #535BB8", | |||
| "B. c #5058B6", | |||
| "C. c #4D56B5", | |||
| "D. c #30366C", | |||
| "E. c #7C4800", | |||
| "F. c #A45F00", | |||
| "G. c #805524", | |||
| "H. c #5C3808", | |||
| "I. c #777EC6", | |||
| "J. c #767EC8", | |||
| "K. c #7179C6", | |||
| "L. c #6D74C1", | |||
| "M. c #493013", | |||
| "N. c #535283", | |||
| "O. c #262B60", | |||
| "P. c #111321", | |||
| "Q. c #1D2038", | |||
| "R. c #1F233E", | |||
| "S. c #25294B", | |||
| "T. c #2A2E56", | |||
| "U. c #303667", | |||
| "V. c #353B72", | |||
| "W. c #3A4182", | |||
| "X. c #3D458D", | |||
| "Y. c #2F3569", | |||
| "Z. c #C57300", | |||
| "`. c #CD7700", | |||
| " + c #41456C", | |||
| ".+ c #777EC7", | |||
| "++ c #6E75C4", | |||
| "@+ c #6A71C0", | |||
| "#+ c #7F5E4E", | |||
| "$+ c #A5785E", | |||
| "%+ c #2B306C", | |||
| "&+ c #010101", | |||
| "*+ c #010103", | |||
| "=+ c #D87E00", | |||
| "-+ c #876655", | |||
| ";+ c #6066A3", | |||
| ">+ c #696EBA", | |||
| ",+ c #CC8127", | |||
| "'+ c #3B3B71", | |||
| ")+ c #965D14", | |||
| "!+ c #412601", | |||
| "~+ c #6C73C0", | |||
| "{+ c #6C73C3", | |||
| "]+ c #9A756C", | |||
| "^+ c #81593F", | |||
| "/+ c #3B3F68", | |||
| "(+ c #535996", | |||
| "_+ c #5E66BD", | |||
| ":+ c #6065B4", | |||
| "<+ c #C77918", | |||
| "[+ c #060300", | |||
| "}+ c #473F50", | |||
| "|+ c #564547", | |||
| "1+ c #666EBF", | |||
| "2+ c #626ABE", | |||
| "3+ c #5760BA", | |||
| "4+ c #986D58", | |||
| "5+ c #6E4000", | |||
| "6+ c #BE761D", | |||
| "7+ c #462F16", | |||
| "8+ c #626ABC", | |||
| "9+ c #5B64BC", | |||
| "0+ c #545CB8", | |||
| "a+ c #51529A", | |||
| "b+ c #C97608", | |||
| "c+ c #080500", | |||
| "d+ c #060608", | |||
| "e+ c #09090D", | |||
| "f+ c #0F0F16", | |||
| "g+ c #161722", | |||
| "h+ c #1D1E2C", | |||
| "i+ c #242637", | |||
| "j+ c #292B3F", | |||
| "k+ c #242638", | |||
| "l+ c #D97E00", | |||
| "m+ c #31355F", | |||
| "n+ c #6068BD", | |||
| "o+ c #5A63BB", | |||
| "p+ c #5860BA", | |||
| "q+ c #535BB7", | |||
| "r+ c #464EA3", | |||
| "s+ c #86551F", | |||
| "t+ c #6B3F00", | |||
| "u+ c #E38400", | |||
| "v+ c #787EB3", | |||
| "w+ c #868DC9", | |||
| "x+ c #8990CF", | |||
| "y+ c #8A91D1", | |||
| "z+ c #8990D1", | |||
| "A+ c #888FD0", | |||
| "B+ c #878ED0", | |||
| "C+ c #6E75B4", | |||
| "D+ c #1D1F41", | |||
| "E+ c #965700", | |||
| "F+ c #D47B00", | |||
| "G+ c #121424", | |||
| "H+ c #3C4276", | |||
| "I+ c #464D8D", | |||
| "J+ c #474E91", | |||
| "K+ c #474F96", | |||
| "L+ c #474F98", | |||
| "M+ c #474F9B", | |||
| "N+ c #464E9E", | |||
| "O+ c #464EA0", | |||
| "P+ c #424A99", | |||
| "Q+ c #29222C", | |||
| "R+ c #BE6F00", | |||
| "S+ c #202233", | |||
| "T+ c #181927", | |||
| "U+ c #06060A", | |||
| "V+ c #D37B00", | |||
| "W+ c #DC8000", | |||
| "X+ c #BB6D01", | |||
| "Y+ c #B68049", | |||
| "Z+ c #534C5A", | |||
| "`+ c #858CCF", | |||
| " @ c #848BCE", | |||
| ".@ c #67658A", | |||
| "+@ c #A9826E", | |||
| "@@ c #C17515", | |||
| "#@ c #A86200", | |||
| "$@ c #050509", | |||
| "%@ c #040509", | |||
| "&@ c #06060C", | |||
| "*@ c #070810", | |||
| "=@ c #090A14", | |||
| "-@ c #0D0E1D", | |||
| ";@ c #0D0F1E", | |||
| ">@ c #05060C", | |||
| ",@ c #8A5205", | |||
| "'@ c #9A828D", | |||
| ")@ c #7178C3", | |||
| "!@ c #686FB7", | |||
| "~@ c #6066AA", | |||
| "{@ c #565C9C", | |||
| "]@ c #4D528C", | |||
| "^@ c #242744", | |||
| "/@ c #CC7700", | |||
| "(@ c #0D0A0A", | |||
| "_@ c #7E748B", | |||
| ":@ c #444258", | |||
| "<@ c #8289CD", | |||
| "[@ c #6F4611", | |||
| "}@ c #8B6758", | |||
| "|@ c #2E2F60", | |||
| "1@ c #41383F", | |||
| "2@ c #AB6811", | |||
| "3@ c #6168A8", | |||
| "4@ c #676EBE", | |||
| "5@ c #4D424F", | |||
| "6@ c #76627E", | |||
| "7@ c #563922", | |||
| "8@ c #B46900", | |||
| "9@ c #C67300", | |||
| "0@ c #D17900", | |||
| "a@ c #D17A00", | |||
| "b@ c #B76C04", | |||
| "c@ c #996833", | |||
| "d@ c #44476A", | |||
| "e@ c #8087CC", | |||
| "f@ c #7F86CC", | |||
| "g@ c #696FAC", | |||
| "h@ c #626ABB", | |||
| "i@ c #262B61", | |||
| "j@ c #3E426B", | |||
| "k@ c #4C4968", | |||
| "l@ c #676EB5", | |||
| "m@ c #646BBD", | |||
| "n@ c #574750", | |||
| "o@ c #83656A", | |||
| "p@ c #684219", | |||
| "q@ c #9E5C00", | |||
| "r@ c #141520", | |||
| "s@ c #6C6A90", | |||
| "t@ c #575C8C", | |||
| "u@ c #5F649C", | |||
| "v@ c #59402C", | |||
| "w@ c #947577", | |||
| "x@ c #6D4B37", | |||
| "y@ c #6B3E00", | |||
| "z@ c #784600", | |||
| "A@ c #8A5000", | |||
| "B@ c #9D5B00", | |||
| "C@ c #AB6300", | |||
| "D@ c #AB6400", | |||
| "E@ c #A05D00", | |||
| "F@ c #895000", | |||
| "G@ c #834C00", | |||
| "H@ c #7F4A00", | |||
| "I@ c #7E4900", | |||
| "J@ c #7D4800", | |||
| "K@ c #7B4800", | |||
| "L@ c #7A4700", | |||
| "M@ c #724200", | |||
| "N@ c #78563A", | |||
| "O@ c #433C4F", | |||
| "P@ c #4D55AF", | |||
| "Q@ c #0E0F20", | |||
| "R@ c #1E1F2F", | |||
| "S@ c #7C83CB", | |||
| "T@ c #595F96", | |||
| "U@ c #655662", | |||
| "V@ c #806D8B", | |||
| "W@ c #523C38", | |||
| "X@ c #492B00", | |||
| "Y@ c #563200", | |||
| "Z@ c #683D00", | |||
| "`@ c #774500", | |||
| " # c #5A3400", | |||
| ".# c #66504C", | |||
| "+# c #343043", | |||
| "@# c #6970C1", | |||
| "## c #4A53AB", | |||
| "$# c #0B0C1A", | |||
| "%# c #23253A", | |||
| "&# c #1C2046", | |||
| "*# c #525897", | |||
| "=# c #6169B5", | |||
| "-# c #5E66BC", | |||
| ";# c #5962BB", | |||
| "># c #4851A7", | |||
| ",# c #070811", | |||
| "'# c #2B2E48", | |||
| ")# c #555DB7", | |||
| "!# c #171A3A", | |||
| "~# c #5B3500", | |||
| "{# c #9A6C46", | |||
| "]# c #5A3505", | |||
| "^# c #6169BD", | |||
| "/# c #565EB9", | |||
| "(# c #060710", | |||
| "_# c #2F3250", | |||
| ":# c #7077C5", | |||
| "<# c #515AB3", | |||
| "[# c #151834", | |||
| "}# c #CA7500", | |||
| "|# c #8B5101", | |||
| "1# c #786577", | |||
| "2# c #343456", | |||
| "3# c #555DB8", | |||
| "4# c #444C9E", | |||
| "5# c #06070E", | |||
| "6# c #34385A", | |||
| "7# c #7179C5", | |||
| "8# c #4E56AF", | |||
| "9# c #111327", | |||
| "0# c #DF8200", | |||
| "a# c #DB7F00", | |||
| "b# c #C87400", | |||
| "c# c #010102", | |||
| "d# c #5259A2", | |||
| "e# c #5C64B9", | |||
| "f# c #5B64BB", | |||
| "g# c #515AB7", | |||
| "h# c #4F58B6", | |||
| "i# c #414998", | |||
| "j# c #030307", | |||
| "k# c #383C62", | |||
| "l# c #6A71C2", | |||
| "m# c #0D0E1F", | |||
| "n# c #E18300", | |||
| "o# c #080910", | |||
| "p# c #20233F", | |||
| "q# c #282C52", | |||
| "r# c #313767", | |||
| "s# c #3B417C", | |||
| "t# c #424990", | |||
| "u# c #474E9D", | |||
| "v# c #4850A3", | |||
| "w# c #4850A9", | |||
| "x# c #3F4691", | |||
| "y# c #020204", | |||
| "z# c #3C406C", | |||
| "A# c #676EC1", | |||
| "B# c #5F66B3", | |||
| "C# c #5F66B5", | |||
| "D# c #4850A6", | |||
| "E# c #241A16", | |||
| "F# c #653B00", | |||
| "G# c #AF6600", | |||
| "H# c #05060B", | |||
| "I# c #0C0D1A", | |||
| "J# c #13152A", | |||
| "K# c #181B38", | |||
| "L# c #2E2B41", | |||
| "M# c #9F631A", | |||
| "N# c #C07928", | |||
| "O# c #995A03", | |||
| "P# c #734300", | |||
| "Q# c #3C2300", | |||
| "R# c #464B83", | |||
| "S# c #3F4273", | |||
| "T# c #5A5171", | |||
| "U# c #424A9C", | |||
| "V# c #030408", | |||
| "W# c #4A508E", | |||
| "X# c #5C65BC", | |||
| "Y# c #3D4590", | |||
| "Z# c #4E559A", | |||
| "`# c #5760B9", | |||
| " $ c #3B4289", | |||
| ".$ c #5259A4", | |||
| "+$ c #545CB6", | |||
| "@$ c #373D7E", | |||
| "#$ c #555DAF", | |||
| "$$ c #545DB8", | |||
| "%$ c #5058B2", | |||
| "&$ c #323872", | |||
| "*$ c #05050A", | |||
| "=$ c #555DB4", | |||
| "-$ c #525BB7", | |||
| ";$ c #4C54AE", | |||
| ">$ c #2F356B", | |||
| ",$ c #0A0B15", | |||
| "'$ c #525AB7", | |||
| ")$ c #4E57B5", | |||
| "!$ c #4951AA", | |||
| "~$ c #2B305F", | |||
| "{$ c #101123", | |||
| "]$ c #5159B7", | |||
| "^$ c #4F57B6", | |||
| "/$ c #4C55B5", | |||
| "($ c #4B54B4", | |||
| "_$ c #4A53B4", | |||
| ":$ c #464EA5", | |||
| "<$ c #282D58", | |||
| "[$ c #1D203E", | |||
| "}$ c #3C427A", | |||
| "|$ c #3F4683", | |||
| "1$ c #404789", | |||
| "2$ c #41488E", | |||
| "3$ c #424993", | |||
| "4$ c #424A98", | |||
| "5$ c #404895", | |||
| "6$ c #24294F", | |||
| "7$ c #030306", | |||
| "8$ c #0C0D19", | |||
| "9$ c #101222", | |||
| "0$ c #131527", | |||
| "a$ c #171A31", | |||
| "b$ c #0E101E", | |||
| " ", | |||
| " ", | |||
| " . + @ # $ % & * = ", | |||
| " - ; > , ' ) ! ~ { ] ^ / ", | |||
| " ( _ : < [ } | 1 2 3 4 5 ", | |||
| " 6 7 8 9 0 a b c d e f g h ", | |||
| " i j k l m n o p q r s t u v ", | |||
| " w x y { z A B C D E F G H I w ", | |||
| " J K L b 2 M N O P Q R S T = = U V ", | |||
| "W X Y c Z ` ...+.@.#.$.%.&.*. =.-. ", | |||
| " ;.p q >.,.'.).!.~.{.].^./.(. _.:. ", | |||
| " <.O [.}.|.1.!.2.3.4.5.= 6.7.8. 9. 0.@ a.b.c. ", | |||
| " d.P Q @.1.e.f.g.h.i.j.= = k.l.-. m.n.o.! 0 m p.q.r.s.t. ", | |||
| " u.v.w.x.~.y.z.A.B.C.D.= = = E.V F. G.H.I.J.n K.L.M.N.O. ", | |||
| " P.Q.R.S.T.U.V.W.X.Y.= = Z.`. +.+1 z A ++@+#+$+%+ ", | |||
| " = = = = = = = &+*+= = =+-+;+c M N O P >+,+'+= ", | |||
| " = = = = = = = = = )+!+~+{+ ...+.@.]+^+= ", | |||
| " = = = = = = /+(+O D }.'.)._+:+<+[+= ", | |||
| " }+|+1+Q 2+1.!.2.3+4+5+= ", | |||
| " -.6+7+8+@._+9+f.g.0+a+b+c+ ", | |||
| " d+e+f+g+h+i+j+k+ J l+ m+|.n+!.o+p+z.q+i.r+s+t+ ", | |||
| "W u+X v+w+x+y+z+A+B+_ C+D+E+9.F+ G+H+I+J+K+L+M+N+O+P+Q+R+S+T+b.U+ ", | |||
| " V+W+X X+Y+Z+A+B+_ `+ @.@+@@@#@ = $@%@&@&@*@=@-@;@>@,@'@m b )@!@~@{@]@^@ ", | |||
| "l+/@ (@_@:@`+ @: <@' [@}@|@= = = = = = = = = = 1@2@3@K.M B q 4@5@6@7@ ", | |||
| " 8@9@0@a@b@c@d@<@' e@f@[ g@h@i@= = = = = = = = = = j@k@l@++` O D m@n@o@p@v q@", | |||
| " r@s@t@f@[ 9 ! u@v@w@x@y@z@A@B@C@ D@E@^.F@G@H@I@J@K@L@M@N@O@` O >...Q |.).P@Q@ ", | |||
| " R@) 9 S@} 0 ~ T@U@V@W@X@Y@Z@ `@M@ #.#+#@#P }.'.@.1.!.##$#= ", | |||
| " %#} 0 ~ | m { b n y.&#= = = *#=#,.+.2+n+-#9+;#>#,#= ", | |||
| " '#| m { b n z c o )#!#= = ~#{#]#^#)._+e.2.p+/#r+(#= ", | |||
| " _#1 n z c o :#Z ++<#[#= = }#l+F+|#1#2#1.!.~.f.3.3#q+4#5#= ", | |||
| " 6#2 7#:#Z ++N {+C 8#9#= = F+0#a#b# c#d#e#f#2.3+z.h.g#h#i#j#= ", | |||
| " k#M p B {+C l#r [.##m#= = l+n#X /@ o#p#q#r#s#t#u#v#w#x#y#= ", | |||
| " z#` q O .D A#B#C#D#E#F#G#7.a@_. = = = = c#H#I#J#K#= = ", | |||
| " s. .D P ,.}.+.L#M#N#O#P#Q# = = = = = = = = = = ", | |||
| " R#,.}.+.'.2+@.S#T#U#V#= = = = = = = = = ", | |||
| " W#'.2+@.n+1.-#X#~.Y#*+= = ", | |||
| " Z#).1._+!.e.o+;#`# $= = = ", | |||
| " .$!.e.~.2.f.3+g.+$@$= = ", | |||
| " c##$2.f.p+3.z.$$h.%$&$= = ", | |||
| " *$=$3./#3#0+-$g#i.;$>$= = ", | |||
| " ,$3#0+q+'$i.h#)$C.!$~$= = ", | |||
| " {$'$]$B.^$C./$($_$:$<$= = ", | |||
| " *$[$}$|$1$2$3$4$U#5$6$= = ", | |||
| " y#7$&@,$8$9$0$a$b$= = ", | |||
| " = = = = = = = = = ", | |||
| " = = = = = = = = ", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " "}; | |||
| @@ -0,0 +1,954 @@ | |||
| /* XPM */ | |||
| static char * load_xpm[] = { | |||
| "50 70 881 2", | |||
| " c None", | |||
| ". c #E08300", | |||
| "+ c #E08200", | |||
| "@ c #E68600", | |||
| "# c #E88700", | |||
| "$ c #E28400", | |||
| "% c #DB7F00", | |||
| "& c #E48500", | |||
| "* c #E28300", | |||
| "= c #DF8100", | |||
| "- c #E58500", | |||
| "; c #C47200", | |||
| "> c #000000", | |||
| ", c #DF8200", | |||
| "' c #B26800", | |||
| ") c #D47B00", | |||
| "! c #A35F00", | |||
| "~ c #BD6E00", | |||
| "{ c #884F00", | |||
| "] c #353747", | |||
| "^ c #53566F", | |||
| "/ c #3F4155", | |||
| "( c #2D2F3D", | |||
| "_ c #1A1B21", | |||
| ": c #A15E00", | |||
| "< c #7D4900", | |||
| "[ c #3D3F52", | |||
| "} c #959BCD", | |||
| "| c #7C83C0", | |||
| "1 c #9BA1D8", | |||
| "2 c #AEB3DF", | |||
| "3 c #EBEBED", | |||
| "4 c #E0E0E3", | |||
| "5 c #CECFD1", | |||
| "6 c #BFBFC0", | |||
| "7 c #ADADAE", | |||
| "8 c #A1A1A2", | |||
| "9 c #949494", | |||
| "0 c #888888", | |||
| "a c #7C7C7C", | |||
| "b c #6E6E6E", | |||
| "c c #5D5D5D", | |||
| "d c #4E4E4E", | |||
| "e c #373737", | |||
| "f c #563A13", | |||
| "g c #E78600", | |||
| "h c #5A3606", | |||
| "i c #0B0C12", | |||
| "j c #151622", | |||
| "k c #6A6E8F", | |||
| "l c #7B82C1", | |||
| "m c #282F68", | |||
| "n c #8D93C9", | |||
| "o c #B1B6E0", | |||
| "p c #EFEFEF", | |||
| "q c #EEEEEE", | |||
| "r c #ECECEC", | |||
| "s c #EBEBEB", | |||
| "t c #EAEAEA", | |||
| "u c #E9E9E9", | |||
| "v c #E7E7E7", | |||
| "w c #E5E5E5", | |||
| "x c #E0E0E0", | |||
| "y c #D7D7D7", | |||
| "z c #C8C8C8", | |||
| "A c #B1B1B1", | |||
| "B c #9C9386", | |||
| "C c #DE860C", | |||
| "D c #56402E", | |||
| "E c #393C5D", | |||
| "F c #505482", | |||
| "G c #262949", | |||
| "H c #878DB8", | |||
| "I c #989FD6", | |||
| "J c #7277A4", | |||
| "K c #9CA2D7", | |||
| "L c #B8BCE1", | |||
| "M c #EDEDED", | |||
| "N c #E8E8E8", | |||
| "O c #E6E6E6", | |||
| "P c #E4E4E4", | |||
| "Q c #D9D9D9", | |||
| "R c #CDCDCD", | |||
| "S c #B9B8B6", | |||
| "T c #D88E28", | |||
| "U c #47352F", | |||
| "V c #33375C", | |||
| "W c #505585", | |||
| "X c #3D4481", | |||
| "Y c #06070F", | |||
| "Z c #0F0F14", | |||
| "` c #9EA4D8", | |||
| " . c #A0A6DC", | |||
| ".. c #9FA5DB", | |||
| "+. c #9DA4DA", | |||
| "@. c #C1C4E2", | |||
| "#. c #C2C2C2", | |||
| "$. c #D8D8D8", | |||
| "%. c #DCDCDC", | |||
| "&. c #DEDEDE", | |||
| "*. c #DFDFDF", | |||
| "=. c #D5A157", | |||
| "-. c #2A2537", | |||
| ";. c #353960", | |||
| ">. c #515687", | |||
| ",. c #353D7D", | |||
| "'. c #060710", | |||
| "). c #333546", | |||
| "!. c #9FA6DB", | |||
| "~. c #9EA4DB", | |||
| "{. c #9DA3DA", | |||
| "]. c #9CA2DA", | |||
| "^. c #CACDE4", | |||
| "/. c #E2E2E2", | |||
| "(. c #D0D0D0", | |||
| "_. c #C7C7C7", | |||
| ":. c #BDBDBD", | |||
| "<. c #B7B7B7", | |||
| "[. c #B3B3B3", | |||
| "}. c #AAAAAA", | |||
| "|. c #B6986E", | |||
| "1. c #E88802", | |||
| "2. c #E18300", | |||
| "3. c #4B2E06", | |||
| "4. c #BC6E02", | |||
| "5. c #E18302", | |||
| "6. c #2D2C40", | |||
| "7. c #3C4066", | |||
| "8. c #515689", | |||
| "9. c #2B316C", | |||
| "0. c #000001", | |||
| "a. c #4C4E68", | |||
| "b. c #9BA2DA", | |||
| "c. c #9AA1D9", | |||
| "d. c #D5D7E5", | |||
| "e. c #DDDDDD", | |||
| "f. c #D1C4B3", | |||
| "g. c #E68B0D", | |||
| "h. c #66400A", | |||
| "i. c #121212", | |||
| "j. c #221D15", | |||
| "k. c #AA6709", | |||
| "l. c #DA8004", | |||
| "m. c #2C2E49", | |||
| "n. c #3F436B", | |||
| "o. c #4C5186", | |||
| "p. c #222859", | |||
| "q. c #676B8E", | |||
| "r. c #9CA3DA", | |||
| "s. c #9BA1D9", | |||
| "t. c #9AA0D9", | |||
| "u. c #999FD8", | |||
| "v. c #E0E1E7", | |||
| "w. c #BBBBBB", | |||
| "x. c #B6B6B6", | |||
| "y. c #B5B5B5", | |||
| "z. c #C0C0C0", | |||
| "A. c #CBC7C2", | |||
| "B. c #E29426", | |||
| "C. c #9D5F09", | |||
| "D. c #1B1B1B", | |||
| "E. c #242424", | |||
| "F. c #2A2A2A", | |||
| "G. c #302F2C", | |||
| "H. c #8F5C17", | |||
| "I. c #C4760C", | |||
| "J. c #313352", | |||
| "K. c #434771", | |||
| "L. c #474D84", | |||
| "M. c #1B1F45", | |||
| "N. c #878DBD", | |||
| "O. c #99A0D9", | |||
| "P. c #989FD8", | |||
| "Q. c #9CA2D9", | |||
| "R. c #E6E6E7", | |||
| "S. c #E3E3E3", | |||
| "T. c #DADADA", | |||
| "U. c #CBCBCB", | |||
| "V. c #C48937", | |||
| "W. c #CB7703", | |||
| "X. c #26221C", | |||
| "Y. c #2B2B2B", | |||
| "Z. c #3B3B3B", | |||
| "`. c #454545", | |||
| " + c #484848", | |||
| ".+ c #323446", | |||
| "++ c #6F4E2F", | |||
| "@+ c #B87116", | |||
| "#+ c #383B5F", | |||
| "$+ c #474C7A", | |||
| "%+ c #434984", | |||
| "&+ c #151937", | |||
| "*+ c #1A1B24", | |||
| "=+ c #999FD7", | |||
| "-+ c #989ED8", | |||
| ";+ c #979DD7", | |||
| ">+ c #A8ADDA", | |||
| ",+ c #D1D1D1", | |||
| "'+ c #CECECE", | |||
| ")+ c #D2D2D2", | |||
| "!+ c #D5B17F", | |||
| "~+ c #E38501", | |||
| "{+ c #463318", | |||
| "]+ c #292929", | |||
| "^+ c #383838", | |||
| "/+ c #4A4A4A", | |||
| "(+ c #636363", | |||
| "_+ c #686868", | |||
| ":+ c #424565", | |||
| "<+ c #393D61", | |||
| "[+ c #3F4062", | |||
| "}+ c #414671", | |||
| "|+ c #4D5286", | |||
| "1+ c #404785", | |||
| "2+ c #101228", | |||
| "3+ c #3A3D53", | |||
| "4+ c #969DD7", | |||
| "5+ c #959CD7", | |||
| "6+ c #B5B8DC", | |||
| "7+ c #C5C5C5", | |||
| "8+ c #B2B2B2", | |||
| "9+ c #ADADAD", | |||
| "0+ c #B6A389", | |||
| "a+ c #E78907", | |||
| "b+ c #794D11", | |||
| "c+ c #414141", | |||
| "d+ c #5A5A5A", | |||
| "e+ c #717171", | |||
| "f+ c #818181", | |||
| "g+ c #838486", | |||
| "h+ c #4F5484", | |||
| "i+ c #4A4F7F", | |||
| "j+ c #494E7E", | |||
| "k+ c #4D5285", | |||
| "l+ c #555A94", | |||
| "m+ c #3E4588", | |||
| "n+ c #0A0B1A", | |||
| "o+ c #535675", | |||
| "p+ c #979ED8", | |||
| "q+ c #969CD7", | |||
| "r+ c #959BD7", | |||
| "s+ c #949AD6", | |||
| "t+ c #C1C4DD", | |||
| "u+ c #E1E1E1", | |||
| "v+ c #DBDBDB", | |||
| "w+ c #D5D5D5", | |||
| "x+ c #CEC8C0", | |||
| "y+ c #E3901D", | |||
| "z+ c #AB6606", | |||
| "A+ c #232221", | |||
| "B+ c #393939", | |||
| "C+ c #565656", | |||
| "D+ c #727272", | |||
| "E+ c #8A8A8A", | |||
| "F+ c #999999", | |||
| "G+ c #94959E", | |||
| "H+ c #5C629E", | |||
| "I+ c #585E99", | |||
| "J+ c #565C96", | |||
| "K+ c #585E9A", | |||
| "L+ c #5C63A3", | |||
| "M+ c #3C448A", | |||
| "N+ c #04050B", | |||
| "O+ c #7176A2", | |||
| "P+ c #949BD6", | |||
| "Q+ c #939AD6", | |||
| "R+ c #9299D5", | |||
| "S+ c #CED0DF", | |||
| "T+ c #D6D6D6", | |||
| "U+ c #CECDCB", | |||
| "V+ c #DF9A3A", | |||
| "W+ c #D17B03", | |||
| "X+ c #31291F", | |||
| "Y+ c #313131", | |||
| "Z+ c #434343", | |||
| "`+ c #595959", | |||
| " @ c #6F6F6F", | |||
| ".@ c #838383", | |||
| "+@ c #ABABAB", | |||
| "@@ c #9A9CB0", | |||
| "#@ c #666DB1", | |||
| "$@ c #636AAD", | |||
| "%@ c #6167AA", | |||
| "&@ c #6167AB", | |||
| "*@ c #6369B0", | |||
| "=@ c #373F86", | |||
| "-@ c #010102", | |||
| ";@ c #8D93CB", | |||
| ">@ c #9399D6", | |||
| ",@ c #9298D5", | |||
| "'@ c #DADBDF", | |||
| ")@ c #AFAFAF", | |||
| "!@ c #A7A7A7", | |||
| "~@ c #C99B5A", | |||
| "{@ c #E58600", | |||
| "]@ c #553B17", | |||
| "^@ c #2F2F2F", | |||
| "/@ c #474747", | |||
| "(@ c #646464", | |||
| "_@ c #9A9A9A", | |||
| ":@ c #999CBA", | |||
| "<@ c #6C73BC", | |||
| "[@ c #6970BA", | |||
| "}@ c #676EB7", | |||
| "|@ c #666EB7", | |||
| "1@ c #666DB8", | |||
| "2@ c #303779", | |||
| "3@ c #2B2D3E", | |||
| "4@ c #9399D5", | |||
| "5@ c #9198D5", | |||
| "6@ c #9097D4", | |||
| "7@ c #999FD5", | |||
| "8@ c #DEDEDF", | |||
| "9@ c #D2B58C", | |||
| "0@ c #89540A", | |||
| "a@ c #3D3D3D", | |||
| "b@ c #5C5C5C", | |||
| "c@ c #7A7A7A", | |||
| "d@ c #A8A8A8", | |||
| "e@ c #9296C0", | |||
| "f@ c #6E75C1", | |||
| "g@ c #6C73C0", | |||
| "h@ c #6A72BF", | |||
| "i@ c #6971BE", | |||
| "j@ c #646CBA", | |||
| "k@ c #2A306C", | |||
| "l@ c #454865", | |||
| "m@ c #9096D4", | |||
| "n@ c #8E95D4", | |||
| "o@ c #A7ABD6", | |||
| "p@ c #D4D4D4", | |||
| "q@ c #D0C2AE", | |||
| "r@ c #E68C0E", | |||
| "s@ c #BD7006", | |||
| "t@ c #282622", | |||
| "u@ c #343434", | |||
| "v@ c #747474", | |||
| "w@ c #909090", | |||
| "x@ c #BABABA", | |||
| "y@ c #888DC2", | |||
| "z@ c #6E75C4", | |||
| "A@ c #6C74C3", | |||
| "B@ c #6B72C2", | |||
| "C@ c #6A71C1", | |||
| "D@ c #5F67B8", | |||
| "E@ c #252A5F", | |||
| "F@ c #62668F", | |||
| "G@ c #9197D5", | |||
| "H@ c #8F96D4", | |||
| "I@ c #8E95D3", | |||
| "J@ c #8D94D3", | |||
| "K@ c #B5B8D7", | |||
| "L@ c #BCBCBC", | |||
| "M@ c #A6A6A6", | |||
| "N@ c #AA8D65", | |||
| "O@ c #E68703", | |||
| "P@ c #DC8002", | |||
| "Q@ c #3D2F1C", | |||
| "R@ c #323232", | |||
| "S@ c #4C4C4C", | |||
| "T@ c #696969", | |||
| "U@ c #858585", | |||
| "V@ c #9D9D9D", | |||
| "W@ c #AEAEAE", | |||
| "X@ c #BEBEBE", | |||
| "Y@ c #7E84C3", | |||
| "Z@ c #6D75C4", | |||
| "`@ c #6C73C3", | |||
| " # c #6A72C3", | |||
| ".# c #6971C2", | |||
| "+# c #5B63B4", | |||
| "@# c #202551", | |||
| "## c #8187BE", | |||
| "$# c #8E94D3", | |||
| "%# c #8D93D3", | |||
| "&# c #8B92D2", | |||
| "*# c #C3C5D8", | |||
| "=# c #D3D3D3", | |||
| "-# c #B1A18A", | |||
| ";# c #D88818", | |||
| "># c #644212", | |||
| ",# c #2C2C2C", | |||
| "'# c #444444", | |||
| ")# c #616161", | |||
| "!# c #7D7D7D", | |||
| "~# c #979797", | |||
| "{# c #A9A9A9", | |||
| "]# c #BDBDBE", | |||
| "^# c #737AC3", | |||
| "/# c #6B73C3", | |||
| "(# c #686FC2", | |||
| "_# c #555EAF", | |||
| ":# c #1A1F44", | |||
| "<# c #202230", | |||
| "[# c #8C93D3", | |||
| "}# c #8A91D1", | |||
| "|# c #D0D1D9", | |||
| "1# c #B8B8B8", | |||
| "2# c #A0A0A0", | |||
| "3# c #85827E", | |||
| "4# c #AE782C", | |||
| "5# c #E68601", | |||
| "6# c #9E610C", | |||
| "7# c #252524", | |||
| "8# c #5F5F5F", | |||
| "9# c #767676", | |||
| "0# c #B9B9B9", | |||
| "a# c #B8B8BD", | |||
| "b# c #6A71C3", | |||
| "c# c #6970C2", | |||
| "d# c #676FC1", | |||
| "e# c #666EC1", | |||
| "f# c #5059AA", | |||
| "g# c #151836", | |||
| "h# c #3D405B", | |||
| "i# c #8C93D2", | |||
| "j# c #8B91D2", | |||
| "k# c #8990D1", | |||
| "l# c #8C92D1", | |||
| "m# c #D6D6D8", | |||
| "n# c #A2A2A2", | |||
| "o# c #666666", | |||
| "p# c #745C3A", | |||
| "q# c #D27E08", | |||
| "r# c #CE7B07", | |||
| "s# c #38332C", | |||
| "t# c #3C3C3C", | |||
| "u# c #535353", | |||
| "v# c #898989", | |||
| "w# c #9C9C9C", | |||
| "x# c #9E9E9E", | |||
| "y# c #989898", | |||
| "z# c #AEB0BC", | |||
| "A# c #6A71C2", | |||
| "B# c #6870C2", | |||
| "C# c #656CC0", | |||
| "D# c #4C54A6", | |||
| "E# c #0F1228", | |||
| "F# c #575B83", | |||
| "G# c #8C92D2", | |||
| "H# c #8A91D2", | |||
| "I# c #888FD1", | |||
| "J# c #878ED0", | |||
| "K# c #A9ADD2", | |||
| "L# c #C1C2D4", | |||
| "M# c #CFCFD3", | |||
| "N# c #CFCFCF", | |||
| "O# c #929292", | |||
| "P# c #777777", | |||
| "Q# c #5E5E5E", | |||
| "R# c #534E48", | |||
| "S# c #5B4D3A", | |||
| "T# c #6A6A6A", | |||
| "U# c #A4A6BC", | |||
| "V# c #676EC1", | |||
| "W# c #656DC1", | |||
| "X# c #646CC0", | |||
| "Y# c #636BBF", | |||
| "Z# c #4750A2", | |||
| "`# c #0B0D1C", | |||
| " $ c #787EB5", | |||
| ".$ c #888ED0", | |||
| "+$ c #868DD0", | |||
| "@$ c #858CCF", | |||
| "#$ c #848BCF", | |||
| "$$ c #838ACE", | |||
| "%$ c #8289CD", | |||
| "&$ c #8B91CB", | |||
| "*$ c #979CC8", | |||
| "=$ c #A0A3C0", | |||
| "-$ c #A3A5B4", | |||
| ";$ c #9E9FA2", | |||
| ">$ c #8D8D8D", | |||
| ",$ c #787878", | |||
| "'$ c #626262", | |||
| ")$ c #969696", | |||
| "!$ c #999CBC", | |||
| "~$ c #656DC0", | |||
| "{$ c #6169BF", | |||
| "]$ c #434C9E", | |||
| "^$ c #181924", | |||
| "/$ c #8990D0", | |||
| "($ c #8289CE", | |||
| "_$ c #8188CD", | |||
| ":$ c #8087CD", | |||
| "<$ c #7E85CB", | |||
| "[$ c #7B82C8", | |||
| "}$ c #777EC4", | |||
| "|$ c #7278BC", | |||
| "1$ c #6C72B0", | |||
| "2$ c #6C71A2", | |||
| "3$ c #6C7093", | |||
| "4$ c #6D6F86", | |||
| "5$ c #72737F", | |||
| "6$ c #7D7D7F", | |||
| "7$ c #A5A5A5", | |||
| "8$ c #B0B0B0", | |||
| "9$ c #8F93BC", | |||
| "0$ c #636BC0", | |||
| "a$ c #626ABF", | |||
| "b$ c #6169BE", | |||
| "c$ c #6068BE", | |||
| "d$ c #3F4898", | |||
| "e$ c #020306", | |||
| "f$ c #383A55", | |||
| "g$ c #868CCF", | |||
| "h$ c #7F86CC", | |||
| "i$ c #787FC4", | |||
| "j$ c #757CC1", | |||
| "k$ c #7A81C8", | |||
| "l$ c #787FC7", | |||
| "m$ c #757BC2", | |||
| "n$ c #7077BC", | |||
| "o$ c #6A71B3", | |||
| "p$ c #636AA9", | |||
| "q$ c #5D63A0", | |||
| "r$ c #5A609B", | |||
| "s$ c #5B619C", | |||
| "t$ c #686DA1", | |||
| "u$ c #7C80AA", | |||
| "v$ c #9194B1", | |||
| "w$ c #A6A7B7", | |||
| "x$ c #B6B6B9", | |||
| "y$ c #8388BC", | |||
| "z$ c #5F68BE", | |||
| "A$ c #5E66BD", | |||
| "B$ c #3A428F", | |||
| "C$ c #51557C", | |||
| "D$ c #6D74B3", | |||
| "E$ c #636689", | |||
| "F$ c #686977", | |||
| "G$ c #67697E", | |||
| "H$ c #6B6E8D", | |||
| "I$ c #6D719C", | |||
| "J$ c #6D72A9", | |||
| "K$ c #6C72B4", | |||
| "L$ c #6B71B8", | |||
| "M$ c #676EB3", | |||
| "N$ c #646BB0", | |||
| "O$ c #646AB0", | |||
| "P$ c #646BB3", | |||
| "Q$ c #666DB7", | |||
| "R$ c #686FBC", | |||
| "S$ c #6970BF", | |||
| "T$ c #6C74C1", | |||
| "U$ c #7980C0", | |||
| "V$ c #898DBE", | |||
| "W$ c #989BBB", | |||
| "X$ c #A6A8B8", | |||
| "Y$ c #A1A3B7", | |||
| "Z$ c #6870BE", | |||
| "`$ c #5F67BE", | |||
| " % c #5C64BC", | |||
| ".% c #32397E", | |||
| "+% c #7176AF", | |||
| "@% c #747BBE", | |||
| "#% c #686978", | |||
| "$% c #757575", | |||
| "%% c #777A99", | |||
| "&% c #797B8D", | |||
| "*% c #7A7B7E", | |||
| "=% c #7B7B7B", | |||
| "-% c #7A7A7B", | |||
| ";% c #767780", | |||
| ">% c #73758C", | |||
| ",% c #6F7398", | |||
| "'% c #6B70A5", | |||
| ")% c #666DB3", | |||
| "!% c #6970BE", | |||
| "~% c #6971C0", | |||
| "{% c #6970C1", | |||
| "]% c #5F67BD", | |||
| "^% c #5961B9", | |||
| "/% c #2C3372", | |||
| "(% c #181925", | |||
| "_% c #838ACD", | |||
| ":% c #7E86CC", | |||
| "<% c #6B709E", | |||
| "[% c #797979", | |||
| "}% c #747581", | |||
| "|% c #777EC8", | |||
| "1% c #767DC8", | |||
| "2% c #757CC7", | |||
| "3% c #757BB9", | |||
| "4% c #777BA8", | |||
| "5% c #7F7F80", | |||
| "6% c #808080", | |||
| "7% c #828282", | |||
| "8% c #7C7D88", | |||
| "9% c #757895", | |||
| "0% c #6B70A0", | |||
| "a% c #5F66AA", | |||
| "b% c #6068B7", | |||
| "c% c #646CBF", | |||
| "d% c #5E67BD", | |||
| "e% c #5D65BD", | |||
| "f% c #5B63BC", | |||
| "g% c #565EB6", | |||
| "h% c #282E67", | |||
| "i% c #363955", | |||
| "j% c #7F86CD", | |||
| "k% c #7E85CC", | |||
| "l% c #7C83CA", | |||
| "m% c #676981", | |||
| "n% c #737695", | |||
| "o% c #757DC8", | |||
| "p% c #747CC7", | |||
| "q% c #737AC7", | |||
| "r% c #7279C6", | |||
| "s% c #747ABA", | |||
| "t% c #848484", | |||
| "u% c #868686", | |||
| "v% c #8C8C8C", | |||
| "w% c #8B8B8C", | |||
| "x% c #717384", | |||
| "y% c #555A99", | |||
| "z% c #545BA5", | |||
| "A% c #555CA8", | |||
| "B% c #5A62B4", | |||
| "C% c #5A63BB", | |||
| "D% c #5961BB", | |||
| "E% c #525AB2", | |||
| "F% c #242A5D", | |||
| "G% c #51557F", | |||
| "H% c #8188CE", | |||
| "I% c #7C84CB", | |||
| "J% c #73737A", | |||
| "K% c #7075AB", | |||
| "L% c #747BC7", | |||
| "M% c #7179C6", | |||
| "N% c #7078C6", | |||
| "O% c #787CAC", | |||
| "P% c #878787", | |||
| "Q% c #8B8B8B", | |||
| "R% c #8E8E8E", | |||
| "S% c #8F8F8F", | |||
| "T% c #6E7193", | |||
| "U% c #5C64B9", | |||
| "V% c #535BA8", | |||
| "W% c #535AA8", | |||
| "X% c #5A62BB", | |||
| "Y% c #5860BA", | |||
| "Z% c #4F57AF", | |||
| "`% c #1E234F", | |||
| " & c #7076B3", | |||
| ".& c #7D85CC", | |||
| "+& c #7C83CB", | |||
| "@& c #7B82CB", | |||
| "#& c #62689E", | |||
| "$& c #7C7C7D", | |||
| "%& c #7E7E7E", | |||
| "&& c #7F7F7F", | |||
| "*& c #79797C", | |||
| "=& c #7279C1", | |||
| "-& c #727AC7", | |||
| ";& c #7077C5", | |||
| ">& c #6F76C5", | |||
| ",& c #7E819E", | |||
| "'& c #939393", | |||
| ")& c #757789", | |||
| "!& c #5D66BD", | |||
| "~& c #4F56A2", | |||
| "{& c #5760BA", | |||
| "]& c #565EB9", | |||
| "^& c #4B54AC", | |||
| "/& c #1B1F46", | |||
| "(& c #1E2030", | |||
| "_& c #7F86CB", | |||
| ":& c #7D84CB", | |||
| "<& c #7B82CA", | |||
| "[& c #7981CA", | |||
| "}& c #65688E", | |||
| "|& c #737589", | |||
| "1& c #7178C6", | |||
| "2& c #6F77C5", | |||
| "3& c #6E76C5", | |||
| "4& c #858693", | |||
| "5& c #959595", | |||
| "6& c #777988", | |||
| "7& c #5962BB", | |||
| "8& c #5158A8", | |||
| "9& c #545DB4", | |||
| "0& c #545DB9", | |||
| "a& c #4851A8", | |||
| "b& c #181C3E", | |||
| "c& c #393D5D", | |||
| "d& c #7B83CB", | |||
| "e& c #7A82CA", | |||
| "f& c #7980CA", | |||
| "g& c #767EC7", | |||
| "h& c #696B80", | |||
| "i& c #6E729B", | |||
| "j& c #6E76C4", | |||
| "k& c #6D74C4", | |||
| "l& c #6E75BE", | |||
| "m& c #8B8B8D", | |||
| "n& c #919191", | |||
| "o& c #71738E", | |||
| "p& c #5B64BC", | |||
| "q& c #4E56A4", | |||
| "r& c #555DB8", | |||
| "s& c #545CB9", | |||
| "t& c #535BB8", | |||
| "u& c #464EA5", | |||
| "v& c #131631", | |||
| "w& c #3F4367", | |||
| "x& c #7A81CA", | |||
| "y& c #7980C9", | |||
| "z& c #777FC9", | |||
| "A& c #6A71B6", | |||
| "B& c #797A81", | |||
| "C& c #696FAE", | |||
| "D& c #6C74C4", | |||
| "E& c #757AB3", | |||
| "F& c #666A94", | |||
| "G& c #565FB9", | |||
| "H& c #4D54A2", | |||
| "I& c #545CB8", | |||
| "J& c #525BB8", | |||
| "K& c #515AB7", | |||
| "L& c #434CA2", | |||
| "M& c #0F1227", | |||
| "N& c #292C44", | |||
| "O& c #7880C9", | |||
| "P& c #777EC9", | |||
| "Q& c #6268A5", | |||
| "R& c #78787F", | |||
| "S& c #6E75C3", | |||
| "T& c #6B72C3", | |||
| "U& c #7D81A8", | |||
| "V& c #9B9B9B", | |||
| "W& c #5A5F9B", | |||
| "X& c #5861BA", | |||
| "Y& c #575FBA", | |||
| "Z& c #555DB9", | |||
| "`& c #4B53A1", | |||
| " * c #5159B7", | |||
| ".* c #5058B6", | |||
| "+* c #414AA0", | |||
| "@* c #0D0F21", | |||
| "#* c #5D629A", | |||
| "$* c #787FC9", | |||
| "%* c #666A96", | |||
| "&* c #6F728D", | |||
| "** c #87899E", | |||
| "=* c #565DA9", | |||
| "-* c #4B52A1", | |||
| ";* c #4F58B6", | |||
| ">* c #4E57B6", | |||
| ",* c #3F489D", | |||
| "'* c #070813", | |||
| ")* c #0E0F1B", | |||
| "!* c #434B90", | |||
| "~* c #575FAD", | |||
| "{* c #646CB9", | |||
| "]* c #4951A0", | |||
| "^* c #676A89", | |||
| "/* c #666B9C", | |||
| "(* c #686FC0", | |||
| "_* c #929297", | |||
| ":* c #9F9F9F", | |||
| "<* c #87878C", | |||
| "[* c #565EB7", | |||
| "}* c #555EB9", | |||
| "|* c #4A51A2", | |||
| "1* c #4E56B6", | |||
| "2* c #4D55B5", | |||
| "3* c #3D469A", | |||
| "4* c #05060D", | |||
| "5* c #191D40", | |||
| "6* c #202552", | |||
| "7* c #434346", | |||
| "8* c #808081", | |||
| "9* c #88898A", | |||
| "0* c #7F829B", | |||
| "a* c #797EB0", | |||
| "b* c #6F76BA", | |||
| "c* c #6870C1", | |||
| "d* c #6F75B8", | |||
| "e* c #A1A1A1", | |||
| "f* c #797B8F", | |||
| "g* c #4F57B3", | |||
| "h* c #4A51A4", | |||
| "i* c #4D56B5", | |||
| "j* c #4C55B5", | |||
| "k* c #4B54B4", | |||
| "l* c #3B4497", | |||
| "m* c #020205", | |||
| "n* c #030304", | |||
| "o* c #202022", | |||
| "p* c #38393B", | |||
| "q* c #545458", | |||
| "r* c #707173", | |||
| "s* c #7F7F81", | |||
| "t* c #89898C", | |||
| "u* c #8F8F98", | |||
| "v* c #888BA3", | |||
| "w* c #898BA4", | |||
| "x* c #A4A4A4", | |||
| "y* c #6B6F93", | |||
| "z* c #535CB8", | |||
| "A* c #525AB8", | |||
| "B* c #4B53AA", | |||
| "C* c #4A52AB", | |||
| "D* c #4B53B4", | |||
| "E* c #4952B4", | |||
| "F* c #373F8C", | |||
| "G* c #040405", | |||
| "H* c #171719", | |||
| "I* c #303134", | |||
| "J* c #4B4B4E", | |||
| "K* c #69696F", | |||
| "L* c #7D7E82", | |||
| "M* c #898A8E", | |||
| "N* c #95969A", | |||
| "O* c #9D9D9E", | |||
| "P* c #5C6197", | |||
| "Q* c #525AB7", | |||
| "R* c #5059B7", | |||
| "S* c #4850A3", | |||
| "T* c #4B53B2", | |||
| "U* c #4A53B4", | |||
| "V* c #4952B3", | |||
| "W* c #4851B3", | |||
| "X* c #353D88", | |||
| "Y* c #010101", | |||
| "Z* c #0F1011", | |||
| "`* c #29292B", | |||
| " = c #424246", | |||
| ".= c #606167", | |||
| "+= c #7C7D84", | |||
| "@= c #88898F", | |||
| "#= c #97979E", | |||
| "$= c #A2A3A5", | |||
| "%= c #4F559D", | |||
| "&= c #4F57B6", | |||
| "*= c #474EA0", | |||
| "== c #4951B3", | |||
| "-= c #4750B3", | |||
| ";= c #464FB1", | |||
| ">= c #2F3679", | |||
| ",= c #0A0A0D", | |||
| "'= c #222226", | |||
| ")= c #3A3A3C", | |||
| "!= c #575860", | |||
| "~= c #767781", | |||
| "{= c #878890", | |||
| "]= c #9798A0", | |||
| "^= c #8D8E92", | |||
| "/= c #474E94", | |||
| "(= c #4E56AF", | |||
| "_= c #4F57B5", | |||
| ":= c #454C9E", | |||
| "<= c #464FB2", | |||
| "[= c #444DB0", | |||
| "}= c #2E3577", | |||
| "|= c #050507", | |||
| "1= c #1A1B1F", | |||
| "2= c #333337", | |||
| "3= c #47484E", | |||
| "4= c #262835", | |||
| "5= c #191C3F", | |||
| "6= c #2B3169", | |||
| "7= c #3F4794", | |||
| "8= c #474FA7", | |||
| "9= c #4750B2", | |||
| "0= c #464EB2", | |||
| "a= c #444DB1", | |||
| "b= c #424AAC", | |||
| "c= c #282E68", | |||
| "d= c #0E1024", | |||
| "e= c #242857", | |||
| "f= c #414AA8", | |||
| "g= c #434CB0", | |||
| "h= c #3E47A4", | |||
| "i= c #212654", | |||
| "j= c #374091", | |||
| "k= c #394294", | |||
| "l= c #12152E", | |||
| "m= c #010204", | |||
| "n= c #080A16", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " . ", | |||
| " + @ # # ", | |||
| " $ # # # # # # ", | |||
| " % & # # # # # # # # * ", | |||
| " = - # # # # # # # # # # # % ", | |||
| " @ # # # # # # # # # # # # # # ; > ", | |||
| " , # # # # # # # # # # # # # # ' > ", | |||
| " ) # # # # # # # # # # # # # ! > ", | |||
| " ~ # # # # # # # # # # # # { > ", | |||
| " ] ^ / ( _ : # # # # # # # # # # # < > ", | |||
| " [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e f g # # # # # # # # # # h i j ", | |||
| " k l m n o p q r s t u v w x y z A B C # # # # # # # # # # # D E F G ", | |||
| " H I J K L M r s t N v O P x Q R S T # # # # # # # # # # # # U V W X Y ", | |||
| " Z ` ...+.@.r y #.z R $.%.&.*.$.R =.# # # # # # # # # # # # # -.;.>.,.'. ", | |||
| " ).!.~.{.].^.t O /.$.(._.:.<.[.}.|.1.# # # # # # 2.3.4.# # # 5.6.7.8.9.0.> ", | |||
| " a.~.{.b.c.d.u v O w P /.x e.y f.g.# # # # # # # h.i.j.k.# # l.m.n.o.p.> > ", | |||
| " q.r.s.t.u.v.w w.<.x.y.<.z.z A.B.# # # # # # # C.D.E.F.G.H.# I.J.K.L.M.> > ", | |||
| " N.s.O.P.Q.R.O P S./.x T.U.<.V.# # # # # # # W.X.Y.Z.`. +.+++@+#+$+%+&+> > ", | |||
| " *+=+O.-+;+>+w ,+'+%.x &.T.)+!+# # # # # # # ~+{+]+^+/+(+_+:+<+[+}+|+1+2+> > ", | |||
| " 3+u.-+4+5+6+P T.7+x.8+9+}.0+a+# # # # # # # b+Y.c+d+e+f+g+h+i+j+k+l+m+n+> > ", | |||
| " o+p+q+r+s+t+/.u+x &.v+w+x+y+# # # # # # # z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+> ", | |||
| " O+q+P+Q+R+S+x &.&.v+T+U+V+# # # # # # # W+X+Y+Z+`+ @.@+@@@#@$@%@&@*@=@-@> ", | |||
| " ;@P+>@,@,@'@,+[.)@+@!@~@# # # # # # # {@]@^@/@(@f+_@+@y.:@<@[@}@|@1@2@> > ", | |||
| " 3@s+4@5@6@7@8@e.v+$.,+9@1.# # # # # # # 0@E.a@b@c@9 d@y.w.e@f@g@h@i@j@k@> > ", | |||
| " l@R+5@m@n@o@e.)+Q p@q@r@# # # # # # # s@t@u@ +b@v@.@w@x@:.y@z@A@B@C@D@E@> > ", | |||
| " F@G@H@I@J@K@%.L@}.M@N@O@# # # # # # P@Q@R@S@T@U@V@W@<.L@X@Y@Z@`@ #.#+#@#> > ", | |||
| " ##H@$#%#&#*#T.$.=#U.L@-#;## # # # # >#,#'#)#!#~#{#y.w.:.]#^#/# #.#(#_#:#> > ", | |||
| " <#I@J@[#&#}#|#$.T+,+z 1#2#3#4#5## # 6#7#R@/@8#9#9 W@0#L@:.a#A@b#c#d#e#f#g#> > ", | |||
| " h#J@i#j#k#l#m#y w+(._.0#n#U@o#p#q#r#s#t#u#b v#w#x#y#y#M@L@z#A#B#d#e#C#D#E#> ", | |||
| " F#G#H#k#I#J#K#L#M#N#z L@}.O#P#Q#R#S#`.u#T#.@F+}.y.x@w.L@w.U#B#V#W#X#Y#Z#`#> ", | |||
| " $H#k#.$+$@$#$$$%$&$*$=$-$;$>$,$_+8#'$b f+)$M@8+1#w.w.x@0#!$e#~$X#Y#{$]$'.> ", | |||
| " ^$/$I#J#+$@$$$($_$:$<$[$}$|$1$2$3$4$5$6$0 )$7$8$x.x@w.x@0#1#9$~$0$a$b$c$d$e$> ", | |||
| " f$I#J#g$#$$$($_$h$i$j$k$l$m$n$o$p$q$r$s$t$u$v$w$x$x@x@0#<.x.y$Y#a$b$z$A$B$> > ", | |||
| " C$+$@$#$$$($:$D$E$F$F$G$H$I$J$K$L$M$N$O$P$Q$R$S$T$U$V$W$X$Y$Z$a$c$`$A$ %.%> > ", | |||
| " +%@$#$($_$:$@%#%$%9#9#%%&%*%=%-%;%>%,%'%)%!%~%{%B#d#e#~$X#a${$c$]%A$ %^%/%> > ", | |||
| " (%_%$$($_$:$:%<%9#,$[%}%|%1%2%3%4%5%6%f+7%.@8%9%0%a%b%c%0$a$b$c$d%e% %f%g%h%> > ", | |||
| " i%$$($_$j%k%l%m%[%c@=%n%o%p%q%r%s%.@t%U@u%0 v#E+v%w%x%y%z%z%A%B%e% %C%D%E%F%> > ", | |||
| " G%H%:$h$k%I%o$J%=%a !#K%L%q%M%N%O%u%P%0 v#Q%v%>$R%S%w@T%c$`$U%V%W%X%D%Y%Z%`%> > ", | |||
| " &:$h$.&+&@&#&$&%&&&*&=&-&M%;&>&,&0 v#Q%v%>$R%S%w@O#'&)&]%!& %f%~&Y%{&]&^&/&> > ", | |||
| " (&_&k%:&+&<&[&}&&&6%f+|&r%1&2&3&Z@4&Q%v%>$R%S%w@O#'&9 5&6&e% %f%7&8&9&]&0&a&b&> > ", | |||
| " c&k%:&d&e&f&g&h&f+7%t%i&N%2&j&k&l&m&>$R%S%n&O#'&9 5&)$y#o&p&X%D%Y%q&r&s&t&u&v&> ", | |||
| " w&I%@&x&y&z&A&B&t%U@.@C&>&z@D&/#E&R%S%n&O#'&9 5&)$y#F+_@F&X%D%{&G&H&I&J&K&L&M&> ", | |||
| " N&<&x&O&P&1%Q&U@u%P%R&S&Z@D&T&A#U&n&O#'&9 5&)$y#F+_@V&V&W&X&Y&]&Z&`&J& *.*+*@*> ", | |||
| " #*$*P&1%p%%*P%0 E+&*Z@`@ #.#B#**'&9 5&~#y#F+_@V&w#x#9 =*Y&]&0&t&-* *;*>*,*'*> ", | |||
| " )*!*~*{*]*^*E+Q%v%/*/# #.#(#(*_*5&~#y#F+_@V&w#x#:*2#<*[*}*I&t&K&|*;*1*2*3*4*> ", | |||
| " e$@*5*6*7*8*9*>$0*a*b*c*e#d*~#y#F+_@V&w#x#:*2#e*n#f*Z&I&J&K&g*h*i*j*k*l*m*> ", | |||
| " > > > n*o*p*q*r*s*t*u*v*w*F+_@V&V@x#:*2#e*n#x*7$y*z*A* *.*B*C*j*D*E*F*-@> ", | |||
| " > > > > > G*H*I*J*K*L*M*N*O*:*2#e*n#x*7$M@!@P*Q*R*;*>*S*T*U*V*W*X*0.> ", | |||
| " > > > > > Y*Z*`* =.=+=@=#=$=M@!@d@M@%=R*&=1*j**=U*==-=;=>=> > ", | |||
| " > > > > > > > ,='=)=!=~={=]=^=/=(=_=j*D*:=W*-=<=[=}=> > ", | |||
| " > > > > > > > |=1=2=3=4=5=6=7=8=:=9=0=a=b=c=> > ", | |||
| " > > > > > > > > > m*d=e=f=[=g=h=i=> > ", | |||
| " > > > > > > > > M.k@j=k=l=> > ", | |||
| " > > > m=n=> > > ", | |||
| " > > > > ", | |||
| " > > ", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " "}; | |||
| @@ -0,0 +1,242 @@ | |||
| /* XPM */ | |||
| static char * new_xpm[] = { | |||
| "48 61 178 2", | |||
| " c None", | |||
| ". c #000000", | |||
| "+ c #161616", | |||
| "@ c #9E9E9E", | |||
| "# c #ACACAC", | |||
| "$ c #B5B5B5", | |||
| "% c #AEAEAE", | |||
| "& c #ABABAB", | |||
| "* c #A7A7A7", | |||
| "= c #959595", | |||
| "- c #949494", | |||
| "; c #919191", | |||
| "> c #909090", | |||
| ", c #808080", | |||
| "' c #7D7D7D", | |||
| ") c #7E7E7E", | |||
| "! c #7F7F7F", | |||
| "~ c #9A9A9A", | |||
| "{ c #A2A2A2", | |||
| "] c #B8B8B8", | |||
| "^ c #717171", | |||
| "/ c #3B3B3B", | |||
| "( c #D5D5D5", | |||
| "_ c #FFFFFF", | |||
| ": c #A1A1A1", | |||
| "< c #C3C3C3", | |||
| "[ c #C7C7C7", | |||
| "} c #C8C8C8", | |||
| "| c #C9C9C9", | |||
| "1 c #CACACA", | |||
| "2 c #CBCBCB", | |||
| "3 c #CCCCCC", | |||
| "4 c #CDCDCD", | |||
| "5 c #CECECE", | |||
| "6 c #CFCFCF", | |||
| "7 c #D0D0D0", | |||
| "8 c #D1D1D1", | |||
| "9 c #D2D2D2", | |||
| "0 c #D3D3D3", | |||
| "a c #D4D4D4", | |||
| "b c #D6D6D6", | |||
| "c c #636363", | |||
| "d c #6C6C6C", | |||
| "e c #F4F4F4", | |||
| "f c #9F9F9F", | |||
| "g c #C1C1C1", | |||
| "h c #D7D7D7", | |||
| "i c #5D5D5D", | |||
| "j c #131313", | |||
| "k c #A0A0A0", | |||
| "l c #FDFDFD", | |||
| "m c #FAFAFA", | |||
| "n c #989898", | |||
| "o c #9D9D9D", | |||
| "p c #D8D8D8", | |||
| "q c #4B4B4B", | |||
| "r c #333333", | |||
| "s c #F6F6F6", | |||
| "t c #F2F2F2", | |||
| "u c #EEEEEE", | |||
| "v c #929292", | |||
| "w c #C2C2C2", | |||
| "x c #454545", | |||
| "y c #5C5C5C", | |||
| "z c #BBBBBB", | |||
| "A c #AFAFAF", | |||
| "B c #EAEAEA", | |||
| "C c #E6E6E6", | |||
| "D c #E2E2E2", | |||
| "E c #8B8B8B", | |||
| "F c #D9D9D9", | |||
| "G c #3D3D3D", | |||
| "H c #8C8C8C", | |||
| "I c #6D6D6D", | |||
| "J c #A3A3A3", | |||
| "K c #C4C4C4", | |||
| "L c #DADADA", | |||
| "M c #2B2B2B", | |||
| "N c #888888", | |||
| "O c #B6B6B6", | |||
| "P c #B3B3B3", | |||
| "Q c #AAAAAA", | |||
| "R c #939393", | |||
| "S c #C0C0C0", | |||
| "T c #DBDBDB", | |||
| "U c #282828", | |||
| "V c #767676", | |||
| "W c #C5C5C5", | |||
| "X c #C6C6C6", | |||
| "Y c #969696", | |||
| "Z c #B2B2B2", | |||
| "` c #DCDCDC", | |||
| " . c #272727", | |||
| ".. c #6F6F6F", | |||
| "+. c #A9A9A9", | |||
| "@. c #BDBDBD", | |||
| "#. c #DDDDDD", | |||
| "$. c #252525", | |||
| "%. c #5E5E5E", | |||
| "&. c #DEDEDE", | |||
| "*. c #202020", | |||
| "=. c #606060", | |||
| "-. c #B4B4B4", | |||
| ";. c #DFDFDF", | |||
| ">. c #B9B9B9", | |||
| ",. c #BFBFBF", | |||
| "'. c #B7B7B7", | |||
| "). c #E0E0E0", | |||
| "!. c #5B5B5B", | |||
| "~. c #E1E1E1", | |||
| "{. c #212121", | |||
| "]. c #BABABA", | |||
| "^. c #E3E3E3", | |||
| "/. c #616161", | |||
| "(. c #E4E4E4", | |||
| "_. c #626262", | |||
| ":. c #E5E5E5", | |||
| "<. c #E7E7E7", | |||
| "[. c #676767", | |||
| "}. c #E8E8E8", | |||
| "|. c #2A2A2A", | |||
| "1. c #757575", | |||
| "2. c #E9E9E9", | |||
| "3. c #2D2D2D", | |||
| "4. c #797979", | |||
| "5. c #3F3F3F", | |||
| "6. c #7C7C7C", | |||
| "7. c #BEBEBE", | |||
| "8. c #EBEBEB", | |||
| "9. c #484848", | |||
| "0. c #ECECEC", | |||
| "a. c #515151", | |||
| "b. c #EDEDED", | |||
| "c. c #999999", | |||
| "d. c #666666", | |||
| "e. c #EFEFEF", | |||
| "f. c #F0F0F0", | |||
| "g. c #838383", | |||
| "h. c #F1F1F1", | |||
| "i. c #8F8F8F", | |||
| "j. c #F3F3F3", | |||
| "k. c #070707", | |||
| "l. c #1A1A1A", | |||
| "m. c #F5F5F5", | |||
| "n. c #1F1F1F", | |||
| "o. c #060606", | |||
| "p. c #323232", | |||
| "q. c #F7F7F7", | |||
| "r. c #151515", | |||
| "s. c #F8F8F8", | |||
| "t. c #313131", | |||
| "u. c #464646", | |||
| "v. c #F9F9F9", | |||
| "w. c #505050", | |||
| "x. c #565656", | |||
| "y. c #5A5A5A", | |||
| "z. c #FBFBFB", | |||
| "A. c #979797", | |||
| "B. c #686868", | |||
| "C. c #FCFCFC", | |||
| "D. c #6E6E6E", | |||
| "E. c #090909", | |||
| "F. c #828282", | |||
| "G. c #424242", | |||
| "H. c #0F0F0F", | |||
| "I. c #0C0C0C", | |||
| "J. c #030303", | |||
| "K. c #191919", | |||
| "L. c #3A3A3A", | |||
| "M. c #898989", | |||
| "N. c #A8A8A8", | |||
| "O. c #595959", | |||
| "P. c #363636", | |||
| "Q. c #141414", | |||
| "R. c #020202", | |||
| "S. c #8A8A8A", | |||
| "T. c #1B1B1B", | |||
| "U. c #010101", | |||
| " ", | |||
| " ", | |||
| " . ", | |||
| " + @ # $ % & & * = - = ; > , ' ' ) ! ! ! , , , > ~ { ] ^ ", | |||
| " / ( _ : % < [ } } | 1 2 2 3 4 4 5 6 6 7 8 8 9 0 a a ( b c ", | |||
| " d e _ _ f { g } | | 1 2 2 3 4 5 5 6 7 7 8 9 9 0 a a ( b h i ", | |||
| " j k _ _ l m n o g | 1 1 2 3 3 4 5 6 6 7 8 8 9 0 0 a ( ( b h p q ", | |||
| " r 8 l m s t u v o w 1 2 2 3 4 4 5 6 6 7 8 9 9 0 a a ( b b h p p x . ", | |||
| " y 4 z A 2 B C D E @ < 2 3 3 4 5 5 6 7 7 8 9 9 0 a ( ( b h h p F F G . . ", | |||
| " H o H ! I ' 1 b ) J K 3 4 4 5 6 6 7 8 8 9 0 0 a ( b b h p p F L L M . . ", | |||
| " N O $ P Q R ! S ) # [ 4 4 5 6 7 7 8 9 9 0 a a ( b b h p F F L T T U . . ", | |||
| " V W X X K z J Y R Z w W X 6 7 7 8 9 0 0 a ( ( b h h p F F L T ` ` .. . ", | |||
| " ..} } | 1 | S +.$ S [ @.3 7 8 8 9 0 a a ( b b h p p F L L T ` #.#.$.. . ", | |||
| " %.| | 1 2 2 2 z 1 4 6 w S S S W 7 a a ( b h h p F F L T T ` #.#.&.*.. . ", | |||
| " =.1 1 2 3 3 4 -.5 6 7 4 < 9 9 5 K w W ( ( 1 1 2 7 L T ` ` #.&.&.;.*.. . ", | |||
| " =.2 2 3 4 4 5 ] 6 7 8 6 >.,.2 a ( b 0 < '.4 0 a K T ` #.#.&.;.;.).*.. . ", | |||
| " !.3 3 4 5 5 | $ 6 7 8 6 w a } g } b h p 7 K L T X ` #.&.&.;.).).~.{.. . ", | |||
| " y 3 4 5 6 6 S ].S g g w w ( ( b 7 < 1 F 9 7 T ` [ [ | 1 L ;.~.~.D {.. . ", | |||
| " y 4 5 6 7 7 ,.9 9 0 a a ( b b h p F 8 W W 8 ` #.6 F ;.#.7 2 a D ^.{.. . ", | |||
| " /.5 6 7 7 8 g 0 0 a ( ( b h h p F F L T a } a &.F 6 ).).~.D D ^.(.{.. . ", | |||
| " _.6 7 S K W @.0 a ( b b h p p F L L T 7 S 1 &.;.#.z 2 2 3 ~.^.(.:.{.. . ", | |||
| " c 7 8 S 7 7 O 8 ( b h h p F F L T L X 7 3 ,.T ).).1 D D ^.(.(.:.C U . . ", | |||
| " c 8 9 w 0 a 8 O X 0 h p F F L T b K L 8 4 2 ).).~.2 ^.^.(.:.:.C <.U . . ", | |||
| " [.9 0 < a ( b w a | W K ] [ z L K #.b 2 ;.1 ~.~.D 5 ^.(.:.C C <.}.|.. . ", | |||
| " 1.0 a '.( b h 2 7 F F L S W 1 w ` T [ ).( < &.` T K (.:.C <.<.}.2.3.. . ", | |||
| " 4.a ( < ( h p a O X } } z 1 ` X F X ;.).[ 3 ( b h ^.:.C <.<.}.2.B 5.. . ", | |||
| " 6.( b 7 g X X [ ,.7 F L | p &.` 7.;.~.2 &.` ^.(.:.C C <.}.}.2.B B x . . ", | |||
| " ! b h h p F F p F T ` #.p 3 ;.;.2 ;.( ( ^.(.:.:.C <.<.}.2.2.B 8.8.9.. . ", | |||
| " ; h p p F L L T ` ` #.&.&.3 4 4 4 L 4 ^.(.:.:.C <.}.}.2.B B 8.0.0.a.. . ", | |||
| " n p F F L T T ` #.#.&.;.;.).~.D ).| ^.(.:.C C <.}.}.2.B 8.8.0.b.b.=.. . ", | |||
| " c.F L L T ` ` #.&.&.` #.;.~.D ^.5 ;.:.:.C <.<.}.2.2.B 8.0.0.b.u u d.. . ", | |||
| " & L L T ` #.#.5 #.9 3 4 < D ^.T 8 :.C C <.}.}.2.B B 8.0.0.b.u e.e.1.. . ", | |||
| " $ T T ` #.#.&.2 #.).~.D F a D 1 :.C C <.}.2.2.B 8.8.0.b.b.u e.e.f.g.. . ", | |||
| " '.` ` #.&.&.;.3 &.~.D ^.^.2 1 ^.C <.&.D <.&.B T 2.0 0 ( p D f.f.h.i.. . ", | |||
| " . 3 #.#.&.;.;.).4 ;.D ^.(.(.p 6 C <.}.}.2.B B 8.0.b.b.u e.e.f.h.h.t : . . ", | |||
| " . a &.&.;.).).~.F a ~.D D ^.(.5 <.}.2.2.B D (.0.:.#.( ( b L h.t t j.Z . . ", | |||
| " k.h ;.;.).~.~.D ~.6 6 7 7 8 9 F }.2.B B 8.~.D b.(.C u e.f.h.t j.j.e < . . ", | |||
| " l.#.;.).~.D D ^.(.(.:.C C <.}.}.2.B 8.8.0.F a b p 8.f.u e.t j.e e m.&.. . ", | |||
| " n.).).~.D ^.^.(.:.:.C <.<.}.2.2.B 8.8.B b.u u e.f.f.h.(.:.j.e e m.s 0.o.. . ", | |||
| " p.~.~.D ^.^.(.:.C C <.}.}.2.B B 8.0.0.;.a h u b.F L L e.D ` j.m.s q.q.r.. . ", | |||
| " 5.D D ^.(.(.:.C C <.}.2.2.B 8.8.0.b.b.u e.e.f.h.t t h.h.t e e e q.s.s.t.. . ", | |||
| " u.^.^.(.:.:.C <.<.}.2.B B 8.0.0.b.<.L e.` h b 2.j.j.` T T 0.^.#.m.v.v.w.. . ", | |||
| " x.(.(.:.C C <.}.}.2.B B 8.0.b.b.u u u f.f.h.t j.j.e m.s s q.s.s.v.m m ^ . . ", | |||
| " y.(.:.C <.<.}.2.2.B 8.8.0.b.b.u e.f.f.h.t t j.e e m.s s q.s.v.v.m z.z.A.. . ", | |||
| " B.:.C <.}.}.2.B B 8.0.0.b.u u e.f.h.h.t j.j.e m.m.s q.q.s.v.v.m z.C.C.K . . ", | |||
| " D.C <.}.}.2.B 8.8.0.b.b.u e.e.f.h.h.t j.e e e t B C C ;.;.).~.2.0.s.l e E.. ", | |||
| " F.<.}.2.2.B 8.8.0.b.u b.~.X & v 6.[.a.G.3.{.H.I.J.. . . . . . . . I.K.L.H.. ", | |||
| " M.}.2.B B B 9 N.' O.P.Q.R.. . . . . . . . . . . . . . . . . . . . . . . . . ", | |||
| " f 2.4 S.w.T.U.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", | |||
| " %./ J.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", | |||
| " . . . . . . . . . . . . . . . . . . ", | |||
| " . . . . . . . . ", | |||
| " . . ", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " "}; | |||
| @@ -0,0 +1,843 @@ | |||
| /* XPM */ | |||
| static char * options_xpm[] = { | |||
| "48 51 789 2", | |||
| " c None", | |||
| ". c #040508", | |||
| "+ c #0A0B12", | |||
| "@ c #141523", | |||
| "# c #1C1D2F", | |||
| "$ c #262940", | |||
| "% c #313451", | |||
| "& c #3C3F61", | |||
| "* c #474B71", | |||
| "= c #3B3E5C", | |||
| "- c #000000", | |||
| "; c #040405", | |||
| "> c #171929", | |||
| ", c #6167AA", | |||
| "' c #686EB3", | |||
| ") c #6B71B5", | |||
| "! c #6E74B6", | |||
| "~ c #7076B7", | |||
| "{ c #7379B9", | |||
| "] c #767BBA", | |||
| "^ c #787EBB", | |||
| "/ c #6F74AB", | |||
| "( c #0F0F15", | |||
| "_ c #6F729C", | |||
| ": c #585A7A", | |||
| "< c #0E0E13", | |||
| "[ c #08090F", | |||
| "} c #24263D", | |||
| "| c #6A70B4", | |||
| "1 c #6D73B6", | |||
| "2 c #6F75B7", | |||
| "3 c #7278B8", | |||
| "4 c #757ABA", | |||
| "5 c #777DBB", | |||
| "6 c #7A7FBC", | |||
| "7 c #7D82BE", | |||
| "8 c #7F84BE", | |||
| "9 c #060609", | |||
| "0 c #171821", | |||
| "a c #7A7EAB", | |||
| "b c #8F94C7", | |||
| "c c #9296C8", | |||
| "d c #8A8DBB", | |||
| "e c #3B3C4F", | |||
| "f c #020203", | |||
| "g c #030406", | |||
| "h c #373B65", | |||
| "i c #5A60A4", | |||
| "j c #1E2035", | |||
| "k c #2F314E", | |||
| "l c #7177B8", | |||
| "m c #7479B9", | |||
| "n c #767CBA", | |||
| "o c #797EBC", | |||
| "p c #7C81BD", | |||
| "q c #7E83BE", | |||
| "r c #8186C0", | |||
| "s c #8388C1", | |||
| "t c #14151D", | |||
| "u c #22232F", | |||
| "v c #8387B6", | |||
| "w c #9195C8", | |||
| "x c #9398C9", | |||
| "y c #969ACA", | |||
| "z c #999DCC", | |||
| "A c #9B9FCD", | |||
| "B c #777A9B", | |||
| "C c #1B1C23", | |||
| "D c #0D0E19", | |||
| "E c #4C518A", | |||
| "F c #6369B1", | |||
| "G c #656BB2", | |||
| "H c #676DB1", | |||
| "I c #333656", | |||
| "J c #010102", | |||
| "K c #3B3E60", | |||
| "L c #7378B9", | |||
| "M c #757BBA", | |||
| "N c #787DBB", | |||
| "O c #7B80BC", | |||
| "P c #8085BF", | |||
| "Q c #8287C0", | |||
| "R c #858AC2", | |||
| "S c #888CC3", | |||
| "T c #1F202C", | |||
| "U c #303244", | |||
| "V c #8B8FC0", | |||
| "W c #9297C8", | |||
| "X c #9599CA", | |||
| "Y c #989CCB", | |||
| "Z c #9A9ECC", | |||
| "` c #9DA1CE", | |||
| " . c #A0A3CF", | |||
| ".. c #A2A6D0", | |||
| "+. c #A0A3CB", | |||
| "@. c #545569", | |||
| "#. c #060608", | |||
| "$. c #1E2036", | |||
| "%. c #5A60A3", | |||
| "&. c #646AB1", | |||
| "*. c #676DB3", | |||
| "=. c #6C72B5", | |||
| "-. c #4B4E79", | |||
| ";. c #4D507A", | |||
| ">. c #777CBB", | |||
| ",. c #797FBC", | |||
| "'. c #7F84BF", | |||
| "). c #8489C1", | |||
| "!. c #878BC3", | |||
| "~. c #898EC4", | |||
| "{. c #8C91C5", | |||
| "]. c #65688C", | |||
| "^. c #9094C6", | |||
| "/. c #9498C9", | |||
| "(. c #979BCB", | |||
| "_. c #9CA0CD", | |||
| ":. c #9EA2CE", | |||
| "<. c #A1A5D0", | |||
| "[. c #A4A7D1", | |||
| "}. c #A6AAD2", | |||
| "|. c #A9ACD4", | |||
| "1. c #ACB0D3", | |||
| "2. c #31323A", | |||
| "3. c #030305", | |||
| "4. c #35385F", | |||
| "5. c #6369B0", | |||
| "6. c #666CB2", | |||
| "7. c #686FB4", | |||
| "8. c #7076B8", | |||
| "9. c #7B80BD", | |||
| "0. c #868AC2", | |||
| "a. c #888DC3", | |||
| "b. c #8B90C5", | |||
| "c. c #8E92C6", | |||
| "d. c #9095C7", | |||
| "e. c #9397C9", | |||
| "f. c #959ACA", | |||
| "g. c #A0A4CF", | |||
| "h. c #A3A6D1", | |||
| "i. c #A5A9D2", | |||
| "j. c #A8ACD3", | |||
| "k. c #ABAED5", | |||
| "l. c #B4B7DA", | |||
| "m. c #C4C8E5", | |||
| "n. c #40414B", | |||
| "o. c #0C0D16", | |||
| "p. c #4B4F86", | |||
| "q. c #676EB3", | |||
| "r. c #8589C2", | |||
| "s. c #878CC3", | |||
| "t. c #8A8FC4", | |||
| "u. c #8C91C6", | |||
| "v. c #9499C9", | |||
| "w. c #9FA3CF", | |||
| "x. c #A2A5D0", | |||
| "y. c #A4A8D1", | |||
| "z. c #A7AAD3", | |||
| "A. c #AAADD4", | |||
| "B. c #ACB0D5", | |||
| "C. c #B6B9DB", | |||
| "D. c #C0C4E2", | |||
| "E. c #BFC3E2", | |||
| "F. c #484A55", | |||
| "G. c #2D3044", | |||
| "H. c #7076B5", | |||
| "I. c #696FB4", | |||
| "J. c #8488C1", | |||
| "K. c #868BC2", | |||
| "L. c #8E93C6", | |||
| "M. c #A1A4D0", | |||
| "N. c #A3A7D1", | |||
| "O. c #ABAFD5", | |||
| "P. c #AEB1D6", | |||
| "Q. c #BABEDE", | |||
| "R. c #B9BDDD", | |||
| "S. c #B8BCDD", | |||
| "T. c #4F515F", | |||
| "U. c #20212C", | |||
| "V. c #8289B7", | |||
| "W. c #7C82B6", | |||
| "X. c #7379B7", | |||
| "Y. c #8D92C6", | |||
| "Z. c #9094C7", | |||
| "`. c #A5A8D2", | |||
| " + c #A8ABD3", | |||
| ".+ c #AAAED4", | |||
| "++ c #ADB0D6", | |||
| "@+ c #AFB2D7", | |||
| "#+ c #B3B7D9", | |||
| "$+ c #B5B9DA", | |||
| "%+ c #B4B8D9", | |||
| "&+ c #B2B6D8", | |||
| "*+ c #565869", | |||
| "=+ c #0F1016", | |||
| "-+ c #7A80B0", | |||
| ";+ c #7A81B1", | |||
| ">+ c #787EB4", | |||
| ",+ c #797FBB", | |||
| "'+ c #8F93C7", | |||
| ")+ c #9196C8", | |||
| "!+ c #9FA2CF", | |||
| "~+ c #A9ADD4", | |||
| "{+ c #ACAFD5", | |||
| "]+ c #AEB2D6", | |||
| "^+ c #B1B4D8", | |||
| "/+ c #B4B7D9", | |||
| "(+ c #B6B9DA", | |||
| "_+ c #B9BBDB", | |||
| ":+ c #BBBEDD", | |||
| "<+ c #BDC0DE", | |||
| "[+ c #BFC2DF", | |||
| "}+ c #B7B9D3", | |||
| "|+ c #AEB0C7", | |||
| "1+ c #A7A9BD", | |||
| "2+ c #494953", | |||
| "3+ c #6D73A4", | |||
| "4+ c #747BB1", | |||
| "5+ c #777DB5", | |||
| "6+ c #7A80BA", | |||
| "7+ c #969AC8", | |||
| "8+ c #9297C5", | |||
| "9+ c #8E93C1", | |||
| "0+ c #9095C3", | |||
| "a+ c #ADB1D6", | |||
| "b+ c #B0B3D7", | |||
| "c+ c #B3B6D9", | |||
| "d+ c #B5B8DA", | |||
| "e+ c #B8BBDB", | |||
| "f+ c #BBBDDD", | |||
| "g+ c #C0C2DF", | |||
| "h+ c #C3C5E1", | |||
| "i+ c #C5C7E2", | |||
| "j+ c #C8CAE3", | |||
| "k+ c #CACDE4", | |||
| "l+ c #CDCFE6", | |||
| "m+ c #525467", | |||
| "n+ c #3B3E5E", | |||
| "o+ c #606599", | |||
| "p+ c #777CBA", | |||
| "q+ c #8D91C6", | |||
| "r+ c #999DCB", | |||
| "s+ c #A3A8CF", | |||
| "t+ c #9BA0C8", | |||
| "u+ c #8C92BD", | |||
| "v+ c #7C83B2", | |||
| "w+ c #6D74A7", | |||
| "x+ c #656CA2", | |||
| "y+ c #8F94C1", | |||
| "z+ c #B2B5D8", | |||
| "A+ c #B7BADB", | |||
| "B+ c #BABCDC", | |||
| "C+ c #BCBFDD", | |||
| "D+ c #BFC1DF", | |||
| "E+ c #C2C4E0", | |||
| "F+ c #C4C7E1", | |||
| "G+ c #C7C9E3", | |||
| "H+ c #C9CCE4", | |||
| "I+ c #CCCEE5", | |||
| "J+ c #CFD1E7", | |||
| "K+ c #D1D3E8", | |||
| "L+ c #565A78", | |||
| "M+ c #06070A", | |||
| "N+ c #7278B4", | |||
| "O+ c #8C90C5", | |||
| "P+ c #989DCB", | |||
| "Q+ c #B0B5D8", | |||
| "R+ c #ACB1D4", | |||
| "S+ c #9DA2C9", | |||
| "T+ c #8D93BE", | |||
| "U+ c #7D84B3", | |||
| "V+ c #6E75A8", | |||
| "W+ c #5E669D", | |||
| "X+ c #525A95", | |||
| "Y+ c #A0A4CC", | |||
| "Z+ c #BEC0DE", | |||
| "`+ c #C0C3DF", | |||
| " @ c #C6C8E2", | |||
| ".@ c #C8CBE3", | |||
| "+@ c #CBCDE5", | |||
| "@@ c #CED0E6", | |||
| "#@ c #D0D2E7", | |||
| "$@ c #D3D5E9", | |||
| "%@ c #CCCFE4", | |||
| "&@ c #666B91", | |||
| "*@ c #171823", | |||
| "=@ c #7D83BE", | |||
| "-@ c #BCC0E0", | |||
| ";@ c #ADB2D5", | |||
| ">@ c #9EA3CA", | |||
| ",@ c #8E94BF", | |||
| "'@ c #7F85B4", | |||
| ")@ c #6F77A9", | |||
| "!@ c #60689E", | |||
| "~@ c #505993", | |||
| "{@ c #858BB8", | |||
| "]@ c #BABDDC", | |||
| "^@ c #BDBFDE", | |||
| "/@ c #C2C5E0", | |||
| "(@ c #C7CAE3", | |||
| "_@ c #CACCE4", | |||
| ":@ c #D2D4E8", | |||
| "<@ c #D5D6EA", | |||
| "[@ c #D7D9EB", | |||
| "}@ c #C0C3DC", | |||
| "|@ c #7B81AD", | |||
| "1@ c #030304", | |||
| "2@ c #282A3D", | |||
| "3@ c #A1A4CF", | |||
| "4@ c #AFB3D6", | |||
| "5@ c #9FA4CB", | |||
| "6@ c #9096C0", | |||
| "7@ c #8087B5", | |||
| "8@ c #7178AA", | |||
| "9@ c #61699F", | |||
| "0@ c #525A94", | |||
| "a@ c #9B9FC7", | |||
| "b@ c #BCBEDD", | |||
| "c@ c #BEC1DE", | |||
| "d@ c #C1C3E0", | |||
| "e@ c #C4C6E1", | |||
| "f@ c #C6C9E2", | |||
| "g@ c #C9CBE4", | |||
| "h@ c #D4D5E9", | |||
| "i@ c #D6D8EA", | |||
| "j@ c #D9DAEC", | |||
| "k@ c #DBDDED", | |||
| "l@ c #B3B7D4", | |||
| "m@ c #878DBA", | |||
| "n@ c #121218", | |||
| "o@ c #3C3E58", | |||
| "p@ c #9EA1CE", | |||
| "q@ c #A6A9D2", | |||
| "r@ c #AEB2D5", | |||
| "s@ c #A1A6CC", | |||
| "t@ c #9197C1", | |||
| "u@ c #8288B6", | |||
| "v@ c #7279AB", | |||
| "w@ c #636BA1", | |||
| "x@ c #8389B6", | |||
| "y@ c #C5C8E2", | |||
| "z@ c #CDCFE5", | |||
| "A@ c #D3D4E9", | |||
| "B@ c #D5D7EA", | |||
| "C@ c #D8D9EB", | |||
| "D@ c #DADCEC", | |||
| "E@ c #DDDEEE", | |||
| "F@ c #E0E1EF", | |||
| "G@ c #A6AACD", | |||
| "H@ c #272834", | |||
| "I@ c #4F5272", | |||
| "J@ c #8E93C3", | |||
| "K@ c #8A8EBD", | |||
| "L@ c #8388B7", | |||
| "M@ c #9498C4", | |||
| "N@ c #A5A8D1", | |||
| "O@ c #A7ABD3", | |||
| "P@ c #ADB0D5", | |||
| "Q@ c #A7ABD0", | |||
| "R@ c #9297C1", | |||
| "S@ c #A8ACD0", | |||
| "T@ c #B0B4D3", | |||
| "U@ c #A9ADCF", | |||
| "V@ c #C9CCE2", | |||
| "W@ c #D9DBEC", | |||
| "X@ c #DCDDED", | |||
| "Y@ c #DFE0EF", | |||
| "Z@ c #E1E3F0", | |||
| "`@ c #E3E4F0", | |||
| " # c #999EC6", | |||
| ".# c #9399C2", | |||
| "+# c #3F4153", | |||
| "@# c #5E6288", | |||
| "## c #858ABF", | |||
| "$# c #8288BB", | |||
| "%# c #7F85B7", | |||
| "&# c #7A81B2", | |||
| "*# c #757CAD", | |||
| "=# c #787FB4", | |||
| "-# c #B9BBDC", | |||
| ";# c #C3C6E1", | |||
| "># c #C8CBE4", | |||
| ",# c #D4D6E9", | |||
| "'# c #979CC3", | |||
| ")# c #7980B0", | |||
| "!# c #8C92BC", | |||
| "~# c #ADB1D0", | |||
| "{# c #CED0E4", | |||
| "]# c #D3D5E6", | |||
| "^# c #989DC6", | |||
| "/# c #999EC7", | |||
| "(# c #595C73", | |||
| "_# c #626893", | |||
| ":# c #7078AA", | |||
| "<# c #7077AA", | |||
| "[# c #7077A9", | |||
| "}# c #7E84B8", | |||
| "|# c #9CA0CE", | |||
| "1# c #B8BADB", | |||
| "2# c #DADBEC", | |||
| "3# c #D8DAEB", | |||
| "4# c #898FB9", | |||
| "5# c #7178AB", | |||
| "6# c #7279A5", | |||
| "7# c #6F7393", | |||
| "8# c #9DA3CA", | |||
| "9# c #747893", | |||
| "0# c #494E71", | |||
| "a# c #6A72A6", | |||
| "b# c #6A71A5", | |||
| "c# c #6971A5", | |||
| "d# c #6B73A7", | |||
| "e# c #898EC0", | |||
| "f# c #B7B9DB", | |||
| "g# c #B9BCDC", | |||
| "h# c #C1C4E0", | |||
| "i# c #DEDFEE", | |||
| "j# c #E1E2F0", | |||
| "k# c #D8D9EA", | |||
| "l# c #7B81B0", | |||
| "m# c #6C73A7", | |||
| "n# c #6B72A6", | |||
| "o# c #7379A9", | |||
| "p# c #A3A8CE", | |||
| "q# c #A4A9CF", | |||
| "r# c #9195B6", | |||
| "s# c #010101", | |||
| "t# c #343854", | |||
| "u# c #646CA1", | |||
| "v# c #6D74A9", | |||
| "w# c #959AC8", | |||
| "x# c #B6B8DA", | |||
| "y# c #DBDCEC", | |||
| "z# c #DDDFEE", | |||
| "A# c #E2E4F0", | |||
| "B# c #E5E6F2", | |||
| "C# c #E8E9F3", | |||
| "D# c #D2D4E5", | |||
| "E# c #6E75A7", | |||
| "F# c #656DA2", | |||
| "G# c #676EA0", | |||
| "H# c #A9ADD2", | |||
| "I# c #AAAFD3", | |||
| "J# c #A4A8CA", | |||
| "K# c #030303", | |||
| "L# c #222539", | |||
| "M# c #60679F", | |||
| "N# c #9A9ECB", | |||
| "O# c #BBBDDA", | |||
| "P# c #D2D3E8", | |||
| "Q# c #D7D8EB", | |||
| "R# c #DCDEED", | |||
| "S# c #E4E5F1", | |||
| "T# c #E7E8F3", | |||
| "U# c #E9EAF4", | |||
| "V# c #ECEDF5", | |||
| "W# c #EFEFF7", | |||
| "X# c #C7CADE", | |||
| "Y# c #626AA0", | |||
| "Z# c #5F679E", | |||
| "`# c #5F679D", | |||
| " $ c #A8ACCF", | |||
| ".$ c #B0B4D7", | |||
| "+$ c #8A8EA8", | |||
| "@$ c #586099", | |||
| "#$ c #878DBC", | |||
| "$$ c #CACDE8", | |||
| "%$ c #C3C5E0", | |||
| "&$ c #D6D7EA", | |||
| "*$ c #BFC1D2", | |||
| "=$ c #D1D3E2", | |||
| "-$ c #E0E2EF", | |||
| ";$ c #E3E4F1", | |||
| ">$ c #E6E7F2", | |||
| ",$ c #EBECF5", | |||
| "'$ c #EEEEF6", | |||
| ")$ c #F0F1F7", | |||
| "!$ c #F3F3F9", | |||
| "~$ c #F6F6FA", | |||
| "{$ c #9BA0C2", | |||
| "]$ c #59629A", | |||
| "^$ c #596199", | |||
| "/$ c #A3A8CC", | |||
| "($ c #B5BADB", | |||
| "_$ c #67697C", | |||
| ":$ c #07080D", | |||
| "<$ c #505992", | |||
| "[$ c #767DAF", | |||
| "}$ c #9095C2", | |||
| "|$ c #CACEE9", | |||
| "1$ c #D0D3ED", | |||
| "2$ c #C2C5DF", | |||
| "3$ c #888CA5", | |||
| "4$ c #D8DAE6", | |||
| "5$ c #EAEBF4", | |||
| "6$ c #EDEDF6", | |||
| "7$ c #EFF0F7", | |||
| "8$ c #F2F2F8", | |||
| "9$ c #F4F5F9", | |||
| "0$ c #F7F7FB", | |||
| "a$ c #D2D5E7", | |||
| "b$ c #545C96", | |||
| "c$ c #535B95", | |||
| "d$ c #9A9FC6", | |||
| "e$ c #BBBFDF", | |||
| "f$ c #41424D", | |||
| "g$ c #444C83", | |||
| "h$ c #4B5490", | |||
| "i$ c #6B72A8", | |||
| "j$ c #787FB0", | |||
| "k$ c #9CA1CA", | |||
| "l$ c #C1C3DF", | |||
| "m$ c #C8CBE6", | |||
| "n$ c #CED1EC", | |||
| "o$ c #CCCFE9", | |||
| "p$ c #DEE0EE", | |||
| "q$ c #8F95C0", | |||
| "r$ c #898DA9", | |||
| "s$ c #DDDEE8", | |||
| "t$ c #ECECF5", | |||
| "u$ c #EEEFF6", | |||
| "v$ c #F1F1F8", | |||
| "w$ c #F3F4F9", | |||
| "x$ c #F7F7FA", | |||
| "y$ c #C4C7DF", | |||
| "z$ c #8389B7", | |||
| "A$ c #4E5792", | |||
| "B$ c #4D5691", | |||
| "C$ c #8D93BD", | |||
| "D$ c #1A1B1F", | |||
| "E$ c #353C6A", | |||
| "F$ c #454E8B", | |||
| "G$ c #6067A0", | |||
| "H$ c #747BAD", | |||
| "I$ c #ACB0D4", | |||
| "J$ c #C2C5E1", | |||
| "K$ c #C6C9E5", | |||
| "L$ c #C8CCE8", | |||
| "M$ c #C7CBE7", | |||
| "N$ c #CACDE7", | |||
| "O$ c #DBDCED", | |||
| "P$ c #CBCEE7", | |||
| "Q$ c #888EBB", | |||
| "R$ c #8C90B0", | |||
| "S$ c #E1E2EA", | |||
| "T$ c #F2F3F8", | |||
| "U$ c #F5F5FA", | |||
| "V$ c #F8F8FB", | |||
| "W$ c #F4F4F9", | |||
| "X$ c #B5B9D6", | |||
| "Y$ c #999FC7", | |||
| "Z$ c #989EC6", | |||
| "`$ c #8B91BD", | |||
| " % c #48518E", | |||
| ".% c #48518D", | |||
| "+% c #7E84B2", | |||
| "@% c #B3B6D0", | |||
| "#% c #020202", | |||
| "$% c #272D52", | |||
| "%% c #3F4887", | |||
| "&% c #555D99", | |||
| "*% c #6B73A6", | |||
| "=% c #BBBEDC", | |||
| "-% c #C2C5E3", | |||
| ";% c #C3C7E4", | |||
| ">% c #C2C6E4", | |||
| ",% c #C1C5E3", | |||
| "'% c #CDCFE7", | |||
| ")% c #E7E7F3", | |||
| "!% c #C5C8E5", | |||
| "~% c #7F86B5", | |||
| "{% c #898EB1", | |||
| "]% c #E6E7EC", | |||
| "^% c #F9FAFC", | |||
| "/% c #EDEDF5", | |||
| "(% c #A7ACCE", | |||
| "_% c #969BC4", | |||
| ":% c #949AC3", | |||
| "<% c #9399C3", | |||
| "[% c #464F8C", | |||
| "}% c #424B89", | |||
| "|% c #6B72A5", | |||
| "1% c #8C8EA1", | |||
| "2% c #1B1F3C", | |||
| "3% c #394283", | |||
| "4% c #4A5391", | |||
| "5% c #666DA2", | |||
| "6% c #646CA2", | |||
| "7% c #BFC2E1", | |||
| "8% c #BEC2E0", | |||
| "9% c #BDC1E0", | |||
| "0% c #BCC0DF", | |||
| "a% c #BBBFDE", | |||
| "b% c #D2D4E9", | |||
| "c% c #D8DAEC", | |||
| "d% c #787FAF", | |||
| "e% c #777EAF", | |||
| "f% c #767DAE", | |||
| "g% c #8187AD", | |||
| "h% c #CDD0DF", | |||
| "i% c #9BA0C7", | |||
| "j% c #9096C1", | |||
| "k% c #3C4685", | |||
| "l% c #555D96", | |||
| "m% c #626470", | |||
| "n% c #14162A", | |||
| "o% c #323B7A", | |||
| "p% c #374079", | |||
| "q% c #60679E", | |||
| "r% c #5D659A", | |||
| "s% c #B2B6D5", | |||
| "t% c #B7BBDC", | |||
| "u% c #B6BBDB", | |||
| "v% c #DFE1EF", | |||
| "w% c #E2E3F0", | |||
| "x% c #E3E5F1", | |||
| "y% c #B8BCDC", | |||
| "z% c #8F95BF", | |||
| "A% c #6F76A9", | |||
| "B% c #8289B5", | |||
| "C% c #8A90BC", | |||
| "D% c #898FBB", | |||
| "E% c #404567", | |||
| "F% c #232952", | |||
| "G% c #394179", | |||
| "H% c #32333A", | |||
| "I% c #555D93", | |||
| "J% c #586199", | |||
| "K% c #575F98", | |||
| "L% c #A0A5C8", | |||
| "M% c #B1B5D8", | |||
| "N% c #AFB4D6", | |||
| "O% c #AAAFD2", | |||
| "P% c #B6B9D6", | |||
| "Q% c #BABDD8", | |||
| "R% c #BBBED9", | |||
| "S% c #BFC2DB", | |||
| "T% c #C2C5DD", | |||
| "U% c #C4C7DD", | |||
| "V% c #C9CCE0", | |||
| "W% c #C8CBE2", | |||
| "X% c #6870A4", | |||
| "Y% c #686FA4", | |||
| "Z% c #676FA3", | |||
| "`% c #666EA3", | |||
| " & c #787FAE", | |||
| ".& c #888EBA", | |||
| "+& c #868DB9", | |||
| "@& c #858BB9", | |||
| "#& c #848AB8", | |||
| "$& c #44475F", | |||
| "%& c #070708", | |||
| "&& c #454C7B", | |||
| "*& c #525B95", | |||
| "=& c #515A94", | |||
| "-& c #8D92BB", | |||
| ";& c #ABAFD3", | |||
| ">& c #AAAED2", | |||
| ",& c #A4A9CE", | |||
| "'& c #8188B6", | |||
| ")& c #8187B5", | |||
| "!& c #8086B5", | |||
| "~& c #7E85B4", | |||
| "{& c #AEB3D5", | |||
| "]& c #61689F", | |||
| "^& c #7E84B3", | |||
| "/& c #565B7C", | |||
| "(& c #353B64", | |||
| "_& c #4D5591", | |||
| ":& c #4C5590", | |||
| "<& c #4C5490", | |||
| "[& c #7980AE", | |||
| "}& c #A2A7CD", | |||
| "|& c #A1A6CD", | |||
| "1& c #7B81B1", | |||
| "2& c #757CAE", | |||
| "3& c #A9AED2", | |||
| "4& c #59619A", | |||
| "5& c #7B82B1", | |||
| "6& c #7A80B1", | |||
| "7& c #797FB0", | |||
| "8& c #676D97", | |||
| "9& c #000001", | |||
| "0& c #20233E", | |||
| "a& c #47508D", | |||
| "b& c #454E8C", | |||
| "c& c #666DA0", | |||
| "d& c #9CA1C9", | |||
| "e& c #747BAC", | |||
| "f& c #737AAC", | |||
| "g& c #A1A7CD", | |||
| "h& c #565F98", | |||
| "i& c #515994", | |||
| "j& c #4F5893", | |||
| "k& c #545D96", | |||
| "l& c #2C325C", | |||
| "m& c #404988", | |||
| "n& c #3F4987", | |||
| "o& c #525A92", | |||
| "p& c #979CC5", | |||
| "q& c #959AC4", | |||
| "r& c #6D74A8", | |||
| "s& c #6970A4", | |||
| "t& c #9EA4CA", | |||
| "u& c #5D659C", | |||
| "v& c #49528E", | |||
| "w& c #737AAB", | |||
| "x& c #6E76A9", | |||
| "y& c #5E6490", | |||
| "z& c #08090D", | |||
| "A& c #030407", | |||
| "B& c #2F376B", | |||
| "C& c #394383", | |||
| "D& c #3E4785", | |||
| "E& c #9095C0", | |||
| "F& c #797FAE", | |||
| "G& c #636AA0", | |||
| "H& c #60689F", | |||
| "I& c #383A4D", | |||
| "J& c #323867", | |||
| "K& c #414A88", | |||
| "L& c #4F557C", | |||
| "M& c #09090E", | |||
| "N& c #070811", | |||
| "O& c #2F3773", | |||
| "P& c #333C7E", | |||
| "Q& c #8087B4", | |||
| "R& c #71769B", | |||
| "S& c #26283A", | |||
| "T& c #5C649B", | |||
| "U& c #5B639B", | |||
| "V& c #5A629A", | |||
| "W& c #9499C3", | |||
| "X& c #121319", | |||
| "Y& c #020204", | |||
| "Z& c #262C55", | |||
| "`& c #384282", | |||
| " * c #384182", | |||
| ".* c #5B649B", | |||
| "+* c #6970A5", | |||
| "@* c #3E4363", | |||
| "#* c #0B0E1E", | |||
| "$* c #2E3778", | |||
| "%* c #6C73A5", | |||
| "&* c #6D7298", | |||
| "** c #0C0D11", | |||
| "=* c #09090F", | |||
| "-* c #576098", | |||
| ";* c #565E97", | |||
| ">* c #555D97", | |||
| ",* c #535C95", | |||
| "'* c #7F84AB", | |||
| ")* c #1A1F42", | |||
| "!* c #303A7C", | |||
| "~* c #61699E", | |||
| "{* c #2D3048", | |||
| "]* c #121630", | |||
| "^* c #5A6298", | |||
| "/* c #696F96", | |||
| "(* c #0D0D12", | |||
| "_* c #4B5287", | |||
| ":* c #505893", | |||
| "<* c #4F5892", | |||
| "[* c #4C5591", | |||
| "}* c #5E6280", | |||
| "|* c #131631", | |||
| "1* c #434B88", | |||
| "2* c #5A6195", | |||
| "3* c #1D1F30", | |||
| "4* c #262A41", | |||
| "5* c #0C0D12", | |||
| "6* c #393F6D", | |||
| "7* c #4A538F", | |||
| "8* c #3D4055", | |||
| "9* c #171A2B", | |||
| "0* c #10121C", | |||
| "a* c #282E53", | |||
| "b* c #434C8A", | |||
| "c* c #414A89", | |||
| "d* c #404A88", | |||
| "e* c #404987", | |||
| "f* c #3E4786", | |||
| "g* c #1E202B", | |||
| "h* c #0E101D", | |||
| "i* c #1C203D", | |||
| "j* c #1E2343", | |||
| "k* c #202549", | |||
| "l* c #202548", | |||
| "m* c #20254A", | |||
| "n* c #232950", | |||
| " ", | |||
| " ", | |||
| " . + @ # $ % & * = - ; - ", | |||
| " > , ' ) ! ~ { ] ^ / - ( _ : < ", | |||
| " - [ } | 1 2 3 4 5 6 7 8 9 0 a b c d e f ", | |||
| " g h i j - k ! l m n o p q r s t - u v w x y z A B C - ", | |||
| " D E F G H I J K L M N O 7 P Q R S T U V W X Y Z ` ...+.@.#. ", | |||
| " - $.%.&.*.| =.2 -.;.>.,.p '.r ).!.~.{.].^./.(.z _.:.<.[.}.|.1.2. ", | |||
| " 3.4.5.6.7.) ! 8.{ ] ^ 9.q P s 0.a.b.c.d.e.f.Y A ` g.h.i.j.k.l.m.n. ", | |||
| " o.p.G q.| 1 2 3 4 5 6 7 '.Q r.s.t.u.b c v.(.Z _.w.x.y.z.A.B.C.D.E.F.- ", | |||
| " G.H.I.=.! l m n o p q r J.K.~.b.L.w x y z A :.M.N.}.|.O.P.C.Q.R.S.T.- ", | |||
| " U.V.W.X.L M N 9.7 P Q R a.t.Y.Z.W X Y Z ` ...`. +.+++@+#+$+%+#+&+*+- - - ", | |||
| " =+-+;+;+>+,+p '.r ).s.~.{.'+)+/.(.z _.!+<.y.}.~+{+]+^+/+(+_+:+<+[+}+|+1+2+ ", | |||
| " 3.3+4+5+6+q P s K.a.b.c.d.e.f.7+8+9+0+g.i.j.k.a+b+c+d+e+f+<+g+h+i+j+k+l+m+- ", | |||
| " - n+o+p+6 7 '.Q R s.t.q+b c X r+s+t+u+v+w+x+y+B.@+z+/+A+B+C+D+E+F+G+H+I+J+K+L+- ", | |||
| " M+N+o p q r ).K.~.O+L.w x y P+Q+R+S+T+U+V+W+X+Y+c+(+_+:+Z+`+h+ @.@+@@@#@$@%@&@- ", | |||
| " *@9.=@P s R a.t.Y.Z.W X Y Z g.-@;@>@,@'@)@!@~@{@A+]@^@[+/@i+(@_@l+J+:@<@[@}@|@1@ ", | |||
| " 2@'.Q ).s.~.{.'+)+/.(.z _.!+3@R.4@5@6@7@8@9@0@a@b@c@d@e@f@g@I+@@K+h@i@j@k@l@m@n@- ", | |||
| " o@s K.a.b.c.d.e.y Y A p@g.N.q@.+r@s@t@u@v@w@x@<+`+h+y@j++@z@#@A@B@C@D@E@F@G@T+H@- ", | |||
| " I@s.t.q+b c J@K@L@M@w...N@O@A.B.P@Q@t+R@6@S@D+E+F+G+_@I+J+T@U@V@W@X@Y@Z@`@ #.#+#- ", | |||
| " - @###$#%#&#*#*#=#/.<.N.}.|.O.P.^+c+(+-#:+Z+d@;# @>#+@@@#@$@,#'#)#!#~#{#`@]#^#/#(#- ", | |||
| " - _#:#<#<#[#)@}#|#..i. +.+++b+z+d+1#]@^@[+/@i+(@_@l+J+:@<@[@2#3#4#v@5#8@6#7#8#5@9#- ", | |||
| " - 0#a#b#c#d#e#<.y.z.~+{+@+^+/+f#g#b@c@h#e@f@g@I+@@K+h@i@j@X@i#j#k#l#m#n#a#o#p#q#r#s#- ", | |||
| " t#u#u#v#w#N.q@j.k.P.b+c+x#e+f+<+`+h+y@j++@l+#@A@B@C@y#z#F@A#B#C#D#E#F#x+G#H#I#J#K#- ", | |||
| " L#W+M#N#`.O@A.++@+z+/+A+]@^@O#E+F+G+_@I+J+P#,#Q#W@R#Y@Z@S#T#U#V#W#X#Y#Z#`# $.$+$- - ", | |||
| " @ @$@$#$O@O.P.^+c+(+-#:+c@$$%$ @g@+@@@#@$@&$*$=$i#-$;$>$C#,$'$)$!$~${$]$^$/$($_$- - ", | |||
| " :$<$0@[$}$b+z+d+1#]@<+[+|$1$j+_@l+J+:@<@[@D@2$3$4$B#T#5$6$7$8$9$0$a$v+b$c$d$e$f$- - ", | |||
| " - g$h$i$j$k$f#g#C+D+l$m$n$o$I+@@K+h@i@W@X@p$>#q$r$s$t$u$v$w$~$x$y$8#z$A$B$C$D.D$- - ", | |||
| " - E$F$G$v@H$I$Z+`+J$K$L$M$N$#@A@B@C@O$z#F@`@P$Q$m@R$S$T$U$V$W$X$Y$Z$`$ %.%+%@%#%- - ", | |||
| " $%%%&%m#*%[$=%e@-%;%>%,%'%,#[@2#R#Y@Z@S#)%!%Q$~%'@{%]%^%/%(%_%:%<%6@[%}%|%1%- - ", | |||
| " 2%3%4%5%F#6%u@7%8%9%0%a%b%c%k@i#-$;$>$C#T#9%`$d%e%f%g%h%i%R@j%q$,@T+h$k%l%m%- - ", | |||
| " n%o%p%q%Z#W+r%s%t%u%($$+W@E@v%w%B#T#5$6$x%y%z%<#)@A%V+B%,@T+`$C%D%Q$E%F%G%H%- - ", | |||
| " #%3.J I%^$J%K%L%M%.$N%O%l@P%Q%R%S%T%U%V%W%#+<%X%Y%Z%`% &D%.&+&@&#&z$$&- 1@%&- - ", | |||
| " - &&c$*&=&-&;&>&H#,&z$'&)&!&'@~&U+v+:%{& #]&!@Z#Z#w+#&V.'&!&'@^&/&- - - - ", | |||
| " - (&_&:&<&[&q#p#}&|&~&1&;+)#d%e%f%2&m@3&5@4&J%@$K%9@~&U+v+5&6&7&8&9&- - - ", | |||
| " - 0&a&[%b&c&>@S+d&t+^&e&f&v@5#<#)@A%7&q#g&h&i&~@j&k&)#j$e%f%*#f&[#M+- - ", | |||
| " J l&m&n&o&^#p&_%q&U+r&m#*%a#c#s&Y%n#t&>@u&v& %.% %w&f&v@8@[#x&y&z&- - ", | |||
| " A&B&C&D&E&6@q$,@F&`%F#u#w@G&Y#9@H&:%Y$I&J&K&m&m&X%V+w+m#a#L&M&- - ", | |||
| " - N&O&P&Q&C%D%R&S&Z#W+W+u&T&U&V&4&m@W&X&Y&Z&`& *.*+*Y%`%@*3.- - - ", | |||
| " - #*$*%*#&&***=*@$-*K%;*>*b$,**&d%'*J - 9&)*!*A$u#~*{*- - - - ", | |||
| " - ]*^*/*(*- J _*i&:*<*A$B$[*<&X%}*- - - - |*1*2*3*- - - - ", | |||
| " - 4*5*- - - 6*7*v& %a&[%b&F$^$8*- - - - - 9*0*- - - - ", | |||
| " - - - - - a*b*}%c*d*e*%%f* %g*- - - - - - - - - - ", | |||
| " - - - h*i*j*j*j*k*l*m*n*:$- - - - - ", | |||
| " - - - - - - - - - - - ", | |||
| " - - - - - - - - ", | |||
| " - - - ", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " "}; | |||
| @@ -0,0 +1,957 @@ | |||
| /* XPM */ | |||
| static char * save_xpm[] = { | |||
| "48 60 894 2", | |||
| " c None", | |||
| ". c #E38400", | |||
| "+ c #E68600", | |||
| "@ c #E88700", | |||
| "# c #D37B00", | |||
| "$ c #E78600", | |||
| "% c #DF8200", | |||
| "& c #E28400", | |||
| "* c #AD6500", | |||
| "= c #D77D00", | |||
| "- c #9C5B00", | |||
| "; c #AC6400", | |||
| "> c #E58500", | |||
| ", c #C17000", | |||
| "' c #0B0600", | |||
| ") c #000000", | |||
| "! c #DE8100", | |||
| "~ c #D97E00", | |||
| "{ c #201300", | |||
| "] c #E48500", | |||
| "^ c #452800", | |||
| "/ c #E78700", | |||
| "( c #774500", | |||
| "_ c #353747", | |||
| ": c #53566F", | |||
| "< c #3F4155", | |||
| "[ c #2D2F3D", | |||
| "} c #1A1B21", | |||
| "| c #A56000", | |||
| "1 c #020100", | |||
| "2 c #3D3F52", | |||
| "3 c #959BCD", | |||
| "4 c #7C83C0", | |||
| "5 c #9BA1D8", | |||
| "6 c #AEB3DF", | |||
| "7 c #EBEBED", | |||
| "8 c #E0E0E3", | |||
| "9 c #CECFD1", | |||
| "0 c #BFBFC0", | |||
| "a c #ADADAE", | |||
| "b c #A0A0A1", | |||
| "c c #929292", | |||
| "d c #AD7C39", | |||
| "e c #88612B", | |||
| "f c #707070", | |||
| "g c #686868", | |||
| "h c #676767", | |||
| "i c #5C5C5C", | |||
| "j c #595959", | |||
| "k c #4D4D4D", | |||
| "l c #AE6909", | |||
| "m c #CC7701", | |||
| "n c #140D05", | |||
| "o c #050609", | |||
| "p c #0A0B10", | |||
| "q c #12131D", | |||
| "r c #020304", | |||
| "s c #6A6E8F", | |||
| "t c #7B82C1", | |||
| "u c #282F68", | |||
| "v c #8D93C9", | |||
| "w c #B1B6E0", | |||
| "x c #EFEFEF", | |||
| "y c #EEEEEE", | |||
| "z c #ECECEC", | |||
| "A c #EBEBEB", | |||
| "B c #E9E9E9", | |||
| "C c #E6E6E6", | |||
| "D c #E0E0E0", | |||
| "E c #E3AA5B", | |||
| "F c #DEA75B", | |||
| "G c #CDCCCC", | |||
| "H c #CECECE", | |||
| "I c #CFCFCF", | |||
| "J c #D3B386", | |||
| "K c #E88701", | |||
| "L c #E48501", | |||
| "M c #3E2C19", | |||
| "N c #1D1F2F", | |||
| "O c #2C2F47", | |||
| "P c #3E4164", | |||
| "Q c #4F5482", | |||
| "R c #252847", | |||
| "S c #878DB8", | |||
| "T c #989FD6", | |||
| "U c #7277A4", | |||
| "V c #9CA2D7", | |||
| "W c #B8BCE1", | |||
| "X c #EDEDED", | |||
| "Y c #E1E1E1", | |||
| "Z c #DADADA", | |||
| "` c #E29C3A", | |||
| " . c #DC9736", | |||
| ".. c #BEB7AE", | |||
| "+. c #BDBDBD", | |||
| "@. c #C3B6A4", | |||
| "#. c #E58B0D", | |||
| "$. c #6A4513", | |||
| "%. c #1D1E2A", | |||
| "&. c #24263F", | |||
| "*. c #2C2F57", | |||
| "=. c #414676", | |||
| "-. c #5B6096", | |||
| ";. c #404788", | |||
| ">. c #060710", | |||
| ",. c #0F0F14", | |||
| "'. c #9EA4D8", | |||
| "). c #A0A6DC", | |||
| "!. c #9FA5DB", | |||
| "~. c #9DA4DA", | |||
| "{. c #C1C4E2", | |||
| "]. c #D7D7D7", | |||
| "^. c #C2C2C2", | |||
| "/. c #C8C8C8", | |||
| "(. c #CBCBCB", | |||
| "_. c #D0D0D0", | |||
| ":. c #E0962D", | |||
| "<. c #DC8E20", | |||
| "[. c #B0A08A", | |||
| "}. c #DD8E20", | |||
| "|. c #9E600B", | |||
| "1. c #262626", | |||
| "2. c #25273B", | |||
| "3. c #2C3052", | |||
| "4. c #32376A", | |||
| "5. c #4C528B", | |||
| "6. c #646AA6", | |||
| "7. c #3C438A", | |||
| "8. c #070811", | |||
| "9. c #333546", | |||
| "0. c #9FA6DB", | |||
| "a. c #9EA4DB", | |||
| "b. c #9DA3DA", | |||
| "c. c #9CA2DA", | |||
| "d. c #CACDE4", | |||
| "e. c #EAEAEA", | |||
| "f. c #E2E2E2", | |||
| "g. c #CDCDCD", | |||
| "h. c #A8A8A8", | |||
| "i. c #DE8A16", | |||
| "j. c #E68703", | |||
| "k. c #C37405", | |||
| "l. c #2A2622", | |||
| "m. c #313136", | |||
| "n. c #313450", | |||
| "o. c #40446C", | |||
| "p. c #4E5387", | |||
| "q. c #5F65A1", | |||
| "r. c #696FB1", | |||
| "s. c #31397C", | |||
| "t. c #000001", | |||
| "u. c #4C4E68", | |||
| "v. c #9BA2DA", | |||
| "w. c #9AA1D9", | |||
| "x. c #D5D7E5", | |||
| "y. c #E7E7E7", | |||
| "z. c #E4E4E4", | |||
| "A. c #DEDEDE", | |||
| "B. c #D4D4D4", | |||
| "C. c #C3C3C3", | |||
| "D. c #E78805", | |||
| "E. c #DA8002", | |||
| "F. c #3F301B", | |||
| "G. c #303030", | |||
| "H. c #3D3E49", | |||
| "I. c #3E4266", | |||
| "J. c #4F5483", | |||
| "K. c #5E639C", | |||
| "L. c #686FAF", | |||
| "M. c #656DB3", | |||
| "N. c #282E68", | |||
| "O. c #676B8E", | |||
| "P. c #9CA3DA", | |||
| "Q. c #9BA1D9", | |||
| "R. c #9AA0D9", | |||
| "S. c #999FD8", | |||
| "T. c #E0E1E7", | |||
| "U. c #E5E5E5", | |||
| "V. c #BBBBBB", | |||
| "W. c #B7B7B7", | |||
| "X. c #B5B5B5", | |||
| "Y. c #B0B0B0", | |||
| "Z. c #AAAAAA", | |||
| "`. c #A7A5A2", | |||
| " + c #614113", | |||
| ".+ c #2B2B2B", | |||
| "++ c #424242", | |||
| "@+ c #484A5E", | |||
| "#+ c #4B4F7C", | |||
| "$+ c #5A5F97", | |||
| "%+ c #656CAB", | |||
| "&+ c #6D74B9", | |||
| "*+ c #5F67B1", | |||
| "=+ c #202552", | |||
| "-+ c #878DBD", | |||
| ";+ c #99A0D9", | |||
| ">+ c #989FD8", | |||
| ",+ c #9CA2D9", | |||
| "'+ c #E6E6E7", | |||
| ")+ c #E3E3E3", | |||
| "!+ c #CACACA", | |||
| "~+ c #B6A996", | |||
| "{+ c #8D560A", | |||
| "]+ c #232323", | |||
| "^+ c #393939", | |||
| "/+ c #555555", | |||
| "(+ c #515474", | |||
| "_+ c #565B90", | |||
| ":+ c #6369A6", | |||
| "<+ c #6B72B6", | |||
| "[+ c #6F77BF", | |||
| "}+ c #5861AD", | |||
| "|+ c #191D40", | |||
| "1+ c #1A1B24", | |||
| "2+ c #999FD7", | |||
| "3+ c #989ED8", | |||
| "4+ c #979DD7", | |||
| "5+ c #A8ADDA", | |||
| "6+ c #D1D1D1", | |||
| "7+ c #DCDCDC", | |||
| "8+ c #D8D8D8", | |||
| "9+ c #C2AC8E", | |||
| "0+ c #925807", | |||
| "a+ c #282726", | |||
| "b+ c #474747", | |||
| "c+ c #666666", | |||
| "d+ c #565A85", | |||
| "e+ c #5E649F", | |||
| "f+ c #686EB1", | |||
| "g+ c #6E75BC", | |||
| "h+ c #7078C2", | |||
| "i+ c #515AA8", | |||
| "j+ c #12152F", | |||
| "k+ c #3A3D53", | |||
| "l+ c #969DD7", | |||
| "m+ c #959CD7", | |||
| "n+ c #B5B8DC", | |||
| "o+ c #C5C5C5", | |||
| "p+ c #B6B6B6", | |||
| "q+ c #B1B1B1", | |||
| "r+ c #A9A9A9", | |||
| "s+ c #A0A0A0", | |||
| "t+ c #A88D68", | |||
| "u+ c #AB6C13", | |||
| "v+ c #58544F", | |||
| "w+ c #707072", | |||
| "x+ c #575C90", | |||
| "y+ c #6268A8", | |||
| "z+ c #6A71B7", | |||
| "A+ c #6E76C0", | |||
| "B+ c #7077C3", | |||
| "C+ c #4B53A2", | |||
| "D+ c #0B0D1D", | |||
| "E+ c #535675", | |||
| "F+ c #979ED8", | |||
| "G+ c #969CD7", | |||
| "H+ c #959BD7", | |||
| "I+ c #949AD6", | |||
| "J+ c #C1C4DD", | |||
| "K+ c #D3D3D3", | |||
| "L+ c #C8A069", | |||
| "M+ c #C37C19", | |||
| "N+ c #716E71", | |||
| "O+ c #565B93", | |||
| "P+ c #6269AA", | |||
| "Q+ c #6A71B8", | |||
| "R+ c #6D75C0", | |||
| "S+ c #6E76C3", | |||
| "T+ c #444C9C", | |||
| "U+ c #05060D", | |||
| "V+ c #7176A2", | |||
| "W+ c #949BD6", | |||
| "X+ c #939AD6", | |||
| "Y+ c #9299D5", | |||
| "Z+ c #CED0DF", | |||
| "`+ c #D9D9D9", | |||
| " @ c #C99D5F", | |||
| ".@ c #C37C20", | |||
| "+@ c #575989", | |||
| "@@ c #5E65A4", | |||
| "#@ c #676DB4", | |||
| "$@ c #6B72BD", | |||
| "%@ c #6C74C2", | |||
| "&@ c #3B4490", | |||
| "*@ c #010102", | |||
| "=@ c #8D93CB", | |||
| "-@ c #9399D6", | |||
| ";@ c #9298D5", | |||
| ">@ c #DADBDF", | |||
| ",@ c #B4B4B4", | |||
| "'@ c #AFAFAF", | |||
| ")@ c #ADADAD", | |||
| "!@ c #A6A6A6", | |||
| "~@ c #A1A1A1", | |||
| "{@ c #C69146", | |||
| "]@ c #E48502", | |||
| "^@ c #896652", | |||
| "/@ c #585E9C", | |||
| "(@ c #6269AE", | |||
| "_@ c #686FBA", | |||
| ":@ c #6970BE", | |||
| "<@ c #31397D", | |||
| "[@ c #2B2D3E", | |||
| "}@ c #9399D5", | |||
| "|@ c #9198D5", | |||
| "1@ c #9097D4", | |||
| "2@ c #999FD5", | |||
| "3@ c #DEDEDF", | |||
| "4@ c #DDDDDD", | |||
| "5@ c #DBDBDB", | |||
| "6@ c #D5D5D5", | |||
| "7@ c #CCCCCC", | |||
| "8@ c #B3B3B3", | |||
| "9@ c #CD8D34", | |||
| "0@ c #E38401", | |||
| "a@ c #B9700B", | |||
| "b@ c #885E24", | |||
| "c@ c #4F4A54", | |||
| "d@ c #444978", | |||
| "e@ c #525893", | |||
| "f@ c #5D64A8", | |||
| "g@ c #646BB6", | |||
| "h@ c #636BB9", | |||
| "i@ c #2A316D", | |||
| "j@ c #454865", | |||
| "k@ c #9096D4", | |||
| "l@ c #8E95D4", | |||
| "m@ c #A7ABD6", | |||
| "n@ c #B8B8B8", | |||
| "o@ c #D59132", | |||
| "p@ c #E08301", | |||
| "q@ c #A76406", | |||
| "r@ c #66400C", | |||
| "s@ c #2A2218", | |||
| "t@ c #2E2E2E", | |||
| "u@ c #414141", | |||
| "v@ c #3E415A", | |||
| "w@ c #424776", | |||
| "x@ c #50558F", | |||
| "y@ c #5B61A5", | |||
| "z@ c #6269B3", | |||
| "A@ c #5D64B3", | |||
| "B@ c #242A5E", | |||
| "C@ c #62668F", | |||
| "D@ c #9197D5", | |||
| "E@ c #8F96D4", | |||
| "F@ c #8E95D3", | |||
| "G@ c #8D94D3", | |||
| "H@ c #B5B8D7", | |||
| "I@ c #BCBCBC", | |||
| "J@ c #B2B2B2", | |||
| "K@ c #DD8C1D", | |||
| "L@ c #D67D02", | |||
| "M@ c #995C08", | |||
| "N@ c #563810", | |||
| "O@ c #241F18", | |||
| "P@ c #1F1F1F", | |||
| "Q@ c #272727", | |||
| "R@ c #313131", | |||
| "S@ c #3F3F3F", | |||
| "T@ c #4F4F4F", | |||
| "U@ c #414466", | |||
| "V@ c #464A7E", | |||
| "W@ c #515794", | |||
| "X@ c #5B62A7", | |||
| "Y@ c #6168B4", | |||
| "Z@ c #575FAE", | |||
| "`@ c #1F2450", | |||
| " # c #8187BE", | |||
| ".# c #8E94D3", | |||
| "+# c #8D93D3", | |||
| "@# c #8B92D2", | |||
| "## c #C3C5D8", | |||
| "$# c #D6D6D6", | |||
| "%# c #939393", | |||
| "&# c #DD840A", | |||
| "*# c #E78601", | |||
| "=# c #875510", | |||
| "-# c #4C3617", | |||
| ";# c #201F1D", | |||
| "># c #222222", | |||
| ",# c #282828", | |||
| "'# c #676768", | |||
| ")# c #484D7B", | |||
| "!# c #4E538E", | |||
| "~# c #565C9F", | |||
| "{# c #5D64AD", | |||
| "]# c #6169B7", | |||
| "^# c #535BAA", | |||
| "/# c #1A1E43", | |||
| "(# c #202230", | |||
| "_# c #8C93D3", | |||
| ":# c #8A91D1", | |||
| "<# c #D0D1D9", | |||
| "[# c #C4C4C4", | |||
| "}# c #D08D30", | |||
| "|# c #A67F47", | |||
| "1# c #6C5F4E", | |||
| "2# c #292929", | |||
| "3# c #373737", | |||
| "4# c #454545", | |||
| "5# c #565656", | |||
| "6# c #636363", | |||
| "7# c #6D6D6D", | |||
| "8# c #787878", | |||
| "9# c #7F7F83", | |||
| "0# c #525894", | |||
| "a# c #575DA0", | |||
| "b# c #5C63AB", | |||
| "c# c #6067B4", | |||
| "d# c #626ABA", | |||
| "e# c #4F57A7", | |||
| "f# c #141835", | |||
| "g# c #3D405B", | |||
| "h# c #8C93D2", | |||
| "i# c #8B91D2", | |||
| "j# c #8990D1", | |||
| "k# c #8C92D1", | |||
| "l# c #D6D6D8", | |||
| "m# c #9D9D9D", | |||
| "n# c #828282", | |||
| "o# c #4E4E4E", | |||
| "p# c #545454", | |||
| "q# c #5D5D5D", | |||
| "r# c #656565", | |||
| "s# c #6B6B6B", | |||
| "t# c #7B7B7B", | |||
| "u# c #8F909B", | |||
| "v# c #5B62A8", | |||
| "w# c #5E65AF", | |||
| "x# c #6068B5", | |||
| "y# c #6269B9", | |||
| "z# c #626ABC", | |||
| "A# c #4B53A4", | |||
| "B# c #0F1228", | |||
| "C# c #575B83", | |||
| "D# c #8C92D2", | |||
| "E# c #8A91D2", | |||
| "F# c #888FD1", | |||
| "G# c #878ED0", | |||
| "H# c #A9ADD2", | |||
| "I# c #C1C2D4", | |||
| "J# c #CFD0D4", | |||
| "K# c #D2D2D2", | |||
| "L# c #A5A5A5", | |||
| "M# c #909090", | |||
| "N# c #7D7D7D", | |||
| "O# c #717171", | |||
| "P# c #6C6C6C", | |||
| "Q# c #6F6F6F", | |||
| "R# c #767676", | |||
| "S# c #7E7E7E", | |||
| "T# c #878787", | |||
| "U# c #8F8F8F", | |||
| "V# c #969696", | |||
| "W# c #9C9C9C", | |||
| "X# c #9597AC", | |||
| "Y# c #6168B6", | |||
| "Z# c #626ABB", | |||
| "`# c #626ABD", | |||
| " $ c #626ABE", | |||
| ".$ c #4750A2", | |||
| "+$ c #0B0D1C", | |||
| "@$ c #787EB5", | |||
| "#$ c #888ED0", | |||
| "$$ c #868DD0", | |||
| "%$ c #858CCF", | |||
| "&$ c #848BCF", | |||
| "*$ c #838ACE", | |||
| "=$ c #8289CE", | |||
| "-$ c #8D93CE", | |||
| ";$ c #9CA1CE", | |||
| ">$ c #ABAECD", | |||
| ",$ c #B8BACA", | |||
| "'$ c #C1C1C5", | |||
| ")$ c #949494", | |||
| "!$ c #8D8D8D", | |||
| "~$ c #8B8B8B", | |||
| "{$ c #8E8E8E", | |||
| "]$ c #9A9A9A", | |||
| "^$ c #ACACAC", | |||
| "/$ c #9497B5", | |||
| "($ c #646BBC", | |||
| "_$ c #636BBD", | |||
| ":$ c #636BBE", | |||
| "<$ c #6169BF", | |||
| "[$ c #434C9E", | |||
| "}$ c #181924", | |||
| "|$ c #8990D0", | |||
| "1$ c #8188CD", | |||
| "2$ c #8087CD", | |||
| "3$ c #7F86CC", | |||
| "4$ c #7D85CC", | |||
| "5$ c #7C83CB", | |||
| "6$ c #7A81C9", | |||
| "7$ c #797FC6", | |||
| "8$ c #8086C0", | |||
| "9$ c #898DB8", | |||
| "0$ c #9093B0", | |||
| "a$ c #989AA8", | |||
| "b$ c #A0A1A4", | |||
| "c$ c #A3A3A3", | |||
| "d$ c #8D91BA", | |||
| "e$ c #646CBF", | |||
| "f$ c #636BBF", | |||
| "g$ c #626ABF", | |||
| "h$ c #6169BE", | |||
| "i$ c #6068BE", | |||
| "j$ c #3F4898", | |||
| "k$ c #020306", | |||
| "l$ c #383A55", | |||
| "m$ c #868CCF", | |||
| "n$ c #787FC4", | |||
| "o$ c #757CC1", | |||
| "p$ c #7B82CA", | |||
| "q$ c #7A82CA", | |||
| "r$ c #7980C9", | |||
| "s$ c #777EC7", | |||
| "t$ c #747BC4", | |||
| "u$ c #7078C0", | |||
| "v$ c #6D74BB", | |||
| "w$ c #767BB6", | |||
| "x$ c #8589B7", | |||
| "y$ c #9699B7", | |||
| "z$ c #A6A8B8", | |||
| "A$ c #B4B4B7", | |||
| "B$ c #8388BC", | |||
| "C$ c #5F68BE", | |||
| "D$ c #5E66BD", | |||
| "E$ c #3A428F", | |||
| "F$ c #51557C", | |||
| "G$ c #6D74B3", | |||
| "H$ c #636689", | |||
| "I$ c #686977", | |||
| "J$ c #67697E", | |||
| "K$ c #6C6F8E", | |||
| "L$ c #6F739F", | |||
| "M$ c #7075AE", | |||
| "N$ c #7077BC", | |||
| "O$ c #7179C3", | |||
| "P$ c #7077C2", | |||
| "Q$ c #6E75C0", | |||
| "R$ c #6D74BF", | |||
| "S$ c #6C73BF", | |||
| "T$ c #6B73C0", | |||
| "U$ c #6B72C0", | |||
| "V$ c #6A72C1", | |||
| "W$ c #6C74C1", | |||
| "X$ c #797FC0", | |||
| "Y$ c #898DBE", | |||
| "Z$ c #989BBB", | |||
| "`$ c #A1A3B7", | |||
| " % c #6870BE", | |||
| ".% c #5F67BE", | |||
| "+% c #5C64BC", | |||
| "@% c #32397E", | |||
| "#% c #7176AF", | |||
| "$% c #747BBE", | |||
| "%% c #686978", | |||
| "&% c #757575", | |||
| "*% c #777A99", | |||
| "=% c #797B8D", | |||
| "-% c #7B7B7F", | |||
| ";% c #7C7C7C", | |||
| ">% c #7C7C7D", | |||
| ",% c #797A83", | |||
| "'% c #777A91", | |||
| ")% c #74779F", | |||
| "!% c #7075AC", | |||
| "~% c #6A71B9", | |||
| "{% c #6C73C3", | |||
| "]% c #6B72C3", | |||
| "^% c #6A71C2", | |||
| "/% c #6970C2", | |||
| "(% c #676FC1", | |||
| "_% c #666EC1", | |||
| ":% c #656DC0", | |||
| "<% c #646CC0", | |||
| "[% c #5F67BD", | |||
| "}% c #5961B9", | |||
| "|% c #2C3372", | |||
| "1% c #181925", | |||
| "2% c #838ACD", | |||
| "3% c #7E86CC", | |||
| "4% c #6B709E", | |||
| "5% c #797979", | |||
| "6% c #747581", | |||
| "7% c #777EC8", | |||
| "8% c #767DC8", | |||
| "9% c #757CC7", | |||
| "0% c #757BBA", | |||
| "a% c #777CA9", | |||
| "b% c #818182", | |||
| "c% c #838383", | |||
| "d% c #858585", | |||
| "e% c #858586", | |||
| "f% c #7D7E89", | |||
| "g% c #767896", | |||
| "h% c #6B70A0", | |||
| "i% c #5F66AA", | |||
| "j% c #6068B7", | |||
| "k% c #636BC0", | |||
| "l% c #5E67BD", | |||
| "m% c #5D65BD", | |||
| "n% c #5B63BC", | |||
| "o% c #565EB6", | |||
| "p% c #282E67", | |||
| "q% c #363955", | |||
| "r% c #7F86CD", | |||
| "s% c #7E85CC", | |||
| "t% c #7C83CA", | |||
| "u% c #676981", | |||
| "v% c #7A7A7A", | |||
| "w% c #737695", | |||
| "x% c #757DC8", | |||
| "y% c #747CC7", | |||
| "z% c #737AC7", | |||
| "A% c #7279C6", | |||
| "B% c #747ABA", | |||
| "C% c #838384", | |||
| "D% c #868686", | |||
| "E% c #888888", | |||
| "F% c #898989", | |||
| "G% c #8A8A8A", | |||
| "H% c #8C8C8C", | |||
| "I% c #8B8B8C", | |||
| "J% c #717384", | |||
| "K% c #555A99", | |||
| "L% c #545BA5", | |||
| "M% c #555CA8", | |||
| "N% c #5A62B4", | |||
| "O% c #5A63BB", | |||
| "P% c #5961BB", | |||
| "Q% c #525AB2", | |||
| "R% c #242A5D", | |||
| "S% c #51557F", | |||
| "T% c #8188CE", | |||
| "U% c #7C84CB", | |||
| "V% c #6A71B3", | |||
| "W% c #73737A", | |||
| "X% c #7075AB", | |||
| "Y% c #747BC7", | |||
| "Z% c #7179C6", | |||
| "`% c #7078C6", | |||
| " & c #787CAC", | |||
| ".& c #6E7193", | |||
| "+& c #5C64B9", | |||
| "@& c #535BA8", | |||
| "#& c #535AA8", | |||
| "$& c #5A62BB", | |||
| "%& c #5860BA", | |||
| "&& c #4F57AF", | |||
| "*& c #1E234F", | |||
| "=& c #7076B3", | |||
| "-& c #7B82CB", | |||
| ";& c #62689E", | |||
| ">& c #7F7F7F", | |||
| ",& c #79797C", | |||
| "'& c #7279C1", | |||
| ")& c #727AC7", | |||
| "!& c #7077C5", | |||
| "~& c #6F76C5", | |||
| "{& c #7E819E", | |||
| "]& c #757789", | |||
| "^& c #5D66BD", | |||
| "/& c #4F56A2", | |||
| "(& c #5760BA", | |||
| "_& c #565EB9", | |||
| ":& c #4B54AC", | |||
| "<& c #1B1F46", | |||
| "[& c #1E2030", | |||
| "}& c #7F86CB", | |||
| "|& c #7D84CB", | |||
| "1& c #7981CA", | |||
| "2& c #65688E", | |||
| "3& c #808080", | |||
| "4& c #818181", | |||
| "5& c #737589", | |||
| "6& c #7178C6", | |||
| "7& c #6F77C5", | |||
| "8& c #6E76C5", | |||
| "9& c #6D75C4", | |||
| "0& c #858693", | |||
| "a& c #959595", | |||
| "b& c #777988", | |||
| "c& c #5962BB", | |||
| "d& c #5158A8", | |||
| "e& c #545DB4", | |||
| "f& c #545DB9", | |||
| "g& c #4851A8", | |||
| "h& c #181C3E", | |||
| "i& c #393D5D", | |||
| "j& c #7B83CB", | |||
| "k& c #7980CA", | |||
| "l& c #767EC7", | |||
| "m& c #696B80", | |||
| "n& c #848484", | |||
| "o& c #6E729B", | |||
| "p& c #6E76C4", | |||
| "q& c #6D74C4", | |||
| "r& c #6E75BE", | |||
| "s& c #8B8B8D", | |||
| "t& c #919191", | |||
| "u& c #989898", | |||
| "v& c #71738E", | |||
| "w& c #5B64BC", | |||
| "x& c #4E56A4", | |||
| "y& c #555DB8", | |||
| "z& c #545CB9", | |||
| "A& c #535BB8", | |||
| "B& c #464EA5", | |||
| "C& c #131631", | |||
| "D& c #3F4367", | |||
| "E& c #7A81CA", | |||
| "F& c #777FC9", | |||
| "G& c #6A71B6", | |||
| "H& c #797A81", | |||
| "I& c #696FAE", | |||
| "J& c #6E75C4", | |||
| "K& c #6C74C4", | |||
| "L& c #6B73C3", | |||
| "M& c #757AB3", | |||
| "N& c #999999", | |||
| "O& c #666A94", | |||
| "P& c #565FB9", | |||
| "Q& c #4D54A2", | |||
| "R& c #545CB8", | |||
| "S& c #525BB8", | |||
| "T& c #515AB7", | |||
| "U& c #434CA2", | |||
| "V& c #0F1227", | |||
| "W& c #292C44", | |||
| "X& c #7880C9", | |||
| "Y& c #777EC9", | |||
| "Z& c #6268A5", | |||
| "`& c #78787F", | |||
| " * c #6E75C3", | |||
| ".* c #7D81A8", | |||
| "+* c #9B9B9B", | |||
| "@* c #5A5F9B", | |||
| "#* c #5861BA", | |||
| "$* c #575FBA", | |||
| "%* c #555DB9", | |||
| "&* c #4B53A1", | |||
| "** c #5159B7", | |||
| "=* c #5058B6", | |||
| "-* c #414AA0", | |||
| ";* c #0D0F21", | |||
| ">* c #5D629A", | |||
| ",* c #787FC9", | |||
| "'* c #666A96", | |||
| ")* c #6F728D", | |||
| "!* c #6A72C3", | |||
| "~* c #6971C2", | |||
| "{* c #6870C2", | |||
| "]* c #87899E", | |||
| "^* c #979797", | |||
| "/* c #9E9E9E", | |||
| "(* c #565DA9", | |||
| "_* c #4B52A1", | |||
| ":* c #4F58B6", | |||
| "<* c #4E57B6", | |||
| "[* c #3F489D", | |||
| "}* c #070813", | |||
| "|* c #0E0F1B", | |||
| "1* c #434B90", | |||
| "2* c #575FAD", | |||
| "3* c #646CB9", | |||
| "4* c #4951A0", | |||
| "5* c #676A89", | |||
| "6* c #666B9C", | |||
| "7* c #686FC2", | |||
| "8* c #686FC0", | |||
| "9* c #929297", | |||
| "0* c #9F9F9F", | |||
| "a* c #87878C", | |||
| "b* c #565EB7", | |||
| "c* c #555EB9", | |||
| "d* c #4A51A2", | |||
| "e* c #4E56B6", | |||
| "f* c #4D55B5", | |||
| "g* c #3D469A", | |||
| "h* c #434346", | |||
| "i* c #808081", | |||
| "j* c #88898A", | |||
| "k* c #7F829B", | |||
| "l* c #797EB0", | |||
| "m* c #6F76BA", | |||
| "n* c #6870C1", | |||
| "o* c #6F75B8", | |||
| "p* c #A2A2A2", | |||
| "q* c #797B8F", | |||
| "r* c #4F57B3", | |||
| "s* c #4A51A4", | |||
| "t* c #4D56B5", | |||
| "u* c #4C55B5", | |||
| "v* c #4B54B4", | |||
| "w* c #3B4497", | |||
| "x* c #020205", | |||
| "y* c #030304", | |||
| "z* c #202022", | |||
| "A* c #38393B", | |||
| "B* c #545458", | |||
| "C* c #707173", | |||
| "D* c #7F7F81", | |||
| "E* c #89898C", | |||
| "F* c #8F8F98", | |||
| "G* c #888BA3", | |||
| "H* c #898BA4", | |||
| "I* c #A4A4A4", | |||
| "J* c #6B6F93", | |||
| "K* c #535CB8", | |||
| "L* c #525AB8", | |||
| "M* c #4B53AA", | |||
| "N* c #4A52AB", | |||
| "O* c #4B53B4", | |||
| "P* c #4952B4", | |||
| "Q* c #373F8C", | |||
| "R* c #040405", | |||
| "S* c #171719", | |||
| "T* c #303134", | |||
| "U* c #4B4B4E", | |||
| "V* c #69696F", | |||
| "W* c #7D7E82", | |||
| "X* c #898A8E", | |||
| "Y* c #95969A", | |||
| "Z* c #9D9D9E", | |||
| "`* c #A7A7A7", | |||
| " = c #5C6197", | |||
| ".= c #525AB7", | |||
| "+= c #5059B7", | |||
| "@= c #4850A3", | |||
| "#= c #4B53B2", | |||
| "$= c #4A53B4", | |||
| "%= c #4952B3", | |||
| "&= c #4851B3", | |||
| "*= c #353D88", | |||
| "== c #010101", | |||
| "-= c #0F1011", | |||
| ";= c #29292B", | |||
| ">= c #424246", | |||
| ",= c #606167", | |||
| "'= c #7C7D84", | |||
| ")= c #88898F", | |||
| "!= c #97979E", | |||
| "~= c #A2A3A5", | |||
| "{= c #4F559D", | |||
| "]= c #4F57B6", | |||
| "^= c #474EA0", | |||
| "/= c #4951B3", | |||
| "(= c #4750B3", | |||
| "_= c #464FB1", | |||
| ":= c #2F3679", | |||
| "<= c #0A0A0D", | |||
| "[= c #222226", | |||
| "}= c #3A3A3C", | |||
| "|= c #575860", | |||
| "1= c #767781", | |||
| "2= c #878890", | |||
| "3= c #9798A0", | |||
| "4= c #8D8E92", | |||
| "5= c #474E94", | |||
| "6= c #4E56AF", | |||
| "7= c #4F57B5", | |||
| "8= c #454C9E", | |||
| "9= c #464FB2", | |||
| "0= c #444DB0", | |||
| "a= c #2E3577", | |||
| "b= c #050507", | |||
| "c= c #1A1B1F", | |||
| "d= c #333337", | |||
| "e= c #47484E", | |||
| "f= c #262835", | |||
| "g= c #191C3F", | |||
| "h= c #2B3169", | |||
| "i= c #3F4794", | |||
| "j= c #474FA7", | |||
| "k= c #4750B2", | |||
| "l= c #464EB2", | |||
| "m= c #444DB1", | |||
| "n= c #424AAC", | |||
| "o= c #0E1024", | |||
| "p= c #242857", | |||
| "q= c #414AA8", | |||
| "r= c #434CB0", | |||
| "s= c #3E47A4", | |||
| "t= c #212654", | |||
| "u= c #1B1F45", | |||
| "v= c #2A306C", | |||
| "w= c #374091", | |||
| "x= c #394294", | |||
| "y= c #12152E", | |||
| "z= c #010204", | |||
| "A= c #080A16", | |||
| " ", | |||
| " . + ", | |||
| " @ @ @ # ", | |||
| " $ @ @ @ @ % ", | |||
| " & @ @ @ @ @ @ + * ", | |||
| " = @ @ @ @ @ @ @ @ - ", | |||
| " @ @ @ @ @ @ @ @ ; ", | |||
| " > @ @ @ @ @ @ @ , ' ) ", | |||
| " ! @ @ @ @ @ @ @ ~ { ) ) ", | |||
| " @ @ @ @ @ @ @ ] ^ ) ) ", | |||
| " / @ @ @ @ @ @ @ ( ) ) ) ", | |||
| " _ : < [ } ] @ @ @ @ @ @ @ | 1 ) ) ", | |||
| " 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l @ @ @ @ @ @ @ m n o p q r ", | |||
| " s t u v w x y z A B C D E @ F G H I H J K @ @ @ @ @ @ L M N O P Q R ", | |||
| " S T U V W X z A B C Y Z ` @ @ ...+.@.#.@ @ @ @ @ @ @ $.%.&.*.=.-.;.>. ", | |||
| " ,.'.).!.~.{.z ].^./.(._.(.:.@ @ @ <.[.}.@ @ @ @ @ @ @ |.1.2.3.4.5.6.7.8. ", | |||
| " 9.0.a.b.c.d.e.C f.].g.+.h.i.@ @ @ @ j.@ @ @ @ @ @ @ k.l.m.n.o.p.q.r.s.t.) ", | |||
| " u.a.b.v.w.x.B y.C z.A.B.C.D.@ @ @ @ @ @ @ @ @ @ @ E.F.G.H.I.J.K.L.M.N.) ) ", | |||
| " O.P.Q.R.S.T.U.V.W.X.Y.Z.`.@ @ @ @ @ @ @ @ @ @ @ @ +.+++@+#+$+%+&+*+=+) ) ", | |||
| " -+Q.;+>+,+'+C z.)+D Z !+~+@ @ @ @ @ @ @ @ @ @ @ {+]+^+/+(+_+:+<+[+}+|+) ) ", | |||
| " 1+2+;+3+4+5+U.6+H 7+A.8+(.9+@ @ @ @ @ @ @ @ @ @ @ 0+a+b+c+d+e+f+g+h+i+j+) ) ", | |||
| " k+S.3+l+m+n+z.Z o+p+q+r+s+t+@ @ @ @ @ @ @ @ @ @ @ @ u+v+w+x+y+z+A+B+C+D+) ) ", | |||
| " E+F+G+H+I+J+f.Y D A.Z K+o+L+@ @ @ @ @ @ @ @ @ @ @ @ @ M+N+O+P+Q+R+S+T+U+) ", | |||
| " V+G+W+X+Y+Z+D A.A.7+`+6+^. @@ @ @ @ @ @ @ @ @ @ @ @ @ @ .@+@@@#@$@%@&@*@) ", | |||
| " =@W+-@;@;@>@6+,@Y.'@)@!@~@{@@ @ @ @ @ @ @ @ @ @ @ @ @ @ ]@^@/@(@_@:@<@) ) ", | |||
| " [@I+}@|@1@2@3@4@7+5@`+6@7@8@9@@ @ @ @ @ @ @ @ @ @ @ 0@a@b@c@d@e@f@g@h@i@) ) ", | |||
| " j@Y+|@k@l@m@4@K+5@`+].K+!+n@o@@ @ @ @ @ @ @ @ p@q@r@s@t@u@v@w@x@y@z@A@B@) ) ", | |||
| " C@D@E@F@G@H@7+I@)@)@Z.h.J@J@K@@ @ @ @ @ L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@`@) ) ", | |||
| " #E@.#+#@###Z `+8+$#B.7@8@%#&#@ *#k.=#-#;#>#,#G.^+++k j '#)#!#~#{#]#^#/#) ) ", | |||
| " (#F@G@_#@#:#<#8+].$#6@K+g.[#8@}#|#1#S@t@2#.+G.3#4#5#6#7#8#9#0#a#b#c#d#e#f#) ) ", | |||
| " g#G@h#i#j#k#l#].$#B.K+6+7@[#,@m#n#g 5#o#o#p#q#r#h c+s#t#%#u#v#w#x#y#z#A#B#) ", | |||
| " C#D#E#j#F#G#H#I#J#K+K#_.(.[#W.L#M#N#O#P#Q#R#S#T#U#V#W#~@!@X#Y#y#Z#`# $.$+$) ", | |||
| " @$E#j##$$$%$&$*$=$-$;$>$,$'$I@'@s+)$!$~${$)$]$s+L#r+^$'@Y./$($_$:$ $<$[$>.) ", | |||
| " }$|$F#G#$$%$*$=$1$2$3$4$5$6$7$8$9$0$a$b$c$!@r+^$'@J@8@,@X.X.d$e$f$g$h$i$j$k$) ", | |||
| " l$F#G#m$&$*$=$1$3$n$o$p$q$r$s$t$u$v$Q+<+w$x$y$z$A$W.W.W.p+p+B$f$g$h$C$D$E$) ) ", | |||
| " F$$$%$&$*$=$2$G$H$I$I$J$K$L$M$N$O$P$Q$R$S$T$U$V$W$X$Y$Z$z$`$ %g$i$.%D$+%@%) ) ", | |||
| " #%%$&$=$1$2$$%%%&%R#R#*%=%-%;%>%,%'%)%!%~%{%]%^%/%(%_%:%<%g$<$i$[%D$+%}%|%) ) ", | |||
| " 1%2%*$=$1$2$3%4%R#8#5%6%7%8%9%0%a%b%n#c%d%e%f%g%h%i%j%e$k%g$h$i$l%m%+%n%o%p%) ) ", | |||
| " q%*$=$1$r%s%t%u%5%v%t#w%x%y%z%A%B%C%d%D%T#E%F%G%H%I%J%K%L%L%M%N%m%+%O%P%Q%R%) ) ", | |||
| " S%T%2$3$s%U%V%W%t#;%N#X%Y%z%Z%`% &D%T#E%F%~$H%!${$U#M#.&i$.%+&@&#&$&P%%&&&*&) ) ", | |||
| " =&2$3$4$5$-&;&>%S#>&,&'&)&Z%!&~&{&E%F%~$H%!${$U#M#c %#]&[%^&+%n%/&%&(&_&:&<&) ) ", | |||
| " [&}&s%|&5$p$1&2&>&3&4&5&A%6&7&8&9&0&~$H%!${$U#M#c %#)$a&b&m%+%n%c&d&e&_&f&g&h&) ) ", | |||
| " i&s%|&j&q$k&l&m&4&n#n&o&`%7&p&q&r&s&!${$U#t&c %#)$a&V#u&v&w&$&P%%&x&y&z&A&B&C&) ", | |||
| " D&U%-&E&r$F&G&H&n&d%c%I&~&J&K&L&M&{$U#t&c %#)$a&V#u&N&]$O&$&P%(&P&Q&R&S&T&U&V&) ", | |||
| " W&p$E&X&Y&8%Z&d%D%T#`& *9&K&]%^%.*t&c %#)$a&V#u&N&]$+*+*@*#*$*_&%*&*S&**=*-*;*) ", | |||
| " >*,*Y&8%y%'*T#E%G%)*9&{%!*~*{*]*%#)$a&^*u&N&]$+*W#/*)$(*$*_&f&A&_***:*<*[*}*) ", | |||
| " |*1*2*3*4*5*G%~$H%6*L&!*~*7*8*9*a&^*u&N&]$+*W#/*0*s+a*b*c*R&A&T&d*:*e*f*g*U+) ", | |||
| " k$;*|+=+h*i*j*!$k*l*m*n*_%o*^*u&N&]$+*W#/*0*s+~@p*q*%*R&S&T&r*s*t*u*v*w*x*) ", | |||
| " ) ) ) y*z*A*B*C*D*E*F*G*H*N&]$+*m#/*0*s+~@p*I*L#J*K*L***=*M*N*u*O*P*Q**@) ", | |||
| " ) ) ) ) ) R*S*T*U*V*W*X*Y*Z*0*s+~@p*I*L#!@`* =.=+=:*<*@=#=$=%=&=*=t.) ", | |||
| " ) ) ) ) ) ==-=;=>=,='=)=!=~=!@`*h.!@{=+=]=e*u*^=$=/=(=_=:=) ) ", | |||
| " ) ) ) ) ) ) ) <=[=}=|=1=2=3=4=5=6=7=u*O*8=&=(=9=0=a=) ) ", | |||
| " ) ) ) ) ) ) ) b=c=d=e=f=g=h=i=j=8=k=l=m=n=N.) ) ", | |||
| " ) ) ) ) ) ) ) ) ) x*o=p=q=0=r=s=t=) ) ", | |||
| " ) ) ) ) ) ) ) ) u=v=w=x=y=) ) ", | |||
| " ) ) ) z=A=) ) ) ", | |||
| " ) ) ) ) ", | |||
| " ) ) ", | |||
| " ", | |||
| " "}; | |||
| @@ -0,0 +1,192 @@ | |||
| /* Graph Sort | |||
| * Copyleft (C) 2002 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include <iostream> | |||
| #include "GraphSort.h" | |||
| //#define GRAPHSORT_TRACE | |||
| ////////////////////////////////////////////////////////// | |||
| GraphSort::GraphSort() | |||
| { | |||
| } | |||
| GraphSort::~GraphSort() | |||
| { | |||
| } | |||
| void GraphSort::Clear() | |||
| { | |||
| //m_Sorted.clear(); | |||
| m_Graph.clear(); | |||
| } | |||
| const list<int> &GraphSort::GetSortedList() | |||
| { | |||
| return m_Sorted; | |||
| } | |||
| void GraphSort::Sort() | |||
| { | |||
| // walk back from all the roots | |||
| m_Sorted.clear(); | |||
| list<int> RootNodes; | |||
| for (map<int,Node>::iterator i=m_Graph.begin(); | |||
| i!=m_Graph.end(); i++) | |||
| { | |||
| // if there are no outputs, this must be a root | |||
| if (i->second.Outputs.empty()) | |||
| { | |||
| RecursiveWalk(i->first); | |||
| } | |||
| } | |||
| #ifdef GRAPHSORT_TRACE | |||
| for(list<int>::iterator i=m_Sorted.begin(); | |||
| i!=m_Sorted.end(); i++) | |||
| { | |||
| cerr<<*i<<" "; | |||
| } | |||
| cerr<<endl; | |||
| #endif | |||
| } | |||
| void GraphSort::RecursiveWalk(int node) | |||
| { | |||
| // check it's not been logged already | |||
| // (don't want to execute the node twice) | |||
| if(find(m_Sorted.begin(),m_Sorted.end(),node)==m_Sorted.end()) | |||
| { | |||
| #ifdef GRAPHSORT_TRACE | |||
| //cerr<<"adding "<<node<<" to list"<<endl; | |||
| #endif | |||
| m_Sorted.push_back(node); | |||
| } | |||
| else | |||
| { | |||
| #ifdef GRAPHSORT_TRACE | |||
| //cerr<<"Node "<<node<<" already logged, ending this path"<<endl; | |||
| #endif | |||
| return; | |||
| } | |||
| // branch back into the inputs | |||
| map<int,Node>::iterator i=m_Graph.find(node); | |||
| for(list<int>::iterator ii=i->second.Inputs.begin(); | |||
| ii!=i->second.Inputs.end(); ii++) | |||
| { | |||
| RecursiveWalk(*ii); | |||
| } | |||
| } | |||
| void GraphSort::Dump() | |||
| { | |||
| for (map<int,Node>::iterator i=m_Graph.begin(); | |||
| i!=m_Graph.end(); i++) | |||
| { | |||
| cerr<<"Node "<<i->first<<endl; | |||
| cerr<<"i="; | |||
| for (list<int>::iterator ii=i->second.Inputs.begin(); | |||
| ii!=i->second.Inputs.end(); ii++) | |||
| { | |||
| cerr<<*ii<<" "; | |||
| } | |||
| cerr<<endl<<"o="; | |||
| for (list<int>::iterator oi=i->second.Outputs.begin(); | |||
| oi!=i->second.Outputs.end(); oi++) | |||
| { | |||
| cerr<<*oi<<" "; | |||
| } | |||
| cerr<<endl;cerr<<endl; | |||
| } | |||
| } | |||
| void GraphSort::AddConnection(int SID, int DID) | |||
| { | |||
| map<int,Node>::iterator si=m_Graph.find(SID); | |||
| if (si==m_Graph.end()) | |||
| { | |||
| Node newnode; | |||
| m_Graph[SID]=newnode; | |||
| #ifdef GRAPHSORT_TRACE | |||
| cerr<<"added "<<SID<<endl; | |||
| #endif | |||
| } | |||
| map<int,Node>::iterator di=m_Graph.find(DID); | |||
| if (di==m_Graph.end()) | |||
| { | |||
| Node newnode; | |||
| m_Graph[DID]=newnode; | |||
| #ifdef GRAPHSORT_TRACE | |||
| cerr<<"added "<<DID<<endl; | |||
| #endif | |||
| } | |||
| m_Graph[SID].Outputs.push_back(DID); | |||
| m_Graph[DID].Inputs.push_back(SID); | |||
| Sort(); | |||
| } | |||
| void GraphSort::RemoveConnection(int SID, int DID) | |||
| { | |||
| map<int,Node>::iterator si=m_Graph.find(SID); | |||
| if (si==m_Graph.end()) | |||
| { | |||
| cerr<<"GraphSort::RemoveConnection - can't find source node"<<endl; | |||
| } | |||
| map<int,Node>::iterator di=m_Graph.find(DID); | |||
| if (di==m_Graph.end()) | |||
| { | |||
| cerr<<"GraphSort::RemoveConnection - can't find dest node"<<endl; | |||
| } | |||
| list<int>::iterator soi = find(si->second.Outputs.begin(), si->second.Outputs.end(), DID); | |||
| if (soi==si->second.Outputs.end()) cerr<<"GraphSort::RemoveConnection - can't find soi"<<endl; | |||
| else si->second.Outputs.erase(soi); | |||
| list<int>::iterator dii = find(di->second.Inputs.begin(), di->second.Inputs.end(), SID); | |||
| if (dii==di->second.Inputs.end()) cerr<<"GraphSort::RemoveConnection - can't find dii"<<endl; | |||
| else di->second.Inputs.erase(dii); | |||
| // check to remove the nodes | |||
| if (si->second.Outputs.empty() && si->second.Inputs.empty()) | |||
| { | |||
| m_Graph.erase(si); | |||
| #ifdef GRAPHSORT_TRACE | |||
| cerr<<"removed "<<SID<<endl; | |||
| #endif | |||
| } | |||
| if (di->second.Outputs.empty() && di->second.Inputs.empty()) | |||
| { | |||
| m_Graph.erase(di); | |||
| #ifdef GRAPHSORT_TRACE | |||
| cerr<<"removed "<<DID<<endl; | |||
| #endif | |||
| } | |||
| Sort(); | |||
| } | |||
| @@ -0,0 +1,55 @@ | |||
| /* Graph sort | |||
| * Copyleft (C) 2002 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include <vector> | |||
| #include <string> | |||
| #include <list> | |||
| #include <algorithm> | |||
| #include <map> | |||
| #ifndef GRAPH_SORT | |||
| #define GRAPH_SORT | |||
| using namespace std; | |||
| class GraphSort | |||
| { | |||
| public: | |||
| GraphSort(); | |||
| ~GraphSort(); | |||
| const list<int> &GetSortedList(); | |||
| void Sort(); | |||
| void AddConnection(int SID, int DID); | |||
| void RemoveConnection(int SID, int DID); | |||
| void Clear(); | |||
| void Dump(); | |||
| struct Node | |||
| { | |||
| list<int> Inputs; | |||
| list<int> Outputs; | |||
| }; | |||
| private: | |||
| void RecursiveWalk(int node); | |||
| map<int,Node> m_Graph; | |||
| list<int> m_Sorted; | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,264 @@ | |||
| ############################################################################# | |||
| # Makefile for building SpiralSynthModular | |||
| # Generated by tmake at 20:13, 2001/10/04 | |||
| # Project: SpiralSynthModular | |||
| # Template: app | |||
| ############################################################################# | |||
| SHELL = @SHELL@ | |||
| ####### Compiler, tools and options | |||
| CC = gcc | |||
| CXX = g++ | |||
| CFLAGS = @CFLAGS@ @FLTK_CFLAGS@ | |||
| CXXFLAGS= @CXXFLAGS@ @FLTK_CXXFLAGS@ | |||
| INCPATH = | |||
| LINK = g++ | |||
| LFLAGS = | |||
| LIBS = @FLTK_LIBS@ -lm -ldl -lpng -lpthread | |||
| MOC = moc | |||
| UIC = | |||
| TAR = tar -cf | |||
| GZIP = gzip -9f | |||
| INSTALL = @INSTALL@ | |||
| ###### Autoconf variables | |||
| prefix = @prefix@ | |||
| exec_prefix = @exec_prefix@ | |||
| bindir = @bindir@ | |||
| sbindir = @sbindir@ | |||
| libexecdir = @libexecdir@ | |||
| datadir = @datadir@ | |||
| sysconfdir = @sysconfdir@ | |||
| sharedstatedir = @sharedstatedir@ | |||
| localstatedir = @localstatedir@ | |||
| libdir = @libdir@ | |||
| infodir = @infodir@ | |||
| mandir = @mandir@ | |||
| SpiralPlugins = @PLUGINDIR@ | |||
| ####### Files | |||
| HEADERS = SpiralSynthModular.h \ | |||
| SpiralSynthModularInfo.h \ | |||
| GraphSort.h \ | |||
| GUI/Widgets/Fl_DeviceGUI.h \ | |||
| GUI/Widgets/Fl_CommentGUI.h \ | |||
| GUI/Widgets/Fl_DragBar.H \ | |||
| GUI/Widgets/Fl_Canvas.h \ | |||
| SpiralSound/SpiralInfo.h \ | |||
| SpiralSound/Sample.h \ | |||
| SpiralSound/Plugins/SpiralPlugin.h \ | |||
| SpiralSound/Plugins/SpiralPluginGUI.h \ | |||
| SpiralSound/PluginManager.h \ | |||
| SettingsWindow.h \ | |||
| SpiralSynthPluginLocation.h | |||
| SOURCES = SpiralSynthModular.C \ | |||
| SpiralSynthModularInfo.C \ | |||
| GraphSort.C \ | |||
| GUI/Widgets/Fl_DeviceGUI.C \ | |||
| GUI/Widgets/Fl_CommentGUI.C \ | |||
| GUI/Widgets/Fl_DragBar.cxx \ | |||
| GUI/Widgets/Fl_Canvas.C \ | |||
| SpiralSound/SpiralInfo.C \ | |||
| SpiralSound/Sample.C \ | |||
| SpiralSound/Plugins/SpiralPlugin.C \ | |||
| SpiralSound/Plugins/SpiralPluginGUI.C \ | |||
| SpiralSound/PluginManager.C \ | |||
| SettingsWindow.C | |||
| OBJECTS = SpiralSynthModular.o \ | |||
| SpiralSynthModularInfo.o \ | |||
| GraphSort.o \ | |||
| GUI/Widgets/Fl_DeviceGUI.o \ | |||
| GUI/Widgets/Fl_CommentGUI.o \ | |||
| GUI/Widgets/Fl_DragBar.o \ | |||
| GUI/Widgets/Fl_Canvas.o \ | |||
| SpiralSound/SpiralInfo.o \ | |||
| SpiralSound/Sample.o \ | |||
| SpiralSound/Plugins/SpiralPlugin.o \ | |||
| SpiralSound/Plugins/SpiralPluginGUI.o \ | |||
| SpiralSound/PluginManager.o \ | |||
| SettingsWindow.o | |||
| INTERFACES = | |||
| UICDECLS = | |||
| UICIMPLS = | |||
| SRCMOC = | |||
| OBJMOC = | |||
| DIST = | |||
| TARGET = SpiralSynthModular | |||
| SUBDIRS = @PLUGINLIST@ | |||
| ####### Implicit rules | |||
| .SUFFIXES: .cpp .cxx .cc .C .c | |||
| .cpp.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .cxx.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .cc.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .C.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .c.o: | |||
| $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< | |||
| ####### Build rules | |||
| all: $(TARGET) | |||
| list='$(SUBDIRS)'; \ | |||
| for subdir in $$list; do \ | |||
| (cd SpiralSound/Plugins/$$subdir ; make) \ | |||
| done; | |||
| $(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) | |||
| $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS) | |||
| moc: $(SRCMOC) | |||
| tmake: Makefile | |||
| Makefile: SpiralSynthModular.pro | |||
| tmake SpiralSynthModular.pro -o Makefile | |||
| dist: | |||
| $(TAR) SpiralSynthModular.tar SpiralSynthModular.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST) | |||
| $(GZIP) SpiralSynthModular.tar | |||
| clean: | |||
| -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET) | |||
| -rm -f *~ core | |||
| list='$(SUBDIRS)'; \ | |||
| for subdir in $$list; do \ | |||
| (cd SpiralSound/Plugins/$$subdir ; make clean) \ | |||
| done; | |||
| install: SpiralSynthModular | |||
| $(INSTALL) SpiralSynthModular $(bindir) | |||
| $(INSTALL) -d $(SpiralPlugins) | |||
| list='$(SUBDIRS)'; \ | |||
| for subdir in $$list; do \ | |||
| (cd SpiralSound/Plugins/$$subdir ; make install) \ | |||
| done; | |||
| uninstall: | |||
| rm -f $(bindir)/SpiralSynthModular | |||
| rm -rf $(SpiralPlugins) | |||
| ####### Sub-libraries | |||
| ###### Combined headers | |||
| ####### Compile | |||
| SpiralSynthModular.o: SpiralSynthModular.C \ | |||
| SpiralSynthModular.h \ | |||
| SpiralSynthModularInfo.h \ | |||
| SpiralSound/SpiralInfo.h \ | |||
| GUI/Widgets/Fl_DeviceGUI.h \ | |||
| GUI/Widgets/Fl_CommentGUI.h \ | |||
| GUI/Widgets/Fl_Canvas.h \ | |||
| SpiralSound/Plugins/SpiralPlugin.h \ | |||
| SettingsWindow.h \ | |||
| SpiralSound/PluginManager.h \ | |||
| GUI/SSM.xpm \ | |||
| GUI/load.xpm \ | |||
| GUI/save.xpm \ | |||
| GUI/new.xpm \ | |||
| GUI/options.xpm \ | |||
| GUI/edit.xpm \ | |||
| GUI/comment.xpm | |||
| SpiralSynthModularInfo.o: SpiralSynthModularInfo.C \ | |||
| SpiralSynthModularInfo.h \ | |||
| SpiralSound/SpiralInfo.h \ | |||
| SpiralSynthPluginLocation.h | |||
| GraphSort.o: GraphSort.C \ | |||
| GraphSort.h | |||
| GUI/Widgets/Fl_DeviceGUI.o: GUI/Widgets/Fl_DeviceGUI.C \ | |||
| GUI/Widgets/Fl_DeviceGUI.h \ | |||
| GUI/Widgets/Fl_DragBar.H \ | |||
| GUI/Widgets/Fl_Canvas.h \ | |||
| GUI/Widgets/../../GraphSort.h \ | |||
| GUI/Widgets/../../SpiralSynthModularInfo.h \ | |||
| SpiralSound/SpiralInfo.h | |||
| GUI/Widgets/Fl_CommentGUI.o: GUI/Widgets/Fl_CommentGUI.C \ | |||
| GUI/Widgets/Fl_CommentGUI.h \ | |||
| GUI/Widgets/Fl_DeviceGUI.h \ | |||
| GUI/Widgets/Fl_DragBar.H \ | |||
| GUI/Widgets/../../SpiralSynthModularInfo.h \ | |||
| SpiralSound/SpiralInfo.h | |||
| GUI/Widgets/Fl_DragBar.o: GUI/Widgets/Fl_DragBar.cxx \ | |||
| GUI/Widgets/Fl_DragBar.H | |||
| GUI/Widgets/Fl_Canvas.o: GUI/Widgets/Fl_Canvas.C \ | |||
| GUI/Widgets/Fl_Canvas.h \ | |||
| GUI/Widgets/../../GraphSort.h \ | |||
| GUI/Widgets/Fl_DeviceGUI.h \ | |||
| GUI/Widgets/Fl_DragBar.H \ | |||
| GUI/Widgets/../../SpiralSynthModularInfo.h \ | |||
| SpiralSound/SpiralInfo.h | |||
| SpiralSound/SpiralInfo.o: SpiralSound/SpiralInfo.C \ | |||
| SpiralSound/SpiralInfo.h \ | |||
| SpiralSound/Sample.h | |||
| SpiralSound/Sample.o: SpiralSound/Sample.C \ | |||
| SpiralSound/Sample.h \ | |||
| SpiralSound/SpiralInfo.h | |||
| SpiralSound/Plugins/SpiralPlugin.o: SpiralSound/Plugins/SpiralPlugin.C \ | |||
| SpiralSound/Plugins/SpiralPlugin.h \ | |||
| SpiralSound/Plugins/../Sample.h \ | |||
| SpiralSound/SpiralInfo.h \ | |||
| SpiralSound/Sample.h | |||
| SpiralSound/Plugins/SpiralPluginGUI.o: SpiralSound/Plugins/SpiralPluginGUI.C \ | |||
| SpiralSound/Plugins/SpiralPluginGUI.h \ | |||
| SpiralSound/Plugins/Widgets/Fl_DragBar.H \ | |||
| SpiralSound/Plugins/SpiralPlugin.h \ | |||
| SpiralSound/Plugins/../Sample.h \ | |||
| SpiralSound/SpiralInfo.h \ | |||
| SpiralSound/Sample.h | |||
| SpiralSound/PluginManager.o: SpiralSound/PluginManager.C \ | |||
| SpiralSound/PluginManager.h \ | |||
| SpiralSound/Plugins/SpiralPlugin.h \ | |||
| SpiralSound/Plugins/../Sample.h \ | |||
| SpiralSound/SpiralInfo.h \ | |||
| SpiralSound/Sample.h | |||
| SettingsWindow.o: SettingsWindow.C \ | |||
| SettingsWindow.h \ | |||
| SpiralSynthModular.h \ | |||
| SpiralSynthModularInfo.h \ | |||
| SpiralSound/SpiralInfo.h \ | |||
| SpiralSound/Sample.h \ | |||
| SpiralSound/SpiralInfo.h \ | |||
| GUI/Widgets/Fl_DeviceGUI.h \ | |||
| GUI/Widgets/Fl_DragBar.H \ | |||
| GUI/Widgets/Fl_CommentGUI.h \ | |||
| GUI/Widgets/Fl_DeviceGUI.h \ | |||
| GUI/Widgets/Fl_Canvas.h \ | |||
| GUI/Widgets/../../GraphSort.h \ | |||
| SpiralSound/Plugins/SpiralPlugin.h \ | |||
| SpiralSound/Plugins/../Sample.h \ | |||
| GUI/options.xpm | |||
| @@ -0,0 +1,63 @@ | |||
| ** SpiralSynthModular ** | |||
| Last changed Saturday March 23 2002. | |||
| SpiralSynthModular is open source software, distributed under the General | |||
| Public License (GPL). See the file COPYING. | |||
| It uses the OSS /dev/dsp driver, (although this is configurable) and the GUI | |||
| it uses is FLTK (www.fltk.org). | |||
| See www.pawfal.org for more details. | |||
| ** Installing ** | |||
| To build the SpiralSynthModular application, and all the plugins: | |||
| ./configure | |||
| make | |||
| make install | |||
| Check out the designs in the Examples directory. | |||
| The GUI requires FLTK to be installed (www.fltk.org), Which in turn | |||
| require Mesa or OpenGL. | |||
| *** Jack support *** | |||
| This release of SSM comes with an experimental JackPlugin. JACK stands for | |||
| Jack Audio Connection Kit and aims to connect Linux audio apps together. | |||
| For more information on Jack, and other apps supporting it, see: | |||
| http://jackit.sourceforge.net | |||
| To build the JackPlugin, use the configure option: | |||
| ./configure --enable-jack | |||
| To load the plugin, add it to .SpiralSynthModular's plugin list. | |||
| *** Setting up your .SpiralSynthModular file *** | |||
| This file contains all the setup variables for the program. Thes values can be | |||
| edited with the options window whilst running SSM, but they will default to the | |||
| values in the file. | |||
| The following variables in the are the ones to play with to get a good playback | |||
| on your machine. This is usually tradeoff between quality and responsiveness | |||
| (latency). You can build designs and songs at low quality (22050 samplerate etc) | |||
| and then record them at higher settings. The wav file will sound fine, even if | |||
| the realtime output doesn't. | |||
| BufferSize = 512 - Size of sample buffer to be calculated each cycle. | |||
| FragmentSize = 256 - Subbuffer size sent to the soundcard | |||
| FragmentCount = -1 - Subbuffer count, -1 computes a suitable size, | |||
| setting to 4 or 8 gets better latencies. | |||
| Samplerate = 44100 - Sets the samplerate | |||
| Disclaimer: | |||
| No representations are made about the suitability of this software | |||
| for any purpose. This software is provided "as is" without express | |||
| or implied warranty. | |||
| (Damage to ears, speakers or buildings are not my fault :)) | |||
| Dave Griffiths - dave@pawfal.org | |||
| www.pawfal.org | |||
| @@ -0,0 +1,208 @@ | |||
| /* SpiralSynthModular | |||
| * Copyleft (C) 2002 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include <stdio.h> | |||
| #include <FL/Fl_Box.H> | |||
| #include <FL/Fl_Pixmap.H> | |||
| #include "SettingsWindow.h" | |||
| #include "SpiralSynthModularInfo.h" | |||
| #include "GUI/options.xpm" | |||
| SettingsWindow::SettingsWindow() : | |||
| Fl_Double_Window(250,275,"SSM Options"), | |||
| m_App(NULL) | |||
| { | |||
| color(SpiralSynthModularInfo::GUICOL_Tool); | |||
| box(FL_FLAT_BOX); | |||
| Fl_Pixmap *Icon = new Fl_Pixmap(options_xpm); | |||
| Fl_Box *IconBox = new Fl_Box(25,30,50,50,""); | |||
| IconBox->image(Icon); | |||
| Fl_Box *TextBox = new Fl_Box(180,10,50,20,"SpiralSynth Modular"); | |||
| TextBox->align(FL_ALIGN_RIGHT | FL_ALIGN_INSIDE); | |||
| TextBox = new Fl_Box(180,30,50,20,"Constructed by Dave Griffiths"); | |||
| TextBox->align(FL_ALIGN_RIGHT | FL_ALIGN_INSIDE); | |||
| TextBox->labelsize(10); | |||
| TextBox = new Fl_Box(192,40,50,20,"dave@@pawfal.org"); | |||
| TextBox->align(FL_ALIGN_RIGHT | FL_ALIGN_INSIDE); | |||
| TextBox->labelsize(10); | |||
| TextBox = new Fl_Box(180,50,50,20,"www.pawfal.org"); | |||
| TextBox->align(FL_ALIGN_RIGHT | FL_ALIGN_INSIDE); | |||
| TextBox->labelsize(10); | |||
| TextBox = new Fl_Box(180,63,50,20,"We are the music makers"); | |||
| TextBox->align(FL_ALIGN_RIGHT | FL_ALIGN_INSIDE); | |||
| TextBox->labelsize(10); | |||
| TextBox = new Fl_Box(180,73,50,20,"We are the dreamers of dreams"); | |||
| TextBox->align(FL_ALIGN_RIGHT | FL_ALIGN_INSIDE); | |||
| TextBox->labelsize(10); | |||
| Fl_Group *OptionsGrp = new Fl_Group(5,95,240,150,""); | |||
| OptionsGrp->box(FL_FLAT_BOX); | |||
| OptionsGrp->color(SpiralSynthModularInfo::GUICOL_Button); | |||
| m_Options = new Fl_Pack(5,115,230,100,"Settings"); | |||
| m_Options->color(SpiralSynthModularInfo::GUICOL_Button); | |||
| OptionsGrp->add(m_Options); | |||
| Fl_Box *Name; | |||
| Fl_Pack *Line; | |||
| char BufferSize[256]; | |||
| sprintf(BufferSize,"%d",SpiralSynthModularInfo::BUFSIZE); | |||
| char FragmentSize[256]; | |||
| sprintf(FragmentSize,"%d",SpiralSynthModularInfo::FRAGSIZE); | |||
| char FragmentCount[256]; | |||
| sprintf(FragmentCount,"%d",SpiralSynthModularInfo::FRAGCOUNT); | |||
| char Samplerate[256]; | |||
| sprintf(Samplerate,"%d",SpiralSynthModularInfo::SAMPLERATE); | |||
| char OutputDevice[256]; | |||
| sprintf(OutputDevice,"%s",SpiralSynthModularInfo::OUTPUTFILE.c_str()); | |||
| char MidiDevice[256]; | |||
| sprintf(MidiDevice,"%s",SpiralSynthModularInfo::MIDIFILE.c_str()); | |||
| Line = new Fl_Pack(0,0,100,20,""); | |||
| Line->type(FL_HORIZONTAL); | |||
| Name = new Fl_Box(55,0,150,20,"Buffer Size"); | |||
| Name->labelsize(10); | |||
| Name->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE); | |||
| Line->add(Name); | |||
| m_BufferSize = new Fl_Int_Input(0,0,80,20,""); | |||
| m_BufferSize->value(BufferSize); | |||
| Line->add(m_BufferSize); | |||
| Line->end(); | |||
| m_Options->add(Line); | |||
| Line = new Fl_Pack(0,0,100,20,""); | |||
| Line->type(FL_HORIZONTAL); | |||
| Name = new Fl_Box(55,0,150,20,"Fragment Size"); | |||
| Name->labelsize(10); | |||
| Name->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE); | |||
| Line->add(Name); | |||
| m_FragmentSize = new Fl_Int_Input(0,0,80,20,""); | |||
| m_FragmentSize->value(FragmentSize); | |||
| Line->add(m_FragmentSize); | |||
| Line->end(); | |||
| m_Options->add(Line); | |||
| Line = new Fl_Pack(0,0,100,20,""); | |||
| Line->type(FL_HORIZONTAL); | |||
| Name = new Fl_Box(55,0,150,20,"Fragment Count (-1 = auto)"); | |||
| Name->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE); | |||
| Name->labelsize(10); | |||
| Line->add(Name); | |||
| m_FragmentCount = new Fl_Int_Input(0,0,80,20,""); | |||
| m_FragmentCount->value(FragmentCount); | |||
| Line->add(m_FragmentCount); | |||
| Line->end(); | |||
| m_Options->add(Line); | |||
| Line = new Fl_Pack(0,0,100,20,""); | |||
| Line->type(FL_HORIZONTAL); | |||
| Name = new Fl_Box(55,0,150,20,"SampleRate"); | |||
| Name->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE); | |||
| Name->labelsize(10); | |||
| Line->add(Name); | |||
| m_Samplerate = new Fl_Int_Input(0,0,80,20,""); | |||
| m_Samplerate->value(Samplerate); | |||
| Line->add(m_Samplerate); | |||
| Line->end(); | |||
| m_Options->add(Line); | |||
| Line = new Fl_Pack(0,0,100,20,""); | |||
| Line->type(FL_HORIZONTAL); | |||
| Name = new Fl_Box(55,0,150,20,"Output Device"); | |||
| Name->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE); | |||
| Name->labelsize(10); | |||
| Line->add(Name); | |||
| m_OutputDevice = new Fl_Input(0,0,80,20,""); | |||
| m_OutputDevice->value(OutputDevice); | |||
| Line->add(m_OutputDevice); | |||
| Line->end(); | |||
| m_Options->add(Line); | |||
| Line = new Fl_Pack(0,0,100,20,""); | |||
| Line->type(FL_HORIZONTAL); | |||
| Name = new Fl_Box(55,0,150,20,"Midi Device"); | |||
| Name->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE); | |||
| Name->labelsize(10); | |||
| Line->add(Name); | |||
| m_MidiDevice = new Fl_Input(0,0,80,20,""); | |||
| m_MidiDevice->value(MidiDevice); | |||
| Line->add(m_MidiDevice); | |||
| Line->end(); | |||
| m_Options->add(Line); | |||
| m_Options->end(); | |||
| m_Save = new Fl_Button(140,250,50,20,"Save"); | |||
| m_Save->labelsize(10); | |||
| m_Save->tooltip("Save these settings"); | |||
| m_Save->callback((Fl_Callback*)cb_Save); | |||
| add(m_Save); | |||
| m_Apply = new Fl_Button(195,250,50,20,"Apply"); | |||
| m_Apply->labelsize(10); | |||
| m_Apply->tooltip("Some plugins may request to save data first"); | |||
| m_Apply->callback((Fl_Callback*)cb_Apply); | |||
| add(m_Apply); | |||
| end(); | |||
| } | |||
| SettingsWindow::~SettingsWindow() | |||
| { | |||
| } | |||
| inline void SettingsWindow::cb_Apply_i(Fl_Button* o, void* v) | |||
| { | |||
| SpiralSynthModularInfo::BUFSIZE=(int)atof(m_BufferSize->value()); | |||
| SpiralSynthModularInfo::FRAGSIZE=(int)atof(m_FragmentSize->value()); | |||
| SpiralSynthModularInfo::FRAGCOUNT=(int)atof(m_FragmentCount->value()); | |||
| SpiralSynthModularInfo::SAMPLERATE=(int)atof(m_Samplerate->value()); | |||
| SpiralSynthModularInfo::OUTPUTFILE=m_OutputDevice->value(); | |||
| SpiralSynthModularInfo::MIDIFILE=m_MidiDevice->value(); | |||
| assert(m_App); | |||
| if (m_App) | |||
| { | |||
| m_App->UpdateHostInfo(); | |||
| } | |||
| } | |||
| void SettingsWindow::cb_Apply(Fl_Button* o, void* v) | |||
| { ((SettingsWindow*)(o->parent()))->cb_Apply_i(o,v); } | |||
| inline void SettingsWindow::cb_Save_i(Fl_Button* o, void* v) | |||
| { | |||
| SpiralSynthModularInfo::BUFSIZE=(int)atof(m_BufferSize->value()); | |||
| SpiralSynthModularInfo::FRAGSIZE=(int)atof(m_FragmentSize->value()); | |||
| SpiralSynthModularInfo::FRAGCOUNT=(int)atof(m_FragmentCount->value()); | |||
| SpiralSynthModularInfo::SAMPLERATE=(int)atof(m_Samplerate->value()); | |||
| SpiralSynthModularInfo::OUTPUTFILE=m_OutputDevice->value(); | |||
| SpiralSynthModularInfo::MIDIFILE=m_MidiDevice->value(); | |||
| SpiralSynthModularInfo::Get()->SavePrefs(); | |||
| } | |||
| void SettingsWindow::cb_Save(Fl_Button* o, void* v) | |||
| { ((SettingsWindow*)(o->parent()))->cb_Save_i(o,v); } | |||
| @@ -0,0 +1,60 @@ | |||
| /* SpiralSynthModular | |||
| * Copyleft (C) 2002 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #ifndef SETTINGSWINDOW | |||
| #define SETTINGSWINDOW | |||
| #include <FL/Fl.H> | |||
| #include <FL/Fl_Double_Window.H> | |||
| #include <FL/Fl_Button.H> | |||
| #include <FL/Fl_Pack.H> | |||
| #include <FL/Fl_Int_Input.H> | |||
| #include <FL/Fl_Input.H> | |||
| #include "SpiralSynthModular.h" | |||
| class SynthModular; | |||
| class SettingsWindow : public Fl_Double_Window | |||
| { | |||
| public: | |||
| SettingsWindow(); | |||
| ~SettingsWindow(); | |||
| void RegisterApp(SynthModular *s) { m_App=s; } | |||
| private: | |||
| SynthModular *m_App; | |||
| Fl_Pack *m_Options; | |||
| Fl_Int_Input *m_BufferSize; | |||
| Fl_Int_Input *m_FragmentSize; | |||
| Fl_Int_Input *m_FragmentCount; | |||
| Fl_Int_Input *m_Samplerate; | |||
| Fl_Input *m_OutputDevice; | |||
| Fl_Input *m_MidiDevice; | |||
| Fl_Button *m_Save; | |||
| Fl_Button *m_Apply; | |||
| inline void cb_Apply_i(Fl_Button* o, void* v); | |||
| static void cb_Apply(Fl_Button* o, void* v); | |||
| inline void cb_Save_i(Fl_Button* o, void* v); | |||
| static void cb_Save(Fl_Button* o, void* v); | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,406 @@ | |||
| /* | |||
| * Copyleft (C) 2000 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "Midi.h" | |||
| #include "NoteTable.h" | |||
| #include "unistd.h" | |||
| #include "sys/types.h" | |||
| #include "signal.h" | |||
| #include "pthread.h" | |||
| #ifdef KEYBOARD_SUPPORT | |||
| #include <FL/Fl.h> | |||
| #endif | |||
| static const int MIDI_SCANBUFSIZE=256; | |||
| static const int MIDI_KEYOFFSET=0; | |||
| static const unsigned char STATUS_START = 0x80; | |||
| static const unsigned char STATUS_NOTE_OFF = 0x80; | |||
| static const unsigned char STATUS_NOTE_ON = 0x90; | |||
| static const unsigned char STATUS_AFTERTOUCH = 0xa0; | |||
| static const unsigned char STATUS_CONTROL_CHANGE = 0xb0; | |||
| static const unsigned char STATUS_PROG_CHANGE = 0xc0; | |||
| static const unsigned char STATUS_CHANNEL_PRESSURE = 0xd0; | |||
| static const unsigned char STATUS_PITCH_WHEEL = 0xe0; | |||
| static const unsigned char STATUS_END = 0xf0; | |||
| static const unsigned char SYSEX_START = 0xf0; | |||
| static const unsigned char SYSEX_TERMINATOR = 0xf7; | |||
| static const unsigned char MIDI_CLOCK = 0xf8; | |||
| static const unsigned char ACTIVE_SENSE = 0xfe; | |||
| static int NKEYS = 30; | |||
| static char KEYMAP[30]={'z','s','x','d','c','v','g','b','h','n','j','m','q', | |||
| '2','w','3','e','r','5','t','6','y','7','u','i','9', | |||
| 'o','0','p','['}; | |||
| MidiDevice *MidiDevice::m_Singleton; | |||
| string MidiDevice::m_DeviceName; | |||
| MidiDevice::MidiDevice() : | |||
| m_Poly(1) | |||
| { | |||
| Open(); | |||
| #ifdef KEYBOARD_SUPPORT | |||
| m_Oct=4; | |||
| m_CurrentVoice=0; | |||
| for (int n=0; n<256; n++) | |||
| { | |||
| m_KeyVoice[n]=' '; | |||
| } | |||
| #endif | |||
| } | |||
| MidiDevice::~MidiDevice() | |||
| { | |||
| Close(); | |||
| } | |||
| void MidiDevice::Close() | |||
| { | |||
| pthread_mutex_lock(m_Mutex); | |||
| pthread_cancel(m_MidiReader); | |||
| pthread_mutex_unlock(m_Mutex); | |||
| pthread_mutex_destroy(m_Mutex); | |||
| close(m_MidiFd); | |||
| close(m_MidiWrFd); | |||
| cerr<<"Closed midi device"<<endl; | |||
| } | |||
| void MidiDevice::Open() | |||
| { | |||
| //if (!SpiralInfo::WANTMIDI) return; | |||
| m_MidiFd = open(m_DeviceName.c_str(),O_RDONLY|O_SYNC); | |||
| if (!m_MidiFd) | |||
| { | |||
| cerr<<"Couldn't open midi for reading ["<<m_DeviceName<<"]"<<endl; | |||
| return; | |||
| } | |||
| m_MidiWrFd = open(m_DeviceName.c_str(),O_WRONLY); | |||
| if (!m_MidiWrFd) | |||
| { | |||
| cerr<<"Couldn't open midi for writing ["<<m_DeviceName<<"]"<<endl; | |||
| return; | |||
| } | |||
| cerr<<"Opened midi device ["<<m_DeviceName<<"]"<<endl; | |||
| m_Mutex = new pthread_mutex_t; | |||
| pthread_mutex_init(m_Mutex, NULL); | |||
| int ret=pthread_create(&m_MidiReader,NULL,(void*(*)(void*))MidiDevice::MidiReaderCallback,(void*)this); | |||
| } | |||
| // returns the next event off the list, or an | |||
| // empty event if the list is exhausted | |||
| MidiEvent MidiDevice::GetEvent(int Device) | |||
| { | |||
| if (Device<0 || Device>15) | |||
| { | |||
| cerr<<"GetEvent: Invalid Midi device "<<Device<<endl; | |||
| return MidiEvent(MidiEvent::NONE,0,0); | |||
| } | |||
| #ifdef KEYBOARD_SUPPORT | |||
| CheckKeyboard(); | |||
| #endif | |||
| pthread_mutex_lock(m_Mutex); | |||
| if (m_EventVec[Device].size()==0) | |||
| { | |||
| pthread_mutex_unlock(m_Mutex); | |||
| return MidiEvent(MidiEvent::NONE,0,0); | |||
| } | |||
| MidiEvent event(m_EventVec[Device].front()); | |||
| m_EventVec[Device].pop(); | |||
| pthread_mutex_unlock(m_Mutex); | |||
| return event; | |||
| } | |||
| void MidiDevice::SendEvent(int Device,const MidiEvent &Event) | |||
| { | |||
| if (Device<0 || Device>15) | |||
| { | |||
| cerr<<"SendEvent: Invalid Midi device "<<Device<<endl; | |||
| } | |||
| char message[3]; | |||
| message[1]=Event.GetNote()+MIDI_KEYOFFSET; | |||
| message[2]=(char)Event.GetVolume(); | |||
| if (Event.GetType()==MidiEvent::ON) | |||
| { | |||
| message[0]=STATUS_NOTE_ON+Device; | |||
| write(m_MidiWrFd,message,3); | |||
| //cerr<<"sending "<<message<<endl; | |||
| } | |||
| if (Event.GetType()==MidiEvent::OFF) | |||
| { | |||
| message[0]=STATUS_NOTE_OFF+Device; | |||
| write(m_MidiWrFd,message,3); | |||
| //cerr<<"sending "<<message<<endl; | |||
| } | |||
| } | |||
| ///////////////////////////////////////////////////////////////////////////////// | |||
| // Reader thread functions | |||
| // little helper to strip out the realtime and unused messages | |||
| void MidiDevice::ReadByte(unsigned char *c) | |||
| { | |||
| *c=MIDI_CLOCK; | |||
| do read(m_MidiFd,c,1); | |||
| while (*c>=STATUS_END); | |||
| } | |||
| // collect events deals with the byte level messages, and sorts | |||
| // and filters them into distinct messages we can handle easily | |||
| void MidiDevice::CollectEvents() | |||
| { | |||
| unsigned char buf[1]; | |||
| int count,n,nn; | |||
| bool MessageSent; | |||
| unsigned char data[3],last=0; | |||
| // constantly scan for relevent input, | |||
| // and write it to the pipe | |||
| // filters out unhandled messages, and attempts to build | |||
| // coherent messages to send to the midi handler | |||
| bool InSysex=false; | |||
| for(;;) | |||
| { | |||
| ReadByte(buf); | |||
| if (*buf>=STATUS_START) // we've got a status byte | |||
| { | |||
| if (*buf==SYSEX_TERMINATOR) InSysex=false; | |||
| // find out if it's an opcode | |||
| if(*buf>=STATUS_START && *buf<=STATUS_END) | |||
| { | |||
| InSysex=false; | |||
| last=data[0]=*buf; | |||
| if (data[0]>=STATUS_PROG_CHANGE && data[0]<STATUS_PITCH_WHEEL) | |||
| { | |||
| ReadByte(&data[1]); //one byte | |||
| data[2]=0; | |||
| } | |||
| else // get the next two bytes | |||
| { | |||
| ReadByte(&data[1]); | |||
| ReadByte(&data[2]); | |||
| } | |||
| AddEvent(data); | |||
| } | |||
| else // its a sysex or other message like active sense | |||
| { | |||
| if (*buf==SYSEX_START) InSysex=true; | |||
| cerr<<"Unhandled midi message: "; printf("%x\n",(int)*buf); | |||
| } | |||
| } | |||
| else // more data (running status) | |||
| { | |||
| if (!InSysex) | |||
| { | |||
| data[0]=last; | |||
| data[1]=*buf; | |||
| if (data[0]>=STATUS_PROG_CHANGE && data[0]<STATUS_PITCH_WHEEL) | |||
| { | |||
| data[2]=0; //one byte | |||
| } | |||
| else // get the next byte | |||
| { | |||
| ReadByte(&data[2]); | |||
| } | |||
| AddEvent(data); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| // addevent converts the midi bytecode into midi message objects and | |||
| // stacks them onto the event list to be picked up by the app | |||
| void MidiDevice::AddEvent(unsigned char* midi) | |||
| { | |||
| MidiEvent::type MessageType=MidiEvent::NONE; | |||
| int Volume=0,Note=0,EventDevice=0; | |||
| // note off | |||
| if (midi[0] >= STATUS_NOTE_OFF && midi[0] < STATUS_NOTE_ON) | |||
| { | |||
| MessageType=MidiEvent::OFF; | |||
| Note=midi[1]-MIDI_KEYOFFSET; | |||
| EventDevice=midi[0]-STATUS_NOTE_OFF; | |||
| } | |||
| // note on | |||
| else if (midi[0] >= STATUS_NOTE_ON && midi[0] < STATUS_AFTERTOUCH) | |||
| { | |||
| Volume = midi[2]; | |||
| // cope with Roland equipment, where note on's | |||
| // with zero velocity are sent as note offs. | |||
| if (Volume) MessageType=MidiEvent::ON; | |||
| else MessageType=MidiEvent::OFF; | |||
| Note=midi[1]-MIDI_KEYOFFSET; | |||
| EventDevice=midi[0]-STATUS_NOTE_ON; | |||
| } | |||
| // aftertouch | |||
| else if (midi[0] >= STATUS_AFTERTOUCH && midi[0] < STATUS_CONTROL_CHANGE) | |||
| { | |||
| MessageType=MidiEvent::AFTERTOUCH; | |||
| Note=midi[1]-MIDI_KEYOFFSET; | |||
| Volume=midi[2]; | |||
| EventDevice=midi[0]-STATUS_AFTERTOUCH; | |||
| } | |||
| // parameter | |||
| else if (midi[0] >= STATUS_CONTROL_CHANGE && midi[0] < STATUS_PROG_CHANGE) | |||
| { | |||
| MessageType=MidiEvent::PARAMETER; | |||
| Note=midi[1]; | |||
| Volume=midi[2]; | |||
| EventDevice=midi[0]-STATUS_CONTROL_CHANGE; | |||
| } | |||
| // channel pressure | |||
| else if (midi[0] >= STATUS_CHANNEL_PRESSURE && midi[0] < STATUS_PITCH_WHEEL) | |||
| { | |||
| MessageType=MidiEvent::CHANNELPRESSURE; | |||
| Volume=midi[1]; | |||
| EventDevice=midi[0]-STATUS_CHANNEL_PRESSURE; | |||
| } | |||
| // note pitchbend | |||
| else if (midi[0] >= STATUS_PITCH_WHEEL && midi[0] < STATUS_END) | |||
| { | |||
| MessageType=MidiEvent::PITCHBEND; | |||
| // should probably take the first byte into account too? | |||
| Volume=midi[2]; | |||
| EventDevice=midi[0]-STATUS_PITCH_WHEEL; | |||
| } | |||
| if (EventDevice<0 || EventDevice>15) | |||
| { | |||
| cerr<<"Error - Midi device "<<EventDevice<<" ??"<<endl; | |||
| return; | |||
| } | |||
| pthread_mutex_lock(m_Mutex); | |||
| m_EventVec[EventDevice].push(MidiEvent(MessageType,Note,Volume)); | |||
| pthread_mutex_unlock(m_Mutex); | |||
| } | |||
| /////////////////////////////////////////////////////////////////////////////// | |||
| // Parse the keyboard to generate midi messages | |||
| #ifdef KEYBOARD_SUPPORT | |||
| void MidiDevice::CheckKeyboard() | |||
| { | |||
| Fl::check(); | |||
| MidiEvent::type MessageType=MidiEvent::NONE; | |||
| int Volume=0,Note=0,EventDevice=0; | |||
| if (Fl::event_key(FL_F+1)) m_Oct=0; | |||
| if (Fl::event_key(FL_F+2)) m_Oct=1; | |||
| if (Fl::event_key(FL_F+3)) m_Oct=2; | |||
| if (Fl::event_key(FL_F+4)) m_Oct=3; | |||
| if (Fl::event_key(FL_F+5)) m_Oct=4; | |||
| if (Fl::event_key(FL_F+6)) m_Oct=5; | |||
| if (Fl::event_key(FL_F+7)) m_Oct=6; | |||
| if (Fl::event_key(FL_F+8)) m_Oct=7; | |||
| if (Fl::event_key(FL_F+9)) m_Oct=8; | |||
| if (Fl::event_key(FL_F+10)) m_Oct=9; | |||
| if (Fl::event_key(FL_F+11)) m_Oct=10; | |||
| int note=0; | |||
| char KeyChar=0; | |||
| bool KeyPressed=false; | |||
| for (int key=0; key<NKEYS; key++) | |||
| { | |||
| KeyChar=KEYMAP[key]; | |||
| // check if a key's been pressed | |||
| if (Fl::event_key(KeyChar)) | |||
| { | |||
| KeyPressed=true; | |||
| // check it was pressed last time | |||
| bool Found=false; | |||
| for (int n=0; n<m_Poly; n++) | |||
| { | |||
| if (m_KeyVoice[n]==KeyChar) | |||
| { | |||
| Found=true; | |||
| } | |||
| } | |||
| if (!Found) | |||
| { | |||
| Volume = 127; | |||
| MessageType=MidiEvent::ON; | |||
| Note=(m_Oct*12)+note; | |||
| // Move to the next voice | |||
| m_CurrentVoice++; | |||
| if (m_CurrentVoice>=m_Poly) | |||
| { | |||
| m_CurrentVoice=0; | |||
| } | |||
| // this should be the current voice we are using | |||
| m_KeyVoice[m_CurrentVoice]=KeyChar; | |||
| } | |||
| } | |||
| else // it's not pressed down | |||
| { | |||
| //see if the note was pressed down last time | |||
| for (int n=0; n<m_Poly; n++) | |||
| { | |||
| if (m_KeyVoice[n]==KeyChar) | |||
| { | |||
| MessageType=MidiEvent::OFF; | |||
| Note=(m_Oct*12)+note; | |||
| m_KeyVoice[n]=' '; | |||
| } | |||
| } | |||
| } | |||
| note++; | |||
| } | |||
| if (MessageType!=MidiEvent::NONE) | |||
| { | |||
| pthread_mutex_lock(m_Mutex); | |||
| m_EventVec[EventDevice].push(MidiEvent(MessageType,Note,Volume)); | |||
| pthread_mutex_unlock(m_Mutex); | |||
| } | |||
| } | |||
| #endif | |||
| @@ -0,0 +1,100 @@ | |||
| /* SpiralSynth | |||
| * Copyleft (C) 2000 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include <sys/types.h> | |||
| #include <stdio.h> | |||
| #include <fcntl.h> | |||
| #include <unistd.h> | |||
| #include <iostream> | |||
| #include <limits.h> | |||
| #include <queue> | |||
| #include <string> | |||
| #ifndef MIDI | |||
| #define MIDI | |||
| using namespace std; | |||
| #define KEYBOARD_SUPPORT | |||
| class MidiEvent | |||
| { | |||
| public: | |||
| enum type{NONE,ON,OFF,AFTERTOUCH,PARAMETER,CHANNELPRESSURE,PITCHBEND}; | |||
| MidiEvent() {m_Type=NONE;} | |||
| MidiEvent(type t, int note, float v) | |||
| {m_Type=t; m_Note=note; m_Volume=v;} | |||
| type GetType() const {return m_Type;} | |||
| float GetVolume() const {return m_Volume;} | |||
| int GetNote() const {return m_Note;} | |||
| private: | |||
| float m_Volume; | |||
| type m_Type; | |||
| int m_Note; | |||
| }; | |||
| class MidiDevice | |||
| { | |||
| public: | |||
| ~MidiDevice(); | |||
| static void SetDeviceName(string s) { m_DeviceName=s; } | |||
| static MidiDevice *Get() { if(!m_Singleton) m_Singleton=new MidiDevice; return m_Singleton; } | |||
| static void PackUpAndGoHome() { if(m_Singleton) delete m_Singleton; m_Singleton=NULL; } | |||
| static void *MidiReaderCallback(void *o) { ((MidiDevice*)o)->CollectEvents(); return NULL; } | |||
| MidiEvent GetEvent(int Device); | |||
| void SendEvent(int Device,const MidiEvent &Event); | |||
| void SetPoly(int s) { m_Poly=s; } | |||
| private: | |||
| MidiDevice(); | |||
| void Open(); | |||
| void Close(); | |||
| void CollectEvents(); | |||
| void AddEvent(unsigned char* midi); | |||
| void ReadByte(unsigned char *c); | |||
| int m_MidiFd; | |||
| int m_MidiWrFd; | |||
| static string m_DeviceName; | |||
| int m_Poly; | |||
| queue<MidiEvent> m_EventVec[16]; | |||
| static MidiDevice *m_Singleton; | |||
| pthread_t m_MidiReader; | |||
| pthread_mutex_t* m_Mutex; | |||
| #ifdef KEYBOARD_SUPPORT | |||
| void CheckKeyboard(); | |||
| char m_KeyVoice[256]; | |||
| int m_Oct; | |||
| int m_CurrentVoice; | |||
| #endif | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,19 @@ | |||
| /* SpiralSynth | |||
| * Copyleft (C) 2000 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "NoteTable.h" | |||
| @@ -0,0 +1,37 @@ | |||
| /* SpiralSynth | |||
| * Copyleft (C) 2000 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #ifndef NOTETABLE | |||
| #define NOTETABLE | |||
| static const float NoteTable [132]= | |||
| { | |||
| 8.176, 8.662,9.177,9.723,10.301,10.913, 11.562,12.250,12.978,13.750,14.568,15.434, | |||
| 16.352,17.324,18.354,19.445,20.602,21.827,23.125,24.500,25.957,27.500,29.135,30.868, | |||
| 32.703,34.648,36.708,38.891,41.203,43.654,46.249,48.999,51.913,55.000,58.270,61.735, | |||
| 65.406,69.296,73.416,77.782,82.407,87.307,92.499,97.999,103.826,110.000,116.541,123.471, | |||
| 130.813,138.591,146.832,155.563,164.814,174.614,184.997,195.998,207.652,220.000,233.082,246.942, | |||
| 261.626,277.183,293.665,311.127,329.628,349.228,369.994,391.995,415.305,440.000,466.164,493.883, | |||
| 523.251,554.365,587.330,622.254,659.255,698.456,739.989,783.991,830.609,880.000,932.328,987.767, | |||
| 1046.502,1108.731,1174.659,1244.508,1318.510,1396.913,1479.978,1567.982,1661.219,1760.000,1864.655,1975.533, | |||
| 2093.005,2217.461,2349.318,2489.016,2637.020,2793.826,2959.955,3135.963,3322.438,3520.000,3729.310,3951.066, | |||
| 4186.009,4434.922,4698.636,4978.032,5274.041,5587.652,5919.911,6271.927,6644.875,7040.000,7458.620,7902.133, | |||
| 8372.018,8869.844,9397.273,9956.063,10548.08,11175.30,11839.82,12543.85,0,0,0,0 | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,135 @@ | |||
| /* SpiralSound | |||
| * Copyleft (C) 2002 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include <dlfcn.h> | |||
| #include <stdio.h> | |||
| #include "PluginManager.h" | |||
| PluginManager *PluginManager::m_Singleton = NULL; | |||
| PluginManager::PluginManager() | |||
| { | |||
| } | |||
| PluginManager::~PluginManager() | |||
| { | |||
| UnloadAll(); | |||
| } | |||
| PluginID PluginManager::LoadPlugin(const char *PluginName) | |||
| { | |||
| // Make a new plugin | |||
| HostsideInfo *NewPlugin = new HostsideInfo; | |||
| NewPlugin->Handle=NULL; | |||
| NewPlugin->ID=PluginError; | |||
| // Attempt to open the plugin | |||
| NewPlugin->Handle = dlopen (PluginName, RTLD_NOW); | |||
| if (NewPlugin->Handle==NULL) | |||
| { | |||
| SpiralInfo::Alert("Error loading plugin: \n"+string(dlerror())); | |||
| return PluginError; | |||
| } | |||
| // Link the neccesary functions | |||
| NewPlugin->CreateInstance = (SpiralPlugin*(*)()) dlsym(NewPlugin->Handle, "CreateInstance"); | |||
| NewPlugin->GetIcon = (char **(*)()) dlsym(NewPlugin->Handle, "GetIcon"); | |||
| NewPlugin->GetID = (int(*)()) dlsym(NewPlugin->Handle, "GetID"); | |||
| char *error; | |||
| if ((error = dlerror()) != NULL) | |||
| { | |||
| SpiralInfo::Alert("Error linking to plugin: \n"+string(error)); | |||
| return PluginError; | |||
| } | |||
| // We've succesfully open and linked the | |||
| // plugin, so add it to the vector. | |||
| int ID; | |||
| ID = NewPlugin->GetID(); | |||
| NewPlugin->ID = ID; | |||
| m_PluginVec.push_back(NewPlugin); | |||
| return ID; | |||
| } | |||
| void PluginManager::UnLoadPlugin(PluginID ID) | |||
| { | |||
| if (IsValid(ID)) | |||
| { | |||
| dlclose(GetPlugin(ID)->Handle); | |||
| char *error; | |||
| if ((error = dlerror()) != NULL) | |||
| { | |||
| SpiralInfo::Alert("Error unlinking plugin: \n"+string(error)); | |||
| } | |||
| } | |||
| } | |||
| void PluginManager::UnloadAll() | |||
| { | |||
| for (vector<HostsideInfo*>::iterator i=m_PluginVec.begin(); | |||
| i!=m_PluginVec.end(); i++) | |||
| { | |||
| dlclose((*i)->Handle); | |||
| char *error; | |||
| if ((error = dlerror()) != NULL) | |||
| { | |||
| SpiralInfo::Alert("Error unlinking plugin: \n"+string(error)); | |||
| } | |||
| } | |||
| } | |||
| const HostsideInfo *PluginManager::GetPlugin(PluginID ID) | |||
| { | |||
| return GetPlugin_i(ID); | |||
| } | |||
| HostsideInfo *PluginManager::GetPlugin_i(PluginID ID) | |||
| { | |||
| HostsideInfo *ret = NULL; | |||
| for (vector<HostsideInfo*>::iterator i=m_PluginVec.begin(); | |||
| i!=m_PluginVec.end(); i++) | |||
| { | |||
| if ((*i)->ID==ID) | |||
| { | |||
| ret = *i; | |||
| break; | |||
| } | |||
| } | |||
| if (!ret) | |||
| { | |||
| char t[256]; | |||
| sprintf(t,"%d",ID); | |||
| SpiralInfo::Alert("Plugin "+string(t)+" not found."); | |||
| } | |||
| return ret; | |||
| } | |||
| bool PluginManager::IsValid(PluginID ID) | |||
| { | |||
| const HostsideInfo *t = GetPlugin(ID); | |||
| return (t && t->Handle!=NULL); | |||
| } | |||
| @@ -0,0 +1,60 @@ | |||
| /* SpiralSound | |||
| * Copyleft (C) 2002 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include <FL/Fl_Double_Window.h> | |||
| #include <FL/Fl_Pixmap.h> | |||
| #include <iostream> | |||
| #include <vector> | |||
| #include "Plugins/SpiralPlugin.h" | |||
| struct HostsideInfo | |||
| { | |||
| void* Handle; | |||
| int ID; | |||
| char **(*GetIcon)(void); | |||
| SpiralPlugin *(*CreateInstance)(void); | |||
| int (*GetID)(void); | |||
| }; | |||
| ////////////////////////////////////////////////////////// | |||
| typedef int PluginID; | |||
| #define PluginError -1 | |||
| class PluginManager | |||
| { | |||
| public: | |||
| static PluginManager *Get() { if(!m_Singleton) m_Singleton=new PluginManager; return m_Singleton; } | |||
| static void PackUpAndGoHome() { if(m_Singleton) delete m_Singleton; } | |||
| PluginID LoadPlugin(const char *PluginName); | |||
| void UnLoadPlugin(PluginID ID); | |||
| void UnloadAll(); | |||
| const HostsideInfo* GetPlugin(PluginID ID); | |||
| bool IsValid(PluginID ID); | |||
| int GetIdByName(string Name); | |||
| private: | |||
| PluginManager(); | |||
| ~PluginManager(); | |||
| HostsideInfo *GetPlugin_i(PluginID ID); | |||
| vector<HostsideInfo*> m_PluginVec; | |||
| static PluginManager *m_Singleton; | |||
| }; | |||
| @@ -0,0 +1,105 @@ | |||
| /* SpiralSound | |||
| * Copyleft (C) 2001 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include <math.h> | |||
| #include "AmpPlugin.h" | |||
| #include "AmpPluginGUI.h" | |||
| #include <FL/Fl_Button.h> | |||
| #include "SpiralIcon.xpm" | |||
| #define PI 3.141592654 | |||
| extern "C" { | |||
| SpiralPlugin* CreateInstance() | |||
| { | |||
| return new AmpPlugin; | |||
| } | |||
| char** GetIcon() | |||
| { | |||
| return SpiralIcon_xpm; | |||
| } | |||
| int GetID() | |||
| { | |||
| return 0x0009; | |||
| } | |||
| } | |||
| /////////////////////////////////////////////////////// | |||
| AmpPlugin::AmpPlugin() : | |||
| m_Amp(1.0f), | |||
| m_DC(0.0f) | |||
| { | |||
| m_PluginInfo.Name="Amp"; | |||
| m_PluginInfo.Width=120; | |||
| m_PluginInfo.Height=110; | |||
| m_PluginInfo.NumInputs=3; | |||
| m_PluginInfo.NumOutputs=1; | |||
| m_PluginInfo.PortTips.push_back("Input"); | |||
| m_PluginInfo.PortTips.push_back("Amp CV"); | |||
| m_PluginInfo.PortTips.push_back("DC Offset CV"); | |||
| m_PluginInfo.PortTips.push_back("Output"); | |||
| } | |||
| AmpPlugin::~AmpPlugin() | |||
| { | |||
| } | |||
| PluginInfo &AmpPlugin::Initialise(const HostInfo *Host) | |||
| { | |||
| return SpiralPlugin::Initialise(Host); | |||
| } | |||
| SpiralGUIType *AmpPlugin::CreateGUI() | |||
| { | |||
| m_GUI = new AmpPluginGUI(m_PluginInfo.Width, | |||
| m_PluginInfo.Height, | |||
| this,m_HostInfo); | |||
| m_GUI->hide(); | |||
| return m_GUI; | |||
| } | |||
| void AmpPlugin::Execute() | |||
| { | |||
| float in; | |||
| for (int n=0; n<m_HostInfo->BUFSIZE; n++) | |||
| { | |||
| in = GetInput(0,n); | |||
| in *= m_Amp+GetInput(1,n); | |||
| in += (-m_DC)+GetInput(2,n); | |||
| SetOutput(0,n,in); | |||
| } | |||
| } | |||
| void AmpPlugin::Randomise() | |||
| { | |||
| } | |||
| void AmpPlugin::StreamOut(ostream &s) | |||
| { | |||
| s<<m_Version<<" "<<m_Amp<<" "<<m_DC<<" "; | |||
| } | |||
| void AmpPlugin::StreamIn(istream &s) | |||
| { | |||
| int version; | |||
| s>>version; | |||
| s>>m_Amp>>m_DC; | |||
| } | |||
| @@ -0,0 +1,57 @@ | |||
| /* SpiralSound | |||
| * Copyleft (C) 2001 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "../SpiralPlugin.h" | |||
| #include <FL/Fl.h> | |||
| #ifndef AMPPLUGIN | |||
| #define AMPPLUGIN | |||
| class AmpPlugin : public SpiralPlugin | |||
| { | |||
| public: | |||
| AmpPlugin(); | |||
| virtual ~AmpPlugin(); | |||
| virtual PluginInfo &Initialise(const HostInfo *Host); | |||
| virtual SpiralGUIType *CreateGUI(); | |||
| virtual void Execute(); | |||
| virtual void StreamOut(ostream &s); | |||
| virtual void StreamIn(istream &s); | |||
| // has to be defined in the plugin | |||
| virtual void UpdateGUI() { Fl::check(); } | |||
| void SetAmp(float s) { m_Amp=s; } | |||
| void SetDC(float s) { m_DC=s; } | |||
| float GetAmp() { return m_Amp; } | |||
| float GetDC() { return m_DC; } | |||
| void Randomise(); | |||
| private: | |||
| float m_Amp; | |||
| float m_DC; | |||
| friend istream &operator>>(istream &s, AmpPlugin &o); | |||
| friend ostream &operator<<(ostream &s, AmpPlugin &o); | |||
| }; | |||
| istream &operator>>(istream &s, AmpPlugin &o); | |||
| ostream &operator<<(ostream &s, AmpPlugin &o); | |||
| #endif | |||
| @@ -0,0 +1,17 @@ | |||
| HEADERS = ../SpiralPlugin.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../../Sample.h \ | |||
| AmpPlugin.h \ | |||
| AmpPluginGUI.h | |||
| SOURCES = ../SpiralPlugin.C \ | |||
| ../SpiralPluginGUI.C \ | |||
| ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_DragBar.cxx \ | |||
| ../../Sample.C \ | |||
| AmpPlugin.C \ | |||
| AmpPluginGUI.C | |||
| TARGET = AmpPlugin.so | |||
| @@ -0,0 +1,136 @@ | |||
| /* SpiralPlugin | |||
| * Copyleft (C) 2000 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "AmpPluginGUI.h" | |||
| #include <FL/fl_draw.h> | |||
| #include <FL/fl_draw.H> | |||
| static const int GUI_COLOUR = 179; | |||
| static const int GUIBG_COLOUR = 144; | |||
| static const int GUIBG2_COLOUR = 145; | |||
| //////////////////////////////////////////// | |||
| AmpPluginGUI::AmpPluginGUI(int w, int h,AmpPlugin *o,const HostInfo *Info) : | |||
| SpiralPluginGUI(w,h,o) | |||
| { | |||
| m_Plugin=o; | |||
| m_Amp = new Fl_Slider(15, 20, 20, 70, "Amp"); | |||
| m_Amp->type(4); | |||
| m_Amp->selection_color(GUI_COLOUR); | |||
| m_Amp->labelsize(10); | |||
| m_Amp->maximum(4); | |||
| m_Amp->step(0.0001); | |||
| m_Amp->value(2); | |||
| m_Amp->callback((Fl_Callback*)cb_Amp); | |||
| m_DC = new Fl_Slider(70, 20, 20, 70, "DC Offset"); | |||
| m_DC->type(4); | |||
| m_DC->selection_color(GUI_COLOUR); | |||
| m_DC->labelsize(10); | |||
| m_DC->maximum(4); | |||
| m_DC->step(0.0001); | |||
| m_DC->value(2); | |||
| m_DC->callback((Fl_Callback*)cb_DC); | |||
| m_pop = new Fl_Button(1,h-14, 13, 13, "@>"); | |||
| m_pop->type(1); | |||
| m_pop->box(FL_FLAT_BOX); | |||
| m_pop->down_box(FL_FLAT_BOX); | |||
| m_pop->labeltype(FL_SYMBOL_LABEL); | |||
| m_pop->labelsize(10); | |||
| m_pop->labelcolor(25); | |||
| m_pop->callback((Fl_Callback*)cb_pop); | |||
| m_out_gain = new Fl_Output(25,h+5,36, 15, "Gain"); | |||
| m_out_gain->box(FL_ENGRAVED_BOX); | |||
| m_out_gain->color(16); | |||
| m_out_gain->labelsize(10); | |||
| m_out_gain->textsize(10); | |||
| m_out_gain->hide(); | |||
| m_out_gain->set_output(); | |||
| m_out_DC = new Fl_Output(82,h+5,36, 15, "DC"); | |||
| m_out_DC->box(FL_ENGRAVED_BOX); | |||
| m_out_DC->color(16); | |||
| m_out_DC->labelsize(10); | |||
| m_out_DC->textsize(10); | |||
| m_out_DC->hide(); | |||
| m_out_DC->set_output(); | |||
| end(); | |||
| } | |||
| extern "C" int sprintf(char *,const char *,...); | |||
| void AmpPluginGUI::UpdateValues() | |||
| { | |||
| m_Amp->value(2.0f-m_Plugin->GetAmp()); | |||
| m_DC->value(2.0f-m_Plugin->GetDC()); | |||
| char str[10]; | |||
| sprintf(str,"%4.2f",m_Plugin->GetAmp()); | |||
| m_out_gain->value(str); | |||
| sprintf(str,"%4.2f",m_Plugin->GetDC()); | |||
| m_out_DC->value(str); | |||
| } | |||
| inline void AmpPluginGUI::cb_Amp_i(Fl_Slider* o, void* v) | |||
| { | |||
| char str[10]; | |||
| float value=2.0f-o->value(); | |||
| m_Plugin->SetAmp(value); | |||
| sprintf(str,"%4.2f",value); | |||
| m_out_gain->value(str); | |||
| } | |||
| void AmpPluginGUI::cb_Amp(Fl_Slider* o, void* v) | |||
| { ((AmpPluginGUI*)(o->parent()))->cb_Amp_i(o,v); } | |||
| inline void AmpPluginGUI::cb_DC_i(Fl_Slider* o, void* v) | |||
| { | |||
| char str[10]; | |||
| float value=2.0f-o->value(); | |||
| m_Plugin->SetDC(value); | |||
| sprintf(str,"%4.2f",value); | |||
| m_out_DC->value(str); | |||
| } | |||
| void AmpPluginGUI::cb_DC(Fl_Slider* o, void* v) | |||
| { ((AmpPluginGUI*)(o->parent()))->cb_DC_i(o,v); } | |||
| inline void AmpPluginGUI::cb_pop_i(Fl_Button *o, void*) { | |||
| if (o->value()) | |||
| { | |||
| o->label("@2>"); | |||
| m_out_gain->show(); | |||
| m_out_DC->show(); | |||
| redraw(); | |||
| } | |||
| else | |||
| { | |||
| o->label("@>"); | |||
| m_out_gain->hide(); | |||
| m_out_DC->hide(); | |||
| redraw(); | |||
| parent()->redraw(); | |||
| } | |||
| } | |||
| void AmpPluginGUI::cb_pop(Fl_Button* o, void* v) { | |||
| ((AmpPluginGUI*)(o->parent()))->cb_pop_i(o,v); | |||
| } | |||
| @@ -0,0 +1,62 @@ | |||
| /* SpiralPlugin | |||
| * Copyleft (C) 2000 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include <FL/Fl.H> | |||
| #include <FL/Fl_Window.H> | |||
| #include <FL/Fl_Group.H> | |||
| #include <FL/Fl_Slider.H> | |||
| #include <FL/Fl_Output.H> | |||
| #include <FL/Fl_Box.H> | |||
| #include "AmpPlugin.h" | |||
| #include "../SpiralPluginGUI.h" | |||
| #ifndef AmpGUI | |||
| #define AmpGUI | |||
| class AmpPluginGUI : public SpiralPluginGUI | |||
| { | |||
| public: | |||
| AmpPluginGUI(int w, int h, AmpPlugin *o,const HostInfo *Info); | |||
| virtual void UpdateValues(); | |||
| virtual SpiralPlugin* GetPlugin() { return m_Plugin; } | |||
| AmpPlugin *m_Plugin; | |||
| private: | |||
| Fl_Group *GUIFilterGroup; | |||
| Fl_Slider *m_Amp; | |||
| Fl_Slider *m_DC; | |||
| Fl_Button *m_pop; | |||
| Fl_Output *m_out_gain; | |||
| Fl_Output *m_out_DC; | |||
| //// Callbacks //// | |||
| inline void cb_Amp_i(Fl_Slider* o, void* v); | |||
| static void cb_Amp(Fl_Slider*, void*); | |||
| inline void cb_DC_i(Fl_Slider* o, void* v); | |||
| static void cb_DC(Fl_Slider* o, void* v); | |||
| inline void cb_pop_i(Fl_Button* o, void*); | |||
| static void cb_pop(Fl_Button* o, void*); | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,164 @@ | |||
| ############################################################################# | |||
| # Makefile for building AmpPlugin.so | |||
| # Generated by tmake at 22:13, 2001/09/17 | |||
| # Project: AmpPlugin | |||
| # Template: app | |||
| ############################################################################# | |||
| ####### Compiler, tools and options | |||
| CC = gcc | |||
| CXX = g++ | |||
| CFLAGS = @CFLAGS@ | |||
| CXXFLAGS= @CXXFLAGS@ | |||
| INCPATH = -I/usr/X11R6/include | |||
| LINK = g++ -shared | |||
| LFLAGS = | |||
| LIBS = -L/usr/X11R6/lib -lfltk -lGL -lXext -lX11 -lm -ldl | |||
| MOC = moc | |||
| UIC = | |||
| TAR = tar -cf | |||
| GZIP = gzip -9f | |||
| INSTALL = @INSTALL@ | |||
| ###### Autoconf variables | |||
| prefix = @prefix@ | |||
| exec_prefix = @exec_prefix@ | |||
| bindir = @bindir@ | |||
| sbindir = @sbindir@ | |||
| libexecdir = @libexecdir@ | |||
| datadir = @datadir@ | |||
| sysconfdir = @sysconfdir@ | |||
| sharedstatedir = @sharedstatedir@ | |||
| localstatedir = @localstatedir@ | |||
| libdir = @libdir@ | |||
| infodir = @infodir@ | |||
| mandir = @mandir@ | |||
| ####### Files | |||
| HEADERS = ../SpiralPlugin.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../../Sample.h \ | |||
| AmpPlugin.h \ | |||
| AmpPluginGUI.h | |||
| SOURCES = ../SpiralPlugin.C \ | |||
| ../SpiralPluginGUI.C \ | |||
| ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_DragBar.cxx \ | |||
| ../../Sample.C \ | |||
| AmpPlugin.C \ | |||
| AmpPluginGUI.C | |||
| OBJECTS = ../SpiralPlugin.o \ | |||
| ../SpiralPluginGUI.o \ | |||
| ../Widgets/Fl_Knob.o \ | |||
| ../Widgets/Fl_DragBar.o \ | |||
| ../../Sample.o \ | |||
| AmpPlugin.o \ | |||
| AmpPluginGUI.o | |||
| INTERFACES = | |||
| UICDECLS = | |||
| UICIMPLS = | |||
| SRCMOC = | |||
| OBJMOC = | |||
| DIST = | |||
| TARGET = AmpPlugin.so | |||
| ####### Implicit rules | |||
| .SUFFIXES: .cpp .cxx .cc .C .c | |||
| .cpp.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .cxx.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .cc.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .C.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .c.o: | |||
| $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< | |||
| ####### Build rules | |||
| all: $(TARGET) | |||
| $(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) | |||
| $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS) | |||
| moc: $(SRCMOC) | |||
| tmake: | |||
| tmake AmpPlugin.pro | |||
| dist: | |||
| $(TAR) AmpPlugin.tar AmpPlugin.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST) | |||
| $(GZIP) AmpPlugin.tar | |||
| clean: | |||
| -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET) | |||
| -rm -f *~ core | |||
| install: | |||
| $(INSTALL) $(TARGET) $(libdir)/SpiralPlugins | |||
| ####### Sub-libraries | |||
| ###### Combined headers | |||
| ####### Compile | |||
| ../SpiralPlugin.o: ../SpiralPlugin.C \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h | |||
| ../SpiralPluginGUI.o: ../SpiralPluginGUI.C \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h | |||
| ../Widgets/Fl_Knob.o: ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_Knob.H | |||
| ../Widgets/Fl_DragBar.o: ../Widgets/Fl_DragBar.cxx \ | |||
| ../Widgets/Fl_DragBar.H | |||
| ../../Sample.o: ../../Sample.C \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h | |||
| AmpPlugin.o: AmpPlugin.C \ | |||
| AmpPlugin.h \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h \ | |||
| ../../Sample.h \ | |||
| AmpPluginGUI.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| SpiralIcon.xpm | |||
| AmpPluginGUI.o: AmpPluginGUI.C \ | |||
| AmpPluginGUI.h \ | |||
| AmpPlugin.h \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h \ | |||
| ../../Sample.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H | |||
| @@ -0,0 +1,347 @@ | |||
| /* XPM */ | |||
| static char * SpiralIcon_xpm[] = { | |||
| "36 36 308 2", | |||
| " c None", | |||
| ". c #8B889B", | |||
| "+ c #9C99AA", | |||
| "@ c #ADAAB9", | |||
| "# c #837F94", | |||
| "$ c #7D7990", | |||
| "% c #9995A7", | |||
| "& c #67627C", | |||
| "* c #CDCBD4", | |||
| "= c #FCFCFC", | |||
| "- c #D1D0D8", | |||
| "; c #FFFFFF", | |||
| "> c #F1F1F3", | |||
| ", c #848095", | |||
| "' c #2A2248", | |||
| ") c #CFCED6", | |||
| "! c #68637D", | |||
| "~ c #ABA8B6", | |||
| "{ c #D5D3DB", | |||
| "] c #9490A2", | |||
| "^ c #C4C4C4", | |||
| "/ c #1D1C1D", | |||
| "( c #313134", | |||
| "_ c #EEEFEE", | |||
| ": c #FBFBFB", | |||
| "< c #EFEFEF", | |||
| "[ c #7B768D", | |||
| "} c #464060", | |||
| "| c #DEDEE1", | |||
| "1 c #CBCACC", | |||
| "2 c #EEEEF1", | |||
| "3 c #79758C", | |||
| "4 c #FBFBFC", | |||
| "5 c #A2A2A2", | |||
| "6 c #000000", | |||
| "7 c #F5F6F5", | |||
| "8 c #747474", | |||
| "9 c #2A2A2B", | |||
| "0 c #403958", | |||
| "a c #7D788F", | |||
| "b c #C0BEC8", | |||
| "c c #BCBAC6", | |||
| "d c #BCBAC5", | |||
| "e c #625C79", | |||
| "f c #2B2932", | |||
| "g c #191919", | |||
| "h c #CCCCCC", | |||
| "i c #807B91", | |||
| "j c #3B3556", | |||
| "k c #F2F2F4", | |||
| "l c #929292", | |||
| "m c #0E0E0E", | |||
| "n c #BFBFBF", | |||
| "o c #111111", | |||
| "p c #100E15", | |||
| "q c #868689", | |||
| "r c #FEFDFE", | |||
| "s c #D9D7DE", | |||
| "t c #9C98AA", | |||
| "u c #FDFCFD", | |||
| "v c #DDDDDD", | |||
| "w c #575755", | |||
| "x c #5E5E5E", | |||
| "y c #C4C2CD", | |||
| "z c #423C5C", | |||
| "A c #F0F0F2", | |||
| "B c #939393", | |||
| "C c #555555", | |||
| "D c #4A4A4A", | |||
| "E c #010101", | |||
| "F c #282828", | |||
| "G c #C2C2C2", | |||
| "H c #DBDAE0", | |||
| "I c #615C78", | |||
| "J c #F6F6F7", | |||
| "K c #DADADA", | |||
| "L c #545454", | |||
| "M c #0F0F0F", | |||
| "N c #B8B8B8", | |||
| "O c #48445C", | |||
| "P c #2B2B2C", | |||
| "Q c #181900", | |||
| "R c #D3D3D3", | |||
| "S c #C1BEC9", | |||
| "T c #474060", | |||
| "U c #31294D", | |||
| "V c #716C85", | |||
| "W c #65607A", | |||
| "X c #625D78", | |||
| "Y c #D5D4DB", | |||
| "Z c #F7F7F7", | |||
| "` c #8B8B8B", | |||
| " . c #161616", | |||
| ".. c #0C0C0C", | |||
| "+. c #161800", | |||
| "@. c #1A1B00", | |||
| "#. c #060600", | |||
| "$. c #191A00", | |||
| "%. c #393643", | |||
| "&. c #47415F", | |||
| "*. c #9692A4", | |||
| "=. c #D9D8DE", | |||
| "-. c #F7F7F8", | |||
| ";. c #918DA0", | |||
| ">. c #B8B5C1", | |||
| ",. c #D1D1D1", | |||
| "'. c #212121", | |||
| "). c #2D2F00", | |||
| "!. c #111200", | |||
| "~. c #0B0C00", | |||
| "{. c #0F0F00", | |||
| "]. c #090A00", | |||
| "^. c #040400", | |||
| "/. c #727175", | |||
| "(. c #FEFEFF", | |||
| "_. c #9D99AA", | |||
| ":. c #DBD9E0", | |||
| "<. c #E9E9E9", | |||
| "[. c #CBCBCB", | |||
| "}. c #E0E0E0", | |||
| "|. c #6C6C6C", | |||
| "1. c #726C00", | |||
| "2. c #FEF100", | |||
| "3. c #FCEF00", | |||
| "4. c #322F00", | |||
| "5. c #515151", | |||
| "6. c #A6A6A7", | |||
| "7. c #827E93", | |||
| "8. c #615C77", | |||
| "9. c #EAEAED", | |||
| "0. c #DFDFE1", | |||
| "a. c #302D00", | |||
| "b. c #DCD000", | |||
| "c. c #FFF200", | |||
| "d. c #1E1C00", | |||
| "e. c #1E1D24", | |||
| "f. c #9894A7", | |||
| "g. c #B1AEBB", | |||
| "h. c #69686F", | |||
| "i. c #000001", | |||
| "j. c #EFE200", | |||
| "k. c #F6E900", | |||
| "l. c #C6BB00", | |||
| "m. c #060500", | |||
| "n. c #615C76", | |||
| "o. c #5F5A75", | |||
| "p. c #413E4D", | |||
| "q. c #020203", | |||
| "r. c #7E7700", | |||
| "s. c #E5D900", | |||
| "t. c #F8EB00", | |||
| "u. c #1A1A1C", | |||
| "v. c #C3C1CB", | |||
| "w. c #9D9D9D", | |||
| "x. c #202020", | |||
| "y. c #383838", | |||
| "z. c #4C4C4C", | |||
| "A. c #B1A800", | |||
| "B. c #A9A000", | |||
| "C. c #111112", | |||
| "D. c #C9C7D0", | |||
| "E. c #F1F1F1", | |||
| "F. c #F8F8F8", | |||
| "G. c #232323", | |||
| "H. c #191700", | |||
| "I. c #827B00", | |||
| "J. c #ACA300", | |||
| "K. c #F2E500", | |||
| "L. c #050408", | |||
| "M. c #AEACB9", | |||
| "N. c #FEFEFE", | |||
| "O. c #1D1D1D", | |||
| "P. c #444000", | |||
| "Q. c #F1E400", | |||
| "R. c #B7B5C1", | |||
| "S. c #9390A2", | |||
| "T. c #BBBBBB", | |||
| "U. c #414141", | |||
| "V. c #030303", | |||
| "W. c #948C00", | |||
| "X. c #756F00", | |||
| "Y. c #28272A", | |||
| "Z. c #F4F4F6", | |||
| "`. c #605B76", | |||
| " + c #736E86", | |||
| ".+ c #D8D8D8", | |||
| "++ c #727272", | |||
| "@+ c #101010", | |||
| "#+ c #645E00", | |||
| "$+ c #F5E800", | |||
| "%+ c #848486", | |||
| "&+ c #CCCBD3", | |||
| "*+ c #747087", | |||
| "=+ c #6D6881", | |||
| "-+ c #1C1C1C", | |||
| ";+ c #242424", | |||
| ">+ c #656566", | |||
| ",+ c #F6F6F6", | |||
| "'+ c #E8E6EA", | |||
| ")+ c #706B84", | |||
| "!+ c #E3E1E6", | |||
| "~+ c #474746", | |||
| "{+ c #151515", | |||
| "]+ c #C8C8C8", | |||
| "^+ c #AEAEAE", | |||
| "/+ c #080808", | |||
| "(+ c #010100", | |||
| "_+ c #373639", | |||
| ":+ c #FDFCFE", | |||
| "<+ c #ABA8B7", | |||
| "[+ c #F1F0F3", | |||
| "}+ c #6D6980", | |||
| "|+ c #0A090E", | |||
| "1+ c #95929E", | |||
| "2+ c #0A0810", | |||
| "3+ c #0D0D0D", | |||
| "4+ c #050505", | |||
| "5+ c #5B5A5C", | |||
| "6+ c #F7F6F7", | |||
| "7+ c #F4F3F5", | |||
| "8+ c #908C9F", | |||
| "9+ c #C8C6D0", | |||
| "0+ c #837E96", | |||
| "a+ c #86868A", | |||
| "b+ c #070608", | |||
| "c+ c #ECEBEE", | |||
| "d+ c #5B5571", | |||
| "e+ c #646078", | |||
| "f+ c #AFAFB0", | |||
| "g+ c #454545", | |||
| "h+ c #363636", | |||
| "i+ c #7A7A7A", | |||
| "j+ c #C8C8C9", | |||
| "k+ c #212025", | |||
| "l+ c #060607", | |||
| "m+ c #969699", | |||
| "n+ c #FAFAFA", | |||
| "o+ c #F8F8F9", | |||
| "p+ c #A29EAF", | |||
| "q+ c #F7F6F8", | |||
| "r+ c #F0F0F1", | |||
| "s+ c #B8B7B9", | |||
| "t+ c #E4E4E4", | |||
| "u+ c #FDFDFD", | |||
| "v+ c #A5A2B2", | |||
| "w+ c #3B3456", | |||
| "x+ c #A8A5B4", | |||
| "y+ c #525252", | |||
| "z+ c #848387", | |||
| "A+ c #CDCDCD", | |||
| "B+ c #8D899C", | |||
| "C+ c #494262", | |||
| "D+ c #68627C", | |||
| "E+ c #40395A", | |||
| "F+ c #ECECEC", | |||
| "G+ c #020202", | |||
| "H+ c #B4B5B5", | |||
| "I+ c #0B0B0B", | |||
| "J+ c #313232", | |||
| "K+ c #E3E3E3", | |||
| "L+ c #B1AEBC", | |||
| "M+ c #BDBBC6", | |||
| "N+ c #3C3556", | |||
| "O+ c #898599", | |||
| "P+ c #EDEDED", | |||
| "Q+ c #39393A", | |||
| "R+ c #040404", | |||
| "S+ c #333333", | |||
| "T+ c #F5F5F5", | |||
| "U+ c #2B2B2B", | |||
| "V+ c #2D2A3D", | |||
| "W+ c #B6B4C1", | |||
| "X+ c #F5F5F6", | |||
| "Y+ c #605A76", | |||
| "Z+ c #DAD8DF", | |||
| "`+ c #F5F4F6", | |||
| " @ c #615B76", | |||
| ".@ c #524D6A", | |||
| "+@ c #E4E3E8", | |||
| "@@ c #D5D5D5", | |||
| "#@ c #1B1B1B", | |||
| "$@ c #303030", | |||
| "%@ c #AAABAB", | |||
| "&@ c #585464", | |||
| "*@ c #B0AEBB", | |||
| "=@ c #A29FAF", | |||
| "-@ c #E9E8E9", | |||
| ";@ c #787779", | |||
| ">@ c #0F0E15", | |||
| ",@ c #2D2D2E", | |||
| "'@ c #595959", | |||
| ")@ c #FAFAFB", | |||
| "!@ c #807B92", | |||
| "~@ c #B0ADBB", | |||
| "{@ c #E8E7EB", | |||
| "]@ c #3A3258", | |||
| "^@ c #E6E5EA", | |||
| "/@ c #DFDEE3", | |||
| "(@ c #443E5E", | |||
| "_@ c #BAB8C4", | |||
| ":@ c #C1BFCA", | |||
| "<@ c #E0E0E5", | |||
| "[@ c #D0CED6", | |||
| "}@ c #362F52", | |||
| "|@ c #CECCD5", | |||
| "1@ c #413A5B", | |||
| "2@ c #6A657F", | |||
| "3@ c #9793A6", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " . + @ # $ % ", | |||
| " & * = * - ; > , ' ; ; ; ) ! ", | |||
| " ~ ; ; { ] ; ^ / ( _ ; : < [ ", | |||
| " } | 1 2 3 4 5 6 6 7 : 8 9 0 a b ", | |||
| " c : d e f g h i j k l 6 m ; n o 6 p q r s ", | |||
| " t u ; v w 6 6 x y z A B 6 C ; D E 6 F G ; H ", | |||
| " I J ; ; K L 6 6 M N O P E 6 6 6 Q Q M R S T U V W ", | |||
| " X Y ; ; ; ; Z ` .6 ..6 6 6 6 6 +.@.#.$.%.&.*.=.-.;. ", | |||
| " >.; ; ; ; ; ; = ,.'.).!.~.{.].6 ^.6 6 6 E /.(.; ; _. ", | |||
| " :.; ; <.R h [.}.|.6 6 6 6 6 6 6 6 1.2.3.4.E 5.6.4 7. ", | |||
| " 8.9.; 0...6 6 6 6 6 6 6 6 6 6 a.b.2.c.3.d.6 6 6 e.f. ", | |||
| " V @ g.h.i.6 6 6 6 6 6 6 6 a.j.c.k.l.m.6 6 6 6 6 ", | |||
| " n.o.p.6 q.6 6 6 6 r.s.3.c.t.r.6 6 6 6 6 6 6 6 u. ", | |||
| " v.; ; w.x.x.y.z.x.6 A.2.2.k.B.6 6 6 6 6 6 6 6 6 C. ", | |||
| " D.; ; E.F.; ; ; G.6 H.I.J.K.2.k.r.6 6 6 6 6 6 6 L. ", | |||
| " M.; ; ; ; N.; ; O.6 6 6 6 6 P.Q.c.l.6 6 6 6 6 6 6 R., ", | |||
| " S.; ; N.; : T.U.V.6 6 6 6 6 6 6 W.2.t.X.6 6 6 6 Y.N.Z.`. ", | |||
| " +; ; ; .+++@+6 6 6 6 6 6 6 6 6 6 #+j.$+6 6 6 Q %+; ; &+*+ ", | |||
| " =+J ; : -+6 6 6 6 ;+..6 6 6 6 6 6 6 6 6 6 6 6 6 >+,+; ; '+)+ ", | |||
| " !+; ; ~+6 E 6 {+]+^+/+6 6 6 6 6 6 6 6 (+6 6 6 6 _+:+; ; > )+ ", | |||
| " <+; [+}+|+6 6 ^+N.; 1+2+6 6 6 6 6 6 6 6 3+4+6 6 6 5+6+; ; 7+8+ ", | |||
| " )+9+! 0+a+b+x ; ; c+d+e+f+l g+6 6 6 h+i+j+k+6 6 6 l+m+n+; ; o+@ ", | |||
| " p+q+r+s+t+u+; v+w+x+; ,+g+6 6 E y+; ; z+6 6 E 6 o A+; ; = B+ ", | |||
| " C+> ; ; ; ; ; ; D+E+; ; F+y.6 6 G+D ; ; H+I+6 6 6 J+K+; ; L+ ", | |||
| " > ; ; ; ; M+N+O+; ; P+Q+6 6 R+S+; ; T+U+6 6 V+W+; X+3 ", | |||
| " Y+Z+= ; `+ @.@+@; ; @@#@6 6 G+$@; ; ; %@y+&@ ", | |||
| " *@4 =@ X ; ; ; -@;@$@>@,@'@; ; ; N.)@!@ ", | |||
| " ~@; ; ; ; ; {@]@^@; ; ; ; = /@(@ ", | |||
| " _@:@<@4 ; ; [@}@|@; ; ; s O+T ", | |||
| " 1@ 2@3@O+ ", | |||
| " ", | |||
| " ", | |||
| " "}; | |||
| @@ -0,0 +1,102 @@ | |||
| /* Copyleft (C) 2002 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "Bezier.h" | |||
| void Bezier(Vec2 &Out, Vec2 a, Vec2 b, Vec2 c, Vec2 d, float t) | |||
| { | |||
| float tc=t*t*t; | |||
| float ts=t*t; | |||
| Out.x=(-a.x+3*b.x-3*c.x+d.x)*tc + (3*a.x-6*b.x+3*c.x)*ts + (-3*a.x+3*b.x)*t + a.x; | |||
| Out.y=(-a.y+3*b.y-3*c.y+d.y)*tc + (3*a.y-6*b.y+3*c.y)*ts + (-3*a.y+3*b.y)*t + a.y; | |||
| } | |||
| void CalculateBezierCurve(vector<Vec2> *List, float x1,float y1,float x2,float y2,float x3,float y3,float x4,float y4,int Sections) | |||
| { | |||
| Vec2 g1(x1,y1); Vec2 g2(x2,y2); Vec2 g3(x3,y3); Vec2 g4(x4,y4); | |||
| float t=0; | |||
| Vec2 p(0,0),lp(0,0); | |||
| for (int n=0; n<=Sections; n++) | |||
| { | |||
| Bezier(p,g1,g2,g3,g4,t); | |||
| List->push_back(Vec2(p.x,p.y)); | |||
| lp.x=p.x; lp.y=p.y; | |||
| t+=0.1; | |||
| } | |||
| } | |||
| void AddToSpline(const Vec2 &CV) | |||
| { | |||
| Spline.push_back(CV); | |||
| } | |||
| void CalculateBezierSpline(vector<Vec2> *List,int Sections) | |||
| { | |||
| if (Spline.size()==0) return; | |||
| Vec2 SplineSection[4]; | |||
| SplineSection[0].x=Spline[0].x; | |||
| SplineSection[0].y=Spline[0].y; | |||
| SplineSection[1].x=Spline[0].x; | |||
| SplineSection[1].y=Spline[0].y; | |||
| SplineSection[2].x=Spline[0].x; | |||
| SplineSection[2].y=Spline[0].y; | |||
| SplineSection[3].x=Spline[0].x; | |||
| SplineSection[3].y=Spline[0].y; | |||
| int SCount=0; | |||
| for(vector<Vec2>::iterator i=Spline.begin(); | |||
| i!=Spline.end(); ++i) | |||
| { | |||
| SplineSection[3].x=i->x; | |||
| SplineSection[3].y=i->y; | |||
| if (SCount>3) | |||
| { | |||
| vector<Vec2> BezierLineList; | |||
| CalculateBezierCurve(&BezierLineList, | |||
| SplineSection[0].x,SplineSection[0].y, | |||
| SplineSection[1].x,SplineSection[1].y, | |||
| SplineSection[2].x,SplineSection[2].y, | |||
| SplineSection[3].x,SplineSection[3].y, | |||
| Sections); | |||
| for (vector<Vec2>::iterator bi=BezierLineList.begin(); | |||
| bi!=BezierLineList.end(); bi++) | |||
| { | |||
| List->push_back(*bi); | |||
| } | |||
| SCount=1; | |||
| } | |||
| for (int m=0; m<3; m++) | |||
| { | |||
| SplineSection[m].x=SplineSection[m+1].x; | |||
| SplineSection[m].y=SplineSection[m+1].y; | |||
| } | |||
| SCount++; | |||
| } | |||
| Spline.clear(); | |||
| } | |||
| @@ -0,0 +1,43 @@ | |||
| /* Copyleft (C) 2002 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include <vector> | |||
| #ifndef BEZIER_CURVE_STUFF | |||
| #define BEZIER_CURVE_STUFF | |||
| struct Vec2 | |||
| { | |||
| Vec2(float a=0, float b=0) { x=a; y=b;} | |||
| float x; float y; | |||
| }; | |||
| using std::vector; | |||
| static vector<Vec2> Spline; | |||
| void Bezier(Vec2 &Out, Vec2 a, Vec2 b, Vec2 c, Vec2 d, float t); | |||
| void CalculateBezierCurve(vector<Vec2> *List, | |||
| float x1,float y1,float x2,float y2, | |||
| float x3,float y3,float x4,float y4, | |||
| int Sections=16); | |||
| void AddToSpline(const Vec2 &CV); | |||
| void CalculateBezierSpline(vector<Vec2> *List,int Sections=16); | |||
| #endif | |||
| @@ -0,0 +1,233 @@ | |||
| /* SpiralSound | |||
| * Copyleft (C) 2001 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "ComplexEnvelopePlugin.h" | |||
| #include "ComplexEnvelopePluginGUI.h" | |||
| #include <FL/Fl_Button.h> | |||
| #include "SpiralIcon.xpm" | |||
| extern "C" { | |||
| SpiralPlugin* CreateInstance() | |||
| { | |||
| return new ComplexEnvelopePlugin; | |||
| } | |||
| char** GetIcon() | |||
| { | |||
| return SpiralIcon_xpm; | |||
| } | |||
| int GetID() | |||
| { | |||
| return 33; | |||
| } | |||
| } | |||
| /////////////////////////////////////////////////////// | |||
| ComplexEnvelopePlugin::ComplexEnvelopePlugin() : | |||
| m_Triggered(0), | |||
| m_Position(-1), | |||
| m_SampleTime(2.0f) | |||
| { | |||
| m_PluginInfo.Name="ComplexEnv"; | |||
| m_PluginInfo.Width=320; | |||
| m_PluginInfo.Height=200; | |||
| m_PluginInfo.NumInputs=2; | |||
| m_PluginInfo.NumOutputs=2; | |||
| m_PluginInfo.PortTips.push_back("Trigger CV"); | |||
| m_PluginInfo.PortTips.push_back("Input"); | |||
| m_PluginInfo.PortTips.push_back("CV"); | |||
| m_PluginInfo.PortTips.push_back("Output"); | |||
| } | |||
| ComplexEnvelopePlugin::~ComplexEnvelopePlugin() | |||
| { | |||
| } | |||
| PluginInfo &ComplexEnvelopePlugin::Initialise(const HostInfo *Host) | |||
| { | |||
| PluginInfo& Info = SpiralPlugin::Initialise(Host); | |||
| CVListToEnvelope(m_CVVec); | |||
| return Info; | |||
| } | |||
| SpiralGUIType *ComplexEnvelopePlugin::CreateGUI() | |||
| { | |||
| m_GUI = new ComplexEnvelopePluginGUI(m_PluginInfo.Width, | |||
| m_PluginInfo.Height, | |||
| this,m_HostInfo); | |||
| m_GUI->hide(); | |||
| return m_GUI; | |||
| } | |||
| void ComplexEnvelopePlugin::CVListToEnvelope(const vector<Vec2> &CVVec) | |||
| { | |||
| m_EnvSample.Zero(); | |||
| m_CVVec=CVVec; | |||
| // check length | |||
| if (m_EnvSample.GetLength()/m_HostInfo->SAMPLERATE!=m_SampleTime) | |||
| { | |||
| m_EnvSample.Clear(); | |||
| m_EnvSample.Allocate((int)m_SampleTime*m_HostInfo->SAMPLERATE); | |||
| } | |||
| vector<Vec2> Lines; | |||
| if (m_Bezier) | |||
| { | |||
| // calculate the bezier spline that forms the line segments | |||
| for (vector<Vec2>::const_iterator i=CVVec.begin(); | |||
| i!=CVVec.end(); i++) | |||
| { | |||
| AddToSpline(*i); | |||
| } | |||
| CalculateBezierSpline(&Lines,10); | |||
| } | |||
| else | |||
| { | |||
| // use the CV's as line endpoints for straight line interpolation | |||
| Lines=CVVec; | |||
| } | |||
| vector<Vec2>::const_iterator i=Lines.begin(); | |||
| if (i==Lines.end()) return; // no lines | |||
| vector<Vec2>::const_iterator ni=i+1; | |||
| if (ni==Lines.end()) return; // no lines | |||
| for (int n=0; n<m_EnvSample.GetLength(); n++) | |||
| { | |||
| float gt=n/(float)m_EnvSample.GetLength(); | |||
| float t=(gt-i->x)/(ni->x-i->x); | |||
| if (t<0) t=0; | |||
| // see if we need to find the next line | |||
| if (gt>=ni->x) | |||
| { | |||
| i++; | |||
| ni++; | |||
| // env has ended before the sample length | |||
| if (ni==Lines.end()) | |||
| { | |||
| // todo: fill the rest with last value | |||
| return; | |||
| } | |||
| t=Linear(i->x,ni->x,gt,0.0f,1.0f); | |||
| if (t<0) t=0; | |||
| } | |||
| float aa=Linear(0.0f,1.0f,t,ni->y,i->y); | |||
| m_EnvSample.Set(n,aa); | |||
| } | |||
| } | |||
| void ComplexEnvelopePlugin::Execute() | |||
| { | |||
| float temp=0; | |||
| bool Freeze=false; | |||
| if (m_EnvSample.GetLength()==0) return; | |||
| if (GetInput(0,0)>0) | |||
| { | |||
| if(!m_Triggered) | |||
| { | |||
| m_Triggered=1.0f; | |||
| m_Position=0; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| if(m_Triggered) | |||
| { | |||
| m_Triggered=0; | |||
| } | |||
| } | |||
| if (m_Position==-1) | |||
| { | |||
| GetOutputBuf(0)->Zero(); | |||
| return; | |||
| } | |||
| if (!InputExists(1)) | |||
| { | |||
| for (int n=0; n<m_HostInfo->BUFSIZE; n++) | |||
| { | |||
| // see if we've fallen off the end | |||
| if (m_Position>m_EnvSample.GetLength()) | |||
| { | |||
| m_Position=-1; | |||
| break; | |||
| } | |||
| SetOutput(0,n,m_EnvSample[m_Position]); | |||
| m_Position++; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| for (int n=0; n<m_HostInfo->BUFSIZE; n++) | |||
| { | |||
| // see if we've fallen off the end | |||
| if (m_Position>m_EnvSample.GetLength()) | |||
| { | |||
| m_Position=-1; | |||
| break; | |||
| } | |||
| SetOutput(0,n,m_EnvSample[m_Position]); | |||
| SetOutput(1,n,GetInput(1,n)*m_EnvSample[m_Position]); | |||
| m_Position++; | |||
| } | |||
| } | |||
| } | |||
| void ComplexEnvelopePlugin::StreamOut(ostream &s) | |||
| { | |||
| s<<m_Version<<" "; | |||
| s<<m_Position<<" "<<m_SampleTime<<" "<<m_Bezier<<" "; | |||
| s<<m_CVVec.size()<<endl; | |||
| for (vector<Vec2>::iterator i=m_CVVec.begin(); | |||
| i!=m_CVVec.end(); i++) | |||
| { | |||
| s<<i->x<<" "<<i->y<<endl; | |||
| } | |||
| } | |||
| void ComplexEnvelopePlugin::StreamIn(istream &s) | |||
| { | |||
| int version; | |||
| s>>version; | |||
| s>>m_Position>>m_SampleTime>>m_Bezier; | |||
| m_CVVec.clear(); | |||
| int size; | |||
| s>>size; | |||
| for(int n=0; n<size; n++) | |||
| { | |||
| Vec2 t; | |||
| s>>t.x>>t.y; | |||
| m_CVVec.push_back(t); | |||
| } | |||
| ((ComplexEnvelopePluginGUI*)m_GUI)->SetCVList(m_CVVec); | |||
| CVListToEnvelope(m_CVVec); | |||
| } | |||
| @@ -0,0 +1,63 @@ | |||
| /* SpiralSound | |||
| * Copyleft (C) 2001 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "../SpiralPlugin.h" | |||
| #include "Bezier.h" | |||
| #include <FL/Fl_Pixmap.H> | |||
| #ifndef ComplexEnvelopePLUGIN | |||
| #define ComplexEnvelopePLUGIN | |||
| static const int NUM_CHANNELS = 4; | |||
| class ComplexEnvelopePlugin : public SpiralPlugin | |||
| { | |||
| public: | |||
| ComplexEnvelopePlugin(); | |||
| virtual ~ComplexEnvelopePlugin(); | |||
| virtual PluginInfo &Initialise(const HostInfo *Host); | |||
| virtual SpiralGUIType *CreateGUI(); | |||
| virtual void Execute(); | |||
| virtual void StreamOut(ostream &s); | |||
| virtual void StreamIn(istream &s); | |||
| // has to be defined in the plugin | |||
| virtual void UpdateGUI() { Fl::check(); } | |||
| void CVListToEnvelope(const vector<Vec2> &Lines); | |||
| void SetLength(float s) { m_SampleTime=s; } | |||
| void SetBezier(bool s) { m_Bezier=s; } | |||
| private: | |||
| float m_Triggered; // should scale envelope | |||
| int m_Position; | |||
| bool m_Bezier; | |||
| Sample m_EnvSample; | |||
| float m_SampleTime; | |||
| vector<Vec2> m_CVVec; | |||
| friend istream &operator>>(istream &s, ComplexEnvelopePlugin &o); | |||
| friend ostream &operator<<(ostream &s, ComplexEnvelopePlugin &o); | |||
| }; | |||
| istream &operator>>(istream &s, ComplexEnvelopePlugin &o); | |||
| ostream &operator<<(ostream &s, ComplexEnvelopePlugin &o); | |||
| #endif | |||
| @@ -0,0 +1,19 @@ | |||
| HEADERS = ../SpiralPlugin.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../../Sample.h \ | |||
| Bezier.h \ | |||
| ComplexEnvelopePlugin.h \ | |||
| ComplexEnvelopePluginGUI.h | |||
| SOURCES = ../SpiralPlugin.C \ | |||
| ../SpiralPluginGUI.C \ | |||
| ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_DragBar.cxx \ | |||
| ../../Sample.C \ | |||
| Bezier.C \ | |||
| ComplexEnvelopePlugin.C \ | |||
| ComplexEnvelopePluginGUI.C | |||
| TARGET = ComplexEnvelopePlugin.so | |||
| @@ -0,0 +1,369 @@ | |||
| /* SpiralPlugin | |||
| * Copyleft (C) 2000 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include <stdio.h> | |||
| #include "ComplexEnvelopePluginGUI.h" | |||
| #include <FL/fl_draw.h> | |||
| #include <FL/fl_draw.H> | |||
| static const int GUI_COLOUR = 179; | |||
| static const int GUIBG_COLOUR = 144; | |||
| static const int GUIBG2_COLOUR = 145; | |||
| static const float TIMED_SLIDER_MAX = 3.0f; | |||
| ///////////////////////////////////////////////////////////////////////// | |||
| Fl_Envelope::Fl_Handle::Fl_Handle(int x,int y, int w, int h, char *Name) : | |||
| Fl_Widget(x,y,w,h,Name), | |||
| m_DelMe(false), | |||
| m_Changed(false), | |||
| m_Coincident(false) | |||
| { | |||
| } | |||
| Fl_Envelope::Fl_Handle::~Fl_Handle() | |||
| { | |||
| } | |||
| int Fl_Envelope::Fl_Handle::handle(int event) | |||
| { | |||
| int Mousebutton=Fl::event_button(); | |||
| if (event==FL_DRAG && Mousebutton==1) | |||
| { | |||
| x(Fl::event_x()-(w()/2)); | |||
| y(Fl::event_y()-(h()/2)); | |||
| // restrict the movement to the parent's area | |||
| if (x()<parent()->x()) x(parent()->x()); | |||
| if (x()>parent()->x()+parent()->w()-w()) x(parent()->x()+parent()->w()-w()); | |||
| if (y()<parent()->y()) y(parent()->y()); | |||
| if (y()>parent()->y()+parent()->h()-h()) y(parent()->y()+parent()->h()-h()); | |||
| m_Changed=true; | |||
| parent()->redraw(); | |||
| redraw(); | |||
| } | |||
| if (event==FL_PUSH && Mousebutton==3) | |||
| { | |||
| m_DelMe=true; | |||
| } | |||
| return 1; | |||
| } | |||
| void Fl_Envelope::Fl_Handle::draw() | |||
| { | |||
| if (m_Coincident) | |||
| { | |||
| fl_color(FL_BLACK); | |||
| fl_rect(x(),y(),w()+1,h()+1); | |||
| fl_line(x(),y(),x()+w(),y()+h()); | |||
| fl_line(x(),y()+h(),x()+w(),y()); | |||
| } | |||
| else | |||
| { | |||
| fl_color(FL_RED); | |||
| fl_arc( x(),y(),w()+1,h()+1,0,360); | |||
| } | |||
| } | |||
| Fl_Envelope::Fl_Envelope(int x,int y, int w, int h, char *Name) : | |||
| Fl_Group(x,y,w,h,Name), | |||
| m_Length(1.0), | |||
| m_Bezier(true) | |||
| { | |||
| m_Origin_x=x+10; | |||
| m_Origin_y=y+h-10; | |||
| // default setting | |||
| Fl_Handle * newhandle = new Fl_Handle(28,20,10,10,""); | |||
| m_HandleList.push_back(newhandle); | |||
| add(newhandle); | |||
| newhandle = new Fl_Handle(14,122,10,10,""); | |||
| m_HandleList.push_back(newhandle); | |||
| add(newhandle); | |||
| newhandle = new Fl_Handle(48,63,10,10,""); | |||
| m_HandleList.push_back(newhandle); | |||
| add(newhandle); | |||
| newhandle = new Fl_Handle(76,91,10,10,""); | |||
| m_HandleList.push_back(newhandle); | |||
| add(newhandle); | |||
| newhandle = new Fl_Handle(131,86,10,10,""); | |||
| m_HandleList.push_back(newhandle); | |||
| add(newhandle); | |||
| newhandle = new Fl_Handle(194,81,10,10,""); | |||
| m_HandleList.push_back(newhandle); | |||
| add(newhandle); | |||
| newhandle = new Fl_Handle(294,131,10,10,""); | |||
| m_HandleList.push_back(newhandle); | |||
| add(newhandle); | |||
| newhandle = new Fl_Handle(216,124 ,10,10,""); | |||
| m_HandleList.push_back(newhandle); | |||
| add(newhandle); | |||
| show(); | |||
| } | |||
| Fl_Envelope::~Fl_Envelope() | |||
| { | |||
| end(); | |||
| } | |||
| int Fl_Envelope::handle(int event) | |||
| { | |||
| int ret=Fl_Group::handle(event); | |||
| // search for deleted handles | |||
| for(list<Fl_Handle*>::iterator i = m_HandleList.begin(); | |||
| i!=m_HandleList.end(); ++i) | |||
| { | |||
| // if it's been modified, update the env via the callback | |||
| if ((*i)->Changed()) do_callback(); | |||
| if ((*i)->Deleted()) | |||
| { | |||
| remove(*i); | |||
| m_HandleList.erase(i); | |||
| break; // one at a time | |||
| } | |||
| } | |||
| if (!ret) | |||
| { | |||
| int Mousebutton=Fl::event_button(); | |||
| if (event==FL_PUSH && Mousebutton==2) | |||
| { | |||
| Fl_Handle * newhandle = new | |||
| Fl_Handle(Fl::event_x()-5,Fl::event_y()-5,10,10,""); | |||
| m_HandleList.push_back(newhandle); | |||
| add(newhandle); | |||
| } | |||
| redraw(); | |||
| } | |||
| return ret; | |||
| } | |||
| void Fl_Envelope::draw() | |||
| { | |||
| fl_push_clip(x(),y(),w()+1,h()+1); | |||
| fl_color(FL_GRAY); | |||
| fl_rectf(x(),y(),w()+1,h()+1); | |||
| fl_color(FL_BLACK); | |||
| fl_rect(x(),y(),w()+1,h()+1); | |||
| fl_color(FL_WHITE); | |||
| int last_x=m_Origin_x, last_y=m_Origin_y, closest=INT_MAX, dist; | |||
| list<Fl_Handle*>::iterator ClosestHandle=m_HandleList.end(); | |||
| // draw second markers | |||
| fl_color(150,150,150); | |||
| for (int n=0; n<5; n++) | |||
| { | |||
| int p=(int)(m_Origin_x+(w()/m_Length*n)); | |||
| fl_line(p,y(),p,y()+h()); | |||
| } | |||
| m_HandlePos.clear(); | |||
| m_HandlePos.push_back(Vec2(m_Origin_x,m_Origin_y)); | |||
| if (m_Bezier) AddToSpline(Vec2(m_Origin_x,m_Origin_y)); | |||
| for (unsigned int n=0; n<m_HandleList.size(); n++) | |||
| { | |||
| // slow - search through drawing line connecting handles from left to right | |||
| for(list<Fl_Handle*>::iterator i = m_HandleList.begin(); | |||
| i!=m_HandleList.end(); ++i) | |||
| { | |||
| dist=(*i)->x()-last_x; | |||
| if (dist>-5 && dist<closest) | |||
| { | |||
| closest=dist; | |||
| ClosestHandle=i; | |||
| } | |||
| } | |||
| if (ClosestHandle!=m_HandleList.end()) | |||
| { | |||
| closest=INT_MAX; | |||
| fl_color(FL_WHITE); | |||
| fl_line(last_x,last_y,(*ClosestHandle)->x()+5,(*ClosestHandle)->y()+5); | |||
| (*ClosestHandle)->SetIsCoincident(false); | |||
| last_x=(*ClosestHandle)->x()+5; | |||
| last_y=(*ClosestHandle)->y()+5; | |||
| m_HandlePos.push_back(Vec2((*ClosestHandle)->x()+5,(*ClosestHandle)->y()+5)); | |||
| if (m_Bezier) | |||
| { | |||
| if (!(n%3)) (*ClosestHandle)->SetIsCoincident(true); | |||
| AddToSpline(Vec2((*ClosestHandle)->x()+5,(*ClosestHandle)->y()+5)); | |||
| } | |||
| } | |||
| } | |||
| if (m_Bezier) | |||
| { | |||
| vector<Vec2> BezierLineList; | |||
| CalculateBezierSpline(&BezierLineList,10); | |||
| vector<Vec2>::iterator bi=BezierLineList.begin(); | |||
| bi++; | |||
| fl_color(FL_BLUE); | |||
| for (;bi!=BezierLineList.end(); bi++) | |||
| { | |||
| fl_line((int)(bi-1)->x,(int)(bi-1)->y,(int)bi->x,(int)bi->y); | |||
| } | |||
| } | |||
| fl_color(FL_BLACK); | |||
| fl_line(m_Origin_x,m_Origin_y,m_Origin_x,y()+10); | |||
| fl_line(m_Origin_x,m_Origin_y,x()+w()-10,m_Origin_y); | |||
| Fl_Group::draw(); | |||
| fl_pop_clip(); | |||
| } | |||
| void Fl_Envelope::Clear() | |||
| { | |||
| for(list<Fl_Handle*>::iterator i = m_HandleList.begin(); | |||
| i!=m_HandleList.end(); ++i) | |||
| { | |||
| remove(*i); | |||
| } | |||
| m_HandleList.clear(); | |||
| } | |||
| vector<Vec2> Fl_Envelope::GetCVList() | |||
| { | |||
| vector<Vec2> m_CV; | |||
| for(vector<Vec2>::iterator i = m_HandlePos.begin(); | |||
| i!=m_HandlePos.end(); ++i) | |||
| { | |||
| // convert to 0->1 | |||
| Vec2 vec((i->x-m_Origin_x)/(float)(w()-m_Origin_x), | |||
| (m_Origin_y-i->y)/(float)(m_Origin_y-y())); | |||
| m_CV.push_back(vec); | |||
| } | |||
| return m_CV; | |||
| } | |||
| void Fl_Envelope::SetCVList(const vector<Vec2> &CV) | |||
| { | |||
| Clear(); | |||
| for(vector<Vec2>::const_iterator i = CV.begin(); | |||
| i!=CV.end(); ++i) | |||
| { | |||
| int minx=m_Origin_x, width=w()-m_Origin_x; | |||
| int miny=m_Origin_y, height=m_Origin_y-y(); | |||
| // convert from 0->1 screen coords | |||
| Vec2 vec(minx+(i->x*width), | |||
| miny-(i->y*height)); | |||
| Fl_Handle *nh = new Fl_Handle((int)vec.x,(int)vec.y,10,10,""); | |||
| add(nh); | |||
| m_HandleList.push_back(nh); | |||
| } | |||
| redraw(); | |||
| } | |||
| ///////////////////////////////////////////////////////////////////////// | |||
| ComplexEnvelopePluginGUI::ComplexEnvelopePluginGUI(int w, int h,ComplexEnvelopePlugin *o,const HostInfo *Info) : | |||
| SpiralPluginGUI(w,h,o) | |||
| { | |||
| m_Plugin=o; | |||
| m_Type = new Fl_Button(15,h-35,100,20,"Bezier Curve"); | |||
| m_Type->type(1); | |||
| m_Type->value(1); | |||
| m_Type->labelsize(10); | |||
| m_Type->callback((Fl_Callback*)cb_Type); | |||
| m_Length = new Fl_Knob(w-60,h-55,40,40,"Length"); | |||
| m_Length->color(GUI_COLOUR); | |||
| m_Length->labelsize(10); | |||
| m_Length->maximum(5); | |||
| m_Length->step(0.001); | |||
| m_Length->value(1); | |||
| m_Length->callback((Fl_Callback*)cb_Length); | |||
| m_TLength = new Fl_Output(w-130,h-45,60,20,""); | |||
| m_TLength->value("1.0"); | |||
| m_Envelope = new Fl_Envelope(5,20,w-10,h-75,""); | |||
| m_Envelope->callback((Fl_Callback*)cb_UpdateEnv); | |||
| end(); | |||
| } | |||
| void ComplexEnvelopePluginGUI::UpdateValues() | |||
| { | |||
| } | |||
| inline void ComplexEnvelopePluginGUI::cb_UpdateEnv_i(Fl_Envelope *o, void* v) | |||
| { | |||
| m_Plugin->CVListToEnvelope(o->GetCVList()); | |||
| } | |||
| void ComplexEnvelopePluginGUI::cb_UpdateEnv(Fl_Envelope* o, void* v) | |||
| {((ComplexEnvelopePluginGUI*)(o->parent()))->cb_UpdateEnv_i(o,v);} | |||
| inline void ComplexEnvelopePluginGUI::cb_Type_i(Fl_Button *o, void *v) | |||
| { | |||
| m_Envelope->SetBezier(o->value()); | |||
| m_Plugin->SetBezier(o->value()); | |||
| m_Envelope->redraw(); | |||
| } | |||
| void ComplexEnvelopePluginGUI::cb_Type(Fl_Button *o, void *v) | |||
| {((ComplexEnvelopePluginGUI*)(o->parent()))->cb_Type_i(o,v);} | |||
| inline void ComplexEnvelopePluginGUI::cb_Length_i(Fl_Knob *o, void *v) | |||
| { | |||
| m_Plugin->SetLength(o->value()); | |||
| m_Envelope->SetLength(o->value()); | |||
| static char text[16]; | |||
| sprintf(text,"%f",o->value()); | |||
| m_TLength->value(text); | |||
| m_Envelope->redraw(); | |||
| } | |||
| void ComplexEnvelopePluginGUI::cb_Length(Fl_Knob *o, void *v) | |||
| {((ComplexEnvelopePluginGUI*)(o->parent()))->cb_Length_i(o,v);} | |||
| @@ -0,0 +1,109 @@ | |||
| /* SpiralPlugin | |||
| * Copyleft (C) 2000 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include <FL/Fl.H> | |||
| #include <FL/Fl_Window.H> | |||
| #include <FL/Fl_Group.H> | |||
| #include <FL/Fl_Output.H> | |||
| #include <FL/Fl_Button.H> | |||
| #include <FL/Fl_Box.H> | |||
| #include <FL/Fl_Output.H> | |||
| #include <list> | |||
| #include "ComplexEnvelopePlugin.h" | |||
| #include "../SpiralPluginGUI.h" | |||
| #include "../Widgets/Fl_Knob.H" | |||
| #include "Bezier.h" | |||
| #ifndef EnvelopeGUI | |||
| #define EnvelopeGUI | |||
| class Fl_Envelope : public Fl_Group | |||
| { | |||
| public: | |||
| Fl_Envelope(int x,int y, int w, int h, char *Name); | |||
| ~Fl_Envelope(); | |||
| virtual int handle(int event); | |||
| virtual void draw(); | |||
| void Clear(); | |||
| void SetBezier(bool s) { m_Bezier=s; } | |||
| void SetLength(float s) { m_Length=s; } | |||
| vector<Vec2> GetCVList(); | |||
| void SetCVList(const vector<Vec2> &CV); | |||
| private: | |||
| class Fl_Handle : public Fl_Widget | |||
| { | |||
| public: | |||
| Fl_Handle(int x,int y, int w, int h, char *Name); | |||
| ~Fl_Handle(); | |||
| virtual int handle(int event); | |||
| virtual void draw(); | |||
| bool Deleted() { return m_DelMe; } | |||
| void DelMe() { m_DelMe=true; } | |||
| void SetIsCoincident(bool s) { m_Coincident=s; } | |||
| bool Changed() { bool t=m_Changed; m_Changed=false; return t; } | |||
| private: | |||
| bool m_DelMe; | |||
| bool m_Changed; | |||
| bool m_Coincident; | |||
| }; | |||
| float m_Length; | |||
| float m_Time; | |||
| bool m_Bezier; | |||
| list<Fl_Handle*> m_HandleList; | |||
| vector<Vec2> m_HandlePos; | |||
| int m_Origin_x; | |||
| int m_Origin_y; | |||
| }; | |||
| class ComplexEnvelopePluginGUI : public SpiralPluginGUI | |||
| { | |||
| public: | |||
| ComplexEnvelopePluginGUI(int w, int h, ComplexEnvelopePlugin *o,const HostInfo *Info); | |||
| virtual void UpdateValues(); | |||
| virtual SpiralPlugin* GetPlugin() { return m_Plugin; } | |||
| void SetCVList(const vector<Vec2> &CV) { m_Envelope->SetCVList(CV); } | |||
| ComplexEnvelopePlugin *m_Plugin; | |||
| private: | |||
| Fl_Envelope *m_Envelope; | |||
| Fl_Button *m_Type; | |||
| Fl_Knob *m_Length; | |||
| Fl_Output *m_TLength; | |||
| //// Callbacks //// | |||
| inline void cb_Type_i(Fl_Button *o, void *v); | |||
| static void cb_Type(Fl_Button *o, void *v); | |||
| inline void cb_Length_i(Fl_Knob *o, void *v); | |||
| static void cb_Length(Fl_Knob *o, void *v); | |||
| inline void cb_UpdateEnv_i(Fl_Envelope *o, void*v); | |||
| static void cb_UpdateEnv(Fl_Envelope* o, void* v); | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,172 @@ | |||
| ############################################################################# | |||
| # Makefile for building ComplexEnvelopePlugin.so | |||
| # Generated by tmake at 22:13, 2001/09/17 | |||
| # Project: ComplexEnvelopePlugin | |||
| # Template: app | |||
| ############################################################################# | |||
| ####### Compiler, tools and options | |||
| CC = gcc | |||
| CXX = g++ | |||
| CFLAGS = @CFLAGS@ @FLTK_CFLAGS@ | |||
| CXXFLAGS= @CXXFLAGS@ @FLTK_CXXFLAGS@ | |||
| INCPATH = | |||
| LINK = g++ -shared | |||
| LFLAGS = | |||
| LIBS = @FLTK_LIBS@ -lm -ldl | |||
| MOC = moc | |||
| UIC = | |||
| TAR = tar -cf | |||
| GZIP = gzip -9f | |||
| INSTALL = @INSTALL@ | |||
| ###### Autoconf variables | |||
| prefix = @prefix@ | |||
| exec_prefix = @exec_prefix@ | |||
| bindir = @bindir@ | |||
| sbindir = @sbindir@ | |||
| libexecdir = @libexecdir@ | |||
| datadir = @datadir@ | |||
| sysconfdir = @sysconfdir@ | |||
| sharedstatedir = @sharedstatedir@ | |||
| localstatedir = @localstatedir@ | |||
| libdir = @libdir@ | |||
| infodir = @infodir@ | |||
| mandir = @mandir@ | |||
| ####### Files | |||
| HEADERS = ../SpiralPlugin.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../../Sample.h \ | |||
| Bezier.h \ | |||
| ComplexEnvelopePlugin.h \ | |||
| ComplexEnvelopePluginGUI.h | |||
| SOURCES = ../SpiralPlugin.C \ | |||
| ../SpiralPluginGUI.C \ | |||
| ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_DragBar.cxx \ | |||
| ../../Sample.C \ | |||
| Bezier.C \ | |||
| ComplexEnvelopePlugin.C \ | |||
| ComplexEnvelopePluginGUI.C | |||
| OBJECTS = ../SpiralPlugin.o \ | |||
| ../SpiralPluginGUI.o \ | |||
| ../Widgets/Fl_Knob.o \ | |||
| ../Widgets/Fl_DragBar.o \ | |||
| ../../Sample.o \ | |||
| Bezier.o \ | |||
| ComplexEnvelopePlugin.o \ | |||
| ComplexEnvelopePluginGUI.o | |||
| INTERFACES = | |||
| UICDECLS = | |||
| UICIMPLS = | |||
| SRCMOC = | |||
| OBJMOC = | |||
| DIST = | |||
| TARGET = ComplexEnvelopePlugin.so | |||
| ####### Implicit rules | |||
| .SUFFIXES: .cpp .cxx .cc .C .c | |||
| .cpp.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .cxx.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .cc.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .C.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .c.o: | |||
| $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< | |||
| ####### Build rules | |||
| all: $(TARGET) | |||
| $(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) | |||
| $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS) | |||
| moc: $(SRCMOC) | |||
| tmake: | |||
| tmake ComplexEnvelopePlugin.pro | |||
| dist: | |||
| $(TAR) ComplexEnvelopePlugin.tar ComplexEnvelopePlugin.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST) | |||
| $(GZIP) ComplexEnvelopePlugin.tar | |||
| clean: | |||
| -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET) | |||
| -rm -f *~ core | |||
| install: | |||
| $(INSTALL) $(TARGET) $(libdir)/SpiralPlugins | |||
| ####### Sub-libraries | |||
| ###### Combined headers | |||
| ####### Compile | |||
| ../SpiralPlugin.o: ../SpiralPlugin.C \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h | |||
| ../SpiralPluginGUI.o: ../SpiralPluginGUI.C \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h | |||
| ../Widgets/Fl_Knob.o: ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_Knob.H | |||
| ../Widgets/Fl_DragBar.o: ../Widgets/Fl_DragBar.cxx \ | |||
| ../Widgets/Fl_DragBar.H | |||
| ../../Sample.o: ../../Sample.C \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h | |||
| Bezier.o: Bezier.C \ | |||
| Bezier.h \ | |||
| ComplexEnvelopePlugin.o: ComplexEnvelopePlugin.C \ | |||
| ComplexEnvelopePlugin.h \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h \ | |||
| ../../Sample.h \ | |||
| ComplexEnvelopePluginGUI.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| Bezier.h \ | |||
| SpiralIcon.xpm | |||
| ComplexEnvelopePluginGUI.o: ComplexEnvelopePluginGUI.C \ | |||
| ComplexEnvelopePluginGUI.h \ | |||
| ComplexEnvelopePlugin.h \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h \ | |||
| ../../Sample.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| Bezier.h \ | |||
| ../Widgets/Fl_DragBar.H | |||
| @@ -0,0 +1,327 @@ | |||
| /* XPM */ | |||
| static char * SpiralIcon_xpm[] = { | |||
| "36 36 288 2", | |||
| " c None", | |||
| ". c #8B889B", | |||
| "+ c #9C99AA", | |||
| "@ c #ADAAB9", | |||
| "# c #837F94", | |||
| "$ c #7D7990", | |||
| "% c #9995A7", | |||
| "& c #67627C", | |||
| "* c #CDCBD4", | |||
| "= c #FCFCFC", | |||
| "- c #D1D0D8", | |||
| "; c #FFFFFF", | |||
| "> c #F1F1F3", | |||
| ", c #848095", | |||
| "' c #2A2248", | |||
| ") c #CFCED6", | |||
| "! c #68637D", | |||
| "~ c #ABA8B6", | |||
| "{ c #D5D3DB", | |||
| "] c #9490A2", | |||
| "^ c #C4C4C4", | |||
| "/ c #1D1C1D", | |||
| "( c #313134", | |||
| "_ c #EEEFEE", | |||
| ": c #FBFBFB", | |||
| "< c #EFEFEF", | |||
| "[ c #7B768D", | |||
| "} c #464060", | |||
| "| c #DEDEE1", | |||
| "1 c #CBCACC", | |||
| "2 c #EEEEF1", | |||
| "3 c #79758C", | |||
| "4 c #FBFBFC", | |||
| "5 c #A2A2A2", | |||
| "6 c #000000", | |||
| "7 c #F5F6F5", | |||
| "8 c #747474", | |||
| "9 c #2A2A2B", | |||
| "0 c #403958", | |||
| "a c #7D788F", | |||
| "b c #C0BEC8", | |||
| "c c #BCBAC6", | |||
| "d c #BCBAC5", | |||
| "e c #625C79", | |||
| "f c #2B2932", | |||
| "g c #191919", | |||
| "h c #CCCCCC", | |||
| "i c #807B91", | |||
| "j c #3B3556", | |||
| "k c #F2F2F4", | |||
| "l c #929292", | |||
| "m c #0E0E0E", | |||
| "n c #BFBFBF", | |||
| "o c #111111", | |||
| "p c #100E15", | |||
| "q c #868689", | |||
| "r c #FEFDFE", | |||
| "s c #D9D7DE", | |||
| "t c #9C98AA", | |||
| "u c #FDFCFD", | |||
| "v c #DDDDDD", | |||
| "w c #575755", | |||
| "x c #5E5E5E", | |||
| "y c #C4C2CD", | |||
| "z c #423C5C", | |||
| "A c #F0F0F2", | |||
| "B c #939393", | |||
| "C c #555555", | |||
| "D c #4A4A4A", | |||
| "E c #010101", | |||
| "F c #282828", | |||
| "G c #C2C2C2", | |||
| "H c #DBDAE0", | |||
| "I c #615C78", | |||
| "J c #F6F6F7", | |||
| "K c #DADADA", | |||
| "L c #545454", | |||
| "M c #0F0F0F", | |||
| "N c #B8B8B8", | |||
| "O c #48445C", | |||
| "P c #2B2B2C", | |||
| "Q c #181900", | |||
| "R c #D3D3D3", | |||
| "S c #C1BEC9", | |||
| "T c #474060", | |||
| "U c #31294D", | |||
| "V c #716C85", | |||
| "W c #65607A", | |||
| "X c #625D78", | |||
| "Y c #D5D4DB", | |||
| "Z c #F7F7F7", | |||
| "` c #8B8B8B", | |||
| " . c #161616", | |||
| ".. c #0C0C0C", | |||
| "+. c #161800", | |||
| "@. c #1A1B00", | |||
| "#. c #060600", | |||
| "$. c #191A00", | |||
| "%. c #393643", | |||
| "&. c #47415F", | |||
| "*. c #9692A4", | |||
| "=. c #D9D8DE", | |||
| "-. c #F7F7F8", | |||
| ";. c #918DA0", | |||
| ">. c #B8B5C1", | |||
| ",. c #D1D1D1", | |||
| "'. c #212121", | |||
| "). c #2D2F00", | |||
| "!. c #111200", | |||
| "~. c #0F0F00", | |||
| "{. c #090A00", | |||
| "]. c #040400", | |||
| "^. c #727175", | |||
| "/. c #FEFEFF", | |||
| "(. c #9D99AA", | |||
| "_. c #DBD9E0", | |||
| ":. c #E9E9E9", | |||
| "<. c #CBCBCB", | |||
| "[. c #E0E0E0", | |||
| "}. c #6C6C6C", | |||
| "|. c #050500", | |||
| "1. c #515151", | |||
| "2. c #A6A6A7", | |||
| "3. c #827E93", | |||
| "4. c #615C77", | |||
| "5. c #EAEAED", | |||
| "6. c #DFDFE1", | |||
| "7. c #FEF100", | |||
| "8. c #010100", | |||
| "9. c #1E1D24", | |||
| "0. c #9894A7", | |||
| "a. c #B1AEBB", | |||
| "b. c #69686F", | |||
| "c. c #000001", | |||
| "d. c #615C76", | |||
| "e. c #5F5A75", | |||
| "f. c #413E4D", | |||
| "g. c #020203", | |||
| "h. c #1A1A1C", | |||
| "i. c #C3C1CB", | |||
| "j. c #9D9D9D", | |||
| "k. c #202020", | |||
| "l. c #383838", | |||
| "m. c #4C4C4C", | |||
| "n. c #2C2E00", | |||
| "o. c #111112", | |||
| "p. c #C9C7D0", | |||
| "q. c #F1F1F1", | |||
| "r. c #F8F8F8", | |||
| "s. c #232323", | |||
| "t. c #050600", | |||
| "u. c #050408", | |||
| "v. c #AEACB9", | |||
| "w. c #FEFEFE", | |||
| "x. c #1D1D1D", | |||
| "y. c #292B00", | |||
| "z. c #B7B5C1", | |||
| "A. c #9390A2", | |||
| "B. c #BBBBBB", | |||
| "C. c #414141", | |||
| "D. c #030303", | |||
| "E. c #28272A", | |||
| "F. c #F4F4F6", | |||
| "G. c #605B76", | |||
| "H. c #736E86", | |||
| "I. c #D8D8D8", | |||
| "J. c #727272", | |||
| "K. c #101010", | |||
| "L. c #020200", | |||
| "M. c #1E2000", | |||
| "N. c #848486", | |||
| "O. c #CCCBD3", | |||
| "P. c #747087", | |||
| "Q. c #6D6881", | |||
| "R. c #1C1C1C", | |||
| "S. c #242424", | |||
| "T. c #0A0A00", | |||
| "U. c #656566", | |||
| "V. c #F6F6F6", | |||
| "W. c #E8E6EA", | |||
| "X. c #706B84", | |||
| "Y. c #E3E1E6", | |||
| "Z. c #474746", | |||
| "`. c #151515", | |||
| " + c #C8C8C8", | |||
| ".+ c #AEAEAE", | |||
| "++ c #080808", | |||
| "@+ c #373639", | |||
| "#+ c #FDFCFE", | |||
| "$+ c #ABA8B7", | |||
| "%+ c #F1F0F3", | |||
| "&+ c #6D6980", | |||
| "*+ c #0A090E", | |||
| "=+ c #95929E", | |||
| "-+ c #0A0810", | |||
| ";+ c #0D0D0D", | |||
| ">+ c #050505", | |||
| ",+ c #5B5A5C", | |||
| "'+ c #F7F6F7", | |||
| ")+ c #F4F3F5", | |||
| "!+ c #908C9F", | |||
| "~+ c #C8C6D0", | |||
| "{+ c #837E96", | |||
| "]+ c #86868A", | |||
| "^+ c #070608", | |||
| "/+ c #ECEBEE", | |||
| "(+ c #5B5571", | |||
| "_+ c #646078", | |||
| ":+ c #AFAFB0", | |||
| "<+ c #454545", | |||
| "[+ c #363636", | |||
| "}+ c #7A7A7A", | |||
| "|+ c #C8C8C9", | |||
| "1+ c #212025", | |||
| "2+ c #060607", | |||
| "3+ c #969699", | |||
| "4+ c #FAFAFA", | |||
| "5+ c #F8F8F9", | |||
| "6+ c #A29EAF", | |||
| "7+ c #F7F6F8", | |||
| "8+ c #F0F0F1", | |||
| "9+ c #B8B7B9", | |||
| "0+ c #E4E4E4", | |||
| "a+ c #FDFDFD", | |||
| "b+ c #A5A2B2", | |||
| "c+ c #3B3456", | |||
| "d+ c #A8A5B4", | |||
| "e+ c #525252", | |||
| "f+ c #848387", | |||
| "g+ c #CDCDCD", | |||
| "h+ c #8D899C", | |||
| "i+ c #494262", | |||
| "j+ c #68627C", | |||
| "k+ c #40395A", | |||
| "l+ c #ECECEC", | |||
| "m+ c #020202", | |||
| "n+ c #B4B5B5", | |||
| "o+ c #0B0B0B", | |||
| "p+ c #313232", | |||
| "q+ c #E3E3E3", | |||
| "r+ c #B1AEBC", | |||
| "s+ c #BDBBC6", | |||
| "t+ c #3C3556", | |||
| "u+ c #898599", | |||
| "v+ c #EDEDED", | |||
| "w+ c #39393A", | |||
| "x+ c #040404", | |||
| "y+ c #333333", | |||
| "z+ c #F5F5F5", | |||
| "A+ c #2B2B2B", | |||
| "B+ c #2D2A3D", | |||
| "C+ c #B6B4C1", | |||
| "D+ c #F5F5F6", | |||
| "E+ c #605A76", | |||
| "F+ c #DAD8DF", | |||
| "G+ c #F5F4F6", | |||
| "H+ c #615B76", | |||
| "I+ c #524D6A", | |||
| "J+ c #E4E3E8", | |||
| "K+ c #D5D5D5", | |||
| "L+ c #1B1B1B", | |||
| "M+ c #303030", | |||
| "N+ c #AAABAB", | |||
| "O+ c #585464", | |||
| "P+ c #B0AEBB", | |||
| "Q+ c #A29FAF", | |||
| "R+ c #E9E8E9", | |||
| "S+ c #787779", | |||
| "T+ c #0F0E15", | |||
| "U+ c #2D2D2E", | |||
| "V+ c #595959", | |||
| "W+ c #FAFAFB", | |||
| "X+ c #807B92", | |||
| "Y+ c #B0ADBB", | |||
| "Z+ c #E8E7EB", | |||
| "`+ c #3A3258", | |||
| " @ c #E6E5EA", | |||
| ".@ c #DFDEE3", | |||
| "+@ c #443E5E", | |||
| "@@ c #BAB8C4", | |||
| "#@ c #C1BFCA", | |||
| "$@ c #E0E0E5", | |||
| "%@ c #D0CED6", | |||
| "&@ c #362F52", | |||
| "*@ c #CECCD5", | |||
| "=@ c #413A5B", | |||
| "-@ c #6A657F", | |||
| ";@ c #9793A6", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " . + @ # $ % ", | |||
| " & * = * - ; > , ' ; ; ; ) ! ", | |||
| " ~ ; ; { ] ; ^ / ( _ ; : < [ ", | |||
| " } | 1 2 3 4 5 6 6 7 : 8 9 0 a b ", | |||
| " c : d e f g h i j k l 6 m ; n o 6 p q r s ", | |||
| " t u ; v w 6 6 x y z A B 6 C ; D E 6 F G ; H ", | |||
| " I J ; ; K L 6 6 M N O P E 6 6 6 Q Q M R S T U V W ", | |||
| " X Y ; ; ; ; Z ` .6 ..6 6 6 6 6 +.@.#.$.%.&.*.=.-.;. ", | |||
| " >.; ; ; ; ; ; = ,.'.).!.6 ~.{.6 ].6 6 6 E ^./.; ; (. ", | |||
| " _.; ; :.R h <.[.}.6 |.6 6 6 6 6 6 6 6 6 6 E 1.2.4 3. ", | |||
| " 4.5.; 6...6 6 6 6 6 6 6 6 6 7.7.8.6 6 6 6 6 6 6 9.0. ", | |||
| " V @ a.b.c.6 6 6 6 6 6 6 6 7.7.7.6 6 6 6 6 6 6 6 ", | |||
| " d.e.f.6 g.6 6 6 6 6 6 7.7.7.7.7.6 6 6 |.6 6 6 h. ", | |||
| " i.; ; j.k.k.l.m.k.6 7.7.7.7.7.7.7.6 6 6 n.7.6 6 o. ", | |||
| " p.; ; q.r.; ; ; s.6 7.7.7.7.7.7.7.7.6 6 7.7.t.6 u. ", | |||
| " v.; ; ; ; w.; ; x.6 7.7.7.7.7.7.7.7.7.7.7.7.y.6 6 z., ", | |||
| " A.; ; w.; : B.C.D.Q 7.7.7.7.7.7.7.7.7.7.7.7.6 6 E.w.F.G. ", | |||
| " H.; ; ; I.J.K.6 6 6 6 6 6 6 6 6 6 L.6 M.6 6 6 6 N.; ; O.P. ", | |||
| " Q.J ; : R.6 6 6 6 S...6 6 6 6 6 6 T.6 6 8.6 6 6 U.V.; ; W.X. ", | |||
| " Y.; ; Z.6 E 6 `. +.+++6 6 6 6 6 6 6 6 8.6 6 6 6 @+#+; ; > X. ", | |||
| " $+; %+&+*+6 6 .+w.; =+-+6 6 6 6 6 6 6 6 ;+>+6 6 6 ,+'+; ; )+!+ ", | |||
| " X.~+! {+]+^+x ; ; /+(+_+:+l <+6 6 6 [+}+|+1+6 6 6 2+3+4+; ; 5+@ ", | |||
| " 6+7+8+9+0+a+; b+c+d+; V.<+6 6 E e+; ; f+6 6 E 6 o g+; ; = h+ ", | |||
| " i+> ; ; ; ; ; ; j+k+; ; l+l.6 6 m+D ; ; n+o+6 6 6 p+q+; ; r+ ", | |||
| " > ; ; ; ; s+t+u+; ; v+w+6 6 x+y+; ; z+A+6 6 B+C+; D+3 ", | |||
| " E+F+= ; G+H+I+J+; ; K+L+6 6 m+M+; ; ; N+e+O+ ", | |||
| " P+4 Q+ X ; ; ; R+S+M+T+U+V+; ; ; w.W+X+ ", | |||
| " Y+; ; ; ; ; Z+`+ @; ; ; ; = .@+@ ", | |||
| " @@#@$@4 ; ; %@&@*@; ; ; s u+T ", | |||
| " =@ -@;@u+ ", | |||
| " ", | |||
| " ", | |||
| " "}; | |||
| @@ -0,0 +1,236 @@ | |||
| /* SpiralSound | |||
| * Copyleft (C) 2001 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include <stdio.h> | |||
| #include "ControllerPlugin.h" | |||
| #include "ControllerPluginGUI.h" | |||
| #include <FL/Fl_Button.h> | |||
| #include "SpiralIcon.xpm" | |||
| extern "C" { | |||
| SpiralPlugin* CreateInstance() | |||
| { | |||
| return new ControllerPlugin; | |||
| } | |||
| char** GetIcon() | |||
| { | |||
| return SpiralIcon_xpm; | |||
| } | |||
| int GetID() | |||
| { | |||
| return 0x0003; | |||
| } | |||
| } | |||
| /////////////////////////////////////////////////////// | |||
| ControllerPlugin::ControllerPlugin() : | |||
| m_Num(4) | |||
| { | |||
| m_Version=3; | |||
| m_PluginInfo.Name="CV Control"; | |||
| m_PluginInfo.Width=240; | |||
| m_PluginInfo.Height=224; | |||
| m_PluginInfo.NumInputs=0; | |||
| m_PluginInfo.NumOutputs=4; | |||
| m_PluginInfo.PortTips.push_back("CV 1"); | |||
| m_PluginInfo.PortTips.push_back("CV 2"); | |||
| m_PluginInfo.PortTips.push_back("CV 3"); | |||
| m_PluginInfo.PortTips.push_back("CV 4"); | |||
| for (int n=0; n<MAX_CHANNELS; n++) | |||
| { | |||
| m_ChannelVal[n]=0.0f; | |||
| } | |||
| } | |||
| ControllerPlugin::~ControllerPlugin() | |||
| { | |||
| } | |||
| PluginInfo &ControllerPlugin::Initialise(const HostInfo *Host) | |||
| { | |||
| return SpiralPlugin::Initialise(Host); | |||
| } | |||
| SpiralGUIType *ControllerPlugin::CreateGUI() | |||
| { | |||
| m_GUI = new ControllerPluginGUI(m_PluginInfo.Width, | |||
| m_PluginInfo.Height, | |||
| this,m_HostInfo); | |||
| m_GUI->hide(); | |||
| return m_GUI; | |||
| } | |||
| void ControllerPlugin::Execute() | |||
| { | |||
| for(int c=0; c<m_Num; c++) | |||
| { | |||
| for (int n=0; n<m_HostInfo->BUFSIZE; n++) | |||
| { | |||
| SetOutput(c,n,m_ChannelVal[c]); | |||
| } | |||
| } | |||
| } | |||
| void ControllerPlugin::SetNum(int n) | |||
| { | |||
| // once to clear the connections with the current info | |||
| UpdatePluginInfoWithHost(); | |||
| if (m_Num<n) | |||
| { | |||
| char t[256]; | |||
| sprintf(t,"CV %d",n); | |||
| m_PluginInfo.PortTips.push_back(t); | |||
| AddOutput(); | |||
| m_PluginInfo.NumOutputs++; | |||
| } | |||
| else | |||
| { | |||
| vector<string>::iterator i=m_PluginInfo.PortTips.end(); | |||
| m_PluginInfo.PortTips.erase(i--); | |||
| RemoveOutput(); | |||
| m_PluginInfo.NumOutputs--; | |||
| } | |||
| m_Num=n; | |||
| m_PluginInfo.NumOutputs=n; | |||
| // do the actual update | |||
| UpdatePluginInfoWithHost(); | |||
| } | |||
| // use with caution | |||
| void ControllerPlugin::Clear() | |||
| { | |||
| m_PluginInfo.PortTips.clear(); | |||
| RemoveAllOutputs(); | |||
| m_PluginInfo.NumOutputs=0; | |||
| } | |||
| void ControllerPlugin::StreamOut(ostream &s) | |||
| { | |||
| s<<m_Version<<" "; | |||
| switch (m_Version) | |||
| { | |||
| case 1: | |||
| { | |||
| for (int n=0; n<4; n++) | |||
| { | |||
| s<<m_ChannelVal[n]<<" "; | |||
| } | |||
| } break; | |||
| case 2: | |||
| { | |||
| s<<m_Num<<" "; | |||
| for (int n=0; n<m_Num; n++) | |||
| { | |||
| s<<m_ChannelVal[n]<<" "; | |||
| } | |||
| //s<<*(ControllerPluginGUI*)m_GUI<<" "; | |||
| ((ControllerPluginGUI*)m_GUI)->StreamOut(s); | |||
| } break; | |||
| case 3: | |||
| { | |||
| s<<m_Num<<" "; | |||
| for (int n=0; n<m_Num; n++) | |||
| { | |||
| s<<m_ChannelVal[n]<<" "; | |||
| } | |||
| ((ControllerPluginGUI*)m_GUI)->StreamOut(s); | |||
| } break; | |||
| } | |||
| } | |||
| void ControllerPlugin::StreamIn(istream &s) | |||
| { | |||
| int version; | |||
| s>>version; | |||
| switch (version) | |||
| { | |||
| case 1: | |||
| { | |||
| for (int n=0; n<4; n++) | |||
| { | |||
| s>>m_ChannelVal[n]; | |||
| } | |||
| } break; | |||
| case 2: | |||
| { | |||
| Clear(); | |||
| s>>m_Num; | |||
| for (int n=0; n<m_Num; n++) | |||
| { | |||
| s>>m_ChannelVal[n]; | |||
| } | |||
| s>>*(ControllerPluginGUI*)m_GUI; | |||
| // add the channels one by one | |||
| for (int n=0; n<m_Num; n++) | |||
| { | |||
| char t[256]; | |||
| sprintf(t,"CV %d",n); | |||
| m_PluginInfo.PortTips.push_back(t); | |||
| AddOutput(); | |||
| } | |||
| m_PluginInfo.NumOutputs=m_Num; | |||
| UpdatePluginInfoWithHost(); | |||
| } break; | |||
| case 3: | |||
| { | |||
| Clear(); | |||
| s>>m_Num; | |||
| for (int n=0; n<m_Num; n++) | |||
| { | |||
| s>>m_ChannelVal[n]; | |||
| } | |||
| ((ControllerPluginGUI*)m_GUI)->StreamIn(s); | |||
| // add the channels one by one | |||
| for (int n=0; n<m_Num; n++) | |||
| { | |||
| char t[256]; | |||
| sprintf(t,"CV %d",n); | |||
| m_PluginInfo.PortTips.push_back(t); | |||
| AddOutput(); | |||
| } | |||
| m_PluginInfo.NumOutputs=m_Num; | |||
| UpdatePluginInfoWithHost(); | |||
| } break; | |||
| } | |||
| } | |||
| @@ -0,0 +1,53 @@ | |||
| /* SpiralSound | |||
| * Copyleft (C) 2001 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "../SpiralPlugin.h" | |||
| #include <FL/Fl_Pixmap.H> | |||
| #ifndef ControllerPLUGIN | |||
| #define ControllerPLUGIN | |||
| static const int MAX_CHANNELS = 99; | |||
| class ControllerPlugin : public SpiralPlugin | |||
| { | |||
| public: | |||
| ControllerPlugin(); | |||
| virtual ~ControllerPlugin(); | |||
| virtual PluginInfo &Initialise(const HostInfo *Host); | |||
| virtual SpiralGUIType *CreateGUI(); | |||
| virtual void Execute(); | |||
| virtual void StreamOut(ostream &s); | |||
| virtual void StreamIn(istream &s); | |||
| // has to be defined in the plugin | |||
| virtual void UpdateGUI() { Fl::check(); } | |||
| void SetChannel(int n, float s) { m_ChannelVal[n]=s; } | |||
| void SetNum(int n); | |||
| private: | |||
| void Clear(); | |||
| int m_Num; | |||
| float m_ChannelVal[MAX_CHANNELS]; | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,17 @@ | |||
| HEADERS = ../SpiralPlugin.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../../Sample.h \ | |||
| ControllerPlugin.h \ | |||
| ControllerPluginGUI.h | |||
| SOURCES = ../SpiralPlugin.C \ | |||
| ../SpiralPluginGUI.C \ | |||
| ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_DragBar.cxx \ | |||
| ../../Sample.C \ | |||
| ControllerPlugin.C \ | |||
| ControllerPluginGUI.C | |||
| TARGET = ControllerPlugin.so | |||
| @@ -0,0 +1,244 @@ | |||
| /* SpiralPlugin | |||
| * Copyleft (C) 2000 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include <stdio.h> | |||
| #include "ControllerPluginGUI.h" | |||
| #include <FL/fl_draw.h> | |||
| #include <FL/fl_draw.H> | |||
| static const int GUI_COLOUR = 179; | |||
| static const int GUIBG_COLOUR = 144; | |||
| static const int GUIBG2_COLOUR = 145; | |||
| //////////////////////////////////////////// | |||
| ControllerPluginGUI::CVGUI::CVGUI(int n, ControllerPluginGUI *p) | |||
| { | |||
| m_SliderGroup = new Fl_Group(0,0,60,153,""); | |||
| m_SliderGroup->box(FL_UP_BOX); | |||
| m_SliderGroup->user_data((void *)p); | |||
| m_Title = new Fl_Input(5,2,50,15,""); | |||
| m_Title->value("Name"); | |||
| m_Title->textsize(10); | |||
| m_SliderGroup->add(m_Title); | |||
| m_Max = new Fl_Int_Input(5,18,50,15,""); | |||
| char t[64]; | |||
| sprintf(t,"%d",1); | |||
| m_Max->value(t); | |||
| m_Max->textsize(10); | |||
| m_SliderGroup->add(m_Max); | |||
| m_Chan = new Fl_Slider(20, 34, 20, 100, ""); | |||
| m_Chan->type(4); | |||
| m_Chan->selection_color(GUI_COLOUR); | |||
| m_Chan->maximum(1); | |||
| m_Chan->step(0.01); | |||
| m_Chan->value(0.5); | |||
| m_Chan->callback((Fl_Callback*)ControllerPluginGUI::cb_Chan, | |||
| (void*)&Numbers[n]); | |||
| m_SliderGroup->add(m_Chan); | |||
| m_Min = new Fl_Int_Input(5,136,50,15,""); | |||
| char t2[64]; | |||
| sprintf(t2,"%d",-1); | |||
| m_Min->value(t2); | |||
| m_Min->textsize(10); | |||
| m_SliderGroup->add(m_Min); | |||
| } | |||
| //////////////////////////////////////////// | |||
| ControllerPluginGUI::ControllerPluginGUI(int w, int h,ControllerPlugin *o,const HostInfo *Info) : | |||
| SpiralPluginGUI(w,h,o), | |||
| m_CVCount(0) | |||
| { | |||
| m_Plugin=o; | |||
| for (int n=0; n<MAX_CHANNELS; n++) | |||
| { | |||
| Numbers[n]=n; | |||
| } | |||
| m_MainPack = new Fl_Pack(0,20,w,h-44); | |||
| m_MainPack->type(FL_HORIZONTAL); | |||
| // start with four... | |||
| AddCV(); | |||
| AddCV(); | |||
| AddCV(); | |||
| AddCV(); | |||
| m_Delete = new Fl_Button(2,h-22,20,20,"-"); | |||
| m_Delete->user_data(this); | |||
| m_Delete->callback((Fl_Callback*)cb_Delete); | |||
| add(m_Delete); | |||
| m_Add = new Fl_Button(24,h-22,20,20,"+"); | |||
| m_Add->user_data(this); | |||
| m_Add->callback((Fl_Callback*)cb_Add); | |||
| add(m_Add); | |||
| } | |||
| void ControllerPluginGUI::AddCV() | |||
| { | |||
| CVGUI *NewCV = new CVGUI(m_CVCount,this); | |||
| m_GuiVec.push_back(NewCV); | |||
| m_MainPack->add(NewCV->m_SliderGroup); | |||
| m_CVCount++; | |||
| } | |||
| void ControllerPluginGUI::DeleteCV() | |||
| { | |||
| vector<CVGUI*>::iterator i=m_GuiVec.end(); | |||
| i--; | |||
| m_MainPack->remove((*i)->m_SliderGroup); | |||
| delete *i; | |||
| m_GuiVec.erase(i); | |||
| m_CVCount--; | |||
| } | |||
| void ControllerPluginGUI::Clear() | |||
| { | |||
| for (vector<ControllerPluginGUI::CVGUI*>::iterator i=m_GuiVec.begin(); | |||
| i!=m_GuiVec.end(); i++) | |||
| { | |||
| m_MainPack->remove((*i)->m_SliderGroup); | |||
| delete *i; | |||
| } | |||
| m_GuiVec.clear(); | |||
| m_CVCount=0; | |||
| } | |||
| void ControllerPluginGUI::UpdateValues() | |||
| { | |||
| } | |||
| inline void ControllerPluginGUI::cb_Chan_i(Fl_Slider* o, void* v) | |||
| { | |||
| int num=*(int*)(v); | |||
| // swap em over, cos it's the easiqest way to reverse | |||
| // the fltk slider, which is upside down imho | |||
| long max=strtol(m_GuiVec[num]->m_Min->value(),NULL,10); | |||
| long min=strtol(m_GuiVec[num]->m_Max->value(),NULL,10); | |||
| float val=o->value()*(max-min)+min; | |||
| m_Plugin->SetChannel(num,val); | |||
| } | |||
| void ControllerPluginGUI::cb_Chan(Fl_Slider* o, void* v) | |||
| { ((ControllerPluginGUI*)(o->parent()->user_data()))->cb_Chan_i(o,v);} | |||
| inline void ControllerPluginGUI::cb_Add_i(Fl_Button* o, void* v) | |||
| { | |||
| if (m_CVCount<MAX_CHANNELS) | |||
| { | |||
| AddCV(); | |||
| resize(x(),y(),w()+60,h()); | |||
| redraw(); | |||
| m_Plugin->SetNum(m_GuiVec.size()); | |||
| } | |||
| } | |||
| void ControllerPluginGUI::cb_Add(Fl_Button* o, void* v) | |||
| { ((ControllerPluginGUI*)(o->parent()))->cb_Add_i(o,v);} | |||
| inline void ControllerPluginGUI::cb_Delete_i(Fl_Button* o, void* v) | |||
| { | |||
| if (m_GuiVec.size()>1) | |||
| { | |||
| DeleteCV(); | |||
| resize(x(),y(),w()-60,h()); | |||
| redraw(); | |||
| m_Plugin->SetNum(m_GuiVec.size()); | |||
| } | |||
| } | |||
| void ControllerPluginGUI::cb_Delete(Fl_Button* o, void* v) | |||
| { ((ControllerPluginGUI*)(o->parent()))->cb_Delete_i(o,v);} | |||
| // call for version <3 | |||
| istream &operator>>(istream &s, ControllerPluginGUI &o) | |||
| { | |||
| int c; | |||
| string Title,Min,Max; | |||
| float Val; | |||
| o.Clear(); | |||
| s>>c; | |||
| for (int n=0; n<c; n++) | |||
| { | |||
| s>>Title>>Min>>Max>>Val; | |||
| o.AddCV(); | |||
| o.m_GuiVec[n]->m_Title->value(Title.c_str()); | |||
| o.m_GuiVec[n]->m_Min->value(Min.c_str()); | |||
| o.m_GuiVec[n]->m_Max->value(Max.c_str()); | |||
| o.m_GuiVec[n]->m_Chan->value(Val); | |||
| } | |||
| o.resize(o.x(),o.y(),c*60,o.h()); | |||
| return s; | |||
| } | |||
| // call for version >=3 | |||
| // another version of the stream to fix the old style string streaming problem | |||
| void ControllerPluginGUI::StreamIn(istream &s) | |||
| { | |||
| int c,version,size; | |||
| string Title,Min,Max; | |||
| float Val; | |||
| char Buf[4096]; | |||
| Clear(); | |||
| s>>version; | |||
| s>>c; | |||
| for (int n=0; n<c; n++) | |||
| { | |||
| AddCV(); | |||
| s>>size; | |||
| s.ignore(1); | |||
| s.get(Buf,size+1); | |||
| m_GuiVec[n]->m_Title->value(Buf); | |||
| s>>Min>>Max>>Val; | |||
| m_GuiVec[n]->m_Min->value(Min.c_str()); | |||
| m_GuiVec[n]->m_Max->value(Max.c_str()); | |||
| m_GuiVec[n]->m_Chan->value(Val); | |||
| } | |||
| resize(x(),y(),c*60,h()); | |||
| } | |||
| void ControllerPluginGUI::StreamOut(ostream &s) | |||
| { | |||
| // version | |||
| s<<1<<endl; | |||
| s<<m_GuiVec.size()<<endl; | |||
| for (vector<ControllerPluginGUI::CVGUI*>::iterator i=m_GuiVec.begin(); | |||
| i!=m_GuiVec.end(); i++) | |||
| { | |||
| s<<strlen((*i)->m_Title->value())<<endl; | |||
| s<<(*i)->m_Title->value()<<" "; | |||
| s<<(*i)->m_Min->value()<<" "; | |||
| s<<(*i)->m_Max->value()<<" "; | |||
| s<<(*i)->m_Chan->value()<<endl; | |||
| } | |||
| } | |||
| @@ -0,0 +1,90 @@ | |||
| /* SpiralPlugin | |||
| * Copyleft (C) 2000 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include <FL/Fl.H> | |||
| #include <FL/Fl_Window.H> | |||
| #include <FL/Fl_Button.H> | |||
| #include <FL/Fl_Group.H> | |||
| #include <FL/Fl_Pack.H> | |||
| #include <FL/Fl_Int_Input.H> | |||
| #include <FL/Fl_Input.H> | |||
| #include <FL/Fl_Slider.H> | |||
| #include "ControllerPlugin.h" | |||
| #include "../SpiralPluginGUI.h" | |||
| #ifndef MixerGUI | |||
| #define MixerGUI | |||
| static int Numbers[MAX_CHANNELS]; | |||
| class ControllerPluginGUI : public SpiralPluginGUI | |||
| { | |||
| public: | |||
| ControllerPluginGUI(int w, int h, ControllerPlugin *o,const HostInfo *Info); | |||
| virtual void UpdateValues(); | |||
| virtual SpiralPlugin* GetPlugin() { return m_Plugin; } | |||
| ControllerPlugin *m_Plugin; | |||
| void StreamIn(istream &s); | |||
| void StreamOut(ostream &s); | |||
| private: | |||
| void Clear(); | |||
| class CVGUI | |||
| { | |||
| public: | |||
| CVGUI::CVGUI(int n, ControllerPluginGUI *p); | |||
| Fl_Group *m_SliderGroup; | |||
| Fl_Input *m_Title; | |||
| Fl_Int_Input *m_Min; | |||
| Fl_Int_Input *m_Max; | |||
| Fl_Slider *m_Chan; | |||
| }; | |||
| friend class CVGUI; | |||
| Fl_Pack *m_MainPack; | |||
| Fl_Button *m_Add; | |||
| Fl_Button *m_Delete; | |||
| vector<CVGUI*> m_GuiVec; | |||
| void AddCV(); | |||
| void DeleteCV(); | |||
| int m_CVCount; | |||
| //// Callbacks //// | |||
| inline void cb_Chan_i(Fl_Slider* o, void* v); | |||
| static void cb_Chan(Fl_Slider* o, void* v); | |||
| inline void cb_Add_i(Fl_Button* o, void* v); | |||
| static void cb_Add(Fl_Button* o, void* v); | |||
| inline void cb_Delete_i(Fl_Button* o, void* v); | |||
| static void cb_Delete(Fl_Button* o, void* v); | |||
| friend istream &operator>>(istream &s, ControllerPluginGUI &o); | |||
| }; | |||
| istream &operator>>(istream &s, ControllerPluginGUI &o); | |||
| #endif | |||
| @@ -0,0 +1,164 @@ | |||
| ############################################################################# | |||
| # Makefile for building ControllerPlugin.so | |||
| # Generated by tmake at 22:13, 2001/09/17 | |||
| # Project: ControllerPlugin | |||
| # Template: app | |||
| ############################################################################# | |||
| ####### Compiler, tools and options | |||
| CC = gcc | |||
| CXX = g++ | |||
| CFLAGS = @CFLAGS@ | |||
| CXXFLAGS= @CXXFLAGS@ | |||
| INCPATH = -I/usr/X11R6/include | |||
| LINK = g++ -shared | |||
| LFLAGS = | |||
| LIBS = -L/usr/X11R6/lib -lfltk -lGL -lXext -lX11 -lm -ldl | |||
| MOC = moc | |||
| UIC = | |||
| TAR = tar -cf | |||
| GZIP = gzip -9f | |||
| INSTALL = @INSTALL@ | |||
| ###### Autoconf variables | |||
| prefix = @prefix@ | |||
| exec_prefix = @exec_prefix@ | |||
| bindir = @bindir@ | |||
| sbindir = @sbindir@ | |||
| libexecdir = @libexecdir@ | |||
| datadir = @datadir@ | |||
| sysconfdir = @sysconfdir@ | |||
| sharedstatedir = @sharedstatedir@ | |||
| localstatedir = @localstatedir@ | |||
| libdir = @libdir@ | |||
| infodir = @infodir@ | |||
| mandir = @mandir@ | |||
| ####### Files | |||
| HEADERS = ../SpiralPlugin.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../../Sample.h \ | |||
| ControllerPlugin.h \ | |||
| ControllerPluginGUI.h | |||
| SOURCES = ../SpiralPlugin.C \ | |||
| ../SpiralPluginGUI.C \ | |||
| ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_DragBar.cxx \ | |||
| ../../Sample.C \ | |||
| ControllerPlugin.C \ | |||
| ControllerPluginGUI.C | |||
| OBJECTS = ../SpiralPlugin.o \ | |||
| ../SpiralPluginGUI.o \ | |||
| ../Widgets/Fl_Knob.o \ | |||
| ../Widgets/Fl_DragBar.o \ | |||
| ../../Sample.o \ | |||
| ControllerPlugin.o \ | |||
| ControllerPluginGUI.o | |||
| INTERFACES = | |||
| UICDECLS = | |||
| UICIMPLS = | |||
| SRCMOC = | |||
| OBJMOC = | |||
| DIST = | |||
| TARGET = ControllerPlugin.so | |||
| ####### Implicit rules | |||
| .SUFFIXES: .cpp .cxx .cc .C .c | |||
| .cpp.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .cxx.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .cc.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .C.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .c.o: | |||
| $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< | |||
| ####### Build rules | |||
| all: $(TARGET) | |||
| $(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) | |||
| $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS) | |||
| moc: $(SRCMOC) | |||
| tmake: | |||
| tmake ControllerPlugin.pro | |||
| dist: | |||
| $(TAR) ControllerPlugin.tar ControllerPlugin.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST) | |||
| $(GZIP) ControllerPlugin.tar | |||
| clean: | |||
| -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET) | |||
| -rm -f *~ core | |||
| install: | |||
| $(INSTALL) $(TARGET) $(libdir)/SpiralPlugins | |||
| ####### Sub-libraries | |||
| ###### Combined headers | |||
| ####### Compile | |||
| ../SpiralPlugin.o: ../SpiralPlugin.C \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h | |||
| ../SpiralPluginGUI.o: ../SpiralPluginGUI.C \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h | |||
| ../Widgets/Fl_Knob.o: ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_Knob.H | |||
| ../Widgets/Fl_DragBar.o: ../Widgets/Fl_DragBar.cxx \ | |||
| ../Widgets/Fl_DragBar.H | |||
| ../../Sample.o: ../../Sample.C \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h | |||
| ControllerPlugin.o: ControllerPlugin.C \ | |||
| ControllerPlugin.h \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h \ | |||
| ../../Sample.h \ | |||
| ControllerPluginGUI.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| SpiralIcon.xpm | |||
| ControllerPluginGUI.o: ControllerPluginGUI.C \ | |||
| ControllerPluginGUI.h \ | |||
| ControllerPlugin.h \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h \ | |||
| ../../Sample.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H | |||
| @@ -0,0 +1,352 @@ | |||
| /* XPM */ | |||
| static char * SpiralIcon_xpm[] = { | |||
| "36 36 313 2", | |||
| " c None", | |||
| ". c #8B889B", | |||
| "+ c #9C99AA", | |||
| "@ c #ADAAB9", | |||
| "# c #837F94", | |||
| "$ c #7D7990", | |||
| "% c #9995A7", | |||
| "& c #67627C", | |||
| "* c #CDCBD4", | |||
| "= c #FCFCFC", | |||
| "- c #D1D0D8", | |||
| "; c #FFFFFF", | |||
| "> c #F1F1F3", | |||
| ", c #848095", | |||
| "' c #2A2248", | |||
| ") c #CFCED6", | |||
| "! c #68637D", | |||
| "~ c #ABA8B6", | |||
| "{ c #D5D3DB", | |||
| "] c #9490A2", | |||
| "^ c #C4C4C4", | |||
| "/ c #1D1C1D", | |||
| "( c #313134", | |||
| "_ c #EEEFEE", | |||
| ": c #FBFBFB", | |||
| "< c #EFEFEF", | |||
| "[ c #7B768D", | |||
| "} c #464060", | |||
| "| c #DEDEE1", | |||
| "1 c #CBCACC", | |||
| "2 c #EEEEF1", | |||
| "3 c #79758C", | |||
| "4 c #FBFBFC", | |||
| "5 c #A2A2A2", | |||
| "6 c #000000", | |||
| "7 c #F5F6F5", | |||
| "8 c #747474", | |||
| "9 c #2A2A2B", | |||
| "0 c #403958", | |||
| "a c #7D788F", | |||
| "b c #C0BEC8", | |||
| "c c #BCBAC6", | |||
| "d c #BCBAC5", | |||
| "e c #625C79", | |||
| "f c #2B2932", | |||
| "g c #191919", | |||
| "h c #CCCCCC", | |||
| "i c #807B91", | |||
| "j c #3B3556", | |||
| "k c #F2F2F4", | |||
| "l c #929292", | |||
| "m c #0E0E0E", | |||
| "n c #BFBFBF", | |||
| "o c #111111", | |||
| "p c #100E15", | |||
| "q c #868689", | |||
| "r c #FEFDFE", | |||
| "s c #D9D7DE", | |||
| "t c #9C98AA", | |||
| "u c #FDFCFD", | |||
| "v c #DDDDDD", | |||
| "w c #575755", | |||
| "x c #5E5E5E", | |||
| "y c #C4C2CD", | |||
| "z c #423C5C", | |||
| "A c #F0F0F2", | |||
| "B c #939393", | |||
| "C c #555555", | |||
| "D c #4A4A4A", | |||
| "E c #010101", | |||
| "F c #282828", | |||
| "G c #C2C2C2", | |||
| "H c #DBDAE0", | |||
| "I c #615C78", | |||
| "J c #F6F6F7", | |||
| "K c #DADADA", | |||
| "L c #545454", | |||
| "M c #0F0F0F", | |||
| "N c #B8B8B8", | |||
| "O c #48445C", | |||
| "P c #2B2B2C", | |||
| "Q c #181900", | |||
| "R c #D3D3D3", | |||
| "S c #C1BEC9", | |||
| "T c #474060", | |||
| "U c #31294D", | |||
| "V c #716C85", | |||
| "W c #65607A", | |||
| "X c #625D78", | |||
| "Y c #D5D4DB", | |||
| "Z c #F7F7F7", | |||
| "` c #8B8B8B", | |||
| " . c #161616", | |||
| ".. c #0A0A0A", | |||
| "+. c #151700", | |||
| "@. c #1A1B00", | |||
| "#. c #060600", | |||
| "$. c #191A00", | |||
| "%. c #393643", | |||
| "&. c #47415F", | |||
| "*. c #9692A4", | |||
| "=. c #D9D8DE", | |||
| "-. c #F7F7F8", | |||
| ";. c #918DA0", | |||
| ">. c #B8B5C1", | |||
| ",. c #D1D1D1", | |||
| "'. c #212121", | |||
| "). c #282900", | |||
| "!. c #030300", | |||
| "~. c #070700", | |||
| "{. c #020200", | |||
| "]. c #727175", | |||
| "^. c #FEFEFF", | |||
| "/. c #9D99AA", | |||
| "(. c #DBD9E0", | |||
| "_. c #E9E9E9", | |||
| ":. c #CBCBCB", | |||
| "<. c #E0E0E0", | |||
| "[. c #6C6C6C", | |||
| "}. c #515151", | |||
| "|. c #A6A6A7", | |||
| "1. c #827E93", | |||
| "2. c #615C77", | |||
| "3. c #EAEAED", | |||
| "4. c #DFDFE1", | |||
| "5. c #0C0C0C", | |||
| "6. c #645E00", | |||
| "7. c #F9EC00", | |||
| "8. c #FDF100", | |||
| "9. c #FDF000", | |||
| "0. c #807900", | |||
| "a. c #E0D400", | |||
| "b. c #191700", | |||
| "c. c #1E1D24", | |||
| "d. c #9894A7", | |||
| "e. c #B1AEBB", | |||
| "f. c #69686F", | |||
| "g. c #000001", | |||
| "h. c #EFE200", | |||
| "i. c #FCEF00", | |||
| "j. c #CBC000", | |||
| "k. c #8E8600", | |||
| "l. c #1E1C00", | |||
| "m. c #F3E600", | |||
| "n. c #615C76", | |||
| "o. c #5F5A75", | |||
| "p. c #413E4D", | |||
| "q. c #020203", | |||
| "r. c #010100", | |||
| "s. c #FEF100", | |||
| "t. c #8C8400", | |||
| "u. c #CCC100", | |||
| "v. c #D0C500", | |||
| "w. c #1A1A1C", | |||
| "x. c #C3C1CB", | |||
| "y. c #9D9D9D", | |||
| "z. c #202020", | |||
| "A. c #383838", | |||
| "B. c #4C4C4C", | |||
| "C. c #FFF200", | |||
| "D. c #060500", | |||
| "E. c #534E00", | |||
| "F. c #111112", | |||
| "G. c #C9C7D0", | |||
| "H. c #F1F1F1", | |||
| "I. c #F8F8F8", | |||
| "J. c #232323", | |||
| "K. c #736D00", | |||
| "L. c #F2E500", | |||
| "M. c #050408", | |||
| "N. c #AEACB9", | |||
| "O. c #FEFEFE", | |||
| "P. c #1D1D1D", | |||
| "Q. c #E4D800", | |||
| "R. c #C1B700", | |||
| "S. c #DDD100", | |||
| "T. c #9A9200", | |||
| "U. c #FAED00", | |||
| "V. c #A9A000", | |||
| "W. c #B7B5C1", | |||
| "X. c #9390A2", | |||
| "Y. c #BBBBBB", | |||
| "Z. c #414141", | |||
| "`. c #030303", | |||
| " + c #C6BB00", | |||
| ".+ c #7E7700", | |||
| "++ c #28272A", | |||
| "@+ c #F4F4F6", | |||
| "#+ c #605B76", | |||
| "$+ c #736E86", | |||
| "%+ c #D8D8D8", | |||
| "&+ c #727272", | |||
| "*+ c #101010", | |||
| "=+ c #848486", | |||
| "-+ c #CCCBD3", | |||
| ";+ c #747087", | |||
| ">+ c #6D6881", | |||
| ",+ c #1C1C1C", | |||
| "'+ c #242424", | |||
| ")+ c #212205", | |||
| "!+ c #1B1D00", | |||
| "~+ c #000100", | |||
| "{+ c #656566", | |||
| "]+ c #F6F6F6", | |||
| "^+ c #E8E6EA", | |||
| "/+ c #706B84", | |||
| "(+ c #E3E1E6", | |||
| "_+ c #474746", | |||
| ":+ c #151515", | |||
| "<+ c #C8C8C8", | |||
| "[+ c #AEAEAE", | |||
| "}+ c #070707", | |||
| "|+ c #373639", | |||
| "1+ c #FDFCFE", | |||
| "2+ c #ABA8B7", | |||
| "3+ c #F1F0F3", | |||
| "4+ c #6D6980", | |||
| "5+ c #0A090E", | |||
| "6+ c #95929E", | |||
| "7+ c #0A0810", | |||
| "8+ c #0D0D0D", | |||
| "9+ c #050505", | |||
| "0+ c #5B5A5C", | |||
| "a+ c #F7F6F7", | |||
| "b+ c #F4F3F5", | |||
| "c+ c #908C9F", | |||
| "d+ c #C8C6D0", | |||
| "e+ c #837E96", | |||
| "f+ c #86868A", | |||
| "g+ c #070608", | |||
| "h+ c #ECEBEE", | |||
| "i+ c #5B5571", | |||
| "j+ c #646078", | |||
| "k+ c #AFAFB0", | |||
| "l+ c #454545", | |||
| "m+ c #363636", | |||
| "n+ c #7A7A7A", | |||
| "o+ c #C8C8C9", | |||
| "p+ c #212025", | |||
| "q+ c #060607", | |||
| "r+ c #969699", | |||
| "s+ c #FAFAFA", | |||
| "t+ c #F8F8F9", | |||
| "u+ c #A29EAF", | |||
| "v+ c #F7F6F8", | |||
| "w+ c #F0F0F1", | |||
| "x+ c #B8B7B9", | |||
| "y+ c #E4E4E4", | |||
| "z+ c #FDFDFD", | |||
| "A+ c #A5A2B2", | |||
| "B+ c #3B3456", | |||
| "C+ c #A8A5B4", | |||
| "D+ c #525252", | |||
| "E+ c #848387", | |||
| "F+ c #CDCDCD", | |||
| "G+ c #8D899C", | |||
| "H+ c #494262", | |||
| "I+ c #68627C", | |||
| "J+ c #40395A", | |||
| "K+ c #ECECEC", | |||
| "L+ c #020202", | |||
| "M+ c #B4B5B5", | |||
| "N+ c #0B0B0B", | |||
| "O+ c #313232", | |||
| "P+ c #E3E3E3", | |||
| "Q+ c #B1AEBC", | |||
| "R+ c #BDBBC6", | |||
| "S+ c #3C3556", | |||
| "T+ c #898599", | |||
| "U+ c #EDEDED", | |||
| "V+ c #39393A", | |||
| "W+ c #040404", | |||
| "X+ c #333333", | |||
| "Y+ c #F5F5F5", | |||
| "Z+ c #2B2B2B", | |||
| "`+ c #2D2A3D", | |||
| " @ c #B6B4C1", | |||
| ".@ c #F5F5F6", | |||
| "+@ c #605A76", | |||
| "@@ c #DAD8DF", | |||
| "#@ c #F5F4F6", | |||
| "$@ c #615B76", | |||
| "%@ c #524D6A", | |||
| "&@ c #E4E3E8", | |||
| "*@ c #D5D5D5", | |||
| "=@ c #1B1B1B", | |||
| "-@ c #303030", | |||
| ";@ c #AAABAB", | |||
| ">@ c #585464", | |||
| ",@ c #B0AEBB", | |||
| "'@ c #A29FAF", | |||
| ")@ c #E9E8E9", | |||
| "!@ c #787779", | |||
| "~@ c #0F0E15", | |||
| "{@ c #2D2D2E", | |||
| "]@ c #595959", | |||
| "^@ c #FAFAFB", | |||
| "/@ c #807B92", | |||
| "(@ c #B0ADBB", | |||
| "_@ c #E8E7EB", | |||
| ":@ c #3A3258", | |||
| "<@ c #E6E5EA", | |||
| "[@ c #DFDEE3", | |||
| "}@ c #443E5E", | |||
| "|@ c #BAB8C4", | |||
| "1@ c #C1BFCA", | |||
| "2@ c #E0E0E5", | |||
| "3@ c #D0CED6", | |||
| "4@ c #362F52", | |||
| "5@ c #CECCD5", | |||
| "6@ c #413A5B", | |||
| "7@ c #6A657F", | |||
| "8@ c #9793A6", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " . + @ # $ % ", | |||
| " & * = * - ; > , ' ; ; ; ) ! ", | |||
| " ~ ; ; { ] ; ^ / ( _ ; : < [ ", | |||
| " } | 1 2 3 4 5 6 6 7 : 8 9 0 a b ", | |||
| " c : d e f g h i j k l 6 m ; n o 6 p q r s ", | |||
| " t u ; v w 6 6 x y z A B 6 C ; D E 6 F G ; H ", | |||
| " I J ; ; K L 6 6 M N O P E 6 6 6 Q Q M R S T U V W ", | |||
| " X Y ; ; ; ; Z ` .6 ..6 6 6 6 6 +.@.#.$.%.&.*.=.-.;. ", | |||
| " >.; ; ; ; ; ; = ,.'.).!.6 6 6 ~.{.6 6 6 E ].^.; ; /. ", | |||
| " (.; ; _.R h :.<.[.6 !.6 6 6 6 6 6 6 6 6 6 E }.|.4 1. ", | |||
| " 2.3.; 4.5.6 6 6 6 6 6 6.7.8.9.0.6 a.6.6 6.a.b.6 c.d. ", | |||
| " V @ e.f.g.6 6 6 6 6 {.h.i.j.k.l.6 m.a.6 a.7.b.6 ", | |||
| " n.o.p.6 q.6 6 6 6 r.s.t.6 6 6 6 u.i.6 s.v.6 6 w. ", | |||
| " x.; ; y.z.z.A.B.z.6 6 C.D.6 6 6 6 l.C.E.C.l.6 6 F. ", | |||
| " G.; ; H.I.; ; ; J.6 6 s.K.6 6 6 6 6 s.L.L.6 6 6 M. ", | |||
| " N.; ; ; ; O.; ; P.6 6 Q.s.R.S.T.6 6 U.C.V.6 6 6 6 W., ", | |||
| " X.; ; O.; : Y.Z.`.6 6 6 +9.s..+6 6 u.C.D.6 6 6 ++O.@+#+ ", | |||
| " $+; ; ; %+&+*+6 6 6 6 6 6 6 6 6 6 6 6 {.6 6 6 6 =+; ; -+;+ ", | |||
| " >+J ; : ,+6 6 6 6 '+)+!+6 ~+6 6 6 6 6 6 6 6 6 6 {+]+; ; ^+/+ ", | |||
| " (+; ; _+6 E 6 :+<+[+}+6 6 6 6 6 6 6 6 r.6 6 6 6 |+1+; ; > /+ ", | |||
| " 2+; 3+4+5+6 6 [+O.; 6+7+6 6 6 6 6 6 6 6 8+9+6 6 6 0+a+; ; b+c+ ", | |||
| " /+d+! e+f+g+x ; ; h+i+j+k+l l+6 6 6 m+n+o+p+6 6 6 q+r+s+; ; t+@ ", | |||
| " u+v+w+x+y+z+; A+B+C+; ]+l+6 6 E D+; ; E+6 6 E 6 o F+; ; = G+ ", | |||
| " H+> ; ; ; ; ; ; I+J+; ; K+A.6 6 L+D ; ; M+N+6 6 6 O+P+; ; Q+ ", | |||
| " > ; ; ; ; R+S+T+; ; U+V+6 6 W+X+; ; Y+Z+6 6 `+ @; .@3 ", | |||
| " +@@@= ; #@$@%@&@; ; *@=@6 6 L+-@; ; ; ;@D+>@ ", | |||
| " ,@4 '@ X ; ; ; )@!@-@~@{@]@; ; ; O.^@/@ ", | |||
| " (@; ; ; ; ; _@:@<@; ; ; ; = [@}@ ", | |||
| " |@1@2@4 ; ; 3@4@5@; ; ; s T+T ", | |||
| " 6@ 7@8@T+ ", | |||
| " ", | |||
| " ", | |||
| " "}; | |||
| @@ -0,0 +1,141 @@ | |||
| /* SpiralSound | |||
| * Copyleft (C) 2001 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "DelayPlugin.h" | |||
| #include "DelayPluginGUI.h" | |||
| #include <FL/Fl_Button.h> | |||
| #include "SpiralIcon.xpm" | |||
| static const float MAX_DELAY=1.0f; | |||
| extern "C" { | |||
| SpiralPlugin* CreateInstance() | |||
| { | |||
| return new DelayPlugin; | |||
| } | |||
| char** GetIcon() | |||
| { | |||
| return SpiralIcon_xpm; | |||
| } | |||
| int GetID() | |||
| { | |||
| return 0x000f; | |||
| } | |||
| } | |||
| /////////////////////////////////////////////////////// | |||
| DelayPlugin::DelayPlugin() : | |||
| m_Delay(0.75), | |||
| m_Mix(0.4), | |||
| m_ReadHeadPos(0), | |||
| m_WriteHeadPos(0) | |||
| { | |||
| m_PluginInfo.Name="Delay"; | |||
| m_PluginInfo.Width=120; | |||
| m_PluginInfo.Height=110; | |||
| m_PluginInfo.NumInputs=3; | |||
| m_PluginInfo.NumOutputs=1; | |||
| m_PluginInfo.PortTips.push_back("Input"); | |||
| m_PluginInfo.PortTips.push_back("Delay CV"); | |||
| m_PluginInfo.PortTips.push_back("ReadHead CV"); | |||
| m_PluginInfo.PortTips.push_back("Output"); | |||
| } | |||
| DelayPlugin::~DelayPlugin() | |||
| { | |||
| } | |||
| PluginInfo &DelayPlugin::Initialise(const HostInfo *Host) | |||
| { | |||
| PluginInfo& Info = SpiralPlugin::Initialise(Host); | |||
| m_Buffer.Allocate((int)(m_HostInfo->SAMPLERATE*MAX_DELAY)); | |||
| return Info; | |||
| } | |||
| SpiralGUIType *DelayPlugin::CreateGUI() | |||
| { | |||
| m_GUI = new DelayPluginGUI(m_PluginInfo.Width, | |||
| m_PluginInfo.Height, | |||
| this,m_HostInfo); | |||
| m_GUI->hide(); | |||
| return m_GUI; | |||
| } | |||
| void DelayPlugin::Execute() | |||
| { | |||
| int Delay; | |||
| for (int n=0; n<m_HostInfo->BUFSIZE; n++) | |||
| { | |||
| Delay=(int)((m_Delay+GetInput(1,n)*0.5f)*(float)m_HostInfo->SAMPLERATE); | |||
| if (Delay>=MAX_DELAY*m_HostInfo->SAMPLERATE) | |||
| { | |||
| Delay=(int)(MAX_DELAY*m_HostInfo->SAMPLERATE)-1; | |||
| } | |||
| if (Delay<0) Delay=0; | |||
| if (m_ReadHeadPos<0 || m_ReadHeadPos>=MAX_DELAY*m_HostInfo->SAMPLERATE) | |||
| cerr<<"read agh! "<<m_ReadHeadPos<<endl; | |||
| if (m_WriteHeadPos<0 || m_WriteHeadPos>=MAX_DELAY*m_HostInfo->SAMPLERATE) | |||
| cerr<<"write agh! "<<m_WriteHeadPos<<endl; | |||
| // Read from the buffer | |||
| SetOutput(0,n,m_Buffer[m_ReadHeadPos]+m_Mix*GetInput(0,n)); | |||
| // Write to the buffer | |||
| m_Buffer.Set((int)m_WriteHeadPos,GetInput(0,n)); | |||
| m_WriteHeadPos++; | |||
| m_ReadHeadPos=m_WriteHeadPos+GetInput(2,n)*Delay; | |||
| if (m_ReadHeadPos<0) m_ReadHeadPos=Delay+m_ReadHeadPos; | |||
| if (m_WriteHeadPos<0) m_WriteHeadPos=Delay+m_WriteHeadPos; | |||
| if (Delay>0) | |||
| { | |||
| if (m_ReadHeadPos>=Delay) m_ReadHeadPos=m_ReadHeadPos-Delay; | |||
| if (m_WriteHeadPos>=Delay) m_WriteHeadPos=m_WriteHeadPos-Delay; | |||
| } | |||
| else | |||
| { | |||
| m_ReadHeadPos=0; | |||
| m_WriteHeadPos=0; | |||
| } | |||
| } | |||
| } | |||
| void DelayPlugin::Randomise() | |||
| { | |||
| } | |||
| void DelayPlugin::StreamOut(ostream &s) | |||
| { | |||
| s<<m_Version<<" "<<m_Delay<<" "<<m_Mix<<" "; | |||
| } | |||
| void DelayPlugin::StreamIn(istream &s) | |||
| { | |||
| int version; | |||
| s>>version; | |||
| s>>m_Delay>>m_Mix; | |||
| } | |||
| @@ -0,0 +1,63 @@ | |||
| /* SpiralSound | |||
| * Copyleft (C) 2001 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "../SpiralPlugin.h" | |||
| #include <FL/Fl_Pixmap.H> | |||
| #ifndef DelayPLUGIN | |||
| #define DelayPLUGIN | |||
| class DelayPlugin : public SpiralPlugin | |||
| { | |||
| public: | |||
| DelayPlugin(); | |||
| virtual ~DelayPlugin(); | |||
| virtual PluginInfo &Initialise(const HostInfo *Host); | |||
| virtual SpiralGUIType *CreateGUI(); | |||
| virtual void Execute(); | |||
| virtual void StreamOut(ostream &s); | |||
| virtual void StreamIn(istream &s); | |||
| // has to be defined in the plugin | |||
| virtual void UpdateGUI() { Fl::check(); } | |||
| void SetDelay(float s) { m_Delay=s; } | |||
| void SetMix(float s) { m_Mix=s; } | |||
| float GetDelay() { return m_Delay; } | |||
| float GetMix() { return m_Mix; } | |||
| void Randomise(); | |||
| private: | |||
| float m_Delay; | |||
| float m_Mix; | |||
| float m_ReadHeadPos; | |||
| float m_WriteHeadPos; | |||
| Sample m_Buffer; | |||
| friend istream &operator>>(istream &s, DelayPlugin &o); | |||
| friend ostream &operator<<(ostream &s, DelayPlugin &o); | |||
| }; | |||
| istream &operator>>(istream &s, DelayPlugin &o); | |||
| ostream &operator<<(ostream &s, DelayPlugin &o); | |||
| #endif | |||
| @@ -0,0 +1,17 @@ | |||
| HEADERS = ../SpiralPlugin.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../../Sample.h \ | |||
| DelayPlugin.h \ | |||
| DelayPluginGUI.h | |||
| SOURCES = ../SpiralPlugin.C \ | |||
| ../SpiralPluginGUI.C \ | |||
| ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_DragBar.cxx \ | |||
| ../../Sample.C \ | |||
| DelayPlugin.C \ | |||
| DelayPluginGUI.C | |||
| TARGET = DelayPlugin.so | |||
| @@ -0,0 +1,72 @@ | |||
| /* SpiralPlugin | |||
| * Copyleft (C) 2000 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "DelayPluginGUI.h" | |||
| #include <FL/fl_draw.h> | |||
| #include <FL/fl_draw.H> | |||
| static const int GUI_COLOUR = 179; | |||
| static const int GUIBG_COLOUR = 144; | |||
| static const int GUIBG2_COLOUR = 145; | |||
| //////////////////////////////////////////// | |||
| DelayPluginGUI::DelayPluginGUI(int w, int h,DelayPlugin *o,const HostInfo *Info) : | |||
| SpiralPluginGUI(w,h,o) | |||
| { | |||
| m_Plugin=o; | |||
| m_Delay = new Fl_Slider(15, 20, 20, 70, "Delay"); | |||
| m_Delay->type(4); | |||
| m_Delay->selection_color(GUI_COLOUR); | |||
| m_Delay->labelsize(10); | |||
| m_Delay->maximum(1); | |||
| m_Delay->step(0.001); | |||
| m_Delay->value(0.5); | |||
| m_Delay->callback((Fl_Callback*)cb_Delay); | |||
| m_Mix = new Fl_Knob(58, 28, 45, 45, "Mix"); | |||
| m_Mix->color(GUI_COLOUR); | |||
| m_Mix->type(Fl_Knob::DOTLIN); | |||
| m_Mix->labelsize(10); | |||
| m_Mix->maximum(1); | |||
| m_Mix->step(0.01); | |||
| m_Mix->value(0); | |||
| m_Mix->callback((Fl_Callback*)cb_Mix); | |||
| end(); | |||
| } | |||
| void DelayPluginGUI::UpdateValues() | |||
| { | |||
| m_Delay->value(m_Plugin->GetDelay()-5.0f); | |||
| m_Mix->value(m_Plugin->GetMix()); | |||
| } | |||
| inline void DelayPluginGUI::cb_Delay_i(Fl_Slider* o, void* v) | |||
| { | |||
| float value=1.0f-o->value(); | |||
| m_Plugin->SetDelay(value); | |||
| } | |||
| void DelayPluginGUI::cb_Delay(Fl_Slider* o, void* v) | |||
| { ((DelayPluginGUI*)(o->parent()))->cb_Delay_i(o,v); } | |||
| inline void DelayPluginGUI::cb_Mix_i(Fl_Knob* o, void* v) | |||
| { m_Plugin->SetMix(o->value()); } | |||
| void DelayPluginGUI::cb_Mix(Fl_Knob* o, void* v) | |||
| { ((DelayPluginGUI*)(o->parent()))->cb_Mix_i(o,v); } | |||
| @@ -0,0 +1,56 @@ | |||
| /* SpiralPlugin | |||
| * Copyleft (C) 2000 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include <FL/Fl.H> | |||
| #include <FL/Fl_Window.H> | |||
| #include <FL/Fl_Group.H> | |||
| #include <FL/Fl_Slider.H> | |||
| #include "DelayPlugin.h" | |||
| #include "../SpiralPluginGUI.h" | |||
| #include "../Widgets/Fl_Knob.H" | |||
| #ifndef FilterGUI | |||
| #define FilterGUI | |||
| class DelayPluginGUI : public SpiralPluginGUI | |||
| { | |||
| public: | |||
| DelayPluginGUI(int w, int h, DelayPlugin *o,const HostInfo *Info); | |||
| virtual void UpdateValues(); | |||
| virtual SpiralPlugin* GetPlugin() { return m_Plugin; } | |||
| DelayPlugin *m_Plugin; | |||
| private: | |||
| Fl_Slider *m_Delay; | |||
| Fl_Knob *m_Mix; | |||
| //// Callbacks //// | |||
| inline void cb_Delay_i(Fl_Slider* o, void* v); | |||
| static void cb_Delay(Fl_Slider*, void*); | |||
| inline void cb_Mix_i(Fl_Knob* o, void* v); | |||
| static void cb_Mix(Fl_Knob* o, void* v); | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,166 @@ | |||
| ############################################################################# | |||
| # Makefile for building DelayPlugin.so | |||
| # Generated by tmake at 22:13, 2001/09/17 | |||
| # Project: DelayPlugin | |||
| # Template: app | |||
| ############################################################################# | |||
| ####### Compiler, tools and options | |||
| CC = gcc | |||
| CXX = g++ | |||
| CFLAGS = @CFLAGS@ | |||
| CXXFLAGS= @CXXFLAGS@ | |||
| INCPATH = -I/usr/X11R6/include | |||
| LINK = g++ -shared | |||
| LFLAGS = | |||
| LIBS = -L/usr/X11R6/lib -lfltk -lGL -lXext -lX11 -lm -ldl | |||
| MOC = moc | |||
| UIC = | |||
| TAR = tar -cf | |||
| GZIP = gzip -9f | |||
| INSTALL = @INSTALL@ | |||
| ###### Autoconf variables | |||
| prefix = @prefix@ | |||
| exec_prefix = @exec_prefix@ | |||
| bindir = @bindir@ | |||
| sbindir = @sbindir@ | |||
| libexecdir = @libexecdir@ | |||
| datadir = @datadir@ | |||
| sysconfdir = @sysconfdir@ | |||
| sharedstatedir = @sharedstatedir@ | |||
| localstatedir = @localstatedir@ | |||
| libdir = @libdir@ | |||
| infodir = @infodir@ | |||
| mandir = @mandir@ | |||
| ####### Files | |||
| HEADERS = ../SpiralPlugin.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../../Sample.h \ | |||
| DelayPlugin.h \ | |||
| DelayPluginGUI.h | |||
| SOURCES = ../SpiralPlugin.C \ | |||
| ../SpiralPluginGUI.C \ | |||
| ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_DragBar.cxx \ | |||
| ../../Sample.C \ | |||
| DelayPlugin.C \ | |||
| DelayPluginGUI.C | |||
| OBJECTS = ../SpiralPlugin.o \ | |||
| ../SpiralPluginGUI.o \ | |||
| ../Widgets/Fl_Knob.o \ | |||
| ../Widgets/Fl_DragBar.o \ | |||
| ../../Sample.o \ | |||
| DelayPlugin.o \ | |||
| DelayPluginGUI.o | |||
| INTERFACES = | |||
| UICDECLS = | |||
| UICIMPLS = | |||
| SRCMOC = | |||
| OBJMOC = | |||
| DIST = | |||
| TARGET = DelayPlugin.so | |||
| ####### Implicit rules | |||
| .SUFFIXES: .cpp .cxx .cc .C .c | |||
| .cpp.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .cxx.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .cc.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .C.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .c.o: | |||
| $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< | |||
| ####### Build rules | |||
| all: $(TARGET) | |||
| $(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) | |||
| $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS) | |||
| moc: $(SRCMOC) | |||
| tmake: | |||
| tmake DelayPlugin.pro | |||
| dist: | |||
| $(TAR) DelayPlugin.tar DelayPlugin.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST) | |||
| $(GZIP) DelayPlugin.tar | |||
| clean: | |||
| -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET) | |||
| -rm -f *~ core | |||
| install: | |||
| $(INSTALL) $(TARGET) $(libdir)/SpiralPlugins | |||
| ####### Sub-libraries | |||
| ###### Combined headers | |||
| ####### Compile | |||
| ../SpiralPlugin.o: ../SpiralPlugin.C \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h | |||
| ../SpiralPluginGUI.o: ../SpiralPluginGUI.C \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h | |||
| ../Widgets/Fl_Knob.o: ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_Knob.H | |||
| ../Widgets/Fl_DragBar.o: ../Widgets/Fl_DragBar.cxx \ | |||
| ../Widgets/Fl_DragBar.H | |||
| ../../Sample.o: ../../Sample.C \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h | |||
| DelayPlugin.o: DelayPlugin.C \ | |||
| DelayPlugin.h \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h \ | |||
| ../../Sample.h \ | |||
| DelayPluginGUI.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| SpiralIcon.xpm | |||
| DelayPluginGUI.o: DelayPluginGUI.C \ | |||
| DelayPluginGUI.h \ | |||
| DelayPlugin.h \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h \ | |||
| ../../Sample.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../Widgets/Fl_Knob.H | |||
| @@ -0,0 +1,341 @@ | |||
| /* XPM */ | |||
| static char * SpiralIcon_xpm[] = { | |||
| "36 36 302 2", | |||
| " c None", | |||
| ". c #8B889B", | |||
| "+ c #9C99AA", | |||
| "@ c #ADAAB9", | |||
| "# c #837F94", | |||
| "$ c #7D7990", | |||
| "% c #9995A7", | |||
| "& c #67627C", | |||
| "* c #CDCBD4", | |||
| "= c #FCFCFC", | |||
| "- c #D1D0D8", | |||
| "; c #FFFFFF", | |||
| "> c #F1F1F3", | |||
| ", c #848095", | |||
| "' c #2A2248", | |||
| ") c #CFCED6", | |||
| "! c #68637D", | |||
| "~ c #ABA8B6", | |||
| "{ c #D5D3DB", | |||
| "] c #9490A2", | |||
| "^ c #C4C4C4", | |||
| "/ c #1D1C1D", | |||
| "( c #313134", | |||
| "_ c #EEEFEE", | |||
| ": c #FBFBFB", | |||
| "< c #EFEFEF", | |||
| "[ c #7B768D", | |||
| "} c #464060", | |||
| "| c #DEDEE1", | |||
| "1 c #CBCACC", | |||
| "2 c #EEEEF1", | |||
| "3 c #79758C", | |||
| "4 c #FBFBFC", | |||
| "5 c #A2A2A2", | |||
| "6 c #000000", | |||
| "7 c #F5F6F5", | |||
| "8 c #747474", | |||
| "9 c #2A2A2B", | |||
| "0 c #403958", | |||
| "a c #7D788F", | |||
| "b c #C0BEC8", | |||
| "c c #BCBAC6", | |||
| "d c #BCBAC5", | |||
| "e c #625C79", | |||
| "f c #2B2932", | |||
| "g c #191919", | |||
| "h c #CCCCCC", | |||
| "i c #807B91", | |||
| "j c #3B3556", | |||
| "k c #F2F2F4", | |||
| "l c #929292", | |||
| "m c #0E0E0E", | |||
| "n c #BFBFBF", | |||
| "o c #111111", | |||
| "p c #100E15", | |||
| "q c #868689", | |||
| "r c #FEFDFE", | |||
| "s c #D9D7DE", | |||
| "t c #9C98AA", | |||
| "u c #FDFCFD", | |||
| "v c #DDDDDD", | |||
| "w c #575755", | |||
| "x c #5E5E5E", | |||
| "y c #C4C2CD", | |||
| "z c #423C5C", | |||
| "A c #F0F0F2", | |||
| "B c #939393", | |||
| "C c #555555", | |||
| "D c #4A4A4A", | |||
| "E c #010101", | |||
| "F c #282828", | |||
| "G c #C2C2C2", | |||
| "H c #DBDAE0", | |||
| "I c #615C78", | |||
| "J c #F6F6F7", | |||
| "K c #DADADA", | |||
| "L c #545454", | |||
| "M c #0F0F0F", | |||
| "N c #B8B8B8", | |||
| "O c #48445C", | |||
| "P c #2B2B2C", | |||
| "Q c #181900", | |||
| "R c #D3D3D3", | |||
| "S c #C1BEC9", | |||
| "T c #474060", | |||
| "U c #31294D", | |||
| "V c #716C85", | |||
| "W c #65607A", | |||
| "X c #625D78", | |||
| "Y c #D5D4DB", | |||
| "Z c #F7F7F7", | |||
| "` c #8B8B8B", | |||
| " . c #161616", | |||
| ".. c #0C0C0C", | |||
| "+. c #161800", | |||
| "@. c #1A1B00", | |||
| "#. c #060600", | |||
| "$. c #191A00", | |||
| "%. c #393643", | |||
| "&. c #47415F", | |||
| "*. c #9692A4", | |||
| "=. c #D9D8DE", | |||
| "-. c #F7F7F8", | |||
| ";. c #918DA0", | |||
| ">. c #B8B5C1", | |||
| ",. c #D1D1D1", | |||
| "'. c #212121", | |||
| "). c #2D2F00", | |||
| "!. c #111200", | |||
| "~. c #9C9500", | |||
| "{. c #080800", | |||
| "]. c #030400", | |||
| "^. c #020200", | |||
| "/. c #727175", | |||
| "(. c #FEFEFF", | |||
| "_. c #9D99AA", | |||
| ":. c #DBD9E0", | |||
| "<. c #E9E9E9", | |||
| "[. c #CBCBCB", | |||
| "}. c #E0E0E0", | |||
| "|. c #6C6C6C", | |||
| "1. c #050500", | |||
| "2. c #FFF200", | |||
| "3. c #000100", | |||
| "4. c #0F1000", | |||
| "5. c #515151", | |||
| "6. c #A6A6A7", | |||
| "7. c #827E93", | |||
| "8. c #615C77", | |||
| "9. c #EAEAED", | |||
| "0. c #DFDFE1", | |||
| "a. c #1E1D24", | |||
| "b. c #9894A7", | |||
| "c. c #B1AEBB", | |||
| "d. c #69686F", | |||
| "e. c #000001", | |||
| "f. c #040400", | |||
| "g. c #010100", | |||
| "h. c #615C76", | |||
| "i. c #5F5A75", | |||
| "j. c #413E4D", | |||
| "k. c #020203", | |||
| "l. c #1E1C00", | |||
| "m. c #807900", | |||
| "n. c #1A1A1C", | |||
| "o. c #C3C1CB", | |||
| "p. c #9D9D9D", | |||
| "q. c #202020", | |||
| "r. c #383838", | |||
| "s. c #4C4C4C", | |||
| "t. c #8F8700", | |||
| "u. c #FDF000", | |||
| "v. c #111112", | |||
| "w. c #C9C7D0", | |||
| "x. c #F1F1F1", | |||
| "y. c #F8F8F8", | |||
| "z. c #121212", | |||
| "A. c #918900", | |||
| "B. c #050408", | |||
| "C. c #AEACB9", | |||
| "D. c #FEFEFE", | |||
| "E. c #B7B5C1", | |||
| "F. c #9390A2", | |||
| "G. c #BBBBBB", | |||
| "H. c #414141", | |||
| "I. c #020202", | |||
| "J. c #141500", | |||
| "K. c #534E00", | |||
| "L. c #E2D600", | |||
| "M. c #E9DD00", | |||
| "N. c #FEF100", | |||
| "O. c #E5D900", | |||
| "P. c #F1E500", | |||
| "Q. c #E8DC00", | |||
| "R. c #D1C600", | |||
| "S. c #191700", | |||
| "T. c #2F3100", | |||
| "U. c #28272A", | |||
| "V. c #F4F4F6", | |||
| "W. c #605B76", | |||
| "X. c #736E86", | |||
| "Y. c #D8D8D8", | |||
| "Z. c #727272", | |||
| "`. c #101010", | |||
| " + c #EDE100", | |||
| ".+ c #131400", | |||
| "++ c #848486", | |||
| "@+ c #CCCBD3", | |||
| "#+ c #747087", | |||
| "$+ c #6D6881", | |||
| "%+ c #1C1C1C", | |||
| "&+ c #070707", | |||
| "*+ c #656566", | |||
| "=+ c #F6F6F6", | |||
| "-+ c #E8E6EA", | |||
| ";+ c #706B84", | |||
| ">+ c #E3E1E6", | |||
| ",+ c #474746", | |||
| "'+ c #151515", | |||
| ")+ c #C8C8C8", | |||
| "!+ c #AEAEAE", | |||
| "~+ c #080808", | |||
| "{+ c #373639", | |||
| "]+ c #FDFCFE", | |||
| "^+ c #ABA8B7", | |||
| "/+ c #F1F0F3", | |||
| "(+ c #6D6980", | |||
| "_+ c #0A090E", | |||
| ":+ c #95929E", | |||
| "<+ c #0A0810", | |||
| "[+ c #0D0D0D", | |||
| "}+ c #050505", | |||
| "|+ c #5B5A5C", | |||
| "1+ c #F7F6F7", | |||
| "2+ c #F4F3F5", | |||
| "3+ c #908C9F", | |||
| "4+ c #C8C6D0", | |||
| "5+ c #837E96", | |||
| "6+ c #86868A", | |||
| "7+ c #070608", | |||
| "8+ c #ECEBEE", | |||
| "9+ c #5B5571", | |||
| "0+ c #646078", | |||
| "a+ c #AFAFB0", | |||
| "b+ c #454545", | |||
| "c+ c #363636", | |||
| "d+ c #7A7A7A", | |||
| "e+ c #C8C8C9", | |||
| "f+ c #212025", | |||
| "g+ c #060607", | |||
| "h+ c #969699", | |||
| "i+ c #FAFAFA", | |||
| "j+ c #F8F8F9", | |||
| "k+ c #A29EAF", | |||
| "l+ c #F7F6F8", | |||
| "m+ c #F0F0F1", | |||
| "n+ c #B8B7B9", | |||
| "o+ c #E4E4E4", | |||
| "p+ c #FDFDFD", | |||
| "q+ c #A5A2B2", | |||
| "r+ c #3B3456", | |||
| "s+ c #A8A5B4", | |||
| "t+ c #525252", | |||
| "u+ c #848387", | |||
| "v+ c #CDCDCD", | |||
| "w+ c #8D899C", | |||
| "x+ c #494262", | |||
| "y+ c #68627C", | |||
| "z+ c #40395A", | |||
| "A+ c #ECECEC", | |||
| "B+ c #B4B5B5", | |||
| "C+ c #0B0B0B", | |||
| "D+ c #313232", | |||
| "E+ c #E3E3E3", | |||
| "F+ c #B1AEBC", | |||
| "G+ c #BDBBC6", | |||
| "H+ c #3C3556", | |||
| "I+ c #898599", | |||
| "J+ c #EDEDED", | |||
| "K+ c #39393A", | |||
| "L+ c #040404", | |||
| "M+ c #333333", | |||
| "N+ c #F5F5F5", | |||
| "O+ c #2B2B2B", | |||
| "P+ c #2D2A3D", | |||
| "Q+ c #B6B4C1", | |||
| "R+ c #F5F5F6", | |||
| "S+ c #605A76", | |||
| "T+ c #DAD8DF", | |||
| "U+ c #F5F4F6", | |||
| "V+ c #615B76", | |||
| "W+ c #524D6A", | |||
| "X+ c #E4E3E8", | |||
| "Y+ c #D5D5D5", | |||
| "Z+ c #1B1B1B", | |||
| "`+ c #303030", | |||
| " @ c #AAABAB", | |||
| ".@ c #585464", | |||
| "+@ c #B0AEBB", | |||
| "@@ c #A29FAF", | |||
| "#@ c #E9E8E9", | |||
| "$@ c #787779", | |||
| "%@ c #0F0E15", | |||
| "&@ c #2D2D2E", | |||
| "*@ c #595959", | |||
| "=@ c #FAFAFB", | |||
| "-@ c #807B92", | |||
| ";@ c #B0ADBB", | |||
| ">@ c #E8E7EB", | |||
| ",@ c #3A3258", | |||
| "'@ c #E6E5EA", | |||
| ")@ c #DFDEE3", | |||
| "!@ c #443E5E", | |||
| "~@ c #BAB8C4", | |||
| "{@ c #C1BFCA", | |||
| "]@ c #E0E0E5", | |||
| "^@ c #D0CED6", | |||
| "/@ c #362F52", | |||
| "(@ c #CECCD5", | |||
| "_@ c #413A5B", | |||
| ":@ c #6A657F", | |||
| "<@ c #9793A6", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " . + @ # $ % ", | |||
| " & * = * - ; > , ' ; ; ; ) ! ", | |||
| " ~ ; ; { ] ; ^ / ( _ ; : < [ ", | |||
| " } | 1 2 3 4 5 6 6 7 : 8 9 0 a b ", | |||
| " c : d e f g h i j k l 6 m ; n o 6 p q r s ", | |||
| " t u ; v w 6 6 x y z A B 6 C ; D E 6 F G ; H ", | |||
| " I J ; ; K L 6 6 M N O P E 6 6 6 Q Q M R S T U V W ", | |||
| " X Y ; ; ; ; Z ` .6 ..6 6 6 6 6 +.@.#.$.%.&.*.=.-.;. ", | |||
| " >.; ; ; ; ; ; = ,.'.).!.~.{.].6 ^.6 6 6 E /.(.; ; _. ", | |||
| " :.; ; <.R h [.}.|.6 1.6 2.6 6 3.4.6 6 6 6 E 5.6.4 7. ", | |||
| " 8.9.; 0...6 6 6 6 6 6 6 6 2.6 6 6 6 6 6 6 6 6 6 a.b. ", | |||
| " V @ c.d.e.6 6 6 6 6 f.g.6 2.6 6 6 6 6 6 6 6 6 6 ", | |||
| " h.i.j.6 k.6 6 6 6 6 6 6 2.6 6 l.m.6 6 6 6 6 6 n. ", | |||
| " o.; ; p.q.q.r.s. .6 6 6 6 2.6 6 t.u.6 6 6 6 6 6 v. ", | |||
| " w.; ; x.y.; ; ; z.6 6 6 6 2.6 6 A.u.6 6 6 6 6 6 B. ", | |||
| " C.; ; ; ; D.; ; M 6 6 6 6 2.6 6 A.u.6 6 6 6 6 6 6 E., ", | |||
| " F.; ; D.; : G.H.I.J.K.L.M.N.M.O.P.N.Q.Q.R.S.g.T.U.D.V.W. ", | |||
| " X.; ; ; Y.Z.`.6 6 6 K.L.M. +M.O.Q.Q.Q.Q.R.S.@..+++; ; @+#+ ", | |||
| " $+J ; : %+6 6 6 6 q.&+6 6 6 6 6 6 6 6 6 6 6 6 6 *+=+; ; -+;+ ", | |||
| " >+; ; ,+6 E 6 '+)+!+~+6 6 6 6 6 6 6 6 g.6 6 6 6 {+]+; ; > ;+ ", | |||
| " ^+; /+(+_+6 6 !+D.; :+<+6 6 6 6 6 6 6 6 [+}+6 6 6 |+1+; ; 2+3+ ", | |||
| " ;+4+! 5+6+7+x ; ; 8+9+0+a+l b+6 6 6 c+d+e+f+6 6 6 g+h+i+; ; j+@ ", | |||
| " k+l+m+n+o+p+; q+r+s+; =+b+6 6 E t+; ; u+6 6 E 6 o v+; ; = w+ ", | |||
| " x+> ; ; ; ; ; ; y+z+; ; A+r.6 6 I.D ; ; B+C+6 6 6 D+E+; ; F+ ", | |||
| " > ; ; ; ; G+H+I+; ; J+K+6 6 L+M+; ; N+O+6 6 P+Q+; R+3 ", | |||
| " S+T+= ; U+V+W+X+; ; Y+Z+6 6 I.`+; ; ; @t+.@ ", | |||
| " +@4 @@ X ; ; ; #@$@`+%@&@*@; ; ; D.=@-@ ", | |||
| " ;@; ; ; ; ; >@,@'@; ; ; ; = )@!@ ", | |||
| " ~@{@]@4 ; ; ^@/@(@; ; ; s I+T ", | |||
| " _@ :@<@I+ ", | |||
| " ", | |||
| " ", | |||
| " "}; | |||
| @@ -0,0 +1,136 @@ | |||
| /* SpiralSound | |||
| * Copyleft (C) 2001 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "DistributorPlugin.h" | |||
| #include "DistributorPluginGUI.h" | |||
| #include <FL/Fl_Button.h> | |||
| #include "SpiralIcon.xpm" | |||
| extern "C" { | |||
| SpiralPlugin* CreateInstance() | |||
| { | |||
| return new DistributorPlugin; | |||
| } | |||
| char** GetIcon() | |||
| { | |||
| return SpiralIcon_xpm; | |||
| } | |||
| int GetID() | |||
| { | |||
| return 0x0056; | |||
| } | |||
| } | |||
| /////////////////////////////////////////////////////// | |||
| DistributorPlugin::DistributorPlugin() | |||
| { | |||
| m_PluginInfo.Name="Distributor"; | |||
| m_PluginInfo.Width=220; | |||
| m_PluginInfo.Height=250; | |||
| m_PluginInfo.NumInputs=2; | |||
| m_PluginInfo.NumOutputs=8; | |||
| m_PluginInfo.PortTips.push_back("Stream (A)"); | |||
| m_PluginInfo.PortTips.push_back("Switcher (B)"); | |||
| m_PluginInfo.PortTips.push_back("Out A1"); | |||
| m_PluginInfo.PortTips.push_back("Out B1"); | |||
| m_PluginInfo.PortTips.push_back("Out A2"); | |||
| m_PluginInfo.PortTips.push_back("Out B2"); | |||
| m_PluginInfo.PortTips.push_back("Out A3"); | |||
| m_PluginInfo.PortTips.push_back("Out B3"); | |||
| m_PluginInfo.PortTips.push_back("Out A4"); | |||
| m_PluginInfo.PortTips.push_back("Out B4"); | |||
| } | |||
| DistributorPlugin::~DistributorPlugin() | |||
| { | |||
| } | |||
| PluginInfo &DistributorPlugin::Initialise(const HostInfo *Host) | |||
| { | |||
| return SpiralPlugin::Initialise(Host); | |||
| } | |||
| SpiralGUIType *DistributorPlugin::CreateGUI() | |||
| { | |||
| m_GUI=NULL; | |||
| return m_GUI; | |||
| } | |||
| void DistributorPlugin::Execute() | |||
| { | |||
| if (! m_Defined) | |||
| { | |||
| m_Triggeronce=false; | |||
| m_Previous=0; | |||
| m_Now=0; | |||
| m_Defined=true; | |||
| m_ChannelSelect=0; | |||
| m_trigdelay=0; | |||
| } | |||
| for (int n=0; n<m_HostInfo->BUFSIZE; n++) | |||
| { | |||
| // detect the trigger | |||
| if ((GetInput(1,n))!=0) | |||
| { | |||
| if (GetInput(0,n)!=m_Previous) | |||
| { | |||
| GetOutputBuf(m_ChannelSelect+1)->Zero(); | |||
| m_ChannelSelect=m_ChannelSelect+2; | |||
| if (m_ChannelSelect>6) | |||
| { | |||
| m_ChannelSelect=0; | |||
| } | |||
| //zero the outputs first... | |||
| GetOutputBuf(m_ChannelSelect)->Zero(); | |||
| GetOutputBuf(m_ChannelSelect+1)->Zero(); | |||
| //and copy the inputs as well | |||
| if (InputExists(0)) //unless you want segmentation faults... | |||
| GetOutputBuf(m_ChannelSelect)->Mix(*GetInput(0),0); | |||
| GetOutputBuf(m_ChannelSelect+1)->Mix(*GetInput(1),0); | |||
| //now save the present pitch value, because we'll need it next time around. | |||
| m_Previous=GetInput(0,n); | |||
| m_Triggeronce=true; | |||
| } | |||
| else if (m_Triggeronce==false) | |||
| { | |||
| //just copy the trigger in this case. | |||
| GetOutputBuf(m_ChannelSelect+1)->Zero(); | |||
| GetOutputBuf(m_ChannelSelect+1)->Mix(*GetInput(1),0); | |||
| m_Triggeronce=true; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| m_Triggeronce=false; | |||
| m_trigdelay++; | |||
| if (m_trigdelay>=10) | |||
| { | |||
| GetOutputBuf(m_ChannelSelect+1)->Zero(); | |||
| m_trigdelay=0; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,57 @@ | |||
| /* SpiralSound | |||
| * Copyleft (C) 2001 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "../SpiralPlugin.h" | |||
| #include <FL/Fl_Pixmap.H> | |||
| #ifndef DistributorPLUGIN | |||
| #define DistributorPLUGIN | |||
| class DistributorPlugin : public SpiralPlugin | |||
| { | |||
| public: | |||
| DistributorPlugin(); | |||
| virtual ~DistributorPlugin(); | |||
| virtual PluginInfo& Initialise(const HostInfo *Host); | |||
| virtual SpiralGUIType* CreateGUI(); | |||
| virtual void Execute(); | |||
| virtual void StreamOut(ostream &s) {} | |||
| virtual void StreamIn(istream &s) {} | |||
| // has to be defined in the plugin | |||
| virtual void UpdateGUI() { Fl::check(); } | |||
| private: | |||
| bool m_Triggered; | |||
| bool m_Switch; | |||
| bool m_Triggeronce; | |||
| int m_ChannelSelect; | |||
| int m_trigdelay; | |||
| bool m_Defined; | |||
| float m_Previous; | |||
| float m_Now; | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,18 @@ | |||
| HEADERS = ../SpiralPlugin.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../../Sample.h \ | |||
| DistributorPlugin.h \ | |||
| DistributorPluginGUI.h | |||
| SOURCES = ../SpiralPlugin.C \ | |||
| ../SpiralPluginGUI.C \ | |||
| ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_DragBar.cxx \ | |||
| ../../Sample.C \ | |||
| DistributorPlugin.C \ | |||
| DistributorPluginGUI.C | |||
| TARGET = DistributorPlugin.so | |||
| @@ -0,0 +1,42 @@ | |||
| /* SpiralPlugin | |||
| * Copyleft (C) 2000 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "DistributorPluginGUI.h" | |||
| #include <FL/fl_draw.h> | |||
| #include <FL/fl_draw.H> | |||
| static const int GUI_COLOUR = 154; | |||
| static const int GUIBG_COLOUR = 144; | |||
| static const int GUIBG2_COLOUR = 145; | |||
| //////////////////////////////////////////// | |||
| DistributorPluginGUI::DistributorPluginGUI(int w, int h,DistributorPlugin *o,const HostInfo *Info) : | |||
| SpiralPluginGUI(w,h,o) | |||
| { | |||
| m_Plugin=o; | |||
| end(); | |||
| } | |||
| void DistributorPluginGUI::UpdateValues() | |||
| { | |||
| } | |||
| @@ -0,0 +1,48 @@ | |||
| /* SpiralPlugin | |||
| * Copyleft (C) 2000 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include <FL/Fl.H> | |||
| #include <FL/Fl_Window.H> | |||
| #include <FL/Fl_Group.H> | |||
| #include <FL/Fl_Button.H> | |||
| #include "../Widgets/Fl_Knob.H" | |||
| #include "../Widgets/Fl_DragBar.H" | |||
| #include "DistributorPlugin.h" | |||
| #include "../SpiralPluginGUI.h" | |||
| #ifndef DistributorGUI | |||
| #define DistributorGUI | |||
| class DistributorPluginGUI : public SpiralPluginGUI | |||
| { | |||
| public: | |||
| DistributorPluginGUI(int w, int h, DistributorPlugin *o,const HostInfo *Info); | |||
| virtual void UpdateValues(); | |||
| virtual SpiralPlugin* GetPlugin() { return m_Plugin; } | |||
| DistributorPlugin *m_Plugin; | |||
| private: | |||
| //// Callbacks //// | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,170 @@ | |||
| # Generated automatically from Makefile.in by configure. | |||
| ############################################################################# | |||
| # Makefile for building DistributorPlugin.so | |||
| # Generated by tmake at 22:13, 2001/09/17 | |||
| # Project: DistributorPlugin | |||
| # Template: app | |||
| ############################################################################# | |||
| ####### Compiler, tools and options | |||
| CC = gcc | |||
| CXX = g++ | |||
| CFLAGS = @CFLAGS@ | |||
| CXXFLAGS= @CXXFLAGS@ | |||
| INCPATH = -I/usr/X11R6/include | |||
| LINK = g++ -shared | |||
| LFLAGS = | |||
| LIBS = -L/usr/X11R6/lib -lfltk -lGL -lXext -lX11 -lm -ldl | |||
| MOC = moc | |||
| UIC = | |||
| TAR = tar -cf | |||
| GZIP = gzip -9f | |||
| INSTALL = @INSTALL@ | |||
| ###### Autoconf variables | |||
| prefix = @prefix@ | |||
| exec_prefix = @exec_prefix@ | |||
| bindir = @bindir@ | |||
| sbindir = @sbindir@ | |||
| libexecdir = @libexecdir@ | |||
| datadir = @datadir@ | |||
| sysconfdir = @sysconfdir@ | |||
| sharedstatedir = @sharedstatedir@ | |||
| localstatedir = @localstatedir@ | |||
| libdir = @libdir@ | |||
| infodir = @infodir@ | |||
| mandir = @mandir@ | |||
| ####### Files | |||
| HEADERS = ../SpiralPlugin.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../../Sample.h \ | |||
| DistributorPlugin.h \ | |||
| DistributorPluginGUI.h | |||
| SOURCES = ../SpiralPlugin.C \ | |||
| ../SpiralPluginGUI.C \ | |||
| ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_DragBar.cxx \ | |||
| ../../Sample.C \ | |||
| DistributorPlugin.C \ | |||
| DistributorPluginGUI.C | |||
| OBJECTS = ../SpiralPlugin.o \ | |||
| ../SpiralPluginGUI.o \ | |||
| ../Widgets/Fl_Knob.o \ | |||
| ../Widgets/Fl_DragBar.o \ | |||
| ../../Sample.o \ | |||
| DistributorPlugin.o \ | |||
| DistributorPluginGUI.o | |||
| INTERFACES = | |||
| UICDECLS = | |||
| UICIMPLS = | |||
| SRCMOC = | |||
| OBJMOC = | |||
| DIST = | |||
| TARGET = DistributorPlugin.so | |||
| ####### Implicit rules | |||
| .SUFFIXES: .cpp .cxx .cc .C .c | |||
| .cpp.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .cxx.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .cc.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .C.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .c.o: | |||
| $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< | |||
| ####### Build rules | |||
| all: $(TARGET) | |||
| $(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) | |||
| $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS) | |||
| moc: $(SRCMOC) | |||
| tmake: | |||
| tmake DistributorPlugin.pro | |||
| dist: | |||
| $(TAR) DistributorPlugin.tar DistributorPlugin.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST) | |||
| $(GZIP) DistributorPlugin.tar | |||
| clean: | |||
| -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET) | |||
| -rm -f *~ core | |||
| install: | |||
| $(INSTALL) $(TARGET) $(libdir)/SpiralPlugins | |||
| ####### Sub-libraries | |||
| ###### Combined headers | |||
| ####### Compile | |||
| ../SpiralPlugin.o: ../SpiralPlugin.C \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h | |||
| ../SpiralPluginGUI.o: ../SpiralPluginGUI.C \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h | |||
| ../Widgets/Fl_Knob.o: ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_Knob.H | |||
| ../Widgets/Fl_DragBar.o: ../Widgets/Fl_DragBar.cxx \ | |||
| ../Widgets/Fl_DragBar.H | |||
| ../../Sample.o: ../../Sample.C \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h | |||
| DistributorPlugin.o: DistributorPlugin.C \ | |||
| DistributorPlugin.h \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h \ | |||
| ../../Sample.h \ | |||
| DistributorPluginGUI.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| SpiralIcon.xpm | |||
| DistributorPluginGUI.o: DistributorPluginGUI.C \ | |||
| DistributorPluginGUI.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| DistributorPlugin.h \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h \ | |||
| ../../Sample.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H | |||
| @@ -0,0 +1,328 @@ | |||
| /* XPM */ | |||
| static char *SpiralIcon_xpm []={ | |||
| "36 36 289 2", | |||
| "Qt c None", | |||
| ".G c #000000", | |||
| "aa c #000001", | |||
| "aV c #010100", | |||
| "#d c #010101", | |||
| "#Z c #010200", | |||
| "aH c #020200", | |||
| "bQ c #020202", | |||
| "ah c #020203", | |||
| "aG c #030303", | |||
| "#Q c #040400", | |||
| "b1 c #040404", | |||
| "ai c #040500", | |||
| "ax c #050408", | |||
| "ak c #050500", | |||
| "bd c #050505", | |||
| "#F c #060600", | |||
| "bv c #060607", | |||
| "bl c #070608", | |||
| "a5 c #080808", | |||
| "bb c #0a0810", | |||
| "b# c #0a090e", | |||
| "ab c #0a0a00", | |||
| "bS c #0b0b0b", | |||
| "#B c #0c0c0c", | |||
| "bc c #0d0d0d", | |||
| ".X c #0e0e0e", | |||
| "cl c #0f0e15", | |||
| "#l c #0f0f0f", | |||
| ".0 c #100e15", | |||
| "aO c #101010", | |||
| "aB c #101100", | |||
| ".Z c #111111", | |||
| "as c #111112", | |||
| "ar c #121300", | |||
| "aw c #141500", | |||
| "a2 c #151515", | |||
| "#A c #161616", | |||
| "#D c #161800", | |||
| "ac c #171800", | |||
| "#p c #181900", | |||
| ".R c #191919", | |||
| "#G c #191a00", | |||
| "al c #1a1a1c", | |||
| "#E c #1a1b00", | |||
| "cd c #1b1b1b", | |||
| "aT c #1c1c1c", | |||
| ".t c #1d1c1d", | |||
| "aA c #1d1d1d", | |||
| "#8 c #1e1d24", | |||
| "ao c #202020", | |||
| "bu c #212025", | |||
| "aU c #242424", | |||
| "#P c #252525", | |||
| "aI c #28272a", | |||
| "#e c #282828", | |||
| ".m c #2a2248", | |||
| ".J c #2a2a2b", | |||
| ".Q c #2b2932", | |||
| "b4 c #2b2b2b", | |||
| "#o c #2b2b2c", | |||
| "b5 c #2d2a3d", | |||
| "cm c #2d2d2e", | |||
| "ce c #303030", | |||
| "#t c #31294d", | |||
| ".u c #313134", | |||
| "bT c #313232", | |||
| "b2 c #333333", | |||
| "cA c #362f52", | |||
| "br c #363636", | |||
| "a6 c #373639", | |||
| "ap c #383838", | |||
| "#H c #393643", | |||
| "b0 c #39393a", | |||
| "cs c #3a3258", | |||
| "bG c #3b3456", | |||
| ".U c #3b3556", | |||
| "bX c #3c3556", | |||
| ".K c #403958", | |||
| "bO c #40395a", | |||
| "ad c #404000", | |||
| "cC c #413a5b", | |||
| "ag c #413e4d", | |||
| "aF c #414141", | |||
| "#. c #423c5c", | |||
| "cv c #443e5e", | |||
| "bq c #454545", | |||
| ".z c #464060", | |||
| "#s c #474060", | |||
| "#I c #47415f", | |||
| "a1 c #474746", | |||
| "#n c #48445c", | |||
| "bM c #494262", | |||
| "#c c #4a4a4a", | |||
| "aq c #4c4c4c", | |||
| "#0 c #515151", | |||
| "ca c #524d6a", | |||
| "bI c #525252", | |||
| "#k c #545454", | |||
| "#b c #555555", | |||
| ".7 c #575755", | |||
| "cg c #585464", | |||
| "cn c #595959", | |||
| "bn c #5b5571", | |||
| "be c #5b5a5c", | |||
| ".8 c #5e5e5e", | |||
| "af c #5f5a75", | |||
| "b8 c #605a76", | |||
| "aK c #605b76", | |||
| "c# c #615b76", | |||
| "ae c #615c76", | |||
| "#3 c #615c77", | |||
| "#h c #615c78", | |||
| ".P c #625c79", | |||
| "#w c #625d78", | |||
| "bo c #646078", | |||
| "#v c #65607a", | |||
| "aW c #656566", | |||
| ".f c #67627c", | |||
| "bN c #68627c", | |||
| ".o c #68637d", | |||
| "a# c #69686f", | |||
| "cD c #6a657f", | |||
| "#Y c #6c6c6c", | |||
| "aS c #6d6881", | |||
| "b. c #6d6980", | |||
| "aZ c #706b84", | |||
| "#u c #716c85", | |||
| "#R c #727175", | |||
| "aN c #727272", | |||
| "aL c #736e86", | |||
| "aR c #747087", | |||
| ".I c #747474", | |||
| "ck c #787779", | |||
| ".D c #79758c", | |||
| "bs c #7a7a7a", | |||
| ".y c #7b768d", | |||
| ".L c #7d788f", | |||
| ".d c #7d7990", | |||
| ".T c #807b91", | |||
| "cp c #807b92", | |||
| "#6 c #808000", | |||
| "#7 c #808080", | |||
| "#2 c #827e93", | |||
| "bj c #837e96", | |||
| ".c c #837f94", | |||
| ".l c #848095", | |||
| "bJ c #848387", | |||
| "aP c #848486", | |||
| ".1 c #868689", | |||
| "bk c #86868a", | |||
| "bY c #898599", | |||
| ".# c #8b889b", | |||
| "#z c #8b8b8b", | |||
| "bL c #8d899c", | |||
| "bh c #908c9f", | |||
| "#M c #918da0", | |||
| ".W c #929292", | |||
| "aD c #9390a2", | |||
| "#a c #939393", | |||
| ".r c #9490a2", | |||
| "ba c #95929e", | |||
| "#J c #9692a4", | |||
| "bw c #969699", | |||
| "cE c #9793a6", | |||
| "#9 c #9894a7", | |||
| ".e c #9995a7", | |||
| ".4 c #9c98aa", | |||
| ".a c #9c99aa", | |||
| "#T c #9d99aa", | |||
| "an c #9d9d9d", | |||
| "bz c #a29eaf", | |||
| "ci c #a29faf", | |||
| ".F c #a2a2a2", | |||
| "bF c #a5a2b2", | |||
| "#1 c #a6a6a7", | |||
| "bH c #a8a5b4", | |||
| "cf c #aaabab", | |||
| ".p c #aba8b6", | |||
| "a8 c #aba8b7", | |||
| ".b c #adaab9", | |||
| "ay c #aeacb9", | |||
| "a4 c #aeaeae", | |||
| "bp c #afafb0", | |||
| "cq c #b0adbb", | |||
| "ch c #b0aebb", | |||
| "a. c #b1aebb", | |||
| "bV c #b1aebc", | |||
| "bR c #b4b5b5", | |||
| "b6 c #b6b4c1", | |||
| "aC c #b7b5c1", | |||
| "#N c #b8b5c1", | |||
| "bC c #b8b7b9", | |||
| "#m c #b8b8b8", | |||
| "cw c #bab8c4", | |||
| "aE c #bbbbbb", | |||
| ".O c #bcbac5", | |||
| ".N c #bcbac6", | |||
| "bW c #bdbbc6", | |||
| ".Y c #bfbfbf", | |||
| ".M c #c0bec8", | |||
| "aj c #c0c000", | |||
| "#r c #c1bec9", | |||
| "cx c #c1bfca", | |||
| "#f c #c2c2c2", | |||
| "am c #c3c1cb", | |||
| ".9 c #c4c2cd", | |||
| ".s c #c4c4c4", | |||
| "bi c #c8c6d0", | |||
| "a3 c #c8c8c8", | |||
| "bt c #c8c8c9", | |||
| "at c #c9c7d0", | |||
| ".B c #cbcacc", | |||
| "#W c #cbcbcb", | |||
| "aQ c #cccbd3", | |||
| ".S c #cccccc", | |||
| ".g c #cdcbd4", | |||
| "bK c #cdcdcd", | |||
| "cB c #ceccd5", | |||
| ".n c #cfced6", | |||
| "cz c #d0ced6", | |||
| ".i c #d1d0d8", | |||
| "#O c #d1d1d1", | |||
| "#q c #d3d3d3", | |||
| ".q c #d5d3db", | |||
| "#x c #d5d4db", | |||
| "cc c #d5d5d5", | |||
| "aM c #d8d8d8", | |||
| ".3 c #d9d7de", | |||
| "#K c #d9d8de", | |||
| "b9 c #dad8df", | |||
| "#j c #dadada", | |||
| "#U c #dbd9e0", | |||
| "#g c #dbdae0", | |||
| ".6 c #dddddd", | |||
| ".A c #dedee1", | |||
| "cu c #dfdee3", | |||
| "#5 c #dfdfe1", | |||
| "#X c #e0e0e0", | |||
| "cy c #e0e0e5", | |||
| "a0 c #e3e1e6", | |||
| "bU c #e3e3e3", | |||
| "cb c #e4e3e8", | |||
| "bD c #e4e4e4", | |||
| "ct c #e6e5ea", | |||
| "aY c #e8e6ea", | |||
| "cr c #e8e7eb", | |||
| "cj c #e9e8e9", | |||
| "#V c #e9e9e9", | |||
| "#4 c #eaeaed", | |||
| "bm c #ecebee", | |||
| "bP c #ececec", | |||
| "bZ c #ededed", | |||
| ".C c #eeeef1", | |||
| ".v c #eeefee", | |||
| ".x c #efefef", | |||
| "bB c #f0f0f1", | |||
| "## c #f0f0f2", | |||
| "a9 c #f1f0f3", | |||
| "au c #f1f1f1", | |||
| ".k c #f1f1f3", | |||
| ".V c #f2f2f4", | |||
| "bg c #f4f3f5", | |||
| "aJ c #f4f4f6", | |||
| "c. c #f5f4f6", | |||
| "b3 c #f5f5f5", | |||
| "b7 c #f5f5f6", | |||
| ".H c #f5f6f5", | |||
| "aX c #f6f6f6", | |||
| "#i c #f6f6f7", | |||
| "bf c #f7f6f7", | |||
| "bA c #f7f6f8", | |||
| "#y c #f7f7f7", | |||
| "#L c #f7f7f8", | |||
| "av c #f8f8f8", | |||
| "by c #f8f8f9", | |||
| "bx c #fafafa", | |||
| "co c #fafafb", | |||
| ".w c #fbfbfb", | |||
| ".E c #fbfbfc", | |||
| ".h c #fcfcfc", | |||
| ".5 c #fdfcfd", | |||
| "a7 c #fdfcfe", | |||
| "bE c #fdfdfd", | |||
| ".2 c #fefdfe", | |||
| "az c #fefefe", | |||
| "#S c #fefeff", | |||
| "#C c #ffff00", | |||
| ".j c #ffffff", | |||
| "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", | |||
| "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", | |||
| "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", | |||
| "QtQtQtQtQtQtQtQtQtQtQt.#Qt.a.b.cQtQt.d.eQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", | |||
| "QtQtQtQtQtQtQtQt.f.g.h.gQt.i.j.k.l.m.j.j.j.n.oQtQtQtQtQtQtQtQtQtQtQtQtQt", | |||
| "QtQtQtQtQtQtQtQt.p.j.j.qQt.r.j.s.t.u.v.j.w.x.yQtQtQtQtQtQtQtQtQtQtQtQtQt", | |||
| "QtQtQtQtQtQtQtQt.z.A.B.CQt.D.E.F.G.G.H.w.I.J.K.L.MQtQtQtQtQtQtQtQtQtQtQt", | |||
| "QtQtQtQtQt.N.w.O.P.Q.R.S.T.U.V.W.G.X.j.Y.Z.G.0.1.2.3QtQtQtQtQtQtQtQtQtQt", | |||
| "QtQtQtQt.4.5.j.6.7.G.G.8.9#.###a.G#b.j#c#d.G#e#f.j#gQtQtQtQtQtQtQtQtQtQt", | |||
| "QtQtQt#h#i.j.j#j#k.G.G#l#m#n#o#d.G.G.G#p#p#l#q#r#s#t#u#vQtQtQtQtQtQtQtQt", | |||
| "QtQt#w#x.j.j.j.j#y#z#A.G#B.G.G.G#C#C#D#E#F#G#H#I#J#K#L#MQtQtQtQtQtQtQtQt", | |||
| "QtQt#N.j.j.j.j.j.j.h#O#P.G.G#Q.G#C#C#Q.G.G.G#d#R#S.j.j#TQtQtQtQtQtQtQtQt", | |||
| "QtQt#U.j.j#V#q.S#W#X#Y.G.G.G#Z.G.G.G.G.G.G.G.G#d#0#1.E#2QtQtQtQtQtQtQtQt", | |||
| "Qt#3#4.j#5#B.G.G.G.G.G.G.G.G#Z.G.G.G.G#6#C#7.G.G.G#8#9QtQtQtQtQtQtQtQtQt", | |||
| "Qt#u.ba.a#aa.G.G.G.G.Gabac.G#Z.G.Gad#6#C#6#7#7.G.GQtQtQtQtQtQtQtQtQtQtQt", | |||
| "QtQtaeafag.Gah.G.G.G.G.Gai.G#Z.G#6aj#C#6.Gakaj#C.GalQtQtQtQtQtQtQtQtQtQt", | |||
| "Qtam.j.janaoaoapaqao#C#C.G.G.G#6aj#Cajad.Gar#Caj.GasQtQtQtQtQtQtQtQtQtQt", | |||
| "Qtat.j.jauav.j.j.j.G#C#Caw.G.Gaj#Caj#6.G.Gar#7#7.GaxQtQtQtQtQtQtQtQtQtQt", | |||
| "Qtay.j.j.j.jaz.j.jaA.G.GaB.G.G#6aj#6.G.G.Gar#7#7.G.GaC.lQtQtQtQtQtQtQtQt", | |||
| "QtaD.j.jaz.j.waEaFaG.G.G.G.G.G.G.G.G.G.G.GaH#7.G.GaIazaJaKQtQtQtQtQtQtQt", | |||
| "QtaL.j.j.jaMaNaO.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.GaP.j.jaQaRQtQtQtQtQtQt", | |||
| "QtaS#i.j.waT.G.G.G.GaU#B.G.G.G.G#C#Cab.G.GaV.G.G.GaWaX.j.jaYaZQtQtQtQtQt", | |||
| "QtQta0.j.ja1.G#d.Ga2a3a4a5.G.G.G#C#C.G.G.GaV.G.G.G.Ga6a7.j.j.kaZQtQtQtQt", | |||
| "QtQta8.ja9b.b#.G.Ga4az.jbabb.G.G.G.G.G.G.G.Gbcbd.G.G.Gbebf.j.jbgbhQtQtQt", | |||
| "QtQtaZbi.objbkbl.8.j.jbmbnbobp.Wbq.G.G.Gbrbsbtbu.G.G.Gbvbwbx.j.jby.bQtQt", | |||
| "QtQtQtQtbzbAbBbCbDbE.jbFbGbH.jaXbq.G.G#dbI.j.jbJ.G.G#d.G.ZbK.j.j.hbLQtQt", | |||
| "QtQtQtbM.k.j.j.j.j.j.jbNbO.j.jbPap.G.GbQ#c.j.jbRbS.G.G.GbTbU.j.jbVQtQtQt", | |||
| "QtQtQtQtQt.k.j.j.j.jbWbXbY.j.jbZb0.G.Gb1b2.j.jb3b4.G.Gb5b6.jb7.DQtQtQtQt", | |||
| "QtQtQtQtQtb8b9.h.jc.c#cacb.j.jcccd.G.GbQce.j.j.jcfbIcgQtQtQtQtQtQtQtQtQt", | |||
| "QtQtQtQtQtQtQtch.EciQt#w.j.j.jcjckceclcmcn.j.j.jazcocpQtQtQtQtQtQtQtQtQt", | |||
| "QtQtQtQtQtQtQtQtQtQtQtcq.j.j.j.j.jcrcsct.j.j.j.j.hcucvQtQtQtQtQtQtQtQtQt", | |||
| "QtQtQtQtQtQtQtQtQtQtQtcwcxcy.E.j.jczcAcB.j.j.j.3bY#sQtQtQtQtQtQtQtQtQtQt", | |||
| "QtQtQtQtQtQtQtQtQtQtQtQtQtcCQtQtQtQtQtcDcEbYQtQtQtQtQtQtQtQtQtQtQtQtQtQt", | |||
| "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", | |||
| "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt", | |||
| "QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"}; | |||
| @@ -0,0 +1,125 @@ | |||
| /* SpiralSound | |||
| * Copyleft (C) 2001 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "EchoPlugin.h" | |||
| #include "EchoPluginGUI.h" | |||
| #include <FL/Fl_Button.h> | |||
| #include "SpiralIcon.xpm" | |||
| static const float MAX_DELAY=1.0f; | |||
| extern "C" { | |||
| SpiralPlugin* CreateInstance() | |||
| { | |||
| return new EchoPlugin; | |||
| } | |||
| char** GetIcon() | |||
| { | |||
| return SpiralIcon_xpm; | |||
| } | |||
| int GetID() | |||
| { | |||
| return 0x000e; | |||
| } | |||
| } | |||
| /////////////////////////////////////////////////////// | |||
| EchoPlugin::EchoPlugin() : | |||
| m_Delay(0.75), | |||
| m_Feedback(0.4), | |||
| m_HeadPos(0) | |||
| { | |||
| m_PluginInfo.Name="Echo"; | |||
| m_PluginInfo.Width=120; | |||
| m_PluginInfo.Height=110; | |||
| m_PluginInfo.NumInputs=3; | |||
| m_PluginInfo.NumOutputs=1; | |||
| m_PluginInfo.PortTips.push_back("Input"); | |||
| m_PluginInfo.PortTips.push_back("Delay CV"); | |||
| m_PluginInfo.PortTips.push_back("Feedback CV"); | |||
| m_PluginInfo.PortTips.push_back("Output"); | |||
| } | |||
| EchoPlugin::~EchoPlugin() | |||
| { | |||
| } | |||
| PluginInfo &EchoPlugin::Initialise(const HostInfo *Host) | |||
| { | |||
| PluginInfo& Info = SpiralPlugin::Initialise(Host); | |||
| m_Buffer.Allocate((int)(m_HostInfo->SAMPLERATE*MAX_DELAY)); | |||
| return Info; | |||
| } | |||
| SpiralGUIType *EchoPlugin::CreateGUI() | |||
| { | |||
| m_GUI = new EchoPluginGUI(m_PluginInfo.Width, | |||
| m_PluginInfo.Height, | |||
| this,m_HostInfo); | |||
| m_GUI->hide(); | |||
| return m_GUI; | |||
| } | |||
| void EchoPlugin::Execute() | |||
| { | |||
| float Delay; | |||
| for (int n=0; n<m_HostInfo->BUFSIZE; n++) | |||
| { | |||
| Delay=(m_Delay+GetInput(1,n)*0.5)*(float)m_HostInfo->SAMPLERATE-1; | |||
| if (Delay>=MAX_DELAY*m_HostInfo->SAMPLERATE) | |||
| { | |||
| Delay=(MAX_DELAY*m_HostInfo->SAMPLERATE)-1; | |||
| } | |||
| if (Delay<0) Delay=0; | |||
| if (m_HeadPos>Delay) | |||
| { | |||
| m_HeadPos=0; | |||
| } | |||
| // Write to the buffer | |||
| m_Buffer.Set(m_HeadPos,GetInput(0,n)+(m_Buffer[m_HeadPos]*(m_Feedback+GetInput(2,n)))); | |||
| // Read from the buffer | |||
| SetOutput(0,n,m_Buffer[m_HeadPos]); | |||
| m_HeadPos++; | |||
| } | |||
| } | |||
| void EchoPlugin::Randomise() | |||
| { | |||
| } | |||
| void EchoPlugin::StreamOut(ostream &s) | |||
| { | |||
| s<<m_Version<<" "<<m_Delay<<" "<<m_Feedback<<" "; | |||
| } | |||
| void EchoPlugin::StreamIn(istream &s) | |||
| { | |||
| int version; | |||
| s>>version; | |||
| s>>m_Delay>>m_Feedback; | |||
| } | |||
| @@ -0,0 +1,61 @@ | |||
| /* SpiralSound | |||
| * Copyleft (C) 2001 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "../SpiralPlugin.h" | |||
| #include <FL/Fl_Pixmap.H> | |||
| #ifndef ECHOPLUGIN | |||
| #define ECHOPLUGIN | |||
| class EchoPlugin : public SpiralPlugin | |||
| { | |||
| public: | |||
| EchoPlugin(); | |||
| virtual ~EchoPlugin(); | |||
| virtual PluginInfo &Initialise(const HostInfo *Host); | |||
| virtual SpiralGUIType *CreateGUI(); | |||
| virtual void Execute(); | |||
| virtual void StreamOut(ostream &s); | |||
| virtual void StreamIn(istream &s); | |||
| // has to be defined in the plugin | |||
| virtual void UpdateGUI() { Fl::check(); } | |||
| void SetDelay(float s) { m_Delay=s; } | |||
| void SetFeedback(float s) { m_Feedback=s; } | |||
| float GetDelay() { return m_Delay; } | |||
| float GetFeedback() { return m_Feedback; } | |||
| void Randomise(); | |||
| private: | |||
| float m_Delay; | |||
| float m_Feedback; | |||
| int m_HeadPos; | |||
| Sample m_Buffer; | |||
| friend istream &operator>>(istream &s, EchoPlugin &o); | |||
| friend ostream &operator<<(ostream &s, EchoPlugin &o); | |||
| }; | |||
| istream &operator>>(istream &s, EchoPlugin &o); | |||
| ostream &operator<<(ostream &s, EchoPlugin &o); | |||
| #endif | |||
| @@ -0,0 +1,17 @@ | |||
| HEADERS = ../SpiralPlugin.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../../Sample.h \ | |||
| EchoPlugin.h \ | |||
| EchoPluginGUI.h | |||
| SOURCES = ../SpiralPlugin.C \ | |||
| ../SpiralPluginGUI.C \ | |||
| ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_DragBar.cxx \ | |||
| ../../Sample.C \ | |||
| EchoPlugin.C \ | |||
| EchoPluginGUI.C | |||
| TARGET = EchoPlugin.so | |||
| @@ -0,0 +1,135 @@ | |||
| /* SpiralPlugin | |||
| * Copyleft (C) 2000 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "EchoPluginGUI.h" | |||
| #include <FL/fl_draw.h> | |||
| #include <FL/fl_draw.H> | |||
| static const int GUI_COLOUR = 179; | |||
| static const int GUIBG_COLOUR = 144; | |||
| static const int GUIBG2_COLOUR = 145; | |||
| //////////////////////////////////////////// | |||
| EchoPluginGUI::EchoPluginGUI(int w, int h,EchoPlugin *o,const HostInfo *Info) : | |||
| SpiralPluginGUI(w,h,o) | |||
| { | |||
| m_Plugin=o; | |||
| m_Delay = new Fl_Slider(15, 20, 20, 70, "Delay"); | |||
| m_Delay->type(4); | |||
| m_Delay->selection_color(GUI_COLOUR); | |||
| m_Delay->labelsize(10); | |||
| m_Delay->maximum(1); | |||
| m_Delay->step(0.001); | |||
| m_Delay->value(0.5); | |||
| m_Delay->callback((Fl_Callback*)cb_Delay); | |||
| m_Feedback = new Fl_Slider(75, 20, 20, 70, "Feedback"); | |||
| m_Feedback->type(4); | |||
| m_Feedback->selection_color(GUI_COLOUR); | |||
| m_Feedback->labelsize(10); | |||
| m_Feedback->maximum(1.1); | |||
| m_Feedback->step(0.01); | |||
| m_Feedback->value(0.4); | |||
| m_Feedback->callback((Fl_Callback*)cb_Feedback); | |||
| m_pop = new Fl_Button(1,h-14, 13, 13, "@>"); | |||
| m_pop->type(1); | |||
| m_pop->box(FL_FLAT_BOX); | |||
| m_pop->down_box(FL_FLAT_BOX); | |||
| m_pop->labeltype(FL_SYMBOL_LABEL); | |||
| m_pop->labelsize(10); | |||
| m_pop->labelcolor(25); | |||
| m_pop->callback((Fl_Callback*)cb_pop); | |||
| m_out_delay = new Fl_Output(50, h+5, 55, 15, "Delay"); | |||
| m_out_delay->box(FL_ENGRAVED_BOX); | |||
| m_out_delay->color(16); | |||
| m_out_delay->labelsize(10); | |||
| m_out_delay->textsize(10); | |||
| m_out_delay->hide(); | |||
| m_out_delay->set_output(); | |||
| m_out_feedback = new Fl_Output(50, h+22, 55, 15, "Feedback"); | |||
| m_out_feedback->box(FL_ENGRAVED_BOX); | |||
| m_out_feedback->color(16); | |||
| m_out_feedback->labelsize(10); | |||
| m_out_feedback->textsize(10); | |||
| m_out_feedback->hide(); | |||
| m_out_feedback->set_output(); | |||
| end(); | |||
| } | |||
| extern "C" int sprintf(char *,const char *,...); | |||
| void EchoPluginGUI::UpdateValues() | |||
| { | |||
| m_Delay->value(1.0f-m_Plugin->GetDelay()); | |||
| m_Feedback->value(1.1f-m_Plugin->GetFeedback()); | |||
| char str[10]; | |||
| sprintf(str,"%5.3f s", m_Plugin->GetDelay()); | |||
| m_out_delay->value(str); | |||
| sprintf(str,"%5.1f %%", 100*m_Plugin->GetFeedback()); | |||
| m_out_feedback->value(str); | |||
| } | |||
| inline void EchoPluginGUI::cb_Delay_i(Fl_Slider* o, void* v) | |||
| { | |||
| char str[10]; | |||
| float value=1.0f-o->value(); | |||
| m_Plugin->SetDelay(value); | |||
| sprintf(str,"%5.3f s", value); | |||
| m_out_delay->value(str); | |||
| } | |||
| void EchoPluginGUI::cb_Delay(Fl_Slider* o, void* v) | |||
| { ((EchoPluginGUI*)(o->parent()))->cb_Delay_i(o,v); } | |||
| inline void EchoPluginGUI::cb_Feedback_i(Fl_Slider* o, void* v) | |||
| { | |||
| char str[10]; | |||
| m_Plugin->SetFeedback(1.1f-o->value()); | |||
| sprintf(str,"%5.1f %%", 100*(1.1f-o->value())); | |||
| m_out_feedback->value(str); | |||
| } | |||
| void EchoPluginGUI::cb_Feedback(Fl_Slider* o, void* v) | |||
| { ((EchoPluginGUI*)(o->parent()))->cb_Feedback_i(o,v); } | |||
| inline void EchoPluginGUI::cb_pop_i(Fl_Button *o, void*) { | |||
| if (o->value()) | |||
| { | |||
| o->label("@2>"); | |||
| m_out_delay->show(); | |||
| m_out_feedback->show(); | |||
| redraw(); | |||
| } | |||
| else | |||
| { | |||
| o->label("@>"); | |||
| m_out_delay->hide(); | |||
| m_out_feedback->hide(); | |||
| redraw(); | |||
| parent()->redraw(); | |||
| } | |||
| } | |||
| void EchoPluginGUI::cb_pop(Fl_Button* o, void* v) { | |||
| ((EchoPluginGUI*)(o->parent()))->cb_pop_i(o,v); | |||
| } | |||
| @@ -0,0 +1,63 @@ | |||
| /* SpiralPlugin | |||
| * Copyleft (C) 2000 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include <FL/Fl.H> | |||
| #include <FL/Fl_Window.H> | |||
| #include <FL/Fl_Group.H> | |||
| #include <FL/Fl_Slider.H> | |||
| #include <FL/Fl_Output.H> | |||
| #include <FL/Fl_Button.H> | |||
| #include <FL/Fl_Box.H> | |||
| #include "EchoPlugin.h" | |||
| #include "../SpiralPluginGUI.h" | |||
| #include "../Widgets/Fl_Knob.H" | |||
| #ifndef FilterGUI | |||
| #define FilterGUI | |||
| class EchoPluginGUI : public SpiralPluginGUI | |||
| { | |||
| public: | |||
| EchoPluginGUI(int w, int h, EchoPlugin *o,const HostInfo *Info); | |||
| virtual void UpdateValues(); | |||
| virtual SpiralPlugin* GetPlugin() { return m_Plugin; } | |||
| EchoPlugin *m_Plugin; | |||
| private: | |||
| Fl_Slider *m_Delay; | |||
| Fl_Slider *m_Feedback; | |||
| Fl_Button *m_pop; | |||
| Fl_Output *m_out_delay; | |||
| Fl_Output *m_out_feedback; | |||
| //// Callbacks //// | |||
| inline void cb_Delay_i(Fl_Slider* o, void* v); | |||
| static void cb_Delay(Fl_Slider*, void*); | |||
| inline void cb_Feedback_i(Fl_Slider* o, void* v); | |||
| static void cb_Feedback(Fl_Slider* o, void* v); | |||
| inline void cb_pop_i(Fl_Button* o, void*); | |||
| static void cb_pop(Fl_Button* o, void*); | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,166 @@ | |||
| ############################################################################# | |||
| # Makefile for building EchoPlugin.so | |||
| # Generated by tmake at 22:13, 2001/09/17 | |||
| # Project: EchoPlugin | |||
| # Template: app | |||
| ############################################################################# | |||
| ####### Compiler, tools and options | |||
| CC = gcc | |||
| CXX = g++ | |||
| CFLAGS = @CFLAGS@ | |||
| CXXFLAGS= @CXXFLAGS@ | |||
| INCPATH = -I/usr/X11R6/include | |||
| LINK = g++ -shared | |||
| LFLAGS = | |||
| LIBS = -L/usr/X11R6/lib -lfltk -lGL -lXext -lX11 -lm -ldl | |||
| MOC = moc | |||
| UIC = | |||
| TAR = tar -cf | |||
| GZIP = gzip -9f | |||
| INSTALL = @INSTALL@ | |||
| ###### Autoconf variables | |||
| prefix = @prefix@ | |||
| exec_prefix = @exec_prefix@ | |||
| bindir = @bindir@ | |||
| sbindir = @sbindir@ | |||
| libexecdir = @libexecdir@ | |||
| datadir = @datadir@ | |||
| sysconfdir = @sysconfdir@ | |||
| sharedstatedir = @sharedstatedir@ | |||
| localstatedir = @localstatedir@ | |||
| libdir = @libdir@ | |||
| infodir = @infodir@ | |||
| mandir = @mandir@ | |||
| ####### Files | |||
| HEADERS = ../SpiralPlugin.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../../Sample.h \ | |||
| EchoPlugin.h \ | |||
| EchoPluginGUI.h | |||
| SOURCES = ../SpiralPlugin.C \ | |||
| ../SpiralPluginGUI.C \ | |||
| ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_DragBar.cxx \ | |||
| ../../Sample.C \ | |||
| EchoPlugin.C \ | |||
| EchoPluginGUI.C | |||
| OBJECTS = ../SpiralPlugin.o \ | |||
| ../SpiralPluginGUI.o \ | |||
| ../Widgets/Fl_Knob.o \ | |||
| ../Widgets/Fl_DragBar.o \ | |||
| ../../Sample.o \ | |||
| EchoPlugin.o \ | |||
| EchoPluginGUI.o | |||
| INTERFACES = | |||
| UICDECLS = | |||
| UICIMPLS = | |||
| SRCMOC = | |||
| OBJMOC = | |||
| DIST = | |||
| TARGET = EchoPlugin.so | |||
| ####### Implicit rules | |||
| .SUFFIXES: .cpp .cxx .cc .C .c | |||
| .cpp.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .cxx.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .cc.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .C.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .c.o: | |||
| $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< | |||
| ####### Build rules | |||
| all: $(TARGET) | |||
| $(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) | |||
| $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS) | |||
| moc: $(SRCMOC) | |||
| tmake: | |||
| tmake EchoPlugin.pro | |||
| dist: | |||
| $(TAR) EchoPlugin.tar EchoPlugin.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST) | |||
| $(GZIP) EchoPlugin.tar | |||
| clean: | |||
| -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET) | |||
| -rm -f *~ core | |||
| install: | |||
| $(INSTALL) $(TARGET) $(libdir)/SpiralPlugins | |||
| ####### Sub-libraries | |||
| ###### Combined headers | |||
| ####### Compile | |||
| ../SpiralPlugin.o: ../SpiralPlugin.C \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h | |||
| ../SpiralPluginGUI.o: ../SpiralPluginGUI.C \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h | |||
| ../Widgets/Fl_Knob.o: ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_Knob.H | |||
| ../Widgets/Fl_DragBar.o: ../Widgets/Fl_DragBar.cxx \ | |||
| ../Widgets/Fl_DragBar.H | |||
| ../../Sample.o: ../../Sample.C \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h | |||
| EchoPlugin.o: EchoPlugin.C \ | |||
| EchoPlugin.h \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h \ | |||
| ../../Sample.h \ | |||
| EchoPluginGUI.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| SpiralIcon.xpm | |||
| EchoPluginGUI.o: EchoPluginGUI.C \ | |||
| EchoPluginGUI.h \ | |||
| EchoPlugin.h \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h \ | |||
| ../../Sample.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../Widgets/Fl_Knob.H | |||
| @@ -0,0 +1,341 @@ | |||
| /* XPM */ | |||
| static char * SpiralIcon_xpm[] = { | |||
| "36 36 302 2", | |||
| " c None", | |||
| ". c #8B889B", | |||
| "+ c #9C99AA", | |||
| "@ c #ADAAB9", | |||
| "# c #837F94", | |||
| "$ c #7D7990", | |||
| "% c #9995A7", | |||
| "& c #67627C", | |||
| "* c #CDCBD4", | |||
| "= c #FCFCFC", | |||
| "- c #D1D0D8", | |||
| "; c #FFFFFF", | |||
| "> c #F1F1F3", | |||
| ", c #848095", | |||
| "' c #2A2248", | |||
| ") c #CFCED6", | |||
| "! c #68637D", | |||
| "~ c #ABA8B6", | |||
| "{ c #D5D3DB", | |||
| "] c #9490A2", | |||
| "^ c #C4C4C4", | |||
| "/ c #1D1C1D", | |||
| "( c #313134", | |||
| "_ c #EEEFEE", | |||
| ": c #FBFBFB", | |||
| "< c #EFEFEF", | |||
| "[ c #7B768D", | |||
| "} c #464060", | |||
| "| c #DEDEE1", | |||
| "1 c #CBCACC", | |||
| "2 c #EEEEF1", | |||
| "3 c #79758C", | |||
| "4 c #FBFBFC", | |||
| "5 c #A2A2A2", | |||
| "6 c #000000", | |||
| "7 c #F5F6F5", | |||
| "8 c #747474", | |||
| "9 c #2A2A2B", | |||
| "0 c #403958", | |||
| "a c #7D788F", | |||
| "b c #C0BEC8", | |||
| "c c #BCBAC6", | |||
| "d c #BCBAC5", | |||
| "e c #625C79", | |||
| "f c #2B2932", | |||
| "g c #191919", | |||
| "h c #CCCCCC", | |||
| "i c #807B91", | |||
| "j c #3B3556", | |||
| "k c #F2F2F4", | |||
| "l c #929292", | |||
| "m c #0E0E0E", | |||
| "n c #BFBFBF", | |||
| "o c #111111", | |||
| "p c #100E15", | |||
| "q c #868689", | |||
| "r c #FEFDFE", | |||
| "s c #D9D7DE", | |||
| "t c #9C98AA", | |||
| "u c #FDFCFD", | |||
| "v c #DDDDDD", | |||
| "w c #575755", | |||
| "x c #5E5E5E", | |||
| "y c #C4C2CD", | |||
| "z c #423C5C", | |||
| "A c #F0F0F2", | |||
| "B c #939393", | |||
| "C c #555555", | |||
| "D c #4A4A4A", | |||
| "E c #010101", | |||
| "F c #282828", | |||
| "G c #C2C2C2", | |||
| "H c #DBDAE0", | |||
| "I c #615C78", | |||
| "J c #F6F6F7", | |||
| "K c #DADADA", | |||
| "L c #545454", | |||
| "M c #0F0F0F", | |||
| "N c #B8B8B8", | |||
| "O c #48445C", | |||
| "P c #2B2B2C", | |||
| "Q c #181900", | |||
| "R c #D3D3D3", | |||
| "S c #C1BEC9", | |||
| "T c #474060", | |||
| "U c #31294D", | |||
| "V c #716C85", | |||
| "W c #65607A", | |||
| "X c #625D78", | |||
| "Y c #D5D4DB", | |||
| "Z c #F7F7F7", | |||
| "` c #8B8B8B", | |||
| " . c #161616", | |||
| ".. c #0C0C0C", | |||
| "+. c #161800", | |||
| "@. c #1A1B00", | |||
| "#. c #060600", | |||
| "$. c #191A00", | |||
| "%. c #393643", | |||
| "&. c #47415F", | |||
| "*. c #9692A4", | |||
| "=. c #D9D8DE", | |||
| "-. c #F7F7F8", | |||
| ";. c #918DA0", | |||
| ">. c #B8B5C1", | |||
| ",. c #D1D1D1", | |||
| "'. c #212121", | |||
| "). c #2D2F00", | |||
| "!. c #101100", | |||
| "~. c #090A00", | |||
| "{. c #0C0C00", | |||
| "]. c #070800", | |||
| "^. c #030300", | |||
| "/. c #727175", | |||
| "(. c #FEFEFF", | |||
| "_. c #9D99AA", | |||
| ":. c #DBD9E0", | |||
| "<. c #E9E9E9", | |||
| "[. c #CBCBCB", | |||
| "}. c #E0E0E0", | |||
| "|. c #6C6C6C", | |||
| "1. c #CCC200", | |||
| "2. c #CCC100", | |||
| "3. c #030400", | |||
| "4. c #0E0F00", | |||
| "5. c #515151", | |||
| "6. c #A6A6A7", | |||
| "7. c #827E93", | |||
| "8. c #615C77", | |||
| "9. c #EAEAED", | |||
| "0. c #DFDFE1", | |||
| "a. c #EADE00", | |||
| "b. c #1E1D24", | |||
| "c. c #9894A7", | |||
| "d. c #B1AEBB", | |||
| "e. c #69686F", | |||
| "f. c #000001", | |||
| "g. c #615C76", | |||
| "h. c #5F5A75", | |||
| "i. c #413E4D", | |||
| "j. c #020203", | |||
| "k. c #706A00", | |||
| "l. c #131314", | |||
| "m. c #C3C1CB", | |||
| "n. c #9D9D9D", | |||
| "o. c #202020", | |||
| "p. c #383838", | |||
| "q. c #4C4C4C", | |||
| "r. c #080808", | |||
| "s. c #E7DB00", | |||
| "t. c #09090A", | |||
| "u. c #C9C7D0", | |||
| "v. c #F1F1F1", | |||
| "w. c #F8F8F8", | |||
| "x. c #070707", | |||
| "y. c #B1A700", | |||
| "z. c #020103", | |||
| "A. c #AEACB9", | |||
| "B. c #FEFEFE", | |||
| "C. c #0A0A0A", | |||
| "D. c #E8DC00", | |||
| "E. c #E0D400", | |||
| "F. c #BFB500", | |||
| "G. c #D1C600", | |||
| "H. c #B7B5C1", | |||
| "I. c #9390A2", | |||
| "J. c #BBBBBB", | |||
| "K. c #414141", | |||
| "L. c #020202", | |||
| "M. c #131400", | |||
| "N. c #807900", | |||
| "O. c #FDF000", | |||
| "P. c #FFF200", | |||
| "Q. c #999100", | |||
| "R. c #1D1C1E", | |||
| "S. c #F4F4F6", | |||
| "T. c #605B76", | |||
| "U. c #736E86", | |||
| "V. c #D8D8D8", | |||
| "W. c #727272", | |||
| "X. c #101010", | |||
| "Y. c #1E1C00", | |||
| "Z. c #8F8700", | |||
| "`. c #918900", | |||
| " + c #8E8600", | |||
| ".+ c #090900", | |||
| "++ c #848486", | |||
| "@+ c #CCCBD3", | |||
| "#+ c #747087", | |||
| "$+ c #6D6881", | |||
| "%+ c #1C1C1C", | |||
| "&+ c #242424", | |||
| "*+ c #656566", | |||
| "=+ c #F6F6F6", | |||
| "-+ c #E8E6EA", | |||
| ";+ c #706B84", | |||
| ">+ c #E3E1E6", | |||
| ",+ c #474746", | |||
| "'+ c #151515", | |||
| ")+ c #C8C8C8", | |||
| "!+ c #AEAEAE", | |||
| "~+ c #010100", | |||
| "{+ c #373639", | |||
| "]+ c #FDFCFE", | |||
| "^+ c #ABA8B7", | |||
| "/+ c #F1F0F3", | |||
| "(+ c #6D6980", | |||
| "_+ c #0A090E", | |||
| ":+ c #95929E", | |||
| "<+ c #0A0810", | |||
| "[+ c #0D0D0D", | |||
| "}+ c #050505", | |||
| "|+ c #5B5A5C", | |||
| "1+ c #F7F6F7", | |||
| "2+ c #F4F3F5", | |||
| "3+ c #908C9F", | |||
| "4+ c #C8C6D0", | |||
| "5+ c #837E96", | |||
| "6+ c #86868A", | |||
| "7+ c #070608", | |||
| "8+ c #ECEBEE", | |||
| "9+ c #5B5571", | |||
| "0+ c #646078", | |||
| "a+ c #AFAFB0", | |||
| "b+ c #454545", | |||
| "c+ c #363636", | |||
| "d+ c #7A7A7A", | |||
| "e+ c #C8C8C9", | |||
| "f+ c #212025", | |||
| "g+ c #060607", | |||
| "h+ c #969699", | |||
| "i+ c #FAFAFA", | |||
| "j+ c #F8F8F9", | |||
| "k+ c #A29EAF", | |||
| "l+ c #F7F6F8", | |||
| "m+ c #F0F0F1", | |||
| "n+ c #B8B7B9", | |||
| "o+ c #E4E4E4", | |||
| "p+ c #FDFDFD", | |||
| "q+ c #A5A2B2", | |||
| "r+ c #3B3456", | |||
| "s+ c #A8A5B4", | |||
| "t+ c #525252", | |||
| "u+ c #848387", | |||
| "v+ c #CDCDCD", | |||
| "w+ c #8D899C", | |||
| "x+ c #494262", | |||
| "y+ c #68627C", | |||
| "z+ c #40395A", | |||
| "A+ c #ECECEC", | |||
| "B+ c #B4B5B5", | |||
| "C+ c #0B0B0B", | |||
| "D+ c #313232", | |||
| "E+ c #E3E3E3", | |||
| "F+ c #B1AEBC", | |||
| "G+ c #BDBBC6", | |||
| "H+ c #3C3556", | |||
| "I+ c #898599", | |||
| "J+ c #EDEDED", | |||
| "K+ c #39393A", | |||
| "L+ c #040404", | |||
| "M+ c #333333", | |||
| "N+ c #F5F5F5", | |||
| "O+ c #2B2B2B", | |||
| "P+ c #2D2A3D", | |||
| "Q+ c #B6B4C1", | |||
| "R+ c #F5F5F6", | |||
| "S+ c #605A76", | |||
| "T+ c #DAD8DF", | |||
| "U+ c #F5F4F6", | |||
| "V+ c #615B76", | |||
| "W+ c #524D6A", | |||
| "X+ c #E4E3E8", | |||
| "Y+ c #D5D5D5", | |||
| "Z+ c #1B1B1B", | |||
| "`+ c #303030", | |||
| " @ c #AAABAB", | |||
| ".@ c #585464", | |||
| "+@ c #B0AEBB", | |||
| "@@ c #A29FAF", | |||
| "#@ c #E9E8E9", | |||
| "$@ c #787779", | |||
| "%@ c #0F0E15", | |||
| "&@ c #2D2D2E", | |||
| "*@ c #595959", | |||
| "=@ c #FAFAFB", | |||
| "-@ c #807B92", | |||
| ";@ c #B0ADBB", | |||
| ">@ c #E8E7EB", | |||
| ",@ c #3A3258", | |||
| "'@ c #E6E5EA", | |||
| ")@ c #DFDEE3", | |||
| "!@ c #443E5E", | |||
| "~@ c #BAB8C4", | |||
| "{@ c #C1BFCA", | |||
| "]@ c #E0E0E5", | |||
| "^@ c #D0CED6", | |||
| "/@ c #362F52", | |||
| "(@ c #CECCD5", | |||
| "_@ c #413A5B", | |||
| ":@ c #6A657F", | |||
| "<@ c #9793A6", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " . + @ # $ % ", | |||
| " & * = * - ; > , ' ; ; ; ) ! ", | |||
| " ~ ; ; { ] ; ^ / ( _ ; : < [ ", | |||
| " } | 1 2 3 4 5 6 6 7 : 8 9 0 a b ", | |||
| " c : d e f g h i j k l 6 m ; n o 6 p q r s ", | |||
| " t u ; v w 6 6 x y z A B 6 C ; D E 6 F G ; H ", | |||
| " I J ; ; K L 6 6 M N O P E 6 6 6 Q Q M R S T U V W ", | |||
| " X Y ; ; ; ; Z ` .6 ..6 6 6 6 6 +.@.#.$.%.&.*.=.-.;. ", | |||
| " >.; ; ; ; ; ; = ,.'.).!.~.{.].6 ^.6 6 6 E /.(.; ; _. ", | |||
| " :.; ; <.R h [.}.|.6 1.2.6 6 6 3.4.6 6 6 6 E 5.6.4 7. ", | |||
| " 8.9.; 0...6 6 6 6 6 6 a.a.6 6 6 6 6 6 6 6 6 6 6 b.c. ", | |||
| " V @ d.e.f.6 6 6 6 6 6 a.a.6 2.2.6 6 6 6 6 6 6 6 ", | |||
| " g.h.i.6 j.6 6 6 6 6 a.a.6 a.a.6 k.k.6 6 6 6 6 l. ", | |||
| " m.; ; n.o.o.p.q.r.6 6 a.a.6 a.a.6 s.s.6 6 6 6 6 t. ", | |||
| " u.; ; v.w.; ; ; x.6 6 a.a.6 a.a.6 a.a.6 y.y.6 6 z. ", | |||
| " A.; ; ; ; B.; ; C.6 6 D.D.6 E.E.6 F.F.6 G.G.6 6 6 H., ", | |||
| " I.; ; B.; : J.K.L.M.N.O.O.O.O.O.O.P.P.P.P.P.Q.!.R.B.S.T. ", | |||
| " U.; ; ; V.W.X.6 6 6 Y.Z.`.`.`.`. +Y.6 6 6 6 .+4.++; ; @+#+ ", | |||
| " $+J ; : %+6 6 6 6 &+r.6 6 6 6 6 6 6 6 6 6 6 6 6 *+=+; ; -+;+ ", | |||
| " >+; ; ,+6 E 6 '+)+!+r.6 6 6 6 6 6 6 6 ~+6 6 6 6 {+]+; ; > ;+ ", | |||
| " ^+; /+(+_+6 6 !+B.; :+<+6 6 6 6 6 6 6 6 [+}+6 6 6 |+1+; ; 2+3+ ", | |||
| " ;+4+! 5+6+7+x ; ; 8+9+0+a+l b+6 6 6 c+d+e+f+6 6 6 g+h+i+; ; j+@ ", | |||
| " k+l+m+n+o+p+; q+r+s+; =+b+6 6 E t+; ; u+6 6 E 6 o v+; ; = w+ ", | |||
| " x+> ; ; ; ; ; ; y+z+; ; A+p.6 6 L.D ; ; B+C+6 6 6 D+E+; ; F+ ", | |||
| " > ; ; ; ; G+H+I+; ; J+K+6 6 L+M+; ; N+O+6 6 P+Q+; R+3 ", | |||
| " S+T+= ; U+V+W+X+; ; Y+Z+6 6 L.`+; ; ; @t+.@ ", | |||
| " +@4 @@ X ; ; ; #@$@`+%@&@*@; ; ; B.=@-@ ", | |||
| " ;@; ; ; ; ; >@,@'@; ; ; ; = )@!@ ", | |||
| " ~@{@]@4 ; ; ^@/@(@; ; ; s I+T ", | |||
| " _@ :@<@I+ ", | |||
| " ", | |||
| " ", | |||
| " "}; | |||
| @@ -0,0 +1,10 @@ | |||
| #! /bin/sh | |||
| for file in `cat PluginList.txt` | |||
| do | |||
| echo $file | |||
| cd $file/ | |||
| nedit $file.h | |||
| nedit $file.C | |||
| cd .. | |||
| done | |||
| @@ -0,0 +1,98 @@ | |||
| /* SpiralSound | |||
| * Copyleft (C) 2001 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "EnvFollowerPlugin.h" | |||
| #include "EnvFollowerPluginGUI.h" | |||
| #include <FL/Fl_Button.h> | |||
| #include "SpiralIcon.xpm" | |||
| extern "C" { | |||
| SpiralPlugin* CreateInstance() | |||
| { | |||
| return new EnvFollowerPlugin; | |||
| } | |||
| char** GetIcon() | |||
| { | |||
| return SpiralIcon_xpm; | |||
| } | |||
| int GetID() | |||
| { | |||
| return 0x0013; | |||
| } | |||
| } | |||
| /////////////////////////////////////////////////////// | |||
| EnvFollowerPlugin::EnvFollowerPlugin() : | |||
| m_Attack(0.5), | |||
| m_Decay(0.5), | |||
| m_Value(0) | |||
| { | |||
| m_PluginInfo.Name="EnvFollower"; | |||
| m_PluginInfo.Width=140; | |||
| m_PluginInfo.Height=100; | |||
| m_PluginInfo.NumInputs=1; | |||
| m_PluginInfo.NumOutputs=1; | |||
| m_PluginInfo.PortTips.push_back("Input"); | |||
| m_PluginInfo.PortTips.push_back("Output"); | |||
| } | |||
| EnvFollowerPlugin::~EnvFollowerPlugin() | |||
| { | |||
| } | |||
| PluginInfo &EnvFollowerPlugin::Initialise(const HostInfo *Host) | |||
| { | |||
| return SpiralPlugin::Initialise(Host); | |||
| } | |||
| SpiralGUIType *EnvFollowerPlugin::CreateGUI() | |||
| { | |||
| m_GUI = new EnvFollowerPluginGUI(m_PluginInfo.Width, | |||
| m_PluginInfo.Height, | |||
| this,m_HostInfo); | |||
| m_GUI->hide(); | |||
| return m_GUI; | |||
| } | |||
| void EnvFollowerPlugin::Execute() | |||
| { | |||
| float Value; | |||
| for (int n=0; n<m_HostInfo->BUFSIZE; n++) | |||
| { | |||
| Value = fabs(GetInput(0,n)); | |||
| if (Value>m_Value) m_Value+=(m_Attack*100); | |||
| else m_Value-=(m_Decay*100); | |||
| SetOutput(0,n,m_Value); | |||
| } | |||
| } | |||
| void EnvFollowerPlugin::StreamOut(ostream &s) | |||
| { | |||
| s<<m_Version<<" "; | |||
| s<<m_Attack<<" "<<m_Decay; | |||
| } | |||
| void EnvFollowerPlugin::StreamIn(istream &s) | |||
| { | |||
| s>>m_Version; | |||
| s>>m_Attack>>m_Decay; | |||
| } | |||
| @@ -0,0 +1,51 @@ | |||
| /* SpiralSound | |||
| * Copyleft (C) 2001 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "../SpiralPlugin.h" | |||
| #include <FL/Fl_Pixmap.H> | |||
| #ifndef EnvFollowerPLUGIN | |||
| #define EnvFollowerPLUGIN | |||
| class EnvFollowerPlugin : public SpiralPlugin | |||
| { | |||
| public: | |||
| EnvFollowerPlugin(); | |||
| virtual ~EnvFollowerPlugin(); | |||
| virtual PluginInfo& Initialise(const HostInfo *Host); | |||
| virtual SpiralGUIType* CreateGUI(); | |||
| virtual void Execute(); | |||
| virtual void StreamOut(ostream &s); | |||
| virtual void StreamIn(istream &s); | |||
| // has to be defined in the plugin | |||
| virtual void UpdateGUI() { Fl::check(); } | |||
| void SetAttack(float v) { m_Attack=v; } | |||
| float GetAttack() { return m_Attack; } | |||
| void SetDecay(float v) { m_Decay=v; } | |||
| float GetDecay() { return m_Decay; } | |||
| private: | |||
| float m_Attack; | |||
| float m_Decay; | |||
| float m_Value; | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,17 @@ | |||
| HEADERS = ../SpiralPlugin.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../../Sample.h \ | |||
| EnvFollowerPlugin.h \ | |||
| EnvFollowerPluginGUI.h | |||
| SOURCES = ../SpiralPlugin.C \ | |||
| ../SpiralPluginGUI.C \ | |||
| ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_DragBar.cxx \ | |||
| ../../Sample.C \ | |||
| EnvFollowerPlugin.C \ | |||
| EnvFollowerPluginGUI.C | |||
| TARGET = EnvFollowerPlugin.so | |||
| @@ -0,0 +1,73 @@ | |||
| /* SpiralPlugin | |||
| * Copyleft (C) 2000 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "EnvFollowerPluginGUI.h" | |||
| #include <FL/fl_draw.h> | |||
| #include <FL/fl_draw.H> | |||
| static const int GUI_COLOUR = 179; | |||
| static const int GUIBG_COLOUR = 144; | |||
| static const int GUIBG2_COLOUR = 145; | |||
| //////////////////////////////////////////// | |||
| EnvFollowerPluginGUI::EnvFollowerPluginGUI(int w, int h,EnvFollowerPlugin *o,const HostInfo *Info) : | |||
| SpiralPluginGUI(w,h,o) | |||
| { | |||
| m_Plugin=o; | |||
| m_Attack = new Fl_Knob(20, 25, 40, 40, "Attack"); | |||
| m_Attack->color(GUI_COLOUR); | |||
| m_Attack->type(Fl_Knob::DOTLIN); | |||
| m_Attack->labelsize(10); | |||
| m_Attack->maximum(1); | |||
| m_Attack->step(0.001); | |||
| m_Attack->value(0.5); | |||
| m_Attack->callback((Fl_Callback*)cb_Attack); | |||
| add(m_Attack); | |||
| m_Decay = new Fl_Knob(75, 25, 40, 40, "Decay"); | |||
| m_Decay->color(GUI_COLOUR); | |||
| m_Decay->type(Fl_Knob::DOTLIN); | |||
| m_Decay->labelsize(10); | |||
| m_Decay->maximum(1); | |||
| m_Decay->step(0.001); | |||
| m_Decay->value(0.5); | |||
| m_Decay->callback((Fl_Callback*)cb_Decay); | |||
| add(m_Decay); | |||
| end(); | |||
| } | |||
| void EnvFollowerPluginGUI::UpdateValues() | |||
| { | |||
| m_Attack->value(m_Plugin->GetAttack()); | |||
| m_Decay->value(m_Plugin->GetDecay()); | |||
| } | |||
| inline void EnvFollowerPluginGUI::cb_Decay_i(Fl_Knob* o, void* v) | |||
| { m_Plugin->SetDecay(o->value()); } | |||
| void EnvFollowerPluginGUI::cb_Decay(Fl_Knob* o, void* v) | |||
| { ((EnvFollowerPluginGUI*)(o->parent()))->cb_Decay_i(o,v);} | |||
| inline void EnvFollowerPluginGUI::cb_Attack_i(Fl_Knob* o, void* v) | |||
| { m_Plugin->SetAttack(o->value()); } | |||
| void EnvFollowerPluginGUI::cb_Attack(Fl_Knob* o, void* v) | |||
| { ((EnvFollowerPluginGUI*)(o->parent()))->cb_Attack_i(o,v);} | |||
| @@ -0,0 +1,54 @@ | |||
| /* SpiralPlugin | |||
| * Copyleft (C) 2000 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include <FL/Fl.H> | |||
| #include <FL/Fl_Window.H> | |||
| #include <FL/Fl_Group.H> | |||
| #include <FL/Fl_Button.H> | |||
| #include "../Widgets/Fl_Knob.H" | |||
| #include "../Widgets/Fl_DragBar.H" | |||
| #include "EnvFollowerPlugin.h" | |||
| #include "../SpiralPluginGUI.h" | |||
| #ifndef SplitterGUI | |||
| #define SplitterGUI | |||
| class EnvFollowerPluginGUI : public SpiralPluginGUI | |||
| { | |||
| public: | |||
| EnvFollowerPluginGUI(int w, int h, EnvFollowerPlugin *o,const HostInfo *Info); | |||
| virtual void UpdateValues(); | |||
| virtual SpiralPlugin* GetPlugin() { return m_Plugin; } | |||
| EnvFollowerPlugin *m_Plugin; | |||
| private: | |||
| Fl_Knob* m_Attack; | |||
| Fl_Knob* m_Decay; | |||
| //// Callbacks //// | |||
| inline void cb_Attack_i(Fl_Knob* o, void* v); | |||
| static void cb_Attack(Fl_Knob* o, void* v); | |||
| inline void cb_Decay_i(Fl_Knob* o, void* v); | |||
| static void cb_Decay(Fl_Knob* o, void* v); | |||
| }; | |||
| #endif | |||
| @@ -0,0 +1,168 @@ | |||
| ############################################################################# | |||
| # Makefile for building EnvFollowerPlugin.so | |||
| # Generated by tmake at 22:13, 2001/09/17 | |||
| # Project: EnvFollowerPlugin | |||
| # Template: app | |||
| ############################################################################# | |||
| ####### Compiler, tools and options | |||
| CC = gcc | |||
| CXX = g++ | |||
| CFLAGS = @CFLAGS@ | |||
| CXXFLAGS= @CXXFLAGS@ | |||
| INCPATH = -I/usr/X11R6/include | |||
| LINK = g++ -shared | |||
| LFLAGS = | |||
| LIBS = -L/usr/X11R6/lib -lfltk -lGL -lXext -lX11 -lm -ldl | |||
| MOC = moc | |||
| UIC = | |||
| TAR = tar -cf | |||
| GZIP = gzip -9f | |||
| INSTALL = @INSTALL@ | |||
| ###### Autoconf variables | |||
| prefix = @prefix@ | |||
| exec_prefix = @exec_prefix@ | |||
| bindir = @bindir@ | |||
| sbindir = @sbindir@ | |||
| libexecdir = @libexecdir@ | |||
| datadir = @datadir@ | |||
| sysconfdir = @sysconfdir@ | |||
| sharedstatedir = @sharedstatedir@ | |||
| localstatedir = @localstatedir@ | |||
| libdir = @libdir@ | |||
| infodir = @infodir@ | |||
| mandir = @mandir@ | |||
| ####### Files | |||
| HEADERS = ../SpiralPlugin.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../../Sample.h \ | |||
| EnvFollowerPlugin.h \ | |||
| EnvFollowerPluginGUI.h | |||
| SOURCES = ../SpiralPlugin.C \ | |||
| ../SpiralPluginGUI.C \ | |||
| ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_DragBar.cxx \ | |||
| ../../Sample.C \ | |||
| EnvFollowerPlugin.C \ | |||
| EnvFollowerPluginGUI.C | |||
| OBJECTS = ../SpiralPlugin.o \ | |||
| ../SpiralPluginGUI.o \ | |||
| ../Widgets/Fl_Knob.o \ | |||
| ../Widgets/Fl_DragBar.o \ | |||
| ../../Sample.o \ | |||
| EnvFollowerPlugin.o \ | |||
| EnvFollowerPluginGUI.o | |||
| INTERFACES = | |||
| UICDECLS = | |||
| UICIMPLS = | |||
| SRCMOC = | |||
| OBJMOC = | |||
| DIST = | |||
| TARGET = EnvFollowerPlugin.so | |||
| ####### Implicit rules | |||
| .SUFFIXES: .cpp .cxx .cc .C .c | |||
| .cpp.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .cxx.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .cc.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .C.o: | |||
| $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $< | |||
| .c.o: | |||
| $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $< | |||
| ####### Build rules | |||
| all: $(TARGET) | |||
| $(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) | |||
| $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS) | |||
| moc: $(SRCMOC) | |||
| tmake: | |||
| tmake EnvFollowerPlugin.pro | |||
| dist: | |||
| $(TAR) EnvFollowerPlugin.tar EnvFollowerPlugin.pro $(SOURCES) $(HEADERS) $(INTERFACES) $(DIST) | |||
| $(GZIP) EnvFollowerPlugin.tar | |||
| clean: | |||
| -rm -f $(OBJECTS) $(OBJMOC) $(SRCMOC) $(UICIMPLS) $(UICDECLS) $(TARGET) | |||
| -rm -f *~ core | |||
| install: | |||
| $(INSTALL) $(TARGET) $(libdir)/SpiralPlugins | |||
| ####### Sub-libraries | |||
| ###### Combined headers | |||
| ####### Compile | |||
| ../SpiralPlugin.o: ../SpiralPlugin.C \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h | |||
| ../SpiralPluginGUI.o: ../SpiralPluginGUI.C \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h | |||
| ../Widgets/Fl_Knob.o: ../Widgets/Fl_Knob.cxx \ | |||
| ../Widgets/Fl_Knob.H | |||
| ../Widgets/Fl_DragBar.o: ../Widgets/Fl_DragBar.cxx \ | |||
| ../Widgets/Fl_DragBar.H | |||
| ../../Sample.o: ../../Sample.C \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h | |||
| EnvFollowerPlugin.o: EnvFollowerPlugin.C \ | |||
| EnvFollowerPlugin.h \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h \ | |||
| ../../Sample.h \ | |||
| EnvFollowerPluginGUI.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| SpiralIcon.xpm | |||
| EnvFollowerPluginGUI.o: EnvFollowerPluginGUI.C \ | |||
| EnvFollowerPluginGUI.h \ | |||
| ../Widgets/Fl_Knob.H \ | |||
| ../Widgets/Fl_DragBar.H \ | |||
| EnvFollowerPlugin.h \ | |||
| ../SpiralPlugin.h \ | |||
| ../../Sample.h \ | |||
| ../../SpiralInfo.h \ | |||
| ../../Sample.h \ | |||
| ../SpiralPluginGUI.h \ | |||
| ../Widgets/Fl_DragBar.H | |||
| @@ -0,0 +1,321 @@ | |||
| /* XPM */ | |||
| static char * SpiralIcon_xpm[] = { | |||
| "36 36 282 2", | |||
| " c None", | |||
| ". c #8B889B", | |||
| "+ c #9C99AA", | |||
| "@ c #ADAAB9", | |||
| "# c #837F94", | |||
| "$ c #7D7990", | |||
| "% c #9995A7", | |||
| "& c #67627C", | |||
| "* c #CDCBD4", | |||
| "= c #FCFCFC", | |||
| "- c #D1D0D8", | |||
| "; c #FFFFFF", | |||
| "> c #F1F1F3", | |||
| ", c #848095", | |||
| "' c #2A2248", | |||
| ") c #CFCED6", | |||
| "! c #68637D", | |||
| "~ c #ABA8B6", | |||
| "{ c #D5D3DB", | |||
| "] c #9490A2", | |||
| "^ c #C4C4C4", | |||
| "/ c #1D1C1D", | |||
| "( c #313134", | |||
| "_ c #EEEFEE", | |||
| ": c #FBFBFB", | |||
| "< c #EFEFEF", | |||
| "[ c #7B768D", | |||
| "} c #464060", | |||
| "| c #DEDEE1", | |||
| "1 c #CBCACC", | |||
| "2 c #EEEEF1", | |||
| "3 c #79758C", | |||
| "4 c #FBFBFC", | |||
| "5 c #A2A2A2", | |||
| "6 c #000000", | |||
| "7 c #F5F6F5", | |||
| "8 c #747474", | |||
| "9 c #2A2A2B", | |||
| "0 c #403958", | |||
| "a c #7D788F", | |||
| "b c #C0BEC8", | |||
| "c c #BCBAC6", | |||
| "d c #BCBAC5", | |||
| "e c #625C79", | |||
| "f c #2B2932", | |||
| "g c #191919", | |||
| "h c #CCCCCC", | |||
| "i c #807B91", | |||
| "j c #3B3556", | |||
| "k c #F2F2F4", | |||
| "l c #929292", | |||
| "m c #0E0E0E", | |||
| "n c #BFBFBF", | |||
| "o c #111111", | |||
| "p c #100E15", | |||
| "q c #868689", | |||
| "r c #FEFDFE", | |||
| "s c #D9D7DE", | |||
| "t c #9C98AA", | |||
| "u c #FDFCFD", | |||
| "v c #DDDDDD", | |||
| "w c #575755", | |||
| "x c #5E5E5E", | |||
| "y c #C4C2CD", | |||
| "z c #423C5C", | |||
| "A c #F0F0F2", | |||
| "B c #939393", | |||
| "C c #555555", | |||
| "D c #4A4A4A", | |||
| "E c #010101", | |||
| "F c #282828", | |||
| "G c #C2C2C2", | |||
| "H c #DBDAE0", | |||
| "I c #615C78", | |||
| "J c #F6F6F7", | |||
| "K c #DADADA", | |||
| "L c #545454", | |||
| "M c #0F0F0F", | |||
| "N c #B8B8B8", | |||
| "O c #48445C", | |||
| "P c #2B2B2C", | |||
| "Q c #181900", | |||
| "R c #D3D3D3", | |||
| "S c #C1BEC9", | |||
| "T c #474060", | |||
| "U c #31294D", | |||
| "V c #716C85", | |||
| "W c #65607A", | |||
| "X c #625D78", | |||
| "Y c #D5D4DB", | |||
| "Z c #F7F7F7", | |||
| "` c #8B8B8B", | |||
| " . c #161616", | |||
| ".. c #0C0C0C", | |||
| "+. c #161800", | |||
| "@. c #1A1B00", | |||
| "#. c #060600", | |||
| "$. c #191A00", | |||
| "%. c #393643", | |||
| "&. c #47415F", | |||
| "*. c #9692A4", | |||
| "=. c #D9D8DE", | |||
| "-. c #F7F7F8", | |||
| ";. c #918DA0", | |||
| ">. c #B8B5C1", | |||
| ",. c #D1D1D1", | |||
| "'. c #252525", | |||
| "). c #040400", | |||
| "!. c #141500", | |||
| "~. c #727175", | |||
| "{. c #FEFEFF", | |||
| "]. c #9D99AA", | |||
| "^. c #DBD9E0", | |||
| "/. c #E9E9E9", | |||
| "(. c #CBCBCB", | |||
| "_. c #E0E0E0", | |||
| ":. c #6C6C6C", | |||
| "<. c #010200", | |||
| "[. c #292B00", | |||
| "}. c #515151", | |||
| "|. c #A6A6A7", | |||
| "1. c #827E93", | |||
| "2. c #615C77", | |||
| "3. c #EAEAED", | |||
| "4. c #DFDFE1", | |||
| "5. c #EDFF00", | |||
| "6. c #1E1D24", | |||
| "7. c #9894A7", | |||
| "8. c #B1AEBB", | |||
| "9. c #69686F", | |||
| "0. c #000001", | |||
| "a. c #615C76", | |||
| "b. c #5F5A75", | |||
| "c. c #413E4D", | |||
| "d. c #020203", | |||
| "e. c #040500", | |||
| "f. c #050500", | |||
| "g. c #1A1A1C", | |||
| "h. c #C3C1CB", | |||
| "i. c #9D9D9D", | |||
| "j. c #202020", | |||
| "k. c #383838", | |||
| "l. c #4C4C4C", | |||
| "m. c #111112", | |||
| "n. c #C9C7D0", | |||
| "o. c #F1F1F1", | |||
| "p. c #F8F8F8", | |||
| "q. c #232323", | |||
| "r. c #050408", | |||
| "s. c #AEACB9", | |||
| "t. c #FEFEFE", | |||
| "u. c #1D1D1D", | |||
| "v. c #B7B5C1", | |||
| "w. c #9390A2", | |||
| "x. c #BBBBBB", | |||
| "y. c #414141", | |||
| "z. c #030303", | |||
| "A. c #28272A", | |||
| "B. c #F4F4F6", | |||
| "C. c #605B76", | |||
| "D. c #736E86", | |||
| "E. c #D8D8D8", | |||
| "F. c #727272", | |||
| "G. c #101010", | |||
| "H. c #848486", | |||
| "I. c #CCCBD3", | |||
| "J. c #747087", | |||
| "K. c #6D6881", | |||
| "L. c #1C1C1C", | |||
| "M. c #242424", | |||
| "N. c #656566", | |||
| "O. c #F6F6F6", | |||
| "P. c #E8E6EA", | |||
| "Q. c #706B84", | |||
| "R. c #E3E1E6", | |||
| "S. c #474746", | |||
| "T. c #151515", | |||
| "U. c #C8C8C8", | |||
| "V. c #AEAEAE", | |||
| "W. c #080808", | |||
| "X. c #010100", | |||
| "Y. c #373639", | |||
| "Z. c #FDFCFE", | |||
| "`. c #ABA8B7", | |||
| " + c #F1F0F3", | |||
| ".+ c #6D6980", | |||
| "++ c #0A090E", | |||
| "@+ c #95929E", | |||
| "#+ c #0A0810", | |||
| "$+ c #0D0D0D", | |||
| "%+ c #050505", | |||
| "&+ c #5B5A5C", | |||
| "*+ c #F7F6F7", | |||
| "=+ c #F4F3F5", | |||
| "-+ c #908C9F", | |||
| ";+ c #C8C6D0", | |||
| ">+ c #837E96", | |||
| ",+ c #86868A", | |||
| "'+ c #070608", | |||
| ")+ c #ECEBEE", | |||
| "!+ c #5B5571", | |||
| "~+ c #646078", | |||
| "{+ c #AFAFB0", | |||
| "]+ c #454545", | |||
| "^+ c #363636", | |||
| "/+ c #7A7A7A", | |||
| "(+ c #C8C8C9", | |||
| "_+ c #212025", | |||
| ":+ c #060607", | |||
| "<+ c #969699", | |||
| "[+ c #FAFAFA", | |||
| "}+ c #F8F8F9", | |||
| "|+ c #A29EAF", | |||
| "1+ c #F7F6F8", | |||
| "2+ c #F0F0F1", | |||
| "3+ c #B8B7B9", | |||
| "4+ c #E4E4E4", | |||
| "5+ c #FDFDFD", | |||
| "6+ c #A5A2B2", | |||
| "7+ c #3B3456", | |||
| "8+ c #A8A5B4", | |||
| "9+ c #525252", | |||
| "0+ c #848387", | |||
| "a+ c #CDCDCD", | |||
| "b+ c #8D899C", | |||
| "c+ c #494262", | |||
| "d+ c #68627C", | |||
| "e+ c #40395A", | |||
| "f+ c #ECECEC", | |||
| "g+ c #020202", | |||
| "h+ c #B4B5B5", | |||
| "i+ c #0B0B0B", | |||
| "j+ c #313232", | |||
| "k+ c #E3E3E3", | |||
| "l+ c #B1AEBC", | |||
| "m+ c #BDBBC6", | |||
| "n+ c #3C3556", | |||
| "o+ c #898599", | |||
| "p+ c #EDEDED", | |||
| "q+ c #39393A", | |||
| "r+ c #040404", | |||
| "s+ c #333333", | |||
| "t+ c #F5F5F5", | |||
| "u+ c #2B2B2B", | |||
| "v+ c #2D2A3D", | |||
| "w+ c #B6B4C1", | |||
| "x+ c #F5F5F6", | |||
| "y+ c #605A76", | |||
| "z+ c #DAD8DF", | |||
| "A+ c #F5F4F6", | |||
| "B+ c #615B76", | |||
| "C+ c #524D6A", | |||
| "D+ c #E4E3E8", | |||
| "E+ c #D5D5D5", | |||
| "F+ c #1B1B1B", | |||
| "G+ c #303030", | |||
| "H+ c #AAABAB", | |||
| "I+ c #585464", | |||
| "J+ c #B0AEBB", | |||
| "K+ c #A29FAF", | |||
| "L+ c #E9E8E9", | |||
| "M+ c #787779", | |||
| "N+ c #0F0E15", | |||
| "O+ c #2D2D2E", | |||
| "P+ c #595959", | |||
| "Q+ c #FAFAFB", | |||
| "R+ c #807B92", | |||
| "S+ c #B0ADBB", | |||
| "T+ c #E8E7EB", | |||
| "U+ c #3A3258", | |||
| "V+ c #E6E5EA", | |||
| "W+ c #DFDEE3", | |||
| "X+ c #443E5E", | |||
| "Y+ c #BAB8C4", | |||
| "Z+ c #C1BFCA", | |||
| "`+ c #E0E0E5", | |||
| " @ c #D0CED6", | |||
| ".@ c #362F52", | |||
| "+@ c #CECCD5", | |||
| "@@ c #413A5B", | |||
| "#@ c #6A657F", | |||
| "$@ c #9793A6", | |||
| " ", | |||
| " ", | |||
| " ", | |||
| " . + @ # $ % ", | |||
| " & * = * - ; > , ' ; ; ; ) ! ", | |||
| " ~ ; ; { ] ; ^ / ( _ ; : < [ ", | |||
| " } | 1 2 3 4 5 6 6 7 : 8 9 0 a b ", | |||
| " c : d e f g h i j k l 6 m ; n o 6 p q r s ", | |||
| " t u ; v w 6 6 x y z A B 6 C ; D E 6 F G ; H ", | |||
| " I J ; ; K L 6 6 M N O P E 6 6 6 Q Q M R S T U V W ", | |||
| " X Y ; ; ; ; Z ` .6 ..6 6 6 6 6 +.@.#.$.%.&.*.=.-.;. ", | |||
| " >.; ; ; ; ; ; = ,.'.6 6 ).6 6 !.).6 6 6 E ~.{.; ; ]. ", | |||
| " ^.; ; /.R h (._.:.6 6 6 <.6 6 6 6 6 [.6 6 E }.|.4 1. ", | |||
| " 2.3.; 4...6 6 6 6 6 6 6 5.5.5.6 6 6 6 6 6 6 6 6 6.7. ", | |||
| " V @ 8.9.0.6 6 6 6 6 5.5.6 <.6 5.5.6 6 6 6 6 6 6 ", | |||
| " a.b.c.6 d.6 6 6 6 6 e.6 5.6 6 6 5.5.5.f.6 6 6 g. ", | |||
| " h.; ; i.j.j.k.l.j.6 6 6 5.6 5.6 6 6 6 6 5.5.5.6 m. ", | |||
| " n.; ; o.p.; ; ; q.6 6 5.6 6 6 5.6 6 6 6 6 6 6 6 r. ", | |||
| " s.; ; ; ; t.; ; u.6 6 5.6 6 6 5.6 6 6 6 5.5.5.6 6 v., ", | |||
| " w.; ; t.; : x.y.z.6 5.6 6 6 6 6 5.6 5.5.6 6 6 6 A.t.B.C. ", | |||
| " D.; ; ; E.F.G.6 6 6 6 6 6 6 6 6 6 5.5.6 6 6 6 6 H.; ; I.J. ", | |||
| " K.J ; : L.6 6 6 6 M...6 6 6 6 6 6 6 6 6 6 6 6 6 N.O.; ; P.Q. ", | |||
| " R.; ; S.6 E 6 T.U.V.W.6 6 6 6 6 6 6 6 X.6 6 6 6 Y.Z.; ; > Q. ", | |||
| " `.; +.+++6 6 V.t.; @+#+6 6 6 6 6 6 6 6 $+%+6 6 6 &+*+; ; =+-+ ", | |||
| " Q.;+! >+,+'+x ; ; )+!+~+{+l ]+6 6 6 ^+/+(+_+6 6 6 :+<+[+; ; }+@ ", | |||
| " |+1+2+3+4+5+; 6+7+8+; O.]+6 6 E 9+; ; 0+6 6 E 6 o a+; ; = b+ ", | |||
| " c+> ; ; ; ; ; ; d+e+; ; f+k.6 6 g+D ; ; h+i+6 6 6 j+k+; ; l+ ", | |||
| " > ; ; ; ; m+n+o+; ; p+q+6 6 r+s+; ; t+u+6 6 v+w+; x+3 ", | |||
| " y+z+= ; A+B+C+D+; ; E+F+6 6 g+G+; ; ; H+9+I+ ", | |||
| " J+4 K+ X ; ; ; L+M+G+N+O+P+; ; ; t.Q+R+ ", | |||
| " S+; ; ; ; ; T+U+V+; ; ; ; = W+X+ ", | |||
| " Y+Z+`+4 ; ; @.@+@; ; ; s o+T ", | |||
| " @@ #@$@o+ ", | |||
| " ", | |||
| " ", | |||
| " "}; | |||
| @@ -0,0 +1,188 @@ | |||
| /* SpiralSound | |||
| * Copyleft (C) 2001 David Griffiths <dave@pawfal.org> | |||
| * | |||
| * 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. | |||
| */ | |||
| #include "EnvelopePlugin.h" | |||
| #include "EnvelopePluginGUI.h" | |||
| #include <FL/Fl_Button.h> | |||
| #include "SpiralIcon.xpm" | |||
| extern "C" { | |||
| SpiralPlugin* CreateInstance() | |||
| { | |||
| return new EnvelopePlugin; | |||
| } | |||
| char** GetIcon() | |||
| { | |||
| return SpiralIcon_xpm; | |||
| } | |||
| int GetID() | |||
| { | |||
| return 0x0005; | |||
| } | |||
| } | |||
| /////////////////////////////////////////////////////// | |||
| EnvelopePlugin::EnvelopePlugin() : | |||
| m_Trigger(false), | |||
| m_t(-1.0f), | |||
| m_Attack(0.0f), | |||
| m_Decay(0.5f), | |||
| m_Sustain(1.0f), | |||
| m_Release(1.0f), | |||
| m_Volume(0.5f), | |||
| m_TrigThresh(0.01) | |||
| { | |||
| m_PluginInfo.Name="Envelope"; | |||
| m_PluginInfo.Width=142; | |||
| m_PluginInfo.Height=110; | |||
| m_PluginInfo.NumInputs=2; | |||
| m_PluginInfo.NumOutputs=2; | |||
| m_PluginInfo.PortTips.push_back("Trigger CV"); | |||
| m_PluginInfo.PortTips.push_back("Input"); | |||
| m_PluginInfo.PortTips.push_back("CV"); | |||
| m_PluginInfo.PortTips.push_back("Output"); | |||
| } | |||
| EnvelopePlugin::~EnvelopePlugin() | |||
| { | |||
| } | |||
| PluginInfo &EnvelopePlugin::Initialise(const HostInfo *Host) | |||
| { | |||
| PluginInfo& Info = SpiralPlugin::Initialise(Host); | |||
| m_SampleTime=1.0/(float)(m_HostInfo->SAMPLERATE); | |||
| return Info; | |||
| } | |||
| SpiralGUIType *EnvelopePlugin::CreateGUI() | |||
| { | |||
| m_GUI = new EnvelopePluginGUI(m_PluginInfo.Width, | |||
| m_PluginInfo.Height, | |||
| this,m_HostInfo); | |||
| m_GUI->hide(); | |||
| return m_GUI; | |||
| } | |||
| void EnvelopePlugin::Execute() | |||
| { | |||
| float temp=0; | |||
| bool Freeze=false; | |||
| // Early out? | |||
| /*if (m_t<0 && (!m_Input[0] || m_Input[0]->IsEmpty())) | |||
| { | |||
| m_Output[0]->Zero(); | |||
| m_Output[1]->Zero(); | |||
| return; | |||
| }*/ | |||
| for (int n=0; n<m_HostInfo->BUFSIZE; n++) | |||
| { | |||
| // Check the trigger CV values | |||
| if (GetInput(0,n)>m_TrigThresh) | |||
| { | |||
| if (m_Trigger==false) | |||
| { | |||
| m_t=0.0f; | |||
| m_Trigger=true; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| m_Trigger=false; | |||
| } | |||
| // if we are in the envelope... | |||
| if (m_t>=0 && m_t<m_Attack+m_Decay+m_Release) | |||
| { | |||
| // find out what part of the envelope we are in | |||
| // in the attack | |||
| if (m_t<m_Attack) | |||
| { | |||
| // get normalised position to | |||
| // get the volume between 0 and 1 | |||
| temp=m_t/m_Attack; | |||
| } | |||
| else | |||
| // in the decay | |||
| if (m_t<m_Attack+m_Decay) | |||
| { | |||
| //if (n==0) cerr<<"in decay"<<endl; | |||
| // normalised position in m_Attack->m_Decay range | |||
| float nt=(m_t-m_Attack)/m_Decay; | |||
| // volume between 1 and m_Sustain | |||
| temp=(1-nt)+(m_Sustain*nt); | |||
| } | |||
| else | |||
| // in the release | |||
| { | |||
| //if (n==0) cerr<<"in release"<<endl; | |||
| // normalised position in m_Decay->m_Release range | |||
| float nt=(m_t-(m_Attack+m_Decay))/m_Release; | |||
| // volume between m_Sustain and 0 | |||
| temp=m_Sustain*(1-nt); | |||
| if (m_Release<0.2f) | |||
| { | |||
| temp=m_Sustain; | |||
| } | |||
| if (m_Trigger) Freeze=true; | |||
| } | |||
| temp*=m_Volume; | |||
| SetOutput(0,n,temp); | |||
| SetOutput(1,n,GetInput(1,n)*temp); | |||
| if (!Freeze) m_t+=m_SampleTime; | |||
| } | |||
| else | |||
| { | |||
| SetOutput(0,n,0); | |||
| SetOutput(1,n,0); | |||
| // if we've run off the end | |||
| if (m_t>m_Attack+m_Decay+m_Release) | |||
| { | |||
| m_t=-1; | |||
| //m_Output[0]->Zero(); | |||
| //m_Output[1]->Zero(); | |||
| return; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| void EnvelopePlugin::StreamOut(ostream &s) | |||
| { | |||
| s<<m_Version<<" "<<m_Attack<<" "<<m_Decay<<" "<<m_Sustain<<" "<< | |||
| m_Release<<" "<<m_Volume<<" "<<m_TrigThresh; | |||
| } | |||
| void EnvelopePlugin::StreamIn(istream &s) | |||
| { | |||
| int version; | |||
| s>>version; | |||
| s>>m_Attack>>m_Decay>>m_Sustain>>m_Release>>m_Volume>>m_TrigThresh; | |||
| } | |||