tk707-0.8/0000777000175100017510000000000010142157021007235 500000000000000tk707-0.8/README0000644000175100017510000000161110142137110010025 00000000000000TK707 README This program is intended to mimic the operation the operation of Roland's TR-707 Rhythym Composer (successor to the TR-606 and precursor to TR-808 and TR-909). Installation: See the INSTALL file. Briefly: configure make install and then run: tk707 Documentation: After installation, a documentation is generated is various formats: info for emacs, HTML, Postscript. This documentation is also available on the TK-707 home page: Australie: http://www.vislab.usyd.edu.au/staff/chris/tk707 Europe: http://www-lmc.imag.fr/lmc-edp/Pierre.Saramito/tk707 This document is a brief statement of requirements to run tk707 and a very introductory explanation of how to run it. This might be just enough for people not familiar with how these machines work but is not intended to be an exhaustive explanation. Enjoy TK-707 ! tk707-0.8/AUTHORS0000644000175100017510000000020310142137110010211 00000000000000http://www.vislab.usyd.edu.au/staff/chris/tk707 Chris Willing Pierre Saramito tk707-0.8/COPYING0000644000175100017510000004311010142137110010200 00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. tk707-0.8/ChangeLog0000644000175100017510000002366510142137110010734 00000000000000------------------------------------------------------------------------------- Version tk707-0.7 Changes since tk707-0.6 ------------------------------------------------------------------------------- October 13, 2004 - put copyright in all files - manage with svn November 27, 2002 - alsa-9.x patches from http://www.alsa-project.org/~iwai/alsa.html March 12, 2001 pierre.saramito@imag.fr - inline help from .texi to .help; browse in tcl :-) March 9, 2001 pierre.saramito@imag.fr - fix the sizing problem. March 5, 2001 Rick Younie - port for next debian release; add unix manual; signal the sizing problem when "X -dpi 75". October 6, 2000 pierre.saramito@imag.fr - add pattern comments for score annotation: score is automatically generated by a translator (tl2ly) from .dat file to .ly (for lilypond). This translator in under progress and is not yet distributed. September 13, 2000 pierre.saramito@imag.fr - add midi-play support for flam and accents. Set the accent volume fader to 100 % by default. - change the note_play and note_test feeling: the sound maintains while along the key is pressed and stop when it is released. This is *especially* usefull for the Gravis & timidity MIDI environment where whistles do not have some prescribed duration: whistle note never stoped ! - change the Button-2-Motion meaning in the edit-map: increment one-by-one midi-note instead of using the Y value. Use also 1/2 second delay between each note change. - change the track clear from current position to end from Atl-click CLEAR to Shift-Ctrl-click CLEAR: KDE uses Alt-click for moving windows, and this command was not reachable when running KDE ! September 11, 2000 pierre.saramito@imag.fr - add midi_save flam & accent support. Update documentation. September 9, 2000 pierre.saramito@imag.fr - add read/write note properties (fla, accent,...) in .dat data file format and edit clicks for that. ------------------------------------------------------------------------------- Version tk707-0.6 Changes since tk707-0.5 ------------------------------------------------------------------------------- September 11, 2000 pierre.saramito@imag.fr - fix an install bug in Makefile.am September 7, 2000 pierre.saramito@imag.fr - version 0.6 released - add version handler using CVS and the VERSION file for major version number. - fix some configure flags for a (buggy) Mandrake Linux. September 6, 2000 chris@vislab.usyd.edu.au - fix a bug when openning "~/.tk707rc" file at tart up - close the alsa-port selector as soon as the "Save" button is pressed and an output port has been selected (rather than requiring OK as well). - when done as root, make stopped because it couldn't find the "tcl2c" program. This is because root don't have . in PATH root. Referenced "tcl2c" as "./tcl2c" in the make process. September 5, 2000 pierre.saramito@imag.fr - fix a minor bug: pattern copy/paste and copy merge work also for groups patterns diferent than A :-) - add a default file name for saving .dat and .mid, computed from last loaded .dat :-)) work also for groups patterns diferent than A ! - work on a large demo: brazilian samba batucada (carioca), that uses most of the features of TK-707. Big test ! September 4, 2000 pierre.saramito@imag.fr - version pre-0.6 released - update html pages for distribution. September 3, 2000 pierre.saramito@imag.fr - I've just installed "timidity-1.10" as a alsa/midi server, and I can hear the pattern-play mode...! So, the change of scales are now played correctly in interactive mode : polyrythmies... The GUS patches are handled by this server, and there is a link to the Gravis sounds for the 727 patches. The sound is nice for gongas: hear the file "son-montuno.dat" with the 727.map as demo. - add instrument abbreviations for volume labels (instead of instrument number), The abbrev is also stored in .map files: load is backward compatible. I have these abbrevs on the tk727, but I'am interesed to get those for the 707; Neverthless, I put somes in the 707.map file. - some few C code hacks in order to compile with C++ - use autoconf and automake: the installation is easier. - restructure the documentation, using Texinfo, and update documentation for INSTALL and the scale feature: HTML and postscipt outputs are available. September 1, 2000 pierre.saramito@imag.fr - adjust the general layout. The widget hierarchy slighly is changed. - clean the score image, by using xfig. The image generation from .fig uses "fig2dev -L pm" and "xv" with the "autocrops" button. Is this feature in fig2dev ? - add the "turning lamps" on the left of the score, and activated by the "scale" button. - change the felling of the tempo dial: use an angular dependence, associated to the circular mouvement of the mousse. August 30, 2000 pierre.saramito@imag.fr - insert a score of decomposition by steps of the tempo and add turning lamps on the left of the score, as on tk7x7 This interface is much more pretty. Need to fix the layout of the interface: some buttons have moved... August 26, 2000 pierre.saramito@imag.fr - fix a "midi save" bug : while {$step < 16} { ... becomes after fix in .tcl : while {$step < $last_step} { ... - add a "scale" field in "struct pattern_tag" and a menu that set its value in 1..4 and update midi output and save file.dat output. Patterns with ternary decomposition are allowed: change the number of deltas per step : 384 = 3*128 when saving on midi file. Caution: The play function does not take it to account because I have no midi sound card... sorry. I hear midi files accross "timidity" as a `midi2way' translator and then use "play file.midi"; so...later ! ------------------------------------------------------------------------------- Version tk707-0.5 Changes since tk707-0.4 ------------------------------------------------------------------------------- Mar 5, 2000 - Create/Edit patterns directly from pattern display grid. Double click near intersection of instrument & step to insert the instrument at that step (or delete it if its already there). Must be in pattern write mode of course. - Copy/Paste of patterns. Ctrl-c to copy current pattern, then select another pattern and Ctrl-v or Ctrl-b to paste into new location. Ctrl-v deletes prior contents of destination pattern while Ctrl-b merges copied contents with prior contents of destination pattern. Pasting is only enabled in pattern write mode, while copying is poosible in any mode. Mar 4, 2000 - LAST STEP button now allows setting the number of steps in a pattern so that the default (16) can be changed to a lesser value. This enables unusual time signatures to be simulated, e.g. 7/4 is possible by following a 16 step pattern with a 12 step pattern. Grouping of consecutive patterns to make this easier isn't done yet. A new .dat file format is required to record the step lengths so file writing has been changed, as has file reading (which reads old format .dat files as well, in which case all step lengths are left at 16). Mar 1, 2000 - Added gui for selecting output client:port from those available at startup. Input selection also but it doesn't do anything (yet). Feb 27, 2000 - Added gui for editing sound maps & put description into README file. Feb 26, 2000 - Added key_labels_reset so that key labels would change to correct name when different sound map is loaded. - Included alternate sound map file (snd_727.map). Based on TR-707 sounds, although I don't know exactly which keys the sounds are supposed to map to. This mapping won't work with a TR-707 (because there are no sounds corresponding to the midi note values) but works with D-110 module. Should also work on any midi module with GM drum set. ------------------------------------------------------------------------------- Version tk707-0.4 Changes since tk707-0.3 Feb 16, 2000 - Added logo Feb 15, 2000 - Separated pattern & control queues into their own contexts. Feb 14, 2000 - Tap write now working. - Added space bar as keyboard shortcut to toggle start/stop. Feb 13, 2000 - "tk707 -l" returns list of available port descriptions. These can be used with -p option if no ALSA_OUTPUT_PORTS environment variable has been set. - Added fader controls for midi volume, mapped as per original TR-707. An "Edit Fader Map" item in the Map menu shows the default mapping of instruments to fader. It will include the ability to edit the mapping when I think of a suitable interface for it (the TR-707 couldn't do this). This will be especially useful when using different instrument sound maps. - Added track/pattern play/write status display to MODE window. ------------------------------------------------------------------------------- Version tk707-0.3 Changes since tk707-0.2a Feb 11, 2000 - Added more track editing features - Insert pattern before current measure Delete current measure Delete rest of track including current measure - TEMPO/MEAS button now toggles display of tempo or measure when in Track mode. Feb 9, 2000 - Fixed bug which blocked second queue after 200 events. - Added pattern clear after confirmation. Feb 8, 2000 - Finished conversion of Tcl<->C command interface to newer Tcl_Obj based system. This will mean that at least Tcl/Tk 8.0 is required. - Added tempo value under tempo dial. - Added keypress events for keys 1->0 & q->y to simulate clicks on note buttons. Feb 6, 2000 - Implemented second output queue. This allows immediate output of events even when there are events buffered in the normal queue, e.g. while a track is playing, you can "play along" by clicking on the instrument keys. (after Takashi Iwai's "How to use two clients in a single application?" page) ------------------------------------------------------------------------------- Version tk707-0.2a Changes since tk707-0.2 Feb 6, 2000 - Added some libs to Makefile which weren't being included by default in some systems. - Added tempo Meta Event to beginning of track during MFF output, which then highlighted need to correct how note timings are set. (above 2 items from Steve Ratcliffe) tk707-0.8/INSTALL0000644000175100017510000001555310142137110010210 00000000000000 The TK-707 installation requires: * C compiler to compile the source code. * TCL/TK version 8.0 (I assume later versions will work too), available free from * Alsa audio installation (at least version 0.5.0), available free from * a sound card supported by Alsa. and, at least one of these MIDI renders: * an internal MIDI render hardware in your card. * an external MIDI module with drum sounds (Tested Roland D-110 and TR-707). * or any Alsa supported basic sound card together with the `timidity' software MIDI sequencer installed. Clearly, if you have neither a MIDI card nor an external MIDI module, you can successfully manage MIDI files by a MIDI software sequencer. See below. So far tested on * Linux - Slackware 7.0 (kernel 2.2.14) with ESS1868 sound card * Linux - Redhat 6.0 (kernel 2.2.5) with Ensonic 1370 sound card * Linux - Mandrak (kernel 2.2.13-7mdk) Building `tk707' ================ configure make The program consists of Tcl/Tk for the gui and C code for outputting the midi data. The Tcl/Tk code is compiled with the C code. The compiled target `tk707' is a self contained binary. Configure options ================= During the configuration step, you could also provide to the `configure' script some non-standard locations of the Alsa or Tcl/Tk libraries: configure --with-alsa-prefix=/usr/sound/lib \ --with-alsa-inc-prefix=/usr/sound/include \ --with-tcl-includes=/new/include --with-tcl-libs=/usr/new/lib \ --with-tk-includes=/usr/new/include --with-tk-libs=/usr/new/lib make Enter `configure --help' for a complete list of available options. It could also be useful to send compiler options to the `configure' script. CFLAGS="-O0" configure make Indeed, by default, `gcc' compiler optimization flags are set to the maximum, i.e `-O9'. This is not supported for old `gcc' versions, where this feature failed on some combinations of Linux kernel versions and `gcc' version (e.g. Mandrake with kernel `Linux-2.2.13-7mdk' and `pgcc-2.91.66'). Either update our environment or use lower optimization flags. Installation ============ make install The default installation directory is `/usr/local/bin' but this can be changed by using an extra configuration option: configure --prefix=/users/angela/music make install will build and install `tk707' into the installation directory `/users/angela/music/bin' as `tk707'. Running ======= If installation was done as in previous step, and assuming the installation directory is in your execution path, then the program is started with tk707 A sample song is in `demo.dat' which can be loaded from the `File->Load Demo' menu. After loading, click the button and you should hear something if your hardware is set up correctly. When `tk707' is first started, a suitable output port needs to be selected. A selection gui comes up before the main TK-707 window to make this choice. The list on the right hand side should contain one or more entries from which to choose (don't worry about the input port list on the left). Double click on the available output port you want to use, and it should be entered into the Selected Output box near the bottom. Now you can click on the OK button to use the selected output port for this invocation of TK-707. You can also click the SAVE button first to save this information (in `~/.tk707rc') so that you don't need to make the selection next time you run TK-707. Note that `~/.tk707rc' is a plain text file which can be edited by hand if you want to. Alternatively, if you know what port you want to use, run `tk707' with the `-p' option, e.g. tk707 -p 65:0 Use of the `-p' option overrides any setting in the `~/.tk707rc' file. A list of suitable ports can also be obtained with the `-l' option, e.g. tk707 -l Building the documentation ========================== The documentation in `.info' format, suitable for emacs, is contained in the distribution. You can browse it: info -f tk707.info If you have the `texi2html' tool, the `html' version has been generated during the installation: netscape tk707_toc.html If you have TeX installed, a pretty version of the documentation is available: make dvi xdvi tk707.dvi and also for printing: dvips tk707.dvi -o tk707.ps lpr tk707.ps Now, read the documentation and enjoy `tk707'. Comments, bug corrections and future versions ============================================= We are keen for people to try it and send comments and suggestions. Please, send comments, corrections, additions, bugs etc.. to and Future versions from the TK-707 home page: Australie: Europe: My card has no midi render... ============================= Don't worry, you are able to hear midi file with a basic audio sound card: the `timidity' code is able to provides an Alsa sequencer interface which receives events and plays it in real-time. `timidity' is a public domain code available at . On this mode, `timidity' works purely as software (real-time) midi render. There is no scheduling routine in this interface, since all scheduling is done by Alsa sequencer core. So, download `timidity' (at least version 2.10.0) and install as follow: configure --enable-server --enable-alsaseq --enable-alsatest \ --enable-audio=alsa,wav,au,aiff,list,oss make install `timidity' software emulates the best sound cards. It requires some Gravis Ultra Sound (GUS) patches describing musical instruments. The public domain EAW sound patch suite can be downloaded at This his a complete and high quality library, updated frequently. Especially, download the `gsdrums' percussion instrument library. Install these files in the `timidity' directory, usually `/usr/share/timidity'. For invoking Alsa sequencer interface, run `timidity' as follows: timidity -iA -B2,8 & The fragment size can be adjustable. The smaller number gives better real-time response. Then `timidity' shows new port numbers which were newly created (128:0 and 128:1 below). Finally, run `tk707': tk707 -p 128:0 The `timidity' render is very flexible and rich, since you can add any instrument in your library by using GUS patch files. This modular approach is not always supported by all hardware renders. Thus, the software MIDI render solution is fruitful, and could be installed, even if you have a hardware or external MIDI solution. tk707-0.8/Makefile.am0000644000175100017510000002110310142143076011207 00000000000000## process this file with automake to produce Makefile.in # # This file is part of tk707. # # Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito # # tk707 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. # # Foobar 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 Foobar; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # ----------------------------------------------------------------------------- # documentation # ----------------------------------------------------------------------------- info_TEXINFOS = tk707.texi htmldir = ${datadir}/html html_DATA = tk707.html man_MANS = tk707.1 # ----------------------------------------------------------------------------- # the file set # ----------------------------------------------------------------------------- noinst_PROGRAMS = tcl2c tk707bin tk707tcl texi2help tk707bin_SOURCES = util707.c util707.h element707.c play.c \ tk707AppInit.c title_defs.c score_defs.c defsa.c ports.c \ title.c score.c gui.c procs.c help.c tk707.c nix_bit.h tk707tcl_SOURCES = util707.c util707.h element707.c playa.c \ tk707AppInit.c nix_bit.h \ defsa.c ports.c score.c score_defs.c gui.c title.c title_defs.c procs.c help.c tk707.c tcl2c_SOURCES = tcl2c.c texi2help_SOURCES = texi2help.l tk707bin_LDFLAGS = $(ALSA_LIBS) $(TCLTK_LIBS) $(X_LIBS) tk707tcl_LDFLAGS = $(ALSA_LIBS) $(TCLTK_LIBS) $(X_LIBS) INCLUDES = $(ALSA_CFLAGS) $(TCLTK_CFLAGS) $(X_CFLAGS) pkgdata_DATA = 707.map 727.map 7b7.map 7c7.map \ demo.dat son-montuno.dat carioca.dat \ tk707.help TESTS = check.sh TESTS_ENVIRONMENT = MIDIDUMP=$(MIDIDUMP); export MIDIDUMP; /bin/sh BUILT_SOURCES = \ title.tcl title_defs.tcl \ title.c title_defs.c \ score.tcl score_defs.tcl \ score.c score_defs.c \ defs.c ports.c gui.c procs.c help.c tk707.c \ defsa.c playa.c EXTRA_DIST = VERSION INSTALL texi2help.c \ tk707.sh.in defs.tcl ports.tcl gui.tcl procs.tcl help.tcl \ tk707.tcl \ score.fig score_fig2tcl.sh \ title.fig title_fig2tcl.sh \ test_02.dat test_05.dat test_06.dat tst_scale.dat \ son-montuno.dat \ $(man_MANS) \ $(BUILT_SOURCES) \ tk707.html \ go $(pkgdata_DATA) $(TESTS) \ binaire-tk.valid-dump triolet-tk.valid-dump tst_scale.valid-dump \ INSTALL.texi gpl.texi BUGS bootstrap depcomp CLEANFILES = tk707.sh *.o *.mid *.bak *.dvi *.ps *.log CVSIGNORE = \ Makefile.in configure aclocal.m4 config.h.in stamp-h.in \ stamp-vti score_defs.tcl score_defs.c score.tcl score.c \ title_defs.tcl title_defs.c title.tcl title.c defsa.c \ defs.c ports.c procs.c help.c gui.c tk707.c playa.c INSTALL \ version.texi texi2help.c tk707.help tk707.html \ $(srcdir)/Makefile.in $(srcdir)/configure WCIGNORE = \ COPYING VERSION binaire-tk.valid-dump gpl.texi install-sh \ mdate-sh missing mkinstalldirs tcl2c.c son-montuno.dat \ demo.dat test_02.dat test_05.dat test_06.dat texinfo.tex \ score.fig title.fig triolet-tk.valid-dump tst_scale.dat \ tst_scale.valid-dump depcomp # ----------------------------------------------------------------------------- # specific rules to generate figure *.tcl from *.fig (requieres fig2dev) # ----------------------------------------------------------------------------- title.tcl title_defs.tcl: title.fig title_fig2tcl.sh sh $(srcdir)/title_fig2tcl.sh $(srcdir)/title.fig score.tcl score_defs.tcl: score.fig score_fig2tcl.sh sh $(srcdir)/score_fig2tcl.sh $(srcdir)/score.fig # ----------------------------------------------------------------------------- # specific rules for documentation: html and INSTALL # ----------------------------------------------------------------------------- tk707.info tk707.dvi tk707.html: tk707.texi INSTALL.texi $(srcdir)/tk707.html: tk707.texi @if test x"${TEXI2HTML}" != x"" && test x"`echo ${TEXI2HTML} | grep missing`" = x""; then \ echo "$(TEXI2HTML) -monolithic ${srcdir}/tk707.texi"; \ $(TEXI2HTML) -monolithic ${srcdir}/tk707.texi; \ if test "${srcdir}" != "."; then \ echo "mv tk707.html ${srcdir}/tk707.html"; \ mv tk707.html ${srcdir}/tk707.html; \ fi; \ else \ true; \ fi all-local: INSTALL.txt $(srcdir)/INSTALL.txt: INSTALL.texi if test x"${MAKEINFO}" != x"" && test x"`echo ${MAKEINFO} | grep missing`" = x""; then \ tmp_texi=INSTALL-tmp$$$$.texi ; \ grep -v "@[a-z][a-z]index" $(srcdir)/INSTALL.texi | \ sed -e 's/^@node Installation,,, Top/@node Installation,,, (dir)/' \ > $$tmp_texi; \ makeinfo -I . --no-header $$tmp_texi > INSTALL.txt; \ /bin/rm -f $$tmp_texi; \ cp INSTALL.txt $(srcdir)/INSTALL; \ else \ touch INSTALL.txt; \ fi # ----------------------------------------------------------------------------- # specific rules for documentation: .help # ----------------------------------------------------------------------------- $(srcdir)/tk707.help: tk707.texi texi2help ./texi2help < $(srcdir)/tk707.texi > $(srcdir)/tk707.help # ----------------------------------------------------------------------------- # specific install rule: local tk707bin becomes installed tk707bin # ----------------------------------------------------------------------------- $(srcdir)/tk707.c: tk707.tcl tcl2c ./tcl2c tcl_tk707 < $(srcdir)/tk707.tcl > $(srcdir)/tk707.c $(srcdir)/ports.c: ports.tcl tcl2c ./tcl2c tcl_ports < $(srcdir)/ports.tcl > $(srcdir)/ports.c $(srcdir)/defs.c: defs.tcl tcl2c sed -e 's%set VERSION.*%set VERSION $(VERSION)%' < $(srcdir)/defs.tcl | ./tcl2c tcl_defs > $(srcdir)/defs.c $(srcdir)/playa.c: play.c sed '1,8s%^$$%#define not_compile_tcl%' $(srcdir)/play.c > $(srcdir)/playa.c $(srcdir)/defsa.c: defs.c sed 's%set PKGDATADIR.*%set PKGDATADIR $(pkgdatadir)%' $(srcdir)/defs.c > $(srcdir)/defsa.c $(srcdir)/title.c: title.tcl tcl2c ./tcl2c tcl_title < $(srcdir)/title.tcl > $(srcdir)/title.c $(srcdir)/title_defs.c: title_defs.tcl tcl2c ./tcl2c tcl_title_defs < $(srcdir)/title_defs.tcl > $(srcdir)/title_defs.c $(srcdir)/score.c: score.tcl tcl2c ./tcl2c tcl_score < $(srcdir)/score.tcl > $(srcdir)/score.c $(srcdir)/score_defs.c: score_defs.tcl tcl2c ./tcl2c tcl_score_defs < $(srcdir)/score_defs.tcl > $(srcdir)/score_defs.c $(srcdir)/gui.c: gui.tcl tcl2c ./tcl2c tcl_gui < $(srcdir)/gui.tcl > $(srcdir)/gui.c $(srcdir)/procs.c: procs.tcl tcl2c ./tcl2c tcl_procs < $(srcdir)/procs.tcl > $(srcdir)/procs.c $(srcdir)/help.c: help.tcl tcl2c ./tcl2c tcl_help < $(srcdir)/help.tcl > $(srcdir)/help.c # ----------------------------------------------------------------------------- # specific rules for lex # ----------------------------------------------------------------------------- $(srcdir)/texi2help.c: texi2help.l if test x"${LEX}" != x"" && test x"`echo ${LEX} | grep missing`" = x""; then \ echo "$(LEX) $(AM_LFLAGS) $(LFLAGS) ${srcdir}/texi2help.l && mv $(LEX_OUTPUT_ROOT).c $(srcdir)/texi2help.c"; \ $(LEX) $(AM_LFLAGS) $(LFLAGS) ${srcdir}/texi2help.l && mv $(LEX_OUTPUT_ROOT).c $(srcdir)/texi2help.c; \ else \ test -f $(srcdir)/texi2help.c; \ fi # ----------------------------------------------------------------------------- # add to standard automake # ----------------------------------------------------------------------------- install-exec-local: tk707bin tk707.sh $(mkinstalldirs) $(DESTDIR)$(bindir) sh $(srcdir)/install-sh -s -c tk707bin $(DESTDIR)$(bindir)/tk707bin $(INSTALL_SCRIPT) tk707.sh $(DESTDIR)$(bindir)/tk707 uninstall-local: /bin/rm -f $(DESTDIR)$(bindir)/tk707 /bin/rm -f $(DESTDIR)$(bindir)/tk707bin maintainer-clean-local: cd $(srcdir); /bin/rm -f ${BUILT_SOURCES} tk707.html tk707.help \ aclocal.m4 config.h config.log config.status \ configure INSTALL.txt Makefile Makefile.in stamp-h \ stamp-h.in stamp-vti texi2help.c tk707.help \ config.h.in tk707.info version.texi # ----------------------------------------------------------------------------- # other rules # ----------------------------------------------------------------------------- SUFFIXES = .mid .wav .mp3 .mid.wav: timidity $*.mid -Ow $*.wav .wav.mp3: lame -b128 $*.wav $*.mp3 # optional cvs/automake environment -include ${CVSMKROOT}/cvs.mk tk707-0.8/Makefile.in0000644000175100017510000011143410142143117011223 00000000000000# Makefile.in generated by automake 1.7.2 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # This file is part of tk707. # # Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito # # tk707 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. # # Foobar 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 Foobar; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # ----------------------------------------------------------------------------- # documentation # ----------------------------------------------------------------------------- srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : ACLOCAL = @ACLOCAL@ ALSA_CFLAGS = @ALSA_CFLAGS@ ALSA_LIBS = @ALSA_LIBS@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FIG2DEV = @FIG2DEV@ HAVE_ALSA_ASOUNDLIB_H = @HAVE_ALSA_ASOUNDLIB_H@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LAME = @LAME@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MIDIDUMP = @MIDIDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TCLTK_CFLAGS = @TCLTK_CFLAGS@ TCLTK_LDFLAGS = @TCLTK_LDFLAGS@ TCLTK_LIBS = @TCLTK_LIBS@ TEXI2DVI = @TEXI2DVI@ TEXI2HTML = @TEXI2HTML@ TIMIDITY = @TIMIDITY@ VERSION = @VERSION@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ ac_ct_CC = @ac_ct_CC@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__quote = @am__quote@ bindir = @bindir@ build_alias = @build_alias@ datadir = @datadir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ info_TEXINFOS = tk707.texi htmldir = ${datadir}/html html_DATA = tk707.html man_MANS = tk707.1 # ----------------------------------------------------------------------------- # the file set # ----------------------------------------------------------------------------- noinst_PROGRAMS = tcl2c tk707bin tk707tcl texi2help tk707bin_SOURCES = util707.c util707.h element707.c play.c \ tk707AppInit.c title_defs.c score_defs.c defsa.c ports.c \ title.c score.c gui.c procs.c help.c tk707.c nix_bit.h tk707tcl_SOURCES = util707.c util707.h element707.c playa.c \ tk707AppInit.c nix_bit.h \ defsa.c ports.c score.c score_defs.c gui.c title.c title_defs.c procs.c help.c tk707.c tcl2c_SOURCES = tcl2c.c texi2help_SOURCES = texi2help.l tk707bin_LDFLAGS = $(ALSA_LIBS) $(TCLTK_LIBS) $(X_LIBS) tk707tcl_LDFLAGS = $(ALSA_LIBS) $(TCLTK_LIBS) $(X_LIBS) INCLUDES = $(ALSA_CFLAGS) $(TCLTK_CFLAGS) $(X_CFLAGS) pkgdata_DATA = 707.map 727.map 7b7.map 7c7.map \ demo.dat son-montuno.dat carioca.dat \ tk707.help TESTS = check.sh TESTS_ENVIRONMENT = MIDIDUMP=$(MIDIDUMP); export MIDIDUMP; /bin/sh BUILT_SOURCES = \ title.tcl title_defs.tcl \ title.c title_defs.c \ score.tcl score_defs.tcl \ score.c score_defs.c \ defs.c ports.c gui.c procs.c help.c tk707.c \ defsa.c playa.c EXTRA_DIST = VERSION INSTALL texi2help.c \ tk707.sh.in defs.tcl ports.tcl gui.tcl procs.tcl help.tcl \ tk707.tcl \ score.fig score_fig2tcl.sh \ title.fig title_fig2tcl.sh \ test_02.dat test_05.dat test_06.dat tst_scale.dat \ son-montuno.dat \ $(man_MANS) \ $(BUILT_SOURCES) \ tk707.html \ go $(pkgdata_DATA) $(TESTS) \ binaire-tk.valid-dump triolet-tk.valid-dump tst_scale.valid-dump \ INSTALL.texi gpl.texi BUGS bootstrap depcomp CLEANFILES = tk707.sh *.o *.mid *.bak *.dvi *.ps *.log CVSIGNORE = \ Makefile.in configure aclocal.m4 config.h.in stamp-h.in \ stamp-vti score_defs.tcl score_defs.c score.tcl score.c \ title_defs.tcl title_defs.c title.tcl title.c defsa.c \ defs.c ports.c procs.c help.c gui.c tk707.c playa.c INSTALL \ version.texi texi2help.c tk707.help tk707.html \ $(srcdir)/Makefile.in $(srcdir)/configure WCIGNORE = \ COPYING VERSION binaire-tk.valid-dump gpl.texi install-sh \ mdate-sh missing mkinstalldirs tcl2c.c son-montuno.dat \ demo.dat test_02.dat test_05.dat test_06.dat texinfo.tex \ score.fig title.fig triolet-tk.valid-dump tst_scale.dat \ tst_scale.valid-dump depcomp # ----------------------------------------------------------------------------- # other rules # ----------------------------------------------------------------------------- SUFFIXES = .mid .wav .mp3 subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = tk707.sh noinst_PROGRAMS = tcl2c$(EXEEXT) tk707bin$(EXEEXT) tk707tcl$(EXEEXT) \ texi2help$(EXEEXT) PROGRAMS = $(noinst_PROGRAMS) am_tcl2c_OBJECTS = tcl2c.$(OBJEXT) tcl2c_OBJECTS = $(am_tcl2c_OBJECTS) tcl2c_LDADD = $(LDADD) tcl2c_DEPENDENCIES = tcl2c_LDFLAGS = am_texi2help_OBJECTS = texi2help.$(OBJEXT) texi2help_OBJECTS = $(am_texi2help_OBJECTS) texi2help_LDADD = $(LDADD) texi2help_DEPENDENCIES = texi2help_LDFLAGS = am_tk707bin_OBJECTS = util707.$(OBJEXT) element707.$(OBJEXT) \ play.$(OBJEXT) tk707AppInit.$(OBJEXT) title_defs.$(OBJEXT) \ score_defs.$(OBJEXT) defsa.$(OBJEXT) ports.$(OBJEXT) \ title.$(OBJEXT) score.$(OBJEXT) gui.$(OBJEXT) procs.$(OBJEXT) \ help.$(OBJEXT) tk707.$(OBJEXT) tk707bin_OBJECTS = $(am_tk707bin_OBJECTS) tk707bin_LDADD = $(LDADD) tk707bin_DEPENDENCIES = am_tk707tcl_OBJECTS = util707.$(OBJEXT) element707.$(OBJEXT) \ playa.$(OBJEXT) tk707AppInit.$(OBJEXT) defsa.$(OBJEXT) \ ports.$(OBJEXT) score.$(OBJEXT) score_defs.$(OBJEXT) \ gui.$(OBJEXT) title.$(OBJEXT) title_defs.$(OBJEXT) \ procs.$(OBJEXT) help.$(OBJEXT) tk707.$(OBJEXT) tk707tcl_OBJECTS = $(am_tk707tcl_OBJECTS) tk707tcl_LDADD = $(LDADD) tk707tcl_DEPENDENCIES = DEFAULT_INCLUDES = -I. -I$(srcdir) -I. depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/defsa.Po ./$(DEPDIR)/element707.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/gui.Po ./$(DEPDIR)/help.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/play.Po ./$(DEPDIR)/playa.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/ports.Po ./$(DEPDIR)/procs.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/score.Po ./$(DEPDIR)/score_defs.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/tcl2c.Po ./$(DEPDIR)/texi2help.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/title.Po ./$(DEPDIR)/title_defs.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/tk707.Po ./$(DEPDIR)/tk707AppInit.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/util707.Po COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS) DIST_SOURCES = $(tcl2c_SOURCES) $(texi2help_SOURCES) $(tk707bin_SOURCES) \ $(tk707tcl_SOURCES) am__TEXINFO_TEX_DIR = $(srcdir) INFO_DEPS = tk707.info DVIS = tk707.dvi PDFS = tk707.pdf PSS = tk707.ps TEXINFOS = tk707.texi NROFF = nroff MANS = $(man_MANS) DATA = $(html_DATA) $(pkgdata_DATA) DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \ Makefile.in NEWS TODO acinclude.m4 aclocal.m4 config.h.in \ configure configure.in depcomp install-sh mdate-sh missing \ mkinstalldirs stamp-vti texi2help.c texinfo.tex tk707.sh.in \ version.texi SOURCES = $(tcl2c_SOURCES) $(texi2help_SOURCES) $(tk707bin_SOURCES) $(tk707tcl_SOURCES) all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .mid .wav .mp3 .c .dvi .info .l .o .obj .pdf .ps .texi am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe) $(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): configure.in acinclude.m4 cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOHEADER) touch $(srcdir)/config.h.in distclean-hdr: -rm -f config.h stamp-h1 tk707.sh: $(top_builddir)/config.status tk707.sh.in cd $(top_builddir) && $(SHELL) ./config.status $@ clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) tcl2c$(EXEEXT): $(tcl2c_OBJECTS) $(tcl2c_DEPENDENCIES) @rm -f tcl2c$(EXEEXT) $(LINK) $(tcl2c_LDFLAGS) $(tcl2c_OBJECTS) $(tcl2c_LDADD) $(LIBS) texi2help$(EXEEXT): $(texi2help_OBJECTS) $(texi2help_DEPENDENCIES) @rm -f texi2help$(EXEEXT) $(LINK) $(texi2help_LDFLAGS) $(texi2help_OBJECTS) $(texi2help_LDADD) $(LIBS) tk707bin$(EXEEXT): $(tk707bin_OBJECTS) $(tk707bin_DEPENDENCIES) @rm -f tk707bin$(EXEEXT) $(LINK) $(tk707bin_LDFLAGS) $(tk707bin_OBJECTS) $(tk707bin_LDADD) $(LIBS) tk707tcl$(EXEEXT): $(tk707tcl_OBJECTS) $(tk707tcl_DEPENDENCIES) @rm -f tk707tcl$(EXEEXT) $(LINK) $(tk707tcl_LDFLAGS) $(tk707tcl_OBJECTS) $(tk707tcl_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) core *.core distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/defsa.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/element707.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/help.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/play.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/playa.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ports.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/procs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/score.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/score_defs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tcl2c.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/texi2help.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/title.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/title_defs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tk707.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tk707AppInit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util707.Po@am__quote@ distclean-depend: -rm -rf ./$(DEPDIR) .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ @am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ @am__fastdepCC_TRUE@ then mv "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ @am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ @am__fastdepCC_TRUE@ fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< .c.obj: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ @am__fastdepCC_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \ @am__fastdepCC_TRUE@ then mv "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ @am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ @am__fastdepCC_TRUE@ fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi` .l.c: $(LEXCOMPILE) `test -f $< || echo '$(srcdir)/'`$< sed '/^#/ s|$(LEX_OUTPUT_ROOT)\.c|$@|' $(LEX_OUTPUT_ROOT).c >$@ rm -f $(LEX_OUTPUT_ROOT).c .texi.info: @rm -f $@ $@-[0-9] $@-[0-9][0-9] $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $@ `test -f '$<' || echo '$(srcdir)/'`$< .texi.dvi: TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2DVI) `test -f '$<' || echo '$(srcdir)/'`$< .texi.pdf: TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2PDF) `test -f '$<' || echo '$(srcdir)/'`$< tk707.info: tk707.texi version.texi tk707.dvi: tk707.texi version.texi tk707.pdf: tk707.texi version.texi version.texi: stamp-vti stamp-vti: tk707.texi $(top_srcdir)/configure @(dir=.; test -f ./tk707.texi || dir=$(srcdir); \ set `$(SHELL) $(srcdir)/mdate-sh $$dir/tk707.texi`; \ echo "@set UPDATED $$1 $$2 $$3"; \ echo "@set UPDATED-MONTH $$2 $$3"; \ echo "@set EDITION $(VERSION)"; \ echo "@set VERSION $(VERSION)") > vti.tmp @cmp -s vti.tmp version.texi \ || (echo "Updating version.texi"; \ cp vti.tmp version.texi) -@rm -f vti.tmp @cp version.texi $@ mostlyclean-vti: -rm -f vti.tmp maintainer-clean-vti: -rm -f stamp-vti version.texi TEXI2PDF = $(TEXI2DVI) --pdf --batch DVIPS = dvips .dvi.ps: $(DVIPS) -o $@ $< uninstall-info-am: $(PRE_UNINSTALL) @if (install-info --version && \ install-info --version | grep -i -v debian) >/dev/null 2>&1; then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$relfile"; \ install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$relfile; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ (if cd $(DESTDIR)$(infodir); then \ echo " rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9])"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9]; \ else :; fi); \ done dist-info: $(INFO_DEPS) list='$(INFO_DEPS)'; \ for base in $$list; do \ if test -f $$base; then d=.; else d=$(srcdir); fi; \ for file in $$d/$$base*; do \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ test -f $(distdir)/$$relfile || \ cp -p $$file $(distdir)/$$relfile; \ done; \ done mostlyclean-aminfo: -rm -f tk707.aux tk707.cp tk707.cps tk707.fn tk707.fns tk707.ky tk707.kys \ tk707.log tk707.pg tk707.pgs tk707.tmp tk707.toc tk707.tp \ tk707.tps tk707.vr tk707.vrs tk707.dvi tk707.pdf tk707.ps maintainer-clean-aminfo: list='$(INFO_DEPS)'; for i in $$list; do \ rm -f $$i; \ if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \ rm -f $$i-[0-9]*; \ fi; \ done man1dir = $(mandir)/man1 install-man1: $(man1_MANS) $(man_MANS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(man1dir) @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ else file=$$i; fi; \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 1*) ;; \ *) ext='1' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \ $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \ done uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 1*) ;; \ *) ext='1' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \ rm -f $(DESTDIR)$(man1dir)/$$inst; \ done htmlDATA_INSTALL = $(INSTALL_DATA) install-htmlDATA: $(html_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(htmldir) @list='$(html_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(htmlDATA_INSTALL) $$d$$p $(DESTDIR)$(htmldir)/$$f"; \ $(htmlDATA_INSTALL) $$d$$p $(DESTDIR)$(htmldir)/$$f; \ done uninstall-htmlDATA: @$(NORMAL_UNINSTALL) @list='$(html_DATA)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f $(DESTDIR)$(htmldir)/$$f"; \ rm -f $(DESTDIR)$(htmldir)/$$f; \ done pkgdataDATA_INSTALL = $(INSTALL_DATA) install-pkgdataDATA: $(pkgdata_DATA) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(pkgdatadir) @list='$(pkgdata_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(pkgdataDATA_INSTALL) $$d$$p $(DESTDIR)$(pkgdatadir)/$$f"; \ $(pkgdataDATA_INSTALL) $$d$$p $(DESTDIR)$(pkgdatadir)/$$f; \ done uninstall-pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(pkgdata_DATA)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f $(DESTDIR)$(pkgdatadir)/$$f"; \ rm -f $(DESTDIR)$(pkgdatadir)/$$f; \ done ETAGS = etags ETAGSFLAGS = CTAGS = ctags CTAGSFLAGS = tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$tags$$unique" \ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list='$(TESTS)'; \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *" $$tst "*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ echo "XPASS: $$tst"; \ ;; \ *) \ echo "PASS: $$tst"; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *" $$tst "*) \ xfail=`expr $$xfail + 1`; \ echo "XFAIL: $$tst"; \ ;; \ *) \ failed=`expr $$failed + 1`; \ echo "FAIL: $$tst"; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ echo "SKIP: $$tst"; \ fi; \ done; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="All $$all tests passed"; \ else \ banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all tests failed"; \ else \ banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ skipped="($$skip tests were not run)"; \ test `echo "$$skipped" | wc -c` -gt `echo "$$banner" | wc -c` && \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -gt `echo "$$banner" | wc -c` && \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ echo "$$dashes"; \ echo "$$banner"; \ test -n "$$skipped" && echo "$$skipped"; \ test -n "$$report" && echo "$$report"; \ echo "$$dashes"; \ test "$$failed" -eq 0; \ else :; fi DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = . distdir = $(PACKAGE)-$(VERSION) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) $(mkinstalldirs) $(distdir)/. @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist dist-all: distdir $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist $(am__remove_distdir) GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/=build mkdir $(distdir)/=inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/=inst && pwd` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/=build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && $(mkinstalldirs) "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist-gzip \ && rm -f $(distdir).tar.gz \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @echo "$(distdir).tar.gz is ready for distribution" | \ sed 'h;s/./=/g;p;x;p;x' distuninstallcheck: cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(INFO_DEPS) $(PROGRAMS) $(MANS) $(DATA) config.h \ all-local installdirs: $(mkinstalldirs) $(DESTDIR)$(infodir) $(DESTDIR)$(man1dir) $(DESTDIR)$(htmldir) $(DESTDIR)$(pkgdatadir) install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -rm -f texi2help.c clean: clean-am clean-am: clean-generic clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) distclean-am: clean-am distclean-compile distclean-depend \ distclean-generic distclean-hdr distclean-tags dvi: dvi-am dvi-am: $(DVIS) info: info-am info-am: $(INFO_DEPS) install-data-am: install-htmlDATA install-info-am install-man \ install-pkgdataDATA install-exec-am: install-exec-local install-info: install-info-am install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(infodir) @list='$(INFO_DEPS)'; \ for file in $$list; do \ if test -f $$file; then d=.; else d=$(srcdir); fi; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9]; do \ if test -f $$ifile; then \ relfile=`echo "$$ifile" | sed 's|^.*/||'`; \ echo " $(INSTALL_DATA) $$ifile $(DESTDIR)$(infodir)/$$relfile"; \ $(INSTALL_DATA) $$ifile $(DESTDIR)$(infodir)/$$relfile; \ else : ; fi; \ done; \ done @$(POST_INSTALL) @if (install-info --version && \ install-info --version | grep -i -v debian) >/dev/null 2>&1; then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$relfile";\ install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$relfile || :;\ done; \ else : ; fi install-man: install-man1 installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf autom4te.cache maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-local \ maintainer-clean-vti mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-aminfo mostlyclean-compile \ mostlyclean-generic mostlyclean-vti pdf: pdf-am pdf-am: $(PDFS) ps: ps-am ps-am: $(PSS) uninstall-am: uninstall-htmlDATA uninstall-info-am uninstall-local \ uninstall-man uninstall-pkgdataDATA uninstall-man: uninstall-man1 .PHONY: CTAGS GTAGS all all-am all-local check check-TESTS check-am \ clean clean-generic clean-noinstPROGRAMS ctags dist dist-all \ dist-gzip dist-info distcheck distclean distclean-compile \ distclean-depend distclean-generic distclean-hdr distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am info \ info-am install install-am install-data install-data-am \ install-exec install-exec-am install-exec-local \ install-htmlDATA install-info install-info-am install-man \ install-man1 install-pkgdataDATA install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-aminfo maintainer-clean-generic \ maintainer-clean-local maintainer-clean-vti mostlyclean \ mostlyclean-aminfo mostlyclean-compile mostlyclean-generic \ mostlyclean-vti pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-htmlDATA uninstall-info-am uninstall-local \ uninstall-man uninstall-man1 uninstall-pkgdataDATA # ----------------------------------------------------------------------------- # specific rules to generate figure *.tcl from *.fig (requieres fig2dev) # ----------------------------------------------------------------------------- title.tcl title_defs.tcl: title.fig title_fig2tcl.sh sh $(srcdir)/title_fig2tcl.sh $(srcdir)/title.fig score.tcl score_defs.tcl: score.fig score_fig2tcl.sh sh $(srcdir)/score_fig2tcl.sh $(srcdir)/score.fig # ----------------------------------------------------------------------------- # specific rules for documentation: html and INSTALL # ----------------------------------------------------------------------------- tk707.info tk707.dvi tk707.html: tk707.texi INSTALL.texi $(srcdir)/tk707.html: tk707.texi @if test x"${TEXI2HTML}" != x"" && test x"`echo ${TEXI2HTML} | grep missing`" = x""; then \ echo "$(TEXI2HTML) -monolithic ${srcdir}/tk707.texi"; \ $(TEXI2HTML) -monolithic ${srcdir}/tk707.texi; \ if test "${srcdir}" != "."; then \ echo "mv tk707.html ${srcdir}/tk707.html"; \ mv tk707.html ${srcdir}/tk707.html; \ fi; \ else \ true; \ fi all-local: INSTALL.txt $(srcdir)/INSTALL.txt: INSTALL.texi if test x"${MAKEINFO}" != x"" && test x"`echo ${MAKEINFO} | grep missing`" = x""; then \ tmp_texi=INSTALL-tmp$$$$.texi ; \ grep -v "@[a-z][a-z]index" $(srcdir)/INSTALL.texi | \ sed -e 's/^@node Installation,,, Top/@node Installation,,, (dir)/' \ > $$tmp_texi; \ makeinfo -I . --no-header $$tmp_texi > INSTALL.txt; \ /bin/rm -f $$tmp_texi; \ cp INSTALL.txt $(srcdir)/INSTALL; \ else \ touch INSTALL.txt; \ fi # ----------------------------------------------------------------------------- # specific rules for documentation: .help # ----------------------------------------------------------------------------- $(srcdir)/tk707.help: tk707.texi texi2help ./texi2help < $(srcdir)/tk707.texi > $(srcdir)/tk707.help # ----------------------------------------------------------------------------- # specific install rule: local tk707bin becomes installed tk707bin # ----------------------------------------------------------------------------- $(srcdir)/tk707.c: tk707.tcl tcl2c ./tcl2c tcl_tk707 < $(srcdir)/tk707.tcl > $(srcdir)/tk707.c $(srcdir)/ports.c: ports.tcl tcl2c ./tcl2c tcl_ports < $(srcdir)/ports.tcl > $(srcdir)/ports.c $(srcdir)/defs.c: defs.tcl tcl2c sed -e 's%set VERSION.*%set VERSION $(VERSION)%' < $(srcdir)/defs.tcl | ./tcl2c tcl_defs > $(srcdir)/defs.c $(srcdir)/playa.c: play.c sed '1,8s%^$$%#define not_compile_tcl%' $(srcdir)/play.c > $(srcdir)/playa.c $(srcdir)/defsa.c: defs.c sed 's%set PKGDATADIR.*%set PKGDATADIR $(pkgdatadir)%' $(srcdir)/defs.c > $(srcdir)/defsa.c $(srcdir)/title.c: title.tcl tcl2c ./tcl2c tcl_title < $(srcdir)/title.tcl > $(srcdir)/title.c $(srcdir)/title_defs.c: title_defs.tcl tcl2c ./tcl2c tcl_title_defs < $(srcdir)/title_defs.tcl > $(srcdir)/title_defs.c $(srcdir)/score.c: score.tcl tcl2c ./tcl2c tcl_score < $(srcdir)/score.tcl > $(srcdir)/score.c $(srcdir)/score_defs.c: score_defs.tcl tcl2c ./tcl2c tcl_score_defs < $(srcdir)/score_defs.tcl > $(srcdir)/score_defs.c $(srcdir)/gui.c: gui.tcl tcl2c ./tcl2c tcl_gui < $(srcdir)/gui.tcl > $(srcdir)/gui.c $(srcdir)/procs.c: procs.tcl tcl2c ./tcl2c tcl_procs < $(srcdir)/procs.tcl > $(srcdir)/procs.c $(srcdir)/help.c: help.tcl tcl2c ./tcl2c tcl_help < $(srcdir)/help.tcl > $(srcdir)/help.c # ----------------------------------------------------------------------------- # specific rules for lex # ----------------------------------------------------------------------------- $(srcdir)/texi2help.c: texi2help.l if test x"${LEX}" != x"" && test x"`echo ${LEX} | grep missing`" = x""; then \ echo "$(LEX) $(AM_LFLAGS) $(LFLAGS) ${srcdir}/texi2help.l && mv $(LEX_OUTPUT_ROOT).c $(srcdir)/texi2help.c"; \ $(LEX) $(AM_LFLAGS) $(LFLAGS) ${srcdir}/texi2help.l && mv $(LEX_OUTPUT_ROOT).c $(srcdir)/texi2help.c; \ else \ test -f $(srcdir)/texi2help.c; \ fi # ----------------------------------------------------------------------------- # add to standard automake # ----------------------------------------------------------------------------- install-exec-local: tk707bin tk707.sh $(mkinstalldirs) $(DESTDIR)$(bindir) sh $(srcdir)/install-sh -s -c tk707bin $(DESTDIR)$(bindir)/tk707bin $(INSTALL_SCRIPT) tk707.sh $(DESTDIR)$(bindir)/tk707 uninstall-local: /bin/rm -f $(DESTDIR)$(bindir)/tk707 /bin/rm -f $(DESTDIR)$(bindir)/tk707bin maintainer-clean-local: cd $(srcdir); /bin/rm -f ${BUILT_SOURCES} tk707.html tk707.help \ aclocal.m4 config.h config.log config.status \ configure INSTALL.txt Makefile Makefile.in stamp-h \ stamp-h.in stamp-vti texi2help.c tk707.help \ config.h.in tk707.info version.texi .mid.wav: timidity $*.mid -Ow $*.wav .wav.mp3: lame -b128 $*.wav $*.mp3 # optional cvs/automake environment -include ${CVSMKROOT}/cvs.mk # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: tk707-0.8/NEWS0000644000175100017510000000171010142137110007644 00000000000000march 12, 2001 * version 0.10 released. * GUI becomes dot-per-inch independent: remplace bitmap images by tcl/tk code. * add sizing options for small screens. * fix a portage problem on debian. march 9, 2001 * version 0.7 released. * support for flam and accents: two levels of accents and four possible flam intervals. * many minor bug fixes. september 2, 2000 * version 0.6 released. * enable 6/8 and polyrythms patterns by using a change of scale on a pattern. Hear the son-montuno.dat demo. * insertion of a score in the layout, clone of the Roland 707 and 727 drum machine. * add instruments abbreviations for the volumes widgets. * change the felling of the tempo dial: use an angular dependence, associated to the circular mouvement of the mousse. * use autoconf & automake * update and restructure the documentation: texinfo support; html, dvi and postscript formats generated. tk707-0.8/TODO0000644000175100017510000001636410142137110007650 00000000000000 ---------------------------- lien avec lilypond ---------------------------- - apres avoir utilise lily pour faire des partitions, specifier un format de fichier qui rend exactement le .midi - volume, flame, ... - changement de tempo - etc... et qui sorte une partition de bonne qualite' avec possibilite' de ne sortir qu'un motif (pattern) ou qques instruments dans un motif, ou un extrait de plage => le format de fichier est a la fois un morceau de musique et une partition : .tk7 => tk7-to-ly (tk49ly ?) on doit pouvoir faire des inclusions dans des documents latex, etc... - l'interpreteur relit ces fichier est est un editeur pour cela - voir les clics dans xdvi qui renvoient dans emacs => idem dans l'editeur ? fenetre de partition, on clique => on va dans editer a` cet endroit ---------------------------- sortie midi en direct ---------------------------- - ce qui permet de moduler le tempo et les volumes des instruments pendant l'enregistrement. ---------------------------- touche LOOP en bas a` gauche ---------------------------- - a` la place de SHIFT - en pattern, c'est normal => par defaut - en track, c'est nouveau => non par defaut => c'est un radio-bouton --------------------- internationaliser --------------------- - avec la lib correspondante --------------------- permuter --------------------- - les numeros des instruments: en faisant shift-click sur une etiq d'instr, puis en le deplacant sur l'etiq d'un deuxieme => les 2 sont permute's et toutes les refs dans les patterns aussi ! --------------------- trommler --------------------- - convert files <-> with tk707 --------------------- doc --------------------- - documenter les bloquages de son (siflets, etc) --------------------- entree/sortie --------------------- - warning si fichier modifie' et non sauvegarde - a` la sortie - au chargement d'un autre fichier - load file : on prend par defaut le dir precedent, mais il y a confusion des dirs .dat et .map => qd on charge 1 map std, puis un .dat on se retrouve dans le mauvais dir. - sorties .wav .mp3, ... ---------------------- enchainer les patterns ---------------------- - [shift] click-drag-drop sur les bouttons puis pattern-play en boucle sur le groupe de patterns => click : repere le bouton de depart, etat 1 drag : ne fait rien, on deplace avec la souris drop : relache la souris sur le bouton d'arrivee si c'est avec shift, alors c'est lie' Question: comment detercter un key-release-b1 sur un bouton sur lequel on a pas le key-press ? ---------------------------------------------------------- partition reactive ---------------------------------------------------------- - affichage de last-step et scale en eclairant le morceau de la partition correspondant, quel que soit le mode lect/ecr. - cliquer sur une note => saisie de last-step et scale - en mode pattern write/tap, la partition devient orange et active, sinon, elle est grise. qd on passe le curseur sur une note, elle reagit n changeant de couleur. ------------------ etiquettes du bas ------------------ - il y a des groupes encadres : Question: comment encadrer simplement, tout en gardnt l'alignement du texte avec les boutons; simplement, sans faire un calcul de coords ? ------------------ partition symbolique ------------------ - idem: comment encadrer les triolets tout en gardnt l'alignement. simplement, sans faire un calcul de coords ? ----------- la vraie boite ----------- - interagir: lire/ecrire les pattern/track; lire le midi de la boite ? ------- effets ------- - dial tempo en relief ! ------------------ plus de patterns ------------------ - pour "savor", il faudrait le double. Faire un ascenceur horizontal pour aller + loin que ABCD... ------- Shuffle ------- shuffle 0..4 : propriete du motif Devrait etre assez facile en midi pour l'ecoute, reste la carte... ------------------------ echelles et les triolets ------------------------ - l'ecoute directe ne marche pas - quand on change de pattern, les ampoules last-step ne sont pas remises a` jour ! - a` l'ecoute, les lampes tournates ne changent pas de vitesse lors des triolets sur les tracks, ce qui n'est pas du plus bel effet ! - clear pattern n'efface pas last-step ni scale : est-ce correct ? - Faudra aussi remettre a` jour tk2ly pour lire les formats avec des token VERSION_05, VERSION_06.... ------------------ fusion ------------------ - de deux fichiers .dat: reunion des pattern commnunes, et renommage des patterns et tracks pour avoir 1 fichier resultat. ------------------ Le son 727 ------------------ - les fla seraient plus jolis si les ticks de ALSA etaient choisis plus fins ? - le sifflet ne s'arrete pas qd on fait stop dans un morceau par ex. une pattern qui tourne en mode edit pattern => stop doit arreter tous les sons courants - les patches qui ont "keep=env keep=loop" ne sont pas arretes par la coupure de son (stop) en pattern et track play Note on, velocity=0 qui remplace le Note off - faudrait mettre 1 prop aux instruments pour savoir si on les coupe tres vite ou si on laisse la note s'epanouir... => nouveau format de .map ---------- petits pbs ---------- Bugs Certaines fonctionalites manquent encore... - La touche stop/cont ne fait que stop et pas cont... - la sauvegarde sur fichier ne se souvint pas du prefix (dat/midi) du fichier en cours d'utilisation... - les menus fichiers proposent *.mid et *.dat pour les 2 manips mid/dat ce qui n'a pas de sens - edition des sound map : lorsque le champ numero est vide, ca ne joue rien... non: ca envoie un msg d'erreur. - sortie midi: - doc .info: ca ne s'affiche que pour l'installation - Les message devraient s'afficher avec les groupes A,..,D et les plages I..IV au lieu des chiffres arabes. - en echelle 2 (binaire rapide), les lampes ne sont pas syncro avec ce qu'on ecoute... - quand on entre dans track play et qu'on fait last-meas, les ampoules n'affichent pas la last-meas, et elle n'apparait pas a` l'ecran ppal; par contre, on fait BACK, puis FWD, la` on l'a. --------------------- interface --------------------- - ajouter les annotations manquantes - la fenetre globale est grande: sur un ecran 15'' on risque d'en perdre un morceau: prendre la geom et utiliser ces tailles. - resize : redimensionner tout pour faire un << maxspec >> lors d'un evt resize du wm. eventuellement, changer les polices de carac. --------------------- fichiers --------------------- - Mettre les sound-map dans les .dat ! Sinon c'est ambigu... - changer le format de fichier pour pouvoir l'editer facilement a` la main. Style .mfield...lex & yacc ? -------------------- tk2ly -------------------- Essayer de l'intergrer: sortie .ly, .dvi. .ps, .pdf ------------------ Edition des plages ------------------ Visualiser les plages style ghostview avec effacer, inserer, copier/coller, ... => voir e/s avec nouveau format fichier. ------------------ Nommer ------------------ Pour s'y retrouver sur les grandes plages mettre des noms... idem pour les motifs; par defaut, s'il n'y a rien, on peut mettre le numero a` l'affichage tk707-0.8/acinclude.m40000644000175100017510000001417510142137110011347 00000000000000dnl dnl This file is part of tk707. dnl dnl Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito dnl dnl tk707 is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl Foobar is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with Foobar; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA dnl dnl -------------------------------------------------------------- AC_DEFUN(AC_VERSION_FROM_FILE, [ if test -f $srcdir/VERSION; then [MINOR_VERSION=`cat $srcdir/VERSION | awk -F "." '{print $NF}'`] [MAJOR_VERSION=`cat $srcdir/VERSION | \ awk -F "." '{ i=1; printf("%s", $i); for(i=2;i> confdefs.h < int main() { #if (SND_LIB_MAJOR == 0) && (SND_LIB_MINOR >= 9) return 0; #else return 1; #endif } %%, changequote([, ])dnl [AC_DEFINE(HAVE_ALSA9)] have_alsa9=yes, have_alsa9=no, have_alsa9=undef false )] [AC_MSG_RESULT(${have_alsa9})] ) dnl -------------------------------------------------------------- dnl alsa.m4 starts form here dnl Configure Paths for Alsa dnl Christopher Lansdown (lansdoct@cs.alfred.edu) dnl 29/10/1998 dnl modified for TiMidity++ by Isaku Yamahata(yamahata@kusm.kyoto-u.ac.jp) dnl 16/12/1998 dnl AM_PATH_ALSA_LOCAL(MINIMUM-VERSION) dnl Test for libasound, and define ALSA_CFLAGS and ALSA_LIBS as appropriate. dnl if there exit ALSA, define have_alsa=yes, otherwise no. dnl enables arguments --with-alsa-prefix= --with-alsa-enc-prefix= --disable-alsatest dnl AC_DEFUN(AM_PATH_ALSA_LOCAL, [dnl dnl Get the clfags and libraries for alsa dnl have_alsa=no AC_ARG_WITH(alsa-prefix,[ --with-alsa-prefix=PFX Prefix where Alsa library is installed(optional)], [alsa_prefix="$withval"], [alsa_prefix=""]) AC_ARG_WITH(alsa-inc-prefix, [ --with-alsa-inc-prefix=PFX Prefix where include libraries are (optional)], [alsa_inc_prefix="$withval"], [alsa_inc_prefix=""]) AC_ARG_ENABLE(alsatest, [ --disable-alsatest Do not try to compile and run a test Alsa program], [enable_alsatest=no], [enable_alsatest=yes]) dnl Add any special include directories AC_MSG_CHECKING(for ALSA CFLAGS) if test "$alsa_inc_prefix" != "" ; then ALSA_CFLAGS="$ALSA_CFLAGS -I$alsa_inc_prefix" CFLAGS="$CFLAGS -I$alsa_inc_prefix" fi AC_MSG_RESULT($ALSA_CFLAGS) dnl add any special lib dirs AC_MSG_CHECKING(for ALSA LDFLAGS) if test "$alsa_prefix" != "" ; then ALSA_LIBS="$ALSA_LIBS -L$alsa_prefix" LIBS="-L$alsa_prefix" fi dnl add the alsa library ALSA_LIBS="$ALSA_LIBS -lasound" AC_MSG_RESULT($ALSA_LIBS) dnl Check for a working version of libasound that is of the right version. min_alsa_version=ifelse([$1], ,0.1.1,$1) AC_MSG_CHECKING(for libasound headers version >= $min_alsa_version) no_alsa="" alsa_min_major_version=`echo $min_alsa_version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` alsa_min_minor_version=`echo $min_alsa_version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` alsa_min_micro_version=`echo $min_alsa_version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` AC_TRY_COMPILE([ #include ], [ /* ensure backward compatibility */ #if !defined(SND_LIB_MAJOR) && defined(SOUNDLIB_VERSION_MAJOR) #define SND_LIB_MAJOR SOUNDLIB_VERSION_MAJOR #endif #if !defined(SND_LIB_MINOR) && defined(SOUNDLIB_VERSION_MINOR) #define SND_LIB_MINOR SOUNDLIB_VERSION_MINOR #endif #if !defined(SND_LIB_SUBMINOR) && defined(SOUNDLIB_VERSION_SUBMINOR) #define SND_LIB_SUBMINOR SOUNDLIB_VERSION_SUBMINOR #endif # if(SND_LIB_MAJOR > $alsa_min_major_version) exit(0); # else # if(SND_LIB_MAJOR < $alsa_min_major_version) # error not present # endif # if(SND_LIB_MINOR > $alsa_min_minor_version) exit(0); # else # if(SND_LIB_MINOR < $alsa_min_minor_version) # error not present # endif # if(SND_LIB_SUBMINOR < $alsa_min_micro_version) # error not present # endif # endif # endif exit(0); ], [AC_MSG_RESULT(found.) have_alsa=yes], [AC_MSG_RESULT(not present.)] ) dnl Now that we know that we have the right version, let's see if we have the library and not just the headers. AC_CHECK_LIB([asound], [snd_ctl_open],, [AC_MSG_RESULT(No linkable libasound was found.)] ) dnl That should be it. Now just export out symbols: AC_SUBST(ALSA_CFLAGS) AC_SUBST(ALSA_LIBS) ]) dnl alsa.m4 ends here tk707-0.8/aclocal.m40000644000175100017510000010656010142141576011031 00000000000000# generated automatically by aclocal 1.7.2 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. dnl dnl This file is part of tk707. dnl dnl Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito dnl dnl tk707 is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl Foobar is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with Foobar; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA dnl dnl -------------------------------------------------------------- AC_DEFUN(AC_VERSION_FROM_FILE, [ if test -f $srcdir/VERSION; then [MINOR_VERSION=`cat $srcdir/VERSION | awk -F "." '{print $NF}'`] [MAJOR_VERSION=`cat $srcdir/VERSION | \ awk -F "." '{ i=1; printf("%s", $i); for(i=2;i> confdefs.h < int main() { #if (SND_LIB_MAJOR == 0) && (SND_LIB_MINOR >= 9) return 0; #else return 1; #endif } %%, changequote([, ])dnl [AC_DEFINE(HAVE_ALSA9)] have_alsa9=yes, have_alsa9=no, have_alsa9=undef false )] [AC_MSG_RESULT(${have_alsa9})] ) dnl -------------------------------------------------------------- dnl alsa.m4 starts form here dnl Configure Paths for Alsa dnl Christopher Lansdown (lansdoct@cs.alfred.edu) dnl 29/10/1998 dnl modified for TiMidity++ by Isaku Yamahata(yamahata@kusm.kyoto-u.ac.jp) dnl 16/12/1998 dnl AM_PATH_ALSA_LOCAL(MINIMUM-VERSION) dnl Test for libasound, and define ALSA_CFLAGS and ALSA_LIBS as appropriate. dnl if there exit ALSA, define have_alsa=yes, otherwise no. dnl enables arguments --with-alsa-prefix= --with-alsa-enc-prefix= --disable-alsatest dnl AC_DEFUN(AM_PATH_ALSA_LOCAL, [dnl dnl Get the clfags and libraries for alsa dnl have_alsa=no AC_ARG_WITH(alsa-prefix,[ --with-alsa-prefix=PFX Prefix where Alsa library is installed(optional)], [alsa_prefix="$withval"], [alsa_prefix=""]) AC_ARG_WITH(alsa-inc-prefix, [ --with-alsa-inc-prefix=PFX Prefix where include libraries are (optional)], [alsa_inc_prefix="$withval"], [alsa_inc_prefix=""]) AC_ARG_ENABLE(alsatest, [ --disable-alsatest Do not try to compile and run a test Alsa program], [enable_alsatest=no], [enable_alsatest=yes]) dnl Add any special include directories AC_MSG_CHECKING(for ALSA CFLAGS) if test "$alsa_inc_prefix" != "" ; then ALSA_CFLAGS="$ALSA_CFLAGS -I$alsa_inc_prefix" CFLAGS="$CFLAGS -I$alsa_inc_prefix" fi AC_MSG_RESULT($ALSA_CFLAGS) dnl add any special lib dirs AC_MSG_CHECKING(for ALSA LDFLAGS) if test "$alsa_prefix" != "" ; then ALSA_LIBS="$ALSA_LIBS -L$alsa_prefix" LIBS="-L$alsa_prefix" fi dnl add the alsa library ALSA_LIBS="$ALSA_LIBS -lasound" AC_MSG_RESULT($ALSA_LIBS) dnl Check for a working version of libasound that is of the right version. min_alsa_version=ifelse([$1], ,0.1.1,$1) AC_MSG_CHECKING(for libasound headers version >= $min_alsa_version) no_alsa="" alsa_min_major_version=`echo $min_alsa_version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` alsa_min_minor_version=`echo $min_alsa_version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` alsa_min_micro_version=`echo $min_alsa_version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` AC_TRY_COMPILE([ #include ], [ /* ensure backward compatibility */ #if !defined(SND_LIB_MAJOR) && defined(SOUNDLIB_VERSION_MAJOR) #define SND_LIB_MAJOR SOUNDLIB_VERSION_MAJOR #endif #if !defined(SND_LIB_MINOR) && defined(SOUNDLIB_VERSION_MINOR) #define SND_LIB_MINOR SOUNDLIB_VERSION_MINOR #endif #if !defined(SND_LIB_SUBMINOR) && defined(SOUNDLIB_VERSION_SUBMINOR) #define SND_LIB_SUBMINOR SOUNDLIB_VERSION_SUBMINOR #endif # if(SND_LIB_MAJOR > $alsa_min_major_version) exit(0); # else # if(SND_LIB_MAJOR < $alsa_min_major_version) # error not present # endif # if(SND_LIB_MINOR > $alsa_min_minor_version) exit(0); # else # if(SND_LIB_MINOR < $alsa_min_minor_version) # error not present # endif # if(SND_LIB_SUBMINOR < $alsa_min_micro_version) # error not present # endif # endif # endif exit(0); ], [AC_MSG_RESULT(found.) have_alsa=yes], [AC_MSG_RESULT(not present.)] ) dnl Now that we know that we have the right version, let's see if we have the library and not just the headers. AC_CHECK_LIB([asound], [snd_ctl_open],, [AC_MSG_RESULT(No linkable libasound was found.)] ) dnl That should be it. Now just export out symbols: AC_SUBST(ALSA_CFLAGS) AC_SUBST(ALSA_LIBS) ]) dnl alsa.m4 ends here # AM_CONDITIONAL -*- Autoconf -*- # Copyright 1997, 2000, 2001 Free Software Foundation, Inc. # 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, 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. # serial 5 AC_PREREQ(2.52) # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE]) AC_SUBST([$1_FALSE]) if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]) fi])]) # Do all the work for Automake. -*- Autoconf -*- # This macro actually does too much some checks are only needed if # your package does certain things. But this isn't really a big deal. # Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # 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, 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. # serial 8 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... AC_PREREQ([2.54]) # Autoconf 2.50 wants to disallow AM_ names. We explicitly allow # the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl AC_SUBST([PACKAGE], [AC_PACKAGE_TARNAME])dnl AC_SUBST([VERSION], [AC_PACKAGE_VERSION])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AM_MISSING_PROG(AMTAR, tar) AM_PROG_INSTALL_SH AM_PROG_INSTALL_STRIP # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl ]) ]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [_am_stamp_count=`expr ${_am_stamp_count-0} + 1` echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) # Copyright 2002 Free Software Foundation, Inc. # 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, 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 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.7"]) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION so it can be traced. # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.7.2])]) # Helper functions for option handling. -*- Autoconf -*- # Copyright 2001, 2002 Free Software Foundation, Inc. # 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, 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. # serial 2 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # # Check to make sure that the build environment is sane. # # Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc. # 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, 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. # serial 3 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # -*- Autoconf -*- # Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc. # 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, 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. # serial 3 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # AM_AUX_DIR_EXPAND # Copyright 2001 Free Software Foundation, Inc. # 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, 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. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. # Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50]) AC_DEFUN([AM_AUX_DIR_EXPAND], [ # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. # Copyright 2001 Free Software Foundation, Inc. # 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, 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. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl install_sh=${install_sh-"$am_aux_dir/install-sh"} AC_SUBST(install_sh)]) # AM_PROG_INSTALL_STRIP # Copyright 2001 Free Software Foundation, Inc. # 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, 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. # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # serial 4 -*- Autoconf -*- # Copyright 1999, 2000, 2001 Free Software Foundation, Inc. # 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, 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. # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi for depmode in $am_compiler_list; do # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. echo '#include "conftest.h"' > conftest.c echo 'int i;' > conftest.h echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=conftest.c object=conftest.o \ depfile=conftest.Po tmpdepfile=conftest.TPo \ $SHELL ./depcomp $depcc -c -o conftest.o conftest.c >/dev/null 2>&1 && grep conftest.h conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then am_cv_$1_dependencies_compiler_type=$depmode break fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [rm -f .deps 2>/dev/null mkdir .deps 2>/dev/null if test -d .deps; then DEPDIR=.deps else # MS-DOS does not allow filenames that begin with a dot. DEPDIR=_deps fi rmdir .deps 2>/dev/null AC_SUBST([DEPDIR]) ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking Speeds up one-time builds --enable-dependency-tracking Do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH]) ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc. # 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, 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. #serial 2 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue # Extract the definition of DEP_FILES from the Makefile without # running `make'. DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` test -z "$DEPDIR" && continue # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n -e '/^U = / s///p' < "$mf"` test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" # We invoke sed twice because it is the simplest approach to # changing $(DEPDIR) to its actual value in the expansion. for file in `sed -n -e ' /^DEP_FILES = .*\\\\$/ { s/^DEP_FILES = // :loop s/\\\\$// p n /\\\\$/ b loop p } /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002 Free Software Foundation, Inc. # 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, 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. # serial 2 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' doit: @echo done END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi AC_SUBST(am__include) AC_SUBST(am__quote) AC_MSG_RESULT($_am_result) rm -f confinc confmf ]) # Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*- # Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc. # 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, 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. AC_PREREQ([2.52]) # serial 6 # AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) tk707-0.8/config.h.in0000644000175100017510000000365010142141631011200 00000000000000/* config.h.in. Generated from configure.in by autoheader. */ /* Defines if you have alsa/asoundlib.h */ #undef HAVE_ALSA_ASOUNDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `asound' library (-lasound). */ #undef HAVE_LIBASOUND /* Define to 1 if you have the `dl' library (-ldl). */ #undef HAVE_LIBDL /* Define to 1 if you have the `m' library (-lm). */ #undef HAVE_LIBM /* Define to 1 if you have the `X11' library (-lX11). */ #undef HAVE_LIBX11 /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define to 1 if the X Window System is missing or not being used. */ #undef X_DISPLAY_MISSING /* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a `char[]'. */ #undef YYTEXT_POINTER tk707-0.8/configure0000755000175100017510000066133710142141644011104 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.57. # # Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" # Sed expression to map a string onto a valid variable name. as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="README" # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE LEX LEXLIB LEX_OUTPUT_ROOT TEXI2HTML TEXI2DVI FIG2DEV TIMIDITY LAME MIDIDUMP ALSA_CFLAGS ALSA_LIBS HAVE_ALSA_ASOUNDLIB_H CPP EGREP X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS TCLTK_CFLAGS TCLTK_LDFLAGS TCLTK_LIBS LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking Speeds up one-time builds --enable-dependency-tracking Do not reject slow dependency extractors --disable-alsatest Do not try to compile and run a test Alsa program Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-alsa-prefix=PFX Prefix where Alsa library is installed(optional) --with-alsa-inc-prefix=PFX Prefix where include libraries are (optional) --with-x use the X Window System --with-tcl-includes=DIR Tcl include file path --with-tcl-libs=DIR Tcl library file path --with-tk-includes=DIR Tk include file path --with-tk-libs=DIR Tk library file path Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.57. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core core.* *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu PACKAGE=tk707 if test -f $srcdir/VERSION; then MINOR_VERSION=`cat $srcdir/VERSION | awk -F "." '{print $NF}'` MAJOR_VERSION=`cat $srcdir/VERSION | \ awk -F "." '{ i=1; printf("%s", $i); for(i=2;i&5 echo "$as_me: WARNING: file $srcdir/VERSION not defined" >&2;} MAJOR_VERSION=1 MINOR_VERSION=0 fi VERSION=$MAJOR_VERSION echo "configuring $PACKAGE $VERSION..." am__api_version="1.7" ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL=$ac_install_sh fi fi echo "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 test "$program_prefix" != NONE && program_transform_name="s,^,$program_prefix,;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$,$program_suffix,;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=$PACKAGE VERSION=$VERSION cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} AMTAR=${AMTAR-"${am_missing_run}tar"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. ac_config_headers="$ac_config_headers config.h" USER_CFLAGS=$CFLAGS ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C compiler default output" >&5 echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ ''\ '#include ' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu rm -f .deps 2>/dev/null mkdir .deps 2>/dev/null if test -d .deps; then DEPDIR=.deps else # MS-DOS does not allow filenames that begin with a dot. DEPDIR=_deps fi rmdir .deps 2>/dev/null ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' doit: @echo done END # If we don't find an include directive, just comment out the code. echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6 rm -f confinc confmf # Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval="$enable_dependency_tracking" fi; if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. echo '#include "conftest.h"' > conftest.c echo 'int i;' > conftest.h echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=conftest.c object=conftest.o \ depfile=conftest.Po tmpdepfile=conftest.TPo \ $SHELL ./depcomp $depcc -c -o conftest.o conftest.c >/dev/null 2>&1 && grep conftest.h conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then am_cv_CC_dependencies_compiler_type=$depmode break fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi if test x"$GCC" = x"yes" -a x"$USER_CFLAGS" = x""; then CFLAGS="-O9 -Wall -Wno-unused" fi for ac_prog in flex lex do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_LEX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$LEX"; then ac_cv_prog_LEX="$LEX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LEX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi LEX=$ac_cv_prog_LEX if test -n "$LEX"; then echo "$as_me:$LINENO: result: $LEX" >&5 echo "${ECHO_T}$LEX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$LEX" && break done if test x"$LEX" != x""; then for ac_prog in flex lex do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_LEX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$LEX"; then ac_cv_prog_LEX="$LEX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LEX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi LEX=$ac_cv_prog_LEX if test -n "$LEX"; then echo "$as_me:$LINENO: result: $LEX" >&5 echo "${ECHO_T}$LEX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$LEX" && break done test -n "$LEX" || LEX=":" if test -z "$LEXLIB" then echo "$as_me:$LINENO: checking for yywrap in -lfl" >&5 echo $ECHO_N "checking for yywrap in -lfl... $ECHO_C" >&6 if test "${ac_cv_lib_fl_yywrap+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfl $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char yywrap (); int main () { yywrap (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_fl_yywrap=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_fl_yywrap=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_fl_yywrap" >&5 echo "${ECHO_T}$ac_cv_lib_fl_yywrap" >&6 if test $ac_cv_lib_fl_yywrap = yes; then LEXLIB="-lfl" else echo "$as_me:$LINENO: checking for yywrap in -ll" >&5 echo $ECHO_N "checking for yywrap in -ll... $ECHO_C" >&6 if test "${ac_cv_lib_l_yywrap+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ll $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char yywrap (); int main () { yywrap (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_l_yywrap=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_l_yywrap=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_l_yywrap" >&5 echo "${ECHO_T}$ac_cv_lib_l_yywrap" >&6 if test $ac_cv_lib_l_yywrap = yes; then LEXLIB="-ll" fi fi fi if test "x$LEX" != "x:"; then echo "$as_me:$LINENO: checking lex output file root" >&5 echo $ECHO_N "checking lex output file root... $ECHO_C" >&6 if test "${ac_cv_prog_lex_root+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # The minimal lex program is just a single line: %%. But some broken lexes # (Solaris, I think it was) want two %% lines, so accommodate them. cat >conftest.l <<_ACEOF %% %% _ACEOF { (eval echo "$as_me:$LINENO: \"$LEX conftest.l\"") >&5 (eval $LEX conftest.l) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } if test -f lex.yy.c; then ac_cv_prog_lex_root=lex.yy elif test -f lexyy.c; then ac_cv_prog_lex_root=lexyy else { { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5 echo "$as_me: error: cannot find output from $LEX; giving up" >&2;} { (exit 1); exit 1; }; } fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_lex_root" >&5 echo "${ECHO_T}$ac_cv_prog_lex_root" >&6 rm -f conftest.l LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root echo "$as_me:$LINENO: checking whether yytext is a pointer" >&5 echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6 if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # POSIX says lex can declare yytext either as a pointer or an array; the # default is implementation-dependent. Figure out which it is, since # not all implementations provide the %pointer and %array declarations. ac_cv_prog_lex_yytext_pointer=no echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c ac_save_LIBS=$LIBS LIBS="$LIBS $LEXLIB" cat >conftest.$ac_ext <<_ACEOF `cat $LEX_OUTPUT_ROOT.c` _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_lex_yytext_pointer=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_save_LIBS rm -f "${LEX_OUTPUT_ROOT}.c" fi echo "$as_me:$LINENO: result: $ac_cv_prog_lex_yytext_pointer" >&5 echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6 if test $ac_cv_prog_lex_yytext_pointer = yes; then cat >>confdefs.h <<\_ACEOF #define YYTEXT_POINTER 1 _ACEOF fi fi else LEX="${srcdir}/missing lex" fi for ac_prog in makeinfo do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_MAKEINFO+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$MAKEINFO"; then ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MAKEINFO="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi MAKEINFO=$ac_cv_prog_MAKEINFO if test -n "$MAKEINFO"; then echo "$as_me:$LINENO: result: $MAKEINFO" >&5 echo "${ECHO_T}$MAKEINFO" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$MAKEINFO" && break done test -n "$MAKEINFO" || MAKEINFO="makeinfo" for ac_prog in texi2html do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_TEXI2HTML+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$TEXI2HTML"; then ac_cv_prog_TEXI2HTML="$TEXI2HTML" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_TEXI2HTML="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi TEXI2HTML=$ac_cv_prog_TEXI2HTML if test -n "$TEXI2HTML"; then echo "$as_me:$LINENO: result: $TEXI2HTML" >&5 echo "${ECHO_T}$TEXI2HTML" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$TEXI2HTML" && break done test -n "$TEXI2HTML" || TEXI2HTML="texi2html" for ac_prog in texi2dvi do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_TEXI2DVI+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$TEXI2DVI"; then ac_cv_prog_TEXI2DVI="$TEXI2DVI" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_TEXI2DVI="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi TEXI2DVI=$ac_cv_prog_TEXI2DVI if test -n "$TEXI2DVI"; then echo "$as_me:$LINENO: result: $TEXI2DVI" >&5 echo "${ECHO_T}$TEXI2DVI" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$TEXI2DVI" && break done for ac_prog in fig2dev do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_FIG2DEV+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$FIG2DEV"; then ac_cv_prog_FIG2DEV="$FIG2DEV" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_FIG2DEV="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi FIG2DEV=$ac_cv_prog_FIG2DEV if test -n "$FIG2DEV"; then echo "$as_me:$LINENO: result: $FIG2DEV" >&5 echo "${ECHO_T}$FIG2DEV" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$FIG2DEV" && break done for ac_prog in timidity do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_TIMIDITY+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$TIMIDITY"; then ac_cv_prog_TIMIDITY="$TIMIDITY" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_TIMIDITY="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi TIMIDITY=$ac_cv_prog_TIMIDITY if test -n "$TIMIDITY"; then echo "$as_me:$LINENO: result: $TIMIDITY" >&5 echo "${ECHO_T}$TIMIDITY" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$TIMIDITY" && break done for ac_prog in lame do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_LAME+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$LAME"; then ac_cv_prog_LAME="$LAME" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LAME="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi LAME=$ac_cv_prog_LAME if test -n "$LAME"; then echo "$as_me:$LINENO: result: $LAME" >&5 echo "${ECHO_T}$LAME" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$LAME" && break done for ac_prog in mididump do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_MIDIDUMP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$MIDIDUMP"; then ac_cv_prog_MIDIDUMP="$MIDIDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MIDIDUMP="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi MIDIDUMP=$ac_cv_prog_MIDIDUMP if test -n "$MIDIDUMP"; then echo "$as_me:$LINENO: result: $MIDIDUMP" >&5 echo "${ECHO_T}$MIDIDUMP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$MIDIDUMP" && break done echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBDL 1 _ACEOF LIBS="-ldl $LIBS" fi echo "$as_me:$LINENO: checking for sqrt in -lm" >&5 echo $ECHO_N "checking for sqrt in -lm... $ECHO_C" >&6 if test "${ac_cv_lib_m_sqrt+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char sqrt (); int main () { sqrt (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_m_sqrt=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_m_sqrt=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_m_sqrt" >&5 echo "${ECHO_T}$ac_cv_lib_m_sqrt" >&6 if test $ac_cv_lib_m_sqrt = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" fi PREV_LIBS=$LIBS PREV_LDFLAGS=$LDFLAGS PREV_CFLAGS=$CFLAGS PREV_CPPFLAGS=$CPPFLAGS have_alsa=no # Check whether --with-alsa-prefix or --without-alsa-prefix was given. if test "${with_alsa_prefix+set}" = set; then withval="$with_alsa_prefix" alsa_prefix="$withval" else alsa_prefix="" fi; # Check whether --with-alsa-inc-prefix or --without-alsa-inc-prefix was given. if test "${with_alsa_inc_prefix+set}" = set; then withval="$with_alsa_inc_prefix" alsa_inc_prefix="$withval" else alsa_inc_prefix="" fi; # Check whether --enable-alsatest or --disable-alsatest was given. if test "${enable_alsatest+set}" = set; then enableval="$enable_alsatest" enable_alsatest=no else enable_alsatest=yes fi; echo "$as_me:$LINENO: checking for ALSA CFLAGS" >&5 echo $ECHO_N "checking for ALSA CFLAGS... $ECHO_C" >&6 if test "$alsa_inc_prefix" != "" ; then ALSA_CFLAGS="$ALSA_CFLAGS -I$alsa_inc_prefix" CFLAGS="$CFLAGS -I$alsa_inc_prefix" fi echo "$as_me:$LINENO: result: $ALSA_CFLAGS" >&5 echo "${ECHO_T}$ALSA_CFLAGS" >&6 echo "$as_me:$LINENO: checking for ALSA LDFLAGS" >&5 echo $ECHO_N "checking for ALSA LDFLAGS... $ECHO_C" >&6 if test "$alsa_prefix" != "" ; then ALSA_LIBS="$ALSA_LIBS -L$alsa_prefix" LIBS="-L$alsa_prefix" fi ALSA_LIBS="$ALSA_LIBS -lasound" echo "$as_me:$LINENO: result: $ALSA_LIBS" >&5 echo "${ECHO_T}$ALSA_LIBS" >&6 min_alsa_version=0.1.1 echo "$as_me:$LINENO: checking for libasound headers version >= $min_alsa_version" >&5 echo $ECHO_N "checking for libasound headers version >= $min_alsa_version... $ECHO_C" >&6 no_alsa="" alsa_min_major_version=`echo $min_alsa_version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` alsa_min_minor_version=`echo $min_alsa_version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` alsa_min_micro_version=`echo $min_alsa_version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { /* ensure backward compatibility */ #if !defined(SND_LIB_MAJOR) && defined(SOUNDLIB_VERSION_MAJOR) #define SND_LIB_MAJOR SOUNDLIB_VERSION_MAJOR #endif #if !defined(SND_LIB_MINOR) && defined(SOUNDLIB_VERSION_MINOR) #define SND_LIB_MINOR SOUNDLIB_VERSION_MINOR #endif #if !defined(SND_LIB_SUBMINOR) && defined(SOUNDLIB_VERSION_SUBMINOR) #define SND_LIB_SUBMINOR SOUNDLIB_VERSION_SUBMINOR #endif # if(SND_LIB_MAJOR > $alsa_min_major_version) exit(0); # else # if(SND_LIB_MAJOR < $alsa_min_major_version) # error not present # endif # if(SND_LIB_MINOR > $alsa_min_minor_version) exit(0); # else # if(SND_LIB_MINOR < $alsa_min_minor_version) # error not present # endif # if(SND_LIB_SUBMINOR < $alsa_min_micro_version) # error not present # endif # endif # endif exit(0); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then echo "$as_me:$LINENO: result: found." >&5 echo "${ECHO_T}found." >&6 have_alsa=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: result: not present." >&5 echo "${ECHO_T}not present." >&6 fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: checking for snd_ctl_open in -lasound" >&5 echo $ECHO_N "checking for snd_ctl_open in -lasound... $ECHO_C" >&6 if test "${ac_cv_lib_asound_snd_ctl_open+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lasound $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char snd_ctl_open (); int main () { snd_ctl_open (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_asound_snd_ctl_open=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_asound_snd_ctl_open=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_asound_snd_ctl_open" >&5 echo "${ECHO_T}$ac_cv_lib_asound_snd_ctl_open" >&6 if test $ac_cv_lib_asound_snd_ctl_open = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBASOUND 1 _ACEOF LIBS="-lasound $LIBS" else echo "$as_me:$LINENO: result: No linkable libasound was found." >&5 echo "${ECHO_T}No linkable libasound was found." >&6 fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "${ac_cv_header_alsa_asoundlib_h+set}" = set; then echo "$as_me:$LINENO: checking for alsa/asoundlib.h" >&5 echo $ECHO_N "checking for alsa/asoundlib.h... $ECHO_C" >&6 if test "${ac_cv_header_alsa_asoundlib_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: $ac_cv_header_alsa_asoundlib_h" >&5 echo "${ECHO_T}$ac_cv_header_alsa_asoundlib_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking alsa/asoundlib.h usability" >&5 echo $ECHO_N "checking alsa/asoundlib.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking alsa/asoundlib.h presence" >&5 echo $ECHO_N "checking alsa/asoundlib.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc in yes:no ) { echo "$as_me:$LINENO: WARNING: alsa/asoundlib.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: alsa/asoundlib.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: alsa/asoundlib.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: alsa/asoundlib.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; no:yes ) { echo "$as_me:$LINENO: WARNING: alsa/asoundlib.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: alsa/asoundlib.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: alsa/asoundlib.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: alsa/asoundlib.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: alsa/asoundlib.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: alsa/asoundlib.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for alsa/asoundlib.h" >&5 echo $ECHO_N "checking for alsa/asoundlib.h... $ECHO_C" >&6 if test "${ac_cv_header_alsa_asoundlib_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_alsa_asoundlib_h=$ac_header_preproc fi echo "$as_me:$LINENO: result: $ac_cv_header_alsa_asoundlib_h" >&5 echo "${ECHO_T}$ac_cv_header_alsa_asoundlib_h" >&6 fi if test $ac_cv_header_alsa_asoundlib_h = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_ALSA_ASOUNDLIB_H 1 _ACEOF fi LIBS=$PREV_LIBS LDFLAGS=$PREV_LDFLAGS CFLAGS=$PREV_CFLAGS CPPFLAGS=$PREV_CPPFLAGS echo "$as_me:$LINENO: checking for X" >&5 echo $ECHO_N "checking for X... $ECHO_C" >&6 # Check whether --with-x or --without-x was given. if test "${with_x+set}" = set; then withval="$with_x" fi; # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then # Both variables are already set. have_x=yes else if test "${ac_cv_have_x+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -fr conftest.dir if mkdir conftest.dir; then cd conftest.dir # Make sure to not put "make" in the Imakefile rules, since we grep it out. cat >Imakefile <<'_ACEOF' acfindx: @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"' _ACEOF if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} acfindx 2>/dev/null | grep -v make` # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl; do if test ! -f $ac_im_usrlibdir/libX11.$ac_extension && test -f $ac_im_libdir/libX11.$ac_extension; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /lib) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -fr conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Intrinsic.h. # First, try using that file with no special directory specified. cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # We can compile using X headers with no special include directory. ac_x_includes= else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Intrinsic.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lXt $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { XtMalloc (0) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 LIBS=$ac_save_LIBS for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl; do if test -r $ac_dir/libXt.$ac_extension; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no if test "$ac_x_includes" = no || test "$ac_x_libraries" = no; then # Didn't find X anywhere. Cache the known absence of X. ac_cv_have_x="have_x=no" else # Record where we found X for the cache. ac_cv_have_x="have_x=yes \ ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries" fi fi fi eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then echo "$as_me:$LINENO: result: $have_x" >&5 echo "${ECHO_T}$have_x" >&6 no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes \ ac_x_includes=$x_includes ac_x_libraries=$x_libraries" echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5 echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6 fi if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. cat >>confdefs.h <<\_ACEOF #define X_DISPLAY_MISSING 1 _ACEOF X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= else if test -n "$x_includes"; then X_CFLAGS="$X_CFLAGS -I$x_includes" fi # It would also be nice to do this for all -L options, not just this one. if test -n "$x_libraries"; then X_LIBS="$X_LIBS -L$x_libraries" # For Solaris; some versions of Sun CC require a space after -R and # others require no space. Words are not sufficient . . . . case `(uname -sr) 2>/dev/null` in "SunOS 5"*) echo "$as_me:$LINENO: checking whether -R must be followed by a space" >&5 echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6 ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_R_nospace=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_R_nospace=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext if test $ac_R_nospace = yes; then echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 X_LIBS="$X_LIBS -R$x_libraries" else LIBS="$ac_xsave_LIBS -R $x_libraries" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_R_space=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_R_space=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext if test $ac_R_space = yes; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 X_LIBS="$X_LIBS -R $x_libraries" else echo "$as_me:$LINENO: result: neither works" >&5 echo "${ECHO_T}neither works" >&6 fi fi LIBS=$ac_xsave_LIBS esac fi # Check for system-dependent libraries X programs must link with. # Do this before checking for the system-independent R6 libraries # (-lICE), since we may need -lsocket or whatever for X linking. if test "$ISC" = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" else # Martyn Johnson says this is needed for Ultrix, if the X # libraries were built with DECnet support. And Karl Berry says # the Alpha needs dnet_stub (dnet does not exist). ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char XOpenDisplay (); int main () { XOpenDisplay (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet" >&5 echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6 if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dnet_ntoa (); int main () { dnet_ntoa (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dnet_dnet_ntoa=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dnet_dnet_ntoa=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6 if test $ac_cv_lib_dnet_dnet_ntoa = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet_stub" >&5 echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6 if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet_stub $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dnet_ntoa (); int main () { dnet_ntoa (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dnet_stub_dnet_ntoa=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dnet_stub_dnet_ntoa=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6 if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" fi fi fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS="$ac_xsave_LIBS" # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, # to get the SysV transport functions. # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) # needs -lnsl. # The nsl library prevents programs from opening the X display # on Irix 5.2, according to T.E. Dickey. # The functions gethostbyname, getservbyname, and inet_addr are # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. echo "$as_me:$LINENO: checking for gethostbyname" >&5 echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6 if test "${ac_cv_func_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char gethostbyname (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_gethostbyname) || defined (__stub___gethostbyname) choke me #else char (*f) () = gethostbyname; #endif #ifdef __cplusplus } #endif int main () { return f != gethostbyname; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_gethostbyname=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_gethostbyname=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6 if test $ac_cv_func_gethostbyname = no; then echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5 echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6 if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); int main () { gethostbyname (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_nsl_gethostbyname=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_nsl_gethostbyname=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6 if test $ac_cv_lib_nsl_gethostbyname = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" fi if test $ac_cv_lib_nsl_gethostbyname = no; then echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5 echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6 if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char gethostbyname (); int main () { gethostbyname (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_bsd_gethostbyname=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_bsd_gethostbyname=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5 echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6 if test $ac_cv_lib_bsd_gethostbyname = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" fi fi fi # lieder@skyler.mavd.honeywell.com says without -lsocket, # socket/setsockopt and other routines are undefined under SCO ODT # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary # on later versions), says Simon Leinen: it contains gethostby* # variants that don't use the name server (or something). -lsocket # must be given before -lnsl if both are needed. We assume that # if connect needs -lnsl, so does gethostbyname. echo "$as_me:$LINENO: checking for connect" >&5 echo $ECHO_N "checking for connect... $ECHO_C" >&6 if test "${ac_cv_func_connect+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char connect (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char connect (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_connect) || defined (__stub___connect) choke me #else char (*f) () = connect; #endif #ifdef __cplusplus } #endif int main () { return f != connect; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_connect=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_connect=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5 echo "${ECHO_T}$ac_cv_func_connect" >&6 if test $ac_cv_func_connect = no; then echo "$as_me:$LINENO: checking for connect in -lsocket" >&5 echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6 if test "${ac_cv_lib_socket_connect+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $X_EXTRA_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char connect (); int main () { connect (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_socket_connect=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_socket_connect=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5 echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6 if test $ac_cv_lib_socket_connect = yes; then X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" fi fi # Guillermo Gomez says -lposix is necessary on A/UX. echo "$as_me:$LINENO: checking for remove" >&5 echo $ECHO_N "checking for remove... $ECHO_C" >&6 if test "${ac_cv_func_remove+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char remove (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char remove (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_remove) || defined (__stub___remove) choke me #else char (*f) () = remove; #endif #ifdef __cplusplus } #endif int main () { return f != remove; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_remove=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_remove=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_remove" >&5 echo "${ECHO_T}$ac_cv_func_remove" >&6 if test $ac_cv_func_remove = no; then echo "$as_me:$LINENO: checking for remove in -lposix" >&5 echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6 if test "${ac_cv_lib_posix_remove+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lposix $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char remove (); int main () { remove (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_posix_remove=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_posix_remove=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5 echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6 if test $ac_cv_lib_posix_remove = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" fi fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. echo "$as_me:$LINENO: checking for shmat" >&5 echo $ECHO_N "checking for shmat... $ECHO_C" >&6 if test "${ac_cv_func_shmat+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shmat (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shmat (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_shmat) || defined (__stub___shmat) choke me #else char (*f) () = shmat; #endif #ifdef __cplusplus } #endif int main () { return f != shmat; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shmat=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shmat=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shmat" >&5 echo "${ECHO_T}$ac_cv_func_shmat" >&6 if test $ac_cv_func_shmat = no; then echo "$as_me:$LINENO: checking for shmat in -lipc" >&5 echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6 if test "${ac_cv_lib_ipc_shmat+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lipc $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shmat (); int main () { shmat (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_ipc_shmat=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_ipc_shmat=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5 echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6 if test $ac_cv_lib_ipc_shmat = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" fi fi fi # Check for libraries that X11R6 Xt/Xaw programs need. ac_save_LDFLAGS=$LDFLAGS test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to # check for ICE first), but we must link in the order -lSM -lICE or # we get undefined symbols. So assume we have SM if we have ICE. # These have to be linked with before -lX11, unlike the other # libraries we check for below, so use a different variable. # John Interrante, Karl Berry echo "$as_me:$LINENO: checking for IceConnectionNumber in -lICE" >&5 echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6 if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lICE $X_EXTRA_LIBS $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char IceConnectionNumber (); int main () { IceConnectionNumber (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_ICE_IceConnectionNumber=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_ICE_IceConnectionNumber=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6 if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" fi LDFLAGS=$ac_save_LDFLAGS fi if test "x$have_x" = xno; then { { echo "$as_me:$LINENO: error: Could not configure X" >&5 echo "$as_me: error: Could not configure X" >&2;} { (exit 1); exit 1; }; } fi if test "x$x_libraries" != x; then ldflags_x_opt="-L$x_libraries" LDFLAGS="$LDFLAGS $ldflags_x_opt" SHLDFLAGS="$SHLDFLAGS $ldflags_x_opt" else ldflags_x_opt= fi if test "x$x_includes" != x; then CPPFLAGS="$CPPFLAGS -I$x_includes" fi echo "$as_me:$LINENO: checking for XOpenDisplay in -lX11" >&5 echo $ECHO_N "checking for XOpenDisplay in -lX11... $ECHO_C" >&6 if test "${ac_cv_lib_X11_XOpenDisplay+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char XOpenDisplay (); int main () { XOpenDisplay (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_X11_XOpenDisplay=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_X11_XOpenDisplay=no fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_X11_XOpenDisplay" >&5 echo "${ECHO_T}$ac_cv_lib_X11_XOpenDisplay" >&6 if test $ac_cv_lib_X11_XOpenDisplay = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBX11 1 _ACEOF LIBS="-lX11 $LIBS" fi # Check whether --with-tcl-includes or --without-tcl-includes was given. if test "${with_tcl_includes+set}" = set; then withval="$with_tcl_includes" if test ! -d $withval; then { echo "$as_me:$LINENO: WARNING: $withval is not found." >&5 echo "$as_me: WARNING: $withval is not found." >&2;} fi tcl_include_dir="-I$withval" fi; # Check whether --with-tcl-libs or --without-tcl-libs was given. if test "${with_tcl_libs+set}" = set; then withval="$with_tcl_libs" if test ! -d $withval; then { echo "$as_me:$LINENO: WARNING: $withval is not found." >&5 echo "$as_me: WARNING: $withval is not found." >&2;} fi tcl_libdir="-L$withval" fi; # Check whether --with-tk-includes or --without-tk-includes was given. if test "${with_tk_includes+set}" = set; then withval="$with_tk_includes" if test ! -d $withval; then { echo "$as_me:$LINENO: WARNING: $withval is not found." >&5 echo "$as_me: WARNING: $withval is not found." >&2;} fi tk_includes="-I$withval" fi; # Check whether --with-tk-libs or --without-tk-libs was given. if test "${with_tk_libs+set}" = set; then withval="$with_tk_libs" if test ! -d $withval; then { echo "$as_me:$LINENO: WARNING: $withval is not found." >&5 echo "$as_me: WARNING: $withval is not found." >&2;} fi tk_libdir="-L$withval" fi; KEEPCPPFLAGS=$CPPFLAGS KEEPLDFLAGS=$LDFLAGS KEEPLIBS=$LIBS CPPFLAGS="$tcl_include_dir $tk_includes $CPPFLAGS" LDFLAGS="$tcl_libdir $tk_libdir $LDFLAGS" LIBS="$LIBS $lib_dl_opt" tcl_lib= tk_lib= tcl_prefix=no for l in tcl8.4 tcl8.3 tcl8.2 tcl8.1 tcl8.0 tcl8.0jp tcl7.6jp tcl80jp tcl76jp tcl7.6 tcl80 tcl76 tcl; do case "x$tcl_prefix" in x"no") as_ac_Lib=`echo "ac_cv_lib_$l''_Tcl_Init" | $as_tr_sh` echo "$as_me:$LINENO: checking for Tcl_Init in -l$l" >&5 echo $ECHO_N "checking for Tcl_Init in -l$l... $ECHO_C" >&6 if eval "test \"\${$as_ac_Lib+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$l $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char Tcl_Init (); int main () { Tcl_Init (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Lib=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Lib=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Lib'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Lib'}'`" >&6 if test `eval echo '${'$as_ac_Lib'}'` = yes; then tcl_prefix=$l fi ;; esac done tcl_lib="-l${tcl_prefix}" LIBS="$LIBS $tcl_lib" for l in tk8.4 tk8.3 tk8.2 tk8.1 tk8.0 tk8.0jp tk4.2jp tk80jp tk42jp tk4.2 tk80 tk42 tk; do case "x$tk_lib" in x) as_ac_Lib=`echo "ac_cv_lib_$l''_Tk_Init" | $as_tr_sh` echo "$as_me:$LINENO: checking for Tk_Init in -l$l" >&5 echo $ECHO_N "checking for Tk_Init in -l$l... $ECHO_C" >&6 if eval "test \"\${$as_ac_Lib+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$l $LIBS" cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char Tk_Init (); int main () { Tk_Init (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Lib=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Lib=no" fi rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Lib'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Lib'}'`" >&6 if test `eval echo '${'$as_ac_Lib'}'` = yes; then tk_lib=-l$l fi ;; esac done have_tcltk_header=yes if test ! -d /usr/include/$tcl_prefix; then # not debian style if test "${ac_cv_header_tcl_h+set}" = set; then echo "$as_me:$LINENO: checking for tcl.h" >&5 echo $ECHO_N "checking for tcl.h... $ECHO_C" >&6 if test "${ac_cv_header_tcl_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: $ac_cv_header_tcl_h" >&5 echo "${ECHO_T}$ac_cv_header_tcl_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking tcl.h usability" >&5 echo $ECHO_N "checking tcl.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking tcl.h presence" >&5 echo $ECHO_N "checking tcl.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc in yes:no ) { echo "$as_me:$LINENO: WARNING: tcl.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: tcl.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: tcl.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: tcl.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; no:yes ) { echo "$as_me:$LINENO: WARNING: tcl.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: tcl.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: tcl.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: tcl.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: tcl.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: tcl.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for tcl.h" >&5 echo $ECHO_N "checking for tcl.h... $ECHO_C" >&6 if test "${ac_cv_header_tcl_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_tcl_h=$ac_header_preproc fi echo "$as_me:$LINENO: result: $ac_cv_header_tcl_h" >&5 echo "${ECHO_T}$ac_cv_header_tcl_h" >&6 fi if test $ac_cv_header_tcl_h = yes; then : else have_tcltk_header=no fi if test "${ac_cv_header_tk_h+set}" = set; then echo "$as_me:$LINENO: checking for tk.h" >&5 echo $ECHO_N "checking for tk.h... $ECHO_C" >&6 if test "${ac_cv_header_tk_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: $ac_cv_header_tk_h" >&5 echo "${ECHO_T}$ac_cv_header_tk_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking tk.h usability" >&5 echo $ECHO_N "checking tk.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking tk.h presence" >&5 echo $ECHO_N "checking tk.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc in yes:no ) { echo "$as_me:$LINENO: WARNING: tk.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: tk.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: tk.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: tk.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; no:yes ) { echo "$as_me:$LINENO: WARNING: tk.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: tk.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: tk.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: tk.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: tk.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: tk.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for tk.h" >&5 echo $ECHO_N "checking for tk.h... $ECHO_C" >&6 if test "${ac_cv_header_tk_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_tk_h=$ac_header_preproc fi echo "$as_me:$LINENO: result: $ac_cv_header_tk_h" >&5 echo "${ECHO_T}$ac_cv_header_tk_h" >&6 fi if test $ac_cv_header_tk_h = yes; then : else have_tcltk_header=no fi else # debian style detection : echo "looking in /usr/include/$tcl_prefix for tcl-tk headers" CPPFLAGS="-I/usr/include/$tcl_prefix $CPPFLAGS" TCLTK_CFLAGS="-I/usr/include/$tcl_prefix $TCLTK_CFLAGS" if test "${ac_cv_header_tcl_h+set}" = set; then echo "$as_me:$LINENO: checking for tcl.h" >&5 echo $ECHO_N "checking for tcl.h... $ECHO_C" >&6 if test "${ac_cv_header_tcl_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: $ac_cv_header_tcl_h" >&5 echo "${ECHO_T}$ac_cv_header_tcl_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking tcl.h usability" >&5 echo $ECHO_N "checking tcl.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking tcl.h presence" >&5 echo $ECHO_N "checking tcl.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc in yes:no ) { echo "$as_me:$LINENO: WARNING: tcl.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: tcl.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: tcl.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: tcl.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; no:yes ) { echo "$as_me:$LINENO: WARNING: tcl.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: tcl.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: tcl.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: tcl.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: tcl.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: tcl.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for tcl.h" >&5 echo $ECHO_N "checking for tcl.h... $ECHO_C" >&6 if test "${ac_cv_header_tcl_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_tcl_h=$ac_header_preproc fi echo "$as_me:$LINENO: result: $ac_cv_header_tcl_h" >&5 echo "${ECHO_T}$ac_cv_header_tcl_h" >&6 fi if test $ac_cv_header_tcl_h = yes; then : else have_tcltk_header=no fi if test "${ac_cv_header_tk_h+set}" = set; then echo "$as_me:$LINENO: checking for tk.h" >&5 echo $ECHO_N "checking for tk.h... $ECHO_C" >&6 if test "${ac_cv_header_tk_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: $ac_cv_header_tk_h" >&5 echo "${ECHO_T}$ac_cv_header_tk_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking tk.h usability" >&5 echo $ECHO_N "checking tk.h usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking tk.h presence" >&5 echo $ECHO_N "checking tk.h presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF #line $LINENO "configure" /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc in yes:no ) { echo "$as_me:$LINENO: WARNING: tk.h: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: tk.h: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: tk.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: tk.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; no:yes ) { echo "$as_me:$LINENO: WARNING: tk.h: present but cannot be compiled" >&5 echo "$as_me: WARNING: tk.h: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: tk.h: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: tk.h: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: tk.h: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: tk.h: proceeding with the preprocessor's result" >&2;} ( cat <<\_ASBOX ## ------------------------------------ ## ## Report this to bug-autoconf@gnu.org. ## ## ------------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for tk.h" >&5 echo $ECHO_N "checking for tk.h... $ECHO_C" >&6 if test "${ac_cv_header_tk_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_header_tk_h=$ac_header_preproc fi echo "$as_me:$LINENO: result: $ac_cv_header_tk_h" >&5 echo "${ECHO_T}$ac_cv_header_tk_h" >&6 fi if test $ac_cv_header_tk_h = yes; then : else have_tcltk_header=no fi fi if test $have_tcltk_header = no; then { { echo "$as_me:$LINENO: error: need tcl.h and tk.h header files" >&5 echo "$as_me: error: need tcl.h and tk.h header files" >&2;} { (exit 1); exit 1; }; } fi LIBS=$KEEPLIBS if test "x$tcl_lib" = x -o "x$tk_lib" = x; then CPPFLAGS=$KEEPCPPFLAGS LDFLAGS=$KEEPLDFLAGS enable_tcltk=no { echo "$as_me:$LINENO: WARNING: tcl/tk is not enable" >&5 echo "$as_me: WARNING: tcl/tk is not enable" >&2;} else tcltk_dep='tclIndex' TCLTK_CFLAGS="$tcl_include_dir $tk_includes $TCLTK_CFLAGS" TCLTK_LDFLAGS="$tk_lib $tcl_lib $lib_dl_opt" TCLTK_LIBS=`echo $LIBS | sed "s/-lX11/$tk_lib $tcl_lib -lX11/"` case "$target" in *-*-bsdi*) TCLTK_LIBS="$TCLTK_LIBS -lipc" ;; esac fi LIBS=$PREV_LIBS LDFLAGS=$PREV_LDFLAGS CFLAGS=$PREV_CFLAGS CPPFLAGS=$PREV_CPPFLAGS ac_config_files="$ac_config_files Makefile tk707.sh" test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi # Support unset when possible. if (FOO=FOO; unset FOO) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" # Sed expression to map a string onto a valid variable name. as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by $as_me, which was generated by GNU Autoconf 2.57. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.57, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS section. # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "tk707.sh" ) CONFIG_FILES="$CONFIG_FILES tk707.sh" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CYGPATH_W@,$CYGPATH_W,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@ACLOCAL@,$ACLOCAL,;t t s,@AUTOCONF@,$AUTOCONF,;t t s,@AUTOMAKE@,$AUTOMAKE,;t t s,@AUTOHEADER@,$AUTOHEADER,;t t s,@MAKEINFO@,$MAKEINFO,;t t s,@AMTAR@,$AMTAR,;t t s,@install_sh@,$install_sh,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t s,@AWK@,$AWK,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@DEPDIR@,$DEPDIR,;t t s,@am__include@,$am__include,;t t s,@am__quote@,$am__quote,;t t s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t s,@CCDEPMODE@,$CCDEPMODE,;t t s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t s,@LEX@,$LEX,;t t s,@LEXLIB@,$LEXLIB,;t t s,@LEX_OUTPUT_ROOT@,$LEX_OUTPUT_ROOT,;t t s,@TEXI2HTML@,$TEXI2HTML,;t t s,@TEXI2DVI@,$TEXI2DVI,;t t s,@FIG2DEV@,$FIG2DEV,;t t s,@TIMIDITY@,$TIMIDITY,;t t s,@LAME@,$LAME,;t t s,@MIDIDUMP@,$MIDIDUMP,;t t s,@ALSA_CFLAGS@,$ALSA_CFLAGS,;t t s,@ALSA_LIBS@,$ALSA_LIBS,;t t s,@HAVE_ALSA_ASOUNDLIB_H@,$HAVE_ALSA_ASOUNDLIB_H,;t t s,@CPP@,$CPP,;t t s,@EGREP@,$EGREP,;t t s,@X_CFLAGS@,$X_CFLAGS,;t t s,@X_PRE_LIBS@,$X_PRE_LIBS,;t t s,@X_LIBS@,$X_LIBS,;t t s,@X_EXTRA_LIBS@,$X_EXTRA_LIBS,;t t s,@TCLTK_CFLAGS@,$TCLTK_CFLAGS,;t t s,@TCLTK_LDFLAGS@,$TCLTK_LDFLAGS,;t t s,@TCLTK_LIBS@,$TCLTK_LIBS,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo $f;; *) # Relative if test -f "$f"; then # Build tree echo $f elif test -f "$srcdir/$f"; then # Source tree echo $srcdir/$f else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi _am_stamp_count=`expr ${_am_stamp_count-0} + 1` echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X$ac_file : 'X\(//\)[^/]' \| \ X$ac_file : 'X\(//\)$' \| \ X$ac_file : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X$ac_file | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'`/stamp-h$_am_stamp_count done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_dir=`(dirname "$ac_dest") 2>/dev/null || $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_dest" : 'X\(//\)[^/]' \| \ X"$ac_dest" : 'X\(//\)$' \| \ X"$ac_dest" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_dest" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be # absolute. ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 echo "$as_me: executing $ac_dest commands" >&6;} case $ac_dest in depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`(dirname "$mf") 2>/dev/null || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` else continue fi grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue # Extract the definition of DEP_FILES from the Makefile without # running `make'. DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` test -z "$DEPDIR" && continue # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n -e '/^U = / s///p' < "$mf"` test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" # We invoke sed twice because it is the simplest approach to # changing $(DEPDIR) to its actual value in the expansion. for file in `sed -n -e ' /^DEP_FILES = .*\\\\$/ { s/^DEP_FILES = // :loop s/\\\\$// p n /\\\\$/ b loop p } /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`(dirname "$file") 2>/dev/null || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p $dirpart/$fdir else as_dir=$dirpart/$fdir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi tk707-0.8/configure.in0000644000175100017510000001767610142137110011500 00000000000000dnl dnl This file is part of tk707. dnl dnl Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito dnl dnl tk707 is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl Foobar is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with Foobar; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA dnl dnl------------------------------------------------------------------------- dnl dnl configure.in: script source file for configure dnl dnl author: Pierre.Saramito@imag.fr dnl dnl date: 2 september 2000 dnl dnl------------------------------------------------------------------------- dnl init autoconf without caches define([AC_CACHE_LOAD], ) define([AC_CACHE_SAVE], ) AC_INIT(README) AC_PREREQ(2.53) dnl------------------------------------------------------------------------- dnl package and version definition dnl------------------------------------------------------------------------- PACKAGE=tk707 dnl the version is defined in the VERSION file: example: dnl 0.6.17 dnl - all but the last are the MAJOR_VERSION used for dnl official releases: 0.6 dnl and is propagated in the .tcl file and the config.h file dnl => you can change the last number dnl - the last number (17) is handled automatically by CVS, for tags dnl => do not change the last number, except when increasing dnl the major version number; then reset it in the VERSION file: dnl 0.7.0 AC_VERSION_FROM_FILE VERSION=$MAJOR_VERSION echo "configuring $PACKAGE $VERSION..." dnl------------------------------------------------------------------------- dnl init automake dnl------------------------------------------------------------------------- AM_INIT_AUTOMAKE($PACKAGE,$VERSION) dnl AC_ARG_PROGRAM AM_CONFIG_HEADER(config.h) dnl------------------------------------------------------------------------- dnl check some commands dnl------------------------------------------------------------------------- USER_CFLAGS=$CFLAGS AC_PROG_CC if test x"$GCC" = x"yes" -a x"$USER_CFLAGS" = x""; then CFLAGS="-O9 -Wall -Wno-unused" fi dnl------------------------------------------------------------------------- dnl check for maintainers tools (not requiered for build) dnl------------------------------------------------------------------------- AC_CHECK_PROGS(LEX, flex lex) if test x"$LEX" != x""; then AC_DECL_YYTEXT else LEX="${srcdir}/missing lex" fi AC_CHECK_PROGS(MAKEINFO, makeinfo, makeinfo) AC_CHECK_PROGS(TEXI2HTML, texi2html, texi2html) AC_CHECK_PROGS(TEXI2DVI, texi2dvi) AC_CHECK_PROGS(FIG2DEV, fig2dev) dnl------------------------------------------------------------------------- dnl check for run-time environment dnl------------------------------------------------------------------------- AC_CHECK_PROGS(TIMIDITY, timidity) AC_CHECK_PROGS(LAME, lame) AC_CHECK_PROGS(MIDIDUMP, mididump) dnl------------------------------------------------------------------------- dnl check for libraries: dl, m dnl------------------------------------------------------------------------- AC_CHECK_LIB(dl,dlopen) AC_CHECK_LIB(m,sqrt) dnl------------------------------------------------------------------------- dnl check for library: alsa dnl------------------------------------------------------------------------- PREV_LIBS=$LIBS PREV_LDFLAGS=$LDFLAGS PREV_CFLAGS=$CFLAGS PREV_CPPFLAGS=$CPPFLAGS AM_PATH_ALSA_LOCAL AH_TEMPLATE([HAVE_ALSA_ASOUNDLIB_H], Defines if you have alsa/asoundlib.h) AC_SUBST(HAVE_ALSA_ASOUNDLIB_H) AC_CHECK_HEADER(alsa/asoundlib.h, [AC_DEFINE(HAVE_ALSA_ASOUNDLIB_H)]) LIBS=$PREV_LIBS LDFLAGS=$PREV_LDFLAGS CFLAGS=$PREV_CFLAGS CPPFLAGS=$PREV_CPPFLAGS dnl------------------------------------------------------------------------- dnl check for library X dnl------------------------------------------------------------------------- AC_PATH_XTRA if test "x$have_x" = xno; then AC_MSG_ERROR(Could not configure X) fi if test "x$x_libraries" != x; then ldflags_x_opt="-L$x_libraries" LDFLAGS="$LDFLAGS $ldflags_x_opt" SHLDFLAGS="$SHLDFLAGS $ldflags_x_opt" else ldflags_x_opt= fi if test "x$x_includes" != x; then CPPFLAGS="$CPPFLAGS -I$x_includes" fi AC_CHECK_LIB(X11,XOpenDisplay) dnl------------------------------------------------------------------------- dnl get libraries by options: tcl tk dnl------------------------------------------------------------------------- AC_ARG_WITH(tcl-includes, [ --with-tcl-includes=DIR Tcl include file path ], [ if test ! -d $withval; then AC_MSG_WARN($withval is not found.) fi tcl_include_dir="-I$withval" ]) AC_ARG_WITH(tcl-libs, [ --with-tcl-libs=DIR Tcl library file path ], [ if test ! -d $withval; then AC_MSG_WARN($withval is not found.) fi tcl_libdir="-L$withval" ]) AC_ARG_WITH(tk-includes, [ --with-tk-includes=DIR Tk include file path ], [ if test ! -d $withval; then AC_MSG_WARN($withval is not found.) fi tk_includes="-I$withval" ]) AC_ARG_WITH(tk-libs, [ --with-tk-libs=DIR Tk library file path ], [ if test ! -d $withval; then AC_MSG_WARN($withval is not found.) fi tk_libdir="-L$withval" ]) dnl------------------------------------------------------------------------- dnl check for libraries: tcl tk dnl------------------------------------------------------------------------- dnl save flags KEEPCPPFLAGS=$CPPFLAGS KEEPLDFLAGS=$LDFLAGS KEEPLIBS=$LIBS CPPFLAGS="$tcl_include_dir $tk_includes $CPPFLAGS" LDFLAGS="$tcl_libdir $tk_libdir $LDFLAGS" LIBS="$LIBS $lib_dl_opt" tcl_lib= tk_lib= tcl_prefix=no for l in tcl8.4 tcl8.3 tcl8.2 tcl8.1 tcl8.0 tcl8.0jp tcl7.6jp tcl80jp tcl76jp tcl7.6 tcl80 tcl76 tcl; do case "x$tcl_prefix" in x"no") AC_CHECK_LIB($l,Tcl_Init,tcl_prefix=$l);; esac done tcl_lib="-l${tcl_prefix}" LIBS="$LIBS $tcl_lib" for l in tk8.4 tk8.3 tk8.2 tk8.1 tk8.0 tk8.0jp tk4.2jp tk80jp tk42jp tk4.2 tk80 tk42 tk; do case "x$tk_lib" in x) AC_CHECK_LIB($l,Tk_Init,tk_lib=-l$l);; esac done have_tcltk_header=yes if test ! -d /usr/include/$tcl_prefix; then # not debian style AC_CHECK_HEADER(tcl.h,,have_tcltk_header=no) AC_CHECK_HEADER(tk.h,,have_tcltk_header=no) else # debian style detection : echo "looking in /usr/include/$tcl_prefix for tcl-tk headers" CPPFLAGS="-I/usr/include/$tcl_prefix $CPPFLAGS" TCLTK_CFLAGS="-I/usr/include/$tcl_prefix $TCLTK_CFLAGS" AC_CHECK_HEADER(tcl.h,,have_tcltk_header=no) AC_CHECK_HEADER(tk.h,,have_tcltk_header=no) fi if test $have_tcltk_header = no; then AC_MSG_ERROR([need tcl.h and tk.h header files]) fi LIBS=$KEEPLIBS if test "x$tcl_lib" = x -o "x$tk_lib" = x; then CPPFLAGS=$KEEPCPPFLAGS LDFLAGS=$KEEPLDFLAGS enable_tcltk=no AC_MSG_WARN(tcl/tk is not enable) else tcltk_dep='tclIndex' TCLTK_CFLAGS="$tcl_include_dir $tk_includes $TCLTK_CFLAGS" AC_SUBST(TCLTK_CFLAGS) TCLTK_LDFLAGS="$tk_lib $tcl_lib $lib_dl_opt" AC_SUBST(TCLTK_LDFLAGS) TCLTK_LIBS=`echo $LIBS | sed "s/-lX11/$tk_lib $tcl_lib -lX11/"` AC_SUBST(TCLTK_LIBS) case "$target" in *-*-bsdi*) TCLTK_LIBS="$TCLTK_LIBS -lipc" ;; esac fi LIBS=$PREV_LIBS LDFLAGS=$PREV_LDFLAGS CFLAGS=$PREV_CFLAGS CPPFLAGS=$PREV_CPPFLAGS dnl------------------------------------------------------------------------- dnl Output dnl------------------------------------------------------------------------- AC_OUTPUT(Makefile tk707.sh) tk707-0.8/depcomp0000755000175100017510000002752510142137110010536 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects # Copyright 1999, 2000 Free Software Foundation, Inc. # 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, 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. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # `libtool' can also be set to `yes' or `no'. depfile=${depfile-`echo "$object" | sed 's,\([^/]*\)$,.deps/\1,;s/\.\([^.]*\)$/.P\1/'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. This file always lives in the current directory. # Also, the AIX compiler puts `$object:' at the start of each line; # $object doesn't have directory information. stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" outname="$stripped.o" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; tru64) # The Tru64 AIX compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. tmpdepfile1="$object.d" tmpdepfile2=`echo "$object" | sed -e 's/.o$/.d/'` if test "$libtool" = yes; then "$@" -Wc,-MD else "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi if test -f "$tmpdepfile1"; then tmpdepfile="$tmpdepfile1" else tmpdepfile="$tmpdepfile2" fi if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a space and a tab in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. test -z "$dashmflag" && dashmflag=-M ( IFS=" " case " $* " in *" --mode=compile "*) # this is libtool, let us make it quiet for arg do # cycle over the arguments case "$arg" in "--mode=compile") # insert --quiet before "--mode=compile" set fnord "$@" --quiet shift # fnord ;; esac set fnord "$@" "$arg" shift # fnord shift # "$arg" done ;; esac "$@" $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" ) & proc=$! "$@" stat=$? wait "$proc" if test "$stat" != 0; then exit $stat; fi rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) # X makedepend ( shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift;; -*) ;; *) set fnord "$@" "$arg"; shift;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} 2>/dev/null -o"$obj_suffix" -f"$tmpdepfile" "$@" ) & proc=$! "$@" stat=$? wait "$proc" if test "$stat" != 0; then exit $stat; fi rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tail +3 "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. ( IFS=" " case " $* " in *" --mode=compile "*) for arg do # cycle over the arguments case $arg in "--mode=compile") # insert --quiet before "--mode=compile" set fnord "$@" --quiet shift # fnord ;; esac set fnord "$@" "$arg" shift # fnord shift # "$arg" done ;; esac "$@" -E | sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" ) & proc=$! "$@" stat=$? wait "$proc" if test "$stat" != 0; then exit $stat; fi rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the proprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. ( IFS=" " case " $* " in *" --mode=compile "*) for arg do # cycle over the arguments case $arg in "--mode=compile") # insert --quiet before "--mode=compile" set fnord "$@" --quiet shift # fnord ;; esac set fnord "$@" "$arg" shift # fnord shift # "$arg" done ;; esac "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" ) & proc=$! "$@" stat=$? wait "$proc" if test "$stat" != 0; then exit $stat; fi rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 tk707-0.8/install-sh0000644000175100017510000001106510142137110011152 00000000000000#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5. # # $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $ # # This script is compatible with the BSD install script, but was written # from scratch. # # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" tranformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 tk707-0.8/mdate-sh0000644000175100017510000000516710142137110010604 00000000000000#!/bin/sh # Get modification time of a file or directory and pretty-print it. # Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. # written by Ulrich Drepper , June 1995 # # 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, 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. # Prevent date giving response in another language. LANG=C export LANG LC_ALL=C export LC_ALL LC_TIME=C export LC_TIME # Get the extended ls output of the file or directory. # On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. if ls -L /dev/null 1>/dev/null 2>&1; then set - x`ls -L -l -d $1` else set - x`ls -l -d $1` fi # The month is at least the fourth argument # (3 shifts here, the next inside the loop). shift shift shift # Find the month. Next argument is day, followed by the year or time. month= until test $month do shift case $1 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac done day=$2 # Here we have to deal with the problem that the ls output gives either # the time of day or the year. case $3 in *:*) set `date`; eval year=\$$# case $2 in Jan) nummonthtod=1;; Feb) nummonthtod=2;; Mar) nummonthtod=3;; Apr) nummonthtod=4;; May) nummonthtod=5;; Jun) nummonthtod=6;; Jul) nummonthtod=7;; Aug) nummonthtod=8;; Sep) nummonthtod=9;; Oct) nummonthtod=10;; Nov) nummonthtod=11;; Dec) nummonthtod=12;; esac # For the first six month of the year the time notation can also # be used for files modified in the last year. if (expr $nummonth \> $nummonthtod) > /dev/null; then year=`expr $year - 1` fi;; *) year=$3;; esac # The result. echo $day $month $year tk707-0.8/missing0000755000175100017510000002123110142137110010544 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. # Copyright 1996, 1997, 1999, 2000 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # 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, 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. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch]" ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing 0.3 - GNU automake" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then # We have makeinfo, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; tar) shift if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 fi # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar ${1+"$@"} && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar ${1+"$@"} && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" ${1+"$@"} && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" ${1+"$@"} && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequirements for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 tk707-0.8/mkinstalldirs0000755000175100017510000000132610142137406011766 00000000000000#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain # $Id: mkinstalldirs,v 1.1 2004/11/03 11:20:38 saramito Exp $ errstatus=0 for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr fi fi pathcomp="$pathcomp/" done done exit $errstatus # mkinstalldirs ends here tk707-0.8/stamp-vti0000644000175100017510000000014010142143464011021 00000000000000@set UPDATED 3 November 2004 @set UPDATED-MONTH November 2004 @set EDITION 0.8 @set VERSION 0.8 tk707-0.8/texi2help.c0000644000175100017510000017375310142142067011245 00000000000000 #line 3 "lex.yy.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_SUBMINOR_VERSION 31 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ #include #include #include #include /* end standard C headers. */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have . Non-C99 systems may or may not. */ #if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L #include typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; #endif /* ! C99 */ /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #endif /* ! FLEXINT_H */ #ifdef __cplusplus /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ #if __STDC__ #define YY_USE_CONST #endif /* __STDC__ */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN (yy_start) = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START (((yy_start) - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart(yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #define YY_BUF_SIZE 16384 #endif #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif extern int yyleng; extern FILE *yyin, *yyout; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = (yy_hold_char); \ YY_RESTORE_YY_MORE_OFFSET \ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, (yytext_ptr) ) /* The following is because we cannot portably get our hands on size_t * (without autoconf's help, which isn't available because we want * flex-generated scanners to compile on their own). */ #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef unsigned int yy_size_t; #endif #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* Stack of input buffers. */ static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] /* yy_hold_char holds the character lost when yytext is formed. */ static char yy_hold_char; static int yy_n_chars; /* number of characters read into yy_ch_buf */ int yyleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; static int yy_init = 1; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow yywrap()'s to do buffer switches * instead of setting up a fresh yyin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; void yyrestart (FILE *input_file ); void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); void yy_delete_buffer (YY_BUFFER_STATE b ); void yy_flush_buffer (YY_BUFFER_STATE b ); void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); void yypop_buffer_state (void ); static void yyensure_buffer_stack (void ); static void yy_load_buffer_state (void ); static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); #define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); void *yyalloc (yy_size_t ); void *yyrealloc (void *,yy_size_t ); void yyfree (void * ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer(yyin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer(yyin,YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* Begin user sect3 */ typedef unsigned char YY_CHAR; FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; typedef int yy_state_type; extern int yylineno; int yylineno = 1; extern char *yytext; #define yytext_ptr yytext static yy_state_type yy_get_previous_state (void ); static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); static int yy_get_next_buffer (void ); static void yy_fatal_error (yyconst char msg[] ); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ (yytext_ptr) = yy_bp; \ yyleng = (size_t) (yy_cp - yy_bp); \ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; #define YY_NUM_RULES 43 #define YY_END_OF_BUFFER 44 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static yyconst flex_int16_t yy_accept[352] = { 0, 0, 0, 0, 0, 0, 0, 41, 41, 0, 0, 0, 0, 0, 0, 44, 43, 43, 43, 21, 21, 20, 38, 39, 38, 41, 42, 27, 25, 26, 27, 24, 17, 15, 16, 14, 13, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 41, 25, 0, 24, 15, 14, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 28, 0, 12, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 29, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 6, 0, 0, 0, 22, 0, 0, 8, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 6, 0, 0, 19, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 37, 0, 0, 6, 0, 0, 31, 0, 0, 0, 9, 0, 0, 0, 6, 0, 0, 9, 0, 0, 23, 6, 0, 0, 0, 0, 23, 6, 0, 0, 6, 0, 0, 33, 5, 0, 5, 0, 0 } ; static yyconst flex_int32_t yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 1, 8, 1, 1, 1, 1, 9, 10, 11, 12, 13, 14, 15, 16, 17, 6, 18, 19, 20, 21, 22, 23, 6, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 1, 34, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst flex_int32_t yy_meta[35] = { 0, 1, 1, 2, 1, 1, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 4 } ; static yyconst flex_int16_t yy_base[377] = { 0, 0, 1, 2, 5, 8, 9, 482, 481, 39, 73, 107, 141, 0, 0, 514, 517, 171, 496, 517, 201, 517, 517, 517, 499, 0, 517, 517, 0, 517, 498, 0, 517, 13, 517, 0, 517, 517, 487, 478, 15, 494, 0, 5, 2, 494, 16, 484, 21, 37, 17, 14, 496, 480, 517, 517, 482, 32, 482, 35, 492, 39, 476, 478, 0, 54, 477, 0, 57, 0, 474, 483, 517, 492, 485, 34, 12, 472, 57, 480, 482, 48, 468, 472, 477, 474, 455, 459, 463, 471, 465, 457, 460, 57, 457, 454, 467, 466, 449, 453, 454, 448, 458, 447, 443, 456, 448, 454, 453, 451, 460, 459, 517, 438, 448, 446, 445, 431, 423, 438, 438, 80, 433, 439, 442, 424, 428, 429, 427, 413, 429, 417, 430, 421, 428, 417, 413, 74, 414, 415, 411, 416, 415, 406, 418, 404, 85, 88, 409, 426, 517, 402, 414, 413, 517, 406, 97, 401, 390, 403, 400, 406, 392, 100, 517, 385, 414, 390, 401, 397, 397, 395, 394, 384, 388, 395, 394, 393, 385, 371, 377, 130, 92, 390, 388, 370, 378, 122, 372, 388, 377, 517, 373, 372, 371, 380, 116, 517, 359, 517, 387, 517, 372, 366, 378, 367, 359, 373, 368, 371, 378, 357, 369, 517, 89, 134, 364, 364, 359, 151, 345, 357, 349, 368, 345, 357, 359, 355, 340, 340, 352, 361, 125, 517, 350, 341, 340, 337, 346, 339, 335, 330, 352, 517, 345, 340, 131, 335, 330, 324, 340, 318, 93, 322, 326, 326, 341, 317, 329, 517, 329, 0, 314, 318, 325, 316, 319, 320, 310, 161, 320, 311, 304, 311, 309, 0, 0, 164, 311, 314, 321, 517, 283, 299, 0, 287, 287, 0, 266, 262, 220, 219, 201, 216, 224, 212, 201, 0, 165, 202, 190, 217, 517, 188, 193, 196, 0, 198, 189, 197, 191, 185, 200, 517, 179, 181, 170, 180, 187, 517, 165, 166, 157, 0, 156, 164, 157, 136, 148, 133, 0, 144, 137, 0, 128, 102, 105, 103, 109, 0, 102, 93, 110, 79, 77, 76, 517, 0, 56, 0, 57, 517, 235, 239, 243, 247, 251, 255, 259, 59, 0, 262, 266, 270, 274, 278, 282, 286, 290, 294, 298, 302, 306, 310, 314, 318, 322 } ; static yyconst flex_int16_t yy_def[377] = { 0, 352, 352, 353, 353, 354, 354, 355, 355, 356, 356, 357, 357, 352, 352, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 358, 351, 351, 351, 351, 351, 359, 351, 351, 351, 360, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 358, 351, 351, 359, 351, 360, 351, 351, 351, 361, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 362, 361, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 362, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 363, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 364, 351, 351, 351, 363, 351, 351, 351, 351, 351, 351, 351, 351, 351, 365, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 364, 364, 351, 351, 351, 351, 351, 351, 351, 351, 351, 365, 351, 351, 351, 351, 351, 351, 351, 351, 351, 366, 351, 351, 351, 367, 351, 351, 351, 351, 368, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 369, 366, 366, 351, 351, 367, 351, 351, 351, 368, 351, 351, 370, 351, 351, 351, 351, 351, 351, 371, 351, 351, 369, 366, 366, 351, 372, 351, 351, 351, 351, 370, 351, 351, 351, 351, 351, 371, 351, 351, 351, 366, 351, 372, 351, 351, 351, 351, 373, 351, 351, 351, 366, 351, 351, 373, 351, 351, 374, 366, 351, 351, 351, 351, 374, 366, 351, 375, 366, 351, 375, 351, 376, 351, 376, 351, 0, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351 } ; static yyconst flex_int16_t yy_nxt[552] = { 0, 351, 65, 69, 65, 17, 17, 20, 18, 18, 20, 23, 23, 24, 24, 68, 83, 68, 72, 73, 78, 79, 81, 84, 116, 87, 97, 82, 85, 88, 80, 74, 75, 117, 98, 99, 21, 76, 100, 21, 27, 28, 29, 28, 30, 90, 92, 27, 92, 104, 93, 91, 106, 94, 105, 114, 65, 82, 65, 68, 115, 68, 67, 95, 96, 95, 119, 123, 136, 124, 223, 350, 27, 27, 27, 28, 29, 28, 30, 346, 120, 27, 156, 137, 156, 170, 348, 181, 171, 181, 182, 246, 182, 246, 219, 277, 219, 277, 347, 187, 172, 187, 196, 197, 196, 220, 27, 27, 32, 33, 34, 33, 32, 346, 188, 32, 344, 198, 232, 233, 232, 343, 294, 189, 187, 342, 187, 232, 233, 232, 110, 341, 215, 269, 215, 269, 215, 340, 215, 188, 32, 36, 32, 33, 34, 33, 32, 216, 189, 32, 217, 216, 338, 219, 217, 219, 218, 270, 337, 336, 218, 335, 334, 269, 220, 269, 298, 298, 298, 298, 333, 299, 299, 332, 32, 36, 37, 331, 329, 223, 38, 39, 40, 41, 42, 43, 328, 270, 44, 45, 319, 46, 47, 301, 48, 327, 49, 50, 51, 52, 326, 53, 325, 313, 54, 55, 37, 294, 324, 110, 323, 322, 57, 41, 58, 59, 321, 320, 110, 45, 319, 60, 317, 316, 315, 314, 61, 313, 62, 52, 311, 310, 309, 166, 54, 55, 16, 16, 16, 16, 19, 19, 19, 19, 22, 22, 22, 22, 25, 25, 25, 25, 31, 31, 31, 31, 35, 35, 35, 35, 64, 64, 64, 111, 111, 111, 111, 149, 149, 149, 149, 200, 200, 200, 200, 231, 231, 231, 231, 242, 242, 242, 242, 276, 308, 276, 276, 280, 280, 280, 280, 284, 307, 284, 284, 297, 305, 297, 297, 306, 304, 306, 306, 312, 312, 312, 312, 318, 318, 318, 318, 330, 303, 330, 330, 339, 302, 339, 339, 345, 345, 345, 345, 349, 281, 349, 349, 301, 300, 296, 295, 294, 293, 292, 291, 290, 289, 288, 287, 286, 285, 283, 282, 110, 281, 279, 278, 110, 275, 274, 273, 272, 271, 268, 267, 243, 266, 265, 264, 263, 262, 261, 260, 210, 259, 223, 258, 257, 256, 255, 254, 253, 73, 252, 251, 250, 249, 248, 247, 245, 244, 243, 241, 129, 240, 239, 238, 237, 236, 235, 201, 234, 230, 166, 229, 228, 227, 226, 225, 224, 223, 222, 221, 214, 213, 212, 211, 210, 209, 208, 207, 206, 205, 204, 203, 179, 202, 201, 199, 195, 194, 193, 192, 191, 190, 129, 186, 185, 184, 150, 183, 180, 179, 178, 177, 176, 175, 174, 173, 169, 129, 168, 167, 110, 166, 165, 164, 163, 162, 161, 160, 159, 158, 157, 118, 155, 154, 153, 129, 118, 152, 151, 112, 150, 148, 147, 146, 123, 116, 115, 145, 144, 118, 129, 143, 142, 141, 140, 139, 138, 135, 134, 133, 132, 131, 130, 129, 128, 127, 126, 125, 122, 121, 118, 113, 112, 110, 109, 108, 107, 100, 87, 78, 103, 102, 101, 89, 86, 77, 71, 70, 66, 63, 56, 351, 26, 26, 15, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351 } ; static yyconst flex_int16_t yy_chk[552] = { 0, 0, 28, 360, 28, 1, 2, 3, 1, 2, 4, 5, 6, 5, 6, 33, 44, 33, 40, 40, 42, 42, 43, 44, 76, 46, 50, 43, 44, 46, 42, 40, 40, 76, 50, 51, 3, 40, 51, 4, 9, 9, 9, 9, 9, 48, 49, 9, 61, 57, 49, 48, 59, 49, 57, 75, 65, 59, 65, 68, 75, 68, 359, 49, 49, 61, 78, 81, 93, 81, 350, 348, 9, 9, 10, 10, 10, 10, 10, 345, 78, 10, 121, 93, 121, 137, 344, 146, 137, 146, 147, 214, 147, 214, 182, 252, 182, 252, 343, 156, 137, 156, 163, 163, 163, 182, 10, 10, 11, 11, 11, 11, 11, 342, 156, 11, 341, 163, 196, 196, 196, 340, 338, 156, 187, 337, 187, 232, 232, 232, 336, 335, 181, 246, 181, 246, 215, 334, 215, 187, 11, 11, 12, 12, 12, 12, 12, 181, 187, 12, 181, 215, 332, 219, 215, 219, 181, 246, 331, 329, 215, 328, 327, 269, 219, 269, 277, 298, 277, 298, 326, 277, 298, 325, 12, 12, 17, 324, 322, 321, 17, 17, 17, 17, 17, 17, 320, 269, 17, 17, 318, 17, 17, 317, 17, 316, 17, 17, 17, 17, 315, 17, 314, 312, 17, 17, 20, 311, 310, 309, 308, 307, 20, 20, 20, 20, 305, 304, 303, 20, 301, 20, 300, 299, 296, 295, 20, 294, 20, 20, 293, 292, 291, 290, 20, 20, 352, 352, 352, 352, 353, 353, 353, 353, 354, 354, 354, 354, 355, 355, 355, 355, 356, 356, 356, 356, 357, 357, 357, 357, 358, 358, 358, 361, 361, 361, 361, 362, 362, 362, 362, 363, 363, 363, 363, 364, 364, 364, 364, 365, 365, 365, 365, 366, 289, 366, 366, 367, 367, 367, 367, 368, 288, 368, 368, 369, 286, 369, 369, 370, 285, 370, 370, 371, 371, 371, 371, 372, 372, 372, 372, 373, 283, 373, 373, 374, 282, 374, 374, 375, 375, 375, 375, 376, 280, 376, 376, 279, 278, 274, 273, 272, 271, 270, 268, 267, 266, 265, 264, 263, 262, 260, 258, 257, 256, 255, 254, 253, 251, 250, 249, 248, 247, 245, 244, 242, 241, 240, 239, 238, 237, 236, 235, 234, 231, 230, 229, 228, 227, 226, 225, 224, 223, 222, 221, 220, 218, 217, 216, 212, 211, 210, 209, 208, 207, 206, 205, 204, 203, 202, 200, 198, 195, 194, 193, 192, 190, 189, 188, 186, 185, 184, 183, 180, 179, 178, 177, 176, 175, 174, 173, 172, 171, 170, 169, 168, 167, 166, 165, 162, 161, 160, 159, 158, 157, 155, 153, 152, 151, 149, 148, 145, 144, 143, 142, 141, 140, 139, 138, 136, 135, 134, 133, 132, 131, 130, 129, 128, 127, 126, 125, 124, 123, 122, 120, 119, 118, 117, 116, 115, 114, 113, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, 95, 94, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 80, 79, 77, 74, 73, 71, 70, 66, 63, 62, 60, 58, 56, 53, 52, 47, 45, 41, 39, 38, 30, 24, 18, 15, 8, 7, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351, 351 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; extern int yy_flex_debug; int yy_flex_debug = 0; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; #line 1 "./texi2help.l" #line 2 "./texi2help.l" /* * This file is part of tk707. * * Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito * * tk707 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. * * Foobar 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 Foobar; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* compile commands: flex texi2help.flex gcc lex.yy.c -o texi2help -lfl usage: texi2help < tk707.texi > tk707.help NOTE: translate only a SUBSET of texinfo files into tcl/tk help pages. See texinfo documentation for the input format. See at top of help.tcl for the output format. */ #include #define no_font '%'; int font = no_font; int arg_previous_state = 0; int quote = '\''; #define put(c) printf ("%c", c); #line 724 "lex.yy.c" #define INITIAL 0 #define arg 1 #define skip_bloc 2 #define skip_braces 3 #define example 4 #define format 5 #define item 6 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ #include #endif #ifndef YY_EXTRA_TYPE #define YY_EXTRA_TYPE void * #endif /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap (void ); #else extern int yywrap (void ); #endif #endif static void yyunput (int c,char *buf_ptr ); #ifndef yytext_ptr static void yy_flex_strncpy (char *,yyconst char *,int ); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * ); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void ); #else static int input (void ); #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ size_t n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(yyin); \ } \ }\ \ #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) #endif /* end tables serialization structures and prototypes */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 extern int yylex (void); #define YY_DECL int yylex (void) #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION /** The main scanner function which does all the work. */ YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 45 "./texi2help.l" /* -------------------------------------------------------------- * specials * --------------------------------------------------------------*/ #line 888 "lex.yy.c" if ( (yy_init) ) { (yy_init) = 0; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! (yy_start) ) (yy_start) = 1; /* first start state */ if ( ! yyin ) yyin = stdin; if ( ! yyout ) yyout = stdout; if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin,YY_BUF_SIZE ); } yy_load_buffer_state( ); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); /* Support of yytext. */ *yy_cp = (yy_hold_char); /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = (yy_start); yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 352 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_base[yy_current_state] != 517 ); yy_find_action: yy_act = yy_accept[yy_current_state]; if ( yy_act == 0 ) { /* have to back up */ yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); yy_act = yy_accept[yy_current_state]; } YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = (yy_hold_char); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); goto yy_find_action; case 1: YY_RULE_SETUP #line 51 "./texi2help.l" { printf ("@@ "); } YY_BREAK case 2: YY_RULE_SETUP #line 52 "./texi2help.l" { printf ("{"); } YY_BREAK case 3: YY_RULE_SETUP #line 53 "./texi2help.l" { printf ("}"); } YY_BREAK /* -------------------------------------------------------------- * titles * --------------------------------------------------------------*/ case 4: YY_RULE_SETUP #line 59 "./texi2help.l" { printf ("@C0@t%s@t\n", yytext+10); } YY_BREAK case 5: YY_RULE_SETUP #line 60 "./texi2help.l" {} YY_BREAK case 6: YY_RULE_SETUP #line 61 "./texi2help.l" { printf ("@C1@t%s@t\n", yytext+9); } YY_BREAK case 7: YY_RULE_SETUP #line 62 "./texi2help.l" { printf ("@C1@t%s@t\n", yytext+10); } YY_BREAK case 8: YY_RULE_SETUP #line 63 "./texi2help.l" { printf ("@C2@t%s@t\n", yytext+9); } YY_BREAK case 9: YY_RULE_SETUP #line 64 "./texi2help.l" { printf ("@C2@t%s@t\n", yytext+12); } YY_BREAK /* -------------------------------------------------------------- * @code{...}, @strong{}, @var{}, @math{}, @cite{}, @dfn{}, * @url{}, @email{}, @samp{}, @file{} * @pxref{...} * --------------------------------------------------------------*/ case 10: YY_RULE_SETUP #line 72 "./texi2help.l" { /* in bold */ font = 'c'; arg_previous_state = YYSTATE; BEGIN(format); } YY_BREAK case 11: YY_RULE_SETUP #line 77 "./texi2help.l" { /* highlight */ font = 'h'; arg_previous_state = YYSTATE; BEGIN(format); } YY_BREAK case 12: YY_RULE_SETUP #line 82 "./texi2help.l" { /* in italic */ font = 'i'; arg_previous_state = YYSTATE; BEGIN(format); } YY_BREAK case 13: YY_RULE_SETUP #line 87 "./texi2help.l" { /* end of arg */ font = no_font; BEGIN(arg_previous_state); } YY_BREAK case 14: YY_RULE_SETUP #line 91 "./texi2help.l" { printf("@%c%s", font, yytext_ptr); } YY_BREAK case 15: YY_RULE_SETUP #line 92 "./texi2help.l" { printf("%s", yytext_ptr); } YY_BREAK case 16: /* rule 16 can match eol */ YY_RULE_SETUP #line 93 "./texi2help.l" { put('\n'); } YY_BREAK case 17: YY_RULE_SETUP #line 94 "./texi2help.l" { printf("@%c%c", font, *yytext_ptr); } YY_BREAK /* -------------------------------------------------------------- * @code{...}, @strong{}, @var{}, @math{}, @cite{}, @dfn{}, * @url{}, @email{}, @samp{}, @file{} * @pxref{...} * --------------------------------------------------------------*/ case 18: YY_RULE_SETUP #line 102 "./texi2help.l" { /* in quotes */ font = quote; printf("`"); arg_previous_state = YYSTATE; BEGIN(arg); } YY_BREAK case 19: YY_RULE_SETUP #line 107 "./texi2help.l" { /* in (...) */ font = ')'; printf (" ("); arg_previous_state = YYSTATE; BEGIN(arg); } YY_BREAK case 20: YY_RULE_SETUP #line 112 "./texi2help.l" { /* end of arg */ printf("'"); font = no_font; BEGIN(arg_previous_state); } YY_BREAK case 21: /* rule 21 can match eol */ YY_RULE_SETUP #line 117 "./texi2help.l" { printf("%s", yytext_ptr); } YY_BREAK /* -------------------------------------------------------------- * example * --------------------------------------------------------------*/ case 22: /* rule 22 can match eol */ YY_RULE_SETUP #line 123 "./texi2help.l" { arg_previous_state = YYSTATE; BEGIN(example); font = 'c'; } YY_BREAK case 23: YY_RULE_SETUP #line 128 "./texi2help.l" { BEGIN(arg_previous_state); } YY_BREAK case 24: YY_RULE_SETUP #line 129 "./texi2help.l" { printf("@%c%s", font, yytext_ptr); } YY_BREAK case 25: YY_RULE_SETUP #line 130 "./texi2help.l" { printf("%s", yytext_ptr); } YY_BREAK case 26: /* rule 26 can match eol */ YY_RULE_SETUP #line 131 "./texi2help.l" { put('\n'); } YY_BREAK case 27: YY_RULE_SETUP #line 132 "./texi2help.l" { printf("@%c%c", font, *yytext_ptr); } YY_BREAK /* -------------------------------------------------------------- * itemize and table * --------------------------------------------------------------*/ case 28: /* rule 28 can match eol */ YY_RULE_SETUP #line 138 "./texi2help.l" { printf ("\n\t* "); } YY_BREAK case 29: /* rule 29 can match eol */ YY_RULE_SETUP #line 139 "./texi2help.l" { printf ("\n\t%s", yytext_ptr+6); } YY_BREAK case 30: /* rule 30 can match eol */ YY_RULE_SETUP #line 140 "./texi2help.l" {} YY_BREAK case 31: /* rule 31 can match eol */ YY_RULE_SETUP #line 141 "./texi2help.l" {} YY_BREAK /* -------------------------------------------------------------- * skip * --------------------------------------------------------------*/ case 32: /* rule 32 can match eol */ YY_RULE_SETUP #line 147 "./texi2help.l" {} YY_BREAK case 33: /* rule 33 can match eol */ YY_RULE_SETUP #line 148 "./texi2help.l" {} YY_BREAK case 34: /* rule 34 can match eol */ YY_RULE_SETUP #line 149 "./texi2help.l" {} YY_BREAK case 35: /* rule 35 can match eol */ YY_RULE_SETUP #line 150 "./texi2help.l" {} YY_BREAK case 36: /* rule 36 can match eol */ YY_RULE_SETUP #line 152 "./texi2help.l" { arg_previous_state = YYSTATE; BEGIN(skip_bloc); } YY_BREAK case 37: /* rule 37 can match eol */ YY_RULE_SETUP #line 153 "./texi2help.l" { BEGIN(arg_previous_state); } YY_BREAK case 38: YY_RULE_SETUP #line 154 "./texi2help.l" {} YY_BREAK case 39: /* rule 39 can match eol */ YY_RULE_SETUP #line 155 "./texi2help.l" {} YY_BREAK case 40: YY_RULE_SETUP #line 157 "./texi2help.l" { arg_previous_state = YYSTATE; BEGIN(skip_braces); } YY_BREAK case 41: /* rule 41 can match eol */ YY_RULE_SETUP #line 158 "./texi2help.l" {} YY_BREAK case 42: YY_RULE_SETUP #line 159 "./texi2help.l" { BEGIN(arg_previous_state); } YY_BREAK case 43: YY_RULE_SETUP #line 160 "./texi2help.l" ECHO; YY_BREAK #line 1267 "lex.yy.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(arg): case YY_STATE_EOF(skip_bloc): case YY_STATE_EOF(skip_braces): case YY_STATE_EOF(example): case YY_STATE_EOF(format): case YY_STATE_EOF(item): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = (yy_hold_char); YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) { /* This was really a NUL. */ yy_state_type yy_next_state; (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = (yytext_ptr) + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++(yy_c_buf_p); yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = (yy_c_buf_p); goto yy_find_action; } } else switch ( yy_get_next_buffer( ) ) { case EOB_ACT_END_OF_FILE: { (yy_did_buffer_switch_on_eof) = 0; if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: (yy_c_buf_p) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; yy_current_state = yy_get_previous_state( ); yy_cp = (yy_c_buf_p); yy_bp = (yytext_ptr) + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer (void) { register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; register char *source = (yytext_ptr); register int number_to_move, i; int ret_val; if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; else { size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER; int yy_c_buf_p_offset = (int) ((yy_c_buf_p) - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } if ( (yy_n_chars) == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart(yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state (void) { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = (yy_start); for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 352 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) { register int yy_is_jam; register char *yy_cp = (yy_c_buf_p); register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { (yy_last_accepting_state) = yy_current_state; (yy_last_accepting_cpos) = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 352 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 351); return yy_is_jam ? 0 : yy_current_state; } static void yyunput (int c, register char * yy_bp ) { register char *yy_cp; yy_cp = (yy_c_buf_p); /* undo effects of setting up yytext */ *yy_cp = (yy_hold_char); if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register int number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; (yytext_ptr) = yy_bp; (yy_hold_char) = *yy_cp; (yy_c_buf_p) = yy_cp; } #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (void) #else static int input (void) #endif { int c; *(yy_c_buf_p) = (yy_hold_char); if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) /* This was really a NUL. */ *(yy_c_buf_p) = '\0'; else { /* need more input */ int offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart(yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) return EOF; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: (yy_c_buf_p) = (yytext_ptr) + offset; break; } } } c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ *(yy_c_buf_p) = '\0'; /* preserve yytext */ (yy_hold_char) = *++(yy_c_buf_p); return c; } #endif /* ifndef YY_NO_INPUT */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * * @note This function does not reset the start condition to @c INITIAL . */ void yyrestart (FILE * input_file ) { if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer(yyin,YY_BUF_SIZE ); } yy_init_buffer(YY_CURRENT_BUFFER,input_file ); yy_load_buffer_state( ); } /** Switch to a different input buffer. * @param new_buffer The new input buffer. * */ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) { /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ (yy_did_buffer_switch_on_eof) = 1; } static void yy_load_buffer_state (void) { (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; (yy_hold_char) = *(yy_c_buf_p); } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * * @return the allocated buffer state. */ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer(b,file ); return b; } /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * */ void yy_delete_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) yyfree((void *) b->yy_ch_buf ); yyfree((void *) b ); } #ifndef __cplusplus extern int isatty (int ); #endif /* __cplusplus */ /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) { int oerrno = errno; yy_flush_buffer(b ); b->yy_input_file = file; b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * */ void yy_flush_buffer (YY_BUFFER_STATE b ) { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * */ void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) { if (new_buffer == NULL) return; yyensure_buffer_stack(); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *(yy_c_buf_p) = (yy_hold_char); YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) (yy_buffer_stack_top)++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * */ void yypop_buffer_state (void) { if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; if ((yy_buffer_stack_top) > 0) --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ static void yyensure_buffer_stack (void) { int num_to_alloc; if (!(yy_buffer_stack)) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; } if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ /* Increase the buffer to prepare for a possible push. */ int grow_size = 8 /* arbitrary grow size */; num_to_alloc = (yy_buffer_stack_max) + grow_size; (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; } } /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = 0; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; yy_switch_to_buffer(b ); return b; } /** Setup the input buffer state to scan a string. The next call to yylex() will * scan from a @e copy of @a str. * @param str a NUL-terminated string to scan * * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * yy_scan_bytes() instead. */ YY_BUFFER_STATE yy_scan_string (yyconst char * yy_str ) { return yy_scan_bytes(yy_str,strlen(yy_str) ); } /** Setup the input buffer state to scan the given bytes. The next call to yylex() will * scan from a @e copy of @a bytes. * @param bytes the byte buffer to scan * @param len the number of bytes in the buffer pointed to by @a bytes. * * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_bytes (yyconst char * bytes, int len ) { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = len + 2; buf = (char *) yyalloc(n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); for ( i = 0; i < len; ++i ) buf[i] = bytes[i]; buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR; b = yy_scan_buffer(buf,n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif static void yy_fatal_error (yyconst char* msg ) { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = (yy_hold_char); \ (yy_c_buf_p) = yytext + yyless_macro_arg; \ (yy_hold_char) = *(yy_c_buf_p); \ *(yy_c_buf_p) = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /** Get the current line number. * */ int yyget_lineno (void) { return yylineno; } /** Get the input stream. * */ FILE *yyget_in (void) { return yyin; } /** Get the output stream. * */ FILE *yyget_out (void) { return yyout; } /** Get the length of the current token. * */ int yyget_leng (void) { return yyleng; } /** Get the current token. * */ char *yyget_text (void) { return yytext; } /** Set the current line number. * @param line_number * */ void yyset_lineno (int line_number ) { yylineno = line_number; } /** Set the input stream. This does not discard the current * input buffer. * @param in_str A readable stream. * * @see yy_switch_to_buffer */ void yyset_in (FILE * in_str ) { yyin = in_str ; } void yyset_out (FILE * out_str ) { yyout = out_str ; } int yyget_debug (void) { return yy_flex_debug; } void yyset_debug (int bdebug ) { yy_flex_debug = bdebug ; } /* yylex_destroy is for both reentrant and non-reentrant scanners. */ int yylex_destroy (void) { /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ yy_delete_buffer(YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; yypop_buffer_state(); } /* Destroy the stack itself. */ yyfree((yy_buffer_stack) ); (yy_buffer_stack) = NULL; return 0; } /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (yyconst char * s ) { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *yyalloc (yy_size_t size ) { return (void *) malloc( size ); } void *yyrealloc (void * ptr, yy_size_t size ) { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } void yyfree (void * ptr ) { free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ } #define YYTABLES_NAME "yytables" #undef YY_NEW_FILE #undef YY_FLUSH_BUFFER #undef yy_set_bol #undef yy_new_buffer #undef yy_set_interactive #undef yytext_ptr #undef YY_DO_BEFORE_ACTION #ifdef YY_DECL_IS_OURS #undef YY_DECL_IS_OURS #undef YY_DECL #endif #line 160 "./texi2help.l" /* -------------------------------------------------------------- * main * --------------------------------------------------------------*/ int yywrap () { return 1; } int main() { yyin = stdin; yylex(); return 0; } tk707-0.8/texinfo.tex0000644000175100017510000056364510142137110011367 00000000000000% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{1999-03-26.17}% % % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99 % Free Software Foundation, Inc. % % This texinfo.tex file 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, or (at % your option) any later version. % % This texinfo.tex file 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 texinfo.tex file; see the file COPYING. If not, write % to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, % Boston, MA 02111-1307, USA. % % In other words, you are welcome to use, share and improve this program. % You are forbidden to forbid anyone else to use, share and improve % what you give them. Help stamp out software-hoarding! % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % ftp://ftp.gnu.org/pub/gnu/texinfo.tex % (and all GNU mirrors, see http://www.gnu.org/order/ftp.html) % ftp://tug.org/tex/texinfo.tex % ftp://ctan.org/macros/texinfo/texinfo.tex % (and all CTAN mirrors, finger ctan@ctan.org for a list). % /home/gd/gnu/doc/texinfo.tex on the GNU machines. % The texinfo.tex in any given Texinfo distribution could well be out % of date, so if that's what you're using, please check. % There is a small home page for Texinfo at http://texinfo.org/. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever, to process the dvi file; this makes foo.ps. % The extra runs of TeX get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages. You can get % the existing language-specific files from ftp://ftp.gnu.org/gnu/texinfo/. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} % Save some parts of plain tex whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexi=\i \let\ptexlbrace=\{ \let\ptexrbrace=\} \let\ptexstar=\* \let\ptext=\t % We never want plain's outer \+ definition in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax \message{Basics,} \chardef\other=12 % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi \ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi % Ignore a token. % \def\gobble#1{} \hyphenation{ap-pen-dix} \hyphenation{mini-buf-fer mini-buf-fers} \hyphenation{eshell} \hyphenation{white-space} % Margin to add to right of even pages, to left of odd pages. \newdimen \bindingoffset \newdimen \normaloffset \newdimen\pagewidth \newdimen\pageheight % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \ifx\eTeXversion\undefined \def\loggingall{\tracingcommands2 \tracingstats2 \tracingpages1 \tracingoutput1 \tracinglostchars1 \tracingmacros2 \tracingparagraphs1 \tracingrestores1 \showboxbreadth\maxdimen\showboxdepth\maxdimen }% \else \def\loggingall{\tracingcommands3 \tracingstats2 \tracingpages1 \tracingoutput1 \tracinglostchars1 \tracingmacros2 \tracingparagraphs1 \tracingrestores1 \tracingscantokens1 \tracingassigns1 \tracingifs1 \tracinggroups1 \tracingnesting2 \showboxbreadth\maxdimen\showboxdepth\maxdimen }% \fi % For @cropmarks command. % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Main output routine. \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents % does insertions, but you have to call it yourself. \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \escapechar = `\\ % use backslash in output files. \indexdummies % don't expand commands in the output. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. \shipout\vbox{% \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingxxx.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 2\baselineskip \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \turnoffactive \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1 \unvbox#1 \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % \def\parsearg#1{% \let\next = #1% \begingroup \obeylines \futurelet\temp\parseargx } % If the next token is an obeyed space (from an @example environment or % the like), remove it and recurse. Otherwise, we're done. \def\parseargx{% % \obeyedspace is defined far below, after the definition of \sepspaces. \ifx\obeyedspace\temp \expandafter\parseargdiscardspace \else \expandafter\parseargline \fi } % Remove a single space (as the delimiter token to the macro call). {\obeyspaces % \gdef\parseargdiscardspace {\futurelet\temp\parseargx}} {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. % % First remove any @c comment, then any @comment. % Result of each macro is put in \toks0. \argremovec #1\c\relax % \expandafter\argremovecomment \the\toks0 \comment\relax % % % Call the caller's macro, saved as \next in \parsearg. \expandafter\next\expandafter{\the\toks0}% }% } % Since all \c{,omment} does is throw away the argument, we can let TeX % do that for us. The \relax here is matched by the \relax in the call % in \parseargline; it could be more or less anything, its purpose is % just to delimit the argument to the \c. \def\argremovec#1\c#2\relax{\toks0 = {#1}} \def\argremovecomment#1\comment#2\relax{\toks0 = {#1}} % \argremovec{,omment} might leave us with trailing spaces, though; e.g., % @end itemize @c foo % will have two active spaces as part of the argument with the % `itemize'. Here we remove all active spaces from #1, and assign the % result to \toks0. % % This loses if there are any *other* active characters besides spaces % in the argument -- _ ^ +, for example -- since they get expanded. % Fortunately, Texinfo does not define any such commands. (If it ever % does, the catcode of the characters in questionwill have to be changed % here.) But this means we cannot call \removeactivespaces as part of % \argremovec{,omment}, since @c uses \parsearg, and thus the argument % that \parsearg gets might well have any character at all in it. % \def\removeactivespaces#1{% \begingroup \ignoreactivespaces \edef\temp{#1}% \global\toks0 = \expandafter{\temp}% \endgroup } % Change the active space to expand to nothing. % \begingroup \obeyspaces \gdef\ignoreactivespaces{\obeyspaces\let =\empty} \endgroup \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} %% These are used to keep @begin/@end levels from running away %% Call \inENV within environments (after a \begingroup) \newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi} \def\ENVcheck{% \ifENV\errmessage{Still within an environment; press RETURN to continue} \endgroup\fi} % This is not perfect, but it should reduce lossage % @begin foo is the same as @foo, for now. \newhelp\EMsimple{Press RETURN to continue.} \outer\def\begin{\parsearg\beginxxx} \def\beginxxx #1{% \expandafter\ifx\csname #1\endcsname\relax {\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else \csname #1\endcsname\fi} % @end foo executes the definition of \Efoo. % \def\end{\parsearg\endxxx} \def\endxxx #1{% \removeactivespaces{#1}% \edef\endthing{\the\toks0}% % \expandafter\ifx\csname E\endthing\endcsname\relax \expandafter\ifx\csname \endthing\endcsname\relax % There's no \foo, i.e., no ``environment'' foo. \errhelp = \EMsimple \errmessage{Undefined command `@end \endthing'}% \else \unmatchedenderror\endthing \fi \else % Everything's ok; the right environment has been started. \csname E\endthing\endcsname \fi } % There is an environment #1, but it hasn't been started. Give an error. % \def\unmatchedenderror#1{% \errhelp = \EMsimple \errmessage{This `@end #1' doesn't have a matching `@#1'}% } % Define the control sequence \E#1 to give an unmatched @end error. % \def\defineunmatchedend#1{% \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}% } % Single-spacing is done by various environments (specifically, in % \nonfillstart and \quotations). \newskip\singlespaceskip \singlespaceskip = 12.5pt \def\singlespace{% % Why was this kern here? It messes up equalizing space above and below % environments. --karl, 6may93 %{\advance \baselineskip by -\singlespaceskip %\kern \baselineskip}% \setleading \singlespaceskip } %% Simple single-character @ commands % @@ prints an @ % Kludge this until the fonts are right (grr). \def\@{{\tt\char64}} % This is turned off because it was never documented % and you can use @w{...} around a quote to suppress ligatures. %% Define @` and @' to be the same as ` and ' %% but suppressing ligatures. %\def\`{{`}} %\def\'{{'}} % Used to generate quoted braces. \def\mylbrace {{\tt\char123}} \def\myrbrace {{\tt\char125}} \let\{=\mylbrace \let\}=\myrbrace \begingroup % Definitions to produce actual \{ & \} command in an index. \catcode`\{ = 12 \catcode`\} = 12 \catcode`\[ = 1 \catcode`\] = 2 \catcode`\@ = 0 \catcode`\\ = 12 @gdef@lbracecmd[\{]% @gdef@rbracecmd[\}]% @endgroup % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H. \let\, = \c \let\dotaccent = \. \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \t \let\ubaraccent = \b \let\udotaccent = \d % Other special characters: @questiondown @exclamdown % Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ptexi \else\ifx\temp\jmacro \j \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\hfil\break\hbox{}\ignorespaces} % @. is an end-of-sentence period. \def\.{.\spacefactor=3000 } % @! is an end-of-sentence bang. \def\!{!\spacefactor=3000 } % @? is an end-of-sentence query. \def\?{?\spacefactor=3000 } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % \def\group{\begingroup \ifnum\catcode13=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi % % The \vtop we start below produces a box with normal height and large % depth; thus, TeX puts \baselineskip glue before it, and (when the % next line of text is done) \lineskip glue after it. (See p.82 of % the TeXbook.) Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% \egroup % End the \vtop. \endgroup % End the \group. }% % \vtop\bgroup % We have to put a strut on the last line in case the @group is in % the midst of an example, rather than completely enclosing it. % Otherwise, the interline space between the last line of the group % and the first line afterwards is too small. But we can't put the % strut in \Egroup, since there it would be on a line by itself. % Hence this just inserts a strut at the beginning of each line. \everypar = {\strut}% % % Since we have a strut on every line, we don't need any of TeX's % normal interline spacing. \offinterlineskip % % OK, but now we have to do something about blank % lines in the input in @example-like environments, which normally % just turn into \lisppar, which will insert no space now that we've % turned off the interline space. Simplest is to make them be an % empty paragraph. \ifx\par\lisppar \edef\par{\leavevmode \par}% % % Reset ^^M's definition to new definition of \par. \obeylines \fi % % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in \def\need{\parsearg\needx} % Old definition--didn't work. %\def\needx #1{\par % %% This method tries to make TeX break the page naturally %% if the depth of the box does not fit. %{\baselineskip=0pt% %\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak %\prevdepth=-1000pt %}} \def\needx#1{% % Go into vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % Don't add any leading before our big empty box, but allow a page % break, since the best break might be right here. \allowbreak \nointerlineskip \vtop to #1\mil{\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak } % @br forces paragraph break \let\br = \par % @dots{} output an ellipsis using the current font. % We do .5em per period so that it has the same spacing in a typewriter % font as three actual period characters. % \def\dots{% \leavevmode \hbox to 1.5em{% \hskip 0pt plus 0.25fil minus 0.25fil .\hss.\hss.% \hskip 0pt plus 0.5fil minus 0.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \leavevmode \hbox to 2em{% \hskip 0pt plus 0.25fil minus 0.25fil .\hss.\hss.\hss.% \hskip 0pt plus 0.5fil minus 0.5fil }% \spacefactor=3000 } % @page forces the start of a new page % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \def\exdent{\parsearg\exdentyyy} \def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}} % This defn is used inside nofill environments such as @example. \def\nofillexdent{\parsearg\nofillexdentyyy} \def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{TEXT} puts TEXT in the margin next to the current paragraph. \def\inmargin#1{% \strut\vadjust{\nobreak\kern-\strutdepth \vtop to \strutdepth{\baselineskip\strutdepth\vss \llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}} \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} %\hbox{{\rm#1}}\hfil\break}} % @include file insert text of that file as input. % Allow normal characters that we make active in the argument (a file name). \def\include{\begingroup \catcode`\\=12 \catcode`~=12 \catcode`^=12 \catcode`_=12 \catcode`|=12 \catcode`<=12 \catcode`>=12 \catcode`+=12 \parsearg\includezzz} % Restore active chars for included file. \def\includezzz#1{\endgroup\begingroup % Read the included file in a group so nested @include's work. \def\thisfile{#1}% \input\thisfile \endgroup} \def\thisfile{} % @center line outputs that line, centered \def\center{\parsearg\centerzzz} \def\centerzzz #1{{\advance\hsize by -\leftskip \advance\hsize by -\rightskip \centerline{#1}}} % @sp n outputs n lines of vertical space \def\sp{\parsearg\spxxx} \def\spxxx #1{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment \def\comment{\begingroup \catcode`\^^M=\other% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \commentxxx} {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} \let\c=\comment % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % We cannot implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \def\paragraphindent{\parsearg\doparagraphindent} \def\doparagraphindent#1{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \def\exampleindent{\parsearg\doexampleindent} \def\doexampleindent#1{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math means output in math mode. % We don't use $'s directly in the definition of \math because control % sequences like \math are expanded when the toc file is written. Then, % we read the toc file back, the $'s will be normal characters (as they % should be, according to the definition of Texinfo). So we must use a % control sequence to switch into and out of math mode. % % This isn't quite enough for @math to work properly in indices, but it % seems unlikely it will ever be needed there. % \let\implicitmath = $ \def\math#1{\implicitmath #1\implicitmath} % @bullet and @minus need the same treatment as @math, just above. \def\bullet{\implicitmath\ptexbullet\implicitmath} \def\minus{\implicitmath-\implicitmath} % @refill is a no-op. \let\refill=\relax % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate (before @setfilename). % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % @setfilename is done at the beginning of every texinfo file. % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% \iflinks \readauxfile \fi % \openindices needs to do some work in any case. \openindices \fixbackslash % Turn off hack to swallow `\input texinfo'. \global\let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. % Just to be on the safe side, close the input stream before the \input. \openin 1 texinfo.cnf \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi \closein1 \temp % \comment % Ignore the actual filename. } % Called from \setfilename. % \def\openindices{% \newindex{cp}% \newcodeindex{fn}% \newcodeindex{vr}% \newcodeindex{tp}% \newcodeindex{ky}% \newcodeindex{pg}% } % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{fonts,} % Font-change commands. % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf analogous to plain's \rm, etc. \newfam\sffam \def\sf{\fam=\sffam \tensf} \let\li = \sf % Sometimes we call it \li, not \sf. % We don't need math for this one. \def\ttsl{\tenttsl} % Use Computer Modern fonts at \magstephalf (11pt). \newcount\mainmagstep \mainmagstep=\magstephalf % Set the font macro #1 to the font named #2, adding on the % specified font prefix (normally `cm'). % #3 is the font's design size, #4 is a scale factor \def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\undefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} %where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} \ifx\bigger\relax \let\mainmagstep=\magstep1 \setfont\textrm\rmshape{12}{1000} \setfont\texttt\ttshape{12}{1000} \else \setfont\textrm\rmshape{10}{\mainmagstep} \setfont\texttt\ttshape{10}{\mainmagstep} \fi % Instead of cmb10, you many want to use cmbx10. % cmbx10 is a prettier font on its own, but cmb10 % looks better when embedded in a line with cmr10. \setfont\textbf\bfshape{10}{\mainmagstep} \setfont\textit\itshape{10}{\mainmagstep} \setfont\textsl\slshape{10}{\mainmagstep} \setfont\textsf\sfshape{10}{\mainmagstep} \setfont\textsc\scshape{10}{\mainmagstep} \setfont\textttsl\ttslshape{10}{\mainmagstep} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep % A few fonts for @defun, etc. \setfont\defbf\bxshape{10}{\magstep1} %was 1314 \setfont\deftt\ttshape{10}{\magstep1} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf} % Fonts for indices and small examples (9pt). % We actually use the slanted font rather than the italic, % because texinfo normally uses the slanted fonts for that. % Do not make many font distinctions in general in the index, since they % aren't very useful. \setfont\ninett\ttshape{9}{1000} \setfont\ninettsl\ttslshape{10}{900} \setfont\indrm\rmshape{9}{1000} \setfont\indit\itshape{9}{1000} \setfont\indsl\slshape{9}{1000} \let\indtt=\ninett \let\indttsl=\ninettsl \let\indsf=\indrm \let\indbf=\indrm \setfont\indsc\scshape{10}{900} \font\indi=cmmi9 \font\indsy=cmsy9 % Fonts for title page: \setfont\titlerm\rmbshape{12}{\magstep3} \setfont\titleit\itbshape{10}{\magstep4} \setfont\titlesl\slbshape{10}{\magstep4} \setfont\titlett\ttbshape{12}{\magstep3} \setfont\titlettsl\ttslshape{10}{\magstep4} \setfont\titlesf\sfbshape{17}{\magstep1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\authorrm{\secrm} % Chapter (and unnumbered) fonts (17.28pt). \setfont\chaprm\rmbshape{12}{\magstep2} \setfont\chapit\itbshape{10}{\magstep3} \setfont\chapsl\slbshape{10}{\magstep3} \setfont\chaptt\ttbshape{12}{\magstep2} \setfont\chapttsl\ttslshape{10}{\magstep3} \setfont\chapsf\sfbshape{17}{1000} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 % Section fonts (14.4pt). \setfont\secrm\rmbshape{12}{\magstep1} \setfont\secit\itbshape{10}{\magstep2} \setfont\secsl\slbshape{10}{\magstep2} \setfont\sectt\ttbshape{12}{\magstep1} \setfont\secttsl\ttslshape{10}{\magstep2} \setfont\secsf\sfbshape{12}{\magstep1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 % \setfont\ssecrm\bxshape{10}{\magstep1} % This size an font looked bad. % \setfont\ssecit\itshape{10}{\magstep1} % The letters were too crowded. % \setfont\ssecsl\slshape{10}{\magstep1} % \setfont\ssectt\ttshape{10}{\magstep1} % \setfont\ssecsf\sfshape{10}{\magstep1} %\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx. %\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than %\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1. %\setfont\ssectt\ttshape{10}{1315} %\setfont\ssecsf\sfshape{10}{1315} %\let\ssecbf=\ssecrm % Subsection fonts (13.15pt). \setfont\ssecrm\rmbshape{12}{\magstephalf} \setfont\ssecit\itbshape{10}{1315} \setfont\ssecsl\slbshape{10}{1315} \setfont\ssectt\ttbshape{12}{\magstephalf} \setfont\ssecttsl\ttslshape{10}{1315} \setfont\ssecsf\sfbshape{12}{\magstephalf} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{\magstep1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 % The smallcaps and symbol fonts should actually be scaled \magstep1.5, % but that is not a standard magnification. % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since % texinfo doesn't allow for producing subscripts and superscripts, we % don't bother to reset \scriptfont and \scriptscriptfont (which would % also require loading a lot more fonts). % \def\resetmathfonts{% \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf \textfont\ttfam = \tentt \textfont\sffam = \tensf } % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this so that font changes will continue to work % in math mode, where it is the current \fam that is relevant in most % cases, not the current font. Plain TeX does \def\bf{\fam=\bffam % \tenbf}, for example. By redefining \tenbf, we obviate the need to % redefine \bf itself. \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \resetmathfonts} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \resetmathfonts \setleading{25pt}} \def\titlefont#1{{\titlefonts\rm #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf? \def\indexfonts{% \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl \resetmathfonts \setleading{12pt}} % Set up the default fonts, so we can use them for creating boxes. % \textfonts % Define these so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000} \setfont\shortcontbf\bxshape{12}{1000} \setfont\shortcontsl\slshape{12}{1000} %% Add scribe-like font environments, plus @l for inline lisp (usually sans %% serif) and @ii for TeX italic % \smartitalic{ARG} outputs arg in italics, followed by an italic correction % unless the following character is such as not to need one. \def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi} \def\smartslanted#1{{\sl #1}\futurelet\next\smartitalicx} \def\smartitalic#1{{\it #1}\futurelet\next\smartitalicx} \let\i=\smartitalic \let\var=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic \let\cite=\smartslanted \def\b#1{{\bf #1}} \let\strong=\b % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } \def\t#1{% {\tt \rawbackslash \frenchspacing #1}% \null } \let\ttfont=\t \def\samp#1{`\tclose{#1}'\null} \setfont\smallrm\rmshape{8}{1000} \font\smallsy=cmsy9 \def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% \vbox{\hrule\kern-0.4pt \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% \kern-0.4pt\hrule}% \kern-.06em\raise0.4pt\hbox{\angleright}}}} % The old definition, with no lozenge: %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @file, @option are the same as @samp. \let\file=\samp \let\option=\samp % @code is a modification of @t, % which makes spaces the same size as normal in the surrounding text. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \frenchspacing #1% }% \null } % We *must* turn on hyphenation at `-' and `_' in \code. % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. % -- rms. { \catcode`\-=\active \catcode`\_=\active % \global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex } % % If we end up with any active - characters when handling the index, % just treat them as a normal -. \global\def\indexbreaks{\catcode`\-=\active \let-\realdash} } \def\realdash{-} \def\codedash{-\discretionary{}{}{}} \def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}} \def\codex #1{\tclose{#1}\endgroup} %\let\exp=\tclose %Was temporary % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \def\kbdinputstyle{\parsearg\kbdinputstylexxx} \def\kbdinputstylexxx#1{% \def\arg{#1}% \ifx\arg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\arg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\arg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is kbdinputdistinct. (Too much of a hassle to call the macro, % the catcodes are wrong for parsearg to work.) \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl} \def\xkey{\key} \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\look}}\fi \else{\tclose{\kbdfont\look}}\fi} % For @url, @env, @command quotes seem unnecessary, so use \code. \let\url=\code \let\env=\code \let\command=\code % @uref (abbreviation for `urlref') takes an optional (comma-separated) % second argument specifying the text to display and an optional third % arg as text to display instead of (rather than in addition to) the url % itself. First (mandatory) arg is the url. Perhaps eventually put in % a hypertex \special here. % \def\uref#1{\douref #1,,,\finish} \def\douref#1,#2,#3,#4\finish{% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \unhbox0\ (\code{#1})% second arg given, show both it and url \else \code{#1}% only url given, so show it \fi \fi } % rms does not like the angle brackets --karl, 17may97. % So now @email is just like @uref. %\def\email#1{\angleleft{\tt #1}\angleright} \let\email=\uref % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} \def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} % @l was never documented to mean ``switch to the Lisp font'', % and it is not used as such in any manual I can find. We need it for % Polish suppressed-l. --karl, 22sep96. %\def\l#1{{\li #1}\null} % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @acronym downcases the argument and prints in smallcaps. \def\acronym#1{{\smallcaps \lowercase{#1}}} % @pounds{} is a sterling sign. \def\pounds{{\it\$}} \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \def\shorttitlepage{\parsearg\shorttitlepagezzz} \def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \def\titlepage{\begingroup \parindent=0pt \textfonts \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}% % \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}% % % Leave some space at the very top of the page. \vglue\titlepagetopglue % % Now you can print the title using @title. \def\title{\parsearg\titlezzz}% \def\titlezzz##1{\leftline{\titlefonts\rm ##1} % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt}% % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Now you can put text using @subtitle. \def\subtitle{\parsearg\subtitlezzz}% \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}% % % @author should come last, but may come many times. \def\author{\parsearg\authorzzz}% \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi {\authorfont \leftline{##1}}}% % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \oldpage \let\page = \oldpage \hbox{}}% % \def\page{\oldpage \hbox{}} } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi % \HEADINGSon } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } %%% Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make Tex use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\oddheading{\parsearg\oddheadingxxx} \def\everyheading{\parsearg\everyheadingxxx} \def\evenfooting{\parsearg\evenfootingxxx} \def\oddfooting{\parsearg\oddfootingxxx} \def\everyfooting{\parsearg\everyfootingxxx} {\catcode`\@=0 % \gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish} \gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish} \gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish} \gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish} \gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\pageheight by -\baselineskip \global\advance\vsize by -\baselineskip } \gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}} % }% unbind the catcode of @. % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} \def\HEADINGSoff{ \global\evenheadline={\hfil} \global\evenfootline={\hfil} \global\oddheadline={\hfil} \global\oddfootline={\hfil}} \HEADINGSoff % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{ \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{ \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % Produces Day Month Year style of output. \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg\settitlezzz} \def\settitlezzz #1{\gdef\thistitle{#1}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @vtable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz} \def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz} \def\internalBkitem{\smallbreak \parsearg\kitemzzz} \def\internalBkitemx{\itemxpar \parsearg\kitemzzz} \def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}% \itemzzz {#1}} \def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}% \itemzzz {#1}} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemfont{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. Unfortunately % we can't prevent a possible page break at the following % \baselineskip glue. \nobreak \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a table}} \def\itemx{\errmessage{@itemx while not in a table}} \def\kitem{\errmessage{@kitem while not in a table}} \def\kitemx{\errmessage{@kitemx while not in a table}} \def\xitem{\errmessage{@xitem while not in a table}} \def\xitemx{\errmessage{@xitemx while not in a table}} % Contains a kludge to get @end[description] to work. \def\description{\tablez{\dontindex}{1}{}{}{}{}} % @table, @ftable, @vtable. \def\table{\begingroup\inENV\obeylines\obeyspaces\tablex} {\obeylines\obeyspaces% \gdef\tablex #1^^M{% \tabley\dontindex#1 \endtabley}} \def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex} {\obeylines\obeyspaces% \gdef\ftablex #1^^M{% \tabley\fnitemindex#1 \endtabley \def\Eftable{\endgraf\afterenvbreak\endgroup}% \let\Etable=\relax}} \def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex} {\obeylines\obeyspaces% \gdef\vtablex #1^^M{% \tabley\vritemindex#1 \endtabley \def\Evtable{\endgraf\afterenvbreak\endgroup}% \let\Etable=\relax}} \def\dontindex #1{} \def\fnitemindex #1{\doind {fn}{\code{#1}}}% \def\vritemindex #1{\doind {vr}{\code{#1}}}% {\obeyspaces % \gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup% \tablez{#1}{#2}{#3}{#4}{#5}{#6}}} \def\tablez #1#2#3#4#5#6{% \aboveenvbreak % \begingroup % \def\Edescription{\Etable}% Necessary kludge. \let\itemindex=#1% \ifnum 0#3>0 \advance \leftskip by #3\mil \fi % \ifnum 0#4>0 \tableindent=#4\mil \fi % \ifnum 0#5>0 \advance \rightskip by #5\mil \fi % \def\itemfont{#2}% \itemmax=\tableindent % \advance \itemmax by -\itemmargin % \advance \leftskip by \tableindent % \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi% \def\Etable{\endgraf\afterenvbreak\endgroup}% \let\item = \internalBitem % \let\itemx = \internalBitemx % \let\kitem = \internalBkitem % \let\kitemx = \internalBkitemx % \let\xitem = \internalBxitem % \let\xitemx = \internalBxitemx % } % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \def\itemize{\parsearg\itemizezzz} \def\itemizezzz #1{% \begingroup % ended by the @end itemize \itemizey {#1}{\Eitemize} } \def\itemizey #1#2{% \aboveenvbreak % \itemmax=\itemindent % \advance \itemmax by -\itemmargin % \advance \leftskip by \itemindent % \exdentamount=\itemindent \parindent = 0pt % \parskip = \smallskipamount % \ifdim \parskip=0pt \parskip=2pt \fi% \def#2{\endgraf\afterenvbreak\endgroup}% \def\itemcontents{#1}% \let\item=\itemizeitem} % Set sfcode to normal for the chars that usually have another value. % These are `.?!:;,' \def\frenchspacing{\sfcode46=1000 \sfcode63=1000 \sfcode33=1000 \sfcode58=1000 \sfcode59=1000 \sfcode44=1000 } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \def\enumerate{\parsearg\enumeratezzz} \def\enumeratezzz #1{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% \begingroup % ended by the @end enumerate % % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call itemizey, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \itemizey{#1.}\Eenumerate\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % Definition of @item while inside @itemize. \def\itemizeitem{% \advance\itemno by 1 {\let\par=\endgraf \smallbreak}% \ifhmode \errmessage{In hmode at itemizeitem}\fi {\parskip=0in \hskip 0pt \hbox to 0pt{\hss \itemcontents\hskip \itemmargin}% \vadjust{\penalty 1200}}% \flushcr} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % % For those who want to use more than one line's worth of words in % the preamble, break the line within one argument and it % will parse correctly, i.e., % % @multitable {Column 1 template} {Column 2 template} {Column 3 % template} % Not: % @multitable {Column 1 template} {Column 2 template} % {Column 3 template} % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab, @multitable or @end multitable do not need to be on their % own lines, but it will not hurt if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the part of the @columnfraction before the decimal point, which % is presumably either 0 or the empty string (but we don't check, we % just throw it away). #2 is the decimal part, which we use as the % percent of \hsize for this column. \def\pickupwholefraction#1.#2 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip }% Add a normal word space as a separator; % typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable syntax \def\tab{&\hskip1sp\relax} % 2/2/96 % tiny skip here makes sure this column space is % maintained, even if it is never used. % @multitable ... @end multitable definitions: % \def\multitable{\parsearg\dotable} \def\dotable#1{\bgroup \vskip\parskip \let\item\crcr \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 \def\Emultitable{\global\setpercentfalse\cr\egroup\egroup}% % % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % \everycr will reset column counter, \colcount, at the end of % each line. Every column entry will cause \colcount to advance by one. % The table preamble % looks at the current \colcount to find the correct column width. \everycr{\noalign{% % % \filbreak%% keeps underfull box messages off when table breaks over pages. % Maybe so, but it also creates really weird page breaks when the table % breaks over pages. Wouldn't \vfil be better? Wait until the problem % manifests itself, so it can be fixed for real --karl. \global\colcount=0\relax}}% % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup&\global\advance\colcount by 1\relax \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively marking % characters. \noindent\ignorespaces##\unskip\multistrut}\cr } \def\setmultitablespacing{% test to see if user has set \multitablelinespace. % If so, do nothing. If not, give it an appropriate dimension based on % current baselineskip. \ifdim\multitablelinespace=0pt %% strut to put in table in case some entry doesn't have descenders, %% to keep lines equally spaced \let\multistrut = \strut %% Test to see if parskip is larger than space between lines of %% table. If not, do nothing. %% If so, set to same dimension as multitablelinespace. \else \gdef\multistrut{\vrule height\multitablelinespace depth\dp0 width0pt\relax} \fi \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi} \message{conditionals,} % Prevent errors for section commands. % Used in @ignore and in failing conditionals. \def\ignoresections{% \let\chapter=\relax \let\unnumbered=\relax \let\top=\relax \let\unnumberedsec=\relax \let\unnumberedsection=\relax \let\unnumberedsubsec=\relax \let\unnumberedsubsection=\relax \let\unnumberedsubsubsec=\relax \let\unnumberedsubsubsection=\relax \let\section=\relax \let\subsec=\relax \let\subsubsec=\relax \let\subsection=\relax \let\subsubsection=\relax \let\appendix=\relax \let\appendixsec=\relax \let\appendixsection=\relax \let\appendixsubsec=\relax \let\appendixsubsection=\relax \let\appendixsubsubsec=\relax \let\appendixsubsubsection=\relax \let\contents=\relax \let\smallbook=\relax \let\titlepage=\relax } % Used in nested conditionals, where we have to parse the Texinfo source % and so want to turn off most commands, in case they are used % incorrectly. % \def\ignoremorecommands{% \let\defcodeindex = \relax \let\defcv = \relax \let\deffn = \relax \let\deffnx = \relax \let\defindex = \relax \let\defivar = \relax \let\defmac = \relax \let\defmethod = \relax \let\defop = \relax \let\defopt = \relax \let\defspec = \relax \let\deftp = \relax \let\deftypefn = \relax \let\deftypefun = \relax \let\deftypeivar = \relax \let\deftypevar = \relax \let\deftypevr = \relax \let\defun = \relax \let\defvar = \relax \let\defvr = \relax \let\ref = \relax \let\xref = \relax \let\printindex = \relax \let\pxref = \relax \let\settitle = \relax \let\setchapternewpage = \relax \let\setchapterstyle = \relax \let\everyheading = \relax \let\evenheading = \relax \let\oddheading = \relax \let\everyfooting = \relax \let\evenfooting = \relax \let\oddfooting = \relax \let\headings = \relax \let\include = \relax \let\lowersections = \relax \let\down = \relax \let\raisesections = \relax \let\up = \relax \let\set = \relax \let\clear = \relax \let\item = \relax } % Ignore @ignore ... @end ignore. % \def\ignore{\doignore{ignore}} % Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text. % \def\ifinfo{\doignore{ifinfo}} \def\ifhtml{\doignore{ifhtml}} \def\ifnottex{\doignore{ifnottex}} \def\html{\doignore{html}} \def\menu{\doignore{menu}} \def\direntry{\doignore{direntry}} % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory = \comment % Ignore text until a line `@end #1'. % \def\doignore#1{\begingroup % Don't complain about control sequences we have declared \outer. \ignoresections % % Define a command to swallow text until we reach `@end #1'. % This @ is a catcode 12 token (that is the normal catcode of @ in % this texinfo.tex file). We change the catcode of @ below to match. \long\def\doignoretext##1@end #1{\enddoignore}% % % Make sure that spaces turn into tokens that match what \doignoretext wants. \catcode32 = 10 % % Ignore braces, too, so mismatched braces don't cause trouble. \catcode`\{ = 9 \catcode`\} = 9 % % We must not have @c interpreted as a control sequence. \catcode`\@ = 12 % % Make the letter c a comment character so that the rest of the line % will be ignored. This way, the document can have (for example) % @c @end ifinfo % and the @end ifinfo will be properly ignored. % (We've just changed @ to catcode 12.) \catcode`\c = 14 % % And now expand that command. \doignoretext } % What we do to finish off ignored text. % \def\enddoignore{\endgroup\ignorespaces}% \newif\ifwarnedobs\warnedobsfalse \def\obstexwarn{% \ifwarnedobs\relax\else % We need to warn folks that they may have trouble with TeX 3.0. % This uses \immediate\write16 rather than \message to get newlines. \immediate\write16{} \immediate\write16{WARNING: for users of Unix TeX 3.0!} \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).} \immediate\write16{If you are running another version of TeX, relax.} \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.} \immediate\write16{ Then upgrade your TeX installation if you can.} \immediate\write16{ (See ftp://ftp.gnu.org/pub/gnu/TeX.README.)} \immediate\write16{If you are stuck with version 3.0, run the} \immediate\write16{ script ``tex3patch'' from the Texinfo distribution} \immediate\write16{ to use a workaround.} \immediate\write16{} \global\warnedobstrue \fi } % **In TeX 3.0, setting text in \nullfont hangs tex. For a % workaround (which requires the file ``dummy.tfm'' to be installed), % uncomment the following line: %%%%%\font\nullfont=dummy\let\obstexwarn=\relax % Ignore text, except that we keep track of conditional commands for % purposes of nesting, up to an `@end #1' command. % \def\nestedignore#1{% \obstexwarn % We must actually expand the ignored text to look for the @end % command, so that nested ignore constructs work. Thus, we put the % text into a \vbox and then do nothing with the result. To minimize % the change of memory overflow, we follow the approach outlined on % page 401 of the TeXbook: make the current font be a dummy font. % \setbox0 = \vbox\bgroup % Don't complain about control sequences we have declared \outer. \ignoresections % % Define `@end #1' to end the box, which will in turn undefine the % @end command again. \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}% % % We are going to be parsing Texinfo commands. Most cause no % trouble when they are used incorrectly, but some commands do % complicated argument parsing or otherwise get confused, so we % undefine them. % % We can't do anything about stray @-signs, unfortunately; % they'll produce `undefined control sequence' errors. \ignoremorecommands % % Set the current font to be \nullfont, a TeX primitive, and define % all the font commands to also use \nullfont. We don't use % dummy.tfm, as suggested in the TeXbook, because not all sites % might have that installed. Therefore, math mode will still % produce output, but that should be an extremely small amount of % stuff compared to the main input. % \nullfont \let\tenrm = \nullfont \let\tenit = \nullfont \let\tensl = \nullfont \let\tenbf = \nullfont \let\tentt = \nullfont \let\smallcaps = \nullfont \let\tensf = \nullfont % Similarly for index fonts (mostly for their use in % smallexample) \let\indrm = \nullfont \let\indit = \nullfont \let\indsl = \nullfont \let\indbf = \nullfont \let\indtt = \nullfont \let\indsc = \nullfont \let\indsf = \nullfont % % Don't complain when characters are missing from the fonts. \tracinglostchars = 0 % % Don't bother to do space factor calculations. \frenchspacing % % Don't report underfull hboxes. \hbadness = 10000 % % Do minimal line-breaking. \pretolerance = 10000 % % Do not execute instructions in @tex \def\tex{\doignore{tex}}% % Do not execute macro definitions. % `c' is a comment character, so the word `macro' will get cut off. \def\macro{\doignore{ma}}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. Make sure the catcode of space is correct to avoid % losing inside @example, for instance. % \def\set{\begingroup\catcode` =10 \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. \parsearg\setxxx} \def\setxxx#1{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% \def\temp{#2}% \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted. \fi \endgroup } % Can't use \xdef to pre-expand #2 and save some time, since \temp or % \next or other control sequences that we've defined might get us into % an infinite loop. Consider `@set foo @cite{bar}'. \def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}} % @clear VAR clears (i.e., unsets) the variable VAR. % \def\clear{\parsearg\clearxxx} \def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax} % @value{foo} gets the text saved in variable foo. { \catcode`\_ = \active % % We might end up with active _ or - characters in the argument if % we're called from @code, as @code{@value{foo-bar_}}. So \let any % such active characters to their normal equivalents. \gdef\value{\begingroup \catcode`\-=12 \catcode`\_=12 \indexbreaks \let_\normalunderscore \valuexxx} } \def\valuexxx#1{\expandablevalue{#1}\endgroup} % We have this subroutine so that we can handle at least some @value's % properly in indexes (we \let\value to this in \indexdummies). Ones % whose names contain - or _ still won't work, but we can't do anything % about that. The command has to be fully expandable, since the result % winds up in the index file. This means that if the variable's value % contains other Texinfo commands, it's almost certain it will fail % (although perhaps we could fix that with sufficient work to do a % one-level expansion on the result, instead of complete). % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % \def\ifset{\parsearg\ifsetxxx} \def\ifsetxxx #1{% \expandafter\ifx\csname SET#1\endcsname\relax \expandafter\ifsetfail \else \expandafter\ifsetsucceed \fi } \def\ifsetsucceed{\conditionalsucceed{ifset}} \def\ifsetfail{\nestedignore{ifset}} \defineunmatchedend{ifset} % @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % \def\ifclear{\parsearg\ifclearxxx} \def\ifclearxxx #1{% \expandafter\ifx\csname SET#1\endcsname\relax \expandafter\ifclearsucceed \else \expandafter\ifclearfail \fi } \def\ifclearsucceed{\conditionalsucceed{ifclear}} \def\ifclearfail{\nestedignore{ifclear}} \defineunmatchedend{ifclear} % @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text % following, through the first @end iftex (etc.). Make `@end iftex' % (etc.) valid only after an @iftex. % \def\iftex{\conditionalsucceed{iftex}} \def\ifnothtml{\conditionalsucceed{ifnothtml}} \def\ifnotinfo{\conditionalsucceed{ifnotinfo}} \defineunmatchedend{iftex} \defineunmatchedend{ifnothtml} \defineunmatchedend{ifnotinfo} % We can't just want to start a group at @iftex (for example) and end it % at @end iftex, since then @set commands inside the conditional have no % effect (they'd get reverted at the end of the group). So we must % define \Eiftex to redefine itself to be its previous value. (We can't % just define it to fail again with an ``unmatched end'' error, since % the @ifset might be nested.) % \def\conditionalsucceed#1{% \edef\temp{% % Remember the current value of \E#1. \let\nece{prevE#1} = \nece{E#1}% % % At the `@end #1', redefine \E#1 to be its previous value. \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}% }% \temp } % We need to expand lots of \csname's, but we don't want to expand the % control sequences after we've constructed them. % \def\nece#1{\expandafter\noexpand\csname#1\endcsname} % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within \newindex. {\catcode`\@=11 \gdef\newwrite{\alloc@7\write\chardef\sixt@@n}} % \newindex {foo} defines an index named foo. % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 % Open the file \fi \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. \def\newcodeindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}} } \def\defcodeindex{\parsearg\newcodeindex} % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \def\synindex#1 #2 {% \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname \expandafter\closeout\csname#1indfile\endcsname \expandafter\let\csname#1indfile\endcsname=\synindexfoo \expandafter\xdef\csname#1index\endcsname{% define \xxxindex \noexpand\doindex{#2}}% } % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. \def\syncodeindex#1 #2 {% \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname \expandafter\closeout\csname#1indfile\endcsname \expandafter\let\csname#1indfile\endcsname=\synindexfoo \expandafter\xdef\csname#1index\endcsname{% define \xxxindex \noexpand\docodeindex{#2}}% } % Define \doindex, the driver for all \fooindex macros. % Argument #1 is generated by the calling \fooindex macro, % and it is "foo", the name of the index. % \doindex just uses \parsearg; it calls \doind for the actual work. % This is because \doind is more useful to call from other macros. % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. \def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} \def\singleindexer #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} \def\indexdummies{% \def\ { }% % Take care of the plain tex accent commands. \def\"{\realbackslash "}% \def\`{\realbackslash `}% \def\'{\realbackslash '}% \def\^{\realbackslash ^}% \def\~{\realbackslash ~}% \def\={\realbackslash =}% \def\b{\realbackslash b}% \def\c{\realbackslash c}% \def\d{\realbackslash d}% \def\u{\realbackslash u}% \def\v{\realbackslash v}% \def\H{\realbackslash H}% % Take care of the plain tex special European modified letters. \def\oe{\realbackslash oe}% \def\ae{\realbackslash ae}% \def\aa{\realbackslash aa}% \def\OE{\realbackslash OE}% \def\AE{\realbackslash AE}% \def\AA{\realbackslash AA}% \def\o{\realbackslash o}% \def\O{\realbackslash O}% \def\l{\realbackslash l}% \def\L{\realbackslash L}% \def\ss{\realbackslash ss}% % Take care of texinfo commands likely to appear in an index entry. % (Must be a way to avoid doing expansion at all, and thus not have to % laboriously list every single command here.) \def\@{@}% will be @@ when we switch to @ as escape char. % Need these in case \tex is in effect and \{ is a \delimiter again. % But can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. \let\{ = \mylbrace \let\} = \myrbrace \def\_{{\realbackslash _}}% \def\w{\realbackslash w }% \def\bf{\realbackslash bf }% %\def\rm{\realbackslash rm }% \def\sl{\realbackslash sl }% \def\sf{\realbackslash sf}% \def\tt{\realbackslash tt}% \def\gtr{\realbackslash gtr}% \def\less{\realbackslash less}% \def\hat{\realbackslash hat}% \def\TeX{\realbackslash TeX}% \def\dots{\realbackslash dots }% \def\result{\realbackslash result}% \def\equiv{\realbackslash equiv}% \def\expansion{\realbackslash expansion}% \def\print{\realbackslash print}% \def\error{\realbackslash error}% \def\point{\realbackslash point}% \def\copyright{\realbackslash copyright}% \def\tclose##1{\realbackslash tclose {##1}}% \def\code##1{\realbackslash code {##1}}% \def\uref##1{\realbackslash uref {##1}}% \def\url##1{\realbackslash url {##1}}% \def\env##1{\realbackslash env {##1}}% \def\command##1{\realbackslash command {##1}}% \def\option##1{\realbackslash option {##1}}% \def\dotless##1{\realbackslash dotless {##1}}% \def\samp##1{\realbackslash samp {##1}}% \def\,##1{\realbackslash ,{##1}}% \def\t##1{\realbackslash t {##1}}% \def\r##1{\realbackslash r {##1}}% \def\i##1{\realbackslash i {##1}}% \def\b##1{\realbackslash b {##1}}% \def\sc##1{\realbackslash sc {##1}}% \def\cite##1{\realbackslash cite {##1}}% \def\key##1{\realbackslash key {##1}}% \def\file##1{\realbackslash file {##1}}% \def\var##1{\realbackslash var {##1}}% \def\kbd##1{\realbackslash kbd {##1}}% \def\dfn##1{\realbackslash dfn {##1}}% \def\emph##1{\realbackslash emph {##1}}% \def\acronym##1{\realbackslash acronym {##1}}% % % Handle some cases of @value -- where the variable name does not % contain - or _, and the value does not contain any % (non-fully-expandable) commands. \let\value = \expandablevalue % \unsepspaces % Turn off macro expansion \turnoffmacros } % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\\leavevmode \penalty \@M \ ). {\obeyspaces \gdef\unsepspaces{\obeyspaces\let =\space}} % \indexnofonts no-ops all font-change commands. % This is used when outputting the strings to sort the index by. \def\indexdummyfont#1{#1} \def\indexdummytex{TeX} \def\indexdummydots{...} \def\indexnofonts{% % Just ignore accents. \let\,=\indexdummyfont \let\"=\indexdummyfont \let\`=\indexdummyfont \let\'=\indexdummyfont \let\^=\indexdummyfont \let\~=\indexdummyfont \let\==\indexdummyfont \let\b=\indexdummyfont \let\c=\indexdummyfont \let\d=\indexdummyfont \let\u=\indexdummyfont \let\v=\indexdummyfont \let\H=\indexdummyfont \let\dotless=\indexdummyfont % Take care of the plain tex special European modified letters. \def\oe{oe}% \def\ae{ae}% \def\aa{aa}% \def\OE{OE}% \def\AE{AE}% \def\AA{AA}% \def\o{o}% \def\O{O}% \def\l{l}% \def\L{L}% \def\ss{ss}% \let\w=\indexdummyfont \let\t=\indexdummyfont \let\r=\indexdummyfont \let\i=\indexdummyfont \let\b=\indexdummyfont \let\emph=\indexdummyfont \let\strong=\indexdummyfont \let\cite=\indexdummyfont \let\sc=\indexdummyfont %Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |... %\let\tt=\indexdummyfont \let\tclose=\indexdummyfont \let\code=\indexdummyfont \let\url=\indexdummyfont \let\uref=\indexdummyfont \let\env=\indexdummyfont \let\command=\indexdummyfont \let\option=\indexdummyfont \let\file=\indexdummyfont \let\samp=\indexdummyfont \let\kbd=\indexdummyfont \let\key=\indexdummyfont \let\var=\indexdummyfont \let\TeX=\indexdummytex \let\dots=\indexdummydots \def\@{@}% } % To define \realbackslash, we must make \ not be an escape. % We must first make another character (@) an escape % so we do not become unable to do a definition. {\catcode`\@=0 \catcode`\\=\other @gdef@realbackslash{\}} \let\indexbackslash=0 %overridden during \printindex. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % For \ifx comparisons. \def\emptymacro{\empty} % Most index entries go through here, but \dosubind is the general case. % \def\doind#1#2{\dosubind{#1}{#2}\empty} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % \empty if called from \doind, as we usually are. The main exception % is with defuns, which call us directly. % \def\dosubind#1#2#3{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}% \fi {% \count255=\lastpenalty {% \indexdummies % Must do this here, since \bf, etc expand at this stage \escapechar=`\\ {% \let\folio = 0% We will expand all macros now EXCEPT \folio. \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now % so it will be output as is; and it will print as backslash. % \def\thirdarg{#3}% % % If third arg is present, precede it with space in sort key. \ifx\thirdarg\emptymacro \let\subentry = \empty \else \def\subentry{ #3}% \fi % % First process the index entry with all font commands turned % off to get the string to sort by. {\indexnofonts \xdef\indexsorttmp{#2\subentry}}% % % Now the real index entry with the fonts. \toks0 = {#2}% % % If third (subentry) arg is present, add it to the index % string. And include a space. \ifx\thirdarg\emptymacro \else \toks0 = \expandafter{\the\toks0 \space #3}% \fi % % Set up the complete index entry, with both the sort key % and the original text, including any font commands. We write % three arguments to \entry to the .?? file, texindex reduces to % two when writing the .??s sorted result. \edef\temp{% \write\csname#1indfile\endcsname{% \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}% }% % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write will make \lastskip zero. The result is that sequences % like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % \iflinks \ifvmode \skip0 = \lastskip \ifdim\lastskip = 0pt \else \nobreak\vskip-\lastskip \fi \fi % \temp % do the write % % \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi \fi }% }% \penalty\count255 }% } % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \def\printindex{\parsearg\doprintindex} \def\doprintindex#1{\begingroup \dobreak \chapheadingskip{10000}% % \indexfonts \rm \tolerance = 9500 \indexbreaks % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 \openin 1 \jobname.#1s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \temp \ifeof 1 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\rawbackslashxx}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns \input \jobname.#1s \enddoublecolumns \fi \fi \closein 1 \endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. \def\initial#1{{% % Some minor font changes for the special characters. \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt % % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. \penalty -300 % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus .5\baselineskip \leftline{\secbf #1}% \vskip .33\baselineskip plus .1\baselineskip % % Do our best not to break after the initial. \nobreak }} % This typesets a paragraph consisting of #1, dot leaders, and then #2 % flush to the right margin. It is used for index and table of contents % entries. The paragraph is indented by \leftskip. % \def\entry#1#2{\begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % Do not fill out the last line with white space. \parfillskip = 0in % % No extra space above this paragraph. \parskip = 0in % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % \hangindent is only relevant when the entry text and page number % don't both fit on one line. In that case, bob suggests starting the % dots pretty far over on the line. Unfortunately, a large % indentation looks wrong when the entry text itself is broken across % lines. So we use a small indentation and put up with long leaders. % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % % A bit of stretch before each entry for the benefit of balancing columns. \vskip 0pt plus1pt % % Start a ``paragraph'' for the index entry so the line breaking % parameters we've set above will have an effect. \noindent % % Insert the text of the index entry. TeX will do line-breaking on it. #1% % The following is kludged to not output a line of dots in the index if % there are no page numbers. The next person who breaks this will be % cursed by a Unix daemon. \def\tempa{{\rm }}% \def\tempb{#2}% \edef\tempc{\tempa}% \edef\tempd{\tempb}% \ifx\tempc\tempd\ \else% % % If we must, put the page number on a line of its own, and fill out % this line with blank space. (The \hfil is overwhelmed with the % fill leaders glue in \indexdotfill if the page number does fit.) \hfil\penalty50 \null\nobreak\indexdotfill % Have leaders before the page number. % % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. \ #2% The page number ends the paragraph. \fi% \par \endgroup} % Like \dotfill except takes at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill} \def\prry #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary #1#2{ {\parfillskip=0in \parskip=0in \hangindent =1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \advance\vsize by -\ht\partialpage \vsize = 2\vsize } % The double-column output routine for all double-column pages except % the last. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \penalty\outputpenalty } \def\pagesofar{% % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } \def\enddoublecolumns{% \output = {% % Split the last of the double-column material. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } \def\balancecolumns{% % Called at the end of the double column material. \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% \splittopskip = \topskip % Loop until we get a decent breakpoint. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht3>\dimen@ \global\advance\dimen@ by 1pt \repeat }% %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% % \pagesofar } \catcode`\@ = \other \message{sectioning,} % Define chapters, sections, etc. \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ \def\appendixletter{\char\appendixno} % Each @chapter defines this as the name of the chapter. % page headings and footings can use it. @section does likewise. \def\thischapter{} \def\thissection{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raise/lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % Choose a numbered-heading macro % #1 is heading level if unmodified by @raisesections or @lowersections % #2 is text for heading \def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 \ifcase\absseclevel \chapterzzz{#2} \or \seczzz{#2} \or \numberedsubseczzz{#2} \or \numberedsubsubseczzz{#2} \else \ifnum \absseclevel<0 \chapterzzz{#2} \else \numberedsubsubseczzz{#2} \fi \fi } % like \numhead, but chooses appendix heading levels \def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 \ifcase\absseclevel \appendixzzz{#2} \or \appendixsectionzzz{#2} \or \appendixsubseczzz{#2} \or \appendixsubsubseczzz{#2} \else \ifnum \absseclevel<0 \appendixzzz{#2} \else \appendixsubsubseczzz{#2} \fi \fi } % like \numhead, but chooses numberless heading levels \def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 \ifcase\absseclevel \unnumberedzzz{#2} \or \unnumberedseczzz{#2} \or \unnumberedsubseczzz{#2} \or \unnumberedsubsubseczzz{#2} \else \ifnum \absseclevel<0 \unnumberedzzz{#2} \else \unnumberedsubsubseczzz{#2} \fi \fi } % @chapter, @appendix, @unnumbered. \def\thischaptername{No Chapter Title} \outer\def\chapter{\parsearg\chapteryyy} \def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz #1{% \secno=0 \subsecno=0 \subsubsecno=0 \global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}% \chapmacro {#1}{\the\chapno}% \gdef\thissection{#1}% \gdef\thischaptername{#1}% % We don't substitute the actual chapter name into \thischapter % because we don't want its macros evaluated now. \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}% {\the\chapno}}}% \temp \donoderef \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\def\appendix{\parsearg\appendixyyy} \def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz \def\appendixzzz #1{% \secno=0 \subsecno=0 \subsubsecno=0 \global\advance \appendixno by 1 \message{\putwordAppendix\space \appendixletter}% \chapmacro {#1}{\putwordAppendix{} \appendixletter}% \gdef\thissection{#1}% \gdef\thischaptername{#1}% \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}% {\putwordAppendix{} \appendixletter}}}% \temp \appendixnoderef \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\def\centerchap{\parsearg\centerchapyyy} \def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}} % @top is like @unnumbered. \outer\def\top{\parsearg\unnumberedyyy} \outer\def\unnumbered{\parsearg\unnumberedyyy} \def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz \def\unnumberedzzz #1{% \secno=0 \subsecno=0 \subsubsecno=0 % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}\message{(\the\toks0)}% % \unnumbchapmacro {#1}% \gdef\thischapter{#1}\gdef\thissection{#1}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash unnumbchapentry{\the\toks0}}}% \temp \unnumbnoderef \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % Sections. \outer\def\numberedsec{\parsearg\secyyy} \def\secyyy #1{\numhead1{#1}} % normally calls seczzz \def\seczzz #1{% \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}% {\the\chapno}{\the\secno}}}% \temp \donoderef \nobreak } \outer\def\appendixsection{\parsearg\appendixsecyyy} \outer\def\appendixsec{\parsearg\appendixsecyyy} \def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz \def\appendixsectionzzz #1{% \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}% {\appendixletter}{\the\secno}}}% \temp \appendixnoderef \nobreak } \outer\def\unnumberedsec{\parsearg\unnumberedsecyyy} \def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz \def\unnumberedseczzz #1{% \plainsecheading {#1}\gdef\thissection{#1}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry{\the\toks0}}}% \temp \unnumbnoderef \nobreak } % Subsections. \outer\def\numberedsubsec{\parsearg\numberedsubsecyyy} \def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz \def\numberedsubseczzz #1{% \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}% {\the\chapno}{\the\secno}{\the\subsecno}}}% \temp \donoderef \nobreak } \outer\def\appendixsubsec{\parsearg\appendixsubsecyyy} \def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz \def\appendixsubseczzz #1{% \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}% {\appendixletter}{\the\secno}{\the\subsecno}}}% \temp \appendixnoderef \nobreak } \outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy} \def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz \def\unnumberedsubseczzz #1{% \plainsubsecheading {#1}\gdef\thissection{#1}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry% {\the\toks0}}}% \temp \unnumbnoderef \nobreak } % Subsubsections. \outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy} \def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz \def\numberedsubsubseczzz #1{% \gdef\thissection{#1}\global\advance \subsubsecno by 1 % \subsubsecheading {#1} {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}% {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}% \temp \donoderef \nobreak } \outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy} \def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz \def\appendixsubsubseczzz #1{% \gdef\thissection{#1}\global\advance \subsubsecno by 1 % \subsubsecheading {#1} {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}% {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}% \temp \appendixnoderef \nobreak } \outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy} \def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz \def\unnumberedsubsubseczzz #1{% \plainsubsubsecheading {#1}\gdef\thissection{#1}% \toks0 = {#1}% \edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry% {\the\toks0}}}% \temp \unnumbnoderef \nobreak } % These are variants which are not "outer", so they can appear in @ifinfo. % Actually, they should now be obsolete; ordinary section commands should work. \def\infotop{\parsearg\unnumberedzzz} \def\infounnumbered{\parsearg\unnumberedzzz} \def\infounnumberedsec{\parsearg\unnumberedseczzz} \def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz} \def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz} \def\infoappendix{\parsearg\appendixzzz} \def\infoappendixsec{\parsearg\appendixseczzz} \def\infoappendixsubsec{\parsearg\appendixsubseczzz} \def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz} \def\infochapter{\parsearg\chapterzzz} \def\infosection{\parsearg\sectionzzz} \def\infosubsection{\parsearg\subsectionzzz} \def\infosubsubsection{\parsearg\subsubsectionzzz} % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading % NOTE on use of \vbox for chapter headings, section headings, and such: % 1) We use \vbox rather than the earlier \line to permit % overlong headings to fold. % 2) \hyphenpenalty is set to 10000 because hyphenation in a % heading is obnoxious; this forbids it. % 3) Likewise, headings look best if no \parindent is used, and % if justification is not attempted. Hence \raggedright. \def\majorheading{\parsearg\majorheadingzzz} \def\majorheadingzzz #1{% {\advance\chapheadingskip by 10pt \chapbreak }% {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright \rm #1\hfill}}\bigskip \par\penalty 200} \def\chapheading{\parsearg\chapheadingzzz} \def\chapheadingzzz #1{\chapbreak % {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright \rm #1\hfill}}\bigskip \par\penalty 200} % @heading, @subheading, @subsubheading. \def\heading{\parsearg\plainsecheading} \def\subheading{\parsearg\plainsubsecheading} \def\subsubheading{\parsearg\plainsubsubsecheading} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. %%% Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} \def\setchapterstyle #1 {\csname CHAPF#1\endcsname} %%% Define plain chapter starts, and page on/off switching for it % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} \def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{ \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon \def\CHAPFplain{ \global\let\chapmacro=\chfplain \global\let\unnumbchapmacro=\unnchfplain \global\let\centerchapmacro=\centerchfplain} % Plain chapter opening. % #1 is the text, #2 the chapter number or empty if unnumbered. \def\chfplain#1#2{% \pchapsepmacro {% \chapfonts \rm \def\chapnum{#2}% \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}% \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright \hangindent = \wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % Plain opening for unnumbered. \def\unnchfplain#1{\chfplain{#1}{}} % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerchfplain#1{{% \def\centerparametersmaybe{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt }% \chfplain{#1}{}% }} \CHAPFplain % The default \def\unnchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright \rm #1\hfill}}\bigskip \par\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } \def\centerchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt \hfill {\rm #1}\hfill}}\bigskip \par\nobreak } \def\CHAPFopen{ \global\let\chapmacro=\chfopen \global\let\unnumbchapmacro=\unnchfopen \global\let\centerchapmacro=\centerchfopen} % Section titles. \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip {-1000}} \def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}} \def\plainsecheading#1{\sectionheading{sec}{}{#1}} % Subsection titles. \newskip \subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}} \def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}} \def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}} % Subsubsection titles. \let\subsubsecheadingskip = \subsecheadingskip \let\subsubsecheadingbreak = \subsecheadingbreak \def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}} \def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}} % Print any size section title. % % #1 is the section type (sec/subsec/subsubsec), #2 is the section % number (maybe empty), #3 the text. \def\sectionheading#1#2#3{% {% \expandafter\advance\csname #1headingskip\endcsname by \parskip \csname #1headingbreak\endcsname }% {% % Switch to the right set of fonts. \csname #1fonts\endcsname \rm % % Only insert the separating space if we have a section number. \def\secnum{#2}% \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}% % \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright \hangindent = \wd0 % zero if no section number \unhbox0 #3}% }% \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak } \message{toc,} \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. We supply {\folio} at the end of the % argument, which will end up as the last argument to the \...entry macro. % % We open the .toc file here instead of at @setfilename or any other % given time so that @contents can be put in the document anywhere. % \newif\iftocfileopened \def\writetocentry#1{% \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi \iflinks \write\tocfile{#1{\folio}}\fi } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Finish up the main text and prepare to read what we've written % to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \unnumbchapmacro{#1}\def\thischapter{}% \savepageno = \pageno \begingroup % Set up to handle contents files properly. \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 % We can't do this, because then an actual ^ in a section % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97. %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \pageno = \lastnegativepageno \fi } % Normal (long) toc. \def\contents{% \startcontents{\putwordTOC}% \openin 1 \jobname.toc \ifeof 1 \else \closein 1 \input \jobname.toc \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\chapentry = \shortchapentry \let\unnumbchapentry = \shortunnumberedentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\secentry ##1##2##3##4{} \def\unnumbsecentry ##1##2{} \def\subsecentry ##1##2##3##4##5{} \def\unnumbsubsecentry ##1##2{} \def\subsubsecentry ##1##2##3##4##5##6{} \def\unnumbsubsubsecentry ##1##2{} \openin 1 \jobname.toc \ifeof 1 \else \closein 1 \input \jobname.toc \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \pageno = \savepageno } \let\shortcontents = \summarycontents % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Chapter-level things, for both the long and short contents. \def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}} % See comments in \dochapentry re vbox and related settings \def\shortchapentry#1#2#3{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno{#3}}% } % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter. % We could simplify the code here by writing out an \appendixentry % command in the toc file for appendices, instead of using \chapentry % for both, but it doesn't seem worth it. \setbox0 = \hbox{\shortcontrm \putwordAppendix } \newdimen\shortappendixwidth \shortappendixwidth = \wd0 \def\shortchaplabel#1{% % We typeset #1 in a box of constant width, regardless of the text of % #1, so the chapter titles will come out aligned. \setbox0 = \hbox{#1}% \dimen0 = \ifdim\wd0 > \shortappendixwidth \shortappendixwidth \else 0pt \fi % % This space should be plenty, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) \advance\dimen0 by 1.1em \hbox to \dimen0{#1\hfil}% } \def\unnumbchapentry#1#2{\dochapentry{#1}{#2}} \def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno{#2}}} % Sections. \def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}} \def\unnumbsecentry#1#2{\dosecentry{#1}{#2}} % Subsections. \def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}} \def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}} % And subsubsections. \def\subsubsecentry#1#2#3#4#5#6{% \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}} \def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}} % This parameter controls the indentation of the various levels. \newdimen\tocindent \tocindent = 3pc % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno{#2}}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno{#2}}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno{#2}}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno{#2}}% \endgroup} % Final typesetting of a toc entry; we use the same \entry macro as for % the index entries, but we want to suppress hyphenation here. (We % can't do that in the \entry macro, since index entries might consist % of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.) \def\tocentry#1#2{\begingroup \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks % Do not use \turnoffactive in these arguments. Since the toc is % typeset in cmr, so characters such as _ would come out wrong; we % have to do the usual translation tricks. \entry{#1}{#2}% \endgroup} % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \let\subsecentryfonts = \textfonts \let\subsubsecentryfonts = \textfonts \message{environments,} % Since these characters are used in examples, it should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % Furthermore, these definitions must come after we define our fonts. \newbox\dblarrowbox \newbox\longdblarrowbox \newbox\pushcharbox \newbox\bullbox \newbox\equivbox \newbox\errorbox %{\tentt %\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil} %\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil} %\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil} %\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil} % Adapted from the manmac format (p.420 of TeXbook) %\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width .85ex % depth .1ex\hfil} %} % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. \def\point{$\star$} \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} % Adapted from the TeXbook's \boxit. {\tentt \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} \global\setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{ \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % The @error{} command. \def\error{\leavevmode\lower.7ex\copy\errorbox} % @tex ... @end tex escapes into raw Tex temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain tex @ character. \def\tex{\begingroup \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie \catcode `\%=14 \catcode 43=12 % plus \catcode`\"=12 \catcode`\==12 \catcode`\|=12 \catcode`\<=12 \catcode`\>=12 \escapechar=`\\ % \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\*=\ptexstar \let\t=\ptext % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% \let\Etex=\endgroup} % Define @lisp ... @endlisp. % @lisp does a \begingroup so it can rebind things, % including the definition of @endlisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % {\obeyspaces % \gdef\sepspaces{\obeyspaces\let =\tie}} % Define \obeyedspace to be our active space, whatever it is. This is % for use in \parsearg. {\sepspaces% \global\let\obeyedspace= } % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip % \def\aboveenvbreak{{\advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip \penalty-50 \vskip\envskipamount \fi}} \let\afterenvbreak = \aboveenvbreak % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip \long\def\cartouche{% \begingroup \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt %we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % Flag to tell @lisp, etc., not to narrow margin. \let\nonarrowing=\comment \vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \hsize=\cartinner \kern3pt \begingroup \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \def\Ecartouche{% \endgroup \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \endgroup }} % This macro is called at the beginning of all the @example variants, % inside a group. \def\nonfillstart{% \aboveenvbreak \inENV % This group ends at the end of the body \hfuzz = 12pt % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \singlespace \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt \parindent = 0pt \emergencystretch = 0pt % don't try to avoid overfull boxes % @cartouche defines \nonarrowing to inhibit narrowing % at next level down. \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \let\exdent=\nofillexdent \let\nonarrowing=\relax \fi } % Define the \E... control sequence only if we are inside the particular % environment, so the error checking in \end will work. % % To end an @example-like environment, we first end the paragraph (via % \afterenvbreak's vertical glue), and then the group. That way we keep % the zero \parskip that the environments set -- \parskip glue will be % inserted at the beginning of the next paragraph in the document, after % the environment. % \def\nonfillfinish{\afterenvbreak\endgroup} % @lisp: indented, narrowed, typewriter font. \def\lisp{\begingroup \nonfillstart \let\Elisp = \nonfillfinish \tt \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @example: Same as @lisp. \def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp} % @small... is usually equivalent to the non-small (@smallbook % redefines). We must call \example (or whatever) last in the % definition, since it reads the return following the @example (or % whatever) command. % % This actually allows (for example) @end display inside an % @smalldisplay. Too bad, but makeinfo will catch the error anyway. % \def\smalldisplay{\begingroup\def\Esmalldisplay{\nonfillfinish\endgroup}\display} \def\smallexample{\begingroup\def\Esmallexample{\nonfillfinish\endgroup}\lisp} \def\smallformat{\begingroup\def\Esmallformat{\nonfillfinish\endgroup}\format} \def\smalllisp{\begingroup\def\Esmalllisp{\nonfillfinish\endgroup}\lisp} % Real @smallexample and @smalllisp (when @smallbook): use smaller fonts. % Originally contributed by Pavel@xerox. \def\smalllispx{\begingroup \def\Esmalllisp{\nonfillfinish\endgroup}% \def\Esmallexample{\nonfillfinish\endgroup}% \indexfonts \lisp } % @display: same as @lisp except keep current font. % \def\display{\begingroup \nonfillstart \let\Edisplay = \nonfillfinish \gobble } % @smalldisplay (when @smallbook): @display plus smaller fonts. % \def\smalldisplayx{\begingroup \def\Esmalldisplay{\nonfillfinish\endgroup}% \indexfonts \rm \display } % @format: same as @display except don't narrow margins. % \def\format{\begingroup \let\nonarrowing = t \nonfillstart \let\Eformat = \nonfillfinish \gobble } % @smallformat (when @smallbook): @format plus smaller fonts. % \def\smallformatx{\begingroup \def\Esmallformat{\nonfillfinish\endgroup}% \indexfonts \rm \format } % @flushleft (same as @format). % \def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format} % @flushright. % \def\flushright{\begingroup \let\nonarrowing = t \nonfillstart \let\Eflushright = \nonfillfinish \advance\leftskip by 0pt plus 1fill \gobble } % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. % \def\quotation{% \begingroup\inENV %This group ends at the end of the @quotation body {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \singlespace \parindent=0pt % We have retained a nonzero parskip for the environment, since we're % doing normal filling. So to avoid extra space below the environment... \def\Equotation{\parskip = 0pt \nonfillfinish}% % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \advance\rightskip by \lispnarrowing \exdentamount = \lispnarrowing \let\nonarrowing = \relax \fi } \message{defuns,} % Define formatter for defuns % First, allow user to change definition object font (\df) internally \def\setdeffont #1 {\csname DEF#1\endcsname} \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deftypemargin \deftypemargin=12pt \newskip\deflastargmargin \deflastargmargin=18pt \newcount\parencount % define \functionparens, which makes ( and ) and & do special things. % \functionparens affects the group it is contained in. \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\&=\active \catcode`\[=\active \catcode`\]=\active} % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) {\activeparens % Now, smart parens don't turn on until &foo (see \amprm) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 } \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} % This is used to turn on special parens % but make & act ordinary (given that it's active). \gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr} % Definitions of (, ) and & used in args for functions. % This is the definition of ( outside of all parentheses. \gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested \global\advance\parencount by 1 } % % This is the definition of ( when already inside a level of parens. \gdef\opnested{\char`\(\global\advance\parencount by 1 } % \gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0. % also in that case restore the outer-level definition of (. \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi \global\advance \parencount by -1 } % If we encounter &foo, then turn on ()-hacking afterwards \gdef\amprm#1 {{\rm\}\let(=\oprm \let)=\clrm\ } % \gdef\normalparens{\boldbrax\let&=\ampnr} } % End of definition inside \activeparens %% These parens (in \boldbrax) actually are a little bolder than the %% contained text. This is especially needed for [ and ] \def\opnr{{\sf\char`\(}\global\advance\parencount by 1 } \def\clnr{{\sf\char`\)}\global\advance\parencount by -1 } \let\ampnr = \& \def\lbrb{{\bf\char`\[}} \def\rbrb{{\bf\char`\]}} % Active &'s sneak into the index arguments, so make sure it's defined. { \catcode`& = 13 \global\let& = \ampnr } % First, defname, which formats the header line itself. % #1 should be the function name. % #2 should be the type of definition, such as "Function". \def\defname #1#2{% % Get the values of \leftskip and \rightskip as they were % outside the @def... \dimen2=\leftskip \advance\dimen2 by -\defbodyindent \noindent \setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}% \dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line \dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations \parshape 2 0in \dimen0 \defargsindent \dimen1 % Now output arg 2 ("Function" or some such) % ending at \deftypemargin from the right margin, % but stuck inside a box of width 0 so it does not interfere with linebreaking {% Adjust \hsize to exclude the ambient margins, % so that \rightline will obey them. \advance \hsize by -\dimen2 \rlap{\rightline{{\rm #2}\hskip -1.25pc }}}% % Make all lines underfull and no complaints: \tolerance=10000 \hbadness=10000 \advance\leftskip by -\defbodyindent \exdentamount=\defbodyindent {\df #1}\enskip % Generate function name } % Actually process the body of a definition % #1 should be the terminating control sequence, such as \Edefun. % #2 should be the "another name" control sequence, such as \defunx. % #3 should be the control sequence that actually processes the header, % such as \defunheader. \def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody \medbreak % % Define the end token that this defining construct specifies % so that it will exit this group. \def#1{\endgraf\endgroup\medbreak}% \def#2{\begingroup\obeylines\activeparens\spacesplit#3}% \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent \begingroup % \catcode 61=\active % 61 is `=' \obeylines\activeparens\spacesplit#3} % #1 is the \E... control sequence to end the definition (which we define). % #2 is the \...x control sequence for consecutive fns (which we define). % #3 is the control sequence to call to resume processing. % #4, delimited by the space, is the class name. % \def\defmethparsebody#1#2#3#4 {\begingroup\inENV % \medbreak % % Define the end token that this defining construct specifies % so that it will exit this group. \def#1{\endgraf\endgroup\medbreak}% \def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}% \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent \begingroup\obeylines\activeparens\spacesplit{#3{#4}}} % @deftypemethod has an extra argument that nothing else does. Sigh. % #1 is the \E... control sequence to end the definition (which we define). % #2 is the \...x control sequence for consecutive fns (which we define). % #3 is the control sequence to call to resume processing. % #4, delimited by the space, is the class name. % #5 is the method's return type. % \def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV % \medbreak % % Define the end token that this defining construct specifies % so that it will exit this group. \def#1{\endgraf\endgroup\medbreak}% \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}% \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent \begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}} \def\defopparsebody #1#2#3#4#5 {\begingroup\inENV % \medbreak % % Define the end token that this defining construct specifies % so that it will exit this group. \def#1{\endgraf\endgroup\medbreak}% \def#2##1 ##2 {\def#4{##1}% \begingroup\obeylines\activeparens\spacesplit{#3{##2}}}% \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent \begingroup\obeylines\activeparens\spacesplit{#3{#5}}} % These parsing functions are similar to the preceding ones % except that they do not make parens into active characters. % These are used for "variables" since they have no arguments. \def\defvarparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody \medbreak % % Define the end token that this defining construct specifies % so that it will exit this group. \def#1{\endgraf\endgroup\medbreak}% \def#2{\begingroup\obeylines\spacesplit#3}% \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent \begingroup % \catcode 61=\active % \obeylines\spacesplit#3} % This is used for \def{tp,vr}parsebody. It could probably be used for % some of the others, too, with some judicious conditionals. % \def\parsebodycommon#1#2#3{% \begingroup\inENV % \medbreak % % Define the end token that this defining construct specifies % so that it will exit this group. \def#1{\endgraf\endgroup\medbreak}% \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}% \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent \begingroup\obeylines } \def\defvrparsebody#1#2#3#4 {% \parsebodycommon{#1}{#2}{#3}% \spacesplit{#3{#4}}% } % This loses on `@deftp {Data Type} {struct termios}' -- it thinks the % type is just `struct', because we lose the braces in `{struct % termios}' when \spacesplit reads its undelimited argument. Sigh. % \let\deftpparsebody=\defvrparsebody % % So, to get around this, we put \empty in with the type name. That % way, TeX won't find exactly `{...}' as an undelimited argument, and % won't strip off the braces. % \def\deftpparsebody #1#2#3#4 {% \parsebodycommon{#1}{#2}{#3}% \spacesplit{\parsetpheaderline{#3{#4}}}\empty } % Fine, but then we have to eventually remove the \empty *and* the % braces (if any). That's what this does. % \def\removeemptybraces\empty#1\relax{#1} % After \spacesplit has done its work, this is called -- #1 is the final % thing to call, #2 the type name (which starts with \empty), and #3 % (which might be empty) the arguments. % \def\parsetpheaderline#1#2#3{% #1{\removeemptybraces#2\relax}{#3}% }% \def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV % \medbreak % % Define the end token that this defining construct specifies % so that it will exit this group. \def#1{\endgraf\endgroup\medbreak}% \def#2##1 ##2 {\def#4{##1}% \begingroup\obeylines\spacesplit{#3{##2}}}% \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent \begingroup\obeylines\spacesplit{#3{#5}}} % Split up #2 at the first space token. % call #1 with two arguments: % the first is all of #2 before the space token, % the second is all of #2 after that space token. % If #2 contains no space token, all of it is passed as the first arg % and the second is passed as empty. {\obeylines \gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}% \long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{% \ifx\relax #3% #1{#2}{}\else #1{#2}{#3#4}\fi}} % So much for the things common to all kinds of definitions. % Define @defun. % First, define the processing that is wanted for arguments of \defun % Use this to expand the args and terminate the paragraph they make up \def\defunargs #1{\functionparens \sl % Expand, preventing hyphenation at `-' chars. % Note that groups don't affect changes in \hyphenchar. \hyphenchar\tensl=0 #1% \hyphenchar\tensl=45 \ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi% \interlinepenalty=10000 \advance\rightskip by 0pt plus 1fil \endgraf\nobreak\vskip -\parskip\nobreak } \def\deftypefunargs #1{% % Expand, preventing hyphenation at `-' chars. % Note that groups don't affect changes in \hyphenchar. % Use \boldbraxnoamp, not \functionparens, so that & is not special. \boldbraxnoamp \tclose{#1}% avoid \code because of side effects on active chars \interlinepenalty=10000 \advance\rightskip by 0pt plus 1fil \endgraf\nobreak\vskip -\parskip\nobreak } % Do complete processing of one @defun or @defunx line already parsed. % @deffn Command forward-char nchars \def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader} \def\deffnheader #1#2#3{\doind {fn}{\code{#2}}% \begingroup\defname {#2}{#1}\defunargs{#3}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } % @defun == @deffn Function \def\defun{\defparsebody\Edefun\defunx\defunheader} \def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index \begingroup\defname {#1}{\putwordDeffunc}% \defunargs {#2}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } % @deftypefun int foobar (int @var{foo}, float @var{bar}) \def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader} % #1 is the data type. #2 is the name and args. \def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax} % #1 is the data type, #2 the name, #3 the args. \def\deftypefunheaderx #1#2 #3\relax{% \doind {fn}{\code{#2}}% Make entry in function index \begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypefun}% \deftypefunargs {#3}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } % @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar}) \def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader} % \defheaderxcond#1\relax$$$ % puts #1 in @code, followed by a space, but does nothing if #1 is null. \def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi} % #1 is the classification. #2 is the data type. #3 is the name and args. \def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax} % #1 is the classification, #2 the data type, #3 the name, #4 the args. \def\deftypefnheaderx #1#2#3 #4\relax{% \doind {fn}{\code{#3}}% Make entry in function index \begingroup \normalparens % notably, turn off `&' magic, which prevents % at least some C++ text from working \defname {\defheaderxcond#2\relax$$$#3}{#1}% \deftypefunargs {#4}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } % @defmac == @deffn Macro \def\defmac{\defparsebody\Edefmac\defmacx\defmacheader} \def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index \begingroup\defname {#1}{\putwordDefmac}% \defunargs {#2}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } % @defspec == @deffn Special Form \def\defspec{\defparsebody\Edefspec\defspecx\defspecheader} \def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index \begingroup\defname {#1}{\putwordDefspec}% \defunargs {#2}\endgroup % \catcode 61=\other % Turn off change made in \defparsebody } % @defop CATEGORY CLASS OPERATION ARG... % \def\defop #1 {\def\defoptype{#1}% \defopparsebody\Edefop\defopx\defopheader\defoptype} % \def\defopheader #1#2#3{% \dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index \begingroup\defname {#2}{\defoptype{}\putwordon\ #1}% \defunargs {#3}\endgroup % } % @deftypemethod CLASS RETURN-TYPE METHOD ARG... % \def\deftypemethod{% \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader} % % #1 is the class name, #2 the data type, #3 the method name, #4 the args. \def\deftypemethodheader#1#2#3#4{% \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index \begingroup \defname{\defheaderxcond#2\relax$$$#3}{\putwordMethodon\ \code{#1}}% \deftypefunargs{#4}% \endgroup } % @deftypeivar CLASS TYPE VARNAME % \def\deftypeivar{% \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader} % % #1 is the class name, #2 the data type, #3 the variable name. \def\deftypeivarheader#1#2#3{% \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index \begingroup \defname{#3}{\putwordInstanceVariableof\ \code{#1}}% \defvarargs{#3}% \endgroup } % @defmethod == @defop Method % \def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader} % % #1 is the class name, #2 the method name, #3 the args. \def\defmethodheader#1#2#3{% \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index \begingroup \defname{#2}{\putwordMethodon\ \code{#1}}% \defunargs{#3}% \endgroup } % @defcv {Class Option} foo-class foo-flag \def\defcv #1 {\def\defcvtype{#1}% \defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype} \def\defcvarheader #1#2#3{% \dosubind {vr}{\code{#2}}{\putwordof\ #1}% Make entry in var index \begingroup\defname {#2}{\defcvtype\ \putwordof\ #1}% \defvarargs {#3}\endgroup % } % @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME % \def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader} % \def\defivarheader#1#2#3{% \dosubind {vr}{\code{#2}}{\putwordof\ #1}% entry in var index \begingroup \defname{#2}{\putwordInstanceVariableof\ #1}% \defvarargs{#3}% \endgroup } % @defvar % First, define the processing that is wanted for arguments of @defvar. % This is actually simple: just print them in roman. % This must expand the args and terminate the paragraph they make up \def\defvarargs #1{\normalparens #1% \interlinepenalty=10000 \endgraf\nobreak\vskip -\parskip\nobreak} % @defvr Counter foo-count \def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader} \def\defvrheader #1#2#3{\doind {vr}{\code{#2}}% \begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup} % @defvar == @defvr Variable \def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader} \def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index \begingroup\defname {#1}{\putwordDefvar}% \defvarargs {#2}\endgroup % } % @defopt == @defvr {User Option} \def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader} \def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index \begingroup\defname {#1}{\putwordDefopt}% \defvarargs {#2}\endgroup % } % @deftypevar int foobar \def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader} % #1 is the data type. #2 is the name, perhaps followed by text that % is actually part of the data type, which should not be put into the index. \def\deftypevarheader #1#2{% \dovarind#2 \relax% Make entry in variables index \begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypevar}% \interlinepenalty=10000 \endgraf\nobreak\vskip -\parskip\nobreak \endgroup} \def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}} % @deftypevr {Global Flag} int enable \def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader} \def\deftypevrheader #1#2#3{\dovarind#3 \relax% \begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1} \interlinepenalty=10000 \endgraf\nobreak\vskip -\parskip\nobreak \endgroup} % Now define @deftp % Args are printed in bold, a slight difference from @defvar. \def\deftpargs #1{\bf \defvarargs{#1}} % @deftp Class window height width ... \def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader} \def\deftpheader #1#2#3{\doind {tp}{\code{#2}}% \begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup} % These definitions are used if you use @defunx (etc.) % anywhere other than immediately after a @defun or @defunx. % \def\defcvx#1 {\errmessage{@defcvx in invalid context}} \def\deffnx#1 {\errmessage{@deffnx in invalid context}} \def\defivarx#1 {\errmessage{@defivarx in invalid context}} \def\defmacx#1 {\errmessage{@defmacx in invalid context}} \def\defmethodx#1 {\errmessage{@defmethodx in invalid context}} \def\defoptx #1 {\errmessage{@defoptx in invalid context}} \def\defopx#1 {\errmessage{@defopx in invalid context}} \def\defspecx#1 {\errmessage{@defspecx in invalid context}} \def\deftpx#1 {\errmessage{@deftpx in invalid context}} \def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}} \def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}} \def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}} \def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}} \def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}} \def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}} \def\defunx#1 {\errmessage{@defunx in invalid context}} \def\defvarx#1 {\errmessage{@defvarx in invalid context}} \def\defvrx#1 {\errmessage{@defvrx in invalid context}} \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\undefined \newwrite\macscribble \def\scanmacro#1{% \begingroup \newlinechar`\^^M % Undo catcode changes of \startcontents and \doprintindex \catcode`\@=0 \catcode`\\=12 \escapechar=`\@ % Append \endinput to make sure that TeX does not see the ending newline. \toks0={#1\endinput}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \let\xeatspaces\eatspaces \input \jobname.tmp \endgroup } \else \def\scanmacro#1{% \begingroup \newlinechar`\^^M % Undo catcode changes of \startcontents and \doprintindex \catcode`\@=0 \catcode`\\=12 \escapechar=`\@ \let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup} \fi \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? \def\macrolist{} % List of all defined macros in the form % \do\macro1\do\macro2... % Utility routines. % Thisdoes \let #1 = #2, except with \csnames. \def\cslet#1#2{% \expandafter\expandafter \expandafter\let \expandafter\expandafter \csname#1\endcsname \csname#2\endcsname} % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=12\catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \. % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. \def\macrobodyctxt{% \catcode`\~=12 \catcode`\^=12 \catcode`\_=12 \catcode`\|=12 \catcode`\<=12 \catcode`\>=12 \catcode`\+=12 \catcode`\{=12 \catcode`\}=12 \catcode`\@=12 \catcode`\^^M=12 \usembodybackslash} \def\macroargctxt{% \catcode`\~=12 \catcode`\^=12 \catcode`\_=12 \catcode`\|=12 \catcode`\<=12 \catcode`\>=12 \catcode`\+=12 \catcode`\@=12 \catcode`\\=12} % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0% \else \expandafter\parsemargdef \argl;% \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{The name \the\macname\space is reserved}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% % Add the macroname to \macrolist \toks0 = \expandafter{\macrolist\do}% \xdef\macrolist{\the\toks0 \expandafter\noexpand\csname\the\macname\endcsname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \def\unmacro{\parsearg\unmacroxxx} \def\unmacroxxx#1{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist \begingroup \edef\tempa{\expandafter\noexpand\csname#1\endcsname}% \def\do##1{% \def\tempb{##1}% \ifx\tempa\tempb % remove this \else \toks0 = \expandafter{\newmacrolist\do}% \edef\newmacrolist{\the\toks0\expandafter\noexpand\tempa}% \fi}% \def\newmacrolist{}% % Execute macro list to define \newmacrolist \macrolist \global\let\macrolist\newmacrolist \endgroup \else \errmessage{Macro #1 not defined}% \fi } % This makes use of the obscure feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname #1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % Parse the optional {params} list. Set up \paramno and \paramlist % so \defmacro knows what to do. Define \macarg.blah for each blah % in the params list, to be ##N where N is the position in that list. % That gets used by \mbodybackslash (above). % We need to get `macro parameter char #' into several definitions. % The technique used is stolen from LaTeX: let \hash be something % unexpandable, insert that wherever you need a #, and then redefine % it to # just before using the token list produced. % % The same technique is used to protect \eatspaces till just before % the macro is used. \def\parsemargdef#1;{\paramno=0\def\paramlist{}% \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1% \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% % This defines the macro itself. There are six cases: recursive and % nonrecursive macros of zero, one, and many arguments. % Much magic with \expandafter here. % \xdef is used so that macro definitions will survive the file % they're defined in; @include reads the file inside a group. \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifrecursive \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\temp}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup\noexpand\scanmacro{\temp}}% \else % many \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{\egroup\noexpand\scanmacro{\temp}}% \fi \else \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % many \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \expandafter\noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \fi \fi} \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} % \braceorline decides whether the next nonwhitespace character is a % {. If so it reads up to the closing }, if not, it reads the whole % line. Whatever was read is then fed to the next control sequence % as an argument (by \parsebrace or \parsearg) \def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else \expandafter\parsearg \fi \next} % We mant to disable all macros during \shipout so that they are not % expanded by \write. \def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}% \edef\next{\macrolist}\expandafter\endgroup\next} % @alias. \def\alias#1=#2{\gdef#1{#2}} \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's job is to define \lastnode. \def\node{\ENVcheck\parsearg\nodezzz} \def\nodezzz#1{\nodexxx [#1,]} \def\nodexxx[#1,#2]{\gdef\lastnode{#1}} \let\nwnode=\node \let\lastnode=\relax % The sectioning commands (@chapter, etc.) call these. \def\donoderef{% \ifx\lastnode\relax\else \expandafter\expandafter\expandafter\setref{\lastnode}% {Ysectionnumberandtype}% \global\let\lastnode=\relax \fi } \def\unnumbnoderef{% \ifx\lastnode\relax\else \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}% \global\let\lastnode=\relax \fi } \def\appendixnoderef{% \ifx\lastnode\relax\else \expandafter\expandafter\expandafter\setref{\lastnode}% {Yappendixletterandtype}% \global\let\lastnode=\relax \fi } % @anchor{NAME} -- define xref target at arbitrary point. % { \catcode`\@ = 11 % From latex.ltx, to make @anchor truely invisible. \newdimen\@savsk \newcount\@savsf \gdef\@bsphack{\relax \ifhmode \@savsk\lastskip \@savsf\spacefactor \fi } \gdef\@esphack{\relax \ifhmode \spacefactor\@savsf \ifdim\@savsk>\z@ \ignorespaces \fi \fi } \gdef\anchor#1{\@bsphack \setref{#1}{Ynothing}\@esphack} } % \setref{NAME}{SNT} defines a cross-reference point NAME, namely % NAME-title, NAME-pg, and NAME-SNT. Called from \foonoderef. We have % to set \indexdummies so commands such as @code in a section title % aren't expanded. It would be nicer not to expand the titles in the % first place, but there's so many layers that that is hard to do. % \def\setref#1#2{{% \indexdummies \dosetq{#1-title}{Ytitle}% \dosetq{#1-pg}{Ypagenumber}% \dosetq{#1-snt}{#2}% }} % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \def\printedmanual{\ignorespaces #5}% \def\printednodename{\ignorespaces #3}% \setbox1=\hbox{\printedmanual}% \setbox0=\hbox{\printednodename}% \ifdim \wd0 = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax % Use the node name inside the square brackets. \def\printednodename{\ignorespaces #1}% \else % Use the actual chapter/section title appear inside % the square brackets. Use the real section title if we have it. \ifdim \wd1 > 0pt % It is in another manual, so we don't have it. \def\printednodename{\ignorespaces #1}% \else \ifhavexrefs % We know the real title if we have the xref values. \def\printednodename{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printednodename{\ignorespaces #1}% \fi% \fi \fi \fi % % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not % insert empty discretionaries after hyphens, which means that it will % not find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, this % is a loss. Therefore, we give the text of the node name again, so it % is as if TeX is seeing it for the first time. \ifdim \wd1 > 0pt \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}% \else % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\normalturnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % [mynode], [\printednodename],\space % page 3 \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \fi \endgroup} % \dosetq is the interface for calls from other macros % Use \normalturnoffactive so that punctuation chars such as underscore % and backslash work in node names. (\turnoffactive doesn't do \.) \def\dosetq#1#2{% {\let\folio=0% \normalturnoffactive \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}% \iflinks \next \fi }% } % \internalsetq {foo}{page} expands into % CHARACTERS 'xrdef {foo}{...expansion of \Ypage...} % When the aux file is read, ' is the escape character \def\internalsetq #1#2{'xrdef {#1}{\csname #2\endcsname}} % Things to be expanded by \internalsetq \def\Ypagenumber{\folio} \def\Ytitle{\thissection} \def\Ynothing{} \def\Ysectionnumberandtype{% \ifnum\secno=0 \putwordChapter\xreftie\the\chapno % \else \ifnum \subsecno=0 \putwordSection\xreftie\the\chapno.\the\secno % \else \ifnum \subsubsecno=0 % \putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno % \else % \putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno % \fi \fi \fi } \def\Yappendixletterandtype{% \ifnum\secno=0 \putwordAppendix\xreftie'char\the\appendixno{}% \else \ifnum \subsecno=0 \putwordSection\xreftie'char\the\appendixno.\the\secno % \else \ifnum \subsubsecno=0 % \putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno % \else % \putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno % \fi \fi \fi } \gdef\xreftie{'tie} % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Non-3.0. \else \def\linenumber{\the\inputlineno:\space} \fi % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. \def\refx#1#2{% \expandafter\ifx\csname X#1\endcsname\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs \message{\linenumber Undefined cross reference `#1'.}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \csname X#1\endcsname \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. % \def\xrdef#1{\begingroup % Reenable \ as an escape while reading the second argument. \catcode`\\ = 0 \afterassignment\endgroup \expandafter\gdef\csname X#1\endcsname } % Read the last existing aux file, if any. No error if none exists. \def\readauxfile{\begingroup \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other \catcode`\@=\other \catcode`\^=\other % It was suggested to define this as 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % Make the characters 128-255 be printing characters {% \count 1=128 \def\loop{% \catcode\count 1=\other \advance\count 1 by 1 \ifnum \count 1<256 \loop \fi }% }% % The aux file uses ' as the escape (for now). % Turn off \ as an escape so we do not lose on % entries which were dumped with control sequences in their names. % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^ % Reference to such entries still does not work the way one would wish, % but at least they do not bomb out when the aux file is read in. \catcode`\{=1 \catcode`\}=2 \catcode`\%=\other \catcode`\'=0 \catcode`\\=\other % \openin 1 \jobname.aux \ifeof 1 \else \closein 1 \input \jobname.aux \global\havexrefstrue \global\warnedobstrue \fi % Open the new aux file. TeX will close it automatically at exit. \openout\auxfile=\jobname.aux \endgroup} % Footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for info output only. \let\footnotestyle=\comment \let\ptexfootnote=\footnote {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \footnotezzz }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset and anything else that uses % \parseargline fail inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \long\gdef\footnotezzz{\insert\footins\bgroup % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % % Hang the footnote text off the number. \hang \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut \futurelet\next\fo@t } \def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t \else\let\next\f@t\fi \next} \def\f@@t{\bgroup\aftergroup\@foot\let\next} \def\f@t#1{#1\@foot} \def\@foot{\strut\egroup} }%end \catcode `\@=11 % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % \def\setleading#1{% \normalbaselineskip = #1\relax \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would % have adopt a much more difficult approach (putting marks into the main % vertical list for the beginning and end of each change). % \def\|{% % \vadjust can only be used in horizontal mode. \leavevmode % % Append this vertical mode material after the current line in the output. \vadjust{% % We want to insert a rule with the height and depth of the current % leading; that is exactly what \strutbox is supposed to record. \vskip-\baselineskip % % \vadjust-items are inserted at the left edge of the type. So % the \llap here moves out into the left-hand margin. \llap{% % % For a thicker or thinner bar, change the `1pt'. \vrule height\baselineskip width1pt % % This is the space between the bar and the text. \hskip 12pt }% }% } % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt} % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else \closein 1 % Do not bother showing banner with post-v2.7 epsf.tex (available in % doc/epsf.tex until it shows up on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from ftp://tug.org/tex/epsf.tex.} % \def\image#1{% \ifx\epsfbox\undefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is just the usual extra ignored arg for parsing this stuff. \def\imagexxx#1,#2,#3,#4\finish{% \ifx\pdfoutput\undefined % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \begingroup \catcode`\^^M = 5 % in case we're inside an example % If the image is by itself, center it. \ifvmode \nobreak\bigskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \centerline{\epsfbox{#1.eps}}% \bigbreak \else % In the middle of a paragraph, no extra space. \epsfbox{#1.eps}% \fi \endgroup \else \centerline{\pdfimage #1.pdf}% \fi } \message{localization,} % @documentlanguage is usually given very early, just after % @setfilename. If done too late, it may not override everything % properly. Single argument is the language abbreviation. % It would be nice if we could set up a hyphenation file here. % \def\documentlanguage{\parsearg\dodocumentlanguage} \def\dodocumentlanguage#1{% \tex % read txi-??.tex file in plain TeX. % Read the file if it exists. \openin 1 txi-#1.tex \ifeof1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \let\temp = \relax \else \def\temp{\input txi-#1.tex }% \fi \temp \endgroup } \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? In the current directory should work if nowhere else does.} % @documentencoding should change something in TeX eventually, most % likely, but for now just recognize it. \let\documentencoding = \comment % Page size parameters. % \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be so finicky about underfull hboxes, either. \hbadness = 2000 % Following George Bush, just get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = \hsize \divide\emergencystretch by 40 \fi } % Parameters in order: 1) textheight; 2) textwidth; 3) voffset; % 4) hoffset; 5) binding offset; 6) topskip. Then whoever calls us can % set \parskip and call \setleading for \baselineskip. % \def\internalpagesizes#1#2#3#4#5#6{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \pageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \pagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \setleading{13.2pt}% % % If page is nothing but text, make it come out even. \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}% }} % Use @smallbook to reset parameters for 7x9.5 (or so) format. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \setleading{12pt}% % \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}% % \lispnarrowing = 0.3in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \deftypemargin = 0pt \defbodyindent = .5cm % \let\smalldisplay = \smalldisplayx \let\smallexample = \smalllispx \let\smallformat = \smallformatx \let\smalllisp = \smalllispx }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \setleading{12pt}% \parskip = 3pt plus 2pt minus 1pt % \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}% % \tolerance = 700 \hfuzz = 1pt }} % A specific text layout, 24x15cm overall, intended for A4 paper. Top margin % 29mm, hence bottom margin 28mm, nominal side margin 3cm. \def\afourlatex{{\globaldefs = 1 \setleading{13.6pt}% % \afourpaper \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}% % \globaldefs = 0 }} % Use @afourwide to print on European A4 paper in wide format. \def\afourwide{% \afourpaper \internalpagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}% % \globaldefs = 0 } % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \def\pagesizes{\parsearg\pagesizesxxx} \def\pagesizesxxx#1{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{13.2pt}% % \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}% }} % Set default to letter. % \letterpaper \message{and turning on texinfo input format.} % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \catcode`\~=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\+=\other \catcode`\$=\other \def\normaldoublequote{"} \def\normaltilde{~} \def\normalcaret{^} \def\normalunderscore{_} \def\normalverticalbar{|} \def\normalless{<} \def\normalgreater{>} \def\normalplus{+} \def\normaldollar{$} % This macro is used to make a character print one way in ttfont % where it can probably just be output, and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def~{{\tt\char126}} \chardef\hat=`\^ \catcode`\^=\active \def^{{\tt \hat}} \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} % Subroutine for the previous macro. \def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}} \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def<{{\tt \less}} \chardef \gtr=`\> \catcode`\>=\active \def>{{\tt \gtr}} \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar} %\catcode 27=\active %\def^^[{$\diamondsuit$} % Set up an active definition for =, but don't enable it most of the time. {\catcode`\==\active \global\def={{\tt \char 61}}} \catcode`+=\active \catcode`\_=\active % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have \everyjob (or @setfilename) turn them on. % \otherifyactive is called near the end of this file. \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} \catcode`\@=0 % \rawbackslashxx output one backslash character in current font \global\chardef\rawbackslashxx=`\\ %{\catcode`\\=\other %@gdef@rawbackslashxx{\}} % \rawbackslash redefines \ as input to do \rawbackslashxx. {\catcode`\\=\active @gdef@rawbackslash{@let\=@rawbackslashxx }} % \normalbackslash outputs one backslash in fixed width font. \def\normalbackslash{{\tt\rawbackslashxx}} % \catcode 17=0 % Define control-q \catcode`\\=\active % Used sometimes to turn off (effectively) the active characters % even after parsing them. @def@turnoffactive{@let"=@normaldoublequote @let\=@realbackslash @let~=@normaltilde @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let<=@normalless @let>=@normalgreater @let+=@normalplus @let$=@normaldollar} @def@normalturnoffactive{@let"=@normaldoublequote @let\=@normalbackslash @let~=@normaltilde @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let<=@normalless @let>=@normalgreater @let+=@normalplus @let$=@normaldollar} % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. @otherifyactive % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % @gdef@eatinput input texinfo{@fixbackslash} @global@let\ = @eatinput % On the other hand, perhaps the file did not have a `\input texinfo'. Then % the first `\{ in the file would cause an error. This macro tries to fix % that, assuming it is called before the first `\' could plausibly occur. % Also back turn on active characters that might appear in the input % file name, in case not using a pre-dumped format. % @gdef@fixbackslash{% @ifx\@eatinput @let\ = @normalbackslash @fi @catcode`+=@active @catcode`@_=@active } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These look ok in all fonts, so just make them not special. @catcode`@& = @other @catcode`@# = @other @catcode`@% = @other @c Set initial fonts. @textfonts @rm @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%H" @c time-stamp-end: "}" @c End: tk707-0.8/tk707.sh.in0000755000175100017510000000035310142137110010767 00000000000000#!/bin/sh args="" for x in $*; do case $x in -h|-help) args="$args --help";; # tcl/tk catch these options... *) args="$args $x";; esac done prefix=@prefix@ exec_prefix=@exec_prefix@ echo | @bindir@/tk707bin $args tk707-0.8/version.texi0000644000175100017510000000014010142141777011537 00000000000000@set UPDATED 3 November 2004 @set UPDATED-MONTH November 2004 @set EDITION 0.8 @set VERSION 0.8 tk707-0.8/tcl2c.c0000644000175100017510000000535110142137110010325 00000000000000/* * This file is part of tk707. * * Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito * * tk707 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. * * Foobar 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 Foobar; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* Netvideo version 3.2 Written by Ron Frederick Simple hack to translate a Tcl/Tk init file into a C string constant Extra hacks added by mhandley based on idea from vic */ /* * Copyright (c) Xerox Corporation 1992. All rights reserved. * * License is granted to copy, to use, and to make and to use derivative * works for research and evaluation purposes, provided that Xerox is * acknowledged in all documentation pertaining to any such copy or derivative * work. Xerox grants no other licenses expressed or implied. The Xerox trade * name should not be used in any advertising without its written permission. * * XEROX CORPORATION MAKES NO REPRESENTATIONS CONCERNING EITHER THE * MERCHANTABILITY OF THIS SOFTWARE OR THE SUITABILITY OF THIS SOFTWARE * FOR ANY PARTICULAR PURPOSE. The software is provided "as is" without * express or implied warranty of any kind. * * These notices must be retained in any copies of any part of this software. */ #include int main(int argc, char **argv) { int c, n; FILE* in = stdin; FILE* out = stdout; int genstrings = 1; const char* prog = argv[0]; if (argc > 1 && strcmp(argv[1], "-c") == 0) { --argc; ++argv; genstrings = 0; } if (argc < 2) { fprintf(stderr, "Usage: %s [-c] stringname\n", prog); exit(1); } if (genstrings) { fprintf(out, "char %s[] = \"\\\n", argv[1]); while ((c = getc(in)) != EOF) { switch (c) { case '\n': fprintf(out, "\\n\\\n"); break; case '\"': fprintf(out, "\\\""); break; case '\\': fprintf(out, "\\\\"); break; default: putc(c, out); break; } } fprintf(out, "\";\n"); } else { fprintf(out, "static char %s[] = {\n", argv[1]); for (n = 0; (c = getc(in)) != EOF;) fprintf(out, "%u,%c", c, ((++n & 0xf) == 0) ? '\n' : ' '); fprintf(out, "0\n};\n"); } fclose(out); exit(0); /*NOTREACHED*/ } tk707-0.8/texi2help.l0000644000175100017510000001316610142137110011236 00000000000000%{ /* * This file is part of tk707. * * Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito * * tk707 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. * * Foobar 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 Foobar; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* compile commands: flex texi2help.flex gcc lex.yy.c -o texi2help -lfl usage: texi2help < tk707.texi > tk707.help NOTE: translate only a SUBSET of texinfo files into tcl/tk help pages. See texinfo documentation for the input format. See at top of help.tcl for the output format. */ #include #define no_font '%'; int font = no_font; int arg_previous_state = 0; int quote = '\''; #define put(c) printf ("%c", c); %} ID [a-zA-Z_][a-zA-Z_\-0-9]* %x arg skip_bloc skip_braces example format item %% %{ /* -------------------------------------------------------------- * specials * --------------------------------------------------------------*/ %} "@@" { printf ("@@ "); } "@{" { printf ("{"); } "@}" { printf ("}"); } %{ /* -------------------------------------------------------------- * titles * --------------------------------------------------------------*/ %} "@settitle".* { printf ("@C0@t%s@t\n", yytext+10); } "@chapter"[ \t][ \t]*"Install".* {} "@chapter".* { printf ("@C1@t%s@t\n", yytext+9); } "@appendix".* { printf ("@C1@t%s@t\n", yytext+10); } "@section".* { printf ("@C2@t%s@t\n", yytext+9); } "@subsection".* { printf ("@C2@t%s@t\n", yytext+12); } %{ /* -------------------------------------------------------------- * @code{...}, @strong{}, @var{}, @math{}, @cite{}, @dfn{}, * @url{}, @email{}, @samp{}, @file{} * @pxref{...} * --------------------------------------------------------------*/ %} "@"("key"|"code"|"samp"|"url"|"email"|"strong")"{" { /* in bold */ font = 'c'; arg_previous_state = YYSTATE; BEGIN(format); } "@"("emph"|"var"|"cite"|"dfn")"{" { /* highlight */ font = 'h'; arg_previous_state = YYSTATE; BEGIN(format); } "@"("math")"{" { /* in italic */ font = 'i'; arg_previous_state = YYSTATE; BEGIN(format); } "}" { /* end of arg */ font = no_font; BEGIN(arg_previous_state); } [a-zA-Z][a-zA-Z]* { printf("@%c%s", font, yytext_ptr); } [ \t][ \t]* { printf("%s", yytext_ptr); } \n { put('\n'); } . { printf("@%c%c", font, *yytext_ptr); } %{ /* -------------------------------------------------------------- * @code{...}, @strong{}, @var{}, @math{}, @cite{}, @dfn{}, * @url{}, @email{}, @samp{}, @file{} * @pxref{...} * --------------------------------------------------------------*/ %} "@file{" { /* in quotes */ font = quote; printf("`"); arg_previous_state = YYSTATE; BEGIN(arg); } "@footnote{" { /* in (...) */ font = ')'; printf (" ("); arg_previous_state = YYSTATE; BEGIN(arg); } "}" { /* end of arg */ printf("'"); font = no_font; BEGIN(arg_previous_state); } [^}] { printf("%s", yytext_ptr); } %{ /* -------------------------------------------------------------- * example * --------------------------------------------------------------*/ %} "@example".*\n { arg_previous_state = YYSTATE; BEGIN(example); font = 'c'; } "@end"[ \t]([ \t]*)"example".* { BEGIN(arg_previous_state); } [a-zA-Z][a-zA-Z]* { printf("@%c%s", font, yytext_ptr); } [ \t][ \t]* { printf("%s", yytext_ptr); } \n { put('\n'); } . { printf("@%c%c", font, *yytext_ptr); } %{ /* -------------------------------------------------------------- * itemize and table * --------------------------------------------------------------*/ %} "@item"[ \t]*\n { printf ("\n\t* "); } "@item"[ \t].*\n { printf ("\n\t%s", yytext_ptr+6); } "@"("itemize"|"table").*\n {} "@end"[ \t]([ \t]*)("itemize"|"table").*\n {} %{ /* -------------------------------------------------------------- * skip * --------------------------------------------------------------*/ %} "@c"\n {} "\\input"[ \t]([ \t]*)"texinfo".*\n {} "@"("c"|"cindex"|"setfilename"|"setchapternewpage"|"include")" ".*\n {} "@"("finalout"|"node"|"unnumbered"|"printindex"|"shortcontents"|"contents"|"bye").*\n {} "@"("ifinfo"|"titlepage"|"menu").*\n { arg_previous_state = YYSTATE; BEGIN(skip_bloc); } "@end"[ \t]([ \t]*)("ifinfo"|"titlepage"|"menu").*\n { BEGIN(arg_previous_state); } . {} \n {} "@"("xref"|"pxref")"{" { arg_previous_state = YYSTATE; BEGIN(skip_braces); } [^}]* {} "}" { BEGIN(arg_previous_state); } %% /* -------------------------------------------------------------- * main * --------------------------------------------------------------*/ int yywrap () { return 1; } int main() { yyin = stdin; yylex(); return 0; } tk707-0.8/util707.c0000644000175100017510000003561710142137110010541 00000000000000/* * This file is part of tk707. * * Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito * * tk707 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. * * Foobar 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 Foobar; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "util707.h" int seq707_context_init(seq707_context_t **ctxp) { if( (*ctxp=(seq707_context_t*)calloc(1, sizeof(seq707_context_t))) == NULL ) return -1; (*ctxp)->ppq = PPQ; (*ctxp)->currticktime = 0; (*ctxp)->tempo = 500000; (*ctxp)->midichannel = DEF_MIDICHANNEL; return 0; } int usage(void) { fprintf(stderr, "\nusage:\ttk707 [options]\nwhere option:\n"); fprintf(stderr, " -l provides list of ports\n"); fprintf(stderr, " -p x:y specifies x:y as port to use, e.g. 64:0\n\n"); #ifdef TODO -h -l List the available sound ports -p port -colormap -display -geometry -name Name to use for application -sync Use synchronous mode for display server -visual -use Id of window in which to embed application -- Pass all remaining arguments through to script #endif /* TODO */ #ifdef TO_CLEAN printf("NOTE:\n"); printf(" Setting ALSA_OUT_PORT=x:y allows tk707 to run without -p option.\n"); printf(" Try \"export ALSA_OUT_PORT=x:y\" in .profile (or /etc/profile),\n"); printf("where x:y is a port generated with -l option.\n\n"); #endif /* TO_CLEAN */ return 0; } int set_client_port(char *portdesc, int *client, int *port) { char *astr; char *cp; snd_seq_addr_t *addr; snd_seq_addr_t *ap; int a[ADDR_PARTS]; int count, naddr; int i; addr = (snd_seq_addr_t*)calloc((unsigned)(sizeof(snd_seq_addr_t)*strlen(portdesc)), 1); if( !addr ) return -1; naddr = 0; ap = addr; for(astr=strtok(portdesc,SEP);astr;astr=strtok(NULL,SEP)) { for(cp=astr,count=0;cp && *cp;cp++) { if( count < ADDR_PARTS ) a[count++] = atoi(cp); cp = strchr(cp, ':'); if( cp == NULL ) break; } switch(count) { case 2: ap->client = a[0]; ap->port = a[1]; break; default: printf("Addresses in %d parts not supported yet\n", count); break; } ap++; naddr++; } *client = a[0]; *port = a[1]; return 0; } #ifdef HAVE_ALSA9 /* ALSA 0.9.0 API */ int get_clientsports(char ***cpinfo) { snd_seq_client_info_t *cinfo; snd_seq_port_info_t *pinfo; snd_seq_t *handle; int client, port, cp, i; char buf[128]; if (snd_seq_open(&handle, "hw", SND_SEQ_OPEN_DUPLEX, 0) < 0) { fprintf(stderr, "Couldn't open sequence. Error was:\n%s\n", snd_strerror(errno)); return -1; } snd_seq_client_info_alloca(&cinfo); snd_seq_port_info_alloca(&pinfo); cp = 0; printf("Port %-30.30s %s\n", "Client name", "Port name"); snd_seq_client_info_set_client(cinfo, 0); while (snd_seq_query_next_client(handle, cinfo) >= 0) { client = snd_seq_client_info_get_client(cinfo); snd_seq_port_info_set_client(pinfo, client); snd_seq_port_info_set_port(pinfo, -1); while (snd_seq_query_next_port(handle, pinfo) >= 0) { unsigned int cap; cap = (SND_SEQ_PORT_CAP_SUBS_WRITE|SND_SEQ_PORT_CAP_WRITE); if ((snd_seq_port_info_get_capability(pinfo) & cap) == cap) cp++; } } if( (*cpinfo=(char**)calloc(cp + 1, sizeof(char*))) == NULL ) { fprintf(stderr, "Couldn't get memory for client:port info\n"); return 0; } /* Now do it again and add each client:port */ cp = 0; snd_seq_client_info_set_client(cinfo, 0); while (snd_seq_query_next_client(handle, cinfo) >= 0) { client = snd_seq_client_info_get_client(cinfo); snd_seq_port_info_set_client(pinfo, client); snd_seq_port_info_set_port(pinfo, -1); while (snd_seq_query_next_port(handle, pinfo) >= 0) { unsigned int cap; port = snd_seq_port_info_get_port(pinfo); cap = (SND_SEQ_PORT_CAP_SUBS_WRITE|SND_SEQ_PORT_CAP_WRITE); if ((snd_seq_port_info_get_capability(pinfo) & cap) == cap) { memset(buf, 0, sizeof(buf)); sprintf(buf, "%3d:%-3d %-30.30s %s\n", client, port, snd_seq_client_info_get_name(cinfo), snd_seq_port_info_get_name(pinfo)); (*cpinfo)[cp] = strdup(buf); cp++; } } } /* sprintf(buf, "END END"); (*cpinfo)[cp] = strdup(buf); return cp + 1; */ return cp; } #else /* !HAVE_ALSA9 */ int get_clientsports(char ***cpinfo) { snd_seq_client_info_t cinfo; snd_seq_port_info_t pinfo; snd_seq_system_info_t sysinfo; snd_seq_t *handle; int client, port, cp, i; char buf[128]; if( snd_seq_open(&handle, SND_SEQ_OPEN) < 0 ) { fprintf(stderr, "Couldn't open sequence. Error was:\n%s\n", snd_strerror(errno)); return -1; } if( snd_seq_system_info(handle, &sysinfo) < 0 ) { fprintf(stderr, "Couldn't get sequencer information. Error was:\n%s\n", snd_strerror(errno)); return -1; } cp = 0; fprintf(stderr, "Port %-30.30s %s\n", "Client name", "Port name"); /* First just count how many string pointers we'll need */ for(client=0;clientdest_client, ctxp->dest_port); snd_seq_ev_set_source(ev, ctxp->local_port); set_event_time(ctxp, ev, 0); } void set_event_time(seq707_context_t *ctxp, snd_seq_event_t *ev, unsigned int currtime) { if( currtime == 0 ) currtime = ctxp->currticktime; snd_seq_ev_schedule_tick(ev, ctxp->dest_queue, 0, currtime); /* printf("Set event time to %u\n", currtime); */ } void alsa_timer_start(seq707_context_t *ctxp) { snd_seq_start_queue(ctxp->handle, ctxp->dest_queue, NULL); } void alsa_timer_stop(seq707_context_t *ctxp) { snd_seq_event_t ev; set_event_header(ctxp, &ev); snd_seq_stop_queue(ctxp->handle, ctxp->dest_queue, &ev); } void alsa_timer_cont(seq707_context_t *ctxp) { snd_seq_event_t ev; set_event_header(ctxp, &ev); snd_seq_continue_queue(ctxp->handle, ctxp->dest_queue, &ev); } void do_noteon(seq707_context_t *ctxp, int chan, int pitch, int vol) { int written; snd_seq_event_t ev; snd_seq_ev_clear(&ev); set_event_header(ctxp, &ev); snd_seq_ev_set_noteon(&ev, chan, pitch, vol); written = snd_seq_event_output(ctxp->handle, &ev); if (written < 0) { printf("written = %i (%s)\n", written, snd_strerror(written)); exit(1); } /* printf("wrote %d\n", written); */ } /* Send a note on event to the 2nd queue */ void do_noteon_rt(seq707_context_t *ctxp, int chan, int pitch, int vol) { int written; snd_seq_event_t ev; snd_seq_ev_clear(&ev); snd_seq_ev_set_dest(&ev, ctxp->dest_client, ctxp->dest_port); snd_seq_ev_set_source(&ev, ctxp->local_port); snd_seq_ev_schedule_tick(&ev, ctxp->dest_queue, 0, 0); snd_seq_ev_set_noteon(&ev, chan, pitch, vol); written = snd_seq_event_output(ctxp->handle, &ev); if (written < 0) { printf("written = %i (%s)\n", written, snd_strerror(written)); exit(1); } /* printf("wrote %d to chan %d\n", written, chan); */ } void do_noteoff(seq707_context_t *ctxp, int chan, int pitch, int vol) { int written; snd_seq_event_t ev; snd_seq_ev_clear(&ev); set_event_header(ctxp, &ev); snd_seq_ev_set_noteoff(&ev, chan, pitch, vol); written = snd_seq_event_output(ctxp->handle, &ev); if (written < 0) { printf("written = %i (%s)\n", written, snd_strerror(written)); exit(1); } } /* Send a note off event to the 2nd queue */ void do_noteoff_rt(seq707_context_t *ctxp, int chan, int pitch, int vol) { int written; snd_seq_event_t ev; snd_seq_ev_clear(&ev); snd_seq_ev_set_dest(&ev, ctxp->dest_client, ctxp->dest_port); snd_seq_ev_set_source(&ev, ctxp->local_port); snd_seq_ev_schedule_tick(&ev, ctxp->dest_queue, 0, old_tick_per_note_on); snd_seq_ev_set_noteoff(&ev, chan, pitch, vol); written = snd_seq_event_output(ctxp->handle, &ev); if (written < 0) { printf("written = %i (%s)\n", written, snd_strerror(written)); exit(1); } } snd_seq_event_t * wait_for_event(seq707_context_t *ctxp) { int left; snd_seq_event_t *input_event; /* read event - blocked until any event is read */ left = snd_seq_event_input(ctxp->handle, &input_event); if (left < 0) { printf("alsa_sync error!:%s\n", snd_strerror(left)); return NULL; } return input_event; } int do_tempo_set(seq707_context_t *ctxp, unsigned int val) { snd_seq_event_t ev; memset(&ev, 0, sizeof(snd_seq_event_t)); ev.queue = SND_SEQ_QUEUE_DIRECT; ev.type = SND_SEQ_EVENT_TEMPO; ev.dest.client = SND_SEQ_CLIENT_SYSTEM; ev.dest.port = SND_SEQ_PORT_SYSTEM_TIMER; ev.data.queue.queue = ctxp->dest_queue; ev.data.queue.param.value = val; return snd_seq_event_output(ctxp->handle, &ev); } int alsa_setup(TK707 *tk707, char *portdesc, char *in_portdesc) { int c, res, myport, ctrlport, iport, dest_queue, ctrl_queue, input_queue, clientno, portno, ppq; int i, bank, pattern; snd_seq_t *seq_handle = NULL; snd_seq_t *ctrl_handle = NULL; snd_seq_t *input_handle = NULL; #ifdef HAVE_ALSA9 snd_seq_queue_tempo_t *tempo; #else snd_seq_queue_tempo_t tempo; #endif /* Initialise contexts for pattern & control outputs */ if( seq707_context_init(&(tk707->ctxp_p)) < 0 ) return -1; if( seq707_context_init(&(tk707->ctxp_c)) < 0 ) return -1; if( seq707_context_init(&(tk707->ctxp_i)) < 0 ) return -1; /* Obtain handles to sequencers */ #ifdef HAVE_ALSA9 if( snd_seq_open(&(tk707->ctxp_p->handle), "hw", SND_SEQ_OPEN_DUPLEX, SND_SEQ_NONBLOCK) < 0 ) return -1; if( snd_seq_open(&(tk707->ctxp_c->handle), "hw", SND_SEQ_OPEN_DUPLEX, SND_SEQ_NONBLOCK) < 0 ) return -1; if( snd_seq_open(&(tk707->ctxp_i->handle), "hw", SND_SEQ_OPEN_DUPLEX, SND_SEQ_NONBLOCK) < 0 ) return -1; #else if( snd_seq_open(&(tk707->ctxp_p->handle), SND_SEQ_OPEN) < 0 ) return -1; if( snd_seq_open(&(tk707->ctxp_c->handle), SND_SEQ_OPEN) < 0 ) return -1; if( snd_seq_open(&(tk707->ctxp_i->handle), SND_SEQ_OPEN) < 0 ) return -1; #endif seq_handle = tk707->ctxp_p->handle; ctrl_handle = tk707->ctxp_c->handle; input_handle = tk707->ctxp_i->handle; /* Set non-blocking mode for the queues */ #ifndef HAVE_ALSA9 if( snd_seq_block_mode(seq_handle, 0) < 0 ) return -1; if( snd_seq_block_mode(ctrl_handle, 0) < 0 ) return -1; if( snd_seq_block_mode(input_handle, 0) < 0 ) return -1; #endif /* Textual names for clients */ snd_seq_set_client_name(seq_handle, "TK707"); snd_seq_set_client_name(ctrl_handle, "TK707control"); snd_seq_set_client_name(input_handle, "TK707input"); /* Create the ports */ if( (myport=snd_seq_create_simple_port(seq_handle, "Port 0", SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_READ, SND_SEQ_PORT_TYPE_MIDI_GENERIC)) < 0 ) { return -1; } if( (ctrlport=snd_seq_create_simple_port(ctrl_handle, "Port 1", SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_READ, SND_SEQ_PORT_TYPE_MIDI_GENERIC)) < 0 ) { return -1; } if( (iport=snd_seq_create_simple_port(input_handle, "Port 2", SND_SEQ_PORT_CAP_READ, SND_SEQ_PORT_TYPE_MIDI_GENERIC)) < 0 ) { return -1; } tk707->ctxp_p->local_port = myport; tk707->ctxp_c->local_port = ctrlport; tk707->ctxp_i->local_port = iport; /* Allocate destination queues */ if( (dest_queue=snd_seq_alloc_queue(seq_handle)) < 0 ) return -1; if( (ctrl_queue=snd_seq_alloc_queue(ctrl_handle)) < 0 ) return -1; if( (input_queue=snd_seq_alloc_queue(input_handle)) < 0 ) return -1; tk707->ctxp_p->dest_queue = dest_queue; tk707->ctxp_c->dest_queue = ctrl_queue; tk707->ctxp_i->dest_queue = input_queue; /* No more _i's */ /* Set client:port from port descriptor (pattern & control use same) */ if( set_client_port(portdesc, &clientno, &portno) < 0 ) return -1; tk707->ctxp_p->dest_client = clientno; tk707->ctxp_p->dest_port = portno; tk707->ctxp_c->dest_client = clientno; tk707->ctxp_c->dest_port = portno; /* Connect the queues */ if( snd_seq_connect_to(seq_handle, myport, clientno, portno) < 0 ) return -1; if( snd_seq_connect_to(ctrl_handle, ctrlport, clientno, portno) < 0 ) return -1; /* Set io buffer characteristics */ if( snd_seq_set_client_pool_output(seq_handle, WRITE_POOL_SIZE) < 0 || snd_seq_set_client_pool_input(seq_handle, READ_POOL_SIZE) < 0 || snd_seq_set_client_pool_output_room(seq_handle, WRITE_POOL_SPACE) < 0 ) { return -1; } if( snd_seq_set_client_pool_output(ctrl_handle, WRITE_POOL_SIZE) < 0 || snd_seq_set_client_pool_input(ctrl_handle, READ_POOL_SIZE) < 0 || snd_seq_set_client_pool_output_room(ctrl_handle, WRITE_POOL_SPACE) < 0 ) { return -1; } /* Set pattern queue tempo. Control queue doesn't seem to need it (yet?) */ #ifdef HAVE_ALSA9 snd_seq_queue_tempo_alloca(&tempo); if (snd_seq_get_queue_tempo(seq_handle, dest_queue, tempo) < 0 ) return -1; ppq = tk707->ctxp_p->ppq; if (snd_seq_queue_tempo_get_ppq(tempo) != ppq ) { snd_seq_queue_tempo_set_ppq(tempo, ppq); if( snd_seq_set_queue_tempo(seq_handle, dest_queue, tempo) < 0 ) { return -1; } } tk707->ctxp_p->tempo = snd_seq_queue_tempo_get_tempo(tempo); #else if( snd_seq_get_queue_tempo(seq_handle, dest_queue, &tempo) < 0 ) return -1; ppq = tk707->ctxp_p->ppq; if( tempo.ppq != ppq ) { tempo.ppq = ppq; if( snd_seq_set_queue_tempo(seq_handle, dest_queue, &tempo) < 0 ) { return -1; } } tk707->ctxp_p->tempo = tempo.tempo; #endif return 0; } tk707-0.8/util707.h0000644000175100017510000002650310142137110010540 00000000000000/* * This file is part of tk707. * * Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito * * tk707 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. * * Foobar 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 Foobar; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef __UTIL707_H_ #define __UTIL707_H_ #include #include #include #ifdef HAVE_CONFIG_H #include "config.h" #endif /* HAVE_CONFIG_H */ #ifdef HAVE_ALSA_ASOUNDLIB_H #include #elif HAVE_LIBASOUND #include #endif #if (SND_LIB_MAJOR == 0) && (SND_LIB_MINOR >= 9) #define HAVE_ALSA9 #endif #if (SND_LIB_MAJOR > 0) #define HAVE_ALSA9 #endif #ifndef HAVE_BOOL typedef int bool; static const bool false = 0; static const bool true = 1; #endif extern int usage(void); #ifdef TRY_NEW_DEFINITION /* The discrete time grid admits an unique * parameter: the ratio note-on / note-off per a thirty-second. * Since the note-on is a hit in with percussions, the rest of * the grid is determined. */ #define thirty_second_note_on_ratio 5 /* customize the ratio ! * ex1: ratio=3 * => 1/3 note-on * 2/3 note-off, for a thirty-second * ex2: ratio=16 * => 1/16 note-on, 15/16 note-off * ex3: ratio=1 * => 100 % note-on; not for percussions... */ #define tick_per_note_on 3 /* how long, in ticks, the note is on. * DO NOT change ! because we may divide * a quarter by 4, 8, 3 and 6... */ #define tick_per_thirty_second thirty_second_note_on_ratio*tick_per_note_on #define tick_per_sixtennth 2*tick_per_thirty_second #define tick_per_eighth 4*tick_per_thirty_second #define tick_per_quarter 8*tick_per_thirty_second /* * steps are in two parts: * - a note-on part, which have a duration independant of the scale (a hit) * - a note-off part, which depend on the scale: */ static const int tick_per_step_off_scale [4] = { /* scale(0): 1 step = quarter/4 */ tick_per_quarter/4 - tick_per_note_on, /* scale(1): 1 step = quarter/8 */ tick_per_quarter/8 - tick_per_note_on, /* scale(2): 1 step = quarter/3 */ tick_per_quarter/3 - tick_per_note_on, /* scale(3): 1 step = quarter/6 */ tick_per_quarter/6 - tick_per_note_on }; #define old_tick_per_quarter tick_per_quarter #define old_tick_per_sixtennth tick_per_sixtennth #define old_tick_per_step_off_scale tick_per_step_off_scale #define old_tick_per_note_on tick_per_note_on #else static const int old_tick_per_quarter = 120; /* ak ratio = 5 */ static const int old_tick_per_sixtennth = 30; static const int old_tick_per_note_on = 8; static const int old_tick_per_step_off_scale [4] = { 22, 7, 32, 12 }; #endif /* TRY_NEW_DEFINITION */ #define tick_flam_duration 1 /* approximatively 1/(3*4) of a thirty_second * tick duration on a Roland 727 */ #define ADDR_PARTS 4 /* Number of part in a port description addr 1:2:3:4 */ #define SEP ", \t" /* Separators for port description */ /* event pool size */ #define WRITE_POOL_SIZE 200 #define WRITE_POOL_SPACE 10 #define READ_POOL_SIZE 10 /* we need read pool only for echoing */ #define PPQ 120 #define DEF_MIDICHANNEL 9 struct seq707_context { snd_seq_t *handle; /* The snd_seq handle to /dev/snd/seq */ int ppq; int local_port; /*, ctrl_port;*/ int dest_queue; /*, ctrl_queue;*/ int dest_client; int dest_port; unsigned int currticktime; unsigned int tempo; int midichannel; char *portdesc; /* Later, input may differ from ouput portdesc? */ } ; typedef struct seq707_context seq707_context_t; /* Properties of a note */ typedef enum note_properties_tag { null_property = 0, fla_property = 1 << 0, /* control the velocity */ weak_accent_velocity = 1 << 1, /* increases weakly velocity */ strong_accent_velocity = 1 << 2, /* increases strongly velocity */ zero_velocity = 1 << 3, /* defines the set * of bits related to * the velocity control */ velocity_field = zero_velocity | weak_accent_velocity | strong_accent_velocity, _last_property = 1 << (sizeof(int)*8-1) } note_properties_t; typedef struct mel_tag { int dur; unsigned short type; unsigned short vol; int note; note_properties_t prop; struct mel_tag *next; } MidiElement; extern void el_set_note (MidiElement*, int); extern int el_get_note (MidiElement*); extern void el_set_properties (MidiElement*, int); extern int el_get_properties (MidiElement*); /* get/set/unset fla */ extern bool have_fla (MidiElement*); extern void el_set_fla (MidiElement*); extern void el_unset_fla (MidiElement*); /* get/set velocity */ extern bool have_weak_accent (MidiElement*); extern bool have_strong_accent (MidiElement*); extern bool have_zero_velocity (MidiElement*); extern void el_set_default_velocity (MidiElement*); /* unset zero or accents */ extern void el_set_weak_accent_velocity (MidiElement*); extern void el_set_strong_accent_velocity (MidiElement*); extern void el_set_zero_velocity (MidiElement*); typedef struct pattern_tag { MidiElement **mel; int length; /* Number of steps in pattern */ int scale; /* Scale for pattern */ int shuffle; /* Flam interval, in range 0..4 */ int flam; /* Shuffle interval, in range 0..4 */ char* comment; /* string comment */ } PatternElement; void pattern_set_length (PatternElement *pat, int value); int pattern_get_length (PatternElement *pat); void pattern_set_scale (PatternElement *pat, int value); int pattern_get_scale (PatternElement *pat); void pattern_set_flam (PatternElement *pat, int value); int pattern_get_flam (PatternElement *pat); void pattern_set_shuffle(PatternElement *pat, int value); int pattern_get_shuffle(PatternElement *pat); void pattern_set_comment(PatternElement *pat, char* comment); char* pattern_get_comment(PatternElement *pat); typedef struct { PatternElement *ptree[3]; int mbank; PatternElement *patbuf; int volumes[12]; /* Current volume fader settings */ int volmap [16]; /* Map of instruments to their volume levels */ int sounds [16]; /* Map of instruments to their midi sounds */ bool have_delay [16]; /* Sound property: note is shortly off */ seq707_context_t *ctxp_p; /* Pattern output context */ seq707_context_t *ctxp_c; /* Control output context */ seq707_context_t *ctxp_i; /* Control input context */ } TK707; extern TK707 *tk707; extern int pattern_el_init(PatternElement**); extern int pattern_el_clearall(PatternElement*); extern int pattern_el_clear(int,int); extern void step_el_clear(MidiElement**); extern MidiElement* step_get_el(PatternElement *tree, int bank_id, int pattern_id, int step, int note); extern MidiElement *step_add_el(PatternElement*,int,int,int,int); extern MidiElement *step_new_el(void); extern MidiElement *el_get_el_by_note(MidiElement*,int); extern int el_remove_listel(MidiElement**,MidiElement*); extern int el_delete_listel(MidiElement**,MidiElement*); extern void el_get_step_elements(MidiElement**,int instrs[17]); extern void el_get_step_properties(MidiElement**, int props[17]); extern void pattern_display_els(PatternElement*,int,int); extern int el_copy_pattern(PatternElement*,PatternElement*,int); extern int seq707_context_init(seq707_context_t**); extern int set_client_port(char*,int*,int*); extern void alsa_timer_start(seq707_context_t*); extern void alsa_timer_stop(seq707_context_t*); extern void alsa_timer_cont(seq707_context_t*); extern void set_event_header(seq707_context_t*,snd_seq_event_t*); extern void do_noteon_rt(seq707_context_t*,int,int,int); extern void do_noteoff_rt(seq707_context_t*,int,int,int); extern void do_noteon(seq707_context_t*,int,int,int); extern void do_noteoff(seq707_context_t*,int,int,int); extern int do_tempo_set(seq707_context_t*,unsigned int); extern void alsa_sync(seq707_context_t*); extern snd_seq_event_t *wait_for_event(seq707_context_t*); extern void set_event_time(seq707_context_t*,snd_seq_event_t*,unsigned int); extern int alsa_setup(TK707*,char*,char*); extern int get_clientsports(char ***cpinfo); /* * macros for reducing the code size */ #define tk707_get_int1_macro(interp,objc,objv,x1) \ { \ if( (objc) != 2 ) { \ Tcl_SetResult((interp), "Wrong #args", TCL_VOLATILE); \ return TCL_ERROR; \ } \ if( Tcl_GetIntFromObj((interp), (objv)[1], &(x1)) != TCL_OK ) \ return TCL_ERROR; \ } #define tk707_get_int2_macro(interp,objc,objv,x1,x2) \ { \ if( (objc) != 3 ) { \ Tcl_SetResult((interp), "Wrong #args", TCL_VOLATILE); \ return TCL_ERROR; \ } \ if( Tcl_GetIntFromObj((interp), (objv)[1], &(x1)) != TCL_OK ) \ return TCL_ERROR; \ if( Tcl_GetIntFromObj((interp), (objv)[2], &(x2)) != TCL_OK ) \ return TCL_ERROR; \ } #define tk707_get_int3_macro(interp,objc,objv,x1,x2,x3) \ { \ if( (objc) != 4 ) { \ Tcl_SetResult((interp), "Wrong #args", TCL_VOLATILE); \ return TCL_ERROR; \ } \ if( Tcl_GetIntFromObj((interp), (objv)[1], &(x1)) != TCL_OK ) \ return TCL_ERROR; \ if( Tcl_GetIntFromObj((interp), (objv)[2], &(x2)) != TCL_OK ) \ return TCL_ERROR; \ if( Tcl_GetIntFromObj((interp), (objv)[3], &(x3)) != TCL_OK ) \ return TCL_ERROR; \ } #define tk707_get_int4_macro(interp,objc,objv,x1,x2,x3,x4) \ { \ if( (objc) != 5 ) { \ Tcl_SetResult((interp), "Wrong #args", TCL_VOLATILE); \ return TCL_ERROR; \ } \ if( Tcl_GetIntFromObj((interp), (objv)[1], &(x1)) != TCL_OK ) \ return TCL_ERROR; \ if( Tcl_GetIntFromObj((interp), (objv)[2], &(x2)) != TCL_OK ) \ return TCL_ERROR; \ if( Tcl_GetIntFromObj((interp), (objv)[3], &(x3)) != TCL_OK ) \ return TCL_ERROR; \ if( Tcl_GetIntFromObj((interp), (objv)[4], &(x4)) != TCL_OK ) \ return TCL_ERROR; \ } #define tk707_get_int5_macro(interp,objc,objv,x1,x2,x3,x4,x5) \ { \ if( (objc) != 6 ) { \ Tcl_SetResult((interp), "Wrong #args", TCL_VOLATILE); \ return TCL_ERROR; \ } \ if( Tcl_GetIntFromObj((interp), (objv)[1], &(x1)) != TCL_OK ) \ return TCL_ERROR; \ if( Tcl_GetIntFromObj((interp), (objv)[2], &(x2)) != TCL_OK ) \ return TCL_ERROR; \ if( Tcl_GetIntFromObj((interp), (objv)[3], &(x3)) != TCL_OK ) \ return TCL_ERROR; \ if( Tcl_GetIntFromObj((interp), (objv)[4], &(x4)) != TCL_OK ) \ return TCL_ERROR; \ if( Tcl_GetIntFromObj((interp), (objv)[5], &(x5)) != TCL_OK ) \ return TCL_ERROR; \ } #define tk707_get_int2str1_macro(interp,objc,objv,x1,x2,x3) \ { \ if( (objc) != 4 ) { \ Tcl_SetResult((interp), "Wrong #args", TCL_VOLATILE); \ return TCL_ERROR; \ } \ if( Tcl_GetIntFromObj((interp), (objv)[1], &(x1)) != TCL_OK ) \ return TCL_ERROR; \ if( Tcl_GetIntFromObj((interp), (objv)[2], &(x2)) != TCL_OK ) \ return TCL_ERROR; \ if( ((x3)=Tcl_GetStringFromObj((objv)[3], NULL)) == NULL ) \ return TCL_ERROR; \ } #endif /* __UTIL707_H_ */ tk707-0.8/element707.c0000644000175100017510000002213010142137110011177 00000000000000/* * This file is part of tk707. * * Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito * * tk707 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. * * Foobar 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 Foobar; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "util707.h" #include /* strdup() */ /* * get/set pattern properties */ void pattern_set_length(PatternElement *pat, int value) { pat -> length = value; } int pattern_get_length(PatternElement *pat) { return pat -> length; } void pattern_set_scale(PatternElement *pat, int value) { pat -> scale = value; } int pattern_get_scale(PatternElement *pat) { return pat -> scale; } void pattern_set_flam(PatternElement *pat, int value) { pat -> flam = value; } int pattern_get_flam(PatternElement *pat) { return pat -> flam; } void pattern_set_shuffle(PatternElement *pat, int value) { pat -> shuffle = value; } int pattern_get_shuffle(PatternElement *pat) { return pat -> shuffle; } void pattern_set_comment(PatternElement *pat, char *comment) { if (pat -> comment) { free(pat -> comment); } pat -> comment = strdup(comment); } char* pattern_get_comment(PatternElement *pat) { return pat -> comment; } int pattern_el_init(PatternElement **tree) { MidiElement **temp; int i, j, patterns; patterns = 4*16; /* 4 banks of 16 patterns */ if( (*tree=(PatternElement*)calloc(patterns, sizeof(PatternElement))) == NULL ) { return -1; } for(j=0;jmel = temp; pattern_set_length (*tree + j, 16); pattern_set_scale (*tree + j, 0); pattern_set_flam (*tree + j, 2); pattern_set_shuffle(*tree + j, 0); pattern_set_comment(*tree + j, ""); } return 0; } /* * Clear out all MidiElements in patterns from an existing pattern tree. */ int pattern_el_clearall(PatternElement *tree) { int i, j, patterns; patterns = 4*16; /* 4 banks of 16 patterns */ if( !tree ) return -1; for(j=0;jmel + i) ); } pattern_set_length (tree + j, 16); pattern_set_scale (tree + j, 0); pattern_set_flam (tree + j, 2); pattern_set_shuffle(tree + j, 0); pattern_set_comment(tree + j, ""); } return 0; } void step_el_clear(MidiElement **base) { MidiElement *temp, *next; if( ! *base ) return; next = *base; while( next->next != NULL ) { temp = next; next = next->next; free(temp); } if( next ) { free(next); } *base = NULL; return; } MidiElement * step_new_el(void) { MidiElement *temp; if( (temp=(MidiElement*)calloc(1, sizeof(MidiElement))) == NULL ) { return NULL; } /* Any default step settings here */ temp->next = NULL; temp->vol = 127; /* Maybe 0? */ temp->prop = 0; return temp; } MidiElement * step_get_el(PatternElement *tree, int bank_id, int pattern_id, int step, int note) { int patloc = bank_id*16 + pattern_id; PatternElement *pattern = (tree + patloc); MidiElement *first = *(pattern->mel + step); return el_get_el_by_note(first, note); } MidiElement * step_add_el(PatternElement *tree, int bank_id, int pattern_id, int step, int note) { PatternElement *pattern; MidiElement *temp, *next; int patloc; patloc = bank_id*16 + pattern_id; pattern = (tree + patloc); next = *(pattern->mel + step); /* First search for an element with the same note value and delete if found */ /* printf("Adding %d\n", note); */ if( (temp=el_get_el_by_note(next, note)) != NULL ) { el_delete_listel((pattern->mel + step), temp); return NULL; } /* Otherwise create and add a new MidiElement */ if( (temp=step_new_el()) == NULL ) return NULL; temp->note = note; if( ! next ) { *(pattern->mel + step) = temp; } else /* add to existing element(s) at this step */ { temp->next = next; *(pattern->mel + step) = temp; } return temp; } MidiElement * el_get_el_by_note(MidiElement *base, int note) { MidiElement *temp = base; if( ! temp ) return NULL; do { if( temp->note == note ) return temp; temp = temp->next; } while( temp != NULL ); return NULL; } /* * Delete a MidiElement (el) from a list (base) */ int el_delete_listel(MidiElement **base, MidiElement *el) { MidiElement *temp=*base; int found=0; if( ! temp ) return found; else if( *base == el ) { if( (*base)->next == NULL ) *base = NULL; else *base = (*base)->next; free(el); return (found=1); } do { if( temp->next == el ) { found = 1; temp->next = temp->next->next; free(el); break; } temp = (temp)->next; } while( (!found) && (temp != NULL)); return found; } /* * Remove MidiElement (el) from a list (base). */ int el_remove_listel(MidiElement **base, MidiElement *el) { MidiElement *temp=*base; int found=0; if( ! temp ) return found; else if( *base == el ) { found = 1; if( (*base)->next == NULL ) *base = NULL; else *base = (*base)->next; return found; } do { if( temp->next == el ) { found = 1; temp->next = temp->next->next; return found; } temp = (temp)->next; } while( temp != NULL ); return found; } void el_set_note(MidiElement *el, int note) { el->note = note; } int el_get_note(MidiElement *el) { return el->note; } void pattern_display_els(PatternElement *tree, int bank_id, int pattern_id) { PatternElement *pattern; MidiElement *temp; int i, step; pattern = tree + (bank_id*16 + pattern_id); for(step=0;step<16;step++) { temp = *(pattern->mel + step); if( ! temp ) { printf("Nothing at step %d\n", step); continue; } do { printf(" NOTE at step %d = %d\n", step, (temp)->note); temp = (temp)->next; } while( temp != NULL); } } void el_get_step_elements(MidiElement **base, int inst[17]) { int i = 0; MidiElement *el; for (el = *base; el && i < 16; el = el->next) { inst[i++] = el_get_note(el); } inst[i] = -1; } void el_get_step_properties(MidiElement **base, int props[17]) { int i = 0; MidiElement *el; for (el = *base; el && i < 16; el = el->next) { props[i++] = el_get_properties(el); } props[i] = -1; } int el_copy_pattern(PatternElement *dest, PatternElement *src, int merge) { int instruments[17]; int properties [17]; int step; pattern_set_length (dest, pattern_get_length (src)); pattern_set_scale (dest, pattern_get_scale (src)); pattern_set_flam (dest, pattern_get_flam (src)); pattern_set_shuffle(dest, pattern_get_shuffle(src)); pattern_set_comment(dest, pattern_get_comment(src)); for(step=0; step < 16; step++) { int inst; el_get_step_elements (src->mel + step, instruments); el_get_step_properties(src->mel + step, properties); if( !merge ) { step_el_clear(dest->mel + step); } for (inst = 0; inst < 16 && instruments[inst] != -1; inst++) { MidiElement* el = *(dest->mel + step); MidiElement* temp = el_get_el_by_note(el, instruments[inst]); if( !temp ) { temp = step_new_el(); if( !temp ) { return -1; } el_set_note (temp, instruments[inst]); el_set_properties (temp, properties [inst]); if( ! el ) { *(dest->mel + step) = temp; } else { /* add to existing element(s) at this step */ temp->next = el; *(dest->mel + step) = temp; } } } } return 0; } void el_set_properties (MidiElement* el, int prop) { el->prop = prop; } int el_get_properties (MidiElement* el) { return el->prop; } /* * get/set/unset fla property */ bool have_fla (MidiElement* el) { return ((el->prop & fla_property) != 0); } void el_unset_fla (MidiElement* el) { el->prop = (el->prop & ~fla_property); } void el_set_fla (MidiElement* el) { el->prop = (el->prop | fla_property); } /* * get/set/unset velocity properties */ bool have_weak_accent (MidiElement* el) { return ((el->prop & weak_accent_velocity) != 0); } bool have_strong_accent (MidiElement* el) { return ((el->prop & strong_accent_velocity) != 0); } bool have_zero_velocity (MidiElement* el) { return ((el->prop & zero_velocity) != 0); } void el_set_default_velocity (MidiElement* el) { el->prop = (el->prop & (~velocity_field)); } static void el_set_velocity_flag (MidiElement* el, int flag) { el->prop = (el->prop & (~velocity_field)) | (flag & velocity_field); } void el_set_weak_accent_velocity (MidiElement* el) { el_set_velocity_flag (el, weak_accent_velocity); } void el_set_strong_accent_velocity (MidiElement* el) { el_set_velocity_flag (el, strong_accent_velocity); } void el_set_zero_velocity (MidiElement* el) { el_set_velocity_flag (el, zero_velocity); } tk707-0.8/play.c0000644000175100017510000011555410142137110010272 00000000000000/* * This file is part of tk707. * * Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito * * tk707 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. * * Foobar 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 Foobar; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include "util707.h" #include "nix_bit.h" TK707 *tk707; #define tk7_get_pattern(tk707,group,pattern) \ (((TK707*)(tk707))->ptree[((TK707*)(tk707))->mbank] + 16*(group) + (pattern)) typedef struct { char *cmdname; Tcl_ObjCmdProc *cmdProc; } NewCmd; /* Strings to hold scripts for C code evaluation */ extern char tcl_ports[]; extern char tcl_title_defs[]; extern char tcl_score_defs[]; extern char tcl_defs[]; extern char tcl_gui[]; extern char tcl_title[]; extern char tcl_score[]; extern char tcl_procs[]; extern char tcl_help[]; extern char tcl_tk707[]; /* * Insert names tcl scripts generated by tcl2c here */ #ifndef not_compile_tcl char *scripts[]={ tcl_ports, tcl_title_defs, tcl_score_defs, tcl_defs, tcl_gui, tcl_title, tcl_score, tcl_procs, tcl_help, tcl_tk707, (char*)NULL }; #endif int cm2pix(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int set_patbuf(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int copy_patbuf(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int group_step_lengths(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int set_last_step(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int get_last_step(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int port_list(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int port_setcheck(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int pattern_items(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int pattern_play(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int Init707(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int clear_tree(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int clear_pattern(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int set_sounds(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int timer_status(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int pat_stop(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int set_tempo(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int set_vols(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int get_pat_tick(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int Exit707(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int cartridge_incr(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int add_note(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int set_scale(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int get_scale(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int group_scale(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int get_pattern_properties(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int set_properties(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int get_properties(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int set_flam(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int get_flam(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int set_shuffle(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int get_shuffle(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int set_pattern_comment(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int get_pattern_comment(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int group_pattern_properties(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int start_note_play(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int stop_note_play(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int start_note_test(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int stop_note_test(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); NewCmd cmdlist[]={ { "tk7_init", Init707}, { "tk7_cm2pix", cm2pix}, { "tk7_set_patbuf", set_patbuf}, { "tk7_copy_patbuf", copy_patbuf}, { "tk7_set_last_step", set_last_step}, { "tk7_get_last_step", get_last_step}, { "tk7_group_step_lengths", group_step_lengths}, { "tk7_clear_tree", clear_tree}, { "tk7_port_list", port_list}, { "tk7_port_setcheck", port_setcheck}, { "tk7_clear_pattern", clear_pattern}, { "tk7_pattern_items", pattern_items}, { "tk7_set_sounds", set_sounds}, { "tk7_timer_status", timer_status}, { "tk7_set_tempo", set_tempo}, { "tk7_pattern_play", pattern_play}, { "tk7_set_vols", set_vols}, { "tk7_pattern_stop", pat_stop}, { "tk7_get_pat_tick", get_pat_tick}, { "exit707", Exit707}, { "tk7_cartridge_incr", cartridge_incr}, { "tk7_add_note", add_note}, { "tk7_set_scale", set_scale}, { "tk7_get_scale", get_scale}, { "tk7_group_scale", group_scale}, { "tk7_get_pattern_properties", get_pattern_properties}, { "tk7_set_properties", set_properties}, { "tk7_get_properties", get_properties}, { "tk7_set_flam", set_flam}, { "tk7_get_flam", get_flam}, { "tk7_set_shuffle", set_shuffle}, { "tk7_get_shuffle", get_shuffle}, { "tk7_group_pattern_properties", group_pattern_properties}, { "tk7_start_note_play", start_note_play}, { "tk7_stop_note_play", stop_note_play}, { "tk7_start_note_test", start_note_test}, { "tk7_stop_note_test", stop_note_test}, { "tk7_set_pattern_comment", set_pattern_comment}, { "tk7_get_pattern_comment", get_pattern_comment}, /**/ { NULL, NULL} }; /* * Return: * 0 if all OK * 1 => just asked for list of ports (supplied it, now exit) * 2 => need a port description (run port selector gui) * 3 => something weird so exit */ int Init707(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { extern char *optarg; int c, res; char *portdesc; int i, bank, pattern; int argc; char *argv[10]; Tcl_Obj *temp=NULL, *descObj=NULL; /* Create a string array for getopt() */ argc = objc; for(c=0;c 0 ) { switch(c) { case 'p': portdesc = optarg; break; case 'h': usage(); return TCL_OK; break; case 'l': { char **cpinfo; int i, ret = get_clientsports(&cpinfo); for(i=0;iptree[i])) < 0 ) { Tcl_SetResult(interp, "Couldn't pattern_el_init", TCL_VOLATILE); return TCL_ERROR; } } tk707->patbuf = NULL; if( alsa_setup(tk707, portdesc, NULL) < 0 ) { Tcl_SetResult(interp, "Couldn't seq707_context_init", TCL_VOLATILE); #ifdef OLD return TCL_ERROR; #endif // OLD } Tcl_LinkVar(interp, "midi_channel", (char*)(&(tk707->ctxp_p->midichannel)), TCL_LINK_INT); Tcl_LinkVar(interp, "midi_channel", (char*)(&(tk707->ctxp_c->midichannel)), TCL_LINK_INT); /* Set the default instrument to volume fader map */ tk707->volmap[0] = 1; tk707->volmap[1] = 1; tk707->volmap[2] = 2; tk707->volmap[3] = 2; tk707->volmap[4] = 3; tk707->volmap[5] = 4; tk707->volmap[6] = 5; tk707->volmap[7] = 6; tk707->volmap[8] = 6; tk707->volmap[9] = 7; tk707->volmap[10] = 7; tk707->volmap[11] = 8; tk707->volmap[12] = 8; tk707->volmap[13] = 8; tk707->volmap[14] = 9; tk707->volmap[15] = 10; /* delay property initilaiztion */ for (i = 0; i < 16; i++) { tk707->have_delay[i] = false; } /* Inialisation was completed OK */ Tcl_SetObjResult(interp, Tcl_NewIntObj(0)); return TCL_OK; } int Exit707(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { snd_seq_close(tk707->ctxp_p->handle); snd_seq_close(tk707->ctxp_c->handle); return TCL_OK; } /* * Set tk707->patbuf to point to PatternElement given by group/pattern args. */ int set_patbuf( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group; if( objc != 3 ) { Tcl_SetResult(interp, "Wrong #args", TCL_VOLATILE); return TCL_ERROR; } if( Tcl_GetIntFromObj(interp, objv[1], &group) != TCL_OK ) return TCL_ERROR; if( Tcl_GetIntFromObj(interp, objv[2], &pattern) != TCL_OK ) return TCL_ERROR; tk707->patbuf = tk707->ptree[tk707->mbank] + (16*group+pattern); return TCL_OK; } /* * Copy elements at tk707->copybuf to new pattern given by group/pattern args. */ int copy_patbuf( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; PatternElement *to; int pattern, group, merge; tk707_get_int3_macro(interp,objc,objv,group,pattern,merge); if( ! tk707->patbuf ) { Tcl_SetResult(interp, "Nothing in copy buffer", TCL_VOLATILE); return TCL_ERROR; } to = tk707->ptree[tk707->mbank] + (16*group+pattern); if( to == tk707->patbuf ) return TCL_OK; el_copy_pattern(to, tk707->patbuf, merge); return TCL_OK; } /* * Set/get the last step to be used for a given pattern. * Return the new last step value */ int set_last_step( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group, stepval, i; tk707_get_int3_macro(interp,objc,objv,group,pattern,stepval); pattern_set_length(tk707->ptree[tk707->mbank] + (16*group+pattern), stepval); Tcl_SetObjResult(interp, Tcl_NewIntObj(stepval)); return TCL_OK; } int get_last_step( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group, stepval; tk707_get_int2_macro(interp,objc,objv,group,pattern); stepval = pattern_get_length(tk707->ptree[tk707->mbank] + (16*group+pattern)); Tcl_SetObjResult(interp, Tcl_NewIntObj(stepval)); return TCL_OK; } /* * Set/get the scale to be used for a given pattern. */ int set_scale( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group, scaleval, i; tk707_get_int3_macro(interp,objc,objv,group,pattern,scaleval); pattern_set_scale (tk707->ptree[tk707->mbank] + (16*group+pattern), scaleval); Tcl_SetObjResult(interp, Tcl_NewIntObj(scaleval)); return TCL_OK; } int get_scale( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group, scaleval; tk707_get_int2_macro(interp,objc,objv,group,pattern); scaleval = pattern_get_scale(tk707->ptree[tk707->mbank] + (16*group+pattern)); Tcl_SetObjResult(interp, Tcl_NewIntObj(scaleval)); return TCL_OK; } /* * Set/get the flam to be used for a given pattern. */ int set_flam( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group, flamval, i; tk707_get_int3_macro(interp,objc,objv,group,pattern,flamval); pattern_set_flam (tk707->ptree[tk707->mbank] + (16*group+pattern), flamval); Tcl_SetObjResult(interp, Tcl_NewIntObj(flamval)); return TCL_OK; } int get_flam( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group, flamval; tk707_get_int2_macro(interp,objc,objv,group,pattern); flamval = pattern_get_flam(tk707->ptree[tk707->mbank] + (16*group+pattern)); Tcl_SetObjResult(interp, Tcl_NewIntObj(flamval)); return TCL_OK; } /* * Set/get the shuffle to be used for a given pattern. */ int set_shuffle( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group, shuffleval, i; tk707_get_int3_macro(interp,objc,objv,group,pattern,shuffleval); pattern_set_shuffle (tk707->ptree[tk707->mbank] + (16*group+pattern), shuffleval); Tcl_SetObjResult(interp, Tcl_NewIntObj(shuffleval)); return TCL_OK; } int get_shuffle( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group, shuffleval; tk707_get_int2_macro(interp,objc,objv,group,pattern); shuffleval = pattern_get_shuffle(tk707->ptree[tk707->mbank] + (16*group+pattern)); Tcl_SetObjResult(interp, Tcl_NewIntObj(shuffleval)); return TCL_OK; } /* * Set/get the comment for a given pattern. */ int set_pattern_comment( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group; char* commentval; tk707_get_int2str1_macro(interp,objc,objv,group,pattern,commentval); pattern_set_comment (tk707->ptree[tk707->mbank] + (16*group+pattern), commentval); Tcl_SetObjResult(interp, Tcl_NewStringObj(commentval, strlen(commentval))); return TCL_OK; } int get_pattern_comment( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group; char* commentval; tk707_get_int2_macro(interp,objc,objv,group,pattern); commentval = pattern_get_comment(tk707->ptree[tk707->mbank] + (16*group+pattern)); Tcl_SetObjResult(interp, Tcl_NewStringObj(commentval, strlen(commentval))); return TCL_OK; } /* * Return a list of steplength values for all patterns in a given group */ int group_step_lengths( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; Tcl_Obj *res; int pattern, group, stepcount; tk707_get_int1_macro(interp,objc,objv,group); res = Tcl_NewListObj(0, NULL); for(pattern=0;pattern<16;pattern++) { stepcount = pattern_get_length(tk707->ptree[tk707->mbank] + (16*group+pattern)); Tcl_ListObjAppendElement(interp, res, Tcl_NewIntObj(stepcount)); } Tcl_SetObjResult(interp, res); return TCL_OK; } /* * Return a list of scale values for all patterns in a given group */ int group_scale( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; Tcl_Obj *res; int pattern, group, scalecount; tk707_get_int1_macro(interp,objc,objv,group); res = Tcl_NewListObj(0, NULL); for(pattern=0;pattern<16;pattern++) { scalecount = pattern_get_scale(tk707->ptree[tk707->mbank] + (16*group+pattern)); Tcl_ListObjAppendElement(interp, res, Tcl_NewIntObj(scalecount)); } Tcl_SetObjResult(interp, res); return TCL_OK; } /* * Return a list of list pattern properties for all patterns in a given group * { {length scale flam shuffle}*16 } */ int group_pattern_properties( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group; Tcl_Obj *res = Tcl_NewListObj(0, NULL); tk707_get_int1_macro(interp,objc,objv,group); for(pattern = 0; pattern < 16; pattern++) { int length = pattern_get_length (tk707->ptree[tk707->mbank] + (16*group+pattern)); int scale = pattern_get_scale (tk707->ptree[tk707->mbank] + (16*group+pattern)); int flam = pattern_get_flam (tk707->ptree[tk707->mbank] + (16*group+pattern)); int shuffle = pattern_get_shuffle(tk707->ptree[tk707->mbank] + (16*group+pattern)); char* comment = pattern_get_comment(tk707->ptree[tk707->mbank] + (16*group+pattern)); Tcl_Obj *prop_list = Tcl_NewListObj(0, NULL); Tcl_ListObjAppendElement(interp, prop_list, Tcl_NewIntObj(length)); Tcl_ListObjAppendElement(interp, prop_list, Tcl_NewIntObj(scale)); Tcl_ListObjAppendElement(interp, prop_list, Tcl_NewIntObj(flam)); Tcl_ListObjAppendElement(interp, prop_list, Tcl_NewIntObj(shuffle)); Tcl_ListObjAppendElement(interp, prop_list, Tcl_NewStringObj(comment,strlen(comment))); Tcl_ListObjAppendElement(interp, res, prop_list); } Tcl_SetObjResult(interp, res); return TCL_OK; } int clear_tree(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; pattern_el_clearall(tk707->ptree[tk707->mbank]); return TCL_OK; } int clear_pattern(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group, i; MidiElement *base; tk707_get_int2_macro(interp,objc,objv,group, pattern); for(i=0;i<16;i++) { step_el_clear((tk707->ptree[tk707->mbank] + (16*group+pattern))->mel+i); } return TCL_OK; } int set_sounds(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int i; char index[8]; for(i=1;i<17;i++) { sprintf(index, "%d,note", i); tk707->sounds[i-1] = atoi(Tcl_GetVar2(interp, "sound", index, TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG)); } return TCL_OK; } int set_tempo(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; seq707_context_t *ctxp = tk707->ctxp_p; int diff, newticks; snd_seq_event_t ev; tk707_get_int1_macro(interp,objc,objv, newticks); ctxp->tempo = (unsigned int)((((double)(old_tick_per_quarter * 500000))/(double)newticks)); do_tempo_set(ctxp, ctxp->tempo); ctxp->ppq = newticks; return TCL_OK; } #ifdef HAVE_ALSA9 int timer_status(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; seq707_context_t *ctxp = tk707->ctxp_p; snd_seq_queue_status_t *status; snd_seq_queue_status_alloca(&status); snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, status); Tcl_SetObjResult(interp, Tcl_NewIntObj(snd_seq_queue_status_get_tick_time(status))); return TCL_OK; } #else /* !HAVE_ALSA9 */ int timer_status(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; seq707_context_t *ctxp = tk707->ctxp_p; snd_seq_queue_status_t status; snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, &status); Tcl_SetObjResult(interp, Tcl_NewIntObj(status.tick)); return TCL_OK; } #endif /* HAVE_ALSA9 */ #ifdef HAVE_ALSA9 int get_pat_tick(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; seq707_context_t *ctxp = tk707->ctxp_p; snd_seq_queue_status_t *status; int result; snd_seq_queue_status_alloca(&status); snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, status); result = 16 - ((ctxp->currticktime - snd_seq_queue_status_get_tick_time(status))/old_tick_per_sixtennth); Tcl_SetObjResult(interp, Tcl_NewIntObj(result)); return TCL_OK; } #else /* !HAVE_ALSA9 */ int get_pat_tick(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; seq707_context_t *ctxp = tk707->ctxp_p; snd_seq_queue_status_t status; int result; snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, &status); result = 16 - ((ctxp->currticktime-status.tick)/old_tick_per_sixtennth); Tcl_SetObjResult(interp, Tcl_NewIntObj(result)); return TCL_OK; } #endif /* HAVE_ALSA9 */ static int ponderated_velocity (int volume_master, int volume_accent, double accent_factor, int volume_instr, double instr_factor) { double note_factor = volume_master*(volume_instr*instr_factor)*(volume_accent*accent_factor)/(100.*100.*100.); return (int)(127 * note_factor + 0.5); } static int compute_velocity (int prop, int volume_master, int volume_accent, int volume_instr) { double instr_factor; double accent_factor; double note_factor; int velocity; if (prop & zero_velocity) { instr_factor = 0; accent_factor = 0; } else { instr_factor = 1; if (prop & strong_accent_velocity) { accent_factor = 1; } else if (prop & weak_accent_velocity) { accent_factor = 2/3.0; } else { accent_factor = 1/3.0; } } return ponderated_velocity (volume_master, volume_accent, accent_factor, volume_instr, instr_factor); } static void c_start_note (TK707 *tk707, int keynum, int midi_note, int prop) { int volume_accent = tk707->volumes [0]; int volume_master = tk707->volumes [11]; int volume_instr = tk707->volumes [tk707->volmap[keynum]]; int velocity = compute_velocity (prop, volume_master,volume_accent,volume_instr); seq707_context_t *ctxp = tk707->ctxp_c; static int have_start = 0; snd_seq_queue_status_t *status; int midich; int cur_tick; #ifdef HAVE_ALSA9 snd_seq_queue_status_alloca(&status); snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, status); cur_tick = snd_seq_queue_status_get_tick_time(status); #else snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, status); cur_tick = status->tick; #endif if ( cur_tick > ctxp->currticktime ) { ctxp->currticktime = cur_tick; } midich = ctxp->midichannel; if (!have_start) { alsa_timer_start (ctxp); have_start = true; } else { alsa_timer_cont (ctxp); } do_noteon (ctxp, midich, midi_note, velocity); if (prop & fla_property) { /* note have a fla */ int flam_interval = 2; /* use default, without pattern properties */ int tick_per_flam = flam_interval * tick_flam_duration; ctxp->currticktime += tick_per_flam; do_noteon (ctxp, midich, midi_note, velocity); } #ifdef HAVE_ALSA9 snd_seq_drain_output(ctxp->handle); #else snd_seq_flush_output(ctxp->handle); #endif } static void c_stop_note (TK707 *tk707, int midi_note) { seq707_context_t *ctxp = tk707->ctxp_c; snd_seq_queue_status_t *status; int midich; int cur_tick; #ifdef HAVE_ALSA9 snd_seq_queue_status_alloca(&status); snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, status); cur_tick = snd_seq_queue_status_get_tick_time(status); #else snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, status); cur_tick = status->tick; #endif if ( cur_tick > ctxp->currticktime ) { ctxp->currticktime = cur_tick; } midich = ctxp->midichannel; do_noteon (ctxp, midich, midi_note, 0); /* ctxp->currticktime += old_tick_per_quarter; */ #ifdef HAVE_ALSA9 snd_seq_drain_output(ctxp->handle); #else snd_seq_flush_output(ctxp->handle); #endif alsa_timer_stop(ctxp); } /* * Start a note down the "realtime" queue */ int start_note_play(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int keynum, prop, midi_note; tk707_get_int2_macro(interp,objc,objv, keynum, prop); midi_note = tk707->sounds[keynum]; c_start_note (tk707, keynum, midi_note, prop); return TCL_OK; } /* * Stop a note down the "realtime" queue */ int stop_note_play(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int keynum, midi_note; tk707_get_int1_macro(interp,objc,objv, keynum); midi_note = tk707->sounds[keynum]; c_stop_note (tk707, midi_note); return TCL_OK; } /* * Start a note down the "realtime" queue using a supplied midi note value * (instead of looking it up as in note_play() ). */ int start_note_test(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int keynum, midi_note; tk707_get_int2_macro(interp,objc,objv, keynum, midi_note); c_start_note (tk707, keynum, midi_note, 0); return TCL_OK; } /* * Stop a note down the "realtime" queue using a supplied midi note value * (instead of looking it up as in note_play() ). */ int stop_note_test(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int keynum, midi_note; tk707_get_int2_macro(interp,objc,objv, keynum, midi_note); c_stop_note (tk707, midi_note); return TCL_OK; } int pat_stop(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; seq707_context_t *ctxp = tk707->ctxp_p; snd_seq_drain_output(ctxp->handle); return TCL_OK; } int pattern_play(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; seq707_context_t *ctxp = tk707->ctxp_p; snd_seq_queue_status_t *status = 0; int cur_tick; int group, pattern, step, stepcount, scale, midich, dur; PatternElement *current_pattern; int volume_master, volume_accent, flam_interval; int tick_per_step, tick_per_flam; tk707_get_int2_macro(interp,objc,objv, group, pattern); volume_accent = tk707->volumes [0]; volume_master = tk707->volumes [11]; current_pattern = tk7_get_pattern(tk707,group,pattern); stepcount = pattern_get_length(current_pattern); scale = pattern_get_scale (current_pattern); flam_interval = pattern_get_flam (current_pattern); tick_per_step = old_tick_per_step_off_scale[scale] + old_tick_per_note_on; tick_per_flam = flam_interval * tick_flam_duration; if (old_tick_per_note_on < 4*tick_flam_duration) { fprintf (stderr, "FATAL: invalid flam/delay configuration\n"); exit (1); } #ifdef HAVE_ALSA9 snd_seq_queue_status_alloca(&status); snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, status); cur_tick = snd_seq_queue_status_get_tick_time(status); #else snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, status); cur_tick = status->tick; #endif if( cur_tick > ctxp->currticktime ) { ctxp->currticktime = cur_tick; } midich = ctxp->midichannel; alsa_timer_cont (ctxp); for (step = 0; step < stepcount; step++) { MidiElement *instrument_set = current_pattern->mel [step]; MidiElement *instrument; if (!instrument_set) { /* No notes at this step. Just update timer. */ ctxp->currticktime += tick_per_step; continue; } /* * note-on */ for (instrument = instrument_set; instrument; instrument = instrument->next) { int idx_note = el_get_note (instrument); int midi_note = tk707->sounds [idx_note]; int volume_instr = tk707->volumes [tk707->volmap[idx_note]]; int velocity = compute_velocity (el_get_properties(instrument), volume_master,volume_accent,volume_instr); do_noteon (ctxp, midich, midi_note, velocity); } ctxp->currticktime += tick_per_flam; /* * flam */ for (instrument = instrument_set; instrument; instrument = instrument->next) { if (have_fla (instrument)) { int idx_note = el_get_note (instrument); int midi_note = tk707->sounds [idx_note]; int volume_instr = tk707->volumes [tk707->volmap[idx_note]]; int velocity = compute_velocity (el_get_properties(instrument), volume_master,volume_accent,volume_instr); do_noteon (ctxp, midich, midi_note, velocity); } } ctxp->currticktime += old_tick_per_note_on - tick_per_flam; /* * note-off when delay */ for (instrument = instrument_set; instrument; instrument = instrument->next) { int idx_note = el_get_note (instrument); if (tk707->have_delay [idx_note]) { int midi_note = tk707->sounds [idx_note]; do_noteoff (ctxp, midich, midi_note, 127); } } ctxp->currticktime += old_tick_per_step_off_scale [scale]; } #ifdef HAVE_ALSA9 snd_seq_drain_output(ctxp->handle); #else snd_seq_flush_output(ctxp->handle); #endif alsa_timer_stop(ctxp); dur = (int)(500*((double)(ctxp->currticktime - cur_tick)/(double)ctxp->ppq)); Tcl_SetObjResult(interp, Tcl_NewIntObj(dur - tick_per_step)); return TCL_OK; } int cartridge_incr(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; tk707->mbank = ++tk707->mbank % 3; Tcl_SetObjResult(interp, Tcl_NewIntObj(tk707->mbank)); return TCL_OK; } /* Add (or delete if already exists) a new note as a midi element */ int add_note(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { int group, pattern, step, note; TK707 *tk707 = (TK707*)clientData; MidiElement *temp; tk707_get_int4_macro(interp,objc,objv, group, pattern, step, note); if( (temp=step_add_el(tk707->ptree[tk707->mbank], group, pattern, step, note - 1)) == NULL ) { Tcl_SetObjResult(interp, Tcl_NewBooleanObj(0)); return TCL_OK; } else { Tcl_SetObjResult(interp, Tcl_NewBooleanObj(1)); return TCL_OK; } /* printf("Added note %d at group %d, pattern %d, step %d, (cart %d)\n", el_get_note(temp), group, pattern, step, tk707->mbank); pattern_display_els(tk707->ptree[tk707->mbank], group, pattern); */ } /* get note properties in a midi element * if note does not exists, return 0 */ int get_properties(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { int group, pattern, step, note, prop; TK707 *tk707 = (TK707*)clientData; MidiElement *temp; tk707_get_int4_macro(interp,objc,objv, group, pattern, step, note); temp = step_get_el(tk707->ptree[tk707->mbank], group, pattern, step, note - 1); if (!temp) { Tcl_SetObjResult(interp, Tcl_NewIntObj(0)); } else { Tcl_SetObjResult(interp, Tcl_NewIntObj(el_get_properties(temp))); } return TCL_OK; } /* set note properties in a midi element * if note does not exists yet, insert it */ int set_properties(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { int group, pattern, step, note, prop; TK707 *tk707 = (TK707*)clientData; MidiElement *temp; tk707_get_int5_macro(interp,objc,objv, group, pattern, step, note, prop); temp = step_get_el(tk707->ptree[tk707->mbank], group, pattern, step, note - 1); if (!temp) { temp = step_get_el(tk707->ptree[tk707->mbank], group, pattern, step, note - 1); } el_set_properties (temp, prop); Tcl_SetObjResult(interp, Tcl_NewBooleanObj(1)); return TCL_OK; } /* Return a list of instruments for the specified pattern step */ int pattern_items(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; Tcl_Obj *res; int group, pattern, step, i; int items[17]; tk707_get_int3_macro(interp,objc,objv, group, pattern, step); res = Tcl_NewListObj(0, NULL); if (group == -1) { group = 0; } if (pattern == -1) { pattern = 0; } el_get_step_elements((tk707->ptree[tk707->mbank] + (16*group+pattern))->mel + step, items); for(i=0;items[i]>=0;i++) { Tcl_ListObjAppendElement(interp, res, Tcl_NewIntObj(items[i] + 1)); } Tcl_SetObjResult(interp, res); return TCL_OK; } /* Return a list of note properties for the specified pattern step */ int get_pattern_properties(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; Tcl_Obj *res; int group, pattern, step, i; int items[17]; tk707_get_int3_macro(interp,objc,objv, group, pattern, step); res = Tcl_NewListObj(0, NULL); if (group == -1) { group = 0; } if (pattern == -1) { pattern = 0; } el_get_step_properties((tk707->ptree[tk707->mbank] + (16*group+pattern))->mel + step, items); for(i=0;items[i]>=0;i++) { Tcl_ListObjAppendElement (interp, res, Tcl_NewIntObj(items[i])); } Tcl_SetObjResult(interp, res); return TCL_OK; } /* Update volume fader settings */ int set_vols(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int val, i; if( objc != 13 ) return TCL_ERROR; for(i=1;ivolumes[i-1] = val; } return TCL_OK; } /* Check whether alsa ports have been set */ int port_setcheck(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; Tcl_Obj *temp=NULL; temp = Tcl_ObjGetVar2(interp, Tcl_NewStringObj("tkxox", strlen("tkxox")), Tcl_NewStringObj("ALSA_OUTPORT", strlen("ALSA_OUTPORT")), TCL_GLOBAL_ONLY); if( !temp ) { Tcl_SetObjResult(interp, Tcl_NewBooleanObj(0)); return TCL_OK; } else { Tcl_SetObjResult(interp, Tcl_NewBooleanObj(1)); return TCL_OK; } return TCL_OK; } /* Construct a list of ALSA midi ports on the system. */ #ifdef HAVE_ALSA9 int port_list(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; Tcl_Obj *res, *items[16]={NULL}; int i, client, port, io; snd_seq_client_info_t *cinfo; snd_seq_port_info_t *pinfo; snd_seq_t *handle; if( objc != 2 ) { Tcl_SetResult(interp, "Wrong #args", TCL_VOLATILE); return TCL_ERROR; } if( Tcl_GetIntFromObj(interp, objv[1], &io) != TCL_OK ) return TCL_ERROR; if( snd_seq_open(&handle, "hw", SND_SEQ_OPEN_DUPLEX, 0) < 0 ) { return TCL_ERROR; } res = Tcl_NewListObj(0, NULL); snd_seq_client_info_alloca(&cinfo); snd_seq_port_info_alloca(&pinfo); i = 0; snd_seq_client_info_set_client(cinfo, 0); while (snd_seq_query_next_client(handle, cinfo) >= 0) { client = snd_seq_client_info_get_client(cinfo); snd_seq_port_info_set_client(pinfo, client); snd_seq_port_info_set_port(pinfo, -1); while (snd_seq_query_next_port(handle, pinfo) >= 0) { unsigned int cap; if( io > 0 ) cap = (SND_SEQ_PORT_CAP_SUBS_WRITE|SND_SEQ_PORT_CAP_WRITE); else cap = (SND_SEQ_PORT_CAP_SUBS_READ|SND_SEQ_PORT_CAP_READ); if( (snd_seq_port_info_get_capability(pinfo) & cap) == cap ) { const char *name; port = snd_seq_port_info_get_port(pinfo); items[i] = Tcl_NewListObj(0, NULL); Tcl_ListObjAppendElement(interp, items[i], Tcl_NewIntObj(client)); Tcl_ListObjAppendElement(interp, items[i], Tcl_NewIntObj(port)); name = snd_seq_port_info_get_name(pinfo); Tcl_ListObjAppendElement(interp, items[i], Tcl_NewStringObj(name, strlen(name))); name = snd_seq_client_info_get_name(cinfo); Tcl_ListObjAppendElement(interp, items[i], Tcl_NewStringObj(name, strlen(name))); Tcl_ListObjAppendElement(interp, res, items[i]); i++; } } } Tcl_SetObjResult(interp, res); return TCL_OK; } #else /* !HAVE_ALSA9 */ int port_list(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; Tcl_Obj *res, *items[17]={NULL}; int i, client, port, io; snd_seq_client_info_t cinfo; snd_seq_port_info_t pinfo; snd_seq_system_info_t sysinfo; snd_seq_t *handle; tk707_get_int1_macro(interp,objc,objv, io); if( snd_seq_open(&handle, SND_SEQ_OPEN) < 0 ) { return TCL_ERROR; } if( snd_seq_system_info(handle, &sysinfo) < 0 ) { return TCL_ERROR; } res = Tcl_NewListObj(0, NULL); i = 0; for(client=0;client 0 ) cap = (SND_SEQ_PORT_CAP_SUBS_WRITE|SND_SEQ_PORT_CAP_WRITE); else cap = (SND_SEQ_PORT_CAP_SUBS_READ|SND_SEQ_PORT_CAP_READ); if( (pinfo.capability & cap) == cap ) { items[i] = Tcl_NewListObj(0, NULL); Tcl_ListObjAppendElement(interp, items[i], Tcl_NewIntObj(pinfo.client)); Tcl_ListObjAppendElement(interp, items[i], Tcl_NewIntObj(pinfo.port)); Tcl_ListObjAppendElement(interp, items[i], Tcl_NewStringObj(pinfo.name, strlen(pinfo.name))); Tcl_ListObjAppendElement(interp, items[i], Tcl_NewStringObj(cinfo.name, strlen(cinfo.name))); Tcl_ListObjAppendElement(interp, res, items[i]); i++; } } } Tcl_SetObjResult(interp, res); return TCL_OK; } #endif /* HAVE_ALSA9 */ /* Return a given screen distance to pixels */ int cm2pix(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; char *rawlen, *widgetpath; Tk_Window tkwin; int pixels; if( objc != 3 ) { Tcl_SetResult(interp, "Wrong #args", TCL_VOLATILE); return TCL_ERROR; } if( (widgetpath=Tcl_GetStringFromObj(objv[1], NULL)) == NULL ) return TCL_ERROR; if( (rawlen=Tcl_GetStringFromObj(objv[2], NULL)) == NULL ) return TCL_ERROR; tkwin = Tk_NameToWindow(interp, widgetpath, Tk_MainWindow(interp)); if( Tk_GetPixels(interp, tkwin, rawlen, &pixels) != TCL_OK ) return TCL_ERROR; Tcl_SetObjResult(interp, Tcl_NewIntObj(pixels)); return TCL_OK; } /* ============================================================================ This is where the commands are registered. Don't change this section! ========================================================================= */ int Init_tk707(Tcl_Interp *interp) { NewCmd *cmdptr=cmdlist; /* We want all (most) of the new commands to have access to * "tk707" structure (via clientData) so create it before * creating all the new commands. */ if( (tk707=(TK707*)calloc(1, sizeof(TK707))) == NULL ) return TCL_ERROR; /* Create the new commands */ while( cmdptr->cmdname != NULL ) { Tcl_CreateObjCommand(interp, cmdptr->cmdname, cmdptr->cmdProc, (ClientData*)tk707, (Tcl_CmdDeleteProc*)NULL); cmdptr++; } Tk_DefineBitmap(interp, Tk_GetUid("nix"), nix_bits, 1, 1); return TCL_OK; } int Init_tk707_Scripts(Tcl_Interp *interp) { int result; char **ptr; result = TCL_OK; #ifndef not_compile_tcl for(ptr=scripts;*ptr!=NULL;ptr++) { if( (result=Tcl_Eval(interp, *ptr)) == TCL_ERROR ) break; } #endif return result; } tk707-0.8/tk707AppInit.c0000644000175100017510000000764010142137110011462 00000000000000/* * This file is part of tk707. * * Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito * * tk707 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. * * Foobar 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 Foobar; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* * tkAppInit.c -- * * Provides a default version of the Tcl_AppInit procedure for * use in wish and similar Tk-based applications. */ #include /* for matherr() */ #include "tk.h" extern int Init_tk707(Tcl_Interp *interp); extern int Init_tk707_Scripts(Tcl_Interp *interp); /* * The following variable is a special hack that is needed in order for * Sun shared libraries to be used for Tcl. */ int *tclDummyMathPtr = (int *) matherr; #ifdef TK_TEST extern int Tktest_Init _ANSI_ARGS_((Tcl_Interp *interp)); #endif /* TK_TEST */ /* *---------------------------------------------------------------------- * * main -- * * This is the main program for the application. * * Results: * None: Tk_Main never returns here, so this procedure never * returns either. * * Side effects: * Whatever the application does. * *---------------------------------------------------------------------- */ int main(int argc, char **argv) /* argc: Number of command-line arguments. */ /* argv: Values of command-line arguments. */ { Tk_Main(argc, argv, Tcl_AppInit); return 0; /* Needed only to prevent compiler warning. */ } /* *---------------------------------------------------------------------- * * Tcl_AppInit -- * * This procedure performs application-specific initialization. * Most applications, especially those that incorporate additional * packages, will have their own version of this procedure. * * Results: * Returns a standard Tcl completion code, and leaves an error * message in interp->result if an error occurs. * * Side effects: * Depends on the startup script. * *---------------------------------------------------------------------- */ int Tcl_AppInit(Tcl_Interp *interp) /* Interpreter for application. */ { if (Tcl_Init(interp) == TCL_ERROR) { return TCL_ERROR; } if (Tk_Init(interp) == TCL_ERROR) { return TCL_ERROR; } Tcl_StaticPackage(interp, "Tk", Tk_Init, Tk_SafeInit); #ifdef TK_TEST if (Tktest_Init(interp) == TCL_ERROR) { return TCL_ERROR; } Tcl_StaticPackage(interp, "Tktest", Tktest_Init, (Tcl_PackageInitProc *) NULL); #endif /* TK_TEST */ /* * Call the init procedures for included packages. Each call should * look like this: * * if (Mod_Init(interp) == TCL_ERROR) { * return TCL_ERROR; * } * * where "Mod" is the name of the module. */ /* * Call Tcl_CreateCommand for application-specific commands, if * they weren't already created by the init procedures called above. */ if (Init_tk707(interp) == TCL_ERROR) { return TCL_ERROR; } if (Init_tk707_Scripts(interp) == TCL_ERROR) { return TCL_ERROR; } /* * Specify a user-specific startup file to invoke if the application * is run interactively. Typically the startup file is "~/.apprc" * where "app" is the name of the application. If this line is deleted * then no user-specific startup file will be run under any conditions. */ Tcl_SetVar(interp, "tcl_rcFileName", "~/.tk707rc", TCL_GLOBAL_ONLY); return TCL_OK; } tk707-0.8/title_defs.c0000644000175100017510000000035710142141774011454 00000000000000char tcl_title_defs[] = "\ # file automatically generated by:\n\ # ./title_fig2tcl.sh ./title.fig\n\ set title_width_in_inch 6.90\n\ set title_height_in_inch 0.82\n\ set title_scroll_x_in_point -6\n\ set title_scroll_y_in_point -1\n\ "; tk707-0.8/score_defs.c0000644000175100017510000000036110142141776011443 00000000000000char tcl_score_defs[] = "\ # file automatically generated by:\n\ # ./score_fig2tcl.sh ./score.fig\n\ set score_width_in_inch 12.12\n\ set score_height_in_inch 1.44\n\ set score_scroll_x_in_point -10\n\ set score_scroll_y_in_point -2\n\ "; tk707-0.8/defsa.c0000644000175100017510000003071710142141776010421 00000000000000char tcl_defs[] = "\ #\n\ # This file is part of tk707.\n\ #\n\ # Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito \n\ #\n\ # tk707 is free software; you can redistribute it and/or modify\n\ # it under the terms of the GNU General Public License as published by\n\ # the Free Software Foundation; either version 2 of the License, or\n\ # (at your option) any later version.\n\ #\n\ # Foobar is distributed in the hope that it will be useful,\n\ # but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ # GNU General Public License for more details.\n\ #\n\ # You should have received a copy of the GNU General Public License\n\ # along with Foobar; if not, write to the Free Software\n\ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n\ #\n\ # -----------------------------------------\n\ # File defs.tcl\n\ # Definitions and pre-start set up.\n\ # -----------------------------------------\n\ proc usage {} {\n\ puts \"usage: tk707 options...; please read the documentation (html,info,..) and the unix manual.\"\n\ exit 0\n\ }\n\ set small_size_factor 0.75;\n\ set medium_size_factor 0.9;\n\ set normal_size_factor 1.0;\n\ set large_size_factor 2;\n\ set size_factor $normal_size_factor\n\ set input_file_name \"\";\n\ set new_argv \"\"\n\ for {set i 0} {$i < $argc} {incr i} {\n\ set argi [lindex $argv $i];\n\ # puts \"defs.tcl: argv($i) = `$argi'\";\n\ if {$argi == \"--help\"} {\n\ usage\n\ } elseif {$argi == \"-small\"} {\n\ # puts \"defs.tcl: small!\";\n\ set [lindex $argv $i] \"-n\";\n\ set size_factor $small_size_factor;\n\ } elseif {$argi == \"-medium\"} {\n\ # puts \"defs.tcl: medium!\";\n\ set size_factor $medium_size_factor;\n\ } elseif {$argi == \"-normalsize\"} {\n\ # puts \"defs.tcl: normal!\";\n\ set new_argv \"$new_argv $argi\"\n\ set size_factor $normal_size_factor;\n\ } elseif {$argi == \"-big\"} {\n\ # puts \"defs.tcl: large!\";\n\ set new_argv \"$new_argv $argi\"\n\ set size_factor $large_size_factor;\n\ } else {\n\ # send option to the 2nd C-code pass...\n\ # puts \"defs.tcl: argv($i) = `$argi'...added\";\n\ set new_argv \"$new_argv $argi\"\n\ }\n\ }\n\ #\n\ # we strip options to avoid mistakes\n\ # TODO: send -p x:y nd so to C code\n\ set argv $new_argv\n\ set argc [llength $argv]\n\ #puts \"argv := $argv\"\n\ #puts \"argc := $argc\"\n\ # -----------------------------------------\n\ # pixel to centimeter conversion\n\ # -----------------------------------------\n\ package require Tcl 8.0\n\ package require Tk 8.0\n\ set VERSION 0.8\n\ set PKGDATADIR /jonasz/saramito/sys/share/tk707 \n\ # uncomment to show sonme boxes:\n\ #set debug_relief \"-borderwidth 2p -relief groove\";\n\ set debug_relief \"\";\n\ # -----------------------------------------\n\ # pixel <--> point/inch/cm\n\ # -----------------------------------------\n\ set cm_per_inch 2.54;\n\ set point_per_inch 72.00;\n\ set point_per_cm [expr $point_per_inch / $cm_per_inch];\n\ set pixel_per_point [tk scaling]\n\ # puts \"dpi $pixel_per_point\"\n\ set pixel_per_inch [expr int($pixel_per_point*$point_per_inch+0.5)]\n\ set pixel_per_cm [expr $pixel_per_inch/$cm_per_inch]\n\ # -----------------------------------------\n\ # get window max dimension\n\ # -----------------------------------------\n\ set maxsize_in_pixel [wm maxsize .]\n\ set maxwidth_in_pixel [lindex $maxsize_in_pixel 0]\n\ set maxheight_in_pixel [lindex $maxsize_in_pixel 1]\n\ set maxwidth_in_cm [expr $maxwidth_in_pixel * $pixel_per_cm ]\n\ set maxheight_in_cm [expr $maxheight_in_pixel* $pixel_per_cm ]\n\ # -----------------------------------------\n\ # resize coefficient if window is too small\n\ # -----------------------------------------\n\ if {$size_factor < $medium_size_factor} { # small screens\n\ set size_factor $small_size_factor; \n\ set font8 \"6\";\n\ set font12 \"6\"; \n\ set boldfont12 \"6\"; \n\ set boldfont13 \"6\";\n\ set courrier_boldfont_i_50 \"10\"; \n\ set boldr14 \"8\";\n\ set helvetica_bold_r_12 \"6\"; \n\ set normal_r_14 \"8\"; \n\ } elseif {$size_factor < $normal_size_factor} { # medium screen\n\ set size_factor $medium_size_factor; \n\ set font8 \"6\";\n\ set font12 \"8\";\n\ set boldfont12 \"8\"; \n\ set boldfont13 \"8\"; \n\ set courrier_boldfont_i_50 \"adobe-courier-bold-i-*-30\"; \n\ set boldr14 \"bold-r-*-10\"; \n\ set helvetica_bold_r_12 \"8\"; \n\ set normal_r_14 \"10\"; \n\ } else { # normal screen\n\ set size_factor $normal_size_factor;\n\ set font8 \"7\";\n\ set font12 \"9\";\n\ set boldfont12 \"9\"; \n\ set boldfont13 \"9\";\n\ set courrier_boldfont_i_50 \"adobe-courier-bold-i-*-50\"; \n\ set boldr14 \"bold-r-*-11\"; \n\ set helvetica_bold_r_12 \"9\"; \n\ set normal_r_14 \"10\"; \n\ }\n\ # -----------------------------------------\n\ # pixel to centimeter conversion\n\ # -----------------------------------------\n\ set scaling $size_factor;\n\ tk scaling $scaling\n\ set pixel_per_point [tk scaling]\n\ set point_per_pixel [expr 1./$pixel_per_point]\n\ set pixel_per_inch [expr int($pixel_per_point*$point_per_inch+0.5)]\n\ set pixel_per_cm [expr $pixel_per_inch/$cm_per_inch]\n\ # -----------------------------------------\n\ # set global constants\n\ # -----------------------------------------\n\ set tcl_rcFileName \"~/.tk707rc\"\n\ if {[catch {open $tcl_rcFileName r} fid]} {\n\ } else {\n\ catch {source $tcl_rcFileName}\n\ }\n\ set res [eval tk7_init $argv]\n\ if {$res == 1 || $res == 3} {\n\ exit\n\ } elseif {$res ==2} {\n\ wm iconify .\n\ port_setup\n\ tk7_init\n\ }\n\ rename exit exit.old\n\ proc exit {} {\n\ exit707\n\ exit.old\n\ }\n\ # -----------------------------------------\n\ # set global constants\n\ # -----------------------------------------\n\ set right_space_width 0.5;\n\ \n\ \n\ set tkxox(VERSION) \"TK707-$VERSION\"\n\ set tkxox(READ) 0\n\ set tkxox(WRITE) 1\n\ set tkxox(TRACK) 0\n\ set tkxox(PATTERN) 1\n\ set tkxox(STOP) 0\n\ set tkxox(START) 1\n\ set tkxox(CONT) 2\n\ set tkxox(FILE_UNCHANGED) 0\n\ set tkxox(FILE_MODIFIED) 1\n\ set tkxox(col_on) #ffaa00\n\ set tkxox(col_active) #ffaaaa\n\ set tkxox(col_def_bg) #d9d9d9\n\ set tkxox(col_def_active) #ececec\n\ set tkxox(but_grey) #888888\n\ set tkxox(but_grey_active) #999999\n\ set tkxox(but_grey_on) #bbbbbb\n\ set tkxox(lamp_off) #882200\n\ set tkxox(lamp_on) #ff8800\n\ set tkxox(color_fg_shift) #ffffff; # the text on the shift keys (white)\n\ set tkxox(color_bg_shift) #000044cffb22; # the box on the shift keys (blue)\n\ set tkxox(vol_trough_color) #a5e3a5e3a5e3; # background of the trough for volume\n\ set tkxox(vol_slider_passive) #570a570a570a; # volume slider when nothing append\n\ set tkxox(vol_slider_active) #204120412041; # volume slider when we interact\n\ set tkxox(vol_highlightbackground) $tkxox(col_def_bg); # the border outside volumes\n\ \n\ set tkxox(color_score_bg) #c24d108c09e9; # the color of rectangles arround notes\n\ set tkxox(score_active_note) #ffffff; # the color of used notes on the score\n\ set tkxox(score_passive_note) #87cfff; # the color of unused notes (at right)\n\ \n\ set tkxox(color_title_fg) $tkxox(color_bg_shift); # the color of \"RHYTHM COMPOSER\"\n\ set tkxox(color_title_logo_fg) $tkxox(vol_slider_active); # the color of \"TK-707\"\n\ set tkxox(color_title_bg) $tkxox(col_def_bg); \n\ \n\ set tkxox(tick_flam_duration) 4\n\ #\n\ # color background\n\ #\n\ tk_setPalette $tkxox(col_def_bg)\n\ #\n\ #\n\ # Properties of note elements:\n\ # WARNING: may be as in \n\ #\n\ set tkxox(flam) [expr 1 << 0]\n\ set tkxox(weak_accent) [expr 1 << 1]\n\ set tkxox(strong_accent) [expr 1 << 2]\n\ set tkxox(zero_velocity) [expr 1 << 3]\n\ set tkxox(velocity_field) [expr $tkxox(zero_velocity) | \\\n\ $tkxox(weak_accent) | \\\n\ $tkxox(strong_accent)]\n\ \n\ set tkxox(col_default_velocity) $tkxox(but_grey)\n\ set tkxox(col_weak_accent) $tkxox(lamp_on)\n\ set tkxox(col_strong_accent) #ff0000\n\ set tkxox(col_zero_velocity) white\n\ \n\ \n\ set mode(rdrw) $tkxox(READ)\n\ set mode(patr) -1\n\ set mode(stopgo) $tkxox(STOP)\n\ set mode(patgroup) 0\n\ set mode(current_track) 0\n\ set mode(current_pattern) 0\n\ set mode(current_instr) 1\n\ set mode(measure) -1\n\ set mode(tempo) 120\n\ set mode(cartridge) 0\n\ set mode(midi_channel) 0\n\ set mode(PATTERN_REPEAT) false\n\ set mode(TRACK_START) false\n\ set mode(REPEAT_INTERVAL) 5\n\ set mode(showtrack) true\n\ set mode(current_accent) 0\n\ set mode(file_status) $tkxox(FILE_UNCHANGED)\n\ \n\ set flash(count) -1\n\ set flash(duration) 20\n\ \n\ # Default sound mapping\n\ #\n\ set sound(1,name) \"Bass 1\"\n\ set sound(1,shortname) \"Bass 1\"\n\ set sound(1,note) 35\n\ set sound(2,name) \"Bass 2\"\n\ set sound(2,shortname) \"Bass 2\"\n\ set sound(2,note) 36\n\ set sound(3,name) \"Snare 1\"\n\ set sound(3,shortname) \"Snare 1\"\n\ set sound(3,note) 38\n\ set sound(4,name) \"Snare 2\"\n\ set sound(4,shortname) \"Snare 2\"\n\ set sound(4,note) 40\n\ set sound(5,name) \"LowTom\"\n\ set sound(5,shortname) \"LowTom\"\n\ set sound(5,note) 41\n\ set sound(6,name) \"MidTom\"\n\ set sound(6,shortname) \"MidTom\"\n\ set sound(6,note) 45\n\ set sound(7,name) \"HighTom\"\n\ set sound(7,shortname) \"HighTom\"\n\ set sound(7,note) 48\n\ set sound(8,name) \"Rim\"\n\ set sound(8,shortname) \"Rim\"\n\ set sound(8,note) 37\n\ set sound(9,name) \"Cowbell\"\n\ set sound(9,shortname) \"Cowbell\"\n\ set sound(9,note) 56\n\ set sound(10,name) \"Hand Clap\"\n\ set sound(10,shortname) \"Clap\"\n\ set sound(10,note) 39\n\ set sound(11,name) \"Tambourine\"\n\ set sound(11,shortname) \"Tamb\"\n\ set sound(11,note) 54\n\ set sound(12,name) \"HH Closed 1\"\n\ set sound(12,shortname) \"HH C1\"\n\ set sound(12,note) 42\n\ set sound(13,name) \"HH Closed 2\"\n\ set sound(13,shortname) \"HH C2\"\n\ set sound(13,note) 42\n\ set sound(14,name) \"HHat Open\"\n\ set sound(14,shortname) \"HH Open\"\n\ set sound(14,note) 46\n\ set sound(15,name) \"Crash\"\n\ set sound(15,shortname) \"Crash\"\n\ set sound(15,note) 49\n\ set sound(16,name) \"Ride\"\n\ set sound(16,shortname) \"Ride\"\n\ set sound(16,note) 51\n\ tk7_set_sounds\n\ #\n\ # instrument(1:16) to volume(1:10) mapping\n\ #\n\ set instrument_to_volume(1) 1\n\ set instrument_to_volume(2) 1\n\ set instrument_to_volume(3) 2\n\ set instrument_to_volume(4) 2\n\ set instrument_to_volume(5) 3\n\ set instrument_to_volume(6) 4\n\ set instrument_to_volume(7) 5\n\ set instrument_to_volume(8) 6\n\ set instrument_to_volume(9) 6\n\ set instrument_to_volume(10) 7\n\ set instrument_to_volume(11) 7\n\ set instrument_to_volume(12) 8\n\ set instrument_to_volume(13) 8\n\ set instrument_to_volume(14) 8\n\ set instrument_to_volume(15) 9\n\ set instrument_to_volume(16) 10\n\ \n\ #\n\ # default abbrevs, for volume labels\n\ #\n\ set sound(1,abbrev) \"BASS\"\n\ set sound(2,abbrev) \"\"\n\ set sound(3,abbrev) \"SNARE\"\n\ set sound(4,abbrev) \"\"\n\ set sound(5,abbrev) \"LT\"\n\ set sound(6,abbrev) \"MT\"\n\ set sound(7,abbrev) \"HT\"\n\ set sound(8,abbrev) \"R\"\n\ set sound(9,abbrev) \"CB\"\n\ set sound(10,abbrev) \"C\"\n\ set sound(11,abbrev) \"T\"\n\ set sound(12,abbrev) \"HH\"\n\ set sound(13,abbrev) \"\"\n\ set sound(14,abbrev) \"\"\n\ set sound(15,abbrev) \"CRASH\"\n\ set sound(16,abbrev) \"RIDE\"\n\ #\n\ # default volume labels\n\ #\n\ set volume_label(0) \"ACCENT\"\n\ set volume_label(1) \"$sound(1,abbrev)\"\n\ set volume_label(2) \"$sound(3,abbrev)\"\n\ set volume_label(3) \"$sound(5,abbrev)\"\n\ set volume_label(4) \"$sound(6,abbrev)\"\n\ set volume_label(5) \"$sound(7,abbrev)\"\n\ set volume_label(6) \"$sound(8,abbrev)/$sound(9,abbrev)\"\n\ set volume_label(7) \"$sound(10,abbrev)/$sound(11,abbrev)\"\n\ set volume_label(8) \"$sound(12,abbrev)\"\n\ set volume_label(9) \"$sound(15,abbrev)\"\n\ set volume_label(10) \"$sound(16,abbrev)\"\n\ #\n\ # default implicit delay (e.g. short sound)\n\ #\n\ set has_delay(1) 0\n\ set has_delay(2) 0\n\ set has_delay(3) 0\n\ set has_delay(4) 0\n\ set has_delay(5) 0\n\ set has_delay(6) 0\n\ set has_delay(7) 0\n\ set has_delay(8) 0\n\ set has_delay(9) 0\n\ set has_delay(10) 0\n\ set has_delay(11) 0\n\ set has_delay(12) 0\n\ set has_delay(13) 0\n\ set has_delay(14) 0\n\ set has_delay(15) 0\n\ set has_delay(16) 0\n\ "; tk707-0.8/ports.c0000644000175100017510000001424410142141776010503 00000000000000char tcl_ports[] = "\ #\n\ # This file is part of tk707.\n\ #\n\ # Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito \n\ #\n\ # tk707 is free software; you can redistribute it and/or modify\n\ # it under the terms of the GNU General Public License as published by\n\ # the Free Software Foundation; either version 2 of the License, or\n\ # (at your option) any later version.\n\ #\n\ # Foobar is distributed in the hope that it will be useful,\n\ # but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ # GNU General Public License for more details.\n\ #\n\ # You should have received a copy of the GNU General Public License\n\ # along with Foobar; if not, write to the Free Software\n\ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n\ #\n\ # -----------------------------------------------------------------------------\n\ # File ports.tcl\n\ # GUI for selection of ALSA port.\n\ # -----------------------------------------------------------------------------\n\ \n\ proc port_setup {} {\n\ global tcl_rcFileName\n\ global ports\n\ global iolists\n\ global font12\n\ global normal_r_14\n\ \n\ set ports .setup\n\ toplevel $ports\n\ wm title $ports \"TK-707 ALSA port setup\"\n\ \n\ set howto .setup.h\n\ set howtotext $howto.text\n\ set howtoscroll $howto.scroll\n\ frame $howto ;#-relief groove -borderwidth 2\n\ canvas $howtotext -yscrollcommand \"$howtoscroll set\" -width 13.5c -height 5c\n\ scrollbar $howtoscroll -command \"$howtotext yview\" -width 0.4c\n\ pack $howtoscroll -side right -fill y\n\ pack $howtotext\n\ pack $howto\n\ \n\ $howtotext create text 0.2c 0.2c -anchor nw -font *-${normal_r_14}-* -text \\\n\ \"Double click on one of Output Ports to make it the Selected Output.\\n\n\ The SAVE button will save the setting in ~/.tk707rc so that this\n\ selection dialogue won't appear next time TK-707 is started.\\n\n\ The OK button will close this dialogue and allow TK-707 to start\n\ using the selected port. If the current setting hasn't been SAVEd\n\ then this dialogue will appear again next time TK-707 is run.\n\ If no port has been selected, TK707 will not start.\\n\n\ Input Port selection is for future use and currently has no effect.\\n\n\ When this selection dialogue is raised from the File->Ports menu,\n\ a selection can be SAVEd but ports cannot be changed while\n\ TK-707 is running (yet).\"\n\ \n\ set iolists $ports.l\n\ canvas $iolists -width 14c -height 8c -relief groove -borderwidth 2\n\ pack $iolists\n\ set olist $iolists.ol\n\ set ilist $iolists.il\n\ set oselect $iolists.op\n\ set iselect $iolists.ip\n\ \n\ scrollbar $iolists.os -command \"$olist yview\"\n\ scrollbar $iolists.is -command \"$ilist yview\"\n\ listbox $olist -font *-${normal_r_14}-* -width 26 -height 10 -selectmode browse -exportselection 1 -yscroll \"$iolists.os set\"\n\ listbox $ilist -font *-${normal_r_14}-* -width 26 -height 10 -selectmode browse -exportselection 1 -yscroll \"$iolists.is set\"\n\ \n\ label $oselect -width 28 -height 1 -relief sunken -borderwidth 2\n\ label $iselect -width 28 -height 1 -relief sunken -borderwidth 2\n\ \n\ \n\ $iolists create text 2c 0.5c -font *-${normal_r_14}-* -text \"Input Ports\" -anchor nw\n\ $iolists create text 9c 0.5c -font *-${normal_r_14}-* -text \"Output Ports\" -anchor nw\n\ $iolists create window 0c 1.5c -height 4c -window $iolists.is -anchor nw\n\ $iolists create window 0.5c 1.5c -height 4c -window $ilist -anchor nw\n\ $iolists create window 7c 1.5c -height 4c -window $iolists.os -anchor nw\n\ $iolists create window 7.5c 1.5c -height 4c -window $olist -anchor nw\n\ $iolists create window 0.2c 6c -window $iselect -anchor nw\n\ $iolists create window 7.05c 6c -window $oselect -anchor nw\n\ $iolists create text 2c 7c -font *-${normal_r_14}-* -text \"Selected Input\" -anchor nw\n\ $iolists create text 9c 7c -font *-${normal_r_14}-* -text \"Selected Output\" -anchor nw\n\ \n\ # Get list of output ports\n\ set oportlist [tk7_port_list 1]\n\ foreach i $oportlist {\n\ $olist insert end $i\n\ }\n\ # Get list of input ports\n\ set iportlist [tk7_port_list 0]\n\ foreach i $iportlist {\n\ $ilist insert end $i\n\ }\n\ bind .setup.l.il {\n\ $iolists.ip configure -font *-${normal_r_14}-* -text [selection get]\n\ }\n\ bind $olist {\n\ $iolists.op configure -font *-${normal_r_14}-* -text [selection get]\n\ }\n\ set portacts $ports.pa\n\ canvas $portacts -width 14c -height 1.5c\n\ pack $portacts\n\ \n\ button $portacts.c -font *-${normal_r_14}-* -text CANCEL -width 6 -command {\n\ if {! [tk7_port_setcheck]} {\n\ puts \"NO PORTS SET\"\n\ destroy .\n\ exit\n\ } else {\n\ destroy $ports\n\ }\n\ }\n\ button $portacts.s -font *-${normal_r_14}-* -text SAVE -width 6 -command {\n\ set oplist [.setup.l.op configure -text]\n\ # puts \"XX${oplist}XX\"\n\ if {[llength $oplist] != 5} {\n\ puts nothing\n\ } else {\n\ if {[llength [lindex $oplist 4]] > 0} {\n\ set op [lindex [lindex $oplist 4] 0]\n\ set oc [lindex [lindex $oplist 4] 1]\n\ set tkxox(ALSA_OUTPORT) \"${op}:${oc}\"\n\ # Save selection\n\ set OPstr [format \"set tkxox(ALSA_OUTPORT) %d:%d\" $op $oc]\n\ set f [open $tcl_rcFileName w]\n\ seek $f 0 end\n\ puts $f $OPstr\n\ close $f\n\ destroy $ports\n\ }\n\ }\n\ }\n\ button $portacts.b -font *-${normal_r_14}-* -text OK -width 6 -command {\n\ set oplist [.setup.l.op configure -text]\n\ if {[llength $oplist] != 5} {\n\ puts nothing\n\ } else {\n\ if {[llength [lindex $oplist 4]] > 0} {\n\ set op [lindex [lindex $oplist 4] 0]\n\ set oc [lindex [lindex $oplist 4] 1]\n\ set tkxox(ALSA_OUTPORT) \"${op}:${oc}\"\n\ }\n\ }\n\ if {! [tk7_port_setcheck]} {\n\ #puts \"NO PORTS SET\"\n\ destroy .\n\ exit\n\ } else {\n\ destroy $ports\n\ }\n\ }\n\ $portacts create window 3c 0.75c -window $portacts.c\n\ $portacts create window 7c 0.75c -window $portacts.s\n\ $portacts create window 11c 0.75c -window $portacts.b\n\ \n\ grab set $ports\n\ tkwait window $portacts\n\ }\n\ "; tk707-0.8/title.c0000644000175100017510000007541710142141774010464 00000000000000char tcl_title[] = "\ # do not edit.\n\ # file automatically generated by:\n\ # ./title_fig2tcl.sh ./title.fig\n\ \n\ set title $vcunit.title\n\ \n\ canvas ${title} -width ${title_width_in_inch}i -height ${title_height_in_inch}i \\\n\ -bg $tkxox(col_def_bg) \\\n\ -highlightthickness 0\n\ \n\ ${title} config -xscrollincrement 1p -yscrollincrement 1p\n\ ${title} xview scroll ${title_scroll_x_in_point} u\n\ ${title} yview scroll ${title_scroll_y_in_point} u\n\ \n\ pack ${title} -side top\n\ \n\ # The xfig objects begin here\n\ ${title} create polygon 0.000000i 0.000000i 6.750000i 0.000000i 6.750000i 0.787500i \\\n\ 0.000000i 0.787500i -outline {} -fill $tkxox(color_title_bg) -width 0\n\ ${title} create line 0.000000i 0.000000i 6.750000i 0.000000i 6.750000i 0.787500i \\\n\ 0.000000i 0.787500i 0.000000i 0.000000i -fill $tkxox(color_title_bg)\n\ ${title} create polygon 4.744500i 0.380250i 4.953000i 0.652500i 5.097750i 0.652500i \\\n\ 4.875000i 0.380250i 5.067750i 0.124500i 4.933500i 0.124500i -outline {} -fill $tkxox(color_title_logo_fg) \\\n\ -width 0\n\ ${title} create polygon 4.744500i 0.380250i 4.953000i 0.652500i 5.097750i 0.652500i \\\n\ 4.875000i 0.380250i 5.067750i 0.124500i 4.933500i 0.124500i -outline $tkxox(color_title_logo_fg) -fill \\\n\ {}\n\ ${title} create polygon 5.124750i 0.407250i 5.333250i 0.407250i 5.333250i 0.489000i \\\n\ 5.124750i 0.489000i -outline {} -fill $tkxox(color_title_logo_fg) -width 0\n\ ${title} create line 5.124750i 0.407250i 5.333250i 0.407250i 5.333250i 0.489000i \\\n\ 5.124750i 0.489000i 5.124750i 0.407250i -fill $tkxox(color_title_logo_fg)\n\ ${title} create polygon 0.699750i 0.516000i 0.762750i 0.411000i 0.819000i 0.411000i \\\n\ 0.725250i 0.547500i 0.725250i 0.669000i 0.669000i 0.669000i 0.669000i 0.546750i \\\n\ 0.585000i 0.411000i 0.637500i 0.411000i -outline {} -fill $tkxox(color_title_fg) -width 0\n\ ${title} create polygon 0.699750i 0.516000i 0.762750i 0.411000i 0.819000i 0.411000i \\\n\ 0.725250i 0.547500i 0.725250i 0.669000i 0.669000i 0.669000i 0.669000i 0.546750i \\\n\ 0.585000i 0.411000i 0.637500i 0.411000i -outline $tkxox(color_title_fg) -fill {}\n\ ${title} create polygon 0.834750i 0.411000i 0.834750i 0.453000i 0.915000i 0.453000i \\\n\ 0.915000i 0.669000i 0.972000i 0.669000i 0.970500i 0.452250i 1.050750i 0.452250i \\\n\ 1.050750i 0.411000i 0.834750i 0.411000i -outline {} -fill $tkxox(color_title_fg) -width 0\n\ ${title} create polygon 0.834750i 0.411000i 0.834750i 0.453000i 0.915000i 0.453000i \\\n\ 0.915000i 0.669000i 0.972000i 0.669000i 0.970500i 0.452250i 1.050750i 0.452250i \\\n\ 1.050750i 0.411000i 0.834750i 0.411000i -outline $tkxox(color_title_fg) -fill {}\n\ ${title} create polygon 4.618500i 0.121500i 4.741500i 0.121500i 4.741500i 0.652500i \\\n\ 4.618500i 0.652500i -outline {} -fill $tkxox(color_title_logo_fg) -width 0\n\ ${title} create line 4.618500i 0.121500i 4.741500i 0.121500i 4.741500i 0.652500i \\\n\ 4.618500i 0.652500i 4.618500i 0.121500i -fill $tkxox(color_title_logo_fg)\n\ ${title} create polygon 6.240000i 0.213000i 6.494250i 0.213000i 6.282750i 0.652500i \\\n\ 6.426750i 0.652500i 6.622500i 0.217500i 6.622500i 0.121500i 6.240000i 0.121500i \\\n\ -outline {} -fill $tkxox(color_title_logo_fg) -width 0\n\ ${title} create polygon 6.240000i 0.213000i 6.494250i 0.213000i 6.282750i 0.652500i \\\n\ 6.426750i 0.652500i 6.622500i 0.217500i 6.622500i 0.121500i 6.240000i 0.121500i \\\n\ -outline $tkxox(color_title_logo_fg) -fill {}\n\ ${title} create polygon 5.364750i 0.214500i 5.619000i 0.214500i 5.407500i 0.652500i \\\n\ 5.551500i 0.652500i 5.749500i 0.219000i 5.748000i 0.121500i 5.364750i 0.121500i \\\n\ -outline {} -fill $tkxox(color_title_logo_fg) -width 0\n\ ${title} create polygon 5.364750i 0.214500i 5.619000i 0.214500i 5.407500i 0.652500i \\\n\ 5.551500i 0.652500i 5.749500i 0.219000i 5.748000i 0.121500i 5.364750i 0.121500i \\\n\ -outline $tkxox(color_title_logo_fg) -fill {}\n\ ${title} create polygon 3.336000i 0.669000i 3.518250i 0.669000i 3.519000i 0.624000i \\\n\ 3.392250i 0.624750i 3.393000i 0.555750i 3.506250i 0.555750i 3.507000i 0.519000i \\\n\ 3.391500i 0.519000i 3.392250i 0.453000i 3.516750i 0.452250i 3.516750i 0.411000i \\\n\ 3.336000i 0.411000i -outline {} -fill $tkxox(color_title_fg) -width 0\n\ ${title} create polygon 3.336000i 0.669000i 3.518250i 0.669000i 3.519000i 0.624000i \\\n\ 3.392250i 0.624750i 3.393000i 0.555750i 3.506250i 0.555750i 3.507000i 0.519000i \\\n\ 3.391500i 0.519000i 3.392250i 0.453000i 3.516750i 0.452250i 3.516750i 0.411000i \\\n\ 3.336000i 0.411000i -outline $tkxox(color_title_fg) -fill {}\n\ ${title} create polygon 3.558000i 0.411000i 3.644250i 0.411000i 3.672750i 0.411000i \\\n\ 3.694500i 0.418500i 3.711000i 0.427500i 3.723750i 0.444000i 3.729000i 0.469500i \\\n\ 3.729000i 0.498750i 3.714750i 0.520500i 3.704250i 0.529500i 3.688500i 0.543000i \\\n\ 3.657750i 0.553500i 3.730500i 0.669000i 3.664500i 0.669000i 3.588750i 0.537000i \\\n\ 3.585750i 0.526500i 3.624750i 0.526500i 3.645000i 0.521250i 3.662250i 0.508500i \\\n\ 3.678750i 0.477750i 3.666000i 0.456000i 3.645000i 0.447750i 3.583500i 0.447750i \\\n\ 3.585750i 0.669000i 3.537000i 0.669000i 3.535500i 0.519000i 3.534750i 0.411000i \\\n\ -outline {} -fill $tkxox(color_title_fg) -width 0\n\ ${title} create polygon 3.558000i 0.411000i 3.644250i 0.411000i 3.672750i 0.411000i \\\n\ 3.694500i 0.418500i 3.711000i 0.427500i 3.723750i 0.444000i 3.729000i 0.469500i \\\n\ 3.729000i 0.498750i 3.714750i 0.520500i 3.704250i 0.529500i 3.688500i 0.543000i \\\n\ 3.657750i 0.553500i 3.730500i 0.669000i 3.664500i 0.669000i 3.588750i 0.537000i \\\n\ 3.585750i 0.526500i 3.624750i 0.526500i 3.645000i 0.521250i 3.662250i 0.508500i \\\n\ 3.678750i 0.477750i 3.666000i 0.456000i 3.645000i 0.447750i 3.583500i 0.447750i \\\n\ 3.585750i 0.669000i 3.537000i 0.669000i 3.535500i 0.519000i 3.534750i 0.411000i \\\n\ -outline $tkxox(color_title_fg) -fill {}\n\ ${title} create polygon 2.685750i 0.411000i 2.772000i 0.411000i 2.800500i 0.411000i \\\n\ 2.822250i 0.425250i 2.838750i 0.434250i 2.851500i 0.450750i 2.856750i 0.476250i \\\n\ 2.856750i 0.505500i 2.842500i 0.527250i 2.832750i 0.540750i 2.816250i 0.554250i \\\n\ 2.775000i 0.568500i 2.714250i 0.570750i 2.713500i 0.533250i 2.752500i 0.533250i \\\n\ 2.785500i 0.524250i 2.803500i 0.507000i 2.806500i 0.484500i 2.793750i 0.462750i \\\n\ 2.772750i 0.454500i 2.711250i 0.454500i 2.713500i 0.669000i 2.664000i 0.669000i \\\n\ 2.664000i 0.513750i 2.664000i 0.411000i -outline {} -fill $tkxox(color_title_fg) -width 0\n\ ${title} create polygon 2.685750i 0.411000i 2.772000i 0.411000i 2.800500i 0.411000i \\\n\ 2.822250i 0.425250i 2.838750i 0.434250i 2.851500i 0.450750i 2.856750i 0.476250i \\\n\ 2.856750i 0.505500i 2.842500i 0.527250i 2.832750i 0.540750i 2.816250i 0.554250i \\\n\ 2.775000i 0.568500i 2.714250i 0.570750i 2.713500i 0.533250i 2.752500i 0.533250i \\\n\ 2.785500i 0.524250i 2.803500i 0.507000i 2.806500i 0.484500i 2.793750i 0.462750i \\\n\ 2.772750i 0.454500i 2.711250i 0.454500i 2.713500i 0.669000i 2.664000i 0.669000i \\\n\ 2.664000i 0.513750i 2.664000i 0.411000i -outline $tkxox(color_title_fg) -fill {}\n\ ${title} create polygon 1.332000i 0.669000i 1.376250i 0.669000i 1.376250i 0.477000i \\\n\ 1.440000i 0.669000i 1.492500i 0.669000i 1.557000i 0.474000i 1.557750i 0.669000i \\\n\ 1.610250i 0.669000i 1.610250i 0.411000i 1.532250i 0.411000i 1.469250i 0.593250i \\\n\ 1.407000i 0.411000i 1.332750i 0.411000i -outline {} -fill $tkxox(color_title_fg) -width 0\n\ ${title} create polygon 1.332000i 0.669000i 1.376250i 0.669000i 1.376250i 0.477000i \\\n\ 1.440000i 0.669000i 1.492500i 0.669000i 1.557000i 0.474000i 1.557750i 0.669000i \\\n\ 1.610250i 0.669000i 1.610250i 0.411000i 1.532250i 0.411000i 1.469250i 0.593250i \\\n\ 1.407000i 0.411000i 1.332750i 0.411000i -outline $tkxox(color_title_fg) -fill {}\n\ ${title} create polygon 1.067250i 0.669000i 1.125750i 0.669000i 1.125750i 0.555750i \\\n\ 1.248750i 0.556500i 1.248750i 0.669000i 1.308750i 0.669000i 1.308750i 0.411000i \\\n\ 1.245000i 0.411000i 1.245750i 0.518250i 1.125750i 0.518250i 1.126500i 0.411000i \\\n\ 1.066500i 0.411000i -outline {} -fill $tkxox(color_title_fg) -width 0\n\ ${title} create polygon 1.067250i 0.669000i 1.125750i 0.669000i 1.125750i 0.555750i \\\n\ 1.248750i 0.556500i 1.248750i 0.669000i 1.308750i 0.669000i 1.308750i 0.411000i \\\n\ 1.245000i 0.411000i 1.245750i 0.518250i 1.125750i 0.518250i 1.126500i 0.411000i \\\n\ 1.066500i 0.411000i -outline $tkxox(color_title_fg) -fill {}\n\ ${title} create polygon 0.250500i 0.411000i 0.272250i 0.421500i 0.288750i 0.430500i \\\n\ 0.301500i 0.447000i 0.306750i 0.472500i 0.306750i 0.501750i 0.292500i 0.523500i \\\n\ 0.282000i 0.532500i 0.266250i 0.546000i 0.235500i 0.556500i 0.308250i 0.669000i \\\n\ 0.242250i 0.669000i 0.166500i 0.540000i 0.163500i 0.529500i 0.202500i 0.529500i \\\n\ 0.222750i 0.524250i 0.240000i 0.511500i 0.256500i 0.480750i 0.243750i 0.459000i \\\n\ 0.222750i 0.450750i 0.161250i 0.450750i 0.163500i 0.669000i 0.112500i 0.669000i \\\n\ 0.112500i 0.410250i -outline {} -fill $tkxox(color_title_fg) -width 0\n\ ${title} create polygon 0.250500i 0.411000i 0.272250i 0.421500i 0.288750i 0.430500i \\\n\ 0.301500i 0.447000i 0.306750i 0.472500i 0.306750i 0.501750i 0.292500i 0.523500i \\\n\ 0.282000i 0.532500i 0.266250i 0.546000i 0.235500i 0.556500i 0.308250i 0.669000i \\\n\ 0.242250i 0.669000i 0.166500i 0.540000i 0.163500i 0.529500i 0.202500i 0.529500i \\\n\ 0.222750i 0.524250i 0.240000i 0.511500i 0.256500i 0.480750i 0.243750i 0.459000i \\\n\ 0.222750i 0.450750i 0.161250i 0.450750i 0.163500i 0.669000i 0.112500i 0.669000i \\\n\ 0.112500i 0.410250i -outline $tkxox(color_title_fg) -fill {}\n\ ${title} create polygon 0.327750i 0.411000i 0.327750i 0.669000i 0.378750i 0.669000i \\\n\ 0.380250i 0.551250i 0.508500i 0.551250i 0.509250i 0.669000i 0.569250i 0.669000i \\\n\ 0.569250i 0.411000i 0.506250i 0.411000i 0.506250i 0.520500i 0.379500i 0.520500i \\\n\ 0.379500i 0.411000i 0.321750i 0.411000i -outline {} -fill $tkxox(color_title_fg) -width 0\n\ ${title} create polygon 0.327750i 0.411000i 0.327750i 0.669000i 0.378750i 0.669000i \\\n\ 0.380250i 0.551250i 0.508500i 0.551250i 0.509250i 0.669000i 0.569250i 0.669000i \\\n\ 0.569250i 0.411000i 0.506250i 0.411000i 0.506250i 0.520500i 0.379500i 0.520500i \\\n\ 0.379500i 0.411000i 0.321750i 0.411000i -outline $tkxox(color_title_fg) -fill {}\n\ ${title} create polygon 2.010750i 0.414000i 2.001000i 0.411750i 1.995750i 0.410250i \\\n\ 1.993500i 0.410250i 1.991250i 0.409500i 1.984500i 0.409500i 1.971750i 0.408750i \\\n\ 1.961250i 0.408750i 1.953750i 0.408750i 1.950000i 0.408000i 1.947750i 0.408000i \\\n\ 1.946250i 0.407250i 1.941750i 0.408000i 1.933500i 0.409500i 1.920750i 0.413250i \\\n\ 1.908000i 0.418500i 1.898250i 0.422250i 1.893000i 0.424500i 1.890000i 0.425250i \\\n\ 1.887000i 0.426750i 1.881750i 0.430500i 1.873500i 0.436500i 1.862250i 0.447000i \\\n\ 1.852500i 0.458250i 1.845750i 0.466500i 1.842750i 0.471000i 1.841250i 0.473250i \\\n\ 1.839750i 0.476250i 1.838250i 0.481500i 1.834500i 0.491250i 1.830000i 0.506250i \\\n\ 1.827000i 0.522000i 1.825500i 0.533250i 1.824750i 0.540000i 1.825500i 0.543750i \\\n\ 1.825500i 0.547500i 1.826250i 0.553500i 1.827750i 0.564000i 1.830000i 0.578250i \\\n\ 1.833750i 0.591000i 1.836000i 0.598500i 1.838250i 0.601500i 1.839000i 0.602250i \\\n\ 1.839750i 0.603000i 1.842750i 0.606000i 1.847250i 0.611250i 1.855500i 0.620250i \\\n\ 1.864500i 0.628500i 1.871250i 0.634500i 1.875750i 0.637500i 1.878750i 0.639000i \\\n\ 1.881000i 0.640500i 1.885500i 0.643500i 1.893000i 0.648000i 1.903500i 0.653250i \\\n\ 1.915500i 0.659250i 1.921500i 0.661500i 1.923000i 0.661500i 1.924500i 0.661500i \\\n\ 1.930500i 0.662250i 1.942500i 0.664500i 1.955250i 0.666000i 1.962000i 0.666000i \\\n\ 1.964250i 0.666000i 1.967250i 0.666000i 1.974000i 0.666000i 1.988250i 0.665250i \\\n\ 1.999500i 0.664500i 2.007750i 0.663750i 2.013000i 0.663000i 2.016000i 0.663000i \\\n\ 2.019000i 0.663000i 2.023500i 0.662250i 2.030250i 0.660750i 2.038500i 0.658500i \\\n\ 2.043750i 0.656250i 2.047500i 0.654750i 2.049000i 0.653250i 2.049000i 0.652500i \\\n\ 2.049000i 0.651750i 2.048250i 0.650250i 2.049000i 0.648750i 2.049750i 0.646500i \\\n\ 2.050500i 0.643500i 2.051250i 0.639750i 2.051250i 0.636000i 2.051250i 0.634500i \\\n\ 2.052000i 0.633000i 2.052000i 0.631500i 2.051250i 0.630000i 2.049750i 0.627750i \\\n\ 2.046750i 0.624750i 2.040750i 0.622500i 2.037000i 0.622500i 2.034750i 0.623250i \\\n\ 2.030250i 0.624000i 2.021250i 0.624750i 2.013750i 0.625500i 2.010000i 0.626250i \\\n\ 2.009250i 0.627000i 2.008500i 0.627750i 2.004000i 0.627750i 1.994250i 0.628500i \\\n\ 1.983000i 0.628500i 1.975500i 0.628500i 1.971750i 0.629250i 1.968000i 0.629250i \\\n\ 1.960500i 0.628500i 1.947750i 0.626250i 1.936500i 0.623250i 1.930500i 0.621000i \\\n\ 1.928250i 0.620250i 1.926750i 0.618750i 1.922250i 0.615750i 1.912500i 0.609000i \\\n\ 1.903500i 0.601500i 1.898250i 0.597000i 1.896000i 0.594750i 1.894500i 0.592500i \\\n\ 1.890750i 0.587250i 1.884750i 0.578250i 1.880250i 0.568500i 1.878750i 0.564000i \\\n\ 1.878750i 0.562500i 1.878750i 0.560250i 1.878000i 0.555000i 1.877250i 0.545250i \\\n\ 1.877250i 0.534750i 1.877250i 0.528750i 1.877250i 0.526500i 1.877250i 0.524250i \\\n\ 1.878000i 0.518250i 1.881000i 0.508500i 1.884750i 0.498750i 1.886250i 0.494250i \\\n\ 1.886250i 0.492000i 1.887000i 0.490500i 1.890750i 0.486000i 1.898250i 0.478500i \\\n\ 1.908000i 0.471000i 1.914000i 0.467250i 1.917000i 0.465750i 1.920000i 0.465000i \\\n\ 1.927500i 0.462000i 1.938750i 0.457500i 1.950000i 0.453750i 1.955250i 0.452250i \\\n\ 1.957500i 0.451500i 1.959000i 0.451500i 1.965000i 0.450750i 1.974750i 0.450000i \\\n\ 1.984500i 0.450000i 1.989750i 0.450000i 1.991250i 0.450750i 1.992750i 0.450750i \\\n\ 1.998000i 0.452250i 2.007000i 0.453750i 2.016750i 0.456000i 2.022000i 0.458250i \\\n\ 2.024250i 0.459750i 2.026500i 0.461250i 2.031000i 0.462750i 2.038500i 0.462750i \\\n\ 2.043750i 0.461250i 2.047500i 0.459750i 2.049750i 0.458250i 2.051250i 0.456750i \\\n\ 2.052750i 0.456000i 2.054250i 0.453750i 2.055000i 0.450750i 2.055750i 0.446250i \\\n\ 2.055000i 0.441750i 2.052750i 0.438750i 2.051250i 0.436500i 2.049750i 0.435000i \\\n\ 2.047500i 0.434250i 2.045250i 0.432000i 2.041500i 0.429000i 2.036250i 0.425250i \\\n\ 2.029500i 0.420750i 2.025750i 0.418500i 2.025000i 0.418500i 2.024250i 0.417750i \\\n\ 2.019750i 0.416250i -outline {} -fill $tkxox(color_title_fg) -width 0\n\ ${title} create polygon 2.010750i 0.414000i 2.001000i 0.411750i 1.995750i 0.410250i \\\n\ 1.993500i 0.410250i 1.991250i 0.409500i 1.984500i 0.409500i 1.971750i 0.408750i \\\n\ 1.961250i 0.408750i 1.953750i 0.408750i 1.950000i 0.408000i 1.947750i 0.408000i \\\n\ 1.946250i 0.407250i 1.941750i 0.408000i 1.933500i 0.409500i 1.920750i 0.413250i \\\n\ 1.908000i 0.418500i 1.898250i 0.422250i 1.893000i 0.424500i 1.890000i 0.425250i \\\n\ 1.887000i 0.426750i 1.881750i 0.430500i 1.873500i 0.436500i 1.862250i 0.447000i \\\n\ 1.852500i 0.458250i 1.845750i 0.466500i 1.842750i 0.471000i 1.841250i 0.473250i \\\n\ 1.839750i 0.476250i 1.838250i 0.481500i 1.834500i 0.491250i 1.830000i 0.506250i \\\n\ 1.827000i 0.522000i 1.825500i 0.533250i 1.824750i 0.540000i 1.825500i 0.543750i \\\n\ 1.825500i 0.547500i 1.826250i 0.553500i 1.827750i 0.564000i 1.830000i 0.578250i \\\n\ 1.833750i 0.591000i 1.836000i 0.598500i 1.838250i 0.601500i 1.839000i 0.602250i \\\n\ 1.839750i 0.603000i 1.842750i 0.606000i 1.847250i 0.611250i 1.855500i 0.620250i \\\n\ 1.864500i 0.628500i 1.871250i 0.634500i 1.875750i 0.637500i 1.878750i 0.639000i \\\n\ 1.881000i 0.640500i 1.885500i 0.643500i 1.893000i 0.648000i 1.903500i 0.653250i \\\n\ 1.915500i 0.659250i 1.921500i 0.661500i 1.923000i 0.661500i 1.924500i 0.661500i \\\n\ 1.930500i 0.662250i 1.942500i 0.664500i 1.955250i 0.666000i 1.962000i 0.666000i \\\n\ 1.964250i 0.666000i 1.967250i 0.666000i 1.974000i 0.666000i 1.988250i 0.665250i \\\n\ 1.999500i 0.664500i 2.007750i 0.663750i 2.013000i 0.663000i 2.016000i 0.663000i \\\n\ 2.019000i 0.663000i 2.023500i 0.662250i 2.030250i 0.660750i 2.038500i 0.658500i \\\n\ 2.043750i 0.656250i 2.047500i 0.654750i 2.049000i 0.653250i 2.049000i 0.652500i \\\n\ 2.049000i 0.651750i 2.048250i 0.650250i 2.049000i 0.648750i 2.049750i 0.646500i \\\n\ 2.050500i 0.643500i 2.051250i 0.639750i 2.051250i 0.636000i 2.051250i 0.634500i \\\n\ 2.052000i 0.633000i 2.052000i 0.631500i 2.051250i 0.630000i 2.049750i 0.627750i \\\n\ 2.046750i 0.624750i 2.040750i 0.622500i 2.037000i 0.622500i 2.034750i 0.623250i \\\n\ 2.030250i 0.624000i 2.021250i 0.624750i 2.013750i 0.625500i 2.010000i 0.626250i \\\n\ 2.009250i 0.627000i 2.008500i 0.627750i 2.004000i 0.627750i 1.994250i 0.628500i \\\n\ 1.983000i 0.628500i 1.975500i 0.628500i 1.971750i 0.629250i 1.968000i 0.629250i \\\n\ 1.960500i 0.628500i 1.947750i 0.626250i 1.936500i 0.623250i 1.930500i 0.621000i \\\n\ 1.928250i 0.620250i 1.926750i 0.618750i 1.922250i 0.615750i 1.912500i 0.609000i \\\n\ 1.903500i 0.601500i 1.898250i 0.597000i 1.896000i 0.594750i 1.894500i 0.592500i \\\n\ 1.890750i 0.587250i 1.884750i 0.578250i 1.880250i 0.568500i 1.878750i 0.564000i \\\n\ 1.878750i 0.562500i 1.878750i 0.560250i 1.878000i 0.555000i 1.877250i 0.545250i \\\n\ 1.877250i 0.534750i 1.877250i 0.528750i 1.877250i 0.526500i 1.877250i 0.524250i \\\n\ 1.878000i 0.518250i 1.881000i 0.508500i 1.884750i 0.498750i 1.886250i 0.494250i \\\n\ 1.886250i 0.492000i 1.887000i 0.490500i 1.890750i 0.486000i 1.898250i 0.478500i \\\n\ 1.908000i 0.471000i 1.914000i 0.467250i 1.917000i 0.465750i 1.920000i 0.465000i \\\n\ 1.927500i 0.462000i 1.938750i 0.457500i 1.950000i 0.453750i 1.955250i 0.452250i \\\n\ 1.957500i 0.451500i 1.959000i 0.451500i 1.965000i 0.450750i 1.974750i 0.450000i \\\n\ 1.984500i 0.450000i 1.989750i 0.450000i 1.991250i 0.450750i 1.992750i 0.450750i \\\n\ 1.998000i 0.452250i 2.007000i 0.453750i 2.016750i 0.456000i 2.022000i 0.458250i \\\n\ 2.024250i 0.459750i 2.026500i 0.461250i 2.031000i 0.462750i 2.038500i 0.462750i \\\n\ 2.043750i 0.461250i 2.047500i 0.459750i 2.049750i 0.458250i 2.051250i 0.456750i \\\n\ 2.052750i 0.456000i 2.054250i 0.453750i 2.055000i 0.450750i 2.055750i 0.446250i \\\n\ 2.055000i 0.441750i 2.052750i 0.438750i 2.051250i 0.436500i 2.049750i 0.435000i \\\n\ 2.047500i 0.434250i 2.045250i 0.432000i 2.041500i 0.429000i 2.036250i 0.425250i \\\n\ 2.029500i 0.420750i 2.025750i 0.418500i 2.025000i 0.418500i 2.024250i 0.417750i \\\n\ 2.019750i 0.416250i -outline $tkxox(color_title_fg) -fill {}\n\ ${title} create polygon 3.246000i 0.408000i 3.236250i 0.408000i 3.231000i 0.408750i \\\n\ 3.229500i 0.408750i 3.227250i 0.409500i 3.223500i 0.410250i 3.215250i 0.411750i \\\n\ 3.207000i 0.413250i 3.204000i 0.414000i 3.203250i 0.414000i 3.201000i 0.414750i \\\n\ 3.194250i 0.417750i 3.188250i 0.421500i 3.185250i 0.423000i 3.184500i 0.424500i \\\n\ 3.182250i 0.426750i 3.177000i 0.432000i 3.171750i 0.438000i 3.169500i 0.441000i \\\n\ 3.168750i 0.441750i 3.167250i 0.444750i 3.164250i 0.452250i 3.162750i 0.460500i \\\n\ 3.162000i 0.464250i 3.162750i 0.465750i 3.162750i 0.469500i 3.163500i 0.477750i \\\n\ 3.164250i 0.485250i 3.164250i 0.488250i 3.163500i 0.489000i 3.164250i 0.492000i \\\n\ 3.167250i 0.499500i 3.171000i 0.506250i 3.174000i 0.510750i 3.176250i 0.513000i \\\n\ 3.177750i 0.514500i 3.181500i 0.518250i 3.186750i 0.524250i 3.192750i 0.530250i \\\n\ 3.195000i 0.531750i 3.195750i 0.531750i 3.198000i 0.533250i 3.203250i 0.537000i \\\n\ 3.207750i 0.540750i 3.209250i 0.541500i 3.211500i 0.543000i 3.216750i 0.547500i \\\n\ 3.222750i 0.552750i 3.225750i 0.556500i 3.228000i 0.558000i 3.229500i 0.560250i \\\n\ 3.233250i 0.564000i 3.239250i 0.569250i 3.245250i 0.574500i 3.247500i 0.575250i \\\n\ 3.248250i 0.575250i 3.249750i 0.576000i 3.253500i 0.580500i 3.256500i 0.585000i \\\n\ 3.258000i 0.587250i 3.258750i 0.588000i 3.259500i 0.590250i 3.260250i 0.596250i \\\n\ 3.260250i 0.602250i 3.259500i 0.605250i 3.259500i 0.606750i 3.258750i 0.609750i \\\n\ 3.255750i 0.615000i 3.252750i 0.618750i 3.251250i 0.620250i 3.250500i 0.620250i \\\n\ 3.249750i 0.621000i 3.247500i 0.621750i 3.241500i 0.623250i 3.234750i 0.624750i \\\n\ 3.230250i 0.624750i 3.228000i 0.624750i 3.225750i 0.624750i 3.220500i 0.624750i \\\n\ 3.212250i 0.624750i 3.203250i 0.624000i 3.199500i 0.623250i 3.198000i 0.623250i \\\n\ 3.195000i 0.622500i 3.186750i 0.621000i 3.179250i 0.619500i 3.176250i 0.617250i \\\n\ 3.174750i 0.616500i 3.172500i 0.615000i 3.166500i 0.615750i 3.162750i 0.617250i \\\n\ 3.160500i 0.618750i 3.158250i 0.619500i 3.157500i 0.620250i 3.156750i 0.621750i \\\n\ 3.155250i 0.623250i 3.154500i 0.625500i 3.153750i 0.630000i 3.154500i 0.636750i \\\n\ 3.156000i 0.640500i 3.157500i 0.642750i 3.160500i 0.646500i 3.165750i 0.653250i \\\n\ 3.171750i 0.658500i 3.174750i 0.660750i 3.175500i 0.661500i 3.179250i 0.663000i \\\n\ 3.189000i 0.666000i 3.198750i 0.668250i 3.204750i 0.669000i 3.207750i 0.669000i \\\n\ 3.210750i 0.668250i 3.216750i 0.669000i 3.228000i 0.669000i 3.238500i 0.669000i \\\n\ 3.244500i 0.669000i 3.246000i 0.669000i 3.247500i 0.669000i 3.252750i 0.669000i \\\n\ 3.263250i 0.667500i 3.273750i 0.666000i 3.279000i 0.665250i 3.281250i 0.665250i \\\n\ 3.283500i 0.665250i 3.288750i 0.663000i 3.297000i 0.659250i 3.304500i 0.654000i \\\n\ 3.308250i 0.651000i 3.309000i 0.649500i 3.309750i 0.647250i 3.312000i 0.643500i \\\n\ 3.316500i 0.636000i 3.319500i 0.628500i 3.321000i 0.624000i 3.321750i 0.622500i \\\n\ 3.321750i 0.621000i 3.322500i 0.616500i 3.322500i 0.607500i 3.322500i 0.598500i \\\n\ 3.321750i 0.594000i 3.321750i 0.591750i 3.321000i 0.589500i 3.319500i 0.585000i \\\n\ 3.316500i 0.576750i 3.312000i 0.569250i 3.309750i 0.566250i 3.307500i 0.564750i \\\n\ 3.306000i 0.564000i 3.303000i 0.561000i 3.297750i 0.555750i 3.292500i 0.550500i \\\n\ 3.291000i 0.549000i 3.290250i 0.549000i 3.288750i 0.548250i 3.283500i 0.543000i \\\n\ 3.278250i 0.538500i 3.276000i 0.535500i 3.274500i 0.534000i 3.273750i 0.532500i \\\n\ 3.270750i 0.529500i 3.264000i 0.524250i 3.257250i 0.519000i 3.252750i 0.516000i \\\n\ 3.250500i 0.515250i 3.248250i 0.514500i 3.244500i 0.511500i 3.237750i 0.506250i \\\n\ 3.231000i 0.499500i 3.228000i 0.496500i 3.227250i 0.495000i 3.225000i 0.492000i \\\n\ 3.222000i 0.485250i 3.220500i 0.479250i 3.219750i 0.476250i 3.219750i 0.474750i \\\n\ 3.220500i 0.473250i 3.221250i 0.470250i 3.222750i 0.465750i 3.225000i 0.461250i \\\n\ 3.226500i 0.459750i 3.227250i 0.459000i 3.227250i 0.458250i 3.230250i 0.456750i \\\n\ 3.235500i 0.454500i 3.242250i 0.452250i 3.246750i 0.451500i 3.249000i 0.451500i \\\n\ 3.251250i 0.451500i 3.256500i 0.450750i 3.263250i 0.450750i 3.270000i 0.451500i \\\n\ 3.272250i 0.451500i 3.272250i 0.452250i 3.274500i 0.453000i 3.280500i 0.454500i \\\n\ 3.287250i 0.456000i 3.290250i 0.457500i 3.291750i 0.458250i 3.294750i 0.459000i \\\n\ 3.300750i 0.458250i 3.305250i 0.456000i 3.308250i 0.453750i 3.309000i 0.452250i \\\n\ 3.309750i 0.450000i 3.311250i 0.447000i 3.313500i 0.442500i 3.314250i 0.438750i \\\n\ 3.314250i 0.436500i 3.315000i 0.435000i 3.315000i 0.434250i 3.315000i 0.433500i \\\n\ 3.314250i 0.432000i 3.312750i 0.429750i 3.309750i 0.426000i 3.304500i 0.421500i \\\n\ 3.300750i 0.419250i 3.299250i 0.417750i 3.297000i 0.417000i 3.291750i 0.414750i \\\n\ 3.282750i 0.411750i 3.273000i 0.409500i 3.267000i 0.408750i 3.264750i 0.408750i \\\n\ 3.261750i 0.408750i 3.256500i 0.408000i -outline {} -fill $tkxox(color_title_fg) -width 0\n\ ${title} create polygon 3.246000i 0.408000i 3.236250i 0.408000i 3.231000i 0.408750i \\\n\ 3.229500i 0.408750i 3.227250i 0.409500i 3.223500i 0.410250i 3.215250i 0.411750i \\\n\ 3.207000i 0.413250i 3.204000i 0.414000i 3.203250i 0.414000i 3.201000i 0.414750i \\\n\ 3.194250i 0.417750i 3.188250i 0.421500i 3.185250i 0.423000i 3.184500i 0.424500i \\\n\ 3.182250i 0.426750i 3.177000i 0.432000i 3.171750i 0.438000i 3.169500i 0.441000i \\\n\ 3.168750i 0.441750i 3.167250i 0.444750i 3.164250i 0.452250i 3.162750i 0.460500i \\\n\ 3.162000i 0.464250i 3.162750i 0.465750i 3.162750i 0.469500i 3.163500i 0.477750i \\\n\ 3.164250i 0.485250i 3.164250i 0.488250i 3.163500i 0.489000i 3.164250i 0.492000i \\\n\ 3.167250i 0.499500i 3.171000i 0.506250i 3.174000i 0.510750i 3.176250i 0.513000i \\\n\ 3.177750i 0.514500i 3.181500i 0.518250i 3.186750i 0.524250i 3.192750i 0.530250i \\\n\ 3.195000i 0.531750i 3.195750i 0.531750i 3.198000i 0.533250i 3.203250i 0.537000i \\\n\ 3.207750i 0.540750i 3.209250i 0.541500i 3.211500i 0.543000i 3.216750i 0.547500i \\\n\ 3.222750i 0.552750i 3.225750i 0.556500i 3.228000i 0.558000i 3.229500i 0.560250i \\\n\ 3.233250i 0.564000i 3.239250i 0.569250i 3.245250i 0.574500i 3.247500i 0.575250i \\\n\ 3.248250i 0.575250i 3.249750i 0.576000i 3.253500i 0.580500i 3.256500i 0.585000i \\\n\ 3.258000i 0.587250i 3.258750i 0.588000i 3.259500i 0.590250i 3.260250i 0.596250i \\\n\ 3.260250i 0.602250i 3.259500i 0.605250i 3.259500i 0.606750i 3.258750i 0.609750i \\\n\ 3.255750i 0.615000i 3.252750i 0.618750i 3.251250i 0.620250i 3.250500i 0.620250i \\\n\ 3.249750i 0.621000i 3.247500i 0.621750i 3.241500i 0.623250i 3.234750i 0.624750i \\\n\ 3.230250i 0.624750i 3.228000i 0.624750i 3.225750i 0.624750i 3.220500i 0.624750i \\\n\ 3.212250i 0.624750i 3.203250i 0.624000i 3.199500i 0.623250i 3.198000i 0.623250i \\\n\ 3.195000i 0.622500i 3.186750i 0.621000i 3.179250i 0.619500i 3.176250i 0.617250i \\\n\ 3.174750i 0.616500i 3.172500i 0.615000i 3.166500i 0.615750i 3.162750i 0.617250i \\\n\ 3.160500i 0.618750i 3.158250i 0.619500i 3.157500i 0.620250i 3.156750i 0.621750i \\\n\ 3.155250i 0.623250i 3.154500i 0.625500i 3.153750i 0.630000i 3.154500i 0.636750i \\\n\ 3.156000i 0.640500i 3.157500i 0.642750i 3.160500i 0.646500i 3.165750i 0.653250i \\\n\ 3.171750i 0.658500i 3.174750i 0.660750i 3.175500i 0.661500i 3.179250i 0.663000i \\\n\ 3.189000i 0.666000i 3.198750i 0.668250i 3.204750i 0.669000i 3.207750i 0.669000i \\\n\ 3.210750i 0.668250i 3.216750i 0.669000i 3.228000i 0.669000i 3.238500i 0.669000i \\\n\ 3.244500i 0.669000i 3.246000i 0.669000i 3.247500i 0.669000i 3.252750i 0.669000i \\\n\ 3.263250i 0.667500i 3.273750i 0.666000i 3.279000i 0.665250i 3.281250i 0.665250i \\\n\ 3.283500i 0.665250i 3.288750i 0.663000i 3.297000i 0.659250i 3.304500i 0.654000i \\\n\ 3.308250i 0.651000i 3.309000i 0.649500i 3.309750i 0.647250i 3.312000i 0.643500i \\\n\ 3.316500i 0.636000i 3.319500i 0.628500i 3.321000i 0.624000i 3.321750i 0.622500i \\\n\ 3.321750i 0.621000i 3.322500i 0.616500i 3.322500i 0.607500i 3.322500i 0.598500i \\\n\ 3.321750i 0.594000i 3.321750i 0.591750i 3.321000i 0.589500i 3.319500i 0.585000i \\\n\ 3.316500i 0.576750i 3.312000i 0.569250i 3.309750i 0.566250i 3.307500i 0.564750i \\\n\ 3.306000i 0.564000i 3.303000i 0.561000i 3.297750i 0.555750i 3.292500i 0.550500i \\\n\ 3.291000i 0.549000i 3.290250i 0.549000i 3.288750i 0.548250i 3.283500i 0.543000i \\\n\ 3.278250i 0.538500i 3.276000i 0.535500i 3.274500i 0.534000i 3.273750i 0.532500i \\\n\ 3.270750i 0.529500i 3.264000i 0.524250i 3.257250i 0.519000i 3.252750i 0.516000i \\\n\ 3.250500i 0.515250i 3.248250i 0.514500i 3.244500i 0.511500i 3.237750i 0.506250i \\\n\ 3.231000i 0.499500i 3.228000i 0.496500i 3.227250i 0.495000i 3.225000i 0.492000i \\\n\ 3.222000i 0.485250i 3.220500i 0.479250i 3.219750i 0.476250i 3.219750i 0.474750i \\\n\ 3.220500i 0.473250i 3.221250i 0.470250i 3.222750i 0.465750i 3.225000i 0.461250i \\\n\ 3.226500i 0.459750i 3.227250i 0.459000i 3.227250i 0.458250i 3.230250i 0.456750i \\\n\ 3.235500i 0.454500i 3.242250i 0.452250i 3.246750i 0.451500i 3.249000i 0.451500i \\\n\ 3.251250i 0.451500i 3.256500i 0.450750i 3.263250i 0.450750i 3.270000i 0.451500i \\\n\ 3.272250i 0.451500i 3.272250i 0.452250i 3.274500i 0.453000i 3.280500i 0.454500i \\\n\ 3.287250i 0.456000i 3.290250i 0.457500i 3.291750i 0.458250i 3.294750i 0.459000i \\\n\ 3.300750i 0.458250i 3.305250i 0.456000i 3.308250i 0.453750i 3.309000i 0.452250i \\\n\ 3.309750i 0.450000i 3.311250i 0.447000i 3.313500i 0.442500i 3.314250i 0.438750i \\\n\ 3.314250i 0.436500i 3.315000i 0.435000i 3.315000i 0.434250i 3.315000i 0.433500i \\\n\ 3.314250i 0.432000i 3.312750i 0.429750i 3.309750i 0.426000i 3.304500i 0.421500i \\\n\ 3.300750i 0.419250i 3.299250i 0.417750i 3.297000i 0.417000i 3.291750i 0.414750i \\\n\ 3.282750i 0.411750i 3.273000i 0.409500i 3.267000i 0.408750i 3.264750i 0.408750i \\\n\ 3.261750i 0.408750i 3.256500i 0.408000i -outline $tkxox(color_title_fg) -fill {}\n\ ${title} create oval 2.868750i 0.405000i 3.137250i 0.673500i -outline {} -fill \\\n\ $tkxox(color_title_fg) -width 0\n\ ${title} create oval 2.868750i 0.405000i 3.137250i 0.673500i -outline $tkxox(color_title_fg) -fill \\\n\ {}\n\ ${title} create oval 2.073000i 0.406500i 2.341500i 0.675000i -outline {} -fill \\\n\ $tkxox(color_title_fg) -width 0\n\ ${title} create oval 2.073000i 0.406500i 2.341500i 0.675000i -outline $tkxox(color_title_fg) -fill \\\n\ {}\n\ ${title} create oval 5.783250i 0.108000i 6.209250i 0.664500i -outline {} -fill \\\n\ $tkxox(color_title_logo_fg) -width 0\n\ ${title} create oval 5.783250i 0.108000i 6.209250i 0.664500i -outline $tkxox(color_title_logo_fg) -fill \\\n\ {}\n\ ${title} create oval 2.909250i 0.448500i 3.090750i 0.630000i -outline {} -fill \\\n\ $tkxox(color_title_bg) -width 0\n\ ${title} create oval 2.909250i 0.448500i 3.090750i 0.630000i -outline $tkxox(color_title_fg) -fill \\\n\ {}\n\ ${title} create oval 2.113500i 0.450000i 2.295000i 0.631500i -outline {} -fill \\\n\ $tkxox(color_title_bg) -width 0\n\ ${title} create oval 2.113500i 0.450000i 2.295000i 0.631500i -outline $tkxox(color_title_fg) -fill \\\n\ {}\n\ ${title} create oval 5.889750i 0.195750i 6.095250i 0.587250i -outline {} -fill \\\n\ $tkxox(color_title_bg) -width 0\n\ ${title} create oval 5.889750i 0.195750i 6.095250i 0.587250i -outline $tkxox(color_title_logo_fg) -fill \\\n\ {}\n\ ${title} create polygon 4.125000i 0.121500i 4.125000i 0.202500i 4.296000i 0.202500i \\\n\ 4.296000i 0.652500i 4.417500i 0.652500i 4.417500i 0.205500i 4.582500i 0.205500i \\\n\ 4.582500i 0.121500i 4.125000i 0.121500i -outline {} -fill $tkxox(color_title_logo_fg) -width 0\n\ ${title} create polygon 4.125000i 0.121500i 4.125000i 0.202500i 4.296000i 0.202500i \\\n\ 4.296000i 0.652500i 4.417500i 0.652500i 4.417500i 0.205500i 4.582500i 0.205500i \\\n\ 4.582500i 0.121500i 4.125000i 0.121500i -outline $tkxox(color_title_logo_fg) -fill {}\n\ ${title} create polygon 2.365500i 0.669000i 2.409750i 0.669000i 2.409750i 0.477750i \\\n\ 2.473500i 0.669000i 2.526000i 0.669000i 2.590500i 0.474750i 2.591250i 0.669000i \\\n\ 2.643750i 0.669000i 2.643750i 0.411000i 2.565750i 0.411000i 2.502750i 0.594000i \\\n\ 2.440500i 0.411000i 2.366250i 0.411000i -outline {} -fill $tkxox(color_title_fg) -width 0\n\ ${title} create polygon 2.365500i 0.669000i 2.409750i 0.669000i 2.409750i 0.477750i \\\n\ 2.473500i 0.669000i 2.526000i 0.669000i 2.590500i 0.474750i 2.591250i 0.669000i \\\n\ 2.643750i 0.669000i 2.643750i 0.411000i 2.565750i 0.411000i 2.502750i 0.594000i \\\n\ 2.440500i 0.411000i 2.366250i 0.411000i -outline $tkxox(color_title_fg) -fill {}\n\ "; tk707-0.8/score.c0000644000175100017510000065112010142141776010447 00000000000000char tcl_score[] = "\ # do not edit.\n\ # file automatically generated by:\n\ # ./score_fig2tcl.sh ./score.fig\n\ \n\ set score $note_score.score\n\ \n\ canvas ${score} -width ${score_width_in_inch}i -height ${score_height_in_inch}i \\\n\ -bg $tkxox(col_def_bg) \\\n\ -highlightthickness 0\n\ \n\ ${score} config -xscrollincrement 1p -yscrollincrement 1p\n\ ${score} xview scroll ${score_scroll_x_in_point} u\n\ ${score} yview scroll ${score_scroll_y_in_point} u\n\ \n\ pack ${score} -side left\n\ \n\ # The xfig objects begin here\n\ ${score} create line 0.719882i 0.040748i 11.317992i 0.040748i 11.317992i 0.325984i \\\n\ 0.719882i 0.325984i 0.719882i 0.040748i -fill $tkxox(score_passive_note)\n\ ${score} create polygon 0.000000i 0.000000i 11.857677i 0.000000i 11.857677i 1.385433i \\\n\ 0.000000i 1.385433i -outline {} -fill $tkxox(col_def_bg) -width 0\n\ ${score} create line 0.000000i 0.000000i 11.857677i 0.000000i 11.857677i 1.385433i \\\n\ 0.000000i 1.385433i 0.000000i 0.000000i -fill $tkxox(col_def_bg)\n\ ${score} create polygon 4.731299i 0.035315i 8.668465i 0.035315i 8.668465i 0.325079i \\\n\ 4.731299i 0.325079i -outline {} -fill $tkxox(color_score_bg) -width 0\n\ ${score} create line 4.731299i 0.035315i 8.668465i 0.035315i 8.668465i 0.325079i \\\n\ 4.731299i 0.325079i 4.731299i 0.035315i -fill $tkxox(color_score_bg)\n\ ${score} create polygon 8.706496i 0.035315i 11.781614i 0.035315i 11.781614i 0.329606i \\\n\ 8.706496i 0.329606i -outline {} -fill $tkxox(color_score_bg) -width 0\n\ ${score} create line 8.706496i 0.035315i 11.781614i 0.035315i 11.781614i 0.329606i \\\n\ 8.706496i 0.329606i 8.706496i 0.035315i -fill $tkxox(color_score_bg)\n\ ${score} create polygon 0.054331i 0.707205i 5.980000i 0.707205i 5.980000i 1.018701i \\\n\ 0.054331i 1.018701i -outline {} -fill $tkxox(color_score_bg) -width 0\n\ ${score} create line 0.054331i 0.707205i 5.980000i 0.707205i 5.980000i 1.018701i \\\n\ 0.054331i 1.018701i 0.054331i 0.707205i -fill $tkxox(color_score_bg)\n\ ${score} create polygon 0.054331i 1.047677i 3.232677i 1.047677i 3.232677i 1.344685i \\\n\ 0.054331i 1.344685i -outline {} -fill $tkxox(color_score_bg) -width 0\n\ ${score} create line 0.054331i 1.047677i 3.232677i 1.047677i 3.232677i 1.344685i \\\n\ 0.054331i 1.344685i 0.054331i 1.047677i -fill $tkxox(color_score_bg)\n\ ${score} create polygon 3.273425i 1.047677i 5.980000i 1.047677i 5.980000i 1.344685i \\\n\ 3.273425i 1.344685i -outline {} -fill $tkxox(color_score_bg) -width 0\n\ ${score} create line 3.273425i 1.047677i 5.980000i 1.047677i 5.980000i 1.344685i \\\n\ 3.273425i 1.344685i 3.273425i 1.047677i -fill $tkxox(color_score_bg)\n\ ${score} create polygon 2.721063i 0.363110i 4.694173i 0.363110i 4.694173i 0.678228i \\\n\ 2.721063i 0.678228i -outline {} -fill $tkxox(color_score_bg) -width 0\n\ ${score} create line 2.721063i 0.363110i 4.694173i 0.363110i 4.694173i 0.678228i \\\n\ 2.721063i 0.678228i 2.721063i 0.363110i -fill $tkxox(color_score_bg)\n\ ${score} create polygon 6.014409i 0.707205i 11.789764i 0.707205i 11.789764i 1.018701i \\\n\ 6.014409i 1.018701i -outline {} -fill $tkxox(color_score_bg) -width 0\n\ ${score} create line 6.014409i 0.707205i 11.789764i 0.707205i 11.789764i 1.018701i \\\n\ 6.014409i 1.018701i 6.014409i 0.707205i -fill $tkxox(color_score_bg)\n\ ${score} create polygon 6.012598i 1.047677i 8.668465i 1.047677i 8.668465i 1.344685i \\\n\ 6.012598i 1.344685i -outline {} -fill $tkxox(color_score_bg) -width 0\n\ ${score} create line 6.012598i 1.047677i 8.668465i 1.047677i 8.668465i 1.344685i \\\n\ 6.012598i 1.344685i 6.012598i 1.047677i -fill $tkxox(color_score_bg)\n\ ${score} create polygon 8.708307i 0.363110i 10.636142i 0.363110i 10.636142i 0.678228i \\\n\ 8.708307i 0.678228i -outline {} -fill $tkxox(color_score_bg) -width 0\n\ ${score} create line 8.708307i 0.363110i 10.636142i 0.363110i 10.636142i 0.678228i \\\n\ 8.708307i 0.678228i 8.708307i 0.363110i -fill $tkxox(color_score_bg)\n\ ${score} create polygon 8.710118i 1.047677i 11.789764i 1.047677i 11.789764i 1.344685i \\\n\ 8.710118i 1.344685i -outline {} -fill $tkxox(color_score_bg) -width 0\n\ ${score} create line 8.710118i 1.047677i 11.789764i 1.047677i 11.789764i 1.344685i \\\n\ 8.710118i 1.344685i 8.710118i 1.047677i -fill $tkxox(color_score_bg)\n\ ${score} create polygon 10.672362i 0.363110i 11.788858i 0.363110i 11.788858i 0.678228i \\\n\ 10.672362i 0.678228i -outline {} -fill $tkxox(color_score_bg) -width 0\n\ ${score} create line 10.672362i 0.363110i 11.788858i 0.363110i 11.788858i 0.678228i \\\n\ 10.672362i 0.678228i 10.672362i 0.363110i -fill $tkxox(color_score_bg)\n\ ${score} create polygon 0.054331i 0.040748i 4.694173i 0.040748i 4.694173i 0.325984i \\\n\ 0.054331i 0.325984i -outline {} -fill $tkxox(color_score_bg) -width 0\n\ ${score} create line 0.054331i 0.040748i 4.694173i 0.040748i 4.694173i 0.325984i \\\n\ 0.054331i 0.325984i 0.054331i 0.040748i -fill $tkxox(color_score_bg)\n\ ${score} create polygon 4.735827i 0.363110i 6.660945i 0.363110i 6.660945i 0.678228i \\\n\ 4.735827i 0.678228i -outline {} -fill $tkxox(color_score_bg) -width 0\n\ ${score} create line 4.735827i 0.363110i 6.660945i 0.363110i 6.660945i 0.678228i \\\n\ 4.735827i 0.678228i 4.735827i 0.363110i -fill $tkxox(color_score_bg)\n\ ${score} create polygon 6.696260i 0.363110i 8.668465i 0.363110i 8.668465i 0.678228i \\\n\ 6.696260i 0.678228i -outline {} -fill $tkxox(color_score_bg) -width 0\n\ ${score} create line 6.696260i 0.363110i 8.668465i 0.363110i 8.668465i 0.678228i \\\n\ 6.696260i 0.678228i 6.696260i 0.363110i -fill $tkxox(color_score_bg)\n\ ${score} create polygon 0.054331i 0.363110i 2.687559i 0.363110i 2.687559i 0.678228i \\\n\ 0.054331i 0.678228i -outline {} -fill $tkxox(color_score_bg) -width 0\n\ ${score} create line 0.054331i 0.363110i 2.687559i 0.363110i 2.687559i 0.678228i \\\n\ 0.054331i 0.678228i 0.054331i 0.363110i -fill $tkxox(color_score_bg)\n\ ${score} create line 7.040354i 0.422874i 7.040354i 0.602165i -fill $tkxox(score_active_note)\n\ ${score} create polygon 6.997795i 0.640197i 7.005039i 0.639291i 7.007756i 0.638386i \\\n\ 7.009567i 0.638386i 7.012283i 0.637480i 7.019528i 0.634764i 7.026772i 0.632047i \\\n\ 7.029488i 0.630236i 7.031299i 0.629331i 7.034016i 0.628425i 7.039449i 0.623898i \\\n\ 7.043976i 0.619370i 7.045787i 0.617559i 7.046693i 0.616654i 7.048504i 0.613937i \\\n\ 7.049409i 0.609409i 7.049409i 0.606693i 7.049409i 0.603976i 7.048504i 0.603071i \\\n\ 7.048504i 0.602165i 7.047598i 0.601260i 7.046693i 0.600354i 7.044882i 0.598543i \\\n\ 7.042165i 0.596732i 7.036732i 0.594016i 7.033110i 0.594016i 7.031299i 0.593110i \\\n\ 7.027677i 0.593110i 7.020433i 0.593110i 7.013189i 0.594016i 7.009567i 0.594016i \\\n\ 7.007756i 0.594016i 7.005039i 0.594921i 6.997795i 0.597638i 6.991457i 0.600354i \\\n\ 6.988740i 0.602165i 6.987835i 0.603071i 6.986024i 0.604882i 6.981496i 0.608504i \\\n\ 6.977874i 0.611220i 6.976969i 0.612126i 6.976063i 0.613937i 6.974252i 0.616654i \\\n\ 6.972441i 0.620276i 6.971535i 0.622087i 6.970630i 0.622992i 6.970630i 0.624803i \\\n\ 6.970630i 0.628425i 6.971535i 0.631142i 6.971535i 0.632047i 6.971535i 0.632953i \\\n\ 6.971535i 0.633858i 6.972441i 0.634764i 6.974252i 0.635669i 6.976969i 0.637480i \\\n\ 6.982402i 0.639291i 6.985118i 0.640197i 6.986929i 0.640197i 6.990551i 0.640197i \\\n\ -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 6.997795i 0.640197i 7.005039i 0.639291i 7.007756i 0.638386i \\\n\ 7.009567i 0.638386i 7.012283i 0.637480i 7.019528i 0.634764i 7.026772i 0.632047i \\\n\ 7.029488i 0.630236i 7.031299i 0.629331i 7.034016i 0.628425i 7.039449i 0.623898i \\\n\ 7.043976i 0.619370i 7.045787i 0.617559i 7.046693i 0.616654i 7.048504i 0.613937i \\\n\ 7.049409i 0.609409i 7.049409i 0.606693i 7.049409i 0.603976i 7.048504i 0.603071i \\\n\ 7.048504i 0.602165i 7.047598i 0.601260i 7.046693i 0.600354i 7.044882i 0.598543i \\\n\ 7.042165i 0.596732i 7.036732i 0.594016i 7.033110i 0.594016i 7.031299i 0.593110i \\\n\ 7.027677i 0.593110i 7.020433i 0.593110i 7.013189i 0.594016i 7.009567i 0.594016i \\\n\ 7.007756i 0.594016i 7.005039i 0.594921i 6.997795i 0.597638i 6.991457i 0.600354i \\\n\ 6.988740i 0.602165i 6.987835i 0.603071i 6.986024i 0.604882i 6.981496i 0.608504i \\\n\ 6.977874i 0.611220i 6.976969i 0.612126i 6.976063i 0.613937i 6.974252i 0.616654i \\\n\ 6.972441i 0.620276i 6.971535i 0.622087i 6.970630i 0.622992i 6.970630i 0.624803i \\\n\ 6.970630i 0.628425i 6.971535i 0.631142i 6.971535i 0.632047i 6.971535i 0.632953i \\\n\ 6.971535i 0.633858i 6.972441i 0.634764i 6.974252i 0.635669i 6.976969i 0.637480i \\\n\ 6.982402i 0.639291i 6.985118i 0.640197i 6.986929i 0.640197i 6.990551i 0.640197i \\\n\ -outline $tkxox(score_active_note) -fill {}\n\ ${score} create polygon 7.044882i 0.441890i 7.045787i 0.447323i 7.046693i 0.449134i \\\n\ 7.046693i 0.450039i 7.047598i 0.451850i 7.049409i 0.456378i 7.051220i 0.460000i \\\n\ 7.052126i 0.460906i 7.056654i 0.464528i 7.062992i 0.469961i 7.066614i 0.472677i \\\n\ 7.068425i 0.474488i 7.072953i 0.477205i 7.081102i 0.484449i 7.089252i 0.490787i \\\n\ 7.092874i 0.493504i 7.094685i 0.494409i 7.097402i 0.498031i 7.103740i 0.504370i \\\n\ 7.108268i 0.511614i 7.110079i 0.514331i 7.110079i 0.515236i 7.110984i 0.517953i \\\n\ 7.112795i 0.525197i 7.113701i 0.532441i 7.113701i 0.535157i 7.112795i 0.538780i \\\n\ 7.110984i 0.547835i 7.108268i 0.557795i 7.105551i 0.564134i 7.103740i 0.568661i \\\n\ 7.101929i 0.572283i 7.099213i 0.577717i 7.096496i 0.584961i 7.096496i 0.585866i \\\n\ 7.095591i 0.586772i 7.095591i 0.587677i 7.094685i 0.587677i 7.094685i 0.588583i \\\n\ 7.094685i 0.589488i 7.093780i 0.589488i 7.093780i 0.590394i 7.092874i 0.590394i \\\n\ 7.092874i 0.589488i 7.093780i 0.589488i 7.093780i 0.588583i 7.093780i 0.587677i \\\n\ 7.093780i 0.586772i 7.094685i 0.585866i 7.094685i 0.584961i 7.096496i 0.578622i \\\n\ 7.099213i 0.574094i 7.101024i 0.570472i 7.101929i 0.566850i 7.104646i 0.561417i \\\n\ 7.107362i 0.553268i 7.109173i 0.545118i 7.110984i 0.542402i 7.110984i 0.539685i \\\n\ 7.110079i 0.532441i 7.107362i 0.524291i 7.106457i 0.520669i 7.105551i 0.519764i \\\n\ 7.103740i 0.516142i 7.097402i 0.507992i 7.091063i 0.501654i 7.087441i 0.498031i \\\n\ 7.085630i 0.496220i 7.083819i 0.495315i 7.080197i 0.492598i 7.072047i 0.487165i \\\n\ 7.062992i 0.481732i 7.058465i 0.479921i 7.054843i 0.479016i 7.051220i 0.477205i \\\n\ 7.044882i 0.474488i 7.043976i 0.474488i 7.043071i 0.473583i 7.042165i 0.473583i \\\n\ 7.041260i 0.473583i 7.040354i 0.473583i 7.040354i 0.474488i 7.040354i 0.475394i \\\n\ 7.040354i 0.476299i 7.041260i 0.476299i 7.041260i 0.477205i 7.041260i 0.478110i \\\n\ 7.041260i 0.479016i 7.042165i 0.479921i 7.042165i 0.480827i 7.042165i 0.479921i \\\n\ 7.042165i 0.479016i 7.042165i 0.478110i 7.042165i 0.477205i 7.042165i 0.475394i \\\n\ 7.042165i 0.474488i 7.042165i 0.464528i 7.042165i 0.455472i 7.043071i 0.447323i \\\n\ 7.043071i 0.440079i 7.043071i 0.431929i 7.043976i 0.423780i 7.043976i 0.421969i \\\n\ 7.043976i 0.424685i 7.043976i 0.430118i 7.043976i 0.435551i -outline {} -fill $tkxox(score_active_note) \\\n\ -width 0\n\ ${score} create polygon 7.044882i 0.441890i 7.045787i 0.447323i 7.046693i 0.449134i \\\n\ 7.046693i 0.450039i 7.047598i 0.451850i 7.049409i 0.456378i 7.051220i 0.460000i \\\n\ 7.052126i 0.460906i 7.056654i 0.464528i 7.062992i 0.469961i 7.066614i 0.472677i \\\n\ 7.068425i 0.474488i 7.072953i 0.477205i 7.081102i 0.484449i 7.089252i 0.490787i \\\n\ 7.092874i 0.493504i 7.094685i 0.494409i 7.097402i 0.498031i 7.103740i 0.504370i \\\n\ 7.108268i 0.511614i 7.110079i 0.514331i 7.110079i 0.515236i 7.110984i 0.517953i \\\n\ 7.112795i 0.525197i 7.113701i 0.532441i 7.113701i 0.535157i 7.112795i 0.538780i \\\n\ 7.110984i 0.547835i 7.108268i 0.557795i 7.105551i 0.564134i 7.103740i 0.568661i \\\n\ 7.101929i 0.572283i 7.099213i 0.577717i 7.096496i 0.584961i 7.096496i 0.585866i \\\n\ 7.095591i 0.586772i 7.095591i 0.587677i 7.094685i 0.587677i 7.094685i 0.588583i \\\n\ 7.094685i 0.589488i 7.093780i 0.589488i 7.093780i 0.590394i 7.092874i 0.590394i \\\n\ 7.092874i 0.589488i 7.093780i 0.589488i 7.093780i 0.588583i 7.093780i 0.587677i \\\n\ 7.093780i 0.586772i 7.094685i 0.585866i 7.094685i 0.584961i 7.096496i 0.578622i \\\n\ 7.099213i 0.574094i 7.101024i 0.570472i 7.101929i 0.566850i 7.104646i 0.561417i \\\n\ 7.107362i 0.553268i 7.109173i 0.545118i 7.110984i 0.542402i 7.110984i 0.539685i \\\n\ 7.110079i 0.532441i 7.107362i 0.524291i 7.106457i 0.520669i 7.105551i 0.519764i \\\n\ 7.103740i 0.516142i 7.097402i 0.507992i 7.091063i 0.501654i 7.087441i 0.498031i \\\n\ 7.085630i 0.496220i 7.083819i 0.495315i 7.080197i 0.492598i 7.072047i 0.487165i \\\n\ 7.062992i 0.481732i 7.058465i 0.479921i 7.054843i 0.479016i 7.051220i 0.477205i \\\n\ 7.044882i 0.474488i 7.043976i 0.474488i 7.043071i 0.473583i 7.042165i 0.473583i \\\n\ 7.041260i 0.473583i 7.040354i 0.473583i 7.040354i 0.474488i 7.040354i 0.475394i \\\n\ 7.040354i 0.476299i 7.041260i 0.476299i 7.041260i 0.477205i 7.041260i 0.478110i \\\n\ 7.041260i 0.479016i 7.042165i 0.479921i 7.042165i 0.480827i 7.042165i 0.479921i \\\n\ 7.042165i 0.479016i 7.042165i 0.478110i 7.042165i 0.477205i 7.042165i 0.475394i \\\n\ 7.042165i 0.474488i 7.042165i 0.464528i 7.042165i 0.455472i 7.043071i 0.447323i \\\n\ 7.043071i 0.440079i 7.043071i 0.431929i 7.043976i 0.423780i 7.043976i 0.421969i \\\n\ 7.043976i 0.424685i 7.043976i 0.430118i 7.043976i 0.435551i -outline $tkxox(score_active_note) -fill \\\n\ {}\n\ ${score} create line 6.320472i 0.422874i 6.320472i 0.602165i -fill $tkxox(score_active_note)\n\ ${score} create polygon 6.278819i 0.640197i 6.286063i 0.639291i 6.289685i 0.638386i \\\n\ 6.290591i 0.638386i 6.294213i 0.637480i 6.301457i 0.634764i 6.308701i 0.632047i \\\n\ 6.311417i 0.630236i 6.312323i 0.629331i 6.315039i 0.628425i 6.320472i 0.623898i \\\n\ 6.325000i 0.619370i 6.326811i 0.617559i 6.327717i 0.616654i 6.329528i 0.613937i \\\n\ 6.330433i 0.609409i 6.330433i 0.606693i 6.330433i 0.603976i 6.329528i 0.603071i \\\n\ 6.329528i 0.602165i 6.328622i 0.601260i 6.327717i 0.600354i 6.325906i 0.598543i \\\n\ 6.323189i 0.596732i 6.317756i 0.594016i 6.315039i 0.594016i 6.313228i 0.593110i \\\n\ 6.309606i 0.593110i 6.302362i 0.593110i 6.295118i 0.594016i 6.291496i 0.594016i \\\n\ 6.289685i 0.594016i 6.286063i 0.594921i 6.278819i 0.597638i 6.272480i 0.600354i \\\n\ 6.269764i 0.602165i 6.268858i 0.603071i 6.267047i 0.604882i 6.262520i 0.608504i \\\n\ 6.258898i 0.611220i 6.257087i 0.612126i 6.256181i 0.613937i 6.254370i 0.616654i \\\n\ 6.252559i 0.620276i 6.251654i 0.622087i 6.251654i 0.622992i 6.251654i 0.624803i \\\n\ 6.251654i 0.628425i 6.252559i 0.631142i 6.252559i 0.632047i 6.252559i 0.632953i \\\n\ 6.252559i 0.633858i 6.253465i 0.634764i 6.255276i 0.635669i 6.257992i 0.637480i \\\n\ 6.263425i 0.639291i 6.266142i 0.640197i 6.267953i 0.640197i 6.271575i 0.640197i \\\n\ -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 6.278819i 0.640197i 6.286063i 0.639291i 6.289685i 0.638386i \\\n\ 6.290591i 0.638386i 6.294213i 0.637480i 6.301457i 0.634764i 6.308701i 0.632047i \\\n\ 6.311417i 0.630236i 6.312323i 0.629331i 6.315039i 0.628425i 6.320472i 0.623898i \\\n\ 6.325000i 0.619370i 6.326811i 0.617559i 6.327717i 0.616654i 6.329528i 0.613937i \\\n\ 6.330433i 0.609409i 6.330433i 0.606693i 6.330433i 0.603976i 6.329528i 0.603071i \\\n\ 6.329528i 0.602165i 6.328622i 0.601260i 6.327717i 0.600354i 6.325906i 0.598543i \\\n\ 6.323189i 0.596732i 6.317756i 0.594016i 6.315039i 0.594016i 6.313228i 0.593110i \\\n\ 6.309606i 0.593110i 6.302362i 0.593110i 6.295118i 0.594016i 6.291496i 0.594016i \\\n\ 6.289685i 0.594016i 6.286063i 0.594921i 6.278819i 0.597638i 6.272480i 0.600354i \\\n\ 6.269764i 0.602165i 6.268858i 0.603071i 6.267047i 0.604882i 6.262520i 0.608504i \\\n\ 6.258898i 0.611220i 6.257087i 0.612126i 6.256181i 0.613937i 6.254370i 0.616654i \\\n\ 6.252559i 0.620276i 6.251654i 0.622087i 6.251654i 0.622992i 6.251654i 0.624803i \\\n\ 6.251654i 0.628425i 6.252559i 0.631142i 6.252559i 0.632047i 6.252559i 0.632953i \\\n\ 6.252559i 0.633858i 6.253465i 0.634764i 6.255276i 0.635669i 6.257992i 0.637480i \\\n\ 6.263425i 0.639291i 6.266142i 0.640197i 6.267953i 0.640197i 6.271575i 0.640197i \\\n\ -outline $tkxox(score_active_note) -fill {}\n\ ${score} create polygon 6.325906i 0.441890i 6.326811i 0.447323i 6.327717i 0.449134i \\\n\ 6.327717i 0.450039i 6.328622i 0.451850i 6.330433i 0.456378i 6.332244i 0.460000i \\\n\ 6.333150i 0.460906i 6.337677i 0.464528i 6.344016i 0.469961i 6.347638i 0.472677i \\\n\ 6.350354i 0.474488i 6.354882i 0.477205i 6.363031i 0.484449i 6.371181i 0.490787i \\\n\ 6.374803i 0.493504i 6.375709i 0.494409i 6.379331i 0.498031i 6.384764i 0.504370i \\\n\ 6.389291i 0.511614i 6.391102i 0.514331i 6.391102i 0.515236i 6.392008i 0.517953i \\\n\ 6.393819i 0.525197i 6.394724i 0.532441i 6.394724i 0.535157i 6.393819i 0.538780i \\\n\ 6.392008i 0.547835i 6.389291i 0.557795i 6.386575i 0.564134i 6.384764i 0.568661i \\\n\ 6.382953i 0.572283i 6.380236i 0.577717i 6.377520i 0.584961i 6.377520i 0.585866i \\\n\ 6.376614i 0.586772i 6.376614i 0.587677i 6.375709i 0.587677i 6.375709i 0.588583i \\\n\ 6.375709i 0.589488i 6.374803i 0.589488i 6.374803i 0.590394i 6.374803i 0.589488i \\\n\ 6.374803i 0.588583i 6.374803i 0.587677i 6.374803i 0.586772i 6.375709i 0.586772i \\\n\ 6.375709i 0.585866i 6.375709i 0.584961i 6.377520i 0.578622i 6.379331i 0.574094i \\\n\ 6.381142i 0.570472i 6.382953i 0.566850i 6.384764i 0.561417i 6.387480i 0.553268i \\\n\ 6.390197i 0.545118i 6.391102i 0.542402i 6.392008i 0.542402i 6.392008i 0.539685i \\\n\ 6.391102i 0.532441i 6.389291i 0.524291i 6.387480i 0.520669i 6.386575i 0.519764i \\\n\ 6.384764i 0.516142i 6.378425i 0.507992i 6.372087i 0.501654i 6.368465i 0.498031i \\\n\ 6.366654i 0.496220i 6.364843i 0.495315i 6.361220i 0.492598i 6.353071i 0.487165i \\\n\ 6.344016i 0.481732i 6.339488i 0.479921i 6.336772i 0.479016i 6.332244i 0.477205i \\\n\ 6.325906i 0.474488i 6.325000i 0.474488i 6.324094i 0.473583i 6.323189i 0.473583i \\\n\ 6.322283i 0.473583i 6.321378i 0.473583i 6.321378i 0.474488i 6.321378i 0.475394i \\\n\ 6.321378i 0.476299i 6.321378i 0.477205i 6.321378i 0.478110i 6.322283i 0.479016i \\\n\ 6.322283i 0.479921i 6.322283i 0.480827i 6.322283i 0.479921i 6.322283i 0.479016i \\\n\ 6.322283i 0.478110i 6.322283i 0.477205i 6.322283i 0.475394i 6.322283i 0.474488i \\\n\ 6.322283i 0.464528i 6.323189i 0.455472i 6.323189i 0.447323i 6.324094i 0.440079i \\\n\ 6.324094i 0.431929i 6.325000i 0.423780i 6.325906i 0.421969i 6.325000i 0.424685i \\\n\ 6.325000i 0.430118i 6.325000i 0.435551i -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 6.325906i 0.441890i 6.326811i 0.447323i 6.327717i 0.449134i \\\n\ 6.327717i 0.450039i 6.328622i 0.451850i 6.330433i 0.456378i 6.332244i 0.460000i \\\n\ 6.333150i 0.460906i 6.337677i 0.464528i 6.344016i 0.469961i 6.347638i 0.472677i \\\n\ 6.350354i 0.474488i 6.354882i 0.477205i 6.363031i 0.484449i 6.371181i 0.490787i \\\n\ 6.374803i 0.493504i 6.375709i 0.494409i 6.379331i 0.498031i 6.384764i 0.504370i \\\n\ 6.389291i 0.511614i 6.391102i 0.514331i 6.391102i 0.515236i 6.392008i 0.517953i \\\n\ 6.393819i 0.525197i 6.394724i 0.532441i 6.394724i 0.535157i 6.393819i 0.538780i \\\n\ 6.392008i 0.547835i 6.389291i 0.557795i 6.386575i 0.564134i 6.384764i 0.568661i \\\n\ 6.382953i 0.572283i 6.380236i 0.577717i 6.377520i 0.584961i 6.377520i 0.585866i \\\n\ 6.376614i 0.586772i 6.376614i 0.587677i 6.375709i 0.587677i 6.375709i 0.588583i \\\n\ 6.375709i 0.589488i 6.374803i 0.589488i 6.374803i 0.590394i 6.374803i 0.589488i \\\n\ 6.374803i 0.588583i 6.374803i 0.587677i 6.374803i 0.586772i 6.375709i 0.586772i \\\n\ 6.375709i 0.585866i 6.375709i 0.584961i 6.377520i 0.578622i 6.379331i 0.574094i \\\n\ 6.381142i 0.570472i 6.382953i 0.566850i 6.384764i 0.561417i 6.387480i 0.553268i \\\n\ 6.390197i 0.545118i 6.391102i 0.542402i 6.392008i 0.542402i 6.392008i 0.539685i \\\n\ 6.391102i 0.532441i 6.389291i 0.524291i 6.387480i 0.520669i 6.386575i 0.519764i \\\n\ 6.384764i 0.516142i 6.378425i 0.507992i 6.372087i 0.501654i 6.368465i 0.498031i \\\n\ 6.366654i 0.496220i 6.364843i 0.495315i 6.361220i 0.492598i 6.353071i 0.487165i \\\n\ 6.344016i 0.481732i 6.339488i 0.479921i 6.336772i 0.479016i 6.332244i 0.477205i \\\n\ 6.325906i 0.474488i 6.325000i 0.474488i 6.324094i 0.473583i 6.323189i 0.473583i \\\n\ 6.322283i 0.473583i 6.321378i 0.473583i 6.321378i 0.474488i 6.321378i 0.475394i \\\n\ 6.321378i 0.476299i 6.321378i 0.477205i 6.321378i 0.478110i 6.322283i 0.479016i \\\n\ 6.322283i 0.479921i 6.322283i 0.480827i 6.322283i 0.479921i 6.322283i 0.479016i \\\n\ 6.322283i 0.478110i 6.322283i 0.477205i 6.322283i 0.475394i 6.322283i 0.474488i \\\n\ 6.322283i 0.464528i 6.323189i 0.455472i 6.323189i 0.447323i 6.324094i 0.440079i \\\n\ 6.324094i 0.431929i 6.325000i 0.423780i 6.325906i 0.421969i 6.325000i 0.424685i \\\n\ 6.325000i 0.430118i 6.325000i 0.435551i -outline $tkxox(score_active_note) -fill {}\n\ ${score} create line 6.320472i 0.086024i 6.320472i 0.266220i -fill $tkxox(score_active_note)\n\ ${score} create polygon 6.278819i 0.301535i 6.286063i 0.300630i 6.289685i 0.300630i \\\n\ 6.290591i 0.300630i 6.294213i 0.299724i 6.301457i 0.297913i 6.308701i 0.295197i \\\n\ 6.311417i 0.293386i 6.312323i 0.293386i 6.315039i 0.291575i 6.320472i 0.287047i \\\n\ 6.325000i 0.282520i 6.326811i 0.280709i 6.327717i 0.279803i 6.329528i 0.277087i \\\n\ 6.330433i 0.272559i 6.330433i 0.269843i 6.330433i 0.267126i 6.329528i 0.266220i \\\n\ 6.329528i 0.265315i 6.328622i 0.264409i 6.327717i 0.263504i 6.325906i 0.261693i \\\n\ 6.323189i 0.259882i 6.317756i 0.257165i 6.315039i 0.256260i 6.313228i 0.256260i \\\n\ 6.309606i 0.255354i 6.302362i 0.255354i 6.295118i 0.256260i 6.291496i 0.256260i \\\n\ 6.289685i 0.257165i 6.286063i 0.258071i 6.278819i 0.260787i 6.272480i 0.263504i \\\n\ 6.269764i 0.265315i 6.268858i 0.266220i 6.267047i 0.268031i 6.262520i 0.271654i \\\n\ 6.258898i 0.274370i 6.257087i 0.275276i 6.256181i 0.276181i 6.254370i 0.278898i \\\n\ 6.252559i 0.282520i 6.251654i 0.284331i 6.251654i 0.285236i 6.251654i 0.287047i \\\n\ 6.251654i 0.290669i 6.252559i 0.293386i 6.252559i 0.295197i 6.252559i 0.296102i \\\n\ 6.252559i 0.297008i 6.253465i 0.297913i 6.255276i 0.298819i 6.257992i 0.300630i \\\n\ 6.263425i 0.302441i 6.266142i 0.302441i 6.267953i 0.302441i 6.271575i 0.301535i \\\n\ -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 6.278819i 0.301535i 6.286063i 0.300630i 6.289685i 0.300630i \\\n\ 6.290591i 0.300630i 6.294213i 0.299724i 6.301457i 0.297913i 6.308701i 0.295197i \\\n\ 6.311417i 0.293386i 6.312323i 0.293386i 6.315039i 0.291575i 6.320472i 0.287047i \\\n\ 6.325000i 0.282520i 6.326811i 0.280709i 6.327717i 0.279803i 6.329528i 0.277087i \\\n\ 6.330433i 0.272559i 6.330433i 0.269843i 6.330433i 0.267126i 6.329528i 0.266220i \\\n\ 6.329528i 0.265315i 6.328622i 0.264409i 6.327717i 0.263504i 6.325906i 0.261693i \\\n\ 6.323189i 0.259882i 6.317756i 0.257165i 6.315039i 0.256260i 6.313228i 0.256260i \\\n\ 6.309606i 0.255354i 6.302362i 0.255354i 6.295118i 0.256260i 6.291496i 0.256260i \\\n\ 6.289685i 0.257165i 6.286063i 0.258071i 6.278819i 0.260787i 6.272480i 0.263504i \\\n\ 6.269764i 0.265315i 6.268858i 0.266220i 6.267047i 0.268031i 6.262520i 0.271654i \\\n\ 6.258898i 0.274370i 6.257087i 0.275276i 6.256181i 0.276181i 6.254370i 0.278898i \\\n\ 6.252559i 0.282520i 6.251654i 0.284331i 6.251654i 0.285236i 6.251654i 0.287047i \\\n\ 6.251654i 0.290669i 6.252559i 0.293386i 6.252559i 0.295197i 6.252559i 0.296102i \\\n\ 6.252559i 0.297008i 6.253465i 0.297913i 6.255276i 0.298819i 6.257992i 0.300630i \\\n\ 6.263425i 0.302441i 6.266142i 0.302441i 6.267953i 0.302441i 6.271575i 0.301535i \\\n\ -outline $tkxox(score_active_note) -fill {}\n\ ${score} create polygon 6.325906i 0.104134i 6.326811i 0.109567i 6.327717i 0.111378i \\\n\ 6.327717i 0.112283i 6.328622i 0.114094i 6.330433i 0.118622i 6.332244i 0.122244i \\\n\ 6.332244i 0.123150i 6.332244i 0.122244i 6.333150i 0.123150i 6.337677i 0.127677i \\\n\ 6.344016i 0.133110i 6.347638i 0.135827i 6.350354i 0.137638i 6.354882i 0.140354i \\\n\ 6.363031i 0.147598i 6.371181i 0.153937i 6.374803i 0.157559i 6.375709i 0.158465i \\\n\ 6.379331i 0.161181i 6.384764i 0.167520i 6.389291i 0.173858i 6.391102i 0.175669i \\\n\ 6.391102i 0.176575i 6.392008i 0.179291i 6.393819i 0.185630i 6.394724i 0.192874i \\\n\ 6.394724i 0.195591i 6.394724i 0.196496i 6.393819i 0.200118i 6.392008i 0.210079i \\\n\ 6.389291i 0.220039i 6.386575i 0.226378i 6.384764i 0.230906i 6.382953i 0.234528i \\\n\ 6.380236i 0.239961i 6.377520i 0.247205i 6.377520i 0.248110i 6.376614i 0.249016i \\\n\ 6.376614i 0.249921i 6.375709i 0.249921i 6.375709i 0.250827i 6.375709i 0.251732i \\\n\ 6.374803i 0.251732i 6.374803i 0.252638i 6.374803i 0.251732i 6.374803i 0.250827i \\\n\ 6.374803i 0.249921i 6.374803i 0.249016i 6.375709i 0.249016i 6.375709i 0.248110i \\\n\ 6.375709i 0.247205i 6.377520i 0.241772i 6.379331i 0.237244i 6.381142i 0.233622i \\\n\ 6.382953i 0.230000i 6.384764i 0.224567i 6.387480i 0.216417i 6.390197i 0.208268i \\\n\ 6.391102i 0.204646i 6.392008i 0.203740i 6.392008i 0.201024i 6.391102i 0.193780i \\\n\ 6.389291i 0.186535i 6.387480i 0.182913i 6.386575i 0.182008i 6.384764i 0.178386i \\\n\ 6.378425i 0.171142i 6.372087i 0.164803i 6.368465i 0.161181i 6.366654i 0.160276i \\\n\ 6.364843i 0.158465i 6.361220i 0.155748i 6.353071i 0.150315i 6.344016i 0.144882i \\\n\ 6.339488i 0.142165i 6.336772i 0.141260i 6.332244i 0.139449i 6.325906i 0.136732i \\\n\ 6.325000i 0.136732i 6.324094i 0.135827i 6.323189i 0.135827i 6.322283i 0.135827i \\\n\ 6.321378i 0.135827i 6.321378i 0.136732i 6.321378i 0.137638i 6.321378i 0.138543i \\\n\ 6.321378i 0.139449i 6.321378i 0.140354i 6.322283i 0.140354i 6.322283i 0.141260i \\\n\ 6.322283i 0.142165i 6.322283i 0.141260i 6.322283i 0.140354i 6.322283i 0.139449i \\\n\ 6.322283i 0.137638i 6.322283i 0.136732i 6.322283i 0.126772i 6.323189i 0.117717i \\\n\ 6.323189i 0.110472i 6.324094i 0.103228i 6.324094i 0.094173i 6.325000i 0.086929i \\\n\ 6.325906i 0.085118i 6.325000i 0.087835i 6.325000i 0.092362i 6.325000i 0.097795i \\\n\ -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 6.325906i 0.104134i 6.326811i 0.109567i 6.327717i 0.111378i \\\n\ 6.327717i 0.112283i 6.328622i 0.114094i 6.330433i 0.118622i 6.332244i 0.122244i \\\n\ 6.332244i 0.123150i 6.332244i 0.122244i 6.333150i 0.123150i 6.337677i 0.127677i \\\n\ 6.344016i 0.133110i 6.347638i 0.135827i 6.350354i 0.137638i 6.354882i 0.140354i \\\n\ 6.363031i 0.147598i 6.371181i 0.153937i 6.374803i 0.157559i 6.375709i 0.158465i \\\n\ 6.379331i 0.161181i 6.384764i 0.167520i 6.389291i 0.173858i 6.391102i 0.175669i \\\n\ 6.391102i 0.176575i 6.392008i 0.179291i 6.393819i 0.185630i 6.394724i 0.192874i \\\n\ 6.394724i 0.195591i 6.394724i 0.196496i 6.393819i 0.200118i 6.392008i 0.210079i \\\n\ 6.389291i 0.220039i 6.386575i 0.226378i 6.384764i 0.230906i 6.382953i 0.234528i \\\n\ 6.380236i 0.239961i 6.377520i 0.247205i 6.377520i 0.248110i 6.376614i 0.249016i \\\n\ 6.376614i 0.249921i 6.375709i 0.249921i 6.375709i 0.250827i 6.375709i 0.251732i \\\n\ 6.374803i 0.251732i 6.374803i 0.252638i 6.374803i 0.251732i 6.374803i 0.250827i \\\n\ 6.374803i 0.249921i 6.374803i 0.249016i 6.375709i 0.249016i 6.375709i 0.248110i \\\n\ 6.375709i 0.247205i 6.377520i 0.241772i 6.379331i 0.237244i 6.381142i 0.233622i \\\n\ 6.382953i 0.230000i 6.384764i 0.224567i 6.387480i 0.216417i 6.390197i 0.208268i \\\n\ 6.391102i 0.204646i 6.392008i 0.203740i 6.392008i 0.201024i 6.391102i 0.193780i \\\n\ 6.389291i 0.186535i 6.387480i 0.182913i 6.386575i 0.182008i 6.384764i 0.178386i \\\n\ 6.378425i 0.171142i 6.372087i 0.164803i 6.368465i 0.161181i 6.366654i 0.160276i \\\n\ 6.364843i 0.158465i 6.361220i 0.155748i 6.353071i 0.150315i 6.344016i 0.144882i \\\n\ 6.339488i 0.142165i 6.336772i 0.141260i 6.332244i 0.139449i 6.325906i 0.136732i \\\n\ 6.325000i 0.136732i 6.324094i 0.135827i 6.323189i 0.135827i 6.322283i 0.135827i \\\n\ 6.321378i 0.135827i 6.321378i 0.136732i 6.321378i 0.137638i 6.321378i 0.138543i \\\n\ 6.321378i 0.139449i 6.321378i 0.140354i 6.322283i 0.140354i 6.322283i 0.141260i \\\n\ 6.322283i 0.142165i 6.322283i 0.141260i 6.322283i 0.140354i 6.322283i 0.139449i \\\n\ 6.322283i 0.137638i 6.322283i 0.136732i 6.322283i 0.126772i 6.323189i 0.117717i \\\n\ 6.323189i 0.110472i 6.324094i 0.103228i 6.324094i 0.094173i 6.325000i 0.086929i \\\n\ 6.325906i 0.085118i 6.325000i 0.087835i 6.325000i 0.092362i 6.325000i 0.097795i \\\n\ -outline $tkxox(score_active_note) -fill {}\n\ ${score} create line 6.323189i 0.721693i 6.323189i 0.927244i -fill $tkxox(score_active_note)\n\ ${score} create polygon 6.280630i 0.967992i 6.287874i 0.967087i 6.291496i 0.967087i \\\n\ 6.293307i 0.967087i 6.296024i 0.966181i 6.303268i 0.963465i 6.309606i 0.959843i \\\n\ 6.312323i 0.958937i 6.314134i 0.958031i 6.315945i 0.955315i 6.321378i 0.950787i \\\n\ 6.325906i 0.945354i 6.328622i 0.943543i 6.330433i 0.942638i 6.331339i 0.939921i \\\n\ 6.333150i 0.934488i 6.333150i 0.930866i 6.333150i 0.928150i 6.332244i 0.927244i \\\n\ 6.332244i 0.926339i 6.332244i 0.925433i 6.330433i 0.924528i 6.328622i 0.922717i \\\n\ 6.325906i 0.920000i 6.320472i 0.917283i 6.316850i 0.916378i 6.315039i 0.916378i \\\n\ 6.311417i 0.916378i 6.304173i 0.916378i 6.296024i 0.917283i 6.293307i 0.918189i \\\n\ 6.291496i 0.918189i 6.287874i 0.919094i 6.280630i 0.921811i 6.273386i 0.924528i \\\n\ 6.270669i 0.925433i 6.269764i 0.926339i 6.267047i 0.927244i 6.262520i 0.930866i \\\n\ 6.258898i 0.934488i 6.257087i 0.935394i 6.257087i 0.936299i 6.256181i 0.937205i \\\n\ 6.254370i 0.941732i 6.252559i 0.946260i 6.251654i 0.948071i 6.251654i 0.949882i \\\n\ 6.251654i 0.951693i 6.251654i 0.956220i 6.252559i 0.959843i 6.252559i 0.961654i \\\n\ 6.252559i 0.962559i 6.252559i 0.963465i 6.254370i 0.965276i 6.257992i 0.967087i \\\n\ 6.263425i 0.968898i 6.267047i 0.968898i 6.268858i 0.968898i 6.272480i 0.967992i \\\n\ -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 6.280630i 0.967992i 6.287874i 0.967087i 6.291496i 0.967087i \\\n\ 6.293307i 0.967087i 6.296024i 0.966181i 6.303268i 0.963465i 6.309606i 0.959843i \\\n\ 6.312323i 0.958937i 6.314134i 0.958031i 6.315945i 0.955315i 6.321378i 0.950787i \\\n\ 6.325906i 0.945354i 6.328622i 0.943543i 6.330433i 0.942638i 6.331339i 0.939921i \\\n\ 6.333150i 0.934488i 6.333150i 0.930866i 6.333150i 0.928150i 6.332244i 0.927244i \\\n\ 6.332244i 0.926339i 6.332244i 0.925433i 6.330433i 0.924528i 6.328622i 0.922717i \\\n\ 6.325906i 0.920000i 6.320472i 0.917283i 6.316850i 0.916378i 6.315039i 0.916378i \\\n\ 6.311417i 0.916378i 6.304173i 0.916378i 6.296024i 0.917283i 6.293307i 0.918189i \\\n\ 6.291496i 0.918189i 6.287874i 0.919094i 6.280630i 0.921811i 6.273386i 0.924528i \\\n\ 6.270669i 0.925433i 6.269764i 0.926339i 6.267047i 0.927244i 6.262520i 0.930866i \\\n\ 6.258898i 0.934488i 6.257087i 0.935394i 6.257087i 0.936299i 6.256181i 0.937205i \\\n\ 6.254370i 0.941732i 6.252559i 0.946260i 6.251654i 0.948071i 6.251654i 0.949882i \\\n\ 6.251654i 0.951693i 6.251654i 0.956220i 6.252559i 0.959843i 6.252559i 0.961654i \\\n\ 6.252559i 0.962559i 6.252559i 0.963465i 6.254370i 0.965276i 6.257992i 0.967087i \\\n\ 6.263425i 0.968898i 6.267047i 0.968898i 6.268858i 0.968898i 6.272480i 0.967992i \\\n\ -outline $tkxox(score_active_note) -fill {}\n\ ${score} create line 6.323189i 1.060354i 6.323189i 1.264094i -fill $tkxox(score_active_note)\n\ ${score} create polygon 6.280630i 1.306654i 6.287874i 1.305748i 6.291496i 1.305748i \\\n\ 6.293307i 1.304843i 6.296024i 1.303937i 6.303268i 1.301220i 6.309606i 1.297598i \\\n\ 6.312323i 1.295787i 6.314134i 1.295787i 6.315945i 1.293071i 6.321378i 1.288543i \\\n\ 6.325906i 1.283110i 6.328622i 1.281299i 6.330433i 1.280394i 6.331339i 1.277677i \\\n\ 6.333150i 1.272244i 6.333150i 1.268622i 6.333150i 1.265906i 6.332244i 1.265000i \\\n\ 6.332244i 1.264094i 6.332244i 1.263189i 6.330433i 1.262283i 6.328622i 1.260472i \\\n\ 6.325906i 1.257756i 6.320472i 1.255039i 6.316850i 1.253228i 6.315039i 1.253228i \\\n\ 6.311417i 1.252323i 6.304173i 1.252323i 6.296024i 1.253228i 6.293307i 1.254134i \\\n\ 6.291496i 1.255039i 6.287874i 1.256850i 6.280630i 1.259567i 6.273386i 1.262283i \\\n\ 6.270669i 1.263189i 6.269764i 1.264094i 6.267047i 1.265906i 6.262520i 1.268622i \\\n\ 6.258898i 1.272244i 6.257087i 1.273150i 6.256181i 1.274961i 6.254370i 1.278583i \\\n\ 6.252559i 1.283110i 6.251654i 1.284921i 6.251654i 1.286732i 6.251654i 1.288543i \\\n\ 6.251654i 1.293071i 6.252559i 1.296693i 6.252559i 1.298504i 6.252559i 1.299409i \\\n\ 6.252559i 1.300315i 6.254370i 1.301220i 6.257992i 1.303937i 6.263425i 1.305748i \\\n\ 6.267047i 1.306654i 6.268858i 1.306654i 6.272480i 1.306654i -outline {} -fill $tkxox(score_active_note) \\\n\ -width 0\n\ ${score} create polygon 6.280630i 1.306654i 6.287874i 1.305748i 6.291496i 1.305748i \\\n\ 6.293307i 1.304843i 6.296024i 1.303937i 6.303268i 1.301220i 6.309606i 1.297598i \\\n\ 6.312323i 1.295787i 6.314134i 1.295787i 6.315945i 1.293071i 6.321378i 1.288543i \\\n\ 6.325906i 1.283110i 6.328622i 1.281299i 6.330433i 1.280394i 6.331339i 1.277677i \\\n\ 6.333150i 1.272244i 6.333150i 1.268622i 6.333150i 1.265906i 6.332244i 1.265000i \\\n\ 6.332244i 1.264094i 6.332244i 1.263189i 6.330433i 1.262283i 6.328622i 1.260472i \\\n\ 6.325906i 1.257756i 6.320472i 1.255039i 6.316850i 1.253228i 6.315039i 1.253228i \\\n\ 6.311417i 1.252323i 6.304173i 1.252323i 6.296024i 1.253228i 6.293307i 1.254134i \\\n\ 6.291496i 1.255039i 6.287874i 1.256850i 6.280630i 1.259567i 6.273386i 1.262283i \\\n\ 6.270669i 1.263189i 6.269764i 1.264094i 6.267047i 1.265906i 6.262520i 1.268622i \\\n\ 6.258898i 1.272244i 6.257087i 1.273150i 6.256181i 1.274961i 6.254370i 1.278583i \\\n\ 6.252559i 1.283110i 6.251654i 1.284921i 6.251654i 1.286732i 6.251654i 1.288543i \\\n\ 6.251654i 1.293071i 6.252559i 1.296693i 6.252559i 1.298504i 6.252559i 1.299409i \\\n\ 6.252559i 1.300315i 6.254370i 1.301220i 6.257992i 1.303937i 6.263425i 1.305748i \\\n\ 6.267047i 1.306654i 6.268858i 1.306654i 6.272480i 1.306654i -outline $tkxox(score_active_note) -fill \\\n\ {}\n\ ${score} create line 7.645236i 0.422874i 7.645236i 0.602165i -fill $tkxox(score_active_note)\n\ ${score} create polygon 7.602677i 0.640197i 7.609921i 0.639291i 7.612638i 0.638386i \\\n\ 7.614449i 0.638386i 7.617165i 0.637480i 7.624409i 0.634764i 7.631654i 0.632047i \\\n\ 7.634370i 0.630236i 7.636181i 0.629331i 7.638898i 0.628425i 7.644331i 0.623898i \\\n\ 7.648858i 0.619370i 7.650669i 0.617559i 7.651575i 0.616654i 7.653386i 0.613937i \\\n\ 7.654291i 0.609409i 7.654291i 0.606693i 7.654291i 0.603976i 7.653386i 0.603071i \\\n\ 7.653386i 0.602165i 7.652480i 0.601260i 7.651575i 0.600354i 7.649764i 0.598543i \\\n\ 7.647047i 0.596732i 7.641614i 0.594016i 7.637992i 0.594016i 7.636181i 0.593110i \\\n\ 7.632559i 0.593110i 7.625315i 0.593110i 7.618071i 0.594016i 7.614449i 0.594016i \\\n\ 7.612638i 0.594016i 7.609016i 0.594921i 7.602677i 0.597638i 7.597244i 0.600354i \\\n\ 7.594528i 0.602165i 7.593622i 0.603071i 7.591811i 0.604882i 7.588189i 0.608504i \\\n\ 7.584567i 0.611220i 7.583661i 0.612126i 7.582756i 0.612126i 7.581850i 0.613937i \\\n\ 7.580039i 0.616654i 7.578228i 0.620276i 7.577323i 0.622087i 7.577323i 0.622992i \\\n\ 7.577323i 0.624803i 7.577323i 0.628425i 7.578228i 0.632047i 7.578228i 0.632953i \\\n\ 7.579134i 0.633858i 7.580039i 0.634764i 7.583661i 0.637480i 7.588189i 0.639291i \\\n\ 7.590906i 0.640197i 7.592717i 0.640197i 7.595433i 0.640197i -outline {} -fill $tkxox(score_active_note) \\\n\ -width 0\n\ ${score} create polygon 7.602677i 0.640197i 7.609921i 0.639291i 7.612638i 0.638386i \\\n\ 7.614449i 0.638386i 7.617165i 0.637480i 7.624409i 0.634764i 7.631654i 0.632047i \\\n\ 7.634370i 0.630236i 7.636181i 0.629331i 7.638898i 0.628425i 7.644331i 0.623898i \\\n\ 7.648858i 0.619370i 7.650669i 0.617559i 7.651575i 0.616654i 7.653386i 0.613937i \\\n\ 7.654291i 0.609409i 7.654291i 0.606693i 7.654291i 0.603976i 7.653386i 0.603071i \\\n\ 7.653386i 0.602165i 7.652480i 0.601260i 7.651575i 0.600354i 7.649764i 0.598543i \\\n\ 7.647047i 0.596732i 7.641614i 0.594016i 7.637992i 0.594016i 7.636181i 0.593110i \\\n\ 7.632559i 0.593110i 7.625315i 0.593110i 7.618071i 0.594016i 7.614449i 0.594016i \\\n\ 7.612638i 0.594016i 7.609016i 0.594921i 7.602677i 0.597638i 7.597244i 0.600354i \\\n\ 7.594528i 0.602165i 7.593622i 0.603071i 7.591811i 0.604882i 7.588189i 0.608504i \\\n\ 7.584567i 0.611220i 7.583661i 0.612126i 7.582756i 0.612126i 7.581850i 0.613937i \\\n\ 7.580039i 0.616654i 7.578228i 0.620276i 7.577323i 0.622087i 7.577323i 0.622992i \\\n\ 7.577323i 0.624803i 7.577323i 0.628425i 7.578228i 0.632047i 7.578228i 0.632953i \\\n\ 7.579134i 0.633858i 7.580039i 0.634764i 7.583661i 0.637480i 7.588189i 0.639291i \\\n\ 7.590906i 0.640197i 7.592717i 0.640197i 7.595433i 0.640197i -outline $tkxox(score_active_note) -fill \\\n\ {}\n\ ${score} create polygon 7.649764i 0.441890i 7.650669i 0.447323i 7.651575i 0.449134i \\\n\ 7.651575i 0.450039i 7.652480i 0.451850i 7.654291i 0.456378i 7.656102i 0.460000i \\\n\ 7.657008i 0.460906i 7.661535i 0.464528i 7.667874i 0.469961i 7.671496i 0.472677i \\\n\ 7.673307i 0.474488i 7.677835i 0.477205i 7.685984i 0.484449i 7.694134i 0.490787i \\\n\ 7.698661i 0.493504i 7.700472i 0.494409i 7.704094i 0.498031i 7.710433i 0.504370i \\\n\ 7.714961i 0.511614i 7.716772i 0.514331i 7.716772i 0.515236i 7.717677i 0.517953i \\\n\ 7.719488i 0.525197i 7.720394i 0.532441i 7.720394i 0.535157i 7.719488i 0.538780i \\\n\ 7.717677i 0.547835i 7.714961i 0.557795i 7.712244i 0.564134i 7.710433i 0.568661i \\\n\ 7.708622i 0.572283i 7.705906i 0.577717i 7.703189i 0.584961i 7.703189i 0.585866i \\\n\ 7.702283i 0.586772i 7.702283i 0.587677i 7.701378i 0.587677i 7.701378i 0.588583i \\\n\ 7.701378i 0.589488i 7.700472i 0.589488i 7.700472i 0.590394i 7.700472i 0.589488i \\\n\ 7.700472i 0.588583i 7.700472i 0.587677i 7.700472i 0.586772i 7.701378i 0.586772i \\\n\ 7.701378i 0.585866i 7.701378i 0.584961i 7.703189i 0.578622i 7.705000i 0.574094i \\\n\ 7.706811i 0.570472i 7.708622i 0.566850i 7.710433i 0.561417i 7.713150i 0.553268i \\\n\ 7.715866i 0.545118i 7.716772i 0.542402i 7.717677i 0.542402i 7.717677i 0.539685i \\\n\ 7.716772i 0.532441i 7.714961i 0.524291i 7.713150i 0.520669i 7.712244i 0.519764i \\\n\ 7.710433i 0.516142i 7.704094i 0.507992i 7.697756i 0.501654i 7.693228i 0.498031i \\\n\ 7.691417i 0.496220i 7.688701i 0.495315i 7.684173i 0.492598i 7.676024i 0.487165i \\\n\ 7.666969i 0.481732i 7.662441i 0.479921i 7.659724i 0.479016i 7.656102i 0.477205i \\\n\ 7.649764i 0.474488i 7.648858i 0.474488i 7.647953i 0.473583i 7.647047i 0.473583i \\\n\ 7.646142i 0.473583i 7.645236i 0.473583i 7.645236i 0.474488i 7.645236i 0.475394i \\\n\ 7.645236i 0.476299i 7.645236i 0.477205i 7.645236i 0.478110i 7.646142i 0.479016i \\\n\ 7.646142i 0.479921i 7.646142i 0.480827i 7.646142i 0.479921i 7.646142i 0.479016i \\\n\ 7.646142i 0.478110i 7.646142i 0.477205i 7.646142i 0.475394i 7.646142i 0.474488i \\\n\ 7.646142i 0.464528i 7.647047i 0.455472i 7.647047i 0.447323i 7.647953i 0.440079i \\\n\ 7.647953i 0.431929i 7.648858i 0.423780i 7.649764i 0.421969i 7.648858i 0.424685i \\\n\ 7.648858i 0.430118i 7.648858i 0.435551i -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 7.649764i 0.441890i 7.650669i 0.447323i 7.651575i 0.449134i \\\n\ 7.651575i 0.450039i 7.652480i 0.451850i 7.654291i 0.456378i 7.656102i 0.460000i \\\n\ 7.657008i 0.460906i 7.661535i 0.464528i 7.667874i 0.469961i 7.671496i 0.472677i \\\n\ 7.673307i 0.474488i 7.677835i 0.477205i 7.685984i 0.484449i 7.694134i 0.490787i \\\n\ 7.698661i 0.493504i 7.700472i 0.494409i 7.704094i 0.498031i 7.710433i 0.504370i \\\n\ 7.714961i 0.511614i 7.716772i 0.514331i 7.716772i 0.515236i 7.717677i 0.517953i \\\n\ 7.719488i 0.525197i 7.720394i 0.532441i 7.720394i 0.535157i 7.719488i 0.538780i \\\n\ 7.717677i 0.547835i 7.714961i 0.557795i 7.712244i 0.564134i 7.710433i 0.568661i \\\n\ 7.708622i 0.572283i 7.705906i 0.577717i 7.703189i 0.584961i 7.703189i 0.585866i \\\n\ 7.702283i 0.586772i 7.702283i 0.587677i 7.701378i 0.587677i 7.701378i 0.588583i \\\n\ 7.701378i 0.589488i 7.700472i 0.589488i 7.700472i 0.590394i 7.700472i 0.589488i \\\n\ 7.700472i 0.588583i 7.700472i 0.587677i 7.700472i 0.586772i 7.701378i 0.586772i \\\n\ 7.701378i 0.585866i 7.701378i 0.584961i 7.703189i 0.578622i 7.705000i 0.574094i \\\n\ 7.706811i 0.570472i 7.708622i 0.566850i 7.710433i 0.561417i 7.713150i 0.553268i \\\n\ 7.715866i 0.545118i 7.716772i 0.542402i 7.717677i 0.542402i 7.717677i 0.539685i \\\n\ 7.716772i 0.532441i 7.714961i 0.524291i 7.713150i 0.520669i 7.712244i 0.519764i \\\n\ 7.710433i 0.516142i 7.704094i 0.507992i 7.697756i 0.501654i 7.693228i 0.498031i \\\n\ 7.691417i 0.496220i 7.688701i 0.495315i 7.684173i 0.492598i 7.676024i 0.487165i \\\n\ 7.666969i 0.481732i 7.662441i 0.479921i 7.659724i 0.479016i 7.656102i 0.477205i \\\n\ 7.649764i 0.474488i 7.648858i 0.474488i 7.647953i 0.473583i 7.647047i 0.473583i \\\n\ 7.646142i 0.473583i 7.645236i 0.473583i 7.645236i 0.474488i 7.645236i 0.475394i \\\n\ 7.645236i 0.476299i 7.645236i 0.477205i 7.645236i 0.478110i 7.646142i 0.479016i \\\n\ 7.646142i 0.479921i 7.646142i 0.480827i 7.646142i 0.479921i 7.646142i 0.479016i \\\n\ 7.646142i 0.478110i 7.646142i 0.477205i 7.646142i 0.475394i 7.646142i 0.474488i \\\n\ 7.646142i 0.464528i 7.647047i 0.455472i 7.647047i 0.447323i 7.647953i 0.440079i \\\n\ 7.647953i 0.431929i 7.648858i 0.423780i 7.649764i 0.421969i 7.648858i 0.424685i \\\n\ 7.648858i 0.430118i 7.648858i 0.435551i -outline $tkxox(score_active_note) -fill {}\n\ ${score} create line 7.645236i 0.086024i 7.645236i 0.266220i -fill $tkxox(score_active_note)\n\ ${score} create polygon 7.602677i 0.301535i 7.609921i 0.300630i 7.612638i 0.300630i \\\n\ 7.614449i 0.300630i 7.617165i 0.299724i 7.624409i 0.297913i 7.631654i 0.295197i \\\n\ 7.634370i 0.293386i 7.636181i 0.293386i 7.638898i 0.291575i 7.644331i 0.287047i \\\n\ 7.648858i 0.282520i 7.650669i 0.280709i 7.651575i 0.279803i 7.653386i 0.277087i \\\n\ 7.654291i 0.272559i 7.654291i 0.269843i 7.654291i 0.267126i 7.653386i 0.266220i \\\n\ 7.653386i 0.265315i 7.652480i 0.264409i 7.651575i 0.263504i 7.649764i 0.261693i \\\n\ 7.647047i 0.259882i 7.641614i 0.257165i 7.637992i 0.256260i 7.636181i 0.256260i \\\n\ 7.632559i 0.255354i 7.625315i 0.255354i 7.618071i 0.256260i 7.614449i 0.256260i \\\n\ 7.612638i 0.257165i 7.609016i 0.258071i 7.602677i 0.260787i 7.597244i 0.263504i \\\n\ 7.594528i 0.265315i 7.593622i 0.266220i 7.591811i 0.268031i 7.588189i 0.271654i \\\n\ 7.584567i 0.274370i 7.583661i 0.275276i 7.582756i 0.275276i 7.581850i 0.276181i \\\n\ 7.580039i 0.278898i 7.578228i 0.282520i 7.577323i 0.284331i 7.577323i 0.285236i \\\n\ 7.577323i 0.287047i 7.577323i 0.290669i 7.578228i 0.294291i 7.578228i 0.296102i \\\n\ 7.579134i 0.297008i 7.580039i 0.298819i 7.583661i 0.300630i 7.588189i 0.302441i \\\n\ 7.590906i 0.302441i 7.592717i 0.302441i 7.595433i 0.301535i -outline {} -fill $tkxox(score_active_note) \\\n\ -width 0\n\ ${score} create polygon 7.602677i 0.301535i 7.609921i 0.300630i 7.612638i 0.300630i \\\n\ 7.614449i 0.300630i 7.617165i 0.299724i 7.624409i 0.297913i 7.631654i 0.295197i \\\n\ 7.634370i 0.293386i 7.636181i 0.293386i 7.638898i 0.291575i 7.644331i 0.287047i \\\n\ 7.648858i 0.282520i 7.650669i 0.280709i 7.651575i 0.279803i 7.653386i 0.277087i \\\n\ 7.654291i 0.272559i 7.654291i 0.269843i 7.654291i 0.267126i 7.653386i 0.266220i \\\n\ 7.653386i 0.265315i 7.652480i 0.264409i 7.651575i 0.263504i 7.649764i 0.261693i \\\n\ 7.647047i 0.259882i 7.641614i 0.257165i 7.637992i 0.256260i 7.636181i 0.256260i \\\n\ 7.632559i 0.255354i 7.625315i 0.255354i 7.618071i 0.256260i 7.614449i 0.256260i \\\n\ 7.612638i 0.257165i 7.609016i 0.258071i 7.602677i 0.260787i 7.597244i 0.263504i \\\n\ 7.594528i 0.265315i 7.593622i 0.266220i 7.591811i 0.268031i 7.588189i 0.271654i \\\n\ 7.584567i 0.274370i 7.583661i 0.275276i 7.582756i 0.275276i 7.581850i 0.276181i \\\n\ 7.580039i 0.278898i 7.578228i 0.282520i 7.577323i 0.284331i 7.577323i 0.285236i \\\n\ 7.577323i 0.287047i 7.577323i 0.290669i 7.578228i 0.294291i 7.578228i 0.296102i \\\n\ 7.579134i 0.297008i 7.580039i 0.298819i 7.583661i 0.300630i 7.588189i 0.302441i \\\n\ 7.590906i 0.302441i 7.592717i 0.302441i 7.595433i 0.301535i -outline $tkxox(score_active_note) -fill \\\n\ {}\n\ ${score} create polygon 7.649764i 0.104134i 7.650669i 0.109567i 7.651575i 0.111378i \\\n\ 7.651575i 0.112283i 7.652480i 0.114094i 7.654291i 0.118622i 7.656102i 0.122244i \\\n\ 7.656102i 0.123150i 7.656102i 0.122244i 7.657008i 0.123150i 7.661535i 0.127677i \\\n\ 7.667874i 0.133110i 7.671496i 0.135827i 7.673307i 0.137638i 7.677835i 0.140354i \\\n\ 7.685984i 0.147598i 7.694134i 0.153937i 7.698661i 0.157559i 7.700472i 0.158465i \\\n\ 7.704094i 0.161181i 7.710433i 0.167520i 7.714961i 0.173858i 7.716772i 0.175669i \\\n\ 7.716772i 0.176575i 7.717677i 0.179291i 7.719488i 0.185630i 7.720394i 0.192874i \\\n\ 7.720394i 0.195591i 7.720394i 0.196496i 7.719488i 0.200118i 7.717677i 0.210079i \\\n\ 7.714961i 0.220039i 7.712244i 0.226378i 7.710433i 0.230906i 7.708622i 0.234528i \\\n\ 7.705906i 0.239961i 7.703189i 0.247205i 7.703189i 0.248110i 7.702283i 0.249016i \\\n\ 7.702283i 0.249921i 7.701378i 0.249921i 7.701378i 0.250827i 7.701378i 0.251732i \\\n\ 7.700472i 0.251732i 7.700472i 0.252638i 7.700472i 0.251732i 7.700472i 0.250827i \\\n\ 7.700472i 0.249921i 7.700472i 0.249016i 7.701378i 0.249016i 7.701378i 0.248110i \\\n\ 7.701378i 0.247205i 7.703189i 0.241772i 7.705000i 0.237244i 7.706811i 0.233622i \\\n\ 7.708622i 0.230000i 7.710433i 0.224567i 7.713150i 0.216417i 7.715866i 0.208268i \\\n\ 7.716772i 0.204646i 7.717677i 0.203740i 7.717677i 0.201024i 7.716772i 0.193780i \\\n\ 7.714961i 0.186535i 7.713150i 0.182913i 7.712244i 0.182008i 7.710433i 0.178386i \\\n\ 7.704094i 0.171142i 7.697756i 0.164803i 7.693228i 0.161181i 7.691417i 0.160276i \\\n\ 7.688701i 0.158465i 7.684173i 0.155748i 7.676024i 0.150315i 7.666969i 0.144882i \\\n\ 7.662441i 0.142165i 7.659724i 0.141260i 7.656102i 0.139449i 7.649764i 0.136732i \\\n\ 7.648858i 0.136732i 7.647953i 0.135827i 7.647047i 0.135827i 7.646142i 0.135827i \\\n\ 7.645236i 0.135827i 7.645236i 0.136732i 7.645236i 0.137638i 7.645236i 0.138543i \\\n\ 7.645236i 0.139449i 7.645236i 0.140354i 7.646142i 0.140354i 7.646142i 0.141260i \\\n\ 7.646142i 0.142165i 7.646142i 0.141260i 7.646142i 0.140354i 7.646142i 0.139449i \\\n\ 7.646142i 0.137638i 7.646142i 0.136732i 7.646142i 0.126772i 7.647047i 0.117717i \\\n\ 7.647047i 0.110472i 7.647953i 0.103228i 7.647953i 0.094173i 7.648858i 0.086929i \\\n\ 7.649764i 0.085118i 7.648858i 0.087835i 7.648858i 0.092362i 7.648858i 0.097795i \\\n\ -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 7.649764i 0.104134i 7.650669i 0.109567i 7.651575i 0.111378i \\\n\ 7.651575i 0.112283i 7.652480i 0.114094i 7.654291i 0.118622i 7.656102i 0.122244i \\\n\ 7.656102i 0.123150i 7.656102i 0.122244i 7.657008i 0.123150i 7.661535i 0.127677i \\\n\ 7.667874i 0.133110i 7.671496i 0.135827i 7.673307i 0.137638i 7.677835i 0.140354i \\\n\ 7.685984i 0.147598i 7.694134i 0.153937i 7.698661i 0.157559i 7.700472i 0.158465i \\\n\ 7.704094i 0.161181i 7.710433i 0.167520i 7.714961i 0.173858i 7.716772i 0.175669i \\\n\ 7.716772i 0.176575i 7.717677i 0.179291i 7.719488i 0.185630i 7.720394i 0.192874i \\\n\ 7.720394i 0.195591i 7.720394i 0.196496i 7.719488i 0.200118i 7.717677i 0.210079i \\\n\ 7.714961i 0.220039i 7.712244i 0.226378i 7.710433i 0.230906i 7.708622i 0.234528i \\\n\ 7.705906i 0.239961i 7.703189i 0.247205i 7.703189i 0.248110i 7.702283i 0.249016i \\\n\ 7.702283i 0.249921i 7.701378i 0.249921i 7.701378i 0.250827i 7.701378i 0.251732i \\\n\ 7.700472i 0.251732i 7.700472i 0.252638i 7.700472i 0.251732i 7.700472i 0.250827i \\\n\ 7.700472i 0.249921i 7.700472i 0.249016i 7.701378i 0.249016i 7.701378i 0.248110i \\\n\ 7.701378i 0.247205i 7.703189i 0.241772i 7.705000i 0.237244i 7.706811i 0.233622i \\\n\ 7.708622i 0.230000i 7.710433i 0.224567i 7.713150i 0.216417i 7.715866i 0.208268i \\\n\ 7.716772i 0.204646i 7.717677i 0.203740i 7.717677i 0.201024i 7.716772i 0.193780i \\\n\ 7.714961i 0.186535i 7.713150i 0.182913i 7.712244i 0.182008i 7.710433i 0.178386i \\\n\ 7.704094i 0.171142i 7.697756i 0.164803i 7.693228i 0.161181i 7.691417i 0.160276i \\\n\ 7.688701i 0.158465i 7.684173i 0.155748i 7.676024i 0.150315i 7.666969i 0.144882i \\\n\ 7.662441i 0.142165i 7.659724i 0.141260i 7.656102i 0.139449i 7.649764i 0.136732i \\\n\ 7.648858i 0.136732i 7.647953i 0.135827i 7.647047i 0.135827i 7.646142i 0.135827i \\\n\ 7.645236i 0.135827i 7.645236i 0.136732i 7.645236i 0.137638i 7.645236i 0.138543i \\\n\ 7.645236i 0.139449i 7.645236i 0.140354i 7.646142i 0.140354i 7.646142i 0.141260i \\\n\ 7.646142i 0.142165i 7.646142i 0.141260i 7.646142i 0.140354i 7.646142i 0.139449i \\\n\ 7.646142i 0.137638i 7.646142i 0.136732i 7.646142i 0.126772i 7.647047i 0.117717i \\\n\ 7.647047i 0.110472i 7.647953i 0.103228i 7.647953i 0.094173i 7.648858i 0.086929i \\\n\ 7.649764i 0.085118i 7.648858i 0.087835i 7.648858i 0.092362i 7.648858i 0.097795i \\\n\ -outline $tkxox(score_active_note) -fill {}\n\ ${score} create line 8.286339i 0.422874i 8.286339i 0.602165i -fill $tkxox(score_active_note)\n\ ${score} create polygon 8.243780i 0.640197i 8.251024i 0.639291i 8.253740i 0.638386i \\\n\ 8.255551i 0.638386i 8.258268i 0.637480i 8.265512i 0.634764i 8.272756i 0.632047i \\\n\ 8.275472i 0.630236i 8.277283i 0.629331i 8.280000i 0.628425i 8.285433i 0.623898i \\\n\ 8.289961i 0.619370i 8.291772i 0.617559i 8.292677i 0.616654i 8.294488i 0.613937i \\\n\ 8.295394i 0.609409i 8.295394i 0.606693i 8.295394i 0.603976i 8.295394i 0.603071i \\\n\ 8.295394i 0.602165i 8.294488i 0.601260i 8.293583i 0.600354i 8.291772i 0.598543i \\\n\ 8.289055i 0.596732i 8.283622i 0.594016i 8.280000i 0.594016i 8.278189i 0.593110i \\\n\ 8.274567i 0.593110i 8.266417i 0.593110i 8.259173i 0.594016i 8.255551i 0.594016i \\\n\ 8.253740i 0.594016i 8.250118i 0.594921i 8.243780i 0.597638i 8.237441i 0.600354i \\\n\ 8.235630i 0.602165i 8.234724i 0.603071i 8.232913i 0.604882i 8.229291i 0.608504i \\\n\ 8.225669i 0.611220i 8.224764i 0.612126i 8.223858i 0.613937i 8.222047i 0.616654i \\\n\ 8.220236i 0.620276i 8.219331i 0.622087i 8.218425i 0.622992i 8.218425i 0.624803i \\\n\ 8.218425i 0.628425i 8.219331i 0.631142i 8.219331i 0.632047i 8.219331i 0.632953i \\\n\ 8.219331i 0.633858i 8.220236i 0.633858i 8.220236i 0.634764i 8.222047i 0.635669i \\\n\ 8.224764i 0.637480i 8.229291i 0.639291i 8.232008i 0.640197i 8.233819i 0.640197i \\\n\ 8.236535i 0.640197i -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 8.243780i 0.640197i 8.251024i 0.639291i 8.253740i 0.638386i \\\n\ 8.255551i 0.638386i 8.258268i 0.637480i 8.265512i 0.634764i 8.272756i 0.632047i \\\n\ 8.275472i 0.630236i 8.277283i 0.629331i 8.280000i 0.628425i 8.285433i 0.623898i \\\n\ 8.289961i 0.619370i 8.291772i 0.617559i 8.292677i 0.616654i 8.294488i 0.613937i \\\n\ 8.295394i 0.609409i 8.295394i 0.606693i 8.295394i 0.603976i 8.295394i 0.603071i \\\n\ 8.295394i 0.602165i 8.294488i 0.601260i 8.293583i 0.600354i 8.291772i 0.598543i \\\n\ 8.289055i 0.596732i 8.283622i 0.594016i 8.280000i 0.594016i 8.278189i 0.593110i \\\n\ 8.274567i 0.593110i 8.266417i 0.593110i 8.259173i 0.594016i 8.255551i 0.594016i \\\n\ 8.253740i 0.594016i 8.250118i 0.594921i 8.243780i 0.597638i 8.237441i 0.600354i \\\n\ 8.235630i 0.602165i 8.234724i 0.603071i 8.232913i 0.604882i 8.229291i 0.608504i \\\n\ 8.225669i 0.611220i 8.224764i 0.612126i 8.223858i 0.613937i 8.222047i 0.616654i \\\n\ 8.220236i 0.620276i 8.219331i 0.622087i 8.218425i 0.622992i 8.218425i 0.624803i \\\n\ 8.218425i 0.628425i 8.219331i 0.631142i 8.219331i 0.632047i 8.219331i 0.632953i \\\n\ 8.219331i 0.633858i 8.220236i 0.633858i 8.220236i 0.634764i 8.222047i 0.635669i \\\n\ 8.224764i 0.637480i 8.229291i 0.639291i 8.232008i 0.640197i 8.233819i 0.640197i \\\n\ 8.236535i 0.640197i -outline $tkxox(score_active_note) -fill {}\n\ ${score} create polygon 8.290866i 0.441890i 8.291772i 0.447323i 8.292677i 0.449134i \\\n\ 8.292677i 0.450039i 8.293583i 0.451850i 8.295394i 0.456378i 8.297205i 0.460000i \\\n\ 8.298110i 0.460906i 8.302638i 0.464528i 8.308976i 0.469961i 8.312598i 0.472677i \\\n\ 8.315315i 0.474488i 8.319843i 0.477205i 8.327992i 0.484449i 8.336142i 0.490787i \\\n\ 8.339764i 0.493504i 8.340669i 0.494409i 8.344291i 0.498031i 8.349724i 0.504370i \\\n\ 8.354252i 0.511614i 8.356063i 0.514331i 8.356063i 0.515236i 8.356969i 0.517953i \\\n\ 8.358780i 0.525197i 8.359685i 0.532441i 8.359685i 0.535157i 8.358780i 0.538780i \\\n\ 8.356969i 0.547835i 8.354252i 0.557795i 8.351535i 0.564134i 8.349724i 0.568661i \\\n\ 8.347913i 0.572283i 8.345197i 0.577717i 8.342480i 0.584961i 8.342480i 0.585866i \\\n\ 8.341575i 0.586772i 8.341575i 0.587677i 8.340669i 0.588583i 8.340669i 0.589488i \\\n\ 8.340669i 0.590394i 8.339764i 0.590394i 8.339764i 0.589488i 8.340669i 0.588583i \\\n\ 8.340669i 0.587677i 8.340669i 0.586772i 8.341575i 0.585866i 8.341575i 0.584961i \\\n\ 8.343386i 0.578622i 8.345197i 0.574094i 8.347008i 0.570472i 8.348819i 0.566850i \\\n\ 8.350630i 0.561417i 8.353346i 0.553268i 8.355157i 0.545118i 8.356063i 0.542402i \\\n\ 8.356969i 0.542402i 8.356969i 0.539685i 8.356063i 0.532441i 8.353346i 0.524291i \\\n\ 8.352441i 0.520669i 8.351535i 0.519764i 8.349724i 0.516142i 8.343386i 0.507992i \\\n\ 8.337047i 0.501654i 8.333425i 0.498031i 8.331614i 0.496220i 8.328898i 0.495315i \\\n\ 8.325276i 0.492598i 8.317126i 0.487165i 8.308071i 0.481732i 8.303543i 0.479921i \\\n\ 8.300827i 0.479016i 8.297205i 0.477205i 8.290866i 0.474488i 8.289961i 0.474488i \\\n\ 8.289055i 0.473583i 8.288150i 0.473583i 8.287244i 0.473583i 8.286339i 0.474488i \\\n\ 8.286339i 0.475394i 8.287244i 0.476299i 8.287244i 0.477205i 8.287244i 0.478110i \\\n\ 8.287244i 0.479016i 8.288150i 0.479016i 8.288150i 0.479921i 8.288150i 0.480827i \\\n\ 8.288150i 0.479921i 8.288150i 0.479016i 8.288150i 0.478110i 8.288150i 0.477205i \\\n\ 8.288150i 0.475394i 8.288150i 0.474488i 8.288150i 0.464528i 8.288150i 0.455472i \\\n\ 8.289055i 0.447323i 8.289055i 0.440079i 8.289055i 0.431929i 8.289961i 0.423780i \\\n\ 8.289961i 0.421969i 8.289961i 0.424685i 8.289961i 0.430118i 8.289961i 0.435551i \\\n\ -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 8.290866i 0.441890i 8.291772i 0.447323i 8.292677i 0.449134i \\\n\ 8.292677i 0.450039i 8.293583i 0.451850i 8.295394i 0.456378i 8.297205i 0.460000i \\\n\ 8.298110i 0.460906i 8.302638i 0.464528i 8.308976i 0.469961i 8.312598i 0.472677i \\\n\ 8.315315i 0.474488i 8.319843i 0.477205i 8.327992i 0.484449i 8.336142i 0.490787i \\\n\ 8.339764i 0.493504i 8.340669i 0.494409i 8.344291i 0.498031i 8.349724i 0.504370i \\\n\ 8.354252i 0.511614i 8.356063i 0.514331i 8.356063i 0.515236i 8.356969i 0.517953i \\\n\ 8.358780i 0.525197i 8.359685i 0.532441i 8.359685i 0.535157i 8.358780i 0.538780i \\\n\ 8.356969i 0.547835i 8.354252i 0.557795i 8.351535i 0.564134i 8.349724i 0.568661i \\\n\ 8.347913i 0.572283i 8.345197i 0.577717i 8.342480i 0.584961i 8.342480i 0.585866i \\\n\ 8.341575i 0.586772i 8.341575i 0.587677i 8.340669i 0.588583i 8.340669i 0.589488i \\\n\ 8.340669i 0.590394i 8.339764i 0.590394i 8.339764i 0.589488i 8.340669i 0.588583i \\\n\ 8.340669i 0.587677i 8.340669i 0.586772i 8.341575i 0.585866i 8.341575i 0.584961i \\\n\ 8.343386i 0.578622i 8.345197i 0.574094i 8.347008i 0.570472i 8.348819i 0.566850i \\\n\ 8.350630i 0.561417i 8.353346i 0.553268i 8.355157i 0.545118i 8.356063i 0.542402i \\\n\ 8.356969i 0.542402i 8.356969i 0.539685i 8.356063i 0.532441i 8.353346i 0.524291i \\\n\ 8.352441i 0.520669i 8.351535i 0.519764i 8.349724i 0.516142i 8.343386i 0.507992i \\\n\ 8.337047i 0.501654i 8.333425i 0.498031i 8.331614i 0.496220i 8.328898i 0.495315i \\\n\ 8.325276i 0.492598i 8.317126i 0.487165i 8.308071i 0.481732i 8.303543i 0.479921i \\\n\ 8.300827i 0.479016i 8.297205i 0.477205i 8.290866i 0.474488i 8.289961i 0.474488i \\\n\ 8.289055i 0.473583i 8.288150i 0.473583i 8.287244i 0.473583i 8.286339i 0.474488i \\\n\ 8.286339i 0.475394i 8.287244i 0.476299i 8.287244i 0.477205i 8.287244i 0.478110i \\\n\ 8.287244i 0.479016i 8.288150i 0.479016i 8.288150i 0.479921i 8.288150i 0.480827i \\\n\ 8.288150i 0.479921i 8.288150i 0.479016i 8.288150i 0.478110i 8.288150i 0.477205i \\\n\ 8.288150i 0.475394i 8.288150i 0.474488i 8.288150i 0.464528i 8.288150i 0.455472i \\\n\ 8.289055i 0.447323i 8.289055i 0.440079i 8.289055i 0.431929i 8.289961i 0.423780i \\\n\ 8.289961i 0.421969i 8.289961i 0.424685i 8.289961i 0.430118i 8.289961i 0.435551i \\\n\ -outline $tkxox(score_active_note) -fill {}\n\ ${score} create line 9.045157i 0.422874i 9.045157i 0.602165i -fill $tkxox(score_active_note)\n\ ${score} create polygon 9.002598i 0.640197i 9.009843i 0.639291i 9.012559i 0.638386i \\\n\ 9.014370i 0.638386i 9.017087i 0.637480i 9.024331i 0.634764i 9.031575i 0.632047i \\\n\ 9.034291i 0.630236i 9.036102i 0.629331i 9.038819i 0.628425i 9.044252i 0.623898i \\\n\ 9.048780i 0.619370i 9.050591i 0.617559i 9.051496i 0.616654i 9.053307i 0.613937i \\\n\ 9.054213i 0.609409i 9.054213i 0.606693i 9.054213i 0.603976i 9.054213i 0.603071i \\\n\ 9.054213i 0.602165i 9.053307i 0.601260i 9.052402i 0.600354i 9.050591i 0.598543i \\\n\ 9.047874i 0.596732i 9.042441i 0.594016i 9.038819i 0.594016i 9.037008i 0.593110i \\\n\ 9.033386i 0.593110i 9.025236i 0.593110i 9.017992i 0.594016i 9.014370i 0.594016i \\\n\ 9.012559i 0.594016i 9.008937i 0.594921i 9.002598i 0.597638i 8.996260i 0.600354i \\\n\ 8.994449i 0.602165i 8.993543i 0.603071i 8.991732i 0.604882i 8.988110i 0.608504i \\\n\ 8.984488i 0.611220i 8.983583i 0.612126i 8.982677i 0.613937i 8.980866i 0.616654i \\\n\ 8.979055i 0.620276i 8.978150i 0.622087i 8.977244i 0.622992i 8.977244i 0.624803i \\\n\ 8.977244i 0.628425i 8.978150i 0.631142i 8.979055i 0.632953i 8.979055i 0.633858i \\\n\ 8.979961i 0.633858i 8.980866i 0.635669i 8.984488i 0.637480i 8.989016i 0.639291i \\\n\ 8.991732i 0.640197i 8.992638i 0.640197i 8.996260i 0.640197i -outline {} -fill $tkxox(score_active_note) \\\n\ -width 0\n\ ${score} create polygon 9.002598i 0.640197i 9.009843i 0.639291i 9.012559i 0.638386i \\\n\ 9.014370i 0.638386i 9.017087i 0.637480i 9.024331i 0.634764i 9.031575i 0.632047i \\\n\ 9.034291i 0.630236i 9.036102i 0.629331i 9.038819i 0.628425i 9.044252i 0.623898i \\\n\ 9.048780i 0.619370i 9.050591i 0.617559i 9.051496i 0.616654i 9.053307i 0.613937i \\\n\ 9.054213i 0.609409i 9.054213i 0.606693i 9.054213i 0.603976i 9.054213i 0.603071i \\\n\ 9.054213i 0.602165i 9.053307i 0.601260i 9.052402i 0.600354i 9.050591i 0.598543i \\\n\ 9.047874i 0.596732i 9.042441i 0.594016i 9.038819i 0.594016i 9.037008i 0.593110i \\\n\ 9.033386i 0.593110i 9.025236i 0.593110i 9.017992i 0.594016i 9.014370i 0.594016i \\\n\ 9.012559i 0.594016i 9.008937i 0.594921i 9.002598i 0.597638i 8.996260i 0.600354i \\\n\ 8.994449i 0.602165i 8.993543i 0.603071i 8.991732i 0.604882i 8.988110i 0.608504i \\\n\ 8.984488i 0.611220i 8.983583i 0.612126i 8.982677i 0.613937i 8.980866i 0.616654i \\\n\ 8.979055i 0.620276i 8.978150i 0.622087i 8.977244i 0.622992i 8.977244i 0.624803i \\\n\ 8.977244i 0.628425i 8.978150i 0.631142i 8.979055i 0.632953i 8.979055i 0.633858i \\\n\ 8.979961i 0.633858i 8.980866i 0.635669i 8.984488i 0.637480i 8.989016i 0.639291i \\\n\ 8.991732i 0.640197i 8.992638i 0.640197i 8.996260i 0.640197i -outline $tkxox(score_active_note) -fill \\\n\ {}\n\ ${score} create polygon 9.050591i 0.441890i 9.051496i 0.447323i 9.051496i 0.449134i \\\n\ 9.051496i 0.450039i 9.052402i 0.451850i 9.054213i 0.456378i 9.056024i 0.460000i \\\n\ 9.056929i 0.460000i 9.057835i 0.460906i 9.062362i 0.464528i 9.068701i 0.469961i \\\n\ 9.072323i 0.472677i 9.075039i 0.474488i 9.078661i 0.477205i 9.086811i 0.484449i \\\n\ 9.094961i 0.490787i 9.097677i 0.493504i 9.099488i 0.494409i 9.102205i 0.498031i \\\n\ 9.108543i 0.504370i 9.113976i 0.511614i 9.115787i 0.514331i 9.115787i 0.515236i \\\n\ 9.117598i 0.517953i 9.119409i 0.525197i 9.120315i 0.532441i 9.120315i 0.535157i \\\n\ 9.120315i 0.538780i 9.117598i 0.547835i 9.114882i 0.557795i 9.112165i 0.564134i \\\n\ 9.109449i 0.568661i 9.107638i 0.572283i 9.104921i 0.577717i 9.102205i 0.584961i \\\n\ 9.102205i 0.585866i 9.101299i 0.586772i 9.101299i 0.587677i 9.100394i 0.587677i \\\n\ 9.100394i 0.588583i 9.100394i 0.589488i 9.099488i 0.589488i 9.099488i 0.590394i \\\n\ 9.098583i 0.590394i 9.098583i 0.589488i 9.099488i 0.588583i 9.099488i 0.587677i \\\n\ 9.099488i 0.586772i 9.100394i 0.585866i 9.100394i 0.584961i 9.103110i 0.578622i \\\n\ 9.104921i 0.574094i 9.106732i 0.570472i 9.108543i 0.566850i 9.111260i 0.561417i \\\n\ 9.113976i 0.553268i 9.116693i 0.546024i 9.117598i 0.542402i 9.118504i 0.542402i \\\n\ 9.118504i 0.541496i 9.118504i 0.538780i 9.117598i 0.532441i 9.114882i 0.524291i \\\n\ 9.113071i 0.520669i 9.111260i 0.519764i 9.108543i 0.516142i 9.102205i 0.507992i \\\n\ 9.095866i 0.501654i 9.092244i 0.498031i 9.090433i 0.496220i 9.088622i 0.495315i \\\n\ 9.084094i 0.492598i 9.076850i 0.487165i 9.067795i 0.481732i 9.063268i 0.479921i \\\n\ 9.060551i 0.479016i 9.056929i 0.477205i 9.050591i 0.474488i 9.049685i 0.474488i \\\n\ 9.048780i 0.473583i 9.047874i 0.473583i 9.046969i 0.473583i 9.046063i 0.473583i \\\n\ 9.046063i 0.474488i 9.046063i 0.475394i 9.046063i 0.476299i 9.046063i 0.477205i \\\n\ 9.046063i 0.478110i 9.046969i 0.479016i 9.046969i 0.479921i 9.046969i 0.480827i \\\n\ 9.046969i 0.479921i 9.046969i 0.479016i 9.046969i 0.478110i 9.046969i 0.477205i \\\n\ 9.046969i 0.475394i 9.046969i 0.474488i 9.046969i 0.464528i 9.047874i 0.455472i \\\n\ 9.047874i 0.447323i 9.048780i 0.440079i 9.048780i 0.431929i 9.049685i 0.423780i \\\n\ 9.050591i 0.421969i 9.050591i 0.424685i 9.049685i 0.430118i 9.049685i 0.435551i \\\n\ -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 9.050591i 0.441890i 9.051496i 0.447323i 9.051496i 0.449134i \\\n\ 9.051496i 0.450039i 9.052402i 0.451850i 9.054213i 0.456378i 9.056024i 0.460000i \\\n\ 9.056929i 0.460000i 9.057835i 0.460906i 9.062362i 0.464528i 9.068701i 0.469961i \\\n\ 9.072323i 0.472677i 9.075039i 0.474488i 9.078661i 0.477205i 9.086811i 0.484449i \\\n\ 9.094961i 0.490787i 9.097677i 0.493504i 9.099488i 0.494409i 9.102205i 0.498031i \\\n\ 9.108543i 0.504370i 9.113976i 0.511614i 9.115787i 0.514331i 9.115787i 0.515236i \\\n\ 9.117598i 0.517953i 9.119409i 0.525197i 9.120315i 0.532441i 9.120315i 0.535157i \\\n\ 9.120315i 0.538780i 9.117598i 0.547835i 9.114882i 0.557795i 9.112165i 0.564134i \\\n\ 9.109449i 0.568661i 9.107638i 0.572283i 9.104921i 0.577717i 9.102205i 0.584961i \\\n\ 9.102205i 0.585866i 9.101299i 0.586772i 9.101299i 0.587677i 9.100394i 0.587677i \\\n\ 9.100394i 0.588583i 9.100394i 0.589488i 9.099488i 0.589488i 9.099488i 0.590394i \\\n\ 9.098583i 0.590394i 9.098583i 0.589488i 9.099488i 0.588583i 9.099488i 0.587677i \\\n\ 9.099488i 0.586772i 9.100394i 0.585866i 9.100394i 0.584961i 9.103110i 0.578622i \\\n\ 9.104921i 0.574094i 9.106732i 0.570472i 9.108543i 0.566850i 9.111260i 0.561417i \\\n\ 9.113976i 0.553268i 9.116693i 0.546024i 9.117598i 0.542402i 9.118504i 0.542402i \\\n\ 9.118504i 0.541496i 9.118504i 0.538780i 9.117598i 0.532441i 9.114882i 0.524291i \\\n\ 9.113071i 0.520669i 9.111260i 0.519764i 9.108543i 0.516142i 9.102205i 0.507992i \\\n\ 9.095866i 0.501654i 9.092244i 0.498031i 9.090433i 0.496220i 9.088622i 0.495315i \\\n\ 9.084094i 0.492598i 9.076850i 0.487165i 9.067795i 0.481732i 9.063268i 0.479921i \\\n\ 9.060551i 0.479016i 9.056929i 0.477205i 9.050591i 0.474488i 9.049685i 0.474488i \\\n\ 9.048780i 0.473583i 9.047874i 0.473583i 9.046969i 0.473583i 9.046063i 0.473583i \\\n\ 9.046063i 0.474488i 9.046063i 0.475394i 9.046063i 0.476299i 9.046063i 0.477205i \\\n\ 9.046063i 0.478110i 9.046969i 0.479016i 9.046969i 0.479921i 9.046969i 0.480827i \\\n\ 9.046969i 0.479921i 9.046969i 0.479016i 9.046969i 0.478110i 9.046969i 0.477205i \\\n\ 9.046969i 0.475394i 9.046969i 0.474488i 9.046969i 0.464528i 9.047874i 0.455472i \\\n\ 9.047874i 0.447323i 9.048780i 0.440079i 9.048780i 0.431929i 9.049685i 0.423780i \\\n\ 9.050591i 0.421969i 9.050591i 0.424685i 9.049685i 0.430118i 9.049685i 0.435551i \\\n\ -outline $tkxox(score_active_note) -fill {}\n\ ${score} create line 9.047874i 1.060354i 9.047874i 1.264094i -fill $tkxox(score_active_note)\n\ ${score} create polygon 9.004409i 1.306654i 9.011654i 1.305748i 9.014370i 1.305748i \\\n\ 9.016181i 1.304843i 9.018898i 1.303937i 9.026142i 1.301220i 9.033386i 1.297598i \\\n\ 9.036102i 1.295787i 9.037913i 1.295787i 9.040630i 1.293071i 9.046063i 1.288543i \\\n\ 9.051496i 1.283110i 9.053307i 1.281299i 9.055118i 1.280394i 9.056024i 1.277677i \\\n\ 9.057835i 1.272244i 9.057835i 1.268622i 9.057835i 1.265906i 9.056929i 1.265000i \\\n\ 9.056929i 1.264094i 9.056929i 1.263189i 9.056024i 1.262283i 9.053307i 1.260472i \\\n\ 9.050591i 1.257756i 9.045157i 1.255039i 9.041535i 1.253228i 9.039724i 1.253228i \\\n\ 9.036102i 1.252323i 9.027953i 1.252323i 9.019803i 1.253228i 9.016181i 1.254134i \\\n\ 9.015276i 1.255039i 9.011654i 1.256850i 9.004409i 1.259567i 8.998071i 1.262283i \\\n\ 8.995354i 1.263189i 8.994449i 1.264094i 8.992638i 1.265906i 8.988110i 1.268622i \\\n\ 8.984488i 1.272244i 8.983583i 1.273150i 8.982677i 1.274961i 8.980866i 1.278583i \\\n\ 8.979055i 1.283110i 8.978150i 1.284921i 8.977244i 1.286732i 8.977244i 1.288543i \\\n\ 8.977244i 1.293071i 8.978150i 1.297598i 8.979055i 1.299409i 8.979055i 1.300315i \\\n\ 8.980866i 1.301220i 8.984488i 1.303937i 8.989921i 1.305748i 8.992638i 1.306654i \\\n\ 8.994449i 1.306654i 8.997165i 1.306654i -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 9.004409i 1.306654i 9.011654i 1.305748i 9.014370i 1.305748i \\\n\ 9.016181i 1.304843i 9.018898i 1.303937i 9.026142i 1.301220i 9.033386i 1.297598i \\\n\ 9.036102i 1.295787i 9.037913i 1.295787i 9.040630i 1.293071i 9.046063i 1.288543i \\\n\ 9.051496i 1.283110i 9.053307i 1.281299i 9.055118i 1.280394i 9.056024i 1.277677i \\\n\ 9.057835i 1.272244i 9.057835i 1.268622i 9.057835i 1.265906i 9.056929i 1.265000i \\\n\ 9.056929i 1.264094i 9.056929i 1.263189i 9.056024i 1.262283i 9.053307i 1.260472i \\\n\ 9.050591i 1.257756i 9.045157i 1.255039i 9.041535i 1.253228i 9.039724i 1.253228i \\\n\ 9.036102i 1.252323i 9.027953i 1.252323i 9.019803i 1.253228i 9.016181i 1.254134i \\\n\ 9.015276i 1.255039i 9.011654i 1.256850i 9.004409i 1.259567i 8.998071i 1.262283i \\\n\ 8.995354i 1.263189i 8.994449i 1.264094i 8.992638i 1.265906i 8.988110i 1.268622i \\\n\ 8.984488i 1.272244i 8.983583i 1.273150i 8.982677i 1.274961i 8.980866i 1.278583i \\\n\ 8.979055i 1.283110i 8.978150i 1.284921i 8.977244i 1.286732i 8.977244i 1.288543i \\\n\ 8.977244i 1.293071i 8.978150i 1.297598i 8.979055i 1.299409i 8.979055i 1.300315i \\\n\ 8.980866i 1.301220i 8.984488i 1.303937i 8.989921i 1.305748i 8.992638i 1.306654i \\\n\ 8.994449i 1.306654i 8.997165i 1.306654i -outline $tkxox(score_active_note) -fill {}\n\ ${score} create line 9.651850i 0.422874i 9.651850i 0.602165i -fill $tkxox(score_active_note)\n\ ${score} create polygon 9.609291i 0.640197i 9.616535i 0.639291i 9.619252i 0.638386i \\\n\ 9.621063i 0.638386i 9.623780i 0.637480i 9.631024i 0.634764i 9.638268i 0.632047i \\\n\ 9.640984i 0.630236i 9.642795i 0.629331i 9.645512i 0.628425i 9.650945i 0.623898i \\\n\ 9.655472i 0.619370i 9.657283i 0.617559i 9.658189i 0.616654i 9.660000i 0.613937i \\\n\ 9.660906i 0.609409i 9.660906i 0.606693i 9.660906i 0.603976i 9.660906i 0.603071i \\\n\ 9.660906i 0.602165i 9.660000i 0.601260i 9.659094i 0.600354i 9.657283i 0.598543i \\\n\ 9.654567i 0.596732i 9.649134i 0.594016i 9.645512i 0.594016i 9.643701i 0.593110i \\\n\ 9.640079i 0.593110i 9.631929i 0.593110i 9.624685i 0.594016i 9.621063i 0.594016i \\\n\ 9.619252i 0.594016i 9.615630i 0.594921i 9.609291i 0.597638i 9.602953i 0.600354i \\\n\ 9.601142i 0.602165i 9.600236i 0.603071i 9.598425i 0.604882i 9.594803i 0.608504i \\\n\ 9.591181i 0.611220i 9.590276i 0.612126i 9.589370i 0.613937i 9.587559i 0.616654i \\\n\ 9.585748i 0.620276i 9.584843i 0.622087i 9.583937i 0.622992i 9.583937i 0.624803i \\\n\ 9.583937i 0.628425i 9.584843i 0.631142i 9.584843i 0.632047i 9.584843i 0.632953i \\\n\ 9.584843i 0.633858i 9.585748i 0.633858i 9.585748i 0.634764i 9.587559i 0.635669i \\\n\ 9.590276i 0.637480i 9.594803i 0.639291i 9.597520i 0.640197i 9.599331i 0.640197i \\\n\ 9.602047i 0.640197i -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 9.609291i 0.640197i 9.616535i 0.639291i 9.619252i 0.638386i \\\n\ 9.621063i 0.638386i 9.623780i 0.637480i 9.631024i 0.634764i 9.638268i 0.632047i \\\n\ 9.640984i 0.630236i 9.642795i 0.629331i 9.645512i 0.628425i 9.650945i 0.623898i \\\n\ 9.655472i 0.619370i 9.657283i 0.617559i 9.658189i 0.616654i 9.660000i 0.613937i \\\n\ 9.660906i 0.609409i 9.660906i 0.606693i 9.660906i 0.603976i 9.660906i 0.603071i \\\n\ 9.660906i 0.602165i 9.660000i 0.601260i 9.659094i 0.600354i 9.657283i 0.598543i \\\n\ 9.654567i 0.596732i 9.649134i 0.594016i 9.645512i 0.594016i 9.643701i 0.593110i \\\n\ 9.640079i 0.593110i 9.631929i 0.593110i 9.624685i 0.594016i 9.621063i 0.594016i \\\n\ 9.619252i 0.594016i 9.615630i 0.594921i 9.609291i 0.597638i 9.602953i 0.600354i \\\n\ 9.601142i 0.602165i 9.600236i 0.603071i 9.598425i 0.604882i 9.594803i 0.608504i \\\n\ 9.591181i 0.611220i 9.590276i 0.612126i 9.589370i 0.613937i 9.587559i 0.616654i \\\n\ 9.585748i 0.620276i 9.584843i 0.622087i 9.583937i 0.622992i 9.583937i 0.624803i \\\n\ 9.583937i 0.628425i 9.584843i 0.631142i 9.584843i 0.632047i 9.584843i 0.632953i \\\n\ 9.584843i 0.633858i 9.585748i 0.633858i 9.585748i 0.634764i 9.587559i 0.635669i \\\n\ 9.590276i 0.637480i 9.594803i 0.639291i 9.597520i 0.640197i 9.599331i 0.640197i \\\n\ 9.602047i 0.640197i -outline $tkxox(score_active_note) -fill {}\n\ ${score} create polygon 9.656378i 0.441890i 9.657283i 0.447323i 9.658189i 0.449134i \\\n\ 9.658189i 0.450039i 9.659094i 0.451850i 9.660906i 0.456378i 9.662717i 0.460000i \\\n\ 9.663622i 0.460906i 9.668150i 0.464528i 9.674488i 0.469961i 9.678110i 0.472677i \\\n\ 9.680827i 0.474488i 9.685354i 0.477205i 9.693504i 0.484449i 9.701654i 0.490787i \\\n\ 9.705276i 0.493504i 9.706181i 0.494409i 9.709803i 0.498031i 9.715236i 0.504370i \\\n\ 9.719764i 0.511614i 9.721575i 0.514331i 9.721575i 0.515236i 9.722480i 0.517953i \\\n\ 9.724291i 0.525197i 9.725197i 0.532441i 9.725197i 0.535157i 9.724291i 0.538780i \\\n\ 9.722480i 0.547835i 9.719764i 0.557795i 9.717047i 0.564134i 9.715236i 0.568661i \\\n\ 9.713425i 0.572283i 9.710709i 0.577717i 9.707992i 0.584961i 9.707992i 0.585866i \\\n\ 9.707087i 0.586772i 9.707087i 0.587677i 9.706181i 0.588583i 9.706181i 0.589488i \\\n\ 9.706181i 0.590394i 9.705276i 0.590394i 9.705276i 0.589488i 9.706181i 0.588583i \\\n\ 9.706181i 0.587677i 9.706181i 0.586772i 9.707087i 0.585866i 9.707087i 0.584961i \\\n\ 9.708898i 0.578622i 9.710709i 0.574094i 9.712520i 0.570472i 9.714331i 0.566850i \\\n\ 9.716142i 0.561417i 9.718858i 0.553268i 9.720669i 0.545118i 9.721575i 0.542402i \\\n\ 9.722480i 0.542402i 9.722480i 0.539685i 9.721575i 0.532441i 9.718858i 0.524291i \\\n\ 9.717953i 0.520669i 9.717047i 0.519764i 9.715236i 0.516142i 9.708898i 0.507992i \\\n\ 9.702559i 0.501654i 9.698937i 0.498031i 9.697126i 0.496220i 9.694409i 0.495315i \\\n\ 9.690787i 0.492598i 9.682638i 0.487165i 9.673583i 0.481732i 9.669055i 0.479921i \\\n\ 9.666339i 0.479016i 9.662717i 0.477205i 9.656378i 0.474488i 9.655472i 0.474488i \\\n\ 9.654567i 0.473583i 9.653661i 0.473583i 9.652756i 0.473583i 9.651850i 0.474488i \\\n\ 9.651850i 0.475394i 9.652756i 0.476299i 9.652756i 0.477205i 9.652756i 0.478110i \\\n\ 9.652756i 0.479016i 9.653661i 0.479016i 9.653661i 0.479921i 9.653661i 0.480827i \\\n\ 9.653661i 0.479921i 9.653661i 0.479016i 9.653661i 0.478110i 9.653661i 0.477205i \\\n\ 9.653661i 0.475394i 9.653661i 0.474488i 9.653661i 0.464528i 9.653661i 0.455472i \\\n\ 9.654567i 0.447323i 9.654567i 0.440079i 9.654567i 0.431929i 9.655472i 0.423780i \\\n\ 9.655472i 0.421969i 9.655472i 0.424685i 9.655472i 0.430118i 9.655472i 0.435551i \\\n\ -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 9.656378i 0.441890i 9.657283i 0.447323i 9.658189i 0.449134i \\\n\ 9.658189i 0.450039i 9.659094i 0.451850i 9.660906i 0.456378i 9.662717i 0.460000i \\\n\ 9.663622i 0.460906i 9.668150i 0.464528i 9.674488i 0.469961i 9.678110i 0.472677i \\\n\ 9.680827i 0.474488i 9.685354i 0.477205i 9.693504i 0.484449i 9.701654i 0.490787i \\\n\ 9.705276i 0.493504i 9.706181i 0.494409i 9.709803i 0.498031i 9.715236i 0.504370i \\\n\ 9.719764i 0.511614i 9.721575i 0.514331i 9.721575i 0.515236i 9.722480i 0.517953i \\\n\ 9.724291i 0.525197i 9.725197i 0.532441i 9.725197i 0.535157i 9.724291i 0.538780i \\\n\ 9.722480i 0.547835i 9.719764i 0.557795i 9.717047i 0.564134i 9.715236i 0.568661i \\\n\ 9.713425i 0.572283i 9.710709i 0.577717i 9.707992i 0.584961i 9.707992i 0.585866i \\\n\ 9.707087i 0.586772i 9.707087i 0.587677i 9.706181i 0.588583i 9.706181i 0.589488i \\\n\ 9.706181i 0.590394i 9.705276i 0.590394i 9.705276i 0.589488i 9.706181i 0.588583i \\\n\ 9.706181i 0.587677i 9.706181i 0.586772i 9.707087i 0.585866i 9.707087i 0.584961i \\\n\ 9.708898i 0.578622i 9.710709i 0.574094i 9.712520i 0.570472i 9.714331i 0.566850i \\\n\ 9.716142i 0.561417i 9.718858i 0.553268i 9.720669i 0.545118i 9.721575i 0.542402i \\\n\ 9.722480i 0.542402i 9.722480i 0.539685i 9.721575i 0.532441i 9.718858i 0.524291i \\\n\ 9.717953i 0.520669i 9.717047i 0.519764i 9.715236i 0.516142i 9.708898i 0.507992i \\\n\ 9.702559i 0.501654i 9.698937i 0.498031i 9.697126i 0.496220i 9.694409i 0.495315i \\\n\ 9.690787i 0.492598i 9.682638i 0.487165i 9.673583i 0.481732i 9.669055i 0.479921i \\\n\ 9.666339i 0.479016i 9.662717i 0.477205i 9.656378i 0.474488i 9.655472i 0.474488i \\\n\ 9.654567i 0.473583i 9.653661i 0.473583i 9.652756i 0.473583i 9.651850i 0.474488i \\\n\ 9.651850i 0.475394i 9.652756i 0.476299i 9.652756i 0.477205i 9.652756i 0.478110i \\\n\ 9.652756i 0.479016i 9.653661i 0.479016i 9.653661i 0.479921i 9.653661i 0.480827i \\\n\ 9.653661i 0.479921i 9.653661i 0.479016i 9.653661i 0.478110i 9.653661i 0.477205i \\\n\ 9.653661i 0.475394i 9.653661i 0.474488i 9.653661i 0.464528i 9.653661i 0.455472i \\\n\ 9.654567i 0.447323i 9.654567i 0.440079i 9.654567i 0.431929i 9.655472i 0.423780i \\\n\ 9.655472i 0.421969i 9.655472i 0.424685i 9.655472i 0.430118i 9.655472i 0.435551i \\\n\ -outline $tkxox(score_active_note) -fill {}\n\ ${score} create line 5.032835i 0.086024i 5.032835i 0.266220i -fill $tkxox(score_active_note)\n\ ${score} create polygon 4.991181i 0.301535i 4.998425i 0.300630i 5.001142i 0.300630i \\\n\ 5.002953i 0.300630i 5.005669i 0.299724i 5.012913i 0.297913i 5.020157i 0.295197i \\\n\ 5.022874i 0.293386i 5.024685i 0.293386i 5.027402i 0.291575i 5.032835i 0.287047i \\\n\ 5.037362i 0.282520i 5.039173i 0.280709i 5.040079i 0.279803i 5.041890i 0.277087i \\\n\ 5.042795i 0.272559i 5.042795i 0.269843i 5.042795i 0.267126i 5.041890i 0.266220i \\\n\ 5.041890i 0.265315i 5.040984i 0.264409i 5.040079i 0.263504i 5.038268i 0.261693i \\\n\ 5.035551i 0.259882i 5.030118i 0.257165i 5.026496i 0.256260i 5.024685i 0.256260i \\\n\ 5.021063i 0.255354i 5.013819i 0.255354i 5.006575i 0.256260i 5.002953i 0.256260i \\\n\ 5.001142i 0.257165i 4.997520i 0.258071i 4.991181i 0.260787i 4.985748i 0.263504i \\\n\ 4.983031i 0.265315i 4.982126i 0.266220i 4.980315i 0.268031i 4.976693i 0.271654i \\\n\ 4.973071i 0.274370i 4.972165i 0.275276i 4.971260i 0.275276i 4.970354i 0.276181i \\\n\ 4.968543i 0.278898i 4.966732i 0.282520i 4.965827i 0.284331i 4.965827i 0.285236i \\\n\ 4.965827i 0.287047i 4.965827i 0.290669i 4.966732i 0.294291i 4.966732i 0.296102i \\\n\ 4.967638i 0.297008i 4.968543i 0.298819i 4.972165i 0.300630i 4.976693i 0.302441i \\\n\ 4.979409i 0.302441i 4.981220i 0.302441i 4.983937i 0.301535i -outline {} -fill $tkxox(score_active_note) \\\n\ -width 0\n\ ${score} create polygon 4.991181i 0.301535i 4.998425i 0.300630i 5.001142i 0.300630i \\\n\ 5.002953i 0.300630i 5.005669i 0.299724i 5.012913i 0.297913i 5.020157i 0.295197i \\\n\ 5.022874i 0.293386i 5.024685i 0.293386i 5.027402i 0.291575i 5.032835i 0.287047i \\\n\ 5.037362i 0.282520i 5.039173i 0.280709i 5.040079i 0.279803i 5.041890i 0.277087i \\\n\ 5.042795i 0.272559i 5.042795i 0.269843i 5.042795i 0.267126i 5.041890i 0.266220i \\\n\ 5.041890i 0.265315i 5.040984i 0.264409i 5.040079i 0.263504i 5.038268i 0.261693i \\\n\ 5.035551i 0.259882i 5.030118i 0.257165i 5.026496i 0.256260i 5.024685i 0.256260i \\\n\ 5.021063i 0.255354i 5.013819i 0.255354i 5.006575i 0.256260i 5.002953i 0.256260i \\\n\ 5.001142i 0.257165i 4.997520i 0.258071i 4.991181i 0.260787i 4.985748i 0.263504i \\\n\ 4.983031i 0.265315i 4.982126i 0.266220i 4.980315i 0.268031i 4.976693i 0.271654i \\\n\ 4.973071i 0.274370i 4.972165i 0.275276i 4.971260i 0.275276i 4.970354i 0.276181i \\\n\ 4.968543i 0.278898i 4.966732i 0.282520i 4.965827i 0.284331i 4.965827i 0.285236i \\\n\ 4.965827i 0.287047i 4.965827i 0.290669i 4.966732i 0.294291i 4.966732i 0.296102i \\\n\ 4.967638i 0.297008i 4.968543i 0.298819i 4.972165i 0.300630i 4.976693i 0.302441i \\\n\ 4.979409i 0.302441i 4.981220i 0.302441i 4.983937i 0.301535i -outline $tkxox(score_active_note) -fill \\\n\ {}\n\ ${score} create polygon 5.038268i 0.104134i 5.039173i 0.109567i 5.040079i 0.111378i \\\n\ 5.040079i 0.112283i 5.040984i 0.114094i 5.042795i 0.118622i 5.044606i 0.122244i \\\n\ 5.044606i 0.123150i 5.044606i 0.122244i 5.045512i 0.123150i 5.050039i 0.127677i \\\n\ 5.056378i 0.133110i 5.060000i 0.135827i 5.061811i 0.137638i 5.066339i 0.140354i \\\n\ 5.074488i 0.147598i 5.082638i 0.153937i 5.087165i 0.157559i 5.088976i 0.158465i \\\n\ 5.092598i 0.161181i 5.098937i 0.167520i 5.103465i 0.173858i 5.105276i 0.175669i \\\n\ 5.105276i 0.176575i 5.106181i 0.179291i 5.107992i 0.185630i 5.108898i 0.192874i \\\n\ 5.108898i 0.195591i 5.108898i 0.196496i 5.108898i 0.200118i 5.106181i 0.210079i \\\n\ 5.102559i 0.220039i 5.099843i 0.226378i 5.098031i 0.230906i 5.096220i 0.234528i \\\n\ 5.093504i 0.239961i 5.089882i 0.247205i 5.088976i 0.248110i 5.088976i 0.249016i \\\n\ 5.088976i 0.249921i 5.088071i 0.249921i 5.088071i 0.250827i 5.088071i 0.251732i \\\n\ 5.087165i 0.251732i 5.087165i 0.252638i 5.086260i 0.252638i 5.086260i 0.251732i \\\n\ 5.087165i 0.250827i 5.087165i 0.249921i 5.087165i 0.249016i 5.088071i 0.248110i \\\n\ 5.088071i 0.247205i 5.090787i 0.241772i 5.092598i 0.237244i 5.094409i 0.233622i \\\n\ 5.096220i 0.230000i 5.098937i 0.224567i 5.101654i 0.216417i 5.104370i 0.208268i \\\n\ 5.105276i 0.204646i 5.106181i 0.203740i 5.106181i 0.201024i 5.105276i 0.193780i \\\n\ 5.102559i 0.186535i 5.100748i 0.182913i 5.099843i 0.182008i 5.097126i 0.178386i \\\n\ 5.090787i 0.171142i 5.084449i 0.164803i 5.080827i 0.161181i 5.079016i 0.160276i \\\n\ 5.076299i 0.158465i 5.072677i 0.155748i 5.064528i 0.150315i 5.055472i 0.144882i \\\n\ 5.050945i 0.142165i 5.048228i 0.141260i 5.044606i 0.139449i 5.038268i 0.136732i \\\n\ 5.037362i 0.136732i 5.036457i 0.135827i 5.035551i 0.135827i 5.034646i 0.135827i \\\n\ 5.033740i 0.135827i 5.033740i 0.136732i 5.033740i 0.137638i 5.033740i 0.138543i \\\n\ 5.033740i 0.139449i 5.033740i 0.140354i 5.034646i 0.140354i 5.034646i 0.141260i \\\n\ 5.034646i 0.142165i 5.034646i 0.141260i 5.034646i 0.140354i 5.034646i 0.139449i \\\n\ 5.034646i 0.137638i 5.034646i 0.136732i 5.034646i 0.126772i 5.035551i 0.117717i \\\n\ 5.035551i 0.110472i 5.036457i 0.103228i 5.036457i 0.094173i 5.037362i 0.086929i \\\n\ 5.038268i 0.085118i 5.037362i 0.087835i 5.037362i 0.092362i 5.037362i 0.097795i \\\n\ -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 5.038268i 0.104134i 5.039173i 0.109567i 5.040079i 0.111378i \\\n\ 5.040079i 0.112283i 5.040984i 0.114094i 5.042795i 0.118622i 5.044606i 0.122244i \\\n\ 5.044606i 0.123150i 5.044606i 0.122244i 5.045512i 0.123150i 5.050039i 0.127677i \\\n\ 5.056378i 0.133110i 5.060000i 0.135827i 5.061811i 0.137638i 5.066339i 0.140354i \\\n\ 5.074488i 0.147598i 5.082638i 0.153937i 5.087165i 0.157559i 5.088976i 0.158465i \\\n\ 5.092598i 0.161181i 5.098937i 0.167520i 5.103465i 0.173858i 5.105276i 0.175669i \\\n\ 5.105276i 0.176575i 5.106181i 0.179291i 5.107992i 0.185630i 5.108898i 0.192874i \\\n\ 5.108898i 0.195591i 5.108898i 0.196496i 5.108898i 0.200118i 5.106181i 0.210079i \\\n\ 5.102559i 0.220039i 5.099843i 0.226378i 5.098031i 0.230906i 5.096220i 0.234528i \\\n\ 5.093504i 0.239961i 5.089882i 0.247205i 5.088976i 0.248110i 5.088976i 0.249016i \\\n\ 5.088976i 0.249921i 5.088071i 0.249921i 5.088071i 0.250827i 5.088071i 0.251732i \\\n\ 5.087165i 0.251732i 5.087165i 0.252638i 5.086260i 0.252638i 5.086260i 0.251732i \\\n\ 5.087165i 0.250827i 5.087165i 0.249921i 5.087165i 0.249016i 5.088071i 0.248110i \\\n\ 5.088071i 0.247205i 5.090787i 0.241772i 5.092598i 0.237244i 5.094409i 0.233622i \\\n\ 5.096220i 0.230000i 5.098937i 0.224567i 5.101654i 0.216417i 5.104370i 0.208268i \\\n\ 5.105276i 0.204646i 5.106181i 0.203740i 5.106181i 0.201024i 5.105276i 0.193780i \\\n\ 5.102559i 0.186535i 5.100748i 0.182913i 5.099843i 0.182008i 5.097126i 0.178386i \\\n\ 5.090787i 0.171142i 5.084449i 0.164803i 5.080827i 0.161181i 5.079016i 0.160276i \\\n\ 5.076299i 0.158465i 5.072677i 0.155748i 5.064528i 0.150315i 5.055472i 0.144882i \\\n\ 5.050945i 0.142165i 5.048228i 0.141260i 5.044606i 0.139449i 5.038268i 0.136732i \\\n\ 5.037362i 0.136732i 5.036457i 0.135827i 5.035551i 0.135827i 5.034646i 0.135827i \\\n\ 5.033740i 0.135827i 5.033740i 0.136732i 5.033740i 0.137638i 5.033740i 0.138543i \\\n\ 5.033740i 0.139449i 5.033740i 0.140354i 5.034646i 0.140354i 5.034646i 0.141260i \\\n\ 5.034646i 0.142165i 5.034646i 0.141260i 5.034646i 0.140354i 5.034646i 0.139449i \\\n\ 5.034646i 0.137638i 5.034646i 0.136732i 5.034646i 0.126772i 5.035551i 0.117717i \\\n\ 5.035551i 0.110472i 5.036457i 0.103228i 5.036457i 0.094173i 5.037362i 0.086929i \\\n\ 5.038268i 0.085118i 5.037362i 0.087835i 5.037362i 0.092362i 5.037362i 0.097795i \\\n\ -outline $tkxox(score_active_note) -fill {}\n\ ${score} create line 5.032835i 0.422874i 5.032835i 0.602165i -fill $tkxox(score_active_note)\n\ ${score} create polygon 4.991181i 0.640197i 4.998425i 0.639291i 5.001142i 0.638386i \\\n\ 5.002953i 0.638386i 5.005669i 0.637480i 5.012913i 0.634764i 5.020157i 0.632047i \\\n\ 5.022874i 0.630236i 5.024685i 0.629331i 5.027402i 0.628425i 5.032835i 0.623898i \\\n\ 5.037362i 0.619370i 5.039173i 0.617559i 5.040079i 0.616654i 5.041890i 0.613937i \\\n\ 5.042795i 0.609409i 5.042795i 0.606693i 5.042795i 0.603976i 5.041890i 0.603071i \\\n\ 5.041890i 0.602165i 5.040984i 0.601260i 5.040079i 0.600354i 5.038268i 0.598543i \\\n\ 5.035551i 0.596732i 5.030118i 0.594016i 5.026496i 0.594016i 5.024685i 0.593110i \\\n\ 5.021063i 0.593110i 5.013819i 0.593110i 5.006575i 0.594016i 5.002953i 0.594016i \\\n\ 5.001142i 0.594016i 4.997520i 0.594921i 4.991181i 0.597638i 4.985748i 0.600354i \\\n\ 4.983031i 0.602165i 4.982126i 0.603071i 4.980315i 0.604882i 4.976693i 0.608504i \\\n\ 4.973071i 0.611220i 4.972165i 0.612126i 4.971260i 0.612126i 4.970354i 0.613937i \\\n\ 4.968543i 0.616654i 4.966732i 0.620276i 4.965827i 0.622087i 4.965827i 0.622992i \\\n\ 4.965827i 0.624803i 4.965827i 0.628425i 4.966732i 0.632047i 4.966732i 0.632953i \\\n\ 4.967638i 0.633858i 4.968543i 0.634764i 4.972165i 0.637480i 4.976693i 0.639291i \\\n\ 4.979409i 0.640197i 4.981220i 0.640197i 4.983937i 0.640197i -outline {} -fill $tkxox(score_active_note) \\\n\ -width 0\n\ ${score} create polygon 4.991181i 0.640197i 4.998425i 0.639291i 5.001142i 0.638386i \\\n\ 5.002953i 0.638386i 5.005669i 0.637480i 5.012913i 0.634764i 5.020157i 0.632047i \\\n\ 5.022874i 0.630236i 5.024685i 0.629331i 5.027402i 0.628425i 5.032835i 0.623898i \\\n\ 5.037362i 0.619370i 5.039173i 0.617559i 5.040079i 0.616654i 5.041890i 0.613937i \\\n\ 5.042795i 0.609409i 5.042795i 0.606693i 5.042795i 0.603976i 5.041890i 0.603071i \\\n\ 5.041890i 0.602165i 5.040984i 0.601260i 5.040079i 0.600354i 5.038268i 0.598543i \\\n\ 5.035551i 0.596732i 5.030118i 0.594016i 5.026496i 0.594016i 5.024685i 0.593110i \\\n\ 5.021063i 0.593110i 5.013819i 0.593110i 5.006575i 0.594016i 5.002953i 0.594016i \\\n\ 5.001142i 0.594016i 4.997520i 0.594921i 4.991181i 0.597638i 4.985748i 0.600354i \\\n\ 4.983031i 0.602165i 4.982126i 0.603071i 4.980315i 0.604882i 4.976693i 0.608504i \\\n\ 4.973071i 0.611220i 4.972165i 0.612126i 4.971260i 0.612126i 4.970354i 0.613937i \\\n\ 4.968543i 0.616654i 4.966732i 0.620276i 4.965827i 0.622087i 4.965827i 0.622992i \\\n\ 4.965827i 0.624803i 4.965827i 0.628425i 4.966732i 0.632047i 4.966732i 0.632953i \\\n\ 4.967638i 0.633858i 4.968543i 0.634764i 4.972165i 0.637480i 4.976693i 0.639291i \\\n\ 4.979409i 0.640197i 4.981220i 0.640197i 4.983937i 0.640197i -outline $tkxox(score_active_note) -fill \\\n\ {}\n\ ${score} create polygon 5.038268i 0.441890i 5.039173i 0.447323i 5.040079i 0.449134i \\\n\ 5.040079i 0.450039i 5.040984i 0.451850i 5.042795i 0.456378i 5.044606i 0.460000i \\\n\ 5.045512i 0.460906i 5.050039i 0.464528i 5.056378i 0.469961i 5.060000i 0.472677i \\\n\ 5.061811i 0.474488i 5.066339i 0.477205i 5.074488i 0.484449i 5.082638i 0.490787i \\\n\ 5.087165i 0.493504i 5.088976i 0.494409i 5.092598i 0.498031i 5.098937i 0.504370i \\\n\ 5.103465i 0.511614i 5.105276i 0.514331i 5.105276i 0.515236i 5.106181i 0.517953i \\\n\ 5.107992i 0.525197i 5.108898i 0.532441i 5.108898i 0.535157i 5.108898i 0.538780i \\\n\ 5.106181i 0.547835i 5.102559i 0.557795i 5.099843i 0.564134i 5.098031i 0.568661i \\\n\ 5.096220i 0.572283i 5.093504i 0.577717i 5.089882i 0.584961i 5.088976i 0.585866i \\\n\ 5.088976i 0.586772i 5.088976i 0.587677i 5.088071i 0.587677i 5.088071i 0.588583i \\\n\ 5.088071i 0.589488i 5.087165i 0.589488i 5.087165i 0.590394i 5.086260i 0.590394i \\\n\ 5.086260i 0.589488i 5.087165i 0.588583i 5.087165i 0.587677i 5.087165i 0.586772i \\\n\ 5.088071i 0.585866i 5.088071i 0.584961i 5.090787i 0.578622i 5.092598i 0.574094i \\\n\ 5.094409i 0.570472i 5.096220i 0.566850i 5.098937i 0.561417i 5.101654i 0.553268i \\\n\ 5.103465i 0.546024i 5.105276i 0.542402i 5.106181i 0.542402i 5.106181i 0.541496i \\\n\ 5.106181i 0.538780i 5.105276i 0.532441i 5.102559i 0.524291i 5.100748i 0.520669i \\\n\ 5.099843i 0.519764i 5.097126i 0.516142i 5.090787i 0.507992i 5.084449i 0.501654i \\\n\ 5.080827i 0.498031i 5.079016i 0.496220i 5.076299i 0.495315i 5.072677i 0.492598i \\\n\ 5.064528i 0.487165i 5.055472i 0.481732i 5.050945i 0.479921i 5.048228i 0.479016i \\\n\ 5.044606i 0.477205i 5.038268i 0.474488i 5.037362i 0.474488i 5.036457i 0.473583i \\\n\ 5.035551i 0.473583i 5.034646i 0.473583i 5.033740i 0.473583i 5.033740i 0.474488i \\\n\ 5.033740i 0.475394i 5.033740i 0.476299i 5.033740i 0.477205i 5.033740i 0.478110i \\\n\ 5.034646i 0.479016i 5.034646i 0.479921i 5.034646i 0.480827i 5.034646i 0.479921i \\\n\ 5.034646i 0.479016i 5.034646i 0.478110i 5.034646i 0.477205i 5.034646i 0.475394i \\\n\ 5.034646i 0.474488i 5.034646i 0.464528i 5.035551i 0.455472i 5.035551i 0.447323i \\\n\ 5.036457i 0.440079i 5.036457i 0.431929i 5.037362i 0.423780i 5.038268i 0.421969i \\\n\ 5.037362i 0.424685i 5.037362i 0.430118i 5.037362i 0.435551i -outline {} -fill $tkxox(score_active_note) \\\n\ -width 0\n\ ${score} create polygon 5.038268i 0.441890i 5.039173i 0.447323i 5.040079i 0.449134i \\\n\ 5.040079i 0.450039i 5.040984i 0.451850i 5.042795i 0.456378i 5.044606i 0.460000i \\\n\ 5.045512i 0.460906i 5.050039i 0.464528i 5.056378i 0.469961i 5.060000i 0.472677i \\\n\ 5.061811i 0.474488i 5.066339i 0.477205i 5.074488i 0.484449i 5.082638i 0.490787i \\\n\ 5.087165i 0.493504i 5.088976i 0.494409i 5.092598i 0.498031i 5.098937i 0.504370i \\\n\ 5.103465i 0.511614i 5.105276i 0.514331i 5.105276i 0.515236i 5.106181i 0.517953i \\\n\ 5.107992i 0.525197i 5.108898i 0.532441i 5.108898i 0.535157i 5.108898i 0.538780i \\\n\ 5.106181i 0.547835i 5.102559i 0.557795i 5.099843i 0.564134i 5.098031i 0.568661i \\\n\ 5.096220i 0.572283i 5.093504i 0.577717i 5.089882i 0.584961i 5.088976i 0.585866i \\\n\ 5.088976i 0.586772i 5.088976i 0.587677i 5.088071i 0.587677i 5.088071i 0.588583i \\\n\ 5.088071i 0.589488i 5.087165i 0.589488i 5.087165i 0.590394i 5.086260i 0.590394i \\\n\ 5.086260i 0.589488i 5.087165i 0.588583i 5.087165i 0.587677i 5.087165i 0.586772i \\\n\ 5.088071i 0.585866i 5.088071i 0.584961i 5.090787i 0.578622i 5.092598i 0.574094i \\\n\ 5.094409i 0.570472i 5.096220i 0.566850i 5.098937i 0.561417i 5.101654i 0.553268i \\\n\ 5.103465i 0.546024i 5.105276i 0.542402i 5.106181i 0.542402i 5.106181i 0.541496i \\\n\ 5.106181i 0.538780i 5.105276i 0.532441i 5.102559i 0.524291i 5.100748i 0.520669i \\\n\ 5.099843i 0.519764i 5.097126i 0.516142i 5.090787i 0.507992i 5.084449i 0.501654i \\\n\ 5.080827i 0.498031i 5.079016i 0.496220i 5.076299i 0.495315i 5.072677i 0.492598i \\\n\ 5.064528i 0.487165i 5.055472i 0.481732i 5.050945i 0.479921i 5.048228i 0.479016i \\\n\ 5.044606i 0.477205i 5.038268i 0.474488i 5.037362i 0.474488i 5.036457i 0.473583i \\\n\ 5.035551i 0.473583i 5.034646i 0.473583i 5.033740i 0.473583i 5.033740i 0.474488i \\\n\ 5.033740i 0.475394i 5.033740i 0.476299i 5.033740i 0.477205i 5.033740i 0.478110i \\\n\ 5.034646i 0.479016i 5.034646i 0.479921i 5.034646i 0.480827i 5.034646i 0.479921i \\\n\ 5.034646i 0.479016i 5.034646i 0.478110i 5.034646i 0.477205i 5.034646i 0.475394i \\\n\ 5.034646i 0.474488i 5.034646i 0.464528i 5.035551i 0.455472i 5.035551i 0.447323i \\\n\ 5.036457i 0.440079i 5.036457i 0.431929i 5.037362i 0.423780i 5.038268i 0.421969i \\\n\ 5.037362i 0.424685i 5.037362i 0.430118i 5.037362i 0.435551i -outline $tkxox(score_active_note) -fill \\\n\ {}\n\ ${score} create line 5.676654i 0.422874i 5.676654i 0.602165i -fill $tkxox(score_active_note)\n\ ${score} create polygon 5.635000i 0.640197i 5.642244i 0.639291i 5.644961i 0.638386i \\\n\ 5.646772i 0.638386i 5.649488i 0.637480i 5.656732i 0.634764i 5.663976i 0.632047i \\\n\ 5.666693i 0.630236i 5.668504i 0.629331i 5.671220i 0.628425i 5.676654i 0.623898i \\\n\ 5.681181i 0.619370i 5.682992i 0.617559i 5.683898i 0.616654i 5.685709i 0.613937i \\\n\ 5.686614i 0.609409i 5.686614i 0.606693i 5.686614i 0.603976i 5.685709i 0.603071i \\\n\ 5.685709i 0.602165i 5.684803i 0.601260i 5.683898i 0.600354i 5.682087i 0.598543i \\\n\ 5.679370i 0.596732i 5.673937i 0.594016i 5.670315i 0.594016i 5.668504i 0.593110i \\\n\ 5.664882i 0.593110i 5.657638i 0.593110i 5.650394i 0.594016i 5.646772i 0.594016i \\\n\ 5.644961i 0.594016i 5.641339i 0.594921i 5.635000i 0.597638i 5.629567i 0.600354i \\\n\ 5.626850i 0.602165i 5.625945i 0.603071i 5.624134i 0.604882i 5.620512i 0.608504i \\\n\ 5.616890i 0.611220i 5.615984i 0.612126i 5.615079i 0.612126i 5.614173i 0.613937i \\\n\ 5.612362i 0.616654i 5.610551i 0.620276i 5.609646i 0.622087i 5.609646i 0.622992i \\\n\ 5.609646i 0.624803i 5.609646i 0.628425i 5.610551i 0.632047i 5.610551i 0.632953i \\\n\ 5.611457i 0.633858i 5.612362i 0.634764i 5.615984i 0.637480i 5.620512i 0.639291i \\\n\ 5.623228i 0.640197i 5.625039i 0.640197i 5.627756i 0.640197i -outline {} -fill $tkxox(score_active_note) \\\n\ -width 0\n\ ${score} create polygon 5.635000i 0.640197i 5.642244i 0.639291i 5.644961i 0.638386i \\\n\ 5.646772i 0.638386i 5.649488i 0.637480i 5.656732i 0.634764i 5.663976i 0.632047i \\\n\ 5.666693i 0.630236i 5.668504i 0.629331i 5.671220i 0.628425i 5.676654i 0.623898i \\\n\ 5.681181i 0.619370i 5.682992i 0.617559i 5.683898i 0.616654i 5.685709i 0.613937i \\\n\ 5.686614i 0.609409i 5.686614i 0.606693i 5.686614i 0.603976i 5.685709i 0.603071i \\\n\ 5.685709i 0.602165i 5.684803i 0.601260i 5.683898i 0.600354i 5.682087i 0.598543i \\\n\ 5.679370i 0.596732i 5.673937i 0.594016i 5.670315i 0.594016i 5.668504i 0.593110i \\\n\ 5.664882i 0.593110i 5.657638i 0.593110i 5.650394i 0.594016i 5.646772i 0.594016i \\\n\ 5.644961i 0.594016i 5.641339i 0.594921i 5.635000i 0.597638i 5.629567i 0.600354i \\\n\ 5.626850i 0.602165i 5.625945i 0.603071i 5.624134i 0.604882i 5.620512i 0.608504i \\\n\ 5.616890i 0.611220i 5.615984i 0.612126i 5.615079i 0.612126i 5.614173i 0.613937i \\\n\ 5.612362i 0.616654i 5.610551i 0.620276i 5.609646i 0.622087i 5.609646i 0.622992i \\\n\ 5.609646i 0.624803i 5.609646i 0.628425i 5.610551i 0.632047i 5.610551i 0.632953i \\\n\ 5.611457i 0.633858i 5.612362i 0.634764i 5.615984i 0.637480i 5.620512i 0.639291i \\\n\ 5.623228i 0.640197i 5.625039i 0.640197i 5.627756i 0.640197i -outline $tkxox(score_active_note) -fill \\\n\ {}\n\ ${score} create polygon 5.682087i 0.441890i 5.682992i 0.447323i 5.683898i 0.449134i \\\n\ 5.683898i 0.450039i 5.684803i 0.451850i 5.686614i 0.456378i 5.688425i 0.460000i \\\n\ 5.689331i 0.460906i 5.693858i 0.464528i 5.700197i 0.469961i 5.703819i 0.472677i \\\n\ 5.705630i 0.474488i 5.710157i 0.477205i 5.718307i 0.484449i 5.726457i 0.490787i \\\n\ 5.730079i 0.493504i 5.731890i 0.494409i 5.734606i 0.498031i 5.740945i 0.504370i \\\n\ 5.745472i 0.511614i 5.747283i 0.514331i 5.747283i 0.515236i 5.748189i 0.517953i \\\n\ 5.750000i 0.525197i 5.750906i 0.532441i 5.750906i 0.535157i 5.750000i 0.538780i \\\n\ 5.748189i 0.547835i 5.745472i 0.557795i 5.742756i 0.564134i 5.740945i 0.568661i \\\n\ 5.739134i 0.572283i 5.736417i 0.577717i 5.733701i 0.584961i 5.733701i 0.585866i \\\n\ 5.732795i 0.586772i 5.732795i 0.587677i 5.731890i 0.587677i 5.731890i 0.588583i \\\n\ 5.731890i 0.589488i 5.730984i 0.589488i 5.730984i 0.590394i 5.730984i 0.589488i \\\n\ 5.730984i 0.588583i 5.730984i 0.587677i 5.730984i 0.586772i 5.731890i 0.586772i \\\n\ 5.731890i 0.585866i 5.731890i 0.584961i 5.733701i 0.578622i 5.735512i 0.574094i \\\n\ 5.737323i 0.570472i 5.739134i 0.566850i 5.740945i 0.561417i 5.743661i 0.553268i \\\n\ 5.746378i 0.545118i 5.747283i 0.542402i 5.748189i 0.542402i 5.748189i 0.539685i \\\n\ 5.747283i 0.532441i 5.745472i 0.524291i 5.743661i 0.520669i 5.742756i 0.519764i \\\n\ 5.740945i 0.516142i 5.734606i 0.507992i 5.728268i 0.501654i 5.724646i 0.498031i \\\n\ 5.722835i 0.496220i 5.721024i 0.495315i 5.717402i 0.492598i 5.709252i 0.487165i \\\n\ 5.700197i 0.481732i 5.695669i 0.479921i 5.692953i 0.479016i 5.688425i 0.477205i \\\n\ 5.682087i 0.474488i 5.681181i 0.474488i 5.680276i 0.473583i 5.679370i 0.473583i \\\n\ 5.678465i 0.473583i 5.677559i 0.473583i 5.677559i 0.474488i 5.677559i 0.475394i \\\n\ 5.677559i 0.476299i 5.677559i 0.477205i 5.677559i 0.478110i 5.678465i 0.479016i \\\n\ 5.678465i 0.479921i 5.678465i 0.480827i 5.678465i 0.479921i 5.678465i 0.479016i \\\n\ 5.678465i 0.478110i 5.678465i 0.477205i 5.678465i 0.475394i 5.678465i 0.474488i \\\n\ 5.678465i 0.464528i 5.679370i 0.455472i 5.679370i 0.447323i 5.680276i 0.440079i \\\n\ 5.680276i 0.431929i 5.681181i 0.423780i 5.682087i 0.421969i 5.681181i 0.424685i \\\n\ 5.681181i 0.430118i 5.681181i 0.435551i -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 5.682087i 0.441890i 5.682992i 0.447323i 5.683898i 0.449134i \\\n\ 5.683898i 0.450039i 5.684803i 0.451850i 5.686614i 0.456378i 5.688425i 0.460000i \\\n\ 5.689331i 0.460906i 5.693858i 0.464528i 5.700197i 0.469961i 5.703819i 0.472677i \\\n\ 5.705630i 0.474488i 5.710157i 0.477205i 5.718307i 0.484449i 5.726457i 0.490787i \\\n\ 5.730079i 0.493504i 5.731890i 0.494409i 5.734606i 0.498031i 5.740945i 0.504370i \\\n\ 5.745472i 0.511614i 5.747283i 0.514331i 5.747283i 0.515236i 5.748189i 0.517953i \\\n\ 5.750000i 0.525197i 5.750906i 0.532441i 5.750906i 0.535157i 5.750000i 0.538780i \\\n\ 5.748189i 0.547835i 5.745472i 0.557795i 5.742756i 0.564134i 5.740945i 0.568661i \\\n\ 5.739134i 0.572283i 5.736417i 0.577717i 5.733701i 0.584961i 5.733701i 0.585866i \\\n\ 5.732795i 0.586772i 5.732795i 0.587677i 5.731890i 0.587677i 5.731890i 0.588583i \\\n\ 5.731890i 0.589488i 5.730984i 0.589488i 5.730984i 0.590394i 5.730984i 0.589488i \\\n\ 5.730984i 0.588583i 5.730984i 0.587677i 5.730984i 0.586772i 5.731890i 0.586772i \\\n\ 5.731890i 0.585866i 5.731890i 0.584961i 5.733701i 0.578622i 5.735512i 0.574094i \\\n\ 5.737323i 0.570472i 5.739134i 0.566850i 5.740945i 0.561417i 5.743661i 0.553268i \\\n\ 5.746378i 0.545118i 5.747283i 0.542402i 5.748189i 0.542402i 5.748189i 0.539685i \\\n\ 5.747283i 0.532441i 5.745472i 0.524291i 5.743661i 0.520669i 5.742756i 0.519764i \\\n\ 5.740945i 0.516142i 5.734606i 0.507992i 5.728268i 0.501654i 5.724646i 0.498031i \\\n\ 5.722835i 0.496220i 5.721024i 0.495315i 5.717402i 0.492598i 5.709252i 0.487165i \\\n\ 5.700197i 0.481732i 5.695669i 0.479921i 5.692953i 0.479016i 5.688425i 0.477205i \\\n\ 5.682087i 0.474488i 5.681181i 0.474488i 5.680276i 0.473583i 5.679370i 0.473583i \\\n\ 5.678465i 0.473583i 5.677559i 0.473583i 5.677559i 0.474488i 5.677559i 0.475394i \\\n\ 5.677559i 0.476299i 5.677559i 0.477205i 5.677559i 0.478110i 5.678465i 0.479016i \\\n\ 5.678465i 0.479921i 5.678465i 0.480827i 5.678465i 0.479921i 5.678465i 0.479016i \\\n\ 5.678465i 0.478110i 5.678465i 0.477205i 5.678465i 0.475394i 5.678465i 0.474488i \\\n\ 5.678465i 0.464528i 5.679370i 0.455472i 5.679370i 0.447323i 5.680276i 0.440079i \\\n\ 5.680276i 0.431929i 5.681181i 0.423780i 5.682087i 0.421969i 5.681181i 0.424685i \\\n\ 5.681181i 0.430118i 5.681181i 0.435551i -outline $tkxox(score_active_note) -fill {}\n\ ${score} create line 4.313858i 0.422874i 4.313858i 0.602165i -fill $tkxox(score_active_note)\n\ ${score} create polygon 4.271299i 0.640197i 4.278543i 0.639291i 4.282165i 0.638386i \\\n\ 4.283976i 0.638386i 4.287598i 0.637480i 4.294843i 0.634764i 4.301181i 0.632047i \\\n\ 4.304803i 0.630236i 4.305709i 0.629331i 4.307520i 0.628425i 4.312953i 0.623898i \\\n\ 4.317480i 0.619370i 4.320197i 0.617559i 4.321102i 0.616654i 4.322008i 0.613937i \\\n\ 4.323819i 0.609409i 4.323819i 0.606693i 4.323819i 0.603976i 4.322913i 0.603071i \\\n\ 4.322913i 0.602165i 4.322008i 0.601260i 4.321102i 0.600354i 4.319291i 0.598543i \\\n\ 4.316575i 0.596732i 4.311142i 0.594016i 4.307520i 0.594016i 4.305709i 0.593110i \\\n\ 4.302087i 0.593110i 4.294843i 0.593110i 4.286693i 0.594016i 4.283071i 0.594016i \\\n\ 4.281260i 0.594016i 4.277638i 0.594921i 4.271299i 0.597638i 4.265866i 0.600354i \\\n\ 4.263150i 0.602165i 4.263150i 0.603071i 4.261339i 0.604882i 4.257717i 0.608504i \\\n\ 4.254094i 0.611220i 4.253189i 0.612126i 4.252283i 0.612126i 4.251378i 0.613937i \\\n\ 4.249567i 0.616654i 4.247756i 0.620276i 4.246850i 0.622087i 4.245945i 0.622992i \\\n\ 4.245945i 0.624803i 4.245945i 0.628425i 4.246850i 0.631142i 4.247756i 0.632953i \\\n\ 4.247756i 0.633858i 4.248661i 0.633858i 4.249567i 0.635669i 4.253189i 0.637480i \\\n\ 4.257717i 0.639291i 4.260433i 0.640197i 4.261339i 0.640197i 4.264055i 0.640197i \\\n\ -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 4.271299i 0.640197i 4.278543i 0.639291i 4.282165i 0.638386i \\\n\ 4.283976i 0.638386i 4.287598i 0.637480i 4.294843i 0.634764i 4.301181i 0.632047i \\\n\ 4.304803i 0.630236i 4.305709i 0.629331i 4.307520i 0.628425i 4.312953i 0.623898i \\\n\ 4.317480i 0.619370i 4.320197i 0.617559i 4.321102i 0.616654i 4.322008i 0.613937i \\\n\ 4.323819i 0.609409i 4.323819i 0.606693i 4.323819i 0.603976i 4.322913i 0.603071i \\\n\ 4.322913i 0.602165i 4.322008i 0.601260i 4.321102i 0.600354i 4.319291i 0.598543i \\\n\ 4.316575i 0.596732i 4.311142i 0.594016i 4.307520i 0.594016i 4.305709i 0.593110i \\\n\ 4.302087i 0.593110i 4.294843i 0.593110i 4.286693i 0.594016i 4.283071i 0.594016i \\\n\ 4.281260i 0.594016i 4.277638i 0.594921i 4.271299i 0.597638i 4.265866i 0.600354i \\\n\ 4.263150i 0.602165i 4.263150i 0.603071i 4.261339i 0.604882i 4.257717i 0.608504i \\\n\ 4.254094i 0.611220i 4.253189i 0.612126i 4.252283i 0.612126i 4.251378i 0.613937i \\\n\ 4.249567i 0.616654i 4.247756i 0.620276i 4.246850i 0.622087i 4.245945i 0.622992i \\\n\ 4.245945i 0.624803i 4.245945i 0.628425i 4.246850i 0.631142i 4.247756i 0.632953i \\\n\ 4.247756i 0.633858i 4.248661i 0.633858i 4.249567i 0.635669i 4.253189i 0.637480i \\\n\ 4.257717i 0.639291i 4.260433i 0.640197i 4.261339i 0.640197i 4.264055i 0.640197i \\\n\ -outline $tkxox(score_active_note) -fill {}\n\ ${score} create polygon 4.319291i 0.441890i 4.320197i 0.447323i 4.321102i 0.449134i \\\n\ 4.321102i 0.450039i 4.322008i 0.451850i 4.323819i 0.456378i 4.325630i 0.460000i \\\n\ 4.326535i 0.460906i 4.331063i 0.464528i 4.337402i 0.469961i 4.341024i 0.472677i \\\n\ 4.342835i 0.474488i 4.347362i 0.477205i 4.355512i 0.484449i 4.363661i 0.490787i \\\n\ 4.366378i 0.493504i 4.368189i 0.494409i 4.370906i 0.498031i 4.377244i 0.504370i \\\n\ 4.382677i 0.511614i 4.384488i 0.514331i 4.385394i 0.515236i 4.387205i 0.517953i \\\n\ 4.389016i 0.525197i 4.389921i 0.531535i 4.390827i 0.534252i 4.390827i 0.535157i \\\n\ 4.389921i 0.536063i 4.389016i 0.539685i 4.387205i 0.547835i 4.383583i 0.557795i \\\n\ 4.380866i 0.564134i 4.379055i 0.568661i 4.377244i 0.572283i 4.374528i 0.577717i \\\n\ 4.370906i 0.584961i 4.370000i 0.585866i 4.370000i 0.586772i 4.370000i 0.587677i \\\n\ 4.369094i 0.587677i 4.369094i 0.588583i 4.369094i 0.589488i 4.368189i 0.589488i \\\n\ 4.368189i 0.590394i 4.367283i 0.590394i 4.368189i 0.590394i 4.368189i 0.589488i \\\n\ 4.368189i 0.588583i 4.368189i 0.587677i 4.368189i 0.586772i 4.369094i 0.585866i \\\n\ 4.369094i 0.584961i 4.370906i 0.578622i 4.372717i 0.574094i 4.374528i 0.570472i \\\n\ 4.375433i 0.566850i 4.378150i 0.561417i 4.380866i 0.553268i 4.383583i 0.545118i \\\n\ 4.385394i 0.542402i 4.386299i 0.542402i 4.387205i 0.539685i 4.386299i 0.532441i \\\n\ 4.383583i 0.524291i 4.381772i 0.520669i 4.380866i 0.519764i 4.378150i 0.516142i \\\n\ 4.371811i 0.507992i 4.365472i 0.501654i 4.361850i 0.498031i 4.360039i 0.496220i \\\n\ 4.358228i 0.495315i 4.354606i 0.492598i 4.346457i 0.487165i 4.337402i 0.481732i \\\n\ 4.332874i 0.479921i 4.330157i 0.479016i 4.325630i 0.477205i 4.319291i 0.474488i \\\n\ 4.318386i 0.474488i 4.317480i 0.473583i 4.316575i 0.473583i 4.315669i 0.473583i \\\n\ 4.314764i 0.473583i 4.314764i 0.474488i 4.314764i 0.475394i 4.314764i 0.476299i \\\n\ 4.314764i 0.477205i 4.314764i 0.478110i 4.315669i 0.479016i 4.315669i 0.479921i \\\n\ 4.315669i 0.480827i 4.315669i 0.479921i 4.315669i 0.479016i 4.315669i 0.478110i \\\n\ 4.315669i 0.477205i 4.315669i 0.475394i 4.315669i 0.474488i 4.315669i 0.464528i \\\n\ 4.316575i 0.455472i 4.316575i 0.447323i 4.317480i 0.440079i 4.317480i 0.431929i \\\n\ 4.318386i 0.423780i 4.319291i 0.421969i 4.318386i 0.424685i 4.318386i 0.430118i \\\n\ 4.318386i 0.435551i -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 4.319291i 0.441890i 4.320197i 0.447323i 4.321102i 0.449134i \\\n\ 4.321102i 0.450039i 4.322008i 0.451850i 4.323819i 0.456378i 4.325630i 0.460000i \\\n\ 4.326535i 0.460906i 4.331063i 0.464528i 4.337402i 0.469961i 4.341024i 0.472677i \\\n\ 4.342835i 0.474488i 4.347362i 0.477205i 4.355512i 0.484449i 4.363661i 0.490787i \\\n\ 4.366378i 0.493504i 4.368189i 0.494409i 4.370906i 0.498031i 4.377244i 0.504370i \\\n\ 4.382677i 0.511614i 4.384488i 0.514331i 4.385394i 0.515236i 4.387205i 0.517953i \\\n\ 4.389016i 0.525197i 4.389921i 0.531535i 4.390827i 0.534252i 4.390827i 0.535157i \\\n\ 4.389921i 0.536063i 4.389016i 0.539685i 4.387205i 0.547835i 4.383583i 0.557795i \\\n\ 4.380866i 0.564134i 4.379055i 0.568661i 4.377244i 0.572283i 4.374528i 0.577717i \\\n\ 4.370906i 0.584961i 4.370000i 0.585866i 4.370000i 0.586772i 4.370000i 0.587677i \\\n\ 4.369094i 0.587677i 4.369094i 0.588583i 4.369094i 0.589488i 4.368189i 0.589488i \\\n\ 4.368189i 0.590394i 4.367283i 0.590394i 4.368189i 0.590394i 4.368189i 0.589488i \\\n\ 4.368189i 0.588583i 4.368189i 0.587677i 4.368189i 0.586772i 4.369094i 0.585866i \\\n\ 4.369094i 0.584961i 4.370906i 0.578622i 4.372717i 0.574094i 4.374528i 0.570472i \\\n\ 4.375433i 0.566850i 4.378150i 0.561417i 4.380866i 0.553268i 4.383583i 0.545118i \\\n\ 4.385394i 0.542402i 4.386299i 0.542402i 4.387205i 0.539685i 4.386299i 0.532441i \\\n\ 4.383583i 0.524291i 4.381772i 0.520669i 4.380866i 0.519764i 4.378150i 0.516142i \\\n\ 4.371811i 0.507992i 4.365472i 0.501654i 4.361850i 0.498031i 4.360039i 0.496220i \\\n\ 4.358228i 0.495315i 4.354606i 0.492598i 4.346457i 0.487165i 4.337402i 0.481732i \\\n\ 4.332874i 0.479921i 4.330157i 0.479016i 4.325630i 0.477205i 4.319291i 0.474488i \\\n\ 4.318386i 0.474488i 4.317480i 0.473583i 4.316575i 0.473583i 4.315669i 0.473583i \\\n\ 4.314764i 0.473583i 4.314764i 0.474488i 4.314764i 0.475394i 4.314764i 0.476299i \\\n\ 4.314764i 0.477205i 4.314764i 0.478110i 4.315669i 0.479016i 4.315669i 0.479921i \\\n\ 4.315669i 0.480827i 4.315669i 0.479921i 4.315669i 0.479016i 4.315669i 0.478110i \\\n\ 4.315669i 0.477205i 4.315669i 0.475394i 4.315669i 0.474488i 4.315669i 0.464528i \\\n\ 4.316575i 0.455472i 4.316575i 0.447323i 4.317480i 0.440079i 4.317480i 0.431929i \\\n\ 4.318386i 0.423780i 4.319291i 0.421969i 4.318386i 0.424685i 4.318386i 0.430118i \\\n\ 4.318386i 0.435551i -outline $tkxox(score_active_note) -fill {}\n\ ${score} create line 3.670039i 0.086024i 3.670039i 0.266220i -fill $tkxox(score_active_note)\n\ ${score} create polygon 3.627480i 0.301535i 3.634724i 0.300630i 3.638346i 0.300630i \\\n\ 3.639252i 0.300630i 3.642874i 0.299724i 3.650118i 0.297913i 3.657362i 0.295197i \\\n\ 3.660079i 0.293386i 3.660984i 0.293386i 3.663701i 0.291575i 3.669134i 0.287047i \\\n\ 3.674567i 0.282520i 3.677283i 0.280709i 3.678189i 0.279803i 3.680000i 0.277087i \\\n\ 3.681811i 0.272559i 3.681811i 0.269843i 3.680906i 0.267126i 3.680906i 0.266220i \\\n\ 3.680000i 0.265315i 3.679094i 0.264409i 3.678189i 0.263504i 3.676378i 0.261693i \\\n\ 3.672756i 0.259882i 3.667323i 0.257165i 3.663701i 0.256260i 3.661890i 0.256260i \\\n\ 3.658268i 0.255354i 3.651024i 0.255354i 3.642874i 0.256260i 3.639252i 0.256260i \\\n\ 3.637441i 0.257165i 3.633819i 0.258071i 3.627480i 0.260787i 3.622047i 0.263504i \\\n\ 3.619331i 0.265315i 3.619331i 0.266220i 3.617520i 0.268031i 3.613898i 0.271654i \\\n\ 3.610276i 0.274370i 3.609370i 0.275276i 3.608465i 0.275276i 3.607559i 0.276181i \\\n\ 3.605748i 0.278898i 3.603937i 0.282520i 3.603031i 0.284331i 3.602126i 0.285236i \\\n\ 3.602126i 0.287047i 3.602126i 0.290669i 3.603031i 0.294291i 3.603937i 0.296102i \\\n\ 3.603937i 0.297008i 3.604843i 0.297008i 3.605748i 0.298819i 3.609370i 0.300630i \\\n\ 3.613898i 0.302441i 3.616614i 0.302441i 3.617520i 0.302441i 3.621142i 0.301535i \\\n\ -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 3.627480i 0.301535i 3.634724i 0.300630i 3.638346i 0.300630i \\\n\ 3.639252i 0.300630i 3.642874i 0.299724i 3.650118i 0.297913i 3.657362i 0.295197i \\\n\ 3.660079i 0.293386i 3.660984i 0.293386i 3.663701i 0.291575i 3.669134i 0.287047i \\\n\ 3.674567i 0.282520i 3.677283i 0.280709i 3.678189i 0.279803i 3.680000i 0.277087i \\\n\ 3.681811i 0.272559i 3.681811i 0.269843i 3.680906i 0.267126i 3.680906i 0.266220i \\\n\ 3.680000i 0.265315i 3.679094i 0.264409i 3.678189i 0.263504i 3.676378i 0.261693i \\\n\ 3.672756i 0.259882i 3.667323i 0.257165i 3.663701i 0.256260i 3.661890i 0.256260i \\\n\ 3.658268i 0.255354i 3.651024i 0.255354i 3.642874i 0.256260i 3.639252i 0.256260i \\\n\ 3.637441i 0.257165i 3.633819i 0.258071i 3.627480i 0.260787i 3.622047i 0.263504i \\\n\ 3.619331i 0.265315i 3.619331i 0.266220i 3.617520i 0.268031i 3.613898i 0.271654i \\\n\ 3.610276i 0.274370i 3.609370i 0.275276i 3.608465i 0.275276i 3.607559i 0.276181i \\\n\ 3.605748i 0.278898i 3.603937i 0.282520i 3.603031i 0.284331i 3.602126i 0.285236i \\\n\ 3.602126i 0.287047i 3.602126i 0.290669i 3.603031i 0.294291i 3.603937i 0.296102i \\\n\ 3.603937i 0.297008i 3.604843i 0.297008i 3.605748i 0.298819i 3.609370i 0.300630i \\\n\ 3.613898i 0.302441i 3.616614i 0.302441i 3.617520i 0.302441i 3.621142i 0.301535i \\\n\ -outline $tkxox(score_active_note) -fill {}\n\ ${score} create polygon 3.677283i 0.104134i 3.678189i 0.109567i 3.679094i 0.111378i \\\n\ 3.679094i 0.112283i 3.680000i 0.114094i 3.681811i 0.118622i 3.683622i 0.122244i \\\n\ 3.683622i 0.123150i 3.683622i 0.122244i 3.684528i 0.123150i 3.689055i 0.127677i \\\n\ 3.695394i 0.133110i 3.699016i 0.135827i 3.700827i 0.137638i 3.705354i 0.140354i \\\n\ 3.713504i 0.147598i 3.721654i 0.153937i 3.724370i 0.157559i 3.726181i 0.158465i \\\n\ 3.729803i 0.161181i 3.735236i 0.167520i 3.739764i 0.173858i 3.741575i 0.175669i \\\n\ 3.742480i 0.176575i 3.743386i 0.179291i 3.745197i 0.185630i 3.746102i 0.192874i \\\n\ 3.746102i 0.195591i 3.746102i 0.196496i 3.745197i 0.200118i 3.743386i 0.210079i \\\n\ 3.740669i 0.220039i 3.737953i 0.226378i 3.736142i 0.230906i 3.734331i 0.234528i \\\n\ 3.731614i 0.239961i 3.728898i 0.247205i 3.728898i 0.248110i 3.727992i 0.249016i \\\n\ 3.727992i 0.249921i 3.727087i 0.249921i 3.727087i 0.250827i 3.727087i 0.251732i \\\n\ 3.726181i 0.251732i 3.726181i 0.252638i 3.726181i 0.251732i 3.726181i 0.250827i \\\n\ 3.726181i 0.249921i 3.726181i 0.249016i 3.727087i 0.249016i 3.727087i 0.248110i \\\n\ 3.727087i 0.247205i 3.728898i 0.241772i 3.730709i 0.237244i 3.732520i 0.233622i \\\n\ 3.734331i 0.230000i 3.736142i 0.224567i 3.738858i 0.216417i 3.741575i 0.208268i \\\n\ 3.742480i 0.204646i 3.743386i 0.203740i 3.743386i 0.201024i 3.742480i 0.193780i \\\n\ 3.740669i 0.186535i 3.738858i 0.182913i 3.737953i 0.182008i 3.736142i 0.178386i \\\n\ 3.729803i 0.171142i 3.723465i 0.164803i 3.719843i 0.161181i 3.718031i 0.160276i \\\n\ 3.716220i 0.158465i 3.712598i 0.155748i 3.704449i 0.150315i 3.695394i 0.144882i \\\n\ 3.690866i 0.142165i 3.688150i 0.141260i 3.683622i 0.139449i 3.677283i 0.136732i \\\n\ 3.676378i 0.136732i 3.675472i 0.135827i 3.674567i 0.135827i 3.673661i 0.135827i \\\n\ 3.672756i 0.135827i 3.671850i 0.135827i 3.671850i 0.136732i 3.671850i 0.137638i \\\n\ 3.671850i 0.138543i 3.671850i 0.139449i 3.671850i 0.140354i 3.671850i 0.141260i \\\n\ 3.671850i 0.142165i 3.672756i 0.142165i 3.671850i 0.142165i 3.671850i 0.141260i \\\n\ 3.671850i 0.140354i 3.671850i 0.139449i 3.671850i 0.138543i 3.671850i 0.136732i \\\n\ 3.671850i 0.126772i 3.672756i 0.117717i 3.673661i 0.110472i 3.674567i 0.103228i \\\n\ 3.675472i 0.094173i 3.676378i 0.086929i 3.677283i 0.085118i 3.677283i 0.087835i \\\n\ 3.676378i 0.092362i 3.676378i 0.097795i -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 3.677283i 0.104134i 3.678189i 0.109567i 3.679094i 0.111378i \\\n\ 3.679094i 0.112283i 3.680000i 0.114094i 3.681811i 0.118622i 3.683622i 0.122244i \\\n\ 3.683622i 0.123150i 3.683622i 0.122244i 3.684528i 0.123150i 3.689055i 0.127677i \\\n\ 3.695394i 0.133110i 3.699016i 0.135827i 3.700827i 0.137638i 3.705354i 0.140354i \\\n\ 3.713504i 0.147598i 3.721654i 0.153937i 3.724370i 0.157559i 3.726181i 0.158465i \\\n\ 3.729803i 0.161181i 3.735236i 0.167520i 3.739764i 0.173858i 3.741575i 0.175669i \\\n\ 3.742480i 0.176575i 3.743386i 0.179291i 3.745197i 0.185630i 3.746102i 0.192874i \\\n\ 3.746102i 0.195591i 3.746102i 0.196496i 3.745197i 0.200118i 3.743386i 0.210079i \\\n\ 3.740669i 0.220039i 3.737953i 0.226378i 3.736142i 0.230906i 3.734331i 0.234528i \\\n\ 3.731614i 0.239961i 3.728898i 0.247205i 3.728898i 0.248110i 3.727992i 0.249016i \\\n\ 3.727992i 0.249921i 3.727087i 0.249921i 3.727087i 0.250827i 3.727087i 0.251732i \\\n\ 3.726181i 0.251732i 3.726181i 0.252638i 3.726181i 0.251732i 3.726181i 0.250827i \\\n\ 3.726181i 0.249921i 3.726181i 0.249016i 3.727087i 0.249016i 3.727087i 0.248110i \\\n\ 3.727087i 0.247205i 3.728898i 0.241772i 3.730709i 0.237244i 3.732520i 0.233622i \\\n\ 3.734331i 0.230000i 3.736142i 0.224567i 3.738858i 0.216417i 3.741575i 0.208268i \\\n\ 3.742480i 0.204646i 3.743386i 0.203740i 3.743386i 0.201024i 3.742480i 0.193780i \\\n\ 3.740669i 0.186535i 3.738858i 0.182913i 3.737953i 0.182008i 3.736142i 0.178386i \\\n\ 3.729803i 0.171142i 3.723465i 0.164803i 3.719843i 0.161181i 3.718031i 0.160276i \\\n\ 3.716220i 0.158465i 3.712598i 0.155748i 3.704449i 0.150315i 3.695394i 0.144882i \\\n\ 3.690866i 0.142165i 3.688150i 0.141260i 3.683622i 0.139449i 3.677283i 0.136732i \\\n\ 3.676378i 0.136732i 3.675472i 0.135827i 3.674567i 0.135827i 3.673661i 0.135827i \\\n\ 3.672756i 0.135827i 3.671850i 0.135827i 3.671850i 0.136732i 3.671850i 0.137638i \\\n\ 3.671850i 0.138543i 3.671850i 0.139449i 3.671850i 0.140354i 3.671850i 0.141260i \\\n\ 3.671850i 0.142165i 3.672756i 0.142165i 3.671850i 0.142165i 3.671850i 0.141260i \\\n\ 3.671850i 0.140354i 3.671850i 0.139449i 3.671850i 0.138543i 3.671850i 0.136732i \\\n\ 3.671850i 0.126772i 3.672756i 0.117717i 3.673661i 0.110472i 3.674567i 0.103228i \\\n\ 3.675472i 0.094173i 3.676378i 0.086929i 3.677283i 0.085118i 3.677283i 0.087835i \\\n\ 3.676378i 0.092362i 3.676378i 0.097795i -outline $tkxox(score_active_note) -fill {}\n\ ${score} create line 3.670039i 0.422874i 3.670039i 0.602165i -fill $tkxox(score_active_note)\n\ ${score} create polygon 3.627480i 0.640197i 3.634724i 0.639291i 3.638346i 0.638386i \\\n\ 3.639252i 0.638386i 3.642874i 0.637480i 3.650118i 0.634764i 3.657362i 0.632047i \\\n\ 3.660079i 0.630236i 3.660984i 0.629331i 3.663701i 0.628425i 3.669134i 0.623898i \\\n\ 3.674567i 0.619370i 3.677283i 0.617559i 3.678189i 0.616654i 3.680000i 0.613937i \\\n\ 3.681811i 0.609409i 3.681811i 0.606693i 3.680906i 0.603976i 3.680906i 0.603071i \\\n\ 3.680000i 0.602165i 3.679094i 0.601260i 3.678189i 0.600354i 3.676378i 0.598543i \\\n\ 3.672756i 0.596732i 3.667323i 0.594016i 3.663701i 0.594016i 3.661890i 0.593110i \\\n\ 3.658268i 0.593110i 3.651024i 0.593110i 3.642874i 0.594016i 3.639252i 0.594016i \\\n\ 3.637441i 0.594016i 3.633819i 0.594921i 3.627480i 0.597638i 3.622047i 0.600354i \\\n\ 3.619331i 0.602165i 3.619331i 0.603071i 3.617520i 0.604882i 3.613898i 0.608504i \\\n\ 3.610276i 0.611220i 3.609370i 0.612126i 3.608465i 0.612126i 3.607559i 0.613937i \\\n\ 3.605748i 0.616654i 3.603937i 0.620276i 3.603031i 0.622087i 3.602126i 0.622992i \\\n\ 3.602126i 0.624803i 3.602126i 0.628425i 3.603031i 0.631142i 3.603937i 0.632953i \\\n\ 3.603937i 0.633858i 3.604843i 0.633858i 3.605748i 0.635669i 3.609370i 0.637480i \\\n\ 3.613898i 0.639291i 3.616614i 0.640197i 3.617520i 0.640197i 3.621142i 0.640197i \\\n\ -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 3.627480i 0.640197i 3.634724i 0.639291i 3.638346i 0.638386i \\\n\ 3.639252i 0.638386i 3.642874i 0.637480i 3.650118i 0.634764i 3.657362i 0.632047i \\\n\ 3.660079i 0.630236i 3.660984i 0.629331i 3.663701i 0.628425i 3.669134i 0.623898i \\\n\ 3.674567i 0.619370i 3.677283i 0.617559i 3.678189i 0.616654i 3.680000i 0.613937i \\\n\ 3.681811i 0.609409i 3.681811i 0.606693i 3.680906i 0.603976i 3.680906i 0.603071i \\\n\ 3.680000i 0.602165i 3.679094i 0.601260i 3.678189i 0.600354i 3.676378i 0.598543i \\\n\ 3.672756i 0.596732i 3.667323i 0.594016i 3.663701i 0.594016i 3.661890i 0.593110i \\\n\ 3.658268i 0.593110i 3.651024i 0.593110i 3.642874i 0.594016i 3.639252i 0.594016i \\\n\ 3.637441i 0.594016i 3.633819i 0.594921i 3.627480i 0.597638i 3.622047i 0.600354i \\\n\ 3.619331i 0.602165i 3.619331i 0.603071i 3.617520i 0.604882i 3.613898i 0.608504i \\\n\ 3.610276i 0.611220i 3.609370i 0.612126i 3.608465i 0.612126i 3.607559i 0.613937i \\\n\ 3.605748i 0.616654i 3.603937i 0.620276i 3.603031i 0.622087i 3.602126i 0.622992i \\\n\ 3.602126i 0.624803i 3.602126i 0.628425i 3.603031i 0.631142i 3.603937i 0.632953i \\\n\ 3.603937i 0.633858i 3.604843i 0.633858i 3.605748i 0.635669i 3.609370i 0.637480i \\\n\ 3.613898i 0.639291i 3.616614i 0.640197i 3.617520i 0.640197i 3.621142i 0.640197i \\\n\ -outline $tkxox(score_active_note) -fill {}\n\ ${score} create polygon 3.677283i 0.441890i 3.678189i 0.447323i 3.679094i 0.449134i \\\n\ 3.679094i 0.450039i 3.680000i 0.451850i 3.681811i 0.456378i 3.683622i 0.460000i \\\n\ 3.684528i 0.460906i 3.689055i 0.464528i 3.695394i 0.469961i 3.699016i 0.472677i \\\n\ 3.700827i 0.474488i 3.705354i 0.477205i 3.713504i 0.484449i 3.721654i 0.490787i \\\n\ 3.724370i 0.493504i 3.726181i 0.494409i 3.729803i 0.498031i 3.735236i 0.504370i \\\n\ 3.739764i 0.511614i 3.741575i 0.514331i 3.742480i 0.515236i 3.743386i 0.517953i \\\n\ 3.745197i 0.525197i 3.746102i 0.532441i 3.746102i 0.535157i 3.745197i 0.538780i \\\n\ 3.743386i 0.547835i 3.740669i 0.557795i 3.737953i 0.564134i 3.736142i 0.568661i \\\n\ 3.734331i 0.572283i 3.731614i 0.577717i 3.728898i 0.584961i 3.728898i 0.585866i \\\n\ 3.727992i 0.586772i 3.727992i 0.587677i 3.727087i 0.587677i 3.727087i 0.588583i \\\n\ 3.727087i 0.589488i 3.726181i 0.589488i 3.726181i 0.590394i 3.726181i 0.589488i \\\n\ 3.726181i 0.588583i 3.726181i 0.587677i 3.726181i 0.586772i 3.727087i 0.586772i \\\n\ 3.727087i 0.585866i 3.727087i 0.584961i 3.728898i 0.578622i 3.730709i 0.574094i \\\n\ 3.732520i 0.570472i 3.734331i 0.566850i 3.736142i 0.561417i 3.738858i 0.553268i \\\n\ 3.741575i 0.545118i 3.742480i 0.542402i 3.743386i 0.542402i 3.743386i 0.539685i \\\n\ 3.742480i 0.532441i 3.740669i 0.524291i 3.738858i 0.520669i 3.737953i 0.519764i \\\n\ 3.736142i 0.516142i 3.729803i 0.507992i 3.723465i 0.501654i 3.719843i 0.498031i \\\n\ 3.718031i 0.496220i 3.716220i 0.495315i 3.712598i 0.492598i 3.704449i 0.487165i \\\n\ 3.695394i 0.481732i 3.690866i 0.479921i 3.688150i 0.479016i 3.683622i 0.477205i \\\n\ 3.677283i 0.474488i 3.676378i 0.474488i 3.675472i 0.473583i 3.674567i 0.473583i \\\n\ 3.673661i 0.473583i 3.672756i 0.473583i 3.671850i 0.474488i 3.671850i 0.475394i \\\n\ 3.671850i 0.476299i 3.671850i 0.477205i 3.671850i 0.478110i 3.671850i 0.479016i \\\n\ 3.671850i 0.479921i 3.672756i 0.480827i 3.671850i 0.480827i 3.671850i 0.479921i \\\n\ 3.671850i 0.479016i 3.671850i 0.478110i 3.671850i 0.477205i 3.671850i 0.476299i \\\n\ 3.671850i 0.474488i 3.671850i 0.464528i 3.672756i 0.455472i 3.673661i 0.447323i \\\n\ 3.674567i 0.440079i 3.675472i 0.431929i 3.676378i 0.423780i 3.677283i 0.421969i \\\n\ 3.677283i 0.424685i 3.676378i 0.430118i 3.676378i 0.435551i -outline {} -fill $tkxox(score_active_note) \\\n\ -width 0\n\ ${score} create polygon 3.677283i 0.441890i 3.678189i 0.447323i 3.679094i 0.449134i \\\n\ 3.679094i 0.450039i 3.680000i 0.451850i 3.681811i 0.456378i 3.683622i 0.460000i \\\n\ 3.684528i 0.460906i 3.689055i 0.464528i 3.695394i 0.469961i 3.699016i 0.472677i \\\n\ 3.700827i 0.474488i 3.705354i 0.477205i 3.713504i 0.484449i 3.721654i 0.490787i \\\n\ 3.724370i 0.493504i 3.726181i 0.494409i 3.729803i 0.498031i 3.735236i 0.504370i \\\n\ 3.739764i 0.511614i 3.741575i 0.514331i 3.742480i 0.515236i 3.743386i 0.517953i \\\n\ 3.745197i 0.525197i 3.746102i 0.532441i 3.746102i 0.535157i 3.745197i 0.538780i \\\n\ 3.743386i 0.547835i 3.740669i 0.557795i 3.737953i 0.564134i 3.736142i 0.568661i \\\n\ 3.734331i 0.572283i 3.731614i 0.577717i 3.728898i 0.584961i 3.728898i 0.585866i \\\n\ 3.727992i 0.586772i 3.727992i 0.587677i 3.727087i 0.587677i 3.727087i 0.588583i \\\n\ 3.727087i 0.589488i 3.726181i 0.589488i 3.726181i 0.590394i 3.726181i 0.589488i \\\n\ 3.726181i 0.588583i 3.726181i 0.587677i 3.726181i 0.586772i 3.727087i 0.586772i \\\n\ 3.727087i 0.585866i 3.727087i 0.584961i 3.728898i 0.578622i 3.730709i 0.574094i \\\n\ 3.732520i 0.570472i 3.734331i 0.566850i 3.736142i 0.561417i 3.738858i 0.553268i \\\n\ 3.741575i 0.545118i 3.742480i 0.542402i 3.743386i 0.542402i 3.743386i 0.539685i \\\n\ 3.742480i 0.532441i 3.740669i 0.524291i 3.738858i 0.520669i 3.737953i 0.519764i \\\n\ 3.736142i 0.516142i 3.729803i 0.507992i 3.723465i 0.501654i 3.719843i 0.498031i \\\n\ 3.718031i 0.496220i 3.716220i 0.495315i 3.712598i 0.492598i 3.704449i 0.487165i \\\n\ 3.695394i 0.481732i 3.690866i 0.479921i 3.688150i 0.479016i 3.683622i 0.477205i \\\n\ 3.677283i 0.474488i 3.676378i 0.474488i 3.675472i 0.473583i 3.674567i 0.473583i \\\n\ 3.673661i 0.473583i 3.672756i 0.473583i 3.671850i 0.474488i 3.671850i 0.475394i \\\n\ 3.671850i 0.476299i 3.671850i 0.477205i 3.671850i 0.478110i 3.671850i 0.479016i \\\n\ 3.671850i 0.479921i 3.672756i 0.480827i 3.671850i 0.480827i 3.671850i 0.479921i \\\n\ 3.671850i 0.479016i 3.671850i 0.478110i 3.671850i 0.477205i 3.671850i 0.476299i \\\n\ 3.671850i 0.474488i 3.671850i 0.464528i 3.672756i 0.455472i 3.673661i 0.447323i \\\n\ 3.674567i 0.440079i 3.675472i 0.431929i 3.676378i 0.423780i 3.677283i 0.421969i \\\n\ 3.677283i 0.424685i 3.676378i 0.430118i 3.676378i 0.435551i -outline $tkxox(score_active_note) -fill \\\n\ {}\n\ ${score} create line 3.711693i 1.060354i 3.711693i 1.264094i -fill $tkxox(score_active_note)\n\ ${score} create polygon 3.666417i 1.306654i 3.674567i 1.305748i 3.678189i 1.305748i \\\n\ 3.680000i 1.304843i 3.683622i 1.303937i 3.691772i 1.301220i 3.699016i 1.297598i \\\n\ 3.701732i 1.295787i 3.702638i 1.295787i 3.704449i 1.293071i 3.709882i 1.288543i \\\n\ 3.714409i 1.283110i 3.717126i 1.281299i 3.718937i 1.280394i 3.719843i 1.277677i \\\n\ 3.721654i 1.272244i 3.721654i 1.268622i 3.721654i 1.265906i 3.720748i 1.265000i \\\n\ 3.720748i 1.264094i 3.719843i 1.263189i 3.718937i 1.262283i 3.717126i 1.260472i \\\n\ 3.714409i 1.257756i 3.708976i 1.255039i 3.706260i 1.253228i 3.704449i 1.253228i \\\n\ 3.701732i 1.252323i 3.693583i 1.252323i 3.685433i 1.253228i 3.680906i 1.254134i \\\n\ 3.678189i 1.255039i 3.674567i 1.256850i 3.666417i 1.259567i 3.660079i 1.262283i \\\n\ 3.657362i 1.263189i 3.656457i 1.264094i 3.655551i 1.265906i 3.651024i 1.268622i \\\n\ 3.647402i 1.272244i 3.646496i 1.273150i 3.645591i 1.274961i 3.643780i 1.278583i \\\n\ 3.641969i 1.283110i 3.641969i 1.284921i 3.641063i 1.286732i 3.641063i 1.288543i \\\n\ 3.641063i 1.293071i 3.641969i 1.297598i 3.641969i 1.299409i 3.641969i 1.300315i \\\n\ 3.642874i 1.301220i 3.646496i 1.303937i 3.651024i 1.305748i 3.653740i 1.306654i \\\n\ 3.655551i 1.306654i 3.659173i 1.306654i -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 3.666417i 1.306654i 3.674567i 1.305748i 3.678189i 1.305748i \\\n\ 3.680000i 1.304843i 3.683622i 1.303937i 3.691772i 1.301220i 3.699016i 1.297598i \\\n\ 3.701732i 1.295787i 3.702638i 1.295787i 3.704449i 1.293071i 3.709882i 1.288543i \\\n\ 3.714409i 1.283110i 3.717126i 1.281299i 3.718937i 1.280394i 3.719843i 1.277677i \\\n\ 3.721654i 1.272244i 3.721654i 1.268622i 3.721654i 1.265906i 3.720748i 1.265000i \\\n\ 3.720748i 1.264094i 3.719843i 1.263189i 3.718937i 1.262283i 3.717126i 1.260472i \\\n\ 3.714409i 1.257756i 3.708976i 1.255039i 3.706260i 1.253228i 3.704449i 1.253228i \\\n\ 3.701732i 1.252323i 3.693583i 1.252323i 3.685433i 1.253228i 3.680906i 1.254134i \\\n\ 3.678189i 1.255039i 3.674567i 1.256850i 3.666417i 1.259567i 3.660079i 1.262283i \\\n\ 3.657362i 1.263189i 3.656457i 1.264094i 3.655551i 1.265906i 3.651024i 1.268622i \\\n\ 3.647402i 1.272244i 3.646496i 1.273150i 3.645591i 1.274961i 3.643780i 1.278583i \\\n\ 3.641969i 1.283110i 3.641969i 1.284921i 3.641063i 1.286732i 3.641063i 1.288543i \\\n\ 3.641063i 1.293071i 3.641969i 1.297598i 3.641969i 1.299409i 3.641969i 1.300315i \\\n\ 3.642874i 1.301220i 3.646496i 1.303937i 3.651024i 1.305748i 3.653740i 1.306654i \\\n\ 3.655551i 1.306654i 3.659173i 1.306654i -outline $tkxox(score_active_note) -fill {}\n\ ${score} create line 3.065157i 0.422874i 3.065157i 0.602165i -fill $tkxox(score_active_note)\n\ ${score} create polygon 3.023504i 0.640197i 3.030748i 0.639291i 3.034370i 0.638386i \\\n\ 3.035276i 0.638386i 3.038898i 0.637480i 3.046142i 0.634764i 3.052480i 0.632047i \\\n\ 3.055197i 0.630236i 3.057008i 0.629331i 3.058819i 0.628425i 3.064252i 0.623898i \\\n\ 3.068780i 0.619370i 3.071496i 0.617559i 3.072402i 0.616654i 3.073307i 0.613937i \\\n\ 3.075118i 0.609409i 3.075118i 0.606693i 3.075118i 0.603976i 3.074213i 0.603071i \\\n\ 3.074213i 0.602165i 3.073307i 0.601260i 3.072402i 0.600354i 3.070591i 0.598543i \\\n\ 3.067874i 0.596732i 3.062441i 0.594016i 3.059724i 0.594016i 3.057913i 0.593110i \\\n\ 3.054291i 0.593110i 3.047047i 0.593110i 3.039803i 0.594016i 3.035276i 0.594016i \\\n\ 3.033465i 0.594016i 3.030748i 0.594921i 3.023504i 0.597638i 3.017165i 0.600354i \\\n\ 3.015354i 0.602165i 3.014449i 0.603071i 3.012638i 0.604882i 3.009016i 0.608504i \\\n\ 3.005394i 0.611220i 3.004488i 0.612126i 3.003583i 0.612126i 3.002677i 0.613937i \\\n\ 3.000866i 0.616654i 2.999055i 0.620276i 2.998150i 0.622087i 2.998150i 0.622992i \\\n\ 2.998150i 0.624803i 2.998150i 0.628425i 2.999055i 0.632047i 2.999055i 0.632953i \\\n\ 2.999961i 0.633858i 3.000866i 0.634764i 3.004488i 0.637480i 3.009016i 0.639291i \\\n\ 3.011732i 0.640197i 3.013543i 0.640197i 3.016260i 0.640197i -outline {} -fill $tkxox(score_active_note) \\\n\ -width 0\n\ ${score} create polygon 3.023504i 0.640197i 3.030748i 0.639291i 3.034370i 0.638386i \\\n\ 3.035276i 0.638386i 3.038898i 0.637480i 3.046142i 0.634764i 3.052480i 0.632047i \\\n\ 3.055197i 0.630236i 3.057008i 0.629331i 3.058819i 0.628425i 3.064252i 0.623898i \\\n\ 3.068780i 0.619370i 3.071496i 0.617559i 3.072402i 0.616654i 3.073307i 0.613937i \\\n\ 3.075118i 0.609409i 3.075118i 0.606693i 3.075118i 0.603976i 3.074213i 0.603071i \\\n\ 3.074213i 0.602165i 3.073307i 0.601260i 3.072402i 0.600354i 3.070591i 0.598543i \\\n\ 3.067874i 0.596732i 3.062441i 0.594016i 3.059724i 0.594016i 3.057913i 0.593110i \\\n\ 3.054291i 0.593110i 3.047047i 0.593110i 3.039803i 0.594016i 3.035276i 0.594016i \\\n\ 3.033465i 0.594016i 3.030748i 0.594921i 3.023504i 0.597638i 3.017165i 0.600354i \\\n\ 3.015354i 0.602165i 3.014449i 0.603071i 3.012638i 0.604882i 3.009016i 0.608504i \\\n\ 3.005394i 0.611220i 3.004488i 0.612126i 3.003583i 0.612126i 3.002677i 0.613937i \\\n\ 3.000866i 0.616654i 2.999055i 0.620276i 2.998150i 0.622087i 2.998150i 0.622992i \\\n\ 2.998150i 0.624803i 2.998150i 0.628425i 2.999055i 0.632047i 2.999055i 0.632953i \\\n\ 2.999961i 0.633858i 3.000866i 0.634764i 3.004488i 0.637480i 3.009016i 0.639291i \\\n\ 3.011732i 0.640197i 3.013543i 0.640197i 3.016260i 0.640197i -outline $tkxox(score_active_note) -fill \\\n\ {}\n\ ${score} create polygon 3.070591i 0.441890i 3.071496i 0.447323i 3.072402i 0.449134i \\\n\ 3.072402i 0.450039i 3.073307i 0.451850i 3.075118i 0.456378i 3.076929i 0.460000i \\\n\ 3.077835i 0.460906i 3.082362i 0.464528i 3.088701i 0.469961i 3.092323i 0.472677i \\\n\ 3.095039i 0.474488i 3.099567i 0.477205i 3.107717i 0.484449i 3.114961i 0.490787i \\\n\ 3.118583i 0.493504i 3.120394i 0.494409i 3.123110i 0.498031i 3.128543i 0.504370i \\\n\ 3.133071i 0.511614i 3.134882i 0.514331i 3.135787i 0.515236i 3.136693i 0.517953i \\\n\ 3.138504i 0.525197i 3.139409i 0.532441i 3.139409i 0.535157i 3.138504i 0.538780i \\\n\ 3.136693i 0.547835i 3.133976i 0.557795i 3.131260i 0.564134i 3.129449i 0.568661i \\\n\ 3.127638i 0.572283i 3.124921i 0.577717i 3.122205i 0.584961i 3.122205i 0.585866i \\\n\ 3.121299i 0.586772i 3.121299i 0.587677i 3.120394i 0.587677i 3.120394i 0.588583i \\\n\ 3.120394i 0.589488i 3.119488i 0.589488i 3.119488i 0.590394i 3.119488i 0.589488i \\\n\ 3.119488i 0.588583i 3.119488i 0.587677i 3.119488i 0.586772i 3.120394i 0.586772i \\\n\ 3.120394i 0.585866i 3.120394i 0.584961i 3.122205i 0.578622i 3.124016i 0.574094i \\\n\ 3.125827i 0.570472i 3.127638i 0.566850i 3.129449i 0.561417i 3.132165i 0.553268i \\\n\ 3.134882i 0.545118i 3.135787i 0.542402i 3.136693i 0.542402i 3.136693i 0.539685i \\\n\ 3.135787i 0.532441i 3.133976i 0.524291i 3.132165i 0.520669i 3.131260i 0.519764i \\\n\ 3.129449i 0.516142i 3.123110i 0.507992i 3.116772i 0.501654i 3.113150i 0.498031i \\\n\ 3.111339i 0.496220i 3.109528i 0.495315i 3.105906i 0.492598i 3.097756i 0.487165i \\\n\ 3.088701i 0.481732i 3.084173i 0.479921i 3.081457i 0.479016i 3.076929i 0.477205i \\\n\ 3.070591i 0.474488i 3.069685i 0.474488i 3.068780i 0.473583i 3.067874i 0.473583i \\\n\ 3.066969i 0.473583i 3.066063i 0.473583i 3.066063i 0.474488i 3.066063i 0.475394i \\\n\ 3.066063i 0.476299i 3.066063i 0.477205i 3.066063i 0.478110i 3.066969i 0.479016i \\\n\ 3.066969i 0.479921i 3.066969i 0.480827i 3.066969i 0.479921i 3.066969i 0.479016i \\\n\ 3.066969i 0.478110i 3.066969i 0.477205i 3.066969i 0.475394i 3.066969i 0.474488i \\\n\ 3.066969i 0.464528i 3.067874i 0.455472i 3.067874i 0.447323i 3.068780i 0.440079i \\\n\ 3.068780i 0.431929i 3.069685i 0.423780i 3.070591i 0.421969i 3.069685i 0.424685i \\\n\ 3.069685i 0.430118i 3.069685i 0.435551i -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 3.070591i 0.441890i 3.071496i 0.447323i 3.072402i 0.449134i \\\n\ 3.072402i 0.450039i 3.073307i 0.451850i 3.075118i 0.456378i 3.076929i 0.460000i \\\n\ 3.077835i 0.460906i 3.082362i 0.464528i 3.088701i 0.469961i 3.092323i 0.472677i \\\n\ 3.095039i 0.474488i 3.099567i 0.477205i 3.107717i 0.484449i 3.114961i 0.490787i \\\n\ 3.118583i 0.493504i 3.120394i 0.494409i 3.123110i 0.498031i 3.128543i 0.504370i \\\n\ 3.133071i 0.511614i 3.134882i 0.514331i 3.135787i 0.515236i 3.136693i 0.517953i \\\n\ 3.138504i 0.525197i 3.139409i 0.532441i 3.139409i 0.535157i 3.138504i 0.538780i \\\n\ 3.136693i 0.547835i 3.133976i 0.557795i 3.131260i 0.564134i 3.129449i 0.568661i \\\n\ 3.127638i 0.572283i 3.124921i 0.577717i 3.122205i 0.584961i 3.122205i 0.585866i \\\n\ 3.121299i 0.586772i 3.121299i 0.587677i 3.120394i 0.587677i 3.120394i 0.588583i \\\n\ 3.120394i 0.589488i 3.119488i 0.589488i 3.119488i 0.590394i 3.119488i 0.589488i \\\n\ 3.119488i 0.588583i 3.119488i 0.587677i 3.119488i 0.586772i 3.120394i 0.586772i \\\n\ 3.120394i 0.585866i 3.120394i 0.584961i 3.122205i 0.578622i 3.124016i 0.574094i \\\n\ 3.125827i 0.570472i 3.127638i 0.566850i 3.129449i 0.561417i 3.132165i 0.553268i \\\n\ 3.134882i 0.545118i 3.135787i 0.542402i 3.136693i 0.542402i 3.136693i 0.539685i \\\n\ 3.135787i 0.532441i 3.133976i 0.524291i 3.132165i 0.520669i 3.131260i 0.519764i \\\n\ 3.129449i 0.516142i 3.123110i 0.507992i 3.116772i 0.501654i 3.113150i 0.498031i \\\n\ 3.111339i 0.496220i 3.109528i 0.495315i 3.105906i 0.492598i 3.097756i 0.487165i \\\n\ 3.088701i 0.481732i 3.084173i 0.479921i 3.081457i 0.479016i 3.076929i 0.477205i \\\n\ 3.070591i 0.474488i 3.069685i 0.474488i 3.068780i 0.473583i 3.067874i 0.473583i \\\n\ 3.066969i 0.473583i 3.066063i 0.473583i 3.066063i 0.474488i 3.066063i 0.475394i \\\n\ 3.066063i 0.476299i 3.066063i 0.477205i 3.066063i 0.478110i 3.066969i 0.479016i \\\n\ 3.066969i 0.479921i 3.066969i 0.480827i 3.066969i 0.479921i 3.066969i 0.479016i \\\n\ 3.066969i 0.478110i 3.066969i 0.477205i 3.066969i 0.475394i 3.066969i 0.474488i \\\n\ 3.066969i 0.464528i 3.067874i 0.455472i 3.067874i 0.447323i 3.068780i 0.440079i \\\n\ 3.068780i 0.431929i 3.069685i 0.423780i 3.070591i 0.421969i 3.069685i 0.424685i \\\n\ 3.069685i 0.430118i 3.069685i 0.435551i -outline $tkxox(score_active_note) -fill {}\n\ ${score} create line 2.309055i 0.422874i 2.309055i 0.602165i -fill $tkxox(score_active_note)\n\ ${score} create polygon 2.266496i 0.640197i 2.273740i 0.639291i 2.277362i 0.638386i \\\n\ 2.278268i 0.638386i 2.281890i 0.637480i 2.289134i 0.634764i 2.296378i 0.632047i \\\n\ 2.299094i 0.630236i 2.300000i 0.629331i 2.302717i 0.628425i 2.308150i 0.623898i \\\n\ 2.312677i 0.619370i 2.314488i 0.617559i 2.315394i 0.616654i 2.317205i 0.613937i \\\n\ 2.318110i 0.609409i 2.318110i 0.606693i 2.318110i 0.603976i 2.318110i 0.603071i \\\n\ 2.318110i 0.602165i 2.317205i 0.601260i 2.316299i 0.600354i 2.314488i 0.598543i \\\n\ 2.311772i 0.596732i 2.306339i 0.594016i 2.302717i 0.594016i 2.300906i 0.593110i \\\n\ 2.297283i 0.593110i 2.289134i 0.593110i 2.281890i 0.594016i 2.278268i 0.594016i \\\n\ 2.276457i 0.594016i 2.273740i 0.594921i 2.266496i 0.597638i 2.260157i 0.600354i \\\n\ 2.257441i 0.602165i 2.256535i 0.603071i 2.254724i 0.604882i 2.250197i 0.608504i \\\n\ 2.246575i 0.611220i 2.245669i 0.612126i 2.244764i 0.613937i 2.242953i 0.616654i \\\n\ 2.241142i 0.620276i 2.240236i 0.622087i 2.239331i 0.622992i 2.239331i 0.624803i \\\n\ 2.239331i 0.628425i 2.240236i 0.631142i 2.241142i 0.632953i 2.241142i 0.633858i \\\n\ 2.242953i 0.635669i 2.246575i 0.637480i 2.252008i 0.639291i 2.254724i 0.640197i \\\n\ 2.255630i 0.640197i 2.259252i 0.640197i -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 2.266496i 0.640197i 2.273740i 0.639291i 2.277362i 0.638386i \\\n\ 2.278268i 0.638386i 2.281890i 0.637480i 2.289134i 0.634764i 2.296378i 0.632047i \\\n\ 2.299094i 0.630236i 2.300000i 0.629331i 2.302717i 0.628425i 2.308150i 0.623898i \\\n\ 2.312677i 0.619370i 2.314488i 0.617559i 2.315394i 0.616654i 2.317205i 0.613937i \\\n\ 2.318110i 0.609409i 2.318110i 0.606693i 2.318110i 0.603976i 2.318110i 0.603071i \\\n\ 2.318110i 0.602165i 2.317205i 0.601260i 2.316299i 0.600354i 2.314488i 0.598543i \\\n\ 2.311772i 0.596732i 2.306339i 0.594016i 2.302717i 0.594016i 2.300906i 0.593110i \\\n\ 2.297283i 0.593110i 2.289134i 0.593110i 2.281890i 0.594016i 2.278268i 0.594016i \\\n\ 2.276457i 0.594016i 2.273740i 0.594921i 2.266496i 0.597638i 2.260157i 0.600354i \\\n\ 2.257441i 0.602165i 2.256535i 0.603071i 2.254724i 0.604882i 2.250197i 0.608504i \\\n\ 2.246575i 0.611220i 2.245669i 0.612126i 2.244764i 0.613937i 2.242953i 0.616654i \\\n\ 2.241142i 0.620276i 2.240236i 0.622087i 2.239331i 0.622992i 2.239331i 0.624803i \\\n\ 2.239331i 0.628425i 2.240236i 0.631142i 2.241142i 0.632953i 2.241142i 0.633858i \\\n\ 2.242953i 0.635669i 2.246575i 0.637480i 2.252008i 0.639291i 2.254724i 0.640197i \\\n\ 2.255630i 0.640197i 2.259252i 0.640197i -outline $tkxox(score_active_note) -fill {}\n\ ${score} create polygon 2.314488i 0.441890i 2.315394i 0.447323i 2.315394i 0.449134i \\\n\ 2.315394i 0.450039i 2.316299i 0.451850i 2.318110i 0.456378i 2.319921i 0.460000i \\\n\ 2.320827i 0.460000i 2.321732i 0.460906i 2.326260i 0.464528i 2.332598i 0.469961i \\\n\ 2.336220i 0.472677i 2.338937i 0.474488i 2.342559i 0.477205i 2.350709i 0.484449i \\\n\ 2.358858i 0.490787i 2.361575i 0.493504i 2.363386i 0.494409i 2.367008i 0.498031i \\\n\ 2.372441i 0.504370i 2.376969i 0.511614i 2.378780i 0.514331i 2.378780i 0.515236i \\\n\ 2.379685i 0.517953i 2.381496i 0.525197i 2.382402i 0.532441i 2.383307i 0.535157i \\\n\ 2.382402i 0.538780i 2.380591i 0.547835i 2.377874i 0.557795i 2.375157i 0.564134i \\\n\ 2.373346i 0.568661i 2.371535i 0.572283i 2.368819i 0.577717i 2.366102i 0.584961i \\\n\ 2.366102i 0.585866i 2.365197i 0.586772i 2.365197i 0.587677i 2.364291i 0.587677i \\\n\ 2.364291i 0.588583i 2.364291i 0.589488i 2.363386i 0.589488i 2.363386i 0.590394i \\\n\ 2.363386i 0.589488i 2.363386i 0.588583i 2.363386i 0.587677i 2.363386i 0.586772i \\\n\ 2.364291i 0.586772i 2.364291i 0.585866i 2.364291i 0.584961i 2.366102i 0.578622i \\\n\ 2.367913i 0.574094i 2.369724i 0.570472i 2.371535i 0.566850i 2.373346i 0.561417i \\\n\ 2.376063i 0.553268i 2.378780i 0.545118i 2.379685i 0.542402i 2.380591i 0.542402i \\\n\ 2.380591i 0.539685i 2.379685i 0.532441i 2.377874i 0.524291i 2.376063i 0.520669i \\\n\ 2.375157i 0.519764i 2.373346i 0.516142i 2.367008i 0.507992i 2.360669i 0.501654i \\\n\ 2.357047i 0.498031i 2.355236i 0.496220i 2.353425i 0.495315i 2.349803i 0.492598i \\\n\ 2.341654i 0.487165i 2.332598i 0.481732i 2.328071i 0.479921i 2.325354i 0.479016i \\\n\ 2.320827i 0.477205i 2.314488i 0.474488i 2.313583i 0.474488i 2.312677i 0.473583i \\\n\ 2.311772i 0.473583i 2.310866i 0.473583i 2.309961i 0.473583i 2.309961i 0.474488i \\\n\ 2.309961i 0.475394i 2.309961i 0.476299i 2.309961i 0.477205i 2.309961i 0.478110i \\\n\ 2.310866i 0.479016i 2.310866i 0.479921i 2.310866i 0.480827i 2.310866i 0.479921i \\\n\ 2.310866i 0.479016i 2.310866i 0.478110i 2.310866i 0.477205i 2.310866i 0.475394i \\\n\ 2.310866i 0.474488i 2.310866i 0.464528i 2.311772i 0.455472i 2.311772i 0.447323i \\\n\ 2.312677i 0.440079i 2.312677i 0.431929i 2.313583i 0.423780i 2.314488i 0.421969i \\\n\ 2.314488i 0.424685i 2.313583i 0.430118i 2.313583i 0.435551i -outline {} -fill $tkxox(score_active_note) \\\n\ -width 0\n\ ${score} create polygon 2.314488i 0.441890i 2.315394i 0.447323i 2.315394i 0.449134i \\\n\ 2.315394i 0.450039i 2.316299i 0.451850i 2.318110i 0.456378i 2.319921i 0.460000i \\\n\ 2.320827i 0.460000i 2.321732i 0.460906i 2.326260i 0.464528i 2.332598i 0.469961i \\\n\ 2.336220i 0.472677i 2.338937i 0.474488i 2.342559i 0.477205i 2.350709i 0.484449i \\\n\ 2.358858i 0.490787i 2.361575i 0.493504i 2.363386i 0.494409i 2.367008i 0.498031i \\\n\ 2.372441i 0.504370i 2.376969i 0.511614i 2.378780i 0.514331i 2.378780i 0.515236i \\\n\ 2.379685i 0.517953i 2.381496i 0.525197i 2.382402i 0.532441i 2.383307i 0.535157i \\\n\ 2.382402i 0.538780i 2.380591i 0.547835i 2.377874i 0.557795i 2.375157i 0.564134i \\\n\ 2.373346i 0.568661i 2.371535i 0.572283i 2.368819i 0.577717i 2.366102i 0.584961i \\\n\ 2.366102i 0.585866i 2.365197i 0.586772i 2.365197i 0.587677i 2.364291i 0.587677i \\\n\ 2.364291i 0.588583i 2.364291i 0.589488i 2.363386i 0.589488i 2.363386i 0.590394i \\\n\ 2.363386i 0.589488i 2.363386i 0.588583i 2.363386i 0.587677i 2.363386i 0.586772i \\\n\ 2.364291i 0.586772i 2.364291i 0.585866i 2.364291i 0.584961i 2.366102i 0.578622i \\\n\ 2.367913i 0.574094i 2.369724i 0.570472i 2.371535i 0.566850i 2.373346i 0.561417i \\\n\ 2.376063i 0.553268i 2.378780i 0.545118i 2.379685i 0.542402i 2.380591i 0.542402i \\\n\ 2.380591i 0.539685i 2.379685i 0.532441i 2.377874i 0.524291i 2.376063i 0.520669i \\\n\ 2.375157i 0.519764i 2.373346i 0.516142i 2.367008i 0.507992i 2.360669i 0.501654i \\\n\ 2.357047i 0.498031i 2.355236i 0.496220i 2.353425i 0.495315i 2.349803i 0.492598i \\\n\ 2.341654i 0.487165i 2.332598i 0.481732i 2.328071i 0.479921i 2.325354i 0.479016i \\\n\ 2.320827i 0.477205i 2.314488i 0.474488i 2.313583i 0.474488i 2.312677i 0.473583i \\\n\ 2.311772i 0.473583i 2.310866i 0.473583i 2.309961i 0.473583i 2.309961i 0.474488i \\\n\ 2.309961i 0.475394i 2.309961i 0.476299i 2.309961i 0.477205i 2.309961i 0.478110i \\\n\ 2.310866i 0.479016i 2.310866i 0.479921i 2.310866i 0.480827i 2.310866i 0.479921i \\\n\ 2.310866i 0.479016i 2.310866i 0.478110i 2.310866i 0.477205i 2.310866i 0.475394i \\\n\ 2.310866i 0.474488i 2.310866i 0.464528i 2.311772i 0.455472i 2.311772i 0.447323i \\\n\ 2.312677i 0.440079i 2.312677i 0.431929i 2.313583i 0.423780i 2.314488i 0.421969i \\\n\ 2.314488i 0.424685i 2.313583i 0.430118i 2.313583i 0.435551i -outline $tkxox(score_active_note) -fill \\\n\ {}\n\ ${score} create line 2.309055i 0.086024i 2.309055i 0.266220i -fill $tkxox(score_active_note)\n\ ${score} create polygon 2.266496i 0.301535i 2.273740i 0.300630i 2.277362i 0.300630i \\\n\ 2.278268i 0.300630i 2.281890i 0.299724i 2.289134i 0.297913i 2.296378i 0.295197i \\\n\ 2.299094i 0.293386i 2.300000i 0.293386i 2.302717i 0.291575i 2.308150i 0.287047i \\\n\ 2.312677i 0.282520i 2.314488i 0.280709i 2.315394i 0.279803i 2.317205i 0.277087i \\\n\ 2.318110i 0.272559i 2.318110i 0.269843i 2.318110i 0.267126i 2.318110i 0.266220i \\\n\ 2.318110i 0.265315i 2.317205i 0.264409i 2.316299i 0.263504i 2.314488i 0.261693i \\\n\ 2.311772i 0.259882i 2.306339i 0.257165i 2.302717i 0.256260i 2.300906i 0.256260i \\\n\ 2.297283i 0.255354i 2.289134i 0.255354i 2.281890i 0.256260i 2.278268i 0.256260i \\\n\ 2.276457i 0.257165i 2.273740i 0.258071i 2.266496i 0.260787i 2.260157i 0.263504i \\\n\ 2.257441i 0.265315i 2.256535i 0.266220i 2.254724i 0.268031i 2.250197i 0.271654i \\\n\ 2.246575i 0.274370i 2.245669i 0.275276i 2.244764i 0.276181i 2.242953i 0.278898i \\\n\ 2.241142i 0.282520i 2.240236i 0.284331i 2.239331i 0.285236i 2.239331i 0.287047i \\\n\ 2.239331i 0.290669i 2.240236i 0.294291i 2.241142i 0.296102i 2.241142i 0.297008i \\\n\ 2.242953i 0.298819i 2.246575i 0.300630i 2.252008i 0.302441i 2.254724i 0.302441i \\\n\ 2.255630i 0.302441i 2.259252i 0.301535i -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 2.266496i 0.301535i 2.273740i 0.300630i 2.277362i 0.300630i \\\n\ 2.278268i 0.300630i 2.281890i 0.299724i 2.289134i 0.297913i 2.296378i 0.295197i \\\n\ 2.299094i 0.293386i 2.300000i 0.293386i 2.302717i 0.291575i 2.308150i 0.287047i \\\n\ 2.312677i 0.282520i 2.314488i 0.280709i 2.315394i 0.279803i 2.317205i 0.277087i \\\n\ 2.318110i 0.272559i 2.318110i 0.269843i 2.318110i 0.267126i 2.318110i 0.266220i \\\n\ 2.318110i 0.265315i 2.317205i 0.264409i 2.316299i 0.263504i 2.314488i 0.261693i \\\n\ 2.311772i 0.259882i 2.306339i 0.257165i 2.302717i 0.256260i 2.300906i 0.256260i \\\n\ 2.297283i 0.255354i 2.289134i 0.255354i 2.281890i 0.256260i 2.278268i 0.256260i \\\n\ 2.276457i 0.257165i 2.273740i 0.258071i 2.266496i 0.260787i 2.260157i 0.263504i \\\n\ 2.257441i 0.265315i 2.256535i 0.266220i 2.254724i 0.268031i 2.250197i 0.271654i \\\n\ 2.246575i 0.274370i 2.245669i 0.275276i 2.244764i 0.276181i 2.242953i 0.278898i \\\n\ 2.241142i 0.282520i 2.240236i 0.284331i 2.239331i 0.285236i 2.239331i 0.287047i \\\n\ 2.239331i 0.290669i 2.240236i 0.294291i 2.241142i 0.296102i 2.241142i 0.297008i \\\n\ 2.242953i 0.298819i 2.246575i 0.300630i 2.252008i 0.302441i 2.254724i 0.302441i \\\n\ 2.255630i 0.302441i 2.259252i 0.301535i -outline $tkxox(score_active_note) -fill {}\n\ ${score} create polygon 2.314488i 0.104134i 2.315394i 0.109567i 2.315394i 0.111378i \\\n\ 2.315394i 0.112283i 2.316299i 0.114094i 2.318110i 0.118622i 2.319921i 0.122244i \\\n\ 2.320827i 0.123150i 2.320827i 0.122244i 2.321732i 0.123150i 2.326260i 0.127677i \\\n\ 2.332598i 0.133110i 2.336220i 0.135827i 2.338937i 0.137638i 2.342559i 0.140354i \\\n\ 2.350709i 0.147598i 2.358858i 0.153937i 2.361575i 0.157559i 2.363386i 0.158465i \\\n\ 2.367008i 0.161181i 2.372441i 0.167520i 2.376969i 0.173858i 2.378780i 0.175669i \\\n\ 2.378780i 0.176575i 2.379685i 0.179291i 2.381496i 0.185630i 2.382402i 0.192874i \\\n\ 2.383307i 0.195591i 2.383307i 0.196496i 2.382402i 0.200118i 2.380591i 0.210079i \\\n\ 2.377874i 0.220039i 2.375157i 0.226378i 2.373346i 0.230906i 2.371535i 0.234528i \\\n\ 2.368819i 0.239961i 2.366102i 0.247205i 2.366102i 0.248110i 2.365197i 0.249016i \\\n\ 2.365197i 0.249921i 2.364291i 0.249921i 2.364291i 0.250827i 2.364291i 0.251732i \\\n\ 2.363386i 0.251732i 2.363386i 0.252638i 2.363386i 0.251732i 2.363386i 0.250827i \\\n\ 2.363386i 0.249921i 2.363386i 0.249016i 2.364291i 0.249016i 2.364291i 0.248110i \\\n\ 2.364291i 0.247205i 2.366102i 0.241772i 2.367913i 0.237244i 2.369724i 0.233622i \\\n\ 2.371535i 0.230000i 2.373346i 0.224567i 2.376063i 0.216417i 2.378780i 0.208268i \\\n\ 2.379685i 0.204646i 2.380591i 0.203740i 2.380591i 0.201024i 2.379685i 0.193780i \\\n\ 2.377874i 0.186535i 2.376063i 0.182913i 2.375157i 0.182008i 2.373346i 0.178386i \\\n\ 2.367008i 0.171142i 2.360669i 0.164803i 2.357047i 0.161181i 2.355236i 0.160276i \\\n\ 2.353425i 0.158465i 2.349803i 0.155748i 2.341654i 0.150315i 2.332598i 0.144882i \\\n\ 2.328071i 0.142165i 2.325354i 0.141260i 2.320827i 0.139449i 2.314488i 0.136732i \\\n\ 2.313583i 0.136732i 2.312677i 0.135827i 2.311772i 0.135827i 2.310866i 0.135827i \\\n\ 2.309961i 0.135827i 2.309961i 0.136732i 2.309961i 0.137638i 2.309961i 0.138543i \\\n\ 2.309961i 0.139449i 2.309961i 0.140354i 2.310866i 0.140354i 2.310866i 0.141260i \\\n\ 2.310866i 0.142165i 2.310866i 0.141260i 2.310866i 0.140354i 2.310866i 0.139449i \\\n\ 2.310866i 0.137638i 2.310866i 0.136732i 2.310866i 0.126772i 2.311772i 0.117717i \\\n\ 2.311772i 0.110472i 2.312677i 0.103228i 2.312677i 0.094173i 2.313583i 0.086929i \\\n\ 2.314488i 0.085118i 2.314488i 0.087835i 2.313583i 0.092362i 2.313583i 0.097795i \\\n\ -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 2.314488i 0.104134i 2.315394i 0.109567i 2.315394i 0.111378i \\\n\ 2.315394i 0.112283i 2.316299i 0.114094i 2.318110i 0.118622i 2.319921i 0.122244i \\\n\ 2.320827i 0.123150i 2.320827i 0.122244i 2.321732i 0.123150i 2.326260i 0.127677i \\\n\ 2.332598i 0.133110i 2.336220i 0.135827i 2.338937i 0.137638i 2.342559i 0.140354i \\\n\ 2.350709i 0.147598i 2.358858i 0.153937i 2.361575i 0.157559i 2.363386i 0.158465i \\\n\ 2.367008i 0.161181i 2.372441i 0.167520i 2.376969i 0.173858i 2.378780i 0.175669i \\\n\ 2.378780i 0.176575i 2.379685i 0.179291i 2.381496i 0.185630i 2.382402i 0.192874i \\\n\ 2.383307i 0.195591i 2.383307i 0.196496i 2.382402i 0.200118i 2.380591i 0.210079i \\\n\ 2.377874i 0.220039i 2.375157i 0.226378i 2.373346i 0.230906i 2.371535i 0.234528i \\\n\ 2.368819i 0.239961i 2.366102i 0.247205i 2.366102i 0.248110i 2.365197i 0.249016i \\\n\ 2.365197i 0.249921i 2.364291i 0.249921i 2.364291i 0.250827i 2.364291i 0.251732i \\\n\ 2.363386i 0.251732i 2.363386i 0.252638i 2.363386i 0.251732i 2.363386i 0.250827i \\\n\ 2.363386i 0.249921i 2.363386i 0.249016i 2.364291i 0.249016i 2.364291i 0.248110i \\\n\ 2.364291i 0.247205i 2.366102i 0.241772i 2.367913i 0.237244i 2.369724i 0.233622i \\\n\ 2.371535i 0.230000i 2.373346i 0.224567i 2.376063i 0.216417i 2.378780i 0.208268i \\\n\ 2.379685i 0.204646i 2.380591i 0.203740i 2.380591i 0.201024i 2.379685i 0.193780i \\\n\ 2.377874i 0.186535i 2.376063i 0.182913i 2.375157i 0.182008i 2.373346i 0.178386i \\\n\ 2.367008i 0.171142i 2.360669i 0.164803i 2.357047i 0.161181i 2.355236i 0.160276i \\\n\ 2.353425i 0.158465i 2.349803i 0.155748i 2.341654i 0.150315i 2.332598i 0.144882i \\\n\ 2.328071i 0.142165i 2.325354i 0.141260i 2.320827i 0.139449i 2.314488i 0.136732i \\\n\ 2.313583i 0.136732i 2.312677i 0.135827i 2.311772i 0.135827i 2.310866i 0.135827i \\\n\ 2.309961i 0.135827i 2.309961i 0.136732i 2.309961i 0.137638i 2.309961i 0.138543i \\\n\ 2.309961i 0.139449i 2.309961i 0.140354i 2.310866i 0.140354i 2.310866i 0.141260i \\\n\ 2.310866i 0.142165i 2.310866i 0.141260i 2.310866i 0.140354i 2.310866i 0.139449i \\\n\ 2.310866i 0.137638i 2.310866i 0.136732i 2.310866i 0.126772i 2.311772i 0.117717i \\\n\ 2.311772i 0.110472i 2.312677i 0.103228i 2.312677i 0.094173i 2.313583i 0.086929i \\\n\ 2.314488i 0.085118i 2.314488i 0.087835i 2.313583i 0.092362i 2.313583i 0.097795i \\\n\ -outline $tkxox(score_active_note) -fill {}\n\ ${score} create line 1.702362i 0.422874i 1.702362i 0.602165i -fill $tkxox(score_active_note)\n\ ${score} create polygon 1.659803i 0.640197i 1.667047i 0.639291i 1.670669i 0.638386i \\\n\ 1.672480i 0.638386i 1.676102i 0.637480i 1.683346i 0.634764i 1.690591i 0.632047i \\\n\ 1.693307i 0.630236i 1.694213i 0.629331i 1.696024i 0.628425i 1.701457i 0.623898i \\\n\ 1.705984i 0.619370i 1.707795i 0.617559i 1.708701i 0.616654i 1.710512i 0.613937i \\\n\ 1.711417i 0.609409i 1.711417i 0.605787i 1.711417i 0.603071i 1.710512i 0.602165i \\\n\ 1.710512i 0.601260i 1.708701i 0.599449i 1.705079i 0.596732i 1.699646i 0.594016i \\\n\ 1.696929i 0.594016i 1.695118i 0.593110i 1.691496i 0.593110i 1.684252i 0.593110i \\\n\ 1.676102i 0.594016i 1.672480i 0.594016i 1.670669i 0.594016i 1.667047i 0.594921i \\\n\ 1.659803i 0.597638i 1.653465i 0.600354i 1.651654i 0.602165i 1.650748i 0.603071i \\\n\ 1.648937i 0.604882i 1.645315i 0.608504i 1.641693i 0.611220i 1.640787i 0.612126i \\\n\ 1.639882i 0.613937i 1.638071i 0.616654i 1.636260i 0.620276i 1.635354i 0.622087i \\\n\ 1.635354i 0.622992i 1.635354i 0.624803i 1.635354i 0.628425i 1.636260i 0.632047i \\\n\ 1.637165i 0.632953i 1.637165i 0.633858i 1.638071i 0.634764i 1.641693i 0.637480i \\\n\ 1.646220i 0.639291i 1.648937i 0.640197i 1.649843i 0.640197i 1.652559i 0.640197i \\\n\ -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 1.659803i 0.640197i 1.667047i 0.639291i 1.670669i 0.638386i \\\n\ 1.672480i 0.638386i 1.676102i 0.637480i 1.683346i 0.634764i 1.690591i 0.632047i \\\n\ 1.693307i 0.630236i 1.694213i 0.629331i 1.696024i 0.628425i 1.701457i 0.623898i \\\n\ 1.705984i 0.619370i 1.707795i 0.617559i 1.708701i 0.616654i 1.710512i 0.613937i \\\n\ 1.711417i 0.609409i 1.711417i 0.605787i 1.711417i 0.603071i 1.710512i 0.602165i \\\n\ 1.710512i 0.601260i 1.708701i 0.599449i 1.705079i 0.596732i 1.699646i 0.594016i \\\n\ 1.696929i 0.594016i 1.695118i 0.593110i 1.691496i 0.593110i 1.684252i 0.593110i \\\n\ 1.676102i 0.594016i 1.672480i 0.594016i 1.670669i 0.594016i 1.667047i 0.594921i \\\n\ 1.659803i 0.597638i 1.653465i 0.600354i 1.651654i 0.602165i 1.650748i 0.603071i \\\n\ 1.648937i 0.604882i 1.645315i 0.608504i 1.641693i 0.611220i 1.640787i 0.612126i \\\n\ 1.639882i 0.613937i 1.638071i 0.616654i 1.636260i 0.620276i 1.635354i 0.622087i \\\n\ 1.635354i 0.622992i 1.635354i 0.624803i 1.635354i 0.628425i 1.636260i 0.632047i \\\n\ 1.637165i 0.632953i 1.637165i 0.633858i 1.638071i 0.634764i 1.641693i 0.637480i \\\n\ 1.646220i 0.639291i 1.648937i 0.640197i 1.649843i 0.640197i 1.652559i 0.640197i \\\n\ -outline $tkxox(score_active_note) -fill {}\n\ ${score} create polygon 1.707795i 0.441890i 1.708701i 0.447323i 1.708701i 0.449134i \\\n\ 1.708701i 0.450039i 1.709606i 0.451850i 1.711417i 0.456378i 1.713228i 0.460000i \\\n\ 1.714134i 0.460000i 1.713228i 0.460000i 1.715039i 0.460906i 1.719567i 0.464528i \\\n\ 1.725906i 0.469961i 1.729528i 0.472677i 1.732244i 0.474488i 1.736772i 0.477205i \\\n\ 1.744921i 0.484449i 1.752165i 0.490787i 1.755787i 0.493504i 1.757598i 0.494409i \\\n\ 1.760315i 0.498031i 1.765748i 0.504370i 1.770276i 0.511614i 1.772087i 0.514331i \\\n\ 1.772992i 0.515236i 1.773898i 0.517953i 1.775709i 0.525197i 1.776614i 0.532441i \\\n\ 1.776614i 0.535157i 1.775709i 0.538780i 1.773898i 0.547835i 1.771181i 0.557795i \\\n\ 1.768465i 0.564134i 1.766654i 0.568661i 1.764843i 0.572283i 1.762126i 0.577717i \\\n\ 1.759409i 0.584961i 1.759409i 0.585866i 1.758504i 0.586772i 1.758504i 0.587677i \\\n\ 1.757598i 0.587677i 1.757598i 0.588583i 1.757598i 0.589488i 1.756693i 0.589488i \\\n\ 1.756693i 0.590394i 1.756693i 0.589488i 1.756693i 0.588583i 1.756693i 0.587677i \\\n\ 1.756693i 0.586772i 1.757598i 0.586772i 1.757598i 0.585866i 1.757598i 0.584961i \\\n\ 1.759409i 0.578622i 1.761220i 0.574094i 1.763031i 0.570472i 1.764843i 0.566850i \\\n\ 1.766654i 0.561417i 1.769370i 0.553268i 1.772087i 0.545118i 1.772992i 0.542402i \\\n\ 1.773898i 0.542402i 1.773898i 0.539685i 1.772992i 0.532441i 1.771181i 0.524291i \\\n\ 1.769370i 0.520669i 1.768465i 0.519764i 1.766654i 0.516142i 1.760315i 0.507992i \\\n\ 1.753976i 0.501654i 1.750354i 0.498031i 1.748543i 0.496220i 1.746732i 0.495315i \\\n\ 1.743110i 0.492598i 1.734961i 0.487165i 1.725906i 0.481732i 1.721378i 0.479921i \\\n\ 1.718661i 0.479016i 1.714134i 0.477205i 1.707795i 0.474488i 1.706890i 0.474488i \\\n\ 1.705984i 0.473583i 1.705079i 0.473583i 1.704173i 0.473583i 1.703268i 0.473583i \\\n\ 1.703268i 0.474488i 1.703268i 0.475394i 1.703268i 0.476299i 1.703268i 0.477205i \\\n\ 1.703268i 0.478110i 1.704173i 0.479016i 1.704173i 0.479921i 1.704173i 0.480827i \\\n\ 1.704173i 0.479921i 1.704173i 0.479016i 1.704173i 0.478110i 1.704173i 0.477205i \\\n\ 1.704173i 0.475394i 1.704173i 0.474488i 1.704173i 0.464528i 1.705079i 0.455472i \\\n\ 1.705079i 0.447323i 1.705984i 0.440079i 1.705984i 0.431929i 1.706890i 0.423780i \\\n\ 1.707795i 0.421969i 1.707795i 0.424685i 1.706890i 0.430118i 1.706890i 0.435551i \\\n\ -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 1.707795i 0.441890i 1.708701i 0.447323i 1.708701i 0.449134i \\\n\ 1.708701i 0.450039i 1.709606i 0.451850i 1.711417i 0.456378i 1.713228i 0.460000i \\\n\ 1.714134i 0.460000i 1.713228i 0.460000i 1.715039i 0.460906i 1.719567i 0.464528i \\\n\ 1.725906i 0.469961i 1.729528i 0.472677i 1.732244i 0.474488i 1.736772i 0.477205i \\\n\ 1.744921i 0.484449i 1.752165i 0.490787i 1.755787i 0.493504i 1.757598i 0.494409i \\\n\ 1.760315i 0.498031i 1.765748i 0.504370i 1.770276i 0.511614i 1.772087i 0.514331i \\\n\ 1.772992i 0.515236i 1.773898i 0.517953i 1.775709i 0.525197i 1.776614i 0.532441i \\\n\ 1.776614i 0.535157i 1.775709i 0.538780i 1.773898i 0.547835i 1.771181i 0.557795i \\\n\ 1.768465i 0.564134i 1.766654i 0.568661i 1.764843i 0.572283i 1.762126i 0.577717i \\\n\ 1.759409i 0.584961i 1.759409i 0.585866i 1.758504i 0.586772i 1.758504i 0.587677i \\\n\ 1.757598i 0.587677i 1.757598i 0.588583i 1.757598i 0.589488i 1.756693i 0.589488i \\\n\ 1.756693i 0.590394i 1.756693i 0.589488i 1.756693i 0.588583i 1.756693i 0.587677i \\\n\ 1.756693i 0.586772i 1.757598i 0.586772i 1.757598i 0.585866i 1.757598i 0.584961i \\\n\ 1.759409i 0.578622i 1.761220i 0.574094i 1.763031i 0.570472i 1.764843i 0.566850i \\\n\ 1.766654i 0.561417i 1.769370i 0.553268i 1.772087i 0.545118i 1.772992i 0.542402i \\\n\ 1.773898i 0.542402i 1.773898i 0.539685i 1.772992i 0.532441i 1.771181i 0.524291i \\\n\ 1.769370i 0.520669i 1.768465i 0.519764i 1.766654i 0.516142i 1.760315i 0.507992i \\\n\ 1.753976i 0.501654i 1.750354i 0.498031i 1.748543i 0.496220i 1.746732i 0.495315i \\\n\ 1.743110i 0.492598i 1.734961i 0.487165i 1.725906i 0.481732i 1.721378i 0.479921i \\\n\ 1.718661i 0.479016i 1.714134i 0.477205i 1.707795i 0.474488i 1.706890i 0.474488i \\\n\ 1.705984i 0.473583i 1.705079i 0.473583i 1.704173i 0.473583i 1.703268i 0.473583i \\\n\ 1.703268i 0.474488i 1.703268i 0.475394i 1.703268i 0.476299i 1.703268i 0.477205i \\\n\ 1.703268i 0.478110i 1.704173i 0.479016i 1.704173i 0.479921i 1.704173i 0.480827i \\\n\ 1.704173i 0.479921i 1.704173i 0.479016i 1.704173i 0.478110i 1.704173i 0.477205i \\\n\ 1.704173i 0.475394i 1.704173i 0.474488i 1.704173i 0.464528i 1.705079i 0.455472i \\\n\ 1.705079i 0.447323i 1.705984i 0.440079i 1.705984i 0.431929i 1.706890i 0.423780i \\\n\ 1.707795i 0.421969i 1.707795i 0.424685i 1.706890i 0.430118i 1.706890i 0.435551i \\\n\ -outline $tkxox(score_active_note) -fill {}\n\ ${score} create line 1.098386i 0.086024i 1.098386i 0.266220i -fill $tkxox(score_active_note)\n\ ${score} create polygon 1.054016i 0.301535i 1.061260i 0.300630i 1.064882i 0.300630i \\\n\ 1.066693i 0.300630i 1.071220i 0.299724i 1.078465i 0.297913i 1.085709i 0.295197i \\\n\ 1.088425i 0.293386i 1.089331i 0.293386i 1.092047i 0.291575i 1.097480i 0.287047i \\\n\ 1.102008i 0.282520i 1.103819i 0.280709i 1.104724i 0.279803i 1.106535i 0.277087i \\\n\ 1.107441i 0.272559i 1.107441i 0.268937i 1.107441i 0.266220i 1.106535i 0.265315i \\\n\ 1.106535i 0.264409i 1.104724i 0.262598i 1.101102i 0.259882i 1.095669i 0.257165i \\\n\ 1.092953i 0.256260i 1.091142i 0.256260i 1.087520i 0.255354i 1.079370i 0.255354i \\\n\ 1.071220i 0.256260i 1.066693i 0.256260i 1.064882i 0.257165i 1.061260i 0.258071i \\\n\ 1.054016i 0.260787i 1.047677i 0.263504i 1.045866i 0.265315i 1.045866i 0.266220i \\\n\ 1.044055i 0.268031i 1.040433i 0.271654i 1.036811i 0.274370i 1.035906i 0.275276i \\\n\ 1.035000i 0.275276i 1.034094i 0.276181i 1.032283i 0.278898i 1.030472i 0.282520i \\\n\ 1.029567i 0.284331i 1.028661i 0.285236i 1.028661i 0.287047i 1.028661i 0.290669i \\\n\ 1.029567i 0.294291i 1.030472i 0.296102i 1.030472i 0.297008i 1.031378i 0.297008i \\\n\ 1.032283i 0.298819i 1.035906i 0.300630i 1.040433i 0.302441i 1.043150i 0.302441i \\\n\ 1.044055i 0.302441i 1.046772i 0.301535i -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 1.054016i 0.301535i 1.061260i 0.300630i 1.064882i 0.300630i \\\n\ 1.066693i 0.300630i 1.071220i 0.299724i 1.078465i 0.297913i 1.085709i 0.295197i \\\n\ 1.088425i 0.293386i 1.089331i 0.293386i 1.092047i 0.291575i 1.097480i 0.287047i \\\n\ 1.102008i 0.282520i 1.103819i 0.280709i 1.104724i 0.279803i 1.106535i 0.277087i \\\n\ 1.107441i 0.272559i 1.107441i 0.268937i 1.107441i 0.266220i 1.106535i 0.265315i \\\n\ 1.106535i 0.264409i 1.104724i 0.262598i 1.101102i 0.259882i 1.095669i 0.257165i \\\n\ 1.092953i 0.256260i 1.091142i 0.256260i 1.087520i 0.255354i 1.079370i 0.255354i \\\n\ 1.071220i 0.256260i 1.066693i 0.256260i 1.064882i 0.257165i 1.061260i 0.258071i \\\n\ 1.054016i 0.260787i 1.047677i 0.263504i 1.045866i 0.265315i 1.045866i 0.266220i \\\n\ 1.044055i 0.268031i 1.040433i 0.271654i 1.036811i 0.274370i 1.035906i 0.275276i \\\n\ 1.035000i 0.275276i 1.034094i 0.276181i 1.032283i 0.278898i 1.030472i 0.282520i \\\n\ 1.029567i 0.284331i 1.028661i 0.285236i 1.028661i 0.287047i 1.028661i 0.290669i \\\n\ 1.029567i 0.294291i 1.030472i 0.296102i 1.030472i 0.297008i 1.031378i 0.297008i \\\n\ 1.032283i 0.298819i 1.035906i 0.300630i 1.040433i 0.302441i 1.043150i 0.302441i \\\n\ 1.044055i 0.302441i 1.046772i 0.301535i -outline $tkxox(score_active_note) -fill {}\n\ ${score} create polygon 1.103819i 0.104134i 1.104724i 0.109567i 1.104724i 0.111378i \\\n\ 1.105630i 0.112283i 1.105630i 0.114094i 1.107441i 0.118622i 1.109252i 0.122244i \\\n\ 1.109252i 0.123150i 1.109252i 0.122244i 1.110157i 0.123150i 1.114685i 0.127677i \\\n\ 1.121024i 0.133110i 1.124646i 0.135827i 1.127362i 0.137638i 1.131890i 0.140354i \\\n\ 1.140039i 0.147598i 1.148189i 0.153937i 1.151811i 0.157559i 1.152717i 0.158465i \\\n\ 1.156339i 0.161181i 1.161772i 0.167520i 1.166299i 0.173858i 1.168110i 0.175669i \\\n\ 1.168110i 0.176575i 1.169016i 0.179291i 1.170827i 0.185630i 1.171732i 0.192874i \\\n\ 1.171732i 0.195591i 1.171732i 0.196496i 1.170827i 0.200118i 1.169016i 0.210079i \\\n\ 1.166299i 0.220039i 1.163583i 0.226378i 1.161772i 0.230906i 1.160866i 0.234528i \\\n\ 1.158150i 0.239961i 1.155433i 0.247205i 1.155433i 0.248110i 1.154528i 0.249016i \\\n\ 1.154528i 0.249921i 1.153622i 0.250827i 1.153622i 0.251732i 1.152717i 0.252638i \\\n\ 1.152717i 0.251732i 1.152717i 0.250827i 1.152717i 0.249921i 1.152717i 0.249016i \\\n\ 1.153622i 0.249016i 1.153622i 0.248110i 1.153622i 0.247205i 1.155433i 0.241772i \\\n\ 1.157244i 0.237244i 1.159055i 0.233622i 1.159961i 0.230000i 1.161772i 0.224567i \\\n\ 1.164488i 0.216417i 1.166299i 0.208268i 1.168110i 0.204646i 1.168110i 0.203740i \\\n\ 1.169016i 0.201024i 1.168110i 0.193780i 1.166299i 0.186535i 1.165394i 0.182913i \\\n\ 1.164488i 0.182008i 1.161772i 0.178386i 1.156339i 0.171142i 1.150000i 0.164803i \\\n\ 1.146378i 0.161181i 1.144567i 0.160276i 1.142756i 0.158465i 1.138228i 0.155748i \\\n\ 1.130079i 0.150315i 1.121024i 0.144882i 1.116496i 0.142165i 1.113780i 0.141260i \\\n\ 1.110157i 0.139449i 1.103819i 0.136732i 1.102913i 0.136732i 1.102008i 0.135827i \\\n\ 1.101102i 0.135827i 1.100197i 0.135827i 1.099291i 0.135827i 1.099291i 0.136732i \\\n\ 1.099291i 0.137638i 1.099291i 0.138543i 1.099291i 0.139449i 1.099291i 0.140354i \\\n\ 1.100197i 0.140354i 1.100197i 0.141260i 1.100197i 0.142165i 1.100197i 0.141260i \\\n\ 1.100197i 0.140354i 1.100197i 0.139449i 1.100197i 0.137638i 1.100197i 0.136732i \\\n\ 1.100197i 0.126772i 1.101102i 0.117717i 1.101102i 0.110472i 1.102008i 0.103228i \\\n\ 1.102008i 0.094173i 1.102913i 0.086929i 1.103819i 0.085118i 1.103819i 0.087835i \\\n\ 1.102913i 0.092362i 1.102913i 0.097795i -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 1.103819i 0.104134i 1.104724i 0.109567i 1.104724i 0.111378i \\\n\ 1.105630i 0.112283i 1.105630i 0.114094i 1.107441i 0.118622i 1.109252i 0.122244i \\\n\ 1.109252i 0.123150i 1.109252i 0.122244i 1.110157i 0.123150i 1.114685i 0.127677i \\\n\ 1.121024i 0.133110i 1.124646i 0.135827i 1.127362i 0.137638i 1.131890i 0.140354i \\\n\ 1.140039i 0.147598i 1.148189i 0.153937i 1.151811i 0.157559i 1.152717i 0.158465i \\\n\ 1.156339i 0.161181i 1.161772i 0.167520i 1.166299i 0.173858i 1.168110i 0.175669i \\\n\ 1.168110i 0.176575i 1.169016i 0.179291i 1.170827i 0.185630i 1.171732i 0.192874i \\\n\ 1.171732i 0.195591i 1.171732i 0.196496i 1.170827i 0.200118i 1.169016i 0.210079i \\\n\ 1.166299i 0.220039i 1.163583i 0.226378i 1.161772i 0.230906i 1.160866i 0.234528i \\\n\ 1.158150i 0.239961i 1.155433i 0.247205i 1.155433i 0.248110i 1.154528i 0.249016i \\\n\ 1.154528i 0.249921i 1.153622i 0.250827i 1.153622i 0.251732i 1.152717i 0.252638i \\\n\ 1.152717i 0.251732i 1.152717i 0.250827i 1.152717i 0.249921i 1.152717i 0.249016i \\\n\ 1.153622i 0.249016i 1.153622i 0.248110i 1.153622i 0.247205i 1.155433i 0.241772i \\\n\ 1.157244i 0.237244i 1.159055i 0.233622i 1.159961i 0.230000i 1.161772i 0.224567i \\\n\ 1.164488i 0.216417i 1.166299i 0.208268i 1.168110i 0.204646i 1.168110i 0.203740i \\\n\ 1.169016i 0.201024i 1.168110i 0.193780i 1.166299i 0.186535i 1.165394i 0.182913i \\\n\ 1.164488i 0.182008i 1.161772i 0.178386i 1.156339i 0.171142i 1.150000i 0.164803i \\\n\ 1.146378i 0.161181i 1.144567i 0.160276i 1.142756i 0.158465i 1.138228i 0.155748i \\\n\ 1.130079i 0.150315i 1.121024i 0.144882i 1.116496i 0.142165i 1.113780i 0.141260i \\\n\ 1.110157i 0.139449i 1.103819i 0.136732i 1.102913i 0.136732i 1.102008i 0.135827i \\\n\ 1.101102i 0.135827i 1.100197i 0.135827i 1.099291i 0.135827i 1.099291i 0.136732i \\\n\ 1.099291i 0.137638i 1.099291i 0.138543i 1.099291i 0.139449i 1.099291i 0.140354i \\\n\ 1.100197i 0.140354i 1.100197i 0.141260i 1.100197i 0.142165i 1.100197i 0.141260i \\\n\ 1.100197i 0.140354i 1.100197i 0.139449i 1.100197i 0.137638i 1.100197i 0.136732i \\\n\ 1.100197i 0.126772i 1.101102i 0.117717i 1.101102i 0.110472i 1.102008i 0.103228i \\\n\ 1.102008i 0.094173i 1.102913i 0.086929i 1.103819i 0.085118i 1.103819i 0.087835i \\\n\ 1.102913i 0.092362i 1.102913i 0.097795i -outline $tkxox(score_active_note) -fill {}\n\ ${score} create line 1.098386i 0.422874i 1.098386i 0.602165i -fill $tkxox(score_active_note)\n\ ${score} create polygon 1.054016i 0.640197i 1.061260i 0.639291i 1.064882i 0.638386i \\\n\ 1.066693i 0.638386i 1.071220i 0.637480i 1.078465i 0.634764i 1.085709i 0.632047i \\\n\ 1.088425i 0.630236i 1.089331i 0.629331i 1.092047i 0.628425i 1.097480i 0.623898i \\\n\ 1.102008i 0.619370i 1.103819i 0.617559i 1.104724i 0.616654i 1.106535i 0.613937i \\\n\ 1.107441i 0.609409i 1.107441i 0.605787i 1.107441i 0.603071i 1.106535i 0.602165i \\\n\ 1.106535i 0.601260i 1.104724i 0.599449i 1.101102i 0.596732i 1.095669i 0.594016i \\\n\ 1.092953i 0.594016i 1.091142i 0.593110i 1.087520i 0.593110i 1.079370i 0.593110i \\\n\ 1.071220i 0.594016i 1.066693i 0.594016i 1.064882i 0.594016i 1.061260i 0.594921i \\\n\ 1.054016i 0.597638i 1.047677i 0.600354i 1.045866i 0.602165i 1.045866i 0.603071i \\\n\ 1.044055i 0.604882i 1.040433i 0.608504i 1.036811i 0.611220i 1.035906i 0.612126i \\\n\ 1.035000i 0.612126i 1.034094i 0.613937i 1.032283i 0.616654i 1.030472i 0.620276i \\\n\ 1.029567i 0.622087i 1.028661i 0.622992i 1.028661i 0.624803i 1.028661i 0.628425i \\\n\ 1.029567i 0.631142i 1.030472i 0.632953i 1.030472i 0.633858i 1.031378i 0.633858i \\\n\ 1.032283i 0.635669i 1.035906i 0.637480i 1.040433i 0.639291i 1.043150i 0.640197i \\\n\ 1.044055i 0.640197i 1.046772i 0.640197i -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 1.054016i 0.640197i 1.061260i 0.639291i 1.064882i 0.638386i \\\n\ 1.066693i 0.638386i 1.071220i 0.637480i 1.078465i 0.634764i 1.085709i 0.632047i \\\n\ 1.088425i 0.630236i 1.089331i 0.629331i 1.092047i 0.628425i 1.097480i 0.623898i \\\n\ 1.102008i 0.619370i 1.103819i 0.617559i 1.104724i 0.616654i 1.106535i 0.613937i \\\n\ 1.107441i 0.609409i 1.107441i 0.605787i 1.107441i 0.603071i 1.106535i 0.602165i \\\n\ 1.106535i 0.601260i 1.104724i 0.599449i 1.101102i 0.596732i 1.095669i 0.594016i \\\n\ 1.092953i 0.594016i 1.091142i 0.593110i 1.087520i 0.593110i 1.079370i 0.593110i \\\n\ 1.071220i 0.594016i 1.066693i 0.594016i 1.064882i 0.594016i 1.061260i 0.594921i \\\n\ 1.054016i 0.597638i 1.047677i 0.600354i 1.045866i 0.602165i 1.045866i 0.603071i \\\n\ 1.044055i 0.604882i 1.040433i 0.608504i 1.036811i 0.611220i 1.035906i 0.612126i \\\n\ 1.035000i 0.612126i 1.034094i 0.613937i 1.032283i 0.616654i 1.030472i 0.620276i \\\n\ 1.029567i 0.622087i 1.028661i 0.622992i 1.028661i 0.624803i 1.028661i 0.628425i \\\n\ 1.029567i 0.631142i 1.030472i 0.632953i 1.030472i 0.633858i 1.031378i 0.633858i \\\n\ 1.032283i 0.635669i 1.035906i 0.637480i 1.040433i 0.639291i 1.043150i 0.640197i \\\n\ 1.044055i 0.640197i 1.046772i 0.640197i -outline $tkxox(score_active_note) -fill {}\n\ ${score} create polygon 1.103819i 0.441890i 1.104724i 0.447323i 1.104724i 0.449134i \\\n\ 1.105630i 0.450039i 1.105630i 0.451850i 1.107441i 0.456378i 1.109252i 0.460000i \\\n\ 1.110157i 0.460906i 1.114685i 0.464528i 1.121024i 0.469961i 1.124646i 0.472677i \\\n\ 1.127362i 0.474488i 1.131890i 0.477205i 1.140039i 0.484449i 1.148189i 0.490787i \\\n\ 1.151811i 0.493504i 1.152717i 0.494409i 1.156339i 0.498031i 1.161772i 0.504370i \\\n\ 1.166299i 0.511614i 1.168110i 0.514331i 1.168110i 0.515236i 1.169016i 0.517953i \\\n\ 1.170827i 0.525197i 1.171732i 0.532441i 1.171732i 0.535157i 1.170827i 0.538780i \\\n\ 1.169016i 0.547835i 1.166299i 0.557795i 1.163583i 0.564134i 1.161772i 0.568661i \\\n\ 1.160866i 0.572283i 1.158150i 0.577717i 1.155433i 0.584961i 1.155433i 0.585866i \\\n\ 1.154528i 0.586772i 1.154528i 0.587677i 1.153622i 0.588583i 1.153622i 0.589488i \\\n\ 1.152717i 0.590394i 1.152717i 0.589488i 1.152717i 0.588583i 1.152717i 0.587677i \\\n\ 1.152717i 0.586772i 1.153622i 0.586772i 1.153622i 0.585866i 1.153622i 0.584961i \\\n\ 1.155433i 0.578622i 1.157244i 0.574094i 1.159055i 0.570472i 1.159961i 0.566850i \\\n\ 1.161772i 0.561417i 1.164488i 0.553268i 1.166299i 0.545118i 1.168110i 0.542402i \\\n\ 1.169016i 0.539685i 1.168110i 0.532441i 1.166299i 0.524291i 1.165394i 0.520669i \\\n\ 1.164488i 0.519764i 1.161772i 0.516142i 1.156339i 0.507992i 1.150000i 0.501654i \\\n\ 1.146378i 0.498031i 1.144567i 0.496220i 1.142756i 0.495315i 1.138228i 0.492598i \\\n\ 1.130079i 0.487165i 1.121024i 0.481732i 1.116496i 0.479921i 1.113780i 0.479016i \\\n\ 1.110157i 0.477205i 1.103819i 0.474488i 1.102913i 0.474488i 1.102008i 0.473583i \\\n\ 1.101102i 0.473583i 1.100197i 0.473583i 1.099291i 0.473583i 1.099291i 0.474488i \\\n\ 1.099291i 0.475394i 1.099291i 0.476299i 1.099291i 0.477205i 1.099291i 0.478110i \\\n\ 1.100197i 0.479016i 1.100197i 0.479921i 1.100197i 0.480827i 1.100197i 0.479921i \\\n\ 1.100197i 0.479016i 1.100197i 0.478110i 1.100197i 0.477205i 1.100197i 0.475394i \\\n\ 1.100197i 0.474488i 1.100197i 0.464528i 1.101102i 0.455472i 1.101102i 0.447323i \\\n\ 1.102008i 0.440079i 1.102008i 0.431929i 1.102913i 0.423780i 1.103819i 0.421969i \\\n\ 1.103819i 0.424685i 1.102913i 0.430118i 1.102913i 0.435551i -outline {} -fill $tkxox(score_active_note) \\\n\ -width 0\n\ ${score} create polygon 1.103819i 0.441890i 1.104724i 0.447323i 1.104724i 0.449134i \\\n\ 1.105630i 0.450039i 1.105630i 0.451850i 1.107441i 0.456378i 1.109252i 0.460000i \\\n\ 1.110157i 0.460906i 1.114685i 0.464528i 1.121024i 0.469961i 1.124646i 0.472677i \\\n\ 1.127362i 0.474488i 1.131890i 0.477205i 1.140039i 0.484449i 1.148189i 0.490787i \\\n\ 1.151811i 0.493504i 1.152717i 0.494409i 1.156339i 0.498031i 1.161772i 0.504370i \\\n\ 1.166299i 0.511614i 1.168110i 0.514331i 1.168110i 0.515236i 1.169016i 0.517953i \\\n\ 1.170827i 0.525197i 1.171732i 0.532441i 1.171732i 0.535157i 1.170827i 0.538780i \\\n\ 1.169016i 0.547835i 1.166299i 0.557795i 1.163583i 0.564134i 1.161772i 0.568661i \\\n\ 1.160866i 0.572283i 1.158150i 0.577717i 1.155433i 0.584961i 1.155433i 0.585866i \\\n\ 1.154528i 0.586772i 1.154528i 0.587677i 1.153622i 0.588583i 1.153622i 0.589488i \\\n\ 1.152717i 0.590394i 1.152717i 0.589488i 1.152717i 0.588583i 1.152717i 0.587677i \\\n\ 1.152717i 0.586772i 1.153622i 0.586772i 1.153622i 0.585866i 1.153622i 0.584961i \\\n\ 1.155433i 0.578622i 1.157244i 0.574094i 1.159055i 0.570472i 1.159961i 0.566850i \\\n\ 1.161772i 0.561417i 1.164488i 0.553268i 1.166299i 0.545118i 1.168110i 0.542402i \\\n\ 1.169016i 0.539685i 1.168110i 0.532441i 1.166299i 0.524291i 1.165394i 0.520669i \\\n\ 1.164488i 0.519764i 1.161772i 0.516142i 1.156339i 0.507992i 1.150000i 0.501654i \\\n\ 1.146378i 0.498031i 1.144567i 0.496220i 1.142756i 0.495315i 1.138228i 0.492598i \\\n\ 1.130079i 0.487165i 1.121024i 0.481732i 1.116496i 0.479921i 1.113780i 0.479016i \\\n\ 1.110157i 0.477205i 1.103819i 0.474488i 1.102913i 0.474488i 1.102008i 0.473583i \\\n\ 1.101102i 0.473583i 1.100197i 0.473583i 1.099291i 0.473583i 1.099291i 0.474488i \\\n\ 1.099291i 0.475394i 1.099291i 0.476299i 1.099291i 0.477205i 1.099291i 0.478110i \\\n\ 1.100197i 0.479016i 1.100197i 0.479921i 1.100197i 0.480827i 1.100197i 0.479921i \\\n\ 1.100197i 0.479016i 1.100197i 0.478110i 1.100197i 0.477205i 1.100197i 0.475394i \\\n\ 1.100197i 0.474488i 1.100197i 0.464528i 1.101102i 0.455472i 1.101102i 0.447323i \\\n\ 1.102008i 0.440079i 1.102008i 0.431929i 1.102913i 0.423780i 1.103819i 0.421969i \\\n\ 1.103819i 0.424685i 1.102913i 0.430118i 1.102913i 0.435551i -outline $tkxox(score_active_note) -fill \\\n\ {}\n\ ${score} create line 1.101102i 0.721693i 1.101102i 0.927244i -fill $tkxox(score_active_note)\n\ ${score} create polygon 1.054921i 0.967992i 1.063071i 0.967087i 1.066693i 0.967087i \\\n\ 1.068504i 0.967087i 1.072126i 0.966181i 1.080276i 0.963465i 1.087520i 0.959843i \\\n\ 1.090236i 0.958937i 1.091142i 0.958031i 1.093858i 0.955315i 1.099291i 0.950787i \\\n\ 1.103819i 0.945354i 1.106535i 0.943543i 1.107441i 0.942638i 1.108346i 0.939921i \\\n\ 1.110157i 0.934488i 1.110157i 0.930866i 1.110157i 0.928150i 1.110157i 0.927244i \\\n\ 1.110157i 0.926339i 1.109252i 0.925433i 1.108346i 0.924528i 1.106535i 0.922717i \\\n\ 1.103819i 0.920000i 1.098386i 0.917283i 1.095669i 0.916378i 1.093858i 0.916378i \\\n\ 1.090236i 0.916378i 1.082087i 0.916378i 1.073031i 0.917283i 1.069409i 0.918189i \\\n\ 1.066693i 0.918189i 1.062165i 0.919094i 1.054921i 0.921811i 1.048583i 0.924528i \\\n\ 1.046772i 0.925433i 1.045866i 0.926339i 1.044055i 0.927244i 1.040433i 0.930866i \\\n\ 1.036811i 0.934488i 1.035906i 0.935394i 1.035000i 0.936299i 1.034094i 0.937205i \\\n\ 1.032283i 0.941732i 1.030472i 0.946260i 1.029567i 0.948071i 1.028661i 0.949882i \\\n\ 1.028661i 0.951693i 1.028661i 0.956220i 1.029567i 0.960748i 1.030472i 0.962559i \\\n\ 1.030472i 0.963465i 1.032283i 0.964370i 1.035906i 0.967087i 1.040433i 0.968898i \\\n\ 1.043150i 0.968898i 1.044961i 0.968898i 1.047677i 0.967992i -outline {} -fill $tkxox(score_active_note) \\\n\ -width 0\n\ ${score} create polygon 1.054921i 0.967992i 1.063071i 0.967087i 1.066693i 0.967087i \\\n\ 1.068504i 0.967087i 1.072126i 0.966181i 1.080276i 0.963465i 1.087520i 0.959843i \\\n\ 1.090236i 0.958937i 1.091142i 0.958031i 1.093858i 0.955315i 1.099291i 0.950787i \\\n\ 1.103819i 0.945354i 1.106535i 0.943543i 1.107441i 0.942638i 1.108346i 0.939921i \\\n\ 1.110157i 0.934488i 1.110157i 0.930866i 1.110157i 0.928150i 1.110157i 0.927244i \\\n\ 1.110157i 0.926339i 1.109252i 0.925433i 1.108346i 0.924528i 1.106535i 0.922717i \\\n\ 1.103819i 0.920000i 1.098386i 0.917283i 1.095669i 0.916378i 1.093858i 0.916378i \\\n\ 1.090236i 0.916378i 1.082087i 0.916378i 1.073031i 0.917283i 1.069409i 0.918189i \\\n\ 1.066693i 0.918189i 1.062165i 0.919094i 1.054921i 0.921811i 1.048583i 0.924528i \\\n\ 1.046772i 0.925433i 1.045866i 0.926339i 1.044055i 0.927244i 1.040433i 0.930866i \\\n\ 1.036811i 0.934488i 1.035906i 0.935394i 1.035000i 0.936299i 1.034094i 0.937205i \\\n\ 1.032283i 0.941732i 1.030472i 0.946260i 1.029567i 0.948071i 1.028661i 0.949882i \\\n\ 1.028661i 0.951693i 1.028661i 0.956220i 1.029567i 0.960748i 1.030472i 0.962559i \\\n\ 1.030472i 0.963465i 1.032283i 0.964370i 1.035906i 0.967087i 1.040433i 0.968898i \\\n\ 1.043150i 0.968898i 1.044961i 0.968898i 1.047677i 0.967992i -outline $tkxox(score_active_note) -fill \\\n\ {}\n\ ${score} create line 1.101102i 1.060354i 1.101102i 1.264094i -fill $tkxox(score_active_note)\n\ ${score} create polygon 1.054921i 1.306654i 1.063071i 1.305748i 1.066693i 1.305748i \\\n\ 1.068504i 1.304843i 1.072126i 1.303937i 1.080276i 1.301220i 1.087520i 1.297598i \\\n\ 1.090236i 1.295787i 1.091142i 1.295787i 1.093858i 1.293071i 1.099291i 1.288543i \\\n\ 1.103819i 1.283110i 1.106535i 1.281299i 1.107441i 1.280394i 1.108346i 1.277677i \\\n\ 1.110157i 1.272244i 1.110157i 1.268622i 1.110157i 1.265906i 1.110157i 1.265000i \\\n\ 1.110157i 1.264094i 1.109252i 1.263189i 1.108346i 1.262283i 1.106535i 1.260472i \\\n\ 1.103819i 1.257756i 1.098386i 1.255039i 1.095669i 1.253228i 1.093858i 1.253228i \\\n\ 1.090236i 1.252323i 1.082087i 1.252323i 1.073031i 1.253228i 1.069409i 1.254134i \\\n\ 1.066693i 1.255039i 1.062165i 1.256850i 1.054921i 1.259567i 1.048583i 1.262283i \\\n\ 1.046772i 1.263189i 1.045866i 1.264094i 1.044055i 1.265906i 1.040433i 1.268622i \\\n\ 1.036811i 1.272244i 1.035906i 1.273150i 1.035000i 1.273150i 1.034094i 1.274961i \\\n\ 1.032283i 1.278583i 1.030472i 1.283110i 1.029567i 1.284921i 1.028661i 1.286732i \\\n\ 1.028661i 1.288543i 1.028661i 1.293071i 1.029567i 1.297598i 1.030472i 1.299409i \\\n\ 1.030472i 1.300315i 1.032283i 1.301220i 1.035906i 1.303937i 1.040433i 1.305748i \\\n\ 1.043150i 1.306654i 1.044961i 1.306654i 1.047677i 1.306654i -outline {} -fill $tkxox(score_active_note) \\\n\ -width 0\n\ ${score} create polygon 1.054921i 1.306654i 1.063071i 1.305748i 1.066693i 1.305748i \\\n\ 1.068504i 1.304843i 1.072126i 1.303937i 1.080276i 1.301220i 1.087520i 1.297598i \\\n\ 1.090236i 1.295787i 1.091142i 1.295787i 1.093858i 1.293071i 1.099291i 1.288543i \\\n\ 1.103819i 1.283110i 1.106535i 1.281299i 1.107441i 1.280394i 1.108346i 1.277677i \\\n\ 1.110157i 1.272244i 1.110157i 1.268622i 1.110157i 1.265906i 1.110157i 1.265000i \\\n\ 1.110157i 1.264094i 1.109252i 1.263189i 1.108346i 1.262283i 1.106535i 1.260472i \\\n\ 1.103819i 1.257756i 1.098386i 1.255039i 1.095669i 1.253228i 1.093858i 1.253228i \\\n\ 1.090236i 1.252323i 1.082087i 1.252323i 1.073031i 1.253228i 1.069409i 1.254134i \\\n\ 1.066693i 1.255039i 1.062165i 1.256850i 1.054921i 1.259567i 1.048583i 1.262283i \\\n\ 1.046772i 1.263189i 1.045866i 1.264094i 1.044055i 1.265906i 1.040433i 1.268622i \\\n\ 1.036811i 1.272244i 1.035906i 1.273150i 1.035000i 1.273150i 1.034094i 1.274961i \\\n\ 1.032283i 1.278583i 1.030472i 1.283110i 1.029567i 1.284921i 1.028661i 1.286732i \\\n\ 1.028661i 1.288543i 1.028661i 1.293071i 1.029567i 1.297598i 1.030472i 1.299409i \\\n\ 1.030472i 1.300315i 1.032283i 1.301220i 1.035906i 1.303937i 1.040433i 1.305748i \\\n\ 1.043150i 1.306654i 1.044961i 1.306654i 1.047677i 1.306654i -outline $tkxox(score_active_note) -fill \\\n\ {}\n\ ${score} create line 11.014646i 0.422874i 11.014646i 0.602165i -fill $tkxox(score_passive_note)\n\ ${score} create polygon 11.020079i 0.441890i 11.020984i 0.447323i 11.020984i 0.449134i \\\n\ 11.021890i 0.450039i 11.021890i 0.451850i 11.023701i 0.456378i 11.025512i 0.460000i \\\n\ 11.026417i 0.460906i 11.030945i 0.464528i 11.037283i 0.469961i 11.040906i 0.472677i \\\n\ 11.043622i 0.474488i 11.048150i 0.477205i 11.056299i 0.484449i 11.064449i 0.490787i \\\n\ 11.068071i 0.493504i 11.068976i 0.494409i 11.072598i 0.498031i 11.078031i 0.504370i \\\n\ 11.082559i 0.511614i 11.084370i 0.514331i 11.084370i 0.515236i 11.085276i 0.517953i \\\n\ 11.087087i 0.525197i 11.087992i 0.532441i 11.088898i 0.535157i 11.087992i 0.538780i \\\n\ 11.086181i 0.547835i 11.083465i 0.557795i 11.080748i 0.564134i 11.078937i 0.568661i \\\n\ 11.077126i 0.572283i 11.074409i 0.577717i 11.071693i 0.584961i 11.071693i 0.585866i \\\n\ 11.070787i 0.586772i 11.070787i 0.587677i 11.069882i 0.587677i 11.069882i 0.588583i \\\n\ 11.069882i 0.589488i 11.068976i 0.589488i 11.068976i 0.590394i 11.068976i 0.589488i \\\n\ 11.068976i 0.588583i 11.068976i 0.587677i 11.068976i 0.586772i 11.069882i 0.586772i \\\n\ 11.069882i 0.585866i 11.069882i 0.584961i 11.071693i 0.578622i 11.073504i 0.574094i \\\n\ 11.075315i 0.570472i 11.077126i 0.566850i 11.078937i 0.561417i 11.081654i 0.553268i \\\n\ 11.084370i 0.545118i 11.085276i 0.542402i 11.086181i 0.542402i 11.086181i 0.539685i \\\n\ 11.085276i 0.532441i 11.083465i 0.524291i 11.081654i 0.520669i 11.080748i 0.519764i \\\n\ 11.078937i 0.516142i 11.072598i 0.507992i 11.066260i 0.501654i 11.062638i 0.498031i \\\n\ 11.060827i 0.496220i 11.058110i 0.495315i 11.054488i 0.492598i 11.046339i 0.487165i \\\n\ 11.037283i 0.481732i 11.032756i 0.479921i 11.030039i 0.479016i 11.026417i 0.477205i \\\n\ 11.020079i 0.474488i 11.019173i 0.474488i 11.018268i 0.473583i 11.017362i 0.473583i \\\n\ 11.016457i 0.473583i 11.015551i 0.473583i 11.015551i 0.474488i 11.015551i 0.475394i \\\n\ 11.015551i 0.476299i 11.015551i 0.477205i 11.015551i 0.478110i 11.016457i 0.479016i \\\n\ 11.016457i 0.479921i 11.016457i 0.480827i 11.016457i 0.479921i 11.016457i 0.479016i \\\n\ 11.016457i 0.478110i 11.016457i 0.477205i 11.016457i 0.475394i 11.016457i 0.474488i \\\n\ 11.016457i 0.464528i 11.017362i 0.455472i 11.017362i 0.447323i 11.018268i 0.440079i \\\n\ 11.018268i 0.431929i 11.019173i 0.423780i 11.020079i 0.421969i 11.020079i 0.424685i \\\n\ 11.019173i 0.430118i 11.019173i 0.435551i -outline {} -fill $tkxox(score_passive_note) -width 0\n\ ${score} create polygon 11.020079i 0.441890i 11.020984i 0.447323i 11.020984i 0.449134i \\\n\ 11.021890i 0.450039i 11.021890i 0.451850i 11.023701i 0.456378i 11.025512i 0.460000i \\\n\ 11.026417i 0.460906i 11.030945i 0.464528i 11.037283i 0.469961i 11.040906i 0.472677i \\\n\ 11.043622i 0.474488i 11.048150i 0.477205i 11.056299i 0.484449i 11.064449i 0.490787i \\\n\ 11.068071i 0.493504i 11.068976i 0.494409i 11.072598i 0.498031i 11.078031i 0.504370i \\\n\ 11.082559i 0.511614i 11.084370i 0.514331i 11.084370i 0.515236i 11.085276i 0.517953i \\\n\ 11.087087i 0.525197i 11.087992i 0.532441i 11.088898i 0.535157i 11.087992i 0.538780i \\\n\ 11.086181i 0.547835i 11.083465i 0.557795i 11.080748i 0.564134i 11.078937i 0.568661i \\\n\ 11.077126i 0.572283i 11.074409i 0.577717i 11.071693i 0.584961i 11.071693i 0.585866i \\\n\ 11.070787i 0.586772i 11.070787i 0.587677i 11.069882i 0.587677i 11.069882i 0.588583i \\\n\ 11.069882i 0.589488i 11.068976i 0.589488i 11.068976i 0.590394i 11.068976i 0.589488i \\\n\ 11.068976i 0.588583i 11.068976i 0.587677i 11.068976i 0.586772i 11.069882i 0.586772i \\\n\ 11.069882i 0.585866i 11.069882i 0.584961i 11.071693i 0.578622i 11.073504i 0.574094i \\\n\ 11.075315i 0.570472i 11.077126i 0.566850i 11.078937i 0.561417i 11.081654i 0.553268i \\\n\ 11.084370i 0.545118i 11.085276i 0.542402i 11.086181i 0.542402i 11.086181i 0.539685i \\\n\ 11.085276i 0.532441i 11.083465i 0.524291i 11.081654i 0.520669i 11.080748i 0.519764i \\\n\ 11.078937i 0.516142i 11.072598i 0.507992i 11.066260i 0.501654i 11.062638i 0.498031i \\\n\ 11.060827i 0.496220i 11.058110i 0.495315i 11.054488i 0.492598i 11.046339i 0.487165i \\\n\ 11.037283i 0.481732i 11.032756i 0.479921i 11.030039i 0.479016i 11.026417i 0.477205i \\\n\ 11.020079i 0.474488i 11.019173i 0.474488i 11.018268i 0.473583i 11.017362i 0.473583i \\\n\ 11.016457i 0.473583i 11.015551i 0.473583i 11.015551i 0.474488i 11.015551i 0.475394i \\\n\ 11.015551i 0.476299i 11.015551i 0.477205i 11.015551i 0.478110i 11.016457i 0.479016i \\\n\ 11.016457i 0.479921i 11.016457i 0.480827i 11.016457i 0.479921i 11.016457i 0.479016i \\\n\ 11.016457i 0.478110i 11.016457i 0.477205i 11.016457i 0.475394i 11.016457i 0.474488i \\\n\ 11.016457i 0.464528i 11.017362i 0.455472i 11.017362i 0.447323i 11.018268i 0.440079i \\\n\ 11.018268i 0.431929i 11.019173i 0.423780i 11.020079i 0.421969i 11.020079i 0.424685i \\\n\ 11.019173i 0.430118i 11.019173i 0.435551i -outline $tkxox(score_passive_note) -fill {}\n\ ${score} create polygon 10.970276i 0.640197i 10.977520i 0.639291i 10.980236i 0.638386i \\\n\ 10.982047i 0.638386i 10.985669i 0.637480i 10.992913i 0.634764i 11.000157i 0.632047i \\\n\ 11.003780i 0.630236i 11.005591i 0.629331i 11.008307i 0.628425i 11.013740i 0.623898i \\\n\ 11.018268i 0.619370i 11.020984i 0.617559i 11.020984i 0.616654i 11.022795i 0.613937i \\\n\ 11.023701i 0.609409i 11.023701i 0.606693i 11.023701i 0.603976i 11.023701i 0.603071i \\\n\ 11.023701i 0.602165i 11.022795i 0.601260i 11.022795i 0.600354i 11.020984i 0.598543i \\\n\ 11.017362i 0.596732i 11.011024i 0.594016i 11.007402i 0.594016i 11.005591i 0.593110i \\\n\ 11.001063i 0.593110i 10.992913i 0.593110i 10.984764i 0.594016i 10.981142i 0.594016i \\\n\ 10.980236i 0.594016i 10.976614i 0.594921i 10.970276i 0.597638i 10.963937i 0.600354i \\\n\ 10.962126i 0.602165i 10.961220i 0.603071i 10.959409i 0.604882i 10.955787i 0.608504i \\\n\ 10.952165i 0.611220i 10.951260i 0.612126i 10.950354i 0.613937i 10.948543i 0.616654i \\\n\ 10.946732i 0.620276i 10.945827i 0.622087i 10.944921i 0.622992i 10.944921i 0.624803i \\\n\ 10.944921i 0.628425i 10.945827i 0.631142i 10.946732i 0.632953i 10.946732i 0.633858i \\\n\ 10.947638i 0.633858i 10.948543i 0.635669i 10.952165i 0.637480i 10.956693i 0.639291i \\\n\ 10.959409i 0.640197i 10.960315i 0.640197i 10.963937i 0.640197i -outline {} -fill \\\n\ $tkxox(score_passive_note) -width 0\n\ ${score} create polygon 10.970276i 0.640197i 10.977520i 0.639291i 10.980236i 0.638386i \\\n\ 10.982047i 0.638386i 10.985669i 0.637480i 10.992913i 0.634764i 11.000157i 0.632047i \\\n\ 11.003780i 0.630236i 11.005591i 0.629331i 11.008307i 0.628425i 11.013740i 0.623898i \\\n\ 11.018268i 0.619370i 11.020984i 0.617559i 11.020984i 0.616654i 11.022795i 0.613937i \\\n\ 11.023701i 0.609409i 11.023701i 0.606693i 11.023701i 0.603976i 11.023701i 0.603071i \\\n\ 11.023701i 0.602165i 11.022795i 0.601260i 11.022795i 0.600354i 11.020984i 0.598543i \\\n\ 11.017362i 0.596732i 11.011024i 0.594016i 11.007402i 0.594016i 11.005591i 0.593110i \\\n\ 11.001063i 0.593110i 10.992913i 0.593110i 10.984764i 0.594016i 10.981142i 0.594016i \\\n\ 10.980236i 0.594016i 10.976614i 0.594921i 10.970276i 0.597638i 10.963937i 0.600354i \\\n\ 10.962126i 0.602165i 10.961220i 0.603071i 10.959409i 0.604882i 10.955787i 0.608504i \\\n\ 10.952165i 0.611220i 10.951260i 0.612126i 10.950354i 0.613937i 10.948543i 0.616654i \\\n\ 10.946732i 0.620276i 10.945827i 0.622087i 10.944921i 0.622992i 10.944921i 0.624803i \\\n\ 10.944921i 0.628425i 10.945827i 0.631142i 10.946732i 0.632953i 10.946732i 0.633858i \\\n\ 10.947638i 0.633858i 10.948543i 0.635669i 10.952165i 0.637480i 10.956693i 0.639291i \\\n\ 10.959409i 0.640197i 10.960315i 0.640197i 10.963937i 0.640197i -outline $tkxox(score_passive_note) \\\n\ -fill {}\n\ ${score} create line 10.330079i 0.422874i 10.330079i 0.602165i -fill $tkxox(score_active_note)\n\ ${score} create polygon 10.285709i 0.640197i 10.293858i 0.639291i 10.297480i 0.638386i \\\n\ 10.299291i 0.638386i 10.302913i 0.637480i 10.311063i 0.634764i 10.318307i 0.632047i \\\n\ 10.321024i 0.630236i 10.321929i 0.629331i 10.323740i 0.628425i 10.329173i 0.623898i \\\n\ 10.333701i 0.619370i 10.335512i 0.617559i 10.336417i 0.616654i 10.338228i 0.613937i \\\n\ 10.339134i 0.609409i 10.339134i 0.605787i 10.339134i 0.603071i 10.338228i 0.602165i \\\n\ 10.338228i 0.601260i 10.336417i 0.599449i 10.332795i 0.596732i 10.327362i 0.594016i \\\n\ 10.324646i 0.594016i 10.322835i 0.593110i 10.320118i 0.593110i 10.311969i 0.593110i \\\n\ 10.303819i 0.594016i 10.299291i 0.594016i 10.297480i 0.594016i 10.292953i 0.594921i \\\n\ 10.285709i 0.597638i 10.279370i 0.600354i 10.277559i 0.602165i 10.276654i 0.603071i \\\n\ 10.274843i 0.604882i 10.271220i 0.608504i 10.267598i 0.611220i 10.266693i 0.612126i \\\n\ 10.265787i 0.613937i 10.263976i 0.616654i 10.262165i 0.620276i 10.261260i 0.622087i \\\n\ 10.261260i 0.622992i 10.261260i 0.624803i 10.261260i 0.628425i 10.262165i 0.632047i \\\n\ 10.263071i 0.632953i 10.263071i 0.633858i 10.263976i 0.634764i 10.267598i 0.637480i \\\n\ 10.272126i 0.639291i 10.274843i 0.640197i 10.275748i 0.640197i 10.278465i 0.640197i \\\n\ -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 10.285709i 0.640197i 10.293858i 0.639291i 10.297480i 0.638386i \\\n\ 10.299291i 0.638386i 10.302913i 0.637480i 10.311063i 0.634764i 10.318307i 0.632047i \\\n\ 10.321024i 0.630236i 10.321929i 0.629331i 10.323740i 0.628425i 10.329173i 0.623898i \\\n\ 10.333701i 0.619370i 10.335512i 0.617559i 10.336417i 0.616654i 10.338228i 0.613937i \\\n\ 10.339134i 0.609409i 10.339134i 0.605787i 10.339134i 0.603071i 10.338228i 0.602165i \\\n\ 10.338228i 0.601260i 10.336417i 0.599449i 10.332795i 0.596732i 10.327362i 0.594016i \\\n\ 10.324646i 0.594016i 10.322835i 0.593110i 10.320118i 0.593110i 10.311969i 0.593110i \\\n\ 10.303819i 0.594016i 10.299291i 0.594016i 10.297480i 0.594016i 10.292953i 0.594921i \\\n\ 10.285709i 0.597638i 10.279370i 0.600354i 10.277559i 0.602165i 10.276654i 0.603071i \\\n\ 10.274843i 0.604882i 10.271220i 0.608504i 10.267598i 0.611220i 10.266693i 0.612126i \\\n\ 10.265787i 0.613937i 10.263976i 0.616654i 10.262165i 0.620276i 10.261260i 0.622087i \\\n\ 10.261260i 0.622992i 10.261260i 0.624803i 10.261260i 0.628425i 10.262165i 0.632047i \\\n\ 10.263071i 0.632953i 10.263071i 0.633858i 10.263976i 0.634764i 10.267598i 0.637480i \\\n\ 10.272126i 0.639291i 10.274843i 0.640197i 10.275748i 0.640197i 10.278465i 0.640197i \\\n\ -outline $tkxox(score_active_note) -fill {}\n\ ${score} create polygon 10.335512i 0.441890i 10.336417i 0.447323i 10.336417i 0.449134i \\\n\ 10.336417i 0.450039i 10.337323i 0.451850i 10.339134i 0.456378i 10.340945i 0.460000i \\\n\ 10.341850i 0.460000i 10.340945i 0.460000i 10.342756i 0.460906i 10.347283i 0.464528i \\\n\ 10.353622i 0.469961i 10.357244i 0.472677i 10.359961i 0.474488i 10.364488i 0.477205i \\\n\ 10.372638i 0.484449i 10.379882i 0.490787i 10.383504i 0.493504i 10.385315i 0.494409i \\\n\ 10.388031i 0.498031i 10.393465i 0.504370i 10.397992i 0.511614i 10.399803i 0.514331i \\\n\ 10.400709i 0.515236i 10.401614i 0.517953i 10.403425i 0.525197i 10.404331i 0.532441i \\\n\ 10.404331i 0.535157i 10.403425i 0.538780i 10.401614i 0.547835i 10.398898i 0.557795i \\\n\ 10.396181i 0.564134i 10.394370i 0.568661i 10.392559i 0.572283i 10.389843i 0.577717i \\\n\ 10.387126i 0.584961i 10.387126i 0.585866i 10.386220i 0.586772i 10.386220i 0.587677i \\\n\ 10.385315i 0.587677i 10.385315i 0.588583i 10.385315i 0.589488i 10.384409i 0.589488i \\\n\ 10.384409i 0.590394i 10.384409i 0.589488i 10.384409i 0.588583i 10.384409i 0.587677i \\\n\ 10.384409i 0.586772i 10.385315i 0.586772i 10.385315i 0.585866i 10.385315i 0.584961i \\\n\ 10.387126i 0.578622i 10.388937i 0.574094i 10.390748i 0.570472i 10.392559i 0.566850i \\\n\ 10.394370i 0.561417i 10.397087i 0.553268i 10.399803i 0.545118i 10.400709i 0.542402i \\\n\ 10.401614i 0.542402i 10.401614i 0.539685i 10.400709i 0.532441i 10.398898i 0.524291i \\\n\ 10.397087i 0.520669i 10.396181i 0.519764i 10.394370i 0.516142i 10.388031i 0.507992i \\\n\ 10.381693i 0.501654i 10.378071i 0.498031i 10.376260i 0.496220i 10.374449i 0.495315i \\\n\ 10.370827i 0.492598i 10.362677i 0.487165i 10.353622i 0.481732i 10.349094i 0.479921i \\\n\ 10.346378i 0.479016i 10.341850i 0.477205i 10.335512i 0.474488i 10.334606i 0.474488i \\\n\ 10.333701i 0.473583i 10.332795i 0.473583i 10.331890i 0.473583i 10.330984i 0.473583i \\\n\ 10.330984i 0.474488i 10.330984i 0.475394i 10.330984i 0.476299i 10.330984i 0.477205i \\\n\ 10.330984i 0.478110i 10.331890i 0.479016i 10.331890i 0.479921i 10.331890i 0.480827i \\\n\ 10.331890i 0.479921i 10.331890i 0.479016i 10.331890i 0.478110i 10.331890i 0.477205i \\\n\ 10.331890i 0.475394i 10.331890i 0.474488i 10.331890i 0.464528i 10.332795i 0.455472i \\\n\ 10.332795i 0.447323i 10.333701i 0.440079i 10.333701i 0.431929i 10.334606i 0.423780i \\\n\ 10.335512i 0.421969i 10.335512i 0.424685i 10.334606i 0.430118i 10.334606i 0.435551i \\\n\ -outline {} -fill $tkxox(score_active_note) -width 0\n\ ${score} create polygon 10.335512i 0.441890i 10.336417i 0.447323i 10.336417i 0.449134i \\\n\ 10.336417i 0.450039i 10.337323i 0.451850i 10.339134i 0.456378i 10.340945i 0.460000i \\\n\ 10.341850i 0.460000i 10.340945i 0.460000i 10.342756i 0.460906i 10.347283i 0.464528i \\\n\ 10.353622i 0.469961i 10.357244i 0.472677i 10.359961i 0.474488i 10.364488i 0.477205i \\\n\ 10.372638i 0.484449i 10.379882i 0.490787i 10.383504i 0.493504i 10.385315i 0.494409i \\\n\ 10.388031i 0.498031i 10.393465i 0.504370i 10.397992i 0.511614i 10.399803i 0.514331i \\\n\ 10.400709i 0.515236i 10.401614i 0.517953i 10.403425i 0.525197i 10.404331i 0.532441i \\\n\ 10.404331i 0.535157i 10.403425i 0.538780i 10.401614i 0.547835i 10.398898i 0.557795i \\\n\ 10.396181i 0.564134i 10.394370i 0.568661i 10.392559i 0.572283i 10.389843i 0.577717i \\\n\ 10.387126i 0.584961i 10.387126i 0.585866i 10.386220i 0.586772i 10.386220i 0.587677i \\\n\ 10.385315i 0.587677i 10.385315i 0.588583i 10.385315i 0.589488i 10.384409i 0.589488i \\\n\ 10.384409i 0.590394i 10.384409i 0.589488i 10.384409i 0.588583i 10.384409i 0.587677i \\\n\ 10.384409i 0.586772i 10.385315i 0.586772i 10.385315i 0.585866i 10.385315i 0.584961i \\\n\ 10.387126i 0.578622i 10.388937i 0.574094i 10.390748i 0.570472i 10.392559i 0.566850i \\\n\ 10.394370i 0.561417i 10.397087i 0.553268i 10.399803i 0.545118i 10.400709i 0.542402i \\\n\ 10.401614i 0.542402i 10.401614i 0.539685i 10.400709i 0.532441i 10.398898i 0.524291i \\\n\ 10.397087i 0.520669i 10.396181i 0.519764i 10.394370i 0.516142i 10.388031i 0.507992i \\\n\ 10.381693i 0.501654i 10.378071i 0.498031i 10.376260i 0.496220i 10.374449i 0.495315i \\\n\ 10.370827i 0.492598i 10.362677i 0.487165i 10.353622i 0.481732i 10.349094i 0.479921i \\\n\ 10.346378i 0.479016i 10.341850i 0.477205i 10.335512i 0.474488i 10.334606i 0.474488i \\\n\ 10.333701i 0.473583i 10.332795i 0.473583i 10.331890i 0.473583i 10.330984i 0.473583i \\\n\ 10.330984i 0.474488i 10.330984i 0.475394i 10.330984i 0.476299i 10.330984i 0.477205i \\\n\ 10.330984i 0.478110i 10.331890i 0.479016i 10.331890i 0.479921i 10.331890i 0.480827i \\\n\ 10.331890i 0.479921i 10.331890i 0.479016i 10.331890i 0.478110i 10.331890i 0.477205i \\\n\ 10.331890i 0.475394i 10.331890i 0.474488i 10.331890i 0.464528i 10.332795i 0.455472i \\\n\ 10.332795i 0.447323i 10.333701i 0.440079i 10.333701i 0.431929i 10.334606i 0.423780i \\\n\ 10.335512i 0.421969i 10.335512i 0.424685i 10.334606i 0.430118i 10.334606i 0.435551i \\\n\ -outline $tkxox(score_active_note) -fill {}\n\ ${score} create line 10.332795i 0.086024i 10.332795i 0.266220i -fill $tkxox(score_passive_note)\n\ ${score} create polygon 10.338228i 0.104134i 10.339134i 0.109567i 10.339134i 0.111378i \\\n\ 10.339134i 0.112283i 10.340039i 0.114094i 10.341850i 0.118622i 10.343661i 0.122244i \\\n\ 10.344567i 0.123150i 10.343661i 0.122244i 10.345472i 0.123150i 10.350000i 0.127677i \\\n\ 10.356339i 0.133110i 10.359961i 0.135827i 10.362677i 0.137638i 10.367205i 0.140354i \\\n\ 10.375354i 0.147598i 10.382598i 0.153937i 10.386220i 0.157559i 10.388031i 0.158465i \\\n\ 10.390748i 0.161181i 10.396181i 0.167520i 10.400709i 0.173858i 10.402520i 0.175669i \\\n\ 10.402520i 0.176575i 10.403425i 0.179291i 10.405236i 0.185630i 10.406142i 0.192874i \\\n\ 10.406142i 0.195591i 10.406142i 0.196496i 10.405236i 0.200118i 10.403425i 0.210079i \\\n\ 10.400709i 0.220039i 10.397992i 0.226378i 10.396181i 0.230906i 10.395276i 0.234528i \\\n\ 10.392559i 0.239961i 10.389843i 0.247205i 10.389843i 0.248110i 10.388937i 0.249016i \\\n\ 10.388937i 0.249921i 10.388031i 0.250827i 10.388031i 0.251732i 10.387126i 0.252638i \\\n\ 10.387126i 0.251732i 10.387126i 0.250827i 10.387126i 0.249921i 10.387126i 0.249016i \\\n\ 10.388031i 0.249016i 10.388031i 0.248110i 10.388031i 0.247205i 10.389843i 0.241772i \\\n\ 10.391654i 0.237244i 10.393465i 0.233622i 10.395276i 0.230000i 10.397087i 0.224567i \\\n\ 10.399803i 0.216417i 10.402520i 0.208268i 10.403425i 0.204646i 10.404331i 0.203740i \\\n\ 10.404331i 0.201024i 10.403425i 0.193780i 10.400709i 0.186535i 10.399803i 0.182913i \\\n\ 10.398898i 0.182008i 10.396181i 0.178386i 10.389843i 0.171142i 10.383504i 0.164803i \\\n\ 10.379882i 0.161181i 10.378071i 0.160276i 10.376260i 0.158465i 10.371732i 0.155748i \\\n\ 10.364488i 0.150315i 10.355433i 0.144882i 10.350906i 0.142165i 10.348189i 0.141260i \\\n\ 10.344567i 0.139449i 10.338228i 0.136732i 10.337323i 0.136732i 10.336417i 0.135827i \\\n\ 10.335512i 0.135827i 10.334606i 0.135827i 10.333701i 0.135827i 10.333701i 0.136732i \\\n\ 10.333701i 0.137638i 10.333701i 0.138543i 10.333701i 0.139449i 10.333701i 0.140354i \\\n\ 10.334606i 0.140354i 10.334606i 0.141260i 10.334606i 0.142165i 10.334606i 0.141260i \\\n\ 10.334606i 0.140354i 10.334606i 0.139449i 10.334606i 0.137638i 10.334606i 0.136732i \\\n\ 10.334606i 0.126772i 10.335512i 0.117717i 10.335512i 0.110472i 10.336417i 0.103228i \\\n\ 10.336417i 0.094173i 10.337323i 0.086929i 10.338228i 0.085118i 10.338228i 0.087835i \\\n\ 10.337323i 0.092362i 10.337323i 0.097795i -outline {} -fill $tkxox(score_passive_note) -width 0\n\ ${score} create polygon 10.338228i 0.104134i 10.339134i 0.109567i 10.339134i 0.111378i \\\n\ 10.339134i 0.112283i 10.340039i 0.114094i 10.341850i 0.118622i 10.343661i 0.122244i \\\n\ 10.344567i 0.123150i 10.343661i 0.122244i 10.345472i 0.123150i 10.350000i 0.127677i \\\n\ 10.356339i 0.133110i 10.359961i 0.135827i 10.362677i 0.137638i 10.367205i 0.140354i \\\n\ 10.375354i 0.147598i 10.382598i 0.153937i 10.386220i 0.157559i 10.388031i 0.158465i \\\n\ 10.390748i 0.161181i 10.396181i 0.167520i 10.400709i 0.173858i 10.402520i 0.175669i \\\n\ 10.402520i 0.176575i 10.403425i 0.179291i 10.405236i 0.185630i 10.406142i 0.192874i \\\n\ 10.406142i 0.195591i 10.406142i 0.196496i 10.405236i 0.200118i 10.403425i 0.210079i \\\n\ 10.400709i 0.220039i 10.397992i 0.226378i 10.396181i 0.230906i 10.395276i 0.234528i \\\n\ 10.392559i 0.239961i 10.389843i 0.247205i 10.389843i 0.248110i 10.388937i 0.249016i \\\n\ 10.388937i 0.249921i 10.388031i 0.250827i 10.388031i 0.251732i 10.387126i 0.252638i \\\n\ 10.387126i 0.251732i 10.387126i 0.250827i 10.387126i 0.249921i 10.387126i 0.249016i \\\n\ 10.388031i 0.249016i 10.388031i 0.248110i 10.388031i 0.247205i 10.389843i 0.241772i \\\n\ 10.391654i 0.237244i 10.393465i 0.233622i 10.395276i 0.230000i 10.397087i 0.224567i \\\n\ 10.399803i 0.216417i 10.402520i 0.208268i 10.403425i 0.204646i 10.404331i 0.203740i \\\n\ 10.404331i 0.201024i 10.403425i 0.193780i 10.400709i 0.186535i 10.399803i 0.182913i \\\n\ 10.398898i 0.182008i 10.396181i 0.178386i 10.389843i 0.171142i 10.383504i 0.164803i \\\n\ 10.379882i 0.161181i 10.378071i 0.160276i 10.376260i 0.158465i 10.371732i 0.155748i \\\n\ 10.364488i 0.150315i 10.355433i 0.144882i 10.350906i 0.142165i 10.348189i 0.141260i \\\n\ 10.344567i 0.139449i 10.338228i 0.136732i 10.337323i 0.136732i 10.336417i 0.135827i \\\n\ 10.335512i 0.135827i 10.334606i 0.135827i 10.333701i 0.135827i 10.333701i 0.136732i \\\n\ 10.333701i 0.137638i 10.333701i 0.138543i 10.333701i 0.139449i 10.333701i 0.140354i \\\n\ 10.334606i 0.140354i 10.334606i 0.141260i 10.334606i 0.142165i 10.334606i 0.141260i \\\n\ 10.334606i 0.140354i 10.334606i 0.139449i 10.334606i 0.137638i 10.334606i 0.136732i \\\n\ 10.334606i 0.126772i 10.335512i 0.117717i 10.335512i 0.110472i 10.336417i 0.103228i \\\n\ 10.336417i 0.094173i 10.337323i 0.086929i 10.338228i 0.085118i 10.338228i 0.087835i \\\n\ 10.337323i 0.092362i 10.337323i 0.097795i -outline $tkxox(score_passive_note) -fill {}\n\ ${score} create polygon 10.288425i 0.301535i 10.295669i 0.300630i 10.299291i 0.300630i \\\n\ 10.301102i 0.300630i 10.305630i 0.299724i 10.312874i 0.297913i 10.320118i 0.295197i \\\n\ 10.322835i 0.293386i 10.323740i 0.293386i 10.326457i 0.291575i 10.331890i 0.287047i \\\n\ 10.336417i 0.282520i 10.338228i 0.280709i 10.339134i 0.279803i 10.340945i 0.277087i \\\n\ 10.341850i 0.272559i 10.341850i 0.268937i 10.341850i 0.266220i 10.340945i 0.265315i \\\n\ 10.340945i 0.264409i 10.339134i 0.262598i 10.335512i 0.259882i 10.330079i 0.257165i \\\n\ 10.327362i 0.256260i 10.325551i 0.256260i 10.321929i 0.255354i 10.313780i 0.255354i \\\n\ 10.305630i 0.256260i 10.301102i 0.256260i 10.299291i 0.257165i 10.295669i 0.258071i \\\n\ 10.288425i 0.260787i 10.282087i 0.263504i 10.280276i 0.265315i 10.279370i 0.266220i \\\n\ 10.277559i 0.268031i 10.273937i 0.271654i 10.270315i 0.274370i 10.269409i 0.275276i \\\n\ 10.268504i 0.276181i 10.266693i 0.278898i 10.264882i 0.282520i 10.263976i 0.284331i \\\n\ 10.263071i 0.285236i 10.263071i 0.287047i 10.263071i 0.290669i 10.263976i 0.294291i \\\n\ 10.264882i 0.296102i 10.264882i 0.297008i 10.265787i 0.297008i 10.266693i 0.298819i \\\n\ 10.270315i 0.300630i 10.274843i 0.302441i 10.277559i 0.302441i 10.278465i 0.302441i \\\n\ 10.281181i 0.301535i -outline {} -fill $tkxox(score_passive_note) -width 0\n\ ${score} create polygon 10.288425i 0.301535i 10.295669i 0.300630i 10.299291i 0.300630i \\\n\ 10.301102i 0.300630i 10.305630i 0.299724i 10.312874i 0.297913i 10.320118i 0.295197i \\\n\ 10.322835i 0.293386i 10.323740i 0.293386i 10.326457i 0.291575i 10.331890i 0.287047i \\\n\ 10.336417i 0.282520i 10.338228i 0.280709i 10.339134i 0.279803i 10.340945i 0.277087i \\\n\ 10.341850i 0.272559i 10.341850i 0.268937i 10.341850i 0.266220i 10.340945i 0.265315i \\\n\ 10.340945i 0.264409i 10.339134i 0.262598i 10.335512i 0.259882i 10.330079i 0.257165i \\\n\ 10.327362i 0.256260i 10.325551i 0.256260i 10.321929i 0.255354i 10.313780i 0.255354i \\\n\ 10.305630i 0.256260i 10.301102i 0.256260i 10.299291i 0.257165i 10.295669i 0.258071i \\\n\ 10.288425i 0.260787i 10.282087i 0.263504i 10.280276i 0.265315i 10.279370i 0.266220i \\\n\ 10.277559i 0.268031i 10.273937i 0.271654i 10.270315i 0.274370i 10.269409i 0.275276i \\\n\ 10.268504i 0.276181i 10.266693i 0.278898i 10.264882i 0.282520i 10.263976i 0.284331i \\\n\ 10.263071i 0.285236i 10.263071i 0.287047i 10.263071i 0.290669i 10.263976i 0.294291i \\\n\ 10.264882i 0.296102i 10.264882i 0.297008i 10.265787i 0.297008i 10.266693i 0.298819i \\\n\ 10.270315i 0.300630i 10.274843i 0.302441i 10.277559i 0.302441i 10.278465i 0.302441i \\\n\ 10.281181i 0.301535i -outline $tkxox(score_passive_note) -fill {}\n\ ${score} create line 9.045157i 0.086024i 9.045157i 0.266220i -fill $tkxox(score_passive_note)\n\ ${score} create polygon 9.050591i 0.104134i 9.051496i 0.109567i 9.051496i 0.111378i \\\n\ 9.051496i 0.112283i 9.052402i 0.114094i 9.054213i 0.118622i 9.056024i 0.122244i \\\n\ 9.056929i 0.123150i 9.056929i 0.122244i 9.057835i 0.123150i 9.062362i 0.127677i \\\n\ 9.068701i 0.133110i 9.072323i 0.135827i 9.075039i 0.137638i 9.078661i 0.140354i \\\n\ 9.086811i 0.147598i 9.094961i 0.153937i 9.097677i 0.157559i 9.099488i 0.158465i \\\n\ 9.102205i 0.161181i 9.108543i 0.167520i 9.113976i 0.173858i 9.115787i 0.175669i \\\n\ 9.115787i 0.176575i 9.117598i 0.179291i 9.119409i 0.185630i 9.120315i 0.192874i \\\n\ 9.120315i 0.195591i 9.120315i 0.196496i 9.120315i 0.200118i 9.117598i 0.210079i \\\n\ 9.114882i 0.220039i 9.112165i 0.226378i 9.109449i 0.230906i 9.107638i 0.234528i \\\n\ 9.104921i 0.239961i 9.102205i 0.247205i 9.102205i 0.248110i 9.101299i 0.249016i \\\n\ 9.101299i 0.249921i 9.100394i 0.249921i 9.100394i 0.250827i 9.100394i 0.251732i \\\n\ 9.099488i 0.251732i 9.099488i 0.252638i 9.098583i 0.252638i 9.098583i 0.251732i \\\n\ 9.099488i 0.250827i 9.099488i 0.249921i 9.099488i 0.249016i 9.100394i 0.248110i \\\n\ 9.100394i 0.247205i 9.103110i 0.241772i 9.104921i 0.237244i 9.106732i 0.233622i \\\n\ 9.108543i 0.230000i 9.111260i 0.224567i 9.113976i 0.216417i 9.116693i 0.208268i \\\n\ 9.117598i 0.204646i 9.118504i 0.203740i 9.118504i 0.201024i 9.117598i 0.193780i \\\n\ 9.114882i 0.186535i 9.113071i 0.182913i 9.111260i 0.182008i 9.108543i 0.178386i \\\n\ 9.102205i 0.171142i 9.095866i 0.164803i 9.092244i 0.161181i 9.090433i 0.160276i \\\n\ 9.088622i 0.158465i 9.084094i 0.155748i 9.076850i 0.150315i 9.067795i 0.144882i \\\n\ 9.063268i 0.142165i 9.060551i 0.141260i 9.056929i 0.139449i 9.050591i 0.136732i \\\n\ 9.049685i 0.136732i 9.048780i 0.135827i 9.047874i 0.135827i 9.046969i 0.135827i \\\n\ 9.046063i 0.135827i 9.046063i 0.136732i 9.046063i 0.137638i 9.046063i 0.138543i \\\n\ 9.046063i 0.139449i 9.046063i 0.140354i 9.046969i 0.140354i 9.046969i 0.141260i \\\n\ 9.046969i 0.142165i 9.046969i 0.141260i 9.046969i 0.140354i 9.046969i 0.139449i \\\n\ 9.046969i 0.137638i 9.046969i 0.136732i 9.046969i 0.126772i 9.047874i 0.117717i \\\n\ 9.047874i 0.110472i 9.048780i 0.103228i 9.048780i 0.094173i 9.049685i 0.086929i \\\n\ 9.050591i 0.085118i 9.050591i 0.087835i 9.049685i 0.092362i 9.049685i 0.097795i \\\n\ -outline {} -fill $tkxox(score_passive_note) -width 0\n\ ${score} create polygon 9.050591i 0.104134i 9.051496i 0.109567i 9.051496i 0.111378i \\\n\ 9.051496i 0.112283i 9.052402i 0.114094i 9.054213i 0.118622i 9.056024i 0.122244i \\\n\ 9.056929i 0.123150i 9.056929i 0.122244i 9.057835i 0.123150i 9.062362i 0.127677i \\\n\ 9.068701i 0.133110i 9.072323i 0.135827i 9.075039i 0.137638i 9.078661i 0.140354i \\\n\ 9.086811i 0.147598i 9.094961i 0.153937i 9.097677i 0.157559i 9.099488i 0.158465i \\\n\ 9.102205i 0.161181i 9.108543i 0.167520i 9.113976i 0.173858i 9.115787i 0.175669i \\\n\ 9.115787i 0.176575i 9.117598i 0.179291i 9.119409i 0.185630i 9.120315i 0.192874i \\\n\ 9.120315i 0.195591i 9.120315i 0.196496i 9.120315i 0.200118i 9.117598i 0.210079i \\\n\ 9.114882i 0.220039i 9.112165i 0.226378i 9.109449i 0.230906i 9.107638i 0.234528i \\\n\ 9.104921i 0.239961i 9.102205i 0.247205i 9.102205i 0.248110i 9.101299i 0.249016i \\\n\ 9.101299i 0.249921i 9.100394i 0.249921i 9.100394i 0.250827i 9.100394i 0.251732i \\\n\ 9.099488i 0.251732i 9.099488i 0.252638i 9.098583i 0.252638i 9.098583i 0.251732i \\\n\ 9.099488i 0.250827i 9.099488i 0.249921i 9.099488i 0.249016i 9.100394i 0.248110i \\\n\ 9.100394i 0.247205i 9.103110i 0.241772i 9.104921i 0.237244i 9.106732i 0.233622i \\\n\ 9.108543i 0.230000i 9.111260i 0.224567i 9.113976i 0.216417i 9.116693i 0.208268i \\\n\ 9.117598i 0.204646i 9.118504i 0.203740i 9.118504i 0.201024i 9.117598i 0.193780i \\\n\ 9.114882i 0.186535i 9.113071i 0.182913i 9.111260i 0.182008i 9.108543i 0.178386i \\\n\ 9.102205i 0.171142i 9.095866i 0.164803i 9.092244i 0.161181i 9.090433i 0.160276i \\\n\ 9.088622i 0.158465i 9.084094i 0.155748i 9.076850i 0.150315i 9.067795i 0.144882i \\\n\ 9.063268i 0.142165i 9.060551i 0.141260i 9.056929i 0.139449i 9.050591i 0.136732i \\\n\ 9.049685i 0.136732i 9.048780i 0.135827i 9.047874i 0.135827i 9.046969i 0.135827i \\\n\ 9.046063i 0.135827i 9.046063i 0.136732i 9.046063i 0.137638i 9.046063i 0.138543i \\\n\ 9.046063i 0.139449i 9.046063i 0.140354i 9.046969i 0.140354i 9.046969i 0.141260i \\\n\ 9.046969i 0.142165i 9.046969i 0.141260i 9.046969i 0.140354i 9.046969i 0.139449i \\\n\ 9.046969i 0.137638i 9.046969i 0.136732i 9.046969i 0.126772i 9.047874i 0.117717i \\\n\ 9.047874i 0.110472i 9.048780i 0.103228i 9.048780i 0.094173i 9.049685i 0.086929i \\\n\ 9.050591i 0.085118i 9.050591i 0.087835i 9.049685i 0.092362i 9.049685i 0.097795i \\\n\ -outline $tkxox(score_passive_note) -fill {}\n\ ${score} create polygon 9.002598i 0.301535i 9.009843i 0.300630i 9.012559i 0.300630i \\\n\ 9.014370i 0.300630i 9.017087i 0.299724i 9.024331i 0.297913i 9.031575i 0.295197i \\\n\ 9.034291i 0.293386i 9.036102i 0.293386i 9.038819i 0.291575i 9.044252i 0.287047i \\\n\ 9.048780i 0.282520i 9.050591i 0.280709i 9.051496i 0.279803i 9.053307i 0.277087i \\\n\ 9.054213i 0.272559i 9.054213i 0.269843i 9.054213i 0.267126i 9.054213i 0.266220i \\\n\ 9.054213i 0.265315i 9.053307i 0.264409i 9.052402i 0.263504i 9.050591i 0.261693i \\\n\ 9.047874i 0.259882i 9.042441i 0.257165i 9.038819i 0.256260i 9.037008i 0.256260i \\\n\ 9.033386i 0.255354i 9.025236i 0.255354i 9.017992i 0.256260i 9.014370i 0.256260i \\\n\ 9.012559i 0.257165i 9.008937i 0.258071i 9.002598i 0.260787i 8.996260i 0.263504i \\\n\ 8.994449i 0.265315i 8.993543i 0.266220i 8.991732i 0.268031i 8.988110i 0.271654i \\\n\ 8.984488i 0.274370i 8.983583i 0.275276i 8.982677i 0.276181i 8.980866i 0.278898i \\\n\ 8.979055i 0.282520i 8.978150i 0.284331i 8.977244i 0.285236i 8.977244i 0.287047i \\\n\ 8.977244i 0.290669i 8.978150i 0.294291i 8.979055i 0.296102i 8.979055i 0.297008i \\\n\ 8.979961i 0.297008i 8.980866i 0.298819i 8.984488i 0.300630i 8.989016i 0.302441i \\\n\ 8.991732i 0.302441i 8.992638i 0.302441i 8.996260i 0.301535i -outline {} -fill $tkxox(score_passive_note) \\\n\ -width 0\n\ ${score} create polygon 9.002598i 0.301535i 9.009843i 0.300630i 9.012559i 0.300630i \\\n\ 9.014370i 0.300630i 9.017087i 0.299724i 9.024331i 0.297913i 9.031575i 0.295197i \\\n\ 9.034291i 0.293386i 9.036102i 0.293386i 9.038819i 0.291575i 9.044252i 0.287047i \\\n\ 9.048780i 0.282520i 9.050591i 0.280709i 9.051496i 0.279803i 9.053307i 0.277087i \\\n\ 9.054213i 0.272559i 9.054213i 0.269843i 9.054213i 0.267126i 9.054213i 0.266220i \\\n\ 9.054213i 0.265315i 9.053307i 0.264409i 9.052402i 0.263504i 9.050591i 0.261693i \\\n\ 9.047874i 0.259882i 9.042441i 0.257165i 9.038819i 0.256260i 9.037008i 0.256260i \\\n\ 9.033386i 0.255354i 9.025236i 0.255354i 9.017992i 0.256260i 9.014370i 0.256260i \\\n\ 9.012559i 0.257165i 9.008937i 0.258071i 9.002598i 0.260787i 8.996260i 0.263504i \\\n\ 8.994449i 0.265315i 8.993543i 0.266220i 8.991732i 0.268031i 8.988110i 0.271654i \\\n\ 8.984488i 0.274370i 8.983583i 0.275276i 8.982677i 0.276181i 8.980866i 0.278898i \\\n\ 8.979055i 0.282520i 8.978150i 0.284331i 8.977244i 0.285236i 8.977244i 0.287047i \\\n\ 8.977244i 0.290669i 8.978150i 0.294291i 8.979055i 0.296102i 8.979055i 0.297008i \\\n\ 8.979961i 0.297008i 8.980866i 0.298819i 8.984488i 0.300630i 8.989016i 0.302441i \\\n\ 8.991732i 0.302441i 8.992638i 0.302441i 8.996260i 0.301535i -outline $tkxox(score_passive_note) -fill \\\n\ {}\n\ ${score} create line 2.313583i 0.402953i 1.095669i 0.402953i -fill $tkxox(score_active_note)\n\ ${score} create line 2.316299i 0.063386i 1.099291i 0.063386i -fill $tkxox(score_active_note)\n\ ${score} create line 3.680000i 0.063386i 2.311772i 0.063386i -fill $tkxox(score_active_note)\n\ ${score} create line 4.341929i 0.402953i 3.069685i 0.402953i -fill $tkxox(score_active_note)\n\ ${score} create line 6.309606i 0.402953i 5.036457i 0.402953i -fill $tkxox(score_active_note)\n\ ${score} create line 7.657913i 0.065197i 5.039173i 0.065197i -fill $tkxox(score_active_note)\n\ ${score} create line 8.292677i 0.406575i 7.020433i 0.406575i -fill $tkxox(score_active_note)\n\ ${score} create line 10.343661i 0.404764i 9.044252i 0.404764i -fill $tkxox(score_active_note)\n\ ${score} create line 11.791575i 0.407480i 11.020079i 0.402953i -fill $tkxox(score_passive_note)\n\ ${score} create line 11.785236i 0.061575i 9.045157i 0.061575i -fill $tkxox(score_passive_note)\n\ ${score} create line 1.097480i 0.063386i 1.096575i 0.063386i 1.093858i 0.063386i \\\n\ 1.088425i 0.063386i 1.081181i 0.063386i 1.073031i 0.064291i 1.063071i 0.066102i \\\n\ 1.053110i 0.067913i 1.049488i 0.068819i 1.048583i 0.069724i 1.044961i 0.070630i \\\n\ 1.034094i 0.075157i 1.024134i 0.079685i 1.018701i 0.080591i 1.017795i 0.080591i \\\n\ 1.015984i 0.080591i 1.009646i 0.084213i 0.995157i 0.093268i 0.981575i 0.103228i \\\n\ 0.969803i 0.112283i 0.958937i 0.121339i 0.948976i 0.130394i 0.939921i 0.138543i \\\n\ 0.933583i 0.143976i 0.930866i 0.146693i 0.929961i 0.147598i -joinstyle bevel -fill \\\n\ $tkxox(score_active_note)\n\ ${score} create line 1.098386i 0.400236i 1.097480i 0.400236i 1.094764i 0.400236i \\\n\ 1.089331i 0.400236i 1.082087i 0.400236i 1.073937i 0.401142i 1.063976i 0.402953i \\\n\ 1.054016i 0.404764i 1.050394i 0.405669i 1.049488i 0.406575i 1.045866i 0.407480i \\\n\ 1.035000i 0.412008i 1.025039i 0.416535i 1.019606i 0.418346i 1.018701i 0.418346i \\\n\ 1.016890i 0.418346i 1.010551i 0.421969i 0.996063i 0.431929i 0.982480i 0.441890i \\\n\ 0.970709i 0.451850i 0.959843i 0.460906i 0.949882i 0.469055i 0.940827i 0.477205i \\\n\ 0.934488i 0.482638i 0.931772i 0.485354i 0.930866i 0.486260i -joinstyle bevel -fill \\\n\ $tkxox(score_active_note)\n\ ${score} create line 2.310866i 0.400236i 2.311772i 0.400236i 2.314488i 0.400236i \\\n\ 2.319016i 0.400236i 2.326260i 0.400236i 2.333504i 0.401142i 2.343465i 0.402953i \\\n\ 2.353425i 0.404764i 2.357047i 0.405669i 2.357953i 0.406575i 2.361575i 0.407480i \\\n\ 2.372441i 0.412008i 2.382402i 0.416535i 2.386929i 0.418346i 2.388740i 0.418346i \\\n\ 2.389646i 0.418346i 2.395984i 0.421969i 2.410472i 0.431929i 2.423150i 0.441890i \\\n\ 2.435827i 0.451850i 2.446693i 0.460906i 2.456654i 0.469055i 2.465709i 0.477205i \\\n\ 2.472047i 0.482638i 2.474764i 0.485354i 2.475669i 0.486260i -joinstyle bevel -fill \\\n\ $tkxox(score_active_note)\n\ ${score} create line 3.669134i 0.065197i 3.670039i 0.065197i 3.672756i 0.065197i \\\n\ 3.678189i 0.065197i 3.685433i 0.066102i 3.694488i 0.067008i 3.704449i 0.068819i \\\n\ 3.714409i 0.071535i 3.718031i 0.072441i 3.718937i 0.072441i 3.722559i 0.074252i \\\n\ 3.733425i 0.077874i 3.743386i 0.081496i 3.747913i 0.083307i 3.749724i 0.082402i \\\n\ 3.750630i 0.082402i 3.756969i 0.086024i 3.771457i 0.095079i 3.784134i 0.104134i \\\n\ 3.796811i 0.114094i 3.807677i 0.123150i 3.817638i 0.132205i 3.826693i 0.139449i \\\n\ 3.833031i 0.144882i 3.835748i 0.147598i 3.836654i 0.148504i -joinstyle bevel -fill \\\n\ $tkxox(score_active_note)\n\ ${score} create line 4.336496i 0.402953i 4.337402i 0.402953i 4.341024i 0.402953i \\\n\ 4.348268i 0.403858i 4.356417i 0.404764i 4.368189i 0.406575i 4.377244i 0.408386i \\\n\ 4.381772i 0.409291i 4.383583i 0.409291i 4.385394i 0.409291i 4.389921i 0.411102i \\\n\ 4.399882i 0.414724i 4.409843i 0.419252i 4.415276i 0.421063i 4.416181i 0.421063i \\\n\ 4.417087i 0.421969i 4.423425i 0.425591i 4.437913i 0.435551i 4.450591i 0.445512i \\\n\ 4.463268i 0.455472i 4.474134i 0.464528i 4.484094i 0.473583i 4.493150i 0.480827i \\\n\ 4.499488i 0.486260i 4.502205i 0.488976i 4.503110i 0.489882i -joinstyle bevel -fill \\\n\ $tkxox(score_active_note)\n\ ${score} create line 3.072402i 0.400236i 3.071496i 0.400236i 3.068780i 0.400236i \\\n\ 3.064252i 0.400236i 3.057008i 0.400236i 3.049764i 0.401142i 3.039803i 0.402953i \\\n\ 3.029843i 0.404764i 3.026220i 0.405669i 3.025315i 0.406575i 3.021693i 0.407480i \\\n\ 3.010827i 0.412008i 3.000866i 0.416535i 2.996339i 0.418346i 2.994528i 0.418346i \\\n\ 2.993622i 0.418346i 2.987283i 0.421969i 2.972795i 0.431929i 2.959213i 0.441890i \\\n\ 2.947441i 0.451850i 2.935669i 0.460906i 2.925709i 0.469055i 2.915748i 0.477205i \\\n\ 2.909409i 0.482638i 2.906693i 0.485354i 2.905787i 0.486260i -joinstyle bevel -fill \\\n\ $tkxox(score_active_note)\n\ ${score} create line 5.036457i 0.399331i 5.035551i 0.399331i 5.032835i 0.399331i \\\n\ 5.028307i 0.400236i 5.021063i 0.400236i 5.013819i 0.401142i 5.003858i 0.402953i \\\n\ 4.993898i 0.404764i 4.990276i 0.405669i 4.989370i 0.405669i 4.985748i 0.406575i \\\n\ 4.974882i 0.411102i 4.964921i 0.415630i 4.960394i 0.417441i 4.958583i 0.417441i \\\n\ 4.957677i 0.418346i 4.951339i 0.421969i 4.936850i 0.431929i 4.924173i 0.441890i \\\n\ 4.911496i 0.450945i 4.900630i 0.460000i 4.890669i 0.469055i 4.881614i 0.476299i \\\n\ 4.875276i 0.481732i 4.872559i 0.484449i 4.871654i 0.485354i -joinstyle bevel -fill \\\n\ $tkxox(score_active_note)\n\ ${score} create line 5.038268i 0.064291i 5.037362i 0.064291i 5.034646i 0.064291i \\\n\ 5.030118i 0.064291i 5.022874i 0.064291i 5.015630i 0.065197i 5.005669i 0.067008i \\\n\ 4.995709i 0.068819i 4.992087i 0.069724i 4.991181i 0.070630i 4.987559i 0.071535i \\\n\ 4.976693i 0.076063i 4.966732i 0.080591i 4.962205i 0.081496i 4.960394i 0.081496i \\\n\ 4.959488i 0.081496i 4.953150i 0.085118i 4.938661i 0.094173i 4.925984i 0.103228i \\\n\ 4.913307i 0.113189i 4.902441i 0.122244i 4.892480i 0.131299i 4.883425i 0.138543i \\\n\ 4.877087i 0.143976i 4.874370i 0.146693i 4.873465i 0.147598i -joinstyle bevel -fill \\\n\ $tkxox(score_active_note)\n\ ${score} create line 6.311417i 0.402953i 6.312323i 0.402953i 6.315039i 0.402953i \\\n\ 6.320472i 0.402953i 6.326811i 0.403858i 6.334961i 0.403858i 6.344921i 0.405669i \\\n\ 6.354882i 0.407480i 6.358504i 0.408386i 6.362126i 0.409291i 6.372992i 0.413819i \\\n\ 6.382953i 0.418346i 6.388386i 0.420157i 6.389291i 0.420157i 6.391102i 0.421063i \\\n\ 6.397441i 0.424685i 6.411929i 0.434646i 6.425512i 0.444606i 6.437283i 0.454567i \\\n\ 6.448150i 0.463622i 6.458110i 0.472677i 6.467165i 0.479921i 6.473504i 0.485354i \\\n\ 6.476220i 0.488071i 6.477126i 0.488976i -joinstyle bevel -fill $tkxox(score_active_note)\n\ ${score} create line 7.656102i 0.067008i 7.657008i 0.067008i 7.660630i 0.067008i \\\n\ 7.667874i 0.067008i 7.676024i 0.067913i 7.687795i 0.069724i 7.696850i 0.071535i \\\n\ 7.701378i 0.073346i 7.703189i 0.073346i 7.705000i 0.074252i 7.709528i 0.076063i \\\n\ 7.719488i 0.079685i 7.729449i 0.084213i 7.734882i 0.085118i 7.735787i 0.085118i \\\n\ 7.736693i 0.085118i 7.743031i 0.088740i 7.757520i 0.097795i 7.770197i 0.106850i \\\n\ 7.782874i 0.116811i 7.793740i 0.125866i 7.803701i 0.134921i 7.812756i 0.142165i \\\n\ 7.819094i 0.147598i 7.821811i 0.150315i 7.822717i 0.151220i -joinstyle bevel -fill \\\n\ $tkxox(score_active_note)\n\ ${score} create line 7.047598i 0.402953i 7.046693i 0.402953i 7.043976i 0.402953i \\\n\ 7.039449i 0.402953i 7.032205i 0.403858i 7.024961i 0.403858i 7.015000i 0.405669i \\\n\ 7.005039i 0.407480i 7.001417i 0.408386i 7.000512i 0.408386i 6.996890i 0.409291i \\\n\ 6.986024i 0.413819i 6.976063i 0.418346i 6.970630i 0.420157i 6.968819i 0.420157i \\\n\ 6.967008i 0.421063i 6.960669i 0.424685i 6.946181i 0.434646i 6.932598i 0.444606i \\\n\ 6.920827i 0.454567i 6.909961i 0.463622i 6.900000i 0.472677i 6.890945i 0.479921i \\\n\ 6.884606i 0.485354i 6.881890i 0.488071i 6.880984i 0.488976i -joinstyle bevel -fill \\\n\ $tkxox(score_active_note)\n\ ${score} create line 8.288150i 0.405669i 8.289055i 0.405669i 8.292677i 0.405669i \\\n\ 8.299921i 0.405669i 8.308071i 0.406575i 8.319843i 0.408386i 8.329803i 0.410197i \\\n\ 8.333425i 0.411102i 8.334331i 0.412008i 8.338858i 0.412913i 8.349724i 0.417441i \\\n\ 8.359685i 0.421969i 8.364213i 0.423780i 8.366024i 0.423780i 8.366929i 0.423780i \\\n\ 8.373268i 0.427402i 8.387756i 0.437362i 8.401339i 0.447323i 8.413110i 0.457283i \\\n\ 8.424882i 0.466339i 8.435748i 0.474488i 8.444803i 0.482638i 8.451142i 0.488071i \\\n\ 8.453858i 0.490787i 8.454764i 0.491693i -joinstyle bevel -fill $tkxox(score_active_note)\n\ ${score} create line 10.339134i 0.402953i 10.340039i 0.402953i 10.342756i 0.402953i \\\n\ 10.348189i 0.403858i 10.354528i 0.403858i 10.362677i 0.404764i 10.372638i 0.406575i \\\n\ 10.382598i 0.408386i 10.386220i 0.409291i 10.387126i 0.409291i 10.390748i 0.410197i \\\n\ 10.401614i 0.414724i 10.411575i 0.419252i 10.416102i 0.421063i 10.417913i 0.421063i \\\n\ 10.418819i 0.421969i 10.425157i 0.425591i 10.439646i 0.435551i 10.452323i 0.445512i \\\n\ 10.465000i 0.455472i 10.475866i 0.464528i 10.485827i 0.473583i 10.494882i 0.480827i \\\n\ 10.501220i 0.486260i 10.503937i 0.488976i 10.504843i 0.489882i -joinstyle bevel \\\n\ -fill $tkxox(score_active_note)\n\ ${score} create line 11.020984i 0.402047i 11.020079i 0.402047i 11.017362i 0.402047i \\\n\ 11.011929i 0.402047i 11.004685i 0.402953i 10.995630i 0.402953i 10.985669i 0.404764i \\\n\ 10.975709i 0.406575i 10.972087i 0.407480i 10.971181i 0.407480i 10.967559i 0.408386i \\\n\ 10.956693i 0.412913i 10.946732i 0.417441i 10.941299i 0.419252i 10.940394i 0.419252i \\\n\ 10.938583i 0.420157i 10.932244i 0.423780i 10.917756i 0.433740i 10.905079i 0.443701i \\\n\ 10.892402i 0.452756i 10.881535i 0.461811i 10.871575i 0.470866i 10.863425i 0.478110i \\\n\ 10.857087i 0.483543i 10.854370i 0.486260i 10.853465i 0.487165i -joinstyle bevel \\\n\ -fill $tkxox(score_passive_note)\n\ ${score} create line 9.050591i 0.065197i 9.049685i 0.065197i 9.046969i 0.065197i \\\n\ 9.042441i 0.065197i 9.036102i 0.066102i 9.027953i 0.067008i 9.017992i 0.068819i \\\n\ 9.008031i 0.071535i 9.004409i 0.072441i 9.002598i 0.072441i 8.998976i 0.074252i \\\n\ 8.988110i 0.077874i 8.978150i 0.081496i 8.972717i 0.083307i 8.971811i 0.082402i \\\n\ 8.970906i 0.082402i 8.964567i 0.086024i 8.950079i 0.095079i 8.937402i 0.104134i \\\n\ 8.924724i 0.114094i 8.913858i 0.123150i 8.903898i 0.132205i 8.894843i 0.139449i \\\n\ 8.888504i 0.144882i 8.885787i 0.147598i 8.884882i 0.148504i -joinstyle bevel -fill \\\n\ $tkxox(score_passive_note)\n\ ${score} create line 9.048780i 0.402953i 9.047874i 0.402953i 9.045157i 0.402953i \\\n\ 9.040630i 0.402953i 9.034291i 0.403858i 9.026142i 0.403858i 9.016181i 0.405669i \\\n\ 9.006220i 0.407480i 9.002598i 0.408386i 9.000787i 0.408386i 8.997165i 0.409291i \\\n\ 8.986299i 0.413819i 8.976339i 0.418346i 8.970906i 0.420157i 8.970000i 0.420157i \\\n\ 8.969094i 0.421063i 8.962756i 0.424685i 8.948268i 0.434646i 8.935591i 0.444606i \\\n\ 8.922913i 0.454567i 8.912047i 0.463622i 8.902087i 0.472677i 8.893031i 0.479921i \\\n\ 8.886693i 0.485354i 8.883976i 0.488071i 8.883071i 0.488976i -joinstyle bevel -fill \\\n\ $tkxox(score_active_note)\n\ "; tk707-0.8/gui.c0000644000175100017510000002475410142141776010127 00000000000000char tcl_gui[] = "\ #\n\ # This file is part of tk707.\n\ #\n\ # Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito \n\ #\n\ # tk707 is free software; you can redistribute it and/or modify\n\ # it under the terms of the GNU General Public License as published by\n\ # the Free Software Foundation; either version 2 of the License, or\n\ # (at your option) any later version.\n\ #\n\ # Foobar is distributed in the hope that it will be useful,\n\ # but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ # GNU General Public License for more details.\n\ #\n\ # You should have received a copy of the GNU General Public License\n\ # along with Foobar; if not, write to the Free Software\n\ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n\ #\n\ # =========================================================================\n\ # File gui.tcl\n\ # GUI for TK-707\n\ # =========================================================================\n\ eval destroy [winfo child .]\n\ wm title . \"TK-707\"\n\ set font {Helvetica 14}\n\ wm iconify .\n\ # -------------------------------------------------------------------------\n\ # menu bar\n\ # -------------------------------------------------------------------------\n\ frame .mbar -borderwidth 1p -relief raised\n\ pack .mbar -fill x\n\ \n\ menubutton .mbar.file -text \"File\" -menu .mbar.file.m\n\ menubutton .mbar.midi -text \"Midi\" -menu .mbar.midi.m\n\ menubutton .mbar.map -text \"Map\" -menu .mbar.map.m\n\ pack .mbar.file -side left\n\ pack .mbar.midi -side left\n\ pack .mbar.map -side left\n\ \n\ menubutton .mbar.help -text \"Help\" -menu .mbar.help.m \n\ pack .mbar.help -side right\n\ \n\ # -----------------------------------------------------------------------------\n\ # file menu\n\ # -----------------------------------------------------------------------------\n\ menu .mbar.file.m -tearoff 0\n\ .mbar.file.m add command -label \"Load Data\" -command {load_data_file \".\"} \\\n\ -underline 0 \\\n\ -accelerator \"Ctrl-O\"\n\ .mbar.file.m add command -label \"Load Demo\" -command {load_data_file $PKGDATADIR} \\\n\ -underline 0\n\ .mbar.file.m add command -label \"Save Data\" -command {save_data_file} \\\n\ -underline 0 \\\n\ -accelerator \"Ctrl-S\"\n\ .mbar.file.m add command -label \"Ports\" -command {port_setup} \\\n\ -underline 0\n\ .mbar.file.m add command -label \"Quit\" -command \"exit\" \\\n\ -underline 0 \\\n\ -accelerator \"Ctrl-Q\"\n\ \n\ bind . { exit;}\n\ bind . { load_data_file \".\";}\n\ bind . { save_data_file;}\n\ \n\ # -----------------------------------------------------------------------------\n\ # midi & map menus\n\ # -----------------------------------------------------------------------------\n\ menu .mbar.midi.m -tearoff 0\n\ menu .mbar.map.m -tearoff 0\n\ \n\ .mbar.midi.m add command -label \"Save Midi Track\" -command {save_midi_file} -underline 0\n\ .mbar.midi.m add command -label \"Set MIDI Channel\" -command {ac_midi} -underline 0\n\ \n\ \n\ .mbar.map.m add command -label \"Load Standard Sound Map\" -command {load_sound_map $PKGDATADIR} -underline 0\n\ .mbar.map.m add command -label \"Load Local Sound Map\" -command {load_sound_map \".\"} -underline 0\n\ .mbar.map.m add command -label \"Save Sound Map\" -command {save_sound_map} -underline 0\n\ .mbar.map.m add command -label \"Edit Sound Map\" -command {map_edit} -underline 0\n\ .mbar.map.m add command -label \"Edit Fader Map\" -command {fader_edit} -underline 0\n\ \n\ # TODO: next will put names on patterns for automatic score generation...\n\ # menu .mbar.pattern -tearoff 0\n\ # .mbar add cascade -menu .mbar.pattern -label \"Pattern\" -underline 0\n\ # .mbar.pattern add command -label \"Edit Comment\" -command {edit_pattern_comment} -underline 0\n\ \n\ # -----------------------------------------------------------------------------\n\ # help menu\n\ # -----------------------------------------------------------------------------\n\ menu .mbar.help.m -tearoff 0\n\ \n\ .mbar.help.m add command -label \"About\" -command {about} -underline 0\n\ .mbar.help.m add command -label \"User's Manual\" -command {UserManual} -underline 0\n\ \n\ \n\ . configure -menu .mbar\n\ \n\ # =========================================================================\n\ # Frame for Grid & Volume controls\n\ # =========================================================================\n\ set grid_vols .gv\n\ eval frame $grid_vols $debug_relief\n\ pack $grid_vols -anchor c\n\ # --------------------------------------------------------------------------\n\ # Grid Display\n\ # --------------------------------------------------------------------------\n\ set display $grid_vols.d\n\ frame $display -relief groove -borderwidth 2p\n\ pack $display -side left\n\ frame $display.g\n\ pack $display.g ;#-side left\n\ set gridlabel $display.g.l ; # Instrument label\n\ canvas $gridlabel -width 3c -height 9.0c\n\ set grid $display.g.c ; # Pattern Grid\n\ canvas $grid -width 8.5c -height 9.0c\n\ pack $gridlabel $grid -side left\n\ # --------------------------------------------------------------------------\n\ # Status area\n\ # --------------------------------------------------------------------------\n\ set infosection $display.i ; # to contain Tempo, Track & Mode widgets\n\ frame $infosection\n\ pack $infosection -side bottom\n\ set tempoinfo $infosection.t\n\ set tminfo $infosection.tm\n\ frame $tminfo\n\ canvas $tempoinfo -width 4c -height 2c -relief groove -borderwidth 2\n\ canvas $tminfo.t -width 7.5c -height 0.75c -relief groove -borderwidth 2\n\ canvas $tminfo.m -width 7.5c -height 1.25c -relief groove -borderwidth 2\n\ pack $tminfo.t $tminfo.m\n\ pack $tempoinfo $tminfo -side left -expand true -fill y\n\ # --------------------------------------------------------------------------\n\ # Volume controls\n\ # --------------------------------------------------------------------------\n\ set vcunit $grid_vols.cu\n\ eval frame $vcunit $debug_relief\n\ pack $vcunit -side left\n\ #\n\ # Controls + Notes Staff\n\ #\n\ set ctrls_notes_staff .cns\n\ frame $ctrls_notes_staff\n\ pack $ctrls_notes_staff -expand true -fill x\n\ # ==========================================================================\n\ # Controls\n\ # ==========================================================================\n\ set ctrl_height 4.0;\n\ set ctrls $ctrls_notes_staff.c\n\ frame $ctrls\n\ pack $ctrls -side top -expand true -fill x\n\ # ---------------------------------------\n\ # Scale lamps + Score + Notes/Instruments\n\ # ---------------------------------------\n\ set notes_staff $ctrls_notes_staff.ns\n\ frame $notes_staff\n\ pack $notes_staff -anchor s\n\ # ---------------------------------------\n\ # Transport control (Start/Cont)\n\ # ---------------------------------------\n\ set stop_box $ctrls.stop_box\n\ eval canvas $stop_box -width 2.3c -height ${ctrl_height}c $debug_relief;\n\ pack $stop_box -side left -anchor n ;\n\ set button_stop $stop_box.stop\n\ label $stop_box.lt -text STOP/CONT -font *-${boldfont13}-*\n\ radiobutton $button_stop -bitmap nix -width 1.45c -height 2.6c \\\n\ -variable ss -value stop -indicatoron false \\\n\ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active) \\\n\ -selectcolor $tkxox(but_grey_active) \\\n\ -command \"ac_stopgo $tkxox(CONT)\"\n\ $stop_box create window 1.25c 0.4c -window $stop_box.lt\n\ $stop_box create window 1.25c 2.2c -window $button_stop\n\ bind all {\n\ if {$mode(stopgo) == $tkxox(START)} {\n\ $button_stop invoke\n\ } else {\n\ ac_stopgo $tkxox(START)\n\ $button_start invoke\n\ }\n\ }\n\ #\n\ # Transport control (start)\n\ #\n\ set start_box $notes_staff.start_box\n\ canvas $start_box -width 2.3c -height 4.5c ;#-relief groove -borderwidth 4\n\ pack $start_box -side left -anchor n ;#-expand true -fill y\n\ set button_start $start_box.start\n\ label $start_box.lb -text START -font *-${boldfont13}-*\n\ radiobutton $button_start -bitmap nix -width 1.45c -height 2.6c \\\n\ -variable ss -value start -indicatoron false \\\n\ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active) \\\n\ -selectcolor $tkxox(but_grey_active)\n\ $start_box create window 1.25c 0.4c -window $start_box.lb\n\ $start_box create window 1.25c 2.1c -window $button_start\n\ bind $button_start <1> {ac_stopgo $tkxox(START)}\n\ # ================================================================\n\ # button controls\n\ # ================================================================\n\ set space_width 2.8;\n\ set misc_width 5.0;\n\ set st_width 4.0;\n\ set trpa_width 3.0;\n\ set grp_width 5.0;\n\ set accent_width 2.6;\n\ #\n\ # Empty Space : adjust vectical alignment with score\n\ #\n\ set empty_case $ctrls.z\n\ eval canvas $empty_case -width ${space_width}c -height ${ctrl_height}c \\\n\ $debug_relief;\n\ pack $empty_case -side left -anchor nw ;\n\ #\n\ # Clear/Scale/Last Step/Instrument Guide\n\ #\n\ set misc $ctrls.misc\n\ eval canvas $misc -width ${misc_width}c -height ${ctrl_height}c $debug_relief;\n\ pack $misc -side left -anchor n\n\ #\n\ # Shuffle/Flam Tempo/Measure controls\n\ #\n\ set st $ctrls.st\n\ eval canvas $st -width ${st_width}c -height ${ctrl_height}c $debug_relief;\n\ pack $st -side left -anchor n\n\ #\n\ # Track/Pattern Read/Write Control\n\ #\n\ set trpa $ctrls.trpa\n\ eval canvas $trpa -width 3c -height ${ctrl_height}c $debug_relief;\n\ pack $trpa -side left -anchor n\n\ #\n\ # Pattern Group & Track Number selection\n\ #\n\ set grps $ctrls.grps\n\ eval canvas $grps -width 5c -height ${ctrl_height}c $debug_relief;\n\ pack $grps -side left -anchor n\n\ #\n\ # Accent/Enter\n\ #\n\ set accenter $ctrls.accenter\n\ eval canvas $accenter -width 2.6c -height ${ctrl_height}c $debug_relief;\n\ pack $accenter -side left -anchor n\n\ #\n\ # Tempo Dial\n\ #\n\ set dial $ctrls.dial\n\ eval frame $dial $debug_relief\n\ pack $dial -side left -expand true;\n\ # ---------------------------\n\ # Score + Notes/Instruments\n\ # ---------------------------\n\ set note_score $notes_staff.sc\n\ eval frame $note_score $debug_relief;\n\ pack $note_score\n\ # ---------------------------\n\ # Notes/Instruments\n\ # ---------------------------\n\ set notes $notes_staff.n;\n\ eval frame $notes $debug_relief;\n\ pack $notes -anchor w -side left\n\ "; tk707-0.8/procs.c0000644000175100017510000020217510142141776010464 00000000000000char tcl_procs[] = "\ #\n\ # This file is part of tk707.\n\ #\n\ # Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito \n\ #\n\ # tk707 is free software; you can redistribute it and/or modify\n\ # it under the terms of the GNU General Public License as published by\n\ # the Free Software Foundation; either version 2 of the License, or\n\ # (at your option) any later version.\n\ #\n\ # Foobar is distributed in the hope that it will be useful,\n\ # but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ # GNU General Public License for more details.\n\ #\n\ # You should have received a copy of the GNU General Public License\n\ # along with Foobar; if not, write to the Free Software\n\ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n\ #\n\ #=====================================================\n\ # File procs.tcl\n\ # Procedures for the tcl side of the program\n\ #=====================================================\n\ \n\ proc play_pattern {grp pat} {\n\ upvar #0 tkxox xox\n\ upvar #0 mode mo\n\ upvar #0 pattern_list pl\n\ \n\ if {$mo(PATTERN_REPEAT)} {\n\ \n\ #puts \"TIMER = [tk7_timer_status]\"\n\ set steps [tk7_get_last_step $grp $pat]\n\ set dur [tk7_pattern_play $grp $pat]\n\ \n\ cycle_notes 1 [expr 55 * 120 / $mo(tempo)] 0 0 $steps\n\ \n\ # Fudge factor (extra time to change track display) in track play mode\n\ if {$mo(rdrw) == $xox(READ) || $mo(patr) == $xox(TRACK)} {\n\ incr dur -160\n\ if {$dur < 0} {\n\ set dur 0\n\ }\n\ #set mo(REPEAT_INTERVAL) [expr $dur - 160]\n\ set mo(REPEAT_INTERVAL) $dur\n\ } else {\n\ set mo(REPEAT_INTERVAL) $dur\n\ }\n\ }\n\ }\n\ proc stop_pattern {} {\n\ upvar #0 mode mo\n\ upvar #0 tkxox xox\n\ \n\ #puts \"do stop_pattern\"\n\ tk7_pattern_stop\n\ set mo(REPEAT_INTERVAL) 10\n\ }\n\ \n\ proc ac_clear {tp} {\n\ upvar #0 tkxox xox\n\ upvar #0 mode mo\n\ upvar #0 track_list tl\n\ upvar #0 pattern_list pl\n\ \n\ switch $tp {\n\ 0 {\n\ # CLEAR the current PATTERN\n\ if {$mo(rdrw) != $xox(WRITE) || $mo(patr) != $xox(PATTERN)} {\n\ return\n\ }\n\ set result [tk_dialog .clr CONFIRM \"Clear Pattern [expr $mo(current_pattern) + 1] Group [expr $mo(patgroup) + 1]?\" \"\" 0 Cancel \"Delete Pattern\"]\n\ if {$result == 0} {\n\ return\n\ }\n\ set mo(file_status) $xox(FILE_MODIFIED)\n\ tk7_clear_pattern $mo(patgroup) $mo(current_pattern)\n\ pattern_setid $mo(current_pattern)\n\ scale_lamps_update\n\ }\n\ \n\ 1 {\n\ # CLEAR the current TRACK\n\ if {$mo(rdrw) != $xox(WRITE) || $mo(patr) != $xox(TRACK)} {\n\ return\n\ }\n\ set result [tk_dialog .clr CONFIRM \"Clear Track [expr $mo(current_track) + 1]?\" \"\" 0 Cancel \"Delete Track\"]\n\ if {$result == 0} {\n\ return\n\ }\n\ set mo(file_status) $xox(FILE_MODIFIED)\n\ set tl($mo(current_track)) {}\n\ set mo(measure) -1\n\ }\n\ 2 {\n\ # CLEAR current track item from current track\n\ if {$mo(rdrw) != $xox(WRITE) || $mo(patr) != $xox(TRACK)} {\n\ return\n\ }\n\ # Clearing track item has no meaning if we're already past end\n\ set target $mo(measure)\n\ if {[lindex $tl($mo(current_track)) $target] == \"\"} {\n\ #puts \"Already past end\"\n\ return\n\ }\n\ set result [tk_dialog .clr CONFIRM \"Clear measure [expr $target + 1] from track [expr $mo(current_track) + 1]?\" \"\" 0 Cancel \"Delete\"]\n\ if {$result == 0} {\n\ return\n\ }\n\ set mo(file_status) $xox(FILE_MODIFIED)\n\ set tl($mo(current_track)) [lreplace $tl($mo(current_track)) $target $target]\n\ }\n\ 3 {\n\ # CLEAR the rest of current track including current track item\n\ if {$mo(rdrw) != $xox(WRITE) || $mo(patr) != $xox(TRACK)} {\n\ return\n\ }\n\ # Clearing rest has no meaning if we're already past end of track\n\ set target $mo(measure)\n\ if {[lindex $tl($mo(current_track)) $target] == \"\"} {\n\ # puts \"Already past end\"\n\ return\n\ }\n\ set result [tk_dialog .clr CONFIRM \" Clear rest of track [expr $mo(current_track) + 1]?\\n(includes current measure)\" \"\" 0 Cancel \"Delete\"]\n\ if {$result == 0} {\n\ return\n\ }\n\ set mo(file_status) $xox(FILE_MODIFIED)\n\ set tl($mo(current_track)) [lreplace $tl($mo(current_track)) $target end]\n\ }\n\ }\n\ }\n\ proc ac_scaleback {} {\n\ upvar #0 tkxox xox\n\ upvar #0 mode mo\n\ upvar #0 track_list tl\n\ global scale_lamps\n\ \n\ if {$mo(patr) == $xox(PATTERN)} {\n\ set old_scale [tk7_get_scale $mo(patgroup) $mo(current_pattern)]\n\ set new_scale [expr $old_scale + 1]\n\ if {$new_scale == 4} {\n\ set new_scale 0\n\ }\n\ set old_button $scale_lamps.l$old_scale\n\ set new_button $scale_lamps.l$new_scale\n\ tk7_set_scale $mo(patgroup) $mo(current_pattern) $new_scale\n\ $old_button configure -background $xox(lamp_off)\n\ $new_button configure -background $xox(lamp_on)\n\ } else {\n\ set target [expr $mo(measure) - 1]\n\ set mo(measure) [measure_constrain $target]\n\ pattern_show\n\ }\n\ set mo(file_status) $xox(FILE_MODIFIED)\n\ }\n\ proc ac_lastfwd {} {\n\ upvar #0 tkxox xox\n\ upvar #0 mode mo\n\ upvar #0 track_list tl\n\ \n\ if {$mo(patr) == $xox(PATTERN)} {\n\ if {$mo(rdrw) == $xox(READ)} {\n\ return\n\ }\n\ select_laststep\n\ set mo(file_status) $xox(FILE_MODIFIED)\n\ } else {\n\ set target [expr $mo(measure) + 1]\n\ set mo(measure) [measure_constrain $target]\n\ pattern_show\n\ }\n\ }\n\ proc measure_constrain {m} {\n\ upvar #0 tkxox xox\n\ upvar #0 mode mo\n\ upvar #0 track_list tl\n\ \n\ set tracklength [llength $tl($mo(current_track))]\n\ \n\ if {$tracklength < 1} {\n\ if {$mo(rdrw) == $xox(READ)} {\n\ set minpos -1\n\ set maxpos -1\n\ } else {\n\ set minpos 0\n\ set maxpos 0\n\ }\n\ } else {\n\ if {$mo(rdrw) == $xox(READ)} {\n\ set maxpos [expr $tracklength - 1]\n\ } else {\n\ set maxpos $tracklength\n\ }\n\ set minpos 0\n\ }\n\ \n\ # Result\n\ if {$m <= $minpos} {\n\ return $minpos\n\ } elseif {$m >= $maxpos} {\n\ return $maxpos\n\ } else {\n\ return $m\n\ }\n\ }\n\ # Decide which pattern from a track to display\n\ #\n\ proc pattern_show {} {\n\ upvar #0 tkxox xox\n\ upvar #0 mode mo\n\ upvar #0 track_list tl\n\ \n\ set raw [lindex $tl($mo(current_track)) $mo(measure)]\n\ if {$raw != \"\"} {\n\ set group [expr $raw / 16]\n\ set pattern [expr $raw % 16]\n\ ac_group $group\n\ pattern_setid $pattern\n\ }\n\ }\n\ \n\ # For track mode, ordinary click (on LAST MEAS button) shows last measure\n\ # of current track. Releasing button returns to orginal measure.\n\ # Shift click goes to last measure and stays there.\n\ #\n\ proc ac_lastmeas {m} {\n\ upvar #0 tkxox xox\n\ upvar #0 mode mo\n\ upvar #0 track_list tl\n\ \n\ if {$mo(patr) == $xox(PATTERN)} {\n\ #puts \"Instrument Guide\"\n\ } else {\n\ switch $m {\n\ 0 {\n\ #puts \"Show Last Measure\"\n\ set mo(oldmeasure) $mo(measure)\n\ set target [llength $tl($mo(current_track))]\n\ set mo(measure) [measure_constrain $target]\n\ pattern_show\n\ }\n\ 1 {\n\ #puts \"Restore measure $mo(oldmeasure)\"\n\ set mo(measure) [measure_constrain $mo(oldmeasure)]\n\ pattern_show\n\ }\n\ 2 {\n\ #puts \"Go to Last Measure\"\n\ set target [llength $tl($mo(current_track))]\n\ set mo(measure) [measure_constrain $target]\n\ pattern_show\n\ }\n\ 3 {\n\ return\n\ }\n\ }\n\ }\n\ \n\ }\n\ proc select_laststep {} {\n\ upvar #0 mode mo\n\ \n\ if {[winfo exists .ls]} {\n\ wm deiconify .ls\n\ } else {\n\ toplevel .ls\n\ wm title .ls \"Set last pattern step\"\n\ scale .ls.s -from 1 -to 16 -command laststep_set -orient horizontal \\\n\ -length 5c -relief groove -borderwidth 2\n\ button .ls.ok -text OK -font *-${font12}-* -command {wm iconify .ls} -relief groove -borderwidth 2\n\ pack .ls.s -side top -ipady 6\n\ pack .ls.ok -side top -expand true -fill x\n\ }\n\ .ls.s set [tk7_get_last_step $mo(patgroup) $mo(current_pattern)]\n\ }\n\ proc laststep_set val {\n\ upvar #0 mode mo\n\ \n\ if {$val < 1 || $val > 16} {\n\ return\n\ }\n\ tk7_set_last_step $mo(patgroup) $mo(current_pattern) $val\n\ }\n\ proc flam_set val {\n\ upvar #0 mode mo\n\ if {$val < 0 || $val > 4} {\n\ return\n\ }\n\ tk7_set_flam $mo(patgroup) $mo(current_pattern) $val\n\ }\n\ proc select_flam {} {\n\ upvar #0 mode mo\n\ \n\ set curr [tk7_get_flam $mo(patgroup) $mo(current_pattern)]\n\ \n\ if {[winfo exists .flam]} {\n\ wm deiconify .flam\n\ } else {\n\ toplevel .flam\n\ wm title .flam \"Set pattern flam interval\"\n\ scale .flam.s -from 0 -to 4 -command flam_set -orient horizontal \\\n\ -length 5c -relief groove -borderwidth 2\n\ button .flam.ok -text OK -font *-${font12}-* -command {wm iconify .flam} -relief groove -borderwidth 2\n\ pack .flam.s -side top -ipady 6\n\ pack .flam.ok -side top -expand true -fill x\n\ }\n\ .flam.s set [tk7_get_flam $mo(patgroup) $mo(current_pattern)]\n\ set curr [tk7_get_flam $mo(patgroup) $mo(current_pattern)]\n\ }\n\ proc ac_flam {} {\n\ upvar #0 mode mo\n\ upvar #0 tkxox xox\n\ if {$mo(patr) != $xox(PATTERN) || $mo(rdrw) != $xox(WRITE)} {\n\ return\n\ }\n\ select_flam\n\ }\n\ proc ac_midi {} {\n\ global font12\n\ upvar #0 mode mo\n\ if {[winfo exists .ms]} {\n\ wm deiconify .ms\n\ } else {\n\ toplevel .ms\n\ wm title .ms \"MIDI Channel\"\n\ scale .ms.s -from 1 -to 16 -command midichan_set -orient horizontal \\\n\ -length 5c -relief groove -borderwidth 2 -font *-${font12}-*\n\ button .ms.ok -text OK -font *-${font12}-* -command {wm iconify .ms} \\\n\ -relief groove -borderwidth 2\n\ pack .ms.s -side top -ipady 6\n\ pack .ms.ok -side top -expand true -fill x\n\ .ms.s set [expr $mo(midi_channel) + 1]\n\ }\n\ }\n\ proc midichan_set val {\n\ upvar #0 mode mo\n\ global midi_channel\n\ \n\ if {$val < 1 || $val >16} {\n\ return\n\ }\n\ set mo(midi_channel) [expr $val - 1]\n\ # This is needed for C code to trace midi channel,\n\ # (I don't know how to make it trace an array variable).\n\ set midi_channel $mo(midi_channel)\n\ }\n\ proc ac_note {widget prop} {\n\ global tapwrite\n\ global notes\n\ upvar #0 tkxox xox\n\ upvar #0 mode mo\n\ \n\ # Extract button number from widget path\n\ # Dependent on prefix path name: $notes.note.b0, $notes.note.b1, ..\n\ # ^ +5 ^\n\ set prefix_length [expr [string length $notes] + 5]\n\ set b [string range [string trimright $widget .b] $prefix_length end]\n\ \n\ if {$mo(patr) == $xox(TRACK)} {\n\ # TRACK mode\n\ if {$mo(rdrw) == $xox(READ)} {\n\ tk7_start_note_play $b $prop\n\ } else {\n\ # Just changeing pattern numbers\n\ pattern_setid $b\n\ }\n\ return\n\ }\n\ # PATTERN mode\n\ if {$mo(rdrw) == $xox(READ)} {\n\ # PATTERN READ mode\n\ pattern_setid $b\n\ if {$mo(stopgo) == $xox(START)} {\n\ # If running, wait till current pattern finished before changeing ?\n\ }\n\ return\n\ }\n\ # PATTERN TAP or WRITE mode\n\ if {$mo(stopgo) != $xox(START)} {\n\ # Just changeing pattern numbers\n\ pattern_setid $b\n\ return\n\ }\n\ # PATTERN TAP or WRITE mode with START\n\ if {![have_zero_velocity $prop]} {\n\ switch $mo(current_accent) {\n\ 2 {set prop [add_strong_accent $prop] }\n\ 1 {set prop [add_weak_accent $prop] }\n\ default {set prop [add_default_velocity $prop] }\n\ }\n\ }\n\ if {$tapwrite} {\n\ set step [expr [tk7_get_pat_tick] % 16]\n\ if {$step < 0} {\n\ set step 0\n\ }\n\ ac_newinstr $notes.note$b.b\n\ step_insert $step $prop\n\ tk7_start_note_play $b $prop\n\ } else {\n\ # Recording steps\n\ step_insert $b $prop\n\ }\n\ }\n\ proc ac_note_off {widget} {\n\ global notes\n\ global tapwrite\n\ upvar #0 tkxox xox\n\ upvar #0 mode mo\n\ \n\ # Extract button number from widget path\n\ # Dependent on prefix path name: $notes.note.b0, $notes.note.b1, ..\n\ # ^ +5 ^\n\ set prefix_length [expr [string length $notes] + 5]\n\ set b [string range [string trimright $widget .b] $prefix_length end]\n\ \n\ if {$mo(patr) == $xox(TRACK) && $mo(rdrw) == $xox(READ)} {\n\ tk7_stop_note_play $b\n\ return\n\ }\n\ if {$mo(rdrw) == $xox(READ) || $mo(stopgo) != $xox(START)} {\n\ return\n\ }\n\ if {$tapwrite} {\n\ tk7_stop_note_play $b\n\ return\n\ }\n\ }\n\ #\n\ # Accept 0->15 to set new current pattern id.\n\ # Also need to light buttons lamp.\n\ #\n\ proc pattern_setid {id} {\n\ global grid\n\ global notes\n\ upvar #0 pattern_list pl\n\ upvar #0 mode mo\n\ \n\ lamp_onoff 0 $notes.note$mo(current_pattern).l\n\ set mo(current_pattern) $id\n\ lamp_onoff 1 $notes.note$id.l\n\ \n\ # Clear the grid display & redraw for new pattern\n\ $grid delete stepnode\n\ set pg $mo(patgroup)\n\ set cp $mo(current_pattern)\n\ for {set k 0} {$k < 16} {incr k} {\n\ set instruments [tk7_pattern_items $pg $cp $k]\n\ set properties [tk7_get_pattern_properties $pg $cp $k]\n\ set idx 0\n\ foreach instr $instruments {\n\ set prop [lindex $properties $idx]\n\ step_draw [expr $k + 1] $instr $prop\n\ set idx [expr $idx + 1]\n\ }\n\ }\n\ scale_lamps_update\n\ refresh_comment\n\ }\n\ # Turn a \"lamp\" on or off (1 or 0 for parameter onoff).\n\ # Parameter lamp is a full widget path.\n\ #\n\ proc lamp_onoff {onoff lamp} {\n\ upvar #0 tkxox xox\n\ \n\ switch $onoff {\n\ 0 {\n\ $lamp configure -bg $xox(col_def_bg)\n\ }\n\ 1 {\n\ $lamp configure -bg $xox(col_on)\n\ }\n\ }\n\ }\n\ \n\ # Respond to change of Track/Pattern controls\n\ #\n\ proc ac_patternmode {rw} {\n\ global trpa notes tempoinfo\n\ upvar #0 mode mo\n\ upvar #0 tkxox xox\n\ \n\ # Check if running (can't change mode)\n\ if {$mo(stopgo) == $xox(START)} {\n\ return\n\ }\n\ \n\ if {$mo(patr) != $xox(PATTERN)} {\n\ set mo(patr) $xox(PATTERN)\n\ $tempoinfo itemconfigure tmtitle -text TEMPO\n\ $tempoinfo coords tmtitle 1c 0.5c\n\ trace vdelete mo(current_track) w trackinfo_update\n\ trace vdelete mo(measure) w measureinfo_update\n\ $tempoinfo itemconfigure tempo -text $mo(tempo)\n\ trace variable mo(tempo) w tempoinfo_update\n\ }\n\ \n\ if {$rw == $xox(WRITE)} {\n\ set mo(rdrw) $xox(WRITE)\n\ $trpa.lt configure -text PLAY\n\ $trpa.lb configure -text \"-> WRITE <-\"\n\ modeinfo_update 3\n\ } else {\n\ set mo(rdrw) [expr $xox(WRITE) - 1]\n\ $trpa.lt configure -text \"-> PLAY <-\"\n\ $trpa.lb configure -text \"WRITE\"\n\ modeinfo_update 2\n\ }\n\ \n\ # Show current instrument\n\ ac_newinstr $notes.note[expr $mo(current_instr) - 1].b\n\ }\n\ proc ac_trackmode {rw} {\n\ global trpa notes tempoinfo\n\ upvar #0 mode mo\n\ upvar #0 tkxox xox\n\ upvar #0 track_list tl\n\ \n\ # Check if running (can't change mode)\n\ if {$mo(stopgo) == $xox(START)} {\n\ return\n\ }\n\ \n\ if {$mo(patr) != $xox(TRACK)} {\n\ set mo(patr) $xox(TRACK)\n\ $tempoinfo itemconfigure tmtitle -text MEASURE\n\ $tempoinfo coords tmtitle 2.7c 0.5c\n\ # Go to 1st pattern of new track\n\ # Trace current measure in track\n\ trace vdelete mo(tempo) w tempoinfo_update\n\ trace variable mo(measure) w measureinfo_update\n\ trace variable mo(current_track) w trackinfo_update\n\ }\n\ \n\ if {$rw == $xox(WRITE)} {\n\ set mo(rdrw) $xox(WRITE)\n\ $trpa.lt configure -text PLAY\n\ $trpa.lb configure -text \"-> WRITE <-\"\n\ modeinfo_update 1\n\ } else {\n\ set mo(rdrw) $xox(READ)\n\ $trpa.lt configure -text \"-> PLAY <-\"\n\ $trpa.lb configure -text WRITE\n\ modeinfo_update 0\n\ }\n\ set mo(measure) [measure_constrain -1]\n\ pattern_show\n\ \n\ # Hide current instrument\n\ ac_newinstr $notes.note[expr $mo(current_instr) - 1].b\n\ }\n\ # Toggle display to show tempo or measure\n\ #\n\ proc ac_tempomeasure {} {\n\ global tempoinfo\n\ upvar #0 mode mo\n\ upvar #0 tkxox xox\n\ \n\ if {$mo(patr) == $xox(PATTERN)} {\n\ return\n\ }\n\ \n\ if {$mo(showtrack)} {\n\ set mo(showtrack) false\n\ $tempoinfo itemconfigure tmtitle -text TEMPO\n\ $tempoinfo coords tmtitle 1c 0.5c\n\ # trace vdelete mo(measure) w trackinfo_update\n\ trace vdelete mo(measure) w measureinfo_update\n\ $tempoinfo itemconfigure tempo -text $mo(tempo)\n\ trace variable mo(tempo) w tempoinfo_update\n\ set mo(tempo) $mo(tempo)\n\ } else {\n\ set mo(showtrack) true\n\ $tempoinfo itemconfigure tmtitle -text MEASURE\n\ $tempoinfo coords tmtitle 2.7c 0.5c\n\ # Trace current measure in track\n\ trace vdelete mo(tempo) w tempoinfo_update\n\ trace variable mo(measure) w measureinfo_update\n\ trace variable mo(current_track) w trackinfo_update\n\ set mo(measure) $mo(measure)\n\ set mo(current_track) $mo(current_track)\n\ }\n\ \n\ }\n\ \n\ proc ac_stopgo {new} {\n\ upvar #0 tkxox xox\n\ upvar #0 mode mo\n\ upvar #0 track_list tl\n\ \n\ switch $new {\n\ 0 {\n\ set mo(stopgo) $xox(STOP)\n\ set mo(PATTERN_REPEAT) false\n\ stop_pattern\n\ set stepcount [tk7_get_last_step $grp $pat]\n\ cycle_notes 1 0 0 0 $stepcount\n\ }\n\ 1 {\n\ if {$new == $mo(stopgo)} {\n\ return\n\ }\n\ if {$mo(patr) == $xox(TRACK)} {\n\ set mo(TRACK_START) true\n\ }\n\ \n\ set mo(stopgo) $xox(START)\n\ \n\ \n\ # This starts the player!\n\ set mo(PATTERN_REPEAT) true\n\ }\n\ 2 {\n\ if {$mo(patr) == $xox(PATTERN)} {\n\ set mo(PATTERN_REPEAT) false\n\ stop_pattern\n\ set mo(stopgo) $xox(STOP)\n\ } else {\n\ if {$mo(stopgo) == $xox(CONT)} {\n\ set mo(stopgo) $xox(START)\n\ } else {\n\ set mo(stopgo) $xox(CONT)\n\ set mo(PATTERN_REPEAT) false\n\ stop_pattern\n\ }\n\ }\n\ }\n\ }\n\ }\n\ \n\ # For patterns,\n\ # i = 0->3 Groups\n\ # j = 0->15 Patterns\n\ # k = 0->15 Step divisions, each is a list of note events\n\ #\n\ # For tracks,\n\ # i = 0->3 Tracks, each is a list patterns (16*Group + Pattern)\n\ #\n\ proc mem_init {} {\n\ upvar #0 pattern_list pl\n\ upvar #0 track_list tl\n\ \n\ # Patterns\n\ # for {set i 0} {$i <4} {incr i} {\n\ # for {set j 0} {$j <16 } {incr j} {\n\ # for {set k 0} {$k < 16} {incr k} {\n\ # set pl($i,$j,$k) {}\n\ # }\n\ # }\n\ # }\n\ \n\ # Tracks\n\ for {set i 0} {$i <4} {incr i} {\n\ set tl($i) {}\n\ }\n\ \n\ }\n\ \n\ proc ac_group {b} {\n\ global grps\n\ \n\ upvar #0 mode mo\n\ upvar #0 tkxox xox\n\ global comment\n\ \n\ if {$mo(rdrw) == $xox(WRITE) && $mo(stopgo) == $xox(START)} {\n\ return\n\ } else {\n\ set but_old ${grps}.lt$mo(patgroup).lamp\n\ set but_new ${grps}.lt${b}.lamp\n\ $but_old configure -background $xox(lamp_off)\n\ $but_new configure -background $xox(lamp_on)\n\ set mo(patgroup) $b\n\ if {$mo(patr) == $xox(TRACK)} {\n\ return\n\ }\n\ pattern_setid $mo(current_pattern)\n\ }\n\ }\n\ \n\ proc ac_track {b} {\n\ global tminfo\n\ upvar #0 mode mo\n\ upvar #0 tkxox xox\n\ \n\ if {$mo(patr) != $xox(TRACK) || $mo(stopgo) == $xox(START)} {\n\ return\n\ }\n\ set mo(current_track) $b\n\ set mo(measure) [measure_constrain -1]\n\ pattern_show\n\ }\n\ \n\ proc ac_newinstr {widget} {\n\ global gridlabel\n\ global notes\n\ global font12\n\ global boldfont13\n\ upvar #0 tkxox xox\n\ upvar #0 mode mo\n\ \n\ # Check first that we're in PATTERN:WRITE mode\n\ if {$mo(patr) == $xox(TRACK) || $mo(rdrw) == $xox(READ)} {\n\ set w $notes.note[expr $mo(current_instr) - 1].instr\n\ if {[winfo exists $w]} {\n\ lamp_onoff 0 $w\n\ }\n\ return\n\ }\n\ # Extract button number from widget path\n\ # Dependent on prefix path name: $notes.note.b0, $notes.note.b1, ..\n\ # ^ +5 ^\n\ set prefix_length [expr [string length $notes] + 5]\n\ set b [string range [string trimright $widget .b] $prefix_length end]\n\ lamp_onoff 0 $notes.note[expr $mo(current_instr) - 1].instr\n\ set mo(current_instr) [expr $b + 1]\n\ lamp_onoff 1 $notes.note$b.instr\n\ \n\ $gridlabel itemconfigure selectinstr -font *-${font12}-*\n\ $gridlabel dtag selectinstr\n\ $gridlabel itemconfigure ilabel[expr 15 - $b] -font *-${boldfont13}-*\n\ $gridlabel addtag selectinstr withtag ilabel[expr 15 - $b]\n\ }\n\ \n\ # Change memory cartridge being used\n\ #\n\ proc ac_cartridge {} {\n\ global accenter\n\ upvar #0 mode mo\n\ upvar #0 tkxox xox\n\ \n\ if {$mo(patr) != $xox(TRACK)} {\n\ return\n\ }\n\ \n\ set mo(cartridge) [tk7_cartridge_incr]\n\ #puts \"Cartridge $mo(cartridge)\"\n\ switch $mo(cartridge) {\n\ 2 {\n\ $accenter.cart.lamp configure -bg #00ff00\n\ }\n\ 1 {\n\ $accenter.cart.lamp configure -bg $xox(lamp_on)\n\ }\n\ 0 -\n\ default {\n\ $accenter.cart.lamp configure -bg $xox(lamp_off)\n\ }\n\ }\n\ \n\ }\n\ \n\ # Process Enter button\n\ #\n\ proc ac_accenter {addmode} {\n\ global accent_label\n\ upvar #0 mode mo\n\ upvar #0 tkxox xox\n\ upvar #0 track_list tl\n\ \n\ if {$mo(patr) == $xox(PATTERN) && $mo(rdrw) == $xox(WRITE)} {\n\ set mo(current_accent) [expr ($mo(current_accent)+1) % 3]\n\ switch $mo(current_accent) {\n\ 2 {set color $xox(col_strong_accent) }\n\ 1 {set color $xox(col_weak_accent) }\n\ default {set color $xox(col_def_bg) }\n\ }\n\ $accent_label configure -bg $color\n\ return\n\ }\n\ if {$mo(patr) != $xox(TRACK) || $mo(rdrw) != $xox(WRITE)} {\n\ return\n\ }\n\ # Track Write\n\ switch $addmode {\n\ 0 {\n\ # Add/replace current pattern in current track\n\ #puts \"ADD pattern\"\n\ set target $mo(measure)\n\ #puts \"Target measure is $target\"\n\ set pat [expr [expr 16 * $mo(patgroup)] + $mo(current_pattern)]\n\ if {[lindex $tl($mo(current_track)) $target] == \"\"} {\n\ #puts \"Adding $pat to Track $mo(current_track)\"\n\ lappend tl($mo(current_track)) $pat\n\ } else {\n\ set tl($mo(current_track)) [lreplace $tl($mo(current_track)) $target $target $pat]\n\ #puts \"Inserting $pat to Track $mo(current_track)\"\n\ }\n\ }\n\ 1 {\n\ # Insert pattern before current position in track\n\ #puts \"INSERT pattern\"\n\ set target $mo(measure)\n\ #puts \"Target measure is $target\"\n\ set pat [expr [expr 16 * $mo(patgroup)] + $mo(current_pattern)]\n\ if {[lindex $tl($mo(current_track)) $target] == \"\"} {\n\ #puts \"Adding $pat to Track $mo(current_track)\"\n\ lappend tl($mo(current_track)) $pat\n\ } else {\n\ set tl($mo(current_track)) [linsert $tl($mo(current_track)) $target $pat]\n\ #puts \"Inserting $pat to Track $mo(current_track)\"\n\ }\n\ }\n\ }\n\ # Go to next step\n\ ac_lastfwd\n\ }\n\ \n\ proc have_fla {prop} {\n\ upvar #0 tkxox xox\n\ return [expr $prop & $xox(flam)];\n\ }\n\ proc have_weak_accent {prop} {\n\ upvar #0 tkxox xox\n\ return [expr $prop & $xox(weak_accent)];\n\ }\n\ proc have_strong_accent {prop} {\n\ upvar #0 tkxox xox\n\ return [expr $prop & $xox(strong_accent)];\n\ }\n\ proc have_zero_velocity {prop} {\n\ upvar #0 tkxox xox\n\ return [expr $prop & $xox(zero_velocity)];\n\ }\n\ proc set_velocity_flag {prop flag} {\n\ upvar #0 tkxox xox\n\ return [expr $prop & (~$xox(velocity_field)) | ($flag & $xox(velocity_field))]\n\ }\n\ proc add_weak_accent {prop} {\n\ upvar #0 tkxox xox\n\ return [set_velocity_flag $prop $xox(weak_accent)]\n\ }\n\ proc add_strong_accent {prop} {\n\ upvar #0 tkxox xox\n\ return [set_velocity_flag $prop $xox(strong_accent)]\n\ }\n\ proc add_zero_velocity {prop} {\n\ upvar #0 tkxox xox\n\ return [set_velocity_flag $prop $xox(zero_velocity)]\n\ }\n\ proc add_default_velocity {prop} {\n\ upvar #0 tkxox xox\n\ return [expr $prop & (~$xox(velocity_field))]\n\ }\n\ #\n\ # Draw a step node in the grid canvas.\n\ # Parameters step & inst are expected in 1->16 format (not 0->15).\n\ #\n\ proc step_draw {step inst prop} {\n\ global grid\n\ upvar #0 tkxox xox\n\ \n\ set x [expr $step / 2.0]\n\ set y [expr 9.0 - [expr $inst / 2.0]]\n\ if {[have_strong_accent $prop]} {\n\ set color $xox(col_strong_accent)\n\ } elseif {[have_weak_accent $prop]} {\n\ set color $xox(col_weak_accent)\n\ } elseif {[have_zero_velocity $prop]} {\n\ set color $xox(col_zero_velocity)\n\ } else {\n\ set color $xox(col_default_velocity)\n\ }\n\ if {[have_fla $prop]} {\n\ # draw a star\n\ set new [$grid create polygon \\\n\ [expr $x - (0)]c [expr $y - (0.1875)]c \\\n\ [expr $x - (-0.0681818)]c [expr $y - (0.0681818)]c \\\n\ [expr $x - (-0.1875)]c [expr $y - (0.0681818)]c \\\n\ [expr $x - (-0.102273)]c [expr $y - (-0.0426136)]c \\\n\ [expr $x - (-0.127841)]c [expr $y - (-0.1875)]c \\\n\ [expr $x - (-0.00852273)]c [expr $y - (-0.127841)]c \\\n\ [expr $x - (0.119318)]c [expr $y - (-0.1875)]c \\\n\ [expr $x - (0.102273)]c [expr $y - (-0.0511364)]c \\\n\ [expr $x - (0.1875)]c [expr $y - (0.0681818)]c \\\n\ [expr $x - (0.0681818)]c [expr $y - (0.0681818)]c \\\n\ [expr $x - (0)]c [expr $y - (0.1875)]c \\\n\ -outline $color \\\n\ -fill $color \\\n\ -tags stepnode]\n\ } else {\n\ # draw a circle\n\ set new [$grid create oval \\\n\ [expr $x - 0.1875]c [expr $y - 0.1875]c \\\n\ [expr $x + 0.1875]c [expr $y + 0.1875]c \\\n\ -outline black \\\n\ -fill $color \\\n\ -tags stepnode]\n\ }\n\ $grid addtag ${step}_instr$inst withtag $new\n\ }\n\ #\n\ # Insert given step into current pattern with specified properties\n\ #\n\ proc step_insert {step prop} {\n\ global grid\n\ global tapwrite\n\ \n\ upvar #0 mode mo\n\ upvar #0 tkxox xox\n\ upvar #0 pattern_list pl\n\ \n\ #puts \"Inserting $mo(current_instr) at step $step into bank $mo(patgroup), pattern $mo(current_pattern)\"\n\ # First check for duplicates (=> remove)\n\ set pg $mo(patgroup)\n\ set cp $mo(current_pattern)\n\ set note $mo(current_instr)\n\ if {[tk7_add_note $pg $cp $step $note]} {\n\ tk7_set_properties $pg $cp $step $note $prop\n\ step_draw [expr $step + 1] $mo(current_instr) $prop\n\ #puts \"added note\"\n\ } else {\n\ $grid delete [expr $step + 1]_instr$mo(current_instr)\n\ #puts \"deleted note\"\n\ }\n\ }\n\ #\n\ # ClearGrid Display Area\n\ #\n\ proc grid_clear {} {\n\ global grid\n\ \n\ # Vertical lines\n\ set xcoord 0.0\n\ for {set i 0} {$i < 16} {incr i} {\n\ set xcoord [expr $xcoord + 0.5]\n\ $grid create line ${xcoord}c 0.5c ${xcoord}c 9.0c -fill #aaaaaa\n\ }\n\ # Horizontal lines\n\ set ycoord 0.5\n\ for {set i 0} {$i < 16} {incr i} {\n\ set ycoord [expr $ycoord + 0.5]\n\ $grid create line 0.0c ${ycoord}c 8.5c ${ycoord}c -fill #aaaaaa\n\ }\n\ }\n\ # -----------------------------------------------------------------------------\n\ # Load sound map\n\ # -----------------------------------------------------------------------------\n\ set last_map_file_name \"\";\n\ \n\ proc load_sound_map {initialdir} {\n\ \n\ # From TK-707 version 0.6, the format of .map files is changed\n\ # (they now include also abbreviation information, for volume labels).\n\ # New format is recognized by number of saved data segments (4 rather than 3).\n\ \n\ upvar #0 sound snd\n\ upvar #0 last_map_file_name last_map_file_name\n\ \n\ set ftypes {\n\ {{TK707 Sound Map} {.map}}\n\ {{All types} {.*}}\n\ }\n\ set fname [tk_getOpenFile -filetypes $ftypes -initialdir $initialdir ]\n\ \n\ if {$fname == \"\"} {\n\ return\n\ }\n\ set last_map_file_name [lindex [split $fname /] end];\n\ \n\ set f [open $fname r]\n\ set data \"\"\n\ set i 1\n\ while {[gets $f line] >= 0} {\n\ if {[string index $line 0] == \"#\"} {\n\ continue\n\ }\n\ set data [lindex $line 0]\n\ set datasegs [llength $data]\n\ set snd($i,name) [lindex $data 0]\n\ set snd($i,shortname) [lindex $data 1]\n\ if {$datasegs == 4} {\n\ set snd($i,abbrev) [lindex $data 2]\n\ set snd($i,note) [lindex $data 3]\n\ } else {\n\ # we could set a better algo to abbrev\n\ set snd($i,abbrev) $snd($i,shortname)\n\ set snd($i,note) [lindex $data 2]\n\ }\n\ incr i\n\ }\n\ close $f\n\ \n\ # Reset Name Displays\n\ instrument_label_reset\n\ tk7_set_sounds\n\ }\n\ # -----------------------------------------------------------------------------\n\ # Save sound map\n\ # -----------------------------------------------------------------------------\n\ proc save_sound_map {} {\n\ \n\ upvar #0 tkxox xox\n\ upvar #0 sound snd\n\ upvar #0 last_map_file_name last_map_file_name\n\ \n\ set ftypes {\n\ {{TK707 Sound Map} {.map}}\n\ {{All types} {.*}}\n\ }\n\ #puts \"last_map_file_name before: $last_map_file_name\"\n\ set fname [tk_getSaveFile -filetypes $ftypes -initialfile $last_map_file_name]\n\ if {$fname == \"\"} {\n\ return\n\ }\n\ set last_map_file_name [lindex [split $fname /] end];\n\ \n\ set f [open $fname w]\n\ puts $f \"################# TK707 Sound Map generated by $xox(VERSION) #################\"\n\ puts $f \"# Format is 16 entries of { {Long name} {Short name} {Abbrev} {Midi key value} }\"\n\ puts $f \"############################################################################\"\n\ for {set i 1} {$i < 17} {incr i} {\n\ puts $f \"{ {$snd($i,name)} {$snd($i,shortname)} {$snd($i,abbrev)} {$snd($i,note)} }\"\n\ }\n\ close $f\n\ }\n\ # -----------------------------------------------------------------------------\n\ # Load data file\n\ # -----------------------------------------------------------------------------\n\ set last_data_file_name \"\";\n\ \n\ proc load_data_file {initialdir} {\n\ \n\ # From TK-707 version 0.7, the format of .dat files is changed\n\ # (they now include also note properties information).\n\ # New format is recognized by number of saved data segments (5 rather than 2, 3 or 4).\n\ # They are:\n\ # segment 0: pattern note data\n\ # segment 1: pattern note properties\n\ # segment 2: pattern {length,scale,flam,shuffle} properties\n\ # segment 3: track data\n\ \n\ # From TK-707 version 0.6, the format of .dat files is changed\n\ # (they now include also pattern scale information).\n\ # New format is recognized by number of saved data segments (4 rather than 2 or 3).\n\ # They are:\n\ # segment 0: pattern note data\n\ # segment 1: pattern length data\n\ # segment 2: pattern scale data\n\ # segment 3: track data\n\ \n\ # From TK-707 version 0.5, the format of .dat files is changed\n\ # (they now include pattern length information).\n\ # New format is recognized by number of saved data segments (3 rather than 2).\n\ # They are:\n\ # segment 0: pattern note data\n\ # segment 1: pattern length data\n\ # segment 2: track data\n\ \n\ upvar #0 track_list tl\n\ upvar #0 mode mo\n\ upvar #0 last_data_file_name last_data_file_name\n\ \n\ set ftypes {\n\ {{TK-707 Data} {.dat}}\n\ {{All types} {.*}}\n\ }\n\ set fname [tk_getOpenFile -filetypes $ftypes -initialdir $initialdir]\n\ if {$fname == \"\"} {\n\ return\n\ }\n\ set last_data_file_name [lindex [split $fname /] end];\n\ #puts \"LOAD last_data_file_name $last_data_file_name\"\n\ \n\ set f [open $fname r]\n\ set data \"\"\n\ while {[gets $f line] >= 0} {\n\ if {[string index $line 0] == \"#\"} {\n\ continue\n\ }\n\ set data \"$data [string trim $line]\"\n\ }\n\ close $f\n\ \n\ # ----------------------------------\n\ # find format version from structure\n\ # ----------------------------------\n\ set datasegs [llength [lindex $data 0]]\n\ set data_version \"unknown\";\n\ if {$datasegs == 2} {\n\ set data_version 2;\n\ } elseif {$datasegs == 3} {\n\ set data_version 5;\n\ } elseif {$datasegs == 4} {\n\ set segment2 [lindex [lindex $data 0] 2]\n\ set n_seg2_level2 [llength [lindex [lindex $segment2 0] 0]]\n\ if {$n_seg2_level2 == 1} {\n\ set data_version 6;\n\ } elseif {$n_seg2_level2 >= 4} {\n\ set data_version 7;\n\ }\n\ }\n\ #puts \"data_version $data_version\"\n\ if {$data_version == \"unknown\"} {\n\ puts \"ERROR: ${fname}: unexpected data format\";\n\ return;\n\ }\n\ # ----------------------------------\n\ # load segments\n\ # ----------------------------------\n\ set loadsegment 0\n\ tk7_clear_tree\n\ set pdata [lindex [lindex $data 0] $loadsegment] ; #Pattern data\n\ set i 0\n\ foreach bankdata $pdata {\n\ set j 0\n\ foreach patterndata $bankdata {\n\ set k 0\n\ foreach stepdata $patterndata {\n\ if {[llength $stepdata] > 0} {\n\ foreach n $stepdata {\n\ tk7_add_note $i $j $k $n\n\ }\n\ }\n\ incr k\n\ }\n\ incr j\n\ }\n\ incr i\n\ }\n\ incr loadsegment\n\ \n\ if {$data_version >= 7} {\n\ # format version 0.7 includes note properties: flam, accents, etc...\n\ set p_prop [lindex [lindex $data 0] $loadsegment] ; #Pattern note properties\n\ set p_data [lindex [lindex $data 0] 0]\n\ set i 0\n\ foreach bank_prop $p_prop {\n\ set bank_data [lindex $p_data $i]\n\ set j 0\n\ foreach pattern_prop $bank_prop {\n\ set pattern_data [lindex $bank_data $j]\n\ set k 0\n\ foreach step_prop $pattern_prop {\n\ set step_data [lindex $pattern_data $k]\n\ if {[llength $step_prop] > 0} {\n\ set idx_n 0\n\ foreach p $step_prop {\n\ set n [lindex $step_data $idx_n]\n\ tk7_set_properties $i $j $k $n $p\n\ incr idx_n\n\ }\n\ }\n\ incr k\n\ }\n\ incr j\n\ }\n\ incr i\n\ }\n\ incr loadsegment\n\ }\n\ pattern_setid $mo(current_pattern)\n\ \n\ if {$data_version >= 5} {\n\ # format version 0.5 and 0.6 includes length info.\n\ # format version 0.7 includes {length,scale,flam,shuffle} infos.\n\ set pdata [lindex [lindex $data 0] $loadsegment] ; #Step length data\n\ set grp 0\n\ foreach grpdata $pdata {\n\ set pat 0\n\ foreach pldata $grpdata {\n\ if {$data_version >= 7} {\n\ # from TK-707 version 0.7: {length,scale,flam,shuffle} infos.\n\ tk7_set_last_step $grp $pat [lindex $pldata 0]\n\ tk7_set_scale $grp $pat [lindex $pldata 1]\n\ tk7_set_flam $grp $pat [lindex $pldata 2]\n\ tk7_set_shuffle $grp $pat [lindex $pldata 3]\n\ if {[llength $pldata] >= 5} {\n\ tk7_set_pattern_comment $grp $pat [lindex $pldata 4]\n\ }\n\ } else {\n\ # TK-707 version 0.5 and 0.6: step length info.\n\ tk7_set_last_step $grp $pat $pldata\n\ }\n\ incr pat\n\ }\n\ incr grp\n\ }\n\ incr loadsegment\n\ }\n\ if {$data_version == 6} {\n\ # format version 0.6 includes step scale info.\n\ set pdata [lindex [lindex $data 0] $loadsegment] ; #Step scale data\n\ set grp 0\n\ foreach grpdata $pdata {\n\ set pat 0\n\ foreach pldata $grpdata {\n\ set scaleresult [tk7_set_scale $grp $pat $pldata]\n\ incr pat\n\ }\n\ incr grp\n\ }\n\ incr loadsegment\n\ }\n\ set pdata [lindex [lindex $data 0] $loadsegment] ; #Track data\n\ set i 0\n\ foreach trackdata $pdata {\n\ #puts $trackdata\n\ set tl($i) [join $trackdata]\n\ incr i\n\ }\n\ ac_track 0\n\ pattern_show\n\ }\n\ # -----------------------------------------------------------------------------\n\ # Save data file\n\ # -----------------------------------------------------------------------------\n\ proc reverse {l1} {\n\ set n [llength $l1]\n\ set l2 {}\n\ for {set i [expr $n - 1]} {$i >= 0} {set i [expr $i - 1]} {\n\ lappend l2 [lindex $l1 $i]\n\ }\n\ return $l2\n\ }\n\ proc save_data_file {} {\n\ \n\ upvar #0 pattern_list pl\n\ upvar #0 track_list tl\n\ upvar #0 tkxox xox\n\ upvar #0 mode mo\n\ upvar #0 last_data_file_name last_data_file_name\n\ \n\ set ftypes {\n\ {{TK-707 Data} {.dat}}\n\ {{All types} {.*}}\n\ }\n\ #puts \"PREV last_data_file_name $last_data_file_name\"\n\ set fname [tk_getSaveFile -filetypes $ftypes -initialfile $last_data_file_name]\n\ if {$fname == \"\"} {\n\ return\n\ }\n\ set last_data_file_name [lindex [split $fname /] end];\n\ #puts \"NEW last_data_file_name $last_data_file_name\"\n\ \n\ set f [open $fname w]\n\ puts $f \"####################### MACHINE GENERATED - DO NOT EDIT #######################\"\n\ puts $f \"#### TK707 Data file generated by $xox(VERSION)\"\n\ puts $f \"###############################################################################\"\n\ puts $f \"{\" ; # Begin DATA\n\ \n\ # PATTERN NOTES. Four groups of 16 patterns each with 16 steps.\n\ puts $f \" {\" ; # Begin PATTERNS\n\ for {set i 0} {$i<4} {incr i} {\n\ puts $f \" {\" ; # Begin GROUP i\n\ for {set j 0} {$j<16} {incr j} {\n\ puts $f \" {\" ; # Begin PATTERN j\n\ for {set k 0} {$k<16} {incr k} {\n\ set instruments [tk7_pattern_items $i $j $k]\n\ set instruments [reverse $instruments]\n\ puts $f \" { $instruments }\"\n\ }\n\ puts $f \" }\" ; # End PATTERN j\n\ }\n\ puts $f \" }\" ; # End GROUP i\n\ }\n\ puts $f \" }\" ; # End PATTERNS\n\ \n\ # PATTERN NOTES PROPERTIES. Four groups of 16 patterns each with 16 steps.\n\ puts $f \" {\" ; # Begin PATTERNS\n\ for {set i 0} {$i<4} {incr i} {\n\ puts $f \" {\" ; # Begin GROUP i\n\ for {set j 0} {$j<16} {incr j} {\n\ puts $f \" {\" ; # Begin PATTERN j\n\ for {set k 0} {$k<16} {incr k} {\n\ set properties [tk7_get_pattern_properties $i $j $k]\n\ set properties [reverse $properties]\n\ puts $f \" { $properties }\"\n\ }\n\ puts $f \" }\" ; # End PATTERN j\n\ }\n\ puts $f \" }\" ; # End GROUP i\n\ }\n\ puts $f \" }\" ; # End PATTERNS\n\ \n\ # PATTERN PROPERTIES. Four lots of sixteen 4-lists. New from TK-707 version 0.7\n\ puts $f \" {\" ; # Begin PATTERN PROPERTIES\n\ for {set i 0} {$i<4} {incr i} {\n\ set pat_props [tk7_group_pattern_properties $i] ; # Group step lengths \n\ puts $f \" { $pat_props }\" ; # Group step lengths \n\ }\n\ puts $f \" }\" ; # End PATTERN PROPERTIES\n\ \n\ # TRACK DATA. Four tracks of arbitrary length.\n\ puts $f \" {\" ; # Begin TRACKS\n\ for {set i 0} {$i<4} {incr i} {\n\ puts $f \" { $tl($i) }\" ; # TRACK i data\n\ }\n\ puts $f \" }\" ; # End TRACKS\n\ puts $f \"}\" ; # End DATA\n\ close $f\n\ }\n\ # --------------------\n\ # compute the velocity\n\ # --------------------\n\ # velocity range is 0..127 as integer\n\ # volume range is 0..1 as float\n\ proc compute_velocity {prop volume_master volume_accent volume_instr} {\n\ \n\ if {[have_zero_velocity $prop]} {\n\ set velocity_factor 0\n\ } else {\n\ set velocity_factor 1\n\ }\n\ if {[have_strong_accent $prop]} {\n\ set accent_factor 1\n\ } elseif {[have_weak_accent $prop]} {\n\ set accent_factor 2/3.0\n\ } else {\n\ set accent_factor 1/3.0\n\ }\n\ set volume_note [expr $volume_master \\\n\ *$velocity_factor*$volume_instr \\\n\ *$accent_factor*$volume_accent]\n\ set velocity [expr int(127 * $volume_note + 0.5)]\n\ return $velocity\n\ }\n\ # -----------------------------------------------------------------------------\n\ # Save midi file - current track\n\ # -----------------------------------------------------------------------------\n\ \n\ set last_midi_file_name \"\";\n\ set prev_data_file_name \"\";\n\ \n\ proc put_note {f tick_shift midinote velocity} {\n\ if {$tick_shift > 127} {\n\ varlen_short shortres $tick_shift\n\ puts -nonewline $f [binary format c2 [list $shortres(high) $shortres(low)]]\n\ set size 2\n\ } else {\n\ puts -nonewline $f [binary format c1 $tick_shift]\n\ set size 1\n\ }\n\ puts -nonewline $f [binary format c2 [list $midinote $velocity]]\n\ return [expr $size + 2]\n\ }\n\ proc put_note_off {f tick_shift midinote} {\n\ return [put_note $f $tick_shift $midinote 0]\n\ }\n\ proc save_midi_file {} {\n\ global cunit\n\ global masterv\n\ \n\ upvar #0 mode mo\n\ upvar #0 tkxox xox\n\ upvar #0 sound snd\n\ upvar #0 track_list tl\n\ upvar #0 has_delay has_delay\n\ upvar #0 last_midi_file_name last_midi_file_name\n\ upvar #0 last_data_file_name last_data_file_name\n\ upvar #0 prev_data_file_name prev_data_file_name\n\ upvar #0 instrument_to_volume instrument_to_volume\n\ \n\ if { ($last_data_file_name != \"\")\n\ && (($prev_data_file_name == \"\") ||\n\ ($prev_data_file_name != $last_data_file_name)) } {\n\ \n\ # build a predefined name:\n\ set x [lindex [split $last_data_file_name .] 0];\n\ set t $mo(current_track)\n\ set last_midi_file_name \"${x}-track${t}.mid\"\n\ }\n\ set ftypes {\n\ {{Midi File Format} {.mid}}\n\ {{All types} {.*}}\n\ }\n\ set fname [tk_getSaveFile -filetypes $ftypes -initialfile $last_midi_file_name]\n\ if {$fname == \"\"} {\n\ return\n\ }\n\ set last_midi_file_name [lindex [split $fname /] end];\n\ set prev_data_file_name $last_data_file_name\n\ \n\ set thirty_second_note_on_ratio 5; # customize the ratio !\n\ # ex1: ratio=3\n\ # => 1/3 note-on\n\ # 2/3 note-off, for a thirty-second \n\ # ex2: ratio=16\n\ # => 1/16 note-on, 15/16 note-off\n\ # ex3: ratio=1\n\ # => 100 % note-on; not for percussions...\n\ \n\ set tick_per_note_on 3; # how long, in ticks, the note is on\n\ # DO NOT change ! because we may divide \n\ # it per 3 quarters and eigth later...\n\ \n\ set tick_per_thirty_second [expr $thirty_second_note_on_ratio*$tick_per_note_on];\n\ set tick_per_quarter [expr 8*$tick_per_thirty_second];\n\ \n\ # steps are in two parts:\n\ # a note-on part, which have a duration independant of the scale (a hit)\n\ # a note-off part, which depend on the scale:\n\ \n\ # scale(0): 1 step = quarter/4\n\ set tick_per_step_off_scale(0) [expr $tick_per_quarter/4 - $tick_per_note_on];\n\ \n\ # scale(1): 1 step = quarter/8\n\ set tick_per_step_off_scale(1) [expr $tick_per_quarter/8 - $tick_per_note_on];\n\ \n\ # scale(2): 1 step = quarter/3\n\ set tick_per_step_off_scale(2) [expr $tick_per_quarter/3 - $tick_per_note_on];\n\ \n\ # scale(3): 1 step = quarter/6\n\ set tick_per_step_off_scale(3) [expr $tick_per_quarter/6 - $tick_per_note_on];\n\ \n\ # ex1: ratio=3\n\ # => tick_per_step_off_scale = {15 6 21 9}\n\ # ex1: ratio=16\n\ # => tick_per_step_off_scale = {93 45 125 61}\n\ # the grid is finer and the result is better\n\ # ex3: ratio=1\n\ # => tick_per_step_off_scale = {3, 0, 5, 1}, as expected.\n\ # as expected, the thirty-second has no note-off part...\n\ \n\ #\n\ # get volumes:\n\ #\n\ set volume_master [expr [$masterv.sf.s get] / 100.0]\n\ #puts \"volume_master $volume_master\"\n\ set volume_accent [expr [$cunit.0.sf.s get] / 100.0]\n\ #puts \"volume_accent $volume_accent\"\n\ set volume_set {}\n\ for {set instrument 1} {$instrument <= 16} {incr instrument} {\n\ set i_vol $instrument_to_volume($instrument)\n\ set volume($instrument) [expr [$cunit.${i_vol}.sf.s get] / 100.0]\n\ #puts \"volume($instrument) $volume($instrument)\"\n\ }\n\ for {set instrument 1} {$instrument <= 16} {incr instrument} {\n\ set in_note($instrument) 0;\n\ }\n\ set f [open $fname w]\n\ puts -nonewline $f MThd\n\ puts -nonewline $f [binary format I 6]\n\ puts -nonewline $f [binary format S 0]\n\ puts -nonewline $f [binary format S 1]\n\ puts -nonewline $f [binary format S $tick_per_quarter]\n\ puts -nonewline $f MTrk\n\ set loc_tracksize 18\n\ puts -nonewline $f [binary format I 0] ; # Dummy tracksize\n\ \n\ # Meta Event to set track tempo\n\ set micro_tempo [expr 60000000 / $mo(tempo)]\n\ puts -nonewline $f [binary format c7 [list 0 255 81 3 [expr $micro_tempo >> 16] [expr $micro_tempo >> 8] $micro_tempo]]\n\ set tracksize 7\n\ \n\ # Establish running status with a zero volume note\n\ puts -nonewline $f [binary format c4 [list 0 [expr 144 + $mo(midi_channel)] 17 0]]\n\ incr tracksize 4\n\ \n\ set track $tl($mo(current_track))\n\ set tick_shift 0\n\ foreach patid $track {\n\ set group [expr $patid / 16]\n\ set pattern [expr $patid % 16]\n\ set last_step [tk7_get_last_step $group $pattern]\n\ set scale [tk7_get_scale $group $pattern]\n\ set step 0\n\ while {$step < $last_step} {\n\ set instrument_set [tk7_pattern_items $group $pattern $step]\n\ set property_set [tk7_get_pattern_properties $group $pattern $step]\n\ set idx 0\n\ foreach instrument $instrument_set {\n\ if {$instrument == \"\"} {\n\ #puts \"EMPTY instrument ?? idx = $idx\"\n\ incr idx\n\ continue;\n\ }\n\ # ------------\n\ # start a note\n\ # ------------\n\ set midinote $snd($instrument,note)\n\ set prop [lindex $property_set $idx]\n\ set velocity [compute_velocity $prop $volume_master $volume_accent $volume($instrument)]\n\ incr tracksize [put_note $f $tick_shift $midinote $velocity]\n\ set tick_shift 0\n\ if {! $has_delay($instrument) && ! [have_zero_velocity $prop]} {\n\ # start a note without delay\n\ set in_note($instrument) 1\n\ }\n\ incr idx\n\ }\n\ set flam_interval [tk7_get_flam $group $pattern]\n\ set tick_per_flam [expr $xox(tick_flam_duration) * $flam_interval]\n\ incr tick_shift $tick_per_flam\n\ if {$flam_interval != 0} {\n\ set idx 0\n\ foreach instrument $instrument_set {\n\ if {$instrument == \"\"} {\n\ continue;\n\ }\n\ set prop [lindex $property_set $idx]\n\ if {! [have_fla $prop]} {\n\ continue;\n\ }\n\ # ----------------------\n\ # write a fla note\n\ # ----------------------\n\ set midinote $snd($instrument,note)\n\ set prop [lindex $property_set $idx]\n\ set velocity [compute_velocity $prop $volume_master $volume_accent $volume($instrument)]\n\ incr tracksize [put_note $f $tick_shift $midinote $velocity]\n\ set tick_shift 0\n\ incr idx\n\ }\n\ }\n\ incr tick_shift [expr $tick_per_note_on - $tick_per_flam]\n\ foreach instrument $instrument_set {\n\ if {$instrument == \"\"} {\n\ continue;\n\ }\n\ if {! $has_delay($instrument)} {\n\ continue;\n\ }\n\ # ----------------------\n\ # stop a note with delay\n\ # ----------------------\n\ set midinote $snd($instrument,note)\n\ incr tracksize [put_note_off $f $tick_shift $midinote]\n\ set tick_shift 0\n\ }\n\ incr tick_shift $tick_per_step_off_scale($scale)\n\ \n\ incr step\n\ }\n\ }\n\ # stop current long notes on (whistle, etc...)\n\ for {set instrument 1} {$instrument <= 16} {incr instrument} {\n\ \n\ if {$in_note($instrument)} {\n\ \n\ #puts \"stop instrument $instrument\";\n\ \n\ set midinote $snd($instrument,note)\n\ incr tracksize [put_note_off $f $tick_shift $midinote]\n\ set tick_shift 0\n\ }\n\ }\n\ # End of track\n\ puts -nonewline $f [binary format c 0]\n\ puts -nonewline $f [binary format c3 {255 47 0}]\n\ incr tracksize 4\n\ \n\ # Go back and insert tracksize\n\ flush $f\n\ seek $f $loc_tracksize\n\ puts -nonewline $f [binary format I $tracksize]\n\ close $f\n\ }\n\ # -----------------------------------------------------------------------------\n\ # fileMidi - TEST area\n\ # -----------------------------------------------------------------------------\n\ proc fileAction {a} {\n\ upvar #0 pattern_list pl\n\ upvar #0 track_list tl\n\ upvar #0 tkxox xox\n\ upvar #0 mode mo\n\ \n\ if {$a == 99} {\n\ set ftypes {\n\ {{Midi File Format} {.mid}}\n\ {{All types} {.*}}\n\ }\n\ set fname [tk_getSaveFile -filetypes $ftypes]\n\ if {$fname == \"\"} {\n\ return\n\ }\n\ set f [open $fname w]\n\ \n\ puts -nonewline $f MThd\n\ puts -nonewline $f [binary format I 6]\n\ puts -nonewline $f [binary format S 0]\n\ puts -nonewline $f [binary format S 1]\n\ puts -nonewline $f [binary format S 7]\n\ puts -nonewline $f MTrk\n\ set loc_tracksize 18\n\ puts -nonewline $f [binary format I 0] ; # Dummy tracksize\n\ \n\ puts -nonewline $f [binary format c2 [list 0 [expr 144 + $mo(midi_channel)]]]\n\ \n\ # Once running status is established, format is\n\ # {note onlevel pause note offlevel pause}\n\ puts -nonewline $f [binary format c12 {35 127 0 51 127 2 35 0 0 51 0 4}]\n\ puts -nonewline $f [binary format c6 {48 127 2 48 0 4}]\n\ puts -nonewline $f [binary format c6 {38 127 2 38 0 4}]\n\ puts -nonewline $f [binary format c6 {51 127 2 51 0 4}]\n\ \n\ # End of track\n\ puts -nonewline $f [binary format c3 {255 47 0}]\n\ \n\ set tracksize 35\n\ # Go back and insert tracksize\n\ flush $f\n\ seek $f $loc_tracksize\n\ puts -nonewline $f [binary format I $tracksize]\n\ close $f\n\ } else {\n\ puts \"INTERNAL ERROR: Unexected file action: $a\"\n\ }\n\ }\n\ proc varlen_short {result value} {\n\ upvar $result res\n\ \n\ if {$value < 128} {\n\ set res(high) 0\n\ set res(low) $value\n\ } else {\n\ set res(high) [expr 128 + [expr $value / 128]]\n\ # set res(high) [expr 65536 + [expr $value / 128]]\n\ set res(low) [expr $value % 128]\n\ }\n\ }\n\ \n\ #=============================================================\n\ # These procs to edit mapping of note keys to midi note values\n\ #\n\ proc map_edit {} {\n\ global font12\n\ global boldfont12\n\ upvar #0 sound snd\n\ upvar #0 soundbuf sbuf\n\ upvar #0 tkxox xox\n\ \n\ if {[winfo exists .edit]} {\n\ wm deiconify .edit\n\ } else {\n\ toplevel .edit\n\ wm title .edit \"Edit Sound Map\"\n\ \n\ set m_titles .edit.t\n\ canvas $m_titles -height 0.75c -width 13.5c -relief raised -borderwidth 2\n\ pack $m_titles\n\ set m_maps .edit.m\n\ frame $m_maps\n\ pack $m_maps\n\ set m_opts .edit.o\n\ canvas $m_opts -height 1.5c -width 13.5c\n\ pack $m_opts\n\ \n\ label $m_titles.key -text \"Key\" -font *-${boldfont12}-*\n\ label $m_titles.long -text \"Long Name\" -font *-${boldfont12}-*\n\ label $m_titles.short -text \"Short Name\" -font *-${boldfont12}-*\n\ label $m_titles.abbrev -text \"Abbrev\" -font *-${boldfont12}-*\n\ label $m_titles.note -text \"Note\" -font *-${boldfont12}-*\n\ label $m_titles.test -text \"Test\" -font *-${boldfont12}-*\n\ $m_titles create window 0c 0.45c -window $m_titles.key -anchor w -width 1c\n\ $m_titles create window 1c 0.45c -window $m_titles.long -anchor w -width 4c\n\ $m_titles create window 5.3c 0.45c -window $m_titles.short -anchor w -width 2c\n\ $m_titles create window 7.5c 0.45c -window $m_titles.abbrev -anchor w -width 2c\n\ $m_titles create window 10.0c 0.45c -window $m_titles.note -anchor w -width 1c\n\ $m_titles create window 11.7c 0.45c -window $m_titles.test -anchor w -width 1c\n\ \n\ # Name, Shortname, Midi note entries\n\ #\n\ for {set i 0} {$i < 16} {incr i} {\n\ canvas $m_maps.$i -height 1c -width 13.5c\n\ label $m_maps.$i.l -text [expr $i + 1] -font *-${font12}-*\n\ entry $m_maps.$i.long -font *-${font12}-*\n\ entry $m_maps.$i.short -font *-${font12}-*\n\ entry $m_maps.$i.abbrev -font *-${font12}-*\n\ entry $m_maps.$i.note -font *-${font12}-*\n\ button $m_maps.$i.test \\\n\ -bitmap nix \\\n\ -bg $xox(but_grey) \\\n\ -activebackground $xox(but_grey_active) \\\n\ -width 1.0c -height 0.7c\n\ \n\ $m_maps.$i create window 0c 0.5c -window $m_maps.$i.l -anchor w -width 1c\n\ $m_maps.$i create window 1c 0.5c -window $m_maps.$i.long -anchor w -width 4c\n\ $m_maps.$i create window 5c 0.5c -window $m_maps.$i.short -anchor w -width 2.5c\n\ $m_maps.$i create window 7.5c 0.5c -window $m_maps.$i.abbrev -anchor w -width 2.5c\n\ $m_maps.$i create window 10c 0.5c -window $m_maps.$i.note -anchor w -width 1c\n\ $m_maps.$i create window 11.2c 0.5c -window $m_maps.$i.test -anchor w -width 2.1c\n\ \n\ set j [expr $i + 1]\n\ $m_maps.$i.long insert 0 $snd($j,name)\n\ set sbuf($j,name) $snd($j,name)\n\ $m_maps.$i.short insert 0 $snd($j,shortname)\n\ set sbuf($j,shortname) $snd($j,shortname)\n\ $m_maps.$i.abbrev insert 0 $snd($j,abbrev)\n\ set sbuf($j,abbrev) $snd($j,abbrev)\n\ $m_maps.$i.note insert 0 $snd($j,note)\n\ set sbuf($j,note) $snd($j,note)\n\ pack $m_maps.$i\n\ \n\ bind $m_maps.$i.test {map_start_test_note %W}\n\ bind $m_maps.$i.test {map_stop_test_note %W}\n\ \n\ bind $m_maps.$i.note {map_start_set_note %W 1}\n\ bind $m_maps.$i.note {map_stop_set_note %W}\n\ \n\ bind $m_maps.$i.note {map_start_set_note %W -1}\n\ bind $m_maps.$i.note {map_stop_set_note %W}\n\ \n\ bind $m_maps.$i.note {\n\ set noteY %y\n\ }\n\ bind $m_maps.$i.note {\n\ set direction [expr %y - $noteY]\n\ if {$direction >= 0} {\n\ set diff 1\n\ } else {\n\ set diff -1\n\ }\n\ map_start_set_note %W $diff\n\ after 500;\n\ map_stop_set_note %W\n\ }\n\ }\n\ \n\ # Cancel, Apply, OK buttons\n\ #\n\ button $m_opts.cancel -text Cancel -font *-${font12}-* -command {\n\ upvar #0 soundbuf buf\n\ for {set i 0} {$i < 16} {incr i} {\n\ set j [expr $i + 1]\n\ .edit.m.$i.long delete 0 100\n\ .edit.m.$i.long insert 0 $buf($j,name)\n\ set snd($j,name) $buf($j,name)\n\ \n\ .edit.m.$i.short delete 0 100\n\ .edit.m.$i.short insert 0 $buf($j,shortname)\n\ set snd($j,shortname) $buf($j,shortname)\n\ \n\ .edit.m.$i.abbrev delete 0 100\n\ .edit.m.$i.abbrev insert 0 $buf($j,abbrev)\n\ set snd($j,abbrev) $buf($j,abbrev)\n\ \n\ .edit.m.$i.note delete 0 end\n\ .edit.m.$i.note insert 0 $buf($j,note)\n\ set snd($j,note) $buf($j,note)\n\ }\n\ instrument_label_reset\n\ tk7_set_sounds\n\ destroy .edit\n\ }\n\ button $m_opts.apply -text Apply -font *-${font12}-* -command {\n\ map_set_new_sounds\n\ }\n\ button $m_opts.ok -text OK -font *-${font12}-* -command {\n\ map_set_new_sounds\n\ destroy .edit\n\ }\n\ $m_opts create window 1c 0.75c -window $m_opts.cancel -anchor w -width 2.5c\n\ $m_opts create window 4c 0.75c -window $m_opts.apply -anchor w -width 2.5c\n\ $m_opts create window 7c 0.75c -window $m_opts.ok -anchor w -width 2.5c\n\ }\n\ }\n\ \n\ proc map_set_new_sounds {} {\n\ global .edit\n\ upvar #0 sound snd\n\ upvar #0 soundbuf sbuf\n\ \n\ for {set i 0} {$i < 16} {incr i} {\n\ set j [expr $i + 1]\n\ set snd($j,name) [.edit.m.$i.long get]\n\ set snd($j,shortname) [.edit.m.$i.short get]\n\ set snd($j,abbrev) [.edit.m.$i.abbrev get]\n\ set snd($j,note) [.edit.m.$i.note get]\n\ }\n\ instrument_label_reset\n\ tk7_set_sounds\n\ }\n\ \n\ proc map_start_test_note widget {\n\ global .edit\n\ set k [string range [string trimright $widget .test] 8 end]\n\ set n [.edit.m.$k.note get]\n\ tk7_start_note_test $k $n\n\ }\n\ proc map_stop_test_note widget {\n\ global .edit\n\ set k [string range [string trimright $widget .test] 8 end]\n\ set n [.edit.m.$k.note get]\n\ tk7_stop_note_test $k $n\n\ }\n\ proc map_start_set_note {widget diff} {\n\ set newval [expr [$widget get] + $diff]\n\ set newval [expr $newval % 128]\n\ $widget delete 0 end\n\ $widget insert 0 $newval\n\ set k [string range [string trimright $widget .note] 8 end]\n\ tk7_start_note_test $k $newval\n\ }\n\ proc map_stop_set_note {widget} {\n\ set keynum [string range [string trimright $widget .note] 8 end]\n\ set midi_note [$widget get]\n\ tk7_stop_note_test $keynum $midi_note\n\ }\n\ #=============================================================\n\ \n\ #=====================================================\n\ # These procs to edit mapping of instruments to faders\n\ #\n\ proc fader_edit {} {\n\ if {[winfo exists .fadermap]} {\n\ wm deiconify .fadermap\n\ } else {\n\ toplevel .fadermap\n\ wm title .fadermap \"Edit Fader Map\"\n\ \n\ text .fadermap.intro -width 64 -height 16\n\ .fadermap.intro insert end \\\n\ \"Editing of the Instrument to Fader map is not implemented yet.\n\ The default mapping being used is:\n\ \n\ Vol 0 (the first fader ) - unused\n\ Vol 1 - Bass drums 1 & 2\n\ Vol 2 - Snare drums 1 & 2\n\ Vol 3 - Low Tom\n\ Vol 4 - Mid Tom\n\ Vol 5 - High Tom\n\ Vol 6 - Rimshot & Cowbell\n\ Vol 7 - Handclap & Tambourine\n\ Vol 8 - Highhats (all)\n\ Vol 9 - Crash cymbal\n\ Vol 10 - Ride cymbal\n\ VOLUME - Master volume over all instruments\n\ \"\n\ \n\ button .fadermap.ok -text OK -command {destroy .fadermap}\n\ \n\ pack .fadermap.intro\n\ pack .fadermap.ok -expand true -fill x\n\ }\n\ \n\ }\n\ #=====================================================\n\ #\n\ # Flash the lamps for each of the 16 steps in 1 pattern\n\ # (fix later for patterns with fewer steps)\n\ #\n\ #ex: cycle_notes 1 [expr 55 * 120 / $mo(tempo)] 0 0 $steps\n\ proc cycle_notes {on dur w saved steps} {\n\ global notes\n\ upvar #0 tkxox xox\n\ upvar #0 mode mo\n\ upvar #0 flash fl\n\ \n\ if {$on == 1} {\n\ switch $mo(stopgo) {\n\ 0 {\n\ #puts \"stopgo = STOP\"\n\ set fl(count) -1\n\ }\n\ 1 {\n\ incr fl(count)\n\ if {$fl(count) > [expr $steps - 1]} {\n\ set fl(count) -1\n\ return\n\ }\n\ set savecolour [lindex [$notes.note$fl(count).l configure -bg] 4]\n\ set savedwin $notes.note$fl(count).l\n\ #puts \"cycle $fl(count) ON \"\n\ $savedwin configure -bg $xox(col_on)\n\ after $dur [list cycle_notes 0 $dur $savedwin $savecolour $steps]\n\ }\n\ 2 {\n\ #puts \"stopgo = CONT\"\n\ }\n\ }\n\ } else {\n\ # #puts \"cycle $fl(count) OFF\"\n\ $w configure -bg $saved\n\ if {$mo(stopgo) != $xox(START)} {\n\ set fl(count) 15\n\ return\n\ }\n\ \n\ if {$fl(count) < $steps} {\n\ after $dur [list cycle_notes 1 $dur 0 0 $steps]\n\ } else {\n\ set fl(count) -1\n\ return\n\ }\n\ }\n\ \n\ }\n\ proc gridlabels_reset {} {\n\ global gridlabel\n\ global font12\n\ upvar #0 sound so\n\ for {set i 0} {$i < 16} {incr i} {\n\ $gridlabel itemconfigure ilabel$i -text $so([expr 16 - $i],name) \\\n\ -font *-${font12}-* -anchor e\n\ }\n\ }\n\ proc key_labels_reset {} {\n\ global notes\n\ upvar #0 sound so\n\ \n\ for {set i 0} {$i < 16} {incr i} {\n\ $notes.note$i.instr configure -text $so([expr $i + 1],shortname)\n\ }\n\ }\n\ proc volume_labels_reset {} {\n\ global cunit\n\ upvar #0 sound so\n\ upvar #0 volume_label vo\n\ \n\ if {$so(2,abbrev) != \"\"} {\n\ set vo(1) \"$so(1,abbrev)/$so(2,abbrev)\"\n\ } else {\n\ set vo(1) \"$so(1,abbrev)\"\n\ }\n\ if {$so(4,abbrev) != \"\"} {\n\ set vo(2) \"$so(3,abbrev)/$so(4,abbrev)\"\n\ } else {\n\ set vo(2) \"$so(3,abbrev)\"\n\ }\n\ set vo(3) \"$so(5,abbrev)\"\n\ set vo(4) \"$so(6,abbrev)\"\n\ set vo(5) \"$so(7,abbrev)\"\n\ if {$so(9,abbrev) != \"\"} {\n\ set vo(6) \"$so(8,abbrev)/$so(9,abbrev)\"\n\ } else {\n\ set vo(6) \"$so(8,abbrev)\"\n\ }\n\ if {$so(11,abbrev) != \"\"} {\n\ set vo(7) \"$so(10,abbrev)/$so(11,abbrev)\"\n\ } else {\n\ set vo(7) \"$so(10,abbrev)\"\n\ }\n\ if {($so(13,abbrev) != \"\") && ($so(14,abbrev) != \"\")} {\n\ set vo(8) \"$so(12,abbrev)/$so(13,abbrev)/$so(14,abbrev)\"\n\ } elseif {$so(13,abbrev) != \"\"} {\n\ set vo(8) \"$so(12,abbrev)/$so(13,abbrev)\"\n\ } elseif {$so(14,abbrev) != \"\"} {\n\ set vo(8) \"$so(12,abbrev)/$so(14,abbrev)\"\n\ } else {\n\ set vo(8) \"$so(12,abbrev)\"\n\ }\n\ set vo(9) \"$so(15,abbrev)\"\n\ set vo(10) \"$so(16,abbrev)\"\n\ \n\ for {set i 1} {$i < 11} {incr i} {\n\ $cunit.$i.l configure -text $vo($i)\n\ }\n\ }\n\ proc instrument_label_reset {} {\n\ gridlabels_reset\n\ key_labels_reset\n\ volume_labels_reset\n\ }\n\ proc tempoinfo_update {a b c} {\n\ global tempoinfo\n\ upvar $a mo\n\ $tempoinfo itemconfigure tempo -text $mo(tempo)\n\ }\n\ proc measureinfo_update {a b c} {\n\ global tempoinfo\n\ upvar $a mo\n\ upvar #0 tkxox xox\n\ upvar #0 track_list tl\n\ \n\ if {$mo(measure) == -1} {\n\ $tempoinfo itemconfigure tempo -text \"\"\n\ } else {\n\ $tempoinfo itemconfigure tempo -text [expr $mo(measure) + 1]\n\ }\n\ }\n\ proc trackinfo_update {a b c} {\n\ global tminfo\n\ upvar $a mo\n\ \n\ switch $mo(current_track) {\n\ 0 {\n\ $tminfo.t coords trackid 3c 0.45c\n\ $tminfo.t itemconfigure trackid -text I\n\ }\n\ 1 {\n\ $tminfo.t coords trackid 4c 0.45c\n\ $tminfo.t itemconfigure trackid -text II\n\ }\n\ 2 {\n\ $tminfo.t coords trackid 5c 0.45c\n\ $tminfo.t itemconfigure trackid -text III\n\ }\n\ 3 {\n\ $tminfo.t coords trackid 6c 0.45c\n\ $tminfo.t itemconfigure trackid -text IV\n\ }\n\ }\n\ }\n\ proc modeinfo_update {m} {\n\ global tminfo\n\ global tapwrite\n\ global font12\n\ \n\ $tminfo.m delete modetext\n\ switch $m {\n\ 0 {\n\ set tapwrite 1\n\ $tminfo.m create text 1.2c 0.8c -text \"TRACK PLAY\" \\\n\ -tags modetext -anchor w -font *-${font12}-*\n\ }\n\ 1 {\n\ set tapwrite 1\n\ $tminfo.m create text 1.2c 1.1c -text \"TRACK WRITE\" \\\n\ -tags modetext -anchor w -font *-${font12}-*\n\ }\n\ 2 {\n\ set tapwrite 1\n\ $tminfo.m create text 4.2c 0.4c -text \"PATTERN PLAY\" \\\n\ -tags modetext -anchor w -font *-${font12}-*\n\ }\n\ 3 {\n\ if {$tapwrite} {\n\ incr tapwrite -1\n\ $tminfo.m create text 4.2c 0.8c -text \"PATTERN WRITE\" \\\n\ -tags modetext -anchor w -font *-${font12}-*\n\ } else {\n\ incr tapwrite\n\ $tminfo.m create text 4.2c 1.2c -text \"TAP WRITE\" \\\n\ -tags modetext -anchor w -font *-${font12}-*\n\ }\n\ }\n\ }\n\ }\n\ proc scale_lamps_update {} {\n\ global scale_lamps\n\ upvar #0 mode mo\n\ upvar #0 tkxox xox\n\ \n\ set scale [tk7_get_scale $mo(patgroup) $mo(current_pattern)]\n\ for {set i 0} {$i < 4} {incr i} {\n\ set button ${scale_lamps}.l${i}\n\ if {$i == $scale} {\n\ $button configure -background $xox(lamp_on)\n\ } else {\n\ $button configure -background $xox(lamp_off)\n\ }\n\ }\n\ }\n\ proc locate_gridpos {x y result} {\n\ global gridXs gridYs gridSvals gridIvals\n\ upvar $result res\n\ \n\ #puts \"locate_gridpos $x,$y\"\n\ set halo 7\n\ \n\ set resX -1\n\ foreach i $gridXs {\n\ if {($i > [expr $x - $halo]) && ($i < [expr $x + $halo])} {\n\ set resX $i\n\ break\n\ }\n\ }\n\ if {$resX < 0} {\n\ return $resX\n\ }\n\ #puts \"resX = $resX\"\n\ \n\ set resY -1\n\ foreach i $gridYs {\n\ if {($i > [expr $y - $halo]) && ($i < [expr $y + $halo])} {\n\ set resY $i\n\ break\n\ }\n\ }\n\ if {$resY < 0} {\n\ return $resY\n\ }\n\ #puts \"resY = $resY\"\n\ \n\ set res(step) $gridSvals($resX)\n\ set res(inst) $gridIvals($resY)\n\ \n\ return 0\n\ }\n\ \n\ proc play_loop {} {\n\ upvar #0 mode mo\n\ upvar #0 tkxox xox\n\ upvar #0 track_list tl\n\ global button_stop ;# to invoke stop button\n\ if {$mo(stopgo) == $xox(START) && $mo(patr) == $xox(TRACK) && $mo(rdrw) == $xox(READ)} {\n\ \n\ # Playing a track\n\ if {$mo(TRACK_START)} {\n\ set xox(play_list) $tl($mo(current_track))\n\ \n\ # Prepare to display pattern contents\n\ set mo(measure) -1\n\ \n\ set mo(TRACK_START) 0\n\ }\n\ \n\ if {[llength $xox(play_list)] > 0} {\n\ set target [lindex $xox(play_list) 0]\n\ set group [expr $target / 16]\n\ set pat [expr $target % 16]\n\ set xox(play_list) [lreplace $xox(play_list) 0 0]\n\ \n\ # Prepare to display pattern contents\n\ set target [expr $mo(measure) + 1]\n\ set mo(measure) [measure_constrain $target]\n\ } else {\n\ $button_stop invoke\n\ }\n\ \n\ if {$mo(PATTERN_REPEAT)} {\n\ play_pattern $group $pat\n\ }\n\ \n\ # Update pattern display\n\ pattern_show\n\ \n\ } else { # Not playing a track\n\ \n\ if {$mo(PATTERN_REPEAT)} {\n\ play_pattern $mo(patgroup) $mo(current_pattern)\n\ }\n\ }\n\ after $mo(REPEAT_INTERVAL) play_loop\n\ }\n\ # ----------------------------------------------------------------------------\n\ # Edit Pattern Comment\n\ # ----------------------------------------------------------------------------\n\ \n\ proc get_current_pattern_name {} {\n\ upvar #0 mode mo\n\ switch $mo(patgroup) {\n\ 0 { set g \"A\"; }\n\ 1 { set g \"B\"; }\n\ 2 { set g \"C\"; }\n\ 3 { set g \"D\"; }\n\ }\n\ set name \"$g[expr $mo(current_pattern)+1]\";\n\ return $name;\n\ }\n\ set comment .pattern_comment;\n\ \n\ proc refresh_comment {} {\n\ upvar #0 mode mo\n\ global comment;\n\ if {[winfo exists $comment]} {\n\ set name [get_current_pattern_name];\n\ wm title $comment \"$name pattern comment\"\n\ set old_comment [$comment.string get]\n\ $comment.string delete 0 [expr [string length $old_comment] ]\n\ set current_comment [tk7_get_pattern_comment $mo(patgroup) $mo(current_pattern)]\n\ $comment.string insert 0 \"$current_comment\"\n\ }\n\ }\n\ proc edit_pattern_comment {} {\n\ upvar #0 mode mo\n\ upvar #0 tkxox xox\n\ global comment\n\ \n\ if {[winfo exists $comment]} {\n\ wm deiconify $comment\n\ } else {\n\ toplevel $comment\n\ \n\ button $comment.quit -text quit -command {wm iconify $comment}\n\ button $comment.ok -text ok -command comment_ok\n\ pack $comment.quit $comment.ok -side right\n\ \n\ # label $comment.label -text Comment: -padx 0\n\ entry $comment.string -width 20 -relief sunken\n\ # pack $comment.label -side left\n\ pack $comment.string -side left -fill x -expand true\n\ \n\ bind $comment.string comment_ok\n\ bind $comment.string {wm iconify $comment}\n\ focus $comment.string \n\ }\n\ refresh_comment;\n\ }\n\ proc comment_ok {} {\n\ upvar #0 mode mo;\n\ global comment;\n\ set stringval [$comment.string get];\n\ set name [get_current_pattern_name];\n\ puts \"set $name comment to \\\"$stringval\\\"\";\n\ tk7_set_pattern_comment $mo(patgroup) $mo(current_pattern) $stringval;\n\ # wm iconify $comment;\n\ }\n\ "; tk707-0.8/help.c0000644000175100017510000003305010142141776010260 00000000000000char tcl_help[] = "\ #\n\ # This file is part of tk707.\n\ #\n\ # Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito \n\ #\n\ # tk707 is free software; you can redistribute it and/or modify\n\ # it under the terms of the GNU General Public License as published by\n\ # the Free Software Foundation; either version 2 of the License, or\n\ # (at your option) any later version.\n\ #\n\ # Foobar is distributed in the hope that it will be useful,\n\ # but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ # GNU General Public License for more details.\n\ #\n\ # You should have received a copy of the GNU General Public License\n\ # along with Foobar; if not, write to the Free Software\n\ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n\ #\n\ # =================================================================\n\ # The Help Module\n\ # =================================================================\n\ \n\ set HELP(UserGuide) $PKGDATADIR/tk707.help\n\ \n\ # ----------------------------------------------------------\n\ # formatText\n\ # ----------------------------------------------------------\n\ # This procedure tags the text in a text widget (if format is true),\n\ # based on the character in \"char\". \n\ # Text Marks \"first\" and \"last\" need to have been set prior to calling \n\ # the procedure. These mark the range of characters to be tagged.\n\ # The parameters are as follows:\n\ # w : is the path of the text widget.\n\ # char : is the character determining which tag is to be set.\n\ # The current valid characters are:\n\ # u : underline\n\ # i : italic\n\ # c : command\n\ # Cn : Content item, n is a positive integer. \n\ # t : title\n\ # h : highlight\n\ # @ : keep the @ character. \n\ # format : is a boolean value, which when true causes the text to be formatted.\n\ # when false it removes all format information from the text\n\ # without tagging\n\ proc formatText { w char {format 1} } {\n\ global HELP\n\ \n\ # Format the text.\n\ if {$format} {\n\ switch $char {\n\ u { $w delete last \"last + 1 chars\"\n\ $w tag add underline \"last\" \"last wordend\"\n\ }\n\ @ { $w insert first @ }\n\ c { $w delete last \"last + 1 chars\"\n\ $w tag add command \"last\" \"last wordend\"\n\ }\n\ C { \n\ set tab \"\"\n\ set tabs [$w get \"last + 1 chars\" \"last + 2 chars\"]\n\ $w delete last \"last + 2 chars\"\n\ while {$tabs} {\n\ set tab \"$tab \" ;\n\ incr tabs -1\n\ }\n\ lappend HELP(Contents)\\\n\ [list \"$tab[$w get \"first\" \"first lineend\"]\" \\\n\ [$w index first]]\n\ }\n\ t { $w delete last \"last + 1 chars\"\n\ $w tag add title \"last\" \"last lineend\"\n\ }\n\ h { $w delete last \"last + 1 chars\"\n\ $w tag add highlight \"last\" \"last wordend\"\n\ }\n\ i { $w delete last \"last + 1 chars\"\n\ $w tag add italic \"last\" \"last wordend\"\n\ }\n\ default { }\n\ }\n\ \n\ # Remove all format data without formatting.\n\ } else {\n\ set ok 0\n\ foreach i {u c C t h i} {\n\ if {$i==$char} { \n\ $w delete last \"last + 1 chars\"\n\ set ok 1 \n\ }\n\ }\n\ if {!$ok} { $w insert last @ }\n\ }\n\ }\n\ # ----------------------------------------------------------\n\ # Set Help globals.\n\ # ----------------------------------------------------------\n\ set HELP(BG) snow2\n\ set HELP(FG) black\n\ set HELP(AFG) grey\n\ set HELP(HIL) red\n\ set HELP(COM) DarkGreen\n\ set HELP(Log) \"0\"\n\ \n\ # ----------------------------------------------------------\n\ # about\n\ # ----------------------------------------------------------\n\ proc about {} {\n\ global VERSION\n\ if {[winfo exists .about]} {\n\ wm deiconify .about\n\ } else {\n\ toplevel .about\n\ wm title .about \"About tk707...\"\n\ label .about.label -text \"\n\ TK 707\\n\n\ version $VERSION\\n\n\ \n\ Copyright(C) 2000, 2001\\n\n\ Chris Willing ,\\n\n\ Pierre Saramito .\\n\n\ \n\ Go to the Help menu for the complete documentation.\n\ This documentation is available in HTML and INFO formats.\n\ Type `man tk707` to access the on-line reference manual.\n\ \n\ The tk707 documentation is also available in html, pdf, postscript and\n\ dvi formats from\\n\n\ http://www-lmc.imag.fr/lmc-edp/Pierre.Saramito/tk707\n\ http://www.vislab.usyd.edu.au/staff/chris/tk707\n\ \n\ Send comments and requests, bugs, suggestions and mods \n\ to the both authors.\"\n\ \n\ frame .about.sep -width 100p -height 2p -borderwidth 1p -relief sunken\n\ button .about.dismiss -text \"Dissmiss\" -command {wm iconify .about}\n\ pack .about.label\n\ pack .about.dismiss -side bottom -pady 4p\n\ pack .about.sep -side bottom -fill x -pady 4p\n\ }\n\ }\n\ # ----------------------------------------------------------\n\ # UserManual\n\ # ----------------------------------------------------------\n\ # This procedure is the callback to to the Help-User's Manual menu item.\n\ # It creates a pop-up window containing the user's manual, with a few \n\ # basic highlighting and goto features.\n\ proc UserManual {} {\n\ global HELP FILE\n\ \n\ # Only procede if the help window is non-existant. \n\ if {![winfo exists .help]} {\n\ set HELP(Contents) \"\"\n\ \n\ # Create the toplevel window.\n\ toplevel .help -bg $HELP(BG)\n\ # Set the geometry\n\ wm geometry .help 80x25\n\ wm title .help \"Tk-707 User's Guide\"\n\ # Set the Icon information.\n\ wm iconname .help Help\n\ \n\ # Create the buttons panel (Contents, Back, Exit)\n\ frame .help.buttons -bg $HELP(BG) -relief ridge -bd 4\n\ # Create the Contents button.\n\ button .help.buttons.contents\\\n\ -text Contents\\\n\ -bg $HELP(AFG)\\\n\ -fg $HELP(FG)\\\n\ -activeforeground $HELP(FG)\\\n\ -activebackground $HELP(AFG)\\\n\ -width 10\\\n\ -command {.help.help.text yview 0}\n\ # Create the Back button.\n\ button .help.buttons.prev\\\n\ -text Back\\\n\ -bg $HELP(AFG)\\\n\ -fg $HELP(FG)\\\n\ -width 10\\\n\ -activebackground $HELP(AFG)\\\n\ -command {\n\ set end [expr [llength $HELP(Log)]-1]\n\ set value [lindex $HELP(Log) [expr $end-1]]\n\ .help.help.text yview $value\n\ set HELP(Log) [lreplace $HELP(Log) $end $end]\n\ }\n\ # Create the Exit button.\n\ button .help.buttons.exit\\\n\ -text Exit\\\n\ -bg $HELP(AFG)\\\n\ -fg $HELP(FG)\\\n\ -activeforeground $HELP(FG)\\\n\ -activebackground $HELP(AFG)\\\n\ -width 10\\\n\ -command {destroy .help}\n\ \n\ # Procedure to call when HELP(Log) is written\n\ proc setlog {nm1 nm2 op} {\n\ global HELP\n\ if {$HELP(Log)==0} {\n\ .help.buttons.prev config -state disabled \n\ } else {\n\ .help.buttons.prev config -state normal\n\ }\n\ }\n\ \n\ # Set a variable trace on the Help(Log) variable to ensure that\n\ # the Back button is disabled when the log is empty.\n\ trace variable HELP(Log) w setlog\n\ \n\ # Set the current state of the Back button.\n\ set HELP(Log) $HELP(Log)\n\ \n\ # Pack the buttons.\n\ pack .help.buttons.contents \\\n\ .help.buttons.prev\\\n\ .help.buttons.exit\\\n\ -side left -anchor w\n\ \n\ pack .help.buttons -anchor w -fill x\n\ \n\ # Create and pack the text widget (with scrollbar)\n\ setupText .help.help\n\ \n\ # Load the User's Guide into widget and generate contents list.\n\ loadFile .help.help.text $HELP(UserGuide)\n\ \n\ # Insert the contents list.\n\ set i 1\n\ foreach item $HELP(Contents) {\n\ .help.help.text insert $i.0 [format \"[lindex $item 0]\\n\"]\n\ .help.help.text tag add content $i.0 \"$i.0 lineend\"\n\ incr i\n\ }\n\ incr i 2\n\ # Insert the \"Contents\" title.\n\ .help.help.text insert 1.0 [format \"Contents\\n\\n\"]\n\ # Give it the format of a title.\n\ .help.help.text tag add title 1.0 \"1.0 lineend\"\n\ # Store the number of lines added after Contents line.\n\ set xtraLinesBefore 2\n\ \n\ # Add 3 blank lines after contents.\n\ # This has to be stored for later\n\ set xtraLinesAfter 3\n\ .help.help.text insert $i.0 [format \"\\n\\n\\n\"]\n\ # Strip the Format code from the Contents list\n\ forAllMatches .help.help.text @ {\n\ .help.help.text delete first last\n\ set char [.help.help.text get last \"last+ 1 chars\"]\n\ formatText .help.help.text $char 0\n\ }\n\ # Configure and Bind content list.\n\ # A different cursor when above the item\n\ .help.help.text tag bind content \\\n\ \".help.help.text configure -cursor arrow\"\n\ .help.help.text tag bind content \\\n\ \".help.help.text configure -cursor {}\"\n\ # Skip to the relevant line.\n\ .help.help.text tag bind content \\\n\ \"set index \\[ expr \\[lindex \\[split \\[%W index @%x,%y\\] .\\] 0\\]\\\n\ -(1 +$xtraLinesBefore)\\]\n\ set goto \\[expr \\[lindex \\[lindex \\$HELP(Contents) \\$index\\] 1\\] +2\\\n\ +$xtraLinesAfter +\\[llength \\$HELP(Contents)\\]\\]\n\ \n\ # Store in the log.\n\ lappend HELP(Log) \\$goto\n\ \n\ # Adjust the view to the selected line.\n\ %W yview \\$goto\"\n\ } else {\n\ # Bring the user manual to the front.\n\ # I am not using raise since it doesn't generally work for olwm.\n\ wm withdraw .help\n\ wm deiconify .help\n\ }\n\ }\n\ \n\ # ----------------------------------------------------------\n\ # setupText\n\ # ----------------------------------------------------------\n\ # This procedure creates a text widget and scroll bar.\n\ # The parameter \"w\" is a path for the combined widget.\n\ proc setupText {w} {\n\ global HELP\n\ \n\ #Create Widgets if the path name is valid.\n\ if {![winfo exists $w]} {\n\ # Create the general frame.\n\ frame $w\n\ \n\ # Create the text widget.\n\ # The configuration option \"setgrid\" sets up gridded \n\ # window management.\n\ text $w.text -yscrollcommand \"$w.scroll set\"\\\n\ -setgrid 1 \\\n\ -wrap word\n\ # Create the scrollbar.\n\ scrollbar $w.scroll -command \"$w.text yview\"\n\ \n\ # Pack the widget.\n\ pack $w.text -fill both -expand 1 -side left\n\ pack $w.scroll -side left -fill y -expand 1\n\ pack $w -fill both -expand 1\n\ }\n\ \n\ # Configure the Widgets.\n\ $w config -bg $HELP(BG)\n\ $w.text config\\\n\ -background $HELP(BG)\\\n\ -foreground $HELP(FG)\\\n\ -cursor {}\\\n\ -font -adobe-helvetica-medium-r-normal--12-120-*\\\n\ -exportselection 0\n\ \n\ $w.scroll config -background $HELP(BG)\n\ \n\ # Remove the default bindings that make the text widget editable.\n\ bind $w.text { }\n\ bind $w.text { }\n\ bind $w.text { }\n\ \n\ # Set the configuration for text tags.\n\ # Underline.\n\ $w.text tag configure underline -underline 1\n\ # Command\n\ $w.text tag configure command \\\n\ -foreground DarkGreen\\\n\ -font -adobe-helvetica-medium-r-normal--14-140-*\n\ $w.text tag bind command { \n\ puts [%W get \"@%x,%y wordstart\" \"@%x,%y wordend\"] }\n\ $w.text tag bind command \"$w.text configure -cursor arrow\"\n\ $w.text tag bind command \"$w.text configure -cursor {}\"\n\ # Content\n\ $w.text tag configure content \\\n\ -foreground DarkGreen \\\n\ -font -adobe-helvetica-medium-r-normal--14-140-*\n\ # Title.\n\ $w.text tag configure title -font -adobe-helvetica-medium-r-normal--24-240-*\n\ # Italic\n\ $w.text tag configure italic -font -adobe-helvetica-medium-o-normal--12-120-*\n\ # Highlight.\n\ $w.text tag configure highlight -foreground red\n\ }\n\ \n\ \n\ # ----------------------------------------------------------\n\ # loadFile\n\ # ----------------------------------------------------------\n\ # This procedure load a text file given by \"file\" formatted with a \n\ # simple form of hyper-text into the text widget given by \"w\". And\n\ # format it.\n\ proc loadFile {w file} {\n\ # Delete all previous text in the text widget.\n\ $w delete 1.0 end\n\ \n\ # Open the text file.\n\ set f [open $file]\n\ \n\ # Insert the text into the text widget.\n\ while {![eof $f]} {\n\ $w insert end [read $f 1000]\n\ }\n\ \n\ # Close the text file.\n\ close $f\n\ \n\ # Format the text. This is done by looking for all the \"@\" in the\n\ # text widget, deleting it and sending the following character to\n\ # the procedure formaText, which tags the text appropriately.\n\ forAllMatches $w @ {\n\ $w delete first last\n\ set char [$w get last \"last+ 1 chars\"]\n\ formatText $w $char\n\ }\n\ }\n\ \n\ # ----------------------------------------------------------\n\ # forAllMatches\n\ # ----------------------------------------------------------\n\ # This procedure takes three arguments: the name of a text widget, \n\ # a regular expression pattern and a script. \n\ # It finds all of the ranges of characters that match the pattern. \n\ # For each matching range forAllMatches sets the marks first and last \n\ # to the beginning and end of the of the range, then it invokes the \n\ # script.\n\ # This procedure has been taken from John K. Ousterhout's book,\n\ # Tcl and the Tk Toolkit (1994) p.219. \n\ proc forAllMatches {w pattern script} {\n\ scan [$w index end] %d numLines\n\ for {set i 1} {$i<=$numLines} {incr i } {\n\ $w mark set last $i.0\n\ while {[regexp -indices $pattern \\\n\ [$w get last \"last lineend\" ] indices ] } {\n\ $w mark set first \"last + [lindex $indices 0] chars\"\n\ $w mark set last \"last + 1 chars +[lindex $indices 1] chars\"\n\ uplevel $script\n\ }\n\ }\n\ }\n\ "; tk707-0.8/tk707.c0000644000175100017510000007757710142141776010232 00000000000000char tcl_tk707[] = "\ #\n\ # This file is part of tk707.\n\ #\n\ # Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito \n\ #\n\ # tk707 is free software; you can redistribute it and/or modify\n\ # it under the terms of the GNU General Public License as published by\n\ # the Free Software Foundation; either version 2 of the License, or\n\ # (at your option) any later version.\n\ #\n\ # Foobar is distributed in the hope that it will be useful,\n\ # but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ # GNU General Public License for more details.\n\ #\n\ # You should have received a copy of the GNU General Public License\n\ # along with Foobar; if not, write to the Free Software\n\ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n\ #\n\ # ======================================================\n\ # File tk707.tcl\n\ # Remainder of gui, including key & mouse bindings. Then RUN!\n\ #\n\ # Pattern memory is now in C-land but track memory still in tcl/tk.\n\ # ======================================================\n\ \n\ mem_init\n\ \n\ # ======================================================\n\ # lamps into the score\n\ # ======================================================\n\ set score_width [expr $score_width_in_inch * $cm_per_inch]\n\ set score_height [expr $score_height_in_inch * $cm_per_inch]\n\ set lamp_width 0.40;\n\ set lamp_height 0.15;\n\ set scale_lamps $score\n\ \n\ set scale_lamp3 $score.l3\n\ set scale_lamp2 $score.l2\n\ set scale_lamp1 $score.l1\n\ set scale_lamp0 $score.l0\n\ label $scale_lamp3 -bitmap nix -width ${lamp_width}c -height ${lamp_height}c \\\n\ -relief groove -borderwidth 2 -bg $tkxox(lamp_off)\n\ label $scale_lamp2 -bitmap nix -width ${lamp_width}c -height ${lamp_height}c \\\n\ -relief groove -borderwidth 2 -bg $tkxox(lamp_off)\n\ label $scale_lamp1 -bitmap nix -width ${lamp_width}c -height ${lamp_height}c \\\n\ -relief groove -borderwidth 2 -bg $tkxox(lamp_off)\n\ label $scale_lamp0 -bitmap nix -width ${lamp_width}c -height ${lamp_height}c \\\n\ -relief groove -borderwidth 2 -bg $tkxox(lamp_on)\n\ pack $scale_lamp3 -side bottom\n\ pack $scale_lamp2 -side bottom\n\ pack $scale_lamp1 -side bottom\n\ pack $scale_lamp0 -side bottom\n\ set x 0.75\n\ set dy [expr $score_height / 4.0 - 0.04]\n\ set y3 [expr $dy/2 - 0.01];\n\ set y2 [expr $y3 + $dy]\n\ set y1 [expr $y2 + $dy]\n\ set y0 [expr $y1 + $dy]\n\ \n\ $scale_lamps create window ${x}c ${y3}c -window $scale_lamp3;\n\ $scale_lamps create window ${x}c ${y2}c -window $scale_lamp2;\n\ $scale_lamps create window ${x}c ${y1}c -window $scale_lamp1;\n\ $scale_lamps create window ${x}c ${y0}c -window $scale_lamp0;\n\ \n\ focus ${scale_lamp0}\n\ # ======================================================\n\ # Grid Display Area\n\ # ======================================================\n\ # Vertical lines\n\ set xcoord 0.0\n\ for {set i 0} {$i < 16} {incr i} {\n\ set xcoord [expr $xcoord + 0.5]\n\ $grid create line ${xcoord}c 0.5c ${xcoord}c 9.0c -fill #aaaaaa\n\ set pvalX [tk7_cm2pix $grid ${xcoord}c]\n\ lappend gridXs $pvalX\n\ set gridSvals($pvalX) $i\n\ }\n\ # Horizontal lines\n\ set ycoord 0.5\n\ for {set i 0} {$i < 16} {incr i} {\n\ set ycoord [expr $ycoord + 0.5]\n\ $grid create line 0.0c ${ycoord}c 8.5c ${ycoord}c -fill #aaaaaa\n\ set pvalY [tk7_cm2pix $grid ${ycoord}c]\n\ lappend gridYs $pvalY\n\ set gridIvals($pvalY) [expr 15 - $i]\n\ }\n\ # -----------------------\n\ # Step markers\n\ # -----------------------\n\ set xcoord 0.0\n\ for {set i 0} {$i < 16} {incr i} {\n\ set xcoord [expr $xcoord + 0.5]\n\ $grid create text ${xcoord}c 0.28125c -text [expr $i + 1] -font *-${font12}-*\n\ }\n\ # -----------------------\n\ # Instrument labels\n\ # -----------------------\n\ $gridlabel create text 2.85c 0.28125c -text Step -font *-${font12}-* -anchor e\n\ set xcoord 0.5\n\ set ycoord 0.5625\n\ for {set i 0} {$i < 16} {incr i} {\n\ set ycoord [expr $ycoord + 0.5]\n\ $gridlabel create text 2.85c ${ycoord}c -tags ilabel$i \\\n\ -text $sound([expr 16 - $i],name) -font *-${font12}-* -anchor e\n\ }\n\ $tempoinfo create text 1c 0.5c -text TEMPO -font *-${font12}-* -tags tmtitle\n\ $tempoinfo create text 3.6c 1.5c -text \"$mode(tempo)\" -tags tempo \\\n\ -font -${courrier_boldfont_i_50}-* -anchor e\n\ #trace variable mode(tempo) w tempoinfo_update\n\ $tminfo.t create text 0.2c 0.45c -text TRACK -anchor w -font *-${normal_r_14}-*\n\ $tminfo.t create text 3c 0.45c -text \"\" -tags trackid -font *-${normal_r_14}-*\n\ trace variable mode(current_track) w trackinfo_update\n\ $tminfo.m create text 0.2c 0.4c -text STATUS -anchor w -font *-${font12}-*\n\ # ===================================================================================\n\ # Volume controls\n\ # ===================================================================================\n\ set vol_tics_width 0.25\n\ \n\ set title_width [expr ${title_width_in_inch} * ${cm_per_inch}];\n\ set title_height [expr ${title_height_in_inch} * ${cm_per_inch}];\n\ set space_height [expr ${title_height}/4.];\n\ set volspacer $vcunit.spacer\n\ canvas $volspacer -width ${title_width}c -height ${space_height}c\n\ pack $volspacer\n\ \n\ set cunit $vcunit.u\n\ frame $cunit;\n\ pack $cunit\n\ for {set i 0} {$i<11} {incr i} {\n\ frame $cunit.$i ;# -relief groove -borderwidth 2\n\ frame $cunit.$i.sf\n\ if {$i == 0} {\n\ canvas $cunit.$i.sf.cl -width 1.2c -height 4c\n\ $cunit.$i.sf.cl create text 1.2c 0.4c -text MAX -font *-${font12}-* -anchor e\n\ $cunit.$i.sf.cl create text 1.2c 3.6c -text MIN -font *-${font12}-* -anchor e\n\ pack $cunit.$i.sf.cl -side left\n\ set vol_space_width [expr 4*${vol_tics_width}];\n\ } else {\n\ set vol_space_width ${vol_tics_width};\n\ }\n\ canvas $cunit.$i.sf.c -width 0.25c -height 4c\n\ for {set j 1} {$j < 10} {incr j} {\n\ set y [expr 0.4 * $j]\n\ $cunit.$i.sf.c create line 0c ${y}c ${vol_tics_width}c ${y}c\n\ }\n\ $cunit.$i.sf.c create line 0c 0.4c 0.25c 0.4c -width 2\n\ $cunit.$i.sf.c create line 0c 2.0c 0.25c 2.0c -width 2\n\ $cunit.$i.sf.c create line 0c 3.6c 0.25c 3.6c -width 2\n\ scale $cunit.$i.sf.s -orient vertical -from 100 -to 0 -length 4c \\\n\ -width 0.4c -sliderlength 0.8c \\\n\ -activebackground $tkxox(vol_slider_active) \\\n\ -troughcolor $tkxox(vol_trough_color) \\\n\ -background $tkxox(vol_slider_passive) \\\n\ -highlightbackground $tkxox(vol_highlightbackground) \\\n\ -showvalue false -borderwidth 1p \\\n\ -command volset -relief groove\n\ \n\ eval canvas $cunit.$i.sf.spacer -width ${vol_space_width}c -height 4c ${debug_relief};\n\ pack $cunit.$i.sf.spacer -side right\n\ \n\ pack $cunit.$i -side left\n\ pack $cunit.$i.sf\n\ pack $cunit.$i.sf.c -side left\n\ pack $cunit.$i.sf.s -side left\n\ frame $cunit.$i.lab\n\ \n\ eval label $cunit.$i.l -height 1 -font *-${font8}-* \\\n\ -text $volume_label($i) -justify left ${debug_relief}\n\ pack $cunit.$i.l -expand true -fill x\n\ \n\ # Initialise fader setting\n\ if {$i == 0} {\n\ $cunit.$i.sf.s set 100\n\ } else {\n\ $cunit.$i.sf.s set 66\n\ }\n\ }\n\ set masterv $cunit.11\n\ frame $masterv\n\ frame $masterv.sf\n\ pack $masterv -side left\n\ pack $masterv.sf\n\ \n\ set master_width 0.5;\n\ set master_height 5.0;\n\ set master_n_tics 10;\n\ set master_tics_width 0.7;\n\ set master_sliderlength [expr 2.*${master_height}/${master_n_tics}]\n\ set master_incr_height [expr ${master_height}/(${master_n_tics}+2)];\n\ set vol_space_width [expr 3*${vol_tics_width}];\n\ eval canvas $masterv.sf.spacer -width ${vol_space_width}c -height ${master_height}c \\\n\ ${debug_relief}\n\ pack $masterv.sf.spacer -side left\n\ \n\ set master_hi_color #ffff00000000; # red\n\ set master_hibg_color #f332ffff0000; # yellow\n\ set master_acbg_color #000044cffb22; # blue\n\ set master_fg_color #000044440000; # green\n\ #-background $tkxox(but_grey) \\\n\ \n\ canvas $masterv.sf.cl -width ${master_tics_width}c -height ${master_height}c\n\ scale $masterv.sf.s -orient vertical -from 100 -to 0 \\\n\ -length ${master_height}c -width ${master_width}c \\\n\ -sliderlength ${master_sliderlength}c \\\n\ -activebackground $tkxox(vol_slider_active) \\\n\ -troughcolor $tkxox(vol_trough_color) \\\n\ -background $tkxox(vol_slider_passive) \\\n\ -highlightbackground $tkxox(vol_highlightbackground) \\\n\ -showvalue false \\\n\ -command volset \\\n\ -borderwidth 1p \\\n\ -relief groove\n\ \n\ \n\ canvas $masterv.sf.cr -width 2.0c -height ${master_height}c\n\ $masterv.sf.s set 100\n\ for {set i 0} {$i <= ${master_n_tics}} {incr i} {\n\ if {$i == 0 || 2*$i == ${master_n_tics} || $i == ${master_n_tics} } {\n\ set width_in_point 2;\n\ } else {\n\ set width_in_point 1;\n\ }\n\ set y [expr ${master_incr_height} * ($i + 1)]\n\ $masterv.sf.cl create line 0c ${y}c 1.5c ${y}c \\\n\ -width ${width_in_point}p\n\ $masterv.sf.cr create line 0c ${y}c ${master_tics_width}c ${y}c \\\n\ -width ${width_in_point}p\n\ }\n\ set x [expr ${master_tics_width} * 1.2 ]\n\ set y [expr ${master_incr_height} * (0 + 1)]\n\ $masterv.sf.cr create text ${x}c ${y}c -text MAX -font *-${font12}-* -anchor w\n\ set y [expr ${master_incr_height} * (${master_n_tics} + 1)]\n\ $masterv.sf.cr create text ${x}c ${y}c -text MIN -font *-${font12}-* -anchor w\n\ eval label $masterv.l -text \"VOLUME\" -justify right -font *-${boldfont12}-* ${debug_relief}\n\ \n\ pack $masterv.sf.cl $masterv.sf.s $masterv.sf.cr -side left\n\ pack $masterv.l -expand true -fill x\n\ $masterv.sf.cl configure\n\ \n\ set bypassval 0\n\ set bypass $vcunit.bypass\n\ frame $bypass\n\ pack $bypass\n\ label $bypass.l -text \"BYPASS Faders\" -font *-${font12}-*\n\ button $bypass.b -bitmap nix -width 3.5c -height 0.75c \\\n\ -background $tkxox(but_grey) -activebackground $tkxox(but_grey_active) \\\n\ -command {vol_bypass [incr bypassval -1]}\n\ pack $bypass.b\n\ pack $bypass.l\n\ set volspacerB $vcunit.spacerB\n\ canvas $volspacerB -width ${title_width}c -height ${space_height}c\n\ pack $volspacerB\n\ \n\ proc volset {val} {\n\ global cunit\n\ \n\ for {set i 0} {$i < 12} {incr i} {\n\ lappend vals [$cunit.$i.sf.s get]\n\ }\n\ eval tk7_set_vols $vals\n\ \n\ }\n\ proc vol_bypass {n} {\n\ global bypassval cunit vcunit masterv\n\ global font12\n\ \n\ set bypassval [expr abs($n)] ;# Should now be 0 or 1\n\ if {$bypassval} {\n\ for {set i 0} {$i < 11} {incr i} {\n\ $cunit.$i.sf.s configure -state disabled\n\ $masterv.sf.s configure -state disabled\n\ $vcunit.bypass.l configure -text \"ACTIVATE Faders\" -font *-${font12}-*\n\ tk7_set_vols 100 100 100 100 100 100 100 100 100 100 100 100\n\ }\n\ } else {\n\ for {set i 0} {$i < 11} {incr i} {\n\ $cunit.$i.sf.s configure -state normal\n\ $masterv.sf.s configure -state normal\n\ $vcunit.bypass.l configure -text \"BYPASS Faders\" -font *-${font12}-*\n\ volset 0\n\ }\n\ }\n\ \n\ }\n\ # ======================================================\n\ # small buttons area\n\ # ======================================================\n\ \n\ # ------------------------------------------------------\n\ # Clear/Scale/Last Step/Instrument Guide\n\ # ------------------------------------------------------\n\ eval frame $misc.lt1 $debug_relief\n\ pack $misc.lt1\n\ label $misc.lt1.clear -text CLEAR -font *-${boldfont12}-* -anchor c\n\ pack $misc.lt1.clear\n\ button $misc.b1 -bitmap nix -width 0.75c -height 0.75c \\\n\ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active)\n\ eval frame $misc.lb1 $debug_relief\n\ pack $misc.lb1\n\ label $misc.lb1.clear -text CLEAR -font *-${boldfont12}-* -anchor c\n\ pack $misc.lb1.clear\n\ $misc create window 0.8c 1.4c -window $misc.lt1 -anchor s\n\ $misc create window 0.8c 2c -window $misc.b1 -anchor c\n\ $misc create window 0.8c 2.65c -window $misc.lb1 -anchor n\n\ bind $misc.b1 {ac_clear 0}\n\ bind $misc.b1 {ac_clear 1}\n\ bind $misc.b1 {ac_clear 2}\n\ bind $misc.b1 {ac_clear 3}\n\ \n\ eval frame $misc.lt2 $debug_relief;\n\ pack $misc.lt2\n\ label $misc.lt2.scale -text SCALE -font *-${boldfont12}-* -anchor c\n\ pack $misc.lt2.scale\n\ button $misc.b2 -bitmap nix -width 0.75c -height 0.75c \\\n\ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active)\n\ eval frame $misc.lb2 $debug_relief;\n\ pack $misc.lb2\n\ label $misc.lb2.back -text BACK -font *-${boldfont12}-* -anchor c\n\ pack $misc.lb2.back\n\ $misc create window 2.0c 1.4c -window $misc.lt2 -anchor s\n\ $misc create window 2.0c 2c -window $misc.b2 -anchor c\n\ $misc create window 2.0c 2.65c -window $misc.lb2 -anchor n\n\ bind $misc.b2 <1> ac_scaleback\n\ \n\ eval frame $misc.lt3 $debug_relief;\n\ pack $misc.lt3\n\ label $misc.lt3.last -text LAST -font *-${boldfont12}-* -anchor c\n\ label $misc.lt3.step -text STEP -font *-${boldfont12}-* -anchor c\n\ pack $misc.lt3.last $misc.lt3.step\n\ button $misc.b3 -bitmap nix -width 0.75c -height 0.75c \\\n\ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active)\n\ eval frame $misc.lb3 $debug_relief;\n\ pack $misc.lb3\n\ label $misc.lb3.fwd -text FWD -font *-${boldfont12}-* -anchor c\n\ pack $misc.lb3.fwd\n\ $misc create window 3.2c 1.4c -window $misc.lt3 -anchor s\n\ $misc create window 3.2c 2c -window $misc.b3 -anchor c\n\ $misc create window 3.2c 2.65c -window $misc.lb3 -anchor n\n\ bind $misc.b3 <1> ac_lastfwd\n\ \n\ eval frame $misc.lt4 $debug_relief;\n\ pack $misc.lt4\n\ label $misc.lt4.inst -text INSTR -font *-${boldfont12}-* -anchor c\n\ label $misc.lt4.guide -text /GUIDE -font *-${boldfont12}-* -anchor c\n\ pack $misc.lt4.inst $misc.lt4.guide\n\ button $misc.b4 -bitmap nix -width 0.75c -height 0.75c \\\n\ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active)\n\ eval frame $misc.lb4 $debug_relief;\n\ pack $misc.lb4\n\ label $misc.lb4.last -text LAST -font *-${boldfont12}-* -anchor c\n\ label $misc.lb4.meas -text MEAS -font *-${boldfont12}-* -anchor c\n\ pack $misc.lb4.last $misc.lb4.meas\n\ $misc create window 4.4c 1.4c -window $misc.lt4 -anchor s\n\ $misc create window 4.4c 2c -window $misc.b4 -anchor c\n\ $misc create window 4.4c 2.65c -window $misc.lb4 -anchor n\n\ \n\ bind $misc.b4 <1> {ac_lastmeas 0}\n\ bind $misc.b4 {ac_lastmeas 1}\n\ bind $misc.b4 {ac_lastmeas 2}\n\ bind $misc.b4 {ac_lastmeas 3}\n\ \n\ # ------------------------------------------------------\n\ # Shuffle/Flam & Tempo/Measure controls\n\ # ------------------------------------------------------\n\ #\n\ # shuffle/flam\n\ #\n\ eval frame $st.lt1 $debug_relief;\n\ pack $st.lt1\n\ label $st.lt1.shuff -text SHUFFLE -font *-${boldfont12}-*\n\ label $st.lt1.flam -text /FLAM -font *-${boldfont12}-*\n\ pack $st.lt1.shuff $st.lt1.flam\n\ button $st.b1 -bitmap nix -width 0.75c -height 0.75c \\\n\ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active)\n\ eval frame $st.lb1 $debug_relief;\n\ pack $st.lb1\n\ label $st.lb1.midi -text \"MIDI CH\" -font *-${boldfont12}-* \\\n\ -fg $tkxox(color_fg_shift) -bg $tkxox(color_bg_shift)\n\ pack $st.lb1.midi\n\ $st create window 1c 1.4c -window $st.lt1 -anchor s\n\ $st create window 1c 2c -window $st.b1 -anchor c\n\ $st create window 1c 2.65c -window $st.lb1 -anchor n\n\ bind $st.b1 { ac_flam }\n\ bind $st.b1 { ac_midi }\n\ #\n\ # tempo/meas area\n\ #\n\ eval frame $st.lt2 $debug_relief;\n\ pack $st.lt2\n\ label $st.lt2.tempo -text TEMPO -font *-${boldfont12}-*\n\ label $st.lt2.meas -text /MEAS -font *-${boldfont12}-*\n\ pack $st.lt2.tempo $st.lt2.meas\n\ button $st.b2 -bitmap nix -width 0.75c -height 0.75c \\\n\ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active)\n\ eval frame $st.lb2 $debug_relief;\n\ pack $st.lb2\n\ label $st.lb2.sync -text \"SYNC MODE\" -font *-${boldfont12}-* \\\n\ -fg $tkxox(color_fg_shift) -bg $tkxox(color_bg_shift)\n\ pack $st.lb2.sync\n\ $st create window 3c 1.4c -window $st.lt2 -anchor s\n\ $st create window 3c 2c -window $st.b2\n\ $st create window 3c 2.65c -window $st.lb2 -anchor n\n\ bind $st.b2 <1> ac_tempomeasure\n\ # ------------------------------------------------------\n\ # Track/Pattern Read/Write control\n\ # ------------------------------------------------------\n\ label $trpa.lt -text PLAY -font *-${boldfont12}-*\n\ label $trpa.lttrack -text TRACK -font *-${boldfont12}-*\n\ label $trpa.ltpattern -text PATTERN -font *-${boldfont12}-*\n\ label $trpa.lbtrack -text TRACK -font *-${boldfont12}-* \\\n\ -fg $tkxox(color_fg_shift) -bg $tkxox(color_bg_shift)\n\ label $trpa.lbstep -text \"STEP/TAP\" -font *-${boldfont12}-* \\\n\ -fg $tkxox(color_fg_shift) -bg $tkxox(color_bg_shift)\n\ button $trpa.btrk -bitmap nix -width 0.75c -height 0.75c \\\n\ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active)\n\ button $trpa.bpat -bitmap nix -width 0.75c -height 0.75c \\\n\ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active)\n\ label $trpa.lb -text WRITE -font *-${boldfont12}-*\n\ $trpa create window 1.6c 0.8c -window $trpa.lt -anchor s\n\ $trpa create window 0.8c 1.4c -window $trpa.lttrack -anchor s\n\ $trpa create window 0.8c 2c -window $trpa.btrk -anchor c\n\ $trpa create window 0.8c 2.65c -window $trpa.lbtrack -anchor n\n\ $trpa create window 2.3c 1.4c -window $trpa.ltpattern -anchor s\n\ $trpa create window 2.3c 2c -window $trpa.bpat -anchor c\n\ $trpa create window 2.3c 2.65c -window $trpa.lbstep -anchor n\n\ $trpa create window 1.6c 3.30c -window $trpa.lb -anchor n\n\ \n\ bind $trpa.btrk <1> {ac_trackmode $tkxox(READ)}\n\ bind $trpa.btrk {ac_trackmode $tkxox(WRITE)}\n\ bind $trpa.btrk {ac_trackmode $tkxox(WRITE)}\n\ bind $trpa.bpat <1> { ac_patternmode $tkxox(READ); }\n\ bind $trpa.bpat { ac_patternmode $tkxox(WRITE); }\n\ bind $trpa.bpat { ac_patternmode $tkxox(WRITE); }\n\ #---------------------------------------\n\ # Pattern Group & Track Number selection\n\ #---------------------------------------\n\ label $grps.lt -text \"PATTERN GROUP\" -font *-${boldfont12}-*\n\ label $grps.lb -text \"TRACK NUMBER\" -font *-${boldfont12}-*\n\ $grps create window 2.5c 0.8c -window $grps.lt -anchor s\n\ $grps create window 2.5c 3.30c -window $grps.lb -anchor n\n\ eval frame $grps.lt0 $debug_relief;\n\ pack $grps.lt0\n\ label $grps.lt0.lamp -bitmap nix -width 0.4c -height 0.15c \\\n\ -relief groove -borderwidth 2 -bg $tkxox(lamp_off)\n\ label $grps.lt0.labl -text A -font *-${boldfont12}-*\n\ pack $grps.lt0.lamp $grps.lt0.labl -side left\n\ button $grps.b0 -bitmap nix -width 0.75c -height 0.75c \\\n\ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active)\n\ label $grps.lb0 -text I -font *-${boldfont13}-* \\\n\ -fg $tkxox(color_fg_shift) -bg $tkxox(color_bg_shift)\n\ $grps create window 0.8c 1.4c -window $grps.lt0 -anchor s\n\ $grps create window 0.8c 2c -window $grps.b0 -anchor c\n\ $grps create window 0.8c 2.65c -window $grps.lb0 -anchor n\n\ \n\ eval frame $grps.lt1 $debug_relief;\n\ pack $grps.lt1\n\ label $grps.lt1.lamp -bitmap nix -width 0.4c -height 0.15c \\\n\ -relief groove -borderwidth 2 -bg $tkxox(lamp_off)\n\ label $grps.lt1.labl -text B -font *-${boldfont12}-*\n\ pack $grps.lt1.lamp $grps.lt1.labl -side left\n\ button $grps.b1 -bitmap nix -width 0.75c -height 0.75c \\\n\ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active)\n\ label $grps.lb1 -text II -font *-${boldfont13}-* \\\n\ -fg $tkxox(color_fg_shift) -bg $tkxox(color_bg_shift)\n\ \n\ \n\ \n\ $grps create window 2c 1.4c -window $grps.lt1 -anchor s\n\ $grps create window 2c 2c -window $grps.b1 -anchor c\n\ $grps create window 2c 2.65c -window $grps.lb1 -anchor n\n\ \n\ eval frame $grps.lt2 $debug_relief;\n\ pack $grps.lt2\n\ label $grps.lt2.lamp -bitmap nix -width 0.4c -height 0.15c \\\n\ -relief groove -borderwidth 2 -bg $tkxox(lamp_off)\n\ label $grps.lt2.labl -text C -font *-${boldfont12}-*\n\ pack $grps.lt2.lamp $grps.lt2.labl -side left\n\ button $grps.b2 -bitmap nix -width 0.75c -height 0.75c \\\n\ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active)\n\ label $grps.lb2 -text III -font *-${boldfont13}-* \\\n\ -fg $tkxox(color_fg_shift) -bg $tkxox(color_bg_shift)\n\ $grps create window 3.2c 1.4c -window $grps.lt2 -anchor s\n\ $grps create window 3.2c 2c -window $grps.b2 -anchor c\n\ $grps create window 3.2c 2.65c -window $grps.lb2 -anchor n\n\ \n\ eval frame $grps.lt3 $debug_relief;\n\ pack $grps.lt3\n\ label $grps.lt3.lamp -bitmap nix -width 0.4c -height 0.15c \\\n\ -relief groove -borderwidth 2 -bg $tkxox(lamp_off)\n\ label $grps.lt3.labl -text D -font *-${boldfont12}-*\n\ pack $grps.lt3.lamp $grps.lt3.labl -side left\n\ button $grps.b3 -bitmap nix -width 0.75c -height 0.75c \\\n\ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active)\n\ label $grps.lb3 -text IV -font *-${boldfont13}-* \\\n\ -fg $tkxox(color_fg_shift) -bg $tkxox(color_bg_shift)\n\ $grps create window 4.4c 1.4c -window $grps.lt3 -anchor s\n\ $grps create window 4.4c 2c -window $grps.b3 -anchor c\n\ $grps create window 4.4c 2.65c -window $grps.lb3 -anchor n\n\ \n\ bind $grps.b0 <1> {ac_group 0}\n\ bind $grps.b1 <1> {ac_group 1}\n\ bind $grps.b2 <1> {ac_group 2}\n\ bind $grps.b3 <1> {ac_group 3}\n\ bind $grps.b0 {ac_track 0}\n\ bind $grps.b1 {ac_track 1}\n\ bind $grps.b2 {ac_track 2}\n\ bind $grps.b3 {ac_track 3}\n\ # -------------------------------\n\ # Create the note buttons & lamps\n\ # -------------------------------\n\ # add half a button width at left and right of the score alignement\n\ set border_width_in_point 2;\n\ set correction 0.20\n\ set button_width [expr $score_width/17.0 - 2*$border_width_in_point/$point_per_cm - $correction];\n\ \n\ set shift_buttons $notes.shift\n\ canvas $shift_buttons -width [expr 0.95*${button_width}]c -height 2.6c;\n\ pack $shift_buttons -side left;\n\ \n\ for {set i 0} {$i<16} {incr i} {\n\ frame $notes.note$i\n\ pack $notes.note$i -side left\n\ label $notes.note$i.l -height 1 -text [expr $i + 1] \\\n\ -relief groove -borderwidth ${border_width_in_point}p -font *-${font12}-*\n\ button $notes.note$i.b -bitmap nix -width ${button_width}c -height 2.6c \\\n\ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active)\n\ label $notes.note$i.instr -width 1 \\\n\ -font *-${font12}-* -text $sound([expr $i + 1],shortname);\n\ pack $notes.note$i.l $notes.note$i.b $notes.note$i.instr \\\n\ -expand true -fill x\n\ bind $notes.note$i.b {ac_note %W 0}\n\ bind $notes.note$i.b {ac_note_off %W}\n\ bind $notes.note$i.b {ac_note %W $tkxox(flam)}\n\ bind $notes.note$i.b {ac_note_off %W}\n\ bind $notes.note$i.b {ac_note %W $tkxox(zero_velocity)}\n\ bind $notes.note$i.b {ac_newinstr %W}\n\ }\n\ #\n\ # Empty Space : adjust vectical alignment with score\n\ # - at the right of the score\n\ # - at the right of the instrument buttons\n\ #\n\ set empty_right $note_score.right\n\ set empty_case $notes.right\n\ canvas $empty_right -width ${right_space_width}c -height ${score_height_in_inch}i;\n\ canvas $empty_case -width ${right_space_width}c -height 2.6c;\n\ pack $empty_right -side left;\n\ pack $empty_case -side right;\n\ \n\ pattern_setid 0 ; # Initialise pattern number\n\ ac_group $mode(patgroup)\n\ ac_newinstr $notes.note0.b ; # Initialise current instrument\n\ \n\ # Bindings to activate note buttons from keyboard\n\ # 1->10 = buttons 1->10, \"q\"->\"y\" = 11->16\n\ #\n\ set k 0\n\ bind . {ac_note $notes.note0.b 0}\n\ bind . {ac_note $notes.note1.b 0}\n\ bind . {ac_note $notes.note2.b 0}\n\ bind . {ac_note $notes.note3.b 0}\n\ bind . {ac_note $notes.note4.b 0}\n\ bind . {ac_note $notes.note5.b 0}\n\ bind . {ac_note $notes.note6.b 0}\n\ bind . {ac_note $notes.note7.b 0}\n\ bind . {ac_note $notes.note8.b 0}\n\ bind . {ac_note $notes.note9.b 0}\n\ bind . {ac_note $notes.note10.b 0}\n\ bind . {ac_note $notes.note11.b 0}\n\ bind . {ac_note $notes.note12.b 0} ;# puts \"[incr k]\"}\n\ bind . {ac_note $notes.note13.b 0}\n\ bind . {ac_note $notes.note14.b 0}\n\ bind . {ac_note $notes.note15.b 0}\n\ \n\ # Bindings for pattern Copy/Paste\n\ #\n\ bind . {\n\ tk7_set_patbuf $mode(patgroup) $mode(current_pattern)\n\ }\n\ bind . {\n\ if {($mode(rdrw) == $tkxox(WRITE)) && ($mode(patr) == $tkxox(PATTERN))} {\n\ tk7_copy_patbuf $mode(patgroup) $mode(current_pattern) 1\n\ pattern_setid $mode(current_pattern)\n\ }\n\ }\n\ bind . {\n\ if {($mode(rdrw) == $tkxox(WRITE)) && ($mode(patr) == $tkxox(PATTERN))} {\n\ tk7_copy_patbuf $mode(patgroup) $mode(current_pattern) 0\n\ pattern_setid $mode(current_pattern)\n\ }\n\ }\n\ #\n\ # Bindings for pattern editing from display grid\n\ #\n\ proc grid_note {x y prop} {\n\ global notes\n\ upvar #0 tkxox xox\n\ upvar #0 mode mo\n\ if {$mo(patr) == $xox(TRACK) || $mo(rdrw) == $xox(READ)} {\n\ return\n\ }\n\ if {![have_zero_velocity $prop]} {\n\ switch $mo(current_accent) {\n\ 2 {set prop [add_strong_accent $prop] }\n\ 1 {set prop [add_weak_accent $prop] }\n\ default {set prop [add_default_velocity $prop] }\n\ }\n\ }\n\ # Convert x,y position to a grid intersection point\n\ # and imply step,instrument combination from it.\n\ if {[locate_gridpos $x $y SIvals] < 0 } {\n\ return\n\ }\n\ #puts \" -> Instrument $SIvals(inst) at step $SIvals(step) with prop $prop\"\n\ ac_newinstr $notes.note$SIvals(inst).b\n\ step_insert $SIvals(step) $prop\n\ }\n\ bind $grid {\n\ #puts \"Button-1: %x,%y\"\n\ }\n\ bind $grid {\n\ #puts \"Double-Button-1: %x,%y\"\n\ grid_note %x %y 0\n\ }\n\ bind $grid {\n\ #puts \"Control-Double-Button-1: %x,%y\"\n\ upvar #0 tkxox xox\n\ grid_note %x %y $xox(flam)\n\ }\n\ bind $grid {\n\ #puts \"Shift-Double-Button-1: %x,%y\"\n\ upvar #0 tkxox xox\n\ grid_note %x %y $xox(zero_velocity)\n\ }\n\ # ------------------------------------------------------\n\ # Create Accent/Enter button set\n\ # ------------------------------------------------------\n\ label $accenter.lt -height 1 -text ENTER -font *-${boldfont12}-*\n\ frame $accenter.cart\n\ label $accenter.cart.lamp -bitmap nix -width 0.4c -height 0.15c \\\n\ -relief groove -borderwidth 2 -bg $tkxox(lamp_off)\n\ label $accenter.cart.labl -text CARTRIDGE -font *-${boldfont12}-* \\\n\ -fg $tkxox(color_fg_shift) -bg $tkxox(color_bg_shift)\n\ pack $accenter.cart.lamp $accenter.cart.labl -side left\n\ button $accenter.b -bitmap nix -width 1.45c -height 2.1c \\\n\ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active)\n\ set accent_label $accenter.lb\n\ label $accent_label -height 1 -text ACCENT -font *-${boldfont12}-*\n\ $accenter create window 1.43c 0.35c -window $accenter.lt\n\ $accenter create window 1.43c 0.8c -window $accenter.cart\n\ $accenter create window 1.43c 2.3c -window $accenter.b\n\ $accenter create window 1.43c 3.8c -window $accent_label -tags accent\n\ bind $accenter.b <1> {ac_accenter 0} ;# Add pattern into track\n\ bind $accenter.b {ac_accenter 1} ;# Insert pattern into track\n\ bind $accenter.b {ac_cartridge}\n\ # ------------------------------------------------------\n\ # Create the Tempo Dial\n\ # ------------------------------------------------------\n\ set dial_canvas $dial.c\n\ set dial_value $dial.v\n\ \n\ label $dial_value -text \"TEMPO $mode(tempo)\" -anchor n -font *-${boldr14}-* ;\n\ pack $dial_value -expand true -fill x\n\ canvas $dial_canvas -width 4c -height 3.2c ;#-relief groove -borderwidth 2\n\ pack $dial_canvas -side left\n\ set dial_radius 1.; # in centimeter\n\ $dial_canvas create oval 1c 0.2c 3c 2.2c -width 2p -tags dial \\\n\ -fill $tkxox(but_grey)\n\ $dial_canvas create line 0c 0c 0c 0c -tags indicator\n\ $dial_canvas create text 0.4c 2.9c -text SLOW -anchor w \\\n\ -font *-${helvetica_bold_r_12}-*\n\ $dial_canvas create text 3.7c 2.9c -text FAST -anchor e \\\n\ -font *-${helvetica_bold_r_12}-*\n\ $dial_canvas bind dial {\n\ upvar #0 mode mo\n\ \n\ # Angular-oriented dial:\n\ # Note: It would be better to get the center of the\n\ # dial as origin, instead of the picked point into the dial\n\ set orig_x %x\n\ set orig_y %x\n\ set orig_tempo $mo(tempo)\n\ }\n\ $dial_canvas bind dial {\n\ dial_adjust [expr %x - $orig_x] [expr %y - $orig_y] $orig_tempo\n\ }\n\ # the tempo range is 30-330 on my tk727 (saramito@imag.fr)\n\ # I don't known for the tk707\n\ set tempo_min 30; # points to SLOW\n\ set tempo_max 265; # points to FAST\n\ set tempo_ini 120; # at initialization\n\ \n\ proc dial_adjust {x y orig_tempo} {\n\ global dial_value\n\ global dial_canvas\n\ global dial_radius\n\ global tempo_min; # the arrow points to SLOW\n\ global tempo_max; # the arrow points to FAST\n\ upvar #0 mode mo\n\ \n\ set pi 3.14159265358979323846;\n\ set pi_o4 [expr 0.25*$pi];\n\ set pi_3o4 [expr 3*$pi_o4];\n\ \n\ # vertical indicator -> medium tempo\n\ set delta_tempo [expr 0.5*($tempo_max - $tempo_min)];\n\ set tempo_med [expr 0.5*($tempo_max + $tempo_min)];\n\ \n\ if {($x == 0) && ($y == 0)} {\n\ \n\ # special case: when x = y = 0\n\ # i.e. when mouse comes back to origin where we pick the dial\n\ # or also at the initialization call procedure\n\ # => angle is not computable with (x,y) \n\ # but by using $orig_tempo :\n\ set tempo_val $orig_tempo\n\ if {$tempo_val > $tempo_med} {\n\ # alpha is in the range ( pi/4, pi (\n\ # ksi ( 0 , 1 (\n\ set ksi [expr ($tempo_max-$tempo_val)/$delta_tempo]\n\ set alpha [expr $pi/4 + $ksi*(3*$pi/4)]\n\ } else {\n\ # alpha is in the range ) -pi, -pi/4 )\n\ # ksi ) 0 , 1 )\n\ set ksi [expr ($tempo_val-$tempo_min)/$delta_tempo]\n\ set alpha [expr - $pi/4 - $ksi*(3*$pi/4)]\n\ }\n\ } else {\n\ # the general case\n\ set alpha [expr atan2($x,$y)];\n\ if {$alpha > 0} {\n\ \n\ # the mouse is on the right side of the origin -> fast\n\ if {$alpha < $pi_o4} {\n\ # set to the minimal value\n\ set tempo_val $tempo_max\n\ set alpha $pi_o4\n\ } else {\n\ # alpha is in the range ( pi/4, pi (\n\ # zeta ( 0 1 (\n\ set zeta [expr ($alpha-$pi_o4)/$pi_3o4]\n\ set tempo_val [expr $tempo_max - $zeta*$delta_tempo]\n\ }\n\ } else {\n\ # alpha < 0\n\ \n\ # mouse is on the right side of the origin -> fast\n\ if {$alpha > [expr -$pi_o4]} {\n\ # set tempo the minimal value\n\ set tempo_val $tempo_min\n\ set alpha -$pi_o4\n\ } else {\n\ # alpha is in the range ) -pi, -pi/4 )\n\ # zeta ) 0 1 )\n\ set zeta [expr ($alpha+$pi)/$pi_3o4]\n\ set tempo_val [expr $tempo_med - $zeta*$delta_tempo ]\n\ }\n\ }\n\ }\n\ # make an integer\n\ set tempo_val [expr int($tempo_val)]\n\ \n\ # then we apply this :\n\ set mo(tempo) $tempo_val\n\ tk7_set_tempo $tempo_val\n\ ${dial_value} configure -text \"TEMPO $tempo_val\"\n\ \n\ # update the dial indicator\n\ set sin_alpha [expr sin($alpha)]\n\ set cos_alpha [expr cos($alpha)]\n\ set x_indic [expr 2.0 + $dial_radius * $sin_alpha]\n\ set y_indic [expr 1.2 + $dial_radius * $cos_alpha]\n\ ${dial_canvas} coords indicator ${x_indic}c ${y_indic}c 2c 1.2c\n\ }\n\ # Angular-oriented dial: set initial tempo and vertical direction\n\ dial_adjust 0 0 $tempo_ini\n\ \n\ midichan_set [expr $midi_channel + 1]\n\ ac_patternmode $tkxox(READ)\n\ ac_trackmode $tkxox(READ)\n\ ac_track 0\n\ # ======================================================\n\ # Action!\n\ # ======================================================\n\ wm deiconify .;\n\ # after 10 play_loop;\n\ play_loop;\n\ \n\ \n\ "; tk707-0.8/nix_bit.h0000644000175100017510000000011610142137110010751 00000000000000#define nix_width 1 #define nix_height 1 static char nix_bits[] = { 0x00}; tk707-0.8/playa.c0000644000175100017510000011555410142141777010451 00000000000000/* * This file is part of tk707. * * Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito * * tk707 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. * * Foobar 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 Foobar; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include "util707.h" #include "nix_bit.h" TK707 *tk707; #define tk7_get_pattern(tk707,group,pattern) \ (((TK707*)(tk707))->ptree[((TK707*)(tk707))->mbank] + 16*(group) + (pattern)) typedef struct { char *cmdname; Tcl_ObjCmdProc *cmdProc; } NewCmd; /* Strings to hold scripts for C code evaluation */ extern char tcl_ports[]; extern char tcl_title_defs[]; extern char tcl_score_defs[]; extern char tcl_defs[]; extern char tcl_gui[]; extern char tcl_title[]; extern char tcl_score[]; extern char tcl_procs[]; extern char tcl_help[]; extern char tcl_tk707[]; /* * Insert names tcl scripts generated by tcl2c here */ #ifndef not_compile_tcl char *scripts[]={ tcl_ports, tcl_title_defs, tcl_score_defs, tcl_defs, tcl_gui, tcl_title, tcl_score, tcl_procs, tcl_help, tcl_tk707, (char*)NULL }; #endif int cm2pix(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int set_patbuf(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int copy_patbuf(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int group_step_lengths(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int set_last_step(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int get_last_step(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int port_list(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int port_setcheck(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int pattern_items(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int pattern_play(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int Init707(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int clear_tree(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int clear_pattern(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int set_sounds(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int timer_status(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int pat_stop(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int set_tempo(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int set_vols(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int get_pat_tick(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int Exit707(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int cartridge_incr(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int add_note(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int set_scale(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int get_scale(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int group_scale(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int get_pattern_properties(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int set_properties(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int get_properties(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int set_flam(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int get_flam(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int set_shuffle(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int get_shuffle(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int set_pattern_comment(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int get_pattern_comment(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int group_pattern_properties(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int start_note_play(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int stop_note_play(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int start_note_test(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); int stop_note_test(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); NewCmd cmdlist[]={ { "tk7_init", Init707}, { "tk7_cm2pix", cm2pix}, { "tk7_set_patbuf", set_patbuf}, { "tk7_copy_patbuf", copy_patbuf}, { "tk7_set_last_step", set_last_step}, { "tk7_get_last_step", get_last_step}, { "tk7_group_step_lengths", group_step_lengths}, { "tk7_clear_tree", clear_tree}, { "tk7_port_list", port_list}, { "tk7_port_setcheck", port_setcheck}, { "tk7_clear_pattern", clear_pattern}, { "tk7_pattern_items", pattern_items}, { "tk7_set_sounds", set_sounds}, { "tk7_timer_status", timer_status}, { "tk7_set_tempo", set_tempo}, { "tk7_pattern_play", pattern_play}, { "tk7_set_vols", set_vols}, { "tk7_pattern_stop", pat_stop}, { "tk7_get_pat_tick", get_pat_tick}, { "exit707", Exit707}, { "tk7_cartridge_incr", cartridge_incr}, { "tk7_add_note", add_note}, { "tk7_set_scale", set_scale}, { "tk7_get_scale", get_scale}, { "tk7_group_scale", group_scale}, { "tk7_get_pattern_properties", get_pattern_properties}, { "tk7_set_properties", set_properties}, { "tk7_get_properties", get_properties}, { "tk7_set_flam", set_flam}, { "tk7_get_flam", get_flam}, { "tk7_set_shuffle", set_shuffle}, { "tk7_get_shuffle", get_shuffle}, { "tk7_group_pattern_properties", group_pattern_properties}, { "tk7_start_note_play", start_note_play}, { "tk7_stop_note_play", stop_note_play}, { "tk7_start_note_test", start_note_test}, { "tk7_stop_note_test", stop_note_test}, { "tk7_set_pattern_comment", set_pattern_comment}, { "tk7_get_pattern_comment", get_pattern_comment}, /**/ { NULL, NULL} }; /* * Return: * 0 if all OK * 1 => just asked for list of ports (supplied it, now exit) * 2 => need a port description (run port selector gui) * 3 => something weird so exit */ int Init707(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { extern char *optarg; int c, res; char *portdesc; int i, bank, pattern; int argc; char *argv[10]; Tcl_Obj *temp=NULL, *descObj=NULL; /* Create a string array for getopt() */ argc = objc; for(c=0;c 0 ) { switch(c) { case 'p': portdesc = optarg; break; case 'h': usage(); return TCL_OK; break; case 'l': { char **cpinfo; int i, ret = get_clientsports(&cpinfo); for(i=0;iptree[i])) < 0 ) { Tcl_SetResult(interp, "Couldn't pattern_el_init", TCL_VOLATILE); return TCL_ERROR; } } tk707->patbuf = NULL; if( alsa_setup(tk707, portdesc, NULL) < 0 ) { Tcl_SetResult(interp, "Couldn't seq707_context_init", TCL_VOLATILE); #ifdef OLD return TCL_ERROR; #endif // OLD } Tcl_LinkVar(interp, "midi_channel", (char*)(&(tk707->ctxp_p->midichannel)), TCL_LINK_INT); Tcl_LinkVar(interp, "midi_channel", (char*)(&(tk707->ctxp_c->midichannel)), TCL_LINK_INT); /* Set the default instrument to volume fader map */ tk707->volmap[0] = 1; tk707->volmap[1] = 1; tk707->volmap[2] = 2; tk707->volmap[3] = 2; tk707->volmap[4] = 3; tk707->volmap[5] = 4; tk707->volmap[6] = 5; tk707->volmap[7] = 6; tk707->volmap[8] = 6; tk707->volmap[9] = 7; tk707->volmap[10] = 7; tk707->volmap[11] = 8; tk707->volmap[12] = 8; tk707->volmap[13] = 8; tk707->volmap[14] = 9; tk707->volmap[15] = 10; /* delay property initilaiztion */ for (i = 0; i < 16; i++) { tk707->have_delay[i] = false; } /* Inialisation was completed OK */ Tcl_SetObjResult(interp, Tcl_NewIntObj(0)); return TCL_OK; } int Exit707(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { snd_seq_close(tk707->ctxp_p->handle); snd_seq_close(tk707->ctxp_c->handle); return TCL_OK; } /* * Set tk707->patbuf to point to PatternElement given by group/pattern args. */ int set_patbuf( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group; if( objc != 3 ) { Tcl_SetResult(interp, "Wrong #args", TCL_VOLATILE); return TCL_ERROR; } if( Tcl_GetIntFromObj(interp, objv[1], &group) != TCL_OK ) return TCL_ERROR; if( Tcl_GetIntFromObj(interp, objv[2], &pattern) != TCL_OK ) return TCL_ERROR; tk707->patbuf = tk707->ptree[tk707->mbank] + (16*group+pattern); return TCL_OK; } /* * Copy elements at tk707->copybuf to new pattern given by group/pattern args. */ int copy_patbuf( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; PatternElement *to; int pattern, group, merge; tk707_get_int3_macro(interp,objc,objv,group,pattern,merge); if( ! tk707->patbuf ) { Tcl_SetResult(interp, "Nothing in copy buffer", TCL_VOLATILE); return TCL_ERROR; } to = tk707->ptree[tk707->mbank] + (16*group+pattern); if( to == tk707->patbuf ) return TCL_OK; el_copy_pattern(to, tk707->patbuf, merge); return TCL_OK; } /* * Set/get the last step to be used for a given pattern. * Return the new last step value */ int set_last_step( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group, stepval, i; tk707_get_int3_macro(interp,objc,objv,group,pattern,stepval); pattern_set_length(tk707->ptree[tk707->mbank] + (16*group+pattern), stepval); Tcl_SetObjResult(interp, Tcl_NewIntObj(stepval)); return TCL_OK; } int get_last_step( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group, stepval; tk707_get_int2_macro(interp,objc,objv,group,pattern); stepval = pattern_get_length(tk707->ptree[tk707->mbank] + (16*group+pattern)); Tcl_SetObjResult(interp, Tcl_NewIntObj(stepval)); return TCL_OK; } /* * Set/get the scale to be used for a given pattern. */ int set_scale( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group, scaleval, i; tk707_get_int3_macro(interp,objc,objv,group,pattern,scaleval); pattern_set_scale (tk707->ptree[tk707->mbank] + (16*group+pattern), scaleval); Tcl_SetObjResult(interp, Tcl_NewIntObj(scaleval)); return TCL_OK; } int get_scale( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group, scaleval; tk707_get_int2_macro(interp,objc,objv,group,pattern); scaleval = pattern_get_scale(tk707->ptree[tk707->mbank] + (16*group+pattern)); Tcl_SetObjResult(interp, Tcl_NewIntObj(scaleval)); return TCL_OK; } /* * Set/get the flam to be used for a given pattern. */ int set_flam( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group, flamval, i; tk707_get_int3_macro(interp,objc,objv,group,pattern,flamval); pattern_set_flam (tk707->ptree[tk707->mbank] + (16*group+pattern), flamval); Tcl_SetObjResult(interp, Tcl_NewIntObj(flamval)); return TCL_OK; } int get_flam( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group, flamval; tk707_get_int2_macro(interp,objc,objv,group,pattern); flamval = pattern_get_flam(tk707->ptree[tk707->mbank] + (16*group+pattern)); Tcl_SetObjResult(interp, Tcl_NewIntObj(flamval)); return TCL_OK; } /* * Set/get the shuffle to be used for a given pattern. */ int set_shuffle( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group, shuffleval, i; tk707_get_int3_macro(interp,objc,objv,group,pattern,shuffleval); pattern_set_shuffle (tk707->ptree[tk707->mbank] + (16*group+pattern), shuffleval); Tcl_SetObjResult(interp, Tcl_NewIntObj(shuffleval)); return TCL_OK; } int get_shuffle( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group, shuffleval; tk707_get_int2_macro(interp,objc,objv,group,pattern); shuffleval = pattern_get_shuffle(tk707->ptree[tk707->mbank] + (16*group+pattern)); Tcl_SetObjResult(interp, Tcl_NewIntObj(shuffleval)); return TCL_OK; } /* * Set/get the comment for a given pattern. */ int set_pattern_comment( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group; char* commentval; tk707_get_int2str1_macro(interp,objc,objv,group,pattern,commentval); pattern_set_comment (tk707->ptree[tk707->mbank] + (16*group+pattern), commentval); Tcl_SetObjResult(interp, Tcl_NewStringObj(commentval, strlen(commentval))); return TCL_OK; } int get_pattern_comment( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group; char* commentval; tk707_get_int2_macro(interp,objc,objv,group,pattern); commentval = pattern_get_comment(tk707->ptree[tk707->mbank] + (16*group+pattern)); Tcl_SetObjResult(interp, Tcl_NewStringObj(commentval, strlen(commentval))); return TCL_OK; } /* * Return a list of steplength values for all patterns in a given group */ int group_step_lengths( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; Tcl_Obj *res; int pattern, group, stepcount; tk707_get_int1_macro(interp,objc,objv,group); res = Tcl_NewListObj(0, NULL); for(pattern=0;pattern<16;pattern++) { stepcount = pattern_get_length(tk707->ptree[tk707->mbank] + (16*group+pattern)); Tcl_ListObjAppendElement(interp, res, Tcl_NewIntObj(stepcount)); } Tcl_SetObjResult(interp, res); return TCL_OK; } /* * Return a list of scale values for all patterns in a given group */ int group_scale( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; Tcl_Obj *res; int pattern, group, scalecount; tk707_get_int1_macro(interp,objc,objv,group); res = Tcl_NewListObj(0, NULL); for(pattern=0;pattern<16;pattern++) { scalecount = pattern_get_scale(tk707->ptree[tk707->mbank] + (16*group+pattern)); Tcl_ListObjAppendElement(interp, res, Tcl_NewIntObj(scalecount)); } Tcl_SetObjResult(interp, res); return TCL_OK; } /* * Return a list of list pattern properties for all patterns in a given group * { {length scale flam shuffle}*16 } */ int group_pattern_properties( ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group; Tcl_Obj *res = Tcl_NewListObj(0, NULL); tk707_get_int1_macro(interp,objc,objv,group); for(pattern = 0; pattern < 16; pattern++) { int length = pattern_get_length (tk707->ptree[tk707->mbank] + (16*group+pattern)); int scale = pattern_get_scale (tk707->ptree[tk707->mbank] + (16*group+pattern)); int flam = pattern_get_flam (tk707->ptree[tk707->mbank] + (16*group+pattern)); int shuffle = pattern_get_shuffle(tk707->ptree[tk707->mbank] + (16*group+pattern)); char* comment = pattern_get_comment(tk707->ptree[tk707->mbank] + (16*group+pattern)); Tcl_Obj *prop_list = Tcl_NewListObj(0, NULL); Tcl_ListObjAppendElement(interp, prop_list, Tcl_NewIntObj(length)); Tcl_ListObjAppendElement(interp, prop_list, Tcl_NewIntObj(scale)); Tcl_ListObjAppendElement(interp, prop_list, Tcl_NewIntObj(flam)); Tcl_ListObjAppendElement(interp, prop_list, Tcl_NewIntObj(shuffle)); Tcl_ListObjAppendElement(interp, prop_list, Tcl_NewStringObj(comment,strlen(comment))); Tcl_ListObjAppendElement(interp, res, prop_list); } Tcl_SetObjResult(interp, res); return TCL_OK; } int clear_tree(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; pattern_el_clearall(tk707->ptree[tk707->mbank]); return TCL_OK; } int clear_pattern(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int pattern, group, i; MidiElement *base; tk707_get_int2_macro(interp,objc,objv,group, pattern); for(i=0;i<16;i++) { step_el_clear((tk707->ptree[tk707->mbank] + (16*group+pattern))->mel+i); } return TCL_OK; } int set_sounds(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int i; char index[8]; for(i=1;i<17;i++) { sprintf(index, "%d,note", i); tk707->sounds[i-1] = atoi(Tcl_GetVar2(interp, "sound", index, TCL_GLOBAL_ONLY|TCL_LEAVE_ERR_MSG)); } return TCL_OK; } int set_tempo(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; seq707_context_t *ctxp = tk707->ctxp_p; int diff, newticks; snd_seq_event_t ev; tk707_get_int1_macro(interp,objc,objv, newticks); ctxp->tempo = (unsigned int)((((double)(old_tick_per_quarter * 500000))/(double)newticks)); do_tempo_set(ctxp, ctxp->tempo); ctxp->ppq = newticks; return TCL_OK; } #ifdef HAVE_ALSA9 int timer_status(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; seq707_context_t *ctxp = tk707->ctxp_p; snd_seq_queue_status_t *status; snd_seq_queue_status_alloca(&status); snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, status); Tcl_SetObjResult(interp, Tcl_NewIntObj(snd_seq_queue_status_get_tick_time(status))); return TCL_OK; } #else /* !HAVE_ALSA9 */ int timer_status(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; seq707_context_t *ctxp = tk707->ctxp_p; snd_seq_queue_status_t status; snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, &status); Tcl_SetObjResult(interp, Tcl_NewIntObj(status.tick)); return TCL_OK; } #endif /* HAVE_ALSA9 */ #ifdef HAVE_ALSA9 int get_pat_tick(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; seq707_context_t *ctxp = tk707->ctxp_p; snd_seq_queue_status_t *status; int result; snd_seq_queue_status_alloca(&status); snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, status); result = 16 - ((ctxp->currticktime - snd_seq_queue_status_get_tick_time(status))/old_tick_per_sixtennth); Tcl_SetObjResult(interp, Tcl_NewIntObj(result)); return TCL_OK; } #else /* !HAVE_ALSA9 */ int get_pat_tick(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; seq707_context_t *ctxp = tk707->ctxp_p; snd_seq_queue_status_t status; int result; snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, &status); result = 16 - ((ctxp->currticktime-status.tick)/old_tick_per_sixtennth); Tcl_SetObjResult(interp, Tcl_NewIntObj(result)); return TCL_OK; } #endif /* HAVE_ALSA9 */ static int ponderated_velocity (int volume_master, int volume_accent, double accent_factor, int volume_instr, double instr_factor) { double note_factor = volume_master*(volume_instr*instr_factor)*(volume_accent*accent_factor)/(100.*100.*100.); return (int)(127 * note_factor + 0.5); } static int compute_velocity (int prop, int volume_master, int volume_accent, int volume_instr) { double instr_factor; double accent_factor; double note_factor; int velocity; if (prop & zero_velocity) { instr_factor = 0; accent_factor = 0; } else { instr_factor = 1; if (prop & strong_accent_velocity) { accent_factor = 1; } else if (prop & weak_accent_velocity) { accent_factor = 2/3.0; } else { accent_factor = 1/3.0; } } return ponderated_velocity (volume_master, volume_accent, accent_factor, volume_instr, instr_factor); } static void c_start_note (TK707 *tk707, int keynum, int midi_note, int prop) { int volume_accent = tk707->volumes [0]; int volume_master = tk707->volumes [11]; int volume_instr = tk707->volumes [tk707->volmap[keynum]]; int velocity = compute_velocity (prop, volume_master,volume_accent,volume_instr); seq707_context_t *ctxp = tk707->ctxp_c; static int have_start = 0; snd_seq_queue_status_t *status; int midich; int cur_tick; #ifdef HAVE_ALSA9 snd_seq_queue_status_alloca(&status); snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, status); cur_tick = snd_seq_queue_status_get_tick_time(status); #else snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, status); cur_tick = status->tick; #endif if ( cur_tick > ctxp->currticktime ) { ctxp->currticktime = cur_tick; } midich = ctxp->midichannel; if (!have_start) { alsa_timer_start (ctxp); have_start = true; } else { alsa_timer_cont (ctxp); } do_noteon (ctxp, midich, midi_note, velocity); if (prop & fla_property) { /* note have a fla */ int flam_interval = 2; /* use default, without pattern properties */ int tick_per_flam = flam_interval * tick_flam_duration; ctxp->currticktime += tick_per_flam; do_noteon (ctxp, midich, midi_note, velocity); } #ifdef HAVE_ALSA9 snd_seq_drain_output(ctxp->handle); #else snd_seq_flush_output(ctxp->handle); #endif } static void c_stop_note (TK707 *tk707, int midi_note) { seq707_context_t *ctxp = tk707->ctxp_c; snd_seq_queue_status_t *status; int midich; int cur_tick; #ifdef HAVE_ALSA9 snd_seq_queue_status_alloca(&status); snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, status); cur_tick = snd_seq_queue_status_get_tick_time(status); #else snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, status); cur_tick = status->tick; #endif if ( cur_tick > ctxp->currticktime ) { ctxp->currticktime = cur_tick; } midich = ctxp->midichannel; do_noteon (ctxp, midich, midi_note, 0); /* ctxp->currticktime += old_tick_per_quarter; */ #ifdef HAVE_ALSA9 snd_seq_drain_output(ctxp->handle); #else snd_seq_flush_output(ctxp->handle); #endif alsa_timer_stop(ctxp); } /* * Start a note down the "realtime" queue */ int start_note_play(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int keynum, prop, midi_note; tk707_get_int2_macro(interp,objc,objv, keynum, prop); midi_note = tk707->sounds[keynum]; c_start_note (tk707, keynum, midi_note, prop); return TCL_OK; } /* * Stop a note down the "realtime" queue */ int stop_note_play(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int keynum, midi_note; tk707_get_int1_macro(interp,objc,objv, keynum); midi_note = tk707->sounds[keynum]; c_stop_note (tk707, midi_note); return TCL_OK; } /* * Start a note down the "realtime" queue using a supplied midi note value * (instead of looking it up as in note_play() ). */ int start_note_test(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int keynum, midi_note; tk707_get_int2_macro(interp,objc,objv, keynum, midi_note); c_start_note (tk707, keynum, midi_note, 0); return TCL_OK; } /* * Stop a note down the "realtime" queue using a supplied midi note value * (instead of looking it up as in note_play() ). */ int stop_note_test(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int keynum, midi_note; tk707_get_int2_macro(interp,objc,objv, keynum, midi_note); c_stop_note (tk707, midi_note); return TCL_OK; } int pat_stop(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; seq707_context_t *ctxp = tk707->ctxp_p; snd_seq_drain_output(ctxp->handle); return TCL_OK; } int pattern_play(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; seq707_context_t *ctxp = tk707->ctxp_p; snd_seq_queue_status_t *status = 0; int cur_tick; int group, pattern, step, stepcount, scale, midich, dur; PatternElement *current_pattern; int volume_master, volume_accent, flam_interval; int tick_per_step, tick_per_flam; tk707_get_int2_macro(interp,objc,objv, group, pattern); volume_accent = tk707->volumes [0]; volume_master = tk707->volumes [11]; current_pattern = tk7_get_pattern(tk707,group,pattern); stepcount = pattern_get_length(current_pattern); scale = pattern_get_scale (current_pattern); flam_interval = pattern_get_flam (current_pattern); tick_per_step = old_tick_per_step_off_scale[scale] + old_tick_per_note_on; tick_per_flam = flam_interval * tick_flam_duration; if (old_tick_per_note_on < 4*tick_flam_duration) { fprintf (stderr, "FATAL: invalid flam/delay configuration\n"); exit (1); } #ifdef HAVE_ALSA9 snd_seq_queue_status_alloca(&status); snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, status); cur_tick = snd_seq_queue_status_get_tick_time(status); #else snd_seq_get_queue_status(ctxp->handle, ctxp->dest_queue, status); cur_tick = status->tick; #endif if( cur_tick > ctxp->currticktime ) { ctxp->currticktime = cur_tick; } midich = ctxp->midichannel; alsa_timer_cont (ctxp); for (step = 0; step < stepcount; step++) { MidiElement *instrument_set = current_pattern->mel [step]; MidiElement *instrument; if (!instrument_set) { /* No notes at this step. Just update timer. */ ctxp->currticktime += tick_per_step; continue; } /* * note-on */ for (instrument = instrument_set; instrument; instrument = instrument->next) { int idx_note = el_get_note (instrument); int midi_note = tk707->sounds [idx_note]; int volume_instr = tk707->volumes [tk707->volmap[idx_note]]; int velocity = compute_velocity (el_get_properties(instrument), volume_master,volume_accent,volume_instr); do_noteon (ctxp, midich, midi_note, velocity); } ctxp->currticktime += tick_per_flam; /* * flam */ for (instrument = instrument_set; instrument; instrument = instrument->next) { if (have_fla (instrument)) { int idx_note = el_get_note (instrument); int midi_note = tk707->sounds [idx_note]; int volume_instr = tk707->volumes [tk707->volmap[idx_note]]; int velocity = compute_velocity (el_get_properties(instrument), volume_master,volume_accent,volume_instr); do_noteon (ctxp, midich, midi_note, velocity); } } ctxp->currticktime += old_tick_per_note_on - tick_per_flam; /* * note-off when delay */ for (instrument = instrument_set; instrument; instrument = instrument->next) { int idx_note = el_get_note (instrument); if (tk707->have_delay [idx_note]) { int midi_note = tk707->sounds [idx_note]; do_noteoff (ctxp, midich, midi_note, 127); } } ctxp->currticktime += old_tick_per_step_off_scale [scale]; } #ifdef HAVE_ALSA9 snd_seq_drain_output(ctxp->handle); #else snd_seq_flush_output(ctxp->handle); #endif alsa_timer_stop(ctxp); dur = (int)(500*((double)(ctxp->currticktime - cur_tick)/(double)ctxp->ppq)); Tcl_SetObjResult(interp, Tcl_NewIntObj(dur - tick_per_step)); return TCL_OK; } int cartridge_incr(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; tk707->mbank = ++tk707->mbank % 3; Tcl_SetObjResult(interp, Tcl_NewIntObj(tk707->mbank)); return TCL_OK; } /* Add (or delete if already exists) a new note as a midi element */ int add_note(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { int group, pattern, step, note; TK707 *tk707 = (TK707*)clientData; MidiElement *temp; tk707_get_int4_macro(interp,objc,objv, group, pattern, step, note); if( (temp=step_add_el(tk707->ptree[tk707->mbank], group, pattern, step, note - 1)) == NULL ) { Tcl_SetObjResult(interp, Tcl_NewBooleanObj(0)); return TCL_OK; } else { Tcl_SetObjResult(interp, Tcl_NewBooleanObj(1)); return TCL_OK; } /* printf("Added note %d at group %d, pattern %d, step %d, (cart %d)\n", el_get_note(temp), group, pattern, step, tk707->mbank); pattern_display_els(tk707->ptree[tk707->mbank], group, pattern); */ } /* get note properties in a midi element * if note does not exists, return 0 */ int get_properties(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { int group, pattern, step, note, prop; TK707 *tk707 = (TK707*)clientData; MidiElement *temp; tk707_get_int4_macro(interp,objc,objv, group, pattern, step, note); temp = step_get_el(tk707->ptree[tk707->mbank], group, pattern, step, note - 1); if (!temp) { Tcl_SetObjResult(interp, Tcl_NewIntObj(0)); } else { Tcl_SetObjResult(interp, Tcl_NewIntObj(el_get_properties(temp))); } return TCL_OK; } /* set note properties in a midi element * if note does not exists yet, insert it */ int set_properties(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { int group, pattern, step, note, prop; TK707 *tk707 = (TK707*)clientData; MidiElement *temp; tk707_get_int5_macro(interp,objc,objv, group, pattern, step, note, prop); temp = step_get_el(tk707->ptree[tk707->mbank], group, pattern, step, note - 1); if (!temp) { temp = step_get_el(tk707->ptree[tk707->mbank], group, pattern, step, note - 1); } el_set_properties (temp, prop); Tcl_SetObjResult(interp, Tcl_NewBooleanObj(1)); return TCL_OK; } /* Return a list of instruments for the specified pattern step */ int pattern_items(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; Tcl_Obj *res; int group, pattern, step, i; int items[17]; tk707_get_int3_macro(interp,objc,objv, group, pattern, step); res = Tcl_NewListObj(0, NULL); if (group == -1) { group = 0; } if (pattern == -1) { pattern = 0; } el_get_step_elements((tk707->ptree[tk707->mbank] + (16*group+pattern))->mel + step, items); for(i=0;items[i]>=0;i++) { Tcl_ListObjAppendElement(interp, res, Tcl_NewIntObj(items[i] + 1)); } Tcl_SetObjResult(interp, res); return TCL_OK; } /* Return a list of note properties for the specified pattern step */ int get_pattern_properties(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; Tcl_Obj *res; int group, pattern, step, i; int items[17]; tk707_get_int3_macro(interp,objc,objv, group, pattern, step); res = Tcl_NewListObj(0, NULL); if (group == -1) { group = 0; } if (pattern == -1) { pattern = 0; } el_get_step_properties((tk707->ptree[tk707->mbank] + (16*group+pattern))->mel + step, items); for(i=0;items[i]>=0;i++) { Tcl_ListObjAppendElement (interp, res, Tcl_NewIntObj(items[i])); } Tcl_SetObjResult(interp, res); return TCL_OK; } /* Update volume fader settings */ int set_vols(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; int val, i; if( objc != 13 ) return TCL_ERROR; for(i=1;ivolumes[i-1] = val; } return TCL_OK; } /* Check whether alsa ports have been set */ int port_setcheck(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; Tcl_Obj *temp=NULL; temp = Tcl_ObjGetVar2(interp, Tcl_NewStringObj("tkxox", strlen("tkxox")), Tcl_NewStringObj("ALSA_OUTPORT", strlen("ALSA_OUTPORT")), TCL_GLOBAL_ONLY); if( !temp ) { Tcl_SetObjResult(interp, Tcl_NewBooleanObj(0)); return TCL_OK; } else { Tcl_SetObjResult(interp, Tcl_NewBooleanObj(1)); return TCL_OK; } return TCL_OK; } /* Construct a list of ALSA midi ports on the system. */ #ifdef HAVE_ALSA9 int port_list(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; Tcl_Obj *res, *items[16]={NULL}; int i, client, port, io; snd_seq_client_info_t *cinfo; snd_seq_port_info_t *pinfo; snd_seq_t *handle; if( objc != 2 ) { Tcl_SetResult(interp, "Wrong #args", TCL_VOLATILE); return TCL_ERROR; } if( Tcl_GetIntFromObj(interp, objv[1], &io) != TCL_OK ) return TCL_ERROR; if( snd_seq_open(&handle, "hw", SND_SEQ_OPEN_DUPLEX, 0) < 0 ) { return TCL_ERROR; } res = Tcl_NewListObj(0, NULL); snd_seq_client_info_alloca(&cinfo); snd_seq_port_info_alloca(&pinfo); i = 0; snd_seq_client_info_set_client(cinfo, 0); while (snd_seq_query_next_client(handle, cinfo) >= 0) { client = snd_seq_client_info_get_client(cinfo); snd_seq_port_info_set_client(pinfo, client); snd_seq_port_info_set_port(pinfo, -1); while (snd_seq_query_next_port(handle, pinfo) >= 0) { unsigned int cap; if( io > 0 ) cap = (SND_SEQ_PORT_CAP_SUBS_WRITE|SND_SEQ_PORT_CAP_WRITE); else cap = (SND_SEQ_PORT_CAP_SUBS_READ|SND_SEQ_PORT_CAP_READ); if( (snd_seq_port_info_get_capability(pinfo) & cap) == cap ) { const char *name; port = snd_seq_port_info_get_port(pinfo); items[i] = Tcl_NewListObj(0, NULL); Tcl_ListObjAppendElement(interp, items[i], Tcl_NewIntObj(client)); Tcl_ListObjAppendElement(interp, items[i], Tcl_NewIntObj(port)); name = snd_seq_port_info_get_name(pinfo); Tcl_ListObjAppendElement(interp, items[i], Tcl_NewStringObj(name, strlen(name))); name = snd_seq_client_info_get_name(cinfo); Tcl_ListObjAppendElement(interp, items[i], Tcl_NewStringObj(name, strlen(name))); Tcl_ListObjAppendElement(interp, res, items[i]); i++; } } } Tcl_SetObjResult(interp, res); return TCL_OK; } #else /* !HAVE_ALSA9 */ int port_list(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; Tcl_Obj *res, *items[17]={NULL}; int i, client, port, io; snd_seq_client_info_t cinfo; snd_seq_port_info_t pinfo; snd_seq_system_info_t sysinfo; snd_seq_t *handle; tk707_get_int1_macro(interp,objc,objv, io); if( snd_seq_open(&handle, SND_SEQ_OPEN) < 0 ) { return TCL_ERROR; } if( snd_seq_system_info(handle, &sysinfo) < 0 ) { return TCL_ERROR; } res = Tcl_NewListObj(0, NULL); i = 0; for(client=0;client 0 ) cap = (SND_SEQ_PORT_CAP_SUBS_WRITE|SND_SEQ_PORT_CAP_WRITE); else cap = (SND_SEQ_PORT_CAP_SUBS_READ|SND_SEQ_PORT_CAP_READ); if( (pinfo.capability & cap) == cap ) { items[i] = Tcl_NewListObj(0, NULL); Tcl_ListObjAppendElement(interp, items[i], Tcl_NewIntObj(pinfo.client)); Tcl_ListObjAppendElement(interp, items[i], Tcl_NewIntObj(pinfo.port)); Tcl_ListObjAppendElement(interp, items[i], Tcl_NewStringObj(pinfo.name, strlen(pinfo.name))); Tcl_ListObjAppendElement(interp, items[i], Tcl_NewStringObj(cinfo.name, strlen(cinfo.name))); Tcl_ListObjAppendElement(interp, res, items[i]); i++; } } } Tcl_SetObjResult(interp, res); return TCL_OK; } #endif /* HAVE_ALSA9 */ /* Return a given screen distance to pixels */ int cm2pix(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { TK707 *tk707 = (TK707*)clientData; char *rawlen, *widgetpath; Tk_Window tkwin; int pixels; if( objc != 3 ) { Tcl_SetResult(interp, "Wrong #args", TCL_VOLATILE); return TCL_ERROR; } if( (widgetpath=Tcl_GetStringFromObj(objv[1], NULL)) == NULL ) return TCL_ERROR; if( (rawlen=Tcl_GetStringFromObj(objv[2], NULL)) == NULL ) return TCL_ERROR; tkwin = Tk_NameToWindow(interp, widgetpath, Tk_MainWindow(interp)); if( Tk_GetPixels(interp, tkwin, rawlen, &pixels) != TCL_OK ) return TCL_ERROR; Tcl_SetObjResult(interp, Tcl_NewIntObj(pixels)); return TCL_OK; } /* ============================================================================ This is where the commands are registered. Don't change this section! ========================================================================= */ int Init_tk707(Tcl_Interp *interp) { NewCmd *cmdptr=cmdlist; /* We want all (most) of the new commands to have access to * "tk707" structure (via clientData) so create it before * creating all the new commands. */ if( (tk707=(TK707*)calloc(1, sizeof(TK707))) == NULL ) return TCL_ERROR; /* Create the new commands */ while( cmdptr->cmdname != NULL ) { Tcl_CreateObjCommand(interp, cmdptr->cmdname, cmdptr->cmdProc, (ClientData*)tk707, (Tcl_CmdDeleteProc*)NULL); cmdptr++; } Tk_DefineBitmap(interp, Tk_GetUid("nix"), nix_bits, 1, 1); return TCL_OK; } int Init_tk707_Scripts(Tcl_Interp *interp) { int result; char **ptr; result = TCL_OK; #ifndef not_compile_tcl for(ptr=scripts;*ptr!=NULL;ptr++) { if( (result=Tcl_Eval(interp, *ptr)) == TCL_ERROR ) break; } #endif return result; } tk707-0.8/tk707.texi0000644000175100017510000007252110142143460010731 00000000000000\input texinfo @c -*-texinfo-*- @c @c This file is part of tk707. @c @c Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito @c @c tk707 is free software; you can redistribute it and/or modify @c it under the terms of the GNU General Public License as published by @c the Free Software Foundation; either version 2 of the License, or @c (at your option) any later version. @c @c Foobar is distributed in the hope that it will be useful, @c but WITHOUT ANY WARRANTY; without even the implied warranty of @c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @c GNU General Public License for more details. @c @c You should have received a copy of the GNU General Public License @c along with Foobar; if not, write to the Free Software @c Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @c @c ------------------------------------------------------------- @c PREAMBLE @c ------------------------------------------------------------- @c %**start of header @setfilename tk707.info @settitle The TK-707 Rhythm Composer @finalout @setchapternewpage odd @c %**end of header @include version.texi @ifinfo This program is intended to mimic the operation of Roland's TR-707 Rhythm Composer (successor to the TR-606 and precursor to TR-808 and TR-909). Copyright @copyright{} 2000, 2001 by Chris Willing and Pierre Saramito. All rights reserved. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. @ignore Permission is granted to process this file through TeX and print the results, provided the printed document carries copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual). @end ignore Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. @end ifinfo @c ------------------------------------------------------------- @titlepage @title TK-707 @subtitle The TK-707 Rhythm Composer @subtitle Version @value{VERSION} @subtitle @value{UPDATED} @author by Chris Willing and Pierre Saramito @c ------------------------------------------------------------- @page @vskip 0pt plus 1filll Copyright @copyright{} 2000, 2001 by Chris Willing and Pierre Saramito. All rights reserved. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. @end titlepage @ifinfo @node Top,,, (dir) @top This document is a brief statement of requirements to run tk707 and a very introductory explanation of how to run it. This might be just enough for people not familiar with how these machines work but is not intended to be an exhaustive explanation. @dircategory Sound @direntry * tk707: (tk707). The TK-707 Rhythm Composer. @end direntry @end ifinfo @menu * Installation:: * Terminology:: * Demonstrations:: * Creating patterns:: * Playing patterns:: * Creating tracks:: * Editing tracks:: * Playing tracks:: * Sound maps:: * Midi files:: * Tempo changes:: * Last step changes:: * Scale changes:: * Accents and flam:: * Command line options:: * Converting MIDI to audio WAV and MP3:: * Copying:: * Index:: @end menu @c ------------------------------------------------------------- @chapter Installation @c ------------------------------------------------------------- @include INSTALL.texi @c ------------------------------------------------------------- @chapter Getting started @node Terminology,,, Top @section Terminology @c ------------------------------------------------------------- @cindex track @cindex pattern @cindex step Four song @emph{tracks} are available. You can think of a track as a song. Tracks are labeled by roman numbers: I, II, III and IV. Each track is made of @emph{patterns}, each with 16 @emph{steps}.s You could think of a pattern as a bar of music. At each step in a pattern, any of the available instruments can be set to play. Once you've made the patterns you want to use, you can combine them in any order into any of the four available tracks. Any particular pattern can be used in any of the tracks as many times as desired. @cindex group (pattern) There are 64 patterns available in 4 @emph{groups} of 16 each. Pattern groups are labeled by letters: A, B, C and D. The 4 groups are not at all related to the 4 tracks. Patterns from any group are available to any track. @c -------------------- @node Demonstrations,,, Top @section Demonstrations @c -------------------- @cindex midi output channel @cindex @file{.dat} tk707 file @cindex demonstration file @file{demo.dat} @cindex @code{File->Load Demo} menu Some sample patterns and tracks are in @file{demo.dat} which can be loaded from the @code{File->Demo} menu. Something exists in each track of this file so click the @key{START} button and you should hear something if your hardware is set up correctly. Part of this set up is the @emph{midi channel}; the default midi channel is 10 (the default for D-110 drum sounds). You can change the output midi channel via the Midi menu or Shift-click on the @key{MIDI CH} button; a new window will appear for midi channel selection. @cindex @file{.map} tk707 sound map file @cindex sound map file @cindex file @file{727.map} @cindex demonstration file @file{son-montuno.dat} @cindex latin percussion @cindex @code{Map->Load Standard Sound Map} A second demonstration file shows the alternate @emph{727} latin sound map. With this sound map, the software emulates a Roland @emph{727} latin percussion rhythm composer. Loaded from the @code{File->Demo} menu the file @file{son-montuno.dat}, and then load the latin percussion sound map @file{727.map} from the @code{Map->Load Standard Sound Map} menu. Set also the tempo to 200 bpm. Then, click the @key{START} button. @cindex file @file{7c7.map} An alternate sound map for latin percussion is @file{7c7.map}. The @code{c} in @code{7c7} stands for cuba@footnote{ An excellent introduction to afro-cuban rhythms can be founded in 'Les tumbaos de la salsa', by Daniel Genton, Editions Musicales Francaise, 2000. email: Topdjembe@@hotmail.com.}. can be loaded in the @code{Map->Load Standard Sound Map}. This file has no Roland latin percussion rhythm composer equivalent, and has been designed for our pleasure. Click the @key{START} button and you will hear the file @file{son-montuno.dat} with another feeling. @cindex brazilian percussion @cindex file @file{7b7.map} @cindex file @file{carioca.dat} Finally, a brazilian sound map @file{7b7.map} is presented. The @code{b} in @code{7b7} stands for brazil@footnote{ This sound map is indented for batucada music for carnaval.} and can be loaded together with the @file{carioca.dat} demonstration. A good tempo is 220 bpm for the samba carioca. There is no more demonstration file for these sound maps, since it is time for you to compose your music ! @c ------------------------------------------------------------- @node Creating patterns,,, Top @section Creating patterns @c ------------------------------------------------------------- @cindex pattern @subsection Writing pattern Shift-click the @key{PATTERN} button to enter Pattern Write mode. While @key{START} is not pressed, the 16 instrument/step keys at the bottom of the interface are dual purposed. Clicking on a key changes which pattern, 1-16, (within the current group) is selected for writing. A small lamp above one of the @emph{group pattern} buttons indicates the current group. The current group may be changed by clicking group pattern button @key{A}, @key{B}, @key{C} or @key{D}. @cindex instrument @cindex step Shift-clicking on the @emph{instrument/step} keys selects which instrument is selected to be written into the current pattern. Click the @key{START} button; now as you click of the instrument/step keys, the selected instrument, e.g. @key{Cowbell}, will be added at that step. If the selected instrument has already been set at that step, then clicking there will remove it. To select another instrument, press the @key{STOP/CONT} button then select another instrument using Shift-click on the appropriate instrument/step key. Continue adding instruments at the required steps to complete the pattern. Make all the patterns you will need for a new song. A pattern may be cleared of all notes while in Pattern Write mode; clicking on the @key{CLEAR} button will raise a dialog window to confirm clearing of the current pattern. @subsection Copy/paste and copy/merge @cindex pattern copy/paste @cindex pattern copy/merge Another method of creating new patterns is to copy an existing pattern and pasting it to a new location, then modifying the new version. This is an efficient method of creating a number of patterns which are small variations of each other. Select the pattern to be copied and press @key{CRTL}-@key{C} (@key{CONTROL} key and @key{C} key together). Now select a new (empty?) pattern location and press @key{Ctrl}-@key{V} or @key{Ctrl}-@key{B} to @emph{paste} in the copied notes. Using @key{Ctrl}-@key{V} will clear the destination location of any notes it already contains whereas @key{Ctrl}-@key{B} will @emph{merge} its current contents with the new note information. @subsection The pattern display grid @cindex pattern display grid The third method uses the pattern display grid. Double-click near an instrument/step intersection to add the instrument at that step. If the instrument already exists at that step then it is deleted. This is probably the easiest way of creating patterns. @c ------------------------------------------------------------- @node Playing patterns,,, Top @section Playing patterns @c ------------------------------------------------------------- Click the @key{PATTERN} button to enter Pattern Play mode. While the @key{START} button is depressed, the currently selected pattern will play. Clicking on different pattern keys at the bottom of the interface will select a new pattern (@key{1},..,@key{16}) in the current group. If not currently playing, the new pattern is displayed immediately. If a pattern is already playing, the new pattern will play when the current pattern is finished. Selecting a different group also changes the current pattern, i.e. if pattern 7 in group I is selected, then when group 2 is selected the new pattern will be pattern 7 in group II. Sixteen patterns are available in each of the four groups for a total of sixty-four patterns. @c ------------------------------------------------------------- @node Creating tracks,,, Top @section Creating tracks @c ------------------------------------------------------------- Shift-click the @key{TRACK} button to enter Track Write mode. To start from an empty track, delete anything already there (Shift-click on the @key{CLEAR} button) if necessary. Now select a pattern to add to the track and click on the enter key as many times as that pattern is required. Then select the next pattern to add and click on the enter key as many times as that pattern is required. E.g., selecting pattern 3 and clicking on the @key{ENTER} button 4 times, then selecting pattern 9 and clicking on the @key{ENTER} button 2 times will result in a track of six measures - 4 of pattern 3 followed by 2 measures of pattern 9. Changes to a track being created can be made. @xref{Editing tracks}. The currently selected pattern can be heard playing if the @key{START} button is clicked. This enables an audible preview of selected patterns prior to adding them to the track. @c ------------------------------------------------------------- @node Editing tracks,,, Top @section Editing tracks @c ------------------------------------------------------------- Shift-click the @key{TRACK} button to enter Track Write mode. Track editing is only possible in Track Write mode. Deletions of tracks (or parts of them) require confirmation (via a dialog window). Shift-click on the @key{CLEAR} button deletes all of the current track. Ctrl-click on the @key{CLEAR} button deletes the current measure from the track. Shift-Ctrl-click on the @key{CLEAR} button deletes the rest of the current track, including the current measure. On some systems (including mine!) this actually requires the @key{Ctrl} key as well i.e. @key{Shift} + @key{Ctrl} keys + mouse click. Consider this a minor bug to be fixed sometime. Adding patterns to a track involves selecting a pattern then a click or Shift-click on the @key{ENTER} button. Think of Shift-click on @key{ENTER} as an insert operation into the track before the current measure. An ordinary click on @key{ENTER} is actually a replacement operation i.e. it will replace the current measure with the currently selected pattern. However if you're at the end of the current track this behaves like an append operation - it adds new measures to the end of the track. The currently selected pattern can be heard playing if the @key{START} button is clicked. This enables an audible preview of selected patterns prior to adding them to the track. Different parts of the track can be accessed by clicking on the @key{BACK} and @key{FWD} buttons. Shift-click on the @key{LAST MEAS} button to go to the end of the track. Note that this goes to the measure just past the end of the track (ready to write the next measure). An ordinary click on the @key{LAST MEAS} button will momentarily show the last (+1) measure while the button is held down. @c ------------------------------------------------------------- @node Playing tracks,,, Top @section Playing tracks @c ------------------------------------------------------------- @cindex track selection Click on the @key{TRACK} button to enter the @code{Track Play} mode. Then click on the @key{START} button and the current track will be played. Select another track, e.g. track IV, by Shift-clicking a the corresponding track button: @key{Shift}-@key{IV}. Then enter @key{START} for playing the song. @c ------------------------------------------------------------- @node Tempo changes,,, Top @section Tempo changes @c ------------------------------------------------------------- @cindex tempo The tempo may be changed in either Track or Pattern mode. The tempo is lowered by Clicking in the tempo dial and then Click-Dragging around. It its increased by Click-Dragging to the left from the tempo dial; its increased by Click-Dragging to the right. @cindex midi file Tempo changes can't be written into a track. If saving a track as an midi file, the whole track will have whatever tempo is selected at the time of saving. @c ------------------------------------------------------------- @chapter Midi files and sounds @node Midi files,,, Top @section Midi files @c ------------------------------------------------------------- @cindex midi file @cindex @code{Midi File->Save} menu Currently only single track Midi files can be exported. When the @code{Midi File->Save} is selected a file browser appears into which the name of the file is entered. Its not crucial but it is a convention to have a @file{.mid} ending on the filename. When a name has been nominated, the current track will be exported, including midi channel and tempo information i.e. make sure these have the values you want first. @cindex tempo Tempo changes can't be written into a track. If saving a track as an midi file, the whole track will have whatever tempo is selected at the time of saving. @cindex volume control Volume controls are used when saving a midi file: master, accent and volume controls associated to instruments. @c ------------------------------------------------------------- @node Sound maps,,, Top @section Sound maps @c ------------------------------------------------------------- @cindex sound map @cindex instrument @cindex midi note @cindex pattern display grid @cindex volume control TK-707 @emph{sound maps} are mappings of the 16 instrument keys to descriptions of their long names, short names, abbreviate name and midi note values. The first (longer) names are used in the pattern grid display, while the second (shorter) names are used under the 16 instrument keys and abbreviations are used under the volume controls. The midi note values need to correspond to values recognized by the sound module being used with TK-707 (either external or built into a sound card). Appropriate values will need to be gleaned from your hardware documentation, however the built in values should work on any module conforming to the General Midi standard. @cindex sound map @file{707.dat} @cindex sound map @file{727.dat} The built-in sound map is supplied as an example in the @file{707.map} file. A second file, @file{727.map}, is supplied and can be loaded to play with the sounds of Roland's TR-727, the latin percussion counterpart of the TR-707. Note that the 727 mapping won't work on a 707 because it doesn't recognize the necessary range of midi note values. It will work on modules (such as Roland D-110) which do recognize the necessary range. @cindex @code{Map->Load Local Sound Map} menu Files with similar layout to the supplied @file{.map} can be constructed using a text editor and loaded into TK-707 from the @code{Map->Load Local Sound Map} menu. @cindex @code{Map->Edit Sound Map} menu Alternatively, the currently loaded sound map can be edited via an editing interface which is accessed from the @code{Map->Edit Sound Map} menu. Just change the name, short name and midi note values as required and press the @key{APPLY} button to apply the new settings to TK-707. The Cancel button will revert sound setting to whatever they were before the editing window was started. The @key{OK} button will apply the currently edited settings and close the editing window. As new midi note values are entered for an instrument, the sound that they access in the midi sound module can be previewed using the @key{TEST} buttons. To speed the process of finding suitable sounds, three keyboard/mouse shortcuts are provided: @itemize @bullet @item @key{Shift} + @key{Mouse button 1} in the "Note" widget increments the value by 1 and test plays the new sound; @item @key{Ctrl} + @key{Mouse button 1} in the "Note" widget decrements the value by 1 and test plays the new sound; @item @key{Mouse button 2} in the "Note" widget and dragging up or down continuously decrement or increments the note value and test plays. the new sound. @end itemize @cindex @code{Map->Save Sound Map} menu Any editing of sound maps are lost if TK-707 is closed down without saving the sound map. A sound map can be saved using the @code{Map->Save Sound Map} menu item. A file suffix of @file{.map} is recommended (but not absolutely required). @c ------------------------------------------------------------- @chapter Ternary feelings and poly-rhythms @node Scale changes,,, Top @section Scale changes @c ------------------------------------------------------------- @cindex scale This feature is related to fast figures and 6/8 figures. Four scales are available on each pattern. Click on the @key{SCALE} in Pattern Write mode for changing the scale of the current pattern. A small lamp on the left of the musical score score indicates the current scale. For each scale, a vertical bar indicates the duration of a whole note. @subsection Binary 4/4 measures @cindex whole note decomposition @c On the first scale, the whole note duration is decomposed into sixteenth. Each sixteenth is associated to the a step of the pattern. There is 16 sixteenth in the pattern if the last step is set to 16, and then the total duration of the pattern is those of a whole note. This is the default scale when creating pattern associated to a 4/4 measure. @subsection Binary 2/4 measures For the second scale, the whole duration is decomposed into eighthes. Each eighthes is associated to a step of the pattern. When the last step is set to 16, there is 16 eighthes in the pattern, and the total duration of the pattern is those of a half whole. When playing such pattern, lamps associated to steps are turning twice faster ! The pattern is then a 2/4 measure. The whole duration should be recovered in a song by inserting two of such patterns. This scale is designated for fast schemes on binary songs. @subsection Triplets and composed 12/4 measures @cindex ternary feeling @cindex last step On the third scale, the whole duration is decomposed into four third of a quarter. Each third of a quarter is associated to a step of the pattern. When the last step is set to 12, the total duration of the pattern is those of a whole note @pxref{Last step changes}. The pattern is then a 12/4 measure. Alternatively, the last could be set to 9 or 15 and then the pattern is a 9/4 or a 15/4 measure, respectively. This pattern is designated for ternary-based measures or for inserting ternary feelings (triplets) into a binary song. @subsection Sextuplets and composed 12/8 measures @cindex demonstration file @file{son-montuno.dat} @cindex poly-rhythms 12/8 @c Finally, the fourth scale decomposes the whole duration into two sextuplets (12 times 1/6 of a quarter sextuplets). Each 1/6 of a quarter is associated to a step of the pattern. When the last step is set to 12. @xref{Last step changes}, the total duration of the pattern is those of a half whole note. The whole duration should be recovered in a song by inserting two of such patterns. The pattern is then a 12/8 measure. @cindex last step Since each quarter is represented by 6 steps on the pattern, we are able to superpose binary and ternary schemes, i.e. poly-rhythmic effects. The @file{son-montuno.dat} demonstrates such effects. This pattern is designated for fast schemes on ternary based measures or for inserting ternary feelings (triplets) into a binary song. @c ------------------------------------------------------------- @node Last step changes,,, Top @section Last step changes @c ------------------------------------------------------------- @cindex last step Remarks that the last step is not automatically changed from 16 to 12 when changing the scale of a pattern. It could be chosen to 15 for the scale 3, for instance. Click on the @key{LAST STEP} in Pattern Write mode for changing the scale. A new window will appear for last scale selection of the last step associated to the current pattern. @c ------------------------------------------------------------- @chapter Accents and flam @node Accents and flam,,, Top @section Accents @c ------------------------------------------------------------- @subsection Inserting accentuated notes @cindex accent @cindex grid marker: orange @cindex pattern step write @cindex pattern tap write There is two available accents: a weak and a strong one. Use the weak accent by clicking on the @key{ACCENT} button in Pattern Step Write or Pattern Tap Write modes. The "accent" text at the bottom of the button becomes orange. Enter then notes as usual: notes are @emph{weakly accentuated} and the circle marker is orange, instead of the usual grey. @cindex grid marker: red Use the strong accent by clicking a second times on the @key{ACCENT} button. Now, the "accent" text becomes red. Then, enter notes: they are @emph{strongly accentuated} and the circle marker is red too. Then, click a third times on the @key{ACCENT} button. The "accent" text at the bottom of the button comes back to the initial foreground color. When you insert notes, they will be no more accentuated. In Pattern Step Write mode, you could also insert notes by using the @key{1},..,@key{16} step touchs. Conversely, in Pattern Tap Write, you could also use the instrument keys, e.g. @key{Cowbell}. @subsection Controlling the accent intensity @c ----------------------------------------- @cindex volume control The weak and strong accent intensities could be modulated by using the volume control labeled "AC". Moves the label control up and down. When up, accent effects are maximum while when down, there is no more perceptible accent effects. The volume control of accents is global. @c ----------- @section Flam @c ----------- @cindex flam @cindex grace note @cindex pattern display grid @cindex grid marker: star @subsection Inserting flams @c ------------------------- Flam is a kick note written ahead of the main beat, and takes on the effect of a @emph{grace note}. Control-double-click (@key{Control}-@key{Button-1} two times) near an instrument/step intersection to insert a flam note for this instrument at that step. Instead of the circle marker, a star marker represents the flam note at the selected intersection @pxref{Creating patterns}. @cindex Pattern Step Write There is another way for inserting flams: In Pattern Step Write mode, click the @key{START} button; Select an instrument by shift-clicking on an instrument/step key, e.g. @key{Shift}-@key{Snare}. Now, as usual, as you click on the instrument/step keys, the selected snare will be added at that step 4. Instead of this, if you control-click on the instrument/step keys, e.g. @key{Ctrl}-@key{4}, then a snare note with a flam is inserted at step 4. @cindex Pattern Tap Write Conversely, in Pattern Tap Write mode, enter a flam by using the @key{Ctrl}-@key{Cowbell}. @cindex accent Flam could be combined with accents, and the associated star marker becomes orange or red, depending on the weak or strong accent. @subsection Controlling the flam interval @c -------------------------------------- @cindex flam interval The time between the grace note and its following main note can be varied in the range 0:4. The default value is 2. A zero value means that flam is off. Each pattern has an associated flam interval value. Click on the @key{FLAM/SHUFFLE} button in Pattern Write mode for changing the flam interval of the current pattern. A new window will appear for the flam interval selection. @c ------------------------------------------------------------- @appendix Command line options @node Command line options,,, Top @c ------------------------------------------------------------- @section Synopsis @example tk707 options... @end example @section Options @table @code @item -l List the available sound ports @item -p @var{port} Use this port @item -small @item -medium @item -normalsize Set the size of the window, since some screens are too small for the whole window. @item -display @var{screen id} Display to use. @cindex @code{xwininfo} @item -use @var{window id}. Id of window in which to embed application. See @code{xwininfo}. @item -geometry Initial geometry for window @item -colormap Colormap for main window @item -name Name to use for application @item -sync Use synchronous mode for display server @item -visual Visual for main window. @item -h @item -help Print short help. @end table @c ------------------------------------------------------------- @appendix Converting MIDI to audio WAV and MP3:: @node Converting MIDI to audio WAV and MP3,,, Top @c ------------------------------------------------------------- @cindex midi file format @cindex audio file format @cindex midi-to-audio converters @cindex @file{.wav} audio file @cindex @file{.mp3} audio file @cindex @file{.mid} midi file @cindex @code{timidity} midi-to-wav converter @cindex @code{lame} wav-to-mp3 converter @cindex @code{mpg123} mp3 player This small annex explain how to convert your output midi file to formatted audio file (ex. RIFF WAVE) and compressed MP3 audio files. We assume your have converted your file @file{salsa.dat} into MIDI format @file{salsa.mid} in the @code{tk707} environment @pxref{Midi files}. Then enter the commands: @example timidity bolero.mid -Ow bolero.wav lame -b128 bolero.wav bolero.mp3 @end example and compare the file sizes: @example ls -al -rw-r--r-- 1 maria martinez 1051 Mar 9 09:20 son-montuno.mid -rw-r--r-- 1 maria martinez 3937324 Mar 9 09:22 son-montuno.wav -rw-r--r-- 1 maria martinez 493056 Mar 9 09:22 son-montuno.mp3 @end example The MIDI file does not contains the sounds. It contains only the score of your music and a MIDI render is required to heat it. The audio WAV and MP3 contains the complete sound and are suitable exports, such as CD-ROM writers. Moreover, the MP3 file is compressed by rougthly a factor ten. The MP3 audio files can be played back by popular mp3 players such as mpg123. The @code{timidity} tool is a midi-to-wav converter available at @url{http://www.goice.co.jp/member/mo/timidity}. The @code{lame} tool is a wav-to-mp3 convarter available at @url{http://www.sulaco.org/mp3}. @c ------------------------------------------------------------- @node Copying,,, Top @include gpl.texi @c ------------------------------------------------------------- @c ------------------------------------------------------------- @node Index,,, Top @unnumbered Index @c ------------------------------------------------------------- @printindex cp @c ------------------------------------------------------------- @c TABLE OF CONTENTS @c ------------------------------------------------------------- @shortcontents @contents @bye @c ------------------------------------------------------------- tk707-0.8/VERSION0000644000175100017510000000000610142143217010217 000000000000000.8.1 tk707-0.8/defs.tcl0000644000175100017510000002616610142137110010606 00000000000000# # This file is part of tk707. # # Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito # # tk707 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. # # Foobar 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 Foobar; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # ----------------------------------------- # File defs.tcl # Definitions and pre-start set up. # ----------------------------------------- proc usage {} { puts "usage: tk707 options...; please read the documentation (html,info,..) and the unix manual." exit 0 } set small_size_factor 0.75; set medium_size_factor 0.9; set normal_size_factor 1.0; set large_size_factor 2; set size_factor $normal_size_factor set input_file_name ""; set new_argv "" for {set i 0} {$i < $argc} {incr i} { set argi [lindex $argv $i]; # puts "defs.tcl: argv($i) = `$argi'"; if {$argi == "--help"} { usage } elseif {$argi == "-small"} { # puts "defs.tcl: small!"; set [lindex $argv $i] "-n"; set size_factor $small_size_factor; } elseif {$argi == "-medium"} { # puts "defs.tcl: medium!"; set size_factor $medium_size_factor; } elseif {$argi == "-normalsize"} { # puts "defs.tcl: normal!"; set new_argv "$new_argv $argi" set size_factor $normal_size_factor; } elseif {$argi == "-big"} { # puts "defs.tcl: large!"; set new_argv "$new_argv $argi" set size_factor $large_size_factor; } else { # send option to the 2nd C-code pass... # puts "defs.tcl: argv($i) = `$argi'...added"; set new_argv "$new_argv $argi" } } # # we strip options to avoid mistakes # TODO: send -p x:y nd so to C code set argv $new_argv set argc [llength $argv] #puts "argv := $argv" #puts "argc := $argc" # ----------------------------------------- # pixel to centimeter conversion # ----------------------------------------- package require Tcl 8.0 package require Tk 8.0 set VERSION 0.6 set PKGDATADIR [pwd] # uncomment to show sonme boxes: #set debug_relief "-borderwidth 2p -relief groove"; set debug_relief ""; # ----------------------------------------- # pixel <--> point/inch/cm # ----------------------------------------- set cm_per_inch 2.54; set point_per_inch 72.00; set point_per_cm [expr $point_per_inch / $cm_per_inch]; set pixel_per_point [tk scaling] # puts "dpi $pixel_per_point" set pixel_per_inch [expr int($pixel_per_point*$point_per_inch+0.5)] set pixel_per_cm [expr $pixel_per_inch/$cm_per_inch] # ----------------------------------------- # get window max dimension # ----------------------------------------- set maxsize_in_pixel [wm maxsize .] set maxwidth_in_pixel [lindex $maxsize_in_pixel 0] set maxheight_in_pixel [lindex $maxsize_in_pixel 1] set maxwidth_in_cm [expr $maxwidth_in_pixel * $pixel_per_cm ] set maxheight_in_cm [expr $maxheight_in_pixel* $pixel_per_cm ] # ----------------------------------------- # resize coefficient if window is too small # ----------------------------------------- if {$size_factor < $medium_size_factor} { # small screens set size_factor $small_size_factor; set font8 "6"; set font12 "6"; set boldfont12 "6"; set boldfont13 "6"; set courrier_boldfont_i_50 "10"; set boldr14 "8"; set helvetica_bold_r_12 "6"; set normal_r_14 "8"; } elseif {$size_factor < $normal_size_factor} { # medium screen set size_factor $medium_size_factor; set font8 "6"; set font12 "8"; set boldfont12 "8"; set boldfont13 "8"; set courrier_boldfont_i_50 "adobe-courier-bold-i-*-30"; set boldr14 "bold-r-*-10"; set helvetica_bold_r_12 "8"; set normal_r_14 "10"; } else { # normal screen set size_factor $normal_size_factor; set font8 "7"; set font12 "9"; set boldfont12 "9"; set boldfont13 "9"; set courrier_boldfont_i_50 "adobe-courier-bold-i-*-50"; set boldr14 "bold-r-*-11"; set helvetica_bold_r_12 "9"; set normal_r_14 "10"; } # ----------------------------------------- # pixel to centimeter conversion # ----------------------------------------- set scaling $size_factor; tk scaling $scaling set pixel_per_point [tk scaling] set point_per_pixel [expr 1./$pixel_per_point] set pixel_per_inch [expr int($pixel_per_point*$point_per_inch+0.5)] set pixel_per_cm [expr $pixel_per_inch/$cm_per_inch] # ----------------------------------------- # set global constants # ----------------------------------------- set tcl_rcFileName "~/.tk707rc" if {[catch {open $tcl_rcFileName r} fid]} { } else { catch {source $tcl_rcFileName} } set res [eval tk7_init $argv] if {$res == 1 || $res == 3} { exit } elseif {$res ==2} { wm iconify . port_setup tk7_init } rename exit exit.old proc exit {} { exit707 exit.old } # ----------------------------------------- # set global constants # ----------------------------------------- set right_space_width 0.5; set tkxox(VERSION) "TK707-$VERSION" set tkxox(READ) 0 set tkxox(WRITE) 1 set tkxox(TRACK) 0 set tkxox(PATTERN) 1 set tkxox(STOP) 0 set tkxox(START) 1 set tkxox(CONT) 2 set tkxox(FILE_UNCHANGED) 0 set tkxox(FILE_MODIFIED) 1 set tkxox(col_on) #ffaa00 set tkxox(col_active) #ffaaaa set tkxox(col_def_bg) #d9d9d9 set tkxox(col_def_active) #ececec set tkxox(but_grey) #888888 set tkxox(but_grey_active) #999999 set tkxox(but_grey_on) #bbbbbb set tkxox(lamp_off) #882200 set tkxox(lamp_on) #ff8800 set tkxox(color_fg_shift) #ffffff; # the text on the shift keys (white) set tkxox(color_bg_shift) #000044cffb22; # the box on the shift keys (blue) set tkxox(vol_trough_color) #a5e3a5e3a5e3; # background of the trough for volume set tkxox(vol_slider_passive) #570a570a570a; # volume slider when nothing append set tkxox(vol_slider_active) #204120412041; # volume slider when we interact set tkxox(vol_highlightbackground) $tkxox(col_def_bg); # the border outside volumes set tkxox(color_score_bg) #c24d108c09e9; # the color of rectangles arround notes set tkxox(score_active_note) #ffffff; # the color of used notes on the score set tkxox(score_passive_note) #87cfff; # the color of unused notes (at right) set tkxox(color_title_fg) $tkxox(color_bg_shift); # the color of "RHYTHM COMPOSER" set tkxox(color_title_logo_fg) $tkxox(vol_slider_active); # the color of "TK-707" set tkxox(color_title_bg) $tkxox(col_def_bg); set tkxox(tick_flam_duration) 4 # # color background # tk_setPalette $tkxox(col_def_bg) # # # Properties of note elements: # WARNING: may be as in # set tkxox(flam) [expr 1 << 0] set tkxox(weak_accent) [expr 1 << 1] set tkxox(strong_accent) [expr 1 << 2] set tkxox(zero_velocity) [expr 1 << 3] set tkxox(velocity_field) [expr $tkxox(zero_velocity) | \ $tkxox(weak_accent) | \ $tkxox(strong_accent)] set tkxox(col_default_velocity) $tkxox(but_grey) set tkxox(col_weak_accent) $tkxox(lamp_on) set tkxox(col_strong_accent) #ff0000 set tkxox(col_zero_velocity) white set mode(rdrw) $tkxox(READ) set mode(patr) -1 set mode(stopgo) $tkxox(STOP) set mode(patgroup) 0 set mode(current_track) 0 set mode(current_pattern) 0 set mode(current_instr) 1 set mode(measure) -1 set mode(tempo) 120 set mode(cartridge) 0 set mode(midi_channel) 0 set mode(PATTERN_REPEAT) false set mode(TRACK_START) false set mode(REPEAT_INTERVAL) 5 set mode(showtrack) true set mode(current_accent) 0 set mode(file_status) $tkxox(FILE_UNCHANGED) set flash(count) -1 set flash(duration) 20 # Default sound mapping # set sound(1,name) "Bass 1" set sound(1,shortname) "Bass 1" set sound(1,note) 35 set sound(2,name) "Bass 2" set sound(2,shortname) "Bass 2" set sound(2,note) 36 set sound(3,name) "Snare 1" set sound(3,shortname) "Snare 1" set sound(3,note) 38 set sound(4,name) "Snare 2" set sound(4,shortname) "Snare 2" set sound(4,note) 40 set sound(5,name) "LowTom" set sound(5,shortname) "LowTom" set sound(5,note) 41 set sound(6,name) "MidTom" set sound(6,shortname) "MidTom" set sound(6,note) 45 set sound(7,name) "HighTom" set sound(7,shortname) "HighTom" set sound(7,note) 48 set sound(8,name) "Rim" set sound(8,shortname) "Rim" set sound(8,note) 37 set sound(9,name) "Cowbell" set sound(9,shortname) "Cowbell" set sound(9,note) 56 set sound(10,name) "Hand Clap" set sound(10,shortname) "Clap" set sound(10,note) 39 set sound(11,name) "Tambourine" set sound(11,shortname) "Tamb" set sound(11,note) 54 set sound(12,name) "HH Closed 1" set sound(12,shortname) "HH C1" set sound(12,note) 42 set sound(13,name) "HH Closed 2" set sound(13,shortname) "HH C2" set sound(13,note) 42 set sound(14,name) "HHat Open" set sound(14,shortname) "HH Open" set sound(14,note) 46 set sound(15,name) "Crash" set sound(15,shortname) "Crash" set sound(15,note) 49 set sound(16,name) "Ride" set sound(16,shortname) "Ride" set sound(16,note) 51 tk7_set_sounds # # instrument(1:16) to volume(1:10) mapping # set instrument_to_volume(1) 1 set instrument_to_volume(2) 1 set instrument_to_volume(3) 2 set instrument_to_volume(4) 2 set instrument_to_volume(5) 3 set instrument_to_volume(6) 4 set instrument_to_volume(7) 5 set instrument_to_volume(8) 6 set instrument_to_volume(9) 6 set instrument_to_volume(10) 7 set instrument_to_volume(11) 7 set instrument_to_volume(12) 8 set instrument_to_volume(13) 8 set instrument_to_volume(14) 8 set instrument_to_volume(15) 9 set instrument_to_volume(16) 10 # # default abbrevs, for volume labels # set sound(1,abbrev) "BASS" set sound(2,abbrev) "" set sound(3,abbrev) "SNARE" set sound(4,abbrev) "" set sound(5,abbrev) "LT" set sound(6,abbrev) "MT" set sound(7,abbrev) "HT" set sound(8,abbrev) "R" set sound(9,abbrev) "CB" set sound(10,abbrev) "C" set sound(11,abbrev) "T" set sound(12,abbrev) "HH" set sound(13,abbrev) "" set sound(14,abbrev) "" set sound(15,abbrev) "CRASH" set sound(16,abbrev) "RIDE" # # default volume labels # set volume_label(0) "ACCENT" set volume_label(1) "$sound(1,abbrev)" set volume_label(2) "$sound(3,abbrev)" set volume_label(3) "$sound(5,abbrev)" set volume_label(4) "$sound(6,abbrev)" set volume_label(5) "$sound(7,abbrev)" set volume_label(6) "$sound(8,abbrev)/$sound(9,abbrev)" set volume_label(7) "$sound(10,abbrev)/$sound(11,abbrev)" set volume_label(8) "$sound(12,abbrev)" set volume_label(9) "$sound(15,abbrev)" set volume_label(10) "$sound(16,abbrev)" # # default implicit delay (e.g. short sound) # set has_delay(1) 0 set has_delay(2) 0 set has_delay(3) 0 set has_delay(4) 0 set has_delay(5) 0 set has_delay(6) 0 set has_delay(7) 0 set has_delay(8) 0 set has_delay(9) 0 set has_delay(10) 0 set has_delay(11) 0 set has_delay(12) 0 set has_delay(13) 0 set has_delay(14) 0 set has_delay(15) 0 set has_delay(16) 0 tk707-0.8/ports.tcl0000644000175100017510000001317710142137110011032 00000000000000# # This file is part of tk707. # # Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito # # tk707 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. # # Foobar 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 Foobar; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # ----------------------------------------------------------------------------- # File ports.tcl # GUI for selection of ALSA port. # ----------------------------------------------------------------------------- proc port_setup {} { global tcl_rcFileName global ports global iolists global font12 global normal_r_14 set ports .setup toplevel $ports wm title $ports "TK-707 ALSA port setup" set howto .setup.h set howtotext $howto.text set howtoscroll $howto.scroll frame $howto ;#-relief groove -borderwidth 2 canvas $howtotext -yscrollcommand "$howtoscroll set" -width 13.5c -height 5c scrollbar $howtoscroll -command "$howtotext yview" -width 0.4c pack $howtoscroll -side right -fill y pack $howtotext pack $howto $howtotext create text 0.2c 0.2c -anchor nw -font *-${normal_r_14}-* -text \ "Double click on one of Output Ports to make it the Selected Output.\n The SAVE button will save the setting in ~/.tk707rc so that this selection dialogue won't appear next time TK-707 is started.\n The OK button will close this dialogue and allow TK-707 to start using the selected port. If the current setting hasn't been SAVEd then this dialogue will appear again next time TK-707 is run. If no port has been selected, TK707 will not start.\n Input Port selection is for future use and currently has no effect.\n When this selection dialogue is raised from the File->Ports menu, a selection can be SAVEd but ports cannot be changed while TK-707 is running (yet)." set iolists $ports.l canvas $iolists -width 14c -height 8c -relief groove -borderwidth 2 pack $iolists set olist $iolists.ol set ilist $iolists.il set oselect $iolists.op set iselect $iolists.ip scrollbar $iolists.os -command "$olist yview" scrollbar $iolists.is -command "$ilist yview" listbox $olist -font *-${normal_r_14}-* -width 26 -height 10 -selectmode browse -exportselection 1 -yscroll "$iolists.os set" listbox $ilist -font *-${normal_r_14}-* -width 26 -height 10 -selectmode browse -exportselection 1 -yscroll "$iolists.is set" label $oselect -width 28 -height 1 -relief sunken -borderwidth 2 label $iselect -width 28 -height 1 -relief sunken -borderwidth 2 $iolists create text 2c 0.5c -font *-${normal_r_14}-* -text "Input Ports" -anchor nw $iolists create text 9c 0.5c -font *-${normal_r_14}-* -text "Output Ports" -anchor nw $iolists create window 0c 1.5c -height 4c -window $iolists.is -anchor nw $iolists create window 0.5c 1.5c -height 4c -window $ilist -anchor nw $iolists create window 7c 1.5c -height 4c -window $iolists.os -anchor nw $iolists create window 7.5c 1.5c -height 4c -window $olist -anchor nw $iolists create window 0.2c 6c -window $iselect -anchor nw $iolists create window 7.05c 6c -window $oselect -anchor nw $iolists create text 2c 7c -font *-${normal_r_14}-* -text "Selected Input" -anchor nw $iolists create text 9c 7c -font *-${normal_r_14}-* -text "Selected Output" -anchor nw # Get list of output ports set oportlist [tk7_port_list 1] foreach i $oportlist { $olist insert end $i } # Get list of input ports set iportlist [tk7_port_list 0] foreach i $iportlist { $ilist insert end $i } bind .setup.l.il { $iolists.ip configure -font *-${normal_r_14}-* -text [selection get] } bind $olist { $iolists.op configure -font *-${normal_r_14}-* -text [selection get] } set portacts $ports.pa canvas $portacts -width 14c -height 1.5c pack $portacts button $portacts.c -font *-${normal_r_14}-* -text CANCEL -width 6 -command { if {! [tk7_port_setcheck]} { puts "NO PORTS SET" destroy . exit } else { destroy $ports } } button $portacts.s -font *-${normal_r_14}-* -text SAVE -width 6 -command { set oplist [.setup.l.op configure -text] # puts "XX${oplist}XX" if {[llength $oplist] != 5} { puts nothing } else { if {[llength [lindex $oplist 4]] > 0} { set op [lindex [lindex $oplist 4] 0] set oc [lindex [lindex $oplist 4] 1] set tkxox(ALSA_OUTPORT) "${op}:${oc}" # Save selection set OPstr [format "set tkxox(ALSA_OUTPORT) %d:%d" $op $oc] set f [open $tcl_rcFileName w] seek $f 0 end puts $f $OPstr close $f destroy $ports } } } button $portacts.b -font *-${normal_r_14}-* -text OK -width 6 -command { set oplist [.setup.l.op configure -text] if {[llength $oplist] != 5} { puts nothing } else { if {[llength [lindex $oplist 4]] > 0} { set op [lindex [lindex $oplist 4] 0] set oc [lindex [lindex $oplist 4] 1] set tkxox(ALSA_OUTPORT) "${op}:${oc}" } } if {! [tk7_port_setcheck]} { #puts "NO PORTS SET" destroy . exit } else { destroy $ports } } $portacts create window 3c 0.75c -window $portacts.c $portacts create window 7c 0.75c -window $portacts.s $portacts create window 11c 0.75c -window $portacts.b grab set $ports tkwait window $portacts } tk707-0.8/gui.tcl0000644000175100017510000002321010142137110010434 00000000000000# # This file is part of tk707. # # Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito # # tk707 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. # # Foobar 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 Foobar; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # ========================================================================= # File gui.tcl # GUI for TK-707 # ========================================================================= eval destroy [winfo child .] wm title . "TK-707" set font {Helvetica 14} wm iconify . # ------------------------------------------------------------------------- # menu bar # ------------------------------------------------------------------------- frame .mbar -borderwidth 1p -relief raised pack .mbar -fill x menubutton .mbar.file -text "File" -menu .mbar.file.m menubutton .mbar.midi -text "Midi" -menu .mbar.midi.m menubutton .mbar.map -text "Map" -menu .mbar.map.m pack .mbar.file -side left pack .mbar.midi -side left pack .mbar.map -side left menubutton .mbar.help -text "Help" -menu .mbar.help.m pack .mbar.help -side right # ----------------------------------------------------------------------------- # file menu # ----------------------------------------------------------------------------- menu .mbar.file.m -tearoff 0 .mbar.file.m add command -label "Load Data" -command {load_data_file "."} \ -underline 0 \ -accelerator "Ctrl-O" .mbar.file.m add command -label "Load Demo" -command {load_data_file $PKGDATADIR} \ -underline 0 .mbar.file.m add command -label "Save Data" -command {save_data_file} \ -underline 0 \ -accelerator "Ctrl-S" .mbar.file.m add command -label "Ports" -command {port_setup} \ -underline 0 .mbar.file.m add command -label "Quit" -command "exit" \ -underline 0 \ -accelerator "Ctrl-Q" bind . { exit;} bind . { load_data_file ".";} bind . { save_data_file;} # ----------------------------------------------------------------------------- # midi & map menus # ----------------------------------------------------------------------------- menu .mbar.midi.m -tearoff 0 menu .mbar.map.m -tearoff 0 .mbar.midi.m add command -label "Save Midi Track" -command {save_midi_file} -underline 0 .mbar.midi.m add command -label "Set MIDI Channel" -command {ac_midi} -underline 0 .mbar.map.m add command -label "Load Standard Sound Map" -command {load_sound_map $PKGDATADIR} -underline 0 .mbar.map.m add command -label "Load Local Sound Map" -command {load_sound_map "."} -underline 0 .mbar.map.m add command -label "Save Sound Map" -command {save_sound_map} -underline 0 .mbar.map.m add command -label "Edit Sound Map" -command {map_edit} -underline 0 .mbar.map.m add command -label "Edit Fader Map" -command {fader_edit} -underline 0 # TODO: next will put names on patterns for automatic score generation... # menu .mbar.pattern -tearoff 0 # .mbar add cascade -menu .mbar.pattern -label "Pattern" -underline 0 # .mbar.pattern add command -label "Edit Comment" -command {edit_pattern_comment} -underline 0 # ----------------------------------------------------------------------------- # help menu # ----------------------------------------------------------------------------- menu .mbar.help.m -tearoff 0 .mbar.help.m add command -label "About" -command {about} -underline 0 .mbar.help.m add command -label "User's Manual" -command {UserManual} -underline 0 . configure -menu .mbar # ========================================================================= # Frame for Grid & Volume controls # ========================================================================= set grid_vols .gv eval frame $grid_vols $debug_relief pack $grid_vols -anchor c # -------------------------------------------------------------------------- # Grid Display # -------------------------------------------------------------------------- set display $grid_vols.d frame $display -relief groove -borderwidth 2p pack $display -side left frame $display.g pack $display.g ;#-side left set gridlabel $display.g.l ; # Instrument label canvas $gridlabel -width 3c -height 9.0c set grid $display.g.c ; # Pattern Grid canvas $grid -width 8.5c -height 9.0c pack $gridlabel $grid -side left # -------------------------------------------------------------------------- # Status area # -------------------------------------------------------------------------- set infosection $display.i ; # to contain Tempo, Track & Mode widgets frame $infosection pack $infosection -side bottom set tempoinfo $infosection.t set tminfo $infosection.tm frame $tminfo canvas $tempoinfo -width 4c -height 2c -relief groove -borderwidth 2 canvas $tminfo.t -width 7.5c -height 0.75c -relief groove -borderwidth 2 canvas $tminfo.m -width 7.5c -height 1.25c -relief groove -borderwidth 2 pack $tminfo.t $tminfo.m pack $tempoinfo $tminfo -side left -expand true -fill y # -------------------------------------------------------------------------- # Volume controls # -------------------------------------------------------------------------- set vcunit $grid_vols.cu eval frame $vcunit $debug_relief pack $vcunit -side left # # Controls + Notes Staff # set ctrls_notes_staff .cns frame $ctrls_notes_staff pack $ctrls_notes_staff -expand true -fill x # ========================================================================== # Controls # ========================================================================== set ctrl_height 4.0; set ctrls $ctrls_notes_staff.c frame $ctrls pack $ctrls -side top -expand true -fill x # --------------------------------------- # Scale lamps + Score + Notes/Instruments # --------------------------------------- set notes_staff $ctrls_notes_staff.ns frame $notes_staff pack $notes_staff -anchor s # --------------------------------------- # Transport control (Start/Cont) # --------------------------------------- set stop_box $ctrls.stop_box eval canvas $stop_box -width 2.3c -height ${ctrl_height}c $debug_relief; pack $stop_box -side left -anchor n ; set button_stop $stop_box.stop label $stop_box.lt -text STOP/CONT -font *-${boldfont13}-* radiobutton $button_stop -bitmap nix -width 1.45c -height 2.6c \ -variable ss -value stop -indicatoron false \ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active) \ -selectcolor $tkxox(but_grey_active) \ -command "ac_stopgo $tkxox(CONT)" $stop_box create window 1.25c 0.4c -window $stop_box.lt $stop_box create window 1.25c 2.2c -window $button_stop bind all { if {$mode(stopgo) == $tkxox(START)} { $button_stop invoke } else { ac_stopgo $tkxox(START) $button_start invoke } } # # Transport control (start) # set start_box $notes_staff.start_box canvas $start_box -width 2.3c -height 4.5c ;#-relief groove -borderwidth 4 pack $start_box -side left -anchor n ;#-expand true -fill y set button_start $start_box.start label $start_box.lb -text START -font *-${boldfont13}-* radiobutton $button_start -bitmap nix -width 1.45c -height 2.6c \ -variable ss -value start -indicatoron false \ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active) \ -selectcolor $tkxox(but_grey_active) $start_box create window 1.25c 0.4c -window $start_box.lb $start_box create window 1.25c 2.1c -window $button_start bind $button_start <1> {ac_stopgo $tkxox(START)} # ================================================================ # button controls # ================================================================ set space_width 2.8; set misc_width 5.0; set st_width 4.0; set trpa_width 3.0; set grp_width 5.0; set accent_width 2.6; # # Empty Space : adjust vectical alignment with score # set empty_case $ctrls.z eval canvas $empty_case -width ${space_width}c -height ${ctrl_height}c \ $debug_relief; pack $empty_case -side left -anchor nw ; # # Clear/Scale/Last Step/Instrument Guide # set misc $ctrls.misc eval canvas $misc -width ${misc_width}c -height ${ctrl_height}c $debug_relief; pack $misc -side left -anchor n # # Shuffle/Flam Tempo/Measure controls # set st $ctrls.st eval canvas $st -width ${st_width}c -height ${ctrl_height}c $debug_relief; pack $st -side left -anchor n # # Track/Pattern Read/Write Control # set trpa $ctrls.trpa eval canvas $trpa -width 3c -height ${ctrl_height}c $debug_relief; pack $trpa -side left -anchor n # # Pattern Group & Track Number selection # set grps $ctrls.grps eval canvas $grps -width 5c -height ${ctrl_height}c $debug_relief; pack $grps -side left -anchor n # # Accent/Enter # set accenter $ctrls.accenter eval canvas $accenter -width 2.6c -height ${ctrl_height}c $debug_relief; pack $accenter -side left -anchor n # # Tempo Dial # set dial $ctrls.dial eval frame $dial $debug_relief pack $dial -side left -expand true; # --------------------------- # Score + Notes/Instruments # --------------------------- set note_score $notes_staff.sc eval frame $note_score $debug_relief; pack $note_score # --------------------------- # Notes/Instruments # --------------------------- set notes $notes_staff.n; eval frame $notes $debug_relief; pack $notes -anchor w -side left tk707-0.8/procs.tcl0000644000175100017510000016454510142137110011017 00000000000000# # This file is part of tk707. # # Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito # # tk707 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. # # Foobar 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 Foobar; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # #===================================================== # File procs.tcl # Procedures for the tcl side of the program #===================================================== proc play_pattern {grp pat} { upvar #0 tkxox xox upvar #0 mode mo upvar #0 pattern_list pl if {$mo(PATTERN_REPEAT)} { #puts "TIMER = [tk7_timer_status]" set steps [tk7_get_last_step $grp $pat] set dur [tk7_pattern_play $grp $pat] cycle_notes 1 [expr 55 * 120 / $mo(tempo)] 0 0 $steps # Fudge factor (extra time to change track display) in track play mode if {$mo(rdrw) == $xox(READ) || $mo(patr) == $xox(TRACK)} { incr dur -160 if {$dur < 0} { set dur 0 } #set mo(REPEAT_INTERVAL) [expr $dur - 160] set mo(REPEAT_INTERVAL) $dur } else { set mo(REPEAT_INTERVAL) $dur } } } proc stop_pattern {} { upvar #0 mode mo upvar #0 tkxox xox #puts "do stop_pattern" tk7_pattern_stop set mo(REPEAT_INTERVAL) 10 } proc ac_clear {tp} { upvar #0 tkxox xox upvar #0 mode mo upvar #0 track_list tl upvar #0 pattern_list pl switch $tp { 0 { # CLEAR the current PATTERN if {$mo(rdrw) != $xox(WRITE) || $mo(patr) != $xox(PATTERN)} { return } set result [tk_dialog .clr CONFIRM "Clear Pattern [expr $mo(current_pattern) + 1] Group [expr $mo(patgroup) + 1]?" "" 0 Cancel "Delete Pattern"] if {$result == 0} { return } set mo(file_status) $xox(FILE_MODIFIED) tk7_clear_pattern $mo(patgroup) $mo(current_pattern) pattern_setid $mo(current_pattern) scale_lamps_update } 1 { # CLEAR the current TRACK if {$mo(rdrw) != $xox(WRITE) || $mo(patr) != $xox(TRACK)} { return } set result [tk_dialog .clr CONFIRM "Clear Track [expr $mo(current_track) + 1]?" "" 0 Cancel "Delete Track"] if {$result == 0} { return } set mo(file_status) $xox(FILE_MODIFIED) set tl($mo(current_track)) {} set mo(measure) -1 } 2 { # CLEAR current track item from current track if {$mo(rdrw) != $xox(WRITE) || $mo(patr) != $xox(TRACK)} { return } # Clearing track item has no meaning if we're already past end set target $mo(measure) if {[lindex $tl($mo(current_track)) $target] == ""} { #puts "Already past end" return } set result [tk_dialog .clr CONFIRM "Clear measure [expr $target + 1] from track [expr $mo(current_track) + 1]?" "" 0 Cancel "Delete"] if {$result == 0} { return } set mo(file_status) $xox(FILE_MODIFIED) set tl($mo(current_track)) [lreplace $tl($mo(current_track)) $target $target] } 3 { # CLEAR the rest of current track including current track item if {$mo(rdrw) != $xox(WRITE) || $mo(patr) != $xox(TRACK)} { return } # Clearing rest has no meaning if we're already past end of track set target $mo(measure) if {[lindex $tl($mo(current_track)) $target] == ""} { # puts "Already past end" return } set result [tk_dialog .clr CONFIRM " Clear rest of track [expr $mo(current_track) + 1]?\n(includes current measure)" "" 0 Cancel "Delete"] if {$result == 0} { return } set mo(file_status) $xox(FILE_MODIFIED) set tl($mo(current_track)) [lreplace $tl($mo(current_track)) $target end] } } } proc ac_scaleback {} { upvar #0 tkxox xox upvar #0 mode mo upvar #0 track_list tl global scale_lamps if {$mo(patr) == $xox(PATTERN)} { set old_scale [tk7_get_scale $mo(patgroup) $mo(current_pattern)] set new_scale [expr $old_scale + 1] if {$new_scale == 4} { set new_scale 0 } set old_button $scale_lamps.l$old_scale set new_button $scale_lamps.l$new_scale tk7_set_scale $mo(patgroup) $mo(current_pattern) $new_scale $old_button configure -background $xox(lamp_off) $new_button configure -background $xox(lamp_on) } else { set target [expr $mo(measure) - 1] set mo(measure) [measure_constrain $target] pattern_show } set mo(file_status) $xox(FILE_MODIFIED) } proc ac_lastfwd {} { upvar #0 tkxox xox upvar #0 mode mo upvar #0 track_list tl if {$mo(patr) == $xox(PATTERN)} { if {$mo(rdrw) == $xox(READ)} { return } select_laststep set mo(file_status) $xox(FILE_MODIFIED) } else { set target [expr $mo(measure) + 1] set mo(measure) [measure_constrain $target] pattern_show } } proc measure_constrain {m} { upvar #0 tkxox xox upvar #0 mode mo upvar #0 track_list tl set tracklength [llength $tl($mo(current_track))] if {$tracklength < 1} { if {$mo(rdrw) == $xox(READ)} { set minpos -1 set maxpos -1 } else { set minpos 0 set maxpos 0 } } else { if {$mo(rdrw) == $xox(READ)} { set maxpos [expr $tracklength - 1] } else { set maxpos $tracklength } set minpos 0 } # Result if {$m <= $minpos} { return $minpos } elseif {$m >= $maxpos} { return $maxpos } else { return $m } } # Decide which pattern from a track to display # proc pattern_show {} { upvar #0 tkxox xox upvar #0 mode mo upvar #0 track_list tl set raw [lindex $tl($mo(current_track)) $mo(measure)] if {$raw != ""} { set group [expr $raw / 16] set pattern [expr $raw % 16] ac_group $group pattern_setid $pattern } } # For track mode, ordinary click (on LAST MEAS button) shows last measure # of current track. Releasing button returns to orginal measure. # Shift click goes to last measure and stays there. # proc ac_lastmeas {m} { upvar #0 tkxox xox upvar #0 mode mo upvar #0 track_list tl if {$mo(patr) == $xox(PATTERN)} { #puts "Instrument Guide" } else { switch $m { 0 { #puts "Show Last Measure" set mo(oldmeasure) $mo(measure) set target [llength $tl($mo(current_track))] set mo(measure) [measure_constrain $target] pattern_show } 1 { #puts "Restore measure $mo(oldmeasure)" set mo(measure) [measure_constrain $mo(oldmeasure)] pattern_show } 2 { #puts "Go to Last Measure" set target [llength $tl($mo(current_track))] set mo(measure) [measure_constrain $target] pattern_show } 3 { return } } } } proc select_laststep {} { upvar #0 mode mo if {[winfo exists .ls]} { wm deiconify .ls } else { toplevel .ls wm title .ls "Set last pattern step" scale .ls.s -from 1 -to 16 -command laststep_set -orient horizontal \ -length 5c -relief groove -borderwidth 2 button .ls.ok -text OK -font *-${font12}-* -command {wm iconify .ls} -relief groove -borderwidth 2 pack .ls.s -side top -ipady 6 pack .ls.ok -side top -expand true -fill x } .ls.s set [tk7_get_last_step $mo(patgroup) $mo(current_pattern)] } proc laststep_set val { upvar #0 mode mo if {$val < 1 || $val > 16} { return } tk7_set_last_step $mo(patgroup) $mo(current_pattern) $val } proc flam_set val { upvar #0 mode mo if {$val < 0 || $val > 4} { return } tk7_set_flam $mo(patgroup) $mo(current_pattern) $val } proc select_flam {} { upvar #0 mode mo set curr [tk7_get_flam $mo(patgroup) $mo(current_pattern)] if {[winfo exists .flam]} { wm deiconify .flam } else { toplevel .flam wm title .flam "Set pattern flam interval" scale .flam.s -from 0 -to 4 -command flam_set -orient horizontal \ -length 5c -relief groove -borderwidth 2 button .flam.ok -text OK -font *-${font12}-* -command {wm iconify .flam} -relief groove -borderwidth 2 pack .flam.s -side top -ipady 6 pack .flam.ok -side top -expand true -fill x } .flam.s set [tk7_get_flam $mo(patgroup) $mo(current_pattern)] set curr [tk7_get_flam $mo(patgroup) $mo(current_pattern)] } proc ac_flam {} { upvar #0 mode mo upvar #0 tkxox xox if {$mo(patr) != $xox(PATTERN) || $mo(rdrw) != $xox(WRITE)} { return } select_flam } proc ac_midi {} { global font12 upvar #0 mode mo if {[winfo exists .ms]} { wm deiconify .ms } else { toplevel .ms wm title .ms "MIDI Channel" scale .ms.s -from 1 -to 16 -command midichan_set -orient horizontal \ -length 5c -relief groove -borderwidth 2 -font *-${font12}-* button .ms.ok -text OK -font *-${font12}-* -command {wm iconify .ms} \ -relief groove -borderwidth 2 pack .ms.s -side top -ipady 6 pack .ms.ok -side top -expand true -fill x .ms.s set [expr $mo(midi_channel) + 1] } } proc midichan_set val { upvar #0 mode mo global midi_channel if {$val < 1 || $val >16} { return } set mo(midi_channel) [expr $val - 1] # This is needed for C code to trace midi channel, # (I don't know how to make it trace an array variable). set midi_channel $mo(midi_channel) } proc ac_note {widget prop} { global tapwrite global notes upvar #0 tkxox xox upvar #0 mode mo # Extract button number from widget path # Dependent on prefix path name: $notes.note.b0, $notes.note.b1, .. # ^ +5 ^ set prefix_length [expr [string length $notes] + 5] set b [string range [string trimright $widget .b] $prefix_length end] if {$mo(patr) == $xox(TRACK)} { # TRACK mode if {$mo(rdrw) == $xox(READ)} { tk7_start_note_play $b $prop } else { # Just changeing pattern numbers pattern_setid $b } return } # PATTERN mode if {$mo(rdrw) == $xox(READ)} { # PATTERN READ mode pattern_setid $b if {$mo(stopgo) == $xox(START)} { # If running, wait till current pattern finished before changeing ? } return } # PATTERN TAP or WRITE mode if {$mo(stopgo) != $xox(START)} { # Just changeing pattern numbers pattern_setid $b return } # PATTERN TAP or WRITE mode with START if {![have_zero_velocity $prop]} { switch $mo(current_accent) { 2 {set prop [add_strong_accent $prop] } 1 {set prop [add_weak_accent $prop] } default {set prop [add_default_velocity $prop] } } } if {$tapwrite} { set step [expr [tk7_get_pat_tick] % 16] if {$step < 0} { set step 0 } ac_newinstr $notes.note$b.b step_insert $step $prop tk7_start_note_play $b $prop } else { # Recording steps step_insert $b $prop } } proc ac_note_off {widget} { global notes global tapwrite upvar #0 tkxox xox upvar #0 mode mo # Extract button number from widget path # Dependent on prefix path name: $notes.note.b0, $notes.note.b1, .. # ^ +5 ^ set prefix_length [expr [string length $notes] + 5] set b [string range [string trimright $widget .b] $prefix_length end] if {$mo(patr) == $xox(TRACK) && $mo(rdrw) == $xox(READ)} { tk7_stop_note_play $b return } if {$mo(rdrw) == $xox(READ) || $mo(stopgo) != $xox(START)} { return } if {$tapwrite} { tk7_stop_note_play $b return } } # # Accept 0->15 to set new current pattern id. # Also need to light buttons lamp. # proc pattern_setid {id} { global grid global notes upvar #0 pattern_list pl upvar #0 mode mo lamp_onoff 0 $notes.note$mo(current_pattern).l set mo(current_pattern) $id lamp_onoff 1 $notes.note$id.l # Clear the grid display & redraw for new pattern $grid delete stepnode set pg $mo(patgroup) set cp $mo(current_pattern) for {set k 0} {$k < 16} {incr k} { set instruments [tk7_pattern_items $pg $cp $k] set properties [tk7_get_pattern_properties $pg $cp $k] set idx 0 foreach instr $instruments { set prop [lindex $properties $idx] step_draw [expr $k + 1] $instr $prop set idx [expr $idx + 1] } } scale_lamps_update refresh_comment } # Turn a "lamp" on or off (1 or 0 for parameter onoff). # Parameter lamp is a full widget path. # proc lamp_onoff {onoff lamp} { upvar #0 tkxox xox switch $onoff { 0 { $lamp configure -bg $xox(col_def_bg) } 1 { $lamp configure -bg $xox(col_on) } } } # Respond to change of Track/Pattern controls # proc ac_patternmode {rw} { global trpa notes tempoinfo upvar #0 mode mo upvar #0 tkxox xox # Check if running (can't change mode) if {$mo(stopgo) == $xox(START)} { return } if {$mo(patr) != $xox(PATTERN)} { set mo(patr) $xox(PATTERN) $tempoinfo itemconfigure tmtitle -text TEMPO $tempoinfo coords tmtitle 1c 0.5c trace vdelete mo(current_track) w trackinfo_update trace vdelete mo(measure) w measureinfo_update $tempoinfo itemconfigure tempo -text $mo(tempo) trace variable mo(tempo) w tempoinfo_update } if {$rw == $xox(WRITE)} { set mo(rdrw) $xox(WRITE) $trpa.lt configure -text PLAY $trpa.lb configure -text "-> WRITE <-" modeinfo_update 3 } else { set mo(rdrw) [expr $xox(WRITE) - 1] $trpa.lt configure -text "-> PLAY <-" $trpa.lb configure -text "WRITE" modeinfo_update 2 } # Show current instrument ac_newinstr $notes.note[expr $mo(current_instr) - 1].b } proc ac_trackmode {rw} { global trpa notes tempoinfo upvar #0 mode mo upvar #0 tkxox xox upvar #0 track_list tl # Check if running (can't change mode) if {$mo(stopgo) == $xox(START)} { return } if {$mo(patr) != $xox(TRACK)} { set mo(patr) $xox(TRACK) $tempoinfo itemconfigure tmtitle -text MEASURE $tempoinfo coords tmtitle 2.7c 0.5c # Go to 1st pattern of new track # Trace current measure in track trace vdelete mo(tempo) w tempoinfo_update trace variable mo(measure) w measureinfo_update trace variable mo(current_track) w trackinfo_update } if {$rw == $xox(WRITE)} { set mo(rdrw) $xox(WRITE) $trpa.lt configure -text PLAY $trpa.lb configure -text "-> WRITE <-" modeinfo_update 1 } else { set mo(rdrw) $xox(READ) $trpa.lt configure -text "-> PLAY <-" $trpa.lb configure -text WRITE modeinfo_update 0 } set mo(measure) [measure_constrain -1] pattern_show # Hide current instrument ac_newinstr $notes.note[expr $mo(current_instr) - 1].b } # Toggle display to show tempo or measure # proc ac_tempomeasure {} { global tempoinfo upvar #0 mode mo upvar #0 tkxox xox if {$mo(patr) == $xox(PATTERN)} { return } if {$mo(showtrack)} { set mo(showtrack) false $tempoinfo itemconfigure tmtitle -text TEMPO $tempoinfo coords tmtitle 1c 0.5c # trace vdelete mo(measure) w trackinfo_update trace vdelete mo(measure) w measureinfo_update $tempoinfo itemconfigure tempo -text $mo(tempo) trace variable mo(tempo) w tempoinfo_update set mo(tempo) $mo(tempo) } else { set mo(showtrack) true $tempoinfo itemconfigure tmtitle -text MEASURE $tempoinfo coords tmtitle 2.7c 0.5c # Trace current measure in track trace vdelete mo(tempo) w tempoinfo_update trace variable mo(measure) w measureinfo_update trace variable mo(current_track) w trackinfo_update set mo(measure) $mo(measure) set mo(current_track) $mo(current_track) } } proc ac_stopgo {new} { upvar #0 tkxox xox upvar #0 mode mo upvar #0 track_list tl switch $new { 0 { set mo(stopgo) $xox(STOP) set mo(PATTERN_REPEAT) false stop_pattern set stepcount [tk7_get_last_step $grp $pat] cycle_notes 1 0 0 0 $stepcount } 1 { if {$new == $mo(stopgo)} { return } if {$mo(patr) == $xox(TRACK)} { set mo(TRACK_START) true } set mo(stopgo) $xox(START) # This starts the player! set mo(PATTERN_REPEAT) true } 2 { if {$mo(patr) == $xox(PATTERN)} { set mo(PATTERN_REPEAT) false stop_pattern set mo(stopgo) $xox(STOP) } else { if {$mo(stopgo) == $xox(CONT)} { set mo(stopgo) $xox(START) } else { set mo(stopgo) $xox(CONT) set mo(PATTERN_REPEAT) false stop_pattern } } } } } # For patterns, # i = 0->3 Groups # j = 0->15 Patterns # k = 0->15 Step divisions, each is a list of note events # # For tracks, # i = 0->3 Tracks, each is a list patterns (16*Group + Pattern) # proc mem_init {} { upvar #0 pattern_list pl upvar #0 track_list tl # Patterns # for {set i 0} {$i <4} {incr i} { # for {set j 0} {$j <16 } {incr j} { # for {set k 0} {$k < 16} {incr k} { # set pl($i,$j,$k) {} # } # } # } # Tracks for {set i 0} {$i <4} {incr i} { set tl($i) {} } } proc ac_group {b} { global grps upvar #0 mode mo upvar #0 tkxox xox global comment if {$mo(rdrw) == $xox(WRITE) && $mo(stopgo) == $xox(START)} { return } else { set but_old ${grps}.lt$mo(patgroup).lamp set but_new ${grps}.lt${b}.lamp $but_old configure -background $xox(lamp_off) $but_new configure -background $xox(lamp_on) set mo(patgroup) $b if {$mo(patr) == $xox(TRACK)} { return } pattern_setid $mo(current_pattern) } } proc ac_track {b} { global tminfo upvar #0 mode mo upvar #0 tkxox xox if {$mo(patr) != $xox(TRACK) || $mo(stopgo) == $xox(START)} { return } set mo(current_track) $b set mo(measure) [measure_constrain -1] pattern_show } proc ac_newinstr {widget} { global gridlabel global notes global font12 global boldfont13 upvar #0 tkxox xox upvar #0 mode mo # Check first that we're in PATTERN:WRITE mode if {$mo(patr) == $xox(TRACK) || $mo(rdrw) == $xox(READ)} { set w $notes.note[expr $mo(current_instr) - 1].instr if {[winfo exists $w]} { lamp_onoff 0 $w } return } # Extract button number from widget path # Dependent on prefix path name: $notes.note.b0, $notes.note.b1, .. # ^ +5 ^ set prefix_length [expr [string length $notes] + 5] set b [string range [string trimright $widget .b] $prefix_length end] lamp_onoff 0 $notes.note[expr $mo(current_instr) - 1].instr set mo(current_instr) [expr $b + 1] lamp_onoff 1 $notes.note$b.instr $gridlabel itemconfigure selectinstr -font *-${font12}-* $gridlabel dtag selectinstr $gridlabel itemconfigure ilabel[expr 15 - $b] -font *-${boldfont13}-* $gridlabel addtag selectinstr withtag ilabel[expr 15 - $b] } # Change memory cartridge being used # proc ac_cartridge {} { global accenter upvar #0 mode mo upvar #0 tkxox xox if {$mo(patr) != $xox(TRACK)} { return } set mo(cartridge) [tk7_cartridge_incr] #puts "Cartridge $mo(cartridge)" switch $mo(cartridge) { 2 { $accenter.cart.lamp configure -bg #00ff00 } 1 { $accenter.cart.lamp configure -bg $xox(lamp_on) } 0 - default { $accenter.cart.lamp configure -bg $xox(lamp_off) } } } # Process Enter button # proc ac_accenter {addmode} { global accent_label upvar #0 mode mo upvar #0 tkxox xox upvar #0 track_list tl if {$mo(patr) == $xox(PATTERN) && $mo(rdrw) == $xox(WRITE)} { set mo(current_accent) [expr ($mo(current_accent)+1) % 3] switch $mo(current_accent) { 2 {set color $xox(col_strong_accent) } 1 {set color $xox(col_weak_accent) } default {set color $xox(col_def_bg) } } $accent_label configure -bg $color return } if {$mo(patr) != $xox(TRACK) || $mo(rdrw) != $xox(WRITE)} { return } # Track Write switch $addmode { 0 { # Add/replace current pattern in current track #puts "ADD pattern" set target $mo(measure) #puts "Target measure is $target" set pat [expr [expr 16 * $mo(patgroup)] + $mo(current_pattern)] if {[lindex $tl($mo(current_track)) $target] == ""} { #puts "Adding $pat to Track $mo(current_track)" lappend tl($mo(current_track)) $pat } else { set tl($mo(current_track)) [lreplace $tl($mo(current_track)) $target $target $pat] #puts "Inserting $pat to Track $mo(current_track)" } } 1 { # Insert pattern before current position in track #puts "INSERT pattern" set target $mo(measure) #puts "Target measure is $target" set pat [expr [expr 16 * $mo(patgroup)] + $mo(current_pattern)] if {[lindex $tl($mo(current_track)) $target] == ""} { #puts "Adding $pat to Track $mo(current_track)" lappend tl($mo(current_track)) $pat } else { set tl($mo(current_track)) [linsert $tl($mo(current_track)) $target $pat] #puts "Inserting $pat to Track $mo(current_track)" } } } # Go to next step ac_lastfwd } proc have_fla {prop} { upvar #0 tkxox xox return [expr $prop & $xox(flam)]; } proc have_weak_accent {prop} { upvar #0 tkxox xox return [expr $prop & $xox(weak_accent)]; } proc have_strong_accent {prop} { upvar #0 tkxox xox return [expr $prop & $xox(strong_accent)]; } proc have_zero_velocity {prop} { upvar #0 tkxox xox return [expr $prop & $xox(zero_velocity)]; } proc set_velocity_flag {prop flag} { upvar #0 tkxox xox return [expr $prop & (~$xox(velocity_field)) | ($flag & $xox(velocity_field))] } proc add_weak_accent {prop} { upvar #0 tkxox xox return [set_velocity_flag $prop $xox(weak_accent)] } proc add_strong_accent {prop} { upvar #0 tkxox xox return [set_velocity_flag $prop $xox(strong_accent)] } proc add_zero_velocity {prop} { upvar #0 tkxox xox return [set_velocity_flag $prop $xox(zero_velocity)] } proc add_default_velocity {prop} { upvar #0 tkxox xox return [expr $prop & (~$xox(velocity_field))] } # # Draw a step node in the grid canvas. # Parameters step & inst are expected in 1->16 format (not 0->15). # proc step_draw {step inst prop} { global grid upvar #0 tkxox xox set x [expr $step / 2.0] set y [expr 9.0 - [expr $inst / 2.0]] if {[have_strong_accent $prop]} { set color $xox(col_strong_accent) } elseif {[have_weak_accent $prop]} { set color $xox(col_weak_accent) } elseif {[have_zero_velocity $prop]} { set color $xox(col_zero_velocity) } else { set color $xox(col_default_velocity) } if {[have_fla $prop]} { # draw a star set new [$grid create polygon \ [expr $x - (0)]c [expr $y - (0.1875)]c \ [expr $x - (-0.0681818)]c [expr $y - (0.0681818)]c \ [expr $x - (-0.1875)]c [expr $y - (0.0681818)]c \ [expr $x - (-0.102273)]c [expr $y - (-0.0426136)]c \ [expr $x - (-0.127841)]c [expr $y - (-0.1875)]c \ [expr $x - (-0.00852273)]c [expr $y - (-0.127841)]c \ [expr $x - (0.119318)]c [expr $y - (-0.1875)]c \ [expr $x - (0.102273)]c [expr $y - (-0.0511364)]c \ [expr $x - (0.1875)]c [expr $y - (0.0681818)]c \ [expr $x - (0.0681818)]c [expr $y - (0.0681818)]c \ [expr $x - (0)]c [expr $y - (0.1875)]c \ -outline $color \ -fill $color \ -tags stepnode] } else { # draw a circle set new [$grid create oval \ [expr $x - 0.1875]c [expr $y - 0.1875]c \ [expr $x + 0.1875]c [expr $y + 0.1875]c \ -outline black \ -fill $color \ -tags stepnode] } $grid addtag ${step}_instr$inst withtag $new } # # Insert given step into current pattern with specified properties # proc step_insert {step prop} { global grid global tapwrite upvar #0 mode mo upvar #0 tkxox xox upvar #0 pattern_list pl #puts "Inserting $mo(current_instr) at step $step into bank $mo(patgroup), pattern $mo(current_pattern)" # First check for duplicates (=> remove) set pg $mo(patgroup) set cp $mo(current_pattern) set note $mo(current_instr) if {[tk7_add_note $pg $cp $step $note]} { tk7_set_properties $pg $cp $step $note $prop step_draw [expr $step + 1] $mo(current_instr) $prop #puts "added note" } else { $grid delete [expr $step + 1]_instr$mo(current_instr) #puts "deleted note" } } # # ClearGrid Display Area # proc grid_clear {} { global grid # Vertical lines set xcoord 0.0 for {set i 0} {$i < 16} {incr i} { set xcoord [expr $xcoord + 0.5] $grid create line ${xcoord}c 0.5c ${xcoord}c 9.0c -fill #aaaaaa } # Horizontal lines set ycoord 0.5 for {set i 0} {$i < 16} {incr i} { set ycoord [expr $ycoord + 0.5] $grid create line 0.0c ${ycoord}c 8.5c ${ycoord}c -fill #aaaaaa } } # ----------------------------------------------------------------------------- # Load sound map # ----------------------------------------------------------------------------- set last_map_file_name ""; proc load_sound_map {initialdir} { # From TK-707 version 0.6, the format of .map files is changed # (they now include also abbreviation information, for volume labels). # New format is recognized by number of saved data segments (4 rather than 3). upvar #0 sound snd upvar #0 last_map_file_name last_map_file_name set ftypes { {{TK707 Sound Map} {.map}} {{All types} {.*}} } set fname [tk_getOpenFile -filetypes $ftypes -initialdir $initialdir ] if {$fname == ""} { return } set last_map_file_name [lindex [split $fname /] end]; set f [open $fname r] set data "" set i 1 while {[gets $f line] >= 0} { if {[string index $line 0] == "#"} { continue } set data [lindex $line 0] set datasegs [llength $data] set snd($i,name) [lindex $data 0] set snd($i,shortname) [lindex $data 1] if {$datasegs == 4} { set snd($i,abbrev) [lindex $data 2] set snd($i,note) [lindex $data 3] } else { # we could set a better algo to abbrev set snd($i,abbrev) $snd($i,shortname) set snd($i,note) [lindex $data 2] } incr i } close $f # Reset Name Displays instrument_label_reset tk7_set_sounds } # ----------------------------------------------------------------------------- # Save sound map # ----------------------------------------------------------------------------- proc save_sound_map {} { upvar #0 tkxox xox upvar #0 sound snd upvar #0 last_map_file_name last_map_file_name set ftypes { {{TK707 Sound Map} {.map}} {{All types} {.*}} } #puts "last_map_file_name before: $last_map_file_name" set fname [tk_getSaveFile -filetypes $ftypes -initialfile $last_map_file_name] if {$fname == ""} { return } set last_map_file_name [lindex [split $fname /] end]; set f [open $fname w] puts $f "################# TK707 Sound Map generated by $xox(VERSION) #################" puts $f "# Format is 16 entries of { {Long name} {Short name} {Abbrev} {Midi key value} }" puts $f "############################################################################" for {set i 1} {$i < 17} {incr i} { puts $f "{ {$snd($i,name)} {$snd($i,shortname)} {$snd($i,abbrev)} {$snd($i,note)} }" } close $f } # ----------------------------------------------------------------------------- # Load data file # ----------------------------------------------------------------------------- set last_data_file_name ""; proc load_data_file {initialdir} { # From TK-707 version 0.7, the format of .dat files is changed # (they now include also note properties information). # New format is recognized by number of saved data segments (5 rather than 2, 3 or 4). # They are: # segment 0: pattern note data # segment 1: pattern note properties # segment 2: pattern {length,scale,flam,shuffle} properties # segment 3: track data # From TK-707 version 0.6, the format of .dat files is changed # (they now include also pattern scale information). # New format is recognized by number of saved data segments (4 rather than 2 or 3). # They are: # segment 0: pattern note data # segment 1: pattern length data # segment 2: pattern scale data # segment 3: track data # From TK-707 version 0.5, the format of .dat files is changed # (they now include pattern length information). # New format is recognized by number of saved data segments (3 rather than 2). # They are: # segment 0: pattern note data # segment 1: pattern length data # segment 2: track data upvar #0 track_list tl upvar #0 mode mo upvar #0 last_data_file_name last_data_file_name set ftypes { {{TK-707 Data} {.dat}} {{All types} {.*}} } set fname [tk_getOpenFile -filetypes $ftypes -initialdir $initialdir] if {$fname == ""} { return } set last_data_file_name [lindex [split $fname /] end]; #puts "LOAD last_data_file_name $last_data_file_name" set f [open $fname r] set data "" while {[gets $f line] >= 0} { if {[string index $line 0] == "#"} { continue } set data "$data [string trim $line]" } close $f # ---------------------------------- # find format version from structure # ---------------------------------- set datasegs [llength [lindex $data 0]] set data_version "unknown"; if {$datasegs == 2} { set data_version 2; } elseif {$datasegs == 3} { set data_version 5; } elseif {$datasegs == 4} { set segment2 [lindex [lindex $data 0] 2] set n_seg2_level2 [llength [lindex [lindex $segment2 0] 0]] if {$n_seg2_level2 == 1} { set data_version 6; } elseif {$n_seg2_level2 >= 4} { set data_version 7; } } #puts "data_version $data_version" if {$data_version == "unknown"} { puts "ERROR: ${fname}: unexpected data format"; return; } # ---------------------------------- # load segments # ---------------------------------- set loadsegment 0 tk7_clear_tree set pdata [lindex [lindex $data 0] $loadsegment] ; #Pattern data set i 0 foreach bankdata $pdata { set j 0 foreach patterndata $bankdata { set k 0 foreach stepdata $patterndata { if {[llength $stepdata] > 0} { foreach n $stepdata { tk7_add_note $i $j $k $n } } incr k } incr j } incr i } incr loadsegment if {$data_version >= 7} { # format version 0.7 includes note properties: flam, accents, etc... set p_prop [lindex [lindex $data 0] $loadsegment] ; #Pattern note properties set p_data [lindex [lindex $data 0] 0] set i 0 foreach bank_prop $p_prop { set bank_data [lindex $p_data $i] set j 0 foreach pattern_prop $bank_prop { set pattern_data [lindex $bank_data $j] set k 0 foreach step_prop $pattern_prop { set step_data [lindex $pattern_data $k] if {[llength $step_prop] > 0} { set idx_n 0 foreach p $step_prop { set n [lindex $step_data $idx_n] tk7_set_properties $i $j $k $n $p incr idx_n } } incr k } incr j } incr i } incr loadsegment } pattern_setid $mo(current_pattern) if {$data_version >= 5} { # format version 0.5 and 0.6 includes length info. # format version 0.7 includes {length,scale,flam,shuffle} infos. set pdata [lindex [lindex $data 0] $loadsegment] ; #Step length data set grp 0 foreach grpdata $pdata { set pat 0 foreach pldata $grpdata { if {$data_version >= 7} { # from TK-707 version 0.7: {length,scale,flam,shuffle} infos. tk7_set_last_step $grp $pat [lindex $pldata 0] tk7_set_scale $grp $pat [lindex $pldata 1] tk7_set_flam $grp $pat [lindex $pldata 2] tk7_set_shuffle $grp $pat [lindex $pldata 3] if {[llength $pldata] >= 5} { tk7_set_pattern_comment $grp $pat [lindex $pldata 4] } } else { # TK-707 version 0.5 and 0.6: step length info. tk7_set_last_step $grp $pat $pldata } incr pat } incr grp } incr loadsegment } if {$data_version == 6} { # format version 0.6 includes step scale info. set pdata [lindex [lindex $data 0] $loadsegment] ; #Step scale data set grp 0 foreach grpdata $pdata { set pat 0 foreach pldata $grpdata { set scaleresult [tk7_set_scale $grp $pat $pldata] incr pat } incr grp } incr loadsegment } set pdata [lindex [lindex $data 0] $loadsegment] ; #Track data set i 0 foreach trackdata $pdata { #puts $trackdata set tl($i) [join $trackdata] incr i } ac_track 0 pattern_show } # ----------------------------------------------------------------------------- # Save data file # ----------------------------------------------------------------------------- proc reverse {l1} { set n [llength $l1] set l2 {} for {set i [expr $n - 1]} {$i >= 0} {set i [expr $i - 1]} { lappend l2 [lindex $l1 $i] } return $l2 } proc save_data_file {} { upvar #0 pattern_list pl upvar #0 track_list tl upvar #0 tkxox xox upvar #0 mode mo upvar #0 last_data_file_name last_data_file_name set ftypes { {{TK-707 Data} {.dat}} {{All types} {.*}} } #puts "PREV last_data_file_name $last_data_file_name" set fname [tk_getSaveFile -filetypes $ftypes -initialfile $last_data_file_name] if {$fname == ""} { return } set last_data_file_name [lindex [split $fname /] end]; #puts "NEW last_data_file_name $last_data_file_name" set f [open $fname w] puts $f "####################### MACHINE GENERATED - DO NOT EDIT #######################" puts $f "#### TK707 Data file generated by $xox(VERSION)" puts $f "###############################################################################" puts $f "{" ; # Begin DATA # PATTERN NOTES. Four groups of 16 patterns each with 16 steps. puts $f " {" ; # Begin PATTERNS for {set i 0} {$i<4} {incr i} { puts $f " {" ; # Begin GROUP i for {set j 0} {$j<16} {incr j} { puts $f " {" ; # Begin PATTERN j for {set k 0} {$k<16} {incr k} { set instruments [tk7_pattern_items $i $j $k] set instruments [reverse $instruments] puts $f " { $instruments }" } puts $f " }" ; # End PATTERN j } puts $f " }" ; # End GROUP i } puts $f " }" ; # End PATTERNS # PATTERN NOTES PROPERTIES. Four groups of 16 patterns each with 16 steps. puts $f " {" ; # Begin PATTERNS for {set i 0} {$i<4} {incr i} { puts $f " {" ; # Begin GROUP i for {set j 0} {$j<16} {incr j} { puts $f " {" ; # Begin PATTERN j for {set k 0} {$k<16} {incr k} { set properties [tk7_get_pattern_properties $i $j $k] set properties [reverse $properties] puts $f " { $properties }" } puts $f " }" ; # End PATTERN j } puts $f " }" ; # End GROUP i } puts $f " }" ; # End PATTERNS # PATTERN PROPERTIES. Four lots of sixteen 4-lists. New from TK-707 version 0.7 puts $f " {" ; # Begin PATTERN PROPERTIES for {set i 0} {$i<4} {incr i} { set pat_props [tk7_group_pattern_properties $i] ; # Group step lengths puts $f " { $pat_props }" ; # Group step lengths } puts $f " }" ; # End PATTERN PROPERTIES # TRACK DATA. Four tracks of arbitrary length. puts $f " {" ; # Begin TRACKS for {set i 0} {$i<4} {incr i} { puts $f " { $tl($i) }" ; # TRACK i data } puts $f " }" ; # End TRACKS puts $f "}" ; # End DATA close $f } # -------------------- # compute the velocity # -------------------- # velocity range is 0..127 as integer # volume range is 0..1 as float proc compute_velocity {prop volume_master volume_accent volume_instr} { if {[have_zero_velocity $prop]} { set velocity_factor 0 } else { set velocity_factor 1 } if {[have_strong_accent $prop]} { set accent_factor 1 } elseif {[have_weak_accent $prop]} { set accent_factor 2/3.0 } else { set accent_factor 1/3.0 } set volume_note [expr $volume_master \ *$velocity_factor*$volume_instr \ *$accent_factor*$volume_accent] set velocity [expr int(127 * $volume_note + 0.5)] return $velocity } # ----------------------------------------------------------------------------- # Save midi file - current track # ----------------------------------------------------------------------------- set last_midi_file_name ""; set prev_data_file_name ""; proc put_note {f tick_shift midinote velocity} { if {$tick_shift > 127} { varlen_short shortres $tick_shift puts -nonewline $f [binary format c2 [list $shortres(high) $shortres(low)]] set size 2 } else { puts -nonewline $f [binary format c1 $tick_shift] set size 1 } puts -nonewline $f [binary format c2 [list $midinote $velocity]] return [expr $size + 2] } proc put_note_off {f tick_shift midinote} { return [put_note $f $tick_shift $midinote 0] } proc save_midi_file {} { global cunit global masterv upvar #0 mode mo upvar #0 tkxox xox upvar #0 sound snd upvar #0 track_list tl upvar #0 has_delay has_delay upvar #0 last_midi_file_name last_midi_file_name upvar #0 last_data_file_name last_data_file_name upvar #0 prev_data_file_name prev_data_file_name upvar #0 instrument_to_volume instrument_to_volume if { ($last_data_file_name != "") && (($prev_data_file_name == "") || ($prev_data_file_name != $last_data_file_name)) } { # build a predefined name: set x [lindex [split $last_data_file_name .] 0]; set t $mo(current_track) set last_midi_file_name "${x}-track${t}.mid" } set ftypes { {{Midi File Format} {.mid}} {{All types} {.*}} } set fname [tk_getSaveFile -filetypes $ftypes -initialfile $last_midi_file_name] if {$fname == ""} { return } set last_midi_file_name [lindex [split $fname /] end]; set prev_data_file_name $last_data_file_name set thirty_second_note_on_ratio 5; # customize the ratio ! # ex1: ratio=3 # => 1/3 note-on # 2/3 note-off, for a thirty-second # ex2: ratio=16 # => 1/16 note-on, 15/16 note-off # ex3: ratio=1 # => 100 % note-on; not for percussions... set tick_per_note_on 3; # how long, in ticks, the note is on # DO NOT change ! because we may divide # it per 3 quarters and eigth later... set tick_per_thirty_second [expr $thirty_second_note_on_ratio*$tick_per_note_on]; set tick_per_quarter [expr 8*$tick_per_thirty_second]; # steps are in two parts: # a note-on part, which have a duration independant of the scale (a hit) # a note-off part, which depend on the scale: # scale(0): 1 step = quarter/4 set tick_per_step_off_scale(0) [expr $tick_per_quarter/4 - $tick_per_note_on]; # scale(1): 1 step = quarter/8 set tick_per_step_off_scale(1) [expr $tick_per_quarter/8 - $tick_per_note_on]; # scale(2): 1 step = quarter/3 set tick_per_step_off_scale(2) [expr $tick_per_quarter/3 - $tick_per_note_on]; # scale(3): 1 step = quarter/6 set tick_per_step_off_scale(3) [expr $tick_per_quarter/6 - $tick_per_note_on]; # ex1: ratio=3 # => tick_per_step_off_scale = {15 6 21 9} # ex1: ratio=16 # => tick_per_step_off_scale = {93 45 125 61} # the grid is finer and the result is better # ex3: ratio=1 # => tick_per_step_off_scale = {3, 0, 5, 1}, as expected. # as expected, the thirty-second has no note-off part... # # get volumes: # set volume_master [expr [$masterv.sf.s get] / 100.0] #puts "volume_master $volume_master" set volume_accent [expr [$cunit.0.sf.s get] / 100.0] #puts "volume_accent $volume_accent" set volume_set {} for {set instrument 1} {$instrument <= 16} {incr instrument} { set i_vol $instrument_to_volume($instrument) set volume($instrument) [expr [$cunit.${i_vol}.sf.s get] / 100.0] #puts "volume($instrument) $volume($instrument)" } for {set instrument 1} {$instrument <= 16} {incr instrument} { set in_note($instrument) 0; } set f [open $fname w] puts -nonewline $f MThd puts -nonewline $f [binary format I 6] puts -nonewline $f [binary format S 0] puts -nonewline $f [binary format S 1] puts -nonewline $f [binary format S $tick_per_quarter] puts -nonewline $f MTrk set loc_tracksize 18 puts -nonewline $f [binary format I 0] ; # Dummy tracksize # Meta Event to set track tempo set micro_tempo [expr 60000000 / $mo(tempo)] puts -nonewline $f [binary format c7 [list 0 255 81 3 [expr $micro_tempo >> 16] [expr $micro_tempo >> 8] $micro_tempo]] set tracksize 7 # Establish running status with a zero volume note puts -nonewline $f [binary format c4 [list 0 [expr 144 + $mo(midi_channel)] 17 0]] incr tracksize 4 set track $tl($mo(current_track)) set tick_shift 0 foreach patid $track { set group [expr $patid / 16] set pattern [expr $patid % 16] set last_step [tk7_get_last_step $group $pattern] set scale [tk7_get_scale $group $pattern] set step 0 while {$step < $last_step} { set instrument_set [tk7_pattern_items $group $pattern $step] set property_set [tk7_get_pattern_properties $group $pattern $step] set idx 0 foreach instrument $instrument_set { if {$instrument == ""} { #puts "EMPTY instrument ?? idx = $idx" incr idx continue; } # ------------ # start a note # ------------ set midinote $snd($instrument,note) set prop [lindex $property_set $idx] set velocity [compute_velocity $prop $volume_master $volume_accent $volume($instrument)] incr tracksize [put_note $f $tick_shift $midinote $velocity] set tick_shift 0 if {! $has_delay($instrument) && ! [have_zero_velocity $prop]} { # start a note without delay set in_note($instrument) 1 } incr idx } set flam_interval [tk7_get_flam $group $pattern] set tick_per_flam [expr $xox(tick_flam_duration) * $flam_interval] incr tick_shift $tick_per_flam if {$flam_interval != 0} { set idx 0 foreach instrument $instrument_set { if {$instrument == ""} { continue; } set prop [lindex $property_set $idx] if {! [have_fla $prop]} { continue; } # ---------------------- # write a fla note # ---------------------- set midinote $snd($instrument,note) set prop [lindex $property_set $idx] set velocity [compute_velocity $prop $volume_master $volume_accent $volume($instrument)] incr tracksize [put_note $f $tick_shift $midinote $velocity] set tick_shift 0 incr idx } } incr tick_shift [expr $tick_per_note_on - $tick_per_flam] foreach instrument $instrument_set { if {$instrument == ""} { continue; } if {! $has_delay($instrument)} { continue; } # ---------------------- # stop a note with delay # ---------------------- set midinote $snd($instrument,note) incr tracksize [put_note_off $f $tick_shift $midinote] set tick_shift 0 } incr tick_shift $tick_per_step_off_scale($scale) incr step } } # stop current long notes on (whistle, etc...) for {set instrument 1} {$instrument <= 16} {incr instrument} { if {$in_note($instrument)} { #puts "stop instrument $instrument"; set midinote $snd($instrument,note) incr tracksize [put_note_off $f $tick_shift $midinote] set tick_shift 0 } } # End of track puts -nonewline $f [binary format c 0] puts -nonewline $f [binary format c3 {255 47 0}] incr tracksize 4 # Go back and insert tracksize flush $f seek $f $loc_tracksize puts -nonewline $f [binary format I $tracksize] close $f } # ----------------------------------------------------------------------------- # fileMidi - TEST area # ----------------------------------------------------------------------------- proc fileAction {a} { upvar #0 pattern_list pl upvar #0 track_list tl upvar #0 tkxox xox upvar #0 mode mo if {$a == 99} { set ftypes { {{Midi File Format} {.mid}} {{All types} {.*}} } set fname [tk_getSaveFile -filetypes $ftypes] if {$fname == ""} { return } set f [open $fname w] puts -nonewline $f MThd puts -nonewline $f [binary format I 6] puts -nonewline $f [binary format S 0] puts -nonewline $f [binary format S 1] puts -nonewline $f [binary format S 7] puts -nonewline $f MTrk set loc_tracksize 18 puts -nonewline $f [binary format I 0] ; # Dummy tracksize puts -nonewline $f [binary format c2 [list 0 [expr 144 + $mo(midi_channel)]]] # Once running status is established, format is # {note onlevel pause note offlevel pause} puts -nonewline $f [binary format c12 {35 127 0 51 127 2 35 0 0 51 0 4}] puts -nonewline $f [binary format c6 {48 127 2 48 0 4}] puts -nonewline $f [binary format c6 {38 127 2 38 0 4}] puts -nonewline $f [binary format c6 {51 127 2 51 0 4}] # End of track puts -nonewline $f [binary format c3 {255 47 0}] set tracksize 35 # Go back and insert tracksize flush $f seek $f $loc_tracksize puts -nonewline $f [binary format I $tracksize] close $f } else { puts "INTERNAL ERROR: Unexected file action: $a" } } proc varlen_short {result value} { upvar $result res if {$value < 128} { set res(high) 0 set res(low) $value } else { set res(high) [expr 128 + [expr $value / 128]] # set res(high) [expr 65536 + [expr $value / 128]] set res(low) [expr $value % 128] } } #============================================================= # These procs to edit mapping of note keys to midi note values # proc map_edit {} { global font12 global boldfont12 upvar #0 sound snd upvar #0 soundbuf sbuf upvar #0 tkxox xox if {[winfo exists .edit]} { wm deiconify .edit } else { toplevel .edit wm title .edit "Edit Sound Map" set m_titles .edit.t canvas $m_titles -height 0.75c -width 13.5c -relief raised -borderwidth 2 pack $m_titles set m_maps .edit.m frame $m_maps pack $m_maps set m_opts .edit.o canvas $m_opts -height 1.5c -width 13.5c pack $m_opts label $m_titles.key -text "Key" -font *-${boldfont12}-* label $m_titles.long -text "Long Name" -font *-${boldfont12}-* label $m_titles.short -text "Short Name" -font *-${boldfont12}-* label $m_titles.abbrev -text "Abbrev" -font *-${boldfont12}-* label $m_titles.note -text "Note" -font *-${boldfont12}-* label $m_titles.test -text "Test" -font *-${boldfont12}-* $m_titles create window 0c 0.45c -window $m_titles.key -anchor w -width 1c $m_titles create window 1c 0.45c -window $m_titles.long -anchor w -width 4c $m_titles create window 5.3c 0.45c -window $m_titles.short -anchor w -width 2c $m_titles create window 7.5c 0.45c -window $m_titles.abbrev -anchor w -width 2c $m_titles create window 10.0c 0.45c -window $m_titles.note -anchor w -width 1c $m_titles create window 11.7c 0.45c -window $m_titles.test -anchor w -width 1c # Name, Shortname, Midi note entries # for {set i 0} {$i < 16} {incr i} { canvas $m_maps.$i -height 1c -width 13.5c label $m_maps.$i.l -text [expr $i + 1] -font *-${font12}-* entry $m_maps.$i.long -font *-${font12}-* entry $m_maps.$i.short -font *-${font12}-* entry $m_maps.$i.abbrev -font *-${font12}-* entry $m_maps.$i.note -font *-${font12}-* button $m_maps.$i.test \ -bitmap nix \ -bg $xox(but_grey) \ -activebackground $xox(but_grey_active) \ -width 1.0c -height 0.7c $m_maps.$i create window 0c 0.5c -window $m_maps.$i.l -anchor w -width 1c $m_maps.$i create window 1c 0.5c -window $m_maps.$i.long -anchor w -width 4c $m_maps.$i create window 5c 0.5c -window $m_maps.$i.short -anchor w -width 2.5c $m_maps.$i create window 7.5c 0.5c -window $m_maps.$i.abbrev -anchor w -width 2.5c $m_maps.$i create window 10c 0.5c -window $m_maps.$i.note -anchor w -width 1c $m_maps.$i create window 11.2c 0.5c -window $m_maps.$i.test -anchor w -width 2.1c set j [expr $i + 1] $m_maps.$i.long insert 0 $snd($j,name) set sbuf($j,name) $snd($j,name) $m_maps.$i.short insert 0 $snd($j,shortname) set sbuf($j,shortname) $snd($j,shortname) $m_maps.$i.abbrev insert 0 $snd($j,abbrev) set sbuf($j,abbrev) $snd($j,abbrev) $m_maps.$i.note insert 0 $snd($j,note) set sbuf($j,note) $snd($j,note) pack $m_maps.$i bind $m_maps.$i.test {map_start_test_note %W} bind $m_maps.$i.test {map_stop_test_note %W} bind $m_maps.$i.note {map_start_set_note %W 1} bind $m_maps.$i.note {map_stop_set_note %W} bind $m_maps.$i.note {map_start_set_note %W -1} bind $m_maps.$i.note {map_stop_set_note %W} bind $m_maps.$i.note { set noteY %y } bind $m_maps.$i.note { set direction [expr %y - $noteY] if {$direction >= 0} { set diff 1 } else { set diff -1 } map_start_set_note %W $diff after 500; map_stop_set_note %W } } # Cancel, Apply, OK buttons # button $m_opts.cancel -text Cancel -font *-${font12}-* -command { upvar #0 soundbuf buf for {set i 0} {$i < 16} {incr i} { set j [expr $i + 1] .edit.m.$i.long delete 0 100 .edit.m.$i.long insert 0 $buf($j,name) set snd($j,name) $buf($j,name) .edit.m.$i.short delete 0 100 .edit.m.$i.short insert 0 $buf($j,shortname) set snd($j,shortname) $buf($j,shortname) .edit.m.$i.abbrev delete 0 100 .edit.m.$i.abbrev insert 0 $buf($j,abbrev) set snd($j,abbrev) $buf($j,abbrev) .edit.m.$i.note delete 0 end .edit.m.$i.note insert 0 $buf($j,note) set snd($j,note) $buf($j,note) } instrument_label_reset tk7_set_sounds destroy .edit } button $m_opts.apply -text Apply -font *-${font12}-* -command { map_set_new_sounds } button $m_opts.ok -text OK -font *-${font12}-* -command { map_set_new_sounds destroy .edit } $m_opts create window 1c 0.75c -window $m_opts.cancel -anchor w -width 2.5c $m_opts create window 4c 0.75c -window $m_opts.apply -anchor w -width 2.5c $m_opts create window 7c 0.75c -window $m_opts.ok -anchor w -width 2.5c } } proc map_set_new_sounds {} { global .edit upvar #0 sound snd upvar #0 soundbuf sbuf for {set i 0} {$i < 16} {incr i} { set j [expr $i + 1] set snd($j,name) [.edit.m.$i.long get] set snd($j,shortname) [.edit.m.$i.short get] set snd($j,abbrev) [.edit.m.$i.abbrev get] set snd($j,note) [.edit.m.$i.note get] } instrument_label_reset tk7_set_sounds } proc map_start_test_note widget { global .edit set k [string range [string trimright $widget .test] 8 end] set n [.edit.m.$k.note get] tk7_start_note_test $k $n } proc map_stop_test_note widget { global .edit set k [string range [string trimright $widget .test] 8 end] set n [.edit.m.$k.note get] tk7_stop_note_test $k $n } proc map_start_set_note {widget diff} { set newval [expr [$widget get] + $diff] set newval [expr $newval % 128] $widget delete 0 end $widget insert 0 $newval set k [string range [string trimright $widget .note] 8 end] tk7_start_note_test $k $newval } proc map_stop_set_note {widget} { set keynum [string range [string trimright $widget .note] 8 end] set midi_note [$widget get] tk7_stop_note_test $keynum $midi_note } #============================================================= #===================================================== # These procs to edit mapping of instruments to faders # proc fader_edit {} { if {[winfo exists .fadermap]} { wm deiconify .fadermap } else { toplevel .fadermap wm title .fadermap "Edit Fader Map" text .fadermap.intro -width 64 -height 16 .fadermap.intro insert end \ "Editing of the Instrument to Fader map is not implemented yet. The default mapping being used is: Vol 0 (the first fader ) - unused Vol 1 - Bass drums 1 & 2 Vol 2 - Snare drums 1 & 2 Vol 3 - Low Tom Vol 4 - Mid Tom Vol 5 - High Tom Vol 6 - Rimshot & Cowbell Vol 7 - Handclap & Tambourine Vol 8 - Highhats (all) Vol 9 - Crash cymbal Vol 10 - Ride cymbal VOLUME - Master volume over all instruments " button .fadermap.ok -text OK -command {destroy .fadermap} pack .fadermap.intro pack .fadermap.ok -expand true -fill x } } #===================================================== # # Flash the lamps for each of the 16 steps in 1 pattern # (fix later for patterns with fewer steps) # #ex: cycle_notes 1 [expr 55 * 120 / $mo(tempo)] 0 0 $steps proc cycle_notes {on dur w saved steps} { global notes upvar #0 tkxox xox upvar #0 mode mo upvar #0 flash fl if {$on == 1} { switch $mo(stopgo) { 0 { #puts "stopgo = STOP" set fl(count) -1 } 1 { incr fl(count) if {$fl(count) > [expr $steps - 1]} { set fl(count) -1 return } set savecolour [lindex [$notes.note$fl(count).l configure -bg] 4] set savedwin $notes.note$fl(count).l #puts "cycle $fl(count) ON " $savedwin configure -bg $xox(col_on) after $dur [list cycle_notes 0 $dur $savedwin $savecolour $steps] } 2 { #puts "stopgo = CONT" } } } else { # #puts "cycle $fl(count) OFF" $w configure -bg $saved if {$mo(stopgo) != $xox(START)} { set fl(count) 15 return } if {$fl(count) < $steps} { after $dur [list cycle_notes 1 $dur 0 0 $steps] } else { set fl(count) -1 return } } } proc gridlabels_reset {} { global gridlabel global font12 upvar #0 sound so for {set i 0} {$i < 16} {incr i} { $gridlabel itemconfigure ilabel$i -text $so([expr 16 - $i],name) \ -font *-${font12}-* -anchor e } } proc key_labels_reset {} { global notes upvar #0 sound so for {set i 0} {$i < 16} {incr i} { $notes.note$i.instr configure -text $so([expr $i + 1],shortname) } } proc volume_labels_reset {} { global cunit upvar #0 sound so upvar #0 volume_label vo if {$so(2,abbrev) != ""} { set vo(1) "$so(1,abbrev)/$so(2,abbrev)" } else { set vo(1) "$so(1,abbrev)" } if {$so(4,abbrev) != ""} { set vo(2) "$so(3,abbrev)/$so(4,abbrev)" } else { set vo(2) "$so(3,abbrev)" } set vo(3) "$so(5,abbrev)" set vo(4) "$so(6,abbrev)" set vo(5) "$so(7,abbrev)" if {$so(9,abbrev) != ""} { set vo(6) "$so(8,abbrev)/$so(9,abbrev)" } else { set vo(6) "$so(8,abbrev)" } if {$so(11,abbrev) != ""} { set vo(7) "$so(10,abbrev)/$so(11,abbrev)" } else { set vo(7) "$so(10,abbrev)" } if {($so(13,abbrev) != "") && ($so(14,abbrev) != "")} { set vo(8) "$so(12,abbrev)/$so(13,abbrev)/$so(14,abbrev)" } elseif {$so(13,abbrev) != ""} { set vo(8) "$so(12,abbrev)/$so(13,abbrev)" } elseif {$so(14,abbrev) != ""} { set vo(8) "$so(12,abbrev)/$so(14,abbrev)" } else { set vo(8) "$so(12,abbrev)" } set vo(9) "$so(15,abbrev)" set vo(10) "$so(16,abbrev)" for {set i 1} {$i < 11} {incr i} { $cunit.$i.l configure -text $vo($i) } } proc instrument_label_reset {} { gridlabels_reset key_labels_reset volume_labels_reset } proc tempoinfo_update {a b c} { global tempoinfo upvar $a mo $tempoinfo itemconfigure tempo -text $mo(tempo) } proc measureinfo_update {a b c} { global tempoinfo upvar $a mo upvar #0 tkxox xox upvar #0 track_list tl if {$mo(measure) == -1} { $tempoinfo itemconfigure tempo -text "" } else { $tempoinfo itemconfigure tempo -text [expr $mo(measure) + 1] } } proc trackinfo_update {a b c} { global tminfo upvar $a mo switch $mo(current_track) { 0 { $tminfo.t coords trackid 3c 0.45c $tminfo.t itemconfigure trackid -text I } 1 { $tminfo.t coords trackid 4c 0.45c $tminfo.t itemconfigure trackid -text II } 2 { $tminfo.t coords trackid 5c 0.45c $tminfo.t itemconfigure trackid -text III } 3 { $tminfo.t coords trackid 6c 0.45c $tminfo.t itemconfigure trackid -text IV } } } proc modeinfo_update {m} { global tminfo global tapwrite global font12 $tminfo.m delete modetext switch $m { 0 { set tapwrite 1 $tminfo.m create text 1.2c 0.8c -text "TRACK PLAY" \ -tags modetext -anchor w -font *-${font12}-* } 1 { set tapwrite 1 $tminfo.m create text 1.2c 1.1c -text "TRACK WRITE" \ -tags modetext -anchor w -font *-${font12}-* } 2 { set tapwrite 1 $tminfo.m create text 4.2c 0.4c -text "PATTERN PLAY" \ -tags modetext -anchor w -font *-${font12}-* } 3 { if {$tapwrite} { incr tapwrite -1 $tminfo.m create text 4.2c 0.8c -text "PATTERN WRITE" \ -tags modetext -anchor w -font *-${font12}-* } else { incr tapwrite $tminfo.m create text 4.2c 1.2c -text "TAP WRITE" \ -tags modetext -anchor w -font *-${font12}-* } } } } proc scale_lamps_update {} { global scale_lamps upvar #0 mode mo upvar #0 tkxox xox set scale [tk7_get_scale $mo(patgroup) $mo(current_pattern)] for {set i 0} {$i < 4} {incr i} { set button ${scale_lamps}.l${i} if {$i == $scale} { $button configure -background $xox(lamp_on) } else { $button configure -background $xox(lamp_off) } } } proc locate_gridpos {x y result} { global gridXs gridYs gridSvals gridIvals upvar $result res #puts "locate_gridpos $x,$y" set halo 7 set resX -1 foreach i $gridXs { if {($i > [expr $x - $halo]) && ($i < [expr $x + $halo])} { set resX $i break } } if {$resX < 0} { return $resX } #puts "resX = $resX" set resY -1 foreach i $gridYs { if {($i > [expr $y - $halo]) && ($i < [expr $y + $halo])} { set resY $i break } } if {$resY < 0} { return $resY } #puts "resY = $resY" set res(step) $gridSvals($resX) set res(inst) $gridIvals($resY) return 0 } proc play_loop {} { upvar #0 mode mo upvar #0 tkxox xox upvar #0 track_list tl global button_stop ;# to invoke stop button if {$mo(stopgo) == $xox(START) && $mo(patr) == $xox(TRACK) && $mo(rdrw) == $xox(READ)} { # Playing a track if {$mo(TRACK_START)} { set xox(play_list) $tl($mo(current_track)) # Prepare to display pattern contents set mo(measure) -1 set mo(TRACK_START) 0 } if {[llength $xox(play_list)] > 0} { set target [lindex $xox(play_list) 0] set group [expr $target / 16] set pat [expr $target % 16] set xox(play_list) [lreplace $xox(play_list) 0 0] # Prepare to display pattern contents set target [expr $mo(measure) + 1] set mo(measure) [measure_constrain $target] } else { $button_stop invoke } if {$mo(PATTERN_REPEAT)} { play_pattern $group $pat } # Update pattern display pattern_show } else { # Not playing a track if {$mo(PATTERN_REPEAT)} { play_pattern $mo(patgroup) $mo(current_pattern) } } after $mo(REPEAT_INTERVAL) play_loop } # ---------------------------------------------------------------------------- # Edit Pattern Comment # ---------------------------------------------------------------------------- proc get_current_pattern_name {} { upvar #0 mode mo switch $mo(patgroup) { 0 { set g "A"; } 1 { set g "B"; } 2 { set g "C"; } 3 { set g "D"; } } set name "$g[expr $mo(current_pattern)+1]"; return $name; } set comment .pattern_comment; proc refresh_comment {} { upvar #0 mode mo global comment; if {[winfo exists $comment]} { set name [get_current_pattern_name]; wm title $comment "$name pattern comment" set old_comment [$comment.string get] $comment.string delete 0 [expr [string length $old_comment] ] set current_comment [tk7_get_pattern_comment $mo(patgroup) $mo(current_pattern)] $comment.string insert 0 "$current_comment" } } proc edit_pattern_comment {} { upvar #0 mode mo upvar #0 tkxox xox global comment if {[winfo exists $comment]} { wm deiconify $comment } else { toplevel $comment button $comment.quit -text quit -command {wm iconify $comment} button $comment.ok -text ok -command comment_ok pack $comment.quit $comment.ok -side right # label $comment.label -text Comment: -padx 0 entry $comment.string -width 20 -relief sunken # pack $comment.label -side left pack $comment.string -side left -fill x -expand true bind $comment.string comment_ok bind $comment.string {wm iconify $comment} focus $comment.string } refresh_comment; } proc comment_ok {} { upvar #0 mode mo; global comment; set stringval [$comment.string get]; set name [get_current_pattern_name]; puts "set $name comment to \"$stringval\""; tk7_set_pattern_comment $mo(patgroup) $mo(current_pattern) $stringval; # wm iconify $comment; } tk707-0.8/help.tcl0000644000175100017510000003023610142137110010606 00000000000000# # This file is part of tk707. # # Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito # # tk707 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. # # Foobar 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 Foobar; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # ================================================================= # The Help Module # ================================================================= set HELP(UserGuide) $PKGDATADIR/tk707.help # ---------------------------------------------------------- # formatText # ---------------------------------------------------------- # This procedure tags the text in a text widget (if format is true), # based on the character in "char". # Text Marks "first" and "last" need to have been set prior to calling # the procedure. These mark the range of characters to be tagged. # The parameters are as follows: # w : is the path of the text widget. # char : is the character determining which tag is to be set. # The current valid characters are: # u : underline # i : italic # c : command # Cn : Content item, n is a positive integer. # t : title # h : highlight # @ : keep the @ character. # format : is a boolean value, which when true causes the text to be formatted. # when false it removes all format information from the text # without tagging proc formatText { w char {format 1} } { global HELP # Format the text. if {$format} { switch $char { u { $w delete last "last + 1 chars" $w tag add underline "last" "last wordend" } @ { $w insert first @ } c { $w delete last "last + 1 chars" $w tag add command "last" "last wordend" } C { set tab "" set tabs [$w get "last + 1 chars" "last + 2 chars"] $w delete last "last + 2 chars" while {$tabs} { set tab "$tab " ; incr tabs -1 } lappend HELP(Contents)\ [list "$tab[$w get "first" "first lineend"]" \ [$w index first]] } t { $w delete last "last + 1 chars" $w tag add title "last" "last lineend" } h { $w delete last "last + 1 chars" $w tag add highlight "last" "last wordend" } i { $w delete last "last + 1 chars" $w tag add italic "last" "last wordend" } default { } } # Remove all format data without formatting. } else { set ok 0 foreach i {u c C t h i} { if {$i==$char} { $w delete last "last + 1 chars" set ok 1 } } if {!$ok} { $w insert last @ } } } # ---------------------------------------------------------- # Set Help globals. # ---------------------------------------------------------- set HELP(BG) snow2 set HELP(FG) black set HELP(AFG) grey set HELP(HIL) red set HELP(COM) DarkGreen set HELP(Log) "0" # ---------------------------------------------------------- # about # ---------------------------------------------------------- proc about {} { global VERSION if {[winfo exists .about]} { wm deiconify .about } else { toplevel .about wm title .about "About tk707..." label .about.label -text " TK 707\n version $VERSION\n Copyright(C) 2000, 2001\n Chris Willing ,\n Pierre Saramito .\n Go to the Help menu for the complete documentation. This documentation is available in HTML and INFO formats. Type `man tk707` to access the on-line reference manual. The tk707 documentation is also available in html, pdf, postscript and dvi formats from\n http://www-lmc.imag.fr/lmc-edp/Pierre.Saramito/tk707 http://www.vislab.usyd.edu.au/staff/chris/tk707 Send comments and requests, bugs, suggestions and mods to the both authors." frame .about.sep -width 100p -height 2p -borderwidth 1p -relief sunken button .about.dismiss -text "Dissmiss" -command {wm iconify .about} pack .about.label pack .about.dismiss -side bottom -pady 4p pack .about.sep -side bottom -fill x -pady 4p } } # ---------------------------------------------------------- # UserManual # ---------------------------------------------------------- # This procedure is the callback to to the Help-User's Manual menu item. # It creates a pop-up window containing the user's manual, with a few # basic highlighting and goto features. proc UserManual {} { global HELP FILE # Only procede if the help window is non-existant. if {![winfo exists .help]} { set HELP(Contents) "" # Create the toplevel window. toplevel .help -bg $HELP(BG) # Set the geometry wm geometry .help 80x25 wm title .help "Tk-707 User's Guide" # Set the Icon information. wm iconname .help Help # Create the buttons panel (Contents, Back, Exit) frame .help.buttons -bg $HELP(BG) -relief ridge -bd 4 # Create the Contents button. button .help.buttons.contents\ -text Contents\ -bg $HELP(AFG)\ -fg $HELP(FG)\ -activeforeground $HELP(FG)\ -activebackground $HELP(AFG)\ -width 10\ -command {.help.help.text yview 0} # Create the Back button. button .help.buttons.prev\ -text Back\ -bg $HELP(AFG)\ -fg $HELP(FG)\ -width 10\ -activebackground $HELP(AFG)\ -command { set end [expr [llength $HELP(Log)]-1] set value [lindex $HELP(Log) [expr $end-1]] .help.help.text yview $value set HELP(Log) [lreplace $HELP(Log) $end $end] } # Create the Exit button. button .help.buttons.exit\ -text Exit\ -bg $HELP(AFG)\ -fg $HELP(FG)\ -activeforeground $HELP(FG)\ -activebackground $HELP(AFG)\ -width 10\ -command {destroy .help} # Procedure to call when HELP(Log) is written proc setlog {nm1 nm2 op} { global HELP if {$HELP(Log)==0} { .help.buttons.prev config -state disabled } else { .help.buttons.prev config -state normal } } # Set a variable trace on the Help(Log) variable to ensure that # the Back button is disabled when the log is empty. trace variable HELP(Log) w setlog # Set the current state of the Back button. set HELP(Log) $HELP(Log) # Pack the buttons. pack .help.buttons.contents \ .help.buttons.prev\ .help.buttons.exit\ -side left -anchor w pack .help.buttons -anchor w -fill x # Create and pack the text widget (with scrollbar) setupText .help.help # Load the User's Guide into widget and generate contents list. loadFile .help.help.text $HELP(UserGuide) # Insert the contents list. set i 1 foreach item $HELP(Contents) { .help.help.text insert $i.0 [format "[lindex $item 0]\n"] .help.help.text tag add content $i.0 "$i.0 lineend" incr i } incr i 2 # Insert the "Contents" title. .help.help.text insert 1.0 [format "Contents\n\n"] # Give it the format of a title. .help.help.text tag add title 1.0 "1.0 lineend" # Store the number of lines added after Contents line. set xtraLinesBefore 2 # Add 3 blank lines after contents. # This has to be stored for later set xtraLinesAfter 3 .help.help.text insert $i.0 [format "\n\n\n"] # Strip the Format code from the Contents list forAllMatches .help.help.text @ { .help.help.text delete first last set char [.help.help.text get last "last+ 1 chars"] formatText .help.help.text $char 0 } # Configure and Bind content list. # A different cursor when above the item .help.help.text tag bind content \ ".help.help.text configure -cursor arrow" .help.help.text tag bind content \ ".help.help.text configure -cursor {}" # Skip to the relevant line. .help.help.text tag bind content \ "set index \[ expr \[lindex \[split \[%W index @%x,%y\] .\] 0\]\ -(1 +$xtraLinesBefore)\] set goto \[expr \[lindex \[lindex \$HELP(Contents) \$index\] 1\] +2\ +$xtraLinesAfter +\[llength \$HELP(Contents)\]\] # Store in the log. lappend HELP(Log) \$goto # Adjust the view to the selected line. %W yview \$goto" } else { # Bring the user manual to the front. # I am not using raise since it doesn't generally work for olwm. wm withdraw .help wm deiconify .help } } # ---------------------------------------------------------- # setupText # ---------------------------------------------------------- # This procedure creates a text widget and scroll bar. # The parameter "w" is a path for the combined widget. proc setupText {w} { global HELP #Create Widgets if the path name is valid. if {![winfo exists $w]} { # Create the general frame. frame $w # Create the text widget. # The configuration option "setgrid" sets up gridded # window management. text $w.text -yscrollcommand "$w.scroll set"\ -setgrid 1 \ -wrap word # Create the scrollbar. scrollbar $w.scroll -command "$w.text yview" # Pack the widget. pack $w.text -fill both -expand 1 -side left pack $w.scroll -side left -fill y -expand 1 pack $w -fill both -expand 1 } # Configure the Widgets. $w config -bg $HELP(BG) $w.text config\ -background $HELP(BG)\ -foreground $HELP(FG)\ -cursor {}\ -font -adobe-helvetica-medium-r-normal--12-120-*\ -exportselection 0 $w.scroll config -background $HELP(BG) # Remove the default bindings that make the text widget editable. bind $w.text { } bind $w.text { } bind $w.text { } # Set the configuration for text tags. # Underline. $w.text tag configure underline -underline 1 # Command $w.text tag configure command \ -foreground DarkGreen\ -font -adobe-helvetica-medium-r-normal--14-140-* $w.text tag bind command { puts [%W get "@%x,%y wordstart" "@%x,%y wordend"] } $w.text tag bind command "$w.text configure -cursor arrow" $w.text tag bind command "$w.text configure -cursor {}" # Content $w.text tag configure content \ -foreground DarkGreen \ -font -adobe-helvetica-medium-r-normal--14-140-* # Title. $w.text tag configure title -font -adobe-helvetica-medium-r-normal--24-240-* # Italic $w.text tag configure italic -font -adobe-helvetica-medium-o-normal--12-120-* # Highlight. $w.text tag configure highlight -foreground red } # ---------------------------------------------------------- # loadFile # ---------------------------------------------------------- # This procedure load a text file given by "file" formatted with a # simple form of hyper-text into the text widget given by "w". And # format it. proc loadFile {w file} { # Delete all previous text in the text widget. $w delete 1.0 end # Open the text file. set f [open $file] # Insert the text into the text widget. while {![eof $f]} { $w insert end [read $f 1000] } # Close the text file. close $f # Format the text. This is done by looking for all the "@" in the # text widget, deleting it and sending the following character to # the procedure formaText, which tags the text appropriately. forAllMatches $w @ { $w delete first last set char [$w get last "last+ 1 chars"] formatText $w $char } } # ---------------------------------------------------------- # forAllMatches # ---------------------------------------------------------- # This procedure takes three arguments: the name of a text widget, # a regular expression pattern and a script. # It finds all of the ranges of characters that match the pattern. # For each matching range forAllMatches sets the marks first and last # to the beginning and end of the of the range, then it invokes the # script. # This procedure has been taken from John K. Ousterhout's book, # Tcl and the Tk Toolkit (1994) p.219. proc forAllMatches {w pattern script} { scan [$w index end] %d numLines for {set i 1} {$i<=$numLines} {incr i } { $w mark set last $i.0 while {[regexp -indices $pattern \ [$w get last "last lineend" ] indices ] } { $w mark set first "last + [lindex $indices 0] chars" $w mark set last "last + 1 chars +[lindex $indices 1] chars" uplevel $script } } } tk707-0.8/tk707.tcl0000644000175100017510000007267210142137110010544 00000000000000# # This file is part of tk707. # # Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito # # tk707 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. # # Foobar 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 Foobar; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # ====================================================== # File tk707.tcl # Remainder of gui, including key & mouse bindings. Then RUN! # # Pattern memory is now in C-land but track memory still in tcl/tk. # ====================================================== mem_init # ====================================================== # lamps into the score # ====================================================== set score_width [expr $score_width_in_inch * $cm_per_inch] set score_height [expr $score_height_in_inch * $cm_per_inch] set lamp_width 0.40; set lamp_height 0.15; set scale_lamps $score set scale_lamp3 $score.l3 set scale_lamp2 $score.l2 set scale_lamp1 $score.l1 set scale_lamp0 $score.l0 label $scale_lamp3 -bitmap nix -width ${lamp_width}c -height ${lamp_height}c \ -relief groove -borderwidth 2 -bg $tkxox(lamp_off) label $scale_lamp2 -bitmap nix -width ${lamp_width}c -height ${lamp_height}c \ -relief groove -borderwidth 2 -bg $tkxox(lamp_off) label $scale_lamp1 -bitmap nix -width ${lamp_width}c -height ${lamp_height}c \ -relief groove -borderwidth 2 -bg $tkxox(lamp_off) label $scale_lamp0 -bitmap nix -width ${lamp_width}c -height ${lamp_height}c \ -relief groove -borderwidth 2 -bg $tkxox(lamp_on) pack $scale_lamp3 -side bottom pack $scale_lamp2 -side bottom pack $scale_lamp1 -side bottom pack $scale_lamp0 -side bottom set x 0.75 set dy [expr $score_height / 4.0 - 0.04] set y3 [expr $dy/2 - 0.01]; set y2 [expr $y3 + $dy] set y1 [expr $y2 + $dy] set y0 [expr $y1 + $dy] $scale_lamps create window ${x}c ${y3}c -window $scale_lamp3; $scale_lamps create window ${x}c ${y2}c -window $scale_lamp2; $scale_lamps create window ${x}c ${y1}c -window $scale_lamp1; $scale_lamps create window ${x}c ${y0}c -window $scale_lamp0; focus ${scale_lamp0} # ====================================================== # Grid Display Area # ====================================================== # Vertical lines set xcoord 0.0 for {set i 0} {$i < 16} {incr i} { set xcoord [expr $xcoord + 0.5] $grid create line ${xcoord}c 0.5c ${xcoord}c 9.0c -fill #aaaaaa set pvalX [tk7_cm2pix $grid ${xcoord}c] lappend gridXs $pvalX set gridSvals($pvalX) $i } # Horizontal lines set ycoord 0.5 for {set i 0} {$i < 16} {incr i} { set ycoord [expr $ycoord + 0.5] $grid create line 0.0c ${ycoord}c 8.5c ${ycoord}c -fill #aaaaaa set pvalY [tk7_cm2pix $grid ${ycoord}c] lappend gridYs $pvalY set gridIvals($pvalY) [expr 15 - $i] } # ----------------------- # Step markers # ----------------------- set xcoord 0.0 for {set i 0} {$i < 16} {incr i} { set xcoord [expr $xcoord + 0.5] $grid create text ${xcoord}c 0.28125c -text [expr $i + 1] -font *-${font12}-* } # ----------------------- # Instrument labels # ----------------------- $gridlabel create text 2.85c 0.28125c -text Step -font *-${font12}-* -anchor e set xcoord 0.5 set ycoord 0.5625 for {set i 0} {$i < 16} {incr i} { set ycoord [expr $ycoord + 0.5] $gridlabel create text 2.85c ${ycoord}c -tags ilabel$i \ -text $sound([expr 16 - $i],name) -font *-${font12}-* -anchor e } $tempoinfo create text 1c 0.5c -text TEMPO -font *-${font12}-* -tags tmtitle $tempoinfo create text 3.6c 1.5c -text "$mode(tempo)" -tags tempo \ -font -${courrier_boldfont_i_50}-* -anchor e #trace variable mode(tempo) w tempoinfo_update $tminfo.t create text 0.2c 0.45c -text TRACK -anchor w -font *-${normal_r_14}-* $tminfo.t create text 3c 0.45c -text "" -tags trackid -font *-${normal_r_14}-* trace variable mode(current_track) w trackinfo_update $tminfo.m create text 0.2c 0.4c -text STATUS -anchor w -font *-${font12}-* # =================================================================================== # Volume controls # =================================================================================== set vol_tics_width 0.25 set title_width [expr ${title_width_in_inch} * ${cm_per_inch}]; set title_height [expr ${title_height_in_inch} * ${cm_per_inch}]; set space_height [expr ${title_height}/4.]; set volspacer $vcunit.spacer canvas $volspacer -width ${title_width}c -height ${space_height}c pack $volspacer set cunit $vcunit.u frame $cunit; pack $cunit for {set i 0} {$i<11} {incr i} { frame $cunit.$i ;# -relief groove -borderwidth 2 frame $cunit.$i.sf if {$i == 0} { canvas $cunit.$i.sf.cl -width 1.2c -height 4c $cunit.$i.sf.cl create text 1.2c 0.4c -text MAX -font *-${font12}-* -anchor e $cunit.$i.sf.cl create text 1.2c 3.6c -text MIN -font *-${font12}-* -anchor e pack $cunit.$i.sf.cl -side left set vol_space_width [expr 4*${vol_tics_width}]; } else { set vol_space_width ${vol_tics_width}; } canvas $cunit.$i.sf.c -width 0.25c -height 4c for {set j 1} {$j < 10} {incr j} { set y [expr 0.4 * $j] $cunit.$i.sf.c create line 0c ${y}c ${vol_tics_width}c ${y}c } $cunit.$i.sf.c create line 0c 0.4c 0.25c 0.4c -width 2 $cunit.$i.sf.c create line 0c 2.0c 0.25c 2.0c -width 2 $cunit.$i.sf.c create line 0c 3.6c 0.25c 3.6c -width 2 scale $cunit.$i.sf.s -orient vertical -from 100 -to 0 -length 4c \ -width 0.4c -sliderlength 0.8c \ -activebackground $tkxox(vol_slider_active) \ -troughcolor $tkxox(vol_trough_color) \ -background $tkxox(vol_slider_passive) \ -highlightbackground $tkxox(vol_highlightbackground) \ -showvalue false -borderwidth 1p \ -command volset -relief groove eval canvas $cunit.$i.sf.spacer -width ${vol_space_width}c -height 4c ${debug_relief}; pack $cunit.$i.sf.spacer -side right pack $cunit.$i -side left pack $cunit.$i.sf pack $cunit.$i.sf.c -side left pack $cunit.$i.sf.s -side left frame $cunit.$i.lab eval label $cunit.$i.l -height 1 -font *-${font8}-* \ -text $volume_label($i) -justify left ${debug_relief} pack $cunit.$i.l -expand true -fill x # Initialise fader setting if {$i == 0} { $cunit.$i.sf.s set 100 } else { $cunit.$i.sf.s set 66 } } set masterv $cunit.11 frame $masterv frame $masterv.sf pack $masterv -side left pack $masterv.sf set master_width 0.5; set master_height 5.0; set master_n_tics 10; set master_tics_width 0.7; set master_sliderlength [expr 2.*${master_height}/${master_n_tics}] set master_incr_height [expr ${master_height}/(${master_n_tics}+2)]; set vol_space_width [expr 3*${vol_tics_width}]; eval canvas $masterv.sf.spacer -width ${vol_space_width}c -height ${master_height}c \ ${debug_relief} pack $masterv.sf.spacer -side left set master_hi_color #ffff00000000; # red set master_hibg_color #f332ffff0000; # yellow set master_acbg_color #000044cffb22; # blue set master_fg_color #000044440000; # green #-background $tkxox(but_grey) \ canvas $masterv.sf.cl -width ${master_tics_width}c -height ${master_height}c scale $masterv.sf.s -orient vertical -from 100 -to 0 \ -length ${master_height}c -width ${master_width}c \ -sliderlength ${master_sliderlength}c \ -activebackground $tkxox(vol_slider_active) \ -troughcolor $tkxox(vol_trough_color) \ -background $tkxox(vol_slider_passive) \ -highlightbackground $tkxox(vol_highlightbackground) \ -showvalue false \ -command volset \ -borderwidth 1p \ -relief groove canvas $masterv.sf.cr -width 2.0c -height ${master_height}c $masterv.sf.s set 100 for {set i 0} {$i <= ${master_n_tics}} {incr i} { if {$i == 0 || 2*$i == ${master_n_tics} || $i == ${master_n_tics} } { set width_in_point 2; } else { set width_in_point 1; } set y [expr ${master_incr_height} * ($i + 1)] $masterv.sf.cl create line 0c ${y}c 1.5c ${y}c \ -width ${width_in_point}p $masterv.sf.cr create line 0c ${y}c ${master_tics_width}c ${y}c \ -width ${width_in_point}p } set x [expr ${master_tics_width} * 1.2 ] set y [expr ${master_incr_height} * (0 + 1)] $masterv.sf.cr create text ${x}c ${y}c -text MAX -font *-${font12}-* -anchor w set y [expr ${master_incr_height} * (${master_n_tics} + 1)] $masterv.sf.cr create text ${x}c ${y}c -text MIN -font *-${font12}-* -anchor w eval label $masterv.l -text "VOLUME" -justify right -font *-${boldfont12}-* ${debug_relief} pack $masterv.sf.cl $masterv.sf.s $masterv.sf.cr -side left pack $masterv.l -expand true -fill x $masterv.sf.cl configure set bypassval 0 set bypass $vcunit.bypass frame $bypass pack $bypass label $bypass.l -text "BYPASS Faders" -font *-${font12}-* button $bypass.b -bitmap nix -width 3.5c -height 0.75c \ -background $tkxox(but_grey) -activebackground $tkxox(but_grey_active) \ -command {vol_bypass [incr bypassval -1]} pack $bypass.b pack $bypass.l set volspacerB $vcunit.spacerB canvas $volspacerB -width ${title_width}c -height ${space_height}c pack $volspacerB proc volset {val} { global cunit for {set i 0} {$i < 12} {incr i} { lappend vals [$cunit.$i.sf.s get] } eval tk7_set_vols $vals } proc vol_bypass {n} { global bypassval cunit vcunit masterv global font12 set bypassval [expr abs($n)] ;# Should now be 0 or 1 if {$bypassval} { for {set i 0} {$i < 11} {incr i} { $cunit.$i.sf.s configure -state disabled $masterv.sf.s configure -state disabled $vcunit.bypass.l configure -text "ACTIVATE Faders" -font *-${font12}-* tk7_set_vols 100 100 100 100 100 100 100 100 100 100 100 100 } } else { for {set i 0} {$i < 11} {incr i} { $cunit.$i.sf.s configure -state normal $masterv.sf.s configure -state normal $vcunit.bypass.l configure -text "BYPASS Faders" -font *-${font12}-* volset 0 } } } # ====================================================== # small buttons area # ====================================================== # ------------------------------------------------------ # Clear/Scale/Last Step/Instrument Guide # ------------------------------------------------------ eval frame $misc.lt1 $debug_relief pack $misc.lt1 label $misc.lt1.clear -text CLEAR -font *-${boldfont12}-* -anchor c pack $misc.lt1.clear button $misc.b1 -bitmap nix -width 0.75c -height 0.75c \ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active) eval frame $misc.lb1 $debug_relief pack $misc.lb1 label $misc.lb1.clear -text CLEAR -font *-${boldfont12}-* -anchor c pack $misc.lb1.clear $misc create window 0.8c 1.4c -window $misc.lt1 -anchor s $misc create window 0.8c 2c -window $misc.b1 -anchor c $misc create window 0.8c 2.65c -window $misc.lb1 -anchor n bind $misc.b1 {ac_clear 0} bind $misc.b1 {ac_clear 1} bind $misc.b1 {ac_clear 2} bind $misc.b1 {ac_clear 3} eval frame $misc.lt2 $debug_relief; pack $misc.lt2 label $misc.lt2.scale -text SCALE -font *-${boldfont12}-* -anchor c pack $misc.lt2.scale button $misc.b2 -bitmap nix -width 0.75c -height 0.75c \ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active) eval frame $misc.lb2 $debug_relief; pack $misc.lb2 label $misc.lb2.back -text BACK -font *-${boldfont12}-* -anchor c pack $misc.lb2.back $misc create window 2.0c 1.4c -window $misc.lt2 -anchor s $misc create window 2.0c 2c -window $misc.b2 -anchor c $misc create window 2.0c 2.65c -window $misc.lb2 -anchor n bind $misc.b2 <1> ac_scaleback eval frame $misc.lt3 $debug_relief; pack $misc.lt3 label $misc.lt3.last -text LAST -font *-${boldfont12}-* -anchor c label $misc.lt3.step -text STEP -font *-${boldfont12}-* -anchor c pack $misc.lt3.last $misc.lt3.step button $misc.b3 -bitmap nix -width 0.75c -height 0.75c \ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active) eval frame $misc.lb3 $debug_relief; pack $misc.lb3 label $misc.lb3.fwd -text FWD -font *-${boldfont12}-* -anchor c pack $misc.lb3.fwd $misc create window 3.2c 1.4c -window $misc.lt3 -anchor s $misc create window 3.2c 2c -window $misc.b3 -anchor c $misc create window 3.2c 2.65c -window $misc.lb3 -anchor n bind $misc.b3 <1> ac_lastfwd eval frame $misc.lt4 $debug_relief; pack $misc.lt4 label $misc.lt4.inst -text INSTR -font *-${boldfont12}-* -anchor c label $misc.lt4.guide -text /GUIDE -font *-${boldfont12}-* -anchor c pack $misc.lt4.inst $misc.lt4.guide button $misc.b4 -bitmap nix -width 0.75c -height 0.75c \ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active) eval frame $misc.lb4 $debug_relief; pack $misc.lb4 label $misc.lb4.last -text LAST -font *-${boldfont12}-* -anchor c label $misc.lb4.meas -text MEAS -font *-${boldfont12}-* -anchor c pack $misc.lb4.last $misc.lb4.meas $misc create window 4.4c 1.4c -window $misc.lt4 -anchor s $misc create window 4.4c 2c -window $misc.b4 -anchor c $misc create window 4.4c 2.65c -window $misc.lb4 -anchor n bind $misc.b4 <1> {ac_lastmeas 0} bind $misc.b4 {ac_lastmeas 1} bind $misc.b4 {ac_lastmeas 2} bind $misc.b4 {ac_lastmeas 3} # ------------------------------------------------------ # Shuffle/Flam & Tempo/Measure controls # ------------------------------------------------------ # # shuffle/flam # eval frame $st.lt1 $debug_relief; pack $st.lt1 label $st.lt1.shuff -text SHUFFLE -font *-${boldfont12}-* label $st.lt1.flam -text /FLAM -font *-${boldfont12}-* pack $st.lt1.shuff $st.lt1.flam button $st.b1 -bitmap nix -width 0.75c -height 0.75c \ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active) eval frame $st.lb1 $debug_relief; pack $st.lb1 label $st.lb1.midi -text "MIDI CH" -font *-${boldfont12}-* \ -fg $tkxox(color_fg_shift) -bg $tkxox(color_bg_shift) pack $st.lb1.midi $st create window 1c 1.4c -window $st.lt1 -anchor s $st create window 1c 2c -window $st.b1 -anchor c $st create window 1c 2.65c -window $st.lb1 -anchor n bind $st.b1 { ac_flam } bind $st.b1 { ac_midi } # # tempo/meas area # eval frame $st.lt2 $debug_relief; pack $st.lt2 label $st.lt2.tempo -text TEMPO -font *-${boldfont12}-* label $st.lt2.meas -text /MEAS -font *-${boldfont12}-* pack $st.lt2.tempo $st.lt2.meas button $st.b2 -bitmap nix -width 0.75c -height 0.75c \ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active) eval frame $st.lb2 $debug_relief; pack $st.lb2 label $st.lb2.sync -text "SYNC MODE" -font *-${boldfont12}-* \ -fg $tkxox(color_fg_shift) -bg $tkxox(color_bg_shift) pack $st.lb2.sync $st create window 3c 1.4c -window $st.lt2 -anchor s $st create window 3c 2c -window $st.b2 $st create window 3c 2.65c -window $st.lb2 -anchor n bind $st.b2 <1> ac_tempomeasure # ------------------------------------------------------ # Track/Pattern Read/Write control # ------------------------------------------------------ label $trpa.lt -text PLAY -font *-${boldfont12}-* label $trpa.lttrack -text TRACK -font *-${boldfont12}-* label $trpa.ltpattern -text PATTERN -font *-${boldfont12}-* label $trpa.lbtrack -text TRACK -font *-${boldfont12}-* \ -fg $tkxox(color_fg_shift) -bg $tkxox(color_bg_shift) label $trpa.lbstep -text "STEP/TAP" -font *-${boldfont12}-* \ -fg $tkxox(color_fg_shift) -bg $tkxox(color_bg_shift) button $trpa.btrk -bitmap nix -width 0.75c -height 0.75c \ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active) button $trpa.bpat -bitmap nix -width 0.75c -height 0.75c \ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active) label $trpa.lb -text WRITE -font *-${boldfont12}-* $trpa create window 1.6c 0.8c -window $trpa.lt -anchor s $trpa create window 0.8c 1.4c -window $trpa.lttrack -anchor s $trpa create window 0.8c 2c -window $trpa.btrk -anchor c $trpa create window 0.8c 2.65c -window $trpa.lbtrack -anchor n $trpa create window 2.3c 1.4c -window $trpa.ltpattern -anchor s $trpa create window 2.3c 2c -window $trpa.bpat -anchor c $trpa create window 2.3c 2.65c -window $trpa.lbstep -anchor n $trpa create window 1.6c 3.30c -window $trpa.lb -anchor n bind $trpa.btrk <1> {ac_trackmode $tkxox(READ)} bind $trpa.btrk {ac_trackmode $tkxox(WRITE)} bind $trpa.btrk {ac_trackmode $tkxox(WRITE)} bind $trpa.bpat <1> { ac_patternmode $tkxox(READ); } bind $trpa.bpat { ac_patternmode $tkxox(WRITE); } bind $trpa.bpat { ac_patternmode $tkxox(WRITE); } #--------------------------------------- # Pattern Group & Track Number selection #--------------------------------------- label $grps.lt -text "PATTERN GROUP" -font *-${boldfont12}-* label $grps.lb -text "TRACK NUMBER" -font *-${boldfont12}-* $grps create window 2.5c 0.8c -window $grps.lt -anchor s $grps create window 2.5c 3.30c -window $grps.lb -anchor n eval frame $grps.lt0 $debug_relief; pack $grps.lt0 label $grps.lt0.lamp -bitmap nix -width 0.4c -height 0.15c \ -relief groove -borderwidth 2 -bg $tkxox(lamp_off) label $grps.lt0.labl -text A -font *-${boldfont12}-* pack $grps.lt0.lamp $grps.lt0.labl -side left button $grps.b0 -bitmap nix -width 0.75c -height 0.75c \ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active) label $grps.lb0 -text I -font *-${boldfont13}-* \ -fg $tkxox(color_fg_shift) -bg $tkxox(color_bg_shift) $grps create window 0.8c 1.4c -window $grps.lt0 -anchor s $grps create window 0.8c 2c -window $grps.b0 -anchor c $grps create window 0.8c 2.65c -window $grps.lb0 -anchor n eval frame $grps.lt1 $debug_relief; pack $grps.lt1 label $grps.lt1.lamp -bitmap nix -width 0.4c -height 0.15c \ -relief groove -borderwidth 2 -bg $tkxox(lamp_off) label $grps.lt1.labl -text B -font *-${boldfont12}-* pack $grps.lt1.lamp $grps.lt1.labl -side left button $grps.b1 -bitmap nix -width 0.75c -height 0.75c \ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active) label $grps.lb1 -text II -font *-${boldfont13}-* \ -fg $tkxox(color_fg_shift) -bg $tkxox(color_bg_shift) $grps create window 2c 1.4c -window $grps.lt1 -anchor s $grps create window 2c 2c -window $grps.b1 -anchor c $grps create window 2c 2.65c -window $grps.lb1 -anchor n eval frame $grps.lt2 $debug_relief; pack $grps.lt2 label $grps.lt2.lamp -bitmap nix -width 0.4c -height 0.15c \ -relief groove -borderwidth 2 -bg $tkxox(lamp_off) label $grps.lt2.labl -text C -font *-${boldfont12}-* pack $grps.lt2.lamp $grps.lt2.labl -side left button $grps.b2 -bitmap nix -width 0.75c -height 0.75c \ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active) label $grps.lb2 -text III -font *-${boldfont13}-* \ -fg $tkxox(color_fg_shift) -bg $tkxox(color_bg_shift) $grps create window 3.2c 1.4c -window $grps.lt2 -anchor s $grps create window 3.2c 2c -window $grps.b2 -anchor c $grps create window 3.2c 2.65c -window $grps.lb2 -anchor n eval frame $grps.lt3 $debug_relief; pack $grps.lt3 label $grps.lt3.lamp -bitmap nix -width 0.4c -height 0.15c \ -relief groove -borderwidth 2 -bg $tkxox(lamp_off) label $grps.lt3.labl -text D -font *-${boldfont12}-* pack $grps.lt3.lamp $grps.lt3.labl -side left button $grps.b3 -bitmap nix -width 0.75c -height 0.75c \ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active) label $grps.lb3 -text IV -font *-${boldfont13}-* \ -fg $tkxox(color_fg_shift) -bg $tkxox(color_bg_shift) $grps create window 4.4c 1.4c -window $grps.lt3 -anchor s $grps create window 4.4c 2c -window $grps.b3 -anchor c $grps create window 4.4c 2.65c -window $grps.lb3 -anchor n bind $grps.b0 <1> {ac_group 0} bind $grps.b1 <1> {ac_group 1} bind $grps.b2 <1> {ac_group 2} bind $grps.b3 <1> {ac_group 3} bind $grps.b0 {ac_track 0} bind $grps.b1 {ac_track 1} bind $grps.b2 {ac_track 2} bind $grps.b3 {ac_track 3} # ------------------------------- # Create the note buttons & lamps # ------------------------------- # add half a button width at left and right of the score alignement set border_width_in_point 2; set correction 0.20 set button_width [expr $score_width/17.0 - 2*$border_width_in_point/$point_per_cm - $correction]; set shift_buttons $notes.shift canvas $shift_buttons -width [expr 0.95*${button_width}]c -height 2.6c; pack $shift_buttons -side left; for {set i 0} {$i<16} {incr i} { frame $notes.note$i pack $notes.note$i -side left label $notes.note$i.l -height 1 -text [expr $i + 1] \ -relief groove -borderwidth ${border_width_in_point}p -font *-${font12}-* button $notes.note$i.b -bitmap nix -width ${button_width}c -height 2.6c \ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active) label $notes.note$i.instr -width 1 \ -font *-${font12}-* -text $sound([expr $i + 1],shortname); pack $notes.note$i.l $notes.note$i.b $notes.note$i.instr \ -expand true -fill x bind $notes.note$i.b {ac_note %W 0} bind $notes.note$i.b {ac_note_off %W} bind $notes.note$i.b {ac_note %W $tkxox(flam)} bind $notes.note$i.b {ac_note_off %W} bind $notes.note$i.b {ac_note %W $tkxox(zero_velocity)} bind $notes.note$i.b {ac_newinstr %W} } # # Empty Space : adjust vectical alignment with score # - at the right of the score # - at the right of the instrument buttons # set empty_right $note_score.right set empty_case $notes.right canvas $empty_right -width ${right_space_width}c -height ${score_height_in_inch}i; canvas $empty_case -width ${right_space_width}c -height 2.6c; pack $empty_right -side left; pack $empty_case -side right; pattern_setid 0 ; # Initialise pattern number ac_group $mode(patgroup) ac_newinstr $notes.note0.b ; # Initialise current instrument # Bindings to activate note buttons from keyboard # 1->10 = buttons 1->10, "q"->"y" = 11->16 # set k 0 bind . {ac_note $notes.note0.b 0} bind . {ac_note $notes.note1.b 0} bind . {ac_note $notes.note2.b 0} bind . {ac_note $notes.note3.b 0} bind . {ac_note $notes.note4.b 0} bind . {ac_note $notes.note5.b 0} bind . {ac_note $notes.note6.b 0} bind . {ac_note $notes.note7.b 0} bind . {ac_note $notes.note8.b 0} bind . {ac_note $notes.note9.b 0} bind . {ac_note $notes.note10.b 0} bind . {ac_note $notes.note11.b 0} bind . {ac_note $notes.note12.b 0} ;# puts "[incr k]"} bind . {ac_note $notes.note13.b 0} bind . {ac_note $notes.note14.b 0} bind . {ac_note $notes.note15.b 0} # Bindings for pattern Copy/Paste # bind . { tk7_set_patbuf $mode(patgroup) $mode(current_pattern) } bind . { if {($mode(rdrw) == $tkxox(WRITE)) && ($mode(patr) == $tkxox(PATTERN))} { tk7_copy_patbuf $mode(patgroup) $mode(current_pattern) 1 pattern_setid $mode(current_pattern) } } bind . { if {($mode(rdrw) == $tkxox(WRITE)) && ($mode(patr) == $tkxox(PATTERN))} { tk7_copy_patbuf $mode(patgroup) $mode(current_pattern) 0 pattern_setid $mode(current_pattern) } } # # Bindings for pattern editing from display grid # proc grid_note {x y prop} { global notes upvar #0 tkxox xox upvar #0 mode mo if {$mo(patr) == $xox(TRACK) || $mo(rdrw) == $xox(READ)} { return } if {![have_zero_velocity $prop]} { switch $mo(current_accent) { 2 {set prop [add_strong_accent $prop] } 1 {set prop [add_weak_accent $prop] } default {set prop [add_default_velocity $prop] } } } # Convert x,y position to a grid intersection point # and imply step,instrument combination from it. if {[locate_gridpos $x $y SIvals] < 0 } { return } #puts " -> Instrument $SIvals(inst) at step $SIvals(step) with prop $prop" ac_newinstr $notes.note$SIvals(inst).b step_insert $SIvals(step) $prop } bind $grid { #puts "Button-1: %x,%y" } bind $grid { #puts "Double-Button-1: %x,%y" grid_note %x %y 0 } bind $grid { #puts "Control-Double-Button-1: %x,%y" upvar #0 tkxox xox grid_note %x %y $xox(flam) } bind $grid { #puts "Shift-Double-Button-1: %x,%y" upvar #0 tkxox xox grid_note %x %y $xox(zero_velocity) } # ------------------------------------------------------ # Create Accent/Enter button set # ------------------------------------------------------ label $accenter.lt -height 1 -text ENTER -font *-${boldfont12}-* frame $accenter.cart label $accenter.cart.lamp -bitmap nix -width 0.4c -height 0.15c \ -relief groove -borderwidth 2 -bg $tkxox(lamp_off) label $accenter.cart.labl -text CARTRIDGE -font *-${boldfont12}-* \ -fg $tkxox(color_fg_shift) -bg $tkxox(color_bg_shift) pack $accenter.cart.lamp $accenter.cart.labl -side left button $accenter.b -bitmap nix -width 1.45c -height 2.1c \ -bg $tkxox(but_grey) -activebackground $tkxox(but_grey_active) set accent_label $accenter.lb label $accent_label -height 1 -text ACCENT -font *-${boldfont12}-* $accenter create window 1.43c 0.35c -window $accenter.lt $accenter create window 1.43c 0.8c -window $accenter.cart $accenter create window 1.43c 2.3c -window $accenter.b $accenter create window 1.43c 3.8c -window $accent_label -tags accent bind $accenter.b <1> {ac_accenter 0} ;# Add pattern into track bind $accenter.b {ac_accenter 1} ;# Insert pattern into track bind $accenter.b {ac_cartridge} # ------------------------------------------------------ # Create the Tempo Dial # ------------------------------------------------------ set dial_canvas $dial.c set dial_value $dial.v label $dial_value -text "TEMPO $mode(tempo)" -anchor n -font *-${boldr14}-* ; pack $dial_value -expand true -fill x canvas $dial_canvas -width 4c -height 3.2c ;#-relief groove -borderwidth 2 pack $dial_canvas -side left set dial_radius 1.; # in centimeter $dial_canvas create oval 1c 0.2c 3c 2.2c -width 2p -tags dial \ -fill $tkxox(but_grey) $dial_canvas create line 0c 0c 0c 0c -tags indicator $dial_canvas create text 0.4c 2.9c -text SLOW -anchor w \ -font *-${helvetica_bold_r_12}-* $dial_canvas create text 3.7c 2.9c -text FAST -anchor e \ -font *-${helvetica_bold_r_12}-* $dial_canvas bind dial { upvar #0 mode mo # Angular-oriented dial: # Note: It would be better to get the center of the # dial as origin, instead of the picked point into the dial set orig_x %x set orig_y %x set orig_tempo $mo(tempo) } $dial_canvas bind dial { dial_adjust [expr %x - $orig_x] [expr %y - $orig_y] $orig_tempo } # the tempo range is 30-330 on my tk727 (saramito@imag.fr) # I don't known for the tk707 set tempo_min 30; # points to SLOW set tempo_max 265; # points to FAST set tempo_ini 120; # at initialization proc dial_adjust {x y orig_tempo} { global dial_value global dial_canvas global dial_radius global tempo_min; # the arrow points to SLOW global tempo_max; # the arrow points to FAST upvar #0 mode mo set pi 3.14159265358979323846; set pi_o4 [expr 0.25*$pi]; set pi_3o4 [expr 3*$pi_o4]; # vertical indicator -> medium tempo set delta_tempo [expr 0.5*($tempo_max - $tempo_min)]; set tempo_med [expr 0.5*($tempo_max + $tempo_min)]; if {($x == 0) && ($y == 0)} { # special case: when x = y = 0 # i.e. when mouse comes back to origin where we pick the dial # or also at the initialization call procedure # => angle is not computable with (x,y) # but by using $orig_tempo : set tempo_val $orig_tempo if {$tempo_val > $tempo_med} { # alpha is in the range ( pi/4, pi ( # ksi ( 0 , 1 ( set ksi [expr ($tempo_max-$tempo_val)/$delta_tempo] set alpha [expr $pi/4 + $ksi*(3*$pi/4)] } else { # alpha is in the range ) -pi, -pi/4 ) # ksi ) 0 , 1 ) set ksi [expr ($tempo_val-$tempo_min)/$delta_tempo] set alpha [expr - $pi/4 - $ksi*(3*$pi/4)] } } else { # the general case set alpha [expr atan2($x,$y)]; if {$alpha > 0} { # the mouse is on the right side of the origin -> fast if {$alpha < $pi_o4} { # set to the minimal value set tempo_val $tempo_max set alpha $pi_o4 } else { # alpha is in the range ( pi/4, pi ( # zeta ( 0 1 ( set zeta [expr ($alpha-$pi_o4)/$pi_3o4] set tempo_val [expr $tempo_max - $zeta*$delta_tempo] } } else { # alpha < 0 # mouse is on the right side of the origin -> fast if {$alpha > [expr -$pi_o4]} { # set tempo the minimal value set tempo_val $tempo_min set alpha -$pi_o4 } else { # alpha is in the range ) -pi, -pi/4 ) # zeta ) 0 1 ) set zeta [expr ($alpha+$pi)/$pi_3o4] set tempo_val [expr $tempo_med - $zeta*$delta_tempo ] } } } # make an integer set tempo_val [expr int($tempo_val)] # then we apply this : set mo(tempo) $tempo_val tk7_set_tempo $tempo_val ${dial_value} configure -text "TEMPO $tempo_val" # update the dial indicator set sin_alpha [expr sin($alpha)] set cos_alpha [expr cos($alpha)] set x_indic [expr 2.0 + $dial_radius * $sin_alpha] set y_indic [expr 1.2 + $dial_radius * $cos_alpha] ${dial_canvas} coords indicator ${x_indic}c ${y_indic}c 2c 1.2c } # Angular-oriented dial: set initial tempo and vertical direction dial_adjust 0 0 $tempo_ini midichan_set [expr $midi_channel + 1] ac_patternmode $tkxox(READ) ac_trackmode $tkxox(READ) ac_track 0 # ====================================================== # Action! # ====================================================== wm deiconify .; # after 10 play_loop; play_loop; tk707-0.8/score.fig0000644000175100017510000005004410142137110010753 00000000000000#FIG 3.2 Landscape Center Metric A4 100.00 Single -2 1200 2 6 7693 463 7859 705 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 7775 467 7775 665 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 7705 704 7728 707 7752 701 7774 689 7785 673 7777 659 7753 655 7728 660 7710 672 7702 681 7698 694 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 7 7 10 0 20 0.000 0 0 0 16 7779 468 7780 488 7785 504 7793 513 7820 535 7845 557 7855 580 7853 605 7837 646 7835 646 7849 611 7852 588 7838 561 7810 538 7780 524 7777 524 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 6899 463 7065 705 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 6980 467 6980 665 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 6911 704 6934 707 6959 701 6980 689 6991 673 6983 659 6960 655 6934 660 6916 672 6907 681 6904 694 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 7 7 10 0 20 0.000 0 0 0 16 6985 468 6986 488 6991 504 6999 513 7027 535 7051 557 7061 580 7059 605 7043 646 7041 646 7054 611 7058 588 7044 561 7016 538 6986 524 6982 524 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 6899 90 7065 335 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 6980 95 6980 294 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 6911 332 6934 333 6959 329 6980 317 6991 301 6983 287 6960 282 6934 288 6916 300 6907 308 6904 321 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 7 7 10 0 20 0.000 0 0 0 16 6985 96 6986 115 6991 131 6999 141 7027 163 7051 185 7061 205 7059 232 7043 273 7041 273 7054 239 7058 214 7044 189 7016 166 6986 151 6982 151 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 6903 781 7023 1085 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 6983 797 6983 1024 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 6911 1068 6936 1069 6961 1064 6981 1050 6994 1032 6986 1016 6962 1012 6936 1018 6916 1028 6907 1040 6904 1056 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 6903 1153 7023 1457 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 6983 1171 6983 1396 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 6911 1440 6936 1443 6961 1437 6981 1423 6994 1405 6986 1389 6962 1383 6936 1391 6916 1401 6907 1412 6904 1428 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 8363 463 8528 705 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 8443 467 8443 665 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 8375 704 8396 707 8420 701 8442 689 8453 673 8445 659 8421 655 8396 660 8380 672 8371 681 8368 694 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 7 7 10 0 20 0.000 0 0 0 16 8447 468 8448 488 8453 504 8461 513 8488 535 8515 557 8525 580 8523 605 8507 646 8505 646 8518 611 8522 588 8508 561 8477 538 8448 524 8444 524 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 8363 90 8528 335 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 8443 95 8443 294 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 8375 332 8396 333 8420 329 8442 317 8453 301 8445 287 8421 282 8396 288 8380 300 8371 308 8368 321 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 7 7 10 0 20 0.000 0 0 0 16 8447 96 8448 115 8453 131 8461 141 8488 163 8515 185 8525 205 8523 232 8507 273 8505 273 8518 239 8522 214 8508 189 8477 166 8448 151 8444 151 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 9071 463 9235 705 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 9151 467 9151 665 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 9083 704 9104 707 9128 701 9150 689 9161 673 9154 659 9129 655 9104 660 9088 672 9080 681 9076 694 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 7 7 10 0 20 0.000 0 0 0 16 9155 468 9156 488 9161 504 9169 513 9197 535 9221 557 9231 580 9229 605 9213 646 9212 646 9225 611 9228 588 9214 561 9185 538 9156 524 9153 524 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 9909 463 10075 705 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 9989 467 9989 665 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 9922 704 9942 707 9966 701 9988 689 9999 673 9992 659 9967 655 9942 660 9926 672 9918 681 9914 694 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 7 7 10 0 20 0.000 0 0 0 16 9994 468 9995 488 9999 504 10008 513 10035 535 10059 557 10071 580 10069 605 10052 646 10050 646 10065 611 10069 588 10052 561 10024 538 9995 524 9991 524 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 9913 1153 10031 1457 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 9992 1171 9992 1396 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 9922 1440 9944 1443 9968 1437 9990 1423 10003 1405 9995 1389 9970 1383 9944 1391 9926 1401 9918 1412 9914 1428 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 10577 463 10743 705 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 10659 467 10659 665 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 10591 704 10612 707 10636 701 10658 689 10669 673 10662 659 10637 655 10612 660 10596 672 10588 681 10584 694 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 7 7 10 0 20 0.000 0 0 0 16 10663 468 10664 488 10669 504 10677 513 10705 535 10729 557 10739 580 10737 605 10721 646 10720 646 10733 611 10736 588 10722 561 10693 538 10664 524 10661 524 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 5479 90 5645 335 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 5558 95 5558 294 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 5491 332 5512 333 5536 329 5558 317 5569 301 5561 287 5537 282 5512 288 5496 300 5487 308 5484 321 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 7 7 10 0 20 0.000 0 0 0 16 5563 96 5564 115 5569 131 5577 141 5604 163 5631 185 5641 205 5639 232 5621 273 5619 273 5634 239 5638 214 5622 189 5593 166 5564 151 5560 151 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 5479 463 5645 705 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 5558 467 5558 665 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 5491 704 5512 707 5536 701 5558 689 5569 673 5561 659 5537 655 5512 660 5496 672 5487 681 5484 694 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 7 7 10 0 20 0.000 0 0 0 16 5563 468 5564 488 5569 504 5577 513 5604 535 5631 557 5641 580 5639 605 5621 646 5619 646 5634 611 5638 588 5622 561 5593 538 5564 524 5560 524 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 6190 463 6354 705 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 6269 467 6269 665 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 6202 704 6223 707 6247 701 6269 689 6280 673 6272 659 6248 655 6223 660 6207 672 6198 681 6195 694 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 7 7 10 0 20 0.000 0 0 0 16 6274 468 6275 488 6280 504 6288 513 6315 535 6340 557 6350 580 6348 605 6332 646 6330 646 6343 611 6347 588 6333 561 6305 538 6275 524 6271 524 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 4685 463 4850 705 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 4764 467 4764 665 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 4697 704 4717 707 4743 701 4763 689 4775 673 4767 659 4743 655 4717 660 4702 672 4693 681 4689 694 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 7 7 10 0 20 0.000 0 0 0 16 4769 468 4770 488 4775 504 4783 513 4810 535 4834 557 4847 580 4845 605 4827 646 4825 646 4838 611 4844 588 4828 561 4800 538 4770 524 4766 524 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 3974 90 4139 335 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 4053 95 4053 294 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 3986 332 4006 333 4031 329 4052 317 4066 301 4056 287 4032 282 4006 288 3991 300 3982 308 3978 321 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 7 7 10 0 20 0.000 0 0 0 16 4060 96 4061 115 4066 131 4074 141 4101 163 4125 185 4136 205 4134 232 4118 273 4116 273 4129 239 4133 214 4119 189 4091 166 4061 151 4055 151 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 3974 463 4139 705 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 4053 467 4053 665 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 3986 704 4006 707 4031 701 4052 689 4066 673 4056 659 4032 655 4006 660 3991 672 3982 681 3978 694 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 7 7 10 0 20 0.000 0 0 0 16 4060 468 4061 488 4066 504 4074 513 4101 535 4125 557 4136 580 4134 605 4118 646 4116 646 4129 611 4133 588 4119 561 4091 538 4061 524 4055 524 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 4020 1153 4139 1457 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 4099 1171 4099 1396 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 4027 1440 4049 1443 4077 1437 4097 1423 4110 1405 4102 1389 4079 1383 4049 1391 4032 1401 4024 1412 4021 1428 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 3307 463 3470 705 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 3385 467 3385 665 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 3318 704 3339 707 3364 701 3384 689 3396 673 3388 659 3365 655 3339 660 3323 672 3314 681 3311 694 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 7 7 10 0 20 0.000 0 0 0 16 3390 468 3391 488 3396 504 3404 513 3432 535 3455 557 3466 580 3464 605 3448 646 3446 646 3459 611 3463 588 3449 561 3421 538 3391 524 3387 524 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 2469 463 2634 705 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 2550 467 2550 665 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 2481 704 2503 707 2528 701 2549 689 2560 673 2553 659 2528 655 2503 660 2485 672 2477 681 2473 694 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 7 7 10 0 20 0.000 0 0 0 16 2555 468 2556 488 2560 504 2569 513 2596 535 2620 557 2630 580 2629 605 2613 646 2611 646 2624 611 2628 588 2614 561 2586 538 2556 524 2552 524 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 2469 90 2634 335 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 2550 95 2550 294 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 2481 332 2503 333 2528 329 2549 317 2560 301 2553 287 2528 282 2503 288 2485 300 2477 308 2473 321 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 7 7 10 0 20 0.000 0 0 0 16 2555 96 2556 115 2560 131 2569 141 2596 163 2620 185 2630 205 2629 232 2613 273 2611 273 2624 239 2628 214 2614 189 2586 166 2556 151 2552 151 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 1802 463 1964 705 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 1880 467 1880 665 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 1813 704 1833 707 1859 701 1879 689 1890 673 1883 659 1860 655 1833 660 1817 672 1809 681 1806 694 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 7 7 10 0 20 0.000 0 0 0 16 1885 468 1886 488 1890 504 1899 513 1927 535 1950 557 1961 580 1959 605 1943 646 1941 646 1954 611 1958 588 1944 561 1916 538 1886 524 1882 524 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 1132 90 1296 335 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 1213 95 1213 294 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 1144 332 1164 333 1191 329 1212 317 1223 301 1216 287 1192 282 1164 288 1149 300 1140 308 1136 321 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 7 7 10 0 20 0.000 0 0 0 16 1218 96 1219 115 1223 131 1231 141 1259 163 1283 185 1293 205 1291 232 1276 273 1274 273 1286 239 1290 214 1277 189 1248 166 1219 151 1215 151 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 1132 463 1296 705 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 1213 467 1213 665 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 1144 704 1164 707 1191 701 1212 689 1223 673 1216 659 1192 655 1164 660 1149 672 1140 681 1136 694 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 7 7 10 0 20 0.000 0 0 0 16 1218 468 1219 488 1223 504 1231 513 1259 535 1283 557 1293 580 1291 605 1276 646 1274 646 1286 611 1290 588 1277 561 1248 538 1219 524 1215 524 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 1135 781 1255 1085 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 1216 797 1216 1024 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 1144 1068 1165 1069 1193 1064 1214 1050 1226 1032 1219 1016 1195 1012 1165 1018 1149 1028 1140 1040 1136 1056 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 1135 1153 1255 1457 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 1216 1171 1216 1396 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 1144 1440 1165 1443 1193 1437 1214 1423 1226 1405 1219 1389 1195 1383 1165 1391 1149 1401 1140 1412 1136 1428 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 12080 463 12247 728 2 1 0 1 11 11 10 0 -1 0.000 0 0 -1 0 0 2 12164 467 12164 665 3 3 0 1 11 11 10 0 20 0.000 0 0 0 16 12169 468 12170 488 12174 504 12182 513 12210 535 12234 557 12244 580 12243 605 12227 646 12225 646 12238 611 12242 588 12228 561 12199 538 12170 524 12166 524 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 11 11 10 0 20 0.000 0 0 0 11 12095 704 12115 707 12140 701 12163 689 12174 673 12167 659 12140 655 12115 660 12099 672 12091 681 12087 694 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 11328 463 11492 705 2 1 0 1 7 7 10 0 -1 0.000 0 0 -1 0 0 2 11408 467 11408 665 3 3 0 1 7 7 10 0 20 0.000 0 0 0 11 11339 704 11359 707 11387 701 11407 689 11418 673 11411 659 11388 655 11359 660 11343 672 11335 681 11332 694 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 7 7 10 0 20 0.000 0 0 0 16 11413 468 11414 488 11418 504 11427 513 11455 535 11478 557 11489 580 11487 605 11471 646 11469 646 11482 611 11486 588 11472 561 11444 538 11414 524 11410 524 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 11328 90 11495 359 2 1 0 1 11 11 10 0 -1 0.000 0 0 -1 0 0 2 11411 95 11411 294 3 3 0 1 11 11 10 0 20 0.000 0 0 0 16 11416 96 11417 115 11421 131 11430 141 11458 163 11481 185 11491 205 11489 232 11474 273 11472 273 11485 239 11489 214 11474 189 11446 166 11417 151 11413 151 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 11 11 10 0 20 0.000 0 0 0 11 11342 332 11362 333 11389 329 11410 317 11421 301 11414 287 11390 282 11362 288 11346 300 11338 308 11334 321 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 6 9907 90 10075 359 2 1 0 1 11 11 10 0 -1 0.000 0 0 -1 0 0 2 9989 95 9989 294 3 3 0 1 11 11 10 0 20 0.000 0 0 0 16 9994 96 9995 115 9999 131 10008 141 10035 163 10059 185 10071 205 10069 232 10052 273 10050 273 10065 239 10069 214 10052 189 10024 166 9995 151 9991 151 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 11 11 10 0 20 0.000 0 0 0 11 9922 332 9942 333 9966 329 9988 317 9999 301 9992 287 9967 282 9942 288 9926 300 9918 308 9914 321 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -6 2 2 0 1 19 19 100 0 20 0.000 0 0 -1 0 0 5 5225 39 9573 39 9573 359 5225 359 5225 39 2 1 0 1 7 -1 10 0 -1 0.000 0 0 -1 0 0 2 2555 445 1210 445 2 1 0 1 7 -1 10 0 -1 0.000 0 0 -1 0 0 2 2558 70 1214 70 2 1 0 1 7 -1 10 0 -1 0.000 0 0 -1 0 0 2 4064 70 2553 70 2 1 0 1 7 -1 10 0 -1 0.000 0 0 -1 0 0 2 4795 445 3390 445 2 1 0 1 7 -1 10 0 -1 0.000 0 0 -1 0 0 2 6968 445 5562 445 2 1 0 1 7 -1 10 0 -1 0.000 0 0 -1 0 0 2 8457 72 5565 72 2 1 0 1 7 -1 10 0 -1 0.000 0 0 -1 0 0 2 9158 449 7753 449 2 1 0 1 7 -1 10 0 -1 0.000 0 0 -1 0 0 2 11423 447 9988 447 2 1 0 1 11 -1 10 0 -1 0.000 0 0 -1 0 0 2 13022 450 12170 445 2 1 0 1 11 -1 10 0 -1 0.000 0 0 -1 0 0 2 13015 68 9989 68 2 2 0 1 19 19 100 0 20 0.000 0 0 -1 0 0 5 9615 39 13011 39 13011 364 9615 364 9615 39 2 2 0 1 19 19 100 0 20 0.000 0 0 -1 0 0 5 60 781 6604 781 6604 1125 60 1125 60 781 2 2 0 1 19 19 100 0 20 0.000 0 0 -1 0 0 5 60 1157 3570 1157 3570 1485 60 1485 60 1157 2 2 0 1 19 19 100 0 20 0.000 0 0 -1 0 0 5 3615 1157 6604 1157 6604 1485 3615 1485 3615 1157 2 2 0 1 19 19 100 0 20 0.000 0 0 -1 0 0 5 3005 401 5184 401 5184 749 3005 749 3005 401 2 2 0 1 19 19 100 0 20 0.000 0 0 -1 0 0 5 6642 781 13020 781 13020 1125 6642 1125 6642 781 2 2 0 1 19 19 100 0 20 0.000 0 0 -1 0 0 5 6640 1157 9573 1157 9573 1485 6640 1485 6640 1157 2 2 0 1 19 19 100 0 20 0.000 0 0 -1 0 0 5 9617 401 11746 401 11746 749 9617 749 9617 401 2 2 0 1 19 19 100 0 20 0.000 0 0 -1 0 0 5 9619 1157 13020 1157 13020 1485 9619 1485 9619 1157 2 2 0 1 19 19 100 0 20 0.000 0 0 -1 0 0 5 11786 401 13019 401 13019 749 11786 749 11786 401 2 2 0 1 19 19 100 0 20 0.000 0 0 -1 0 0 5 60 45 5184 45 5184 360 60 360 60 45 2 2 0 1 11 7 999 0 -1 0.000 0 0 -1 0 0 5 795 45 12499 45 12499 360 795 360 795 45 2 2 0 1 19 19 100 0 20 0.000 0 0 -1 0 0 5 5230 401 7356 401 7356 749 5230 749 5230 401 2 2 0 1 19 19 100 0 20 0.000 0 0 -1 0 0 5 7395 401 9573 401 9573 749 7395 749 7395 401 2 2 0 1 19 19 100 0 20 0.000 0 0 -1 0 0 5 60 401 2968 401 2968 749 60 749 60 401 2 2 0 1 2 2 999 0 20 0.000 0 0 -1 0 0 5 0 0 13095 0 13095 1530 0 1530 0 0 3 2 0 1 7 -1 10 0 -1 0.000 0 0 0 5 1212 70 1174 73 1142 83 1099 103 1027 163 0.000 -1.000 -1.000 -1.000 0.000 3 2 0 1 7 -1 10 0 -1 0.000 0 0 0 5 1213 442 1175 445 1143 455 1100 477 1028 537 0.000 -1.000 -1.000 -1.000 0.000 3 2 0 1 7 -1 10 0 -1 0.000 0 0 0 5 2552 442 2588 445 2620 455 2662 477 2734 537 0.000 -1.000 -1.000 -1.000 0.000 3 2 0 1 7 -1 10 0 -1 0.000 0 0 0 5 4052 72 4091 76 4123 86 4165 105 4237 164 0.000 -1.000 -1.000 -1.000 0.000 3 2 0 1 7 -1 10 0 -1 0.000 0 0 0 5 4789 445 4824 449 4859 458 4901 481 4973 541 0.000 -1.000 -1.000 -1.000 0.000 3 2 0 1 7 -1 10 0 -1 0.000 0 0 0 5 3393 442 3357 445 3325 455 3283 477 3209 537 0.000 -1.000 -1.000 -1.000 0.000 3 2 0 1 7 -1 10 0 -1 0.000 0 0 0 5 5562 441 5526 445 5494 454 5452 477 5380 536 0.000 -1.000 -1.000 -1.000 0.000 3 2 0 1 7 -1 10 0 -1 0.000 0 0 0 5 5564 71 5528 74 5496 84 5454 104 5382 163 0.000 -1.000 -1.000 -1.000 0.000 3 2 0 1 7 -1 10 0 -1 0.000 0 0 0 5 6970 445 7007 448 7038 457 7081 480 7153 540 0.000 -1.000 -1.000 -1.000 0.000 3 2 0 1 7 -1 10 0 -1 0.000 0 0 0 5 8455 74 8490 77 8525 88 8567 108 8639 167 0.000 -1.000 -1.000 -1.000 0.000 3 2 0 1 7 -1 10 0 -1 0.000 0 0 0 5 7783 445 7747 448 7715 457 7671 480 7599 540 0.000 -1.000 -1.000 -1.000 0.000 3 2 0 1 7 -1 10 0 -1 0.000 0 0 0 5 9153 448 9188 451 9221 461 9263 483 9337 543 0.000 -1.000 -1.000 -1.000 0.000 3 2 0 1 7 -1 10 0 -1 0.000 0 0 0 5 11418 445 11455 449 11487 458 11529 481 11601 541 0.000 -1.000 -1.000 -1.000 0.000 3 2 0 1 11 -1 10 0 -1 0.000 0 0 0 5 12171 444 12132 447 12100 456 12057 479 11986 538 0.000 -1.000 -1.000 -1.000 0.000 3 2 0 1 11 -1 10 0 -1 0.000 0 0 0 5 9995 72 9959 76 9926 86 9884 105 9812 164 0.000 -1.000 -1.000 -1.000 0.000 3 2 0 1 7 -1 10 0 -1 0.000 0 0 0 5 9993 445 9957 448 9924 457 9882 480 9810 540 0.000 -1.000 -1.000 -1.000 0.000 tk707-0.8/score_fig2tcl.sh0000644000175100017510000001127610142137110012236 00000000000000# ----------------------------------------------------- # fig2tcl wrapper fot tk707 score map # ----------------------------------------------------- # ----------------------------------------------------- # files # ----------------------------------------------------- arg=$1 dirname=` expr $arg : '\(.*\)/.*' \| \. ` #echo "! \"$dirname\" as dirname." basename=`expr $arg : '.*/\(.*\)' \| $arg ` #echo "! \"$basename\" as basename." name=` expr $basename : '\(.*\).fig' \| $basename` #echo "! \"$name\" as name." fig_input="${dirname}/${name}.fig" #echo "! \"$fig_input\" as input." tcl_defs_output="${dirname}/${name}_defs.tcl" tcl_output="${dirname}/${name}.tcl" tmp="${name}_tmp$$.out" /bin/rm -f $tcl_defs_output $tcl_output # ----------------------------------------------------- # parameters # ----------------------------------------------------- #magnification=1.23; #ok pour scaling=1 #magnification=1.25; #ok pour scaling=0.75 magnification=1.15; #ok pour scaling=0.5 window_hierarchy='$note_score.score' side="left" color_bg='$tkxox(col_def_bg)' # ----------------------------------------------------- # convert .fig in tcl/tk # ----------------------------------------------------- fig2dev -L tk -m $magnification < $fig_input > $tmp status=$? if test $status -ne 0; then echo "fig2dev: command failed." /bin/rm -f $tmp exit $status fi # ----------------------------------------------------- # get size from line such as: # canvas .c -width 9.43i -height 1.00i -bg ivory # ----------------------------------------------------- width_in_inch=` grep "^canvas" $tmp | awk '{print $4}' | sed -e 's/i//' ` height_in_inch=`grep "^canvas" $tmp | awk '{print $6}' | sed -e 's/i//' ` # ----------------------------------------------------- # if failed, try the new fig2dev output : # set xfigCanvas [canvas .c -width 6.90i -height 0.82i] # ----------------------------------------------------- if test x"$width_in_inch" = x"" -o x"$height_in_inch" = x""; then width_in_inch=` grep "^set xfigCanvas" $tmp | awk '{print $6}' | sed -e 's/i//' ` height_in_inch=`grep "^set xfigCanvas" $tmp | awk '{print $8}' | sed -e 's/i//' -e 's/\]//' ` fi echo "width_in_inch $width_in_inch" echo "height_in_inch $height_in_inch" if test x"$width_in_inch" = x"" -o x"$height_in_inch" = x""; then echo "title_fig2tcl: failed to catch bounding box" >&2 exit 1 fi # ----------------------------------------------------- # # get bounding box such that # $xfigCanvas config -xscrollincrement 1p -yscrollincrement 1p # $xfigCanvas xview scroll 22 u # $xfigCanvas yview scroll 28 u scroll_x_in_point=` grep "xview" $tmp | awk '{print $4}' | sed -e 's/i//' ` scroll_y_in_point=` grep "yview" $tmp | awk '{print $4}' | sed -e 's/i//' ` # ---------------------------------------------------------------------- # generates the defs output # ---------------------------------------------------------------------- echo "# do not edit." > $tcl_output echo "# file automatically generated by:" >> $tcl_defs_output echo "# $0 $*" >> $tcl_defs_output echo "set ${name}_width_in_inch ${width_in_inch}" >> $tcl_defs_output echo "set ${name}_height_in_inch ${height_in_inch}" >> $tcl_defs_output echo "set ${name}_scroll_x_in_point ${scroll_x_in_point}" >> $tcl_defs_output echo "set ${name}_scroll_y_in_point ${scroll_y_in_point}" >> $tcl_defs_output echo "! \"$tcl_defs_output\" created." # ---------------------------------------------------------------------- # generates the fig output # ---------------------------------------------------------------------- echo "# do not edit." > $tcl_output echo "# file automatically generated by:" >> $tcl_output echo "# $0 $*" >> $tcl_output echo "" >> $tcl_output echo "set ${name} ${window_hierarchy}" >> $tcl_output echo "" >> $tcl_output echo "canvas \${${name}} -width \${${name}_width_in_inch}i -height \${${name}_height_in_inch}i \\" >> $tcl_output echo " -bg ${color_bg} \\" >> $tcl_output echo " -highlightthickness 0" >> $tcl_output echo "" >> $tcl_output echo "\${${name}} config -xscrollincrement 1p -yscrollincrement 1p" >> $tcl_output echo "\${${name}} xview scroll \${${name}_scroll_x_in_point} u" >> $tcl_output echo "\${${name}} yview scroll \${${name}_scroll_y_in_point} u" >> $tcl_output echo "" >> $tcl_output echo "pack \${${name}} -side ${side}" >> $tcl_output echo "" >> $tcl_output echo "# The xfig objects begin here" >> $tcl_output cat $tmp | \ sed \ -e '1,/# The xfig objects begin here/d' \ -e "s/xfigCanvas/\{${name}\}/g" \ -e '/focus/d' \ -e 's/#ffffff/$tkxox(score_active_note)/g' \ -e 's/#87cfff/$tkxox(score_passive_note)/g' \ -e 's/#b00000/$tkxox(color_score_bg)/g' \ -e 's/#00ff00/$tkxox(col_def_bg)/g' \ >> $tcl_output echo "! \"$tcl_output\" created." /bin/rm -f $tmp tk707-0.8/title.fig0000644000175100017510000001034110142137110010755 00000000000000#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 1 1 0 1 5 2 1 0 20 0.000 1 0.0000 7990 522 137 261 7990 522 8127 522 1 2 0 1 5 6 10 0 20 0.000 1 0.0000 7995 515 284 371 7711 515 8279 515 1 4 0 1 4 4 50 0 20 0.000 1 0.0000 4004 719 179 179 3825 719 4183 719 1 4 0 1 4 2 9 0 20 0.000 1 0.0000 4000 719 121 121 3879 719 4121 719 1 4 0 1 4 4 50 0 20 0.000 1 0.0000 2943 721 179 179 2764 721 3122 721 1 4 0 1 4 2 9 0 20 0.000 1 0.0000 2939 721 121 121 2818 721 3060 721 2 2 0 1 2 2 999 0 20 0.000 0 0 -1 0 0 5 0 0 9000 0 9000 1050 0 1050 0 0 2 3 0 1 5 6 100 0 20 0.000 0 0 -1 0 0 7 6326 507 6604 870 6797 870 6500 507 6757 166 6578 166 6326 507 2 2 0 1 5 6 100 0 20 0.000 0 0 -1 0 0 5 6833 543 7111 543 7111 652 6833 652 6833 543 2 3 0 1 4 1 100 0 20 0.000 0 0 -1 0 0 10 933 688 1017 548 1092 548 967 730 967 892 892 892 892 729 780 548 850 548 933 688 2 3 0 1 4 1 100 0 20 0.000 0 0 -1 0 0 10 1113 548 1113 604 1220 604 1220 892 1296 892 1294 603 1401 603 1401 548 1113 548 1113 548 2 2 0 1 5 6 100 0 20 0.000 0 0 -1 0 0 5 6158 162 6322 162 6322 870 6158 870 6158 162 2 3 0 1 5 6 1 0 20 0.000 0 0 -1 0 0 10 5500 162 5500 270 5728 270 5728 870 5890 870 5890 274 6110 274 6110 162 5500 162 5500 162 2 3 0 1 5 6 100 0 20 0.000 0 0 -1 0 0 8 8320 284 8659 284 8377 870 8569 870 8830 290 8830 162 8320 162 8320 284 2 3 0 1 5 6 100 0 20 0.000 0 0 -1 0 0 8 7153 286 7492 286 7210 870 7402 870 7666 292 7664 162 7153 162 7153 286 2 3 0 1 4 1 100 0 20 0.000 0 0 -1 0 0 13 4448 892 4691 892 4692 832 4523 833 4524 741 4675 741 4676 692 4522 692 4523 604 4689 603 4689 548 4448 548 4448 892 2 3 0 1 4 1 100 0 20 0.000 0 0 -1 0 0 28 4744 548 4859 548 4897 548 4926 558 4948 570 4965 592 4972 626 4972 665 4953 694 4939 706 4918 724 4877 738 4974 892 4886 892 4785 716 4781 702 4833 702 4860 695 4883 678 4905 637 4888 608 4860 597 4778 597 4781 892 4716 892 4714 692 4713 548 4744 548 2 3 0 1 4 1 100 0 20 0.000 0 0 -1 0 0 26 3581 548 3696 548 3734 548 3763 567 3785 579 3802 601 3809 635 3809 674 3790 703 3777 721 3755 739 3700 758 3619 761 3618 711 3670 711 3714 699 3738 676 3742 646 3725 617 3697 606 3615 606 3618 892 3552 892 3552 685 3552 548 3581 548 2 3 0 1 4 1 1 0 20 0.000 0 0 -1 0 0 14 3154 892 3213 892 3213 637 3298 892 3368 892 3454 633 3455 892 3525 892 3525 548 3421 548 3337 792 3254 548 3155 548 3154 892 2 3 0 1 4 1 100 0 20 0.000 0 0 -1 0 0 14 1776 892 1835 892 1835 636 1920 892 1990 892 2076 632 2077 892 2147 892 2147 548 2043 548 1959 791 1876 548 1777 548 1776 892 2 3 0 1 4 1 100 0 20 0.000 0 0 -1 0 0 13 1423 892 1501 892 1501 741 1665 742 1665 892 1745 892 1745 548 1660 548 1661 691 1501 691 1502 548 1422 548 1423 892 2 3 0 1 4 1 100 0 20 0.000 0 0 -1 0 0 25 334 548 363 562 385 574 402 596 409 630 409 669 390 698 376 710 355 728 314 742 411 892 323 892 222 720 218 706 270 706 297 699 320 682 342 641 325 612 297 601 215 601 218 892 150 892 150 547 334 548 2 3 0 1 4 1 100 0 20 0.000 0 0 -1 0 0 14 437 548 437 892 505 892 507 735 678 735 679 892 759 892 759 548 675 548 675 694 506 694 506 548 429 548 434 548 3 3 0 1 4 1 100 0 20 0.000 0 0 0 27 2715 567 2681 552 2629 545 2561 551 2483 596 2440 675 2440 771 2474 827 2538 871 2590 886 2651 887 2718 878 2734 858 2729 833 2695 833 2659 838 2597 835 2550 812 2513 771 2503 727 2508 678 2531 638 2585 610 2633 600 2676 605 2718 617 2741 595 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 3 3 0 1 4 1 100 0 20 0.000 0 0 0 40 4377 549 4328 544 4287 549 4259 557 4236 576 4219 603 4218 637 4223 666 4249 699 4271 716 4289 730 4319 759 4338 774 4347 795 4341 820 4322 831 4283 833 4249 828 4222 821 4205 840 4221 871 4252 888 4304 892 4351 890 4396 879 4422 848 4430 810 4422 769 4397 741 4378 724 4352 699 4317 675 4296 647 4297 621 4314 606 4351 601 4374 606 4401 611 4418 590 4413 568 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 tk707-0.8/title_fig2tcl.sh0000644000175100017510000001126510142137110012242 00000000000000# ----------------------------------------------------- # fig2tcl wrapper fot tk707 title map # ----------------------------------------------------- # ----------------------------------------------------- # files # ----------------------------------------------------- arg=$1 dirname=` expr $arg : '\(.*\)/.*' \| \. ` #echo "! \"$dirname\" as dirname." basename=`expr $arg : '.*/\(.*\)' \| $arg ` #echo "! \"$basename\" as basename." name=` expr $basename : '\(.*\).fig' \| $basename` #echo "! \"$name\" as name." fig_input="${dirname}/${name}.fig" #echo "! \"$fig_input\" as input." tcl_defs_output="${dirname}/${name}_defs.tcl" tcl_output="${dirname}/${name}.tcl" tmp="${name}_tmp$$.out" /bin/rm -f $tcl_defs_output $tcl_output # ----------------------------------------------------- # parameters # ----------------------------------------------------- #magnification=1.23; #ok pour scaling=1 #magnification=1.25; #ok pour scaling=0.75 magnification=1.0; #ok pour scaling=0.5 window_hierarchy='$vcunit.title' side="top" color_bg='$tkxox(col_def_bg)' # ----------------------------------------------------- # convert .fig in tcl/tk # ----------------------------------------------------- fig2dev -L tk -m $magnification < $fig_input > $tmp status=$? if test $status -ne 0; then echo "fig2dev: command failed." /bin/rm -f $tmp exit $status fi # ----------------------------------------------------- # get size from line such as: # canvas .c -width 9.43i -height 1.00i -bg ivory # ----------------------------------------------------- width_in_inch=` grep "^canvas" $tmp | awk '{print $4}' | sed -e 's/i//' ` height_in_inch=`grep "^canvas" $tmp | awk '{print $6}' | sed -e 's/i//' ` # ----------------------------------------------------- # if failed, try the new fig2dev output : # set xfigCanvas [canvas .c -width 6.90i -height 0.82i] # ----------------------------------------------------- if test x"$width_in_inch" = x"" -o x"$height_in_inch" = x""; then width_in_inch=` grep "^set xfigCanvas" $tmp | awk '{print $6}' | sed -e 's/i//' ` height_in_inch=`grep "^set xfigCanvas" $tmp | awk '{print $8}' | sed -e 's/i//' -e 's/\]//' ` fi #echo "width_in_inch $width_in_inch" #echo "height_in_inch $height_in_inch" if test x"$width_in_inch" = x"" -o x"$height_in_inch" = x""; then echo "title_fig2tcl: failed to catch bounding box" >&2 exit 1 fi # # get bounding box such that # $xfigCanvas config -xscrollincrement 1p -yscrollincrement 1p # $xfigCanvas xview scroll 22 u # $xfigCanvas yview scroll 28 u scroll_x_in_point=` grep "xview" $tmp | awk '{print $4}' | sed -e 's/i//' ` scroll_y_in_point=` grep "yview" $tmp | awk '{print $4}' | sed -e 's/i//' ` # ---------------------------------------------------------------------- # generates the defs output # ---------------------------------------------------------------------- echo "# do not edit." > $tcl_output echo "# file automatically generated by:" >> $tcl_defs_output echo "# $0 $*" >> $tcl_defs_output echo "set ${name}_width_in_inch ${width_in_inch}" >> $tcl_defs_output echo "set ${name}_height_in_inch ${height_in_inch}" >> $tcl_defs_output echo "set ${name}_scroll_x_in_point ${scroll_x_in_point}" >> $tcl_defs_output echo "set ${name}_scroll_y_in_point ${scroll_y_in_point}" >> $tcl_defs_output echo "! \"$tcl_defs_output\" created." # ---------------------------------------------------------------------- # generates the fig output # ---------------------------------------------------------------------- echo "# do not edit." > $tcl_output echo "# file automatically generated by:" >> $tcl_output echo "# $0 $*" >> $tcl_output echo "" >> $tcl_output echo "set ${name} ${window_hierarchy}" >> $tcl_output echo "" >> $tcl_output echo "canvas \${${name}} -width \${${name}_width_in_inch}i -height \${${name}_height_in_inch}i \\" >> $tcl_output echo " -bg ${color_bg} \\" >> $tcl_output echo " -highlightthickness 0" >> $tcl_output echo "" >> $tcl_output echo "\${${name}} config -xscrollincrement 1p -yscrollincrement 1p" >> $tcl_output echo "\${${name}} xview scroll \${${name}_scroll_x_in_point} u" >> $tcl_output echo "\${${name}} yview scroll \${${name}_scroll_y_in_point} u" >> $tcl_output echo "" >> $tcl_output echo "pack \${${name}} -side ${side}" >> $tcl_output echo "" >> $tcl_output echo "# The xfig objects begin here" >> $tcl_output cat $tmp | \ sed \ -e '1,/# The xfig objects begin here/d' \ -e "s/xfigCanvas/\{${name}\}/g" \ -e '/focus/d' \ -e 's/#0000ff/$tkxox(color_title_fg)/g' \ -e 's/#ff0000/$tkxox(color_title_fg)/g' \ -e 's/#ffff00/$tkxox(color_title_logo_fg)/g' \ -e 's/#ff00ff/$tkxox(color_title_logo_fg)/g' \ -e 's/#00ff00/$tkxox(color_title_bg)/g' \ >> $tcl_output echo "! \"$tcl_output\" created." /bin/rm -f $tmp tk707-0.8/test_02.dat0000644000175100017510000002501210142137110011120 00000000000000####################### MACHINE GENERATED - DO NOT EDIT ####################### #### TK707 Data file test_02.dat generated by TK707-0.2 ############################################################################### { { { { { 1 14 } { } { 12 } { } { 4 12 } { } { 1 12 } { } { 1 12 } { } { 12 } { } { 4 12 } { } { 1 12 } { } } { { 1 5 15 14 } { 1 8 12 } { 1 5 12 } { 1 8 12 } { 1 5 12 } { 1 8 12 } { 1 5 12 } { 1 8 12 } { 1 5 12 } { 1 8 12 } { 1 5 12 } { 1 8 12 } { 1 5 12 } { 1 8 12 } { 1 5 12 } { 1 8 12 } } { { 8 10 14 15 1 } { 8 12 } { 8 10 16 } { 8 12 } { 8 10 14 1 } { 8 12 } { 8 10 16 } { 8 12 } { 8 10 14 1 } { 8 12 } { 8 10 16 } { 8 12 } { 8 10 14 1 } { 8 12 } { 8 10 16 } { 8 12 1 } } { { 1 15 16 5 14 } { } { 12 } { } { 12 } { } { 12 } { } { 12 } { } { } { } { } { } { } { } } { { 1 3 5 9 13 15 } { 3 5 13 } { 1 5 13 } { 5 } { 1 3 5 9 13 } { 3 5 13 } { 1 5 13 } { 5 } { 1 3 5 9 13 } { 3 5 13 } { 1 5 13 } { 5 } { 1 3 5 9 13 } { 3 5 13 } { 1 5 13 } { 5 } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { 1 } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { 1 7 13 16 15 } { 3 7 16 } { 1 3 7 10 13 16 } { 13 16 } { 1 3 7 10 16 } { 13 16 } { 1 3 7 16 } { 1 3 7 10 13 16 } { 3 10 13 16 } { 1 7 10 13 16 } { 3 7 13 16 } { 1 3 10 } { 3 7 10 13 16 } { 1 10 13 16 } { 3 7 13 } { 3 13 16 } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { 12 } { } { } { } { 12 } { } { } { } { 12 } { } { } { } { 12 } { } { } { } } { { 12 } { } { } { } { 12 } { } { } { } { 12 } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { 12 1 16 } { } { 16 9 } { 4 } { 12 16 5 } { } { 16 9 } { 10 } { 12 1 16 } { } { 16 9 } { 4 } { 12 16 } { 5 } { 16 9 5 } { 4 } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } } { { 0 0 0 0 1 2 17 0 3 } { 0 0 0 0 1 2 1 1 } { 0 0 0 0 } { 32 33 48 48 48 48 } } } tk707-0.8/test_05.dat0000644000175100017510000002537410142137110011136 00000000000000####################### MACHINE GENERATED - DO NOT EDIT ####################### #### TK707 Data file test_05.dat generated by TK707-0.5 ############################################################################### { { { { { 1 14 } { } { 12 } { } { 4 12 } { } { 1 12 } { } { 1 12 } { } { 12 } { } { 4 12 } { } { 1 12 } { } } { { 1 5 15 14 } { 1 8 12 } { 1 5 12 } { 1 8 12 } { 1 5 12 } { 1 8 12 } { 1 5 12 } { 1 8 12 } { 1 5 12 } { 1 8 12 } { 1 5 12 } { 1 8 12 } { 1 5 12 } { 1 8 12 } { 1 5 12 } { 1 8 12 } } { { 8 10 14 15 1 } { 8 12 } { 8 10 16 } { 8 12 } { 8 10 14 1 } { 8 12 } { 8 10 16 } { 8 12 } { 8 10 14 1 } { 8 12 } { 8 10 16 } { 8 12 } { 8 10 14 1 } { 8 12 } { 8 10 16 } { 8 12 1 } } { { 1 15 16 5 14 } { } { 12 } { } { 12 } { } { 12 } { } { 12 } { } { } { } { } { } { } { } } { { 1 3 5 9 13 15 } { 3 5 13 } { 1 5 13 } { 5 } { 1 3 5 9 13 } { 3 5 13 } { 1 5 13 } { 5 } { 1 3 5 9 13 } { 3 5 13 } { 1 5 13 } { 5 } { 1 3 5 9 13 } { 3 5 13 } { 1 5 13 } { 5 } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { 1 } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { 14 1 } { } { 12 } { } { 12 4 } { } { 12 1 } { } { 12 1 } { } { 12 } { } { 12 4 } { } { 12 } { } } { { 1 7 13 16 15 } { 3 7 16 } { 1 3 7 10 13 16 } { 13 16 } { 1 3 7 10 16 } { 13 16 } { 1 3 7 16 } { 1 3 7 10 13 16 } { 3 10 13 16 } { 1 7 10 13 16 } { 3 7 13 16 } { 1 3 10 } { 3 7 10 13 16 } { 1 10 13 16 } { 3 7 13 } { 3 13 16 } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { 12 } { } { } { } { 12 } { } { } { } { 12 } { } { } { } { 12 } { } { } { } } { { 12 } { } { } { } { 12 } { } { } { } { 12 } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { 12 1 16 } { } { 16 9 } { 4 } { 12 16 5 } { } { 16 9 } { 10 } { 12 1 16 } { } { 16 9 } { 4 } { 12 16 } { 5 } { 16 9 5 } { 4 } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } } { {16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16} {12 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16} {16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16} {16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16} } { { 0 0 0 0 1 2 17 0 3 } { 0 0 0 0 1 2 1 1 } { 0 16 0 16 } { 32 33 48 48 48 48 } } } tk707-0.8/test_06.dat0000644000175100017510000002556610142137110011142 00000000000000####################### MACHINE GENERATED - DO NOT EDIT ####################### #### TK707 Data file test_06.dat generated by TK707-0.6 ############################################################################### { { { { { 14 1 } { } { 12 } { } { 12 4 } { } { 12 1 } { } { 12 1 } { } { 12 } { } { 12 4 } { } { 12 1 } { } } { { 14 15 5 1 } { 12 8 1 } { 12 5 1 } { 12 8 1 } { 12 5 1 } { 12 8 1 } { 12 5 1 } { 12 8 1 } { 12 5 1 } { 12 8 1 } { 12 5 1 } { 12 8 1 } { 12 5 1 } { 12 8 1 } { 12 5 1 } { 12 8 1 } } { { 1 15 14 10 8 } { 12 8 } { 16 10 8 } { 12 8 } { 1 14 10 8 } { 12 8 } { 16 10 8 } { 12 8 } { 1 14 10 8 } { 12 8 } { 16 10 8 } { 12 8 } { 1 14 10 8 } { 12 8 } { 16 10 8 } { 1 12 8 } } { { 14 5 16 15 1 } { } { 12 } { } { 12 } { } { 12 } { } { 12 } { } { } { } { } { } { } { } } { { 15 13 9 5 3 1 } { 13 5 3 } { 13 5 1 } { 5 } { 13 9 5 3 1 } { 13 5 3 } { 13 5 1 } { 5 } { 13 9 5 3 1 } { 13 5 3 } { 13 5 1 } { 5 } { 13 9 5 3 1 } { 13 5 3 } { 13 5 1 } { 5 } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { 1 } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { 15 16 13 7 1 } { 16 7 3 } { 16 13 10 7 3 1 } { 16 13 } { 16 10 7 3 1 } { 16 13 } { 16 7 3 1 } { 16 13 10 7 3 1 } { 16 13 10 3 } { 16 13 10 7 1 } { 16 13 7 3 } { 10 3 1 } { 16 13 10 7 3 } { 16 13 10 1 } { 13 7 3 } { 16 13 3 } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { 12 } { } { } { } { 12 } { } { } { } { 12 } { } { } { } { 12 } { } { } { } } { { 12 } { } { } { } { 12 } { } { } { } { 12 } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { 16 1 12 } { } { 9 16 } { 4 } { 5 16 12 } { } { 9 16 } { 10 } { 16 1 12 } { } { 9 16 } { 4 } { 16 12 } { 5 } { 5 9 16 } { 4 } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } } { {16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16} {16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16} {16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16} {16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16} } { {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} {0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} } { { 0 0 0 0 1 2 17 0 3 } { 0 0 0 0 1 2 1 1 } { 0 0 0 0 } { 32 33 48 48 48 48 } } } tk707-0.8/tst_scale.dat0000644000175100017510000002445310142137110011631 00000000000000####################### MACHINE GENERATED - DO NOT EDIT ####################### #### TK707 Data file tst_scale.dat generated by TK707-0.6 ############################################################################### { { { { { 9 } { } { } { } { 9 } { } { } { } { 9 } { } { } { } { 9 } { } { } { } } { { 9 } { } { } { } { } { } { } { } { 9 } { } { } { } { } { } { } { } } { { 9 } { } { } { 9 } { } { } { 9 } { } { } { 9 } { } { } { } { } { } { } } { { 9 } { } { } { } { } { } { 9 } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } } { {16 16 12 12 16 16 16 16 16 16 16 16 16 16 16 16} {16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16} {16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16} {16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16} } { {0 1 2 3 1 1 1 1 1 1 1 1 1 1 1 1} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1} {1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1} } { { 0 1 1 2 3 3 } { } { } { } } } tk707-0.8/son-montuno.dat0000644000175100017510000005145610142137110012147 00000000000000####################### MACHINE GENERATED - DO NOT EDIT ####################### #### TK707 Data file generated by TK707-0.7 ############################################################################### { { { { { 11 } { } { } { } { 9 3 10 } { } { } { } { 11 9 } { } { } { } { 4 10 } { } { 4 } { } } { { 11 9 } { } { } { } { 3 10 } { } { 9 5 } { } { 11 5 } { } { } { } { 9 4 10 } { } { 4 } { } } { { 11 } { } { } { } { 4 } { } { 9 10 } { } { 4 } { } { } { } { } { } { } { } } { { 11 4 9 } { } { } { } { 4 } { } { 10 } { } { 4 } { } { } { } { } { } { } { } } { { 9 4 11 } { } { } { } { 4 } { } { 10 } { } { 4 } { 9 } { } { } { } { } { } { } } { { 11 5 } { } { } { } { 5 } { } { 9 10 } { } { 5 } { } { } { } { } { } { } { } } { { 11 5 } { } { } { } { 3 9 10 } { } { } { } { 9 11 } { } { } { } { 4 10 } { } { 4 } { } } { { 11 } { } { } { } { 9 5 10 } { } { } { } { 9 11 5 } { } { } { } { 10 } { } { } { } } { { 9 11 5 } { } { } { } { } { } { 9 5 } { } { } { } { } { } { 9 5 } { } { } { } } { { 5 9 11 } { } { 5 } { 10 } { 4 } { } { 4 9 11 } { } { 4 } { 10 } { 3 } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } } { { { { 0 } { } { } { } { 0 2 0 } { } { } { } { 0 0 } { } { } { } { 2 0 } { } { 2 } { } } { { 0 0 } { } { } { } { 2 0 } { } { 0 2 } { } { 0 2 } { } { } { } { 0 2 0 } { } { 2 } { } } { { 0 } { } { } { } { 5 } { } { 0 0 } { } { 2 } { } { } { } { } { } { } { } } { { 0 2 0 } { } { } { } { 2 } { } { 0 } { } { 2 } { } { } { } { } { } { } { } } { { 0 2 0 } { } { } { } { 2 } { } { 0 } { } { 2 } { 0 } { } { } { } { } { } { } } { { 0 2 } { } { } { } { 2 } { } { 0 0 } { } { 2 } { } { } { } { } { } { } { } } { { 0 2 } { } { } { } { 2 0 0 } { } { } { } { 0 0 } { } { } { } { 2 0 } { } { 2 } { } } { { 0 } { } { } { } { 0 2 0 } { } { } { } { 0 0 2 } { } { } { } { 0 } { } { } { } } { { 0 0 4 } { } { } { } { } { } { 0 4 } { } { } { } { } { } { 0 4 } { } { } { } } { { 0 0 0 } { } { 0 } { 0 } { 0 } { } { 0 0 0 } { } { 0 } { 0 } { 0 } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } } { { {16 0 2 0 {}} {16 0 2 0 {}} {12 3 4 0 {}} {12 3 4 0 {}} {12 3 4 0 {}} {12 3 4 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {12 3 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} } { {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} } { {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} } { {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} } } { { 6 1 0 1 0 1 0 1 0 1 0 1 2 3 4 5 6 1 0 1 0 1 0 1 2 3 4 5 6 1 0 1 0 1 0 1 7 8 } { } { } { } } } tk707-0.8/tk707.10000644000175100017510000000374310142137110010113 00000000000000.\" Hey, EMACS: -*- nroff -*- .TH TK707 1 "March 7, 2001" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME tk707 \- a drum machine .SH SYNOPSIS .B tk707 .RI [ options ] .SH DESCRIPTION .B tk707 emulates the Roland TR-707 Rhythm Composer. It can be used with external MIDI hardware, a capable sound card or Timidity plus any sound card supported by ALSA. Output can also be saved to a file. The complete documentation in info and html formats are available in \fBtk707.info\fR and \fBtk707.html\fR, respectively. .SH EXAMPLES .B tk707 -l .br .B tk707 -p 64:0 .br .B tk707 -p 128:0 -display eve.imag.fr:0.0 .SH OPTIONS .TP .B \-l List the available ALSA sound output ports. .TP .B \-p port Use this port .TP .B -small | -medium | -normalsize Set the size of the window, since some screens are too small for the whole window. .TP .B \-display Display to use (example: \fImyhost\fR:0.0). .TP .B \-use \fIWindow id\fR Id of window in which to embed application. The \fIWindow id\fR can be obtained e.g. by using \fBxwininfo\fR(1). .TP .B \-geometry Initial geometry for window .TP .B \-name Name to use for application. .TP .B \-sync Use synchronous mode for display server. .TP .B \-visual Visual for main window. .TP .B \-colormap Colormap for main window. .TP .B \-h | \-help Print very short help. .SH SEE ALSO .BR timidity (1), xwininfo(1). .SH AUTHORS Chris Willing .B .br Pierre Saramito .B .SH HOME PAGE .B http://www-lmc.imag.fr/lmc-edp/Pierre.Saramito/tk707 .br .B http://www.vislab.usyd.edu.au/staff/chris/tk707 tk707-0.8/title.tcl0000644000175100017510000007250310142141773011014 00000000000000# do not edit. # file automatically generated by: # ./title_fig2tcl.sh ./title.fig set title $vcunit.title canvas ${title} -width ${title_width_in_inch}i -height ${title_height_in_inch}i \ -bg $tkxox(col_def_bg) \ -highlightthickness 0 ${title} config -xscrollincrement 1p -yscrollincrement 1p ${title} xview scroll ${title_scroll_x_in_point} u ${title} yview scroll ${title_scroll_y_in_point} u pack ${title} -side top # The xfig objects begin here ${title} create polygon 0.000000i 0.000000i 6.750000i 0.000000i 6.750000i 0.787500i \ 0.000000i 0.787500i -outline {} -fill $tkxox(color_title_bg) -width 0 ${title} create line 0.000000i 0.000000i 6.750000i 0.000000i 6.750000i 0.787500i \ 0.000000i 0.787500i 0.000000i 0.000000i -fill $tkxox(color_title_bg) ${title} create polygon 4.744500i 0.380250i 4.953000i 0.652500i 5.097750i 0.652500i \ 4.875000i 0.380250i 5.067750i 0.124500i 4.933500i 0.124500i -outline {} -fill $tkxox(color_title_logo_fg) \ -width 0 ${title} create polygon 4.744500i 0.380250i 4.953000i 0.652500i 5.097750i 0.652500i \ 4.875000i 0.380250i 5.067750i 0.124500i 4.933500i 0.124500i -outline $tkxox(color_title_logo_fg) -fill \ {} ${title} create polygon 5.124750i 0.407250i 5.333250i 0.407250i 5.333250i 0.489000i \ 5.124750i 0.489000i -outline {} -fill $tkxox(color_title_logo_fg) -width 0 ${title} create line 5.124750i 0.407250i 5.333250i 0.407250i 5.333250i 0.489000i \ 5.124750i 0.489000i 5.124750i 0.407250i -fill $tkxox(color_title_logo_fg) ${title} create polygon 0.699750i 0.516000i 0.762750i 0.411000i 0.819000i 0.411000i \ 0.725250i 0.547500i 0.725250i 0.669000i 0.669000i 0.669000i 0.669000i 0.546750i \ 0.585000i 0.411000i 0.637500i 0.411000i -outline {} -fill $tkxox(color_title_fg) -width 0 ${title} create polygon 0.699750i 0.516000i 0.762750i 0.411000i 0.819000i 0.411000i \ 0.725250i 0.547500i 0.725250i 0.669000i 0.669000i 0.669000i 0.669000i 0.546750i \ 0.585000i 0.411000i 0.637500i 0.411000i -outline $tkxox(color_title_fg) -fill {} ${title} create polygon 0.834750i 0.411000i 0.834750i 0.453000i 0.915000i 0.453000i \ 0.915000i 0.669000i 0.972000i 0.669000i 0.970500i 0.452250i 1.050750i 0.452250i \ 1.050750i 0.411000i 0.834750i 0.411000i -outline {} -fill $tkxox(color_title_fg) -width 0 ${title} create polygon 0.834750i 0.411000i 0.834750i 0.453000i 0.915000i 0.453000i \ 0.915000i 0.669000i 0.972000i 0.669000i 0.970500i 0.452250i 1.050750i 0.452250i \ 1.050750i 0.411000i 0.834750i 0.411000i -outline $tkxox(color_title_fg) -fill {} ${title} create polygon 4.618500i 0.121500i 4.741500i 0.121500i 4.741500i 0.652500i \ 4.618500i 0.652500i -outline {} -fill $tkxox(color_title_logo_fg) -width 0 ${title} create line 4.618500i 0.121500i 4.741500i 0.121500i 4.741500i 0.652500i \ 4.618500i 0.652500i 4.618500i 0.121500i -fill $tkxox(color_title_logo_fg) ${title} create polygon 6.240000i 0.213000i 6.494250i 0.213000i 6.282750i 0.652500i \ 6.426750i 0.652500i 6.622500i 0.217500i 6.622500i 0.121500i 6.240000i 0.121500i \ -outline {} -fill $tkxox(color_title_logo_fg) -width 0 ${title} create polygon 6.240000i 0.213000i 6.494250i 0.213000i 6.282750i 0.652500i \ 6.426750i 0.652500i 6.622500i 0.217500i 6.622500i 0.121500i 6.240000i 0.121500i \ -outline $tkxox(color_title_logo_fg) -fill {} ${title} create polygon 5.364750i 0.214500i 5.619000i 0.214500i 5.407500i 0.652500i \ 5.551500i 0.652500i 5.749500i 0.219000i 5.748000i 0.121500i 5.364750i 0.121500i \ -outline {} -fill $tkxox(color_title_logo_fg) -width 0 ${title} create polygon 5.364750i 0.214500i 5.619000i 0.214500i 5.407500i 0.652500i \ 5.551500i 0.652500i 5.749500i 0.219000i 5.748000i 0.121500i 5.364750i 0.121500i \ -outline $tkxox(color_title_logo_fg) -fill {} ${title} create polygon 3.336000i 0.669000i 3.518250i 0.669000i 3.519000i 0.624000i \ 3.392250i 0.624750i 3.393000i 0.555750i 3.506250i 0.555750i 3.507000i 0.519000i \ 3.391500i 0.519000i 3.392250i 0.453000i 3.516750i 0.452250i 3.516750i 0.411000i \ 3.336000i 0.411000i -outline {} -fill $tkxox(color_title_fg) -width 0 ${title} create polygon 3.336000i 0.669000i 3.518250i 0.669000i 3.519000i 0.624000i \ 3.392250i 0.624750i 3.393000i 0.555750i 3.506250i 0.555750i 3.507000i 0.519000i \ 3.391500i 0.519000i 3.392250i 0.453000i 3.516750i 0.452250i 3.516750i 0.411000i \ 3.336000i 0.411000i -outline $tkxox(color_title_fg) -fill {} ${title} create polygon 3.558000i 0.411000i 3.644250i 0.411000i 3.672750i 0.411000i \ 3.694500i 0.418500i 3.711000i 0.427500i 3.723750i 0.444000i 3.729000i 0.469500i \ 3.729000i 0.498750i 3.714750i 0.520500i 3.704250i 0.529500i 3.688500i 0.543000i \ 3.657750i 0.553500i 3.730500i 0.669000i 3.664500i 0.669000i 3.588750i 0.537000i \ 3.585750i 0.526500i 3.624750i 0.526500i 3.645000i 0.521250i 3.662250i 0.508500i \ 3.678750i 0.477750i 3.666000i 0.456000i 3.645000i 0.447750i 3.583500i 0.447750i \ 3.585750i 0.669000i 3.537000i 0.669000i 3.535500i 0.519000i 3.534750i 0.411000i \ -outline {} -fill $tkxox(color_title_fg) -width 0 ${title} create polygon 3.558000i 0.411000i 3.644250i 0.411000i 3.672750i 0.411000i \ 3.694500i 0.418500i 3.711000i 0.427500i 3.723750i 0.444000i 3.729000i 0.469500i \ 3.729000i 0.498750i 3.714750i 0.520500i 3.704250i 0.529500i 3.688500i 0.543000i \ 3.657750i 0.553500i 3.730500i 0.669000i 3.664500i 0.669000i 3.588750i 0.537000i \ 3.585750i 0.526500i 3.624750i 0.526500i 3.645000i 0.521250i 3.662250i 0.508500i \ 3.678750i 0.477750i 3.666000i 0.456000i 3.645000i 0.447750i 3.583500i 0.447750i \ 3.585750i 0.669000i 3.537000i 0.669000i 3.535500i 0.519000i 3.534750i 0.411000i \ -outline $tkxox(color_title_fg) -fill {} ${title} create polygon 2.685750i 0.411000i 2.772000i 0.411000i 2.800500i 0.411000i \ 2.822250i 0.425250i 2.838750i 0.434250i 2.851500i 0.450750i 2.856750i 0.476250i \ 2.856750i 0.505500i 2.842500i 0.527250i 2.832750i 0.540750i 2.816250i 0.554250i \ 2.775000i 0.568500i 2.714250i 0.570750i 2.713500i 0.533250i 2.752500i 0.533250i \ 2.785500i 0.524250i 2.803500i 0.507000i 2.806500i 0.484500i 2.793750i 0.462750i \ 2.772750i 0.454500i 2.711250i 0.454500i 2.713500i 0.669000i 2.664000i 0.669000i \ 2.664000i 0.513750i 2.664000i 0.411000i -outline {} -fill $tkxox(color_title_fg) -width 0 ${title} create polygon 2.685750i 0.411000i 2.772000i 0.411000i 2.800500i 0.411000i \ 2.822250i 0.425250i 2.838750i 0.434250i 2.851500i 0.450750i 2.856750i 0.476250i \ 2.856750i 0.505500i 2.842500i 0.527250i 2.832750i 0.540750i 2.816250i 0.554250i \ 2.775000i 0.568500i 2.714250i 0.570750i 2.713500i 0.533250i 2.752500i 0.533250i \ 2.785500i 0.524250i 2.803500i 0.507000i 2.806500i 0.484500i 2.793750i 0.462750i \ 2.772750i 0.454500i 2.711250i 0.454500i 2.713500i 0.669000i 2.664000i 0.669000i \ 2.664000i 0.513750i 2.664000i 0.411000i -outline $tkxox(color_title_fg) -fill {} ${title} create polygon 1.332000i 0.669000i 1.376250i 0.669000i 1.376250i 0.477000i \ 1.440000i 0.669000i 1.492500i 0.669000i 1.557000i 0.474000i 1.557750i 0.669000i \ 1.610250i 0.669000i 1.610250i 0.411000i 1.532250i 0.411000i 1.469250i 0.593250i \ 1.407000i 0.411000i 1.332750i 0.411000i -outline {} -fill $tkxox(color_title_fg) -width 0 ${title} create polygon 1.332000i 0.669000i 1.376250i 0.669000i 1.376250i 0.477000i \ 1.440000i 0.669000i 1.492500i 0.669000i 1.557000i 0.474000i 1.557750i 0.669000i \ 1.610250i 0.669000i 1.610250i 0.411000i 1.532250i 0.411000i 1.469250i 0.593250i \ 1.407000i 0.411000i 1.332750i 0.411000i -outline $tkxox(color_title_fg) -fill {} ${title} create polygon 1.067250i 0.669000i 1.125750i 0.669000i 1.125750i 0.555750i \ 1.248750i 0.556500i 1.248750i 0.669000i 1.308750i 0.669000i 1.308750i 0.411000i \ 1.245000i 0.411000i 1.245750i 0.518250i 1.125750i 0.518250i 1.126500i 0.411000i \ 1.066500i 0.411000i -outline {} -fill $tkxox(color_title_fg) -width 0 ${title} create polygon 1.067250i 0.669000i 1.125750i 0.669000i 1.125750i 0.555750i \ 1.248750i 0.556500i 1.248750i 0.669000i 1.308750i 0.669000i 1.308750i 0.411000i \ 1.245000i 0.411000i 1.245750i 0.518250i 1.125750i 0.518250i 1.126500i 0.411000i \ 1.066500i 0.411000i -outline $tkxox(color_title_fg) -fill {} ${title} create polygon 0.250500i 0.411000i 0.272250i 0.421500i 0.288750i 0.430500i \ 0.301500i 0.447000i 0.306750i 0.472500i 0.306750i 0.501750i 0.292500i 0.523500i \ 0.282000i 0.532500i 0.266250i 0.546000i 0.235500i 0.556500i 0.308250i 0.669000i \ 0.242250i 0.669000i 0.166500i 0.540000i 0.163500i 0.529500i 0.202500i 0.529500i \ 0.222750i 0.524250i 0.240000i 0.511500i 0.256500i 0.480750i 0.243750i 0.459000i \ 0.222750i 0.450750i 0.161250i 0.450750i 0.163500i 0.669000i 0.112500i 0.669000i \ 0.112500i 0.410250i -outline {} -fill $tkxox(color_title_fg) -width 0 ${title} create polygon 0.250500i 0.411000i 0.272250i 0.421500i 0.288750i 0.430500i \ 0.301500i 0.447000i 0.306750i 0.472500i 0.306750i 0.501750i 0.292500i 0.523500i \ 0.282000i 0.532500i 0.266250i 0.546000i 0.235500i 0.556500i 0.308250i 0.669000i \ 0.242250i 0.669000i 0.166500i 0.540000i 0.163500i 0.529500i 0.202500i 0.529500i \ 0.222750i 0.524250i 0.240000i 0.511500i 0.256500i 0.480750i 0.243750i 0.459000i \ 0.222750i 0.450750i 0.161250i 0.450750i 0.163500i 0.669000i 0.112500i 0.669000i \ 0.112500i 0.410250i -outline $tkxox(color_title_fg) -fill {} ${title} create polygon 0.327750i 0.411000i 0.327750i 0.669000i 0.378750i 0.669000i \ 0.380250i 0.551250i 0.508500i 0.551250i 0.509250i 0.669000i 0.569250i 0.669000i \ 0.569250i 0.411000i 0.506250i 0.411000i 0.506250i 0.520500i 0.379500i 0.520500i \ 0.379500i 0.411000i 0.321750i 0.411000i -outline {} -fill $tkxox(color_title_fg) -width 0 ${title} create polygon 0.327750i 0.411000i 0.327750i 0.669000i 0.378750i 0.669000i \ 0.380250i 0.551250i 0.508500i 0.551250i 0.509250i 0.669000i 0.569250i 0.669000i \ 0.569250i 0.411000i 0.506250i 0.411000i 0.506250i 0.520500i 0.379500i 0.520500i \ 0.379500i 0.411000i 0.321750i 0.411000i -outline $tkxox(color_title_fg) -fill {} ${title} create polygon 2.010750i 0.414000i 2.001000i 0.411750i 1.995750i 0.410250i \ 1.993500i 0.410250i 1.991250i 0.409500i 1.984500i 0.409500i 1.971750i 0.408750i \ 1.961250i 0.408750i 1.953750i 0.408750i 1.950000i 0.408000i 1.947750i 0.408000i \ 1.946250i 0.407250i 1.941750i 0.408000i 1.933500i 0.409500i 1.920750i 0.413250i \ 1.908000i 0.418500i 1.898250i 0.422250i 1.893000i 0.424500i 1.890000i 0.425250i \ 1.887000i 0.426750i 1.881750i 0.430500i 1.873500i 0.436500i 1.862250i 0.447000i \ 1.852500i 0.458250i 1.845750i 0.466500i 1.842750i 0.471000i 1.841250i 0.473250i \ 1.839750i 0.476250i 1.838250i 0.481500i 1.834500i 0.491250i 1.830000i 0.506250i \ 1.827000i 0.522000i 1.825500i 0.533250i 1.824750i 0.540000i 1.825500i 0.543750i \ 1.825500i 0.547500i 1.826250i 0.553500i 1.827750i 0.564000i 1.830000i 0.578250i \ 1.833750i 0.591000i 1.836000i 0.598500i 1.838250i 0.601500i 1.839000i 0.602250i \ 1.839750i 0.603000i 1.842750i 0.606000i 1.847250i 0.611250i 1.855500i 0.620250i \ 1.864500i 0.628500i 1.871250i 0.634500i 1.875750i 0.637500i 1.878750i 0.639000i \ 1.881000i 0.640500i 1.885500i 0.643500i 1.893000i 0.648000i 1.903500i 0.653250i \ 1.915500i 0.659250i 1.921500i 0.661500i 1.923000i 0.661500i 1.924500i 0.661500i \ 1.930500i 0.662250i 1.942500i 0.664500i 1.955250i 0.666000i 1.962000i 0.666000i \ 1.964250i 0.666000i 1.967250i 0.666000i 1.974000i 0.666000i 1.988250i 0.665250i \ 1.999500i 0.664500i 2.007750i 0.663750i 2.013000i 0.663000i 2.016000i 0.663000i \ 2.019000i 0.663000i 2.023500i 0.662250i 2.030250i 0.660750i 2.038500i 0.658500i \ 2.043750i 0.656250i 2.047500i 0.654750i 2.049000i 0.653250i 2.049000i 0.652500i \ 2.049000i 0.651750i 2.048250i 0.650250i 2.049000i 0.648750i 2.049750i 0.646500i \ 2.050500i 0.643500i 2.051250i 0.639750i 2.051250i 0.636000i 2.051250i 0.634500i \ 2.052000i 0.633000i 2.052000i 0.631500i 2.051250i 0.630000i 2.049750i 0.627750i \ 2.046750i 0.624750i 2.040750i 0.622500i 2.037000i 0.622500i 2.034750i 0.623250i \ 2.030250i 0.624000i 2.021250i 0.624750i 2.013750i 0.625500i 2.010000i 0.626250i \ 2.009250i 0.627000i 2.008500i 0.627750i 2.004000i 0.627750i 1.994250i 0.628500i \ 1.983000i 0.628500i 1.975500i 0.628500i 1.971750i 0.629250i 1.968000i 0.629250i \ 1.960500i 0.628500i 1.947750i 0.626250i 1.936500i 0.623250i 1.930500i 0.621000i \ 1.928250i 0.620250i 1.926750i 0.618750i 1.922250i 0.615750i 1.912500i 0.609000i \ 1.903500i 0.601500i 1.898250i 0.597000i 1.896000i 0.594750i 1.894500i 0.592500i \ 1.890750i 0.587250i 1.884750i 0.578250i 1.880250i 0.568500i 1.878750i 0.564000i \ 1.878750i 0.562500i 1.878750i 0.560250i 1.878000i 0.555000i 1.877250i 0.545250i \ 1.877250i 0.534750i 1.877250i 0.528750i 1.877250i 0.526500i 1.877250i 0.524250i \ 1.878000i 0.518250i 1.881000i 0.508500i 1.884750i 0.498750i 1.886250i 0.494250i \ 1.886250i 0.492000i 1.887000i 0.490500i 1.890750i 0.486000i 1.898250i 0.478500i \ 1.908000i 0.471000i 1.914000i 0.467250i 1.917000i 0.465750i 1.920000i 0.465000i \ 1.927500i 0.462000i 1.938750i 0.457500i 1.950000i 0.453750i 1.955250i 0.452250i \ 1.957500i 0.451500i 1.959000i 0.451500i 1.965000i 0.450750i 1.974750i 0.450000i \ 1.984500i 0.450000i 1.989750i 0.450000i 1.991250i 0.450750i 1.992750i 0.450750i \ 1.998000i 0.452250i 2.007000i 0.453750i 2.016750i 0.456000i 2.022000i 0.458250i \ 2.024250i 0.459750i 2.026500i 0.461250i 2.031000i 0.462750i 2.038500i 0.462750i \ 2.043750i 0.461250i 2.047500i 0.459750i 2.049750i 0.458250i 2.051250i 0.456750i \ 2.052750i 0.456000i 2.054250i 0.453750i 2.055000i 0.450750i 2.055750i 0.446250i \ 2.055000i 0.441750i 2.052750i 0.438750i 2.051250i 0.436500i 2.049750i 0.435000i \ 2.047500i 0.434250i 2.045250i 0.432000i 2.041500i 0.429000i 2.036250i 0.425250i \ 2.029500i 0.420750i 2.025750i 0.418500i 2.025000i 0.418500i 2.024250i 0.417750i \ 2.019750i 0.416250i -outline {} -fill $tkxox(color_title_fg) -width 0 ${title} create polygon 2.010750i 0.414000i 2.001000i 0.411750i 1.995750i 0.410250i \ 1.993500i 0.410250i 1.991250i 0.409500i 1.984500i 0.409500i 1.971750i 0.408750i \ 1.961250i 0.408750i 1.953750i 0.408750i 1.950000i 0.408000i 1.947750i 0.408000i \ 1.946250i 0.407250i 1.941750i 0.408000i 1.933500i 0.409500i 1.920750i 0.413250i \ 1.908000i 0.418500i 1.898250i 0.422250i 1.893000i 0.424500i 1.890000i 0.425250i \ 1.887000i 0.426750i 1.881750i 0.430500i 1.873500i 0.436500i 1.862250i 0.447000i \ 1.852500i 0.458250i 1.845750i 0.466500i 1.842750i 0.471000i 1.841250i 0.473250i \ 1.839750i 0.476250i 1.838250i 0.481500i 1.834500i 0.491250i 1.830000i 0.506250i \ 1.827000i 0.522000i 1.825500i 0.533250i 1.824750i 0.540000i 1.825500i 0.543750i \ 1.825500i 0.547500i 1.826250i 0.553500i 1.827750i 0.564000i 1.830000i 0.578250i \ 1.833750i 0.591000i 1.836000i 0.598500i 1.838250i 0.601500i 1.839000i 0.602250i \ 1.839750i 0.603000i 1.842750i 0.606000i 1.847250i 0.611250i 1.855500i 0.620250i \ 1.864500i 0.628500i 1.871250i 0.634500i 1.875750i 0.637500i 1.878750i 0.639000i \ 1.881000i 0.640500i 1.885500i 0.643500i 1.893000i 0.648000i 1.903500i 0.653250i \ 1.915500i 0.659250i 1.921500i 0.661500i 1.923000i 0.661500i 1.924500i 0.661500i \ 1.930500i 0.662250i 1.942500i 0.664500i 1.955250i 0.666000i 1.962000i 0.666000i \ 1.964250i 0.666000i 1.967250i 0.666000i 1.974000i 0.666000i 1.988250i 0.665250i \ 1.999500i 0.664500i 2.007750i 0.663750i 2.013000i 0.663000i 2.016000i 0.663000i \ 2.019000i 0.663000i 2.023500i 0.662250i 2.030250i 0.660750i 2.038500i 0.658500i \ 2.043750i 0.656250i 2.047500i 0.654750i 2.049000i 0.653250i 2.049000i 0.652500i \ 2.049000i 0.651750i 2.048250i 0.650250i 2.049000i 0.648750i 2.049750i 0.646500i \ 2.050500i 0.643500i 2.051250i 0.639750i 2.051250i 0.636000i 2.051250i 0.634500i \ 2.052000i 0.633000i 2.052000i 0.631500i 2.051250i 0.630000i 2.049750i 0.627750i \ 2.046750i 0.624750i 2.040750i 0.622500i 2.037000i 0.622500i 2.034750i 0.623250i \ 2.030250i 0.624000i 2.021250i 0.624750i 2.013750i 0.625500i 2.010000i 0.626250i \ 2.009250i 0.627000i 2.008500i 0.627750i 2.004000i 0.627750i 1.994250i 0.628500i \ 1.983000i 0.628500i 1.975500i 0.628500i 1.971750i 0.629250i 1.968000i 0.629250i \ 1.960500i 0.628500i 1.947750i 0.626250i 1.936500i 0.623250i 1.930500i 0.621000i \ 1.928250i 0.620250i 1.926750i 0.618750i 1.922250i 0.615750i 1.912500i 0.609000i \ 1.903500i 0.601500i 1.898250i 0.597000i 1.896000i 0.594750i 1.894500i 0.592500i \ 1.890750i 0.587250i 1.884750i 0.578250i 1.880250i 0.568500i 1.878750i 0.564000i \ 1.878750i 0.562500i 1.878750i 0.560250i 1.878000i 0.555000i 1.877250i 0.545250i \ 1.877250i 0.534750i 1.877250i 0.528750i 1.877250i 0.526500i 1.877250i 0.524250i \ 1.878000i 0.518250i 1.881000i 0.508500i 1.884750i 0.498750i 1.886250i 0.494250i \ 1.886250i 0.492000i 1.887000i 0.490500i 1.890750i 0.486000i 1.898250i 0.478500i \ 1.908000i 0.471000i 1.914000i 0.467250i 1.917000i 0.465750i 1.920000i 0.465000i \ 1.927500i 0.462000i 1.938750i 0.457500i 1.950000i 0.453750i 1.955250i 0.452250i \ 1.957500i 0.451500i 1.959000i 0.451500i 1.965000i 0.450750i 1.974750i 0.450000i \ 1.984500i 0.450000i 1.989750i 0.450000i 1.991250i 0.450750i 1.992750i 0.450750i \ 1.998000i 0.452250i 2.007000i 0.453750i 2.016750i 0.456000i 2.022000i 0.458250i \ 2.024250i 0.459750i 2.026500i 0.461250i 2.031000i 0.462750i 2.038500i 0.462750i \ 2.043750i 0.461250i 2.047500i 0.459750i 2.049750i 0.458250i 2.051250i 0.456750i \ 2.052750i 0.456000i 2.054250i 0.453750i 2.055000i 0.450750i 2.055750i 0.446250i \ 2.055000i 0.441750i 2.052750i 0.438750i 2.051250i 0.436500i 2.049750i 0.435000i \ 2.047500i 0.434250i 2.045250i 0.432000i 2.041500i 0.429000i 2.036250i 0.425250i \ 2.029500i 0.420750i 2.025750i 0.418500i 2.025000i 0.418500i 2.024250i 0.417750i \ 2.019750i 0.416250i -outline $tkxox(color_title_fg) -fill {} ${title} create polygon 3.246000i 0.408000i 3.236250i 0.408000i 3.231000i 0.408750i \ 3.229500i 0.408750i 3.227250i 0.409500i 3.223500i 0.410250i 3.215250i 0.411750i \ 3.207000i 0.413250i 3.204000i 0.414000i 3.203250i 0.414000i 3.201000i 0.414750i \ 3.194250i 0.417750i 3.188250i 0.421500i 3.185250i 0.423000i 3.184500i 0.424500i \ 3.182250i 0.426750i 3.177000i 0.432000i 3.171750i 0.438000i 3.169500i 0.441000i \ 3.168750i 0.441750i 3.167250i 0.444750i 3.164250i 0.452250i 3.162750i 0.460500i \ 3.162000i 0.464250i 3.162750i 0.465750i 3.162750i 0.469500i 3.163500i 0.477750i \ 3.164250i 0.485250i 3.164250i 0.488250i 3.163500i 0.489000i 3.164250i 0.492000i \ 3.167250i 0.499500i 3.171000i 0.506250i 3.174000i 0.510750i 3.176250i 0.513000i \ 3.177750i 0.514500i 3.181500i 0.518250i 3.186750i 0.524250i 3.192750i 0.530250i \ 3.195000i 0.531750i 3.195750i 0.531750i 3.198000i 0.533250i 3.203250i 0.537000i \ 3.207750i 0.540750i 3.209250i 0.541500i 3.211500i 0.543000i 3.216750i 0.547500i \ 3.222750i 0.552750i 3.225750i 0.556500i 3.228000i 0.558000i 3.229500i 0.560250i \ 3.233250i 0.564000i 3.239250i 0.569250i 3.245250i 0.574500i 3.247500i 0.575250i \ 3.248250i 0.575250i 3.249750i 0.576000i 3.253500i 0.580500i 3.256500i 0.585000i \ 3.258000i 0.587250i 3.258750i 0.588000i 3.259500i 0.590250i 3.260250i 0.596250i \ 3.260250i 0.602250i 3.259500i 0.605250i 3.259500i 0.606750i 3.258750i 0.609750i \ 3.255750i 0.615000i 3.252750i 0.618750i 3.251250i 0.620250i 3.250500i 0.620250i \ 3.249750i 0.621000i 3.247500i 0.621750i 3.241500i 0.623250i 3.234750i 0.624750i \ 3.230250i 0.624750i 3.228000i 0.624750i 3.225750i 0.624750i 3.220500i 0.624750i \ 3.212250i 0.624750i 3.203250i 0.624000i 3.199500i 0.623250i 3.198000i 0.623250i \ 3.195000i 0.622500i 3.186750i 0.621000i 3.179250i 0.619500i 3.176250i 0.617250i \ 3.174750i 0.616500i 3.172500i 0.615000i 3.166500i 0.615750i 3.162750i 0.617250i \ 3.160500i 0.618750i 3.158250i 0.619500i 3.157500i 0.620250i 3.156750i 0.621750i \ 3.155250i 0.623250i 3.154500i 0.625500i 3.153750i 0.630000i 3.154500i 0.636750i \ 3.156000i 0.640500i 3.157500i 0.642750i 3.160500i 0.646500i 3.165750i 0.653250i \ 3.171750i 0.658500i 3.174750i 0.660750i 3.175500i 0.661500i 3.179250i 0.663000i \ 3.189000i 0.666000i 3.198750i 0.668250i 3.204750i 0.669000i 3.207750i 0.669000i \ 3.210750i 0.668250i 3.216750i 0.669000i 3.228000i 0.669000i 3.238500i 0.669000i \ 3.244500i 0.669000i 3.246000i 0.669000i 3.247500i 0.669000i 3.252750i 0.669000i \ 3.263250i 0.667500i 3.273750i 0.666000i 3.279000i 0.665250i 3.281250i 0.665250i \ 3.283500i 0.665250i 3.288750i 0.663000i 3.297000i 0.659250i 3.304500i 0.654000i \ 3.308250i 0.651000i 3.309000i 0.649500i 3.309750i 0.647250i 3.312000i 0.643500i \ 3.316500i 0.636000i 3.319500i 0.628500i 3.321000i 0.624000i 3.321750i 0.622500i \ 3.321750i 0.621000i 3.322500i 0.616500i 3.322500i 0.607500i 3.322500i 0.598500i \ 3.321750i 0.594000i 3.321750i 0.591750i 3.321000i 0.589500i 3.319500i 0.585000i \ 3.316500i 0.576750i 3.312000i 0.569250i 3.309750i 0.566250i 3.307500i 0.564750i \ 3.306000i 0.564000i 3.303000i 0.561000i 3.297750i 0.555750i 3.292500i 0.550500i \ 3.291000i 0.549000i 3.290250i 0.549000i 3.288750i 0.548250i 3.283500i 0.543000i \ 3.278250i 0.538500i 3.276000i 0.535500i 3.274500i 0.534000i 3.273750i 0.532500i \ 3.270750i 0.529500i 3.264000i 0.524250i 3.257250i 0.519000i 3.252750i 0.516000i \ 3.250500i 0.515250i 3.248250i 0.514500i 3.244500i 0.511500i 3.237750i 0.506250i \ 3.231000i 0.499500i 3.228000i 0.496500i 3.227250i 0.495000i 3.225000i 0.492000i \ 3.222000i 0.485250i 3.220500i 0.479250i 3.219750i 0.476250i 3.219750i 0.474750i \ 3.220500i 0.473250i 3.221250i 0.470250i 3.222750i 0.465750i 3.225000i 0.461250i \ 3.226500i 0.459750i 3.227250i 0.459000i 3.227250i 0.458250i 3.230250i 0.456750i \ 3.235500i 0.454500i 3.242250i 0.452250i 3.246750i 0.451500i 3.249000i 0.451500i \ 3.251250i 0.451500i 3.256500i 0.450750i 3.263250i 0.450750i 3.270000i 0.451500i \ 3.272250i 0.451500i 3.272250i 0.452250i 3.274500i 0.453000i 3.280500i 0.454500i \ 3.287250i 0.456000i 3.290250i 0.457500i 3.291750i 0.458250i 3.294750i 0.459000i \ 3.300750i 0.458250i 3.305250i 0.456000i 3.308250i 0.453750i 3.309000i 0.452250i \ 3.309750i 0.450000i 3.311250i 0.447000i 3.313500i 0.442500i 3.314250i 0.438750i \ 3.314250i 0.436500i 3.315000i 0.435000i 3.315000i 0.434250i 3.315000i 0.433500i \ 3.314250i 0.432000i 3.312750i 0.429750i 3.309750i 0.426000i 3.304500i 0.421500i \ 3.300750i 0.419250i 3.299250i 0.417750i 3.297000i 0.417000i 3.291750i 0.414750i \ 3.282750i 0.411750i 3.273000i 0.409500i 3.267000i 0.408750i 3.264750i 0.408750i \ 3.261750i 0.408750i 3.256500i 0.408000i -outline {} -fill $tkxox(color_title_fg) -width 0 ${title} create polygon 3.246000i 0.408000i 3.236250i 0.408000i 3.231000i 0.408750i \ 3.229500i 0.408750i 3.227250i 0.409500i 3.223500i 0.410250i 3.215250i 0.411750i \ 3.207000i 0.413250i 3.204000i 0.414000i 3.203250i 0.414000i 3.201000i 0.414750i \ 3.194250i 0.417750i 3.188250i 0.421500i 3.185250i 0.423000i 3.184500i 0.424500i \ 3.182250i 0.426750i 3.177000i 0.432000i 3.171750i 0.438000i 3.169500i 0.441000i \ 3.168750i 0.441750i 3.167250i 0.444750i 3.164250i 0.452250i 3.162750i 0.460500i \ 3.162000i 0.464250i 3.162750i 0.465750i 3.162750i 0.469500i 3.163500i 0.477750i \ 3.164250i 0.485250i 3.164250i 0.488250i 3.163500i 0.489000i 3.164250i 0.492000i \ 3.167250i 0.499500i 3.171000i 0.506250i 3.174000i 0.510750i 3.176250i 0.513000i \ 3.177750i 0.514500i 3.181500i 0.518250i 3.186750i 0.524250i 3.192750i 0.530250i \ 3.195000i 0.531750i 3.195750i 0.531750i 3.198000i 0.533250i 3.203250i 0.537000i \ 3.207750i 0.540750i 3.209250i 0.541500i 3.211500i 0.543000i 3.216750i 0.547500i \ 3.222750i 0.552750i 3.225750i 0.556500i 3.228000i 0.558000i 3.229500i 0.560250i \ 3.233250i 0.564000i 3.239250i 0.569250i 3.245250i 0.574500i 3.247500i 0.575250i \ 3.248250i 0.575250i 3.249750i 0.576000i 3.253500i 0.580500i 3.256500i 0.585000i \ 3.258000i 0.587250i 3.258750i 0.588000i 3.259500i 0.590250i 3.260250i 0.596250i \ 3.260250i 0.602250i 3.259500i 0.605250i 3.259500i 0.606750i 3.258750i 0.609750i \ 3.255750i 0.615000i 3.252750i 0.618750i 3.251250i 0.620250i 3.250500i 0.620250i \ 3.249750i 0.621000i 3.247500i 0.621750i 3.241500i 0.623250i 3.234750i 0.624750i \ 3.230250i 0.624750i 3.228000i 0.624750i 3.225750i 0.624750i 3.220500i 0.624750i \ 3.212250i 0.624750i 3.203250i 0.624000i 3.199500i 0.623250i 3.198000i 0.623250i \ 3.195000i 0.622500i 3.186750i 0.621000i 3.179250i 0.619500i 3.176250i 0.617250i \ 3.174750i 0.616500i 3.172500i 0.615000i 3.166500i 0.615750i 3.162750i 0.617250i \ 3.160500i 0.618750i 3.158250i 0.619500i 3.157500i 0.620250i 3.156750i 0.621750i \ 3.155250i 0.623250i 3.154500i 0.625500i 3.153750i 0.630000i 3.154500i 0.636750i \ 3.156000i 0.640500i 3.157500i 0.642750i 3.160500i 0.646500i 3.165750i 0.653250i \ 3.171750i 0.658500i 3.174750i 0.660750i 3.175500i 0.661500i 3.179250i 0.663000i \ 3.189000i 0.666000i 3.198750i 0.668250i 3.204750i 0.669000i 3.207750i 0.669000i \ 3.210750i 0.668250i 3.216750i 0.669000i 3.228000i 0.669000i 3.238500i 0.669000i \ 3.244500i 0.669000i 3.246000i 0.669000i 3.247500i 0.669000i 3.252750i 0.669000i \ 3.263250i 0.667500i 3.273750i 0.666000i 3.279000i 0.665250i 3.281250i 0.665250i \ 3.283500i 0.665250i 3.288750i 0.663000i 3.297000i 0.659250i 3.304500i 0.654000i \ 3.308250i 0.651000i 3.309000i 0.649500i 3.309750i 0.647250i 3.312000i 0.643500i \ 3.316500i 0.636000i 3.319500i 0.628500i 3.321000i 0.624000i 3.321750i 0.622500i \ 3.321750i 0.621000i 3.322500i 0.616500i 3.322500i 0.607500i 3.322500i 0.598500i \ 3.321750i 0.594000i 3.321750i 0.591750i 3.321000i 0.589500i 3.319500i 0.585000i \ 3.316500i 0.576750i 3.312000i 0.569250i 3.309750i 0.566250i 3.307500i 0.564750i \ 3.306000i 0.564000i 3.303000i 0.561000i 3.297750i 0.555750i 3.292500i 0.550500i \ 3.291000i 0.549000i 3.290250i 0.549000i 3.288750i 0.548250i 3.283500i 0.543000i \ 3.278250i 0.538500i 3.276000i 0.535500i 3.274500i 0.534000i 3.273750i 0.532500i \ 3.270750i 0.529500i 3.264000i 0.524250i 3.257250i 0.519000i 3.252750i 0.516000i \ 3.250500i 0.515250i 3.248250i 0.514500i 3.244500i 0.511500i 3.237750i 0.506250i \ 3.231000i 0.499500i 3.228000i 0.496500i 3.227250i 0.495000i 3.225000i 0.492000i \ 3.222000i 0.485250i 3.220500i 0.479250i 3.219750i 0.476250i 3.219750i 0.474750i \ 3.220500i 0.473250i 3.221250i 0.470250i 3.222750i 0.465750i 3.225000i 0.461250i \ 3.226500i 0.459750i 3.227250i 0.459000i 3.227250i 0.458250i 3.230250i 0.456750i \ 3.235500i 0.454500i 3.242250i 0.452250i 3.246750i 0.451500i 3.249000i 0.451500i \ 3.251250i 0.451500i 3.256500i 0.450750i 3.263250i 0.450750i 3.270000i 0.451500i \ 3.272250i 0.451500i 3.272250i 0.452250i 3.274500i 0.453000i 3.280500i 0.454500i \ 3.287250i 0.456000i 3.290250i 0.457500i 3.291750i 0.458250i 3.294750i 0.459000i \ 3.300750i 0.458250i 3.305250i 0.456000i 3.308250i 0.453750i 3.309000i 0.452250i \ 3.309750i 0.450000i 3.311250i 0.447000i 3.313500i 0.442500i 3.314250i 0.438750i \ 3.314250i 0.436500i 3.315000i 0.435000i 3.315000i 0.434250i 3.315000i 0.433500i \ 3.314250i 0.432000i 3.312750i 0.429750i 3.309750i 0.426000i 3.304500i 0.421500i \ 3.300750i 0.419250i 3.299250i 0.417750i 3.297000i 0.417000i 3.291750i 0.414750i \ 3.282750i 0.411750i 3.273000i 0.409500i 3.267000i 0.408750i 3.264750i 0.408750i \ 3.261750i 0.408750i 3.256500i 0.408000i -outline $tkxox(color_title_fg) -fill {} ${title} create oval 2.868750i 0.405000i 3.137250i 0.673500i -outline {} -fill \ $tkxox(color_title_fg) -width 0 ${title} create oval 2.868750i 0.405000i 3.137250i 0.673500i -outline $tkxox(color_title_fg) -fill \ {} ${title} create oval 2.073000i 0.406500i 2.341500i 0.675000i -outline {} -fill \ $tkxox(color_title_fg) -width 0 ${title} create oval 2.073000i 0.406500i 2.341500i 0.675000i -outline $tkxox(color_title_fg) -fill \ {} ${title} create oval 5.783250i 0.108000i 6.209250i 0.664500i -outline {} -fill \ $tkxox(color_title_logo_fg) -width 0 ${title} create oval 5.783250i 0.108000i 6.209250i 0.664500i -outline $tkxox(color_title_logo_fg) -fill \ {} ${title} create oval 2.909250i 0.448500i 3.090750i 0.630000i -outline {} -fill \ $tkxox(color_title_bg) -width 0 ${title} create oval 2.909250i 0.448500i 3.090750i 0.630000i -outline $tkxox(color_title_fg) -fill \ {} ${title} create oval 2.113500i 0.450000i 2.295000i 0.631500i -outline {} -fill \ $tkxox(color_title_bg) -width 0 ${title} create oval 2.113500i 0.450000i 2.295000i 0.631500i -outline $tkxox(color_title_fg) -fill \ {} ${title} create oval 5.889750i 0.195750i 6.095250i 0.587250i -outline {} -fill \ $tkxox(color_title_bg) -width 0 ${title} create oval 5.889750i 0.195750i 6.095250i 0.587250i -outline $tkxox(color_title_logo_fg) -fill \ {} ${title} create polygon 4.125000i 0.121500i 4.125000i 0.202500i 4.296000i 0.202500i \ 4.296000i 0.652500i 4.417500i 0.652500i 4.417500i 0.205500i 4.582500i 0.205500i \ 4.582500i 0.121500i 4.125000i 0.121500i -outline {} -fill $tkxox(color_title_logo_fg) -width 0 ${title} create polygon 4.125000i 0.121500i 4.125000i 0.202500i 4.296000i 0.202500i \ 4.296000i 0.652500i 4.417500i 0.652500i 4.417500i 0.205500i 4.582500i 0.205500i \ 4.582500i 0.121500i 4.125000i 0.121500i -outline $tkxox(color_title_logo_fg) -fill {} ${title} create polygon 2.365500i 0.669000i 2.409750i 0.669000i 2.409750i 0.477750i \ 2.473500i 0.669000i 2.526000i 0.669000i 2.590500i 0.474750i 2.591250i 0.669000i \ 2.643750i 0.669000i 2.643750i 0.411000i 2.565750i 0.411000i 2.502750i 0.594000i \ 2.440500i 0.411000i 2.366250i 0.411000i -outline {} -fill $tkxox(color_title_fg) -width 0 ${title} create polygon 2.365500i 0.669000i 2.409750i 0.669000i 2.409750i 0.477750i \ 2.473500i 0.669000i 2.526000i 0.669000i 2.590500i 0.474750i 2.591250i 0.669000i \ 2.643750i 0.669000i 2.643750i 0.411000i 2.565750i 0.411000i 2.502750i 0.594000i \ 2.440500i 0.411000i 2.366250i 0.411000i -outline $tkxox(color_title_fg) -fill {} tk707-0.8/title_defs.tcl0000644000175100017510000000027710142141773012014 00000000000000# file automatically generated by: # ./title_fig2tcl.sh ./title.fig set title_width_in_inch 6.90 set title_height_in_inch 0.82 set title_scroll_x_in_point -6 set title_scroll_y_in_point -1 tk707-0.8/score.tcl0000644000175100017510000062567710142141776011031 00000000000000# do not edit. # file automatically generated by: # ./score_fig2tcl.sh ./score.fig set score $note_score.score canvas ${score} -width ${score_width_in_inch}i -height ${score_height_in_inch}i \ -bg $tkxox(col_def_bg) \ -highlightthickness 0 ${score} config -xscrollincrement 1p -yscrollincrement 1p ${score} xview scroll ${score_scroll_x_in_point} u ${score} yview scroll ${score_scroll_y_in_point} u pack ${score} -side left # The xfig objects begin here ${score} create line 0.719882i 0.040748i 11.317992i 0.040748i 11.317992i 0.325984i \ 0.719882i 0.325984i 0.719882i 0.040748i -fill $tkxox(score_passive_note) ${score} create polygon 0.000000i 0.000000i 11.857677i 0.000000i 11.857677i 1.385433i \ 0.000000i 1.385433i -outline {} -fill $tkxox(col_def_bg) -width 0 ${score} create line 0.000000i 0.000000i 11.857677i 0.000000i 11.857677i 1.385433i \ 0.000000i 1.385433i 0.000000i 0.000000i -fill $tkxox(col_def_bg) ${score} create polygon 4.731299i 0.035315i 8.668465i 0.035315i 8.668465i 0.325079i \ 4.731299i 0.325079i -outline {} -fill $tkxox(color_score_bg) -width 0 ${score} create line 4.731299i 0.035315i 8.668465i 0.035315i 8.668465i 0.325079i \ 4.731299i 0.325079i 4.731299i 0.035315i -fill $tkxox(color_score_bg) ${score} create polygon 8.706496i 0.035315i 11.781614i 0.035315i 11.781614i 0.329606i \ 8.706496i 0.329606i -outline {} -fill $tkxox(color_score_bg) -width 0 ${score} create line 8.706496i 0.035315i 11.781614i 0.035315i 11.781614i 0.329606i \ 8.706496i 0.329606i 8.706496i 0.035315i -fill $tkxox(color_score_bg) ${score} create polygon 0.054331i 0.707205i 5.980000i 0.707205i 5.980000i 1.018701i \ 0.054331i 1.018701i -outline {} -fill $tkxox(color_score_bg) -width 0 ${score} create line 0.054331i 0.707205i 5.980000i 0.707205i 5.980000i 1.018701i \ 0.054331i 1.018701i 0.054331i 0.707205i -fill $tkxox(color_score_bg) ${score} create polygon 0.054331i 1.047677i 3.232677i 1.047677i 3.232677i 1.344685i \ 0.054331i 1.344685i -outline {} -fill $tkxox(color_score_bg) -width 0 ${score} create line 0.054331i 1.047677i 3.232677i 1.047677i 3.232677i 1.344685i \ 0.054331i 1.344685i 0.054331i 1.047677i -fill $tkxox(color_score_bg) ${score} create polygon 3.273425i 1.047677i 5.980000i 1.047677i 5.980000i 1.344685i \ 3.273425i 1.344685i -outline {} -fill $tkxox(color_score_bg) -width 0 ${score} create line 3.273425i 1.047677i 5.980000i 1.047677i 5.980000i 1.344685i \ 3.273425i 1.344685i 3.273425i 1.047677i -fill $tkxox(color_score_bg) ${score} create polygon 2.721063i 0.363110i 4.694173i 0.363110i 4.694173i 0.678228i \ 2.721063i 0.678228i -outline {} -fill $tkxox(color_score_bg) -width 0 ${score} create line 2.721063i 0.363110i 4.694173i 0.363110i 4.694173i 0.678228i \ 2.721063i 0.678228i 2.721063i 0.363110i -fill $tkxox(color_score_bg) ${score} create polygon 6.014409i 0.707205i 11.789764i 0.707205i 11.789764i 1.018701i \ 6.014409i 1.018701i -outline {} -fill $tkxox(color_score_bg) -width 0 ${score} create line 6.014409i 0.707205i 11.789764i 0.707205i 11.789764i 1.018701i \ 6.014409i 1.018701i 6.014409i 0.707205i -fill $tkxox(color_score_bg) ${score} create polygon 6.012598i 1.047677i 8.668465i 1.047677i 8.668465i 1.344685i \ 6.012598i 1.344685i -outline {} -fill $tkxox(color_score_bg) -width 0 ${score} create line 6.012598i 1.047677i 8.668465i 1.047677i 8.668465i 1.344685i \ 6.012598i 1.344685i 6.012598i 1.047677i -fill $tkxox(color_score_bg) ${score} create polygon 8.708307i 0.363110i 10.636142i 0.363110i 10.636142i 0.678228i \ 8.708307i 0.678228i -outline {} -fill $tkxox(color_score_bg) -width 0 ${score} create line 8.708307i 0.363110i 10.636142i 0.363110i 10.636142i 0.678228i \ 8.708307i 0.678228i 8.708307i 0.363110i -fill $tkxox(color_score_bg) ${score} create polygon 8.710118i 1.047677i 11.789764i 1.047677i 11.789764i 1.344685i \ 8.710118i 1.344685i -outline {} -fill $tkxox(color_score_bg) -width 0 ${score} create line 8.710118i 1.047677i 11.789764i 1.047677i 11.789764i 1.344685i \ 8.710118i 1.344685i 8.710118i 1.047677i -fill $tkxox(color_score_bg) ${score} create polygon 10.672362i 0.363110i 11.788858i 0.363110i 11.788858i 0.678228i \ 10.672362i 0.678228i -outline {} -fill $tkxox(color_score_bg) -width 0 ${score} create line 10.672362i 0.363110i 11.788858i 0.363110i 11.788858i 0.678228i \ 10.672362i 0.678228i 10.672362i 0.363110i -fill $tkxox(color_score_bg) ${score} create polygon 0.054331i 0.040748i 4.694173i 0.040748i 4.694173i 0.325984i \ 0.054331i 0.325984i -outline {} -fill $tkxox(color_score_bg) -width 0 ${score} create line 0.054331i 0.040748i 4.694173i 0.040748i 4.694173i 0.325984i \ 0.054331i 0.325984i 0.054331i 0.040748i -fill $tkxox(color_score_bg) ${score} create polygon 4.735827i 0.363110i 6.660945i 0.363110i 6.660945i 0.678228i \ 4.735827i 0.678228i -outline {} -fill $tkxox(color_score_bg) -width 0 ${score} create line 4.735827i 0.363110i 6.660945i 0.363110i 6.660945i 0.678228i \ 4.735827i 0.678228i 4.735827i 0.363110i -fill $tkxox(color_score_bg) ${score} create polygon 6.696260i 0.363110i 8.668465i 0.363110i 8.668465i 0.678228i \ 6.696260i 0.678228i -outline {} -fill $tkxox(color_score_bg) -width 0 ${score} create line 6.696260i 0.363110i 8.668465i 0.363110i 8.668465i 0.678228i \ 6.696260i 0.678228i 6.696260i 0.363110i -fill $tkxox(color_score_bg) ${score} create polygon 0.054331i 0.363110i 2.687559i 0.363110i 2.687559i 0.678228i \ 0.054331i 0.678228i -outline {} -fill $tkxox(color_score_bg) -width 0 ${score} create line 0.054331i 0.363110i 2.687559i 0.363110i 2.687559i 0.678228i \ 0.054331i 0.678228i 0.054331i 0.363110i -fill $tkxox(color_score_bg) ${score} create line 7.040354i 0.422874i 7.040354i 0.602165i -fill $tkxox(score_active_note) ${score} create polygon 6.997795i 0.640197i 7.005039i 0.639291i 7.007756i 0.638386i \ 7.009567i 0.638386i 7.012283i 0.637480i 7.019528i 0.634764i 7.026772i 0.632047i \ 7.029488i 0.630236i 7.031299i 0.629331i 7.034016i 0.628425i 7.039449i 0.623898i \ 7.043976i 0.619370i 7.045787i 0.617559i 7.046693i 0.616654i 7.048504i 0.613937i \ 7.049409i 0.609409i 7.049409i 0.606693i 7.049409i 0.603976i 7.048504i 0.603071i \ 7.048504i 0.602165i 7.047598i 0.601260i 7.046693i 0.600354i 7.044882i 0.598543i \ 7.042165i 0.596732i 7.036732i 0.594016i 7.033110i 0.594016i 7.031299i 0.593110i \ 7.027677i 0.593110i 7.020433i 0.593110i 7.013189i 0.594016i 7.009567i 0.594016i \ 7.007756i 0.594016i 7.005039i 0.594921i 6.997795i 0.597638i 6.991457i 0.600354i \ 6.988740i 0.602165i 6.987835i 0.603071i 6.986024i 0.604882i 6.981496i 0.608504i \ 6.977874i 0.611220i 6.976969i 0.612126i 6.976063i 0.613937i 6.974252i 0.616654i \ 6.972441i 0.620276i 6.971535i 0.622087i 6.970630i 0.622992i 6.970630i 0.624803i \ 6.970630i 0.628425i 6.971535i 0.631142i 6.971535i 0.632047i 6.971535i 0.632953i \ 6.971535i 0.633858i 6.972441i 0.634764i 6.974252i 0.635669i 6.976969i 0.637480i \ 6.982402i 0.639291i 6.985118i 0.640197i 6.986929i 0.640197i 6.990551i 0.640197i \ -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 6.997795i 0.640197i 7.005039i 0.639291i 7.007756i 0.638386i \ 7.009567i 0.638386i 7.012283i 0.637480i 7.019528i 0.634764i 7.026772i 0.632047i \ 7.029488i 0.630236i 7.031299i 0.629331i 7.034016i 0.628425i 7.039449i 0.623898i \ 7.043976i 0.619370i 7.045787i 0.617559i 7.046693i 0.616654i 7.048504i 0.613937i \ 7.049409i 0.609409i 7.049409i 0.606693i 7.049409i 0.603976i 7.048504i 0.603071i \ 7.048504i 0.602165i 7.047598i 0.601260i 7.046693i 0.600354i 7.044882i 0.598543i \ 7.042165i 0.596732i 7.036732i 0.594016i 7.033110i 0.594016i 7.031299i 0.593110i \ 7.027677i 0.593110i 7.020433i 0.593110i 7.013189i 0.594016i 7.009567i 0.594016i \ 7.007756i 0.594016i 7.005039i 0.594921i 6.997795i 0.597638i 6.991457i 0.600354i \ 6.988740i 0.602165i 6.987835i 0.603071i 6.986024i 0.604882i 6.981496i 0.608504i \ 6.977874i 0.611220i 6.976969i 0.612126i 6.976063i 0.613937i 6.974252i 0.616654i \ 6.972441i 0.620276i 6.971535i 0.622087i 6.970630i 0.622992i 6.970630i 0.624803i \ 6.970630i 0.628425i 6.971535i 0.631142i 6.971535i 0.632047i 6.971535i 0.632953i \ 6.971535i 0.633858i 6.972441i 0.634764i 6.974252i 0.635669i 6.976969i 0.637480i \ 6.982402i 0.639291i 6.985118i 0.640197i 6.986929i 0.640197i 6.990551i 0.640197i \ -outline $tkxox(score_active_note) -fill {} ${score} create polygon 7.044882i 0.441890i 7.045787i 0.447323i 7.046693i 0.449134i \ 7.046693i 0.450039i 7.047598i 0.451850i 7.049409i 0.456378i 7.051220i 0.460000i \ 7.052126i 0.460906i 7.056654i 0.464528i 7.062992i 0.469961i 7.066614i 0.472677i \ 7.068425i 0.474488i 7.072953i 0.477205i 7.081102i 0.484449i 7.089252i 0.490787i \ 7.092874i 0.493504i 7.094685i 0.494409i 7.097402i 0.498031i 7.103740i 0.504370i \ 7.108268i 0.511614i 7.110079i 0.514331i 7.110079i 0.515236i 7.110984i 0.517953i \ 7.112795i 0.525197i 7.113701i 0.532441i 7.113701i 0.535157i 7.112795i 0.538780i \ 7.110984i 0.547835i 7.108268i 0.557795i 7.105551i 0.564134i 7.103740i 0.568661i \ 7.101929i 0.572283i 7.099213i 0.577717i 7.096496i 0.584961i 7.096496i 0.585866i \ 7.095591i 0.586772i 7.095591i 0.587677i 7.094685i 0.587677i 7.094685i 0.588583i \ 7.094685i 0.589488i 7.093780i 0.589488i 7.093780i 0.590394i 7.092874i 0.590394i \ 7.092874i 0.589488i 7.093780i 0.589488i 7.093780i 0.588583i 7.093780i 0.587677i \ 7.093780i 0.586772i 7.094685i 0.585866i 7.094685i 0.584961i 7.096496i 0.578622i \ 7.099213i 0.574094i 7.101024i 0.570472i 7.101929i 0.566850i 7.104646i 0.561417i \ 7.107362i 0.553268i 7.109173i 0.545118i 7.110984i 0.542402i 7.110984i 0.539685i \ 7.110079i 0.532441i 7.107362i 0.524291i 7.106457i 0.520669i 7.105551i 0.519764i \ 7.103740i 0.516142i 7.097402i 0.507992i 7.091063i 0.501654i 7.087441i 0.498031i \ 7.085630i 0.496220i 7.083819i 0.495315i 7.080197i 0.492598i 7.072047i 0.487165i \ 7.062992i 0.481732i 7.058465i 0.479921i 7.054843i 0.479016i 7.051220i 0.477205i \ 7.044882i 0.474488i 7.043976i 0.474488i 7.043071i 0.473583i 7.042165i 0.473583i \ 7.041260i 0.473583i 7.040354i 0.473583i 7.040354i 0.474488i 7.040354i 0.475394i \ 7.040354i 0.476299i 7.041260i 0.476299i 7.041260i 0.477205i 7.041260i 0.478110i \ 7.041260i 0.479016i 7.042165i 0.479921i 7.042165i 0.480827i 7.042165i 0.479921i \ 7.042165i 0.479016i 7.042165i 0.478110i 7.042165i 0.477205i 7.042165i 0.475394i \ 7.042165i 0.474488i 7.042165i 0.464528i 7.042165i 0.455472i 7.043071i 0.447323i \ 7.043071i 0.440079i 7.043071i 0.431929i 7.043976i 0.423780i 7.043976i 0.421969i \ 7.043976i 0.424685i 7.043976i 0.430118i 7.043976i 0.435551i -outline {} -fill $tkxox(score_active_note) \ -width 0 ${score} create polygon 7.044882i 0.441890i 7.045787i 0.447323i 7.046693i 0.449134i \ 7.046693i 0.450039i 7.047598i 0.451850i 7.049409i 0.456378i 7.051220i 0.460000i \ 7.052126i 0.460906i 7.056654i 0.464528i 7.062992i 0.469961i 7.066614i 0.472677i \ 7.068425i 0.474488i 7.072953i 0.477205i 7.081102i 0.484449i 7.089252i 0.490787i \ 7.092874i 0.493504i 7.094685i 0.494409i 7.097402i 0.498031i 7.103740i 0.504370i \ 7.108268i 0.511614i 7.110079i 0.514331i 7.110079i 0.515236i 7.110984i 0.517953i \ 7.112795i 0.525197i 7.113701i 0.532441i 7.113701i 0.535157i 7.112795i 0.538780i \ 7.110984i 0.547835i 7.108268i 0.557795i 7.105551i 0.564134i 7.103740i 0.568661i \ 7.101929i 0.572283i 7.099213i 0.577717i 7.096496i 0.584961i 7.096496i 0.585866i \ 7.095591i 0.586772i 7.095591i 0.587677i 7.094685i 0.587677i 7.094685i 0.588583i \ 7.094685i 0.589488i 7.093780i 0.589488i 7.093780i 0.590394i 7.092874i 0.590394i \ 7.092874i 0.589488i 7.093780i 0.589488i 7.093780i 0.588583i 7.093780i 0.587677i \ 7.093780i 0.586772i 7.094685i 0.585866i 7.094685i 0.584961i 7.096496i 0.578622i \ 7.099213i 0.574094i 7.101024i 0.570472i 7.101929i 0.566850i 7.104646i 0.561417i \ 7.107362i 0.553268i 7.109173i 0.545118i 7.110984i 0.542402i 7.110984i 0.539685i \ 7.110079i 0.532441i 7.107362i 0.524291i 7.106457i 0.520669i 7.105551i 0.519764i \ 7.103740i 0.516142i 7.097402i 0.507992i 7.091063i 0.501654i 7.087441i 0.498031i \ 7.085630i 0.496220i 7.083819i 0.495315i 7.080197i 0.492598i 7.072047i 0.487165i \ 7.062992i 0.481732i 7.058465i 0.479921i 7.054843i 0.479016i 7.051220i 0.477205i \ 7.044882i 0.474488i 7.043976i 0.474488i 7.043071i 0.473583i 7.042165i 0.473583i \ 7.041260i 0.473583i 7.040354i 0.473583i 7.040354i 0.474488i 7.040354i 0.475394i \ 7.040354i 0.476299i 7.041260i 0.476299i 7.041260i 0.477205i 7.041260i 0.478110i \ 7.041260i 0.479016i 7.042165i 0.479921i 7.042165i 0.480827i 7.042165i 0.479921i \ 7.042165i 0.479016i 7.042165i 0.478110i 7.042165i 0.477205i 7.042165i 0.475394i \ 7.042165i 0.474488i 7.042165i 0.464528i 7.042165i 0.455472i 7.043071i 0.447323i \ 7.043071i 0.440079i 7.043071i 0.431929i 7.043976i 0.423780i 7.043976i 0.421969i \ 7.043976i 0.424685i 7.043976i 0.430118i 7.043976i 0.435551i -outline $tkxox(score_active_note) -fill \ {} ${score} create line 6.320472i 0.422874i 6.320472i 0.602165i -fill $tkxox(score_active_note) ${score} create polygon 6.278819i 0.640197i 6.286063i 0.639291i 6.289685i 0.638386i \ 6.290591i 0.638386i 6.294213i 0.637480i 6.301457i 0.634764i 6.308701i 0.632047i \ 6.311417i 0.630236i 6.312323i 0.629331i 6.315039i 0.628425i 6.320472i 0.623898i \ 6.325000i 0.619370i 6.326811i 0.617559i 6.327717i 0.616654i 6.329528i 0.613937i \ 6.330433i 0.609409i 6.330433i 0.606693i 6.330433i 0.603976i 6.329528i 0.603071i \ 6.329528i 0.602165i 6.328622i 0.601260i 6.327717i 0.600354i 6.325906i 0.598543i \ 6.323189i 0.596732i 6.317756i 0.594016i 6.315039i 0.594016i 6.313228i 0.593110i \ 6.309606i 0.593110i 6.302362i 0.593110i 6.295118i 0.594016i 6.291496i 0.594016i \ 6.289685i 0.594016i 6.286063i 0.594921i 6.278819i 0.597638i 6.272480i 0.600354i \ 6.269764i 0.602165i 6.268858i 0.603071i 6.267047i 0.604882i 6.262520i 0.608504i \ 6.258898i 0.611220i 6.257087i 0.612126i 6.256181i 0.613937i 6.254370i 0.616654i \ 6.252559i 0.620276i 6.251654i 0.622087i 6.251654i 0.622992i 6.251654i 0.624803i \ 6.251654i 0.628425i 6.252559i 0.631142i 6.252559i 0.632047i 6.252559i 0.632953i \ 6.252559i 0.633858i 6.253465i 0.634764i 6.255276i 0.635669i 6.257992i 0.637480i \ 6.263425i 0.639291i 6.266142i 0.640197i 6.267953i 0.640197i 6.271575i 0.640197i \ -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 6.278819i 0.640197i 6.286063i 0.639291i 6.289685i 0.638386i \ 6.290591i 0.638386i 6.294213i 0.637480i 6.301457i 0.634764i 6.308701i 0.632047i \ 6.311417i 0.630236i 6.312323i 0.629331i 6.315039i 0.628425i 6.320472i 0.623898i \ 6.325000i 0.619370i 6.326811i 0.617559i 6.327717i 0.616654i 6.329528i 0.613937i \ 6.330433i 0.609409i 6.330433i 0.606693i 6.330433i 0.603976i 6.329528i 0.603071i \ 6.329528i 0.602165i 6.328622i 0.601260i 6.327717i 0.600354i 6.325906i 0.598543i \ 6.323189i 0.596732i 6.317756i 0.594016i 6.315039i 0.594016i 6.313228i 0.593110i \ 6.309606i 0.593110i 6.302362i 0.593110i 6.295118i 0.594016i 6.291496i 0.594016i \ 6.289685i 0.594016i 6.286063i 0.594921i 6.278819i 0.597638i 6.272480i 0.600354i \ 6.269764i 0.602165i 6.268858i 0.603071i 6.267047i 0.604882i 6.262520i 0.608504i \ 6.258898i 0.611220i 6.257087i 0.612126i 6.256181i 0.613937i 6.254370i 0.616654i \ 6.252559i 0.620276i 6.251654i 0.622087i 6.251654i 0.622992i 6.251654i 0.624803i \ 6.251654i 0.628425i 6.252559i 0.631142i 6.252559i 0.632047i 6.252559i 0.632953i \ 6.252559i 0.633858i 6.253465i 0.634764i 6.255276i 0.635669i 6.257992i 0.637480i \ 6.263425i 0.639291i 6.266142i 0.640197i 6.267953i 0.640197i 6.271575i 0.640197i \ -outline $tkxox(score_active_note) -fill {} ${score} create polygon 6.325906i 0.441890i 6.326811i 0.447323i 6.327717i 0.449134i \ 6.327717i 0.450039i 6.328622i 0.451850i 6.330433i 0.456378i 6.332244i 0.460000i \ 6.333150i 0.460906i 6.337677i 0.464528i 6.344016i 0.469961i 6.347638i 0.472677i \ 6.350354i 0.474488i 6.354882i 0.477205i 6.363031i 0.484449i 6.371181i 0.490787i \ 6.374803i 0.493504i 6.375709i 0.494409i 6.379331i 0.498031i 6.384764i 0.504370i \ 6.389291i 0.511614i 6.391102i 0.514331i 6.391102i 0.515236i 6.392008i 0.517953i \ 6.393819i 0.525197i 6.394724i 0.532441i 6.394724i 0.535157i 6.393819i 0.538780i \ 6.392008i 0.547835i 6.389291i 0.557795i 6.386575i 0.564134i 6.384764i 0.568661i \ 6.382953i 0.572283i 6.380236i 0.577717i 6.377520i 0.584961i 6.377520i 0.585866i \ 6.376614i 0.586772i 6.376614i 0.587677i 6.375709i 0.587677i 6.375709i 0.588583i \ 6.375709i 0.589488i 6.374803i 0.589488i 6.374803i 0.590394i 6.374803i 0.589488i \ 6.374803i 0.588583i 6.374803i 0.587677i 6.374803i 0.586772i 6.375709i 0.586772i \ 6.375709i 0.585866i 6.375709i 0.584961i 6.377520i 0.578622i 6.379331i 0.574094i \ 6.381142i 0.570472i 6.382953i 0.566850i 6.384764i 0.561417i 6.387480i 0.553268i \ 6.390197i 0.545118i 6.391102i 0.542402i 6.392008i 0.542402i 6.392008i 0.539685i \ 6.391102i 0.532441i 6.389291i 0.524291i 6.387480i 0.520669i 6.386575i 0.519764i \ 6.384764i 0.516142i 6.378425i 0.507992i 6.372087i 0.501654i 6.368465i 0.498031i \ 6.366654i 0.496220i 6.364843i 0.495315i 6.361220i 0.492598i 6.353071i 0.487165i \ 6.344016i 0.481732i 6.339488i 0.479921i 6.336772i 0.479016i 6.332244i 0.477205i \ 6.325906i 0.474488i 6.325000i 0.474488i 6.324094i 0.473583i 6.323189i 0.473583i \ 6.322283i 0.473583i 6.321378i 0.473583i 6.321378i 0.474488i 6.321378i 0.475394i \ 6.321378i 0.476299i 6.321378i 0.477205i 6.321378i 0.478110i 6.322283i 0.479016i \ 6.322283i 0.479921i 6.322283i 0.480827i 6.322283i 0.479921i 6.322283i 0.479016i \ 6.322283i 0.478110i 6.322283i 0.477205i 6.322283i 0.475394i 6.322283i 0.474488i \ 6.322283i 0.464528i 6.323189i 0.455472i 6.323189i 0.447323i 6.324094i 0.440079i \ 6.324094i 0.431929i 6.325000i 0.423780i 6.325906i 0.421969i 6.325000i 0.424685i \ 6.325000i 0.430118i 6.325000i 0.435551i -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 6.325906i 0.441890i 6.326811i 0.447323i 6.327717i 0.449134i \ 6.327717i 0.450039i 6.328622i 0.451850i 6.330433i 0.456378i 6.332244i 0.460000i \ 6.333150i 0.460906i 6.337677i 0.464528i 6.344016i 0.469961i 6.347638i 0.472677i \ 6.350354i 0.474488i 6.354882i 0.477205i 6.363031i 0.484449i 6.371181i 0.490787i \ 6.374803i 0.493504i 6.375709i 0.494409i 6.379331i 0.498031i 6.384764i 0.504370i \ 6.389291i 0.511614i 6.391102i 0.514331i 6.391102i 0.515236i 6.392008i 0.517953i \ 6.393819i 0.525197i 6.394724i 0.532441i 6.394724i 0.535157i 6.393819i 0.538780i \ 6.392008i 0.547835i 6.389291i 0.557795i 6.386575i 0.564134i 6.384764i 0.568661i \ 6.382953i 0.572283i 6.380236i 0.577717i 6.377520i 0.584961i 6.377520i 0.585866i \ 6.376614i 0.586772i 6.376614i 0.587677i 6.375709i 0.587677i 6.375709i 0.588583i \ 6.375709i 0.589488i 6.374803i 0.589488i 6.374803i 0.590394i 6.374803i 0.589488i \ 6.374803i 0.588583i 6.374803i 0.587677i 6.374803i 0.586772i 6.375709i 0.586772i \ 6.375709i 0.585866i 6.375709i 0.584961i 6.377520i 0.578622i 6.379331i 0.574094i \ 6.381142i 0.570472i 6.382953i 0.566850i 6.384764i 0.561417i 6.387480i 0.553268i \ 6.390197i 0.545118i 6.391102i 0.542402i 6.392008i 0.542402i 6.392008i 0.539685i \ 6.391102i 0.532441i 6.389291i 0.524291i 6.387480i 0.520669i 6.386575i 0.519764i \ 6.384764i 0.516142i 6.378425i 0.507992i 6.372087i 0.501654i 6.368465i 0.498031i \ 6.366654i 0.496220i 6.364843i 0.495315i 6.361220i 0.492598i 6.353071i 0.487165i \ 6.344016i 0.481732i 6.339488i 0.479921i 6.336772i 0.479016i 6.332244i 0.477205i \ 6.325906i 0.474488i 6.325000i 0.474488i 6.324094i 0.473583i 6.323189i 0.473583i \ 6.322283i 0.473583i 6.321378i 0.473583i 6.321378i 0.474488i 6.321378i 0.475394i \ 6.321378i 0.476299i 6.321378i 0.477205i 6.321378i 0.478110i 6.322283i 0.479016i \ 6.322283i 0.479921i 6.322283i 0.480827i 6.322283i 0.479921i 6.322283i 0.479016i \ 6.322283i 0.478110i 6.322283i 0.477205i 6.322283i 0.475394i 6.322283i 0.474488i \ 6.322283i 0.464528i 6.323189i 0.455472i 6.323189i 0.447323i 6.324094i 0.440079i \ 6.324094i 0.431929i 6.325000i 0.423780i 6.325906i 0.421969i 6.325000i 0.424685i \ 6.325000i 0.430118i 6.325000i 0.435551i -outline $tkxox(score_active_note) -fill {} ${score} create line 6.320472i 0.086024i 6.320472i 0.266220i -fill $tkxox(score_active_note) ${score} create polygon 6.278819i 0.301535i 6.286063i 0.300630i 6.289685i 0.300630i \ 6.290591i 0.300630i 6.294213i 0.299724i 6.301457i 0.297913i 6.308701i 0.295197i \ 6.311417i 0.293386i 6.312323i 0.293386i 6.315039i 0.291575i 6.320472i 0.287047i \ 6.325000i 0.282520i 6.326811i 0.280709i 6.327717i 0.279803i 6.329528i 0.277087i \ 6.330433i 0.272559i 6.330433i 0.269843i 6.330433i 0.267126i 6.329528i 0.266220i \ 6.329528i 0.265315i 6.328622i 0.264409i 6.327717i 0.263504i 6.325906i 0.261693i \ 6.323189i 0.259882i 6.317756i 0.257165i 6.315039i 0.256260i 6.313228i 0.256260i \ 6.309606i 0.255354i 6.302362i 0.255354i 6.295118i 0.256260i 6.291496i 0.256260i \ 6.289685i 0.257165i 6.286063i 0.258071i 6.278819i 0.260787i 6.272480i 0.263504i \ 6.269764i 0.265315i 6.268858i 0.266220i 6.267047i 0.268031i 6.262520i 0.271654i \ 6.258898i 0.274370i 6.257087i 0.275276i 6.256181i 0.276181i 6.254370i 0.278898i \ 6.252559i 0.282520i 6.251654i 0.284331i 6.251654i 0.285236i 6.251654i 0.287047i \ 6.251654i 0.290669i 6.252559i 0.293386i 6.252559i 0.295197i 6.252559i 0.296102i \ 6.252559i 0.297008i 6.253465i 0.297913i 6.255276i 0.298819i 6.257992i 0.300630i \ 6.263425i 0.302441i 6.266142i 0.302441i 6.267953i 0.302441i 6.271575i 0.301535i \ -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 6.278819i 0.301535i 6.286063i 0.300630i 6.289685i 0.300630i \ 6.290591i 0.300630i 6.294213i 0.299724i 6.301457i 0.297913i 6.308701i 0.295197i \ 6.311417i 0.293386i 6.312323i 0.293386i 6.315039i 0.291575i 6.320472i 0.287047i \ 6.325000i 0.282520i 6.326811i 0.280709i 6.327717i 0.279803i 6.329528i 0.277087i \ 6.330433i 0.272559i 6.330433i 0.269843i 6.330433i 0.267126i 6.329528i 0.266220i \ 6.329528i 0.265315i 6.328622i 0.264409i 6.327717i 0.263504i 6.325906i 0.261693i \ 6.323189i 0.259882i 6.317756i 0.257165i 6.315039i 0.256260i 6.313228i 0.256260i \ 6.309606i 0.255354i 6.302362i 0.255354i 6.295118i 0.256260i 6.291496i 0.256260i \ 6.289685i 0.257165i 6.286063i 0.258071i 6.278819i 0.260787i 6.272480i 0.263504i \ 6.269764i 0.265315i 6.268858i 0.266220i 6.267047i 0.268031i 6.262520i 0.271654i \ 6.258898i 0.274370i 6.257087i 0.275276i 6.256181i 0.276181i 6.254370i 0.278898i \ 6.252559i 0.282520i 6.251654i 0.284331i 6.251654i 0.285236i 6.251654i 0.287047i \ 6.251654i 0.290669i 6.252559i 0.293386i 6.252559i 0.295197i 6.252559i 0.296102i \ 6.252559i 0.297008i 6.253465i 0.297913i 6.255276i 0.298819i 6.257992i 0.300630i \ 6.263425i 0.302441i 6.266142i 0.302441i 6.267953i 0.302441i 6.271575i 0.301535i \ -outline $tkxox(score_active_note) -fill {} ${score} create polygon 6.325906i 0.104134i 6.326811i 0.109567i 6.327717i 0.111378i \ 6.327717i 0.112283i 6.328622i 0.114094i 6.330433i 0.118622i 6.332244i 0.122244i \ 6.332244i 0.123150i 6.332244i 0.122244i 6.333150i 0.123150i 6.337677i 0.127677i \ 6.344016i 0.133110i 6.347638i 0.135827i 6.350354i 0.137638i 6.354882i 0.140354i \ 6.363031i 0.147598i 6.371181i 0.153937i 6.374803i 0.157559i 6.375709i 0.158465i \ 6.379331i 0.161181i 6.384764i 0.167520i 6.389291i 0.173858i 6.391102i 0.175669i \ 6.391102i 0.176575i 6.392008i 0.179291i 6.393819i 0.185630i 6.394724i 0.192874i \ 6.394724i 0.195591i 6.394724i 0.196496i 6.393819i 0.200118i 6.392008i 0.210079i \ 6.389291i 0.220039i 6.386575i 0.226378i 6.384764i 0.230906i 6.382953i 0.234528i \ 6.380236i 0.239961i 6.377520i 0.247205i 6.377520i 0.248110i 6.376614i 0.249016i \ 6.376614i 0.249921i 6.375709i 0.249921i 6.375709i 0.250827i 6.375709i 0.251732i \ 6.374803i 0.251732i 6.374803i 0.252638i 6.374803i 0.251732i 6.374803i 0.250827i \ 6.374803i 0.249921i 6.374803i 0.249016i 6.375709i 0.249016i 6.375709i 0.248110i \ 6.375709i 0.247205i 6.377520i 0.241772i 6.379331i 0.237244i 6.381142i 0.233622i \ 6.382953i 0.230000i 6.384764i 0.224567i 6.387480i 0.216417i 6.390197i 0.208268i \ 6.391102i 0.204646i 6.392008i 0.203740i 6.392008i 0.201024i 6.391102i 0.193780i \ 6.389291i 0.186535i 6.387480i 0.182913i 6.386575i 0.182008i 6.384764i 0.178386i \ 6.378425i 0.171142i 6.372087i 0.164803i 6.368465i 0.161181i 6.366654i 0.160276i \ 6.364843i 0.158465i 6.361220i 0.155748i 6.353071i 0.150315i 6.344016i 0.144882i \ 6.339488i 0.142165i 6.336772i 0.141260i 6.332244i 0.139449i 6.325906i 0.136732i \ 6.325000i 0.136732i 6.324094i 0.135827i 6.323189i 0.135827i 6.322283i 0.135827i \ 6.321378i 0.135827i 6.321378i 0.136732i 6.321378i 0.137638i 6.321378i 0.138543i \ 6.321378i 0.139449i 6.321378i 0.140354i 6.322283i 0.140354i 6.322283i 0.141260i \ 6.322283i 0.142165i 6.322283i 0.141260i 6.322283i 0.140354i 6.322283i 0.139449i \ 6.322283i 0.137638i 6.322283i 0.136732i 6.322283i 0.126772i 6.323189i 0.117717i \ 6.323189i 0.110472i 6.324094i 0.103228i 6.324094i 0.094173i 6.325000i 0.086929i \ 6.325906i 0.085118i 6.325000i 0.087835i 6.325000i 0.092362i 6.325000i 0.097795i \ -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 6.325906i 0.104134i 6.326811i 0.109567i 6.327717i 0.111378i \ 6.327717i 0.112283i 6.328622i 0.114094i 6.330433i 0.118622i 6.332244i 0.122244i \ 6.332244i 0.123150i 6.332244i 0.122244i 6.333150i 0.123150i 6.337677i 0.127677i \ 6.344016i 0.133110i 6.347638i 0.135827i 6.350354i 0.137638i 6.354882i 0.140354i \ 6.363031i 0.147598i 6.371181i 0.153937i 6.374803i 0.157559i 6.375709i 0.158465i \ 6.379331i 0.161181i 6.384764i 0.167520i 6.389291i 0.173858i 6.391102i 0.175669i \ 6.391102i 0.176575i 6.392008i 0.179291i 6.393819i 0.185630i 6.394724i 0.192874i \ 6.394724i 0.195591i 6.394724i 0.196496i 6.393819i 0.200118i 6.392008i 0.210079i \ 6.389291i 0.220039i 6.386575i 0.226378i 6.384764i 0.230906i 6.382953i 0.234528i \ 6.380236i 0.239961i 6.377520i 0.247205i 6.377520i 0.248110i 6.376614i 0.249016i \ 6.376614i 0.249921i 6.375709i 0.249921i 6.375709i 0.250827i 6.375709i 0.251732i \ 6.374803i 0.251732i 6.374803i 0.252638i 6.374803i 0.251732i 6.374803i 0.250827i \ 6.374803i 0.249921i 6.374803i 0.249016i 6.375709i 0.249016i 6.375709i 0.248110i \ 6.375709i 0.247205i 6.377520i 0.241772i 6.379331i 0.237244i 6.381142i 0.233622i \ 6.382953i 0.230000i 6.384764i 0.224567i 6.387480i 0.216417i 6.390197i 0.208268i \ 6.391102i 0.204646i 6.392008i 0.203740i 6.392008i 0.201024i 6.391102i 0.193780i \ 6.389291i 0.186535i 6.387480i 0.182913i 6.386575i 0.182008i 6.384764i 0.178386i \ 6.378425i 0.171142i 6.372087i 0.164803i 6.368465i 0.161181i 6.366654i 0.160276i \ 6.364843i 0.158465i 6.361220i 0.155748i 6.353071i 0.150315i 6.344016i 0.144882i \ 6.339488i 0.142165i 6.336772i 0.141260i 6.332244i 0.139449i 6.325906i 0.136732i \ 6.325000i 0.136732i 6.324094i 0.135827i 6.323189i 0.135827i 6.322283i 0.135827i \ 6.321378i 0.135827i 6.321378i 0.136732i 6.321378i 0.137638i 6.321378i 0.138543i \ 6.321378i 0.139449i 6.321378i 0.140354i 6.322283i 0.140354i 6.322283i 0.141260i \ 6.322283i 0.142165i 6.322283i 0.141260i 6.322283i 0.140354i 6.322283i 0.139449i \ 6.322283i 0.137638i 6.322283i 0.136732i 6.322283i 0.126772i 6.323189i 0.117717i \ 6.323189i 0.110472i 6.324094i 0.103228i 6.324094i 0.094173i 6.325000i 0.086929i \ 6.325906i 0.085118i 6.325000i 0.087835i 6.325000i 0.092362i 6.325000i 0.097795i \ -outline $tkxox(score_active_note) -fill {} ${score} create line 6.323189i 0.721693i 6.323189i 0.927244i -fill $tkxox(score_active_note) ${score} create polygon 6.280630i 0.967992i 6.287874i 0.967087i 6.291496i 0.967087i \ 6.293307i 0.967087i 6.296024i 0.966181i 6.303268i 0.963465i 6.309606i 0.959843i \ 6.312323i 0.958937i 6.314134i 0.958031i 6.315945i 0.955315i 6.321378i 0.950787i \ 6.325906i 0.945354i 6.328622i 0.943543i 6.330433i 0.942638i 6.331339i 0.939921i \ 6.333150i 0.934488i 6.333150i 0.930866i 6.333150i 0.928150i 6.332244i 0.927244i \ 6.332244i 0.926339i 6.332244i 0.925433i 6.330433i 0.924528i 6.328622i 0.922717i \ 6.325906i 0.920000i 6.320472i 0.917283i 6.316850i 0.916378i 6.315039i 0.916378i \ 6.311417i 0.916378i 6.304173i 0.916378i 6.296024i 0.917283i 6.293307i 0.918189i \ 6.291496i 0.918189i 6.287874i 0.919094i 6.280630i 0.921811i 6.273386i 0.924528i \ 6.270669i 0.925433i 6.269764i 0.926339i 6.267047i 0.927244i 6.262520i 0.930866i \ 6.258898i 0.934488i 6.257087i 0.935394i 6.257087i 0.936299i 6.256181i 0.937205i \ 6.254370i 0.941732i 6.252559i 0.946260i 6.251654i 0.948071i 6.251654i 0.949882i \ 6.251654i 0.951693i 6.251654i 0.956220i 6.252559i 0.959843i 6.252559i 0.961654i \ 6.252559i 0.962559i 6.252559i 0.963465i 6.254370i 0.965276i 6.257992i 0.967087i \ 6.263425i 0.968898i 6.267047i 0.968898i 6.268858i 0.968898i 6.272480i 0.967992i \ -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 6.280630i 0.967992i 6.287874i 0.967087i 6.291496i 0.967087i \ 6.293307i 0.967087i 6.296024i 0.966181i 6.303268i 0.963465i 6.309606i 0.959843i \ 6.312323i 0.958937i 6.314134i 0.958031i 6.315945i 0.955315i 6.321378i 0.950787i \ 6.325906i 0.945354i 6.328622i 0.943543i 6.330433i 0.942638i 6.331339i 0.939921i \ 6.333150i 0.934488i 6.333150i 0.930866i 6.333150i 0.928150i 6.332244i 0.927244i \ 6.332244i 0.926339i 6.332244i 0.925433i 6.330433i 0.924528i 6.328622i 0.922717i \ 6.325906i 0.920000i 6.320472i 0.917283i 6.316850i 0.916378i 6.315039i 0.916378i \ 6.311417i 0.916378i 6.304173i 0.916378i 6.296024i 0.917283i 6.293307i 0.918189i \ 6.291496i 0.918189i 6.287874i 0.919094i 6.280630i 0.921811i 6.273386i 0.924528i \ 6.270669i 0.925433i 6.269764i 0.926339i 6.267047i 0.927244i 6.262520i 0.930866i \ 6.258898i 0.934488i 6.257087i 0.935394i 6.257087i 0.936299i 6.256181i 0.937205i \ 6.254370i 0.941732i 6.252559i 0.946260i 6.251654i 0.948071i 6.251654i 0.949882i \ 6.251654i 0.951693i 6.251654i 0.956220i 6.252559i 0.959843i 6.252559i 0.961654i \ 6.252559i 0.962559i 6.252559i 0.963465i 6.254370i 0.965276i 6.257992i 0.967087i \ 6.263425i 0.968898i 6.267047i 0.968898i 6.268858i 0.968898i 6.272480i 0.967992i \ -outline $tkxox(score_active_note) -fill {} ${score} create line 6.323189i 1.060354i 6.323189i 1.264094i -fill $tkxox(score_active_note) ${score} create polygon 6.280630i 1.306654i 6.287874i 1.305748i 6.291496i 1.305748i \ 6.293307i 1.304843i 6.296024i 1.303937i 6.303268i 1.301220i 6.309606i 1.297598i \ 6.312323i 1.295787i 6.314134i 1.295787i 6.315945i 1.293071i 6.321378i 1.288543i \ 6.325906i 1.283110i 6.328622i 1.281299i 6.330433i 1.280394i 6.331339i 1.277677i \ 6.333150i 1.272244i 6.333150i 1.268622i 6.333150i 1.265906i 6.332244i 1.265000i \ 6.332244i 1.264094i 6.332244i 1.263189i 6.330433i 1.262283i 6.328622i 1.260472i \ 6.325906i 1.257756i 6.320472i 1.255039i 6.316850i 1.253228i 6.315039i 1.253228i \ 6.311417i 1.252323i 6.304173i 1.252323i 6.296024i 1.253228i 6.293307i 1.254134i \ 6.291496i 1.255039i 6.287874i 1.256850i 6.280630i 1.259567i 6.273386i 1.262283i \ 6.270669i 1.263189i 6.269764i 1.264094i 6.267047i 1.265906i 6.262520i 1.268622i \ 6.258898i 1.272244i 6.257087i 1.273150i 6.256181i 1.274961i 6.254370i 1.278583i \ 6.252559i 1.283110i 6.251654i 1.284921i 6.251654i 1.286732i 6.251654i 1.288543i \ 6.251654i 1.293071i 6.252559i 1.296693i 6.252559i 1.298504i 6.252559i 1.299409i \ 6.252559i 1.300315i 6.254370i 1.301220i 6.257992i 1.303937i 6.263425i 1.305748i \ 6.267047i 1.306654i 6.268858i 1.306654i 6.272480i 1.306654i -outline {} -fill $tkxox(score_active_note) \ -width 0 ${score} create polygon 6.280630i 1.306654i 6.287874i 1.305748i 6.291496i 1.305748i \ 6.293307i 1.304843i 6.296024i 1.303937i 6.303268i 1.301220i 6.309606i 1.297598i \ 6.312323i 1.295787i 6.314134i 1.295787i 6.315945i 1.293071i 6.321378i 1.288543i \ 6.325906i 1.283110i 6.328622i 1.281299i 6.330433i 1.280394i 6.331339i 1.277677i \ 6.333150i 1.272244i 6.333150i 1.268622i 6.333150i 1.265906i 6.332244i 1.265000i \ 6.332244i 1.264094i 6.332244i 1.263189i 6.330433i 1.262283i 6.328622i 1.260472i \ 6.325906i 1.257756i 6.320472i 1.255039i 6.316850i 1.253228i 6.315039i 1.253228i \ 6.311417i 1.252323i 6.304173i 1.252323i 6.296024i 1.253228i 6.293307i 1.254134i \ 6.291496i 1.255039i 6.287874i 1.256850i 6.280630i 1.259567i 6.273386i 1.262283i \ 6.270669i 1.263189i 6.269764i 1.264094i 6.267047i 1.265906i 6.262520i 1.268622i \ 6.258898i 1.272244i 6.257087i 1.273150i 6.256181i 1.274961i 6.254370i 1.278583i \ 6.252559i 1.283110i 6.251654i 1.284921i 6.251654i 1.286732i 6.251654i 1.288543i \ 6.251654i 1.293071i 6.252559i 1.296693i 6.252559i 1.298504i 6.252559i 1.299409i \ 6.252559i 1.300315i 6.254370i 1.301220i 6.257992i 1.303937i 6.263425i 1.305748i \ 6.267047i 1.306654i 6.268858i 1.306654i 6.272480i 1.306654i -outline $tkxox(score_active_note) -fill \ {} ${score} create line 7.645236i 0.422874i 7.645236i 0.602165i -fill $tkxox(score_active_note) ${score} create polygon 7.602677i 0.640197i 7.609921i 0.639291i 7.612638i 0.638386i \ 7.614449i 0.638386i 7.617165i 0.637480i 7.624409i 0.634764i 7.631654i 0.632047i \ 7.634370i 0.630236i 7.636181i 0.629331i 7.638898i 0.628425i 7.644331i 0.623898i \ 7.648858i 0.619370i 7.650669i 0.617559i 7.651575i 0.616654i 7.653386i 0.613937i \ 7.654291i 0.609409i 7.654291i 0.606693i 7.654291i 0.603976i 7.653386i 0.603071i \ 7.653386i 0.602165i 7.652480i 0.601260i 7.651575i 0.600354i 7.649764i 0.598543i \ 7.647047i 0.596732i 7.641614i 0.594016i 7.637992i 0.594016i 7.636181i 0.593110i \ 7.632559i 0.593110i 7.625315i 0.593110i 7.618071i 0.594016i 7.614449i 0.594016i \ 7.612638i 0.594016i 7.609016i 0.594921i 7.602677i 0.597638i 7.597244i 0.600354i \ 7.594528i 0.602165i 7.593622i 0.603071i 7.591811i 0.604882i 7.588189i 0.608504i \ 7.584567i 0.611220i 7.583661i 0.612126i 7.582756i 0.612126i 7.581850i 0.613937i \ 7.580039i 0.616654i 7.578228i 0.620276i 7.577323i 0.622087i 7.577323i 0.622992i \ 7.577323i 0.624803i 7.577323i 0.628425i 7.578228i 0.632047i 7.578228i 0.632953i \ 7.579134i 0.633858i 7.580039i 0.634764i 7.583661i 0.637480i 7.588189i 0.639291i \ 7.590906i 0.640197i 7.592717i 0.640197i 7.595433i 0.640197i -outline {} -fill $tkxox(score_active_note) \ -width 0 ${score} create polygon 7.602677i 0.640197i 7.609921i 0.639291i 7.612638i 0.638386i \ 7.614449i 0.638386i 7.617165i 0.637480i 7.624409i 0.634764i 7.631654i 0.632047i \ 7.634370i 0.630236i 7.636181i 0.629331i 7.638898i 0.628425i 7.644331i 0.623898i \ 7.648858i 0.619370i 7.650669i 0.617559i 7.651575i 0.616654i 7.653386i 0.613937i \ 7.654291i 0.609409i 7.654291i 0.606693i 7.654291i 0.603976i 7.653386i 0.603071i \ 7.653386i 0.602165i 7.652480i 0.601260i 7.651575i 0.600354i 7.649764i 0.598543i \ 7.647047i 0.596732i 7.641614i 0.594016i 7.637992i 0.594016i 7.636181i 0.593110i \ 7.632559i 0.593110i 7.625315i 0.593110i 7.618071i 0.594016i 7.614449i 0.594016i \ 7.612638i 0.594016i 7.609016i 0.594921i 7.602677i 0.597638i 7.597244i 0.600354i \ 7.594528i 0.602165i 7.593622i 0.603071i 7.591811i 0.604882i 7.588189i 0.608504i \ 7.584567i 0.611220i 7.583661i 0.612126i 7.582756i 0.612126i 7.581850i 0.613937i \ 7.580039i 0.616654i 7.578228i 0.620276i 7.577323i 0.622087i 7.577323i 0.622992i \ 7.577323i 0.624803i 7.577323i 0.628425i 7.578228i 0.632047i 7.578228i 0.632953i \ 7.579134i 0.633858i 7.580039i 0.634764i 7.583661i 0.637480i 7.588189i 0.639291i \ 7.590906i 0.640197i 7.592717i 0.640197i 7.595433i 0.640197i -outline $tkxox(score_active_note) -fill \ {} ${score} create polygon 7.649764i 0.441890i 7.650669i 0.447323i 7.651575i 0.449134i \ 7.651575i 0.450039i 7.652480i 0.451850i 7.654291i 0.456378i 7.656102i 0.460000i \ 7.657008i 0.460906i 7.661535i 0.464528i 7.667874i 0.469961i 7.671496i 0.472677i \ 7.673307i 0.474488i 7.677835i 0.477205i 7.685984i 0.484449i 7.694134i 0.490787i \ 7.698661i 0.493504i 7.700472i 0.494409i 7.704094i 0.498031i 7.710433i 0.504370i \ 7.714961i 0.511614i 7.716772i 0.514331i 7.716772i 0.515236i 7.717677i 0.517953i \ 7.719488i 0.525197i 7.720394i 0.532441i 7.720394i 0.535157i 7.719488i 0.538780i \ 7.717677i 0.547835i 7.714961i 0.557795i 7.712244i 0.564134i 7.710433i 0.568661i \ 7.708622i 0.572283i 7.705906i 0.577717i 7.703189i 0.584961i 7.703189i 0.585866i \ 7.702283i 0.586772i 7.702283i 0.587677i 7.701378i 0.587677i 7.701378i 0.588583i \ 7.701378i 0.589488i 7.700472i 0.589488i 7.700472i 0.590394i 7.700472i 0.589488i \ 7.700472i 0.588583i 7.700472i 0.587677i 7.700472i 0.586772i 7.701378i 0.586772i \ 7.701378i 0.585866i 7.701378i 0.584961i 7.703189i 0.578622i 7.705000i 0.574094i \ 7.706811i 0.570472i 7.708622i 0.566850i 7.710433i 0.561417i 7.713150i 0.553268i \ 7.715866i 0.545118i 7.716772i 0.542402i 7.717677i 0.542402i 7.717677i 0.539685i \ 7.716772i 0.532441i 7.714961i 0.524291i 7.713150i 0.520669i 7.712244i 0.519764i \ 7.710433i 0.516142i 7.704094i 0.507992i 7.697756i 0.501654i 7.693228i 0.498031i \ 7.691417i 0.496220i 7.688701i 0.495315i 7.684173i 0.492598i 7.676024i 0.487165i \ 7.666969i 0.481732i 7.662441i 0.479921i 7.659724i 0.479016i 7.656102i 0.477205i \ 7.649764i 0.474488i 7.648858i 0.474488i 7.647953i 0.473583i 7.647047i 0.473583i \ 7.646142i 0.473583i 7.645236i 0.473583i 7.645236i 0.474488i 7.645236i 0.475394i \ 7.645236i 0.476299i 7.645236i 0.477205i 7.645236i 0.478110i 7.646142i 0.479016i \ 7.646142i 0.479921i 7.646142i 0.480827i 7.646142i 0.479921i 7.646142i 0.479016i \ 7.646142i 0.478110i 7.646142i 0.477205i 7.646142i 0.475394i 7.646142i 0.474488i \ 7.646142i 0.464528i 7.647047i 0.455472i 7.647047i 0.447323i 7.647953i 0.440079i \ 7.647953i 0.431929i 7.648858i 0.423780i 7.649764i 0.421969i 7.648858i 0.424685i \ 7.648858i 0.430118i 7.648858i 0.435551i -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 7.649764i 0.441890i 7.650669i 0.447323i 7.651575i 0.449134i \ 7.651575i 0.450039i 7.652480i 0.451850i 7.654291i 0.456378i 7.656102i 0.460000i \ 7.657008i 0.460906i 7.661535i 0.464528i 7.667874i 0.469961i 7.671496i 0.472677i \ 7.673307i 0.474488i 7.677835i 0.477205i 7.685984i 0.484449i 7.694134i 0.490787i \ 7.698661i 0.493504i 7.700472i 0.494409i 7.704094i 0.498031i 7.710433i 0.504370i \ 7.714961i 0.511614i 7.716772i 0.514331i 7.716772i 0.515236i 7.717677i 0.517953i \ 7.719488i 0.525197i 7.720394i 0.532441i 7.720394i 0.535157i 7.719488i 0.538780i \ 7.717677i 0.547835i 7.714961i 0.557795i 7.712244i 0.564134i 7.710433i 0.568661i \ 7.708622i 0.572283i 7.705906i 0.577717i 7.703189i 0.584961i 7.703189i 0.585866i \ 7.702283i 0.586772i 7.702283i 0.587677i 7.701378i 0.587677i 7.701378i 0.588583i \ 7.701378i 0.589488i 7.700472i 0.589488i 7.700472i 0.590394i 7.700472i 0.589488i \ 7.700472i 0.588583i 7.700472i 0.587677i 7.700472i 0.586772i 7.701378i 0.586772i \ 7.701378i 0.585866i 7.701378i 0.584961i 7.703189i 0.578622i 7.705000i 0.574094i \ 7.706811i 0.570472i 7.708622i 0.566850i 7.710433i 0.561417i 7.713150i 0.553268i \ 7.715866i 0.545118i 7.716772i 0.542402i 7.717677i 0.542402i 7.717677i 0.539685i \ 7.716772i 0.532441i 7.714961i 0.524291i 7.713150i 0.520669i 7.712244i 0.519764i \ 7.710433i 0.516142i 7.704094i 0.507992i 7.697756i 0.501654i 7.693228i 0.498031i \ 7.691417i 0.496220i 7.688701i 0.495315i 7.684173i 0.492598i 7.676024i 0.487165i \ 7.666969i 0.481732i 7.662441i 0.479921i 7.659724i 0.479016i 7.656102i 0.477205i \ 7.649764i 0.474488i 7.648858i 0.474488i 7.647953i 0.473583i 7.647047i 0.473583i \ 7.646142i 0.473583i 7.645236i 0.473583i 7.645236i 0.474488i 7.645236i 0.475394i \ 7.645236i 0.476299i 7.645236i 0.477205i 7.645236i 0.478110i 7.646142i 0.479016i \ 7.646142i 0.479921i 7.646142i 0.480827i 7.646142i 0.479921i 7.646142i 0.479016i \ 7.646142i 0.478110i 7.646142i 0.477205i 7.646142i 0.475394i 7.646142i 0.474488i \ 7.646142i 0.464528i 7.647047i 0.455472i 7.647047i 0.447323i 7.647953i 0.440079i \ 7.647953i 0.431929i 7.648858i 0.423780i 7.649764i 0.421969i 7.648858i 0.424685i \ 7.648858i 0.430118i 7.648858i 0.435551i -outline $tkxox(score_active_note) -fill {} ${score} create line 7.645236i 0.086024i 7.645236i 0.266220i -fill $tkxox(score_active_note) ${score} create polygon 7.602677i 0.301535i 7.609921i 0.300630i 7.612638i 0.300630i \ 7.614449i 0.300630i 7.617165i 0.299724i 7.624409i 0.297913i 7.631654i 0.295197i \ 7.634370i 0.293386i 7.636181i 0.293386i 7.638898i 0.291575i 7.644331i 0.287047i \ 7.648858i 0.282520i 7.650669i 0.280709i 7.651575i 0.279803i 7.653386i 0.277087i \ 7.654291i 0.272559i 7.654291i 0.269843i 7.654291i 0.267126i 7.653386i 0.266220i \ 7.653386i 0.265315i 7.652480i 0.264409i 7.651575i 0.263504i 7.649764i 0.261693i \ 7.647047i 0.259882i 7.641614i 0.257165i 7.637992i 0.256260i 7.636181i 0.256260i \ 7.632559i 0.255354i 7.625315i 0.255354i 7.618071i 0.256260i 7.614449i 0.256260i \ 7.612638i 0.257165i 7.609016i 0.258071i 7.602677i 0.260787i 7.597244i 0.263504i \ 7.594528i 0.265315i 7.593622i 0.266220i 7.591811i 0.268031i 7.588189i 0.271654i \ 7.584567i 0.274370i 7.583661i 0.275276i 7.582756i 0.275276i 7.581850i 0.276181i \ 7.580039i 0.278898i 7.578228i 0.282520i 7.577323i 0.284331i 7.577323i 0.285236i \ 7.577323i 0.287047i 7.577323i 0.290669i 7.578228i 0.294291i 7.578228i 0.296102i \ 7.579134i 0.297008i 7.580039i 0.298819i 7.583661i 0.300630i 7.588189i 0.302441i \ 7.590906i 0.302441i 7.592717i 0.302441i 7.595433i 0.301535i -outline {} -fill $tkxox(score_active_note) \ -width 0 ${score} create polygon 7.602677i 0.301535i 7.609921i 0.300630i 7.612638i 0.300630i \ 7.614449i 0.300630i 7.617165i 0.299724i 7.624409i 0.297913i 7.631654i 0.295197i \ 7.634370i 0.293386i 7.636181i 0.293386i 7.638898i 0.291575i 7.644331i 0.287047i \ 7.648858i 0.282520i 7.650669i 0.280709i 7.651575i 0.279803i 7.653386i 0.277087i \ 7.654291i 0.272559i 7.654291i 0.269843i 7.654291i 0.267126i 7.653386i 0.266220i \ 7.653386i 0.265315i 7.652480i 0.264409i 7.651575i 0.263504i 7.649764i 0.261693i \ 7.647047i 0.259882i 7.641614i 0.257165i 7.637992i 0.256260i 7.636181i 0.256260i \ 7.632559i 0.255354i 7.625315i 0.255354i 7.618071i 0.256260i 7.614449i 0.256260i \ 7.612638i 0.257165i 7.609016i 0.258071i 7.602677i 0.260787i 7.597244i 0.263504i \ 7.594528i 0.265315i 7.593622i 0.266220i 7.591811i 0.268031i 7.588189i 0.271654i \ 7.584567i 0.274370i 7.583661i 0.275276i 7.582756i 0.275276i 7.581850i 0.276181i \ 7.580039i 0.278898i 7.578228i 0.282520i 7.577323i 0.284331i 7.577323i 0.285236i \ 7.577323i 0.287047i 7.577323i 0.290669i 7.578228i 0.294291i 7.578228i 0.296102i \ 7.579134i 0.297008i 7.580039i 0.298819i 7.583661i 0.300630i 7.588189i 0.302441i \ 7.590906i 0.302441i 7.592717i 0.302441i 7.595433i 0.301535i -outline $tkxox(score_active_note) -fill \ {} ${score} create polygon 7.649764i 0.104134i 7.650669i 0.109567i 7.651575i 0.111378i \ 7.651575i 0.112283i 7.652480i 0.114094i 7.654291i 0.118622i 7.656102i 0.122244i \ 7.656102i 0.123150i 7.656102i 0.122244i 7.657008i 0.123150i 7.661535i 0.127677i \ 7.667874i 0.133110i 7.671496i 0.135827i 7.673307i 0.137638i 7.677835i 0.140354i \ 7.685984i 0.147598i 7.694134i 0.153937i 7.698661i 0.157559i 7.700472i 0.158465i \ 7.704094i 0.161181i 7.710433i 0.167520i 7.714961i 0.173858i 7.716772i 0.175669i \ 7.716772i 0.176575i 7.717677i 0.179291i 7.719488i 0.185630i 7.720394i 0.192874i \ 7.720394i 0.195591i 7.720394i 0.196496i 7.719488i 0.200118i 7.717677i 0.210079i \ 7.714961i 0.220039i 7.712244i 0.226378i 7.710433i 0.230906i 7.708622i 0.234528i \ 7.705906i 0.239961i 7.703189i 0.247205i 7.703189i 0.248110i 7.702283i 0.249016i \ 7.702283i 0.249921i 7.701378i 0.249921i 7.701378i 0.250827i 7.701378i 0.251732i \ 7.700472i 0.251732i 7.700472i 0.252638i 7.700472i 0.251732i 7.700472i 0.250827i \ 7.700472i 0.249921i 7.700472i 0.249016i 7.701378i 0.249016i 7.701378i 0.248110i \ 7.701378i 0.247205i 7.703189i 0.241772i 7.705000i 0.237244i 7.706811i 0.233622i \ 7.708622i 0.230000i 7.710433i 0.224567i 7.713150i 0.216417i 7.715866i 0.208268i \ 7.716772i 0.204646i 7.717677i 0.203740i 7.717677i 0.201024i 7.716772i 0.193780i \ 7.714961i 0.186535i 7.713150i 0.182913i 7.712244i 0.182008i 7.710433i 0.178386i \ 7.704094i 0.171142i 7.697756i 0.164803i 7.693228i 0.161181i 7.691417i 0.160276i \ 7.688701i 0.158465i 7.684173i 0.155748i 7.676024i 0.150315i 7.666969i 0.144882i \ 7.662441i 0.142165i 7.659724i 0.141260i 7.656102i 0.139449i 7.649764i 0.136732i \ 7.648858i 0.136732i 7.647953i 0.135827i 7.647047i 0.135827i 7.646142i 0.135827i \ 7.645236i 0.135827i 7.645236i 0.136732i 7.645236i 0.137638i 7.645236i 0.138543i \ 7.645236i 0.139449i 7.645236i 0.140354i 7.646142i 0.140354i 7.646142i 0.141260i \ 7.646142i 0.142165i 7.646142i 0.141260i 7.646142i 0.140354i 7.646142i 0.139449i \ 7.646142i 0.137638i 7.646142i 0.136732i 7.646142i 0.126772i 7.647047i 0.117717i \ 7.647047i 0.110472i 7.647953i 0.103228i 7.647953i 0.094173i 7.648858i 0.086929i \ 7.649764i 0.085118i 7.648858i 0.087835i 7.648858i 0.092362i 7.648858i 0.097795i \ -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 7.649764i 0.104134i 7.650669i 0.109567i 7.651575i 0.111378i \ 7.651575i 0.112283i 7.652480i 0.114094i 7.654291i 0.118622i 7.656102i 0.122244i \ 7.656102i 0.123150i 7.656102i 0.122244i 7.657008i 0.123150i 7.661535i 0.127677i \ 7.667874i 0.133110i 7.671496i 0.135827i 7.673307i 0.137638i 7.677835i 0.140354i \ 7.685984i 0.147598i 7.694134i 0.153937i 7.698661i 0.157559i 7.700472i 0.158465i \ 7.704094i 0.161181i 7.710433i 0.167520i 7.714961i 0.173858i 7.716772i 0.175669i \ 7.716772i 0.176575i 7.717677i 0.179291i 7.719488i 0.185630i 7.720394i 0.192874i \ 7.720394i 0.195591i 7.720394i 0.196496i 7.719488i 0.200118i 7.717677i 0.210079i \ 7.714961i 0.220039i 7.712244i 0.226378i 7.710433i 0.230906i 7.708622i 0.234528i \ 7.705906i 0.239961i 7.703189i 0.247205i 7.703189i 0.248110i 7.702283i 0.249016i \ 7.702283i 0.249921i 7.701378i 0.249921i 7.701378i 0.250827i 7.701378i 0.251732i \ 7.700472i 0.251732i 7.700472i 0.252638i 7.700472i 0.251732i 7.700472i 0.250827i \ 7.700472i 0.249921i 7.700472i 0.249016i 7.701378i 0.249016i 7.701378i 0.248110i \ 7.701378i 0.247205i 7.703189i 0.241772i 7.705000i 0.237244i 7.706811i 0.233622i \ 7.708622i 0.230000i 7.710433i 0.224567i 7.713150i 0.216417i 7.715866i 0.208268i \ 7.716772i 0.204646i 7.717677i 0.203740i 7.717677i 0.201024i 7.716772i 0.193780i \ 7.714961i 0.186535i 7.713150i 0.182913i 7.712244i 0.182008i 7.710433i 0.178386i \ 7.704094i 0.171142i 7.697756i 0.164803i 7.693228i 0.161181i 7.691417i 0.160276i \ 7.688701i 0.158465i 7.684173i 0.155748i 7.676024i 0.150315i 7.666969i 0.144882i \ 7.662441i 0.142165i 7.659724i 0.141260i 7.656102i 0.139449i 7.649764i 0.136732i \ 7.648858i 0.136732i 7.647953i 0.135827i 7.647047i 0.135827i 7.646142i 0.135827i \ 7.645236i 0.135827i 7.645236i 0.136732i 7.645236i 0.137638i 7.645236i 0.138543i \ 7.645236i 0.139449i 7.645236i 0.140354i 7.646142i 0.140354i 7.646142i 0.141260i \ 7.646142i 0.142165i 7.646142i 0.141260i 7.646142i 0.140354i 7.646142i 0.139449i \ 7.646142i 0.137638i 7.646142i 0.136732i 7.646142i 0.126772i 7.647047i 0.117717i \ 7.647047i 0.110472i 7.647953i 0.103228i 7.647953i 0.094173i 7.648858i 0.086929i \ 7.649764i 0.085118i 7.648858i 0.087835i 7.648858i 0.092362i 7.648858i 0.097795i \ -outline $tkxox(score_active_note) -fill {} ${score} create line 8.286339i 0.422874i 8.286339i 0.602165i -fill $tkxox(score_active_note) ${score} create polygon 8.243780i 0.640197i 8.251024i 0.639291i 8.253740i 0.638386i \ 8.255551i 0.638386i 8.258268i 0.637480i 8.265512i 0.634764i 8.272756i 0.632047i \ 8.275472i 0.630236i 8.277283i 0.629331i 8.280000i 0.628425i 8.285433i 0.623898i \ 8.289961i 0.619370i 8.291772i 0.617559i 8.292677i 0.616654i 8.294488i 0.613937i \ 8.295394i 0.609409i 8.295394i 0.606693i 8.295394i 0.603976i 8.295394i 0.603071i \ 8.295394i 0.602165i 8.294488i 0.601260i 8.293583i 0.600354i 8.291772i 0.598543i \ 8.289055i 0.596732i 8.283622i 0.594016i 8.280000i 0.594016i 8.278189i 0.593110i \ 8.274567i 0.593110i 8.266417i 0.593110i 8.259173i 0.594016i 8.255551i 0.594016i \ 8.253740i 0.594016i 8.250118i 0.594921i 8.243780i 0.597638i 8.237441i 0.600354i \ 8.235630i 0.602165i 8.234724i 0.603071i 8.232913i 0.604882i 8.229291i 0.608504i \ 8.225669i 0.611220i 8.224764i 0.612126i 8.223858i 0.613937i 8.222047i 0.616654i \ 8.220236i 0.620276i 8.219331i 0.622087i 8.218425i 0.622992i 8.218425i 0.624803i \ 8.218425i 0.628425i 8.219331i 0.631142i 8.219331i 0.632047i 8.219331i 0.632953i \ 8.219331i 0.633858i 8.220236i 0.633858i 8.220236i 0.634764i 8.222047i 0.635669i \ 8.224764i 0.637480i 8.229291i 0.639291i 8.232008i 0.640197i 8.233819i 0.640197i \ 8.236535i 0.640197i -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 8.243780i 0.640197i 8.251024i 0.639291i 8.253740i 0.638386i \ 8.255551i 0.638386i 8.258268i 0.637480i 8.265512i 0.634764i 8.272756i 0.632047i \ 8.275472i 0.630236i 8.277283i 0.629331i 8.280000i 0.628425i 8.285433i 0.623898i \ 8.289961i 0.619370i 8.291772i 0.617559i 8.292677i 0.616654i 8.294488i 0.613937i \ 8.295394i 0.609409i 8.295394i 0.606693i 8.295394i 0.603976i 8.295394i 0.603071i \ 8.295394i 0.602165i 8.294488i 0.601260i 8.293583i 0.600354i 8.291772i 0.598543i \ 8.289055i 0.596732i 8.283622i 0.594016i 8.280000i 0.594016i 8.278189i 0.593110i \ 8.274567i 0.593110i 8.266417i 0.593110i 8.259173i 0.594016i 8.255551i 0.594016i \ 8.253740i 0.594016i 8.250118i 0.594921i 8.243780i 0.597638i 8.237441i 0.600354i \ 8.235630i 0.602165i 8.234724i 0.603071i 8.232913i 0.604882i 8.229291i 0.608504i \ 8.225669i 0.611220i 8.224764i 0.612126i 8.223858i 0.613937i 8.222047i 0.616654i \ 8.220236i 0.620276i 8.219331i 0.622087i 8.218425i 0.622992i 8.218425i 0.624803i \ 8.218425i 0.628425i 8.219331i 0.631142i 8.219331i 0.632047i 8.219331i 0.632953i \ 8.219331i 0.633858i 8.220236i 0.633858i 8.220236i 0.634764i 8.222047i 0.635669i \ 8.224764i 0.637480i 8.229291i 0.639291i 8.232008i 0.640197i 8.233819i 0.640197i \ 8.236535i 0.640197i -outline $tkxox(score_active_note) -fill {} ${score} create polygon 8.290866i 0.441890i 8.291772i 0.447323i 8.292677i 0.449134i \ 8.292677i 0.450039i 8.293583i 0.451850i 8.295394i 0.456378i 8.297205i 0.460000i \ 8.298110i 0.460906i 8.302638i 0.464528i 8.308976i 0.469961i 8.312598i 0.472677i \ 8.315315i 0.474488i 8.319843i 0.477205i 8.327992i 0.484449i 8.336142i 0.490787i \ 8.339764i 0.493504i 8.340669i 0.494409i 8.344291i 0.498031i 8.349724i 0.504370i \ 8.354252i 0.511614i 8.356063i 0.514331i 8.356063i 0.515236i 8.356969i 0.517953i \ 8.358780i 0.525197i 8.359685i 0.532441i 8.359685i 0.535157i 8.358780i 0.538780i \ 8.356969i 0.547835i 8.354252i 0.557795i 8.351535i 0.564134i 8.349724i 0.568661i \ 8.347913i 0.572283i 8.345197i 0.577717i 8.342480i 0.584961i 8.342480i 0.585866i \ 8.341575i 0.586772i 8.341575i 0.587677i 8.340669i 0.588583i 8.340669i 0.589488i \ 8.340669i 0.590394i 8.339764i 0.590394i 8.339764i 0.589488i 8.340669i 0.588583i \ 8.340669i 0.587677i 8.340669i 0.586772i 8.341575i 0.585866i 8.341575i 0.584961i \ 8.343386i 0.578622i 8.345197i 0.574094i 8.347008i 0.570472i 8.348819i 0.566850i \ 8.350630i 0.561417i 8.353346i 0.553268i 8.355157i 0.545118i 8.356063i 0.542402i \ 8.356969i 0.542402i 8.356969i 0.539685i 8.356063i 0.532441i 8.353346i 0.524291i \ 8.352441i 0.520669i 8.351535i 0.519764i 8.349724i 0.516142i 8.343386i 0.507992i \ 8.337047i 0.501654i 8.333425i 0.498031i 8.331614i 0.496220i 8.328898i 0.495315i \ 8.325276i 0.492598i 8.317126i 0.487165i 8.308071i 0.481732i 8.303543i 0.479921i \ 8.300827i 0.479016i 8.297205i 0.477205i 8.290866i 0.474488i 8.289961i 0.474488i \ 8.289055i 0.473583i 8.288150i 0.473583i 8.287244i 0.473583i 8.286339i 0.474488i \ 8.286339i 0.475394i 8.287244i 0.476299i 8.287244i 0.477205i 8.287244i 0.478110i \ 8.287244i 0.479016i 8.288150i 0.479016i 8.288150i 0.479921i 8.288150i 0.480827i \ 8.288150i 0.479921i 8.288150i 0.479016i 8.288150i 0.478110i 8.288150i 0.477205i \ 8.288150i 0.475394i 8.288150i 0.474488i 8.288150i 0.464528i 8.288150i 0.455472i \ 8.289055i 0.447323i 8.289055i 0.440079i 8.289055i 0.431929i 8.289961i 0.423780i \ 8.289961i 0.421969i 8.289961i 0.424685i 8.289961i 0.430118i 8.289961i 0.435551i \ -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 8.290866i 0.441890i 8.291772i 0.447323i 8.292677i 0.449134i \ 8.292677i 0.450039i 8.293583i 0.451850i 8.295394i 0.456378i 8.297205i 0.460000i \ 8.298110i 0.460906i 8.302638i 0.464528i 8.308976i 0.469961i 8.312598i 0.472677i \ 8.315315i 0.474488i 8.319843i 0.477205i 8.327992i 0.484449i 8.336142i 0.490787i \ 8.339764i 0.493504i 8.340669i 0.494409i 8.344291i 0.498031i 8.349724i 0.504370i \ 8.354252i 0.511614i 8.356063i 0.514331i 8.356063i 0.515236i 8.356969i 0.517953i \ 8.358780i 0.525197i 8.359685i 0.532441i 8.359685i 0.535157i 8.358780i 0.538780i \ 8.356969i 0.547835i 8.354252i 0.557795i 8.351535i 0.564134i 8.349724i 0.568661i \ 8.347913i 0.572283i 8.345197i 0.577717i 8.342480i 0.584961i 8.342480i 0.585866i \ 8.341575i 0.586772i 8.341575i 0.587677i 8.340669i 0.588583i 8.340669i 0.589488i \ 8.340669i 0.590394i 8.339764i 0.590394i 8.339764i 0.589488i 8.340669i 0.588583i \ 8.340669i 0.587677i 8.340669i 0.586772i 8.341575i 0.585866i 8.341575i 0.584961i \ 8.343386i 0.578622i 8.345197i 0.574094i 8.347008i 0.570472i 8.348819i 0.566850i \ 8.350630i 0.561417i 8.353346i 0.553268i 8.355157i 0.545118i 8.356063i 0.542402i \ 8.356969i 0.542402i 8.356969i 0.539685i 8.356063i 0.532441i 8.353346i 0.524291i \ 8.352441i 0.520669i 8.351535i 0.519764i 8.349724i 0.516142i 8.343386i 0.507992i \ 8.337047i 0.501654i 8.333425i 0.498031i 8.331614i 0.496220i 8.328898i 0.495315i \ 8.325276i 0.492598i 8.317126i 0.487165i 8.308071i 0.481732i 8.303543i 0.479921i \ 8.300827i 0.479016i 8.297205i 0.477205i 8.290866i 0.474488i 8.289961i 0.474488i \ 8.289055i 0.473583i 8.288150i 0.473583i 8.287244i 0.473583i 8.286339i 0.474488i \ 8.286339i 0.475394i 8.287244i 0.476299i 8.287244i 0.477205i 8.287244i 0.478110i \ 8.287244i 0.479016i 8.288150i 0.479016i 8.288150i 0.479921i 8.288150i 0.480827i \ 8.288150i 0.479921i 8.288150i 0.479016i 8.288150i 0.478110i 8.288150i 0.477205i \ 8.288150i 0.475394i 8.288150i 0.474488i 8.288150i 0.464528i 8.288150i 0.455472i \ 8.289055i 0.447323i 8.289055i 0.440079i 8.289055i 0.431929i 8.289961i 0.423780i \ 8.289961i 0.421969i 8.289961i 0.424685i 8.289961i 0.430118i 8.289961i 0.435551i \ -outline $tkxox(score_active_note) -fill {} ${score} create line 9.045157i 0.422874i 9.045157i 0.602165i -fill $tkxox(score_active_note) ${score} create polygon 9.002598i 0.640197i 9.009843i 0.639291i 9.012559i 0.638386i \ 9.014370i 0.638386i 9.017087i 0.637480i 9.024331i 0.634764i 9.031575i 0.632047i \ 9.034291i 0.630236i 9.036102i 0.629331i 9.038819i 0.628425i 9.044252i 0.623898i \ 9.048780i 0.619370i 9.050591i 0.617559i 9.051496i 0.616654i 9.053307i 0.613937i \ 9.054213i 0.609409i 9.054213i 0.606693i 9.054213i 0.603976i 9.054213i 0.603071i \ 9.054213i 0.602165i 9.053307i 0.601260i 9.052402i 0.600354i 9.050591i 0.598543i \ 9.047874i 0.596732i 9.042441i 0.594016i 9.038819i 0.594016i 9.037008i 0.593110i \ 9.033386i 0.593110i 9.025236i 0.593110i 9.017992i 0.594016i 9.014370i 0.594016i \ 9.012559i 0.594016i 9.008937i 0.594921i 9.002598i 0.597638i 8.996260i 0.600354i \ 8.994449i 0.602165i 8.993543i 0.603071i 8.991732i 0.604882i 8.988110i 0.608504i \ 8.984488i 0.611220i 8.983583i 0.612126i 8.982677i 0.613937i 8.980866i 0.616654i \ 8.979055i 0.620276i 8.978150i 0.622087i 8.977244i 0.622992i 8.977244i 0.624803i \ 8.977244i 0.628425i 8.978150i 0.631142i 8.979055i 0.632953i 8.979055i 0.633858i \ 8.979961i 0.633858i 8.980866i 0.635669i 8.984488i 0.637480i 8.989016i 0.639291i \ 8.991732i 0.640197i 8.992638i 0.640197i 8.996260i 0.640197i -outline {} -fill $tkxox(score_active_note) \ -width 0 ${score} create polygon 9.002598i 0.640197i 9.009843i 0.639291i 9.012559i 0.638386i \ 9.014370i 0.638386i 9.017087i 0.637480i 9.024331i 0.634764i 9.031575i 0.632047i \ 9.034291i 0.630236i 9.036102i 0.629331i 9.038819i 0.628425i 9.044252i 0.623898i \ 9.048780i 0.619370i 9.050591i 0.617559i 9.051496i 0.616654i 9.053307i 0.613937i \ 9.054213i 0.609409i 9.054213i 0.606693i 9.054213i 0.603976i 9.054213i 0.603071i \ 9.054213i 0.602165i 9.053307i 0.601260i 9.052402i 0.600354i 9.050591i 0.598543i \ 9.047874i 0.596732i 9.042441i 0.594016i 9.038819i 0.594016i 9.037008i 0.593110i \ 9.033386i 0.593110i 9.025236i 0.593110i 9.017992i 0.594016i 9.014370i 0.594016i \ 9.012559i 0.594016i 9.008937i 0.594921i 9.002598i 0.597638i 8.996260i 0.600354i \ 8.994449i 0.602165i 8.993543i 0.603071i 8.991732i 0.604882i 8.988110i 0.608504i \ 8.984488i 0.611220i 8.983583i 0.612126i 8.982677i 0.613937i 8.980866i 0.616654i \ 8.979055i 0.620276i 8.978150i 0.622087i 8.977244i 0.622992i 8.977244i 0.624803i \ 8.977244i 0.628425i 8.978150i 0.631142i 8.979055i 0.632953i 8.979055i 0.633858i \ 8.979961i 0.633858i 8.980866i 0.635669i 8.984488i 0.637480i 8.989016i 0.639291i \ 8.991732i 0.640197i 8.992638i 0.640197i 8.996260i 0.640197i -outline $tkxox(score_active_note) -fill \ {} ${score} create polygon 9.050591i 0.441890i 9.051496i 0.447323i 9.051496i 0.449134i \ 9.051496i 0.450039i 9.052402i 0.451850i 9.054213i 0.456378i 9.056024i 0.460000i \ 9.056929i 0.460000i 9.057835i 0.460906i 9.062362i 0.464528i 9.068701i 0.469961i \ 9.072323i 0.472677i 9.075039i 0.474488i 9.078661i 0.477205i 9.086811i 0.484449i \ 9.094961i 0.490787i 9.097677i 0.493504i 9.099488i 0.494409i 9.102205i 0.498031i \ 9.108543i 0.504370i 9.113976i 0.511614i 9.115787i 0.514331i 9.115787i 0.515236i \ 9.117598i 0.517953i 9.119409i 0.525197i 9.120315i 0.532441i 9.120315i 0.535157i \ 9.120315i 0.538780i 9.117598i 0.547835i 9.114882i 0.557795i 9.112165i 0.564134i \ 9.109449i 0.568661i 9.107638i 0.572283i 9.104921i 0.577717i 9.102205i 0.584961i \ 9.102205i 0.585866i 9.101299i 0.586772i 9.101299i 0.587677i 9.100394i 0.587677i \ 9.100394i 0.588583i 9.100394i 0.589488i 9.099488i 0.589488i 9.099488i 0.590394i \ 9.098583i 0.590394i 9.098583i 0.589488i 9.099488i 0.588583i 9.099488i 0.587677i \ 9.099488i 0.586772i 9.100394i 0.585866i 9.100394i 0.584961i 9.103110i 0.578622i \ 9.104921i 0.574094i 9.106732i 0.570472i 9.108543i 0.566850i 9.111260i 0.561417i \ 9.113976i 0.553268i 9.116693i 0.546024i 9.117598i 0.542402i 9.118504i 0.542402i \ 9.118504i 0.541496i 9.118504i 0.538780i 9.117598i 0.532441i 9.114882i 0.524291i \ 9.113071i 0.520669i 9.111260i 0.519764i 9.108543i 0.516142i 9.102205i 0.507992i \ 9.095866i 0.501654i 9.092244i 0.498031i 9.090433i 0.496220i 9.088622i 0.495315i \ 9.084094i 0.492598i 9.076850i 0.487165i 9.067795i 0.481732i 9.063268i 0.479921i \ 9.060551i 0.479016i 9.056929i 0.477205i 9.050591i 0.474488i 9.049685i 0.474488i \ 9.048780i 0.473583i 9.047874i 0.473583i 9.046969i 0.473583i 9.046063i 0.473583i \ 9.046063i 0.474488i 9.046063i 0.475394i 9.046063i 0.476299i 9.046063i 0.477205i \ 9.046063i 0.478110i 9.046969i 0.479016i 9.046969i 0.479921i 9.046969i 0.480827i \ 9.046969i 0.479921i 9.046969i 0.479016i 9.046969i 0.478110i 9.046969i 0.477205i \ 9.046969i 0.475394i 9.046969i 0.474488i 9.046969i 0.464528i 9.047874i 0.455472i \ 9.047874i 0.447323i 9.048780i 0.440079i 9.048780i 0.431929i 9.049685i 0.423780i \ 9.050591i 0.421969i 9.050591i 0.424685i 9.049685i 0.430118i 9.049685i 0.435551i \ -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 9.050591i 0.441890i 9.051496i 0.447323i 9.051496i 0.449134i \ 9.051496i 0.450039i 9.052402i 0.451850i 9.054213i 0.456378i 9.056024i 0.460000i \ 9.056929i 0.460000i 9.057835i 0.460906i 9.062362i 0.464528i 9.068701i 0.469961i \ 9.072323i 0.472677i 9.075039i 0.474488i 9.078661i 0.477205i 9.086811i 0.484449i \ 9.094961i 0.490787i 9.097677i 0.493504i 9.099488i 0.494409i 9.102205i 0.498031i \ 9.108543i 0.504370i 9.113976i 0.511614i 9.115787i 0.514331i 9.115787i 0.515236i \ 9.117598i 0.517953i 9.119409i 0.525197i 9.120315i 0.532441i 9.120315i 0.535157i \ 9.120315i 0.538780i 9.117598i 0.547835i 9.114882i 0.557795i 9.112165i 0.564134i \ 9.109449i 0.568661i 9.107638i 0.572283i 9.104921i 0.577717i 9.102205i 0.584961i \ 9.102205i 0.585866i 9.101299i 0.586772i 9.101299i 0.587677i 9.100394i 0.587677i \ 9.100394i 0.588583i 9.100394i 0.589488i 9.099488i 0.589488i 9.099488i 0.590394i \ 9.098583i 0.590394i 9.098583i 0.589488i 9.099488i 0.588583i 9.099488i 0.587677i \ 9.099488i 0.586772i 9.100394i 0.585866i 9.100394i 0.584961i 9.103110i 0.578622i \ 9.104921i 0.574094i 9.106732i 0.570472i 9.108543i 0.566850i 9.111260i 0.561417i \ 9.113976i 0.553268i 9.116693i 0.546024i 9.117598i 0.542402i 9.118504i 0.542402i \ 9.118504i 0.541496i 9.118504i 0.538780i 9.117598i 0.532441i 9.114882i 0.524291i \ 9.113071i 0.520669i 9.111260i 0.519764i 9.108543i 0.516142i 9.102205i 0.507992i \ 9.095866i 0.501654i 9.092244i 0.498031i 9.090433i 0.496220i 9.088622i 0.495315i \ 9.084094i 0.492598i 9.076850i 0.487165i 9.067795i 0.481732i 9.063268i 0.479921i \ 9.060551i 0.479016i 9.056929i 0.477205i 9.050591i 0.474488i 9.049685i 0.474488i \ 9.048780i 0.473583i 9.047874i 0.473583i 9.046969i 0.473583i 9.046063i 0.473583i \ 9.046063i 0.474488i 9.046063i 0.475394i 9.046063i 0.476299i 9.046063i 0.477205i \ 9.046063i 0.478110i 9.046969i 0.479016i 9.046969i 0.479921i 9.046969i 0.480827i \ 9.046969i 0.479921i 9.046969i 0.479016i 9.046969i 0.478110i 9.046969i 0.477205i \ 9.046969i 0.475394i 9.046969i 0.474488i 9.046969i 0.464528i 9.047874i 0.455472i \ 9.047874i 0.447323i 9.048780i 0.440079i 9.048780i 0.431929i 9.049685i 0.423780i \ 9.050591i 0.421969i 9.050591i 0.424685i 9.049685i 0.430118i 9.049685i 0.435551i \ -outline $tkxox(score_active_note) -fill {} ${score} create line 9.047874i 1.060354i 9.047874i 1.264094i -fill $tkxox(score_active_note) ${score} create polygon 9.004409i 1.306654i 9.011654i 1.305748i 9.014370i 1.305748i \ 9.016181i 1.304843i 9.018898i 1.303937i 9.026142i 1.301220i 9.033386i 1.297598i \ 9.036102i 1.295787i 9.037913i 1.295787i 9.040630i 1.293071i 9.046063i 1.288543i \ 9.051496i 1.283110i 9.053307i 1.281299i 9.055118i 1.280394i 9.056024i 1.277677i \ 9.057835i 1.272244i 9.057835i 1.268622i 9.057835i 1.265906i 9.056929i 1.265000i \ 9.056929i 1.264094i 9.056929i 1.263189i 9.056024i 1.262283i 9.053307i 1.260472i \ 9.050591i 1.257756i 9.045157i 1.255039i 9.041535i 1.253228i 9.039724i 1.253228i \ 9.036102i 1.252323i 9.027953i 1.252323i 9.019803i 1.253228i 9.016181i 1.254134i \ 9.015276i 1.255039i 9.011654i 1.256850i 9.004409i 1.259567i 8.998071i 1.262283i \ 8.995354i 1.263189i 8.994449i 1.264094i 8.992638i 1.265906i 8.988110i 1.268622i \ 8.984488i 1.272244i 8.983583i 1.273150i 8.982677i 1.274961i 8.980866i 1.278583i \ 8.979055i 1.283110i 8.978150i 1.284921i 8.977244i 1.286732i 8.977244i 1.288543i \ 8.977244i 1.293071i 8.978150i 1.297598i 8.979055i 1.299409i 8.979055i 1.300315i \ 8.980866i 1.301220i 8.984488i 1.303937i 8.989921i 1.305748i 8.992638i 1.306654i \ 8.994449i 1.306654i 8.997165i 1.306654i -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 9.004409i 1.306654i 9.011654i 1.305748i 9.014370i 1.305748i \ 9.016181i 1.304843i 9.018898i 1.303937i 9.026142i 1.301220i 9.033386i 1.297598i \ 9.036102i 1.295787i 9.037913i 1.295787i 9.040630i 1.293071i 9.046063i 1.288543i \ 9.051496i 1.283110i 9.053307i 1.281299i 9.055118i 1.280394i 9.056024i 1.277677i \ 9.057835i 1.272244i 9.057835i 1.268622i 9.057835i 1.265906i 9.056929i 1.265000i \ 9.056929i 1.264094i 9.056929i 1.263189i 9.056024i 1.262283i 9.053307i 1.260472i \ 9.050591i 1.257756i 9.045157i 1.255039i 9.041535i 1.253228i 9.039724i 1.253228i \ 9.036102i 1.252323i 9.027953i 1.252323i 9.019803i 1.253228i 9.016181i 1.254134i \ 9.015276i 1.255039i 9.011654i 1.256850i 9.004409i 1.259567i 8.998071i 1.262283i \ 8.995354i 1.263189i 8.994449i 1.264094i 8.992638i 1.265906i 8.988110i 1.268622i \ 8.984488i 1.272244i 8.983583i 1.273150i 8.982677i 1.274961i 8.980866i 1.278583i \ 8.979055i 1.283110i 8.978150i 1.284921i 8.977244i 1.286732i 8.977244i 1.288543i \ 8.977244i 1.293071i 8.978150i 1.297598i 8.979055i 1.299409i 8.979055i 1.300315i \ 8.980866i 1.301220i 8.984488i 1.303937i 8.989921i 1.305748i 8.992638i 1.306654i \ 8.994449i 1.306654i 8.997165i 1.306654i -outline $tkxox(score_active_note) -fill {} ${score} create line 9.651850i 0.422874i 9.651850i 0.602165i -fill $tkxox(score_active_note) ${score} create polygon 9.609291i 0.640197i 9.616535i 0.639291i 9.619252i 0.638386i \ 9.621063i 0.638386i 9.623780i 0.637480i 9.631024i 0.634764i 9.638268i 0.632047i \ 9.640984i 0.630236i 9.642795i 0.629331i 9.645512i 0.628425i 9.650945i 0.623898i \ 9.655472i 0.619370i 9.657283i 0.617559i 9.658189i 0.616654i 9.660000i 0.613937i \ 9.660906i 0.609409i 9.660906i 0.606693i 9.660906i 0.603976i 9.660906i 0.603071i \ 9.660906i 0.602165i 9.660000i 0.601260i 9.659094i 0.600354i 9.657283i 0.598543i \ 9.654567i 0.596732i 9.649134i 0.594016i 9.645512i 0.594016i 9.643701i 0.593110i \ 9.640079i 0.593110i 9.631929i 0.593110i 9.624685i 0.594016i 9.621063i 0.594016i \ 9.619252i 0.594016i 9.615630i 0.594921i 9.609291i 0.597638i 9.602953i 0.600354i \ 9.601142i 0.602165i 9.600236i 0.603071i 9.598425i 0.604882i 9.594803i 0.608504i \ 9.591181i 0.611220i 9.590276i 0.612126i 9.589370i 0.613937i 9.587559i 0.616654i \ 9.585748i 0.620276i 9.584843i 0.622087i 9.583937i 0.622992i 9.583937i 0.624803i \ 9.583937i 0.628425i 9.584843i 0.631142i 9.584843i 0.632047i 9.584843i 0.632953i \ 9.584843i 0.633858i 9.585748i 0.633858i 9.585748i 0.634764i 9.587559i 0.635669i \ 9.590276i 0.637480i 9.594803i 0.639291i 9.597520i 0.640197i 9.599331i 0.640197i \ 9.602047i 0.640197i -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 9.609291i 0.640197i 9.616535i 0.639291i 9.619252i 0.638386i \ 9.621063i 0.638386i 9.623780i 0.637480i 9.631024i 0.634764i 9.638268i 0.632047i \ 9.640984i 0.630236i 9.642795i 0.629331i 9.645512i 0.628425i 9.650945i 0.623898i \ 9.655472i 0.619370i 9.657283i 0.617559i 9.658189i 0.616654i 9.660000i 0.613937i \ 9.660906i 0.609409i 9.660906i 0.606693i 9.660906i 0.603976i 9.660906i 0.603071i \ 9.660906i 0.602165i 9.660000i 0.601260i 9.659094i 0.600354i 9.657283i 0.598543i \ 9.654567i 0.596732i 9.649134i 0.594016i 9.645512i 0.594016i 9.643701i 0.593110i \ 9.640079i 0.593110i 9.631929i 0.593110i 9.624685i 0.594016i 9.621063i 0.594016i \ 9.619252i 0.594016i 9.615630i 0.594921i 9.609291i 0.597638i 9.602953i 0.600354i \ 9.601142i 0.602165i 9.600236i 0.603071i 9.598425i 0.604882i 9.594803i 0.608504i \ 9.591181i 0.611220i 9.590276i 0.612126i 9.589370i 0.613937i 9.587559i 0.616654i \ 9.585748i 0.620276i 9.584843i 0.622087i 9.583937i 0.622992i 9.583937i 0.624803i \ 9.583937i 0.628425i 9.584843i 0.631142i 9.584843i 0.632047i 9.584843i 0.632953i \ 9.584843i 0.633858i 9.585748i 0.633858i 9.585748i 0.634764i 9.587559i 0.635669i \ 9.590276i 0.637480i 9.594803i 0.639291i 9.597520i 0.640197i 9.599331i 0.640197i \ 9.602047i 0.640197i -outline $tkxox(score_active_note) -fill {} ${score} create polygon 9.656378i 0.441890i 9.657283i 0.447323i 9.658189i 0.449134i \ 9.658189i 0.450039i 9.659094i 0.451850i 9.660906i 0.456378i 9.662717i 0.460000i \ 9.663622i 0.460906i 9.668150i 0.464528i 9.674488i 0.469961i 9.678110i 0.472677i \ 9.680827i 0.474488i 9.685354i 0.477205i 9.693504i 0.484449i 9.701654i 0.490787i \ 9.705276i 0.493504i 9.706181i 0.494409i 9.709803i 0.498031i 9.715236i 0.504370i \ 9.719764i 0.511614i 9.721575i 0.514331i 9.721575i 0.515236i 9.722480i 0.517953i \ 9.724291i 0.525197i 9.725197i 0.532441i 9.725197i 0.535157i 9.724291i 0.538780i \ 9.722480i 0.547835i 9.719764i 0.557795i 9.717047i 0.564134i 9.715236i 0.568661i \ 9.713425i 0.572283i 9.710709i 0.577717i 9.707992i 0.584961i 9.707992i 0.585866i \ 9.707087i 0.586772i 9.707087i 0.587677i 9.706181i 0.588583i 9.706181i 0.589488i \ 9.706181i 0.590394i 9.705276i 0.590394i 9.705276i 0.589488i 9.706181i 0.588583i \ 9.706181i 0.587677i 9.706181i 0.586772i 9.707087i 0.585866i 9.707087i 0.584961i \ 9.708898i 0.578622i 9.710709i 0.574094i 9.712520i 0.570472i 9.714331i 0.566850i \ 9.716142i 0.561417i 9.718858i 0.553268i 9.720669i 0.545118i 9.721575i 0.542402i \ 9.722480i 0.542402i 9.722480i 0.539685i 9.721575i 0.532441i 9.718858i 0.524291i \ 9.717953i 0.520669i 9.717047i 0.519764i 9.715236i 0.516142i 9.708898i 0.507992i \ 9.702559i 0.501654i 9.698937i 0.498031i 9.697126i 0.496220i 9.694409i 0.495315i \ 9.690787i 0.492598i 9.682638i 0.487165i 9.673583i 0.481732i 9.669055i 0.479921i \ 9.666339i 0.479016i 9.662717i 0.477205i 9.656378i 0.474488i 9.655472i 0.474488i \ 9.654567i 0.473583i 9.653661i 0.473583i 9.652756i 0.473583i 9.651850i 0.474488i \ 9.651850i 0.475394i 9.652756i 0.476299i 9.652756i 0.477205i 9.652756i 0.478110i \ 9.652756i 0.479016i 9.653661i 0.479016i 9.653661i 0.479921i 9.653661i 0.480827i \ 9.653661i 0.479921i 9.653661i 0.479016i 9.653661i 0.478110i 9.653661i 0.477205i \ 9.653661i 0.475394i 9.653661i 0.474488i 9.653661i 0.464528i 9.653661i 0.455472i \ 9.654567i 0.447323i 9.654567i 0.440079i 9.654567i 0.431929i 9.655472i 0.423780i \ 9.655472i 0.421969i 9.655472i 0.424685i 9.655472i 0.430118i 9.655472i 0.435551i \ -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 9.656378i 0.441890i 9.657283i 0.447323i 9.658189i 0.449134i \ 9.658189i 0.450039i 9.659094i 0.451850i 9.660906i 0.456378i 9.662717i 0.460000i \ 9.663622i 0.460906i 9.668150i 0.464528i 9.674488i 0.469961i 9.678110i 0.472677i \ 9.680827i 0.474488i 9.685354i 0.477205i 9.693504i 0.484449i 9.701654i 0.490787i \ 9.705276i 0.493504i 9.706181i 0.494409i 9.709803i 0.498031i 9.715236i 0.504370i \ 9.719764i 0.511614i 9.721575i 0.514331i 9.721575i 0.515236i 9.722480i 0.517953i \ 9.724291i 0.525197i 9.725197i 0.532441i 9.725197i 0.535157i 9.724291i 0.538780i \ 9.722480i 0.547835i 9.719764i 0.557795i 9.717047i 0.564134i 9.715236i 0.568661i \ 9.713425i 0.572283i 9.710709i 0.577717i 9.707992i 0.584961i 9.707992i 0.585866i \ 9.707087i 0.586772i 9.707087i 0.587677i 9.706181i 0.588583i 9.706181i 0.589488i \ 9.706181i 0.590394i 9.705276i 0.590394i 9.705276i 0.589488i 9.706181i 0.588583i \ 9.706181i 0.587677i 9.706181i 0.586772i 9.707087i 0.585866i 9.707087i 0.584961i \ 9.708898i 0.578622i 9.710709i 0.574094i 9.712520i 0.570472i 9.714331i 0.566850i \ 9.716142i 0.561417i 9.718858i 0.553268i 9.720669i 0.545118i 9.721575i 0.542402i \ 9.722480i 0.542402i 9.722480i 0.539685i 9.721575i 0.532441i 9.718858i 0.524291i \ 9.717953i 0.520669i 9.717047i 0.519764i 9.715236i 0.516142i 9.708898i 0.507992i \ 9.702559i 0.501654i 9.698937i 0.498031i 9.697126i 0.496220i 9.694409i 0.495315i \ 9.690787i 0.492598i 9.682638i 0.487165i 9.673583i 0.481732i 9.669055i 0.479921i \ 9.666339i 0.479016i 9.662717i 0.477205i 9.656378i 0.474488i 9.655472i 0.474488i \ 9.654567i 0.473583i 9.653661i 0.473583i 9.652756i 0.473583i 9.651850i 0.474488i \ 9.651850i 0.475394i 9.652756i 0.476299i 9.652756i 0.477205i 9.652756i 0.478110i \ 9.652756i 0.479016i 9.653661i 0.479016i 9.653661i 0.479921i 9.653661i 0.480827i \ 9.653661i 0.479921i 9.653661i 0.479016i 9.653661i 0.478110i 9.653661i 0.477205i \ 9.653661i 0.475394i 9.653661i 0.474488i 9.653661i 0.464528i 9.653661i 0.455472i \ 9.654567i 0.447323i 9.654567i 0.440079i 9.654567i 0.431929i 9.655472i 0.423780i \ 9.655472i 0.421969i 9.655472i 0.424685i 9.655472i 0.430118i 9.655472i 0.435551i \ -outline $tkxox(score_active_note) -fill {} ${score} create line 5.032835i 0.086024i 5.032835i 0.266220i -fill $tkxox(score_active_note) ${score} create polygon 4.991181i 0.301535i 4.998425i 0.300630i 5.001142i 0.300630i \ 5.002953i 0.300630i 5.005669i 0.299724i 5.012913i 0.297913i 5.020157i 0.295197i \ 5.022874i 0.293386i 5.024685i 0.293386i 5.027402i 0.291575i 5.032835i 0.287047i \ 5.037362i 0.282520i 5.039173i 0.280709i 5.040079i 0.279803i 5.041890i 0.277087i \ 5.042795i 0.272559i 5.042795i 0.269843i 5.042795i 0.267126i 5.041890i 0.266220i \ 5.041890i 0.265315i 5.040984i 0.264409i 5.040079i 0.263504i 5.038268i 0.261693i \ 5.035551i 0.259882i 5.030118i 0.257165i 5.026496i 0.256260i 5.024685i 0.256260i \ 5.021063i 0.255354i 5.013819i 0.255354i 5.006575i 0.256260i 5.002953i 0.256260i \ 5.001142i 0.257165i 4.997520i 0.258071i 4.991181i 0.260787i 4.985748i 0.263504i \ 4.983031i 0.265315i 4.982126i 0.266220i 4.980315i 0.268031i 4.976693i 0.271654i \ 4.973071i 0.274370i 4.972165i 0.275276i 4.971260i 0.275276i 4.970354i 0.276181i \ 4.968543i 0.278898i 4.966732i 0.282520i 4.965827i 0.284331i 4.965827i 0.285236i \ 4.965827i 0.287047i 4.965827i 0.290669i 4.966732i 0.294291i 4.966732i 0.296102i \ 4.967638i 0.297008i 4.968543i 0.298819i 4.972165i 0.300630i 4.976693i 0.302441i \ 4.979409i 0.302441i 4.981220i 0.302441i 4.983937i 0.301535i -outline {} -fill $tkxox(score_active_note) \ -width 0 ${score} create polygon 4.991181i 0.301535i 4.998425i 0.300630i 5.001142i 0.300630i \ 5.002953i 0.300630i 5.005669i 0.299724i 5.012913i 0.297913i 5.020157i 0.295197i \ 5.022874i 0.293386i 5.024685i 0.293386i 5.027402i 0.291575i 5.032835i 0.287047i \ 5.037362i 0.282520i 5.039173i 0.280709i 5.040079i 0.279803i 5.041890i 0.277087i \ 5.042795i 0.272559i 5.042795i 0.269843i 5.042795i 0.267126i 5.041890i 0.266220i \ 5.041890i 0.265315i 5.040984i 0.264409i 5.040079i 0.263504i 5.038268i 0.261693i \ 5.035551i 0.259882i 5.030118i 0.257165i 5.026496i 0.256260i 5.024685i 0.256260i \ 5.021063i 0.255354i 5.013819i 0.255354i 5.006575i 0.256260i 5.002953i 0.256260i \ 5.001142i 0.257165i 4.997520i 0.258071i 4.991181i 0.260787i 4.985748i 0.263504i \ 4.983031i 0.265315i 4.982126i 0.266220i 4.980315i 0.268031i 4.976693i 0.271654i \ 4.973071i 0.274370i 4.972165i 0.275276i 4.971260i 0.275276i 4.970354i 0.276181i \ 4.968543i 0.278898i 4.966732i 0.282520i 4.965827i 0.284331i 4.965827i 0.285236i \ 4.965827i 0.287047i 4.965827i 0.290669i 4.966732i 0.294291i 4.966732i 0.296102i \ 4.967638i 0.297008i 4.968543i 0.298819i 4.972165i 0.300630i 4.976693i 0.302441i \ 4.979409i 0.302441i 4.981220i 0.302441i 4.983937i 0.301535i -outline $tkxox(score_active_note) -fill \ {} ${score} create polygon 5.038268i 0.104134i 5.039173i 0.109567i 5.040079i 0.111378i \ 5.040079i 0.112283i 5.040984i 0.114094i 5.042795i 0.118622i 5.044606i 0.122244i \ 5.044606i 0.123150i 5.044606i 0.122244i 5.045512i 0.123150i 5.050039i 0.127677i \ 5.056378i 0.133110i 5.060000i 0.135827i 5.061811i 0.137638i 5.066339i 0.140354i \ 5.074488i 0.147598i 5.082638i 0.153937i 5.087165i 0.157559i 5.088976i 0.158465i \ 5.092598i 0.161181i 5.098937i 0.167520i 5.103465i 0.173858i 5.105276i 0.175669i \ 5.105276i 0.176575i 5.106181i 0.179291i 5.107992i 0.185630i 5.108898i 0.192874i \ 5.108898i 0.195591i 5.108898i 0.196496i 5.108898i 0.200118i 5.106181i 0.210079i \ 5.102559i 0.220039i 5.099843i 0.226378i 5.098031i 0.230906i 5.096220i 0.234528i \ 5.093504i 0.239961i 5.089882i 0.247205i 5.088976i 0.248110i 5.088976i 0.249016i \ 5.088976i 0.249921i 5.088071i 0.249921i 5.088071i 0.250827i 5.088071i 0.251732i \ 5.087165i 0.251732i 5.087165i 0.252638i 5.086260i 0.252638i 5.086260i 0.251732i \ 5.087165i 0.250827i 5.087165i 0.249921i 5.087165i 0.249016i 5.088071i 0.248110i \ 5.088071i 0.247205i 5.090787i 0.241772i 5.092598i 0.237244i 5.094409i 0.233622i \ 5.096220i 0.230000i 5.098937i 0.224567i 5.101654i 0.216417i 5.104370i 0.208268i \ 5.105276i 0.204646i 5.106181i 0.203740i 5.106181i 0.201024i 5.105276i 0.193780i \ 5.102559i 0.186535i 5.100748i 0.182913i 5.099843i 0.182008i 5.097126i 0.178386i \ 5.090787i 0.171142i 5.084449i 0.164803i 5.080827i 0.161181i 5.079016i 0.160276i \ 5.076299i 0.158465i 5.072677i 0.155748i 5.064528i 0.150315i 5.055472i 0.144882i \ 5.050945i 0.142165i 5.048228i 0.141260i 5.044606i 0.139449i 5.038268i 0.136732i \ 5.037362i 0.136732i 5.036457i 0.135827i 5.035551i 0.135827i 5.034646i 0.135827i \ 5.033740i 0.135827i 5.033740i 0.136732i 5.033740i 0.137638i 5.033740i 0.138543i \ 5.033740i 0.139449i 5.033740i 0.140354i 5.034646i 0.140354i 5.034646i 0.141260i \ 5.034646i 0.142165i 5.034646i 0.141260i 5.034646i 0.140354i 5.034646i 0.139449i \ 5.034646i 0.137638i 5.034646i 0.136732i 5.034646i 0.126772i 5.035551i 0.117717i \ 5.035551i 0.110472i 5.036457i 0.103228i 5.036457i 0.094173i 5.037362i 0.086929i \ 5.038268i 0.085118i 5.037362i 0.087835i 5.037362i 0.092362i 5.037362i 0.097795i \ -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 5.038268i 0.104134i 5.039173i 0.109567i 5.040079i 0.111378i \ 5.040079i 0.112283i 5.040984i 0.114094i 5.042795i 0.118622i 5.044606i 0.122244i \ 5.044606i 0.123150i 5.044606i 0.122244i 5.045512i 0.123150i 5.050039i 0.127677i \ 5.056378i 0.133110i 5.060000i 0.135827i 5.061811i 0.137638i 5.066339i 0.140354i \ 5.074488i 0.147598i 5.082638i 0.153937i 5.087165i 0.157559i 5.088976i 0.158465i \ 5.092598i 0.161181i 5.098937i 0.167520i 5.103465i 0.173858i 5.105276i 0.175669i \ 5.105276i 0.176575i 5.106181i 0.179291i 5.107992i 0.185630i 5.108898i 0.192874i \ 5.108898i 0.195591i 5.108898i 0.196496i 5.108898i 0.200118i 5.106181i 0.210079i \ 5.102559i 0.220039i 5.099843i 0.226378i 5.098031i 0.230906i 5.096220i 0.234528i \ 5.093504i 0.239961i 5.089882i 0.247205i 5.088976i 0.248110i 5.088976i 0.249016i \ 5.088976i 0.249921i 5.088071i 0.249921i 5.088071i 0.250827i 5.088071i 0.251732i \ 5.087165i 0.251732i 5.087165i 0.252638i 5.086260i 0.252638i 5.086260i 0.251732i \ 5.087165i 0.250827i 5.087165i 0.249921i 5.087165i 0.249016i 5.088071i 0.248110i \ 5.088071i 0.247205i 5.090787i 0.241772i 5.092598i 0.237244i 5.094409i 0.233622i \ 5.096220i 0.230000i 5.098937i 0.224567i 5.101654i 0.216417i 5.104370i 0.208268i \ 5.105276i 0.204646i 5.106181i 0.203740i 5.106181i 0.201024i 5.105276i 0.193780i \ 5.102559i 0.186535i 5.100748i 0.182913i 5.099843i 0.182008i 5.097126i 0.178386i \ 5.090787i 0.171142i 5.084449i 0.164803i 5.080827i 0.161181i 5.079016i 0.160276i \ 5.076299i 0.158465i 5.072677i 0.155748i 5.064528i 0.150315i 5.055472i 0.144882i \ 5.050945i 0.142165i 5.048228i 0.141260i 5.044606i 0.139449i 5.038268i 0.136732i \ 5.037362i 0.136732i 5.036457i 0.135827i 5.035551i 0.135827i 5.034646i 0.135827i \ 5.033740i 0.135827i 5.033740i 0.136732i 5.033740i 0.137638i 5.033740i 0.138543i \ 5.033740i 0.139449i 5.033740i 0.140354i 5.034646i 0.140354i 5.034646i 0.141260i \ 5.034646i 0.142165i 5.034646i 0.141260i 5.034646i 0.140354i 5.034646i 0.139449i \ 5.034646i 0.137638i 5.034646i 0.136732i 5.034646i 0.126772i 5.035551i 0.117717i \ 5.035551i 0.110472i 5.036457i 0.103228i 5.036457i 0.094173i 5.037362i 0.086929i \ 5.038268i 0.085118i 5.037362i 0.087835i 5.037362i 0.092362i 5.037362i 0.097795i \ -outline $tkxox(score_active_note) -fill {} ${score} create line 5.032835i 0.422874i 5.032835i 0.602165i -fill $tkxox(score_active_note) ${score} create polygon 4.991181i 0.640197i 4.998425i 0.639291i 5.001142i 0.638386i \ 5.002953i 0.638386i 5.005669i 0.637480i 5.012913i 0.634764i 5.020157i 0.632047i \ 5.022874i 0.630236i 5.024685i 0.629331i 5.027402i 0.628425i 5.032835i 0.623898i \ 5.037362i 0.619370i 5.039173i 0.617559i 5.040079i 0.616654i 5.041890i 0.613937i \ 5.042795i 0.609409i 5.042795i 0.606693i 5.042795i 0.603976i 5.041890i 0.603071i \ 5.041890i 0.602165i 5.040984i 0.601260i 5.040079i 0.600354i 5.038268i 0.598543i \ 5.035551i 0.596732i 5.030118i 0.594016i 5.026496i 0.594016i 5.024685i 0.593110i \ 5.021063i 0.593110i 5.013819i 0.593110i 5.006575i 0.594016i 5.002953i 0.594016i \ 5.001142i 0.594016i 4.997520i 0.594921i 4.991181i 0.597638i 4.985748i 0.600354i \ 4.983031i 0.602165i 4.982126i 0.603071i 4.980315i 0.604882i 4.976693i 0.608504i \ 4.973071i 0.611220i 4.972165i 0.612126i 4.971260i 0.612126i 4.970354i 0.613937i \ 4.968543i 0.616654i 4.966732i 0.620276i 4.965827i 0.622087i 4.965827i 0.622992i \ 4.965827i 0.624803i 4.965827i 0.628425i 4.966732i 0.632047i 4.966732i 0.632953i \ 4.967638i 0.633858i 4.968543i 0.634764i 4.972165i 0.637480i 4.976693i 0.639291i \ 4.979409i 0.640197i 4.981220i 0.640197i 4.983937i 0.640197i -outline {} -fill $tkxox(score_active_note) \ -width 0 ${score} create polygon 4.991181i 0.640197i 4.998425i 0.639291i 5.001142i 0.638386i \ 5.002953i 0.638386i 5.005669i 0.637480i 5.012913i 0.634764i 5.020157i 0.632047i \ 5.022874i 0.630236i 5.024685i 0.629331i 5.027402i 0.628425i 5.032835i 0.623898i \ 5.037362i 0.619370i 5.039173i 0.617559i 5.040079i 0.616654i 5.041890i 0.613937i \ 5.042795i 0.609409i 5.042795i 0.606693i 5.042795i 0.603976i 5.041890i 0.603071i \ 5.041890i 0.602165i 5.040984i 0.601260i 5.040079i 0.600354i 5.038268i 0.598543i \ 5.035551i 0.596732i 5.030118i 0.594016i 5.026496i 0.594016i 5.024685i 0.593110i \ 5.021063i 0.593110i 5.013819i 0.593110i 5.006575i 0.594016i 5.002953i 0.594016i \ 5.001142i 0.594016i 4.997520i 0.594921i 4.991181i 0.597638i 4.985748i 0.600354i \ 4.983031i 0.602165i 4.982126i 0.603071i 4.980315i 0.604882i 4.976693i 0.608504i \ 4.973071i 0.611220i 4.972165i 0.612126i 4.971260i 0.612126i 4.970354i 0.613937i \ 4.968543i 0.616654i 4.966732i 0.620276i 4.965827i 0.622087i 4.965827i 0.622992i \ 4.965827i 0.624803i 4.965827i 0.628425i 4.966732i 0.632047i 4.966732i 0.632953i \ 4.967638i 0.633858i 4.968543i 0.634764i 4.972165i 0.637480i 4.976693i 0.639291i \ 4.979409i 0.640197i 4.981220i 0.640197i 4.983937i 0.640197i -outline $tkxox(score_active_note) -fill \ {} ${score} create polygon 5.038268i 0.441890i 5.039173i 0.447323i 5.040079i 0.449134i \ 5.040079i 0.450039i 5.040984i 0.451850i 5.042795i 0.456378i 5.044606i 0.460000i \ 5.045512i 0.460906i 5.050039i 0.464528i 5.056378i 0.469961i 5.060000i 0.472677i \ 5.061811i 0.474488i 5.066339i 0.477205i 5.074488i 0.484449i 5.082638i 0.490787i \ 5.087165i 0.493504i 5.088976i 0.494409i 5.092598i 0.498031i 5.098937i 0.504370i \ 5.103465i 0.511614i 5.105276i 0.514331i 5.105276i 0.515236i 5.106181i 0.517953i \ 5.107992i 0.525197i 5.108898i 0.532441i 5.108898i 0.535157i 5.108898i 0.538780i \ 5.106181i 0.547835i 5.102559i 0.557795i 5.099843i 0.564134i 5.098031i 0.568661i \ 5.096220i 0.572283i 5.093504i 0.577717i 5.089882i 0.584961i 5.088976i 0.585866i \ 5.088976i 0.586772i 5.088976i 0.587677i 5.088071i 0.587677i 5.088071i 0.588583i \ 5.088071i 0.589488i 5.087165i 0.589488i 5.087165i 0.590394i 5.086260i 0.590394i \ 5.086260i 0.589488i 5.087165i 0.588583i 5.087165i 0.587677i 5.087165i 0.586772i \ 5.088071i 0.585866i 5.088071i 0.584961i 5.090787i 0.578622i 5.092598i 0.574094i \ 5.094409i 0.570472i 5.096220i 0.566850i 5.098937i 0.561417i 5.101654i 0.553268i \ 5.103465i 0.546024i 5.105276i 0.542402i 5.106181i 0.542402i 5.106181i 0.541496i \ 5.106181i 0.538780i 5.105276i 0.532441i 5.102559i 0.524291i 5.100748i 0.520669i \ 5.099843i 0.519764i 5.097126i 0.516142i 5.090787i 0.507992i 5.084449i 0.501654i \ 5.080827i 0.498031i 5.079016i 0.496220i 5.076299i 0.495315i 5.072677i 0.492598i \ 5.064528i 0.487165i 5.055472i 0.481732i 5.050945i 0.479921i 5.048228i 0.479016i \ 5.044606i 0.477205i 5.038268i 0.474488i 5.037362i 0.474488i 5.036457i 0.473583i \ 5.035551i 0.473583i 5.034646i 0.473583i 5.033740i 0.473583i 5.033740i 0.474488i \ 5.033740i 0.475394i 5.033740i 0.476299i 5.033740i 0.477205i 5.033740i 0.478110i \ 5.034646i 0.479016i 5.034646i 0.479921i 5.034646i 0.480827i 5.034646i 0.479921i \ 5.034646i 0.479016i 5.034646i 0.478110i 5.034646i 0.477205i 5.034646i 0.475394i \ 5.034646i 0.474488i 5.034646i 0.464528i 5.035551i 0.455472i 5.035551i 0.447323i \ 5.036457i 0.440079i 5.036457i 0.431929i 5.037362i 0.423780i 5.038268i 0.421969i \ 5.037362i 0.424685i 5.037362i 0.430118i 5.037362i 0.435551i -outline {} -fill $tkxox(score_active_note) \ -width 0 ${score} create polygon 5.038268i 0.441890i 5.039173i 0.447323i 5.040079i 0.449134i \ 5.040079i 0.450039i 5.040984i 0.451850i 5.042795i 0.456378i 5.044606i 0.460000i \ 5.045512i 0.460906i 5.050039i 0.464528i 5.056378i 0.469961i 5.060000i 0.472677i \ 5.061811i 0.474488i 5.066339i 0.477205i 5.074488i 0.484449i 5.082638i 0.490787i \ 5.087165i 0.493504i 5.088976i 0.494409i 5.092598i 0.498031i 5.098937i 0.504370i \ 5.103465i 0.511614i 5.105276i 0.514331i 5.105276i 0.515236i 5.106181i 0.517953i \ 5.107992i 0.525197i 5.108898i 0.532441i 5.108898i 0.535157i 5.108898i 0.538780i \ 5.106181i 0.547835i 5.102559i 0.557795i 5.099843i 0.564134i 5.098031i 0.568661i \ 5.096220i 0.572283i 5.093504i 0.577717i 5.089882i 0.584961i 5.088976i 0.585866i \ 5.088976i 0.586772i 5.088976i 0.587677i 5.088071i 0.587677i 5.088071i 0.588583i \ 5.088071i 0.589488i 5.087165i 0.589488i 5.087165i 0.590394i 5.086260i 0.590394i \ 5.086260i 0.589488i 5.087165i 0.588583i 5.087165i 0.587677i 5.087165i 0.586772i \ 5.088071i 0.585866i 5.088071i 0.584961i 5.090787i 0.578622i 5.092598i 0.574094i \ 5.094409i 0.570472i 5.096220i 0.566850i 5.098937i 0.561417i 5.101654i 0.553268i \ 5.103465i 0.546024i 5.105276i 0.542402i 5.106181i 0.542402i 5.106181i 0.541496i \ 5.106181i 0.538780i 5.105276i 0.532441i 5.102559i 0.524291i 5.100748i 0.520669i \ 5.099843i 0.519764i 5.097126i 0.516142i 5.090787i 0.507992i 5.084449i 0.501654i \ 5.080827i 0.498031i 5.079016i 0.496220i 5.076299i 0.495315i 5.072677i 0.492598i \ 5.064528i 0.487165i 5.055472i 0.481732i 5.050945i 0.479921i 5.048228i 0.479016i \ 5.044606i 0.477205i 5.038268i 0.474488i 5.037362i 0.474488i 5.036457i 0.473583i \ 5.035551i 0.473583i 5.034646i 0.473583i 5.033740i 0.473583i 5.033740i 0.474488i \ 5.033740i 0.475394i 5.033740i 0.476299i 5.033740i 0.477205i 5.033740i 0.478110i \ 5.034646i 0.479016i 5.034646i 0.479921i 5.034646i 0.480827i 5.034646i 0.479921i \ 5.034646i 0.479016i 5.034646i 0.478110i 5.034646i 0.477205i 5.034646i 0.475394i \ 5.034646i 0.474488i 5.034646i 0.464528i 5.035551i 0.455472i 5.035551i 0.447323i \ 5.036457i 0.440079i 5.036457i 0.431929i 5.037362i 0.423780i 5.038268i 0.421969i \ 5.037362i 0.424685i 5.037362i 0.430118i 5.037362i 0.435551i -outline $tkxox(score_active_note) -fill \ {} ${score} create line 5.676654i 0.422874i 5.676654i 0.602165i -fill $tkxox(score_active_note) ${score} create polygon 5.635000i 0.640197i 5.642244i 0.639291i 5.644961i 0.638386i \ 5.646772i 0.638386i 5.649488i 0.637480i 5.656732i 0.634764i 5.663976i 0.632047i \ 5.666693i 0.630236i 5.668504i 0.629331i 5.671220i 0.628425i 5.676654i 0.623898i \ 5.681181i 0.619370i 5.682992i 0.617559i 5.683898i 0.616654i 5.685709i 0.613937i \ 5.686614i 0.609409i 5.686614i 0.606693i 5.686614i 0.603976i 5.685709i 0.603071i \ 5.685709i 0.602165i 5.684803i 0.601260i 5.683898i 0.600354i 5.682087i 0.598543i \ 5.679370i 0.596732i 5.673937i 0.594016i 5.670315i 0.594016i 5.668504i 0.593110i \ 5.664882i 0.593110i 5.657638i 0.593110i 5.650394i 0.594016i 5.646772i 0.594016i \ 5.644961i 0.594016i 5.641339i 0.594921i 5.635000i 0.597638i 5.629567i 0.600354i \ 5.626850i 0.602165i 5.625945i 0.603071i 5.624134i 0.604882i 5.620512i 0.608504i \ 5.616890i 0.611220i 5.615984i 0.612126i 5.615079i 0.612126i 5.614173i 0.613937i \ 5.612362i 0.616654i 5.610551i 0.620276i 5.609646i 0.622087i 5.609646i 0.622992i \ 5.609646i 0.624803i 5.609646i 0.628425i 5.610551i 0.632047i 5.610551i 0.632953i \ 5.611457i 0.633858i 5.612362i 0.634764i 5.615984i 0.637480i 5.620512i 0.639291i \ 5.623228i 0.640197i 5.625039i 0.640197i 5.627756i 0.640197i -outline {} -fill $tkxox(score_active_note) \ -width 0 ${score} create polygon 5.635000i 0.640197i 5.642244i 0.639291i 5.644961i 0.638386i \ 5.646772i 0.638386i 5.649488i 0.637480i 5.656732i 0.634764i 5.663976i 0.632047i \ 5.666693i 0.630236i 5.668504i 0.629331i 5.671220i 0.628425i 5.676654i 0.623898i \ 5.681181i 0.619370i 5.682992i 0.617559i 5.683898i 0.616654i 5.685709i 0.613937i \ 5.686614i 0.609409i 5.686614i 0.606693i 5.686614i 0.603976i 5.685709i 0.603071i \ 5.685709i 0.602165i 5.684803i 0.601260i 5.683898i 0.600354i 5.682087i 0.598543i \ 5.679370i 0.596732i 5.673937i 0.594016i 5.670315i 0.594016i 5.668504i 0.593110i \ 5.664882i 0.593110i 5.657638i 0.593110i 5.650394i 0.594016i 5.646772i 0.594016i \ 5.644961i 0.594016i 5.641339i 0.594921i 5.635000i 0.597638i 5.629567i 0.600354i \ 5.626850i 0.602165i 5.625945i 0.603071i 5.624134i 0.604882i 5.620512i 0.608504i \ 5.616890i 0.611220i 5.615984i 0.612126i 5.615079i 0.612126i 5.614173i 0.613937i \ 5.612362i 0.616654i 5.610551i 0.620276i 5.609646i 0.622087i 5.609646i 0.622992i \ 5.609646i 0.624803i 5.609646i 0.628425i 5.610551i 0.632047i 5.610551i 0.632953i \ 5.611457i 0.633858i 5.612362i 0.634764i 5.615984i 0.637480i 5.620512i 0.639291i \ 5.623228i 0.640197i 5.625039i 0.640197i 5.627756i 0.640197i -outline $tkxox(score_active_note) -fill \ {} ${score} create polygon 5.682087i 0.441890i 5.682992i 0.447323i 5.683898i 0.449134i \ 5.683898i 0.450039i 5.684803i 0.451850i 5.686614i 0.456378i 5.688425i 0.460000i \ 5.689331i 0.460906i 5.693858i 0.464528i 5.700197i 0.469961i 5.703819i 0.472677i \ 5.705630i 0.474488i 5.710157i 0.477205i 5.718307i 0.484449i 5.726457i 0.490787i \ 5.730079i 0.493504i 5.731890i 0.494409i 5.734606i 0.498031i 5.740945i 0.504370i \ 5.745472i 0.511614i 5.747283i 0.514331i 5.747283i 0.515236i 5.748189i 0.517953i \ 5.750000i 0.525197i 5.750906i 0.532441i 5.750906i 0.535157i 5.750000i 0.538780i \ 5.748189i 0.547835i 5.745472i 0.557795i 5.742756i 0.564134i 5.740945i 0.568661i \ 5.739134i 0.572283i 5.736417i 0.577717i 5.733701i 0.584961i 5.733701i 0.585866i \ 5.732795i 0.586772i 5.732795i 0.587677i 5.731890i 0.587677i 5.731890i 0.588583i \ 5.731890i 0.589488i 5.730984i 0.589488i 5.730984i 0.590394i 5.730984i 0.589488i \ 5.730984i 0.588583i 5.730984i 0.587677i 5.730984i 0.586772i 5.731890i 0.586772i \ 5.731890i 0.585866i 5.731890i 0.584961i 5.733701i 0.578622i 5.735512i 0.574094i \ 5.737323i 0.570472i 5.739134i 0.566850i 5.740945i 0.561417i 5.743661i 0.553268i \ 5.746378i 0.545118i 5.747283i 0.542402i 5.748189i 0.542402i 5.748189i 0.539685i \ 5.747283i 0.532441i 5.745472i 0.524291i 5.743661i 0.520669i 5.742756i 0.519764i \ 5.740945i 0.516142i 5.734606i 0.507992i 5.728268i 0.501654i 5.724646i 0.498031i \ 5.722835i 0.496220i 5.721024i 0.495315i 5.717402i 0.492598i 5.709252i 0.487165i \ 5.700197i 0.481732i 5.695669i 0.479921i 5.692953i 0.479016i 5.688425i 0.477205i \ 5.682087i 0.474488i 5.681181i 0.474488i 5.680276i 0.473583i 5.679370i 0.473583i \ 5.678465i 0.473583i 5.677559i 0.473583i 5.677559i 0.474488i 5.677559i 0.475394i \ 5.677559i 0.476299i 5.677559i 0.477205i 5.677559i 0.478110i 5.678465i 0.479016i \ 5.678465i 0.479921i 5.678465i 0.480827i 5.678465i 0.479921i 5.678465i 0.479016i \ 5.678465i 0.478110i 5.678465i 0.477205i 5.678465i 0.475394i 5.678465i 0.474488i \ 5.678465i 0.464528i 5.679370i 0.455472i 5.679370i 0.447323i 5.680276i 0.440079i \ 5.680276i 0.431929i 5.681181i 0.423780i 5.682087i 0.421969i 5.681181i 0.424685i \ 5.681181i 0.430118i 5.681181i 0.435551i -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 5.682087i 0.441890i 5.682992i 0.447323i 5.683898i 0.449134i \ 5.683898i 0.450039i 5.684803i 0.451850i 5.686614i 0.456378i 5.688425i 0.460000i \ 5.689331i 0.460906i 5.693858i 0.464528i 5.700197i 0.469961i 5.703819i 0.472677i \ 5.705630i 0.474488i 5.710157i 0.477205i 5.718307i 0.484449i 5.726457i 0.490787i \ 5.730079i 0.493504i 5.731890i 0.494409i 5.734606i 0.498031i 5.740945i 0.504370i \ 5.745472i 0.511614i 5.747283i 0.514331i 5.747283i 0.515236i 5.748189i 0.517953i \ 5.750000i 0.525197i 5.750906i 0.532441i 5.750906i 0.535157i 5.750000i 0.538780i \ 5.748189i 0.547835i 5.745472i 0.557795i 5.742756i 0.564134i 5.740945i 0.568661i \ 5.739134i 0.572283i 5.736417i 0.577717i 5.733701i 0.584961i 5.733701i 0.585866i \ 5.732795i 0.586772i 5.732795i 0.587677i 5.731890i 0.587677i 5.731890i 0.588583i \ 5.731890i 0.589488i 5.730984i 0.589488i 5.730984i 0.590394i 5.730984i 0.589488i \ 5.730984i 0.588583i 5.730984i 0.587677i 5.730984i 0.586772i 5.731890i 0.586772i \ 5.731890i 0.585866i 5.731890i 0.584961i 5.733701i 0.578622i 5.735512i 0.574094i \ 5.737323i 0.570472i 5.739134i 0.566850i 5.740945i 0.561417i 5.743661i 0.553268i \ 5.746378i 0.545118i 5.747283i 0.542402i 5.748189i 0.542402i 5.748189i 0.539685i \ 5.747283i 0.532441i 5.745472i 0.524291i 5.743661i 0.520669i 5.742756i 0.519764i \ 5.740945i 0.516142i 5.734606i 0.507992i 5.728268i 0.501654i 5.724646i 0.498031i \ 5.722835i 0.496220i 5.721024i 0.495315i 5.717402i 0.492598i 5.709252i 0.487165i \ 5.700197i 0.481732i 5.695669i 0.479921i 5.692953i 0.479016i 5.688425i 0.477205i \ 5.682087i 0.474488i 5.681181i 0.474488i 5.680276i 0.473583i 5.679370i 0.473583i \ 5.678465i 0.473583i 5.677559i 0.473583i 5.677559i 0.474488i 5.677559i 0.475394i \ 5.677559i 0.476299i 5.677559i 0.477205i 5.677559i 0.478110i 5.678465i 0.479016i \ 5.678465i 0.479921i 5.678465i 0.480827i 5.678465i 0.479921i 5.678465i 0.479016i \ 5.678465i 0.478110i 5.678465i 0.477205i 5.678465i 0.475394i 5.678465i 0.474488i \ 5.678465i 0.464528i 5.679370i 0.455472i 5.679370i 0.447323i 5.680276i 0.440079i \ 5.680276i 0.431929i 5.681181i 0.423780i 5.682087i 0.421969i 5.681181i 0.424685i \ 5.681181i 0.430118i 5.681181i 0.435551i -outline $tkxox(score_active_note) -fill {} ${score} create line 4.313858i 0.422874i 4.313858i 0.602165i -fill $tkxox(score_active_note) ${score} create polygon 4.271299i 0.640197i 4.278543i 0.639291i 4.282165i 0.638386i \ 4.283976i 0.638386i 4.287598i 0.637480i 4.294843i 0.634764i 4.301181i 0.632047i \ 4.304803i 0.630236i 4.305709i 0.629331i 4.307520i 0.628425i 4.312953i 0.623898i \ 4.317480i 0.619370i 4.320197i 0.617559i 4.321102i 0.616654i 4.322008i 0.613937i \ 4.323819i 0.609409i 4.323819i 0.606693i 4.323819i 0.603976i 4.322913i 0.603071i \ 4.322913i 0.602165i 4.322008i 0.601260i 4.321102i 0.600354i 4.319291i 0.598543i \ 4.316575i 0.596732i 4.311142i 0.594016i 4.307520i 0.594016i 4.305709i 0.593110i \ 4.302087i 0.593110i 4.294843i 0.593110i 4.286693i 0.594016i 4.283071i 0.594016i \ 4.281260i 0.594016i 4.277638i 0.594921i 4.271299i 0.597638i 4.265866i 0.600354i \ 4.263150i 0.602165i 4.263150i 0.603071i 4.261339i 0.604882i 4.257717i 0.608504i \ 4.254094i 0.611220i 4.253189i 0.612126i 4.252283i 0.612126i 4.251378i 0.613937i \ 4.249567i 0.616654i 4.247756i 0.620276i 4.246850i 0.622087i 4.245945i 0.622992i \ 4.245945i 0.624803i 4.245945i 0.628425i 4.246850i 0.631142i 4.247756i 0.632953i \ 4.247756i 0.633858i 4.248661i 0.633858i 4.249567i 0.635669i 4.253189i 0.637480i \ 4.257717i 0.639291i 4.260433i 0.640197i 4.261339i 0.640197i 4.264055i 0.640197i \ -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 4.271299i 0.640197i 4.278543i 0.639291i 4.282165i 0.638386i \ 4.283976i 0.638386i 4.287598i 0.637480i 4.294843i 0.634764i 4.301181i 0.632047i \ 4.304803i 0.630236i 4.305709i 0.629331i 4.307520i 0.628425i 4.312953i 0.623898i \ 4.317480i 0.619370i 4.320197i 0.617559i 4.321102i 0.616654i 4.322008i 0.613937i \ 4.323819i 0.609409i 4.323819i 0.606693i 4.323819i 0.603976i 4.322913i 0.603071i \ 4.322913i 0.602165i 4.322008i 0.601260i 4.321102i 0.600354i 4.319291i 0.598543i \ 4.316575i 0.596732i 4.311142i 0.594016i 4.307520i 0.594016i 4.305709i 0.593110i \ 4.302087i 0.593110i 4.294843i 0.593110i 4.286693i 0.594016i 4.283071i 0.594016i \ 4.281260i 0.594016i 4.277638i 0.594921i 4.271299i 0.597638i 4.265866i 0.600354i \ 4.263150i 0.602165i 4.263150i 0.603071i 4.261339i 0.604882i 4.257717i 0.608504i \ 4.254094i 0.611220i 4.253189i 0.612126i 4.252283i 0.612126i 4.251378i 0.613937i \ 4.249567i 0.616654i 4.247756i 0.620276i 4.246850i 0.622087i 4.245945i 0.622992i \ 4.245945i 0.624803i 4.245945i 0.628425i 4.246850i 0.631142i 4.247756i 0.632953i \ 4.247756i 0.633858i 4.248661i 0.633858i 4.249567i 0.635669i 4.253189i 0.637480i \ 4.257717i 0.639291i 4.260433i 0.640197i 4.261339i 0.640197i 4.264055i 0.640197i \ -outline $tkxox(score_active_note) -fill {} ${score} create polygon 4.319291i 0.441890i 4.320197i 0.447323i 4.321102i 0.449134i \ 4.321102i 0.450039i 4.322008i 0.451850i 4.323819i 0.456378i 4.325630i 0.460000i \ 4.326535i 0.460906i 4.331063i 0.464528i 4.337402i 0.469961i 4.341024i 0.472677i \ 4.342835i 0.474488i 4.347362i 0.477205i 4.355512i 0.484449i 4.363661i 0.490787i \ 4.366378i 0.493504i 4.368189i 0.494409i 4.370906i 0.498031i 4.377244i 0.504370i \ 4.382677i 0.511614i 4.384488i 0.514331i 4.385394i 0.515236i 4.387205i 0.517953i \ 4.389016i 0.525197i 4.389921i 0.531535i 4.390827i 0.534252i 4.390827i 0.535157i \ 4.389921i 0.536063i 4.389016i 0.539685i 4.387205i 0.547835i 4.383583i 0.557795i \ 4.380866i 0.564134i 4.379055i 0.568661i 4.377244i 0.572283i 4.374528i 0.577717i \ 4.370906i 0.584961i 4.370000i 0.585866i 4.370000i 0.586772i 4.370000i 0.587677i \ 4.369094i 0.587677i 4.369094i 0.588583i 4.369094i 0.589488i 4.368189i 0.589488i \ 4.368189i 0.590394i 4.367283i 0.590394i 4.368189i 0.590394i 4.368189i 0.589488i \ 4.368189i 0.588583i 4.368189i 0.587677i 4.368189i 0.586772i 4.369094i 0.585866i \ 4.369094i 0.584961i 4.370906i 0.578622i 4.372717i 0.574094i 4.374528i 0.570472i \ 4.375433i 0.566850i 4.378150i 0.561417i 4.380866i 0.553268i 4.383583i 0.545118i \ 4.385394i 0.542402i 4.386299i 0.542402i 4.387205i 0.539685i 4.386299i 0.532441i \ 4.383583i 0.524291i 4.381772i 0.520669i 4.380866i 0.519764i 4.378150i 0.516142i \ 4.371811i 0.507992i 4.365472i 0.501654i 4.361850i 0.498031i 4.360039i 0.496220i \ 4.358228i 0.495315i 4.354606i 0.492598i 4.346457i 0.487165i 4.337402i 0.481732i \ 4.332874i 0.479921i 4.330157i 0.479016i 4.325630i 0.477205i 4.319291i 0.474488i \ 4.318386i 0.474488i 4.317480i 0.473583i 4.316575i 0.473583i 4.315669i 0.473583i \ 4.314764i 0.473583i 4.314764i 0.474488i 4.314764i 0.475394i 4.314764i 0.476299i \ 4.314764i 0.477205i 4.314764i 0.478110i 4.315669i 0.479016i 4.315669i 0.479921i \ 4.315669i 0.480827i 4.315669i 0.479921i 4.315669i 0.479016i 4.315669i 0.478110i \ 4.315669i 0.477205i 4.315669i 0.475394i 4.315669i 0.474488i 4.315669i 0.464528i \ 4.316575i 0.455472i 4.316575i 0.447323i 4.317480i 0.440079i 4.317480i 0.431929i \ 4.318386i 0.423780i 4.319291i 0.421969i 4.318386i 0.424685i 4.318386i 0.430118i \ 4.318386i 0.435551i -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 4.319291i 0.441890i 4.320197i 0.447323i 4.321102i 0.449134i \ 4.321102i 0.450039i 4.322008i 0.451850i 4.323819i 0.456378i 4.325630i 0.460000i \ 4.326535i 0.460906i 4.331063i 0.464528i 4.337402i 0.469961i 4.341024i 0.472677i \ 4.342835i 0.474488i 4.347362i 0.477205i 4.355512i 0.484449i 4.363661i 0.490787i \ 4.366378i 0.493504i 4.368189i 0.494409i 4.370906i 0.498031i 4.377244i 0.504370i \ 4.382677i 0.511614i 4.384488i 0.514331i 4.385394i 0.515236i 4.387205i 0.517953i \ 4.389016i 0.525197i 4.389921i 0.531535i 4.390827i 0.534252i 4.390827i 0.535157i \ 4.389921i 0.536063i 4.389016i 0.539685i 4.387205i 0.547835i 4.383583i 0.557795i \ 4.380866i 0.564134i 4.379055i 0.568661i 4.377244i 0.572283i 4.374528i 0.577717i \ 4.370906i 0.584961i 4.370000i 0.585866i 4.370000i 0.586772i 4.370000i 0.587677i \ 4.369094i 0.587677i 4.369094i 0.588583i 4.369094i 0.589488i 4.368189i 0.589488i \ 4.368189i 0.590394i 4.367283i 0.590394i 4.368189i 0.590394i 4.368189i 0.589488i \ 4.368189i 0.588583i 4.368189i 0.587677i 4.368189i 0.586772i 4.369094i 0.585866i \ 4.369094i 0.584961i 4.370906i 0.578622i 4.372717i 0.574094i 4.374528i 0.570472i \ 4.375433i 0.566850i 4.378150i 0.561417i 4.380866i 0.553268i 4.383583i 0.545118i \ 4.385394i 0.542402i 4.386299i 0.542402i 4.387205i 0.539685i 4.386299i 0.532441i \ 4.383583i 0.524291i 4.381772i 0.520669i 4.380866i 0.519764i 4.378150i 0.516142i \ 4.371811i 0.507992i 4.365472i 0.501654i 4.361850i 0.498031i 4.360039i 0.496220i \ 4.358228i 0.495315i 4.354606i 0.492598i 4.346457i 0.487165i 4.337402i 0.481732i \ 4.332874i 0.479921i 4.330157i 0.479016i 4.325630i 0.477205i 4.319291i 0.474488i \ 4.318386i 0.474488i 4.317480i 0.473583i 4.316575i 0.473583i 4.315669i 0.473583i \ 4.314764i 0.473583i 4.314764i 0.474488i 4.314764i 0.475394i 4.314764i 0.476299i \ 4.314764i 0.477205i 4.314764i 0.478110i 4.315669i 0.479016i 4.315669i 0.479921i \ 4.315669i 0.480827i 4.315669i 0.479921i 4.315669i 0.479016i 4.315669i 0.478110i \ 4.315669i 0.477205i 4.315669i 0.475394i 4.315669i 0.474488i 4.315669i 0.464528i \ 4.316575i 0.455472i 4.316575i 0.447323i 4.317480i 0.440079i 4.317480i 0.431929i \ 4.318386i 0.423780i 4.319291i 0.421969i 4.318386i 0.424685i 4.318386i 0.430118i \ 4.318386i 0.435551i -outline $tkxox(score_active_note) -fill {} ${score} create line 3.670039i 0.086024i 3.670039i 0.266220i -fill $tkxox(score_active_note) ${score} create polygon 3.627480i 0.301535i 3.634724i 0.300630i 3.638346i 0.300630i \ 3.639252i 0.300630i 3.642874i 0.299724i 3.650118i 0.297913i 3.657362i 0.295197i \ 3.660079i 0.293386i 3.660984i 0.293386i 3.663701i 0.291575i 3.669134i 0.287047i \ 3.674567i 0.282520i 3.677283i 0.280709i 3.678189i 0.279803i 3.680000i 0.277087i \ 3.681811i 0.272559i 3.681811i 0.269843i 3.680906i 0.267126i 3.680906i 0.266220i \ 3.680000i 0.265315i 3.679094i 0.264409i 3.678189i 0.263504i 3.676378i 0.261693i \ 3.672756i 0.259882i 3.667323i 0.257165i 3.663701i 0.256260i 3.661890i 0.256260i \ 3.658268i 0.255354i 3.651024i 0.255354i 3.642874i 0.256260i 3.639252i 0.256260i \ 3.637441i 0.257165i 3.633819i 0.258071i 3.627480i 0.260787i 3.622047i 0.263504i \ 3.619331i 0.265315i 3.619331i 0.266220i 3.617520i 0.268031i 3.613898i 0.271654i \ 3.610276i 0.274370i 3.609370i 0.275276i 3.608465i 0.275276i 3.607559i 0.276181i \ 3.605748i 0.278898i 3.603937i 0.282520i 3.603031i 0.284331i 3.602126i 0.285236i \ 3.602126i 0.287047i 3.602126i 0.290669i 3.603031i 0.294291i 3.603937i 0.296102i \ 3.603937i 0.297008i 3.604843i 0.297008i 3.605748i 0.298819i 3.609370i 0.300630i \ 3.613898i 0.302441i 3.616614i 0.302441i 3.617520i 0.302441i 3.621142i 0.301535i \ -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 3.627480i 0.301535i 3.634724i 0.300630i 3.638346i 0.300630i \ 3.639252i 0.300630i 3.642874i 0.299724i 3.650118i 0.297913i 3.657362i 0.295197i \ 3.660079i 0.293386i 3.660984i 0.293386i 3.663701i 0.291575i 3.669134i 0.287047i \ 3.674567i 0.282520i 3.677283i 0.280709i 3.678189i 0.279803i 3.680000i 0.277087i \ 3.681811i 0.272559i 3.681811i 0.269843i 3.680906i 0.267126i 3.680906i 0.266220i \ 3.680000i 0.265315i 3.679094i 0.264409i 3.678189i 0.263504i 3.676378i 0.261693i \ 3.672756i 0.259882i 3.667323i 0.257165i 3.663701i 0.256260i 3.661890i 0.256260i \ 3.658268i 0.255354i 3.651024i 0.255354i 3.642874i 0.256260i 3.639252i 0.256260i \ 3.637441i 0.257165i 3.633819i 0.258071i 3.627480i 0.260787i 3.622047i 0.263504i \ 3.619331i 0.265315i 3.619331i 0.266220i 3.617520i 0.268031i 3.613898i 0.271654i \ 3.610276i 0.274370i 3.609370i 0.275276i 3.608465i 0.275276i 3.607559i 0.276181i \ 3.605748i 0.278898i 3.603937i 0.282520i 3.603031i 0.284331i 3.602126i 0.285236i \ 3.602126i 0.287047i 3.602126i 0.290669i 3.603031i 0.294291i 3.603937i 0.296102i \ 3.603937i 0.297008i 3.604843i 0.297008i 3.605748i 0.298819i 3.609370i 0.300630i \ 3.613898i 0.302441i 3.616614i 0.302441i 3.617520i 0.302441i 3.621142i 0.301535i \ -outline $tkxox(score_active_note) -fill {} ${score} create polygon 3.677283i 0.104134i 3.678189i 0.109567i 3.679094i 0.111378i \ 3.679094i 0.112283i 3.680000i 0.114094i 3.681811i 0.118622i 3.683622i 0.122244i \ 3.683622i 0.123150i 3.683622i 0.122244i 3.684528i 0.123150i 3.689055i 0.127677i \ 3.695394i 0.133110i 3.699016i 0.135827i 3.700827i 0.137638i 3.705354i 0.140354i \ 3.713504i 0.147598i 3.721654i 0.153937i 3.724370i 0.157559i 3.726181i 0.158465i \ 3.729803i 0.161181i 3.735236i 0.167520i 3.739764i 0.173858i 3.741575i 0.175669i \ 3.742480i 0.176575i 3.743386i 0.179291i 3.745197i 0.185630i 3.746102i 0.192874i \ 3.746102i 0.195591i 3.746102i 0.196496i 3.745197i 0.200118i 3.743386i 0.210079i \ 3.740669i 0.220039i 3.737953i 0.226378i 3.736142i 0.230906i 3.734331i 0.234528i \ 3.731614i 0.239961i 3.728898i 0.247205i 3.728898i 0.248110i 3.727992i 0.249016i \ 3.727992i 0.249921i 3.727087i 0.249921i 3.727087i 0.250827i 3.727087i 0.251732i \ 3.726181i 0.251732i 3.726181i 0.252638i 3.726181i 0.251732i 3.726181i 0.250827i \ 3.726181i 0.249921i 3.726181i 0.249016i 3.727087i 0.249016i 3.727087i 0.248110i \ 3.727087i 0.247205i 3.728898i 0.241772i 3.730709i 0.237244i 3.732520i 0.233622i \ 3.734331i 0.230000i 3.736142i 0.224567i 3.738858i 0.216417i 3.741575i 0.208268i \ 3.742480i 0.204646i 3.743386i 0.203740i 3.743386i 0.201024i 3.742480i 0.193780i \ 3.740669i 0.186535i 3.738858i 0.182913i 3.737953i 0.182008i 3.736142i 0.178386i \ 3.729803i 0.171142i 3.723465i 0.164803i 3.719843i 0.161181i 3.718031i 0.160276i \ 3.716220i 0.158465i 3.712598i 0.155748i 3.704449i 0.150315i 3.695394i 0.144882i \ 3.690866i 0.142165i 3.688150i 0.141260i 3.683622i 0.139449i 3.677283i 0.136732i \ 3.676378i 0.136732i 3.675472i 0.135827i 3.674567i 0.135827i 3.673661i 0.135827i \ 3.672756i 0.135827i 3.671850i 0.135827i 3.671850i 0.136732i 3.671850i 0.137638i \ 3.671850i 0.138543i 3.671850i 0.139449i 3.671850i 0.140354i 3.671850i 0.141260i \ 3.671850i 0.142165i 3.672756i 0.142165i 3.671850i 0.142165i 3.671850i 0.141260i \ 3.671850i 0.140354i 3.671850i 0.139449i 3.671850i 0.138543i 3.671850i 0.136732i \ 3.671850i 0.126772i 3.672756i 0.117717i 3.673661i 0.110472i 3.674567i 0.103228i \ 3.675472i 0.094173i 3.676378i 0.086929i 3.677283i 0.085118i 3.677283i 0.087835i \ 3.676378i 0.092362i 3.676378i 0.097795i -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 3.677283i 0.104134i 3.678189i 0.109567i 3.679094i 0.111378i \ 3.679094i 0.112283i 3.680000i 0.114094i 3.681811i 0.118622i 3.683622i 0.122244i \ 3.683622i 0.123150i 3.683622i 0.122244i 3.684528i 0.123150i 3.689055i 0.127677i \ 3.695394i 0.133110i 3.699016i 0.135827i 3.700827i 0.137638i 3.705354i 0.140354i \ 3.713504i 0.147598i 3.721654i 0.153937i 3.724370i 0.157559i 3.726181i 0.158465i \ 3.729803i 0.161181i 3.735236i 0.167520i 3.739764i 0.173858i 3.741575i 0.175669i \ 3.742480i 0.176575i 3.743386i 0.179291i 3.745197i 0.185630i 3.746102i 0.192874i \ 3.746102i 0.195591i 3.746102i 0.196496i 3.745197i 0.200118i 3.743386i 0.210079i \ 3.740669i 0.220039i 3.737953i 0.226378i 3.736142i 0.230906i 3.734331i 0.234528i \ 3.731614i 0.239961i 3.728898i 0.247205i 3.728898i 0.248110i 3.727992i 0.249016i \ 3.727992i 0.249921i 3.727087i 0.249921i 3.727087i 0.250827i 3.727087i 0.251732i \ 3.726181i 0.251732i 3.726181i 0.252638i 3.726181i 0.251732i 3.726181i 0.250827i \ 3.726181i 0.249921i 3.726181i 0.249016i 3.727087i 0.249016i 3.727087i 0.248110i \ 3.727087i 0.247205i 3.728898i 0.241772i 3.730709i 0.237244i 3.732520i 0.233622i \ 3.734331i 0.230000i 3.736142i 0.224567i 3.738858i 0.216417i 3.741575i 0.208268i \ 3.742480i 0.204646i 3.743386i 0.203740i 3.743386i 0.201024i 3.742480i 0.193780i \ 3.740669i 0.186535i 3.738858i 0.182913i 3.737953i 0.182008i 3.736142i 0.178386i \ 3.729803i 0.171142i 3.723465i 0.164803i 3.719843i 0.161181i 3.718031i 0.160276i \ 3.716220i 0.158465i 3.712598i 0.155748i 3.704449i 0.150315i 3.695394i 0.144882i \ 3.690866i 0.142165i 3.688150i 0.141260i 3.683622i 0.139449i 3.677283i 0.136732i \ 3.676378i 0.136732i 3.675472i 0.135827i 3.674567i 0.135827i 3.673661i 0.135827i \ 3.672756i 0.135827i 3.671850i 0.135827i 3.671850i 0.136732i 3.671850i 0.137638i \ 3.671850i 0.138543i 3.671850i 0.139449i 3.671850i 0.140354i 3.671850i 0.141260i \ 3.671850i 0.142165i 3.672756i 0.142165i 3.671850i 0.142165i 3.671850i 0.141260i \ 3.671850i 0.140354i 3.671850i 0.139449i 3.671850i 0.138543i 3.671850i 0.136732i \ 3.671850i 0.126772i 3.672756i 0.117717i 3.673661i 0.110472i 3.674567i 0.103228i \ 3.675472i 0.094173i 3.676378i 0.086929i 3.677283i 0.085118i 3.677283i 0.087835i \ 3.676378i 0.092362i 3.676378i 0.097795i -outline $tkxox(score_active_note) -fill {} ${score} create line 3.670039i 0.422874i 3.670039i 0.602165i -fill $tkxox(score_active_note) ${score} create polygon 3.627480i 0.640197i 3.634724i 0.639291i 3.638346i 0.638386i \ 3.639252i 0.638386i 3.642874i 0.637480i 3.650118i 0.634764i 3.657362i 0.632047i \ 3.660079i 0.630236i 3.660984i 0.629331i 3.663701i 0.628425i 3.669134i 0.623898i \ 3.674567i 0.619370i 3.677283i 0.617559i 3.678189i 0.616654i 3.680000i 0.613937i \ 3.681811i 0.609409i 3.681811i 0.606693i 3.680906i 0.603976i 3.680906i 0.603071i \ 3.680000i 0.602165i 3.679094i 0.601260i 3.678189i 0.600354i 3.676378i 0.598543i \ 3.672756i 0.596732i 3.667323i 0.594016i 3.663701i 0.594016i 3.661890i 0.593110i \ 3.658268i 0.593110i 3.651024i 0.593110i 3.642874i 0.594016i 3.639252i 0.594016i \ 3.637441i 0.594016i 3.633819i 0.594921i 3.627480i 0.597638i 3.622047i 0.600354i \ 3.619331i 0.602165i 3.619331i 0.603071i 3.617520i 0.604882i 3.613898i 0.608504i \ 3.610276i 0.611220i 3.609370i 0.612126i 3.608465i 0.612126i 3.607559i 0.613937i \ 3.605748i 0.616654i 3.603937i 0.620276i 3.603031i 0.622087i 3.602126i 0.622992i \ 3.602126i 0.624803i 3.602126i 0.628425i 3.603031i 0.631142i 3.603937i 0.632953i \ 3.603937i 0.633858i 3.604843i 0.633858i 3.605748i 0.635669i 3.609370i 0.637480i \ 3.613898i 0.639291i 3.616614i 0.640197i 3.617520i 0.640197i 3.621142i 0.640197i \ -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 3.627480i 0.640197i 3.634724i 0.639291i 3.638346i 0.638386i \ 3.639252i 0.638386i 3.642874i 0.637480i 3.650118i 0.634764i 3.657362i 0.632047i \ 3.660079i 0.630236i 3.660984i 0.629331i 3.663701i 0.628425i 3.669134i 0.623898i \ 3.674567i 0.619370i 3.677283i 0.617559i 3.678189i 0.616654i 3.680000i 0.613937i \ 3.681811i 0.609409i 3.681811i 0.606693i 3.680906i 0.603976i 3.680906i 0.603071i \ 3.680000i 0.602165i 3.679094i 0.601260i 3.678189i 0.600354i 3.676378i 0.598543i \ 3.672756i 0.596732i 3.667323i 0.594016i 3.663701i 0.594016i 3.661890i 0.593110i \ 3.658268i 0.593110i 3.651024i 0.593110i 3.642874i 0.594016i 3.639252i 0.594016i \ 3.637441i 0.594016i 3.633819i 0.594921i 3.627480i 0.597638i 3.622047i 0.600354i \ 3.619331i 0.602165i 3.619331i 0.603071i 3.617520i 0.604882i 3.613898i 0.608504i \ 3.610276i 0.611220i 3.609370i 0.612126i 3.608465i 0.612126i 3.607559i 0.613937i \ 3.605748i 0.616654i 3.603937i 0.620276i 3.603031i 0.622087i 3.602126i 0.622992i \ 3.602126i 0.624803i 3.602126i 0.628425i 3.603031i 0.631142i 3.603937i 0.632953i \ 3.603937i 0.633858i 3.604843i 0.633858i 3.605748i 0.635669i 3.609370i 0.637480i \ 3.613898i 0.639291i 3.616614i 0.640197i 3.617520i 0.640197i 3.621142i 0.640197i \ -outline $tkxox(score_active_note) -fill {} ${score} create polygon 3.677283i 0.441890i 3.678189i 0.447323i 3.679094i 0.449134i \ 3.679094i 0.450039i 3.680000i 0.451850i 3.681811i 0.456378i 3.683622i 0.460000i \ 3.684528i 0.460906i 3.689055i 0.464528i 3.695394i 0.469961i 3.699016i 0.472677i \ 3.700827i 0.474488i 3.705354i 0.477205i 3.713504i 0.484449i 3.721654i 0.490787i \ 3.724370i 0.493504i 3.726181i 0.494409i 3.729803i 0.498031i 3.735236i 0.504370i \ 3.739764i 0.511614i 3.741575i 0.514331i 3.742480i 0.515236i 3.743386i 0.517953i \ 3.745197i 0.525197i 3.746102i 0.532441i 3.746102i 0.535157i 3.745197i 0.538780i \ 3.743386i 0.547835i 3.740669i 0.557795i 3.737953i 0.564134i 3.736142i 0.568661i \ 3.734331i 0.572283i 3.731614i 0.577717i 3.728898i 0.584961i 3.728898i 0.585866i \ 3.727992i 0.586772i 3.727992i 0.587677i 3.727087i 0.587677i 3.727087i 0.588583i \ 3.727087i 0.589488i 3.726181i 0.589488i 3.726181i 0.590394i 3.726181i 0.589488i \ 3.726181i 0.588583i 3.726181i 0.587677i 3.726181i 0.586772i 3.727087i 0.586772i \ 3.727087i 0.585866i 3.727087i 0.584961i 3.728898i 0.578622i 3.730709i 0.574094i \ 3.732520i 0.570472i 3.734331i 0.566850i 3.736142i 0.561417i 3.738858i 0.553268i \ 3.741575i 0.545118i 3.742480i 0.542402i 3.743386i 0.542402i 3.743386i 0.539685i \ 3.742480i 0.532441i 3.740669i 0.524291i 3.738858i 0.520669i 3.737953i 0.519764i \ 3.736142i 0.516142i 3.729803i 0.507992i 3.723465i 0.501654i 3.719843i 0.498031i \ 3.718031i 0.496220i 3.716220i 0.495315i 3.712598i 0.492598i 3.704449i 0.487165i \ 3.695394i 0.481732i 3.690866i 0.479921i 3.688150i 0.479016i 3.683622i 0.477205i \ 3.677283i 0.474488i 3.676378i 0.474488i 3.675472i 0.473583i 3.674567i 0.473583i \ 3.673661i 0.473583i 3.672756i 0.473583i 3.671850i 0.474488i 3.671850i 0.475394i \ 3.671850i 0.476299i 3.671850i 0.477205i 3.671850i 0.478110i 3.671850i 0.479016i \ 3.671850i 0.479921i 3.672756i 0.480827i 3.671850i 0.480827i 3.671850i 0.479921i \ 3.671850i 0.479016i 3.671850i 0.478110i 3.671850i 0.477205i 3.671850i 0.476299i \ 3.671850i 0.474488i 3.671850i 0.464528i 3.672756i 0.455472i 3.673661i 0.447323i \ 3.674567i 0.440079i 3.675472i 0.431929i 3.676378i 0.423780i 3.677283i 0.421969i \ 3.677283i 0.424685i 3.676378i 0.430118i 3.676378i 0.435551i -outline {} -fill $tkxox(score_active_note) \ -width 0 ${score} create polygon 3.677283i 0.441890i 3.678189i 0.447323i 3.679094i 0.449134i \ 3.679094i 0.450039i 3.680000i 0.451850i 3.681811i 0.456378i 3.683622i 0.460000i \ 3.684528i 0.460906i 3.689055i 0.464528i 3.695394i 0.469961i 3.699016i 0.472677i \ 3.700827i 0.474488i 3.705354i 0.477205i 3.713504i 0.484449i 3.721654i 0.490787i \ 3.724370i 0.493504i 3.726181i 0.494409i 3.729803i 0.498031i 3.735236i 0.504370i \ 3.739764i 0.511614i 3.741575i 0.514331i 3.742480i 0.515236i 3.743386i 0.517953i \ 3.745197i 0.525197i 3.746102i 0.532441i 3.746102i 0.535157i 3.745197i 0.538780i \ 3.743386i 0.547835i 3.740669i 0.557795i 3.737953i 0.564134i 3.736142i 0.568661i \ 3.734331i 0.572283i 3.731614i 0.577717i 3.728898i 0.584961i 3.728898i 0.585866i \ 3.727992i 0.586772i 3.727992i 0.587677i 3.727087i 0.587677i 3.727087i 0.588583i \ 3.727087i 0.589488i 3.726181i 0.589488i 3.726181i 0.590394i 3.726181i 0.589488i \ 3.726181i 0.588583i 3.726181i 0.587677i 3.726181i 0.586772i 3.727087i 0.586772i \ 3.727087i 0.585866i 3.727087i 0.584961i 3.728898i 0.578622i 3.730709i 0.574094i \ 3.732520i 0.570472i 3.734331i 0.566850i 3.736142i 0.561417i 3.738858i 0.553268i \ 3.741575i 0.545118i 3.742480i 0.542402i 3.743386i 0.542402i 3.743386i 0.539685i \ 3.742480i 0.532441i 3.740669i 0.524291i 3.738858i 0.520669i 3.737953i 0.519764i \ 3.736142i 0.516142i 3.729803i 0.507992i 3.723465i 0.501654i 3.719843i 0.498031i \ 3.718031i 0.496220i 3.716220i 0.495315i 3.712598i 0.492598i 3.704449i 0.487165i \ 3.695394i 0.481732i 3.690866i 0.479921i 3.688150i 0.479016i 3.683622i 0.477205i \ 3.677283i 0.474488i 3.676378i 0.474488i 3.675472i 0.473583i 3.674567i 0.473583i \ 3.673661i 0.473583i 3.672756i 0.473583i 3.671850i 0.474488i 3.671850i 0.475394i \ 3.671850i 0.476299i 3.671850i 0.477205i 3.671850i 0.478110i 3.671850i 0.479016i \ 3.671850i 0.479921i 3.672756i 0.480827i 3.671850i 0.480827i 3.671850i 0.479921i \ 3.671850i 0.479016i 3.671850i 0.478110i 3.671850i 0.477205i 3.671850i 0.476299i \ 3.671850i 0.474488i 3.671850i 0.464528i 3.672756i 0.455472i 3.673661i 0.447323i \ 3.674567i 0.440079i 3.675472i 0.431929i 3.676378i 0.423780i 3.677283i 0.421969i \ 3.677283i 0.424685i 3.676378i 0.430118i 3.676378i 0.435551i -outline $tkxox(score_active_note) -fill \ {} ${score} create line 3.711693i 1.060354i 3.711693i 1.264094i -fill $tkxox(score_active_note) ${score} create polygon 3.666417i 1.306654i 3.674567i 1.305748i 3.678189i 1.305748i \ 3.680000i 1.304843i 3.683622i 1.303937i 3.691772i 1.301220i 3.699016i 1.297598i \ 3.701732i 1.295787i 3.702638i 1.295787i 3.704449i 1.293071i 3.709882i 1.288543i \ 3.714409i 1.283110i 3.717126i 1.281299i 3.718937i 1.280394i 3.719843i 1.277677i \ 3.721654i 1.272244i 3.721654i 1.268622i 3.721654i 1.265906i 3.720748i 1.265000i \ 3.720748i 1.264094i 3.719843i 1.263189i 3.718937i 1.262283i 3.717126i 1.260472i \ 3.714409i 1.257756i 3.708976i 1.255039i 3.706260i 1.253228i 3.704449i 1.253228i \ 3.701732i 1.252323i 3.693583i 1.252323i 3.685433i 1.253228i 3.680906i 1.254134i \ 3.678189i 1.255039i 3.674567i 1.256850i 3.666417i 1.259567i 3.660079i 1.262283i \ 3.657362i 1.263189i 3.656457i 1.264094i 3.655551i 1.265906i 3.651024i 1.268622i \ 3.647402i 1.272244i 3.646496i 1.273150i 3.645591i 1.274961i 3.643780i 1.278583i \ 3.641969i 1.283110i 3.641969i 1.284921i 3.641063i 1.286732i 3.641063i 1.288543i \ 3.641063i 1.293071i 3.641969i 1.297598i 3.641969i 1.299409i 3.641969i 1.300315i \ 3.642874i 1.301220i 3.646496i 1.303937i 3.651024i 1.305748i 3.653740i 1.306654i \ 3.655551i 1.306654i 3.659173i 1.306654i -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 3.666417i 1.306654i 3.674567i 1.305748i 3.678189i 1.305748i \ 3.680000i 1.304843i 3.683622i 1.303937i 3.691772i 1.301220i 3.699016i 1.297598i \ 3.701732i 1.295787i 3.702638i 1.295787i 3.704449i 1.293071i 3.709882i 1.288543i \ 3.714409i 1.283110i 3.717126i 1.281299i 3.718937i 1.280394i 3.719843i 1.277677i \ 3.721654i 1.272244i 3.721654i 1.268622i 3.721654i 1.265906i 3.720748i 1.265000i \ 3.720748i 1.264094i 3.719843i 1.263189i 3.718937i 1.262283i 3.717126i 1.260472i \ 3.714409i 1.257756i 3.708976i 1.255039i 3.706260i 1.253228i 3.704449i 1.253228i \ 3.701732i 1.252323i 3.693583i 1.252323i 3.685433i 1.253228i 3.680906i 1.254134i \ 3.678189i 1.255039i 3.674567i 1.256850i 3.666417i 1.259567i 3.660079i 1.262283i \ 3.657362i 1.263189i 3.656457i 1.264094i 3.655551i 1.265906i 3.651024i 1.268622i \ 3.647402i 1.272244i 3.646496i 1.273150i 3.645591i 1.274961i 3.643780i 1.278583i \ 3.641969i 1.283110i 3.641969i 1.284921i 3.641063i 1.286732i 3.641063i 1.288543i \ 3.641063i 1.293071i 3.641969i 1.297598i 3.641969i 1.299409i 3.641969i 1.300315i \ 3.642874i 1.301220i 3.646496i 1.303937i 3.651024i 1.305748i 3.653740i 1.306654i \ 3.655551i 1.306654i 3.659173i 1.306654i -outline $tkxox(score_active_note) -fill {} ${score} create line 3.065157i 0.422874i 3.065157i 0.602165i -fill $tkxox(score_active_note) ${score} create polygon 3.023504i 0.640197i 3.030748i 0.639291i 3.034370i 0.638386i \ 3.035276i 0.638386i 3.038898i 0.637480i 3.046142i 0.634764i 3.052480i 0.632047i \ 3.055197i 0.630236i 3.057008i 0.629331i 3.058819i 0.628425i 3.064252i 0.623898i \ 3.068780i 0.619370i 3.071496i 0.617559i 3.072402i 0.616654i 3.073307i 0.613937i \ 3.075118i 0.609409i 3.075118i 0.606693i 3.075118i 0.603976i 3.074213i 0.603071i \ 3.074213i 0.602165i 3.073307i 0.601260i 3.072402i 0.600354i 3.070591i 0.598543i \ 3.067874i 0.596732i 3.062441i 0.594016i 3.059724i 0.594016i 3.057913i 0.593110i \ 3.054291i 0.593110i 3.047047i 0.593110i 3.039803i 0.594016i 3.035276i 0.594016i \ 3.033465i 0.594016i 3.030748i 0.594921i 3.023504i 0.597638i 3.017165i 0.600354i \ 3.015354i 0.602165i 3.014449i 0.603071i 3.012638i 0.604882i 3.009016i 0.608504i \ 3.005394i 0.611220i 3.004488i 0.612126i 3.003583i 0.612126i 3.002677i 0.613937i \ 3.000866i 0.616654i 2.999055i 0.620276i 2.998150i 0.622087i 2.998150i 0.622992i \ 2.998150i 0.624803i 2.998150i 0.628425i 2.999055i 0.632047i 2.999055i 0.632953i \ 2.999961i 0.633858i 3.000866i 0.634764i 3.004488i 0.637480i 3.009016i 0.639291i \ 3.011732i 0.640197i 3.013543i 0.640197i 3.016260i 0.640197i -outline {} -fill $tkxox(score_active_note) \ -width 0 ${score} create polygon 3.023504i 0.640197i 3.030748i 0.639291i 3.034370i 0.638386i \ 3.035276i 0.638386i 3.038898i 0.637480i 3.046142i 0.634764i 3.052480i 0.632047i \ 3.055197i 0.630236i 3.057008i 0.629331i 3.058819i 0.628425i 3.064252i 0.623898i \ 3.068780i 0.619370i 3.071496i 0.617559i 3.072402i 0.616654i 3.073307i 0.613937i \ 3.075118i 0.609409i 3.075118i 0.606693i 3.075118i 0.603976i 3.074213i 0.603071i \ 3.074213i 0.602165i 3.073307i 0.601260i 3.072402i 0.600354i 3.070591i 0.598543i \ 3.067874i 0.596732i 3.062441i 0.594016i 3.059724i 0.594016i 3.057913i 0.593110i \ 3.054291i 0.593110i 3.047047i 0.593110i 3.039803i 0.594016i 3.035276i 0.594016i \ 3.033465i 0.594016i 3.030748i 0.594921i 3.023504i 0.597638i 3.017165i 0.600354i \ 3.015354i 0.602165i 3.014449i 0.603071i 3.012638i 0.604882i 3.009016i 0.608504i \ 3.005394i 0.611220i 3.004488i 0.612126i 3.003583i 0.612126i 3.002677i 0.613937i \ 3.000866i 0.616654i 2.999055i 0.620276i 2.998150i 0.622087i 2.998150i 0.622992i \ 2.998150i 0.624803i 2.998150i 0.628425i 2.999055i 0.632047i 2.999055i 0.632953i \ 2.999961i 0.633858i 3.000866i 0.634764i 3.004488i 0.637480i 3.009016i 0.639291i \ 3.011732i 0.640197i 3.013543i 0.640197i 3.016260i 0.640197i -outline $tkxox(score_active_note) -fill \ {} ${score} create polygon 3.070591i 0.441890i 3.071496i 0.447323i 3.072402i 0.449134i \ 3.072402i 0.450039i 3.073307i 0.451850i 3.075118i 0.456378i 3.076929i 0.460000i \ 3.077835i 0.460906i 3.082362i 0.464528i 3.088701i 0.469961i 3.092323i 0.472677i \ 3.095039i 0.474488i 3.099567i 0.477205i 3.107717i 0.484449i 3.114961i 0.490787i \ 3.118583i 0.493504i 3.120394i 0.494409i 3.123110i 0.498031i 3.128543i 0.504370i \ 3.133071i 0.511614i 3.134882i 0.514331i 3.135787i 0.515236i 3.136693i 0.517953i \ 3.138504i 0.525197i 3.139409i 0.532441i 3.139409i 0.535157i 3.138504i 0.538780i \ 3.136693i 0.547835i 3.133976i 0.557795i 3.131260i 0.564134i 3.129449i 0.568661i \ 3.127638i 0.572283i 3.124921i 0.577717i 3.122205i 0.584961i 3.122205i 0.585866i \ 3.121299i 0.586772i 3.121299i 0.587677i 3.120394i 0.587677i 3.120394i 0.588583i \ 3.120394i 0.589488i 3.119488i 0.589488i 3.119488i 0.590394i 3.119488i 0.589488i \ 3.119488i 0.588583i 3.119488i 0.587677i 3.119488i 0.586772i 3.120394i 0.586772i \ 3.120394i 0.585866i 3.120394i 0.584961i 3.122205i 0.578622i 3.124016i 0.574094i \ 3.125827i 0.570472i 3.127638i 0.566850i 3.129449i 0.561417i 3.132165i 0.553268i \ 3.134882i 0.545118i 3.135787i 0.542402i 3.136693i 0.542402i 3.136693i 0.539685i \ 3.135787i 0.532441i 3.133976i 0.524291i 3.132165i 0.520669i 3.131260i 0.519764i \ 3.129449i 0.516142i 3.123110i 0.507992i 3.116772i 0.501654i 3.113150i 0.498031i \ 3.111339i 0.496220i 3.109528i 0.495315i 3.105906i 0.492598i 3.097756i 0.487165i \ 3.088701i 0.481732i 3.084173i 0.479921i 3.081457i 0.479016i 3.076929i 0.477205i \ 3.070591i 0.474488i 3.069685i 0.474488i 3.068780i 0.473583i 3.067874i 0.473583i \ 3.066969i 0.473583i 3.066063i 0.473583i 3.066063i 0.474488i 3.066063i 0.475394i \ 3.066063i 0.476299i 3.066063i 0.477205i 3.066063i 0.478110i 3.066969i 0.479016i \ 3.066969i 0.479921i 3.066969i 0.480827i 3.066969i 0.479921i 3.066969i 0.479016i \ 3.066969i 0.478110i 3.066969i 0.477205i 3.066969i 0.475394i 3.066969i 0.474488i \ 3.066969i 0.464528i 3.067874i 0.455472i 3.067874i 0.447323i 3.068780i 0.440079i \ 3.068780i 0.431929i 3.069685i 0.423780i 3.070591i 0.421969i 3.069685i 0.424685i \ 3.069685i 0.430118i 3.069685i 0.435551i -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 3.070591i 0.441890i 3.071496i 0.447323i 3.072402i 0.449134i \ 3.072402i 0.450039i 3.073307i 0.451850i 3.075118i 0.456378i 3.076929i 0.460000i \ 3.077835i 0.460906i 3.082362i 0.464528i 3.088701i 0.469961i 3.092323i 0.472677i \ 3.095039i 0.474488i 3.099567i 0.477205i 3.107717i 0.484449i 3.114961i 0.490787i \ 3.118583i 0.493504i 3.120394i 0.494409i 3.123110i 0.498031i 3.128543i 0.504370i \ 3.133071i 0.511614i 3.134882i 0.514331i 3.135787i 0.515236i 3.136693i 0.517953i \ 3.138504i 0.525197i 3.139409i 0.532441i 3.139409i 0.535157i 3.138504i 0.538780i \ 3.136693i 0.547835i 3.133976i 0.557795i 3.131260i 0.564134i 3.129449i 0.568661i \ 3.127638i 0.572283i 3.124921i 0.577717i 3.122205i 0.584961i 3.122205i 0.585866i \ 3.121299i 0.586772i 3.121299i 0.587677i 3.120394i 0.587677i 3.120394i 0.588583i \ 3.120394i 0.589488i 3.119488i 0.589488i 3.119488i 0.590394i 3.119488i 0.589488i \ 3.119488i 0.588583i 3.119488i 0.587677i 3.119488i 0.586772i 3.120394i 0.586772i \ 3.120394i 0.585866i 3.120394i 0.584961i 3.122205i 0.578622i 3.124016i 0.574094i \ 3.125827i 0.570472i 3.127638i 0.566850i 3.129449i 0.561417i 3.132165i 0.553268i \ 3.134882i 0.545118i 3.135787i 0.542402i 3.136693i 0.542402i 3.136693i 0.539685i \ 3.135787i 0.532441i 3.133976i 0.524291i 3.132165i 0.520669i 3.131260i 0.519764i \ 3.129449i 0.516142i 3.123110i 0.507992i 3.116772i 0.501654i 3.113150i 0.498031i \ 3.111339i 0.496220i 3.109528i 0.495315i 3.105906i 0.492598i 3.097756i 0.487165i \ 3.088701i 0.481732i 3.084173i 0.479921i 3.081457i 0.479016i 3.076929i 0.477205i \ 3.070591i 0.474488i 3.069685i 0.474488i 3.068780i 0.473583i 3.067874i 0.473583i \ 3.066969i 0.473583i 3.066063i 0.473583i 3.066063i 0.474488i 3.066063i 0.475394i \ 3.066063i 0.476299i 3.066063i 0.477205i 3.066063i 0.478110i 3.066969i 0.479016i \ 3.066969i 0.479921i 3.066969i 0.480827i 3.066969i 0.479921i 3.066969i 0.479016i \ 3.066969i 0.478110i 3.066969i 0.477205i 3.066969i 0.475394i 3.066969i 0.474488i \ 3.066969i 0.464528i 3.067874i 0.455472i 3.067874i 0.447323i 3.068780i 0.440079i \ 3.068780i 0.431929i 3.069685i 0.423780i 3.070591i 0.421969i 3.069685i 0.424685i \ 3.069685i 0.430118i 3.069685i 0.435551i -outline $tkxox(score_active_note) -fill {} ${score} create line 2.309055i 0.422874i 2.309055i 0.602165i -fill $tkxox(score_active_note) ${score} create polygon 2.266496i 0.640197i 2.273740i 0.639291i 2.277362i 0.638386i \ 2.278268i 0.638386i 2.281890i 0.637480i 2.289134i 0.634764i 2.296378i 0.632047i \ 2.299094i 0.630236i 2.300000i 0.629331i 2.302717i 0.628425i 2.308150i 0.623898i \ 2.312677i 0.619370i 2.314488i 0.617559i 2.315394i 0.616654i 2.317205i 0.613937i \ 2.318110i 0.609409i 2.318110i 0.606693i 2.318110i 0.603976i 2.318110i 0.603071i \ 2.318110i 0.602165i 2.317205i 0.601260i 2.316299i 0.600354i 2.314488i 0.598543i \ 2.311772i 0.596732i 2.306339i 0.594016i 2.302717i 0.594016i 2.300906i 0.593110i \ 2.297283i 0.593110i 2.289134i 0.593110i 2.281890i 0.594016i 2.278268i 0.594016i \ 2.276457i 0.594016i 2.273740i 0.594921i 2.266496i 0.597638i 2.260157i 0.600354i \ 2.257441i 0.602165i 2.256535i 0.603071i 2.254724i 0.604882i 2.250197i 0.608504i \ 2.246575i 0.611220i 2.245669i 0.612126i 2.244764i 0.613937i 2.242953i 0.616654i \ 2.241142i 0.620276i 2.240236i 0.622087i 2.239331i 0.622992i 2.239331i 0.624803i \ 2.239331i 0.628425i 2.240236i 0.631142i 2.241142i 0.632953i 2.241142i 0.633858i \ 2.242953i 0.635669i 2.246575i 0.637480i 2.252008i 0.639291i 2.254724i 0.640197i \ 2.255630i 0.640197i 2.259252i 0.640197i -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 2.266496i 0.640197i 2.273740i 0.639291i 2.277362i 0.638386i \ 2.278268i 0.638386i 2.281890i 0.637480i 2.289134i 0.634764i 2.296378i 0.632047i \ 2.299094i 0.630236i 2.300000i 0.629331i 2.302717i 0.628425i 2.308150i 0.623898i \ 2.312677i 0.619370i 2.314488i 0.617559i 2.315394i 0.616654i 2.317205i 0.613937i \ 2.318110i 0.609409i 2.318110i 0.606693i 2.318110i 0.603976i 2.318110i 0.603071i \ 2.318110i 0.602165i 2.317205i 0.601260i 2.316299i 0.600354i 2.314488i 0.598543i \ 2.311772i 0.596732i 2.306339i 0.594016i 2.302717i 0.594016i 2.300906i 0.593110i \ 2.297283i 0.593110i 2.289134i 0.593110i 2.281890i 0.594016i 2.278268i 0.594016i \ 2.276457i 0.594016i 2.273740i 0.594921i 2.266496i 0.597638i 2.260157i 0.600354i \ 2.257441i 0.602165i 2.256535i 0.603071i 2.254724i 0.604882i 2.250197i 0.608504i \ 2.246575i 0.611220i 2.245669i 0.612126i 2.244764i 0.613937i 2.242953i 0.616654i \ 2.241142i 0.620276i 2.240236i 0.622087i 2.239331i 0.622992i 2.239331i 0.624803i \ 2.239331i 0.628425i 2.240236i 0.631142i 2.241142i 0.632953i 2.241142i 0.633858i \ 2.242953i 0.635669i 2.246575i 0.637480i 2.252008i 0.639291i 2.254724i 0.640197i \ 2.255630i 0.640197i 2.259252i 0.640197i -outline $tkxox(score_active_note) -fill {} ${score} create polygon 2.314488i 0.441890i 2.315394i 0.447323i 2.315394i 0.449134i \ 2.315394i 0.450039i 2.316299i 0.451850i 2.318110i 0.456378i 2.319921i 0.460000i \ 2.320827i 0.460000i 2.321732i 0.460906i 2.326260i 0.464528i 2.332598i 0.469961i \ 2.336220i 0.472677i 2.338937i 0.474488i 2.342559i 0.477205i 2.350709i 0.484449i \ 2.358858i 0.490787i 2.361575i 0.493504i 2.363386i 0.494409i 2.367008i 0.498031i \ 2.372441i 0.504370i 2.376969i 0.511614i 2.378780i 0.514331i 2.378780i 0.515236i \ 2.379685i 0.517953i 2.381496i 0.525197i 2.382402i 0.532441i 2.383307i 0.535157i \ 2.382402i 0.538780i 2.380591i 0.547835i 2.377874i 0.557795i 2.375157i 0.564134i \ 2.373346i 0.568661i 2.371535i 0.572283i 2.368819i 0.577717i 2.366102i 0.584961i \ 2.366102i 0.585866i 2.365197i 0.586772i 2.365197i 0.587677i 2.364291i 0.587677i \ 2.364291i 0.588583i 2.364291i 0.589488i 2.363386i 0.589488i 2.363386i 0.590394i \ 2.363386i 0.589488i 2.363386i 0.588583i 2.363386i 0.587677i 2.363386i 0.586772i \ 2.364291i 0.586772i 2.364291i 0.585866i 2.364291i 0.584961i 2.366102i 0.578622i \ 2.367913i 0.574094i 2.369724i 0.570472i 2.371535i 0.566850i 2.373346i 0.561417i \ 2.376063i 0.553268i 2.378780i 0.545118i 2.379685i 0.542402i 2.380591i 0.542402i \ 2.380591i 0.539685i 2.379685i 0.532441i 2.377874i 0.524291i 2.376063i 0.520669i \ 2.375157i 0.519764i 2.373346i 0.516142i 2.367008i 0.507992i 2.360669i 0.501654i \ 2.357047i 0.498031i 2.355236i 0.496220i 2.353425i 0.495315i 2.349803i 0.492598i \ 2.341654i 0.487165i 2.332598i 0.481732i 2.328071i 0.479921i 2.325354i 0.479016i \ 2.320827i 0.477205i 2.314488i 0.474488i 2.313583i 0.474488i 2.312677i 0.473583i \ 2.311772i 0.473583i 2.310866i 0.473583i 2.309961i 0.473583i 2.309961i 0.474488i \ 2.309961i 0.475394i 2.309961i 0.476299i 2.309961i 0.477205i 2.309961i 0.478110i \ 2.310866i 0.479016i 2.310866i 0.479921i 2.310866i 0.480827i 2.310866i 0.479921i \ 2.310866i 0.479016i 2.310866i 0.478110i 2.310866i 0.477205i 2.310866i 0.475394i \ 2.310866i 0.474488i 2.310866i 0.464528i 2.311772i 0.455472i 2.311772i 0.447323i \ 2.312677i 0.440079i 2.312677i 0.431929i 2.313583i 0.423780i 2.314488i 0.421969i \ 2.314488i 0.424685i 2.313583i 0.430118i 2.313583i 0.435551i -outline {} -fill $tkxox(score_active_note) \ -width 0 ${score} create polygon 2.314488i 0.441890i 2.315394i 0.447323i 2.315394i 0.449134i \ 2.315394i 0.450039i 2.316299i 0.451850i 2.318110i 0.456378i 2.319921i 0.460000i \ 2.320827i 0.460000i 2.321732i 0.460906i 2.326260i 0.464528i 2.332598i 0.469961i \ 2.336220i 0.472677i 2.338937i 0.474488i 2.342559i 0.477205i 2.350709i 0.484449i \ 2.358858i 0.490787i 2.361575i 0.493504i 2.363386i 0.494409i 2.367008i 0.498031i \ 2.372441i 0.504370i 2.376969i 0.511614i 2.378780i 0.514331i 2.378780i 0.515236i \ 2.379685i 0.517953i 2.381496i 0.525197i 2.382402i 0.532441i 2.383307i 0.535157i \ 2.382402i 0.538780i 2.380591i 0.547835i 2.377874i 0.557795i 2.375157i 0.564134i \ 2.373346i 0.568661i 2.371535i 0.572283i 2.368819i 0.577717i 2.366102i 0.584961i \ 2.366102i 0.585866i 2.365197i 0.586772i 2.365197i 0.587677i 2.364291i 0.587677i \ 2.364291i 0.588583i 2.364291i 0.589488i 2.363386i 0.589488i 2.363386i 0.590394i \ 2.363386i 0.589488i 2.363386i 0.588583i 2.363386i 0.587677i 2.363386i 0.586772i \ 2.364291i 0.586772i 2.364291i 0.585866i 2.364291i 0.584961i 2.366102i 0.578622i \ 2.367913i 0.574094i 2.369724i 0.570472i 2.371535i 0.566850i 2.373346i 0.561417i \ 2.376063i 0.553268i 2.378780i 0.545118i 2.379685i 0.542402i 2.380591i 0.542402i \ 2.380591i 0.539685i 2.379685i 0.532441i 2.377874i 0.524291i 2.376063i 0.520669i \ 2.375157i 0.519764i 2.373346i 0.516142i 2.367008i 0.507992i 2.360669i 0.501654i \ 2.357047i 0.498031i 2.355236i 0.496220i 2.353425i 0.495315i 2.349803i 0.492598i \ 2.341654i 0.487165i 2.332598i 0.481732i 2.328071i 0.479921i 2.325354i 0.479016i \ 2.320827i 0.477205i 2.314488i 0.474488i 2.313583i 0.474488i 2.312677i 0.473583i \ 2.311772i 0.473583i 2.310866i 0.473583i 2.309961i 0.473583i 2.309961i 0.474488i \ 2.309961i 0.475394i 2.309961i 0.476299i 2.309961i 0.477205i 2.309961i 0.478110i \ 2.310866i 0.479016i 2.310866i 0.479921i 2.310866i 0.480827i 2.310866i 0.479921i \ 2.310866i 0.479016i 2.310866i 0.478110i 2.310866i 0.477205i 2.310866i 0.475394i \ 2.310866i 0.474488i 2.310866i 0.464528i 2.311772i 0.455472i 2.311772i 0.447323i \ 2.312677i 0.440079i 2.312677i 0.431929i 2.313583i 0.423780i 2.314488i 0.421969i \ 2.314488i 0.424685i 2.313583i 0.430118i 2.313583i 0.435551i -outline $tkxox(score_active_note) -fill \ {} ${score} create line 2.309055i 0.086024i 2.309055i 0.266220i -fill $tkxox(score_active_note) ${score} create polygon 2.266496i 0.301535i 2.273740i 0.300630i 2.277362i 0.300630i \ 2.278268i 0.300630i 2.281890i 0.299724i 2.289134i 0.297913i 2.296378i 0.295197i \ 2.299094i 0.293386i 2.300000i 0.293386i 2.302717i 0.291575i 2.308150i 0.287047i \ 2.312677i 0.282520i 2.314488i 0.280709i 2.315394i 0.279803i 2.317205i 0.277087i \ 2.318110i 0.272559i 2.318110i 0.269843i 2.318110i 0.267126i 2.318110i 0.266220i \ 2.318110i 0.265315i 2.317205i 0.264409i 2.316299i 0.263504i 2.314488i 0.261693i \ 2.311772i 0.259882i 2.306339i 0.257165i 2.302717i 0.256260i 2.300906i 0.256260i \ 2.297283i 0.255354i 2.289134i 0.255354i 2.281890i 0.256260i 2.278268i 0.256260i \ 2.276457i 0.257165i 2.273740i 0.258071i 2.266496i 0.260787i 2.260157i 0.263504i \ 2.257441i 0.265315i 2.256535i 0.266220i 2.254724i 0.268031i 2.250197i 0.271654i \ 2.246575i 0.274370i 2.245669i 0.275276i 2.244764i 0.276181i 2.242953i 0.278898i \ 2.241142i 0.282520i 2.240236i 0.284331i 2.239331i 0.285236i 2.239331i 0.287047i \ 2.239331i 0.290669i 2.240236i 0.294291i 2.241142i 0.296102i 2.241142i 0.297008i \ 2.242953i 0.298819i 2.246575i 0.300630i 2.252008i 0.302441i 2.254724i 0.302441i \ 2.255630i 0.302441i 2.259252i 0.301535i -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 2.266496i 0.301535i 2.273740i 0.300630i 2.277362i 0.300630i \ 2.278268i 0.300630i 2.281890i 0.299724i 2.289134i 0.297913i 2.296378i 0.295197i \ 2.299094i 0.293386i 2.300000i 0.293386i 2.302717i 0.291575i 2.308150i 0.287047i \ 2.312677i 0.282520i 2.314488i 0.280709i 2.315394i 0.279803i 2.317205i 0.277087i \ 2.318110i 0.272559i 2.318110i 0.269843i 2.318110i 0.267126i 2.318110i 0.266220i \ 2.318110i 0.265315i 2.317205i 0.264409i 2.316299i 0.263504i 2.314488i 0.261693i \ 2.311772i 0.259882i 2.306339i 0.257165i 2.302717i 0.256260i 2.300906i 0.256260i \ 2.297283i 0.255354i 2.289134i 0.255354i 2.281890i 0.256260i 2.278268i 0.256260i \ 2.276457i 0.257165i 2.273740i 0.258071i 2.266496i 0.260787i 2.260157i 0.263504i \ 2.257441i 0.265315i 2.256535i 0.266220i 2.254724i 0.268031i 2.250197i 0.271654i \ 2.246575i 0.274370i 2.245669i 0.275276i 2.244764i 0.276181i 2.242953i 0.278898i \ 2.241142i 0.282520i 2.240236i 0.284331i 2.239331i 0.285236i 2.239331i 0.287047i \ 2.239331i 0.290669i 2.240236i 0.294291i 2.241142i 0.296102i 2.241142i 0.297008i \ 2.242953i 0.298819i 2.246575i 0.300630i 2.252008i 0.302441i 2.254724i 0.302441i \ 2.255630i 0.302441i 2.259252i 0.301535i -outline $tkxox(score_active_note) -fill {} ${score} create polygon 2.314488i 0.104134i 2.315394i 0.109567i 2.315394i 0.111378i \ 2.315394i 0.112283i 2.316299i 0.114094i 2.318110i 0.118622i 2.319921i 0.122244i \ 2.320827i 0.123150i 2.320827i 0.122244i 2.321732i 0.123150i 2.326260i 0.127677i \ 2.332598i 0.133110i 2.336220i 0.135827i 2.338937i 0.137638i 2.342559i 0.140354i \ 2.350709i 0.147598i 2.358858i 0.153937i 2.361575i 0.157559i 2.363386i 0.158465i \ 2.367008i 0.161181i 2.372441i 0.167520i 2.376969i 0.173858i 2.378780i 0.175669i \ 2.378780i 0.176575i 2.379685i 0.179291i 2.381496i 0.185630i 2.382402i 0.192874i \ 2.383307i 0.195591i 2.383307i 0.196496i 2.382402i 0.200118i 2.380591i 0.210079i \ 2.377874i 0.220039i 2.375157i 0.226378i 2.373346i 0.230906i 2.371535i 0.234528i \ 2.368819i 0.239961i 2.366102i 0.247205i 2.366102i 0.248110i 2.365197i 0.249016i \ 2.365197i 0.249921i 2.364291i 0.249921i 2.364291i 0.250827i 2.364291i 0.251732i \ 2.363386i 0.251732i 2.363386i 0.252638i 2.363386i 0.251732i 2.363386i 0.250827i \ 2.363386i 0.249921i 2.363386i 0.249016i 2.364291i 0.249016i 2.364291i 0.248110i \ 2.364291i 0.247205i 2.366102i 0.241772i 2.367913i 0.237244i 2.369724i 0.233622i \ 2.371535i 0.230000i 2.373346i 0.224567i 2.376063i 0.216417i 2.378780i 0.208268i \ 2.379685i 0.204646i 2.380591i 0.203740i 2.380591i 0.201024i 2.379685i 0.193780i \ 2.377874i 0.186535i 2.376063i 0.182913i 2.375157i 0.182008i 2.373346i 0.178386i \ 2.367008i 0.171142i 2.360669i 0.164803i 2.357047i 0.161181i 2.355236i 0.160276i \ 2.353425i 0.158465i 2.349803i 0.155748i 2.341654i 0.150315i 2.332598i 0.144882i \ 2.328071i 0.142165i 2.325354i 0.141260i 2.320827i 0.139449i 2.314488i 0.136732i \ 2.313583i 0.136732i 2.312677i 0.135827i 2.311772i 0.135827i 2.310866i 0.135827i \ 2.309961i 0.135827i 2.309961i 0.136732i 2.309961i 0.137638i 2.309961i 0.138543i \ 2.309961i 0.139449i 2.309961i 0.140354i 2.310866i 0.140354i 2.310866i 0.141260i \ 2.310866i 0.142165i 2.310866i 0.141260i 2.310866i 0.140354i 2.310866i 0.139449i \ 2.310866i 0.137638i 2.310866i 0.136732i 2.310866i 0.126772i 2.311772i 0.117717i \ 2.311772i 0.110472i 2.312677i 0.103228i 2.312677i 0.094173i 2.313583i 0.086929i \ 2.314488i 0.085118i 2.314488i 0.087835i 2.313583i 0.092362i 2.313583i 0.097795i \ -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 2.314488i 0.104134i 2.315394i 0.109567i 2.315394i 0.111378i \ 2.315394i 0.112283i 2.316299i 0.114094i 2.318110i 0.118622i 2.319921i 0.122244i \ 2.320827i 0.123150i 2.320827i 0.122244i 2.321732i 0.123150i 2.326260i 0.127677i \ 2.332598i 0.133110i 2.336220i 0.135827i 2.338937i 0.137638i 2.342559i 0.140354i \ 2.350709i 0.147598i 2.358858i 0.153937i 2.361575i 0.157559i 2.363386i 0.158465i \ 2.367008i 0.161181i 2.372441i 0.167520i 2.376969i 0.173858i 2.378780i 0.175669i \ 2.378780i 0.176575i 2.379685i 0.179291i 2.381496i 0.185630i 2.382402i 0.192874i \ 2.383307i 0.195591i 2.383307i 0.196496i 2.382402i 0.200118i 2.380591i 0.210079i \ 2.377874i 0.220039i 2.375157i 0.226378i 2.373346i 0.230906i 2.371535i 0.234528i \ 2.368819i 0.239961i 2.366102i 0.247205i 2.366102i 0.248110i 2.365197i 0.249016i \ 2.365197i 0.249921i 2.364291i 0.249921i 2.364291i 0.250827i 2.364291i 0.251732i \ 2.363386i 0.251732i 2.363386i 0.252638i 2.363386i 0.251732i 2.363386i 0.250827i \ 2.363386i 0.249921i 2.363386i 0.249016i 2.364291i 0.249016i 2.364291i 0.248110i \ 2.364291i 0.247205i 2.366102i 0.241772i 2.367913i 0.237244i 2.369724i 0.233622i \ 2.371535i 0.230000i 2.373346i 0.224567i 2.376063i 0.216417i 2.378780i 0.208268i \ 2.379685i 0.204646i 2.380591i 0.203740i 2.380591i 0.201024i 2.379685i 0.193780i \ 2.377874i 0.186535i 2.376063i 0.182913i 2.375157i 0.182008i 2.373346i 0.178386i \ 2.367008i 0.171142i 2.360669i 0.164803i 2.357047i 0.161181i 2.355236i 0.160276i \ 2.353425i 0.158465i 2.349803i 0.155748i 2.341654i 0.150315i 2.332598i 0.144882i \ 2.328071i 0.142165i 2.325354i 0.141260i 2.320827i 0.139449i 2.314488i 0.136732i \ 2.313583i 0.136732i 2.312677i 0.135827i 2.311772i 0.135827i 2.310866i 0.135827i \ 2.309961i 0.135827i 2.309961i 0.136732i 2.309961i 0.137638i 2.309961i 0.138543i \ 2.309961i 0.139449i 2.309961i 0.140354i 2.310866i 0.140354i 2.310866i 0.141260i \ 2.310866i 0.142165i 2.310866i 0.141260i 2.310866i 0.140354i 2.310866i 0.139449i \ 2.310866i 0.137638i 2.310866i 0.136732i 2.310866i 0.126772i 2.311772i 0.117717i \ 2.311772i 0.110472i 2.312677i 0.103228i 2.312677i 0.094173i 2.313583i 0.086929i \ 2.314488i 0.085118i 2.314488i 0.087835i 2.313583i 0.092362i 2.313583i 0.097795i \ -outline $tkxox(score_active_note) -fill {} ${score} create line 1.702362i 0.422874i 1.702362i 0.602165i -fill $tkxox(score_active_note) ${score} create polygon 1.659803i 0.640197i 1.667047i 0.639291i 1.670669i 0.638386i \ 1.672480i 0.638386i 1.676102i 0.637480i 1.683346i 0.634764i 1.690591i 0.632047i \ 1.693307i 0.630236i 1.694213i 0.629331i 1.696024i 0.628425i 1.701457i 0.623898i \ 1.705984i 0.619370i 1.707795i 0.617559i 1.708701i 0.616654i 1.710512i 0.613937i \ 1.711417i 0.609409i 1.711417i 0.605787i 1.711417i 0.603071i 1.710512i 0.602165i \ 1.710512i 0.601260i 1.708701i 0.599449i 1.705079i 0.596732i 1.699646i 0.594016i \ 1.696929i 0.594016i 1.695118i 0.593110i 1.691496i 0.593110i 1.684252i 0.593110i \ 1.676102i 0.594016i 1.672480i 0.594016i 1.670669i 0.594016i 1.667047i 0.594921i \ 1.659803i 0.597638i 1.653465i 0.600354i 1.651654i 0.602165i 1.650748i 0.603071i \ 1.648937i 0.604882i 1.645315i 0.608504i 1.641693i 0.611220i 1.640787i 0.612126i \ 1.639882i 0.613937i 1.638071i 0.616654i 1.636260i 0.620276i 1.635354i 0.622087i \ 1.635354i 0.622992i 1.635354i 0.624803i 1.635354i 0.628425i 1.636260i 0.632047i \ 1.637165i 0.632953i 1.637165i 0.633858i 1.638071i 0.634764i 1.641693i 0.637480i \ 1.646220i 0.639291i 1.648937i 0.640197i 1.649843i 0.640197i 1.652559i 0.640197i \ -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 1.659803i 0.640197i 1.667047i 0.639291i 1.670669i 0.638386i \ 1.672480i 0.638386i 1.676102i 0.637480i 1.683346i 0.634764i 1.690591i 0.632047i \ 1.693307i 0.630236i 1.694213i 0.629331i 1.696024i 0.628425i 1.701457i 0.623898i \ 1.705984i 0.619370i 1.707795i 0.617559i 1.708701i 0.616654i 1.710512i 0.613937i \ 1.711417i 0.609409i 1.711417i 0.605787i 1.711417i 0.603071i 1.710512i 0.602165i \ 1.710512i 0.601260i 1.708701i 0.599449i 1.705079i 0.596732i 1.699646i 0.594016i \ 1.696929i 0.594016i 1.695118i 0.593110i 1.691496i 0.593110i 1.684252i 0.593110i \ 1.676102i 0.594016i 1.672480i 0.594016i 1.670669i 0.594016i 1.667047i 0.594921i \ 1.659803i 0.597638i 1.653465i 0.600354i 1.651654i 0.602165i 1.650748i 0.603071i \ 1.648937i 0.604882i 1.645315i 0.608504i 1.641693i 0.611220i 1.640787i 0.612126i \ 1.639882i 0.613937i 1.638071i 0.616654i 1.636260i 0.620276i 1.635354i 0.622087i \ 1.635354i 0.622992i 1.635354i 0.624803i 1.635354i 0.628425i 1.636260i 0.632047i \ 1.637165i 0.632953i 1.637165i 0.633858i 1.638071i 0.634764i 1.641693i 0.637480i \ 1.646220i 0.639291i 1.648937i 0.640197i 1.649843i 0.640197i 1.652559i 0.640197i \ -outline $tkxox(score_active_note) -fill {} ${score} create polygon 1.707795i 0.441890i 1.708701i 0.447323i 1.708701i 0.449134i \ 1.708701i 0.450039i 1.709606i 0.451850i 1.711417i 0.456378i 1.713228i 0.460000i \ 1.714134i 0.460000i 1.713228i 0.460000i 1.715039i 0.460906i 1.719567i 0.464528i \ 1.725906i 0.469961i 1.729528i 0.472677i 1.732244i 0.474488i 1.736772i 0.477205i \ 1.744921i 0.484449i 1.752165i 0.490787i 1.755787i 0.493504i 1.757598i 0.494409i \ 1.760315i 0.498031i 1.765748i 0.504370i 1.770276i 0.511614i 1.772087i 0.514331i \ 1.772992i 0.515236i 1.773898i 0.517953i 1.775709i 0.525197i 1.776614i 0.532441i \ 1.776614i 0.535157i 1.775709i 0.538780i 1.773898i 0.547835i 1.771181i 0.557795i \ 1.768465i 0.564134i 1.766654i 0.568661i 1.764843i 0.572283i 1.762126i 0.577717i \ 1.759409i 0.584961i 1.759409i 0.585866i 1.758504i 0.586772i 1.758504i 0.587677i \ 1.757598i 0.587677i 1.757598i 0.588583i 1.757598i 0.589488i 1.756693i 0.589488i \ 1.756693i 0.590394i 1.756693i 0.589488i 1.756693i 0.588583i 1.756693i 0.587677i \ 1.756693i 0.586772i 1.757598i 0.586772i 1.757598i 0.585866i 1.757598i 0.584961i \ 1.759409i 0.578622i 1.761220i 0.574094i 1.763031i 0.570472i 1.764843i 0.566850i \ 1.766654i 0.561417i 1.769370i 0.553268i 1.772087i 0.545118i 1.772992i 0.542402i \ 1.773898i 0.542402i 1.773898i 0.539685i 1.772992i 0.532441i 1.771181i 0.524291i \ 1.769370i 0.520669i 1.768465i 0.519764i 1.766654i 0.516142i 1.760315i 0.507992i \ 1.753976i 0.501654i 1.750354i 0.498031i 1.748543i 0.496220i 1.746732i 0.495315i \ 1.743110i 0.492598i 1.734961i 0.487165i 1.725906i 0.481732i 1.721378i 0.479921i \ 1.718661i 0.479016i 1.714134i 0.477205i 1.707795i 0.474488i 1.706890i 0.474488i \ 1.705984i 0.473583i 1.705079i 0.473583i 1.704173i 0.473583i 1.703268i 0.473583i \ 1.703268i 0.474488i 1.703268i 0.475394i 1.703268i 0.476299i 1.703268i 0.477205i \ 1.703268i 0.478110i 1.704173i 0.479016i 1.704173i 0.479921i 1.704173i 0.480827i \ 1.704173i 0.479921i 1.704173i 0.479016i 1.704173i 0.478110i 1.704173i 0.477205i \ 1.704173i 0.475394i 1.704173i 0.474488i 1.704173i 0.464528i 1.705079i 0.455472i \ 1.705079i 0.447323i 1.705984i 0.440079i 1.705984i 0.431929i 1.706890i 0.423780i \ 1.707795i 0.421969i 1.707795i 0.424685i 1.706890i 0.430118i 1.706890i 0.435551i \ -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 1.707795i 0.441890i 1.708701i 0.447323i 1.708701i 0.449134i \ 1.708701i 0.450039i 1.709606i 0.451850i 1.711417i 0.456378i 1.713228i 0.460000i \ 1.714134i 0.460000i 1.713228i 0.460000i 1.715039i 0.460906i 1.719567i 0.464528i \ 1.725906i 0.469961i 1.729528i 0.472677i 1.732244i 0.474488i 1.736772i 0.477205i \ 1.744921i 0.484449i 1.752165i 0.490787i 1.755787i 0.493504i 1.757598i 0.494409i \ 1.760315i 0.498031i 1.765748i 0.504370i 1.770276i 0.511614i 1.772087i 0.514331i \ 1.772992i 0.515236i 1.773898i 0.517953i 1.775709i 0.525197i 1.776614i 0.532441i \ 1.776614i 0.535157i 1.775709i 0.538780i 1.773898i 0.547835i 1.771181i 0.557795i \ 1.768465i 0.564134i 1.766654i 0.568661i 1.764843i 0.572283i 1.762126i 0.577717i \ 1.759409i 0.584961i 1.759409i 0.585866i 1.758504i 0.586772i 1.758504i 0.587677i \ 1.757598i 0.587677i 1.757598i 0.588583i 1.757598i 0.589488i 1.756693i 0.589488i \ 1.756693i 0.590394i 1.756693i 0.589488i 1.756693i 0.588583i 1.756693i 0.587677i \ 1.756693i 0.586772i 1.757598i 0.586772i 1.757598i 0.585866i 1.757598i 0.584961i \ 1.759409i 0.578622i 1.761220i 0.574094i 1.763031i 0.570472i 1.764843i 0.566850i \ 1.766654i 0.561417i 1.769370i 0.553268i 1.772087i 0.545118i 1.772992i 0.542402i \ 1.773898i 0.542402i 1.773898i 0.539685i 1.772992i 0.532441i 1.771181i 0.524291i \ 1.769370i 0.520669i 1.768465i 0.519764i 1.766654i 0.516142i 1.760315i 0.507992i \ 1.753976i 0.501654i 1.750354i 0.498031i 1.748543i 0.496220i 1.746732i 0.495315i \ 1.743110i 0.492598i 1.734961i 0.487165i 1.725906i 0.481732i 1.721378i 0.479921i \ 1.718661i 0.479016i 1.714134i 0.477205i 1.707795i 0.474488i 1.706890i 0.474488i \ 1.705984i 0.473583i 1.705079i 0.473583i 1.704173i 0.473583i 1.703268i 0.473583i \ 1.703268i 0.474488i 1.703268i 0.475394i 1.703268i 0.476299i 1.703268i 0.477205i \ 1.703268i 0.478110i 1.704173i 0.479016i 1.704173i 0.479921i 1.704173i 0.480827i \ 1.704173i 0.479921i 1.704173i 0.479016i 1.704173i 0.478110i 1.704173i 0.477205i \ 1.704173i 0.475394i 1.704173i 0.474488i 1.704173i 0.464528i 1.705079i 0.455472i \ 1.705079i 0.447323i 1.705984i 0.440079i 1.705984i 0.431929i 1.706890i 0.423780i \ 1.707795i 0.421969i 1.707795i 0.424685i 1.706890i 0.430118i 1.706890i 0.435551i \ -outline $tkxox(score_active_note) -fill {} ${score} create line 1.098386i 0.086024i 1.098386i 0.266220i -fill $tkxox(score_active_note) ${score} create polygon 1.054016i 0.301535i 1.061260i 0.300630i 1.064882i 0.300630i \ 1.066693i 0.300630i 1.071220i 0.299724i 1.078465i 0.297913i 1.085709i 0.295197i \ 1.088425i 0.293386i 1.089331i 0.293386i 1.092047i 0.291575i 1.097480i 0.287047i \ 1.102008i 0.282520i 1.103819i 0.280709i 1.104724i 0.279803i 1.106535i 0.277087i \ 1.107441i 0.272559i 1.107441i 0.268937i 1.107441i 0.266220i 1.106535i 0.265315i \ 1.106535i 0.264409i 1.104724i 0.262598i 1.101102i 0.259882i 1.095669i 0.257165i \ 1.092953i 0.256260i 1.091142i 0.256260i 1.087520i 0.255354i 1.079370i 0.255354i \ 1.071220i 0.256260i 1.066693i 0.256260i 1.064882i 0.257165i 1.061260i 0.258071i \ 1.054016i 0.260787i 1.047677i 0.263504i 1.045866i 0.265315i 1.045866i 0.266220i \ 1.044055i 0.268031i 1.040433i 0.271654i 1.036811i 0.274370i 1.035906i 0.275276i \ 1.035000i 0.275276i 1.034094i 0.276181i 1.032283i 0.278898i 1.030472i 0.282520i \ 1.029567i 0.284331i 1.028661i 0.285236i 1.028661i 0.287047i 1.028661i 0.290669i \ 1.029567i 0.294291i 1.030472i 0.296102i 1.030472i 0.297008i 1.031378i 0.297008i \ 1.032283i 0.298819i 1.035906i 0.300630i 1.040433i 0.302441i 1.043150i 0.302441i \ 1.044055i 0.302441i 1.046772i 0.301535i -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 1.054016i 0.301535i 1.061260i 0.300630i 1.064882i 0.300630i \ 1.066693i 0.300630i 1.071220i 0.299724i 1.078465i 0.297913i 1.085709i 0.295197i \ 1.088425i 0.293386i 1.089331i 0.293386i 1.092047i 0.291575i 1.097480i 0.287047i \ 1.102008i 0.282520i 1.103819i 0.280709i 1.104724i 0.279803i 1.106535i 0.277087i \ 1.107441i 0.272559i 1.107441i 0.268937i 1.107441i 0.266220i 1.106535i 0.265315i \ 1.106535i 0.264409i 1.104724i 0.262598i 1.101102i 0.259882i 1.095669i 0.257165i \ 1.092953i 0.256260i 1.091142i 0.256260i 1.087520i 0.255354i 1.079370i 0.255354i \ 1.071220i 0.256260i 1.066693i 0.256260i 1.064882i 0.257165i 1.061260i 0.258071i \ 1.054016i 0.260787i 1.047677i 0.263504i 1.045866i 0.265315i 1.045866i 0.266220i \ 1.044055i 0.268031i 1.040433i 0.271654i 1.036811i 0.274370i 1.035906i 0.275276i \ 1.035000i 0.275276i 1.034094i 0.276181i 1.032283i 0.278898i 1.030472i 0.282520i \ 1.029567i 0.284331i 1.028661i 0.285236i 1.028661i 0.287047i 1.028661i 0.290669i \ 1.029567i 0.294291i 1.030472i 0.296102i 1.030472i 0.297008i 1.031378i 0.297008i \ 1.032283i 0.298819i 1.035906i 0.300630i 1.040433i 0.302441i 1.043150i 0.302441i \ 1.044055i 0.302441i 1.046772i 0.301535i -outline $tkxox(score_active_note) -fill {} ${score} create polygon 1.103819i 0.104134i 1.104724i 0.109567i 1.104724i 0.111378i \ 1.105630i 0.112283i 1.105630i 0.114094i 1.107441i 0.118622i 1.109252i 0.122244i \ 1.109252i 0.123150i 1.109252i 0.122244i 1.110157i 0.123150i 1.114685i 0.127677i \ 1.121024i 0.133110i 1.124646i 0.135827i 1.127362i 0.137638i 1.131890i 0.140354i \ 1.140039i 0.147598i 1.148189i 0.153937i 1.151811i 0.157559i 1.152717i 0.158465i \ 1.156339i 0.161181i 1.161772i 0.167520i 1.166299i 0.173858i 1.168110i 0.175669i \ 1.168110i 0.176575i 1.169016i 0.179291i 1.170827i 0.185630i 1.171732i 0.192874i \ 1.171732i 0.195591i 1.171732i 0.196496i 1.170827i 0.200118i 1.169016i 0.210079i \ 1.166299i 0.220039i 1.163583i 0.226378i 1.161772i 0.230906i 1.160866i 0.234528i \ 1.158150i 0.239961i 1.155433i 0.247205i 1.155433i 0.248110i 1.154528i 0.249016i \ 1.154528i 0.249921i 1.153622i 0.250827i 1.153622i 0.251732i 1.152717i 0.252638i \ 1.152717i 0.251732i 1.152717i 0.250827i 1.152717i 0.249921i 1.152717i 0.249016i \ 1.153622i 0.249016i 1.153622i 0.248110i 1.153622i 0.247205i 1.155433i 0.241772i \ 1.157244i 0.237244i 1.159055i 0.233622i 1.159961i 0.230000i 1.161772i 0.224567i \ 1.164488i 0.216417i 1.166299i 0.208268i 1.168110i 0.204646i 1.168110i 0.203740i \ 1.169016i 0.201024i 1.168110i 0.193780i 1.166299i 0.186535i 1.165394i 0.182913i \ 1.164488i 0.182008i 1.161772i 0.178386i 1.156339i 0.171142i 1.150000i 0.164803i \ 1.146378i 0.161181i 1.144567i 0.160276i 1.142756i 0.158465i 1.138228i 0.155748i \ 1.130079i 0.150315i 1.121024i 0.144882i 1.116496i 0.142165i 1.113780i 0.141260i \ 1.110157i 0.139449i 1.103819i 0.136732i 1.102913i 0.136732i 1.102008i 0.135827i \ 1.101102i 0.135827i 1.100197i 0.135827i 1.099291i 0.135827i 1.099291i 0.136732i \ 1.099291i 0.137638i 1.099291i 0.138543i 1.099291i 0.139449i 1.099291i 0.140354i \ 1.100197i 0.140354i 1.100197i 0.141260i 1.100197i 0.142165i 1.100197i 0.141260i \ 1.100197i 0.140354i 1.100197i 0.139449i 1.100197i 0.137638i 1.100197i 0.136732i \ 1.100197i 0.126772i 1.101102i 0.117717i 1.101102i 0.110472i 1.102008i 0.103228i \ 1.102008i 0.094173i 1.102913i 0.086929i 1.103819i 0.085118i 1.103819i 0.087835i \ 1.102913i 0.092362i 1.102913i 0.097795i -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 1.103819i 0.104134i 1.104724i 0.109567i 1.104724i 0.111378i \ 1.105630i 0.112283i 1.105630i 0.114094i 1.107441i 0.118622i 1.109252i 0.122244i \ 1.109252i 0.123150i 1.109252i 0.122244i 1.110157i 0.123150i 1.114685i 0.127677i \ 1.121024i 0.133110i 1.124646i 0.135827i 1.127362i 0.137638i 1.131890i 0.140354i \ 1.140039i 0.147598i 1.148189i 0.153937i 1.151811i 0.157559i 1.152717i 0.158465i \ 1.156339i 0.161181i 1.161772i 0.167520i 1.166299i 0.173858i 1.168110i 0.175669i \ 1.168110i 0.176575i 1.169016i 0.179291i 1.170827i 0.185630i 1.171732i 0.192874i \ 1.171732i 0.195591i 1.171732i 0.196496i 1.170827i 0.200118i 1.169016i 0.210079i \ 1.166299i 0.220039i 1.163583i 0.226378i 1.161772i 0.230906i 1.160866i 0.234528i \ 1.158150i 0.239961i 1.155433i 0.247205i 1.155433i 0.248110i 1.154528i 0.249016i \ 1.154528i 0.249921i 1.153622i 0.250827i 1.153622i 0.251732i 1.152717i 0.252638i \ 1.152717i 0.251732i 1.152717i 0.250827i 1.152717i 0.249921i 1.152717i 0.249016i \ 1.153622i 0.249016i 1.153622i 0.248110i 1.153622i 0.247205i 1.155433i 0.241772i \ 1.157244i 0.237244i 1.159055i 0.233622i 1.159961i 0.230000i 1.161772i 0.224567i \ 1.164488i 0.216417i 1.166299i 0.208268i 1.168110i 0.204646i 1.168110i 0.203740i \ 1.169016i 0.201024i 1.168110i 0.193780i 1.166299i 0.186535i 1.165394i 0.182913i \ 1.164488i 0.182008i 1.161772i 0.178386i 1.156339i 0.171142i 1.150000i 0.164803i \ 1.146378i 0.161181i 1.144567i 0.160276i 1.142756i 0.158465i 1.138228i 0.155748i \ 1.130079i 0.150315i 1.121024i 0.144882i 1.116496i 0.142165i 1.113780i 0.141260i \ 1.110157i 0.139449i 1.103819i 0.136732i 1.102913i 0.136732i 1.102008i 0.135827i \ 1.101102i 0.135827i 1.100197i 0.135827i 1.099291i 0.135827i 1.099291i 0.136732i \ 1.099291i 0.137638i 1.099291i 0.138543i 1.099291i 0.139449i 1.099291i 0.140354i \ 1.100197i 0.140354i 1.100197i 0.141260i 1.100197i 0.142165i 1.100197i 0.141260i \ 1.100197i 0.140354i 1.100197i 0.139449i 1.100197i 0.137638i 1.100197i 0.136732i \ 1.100197i 0.126772i 1.101102i 0.117717i 1.101102i 0.110472i 1.102008i 0.103228i \ 1.102008i 0.094173i 1.102913i 0.086929i 1.103819i 0.085118i 1.103819i 0.087835i \ 1.102913i 0.092362i 1.102913i 0.097795i -outline $tkxox(score_active_note) -fill {} ${score} create line 1.098386i 0.422874i 1.098386i 0.602165i -fill $tkxox(score_active_note) ${score} create polygon 1.054016i 0.640197i 1.061260i 0.639291i 1.064882i 0.638386i \ 1.066693i 0.638386i 1.071220i 0.637480i 1.078465i 0.634764i 1.085709i 0.632047i \ 1.088425i 0.630236i 1.089331i 0.629331i 1.092047i 0.628425i 1.097480i 0.623898i \ 1.102008i 0.619370i 1.103819i 0.617559i 1.104724i 0.616654i 1.106535i 0.613937i \ 1.107441i 0.609409i 1.107441i 0.605787i 1.107441i 0.603071i 1.106535i 0.602165i \ 1.106535i 0.601260i 1.104724i 0.599449i 1.101102i 0.596732i 1.095669i 0.594016i \ 1.092953i 0.594016i 1.091142i 0.593110i 1.087520i 0.593110i 1.079370i 0.593110i \ 1.071220i 0.594016i 1.066693i 0.594016i 1.064882i 0.594016i 1.061260i 0.594921i \ 1.054016i 0.597638i 1.047677i 0.600354i 1.045866i 0.602165i 1.045866i 0.603071i \ 1.044055i 0.604882i 1.040433i 0.608504i 1.036811i 0.611220i 1.035906i 0.612126i \ 1.035000i 0.612126i 1.034094i 0.613937i 1.032283i 0.616654i 1.030472i 0.620276i \ 1.029567i 0.622087i 1.028661i 0.622992i 1.028661i 0.624803i 1.028661i 0.628425i \ 1.029567i 0.631142i 1.030472i 0.632953i 1.030472i 0.633858i 1.031378i 0.633858i \ 1.032283i 0.635669i 1.035906i 0.637480i 1.040433i 0.639291i 1.043150i 0.640197i \ 1.044055i 0.640197i 1.046772i 0.640197i -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 1.054016i 0.640197i 1.061260i 0.639291i 1.064882i 0.638386i \ 1.066693i 0.638386i 1.071220i 0.637480i 1.078465i 0.634764i 1.085709i 0.632047i \ 1.088425i 0.630236i 1.089331i 0.629331i 1.092047i 0.628425i 1.097480i 0.623898i \ 1.102008i 0.619370i 1.103819i 0.617559i 1.104724i 0.616654i 1.106535i 0.613937i \ 1.107441i 0.609409i 1.107441i 0.605787i 1.107441i 0.603071i 1.106535i 0.602165i \ 1.106535i 0.601260i 1.104724i 0.599449i 1.101102i 0.596732i 1.095669i 0.594016i \ 1.092953i 0.594016i 1.091142i 0.593110i 1.087520i 0.593110i 1.079370i 0.593110i \ 1.071220i 0.594016i 1.066693i 0.594016i 1.064882i 0.594016i 1.061260i 0.594921i \ 1.054016i 0.597638i 1.047677i 0.600354i 1.045866i 0.602165i 1.045866i 0.603071i \ 1.044055i 0.604882i 1.040433i 0.608504i 1.036811i 0.611220i 1.035906i 0.612126i \ 1.035000i 0.612126i 1.034094i 0.613937i 1.032283i 0.616654i 1.030472i 0.620276i \ 1.029567i 0.622087i 1.028661i 0.622992i 1.028661i 0.624803i 1.028661i 0.628425i \ 1.029567i 0.631142i 1.030472i 0.632953i 1.030472i 0.633858i 1.031378i 0.633858i \ 1.032283i 0.635669i 1.035906i 0.637480i 1.040433i 0.639291i 1.043150i 0.640197i \ 1.044055i 0.640197i 1.046772i 0.640197i -outline $tkxox(score_active_note) -fill {} ${score} create polygon 1.103819i 0.441890i 1.104724i 0.447323i 1.104724i 0.449134i \ 1.105630i 0.450039i 1.105630i 0.451850i 1.107441i 0.456378i 1.109252i 0.460000i \ 1.110157i 0.460906i 1.114685i 0.464528i 1.121024i 0.469961i 1.124646i 0.472677i \ 1.127362i 0.474488i 1.131890i 0.477205i 1.140039i 0.484449i 1.148189i 0.490787i \ 1.151811i 0.493504i 1.152717i 0.494409i 1.156339i 0.498031i 1.161772i 0.504370i \ 1.166299i 0.511614i 1.168110i 0.514331i 1.168110i 0.515236i 1.169016i 0.517953i \ 1.170827i 0.525197i 1.171732i 0.532441i 1.171732i 0.535157i 1.170827i 0.538780i \ 1.169016i 0.547835i 1.166299i 0.557795i 1.163583i 0.564134i 1.161772i 0.568661i \ 1.160866i 0.572283i 1.158150i 0.577717i 1.155433i 0.584961i 1.155433i 0.585866i \ 1.154528i 0.586772i 1.154528i 0.587677i 1.153622i 0.588583i 1.153622i 0.589488i \ 1.152717i 0.590394i 1.152717i 0.589488i 1.152717i 0.588583i 1.152717i 0.587677i \ 1.152717i 0.586772i 1.153622i 0.586772i 1.153622i 0.585866i 1.153622i 0.584961i \ 1.155433i 0.578622i 1.157244i 0.574094i 1.159055i 0.570472i 1.159961i 0.566850i \ 1.161772i 0.561417i 1.164488i 0.553268i 1.166299i 0.545118i 1.168110i 0.542402i \ 1.169016i 0.539685i 1.168110i 0.532441i 1.166299i 0.524291i 1.165394i 0.520669i \ 1.164488i 0.519764i 1.161772i 0.516142i 1.156339i 0.507992i 1.150000i 0.501654i \ 1.146378i 0.498031i 1.144567i 0.496220i 1.142756i 0.495315i 1.138228i 0.492598i \ 1.130079i 0.487165i 1.121024i 0.481732i 1.116496i 0.479921i 1.113780i 0.479016i \ 1.110157i 0.477205i 1.103819i 0.474488i 1.102913i 0.474488i 1.102008i 0.473583i \ 1.101102i 0.473583i 1.100197i 0.473583i 1.099291i 0.473583i 1.099291i 0.474488i \ 1.099291i 0.475394i 1.099291i 0.476299i 1.099291i 0.477205i 1.099291i 0.478110i \ 1.100197i 0.479016i 1.100197i 0.479921i 1.100197i 0.480827i 1.100197i 0.479921i \ 1.100197i 0.479016i 1.100197i 0.478110i 1.100197i 0.477205i 1.100197i 0.475394i \ 1.100197i 0.474488i 1.100197i 0.464528i 1.101102i 0.455472i 1.101102i 0.447323i \ 1.102008i 0.440079i 1.102008i 0.431929i 1.102913i 0.423780i 1.103819i 0.421969i \ 1.103819i 0.424685i 1.102913i 0.430118i 1.102913i 0.435551i -outline {} -fill $tkxox(score_active_note) \ -width 0 ${score} create polygon 1.103819i 0.441890i 1.104724i 0.447323i 1.104724i 0.449134i \ 1.105630i 0.450039i 1.105630i 0.451850i 1.107441i 0.456378i 1.109252i 0.460000i \ 1.110157i 0.460906i 1.114685i 0.464528i 1.121024i 0.469961i 1.124646i 0.472677i \ 1.127362i 0.474488i 1.131890i 0.477205i 1.140039i 0.484449i 1.148189i 0.490787i \ 1.151811i 0.493504i 1.152717i 0.494409i 1.156339i 0.498031i 1.161772i 0.504370i \ 1.166299i 0.511614i 1.168110i 0.514331i 1.168110i 0.515236i 1.169016i 0.517953i \ 1.170827i 0.525197i 1.171732i 0.532441i 1.171732i 0.535157i 1.170827i 0.538780i \ 1.169016i 0.547835i 1.166299i 0.557795i 1.163583i 0.564134i 1.161772i 0.568661i \ 1.160866i 0.572283i 1.158150i 0.577717i 1.155433i 0.584961i 1.155433i 0.585866i \ 1.154528i 0.586772i 1.154528i 0.587677i 1.153622i 0.588583i 1.153622i 0.589488i \ 1.152717i 0.590394i 1.152717i 0.589488i 1.152717i 0.588583i 1.152717i 0.587677i \ 1.152717i 0.586772i 1.153622i 0.586772i 1.153622i 0.585866i 1.153622i 0.584961i \ 1.155433i 0.578622i 1.157244i 0.574094i 1.159055i 0.570472i 1.159961i 0.566850i \ 1.161772i 0.561417i 1.164488i 0.553268i 1.166299i 0.545118i 1.168110i 0.542402i \ 1.169016i 0.539685i 1.168110i 0.532441i 1.166299i 0.524291i 1.165394i 0.520669i \ 1.164488i 0.519764i 1.161772i 0.516142i 1.156339i 0.507992i 1.150000i 0.501654i \ 1.146378i 0.498031i 1.144567i 0.496220i 1.142756i 0.495315i 1.138228i 0.492598i \ 1.130079i 0.487165i 1.121024i 0.481732i 1.116496i 0.479921i 1.113780i 0.479016i \ 1.110157i 0.477205i 1.103819i 0.474488i 1.102913i 0.474488i 1.102008i 0.473583i \ 1.101102i 0.473583i 1.100197i 0.473583i 1.099291i 0.473583i 1.099291i 0.474488i \ 1.099291i 0.475394i 1.099291i 0.476299i 1.099291i 0.477205i 1.099291i 0.478110i \ 1.100197i 0.479016i 1.100197i 0.479921i 1.100197i 0.480827i 1.100197i 0.479921i \ 1.100197i 0.479016i 1.100197i 0.478110i 1.100197i 0.477205i 1.100197i 0.475394i \ 1.100197i 0.474488i 1.100197i 0.464528i 1.101102i 0.455472i 1.101102i 0.447323i \ 1.102008i 0.440079i 1.102008i 0.431929i 1.102913i 0.423780i 1.103819i 0.421969i \ 1.103819i 0.424685i 1.102913i 0.430118i 1.102913i 0.435551i -outline $tkxox(score_active_note) -fill \ {} ${score} create line 1.101102i 0.721693i 1.101102i 0.927244i -fill $tkxox(score_active_note) ${score} create polygon 1.054921i 0.967992i 1.063071i 0.967087i 1.066693i 0.967087i \ 1.068504i 0.967087i 1.072126i 0.966181i 1.080276i 0.963465i 1.087520i 0.959843i \ 1.090236i 0.958937i 1.091142i 0.958031i 1.093858i 0.955315i 1.099291i 0.950787i \ 1.103819i 0.945354i 1.106535i 0.943543i 1.107441i 0.942638i 1.108346i 0.939921i \ 1.110157i 0.934488i 1.110157i 0.930866i 1.110157i 0.928150i 1.110157i 0.927244i \ 1.110157i 0.926339i 1.109252i 0.925433i 1.108346i 0.924528i 1.106535i 0.922717i \ 1.103819i 0.920000i 1.098386i 0.917283i 1.095669i 0.916378i 1.093858i 0.916378i \ 1.090236i 0.916378i 1.082087i 0.916378i 1.073031i 0.917283i 1.069409i 0.918189i \ 1.066693i 0.918189i 1.062165i 0.919094i 1.054921i 0.921811i 1.048583i 0.924528i \ 1.046772i 0.925433i 1.045866i 0.926339i 1.044055i 0.927244i 1.040433i 0.930866i \ 1.036811i 0.934488i 1.035906i 0.935394i 1.035000i 0.936299i 1.034094i 0.937205i \ 1.032283i 0.941732i 1.030472i 0.946260i 1.029567i 0.948071i 1.028661i 0.949882i \ 1.028661i 0.951693i 1.028661i 0.956220i 1.029567i 0.960748i 1.030472i 0.962559i \ 1.030472i 0.963465i 1.032283i 0.964370i 1.035906i 0.967087i 1.040433i 0.968898i \ 1.043150i 0.968898i 1.044961i 0.968898i 1.047677i 0.967992i -outline {} -fill $tkxox(score_active_note) \ -width 0 ${score} create polygon 1.054921i 0.967992i 1.063071i 0.967087i 1.066693i 0.967087i \ 1.068504i 0.967087i 1.072126i 0.966181i 1.080276i 0.963465i 1.087520i 0.959843i \ 1.090236i 0.958937i 1.091142i 0.958031i 1.093858i 0.955315i 1.099291i 0.950787i \ 1.103819i 0.945354i 1.106535i 0.943543i 1.107441i 0.942638i 1.108346i 0.939921i \ 1.110157i 0.934488i 1.110157i 0.930866i 1.110157i 0.928150i 1.110157i 0.927244i \ 1.110157i 0.926339i 1.109252i 0.925433i 1.108346i 0.924528i 1.106535i 0.922717i \ 1.103819i 0.920000i 1.098386i 0.917283i 1.095669i 0.916378i 1.093858i 0.916378i \ 1.090236i 0.916378i 1.082087i 0.916378i 1.073031i 0.917283i 1.069409i 0.918189i \ 1.066693i 0.918189i 1.062165i 0.919094i 1.054921i 0.921811i 1.048583i 0.924528i \ 1.046772i 0.925433i 1.045866i 0.926339i 1.044055i 0.927244i 1.040433i 0.930866i \ 1.036811i 0.934488i 1.035906i 0.935394i 1.035000i 0.936299i 1.034094i 0.937205i \ 1.032283i 0.941732i 1.030472i 0.946260i 1.029567i 0.948071i 1.028661i 0.949882i \ 1.028661i 0.951693i 1.028661i 0.956220i 1.029567i 0.960748i 1.030472i 0.962559i \ 1.030472i 0.963465i 1.032283i 0.964370i 1.035906i 0.967087i 1.040433i 0.968898i \ 1.043150i 0.968898i 1.044961i 0.968898i 1.047677i 0.967992i -outline $tkxox(score_active_note) -fill \ {} ${score} create line 1.101102i 1.060354i 1.101102i 1.264094i -fill $tkxox(score_active_note) ${score} create polygon 1.054921i 1.306654i 1.063071i 1.305748i 1.066693i 1.305748i \ 1.068504i 1.304843i 1.072126i 1.303937i 1.080276i 1.301220i 1.087520i 1.297598i \ 1.090236i 1.295787i 1.091142i 1.295787i 1.093858i 1.293071i 1.099291i 1.288543i \ 1.103819i 1.283110i 1.106535i 1.281299i 1.107441i 1.280394i 1.108346i 1.277677i \ 1.110157i 1.272244i 1.110157i 1.268622i 1.110157i 1.265906i 1.110157i 1.265000i \ 1.110157i 1.264094i 1.109252i 1.263189i 1.108346i 1.262283i 1.106535i 1.260472i \ 1.103819i 1.257756i 1.098386i 1.255039i 1.095669i 1.253228i 1.093858i 1.253228i \ 1.090236i 1.252323i 1.082087i 1.252323i 1.073031i 1.253228i 1.069409i 1.254134i \ 1.066693i 1.255039i 1.062165i 1.256850i 1.054921i 1.259567i 1.048583i 1.262283i \ 1.046772i 1.263189i 1.045866i 1.264094i 1.044055i 1.265906i 1.040433i 1.268622i \ 1.036811i 1.272244i 1.035906i 1.273150i 1.035000i 1.273150i 1.034094i 1.274961i \ 1.032283i 1.278583i 1.030472i 1.283110i 1.029567i 1.284921i 1.028661i 1.286732i \ 1.028661i 1.288543i 1.028661i 1.293071i 1.029567i 1.297598i 1.030472i 1.299409i \ 1.030472i 1.300315i 1.032283i 1.301220i 1.035906i 1.303937i 1.040433i 1.305748i \ 1.043150i 1.306654i 1.044961i 1.306654i 1.047677i 1.306654i -outline {} -fill $tkxox(score_active_note) \ -width 0 ${score} create polygon 1.054921i 1.306654i 1.063071i 1.305748i 1.066693i 1.305748i \ 1.068504i 1.304843i 1.072126i 1.303937i 1.080276i 1.301220i 1.087520i 1.297598i \ 1.090236i 1.295787i 1.091142i 1.295787i 1.093858i 1.293071i 1.099291i 1.288543i \ 1.103819i 1.283110i 1.106535i 1.281299i 1.107441i 1.280394i 1.108346i 1.277677i \ 1.110157i 1.272244i 1.110157i 1.268622i 1.110157i 1.265906i 1.110157i 1.265000i \ 1.110157i 1.264094i 1.109252i 1.263189i 1.108346i 1.262283i 1.106535i 1.260472i \ 1.103819i 1.257756i 1.098386i 1.255039i 1.095669i 1.253228i 1.093858i 1.253228i \ 1.090236i 1.252323i 1.082087i 1.252323i 1.073031i 1.253228i 1.069409i 1.254134i \ 1.066693i 1.255039i 1.062165i 1.256850i 1.054921i 1.259567i 1.048583i 1.262283i \ 1.046772i 1.263189i 1.045866i 1.264094i 1.044055i 1.265906i 1.040433i 1.268622i \ 1.036811i 1.272244i 1.035906i 1.273150i 1.035000i 1.273150i 1.034094i 1.274961i \ 1.032283i 1.278583i 1.030472i 1.283110i 1.029567i 1.284921i 1.028661i 1.286732i \ 1.028661i 1.288543i 1.028661i 1.293071i 1.029567i 1.297598i 1.030472i 1.299409i \ 1.030472i 1.300315i 1.032283i 1.301220i 1.035906i 1.303937i 1.040433i 1.305748i \ 1.043150i 1.306654i 1.044961i 1.306654i 1.047677i 1.306654i -outline $tkxox(score_active_note) -fill \ {} ${score} create line 11.014646i 0.422874i 11.014646i 0.602165i -fill $tkxox(score_passive_note) ${score} create polygon 11.020079i 0.441890i 11.020984i 0.447323i 11.020984i 0.449134i \ 11.021890i 0.450039i 11.021890i 0.451850i 11.023701i 0.456378i 11.025512i 0.460000i \ 11.026417i 0.460906i 11.030945i 0.464528i 11.037283i 0.469961i 11.040906i 0.472677i \ 11.043622i 0.474488i 11.048150i 0.477205i 11.056299i 0.484449i 11.064449i 0.490787i \ 11.068071i 0.493504i 11.068976i 0.494409i 11.072598i 0.498031i 11.078031i 0.504370i \ 11.082559i 0.511614i 11.084370i 0.514331i 11.084370i 0.515236i 11.085276i 0.517953i \ 11.087087i 0.525197i 11.087992i 0.532441i 11.088898i 0.535157i 11.087992i 0.538780i \ 11.086181i 0.547835i 11.083465i 0.557795i 11.080748i 0.564134i 11.078937i 0.568661i \ 11.077126i 0.572283i 11.074409i 0.577717i 11.071693i 0.584961i 11.071693i 0.585866i \ 11.070787i 0.586772i 11.070787i 0.587677i 11.069882i 0.587677i 11.069882i 0.588583i \ 11.069882i 0.589488i 11.068976i 0.589488i 11.068976i 0.590394i 11.068976i 0.589488i \ 11.068976i 0.588583i 11.068976i 0.587677i 11.068976i 0.586772i 11.069882i 0.586772i \ 11.069882i 0.585866i 11.069882i 0.584961i 11.071693i 0.578622i 11.073504i 0.574094i \ 11.075315i 0.570472i 11.077126i 0.566850i 11.078937i 0.561417i 11.081654i 0.553268i \ 11.084370i 0.545118i 11.085276i 0.542402i 11.086181i 0.542402i 11.086181i 0.539685i \ 11.085276i 0.532441i 11.083465i 0.524291i 11.081654i 0.520669i 11.080748i 0.519764i \ 11.078937i 0.516142i 11.072598i 0.507992i 11.066260i 0.501654i 11.062638i 0.498031i \ 11.060827i 0.496220i 11.058110i 0.495315i 11.054488i 0.492598i 11.046339i 0.487165i \ 11.037283i 0.481732i 11.032756i 0.479921i 11.030039i 0.479016i 11.026417i 0.477205i \ 11.020079i 0.474488i 11.019173i 0.474488i 11.018268i 0.473583i 11.017362i 0.473583i \ 11.016457i 0.473583i 11.015551i 0.473583i 11.015551i 0.474488i 11.015551i 0.475394i \ 11.015551i 0.476299i 11.015551i 0.477205i 11.015551i 0.478110i 11.016457i 0.479016i \ 11.016457i 0.479921i 11.016457i 0.480827i 11.016457i 0.479921i 11.016457i 0.479016i \ 11.016457i 0.478110i 11.016457i 0.477205i 11.016457i 0.475394i 11.016457i 0.474488i \ 11.016457i 0.464528i 11.017362i 0.455472i 11.017362i 0.447323i 11.018268i 0.440079i \ 11.018268i 0.431929i 11.019173i 0.423780i 11.020079i 0.421969i 11.020079i 0.424685i \ 11.019173i 0.430118i 11.019173i 0.435551i -outline {} -fill $tkxox(score_passive_note) -width 0 ${score} create polygon 11.020079i 0.441890i 11.020984i 0.447323i 11.020984i 0.449134i \ 11.021890i 0.450039i 11.021890i 0.451850i 11.023701i 0.456378i 11.025512i 0.460000i \ 11.026417i 0.460906i 11.030945i 0.464528i 11.037283i 0.469961i 11.040906i 0.472677i \ 11.043622i 0.474488i 11.048150i 0.477205i 11.056299i 0.484449i 11.064449i 0.490787i \ 11.068071i 0.493504i 11.068976i 0.494409i 11.072598i 0.498031i 11.078031i 0.504370i \ 11.082559i 0.511614i 11.084370i 0.514331i 11.084370i 0.515236i 11.085276i 0.517953i \ 11.087087i 0.525197i 11.087992i 0.532441i 11.088898i 0.535157i 11.087992i 0.538780i \ 11.086181i 0.547835i 11.083465i 0.557795i 11.080748i 0.564134i 11.078937i 0.568661i \ 11.077126i 0.572283i 11.074409i 0.577717i 11.071693i 0.584961i 11.071693i 0.585866i \ 11.070787i 0.586772i 11.070787i 0.587677i 11.069882i 0.587677i 11.069882i 0.588583i \ 11.069882i 0.589488i 11.068976i 0.589488i 11.068976i 0.590394i 11.068976i 0.589488i \ 11.068976i 0.588583i 11.068976i 0.587677i 11.068976i 0.586772i 11.069882i 0.586772i \ 11.069882i 0.585866i 11.069882i 0.584961i 11.071693i 0.578622i 11.073504i 0.574094i \ 11.075315i 0.570472i 11.077126i 0.566850i 11.078937i 0.561417i 11.081654i 0.553268i \ 11.084370i 0.545118i 11.085276i 0.542402i 11.086181i 0.542402i 11.086181i 0.539685i \ 11.085276i 0.532441i 11.083465i 0.524291i 11.081654i 0.520669i 11.080748i 0.519764i \ 11.078937i 0.516142i 11.072598i 0.507992i 11.066260i 0.501654i 11.062638i 0.498031i \ 11.060827i 0.496220i 11.058110i 0.495315i 11.054488i 0.492598i 11.046339i 0.487165i \ 11.037283i 0.481732i 11.032756i 0.479921i 11.030039i 0.479016i 11.026417i 0.477205i \ 11.020079i 0.474488i 11.019173i 0.474488i 11.018268i 0.473583i 11.017362i 0.473583i \ 11.016457i 0.473583i 11.015551i 0.473583i 11.015551i 0.474488i 11.015551i 0.475394i \ 11.015551i 0.476299i 11.015551i 0.477205i 11.015551i 0.478110i 11.016457i 0.479016i \ 11.016457i 0.479921i 11.016457i 0.480827i 11.016457i 0.479921i 11.016457i 0.479016i \ 11.016457i 0.478110i 11.016457i 0.477205i 11.016457i 0.475394i 11.016457i 0.474488i \ 11.016457i 0.464528i 11.017362i 0.455472i 11.017362i 0.447323i 11.018268i 0.440079i \ 11.018268i 0.431929i 11.019173i 0.423780i 11.020079i 0.421969i 11.020079i 0.424685i \ 11.019173i 0.430118i 11.019173i 0.435551i -outline $tkxox(score_passive_note) -fill {} ${score} create polygon 10.970276i 0.640197i 10.977520i 0.639291i 10.980236i 0.638386i \ 10.982047i 0.638386i 10.985669i 0.637480i 10.992913i 0.634764i 11.000157i 0.632047i \ 11.003780i 0.630236i 11.005591i 0.629331i 11.008307i 0.628425i 11.013740i 0.623898i \ 11.018268i 0.619370i 11.020984i 0.617559i 11.020984i 0.616654i 11.022795i 0.613937i \ 11.023701i 0.609409i 11.023701i 0.606693i 11.023701i 0.603976i 11.023701i 0.603071i \ 11.023701i 0.602165i 11.022795i 0.601260i 11.022795i 0.600354i 11.020984i 0.598543i \ 11.017362i 0.596732i 11.011024i 0.594016i 11.007402i 0.594016i 11.005591i 0.593110i \ 11.001063i 0.593110i 10.992913i 0.593110i 10.984764i 0.594016i 10.981142i 0.594016i \ 10.980236i 0.594016i 10.976614i 0.594921i 10.970276i 0.597638i 10.963937i 0.600354i \ 10.962126i 0.602165i 10.961220i 0.603071i 10.959409i 0.604882i 10.955787i 0.608504i \ 10.952165i 0.611220i 10.951260i 0.612126i 10.950354i 0.613937i 10.948543i 0.616654i \ 10.946732i 0.620276i 10.945827i 0.622087i 10.944921i 0.622992i 10.944921i 0.624803i \ 10.944921i 0.628425i 10.945827i 0.631142i 10.946732i 0.632953i 10.946732i 0.633858i \ 10.947638i 0.633858i 10.948543i 0.635669i 10.952165i 0.637480i 10.956693i 0.639291i \ 10.959409i 0.640197i 10.960315i 0.640197i 10.963937i 0.640197i -outline {} -fill \ $tkxox(score_passive_note) -width 0 ${score} create polygon 10.970276i 0.640197i 10.977520i 0.639291i 10.980236i 0.638386i \ 10.982047i 0.638386i 10.985669i 0.637480i 10.992913i 0.634764i 11.000157i 0.632047i \ 11.003780i 0.630236i 11.005591i 0.629331i 11.008307i 0.628425i 11.013740i 0.623898i \ 11.018268i 0.619370i 11.020984i 0.617559i 11.020984i 0.616654i 11.022795i 0.613937i \ 11.023701i 0.609409i 11.023701i 0.606693i 11.023701i 0.603976i 11.023701i 0.603071i \ 11.023701i 0.602165i 11.022795i 0.601260i 11.022795i 0.600354i 11.020984i 0.598543i \ 11.017362i 0.596732i 11.011024i 0.594016i 11.007402i 0.594016i 11.005591i 0.593110i \ 11.001063i 0.593110i 10.992913i 0.593110i 10.984764i 0.594016i 10.981142i 0.594016i \ 10.980236i 0.594016i 10.976614i 0.594921i 10.970276i 0.597638i 10.963937i 0.600354i \ 10.962126i 0.602165i 10.961220i 0.603071i 10.959409i 0.604882i 10.955787i 0.608504i \ 10.952165i 0.611220i 10.951260i 0.612126i 10.950354i 0.613937i 10.948543i 0.616654i \ 10.946732i 0.620276i 10.945827i 0.622087i 10.944921i 0.622992i 10.944921i 0.624803i \ 10.944921i 0.628425i 10.945827i 0.631142i 10.946732i 0.632953i 10.946732i 0.633858i \ 10.947638i 0.633858i 10.948543i 0.635669i 10.952165i 0.637480i 10.956693i 0.639291i \ 10.959409i 0.640197i 10.960315i 0.640197i 10.963937i 0.640197i -outline $tkxox(score_passive_note) \ -fill {} ${score} create line 10.330079i 0.422874i 10.330079i 0.602165i -fill $tkxox(score_active_note) ${score} create polygon 10.285709i 0.640197i 10.293858i 0.639291i 10.297480i 0.638386i \ 10.299291i 0.638386i 10.302913i 0.637480i 10.311063i 0.634764i 10.318307i 0.632047i \ 10.321024i 0.630236i 10.321929i 0.629331i 10.323740i 0.628425i 10.329173i 0.623898i \ 10.333701i 0.619370i 10.335512i 0.617559i 10.336417i 0.616654i 10.338228i 0.613937i \ 10.339134i 0.609409i 10.339134i 0.605787i 10.339134i 0.603071i 10.338228i 0.602165i \ 10.338228i 0.601260i 10.336417i 0.599449i 10.332795i 0.596732i 10.327362i 0.594016i \ 10.324646i 0.594016i 10.322835i 0.593110i 10.320118i 0.593110i 10.311969i 0.593110i \ 10.303819i 0.594016i 10.299291i 0.594016i 10.297480i 0.594016i 10.292953i 0.594921i \ 10.285709i 0.597638i 10.279370i 0.600354i 10.277559i 0.602165i 10.276654i 0.603071i \ 10.274843i 0.604882i 10.271220i 0.608504i 10.267598i 0.611220i 10.266693i 0.612126i \ 10.265787i 0.613937i 10.263976i 0.616654i 10.262165i 0.620276i 10.261260i 0.622087i \ 10.261260i 0.622992i 10.261260i 0.624803i 10.261260i 0.628425i 10.262165i 0.632047i \ 10.263071i 0.632953i 10.263071i 0.633858i 10.263976i 0.634764i 10.267598i 0.637480i \ 10.272126i 0.639291i 10.274843i 0.640197i 10.275748i 0.640197i 10.278465i 0.640197i \ -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 10.285709i 0.640197i 10.293858i 0.639291i 10.297480i 0.638386i \ 10.299291i 0.638386i 10.302913i 0.637480i 10.311063i 0.634764i 10.318307i 0.632047i \ 10.321024i 0.630236i 10.321929i 0.629331i 10.323740i 0.628425i 10.329173i 0.623898i \ 10.333701i 0.619370i 10.335512i 0.617559i 10.336417i 0.616654i 10.338228i 0.613937i \ 10.339134i 0.609409i 10.339134i 0.605787i 10.339134i 0.603071i 10.338228i 0.602165i \ 10.338228i 0.601260i 10.336417i 0.599449i 10.332795i 0.596732i 10.327362i 0.594016i \ 10.324646i 0.594016i 10.322835i 0.593110i 10.320118i 0.593110i 10.311969i 0.593110i \ 10.303819i 0.594016i 10.299291i 0.594016i 10.297480i 0.594016i 10.292953i 0.594921i \ 10.285709i 0.597638i 10.279370i 0.600354i 10.277559i 0.602165i 10.276654i 0.603071i \ 10.274843i 0.604882i 10.271220i 0.608504i 10.267598i 0.611220i 10.266693i 0.612126i \ 10.265787i 0.613937i 10.263976i 0.616654i 10.262165i 0.620276i 10.261260i 0.622087i \ 10.261260i 0.622992i 10.261260i 0.624803i 10.261260i 0.628425i 10.262165i 0.632047i \ 10.263071i 0.632953i 10.263071i 0.633858i 10.263976i 0.634764i 10.267598i 0.637480i \ 10.272126i 0.639291i 10.274843i 0.640197i 10.275748i 0.640197i 10.278465i 0.640197i \ -outline $tkxox(score_active_note) -fill {} ${score} create polygon 10.335512i 0.441890i 10.336417i 0.447323i 10.336417i 0.449134i \ 10.336417i 0.450039i 10.337323i 0.451850i 10.339134i 0.456378i 10.340945i 0.460000i \ 10.341850i 0.460000i 10.340945i 0.460000i 10.342756i 0.460906i 10.347283i 0.464528i \ 10.353622i 0.469961i 10.357244i 0.472677i 10.359961i 0.474488i 10.364488i 0.477205i \ 10.372638i 0.484449i 10.379882i 0.490787i 10.383504i 0.493504i 10.385315i 0.494409i \ 10.388031i 0.498031i 10.393465i 0.504370i 10.397992i 0.511614i 10.399803i 0.514331i \ 10.400709i 0.515236i 10.401614i 0.517953i 10.403425i 0.525197i 10.404331i 0.532441i \ 10.404331i 0.535157i 10.403425i 0.538780i 10.401614i 0.547835i 10.398898i 0.557795i \ 10.396181i 0.564134i 10.394370i 0.568661i 10.392559i 0.572283i 10.389843i 0.577717i \ 10.387126i 0.584961i 10.387126i 0.585866i 10.386220i 0.586772i 10.386220i 0.587677i \ 10.385315i 0.587677i 10.385315i 0.588583i 10.385315i 0.589488i 10.384409i 0.589488i \ 10.384409i 0.590394i 10.384409i 0.589488i 10.384409i 0.588583i 10.384409i 0.587677i \ 10.384409i 0.586772i 10.385315i 0.586772i 10.385315i 0.585866i 10.385315i 0.584961i \ 10.387126i 0.578622i 10.388937i 0.574094i 10.390748i 0.570472i 10.392559i 0.566850i \ 10.394370i 0.561417i 10.397087i 0.553268i 10.399803i 0.545118i 10.400709i 0.542402i \ 10.401614i 0.542402i 10.401614i 0.539685i 10.400709i 0.532441i 10.398898i 0.524291i \ 10.397087i 0.520669i 10.396181i 0.519764i 10.394370i 0.516142i 10.388031i 0.507992i \ 10.381693i 0.501654i 10.378071i 0.498031i 10.376260i 0.496220i 10.374449i 0.495315i \ 10.370827i 0.492598i 10.362677i 0.487165i 10.353622i 0.481732i 10.349094i 0.479921i \ 10.346378i 0.479016i 10.341850i 0.477205i 10.335512i 0.474488i 10.334606i 0.474488i \ 10.333701i 0.473583i 10.332795i 0.473583i 10.331890i 0.473583i 10.330984i 0.473583i \ 10.330984i 0.474488i 10.330984i 0.475394i 10.330984i 0.476299i 10.330984i 0.477205i \ 10.330984i 0.478110i 10.331890i 0.479016i 10.331890i 0.479921i 10.331890i 0.480827i \ 10.331890i 0.479921i 10.331890i 0.479016i 10.331890i 0.478110i 10.331890i 0.477205i \ 10.331890i 0.475394i 10.331890i 0.474488i 10.331890i 0.464528i 10.332795i 0.455472i \ 10.332795i 0.447323i 10.333701i 0.440079i 10.333701i 0.431929i 10.334606i 0.423780i \ 10.335512i 0.421969i 10.335512i 0.424685i 10.334606i 0.430118i 10.334606i 0.435551i \ -outline {} -fill $tkxox(score_active_note) -width 0 ${score} create polygon 10.335512i 0.441890i 10.336417i 0.447323i 10.336417i 0.449134i \ 10.336417i 0.450039i 10.337323i 0.451850i 10.339134i 0.456378i 10.340945i 0.460000i \ 10.341850i 0.460000i 10.340945i 0.460000i 10.342756i 0.460906i 10.347283i 0.464528i \ 10.353622i 0.469961i 10.357244i 0.472677i 10.359961i 0.474488i 10.364488i 0.477205i \ 10.372638i 0.484449i 10.379882i 0.490787i 10.383504i 0.493504i 10.385315i 0.494409i \ 10.388031i 0.498031i 10.393465i 0.504370i 10.397992i 0.511614i 10.399803i 0.514331i \ 10.400709i 0.515236i 10.401614i 0.517953i 10.403425i 0.525197i 10.404331i 0.532441i \ 10.404331i 0.535157i 10.403425i 0.538780i 10.401614i 0.547835i 10.398898i 0.557795i \ 10.396181i 0.564134i 10.394370i 0.568661i 10.392559i 0.572283i 10.389843i 0.577717i \ 10.387126i 0.584961i 10.387126i 0.585866i 10.386220i 0.586772i 10.386220i 0.587677i \ 10.385315i 0.587677i 10.385315i 0.588583i 10.385315i 0.589488i 10.384409i 0.589488i \ 10.384409i 0.590394i 10.384409i 0.589488i 10.384409i 0.588583i 10.384409i 0.587677i \ 10.384409i 0.586772i 10.385315i 0.586772i 10.385315i 0.585866i 10.385315i 0.584961i \ 10.387126i 0.578622i 10.388937i 0.574094i 10.390748i 0.570472i 10.392559i 0.566850i \ 10.394370i 0.561417i 10.397087i 0.553268i 10.399803i 0.545118i 10.400709i 0.542402i \ 10.401614i 0.542402i 10.401614i 0.539685i 10.400709i 0.532441i 10.398898i 0.524291i \ 10.397087i 0.520669i 10.396181i 0.519764i 10.394370i 0.516142i 10.388031i 0.507992i \ 10.381693i 0.501654i 10.378071i 0.498031i 10.376260i 0.496220i 10.374449i 0.495315i \ 10.370827i 0.492598i 10.362677i 0.487165i 10.353622i 0.481732i 10.349094i 0.479921i \ 10.346378i 0.479016i 10.341850i 0.477205i 10.335512i 0.474488i 10.334606i 0.474488i \ 10.333701i 0.473583i 10.332795i 0.473583i 10.331890i 0.473583i 10.330984i 0.473583i \ 10.330984i 0.474488i 10.330984i 0.475394i 10.330984i 0.476299i 10.330984i 0.477205i \ 10.330984i 0.478110i 10.331890i 0.479016i 10.331890i 0.479921i 10.331890i 0.480827i \ 10.331890i 0.479921i 10.331890i 0.479016i 10.331890i 0.478110i 10.331890i 0.477205i \ 10.331890i 0.475394i 10.331890i 0.474488i 10.331890i 0.464528i 10.332795i 0.455472i \ 10.332795i 0.447323i 10.333701i 0.440079i 10.333701i 0.431929i 10.334606i 0.423780i \ 10.335512i 0.421969i 10.335512i 0.424685i 10.334606i 0.430118i 10.334606i 0.435551i \ -outline $tkxox(score_active_note) -fill {} ${score} create line 10.332795i 0.086024i 10.332795i 0.266220i -fill $tkxox(score_passive_note) ${score} create polygon 10.338228i 0.104134i 10.339134i 0.109567i 10.339134i 0.111378i \ 10.339134i 0.112283i 10.340039i 0.114094i 10.341850i 0.118622i 10.343661i 0.122244i \ 10.344567i 0.123150i 10.343661i 0.122244i 10.345472i 0.123150i 10.350000i 0.127677i \ 10.356339i 0.133110i 10.359961i 0.135827i 10.362677i 0.137638i 10.367205i 0.140354i \ 10.375354i 0.147598i 10.382598i 0.153937i 10.386220i 0.157559i 10.388031i 0.158465i \ 10.390748i 0.161181i 10.396181i 0.167520i 10.400709i 0.173858i 10.402520i 0.175669i \ 10.402520i 0.176575i 10.403425i 0.179291i 10.405236i 0.185630i 10.406142i 0.192874i \ 10.406142i 0.195591i 10.406142i 0.196496i 10.405236i 0.200118i 10.403425i 0.210079i \ 10.400709i 0.220039i 10.397992i 0.226378i 10.396181i 0.230906i 10.395276i 0.234528i \ 10.392559i 0.239961i 10.389843i 0.247205i 10.389843i 0.248110i 10.388937i 0.249016i \ 10.388937i 0.249921i 10.388031i 0.250827i 10.388031i 0.251732i 10.387126i 0.252638i \ 10.387126i 0.251732i 10.387126i 0.250827i 10.387126i 0.249921i 10.387126i 0.249016i \ 10.388031i 0.249016i 10.388031i 0.248110i 10.388031i 0.247205i 10.389843i 0.241772i \ 10.391654i 0.237244i 10.393465i 0.233622i 10.395276i 0.230000i 10.397087i 0.224567i \ 10.399803i 0.216417i 10.402520i 0.208268i 10.403425i 0.204646i 10.404331i 0.203740i \ 10.404331i 0.201024i 10.403425i 0.193780i 10.400709i 0.186535i 10.399803i 0.182913i \ 10.398898i 0.182008i 10.396181i 0.178386i 10.389843i 0.171142i 10.383504i 0.164803i \ 10.379882i 0.161181i 10.378071i 0.160276i 10.376260i 0.158465i 10.371732i 0.155748i \ 10.364488i 0.150315i 10.355433i 0.144882i 10.350906i 0.142165i 10.348189i 0.141260i \ 10.344567i 0.139449i 10.338228i 0.136732i 10.337323i 0.136732i 10.336417i 0.135827i \ 10.335512i 0.135827i 10.334606i 0.135827i 10.333701i 0.135827i 10.333701i 0.136732i \ 10.333701i 0.137638i 10.333701i 0.138543i 10.333701i 0.139449i 10.333701i 0.140354i \ 10.334606i 0.140354i 10.334606i 0.141260i 10.334606i 0.142165i 10.334606i 0.141260i \ 10.334606i 0.140354i 10.334606i 0.139449i 10.334606i 0.137638i 10.334606i 0.136732i \ 10.334606i 0.126772i 10.335512i 0.117717i 10.335512i 0.110472i 10.336417i 0.103228i \ 10.336417i 0.094173i 10.337323i 0.086929i 10.338228i 0.085118i 10.338228i 0.087835i \ 10.337323i 0.092362i 10.337323i 0.097795i -outline {} -fill $tkxox(score_passive_note) -width 0 ${score} create polygon 10.338228i 0.104134i 10.339134i 0.109567i 10.339134i 0.111378i \ 10.339134i 0.112283i 10.340039i 0.114094i 10.341850i 0.118622i 10.343661i 0.122244i \ 10.344567i 0.123150i 10.343661i 0.122244i 10.345472i 0.123150i 10.350000i 0.127677i \ 10.356339i 0.133110i 10.359961i 0.135827i 10.362677i 0.137638i 10.367205i 0.140354i \ 10.375354i 0.147598i 10.382598i 0.153937i 10.386220i 0.157559i 10.388031i 0.158465i \ 10.390748i 0.161181i 10.396181i 0.167520i 10.400709i 0.173858i 10.402520i 0.175669i \ 10.402520i 0.176575i 10.403425i 0.179291i 10.405236i 0.185630i 10.406142i 0.192874i \ 10.406142i 0.195591i 10.406142i 0.196496i 10.405236i 0.200118i 10.403425i 0.210079i \ 10.400709i 0.220039i 10.397992i 0.226378i 10.396181i 0.230906i 10.395276i 0.234528i \ 10.392559i 0.239961i 10.389843i 0.247205i 10.389843i 0.248110i 10.388937i 0.249016i \ 10.388937i 0.249921i 10.388031i 0.250827i 10.388031i 0.251732i 10.387126i 0.252638i \ 10.387126i 0.251732i 10.387126i 0.250827i 10.387126i 0.249921i 10.387126i 0.249016i \ 10.388031i 0.249016i 10.388031i 0.248110i 10.388031i 0.247205i 10.389843i 0.241772i \ 10.391654i 0.237244i 10.393465i 0.233622i 10.395276i 0.230000i 10.397087i 0.224567i \ 10.399803i 0.216417i 10.402520i 0.208268i 10.403425i 0.204646i 10.404331i 0.203740i \ 10.404331i 0.201024i 10.403425i 0.193780i 10.400709i 0.186535i 10.399803i 0.182913i \ 10.398898i 0.182008i 10.396181i 0.178386i 10.389843i 0.171142i 10.383504i 0.164803i \ 10.379882i 0.161181i 10.378071i 0.160276i 10.376260i 0.158465i 10.371732i 0.155748i \ 10.364488i 0.150315i 10.355433i 0.144882i 10.350906i 0.142165i 10.348189i 0.141260i \ 10.344567i 0.139449i 10.338228i 0.136732i 10.337323i 0.136732i 10.336417i 0.135827i \ 10.335512i 0.135827i 10.334606i 0.135827i 10.333701i 0.135827i 10.333701i 0.136732i \ 10.333701i 0.137638i 10.333701i 0.138543i 10.333701i 0.139449i 10.333701i 0.140354i \ 10.334606i 0.140354i 10.334606i 0.141260i 10.334606i 0.142165i 10.334606i 0.141260i \ 10.334606i 0.140354i 10.334606i 0.139449i 10.334606i 0.137638i 10.334606i 0.136732i \ 10.334606i 0.126772i 10.335512i 0.117717i 10.335512i 0.110472i 10.336417i 0.103228i \ 10.336417i 0.094173i 10.337323i 0.086929i 10.338228i 0.085118i 10.338228i 0.087835i \ 10.337323i 0.092362i 10.337323i 0.097795i -outline $tkxox(score_passive_note) -fill {} ${score} create polygon 10.288425i 0.301535i 10.295669i 0.300630i 10.299291i 0.300630i \ 10.301102i 0.300630i 10.305630i 0.299724i 10.312874i 0.297913i 10.320118i 0.295197i \ 10.322835i 0.293386i 10.323740i 0.293386i 10.326457i 0.291575i 10.331890i 0.287047i \ 10.336417i 0.282520i 10.338228i 0.280709i 10.339134i 0.279803i 10.340945i 0.277087i \ 10.341850i 0.272559i 10.341850i 0.268937i 10.341850i 0.266220i 10.340945i 0.265315i \ 10.340945i 0.264409i 10.339134i 0.262598i 10.335512i 0.259882i 10.330079i 0.257165i \ 10.327362i 0.256260i 10.325551i 0.256260i 10.321929i 0.255354i 10.313780i 0.255354i \ 10.305630i 0.256260i 10.301102i 0.256260i 10.299291i 0.257165i 10.295669i 0.258071i \ 10.288425i 0.260787i 10.282087i 0.263504i 10.280276i 0.265315i 10.279370i 0.266220i \ 10.277559i 0.268031i 10.273937i 0.271654i 10.270315i 0.274370i 10.269409i 0.275276i \ 10.268504i 0.276181i 10.266693i 0.278898i 10.264882i 0.282520i 10.263976i 0.284331i \ 10.263071i 0.285236i 10.263071i 0.287047i 10.263071i 0.290669i 10.263976i 0.294291i \ 10.264882i 0.296102i 10.264882i 0.297008i 10.265787i 0.297008i 10.266693i 0.298819i \ 10.270315i 0.300630i 10.274843i 0.302441i 10.277559i 0.302441i 10.278465i 0.302441i \ 10.281181i 0.301535i -outline {} -fill $tkxox(score_passive_note) -width 0 ${score} create polygon 10.288425i 0.301535i 10.295669i 0.300630i 10.299291i 0.300630i \ 10.301102i 0.300630i 10.305630i 0.299724i 10.312874i 0.297913i 10.320118i 0.295197i \ 10.322835i 0.293386i 10.323740i 0.293386i 10.326457i 0.291575i 10.331890i 0.287047i \ 10.336417i 0.282520i 10.338228i 0.280709i 10.339134i 0.279803i 10.340945i 0.277087i \ 10.341850i 0.272559i 10.341850i 0.268937i 10.341850i 0.266220i 10.340945i 0.265315i \ 10.340945i 0.264409i 10.339134i 0.262598i 10.335512i 0.259882i 10.330079i 0.257165i \ 10.327362i 0.256260i 10.325551i 0.256260i 10.321929i 0.255354i 10.313780i 0.255354i \ 10.305630i 0.256260i 10.301102i 0.256260i 10.299291i 0.257165i 10.295669i 0.258071i \ 10.288425i 0.260787i 10.282087i 0.263504i 10.280276i 0.265315i 10.279370i 0.266220i \ 10.277559i 0.268031i 10.273937i 0.271654i 10.270315i 0.274370i 10.269409i 0.275276i \ 10.268504i 0.276181i 10.266693i 0.278898i 10.264882i 0.282520i 10.263976i 0.284331i \ 10.263071i 0.285236i 10.263071i 0.287047i 10.263071i 0.290669i 10.263976i 0.294291i \ 10.264882i 0.296102i 10.264882i 0.297008i 10.265787i 0.297008i 10.266693i 0.298819i \ 10.270315i 0.300630i 10.274843i 0.302441i 10.277559i 0.302441i 10.278465i 0.302441i \ 10.281181i 0.301535i -outline $tkxox(score_passive_note) -fill {} ${score} create line 9.045157i 0.086024i 9.045157i 0.266220i -fill $tkxox(score_passive_note) ${score} create polygon 9.050591i 0.104134i 9.051496i 0.109567i 9.051496i 0.111378i \ 9.051496i 0.112283i 9.052402i 0.114094i 9.054213i 0.118622i 9.056024i 0.122244i \ 9.056929i 0.123150i 9.056929i 0.122244i 9.057835i 0.123150i 9.062362i 0.127677i \ 9.068701i 0.133110i 9.072323i 0.135827i 9.075039i 0.137638i 9.078661i 0.140354i \ 9.086811i 0.147598i 9.094961i 0.153937i 9.097677i 0.157559i 9.099488i 0.158465i \ 9.102205i 0.161181i 9.108543i 0.167520i 9.113976i 0.173858i 9.115787i 0.175669i \ 9.115787i 0.176575i 9.117598i 0.179291i 9.119409i 0.185630i 9.120315i 0.192874i \ 9.120315i 0.195591i 9.120315i 0.196496i 9.120315i 0.200118i 9.117598i 0.210079i \ 9.114882i 0.220039i 9.112165i 0.226378i 9.109449i 0.230906i 9.107638i 0.234528i \ 9.104921i 0.239961i 9.102205i 0.247205i 9.102205i 0.248110i 9.101299i 0.249016i \ 9.101299i 0.249921i 9.100394i 0.249921i 9.100394i 0.250827i 9.100394i 0.251732i \ 9.099488i 0.251732i 9.099488i 0.252638i 9.098583i 0.252638i 9.098583i 0.251732i \ 9.099488i 0.250827i 9.099488i 0.249921i 9.099488i 0.249016i 9.100394i 0.248110i \ 9.100394i 0.247205i 9.103110i 0.241772i 9.104921i 0.237244i 9.106732i 0.233622i \ 9.108543i 0.230000i 9.111260i 0.224567i 9.113976i 0.216417i 9.116693i 0.208268i \ 9.117598i 0.204646i 9.118504i 0.203740i 9.118504i 0.201024i 9.117598i 0.193780i \ 9.114882i 0.186535i 9.113071i 0.182913i 9.111260i 0.182008i 9.108543i 0.178386i \ 9.102205i 0.171142i 9.095866i 0.164803i 9.092244i 0.161181i 9.090433i 0.160276i \ 9.088622i 0.158465i 9.084094i 0.155748i 9.076850i 0.150315i 9.067795i 0.144882i \ 9.063268i 0.142165i 9.060551i 0.141260i 9.056929i 0.139449i 9.050591i 0.136732i \ 9.049685i 0.136732i 9.048780i 0.135827i 9.047874i 0.135827i 9.046969i 0.135827i \ 9.046063i 0.135827i 9.046063i 0.136732i 9.046063i 0.137638i 9.046063i 0.138543i \ 9.046063i 0.139449i 9.046063i 0.140354i 9.046969i 0.140354i 9.046969i 0.141260i \ 9.046969i 0.142165i 9.046969i 0.141260i 9.046969i 0.140354i 9.046969i 0.139449i \ 9.046969i 0.137638i 9.046969i 0.136732i 9.046969i 0.126772i 9.047874i 0.117717i \ 9.047874i 0.110472i 9.048780i 0.103228i 9.048780i 0.094173i 9.049685i 0.086929i \ 9.050591i 0.085118i 9.050591i 0.087835i 9.049685i 0.092362i 9.049685i 0.097795i \ -outline {} -fill $tkxox(score_passive_note) -width 0 ${score} create polygon 9.050591i 0.104134i 9.051496i 0.109567i 9.051496i 0.111378i \ 9.051496i 0.112283i 9.052402i 0.114094i 9.054213i 0.118622i 9.056024i 0.122244i \ 9.056929i 0.123150i 9.056929i 0.122244i 9.057835i 0.123150i 9.062362i 0.127677i \ 9.068701i 0.133110i 9.072323i 0.135827i 9.075039i 0.137638i 9.078661i 0.140354i \ 9.086811i 0.147598i 9.094961i 0.153937i 9.097677i 0.157559i 9.099488i 0.158465i \ 9.102205i 0.161181i 9.108543i 0.167520i 9.113976i 0.173858i 9.115787i 0.175669i \ 9.115787i 0.176575i 9.117598i 0.179291i 9.119409i 0.185630i 9.120315i 0.192874i \ 9.120315i 0.195591i 9.120315i 0.196496i 9.120315i 0.200118i 9.117598i 0.210079i \ 9.114882i 0.220039i 9.112165i 0.226378i 9.109449i 0.230906i 9.107638i 0.234528i \ 9.104921i 0.239961i 9.102205i 0.247205i 9.102205i 0.248110i 9.101299i 0.249016i \ 9.101299i 0.249921i 9.100394i 0.249921i 9.100394i 0.250827i 9.100394i 0.251732i \ 9.099488i 0.251732i 9.099488i 0.252638i 9.098583i 0.252638i 9.098583i 0.251732i \ 9.099488i 0.250827i 9.099488i 0.249921i 9.099488i 0.249016i 9.100394i 0.248110i \ 9.100394i 0.247205i 9.103110i 0.241772i 9.104921i 0.237244i 9.106732i 0.233622i \ 9.108543i 0.230000i 9.111260i 0.224567i 9.113976i 0.216417i 9.116693i 0.208268i \ 9.117598i 0.204646i 9.118504i 0.203740i 9.118504i 0.201024i 9.117598i 0.193780i \ 9.114882i 0.186535i 9.113071i 0.182913i 9.111260i 0.182008i 9.108543i 0.178386i \ 9.102205i 0.171142i 9.095866i 0.164803i 9.092244i 0.161181i 9.090433i 0.160276i \ 9.088622i 0.158465i 9.084094i 0.155748i 9.076850i 0.150315i 9.067795i 0.144882i \ 9.063268i 0.142165i 9.060551i 0.141260i 9.056929i 0.139449i 9.050591i 0.136732i \ 9.049685i 0.136732i 9.048780i 0.135827i 9.047874i 0.135827i 9.046969i 0.135827i \ 9.046063i 0.135827i 9.046063i 0.136732i 9.046063i 0.137638i 9.046063i 0.138543i \ 9.046063i 0.139449i 9.046063i 0.140354i 9.046969i 0.140354i 9.046969i 0.141260i \ 9.046969i 0.142165i 9.046969i 0.141260i 9.046969i 0.140354i 9.046969i 0.139449i \ 9.046969i 0.137638i 9.046969i 0.136732i 9.046969i 0.126772i 9.047874i 0.117717i \ 9.047874i 0.110472i 9.048780i 0.103228i 9.048780i 0.094173i 9.049685i 0.086929i \ 9.050591i 0.085118i 9.050591i 0.087835i 9.049685i 0.092362i 9.049685i 0.097795i \ -outline $tkxox(score_passive_note) -fill {} ${score} create polygon 9.002598i 0.301535i 9.009843i 0.300630i 9.012559i 0.300630i \ 9.014370i 0.300630i 9.017087i 0.299724i 9.024331i 0.297913i 9.031575i 0.295197i \ 9.034291i 0.293386i 9.036102i 0.293386i 9.038819i 0.291575i 9.044252i 0.287047i \ 9.048780i 0.282520i 9.050591i 0.280709i 9.051496i 0.279803i 9.053307i 0.277087i \ 9.054213i 0.272559i 9.054213i 0.269843i 9.054213i 0.267126i 9.054213i 0.266220i \ 9.054213i 0.265315i 9.053307i 0.264409i 9.052402i 0.263504i 9.050591i 0.261693i \ 9.047874i 0.259882i 9.042441i 0.257165i 9.038819i 0.256260i 9.037008i 0.256260i \ 9.033386i 0.255354i 9.025236i 0.255354i 9.017992i 0.256260i 9.014370i 0.256260i \ 9.012559i 0.257165i 9.008937i 0.258071i 9.002598i 0.260787i 8.996260i 0.263504i \ 8.994449i 0.265315i 8.993543i 0.266220i 8.991732i 0.268031i 8.988110i 0.271654i \ 8.984488i 0.274370i 8.983583i 0.275276i 8.982677i 0.276181i 8.980866i 0.278898i \ 8.979055i 0.282520i 8.978150i 0.284331i 8.977244i 0.285236i 8.977244i 0.287047i \ 8.977244i 0.290669i 8.978150i 0.294291i 8.979055i 0.296102i 8.979055i 0.297008i \ 8.979961i 0.297008i 8.980866i 0.298819i 8.984488i 0.300630i 8.989016i 0.302441i \ 8.991732i 0.302441i 8.992638i 0.302441i 8.996260i 0.301535i -outline {} -fill $tkxox(score_passive_note) \ -width 0 ${score} create polygon 9.002598i 0.301535i 9.009843i 0.300630i 9.012559i 0.300630i \ 9.014370i 0.300630i 9.017087i 0.299724i 9.024331i 0.297913i 9.031575i 0.295197i \ 9.034291i 0.293386i 9.036102i 0.293386i 9.038819i 0.291575i 9.044252i 0.287047i \ 9.048780i 0.282520i 9.050591i 0.280709i 9.051496i 0.279803i 9.053307i 0.277087i \ 9.054213i 0.272559i 9.054213i 0.269843i 9.054213i 0.267126i 9.054213i 0.266220i \ 9.054213i 0.265315i 9.053307i 0.264409i 9.052402i 0.263504i 9.050591i 0.261693i \ 9.047874i 0.259882i 9.042441i 0.257165i 9.038819i 0.256260i 9.037008i 0.256260i \ 9.033386i 0.255354i 9.025236i 0.255354i 9.017992i 0.256260i 9.014370i 0.256260i \ 9.012559i 0.257165i 9.008937i 0.258071i 9.002598i 0.260787i 8.996260i 0.263504i \ 8.994449i 0.265315i 8.993543i 0.266220i 8.991732i 0.268031i 8.988110i 0.271654i \ 8.984488i 0.274370i 8.983583i 0.275276i 8.982677i 0.276181i 8.980866i 0.278898i \ 8.979055i 0.282520i 8.978150i 0.284331i 8.977244i 0.285236i 8.977244i 0.287047i \ 8.977244i 0.290669i 8.978150i 0.294291i 8.979055i 0.296102i 8.979055i 0.297008i \ 8.979961i 0.297008i 8.980866i 0.298819i 8.984488i 0.300630i 8.989016i 0.302441i \ 8.991732i 0.302441i 8.992638i 0.302441i 8.996260i 0.301535i -outline $tkxox(score_passive_note) -fill \ {} ${score} create line 2.313583i 0.402953i 1.095669i 0.402953i -fill $tkxox(score_active_note) ${score} create line 2.316299i 0.063386i 1.099291i 0.063386i -fill $tkxox(score_active_note) ${score} create line 3.680000i 0.063386i 2.311772i 0.063386i -fill $tkxox(score_active_note) ${score} create line 4.341929i 0.402953i 3.069685i 0.402953i -fill $tkxox(score_active_note) ${score} create line 6.309606i 0.402953i 5.036457i 0.402953i -fill $tkxox(score_active_note) ${score} create line 7.657913i 0.065197i 5.039173i 0.065197i -fill $tkxox(score_active_note) ${score} create line 8.292677i 0.406575i 7.020433i 0.406575i -fill $tkxox(score_active_note) ${score} create line 10.343661i 0.404764i 9.044252i 0.404764i -fill $tkxox(score_active_note) ${score} create line 11.791575i 0.407480i 11.020079i 0.402953i -fill $tkxox(score_passive_note) ${score} create line 11.785236i 0.061575i 9.045157i 0.061575i -fill $tkxox(score_passive_note) ${score} create line 1.097480i 0.063386i 1.096575i 0.063386i 1.093858i 0.063386i \ 1.088425i 0.063386i 1.081181i 0.063386i 1.073031i 0.064291i 1.063071i 0.066102i \ 1.053110i 0.067913i 1.049488i 0.068819i 1.048583i 0.069724i 1.044961i 0.070630i \ 1.034094i 0.075157i 1.024134i 0.079685i 1.018701i 0.080591i 1.017795i 0.080591i \ 1.015984i 0.080591i 1.009646i 0.084213i 0.995157i 0.093268i 0.981575i 0.103228i \ 0.969803i 0.112283i 0.958937i 0.121339i 0.948976i 0.130394i 0.939921i 0.138543i \ 0.933583i 0.143976i 0.930866i 0.146693i 0.929961i 0.147598i -joinstyle bevel -fill \ $tkxox(score_active_note) ${score} create line 1.098386i 0.400236i 1.097480i 0.400236i 1.094764i 0.400236i \ 1.089331i 0.400236i 1.082087i 0.400236i 1.073937i 0.401142i 1.063976i 0.402953i \ 1.054016i 0.404764i 1.050394i 0.405669i 1.049488i 0.406575i 1.045866i 0.407480i \ 1.035000i 0.412008i 1.025039i 0.416535i 1.019606i 0.418346i 1.018701i 0.418346i \ 1.016890i 0.418346i 1.010551i 0.421969i 0.996063i 0.431929i 0.982480i 0.441890i \ 0.970709i 0.451850i 0.959843i 0.460906i 0.949882i 0.469055i 0.940827i 0.477205i \ 0.934488i 0.482638i 0.931772i 0.485354i 0.930866i 0.486260i -joinstyle bevel -fill \ $tkxox(score_active_note) ${score} create line 2.310866i 0.400236i 2.311772i 0.400236i 2.314488i 0.400236i \ 2.319016i 0.400236i 2.326260i 0.400236i 2.333504i 0.401142i 2.343465i 0.402953i \ 2.353425i 0.404764i 2.357047i 0.405669i 2.357953i 0.406575i 2.361575i 0.407480i \ 2.372441i 0.412008i 2.382402i 0.416535i 2.386929i 0.418346i 2.388740i 0.418346i \ 2.389646i 0.418346i 2.395984i 0.421969i 2.410472i 0.431929i 2.423150i 0.441890i \ 2.435827i 0.451850i 2.446693i 0.460906i 2.456654i 0.469055i 2.465709i 0.477205i \ 2.472047i 0.482638i 2.474764i 0.485354i 2.475669i 0.486260i -joinstyle bevel -fill \ $tkxox(score_active_note) ${score} create line 3.669134i 0.065197i 3.670039i 0.065197i 3.672756i 0.065197i \ 3.678189i 0.065197i 3.685433i 0.066102i 3.694488i 0.067008i 3.704449i 0.068819i \ 3.714409i 0.071535i 3.718031i 0.072441i 3.718937i 0.072441i 3.722559i 0.074252i \ 3.733425i 0.077874i 3.743386i 0.081496i 3.747913i 0.083307i 3.749724i 0.082402i \ 3.750630i 0.082402i 3.756969i 0.086024i 3.771457i 0.095079i 3.784134i 0.104134i \ 3.796811i 0.114094i 3.807677i 0.123150i 3.817638i 0.132205i 3.826693i 0.139449i \ 3.833031i 0.144882i 3.835748i 0.147598i 3.836654i 0.148504i -joinstyle bevel -fill \ $tkxox(score_active_note) ${score} create line 4.336496i 0.402953i 4.337402i 0.402953i 4.341024i 0.402953i \ 4.348268i 0.403858i 4.356417i 0.404764i 4.368189i 0.406575i 4.377244i 0.408386i \ 4.381772i 0.409291i 4.383583i 0.409291i 4.385394i 0.409291i 4.389921i 0.411102i \ 4.399882i 0.414724i 4.409843i 0.419252i 4.415276i 0.421063i 4.416181i 0.421063i \ 4.417087i 0.421969i 4.423425i 0.425591i 4.437913i 0.435551i 4.450591i 0.445512i \ 4.463268i 0.455472i 4.474134i 0.464528i 4.484094i 0.473583i 4.493150i 0.480827i \ 4.499488i 0.486260i 4.502205i 0.488976i 4.503110i 0.489882i -joinstyle bevel -fill \ $tkxox(score_active_note) ${score} create line 3.072402i 0.400236i 3.071496i 0.400236i 3.068780i 0.400236i \ 3.064252i 0.400236i 3.057008i 0.400236i 3.049764i 0.401142i 3.039803i 0.402953i \ 3.029843i 0.404764i 3.026220i 0.405669i 3.025315i 0.406575i 3.021693i 0.407480i \ 3.010827i 0.412008i 3.000866i 0.416535i 2.996339i 0.418346i 2.994528i 0.418346i \ 2.993622i 0.418346i 2.987283i 0.421969i 2.972795i 0.431929i 2.959213i 0.441890i \ 2.947441i 0.451850i 2.935669i 0.460906i 2.925709i 0.469055i 2.915748i 0.477205i \ 2.909409i 0.482638i 2.906693i 0.485354i 2.905787i 0.486260i -joinstyle bevel -fill \ $tkxox(score_active_note) ${score} create line 5.036457i 0.399331i 5.035551i 0.399331i 5.032835i 0.399331i \ 5.028307i 0.400236i 5.021063i 0.400236i 5.013819i 0.401142i 5.003858i 0.402953i \ 4.993898i 0.404764i 4.990276i 0.405669i 4.989370i 0.405669i 4.985748i 0.406575i \ 4.974882i 0.411102i 4.964921i 0.415630i 4.960394i 0.417441i 4.958583i 0.417441i \ 4.957677i 0.418346i 4.951339i 0.421969i 4.936850i 0.431929i 4.924173i 0.441890i \ 4.911496i 0.450945i 4.900630i 0.460000i 4.890669i 0.469055i 4.881614i 0.476299i \ 4.875276i 0.481732i 4.872559i 0.484449i 4.871654i 0.485354i -joinstyle bevel -fill \ $tkxox(score_active_note) ${score} create line 5.038268i 0.064291i 5.037362i 0.064291i 5.034646i 0.064291i \ 5.030118i 0.064291i 5.022874i 0.064291i 5.015630i 0.065197i 5.005669i 0.067008i \ 4.995709i 0.068819i 4.992087i 0.069724i 4.991181i 0.070630i 4.987559i 0.071535i \ 4.976693i 0.076063i 4.966732i 0.080591i 4.962205i 0.081496i 4.960394i 0.081496i \ 4.959488i 0.081496i 4.953150i 0.085118i 4.938661i 0.094173i 4.925984i 0.103228i \ 4.913307i 0.113189i 4.902441i 0.122244i 4.892480i 0.131299i 4.883425i 0.138543i \ 4.877087i 0.143976i 4.874370i 0.146693i 4.873465i 0.147598i -joinstyle bevel -fill \ $tkxox(score_active_note) ${score} create line 6.311417i 0.402953i 6.312323i 0.402953i 6.315039i 0.402953i \ 6.320472i 0.402953i 6.326811i 0.403858i 6.334961i 0.403858i 6.344921i 0.405669i \ 6.354882i 0.407480i 6.358504i 0.408386i 6.362126i 0.409291i 6.372992i 0.413819i \ 6.382953i 0.418346i 6.388386i 0.420157i 6.389291i 0.420157i 6.391102i 0.421063i \ 6.397441i 0.424685i 6.411929i 0.434646i 6.425512i 0.444606i 6.437283i 0.454567i \ 6.448150i 0.463622i 6.458110i 0.472677i 6.467165i 0.479921i 6.473504i 0.485354i \ 6.476220i 0.488071i 6.477126i 0.488976i -joinstyle bevel -fill $tkxox(score_active_note) ${score} create line 7.656102i 0.067008i 7.657008i 0.067008i 7.660630i 0.067008i \ 7.667874i 0.067008i 7.676024i 0.067913i 7.687795i 0.069724i 7.696850i 0.071535i \ 7.701378i 0.073346i 7.703189i 0.073346i 7.705000i 0.074252i 7.709528i 0.076063i \ 7.719488i 0.079685i 7.729449i 0.084213i 7.734882i 0.085118i 7.735787i 0.085118i \ 7.736693i 0.085118i 7.743031i 0.088740i 7.757520i 0.097795i 7.770197i 0.106850i \ 7.782874i 0.116811i 7.793740i 0.125866i 7.803701i 0.134921i 7.812756i 0.142165i \ 7.819094i 0.147598i 7.821811i 0.150315i 7.822717i 0.151220i -joinstyle bevel -fill \ $tkxox(score_active_note) ${score} create line 7.047598i 0.402953i 7.046693i 0.402953i 7.043976i 0.402953i \ 7.039449i 0.402953i 7.032205i 0.403858i 7.024961i 0.403858i 7.015000i 0.405669i \ 7.005039i 0.407480i 7.001417i 0.408386i 7.000512i 0.408386i 6.996890i 0.409291i \ 6.986024i 0.413819i 6.976063i 0.418346i 6.970630i 0.420157i 6.968819i 0.420157i \ 6.967008i 0.421063i 6.960669i 0.424685i 6.946181i 0.434646i 6.932598i 0.444606i \ 6.920827i 0.454567i 6.909961i 0.463622i 6.900000i 0.472677i 6.890945i 0.479921i \ 6.884606i 0.485354i 6.881890i 0.488071i 6.880984i 0.488976i -joinstyle bevel -fill \ $tkxox(score_active_note) ${score} create line 8.288150i 0.405669i 8.289055i 0.405669i 8.292677i 0.405669i \ 8.299921i 0.405669i 8.308071i 0.406575i 8.319843i 0.408386i 8.329803i 0.410197i \ 8.333425i 0.411102i 8.334331i 0.412008i 8.338858i 0.412913i 8.349724i 0.417441i \ 8.359685i 0.421969i 8.364213i 0.423780i 8.366024i 0.423780i 8.366929i 0.423780i \ 8.373268i 0.427402i 8.387756i 0.437362i 8.401339i 0.447323i 8.413110i 0.457283i \ 8.424882i 0.466339i 8.435748i 0.474488i 8.444803i 0.482638i 8.451142i 0.488071i \ 8.453858i 0.490787i 8.454764i 0.491693i -joinstyle bevel -fill $tkxox(score_active_note) ${score} create line 10.339134i 0.402953i 10.340039i 0.402953i 10.342756i 0.402953i \ 10.348189i 0.403858i 10.354528i 0.403858i 10.362677i 0.404764i 10.372638i 0.406575i \ 10.382598i 0.408386i 10.386220i 0.409291i 10.387126i 0.409291i 10.390748i 0.410197i \ 10.401614i 0.414724i 10.411575i 0.419252i 10.416102i 0.421063i 10.417913i 0.421063i \ 10.418819i 0.421969i 10.425157i 0.425591i 10.439646i 0.435551i 10.452323i 0.445512i \ 10.465000i 0.455472i 10.475866i 0.464528i 10.485827i 0.473583i 10.494882i 0.480827i \ 10.501220i 0.486260i 10.503937i 0.488976i 10.504843i 0.489882i -joinstyle bevel \ -fill $tkxox(score_active_note) ${score} create line 11.020984i 0.402047i 11.020079i 0.402047i 11.017362i 0.402047i \ 11.011929i 0.402047i 11.004685i 0.402953i 10.995630i 0.402953i 10.985669i 0.404764i \ 10.975709i 0.406575i 10.972087i 0.407480i 10.971181i 0.407480i 10.967559i 0.408386i \ 10.956693i 0.412913i 10.946732i 0.417441i 10.941299i 0.419252i 10.940394i 0.419252i \ 10.938583i 0.420157i 10.932244i 0.423780i 10.917756i 0.433740i 10.905079i 0.443701i \ 10.892402i 0.452756i 10.881535i 0.461811i 10.871575i 0.470866i 10.863425i 0.478110i \ 10.857087i 0.483543i 10.854370i 0.486260i 10.853465i 0.487165i -joinstyle bevel \ -fill $tkxox(score_passive_note) ${score} create line 9.050591i 0.065197i 9.049685i 0.065197i 9.046969i 0.065197i \ 9.042441i 0.065197i 9.036102i 0.066102i 9.027953i 0.067008i 9.017992i 0.068819i \ 9.008031i 0.071535i 9.004409i 0.072441i 9.002598i 0.072441i 8.998976i 0.074252i \ 8.988110i 0.077874i 8.978150i 0.081496i 8.972717i 0.083307i 8.971811i 0.082402i \ 8.970906i 0.082402i 8.964567i 0.086024i 8.950079i 0.095079i 8.937402i 0.104134i \ 8.924724i 0.114094i 8.913858i 0.123150i 8.903898i 0.132205i 8.894843i 0.139449i \ 8.888504i 0.144882i 8.885787i 0.147598i 8.884882i 0.148504i -joinstyle bevel -fill \ $tkxox(score_passive_note) ${score} create line 9.048780i 0.402953i 9.047874i 0.402953i 9.045157i 0.402953i \ 9.040630i 0.402953i 9.034291i 0.403858i 9.026142i 0.403858i 9.016181i 0.405669i \ 9.006220i 0.407480i 9.002598i 0.408386i 9.000787i 0.408386i 8.997165i 0.409291i \ 8.986299i 0.413819i 8.976339i 0.418346i 8.970906i 0.420157i 8.970000i 0.420157i \ 8.969094i 0.421063i 8.962756i 0.424685i 8.948268i 0.434646i 8.935591i 0.444606i \ 8.922913i 0.454567i 8.912047i 0.463622i 8.902087i 0.472677i 8.893031i 0.479921i \ 8.886693i 0.485354i 8.883976i 0.488071i 8.883071i 0.488976i -joinstyle bevel -fill \ $tkxox(score_active_note) tk707-0.8/score_defs.tcl0000644000175100017510000000030110142141775011774 00000000000000# file automatically generated by: # ./score_fig2tcl.sh ./score.fig set score_width_in_inch 12.12 set score_height_in_inch 1.44 set score_scroll_x_in_point -10 set score_scroll_y_in_point -2 tk707-0.8/defs.c0000644000175100017510000003067010142141776010256 00000000000000char tcl_defs[] = "\ #\n\ # This file is part of tk707.\n\ #\n\ # Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito \n\ #\n\ # tk707 is free software; you can redistribute it and/or modify\n\ # it under the terms of the GNU General Public License as published by\n\ # the Free Software Foundation; either version 2 of the License, or\n\ # (at your option) any later version.\n\ #\n\ # Foobar is distributed in the hope that it will be useful,\n\ # but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ # GNU General Public License for more details.\n\ #\n\ # You should have received a copy of the GNU General Public License\n\ # along with Foobar; if not, write to the Free Software\n\ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n\ #\n\ # -----------------------------------------\n\ # File defs.tcl\n\ # Definitions and pre-start set up.\n\ # -----------------------------------------\n\ proc usage {} {\n\ puts \"usage: tk707 options...; please read the documentation (html,info,..) and the unix manual.\"\n\ exit 0\n\ }\n\ set small_size_factor 0.75;\n\ set medium_size_factor 0.9;\n\ set normal_size_factor 1.0;\n\ set large_size_factor 2;\n\ set size_factor $normal_size_factor\n\ set input_file_name \"\";\n\ set new_argv \"\"\n\ for {set i 0} {$i < $argc} {incr i} {\n\ set argi [lindex $argv $i];\n\ # puts \"defs.tcl: argv($i) = `$argi'\";\n\ if {$argi == \"--help\"} {\n\ usage\n\ } elseif {$argi == \"-small\"} {\n\ # puts \"defs.tcl: small!\";\n\ set [lindex $argv $i] \"-n\";\n\ set size_factor $small_size_factor;\n\ } elseif {$argi == \"-medium\"} {\n\ # puts \"defs.tcl: medium!\";\n\ set size_factor $medium_size_factor;\n\ } elseif {$argi == \"-normalsize\"} {\n\ # puts \"defs.tcl: normal!\";\n\ set new_argv \"$new_argv $argi\"\n\ set size_factor $normal_size_factor;\n\ } elseif {$argi == \"-big\"} {\n\ # puts \"defs.tcl: large!\";\n\ set new_argv \"$new_argv $argi\"\n\ set size_factor $large_size_factor;\n\ } else {\n\ # send option to the 2nd C-code pass...\n\ # puts \"defs.tcl: argv($i) = `$argi'...added\";\n\ set new_argv \"$new_argv $argi\"\n\ }\n\ }\n\ #\n\ # we strip options to avoid mistakes\n\ # TODO: send -p x:y nd so to C code\n\ set argv $new_argv\n\ set argc [llength $argv]\n\ #puts \"argv := $argv\"\n\ #puts \"argc := $argc\"\n\ # -----------------------------------------\n\ # pixel to centimeter conversion\n\ # -----------------------------------------\n\ package require Tcl 8.0\n\ package require Tk 8.0\n\ set VERSION 0.8\n\ set PKGDATADIR [pwd]\n\ \n\ # uncomment to show sonme boxes:\n\ #set debug_relief \"-borderwidth 2p -relief groove\";\n\ set debug_relief \"\";\n\ # -----------------------------------------\n\ # pixel <--> point/inch/cm\n\ # -----------------------------------------\n\ set cm_per_inch 2.54;\n\ set point_per_inch 72.00;\n\ set point_per_cm [expr $point_per_inch / $cm_per_inch];\n\ set pixel_per_point [tk scaling]\n\ # puts \"dpi $pixel_per_point\"\n\ set pixel_per_inch [expr int($pixel_per_point*$point_per_inch+0.5)]\n\ set pixel_per_cm [expr $pixel_per_inch/$cm_per_inch]\n\ # -----------------------------------------\n\ # get window max dimension\n\ # -----------------------------------------\n\ set maxsize_in_pixel [wm maxsize .]\n\ set maxwidth_in_pixel [lindex $maxsize_in_pixel 0]\n\ set maxheight_in_pixel [lindex $maxsize_in_pixel 1]\n\ set maxwidth_in_cm [expr $maxwidth_in_pixel * $pixel_per_cm ]\n\ set maxheight_in_cm [expr $maxheight_in_pixel* $pixel_per_cm ]\n\ # -----------------------------------------\n\ # resize coefficient if window is too small\n\ # -----------------------------------------\n\ if {$size_factor < $medium_size_factor} { # small screens\n\ set size_factor $small_size_factor; \n\ set font8 \"6\";\n\ set font12 \"6\"; \n\ set boldfont12 \"6\"; \n\ set boldfont13 \"6\";\n\ set courrier_boldfont_i_50 \"10\"; \n\ set boldr14 \"8\";\n\ set helvetica_bold_r_12 \"6\"; \n\ set normal_r_14 \"8\"; \n\ } elseif {$size_factor < $normal_size_factor} { # medium screen\n\ set size_factor $medium_size_factor; \n\ set font8 \"6\";\n\ set font12 \"8\";\n\ set boldfont12 \"8\"; \n\ set boldfont13 \"8\"; \n\ set courrier_boldfont_i_50 \"adobe-courier-bold-i-*-30\"; \n\ set boldr14 \"bold-r-*-10\"; \n\ set helvetica_bold_r_12 \"8\"; \n\ set normal_r_14 \"10\"; \n\ } else { # normal screen\n\ set size_factor $normal_size_factor;\n\ set font8 \"7\";\n\ set font12 \"9\";\n\ set boldfont12 \"9\"; \n\ set boldfont13 \"9\";\n\ set courrier_boldfont_i_50 \"adobe-courier-bold-i-*-50\"; \n\ set boldr14 \"bold-r-*-11\"; \n\ set helvetica_bold_r_12 \"9\"; \n\ set normal_r_14 \"10\"; \n\ }\n\ # -----------------------------------------\n\ # pixel to centimeter conversion\n\ # -----------------------------------------\n\ set scaling $size_factor;\n\ tk scaling $scaling\n\ set pixel_per_point [tk scaling]\n\ set point_per_pixel [expr 1./$pixel_per_point]\n\ set pixel_per_inch [expr int($pixel_per_point*$point_per_inch+0.5)]\n\ set pixel_per_cm [expr $pixel_per_inch/$cm_per_inch]\n\ # -----------------------------------------\n\ # set global constants\n\ # -----------------------------------------\n\ set tcl_rcFileName \"~/.tk707rc\"\n\ if {[catch {open $tcl_rcFileName r} fid]} {\n\ } else {\n\ catch {source $tcl_rcFileName}\n\ }\n\ set res [eval tk7_init $argv]\n\ if {$res == 1 || $res == 3} {\n\ exit\n\ } elseif {$res ==2} {\n\ wm iconify .\n\ port_setup\n\ tk7_init\n\ }\n\ rename exit exit.old\n\ proc exit {} {\n\ exit707\n\ exit.old\n\ }\n\ # -----------------------------------------\n\ # set global constants\n\ # -----------------------------------------\n\ set right_space_width 0.5;\n\ \n\ \n\ set tkxox(VERSION) \"TK707-$VERSION\"\n\ set tkxox(READ) 0\n\ set tkxox(WRITE) 1\n\ set tkxox(TRACK) 0\n\ set tkxox(PATTERN) 1\n\ set tkxox(STOP) 0\n\ set tkxox(START) 1\n\ set tkxox(CONT) 2\n\ set tkxox(FILE_UNCHANGED) 0\n\ set tkxox(FILE_MODIFIED) 1\n\ set tkxox(col_on) #ffaa00\n\ set tkxox(col_active) #ffaaaa\n\ set tkxox(col_def_bg) #d9d9d9\n\ set tkxox(col_def_active) #ececec\n\ set tkxox(but_grey) #888888\n\ set tkxox(but_grey_active) #999999\n\ set tkxox(but_grey_on) #bbbbbb\n\ set tkxox(lamp_off) #882200\n\ set tkxox(lamp_on) #ff8800\n\ set tkxox(color_fg_shift) #ffffff; # the text on the shift keys (white)\n\ set tkxox(color_bg_shift) #000044cffb22; # the box on the shift keys (blue)\n\ set tkxox(vol_trough_color) #a5e3a5e3a5e3; # background of the trough for volume\n\ set tkxox(vol_slider_passive) #570a570a570a; # volume slider when nothing append\n\ set tkxox(vol_slider_active) #204120412041; # volume slider when we interact\n\ set tkxox(vol_highlightbackground) $tkxox(col_def_bg); # the border outside volumes\n\ \n\ set tkxox(color_score_bg) #c24d108c09e9; # the color of rectangles arround notes\n\ set tkxox(score_active_note) #ffffff; # the color of used notes on the score\n\ set tkxox(score_passive_note) #87cfff; # the color of unused notes (at right)\n\ \n\ set tkxox(color_title_fg) $tkxox(color_bg_shift); # the color of \"RHYTHM COMPOSER\"\n\ set tkxox(color_title_logo_fg) $tkxox(vol_slider_active); # the color of \"TK-707\"\n\ set tkxox(color_title_bg) $tkxox(col_def_bg); \n\ \n\ set tkxox(tick_flam_duration) 4\n\ #\n\ # color background\n\ #\n\ tk_setPalette $tkxox(col_def_bg)\n\ #\n\ #\n\ # Properties of note elements:\n\ # WARNING: may be as in \n\ #\n\ set tkxox(flam) [expr 1 << 0]\n\ set tkxox(weak_accent) [expr 1 << 1]\n\ set tkxox(strong_accent) [expr 1 << 2]\n\ set tkxox(zero_velocity) [expr 1 << 3]\n\ set tkxox(velocity_field) [expr $tkxox(zero_velocity) | \\\n\ $tkxox(weak_accent) | \\\n\ $tkxox(strong_accent)]\n\ \n\ set tkxox(col_default_velocity) $tkxox(but_grey)\n\ set tkxox(col_weak_accent) $tkxox(lamp_on)\n\ set tkxox(col_strong_accent) #ff0000\n\ set tkxox(col_zero_velocity) white\n\ \n\ \n\ set mode(rdrw) $tkxox(READ)\n\ set mode(patr) -1\n\ set mode(stopgo) $tkxox(STOP)\n\ set mode(patgroup) 0\n\ set mode(current_track) 0\n\ set mode(current_pattern) 0\n\ set mode(current_instr) 1\n\ set mode(measure) -1\n\ set mode(tempo) 120\n\ set mode(cartridge) 0\n\ set mode(midi_channel) 0\n\ set mode(PATTERN_REPEAT) false\n\ set mode(TRACK_START) false\n\ set mode(REPEAT_INTERVAL) 5\n\ set mode(showtrack) true\n\ set mode(current_accent) 0\n\ set mode(file_status) $tkxox(FILE_UNCHANGED)\n\ \n\ set flash(count) -1\n\ set flash(duration) 20\n\ \n\ # Default sound mapping\n\ #\n\ set sound(1,name) \"Bass 1\"\n\ set sound(1,shortname) \"Bass 1\"\n\ set sound(1,note) 35\n\ set sound(2,name) \"Bass 2\"\n\ set sound(2,shortname) \"Bass 2\"\n\ set sound(2,note) 36\n\ set sound(3,name) \"Snare 1\"\n\ set sound(3,shortname) \"Snare 1\"\n\ set sound(3,note) 38\n\ set sound(4,name) \"Snare 2\"\n\ set sound(4,shortname) \"Snare 2\"\n\ set sound(4,note) 40\n\ set sound(5,name) \"LowTom\"\n\ set sound(5,shortname) \"LowTom\"\n\ set sound(5,note) 41\n\ set sound(6,name) \"MidTom\"\n\ set sound(6,shortname) \"MidTom\"\n\ set sound(6,note) 45\n\ set sound(7,name) \"HighTom\"\n\ set sound(7,shortname) \"HighTom\"\n\ set sound(7,note) 48\n\ set sound(8,name) \"Rim\"\n\ set sound(8,shortname) \"Rim\"\n\ set sound(8,note) 37\n\ set sound(9,name) \"Cowbell\"\n\ set sound(9,shortname) \"Cowbell\"\n\ set sound(9,note) 56\n\ set sound(10,name) \"Hand Clap\"\n\ set sound(10,shortname) \"Clap\"\n\ set sound(10,note) 39\n\ set sound(11,name) \"Tambourine\"\n\ set sound(11,shortname) \"Tamb\"\n\ set sound(11,note) 54\n\ set sound(12,name) \"HH Closed 1\"\n\ set sound(12,shortname) \"HH C1\"\n\ set sound(12,note) 42\n\ set sound(13,name) \"HH Closed 2\"\n\ set sound(13,shortname) \"HH C2\"\n\ set sound(13,note) 42\n\ set sound(14,name) \"HHat Open\"\n\ set sound(14,shortname) \"HH Open\"\n\ set sound(14,note) 46\n\ set sound(15,name) \"Crash\"\n\ set sound(15,shortname) \"Crash\"\n\ set sound(15,note) 49\n\ set sound(16,name) \"Ride\"\n\ set sound(16,shortname) \"Ride\"\n\ set sound(16,note) 51\n\ tk7_set_sounds\n\ #\n\ # instrument(1:16) to volume(1:10) mapping\n\ #\n\ set instrument_to_volume(1) 1\n\ set instrument_to_volume(2) 1\n\ set instrument_to_volume(3) 2\n\ set instrument_to_volume(4) 2\n\ set instrument_to_volume(5) 3\n\ set instrument_to_volume(6) 4\n\ set instrument_to_volume(7) 5\n\ set instrument_to_volume(8) 6\n\ set instrument_to_volume(9) 6\n\ set instrument_to_volume(10) 7\n\ set instrument_to_volume(11) 7\n\ set instrument_to_volume(12) 8\n\ set instrument_to_volume(13) 8\n\ set instrument_to_volume(14) 8\n\ set instrument_to_volume(15) 9\n\ set instrument_to_volume(16) 10\n\ \n\ #\n\ # default abbrevs, for volume labels\n\ #\n\ set sound(1,abbrev) \"BASS\"\n\ set sound(2,abbrev) \"\"\n\ set sound(3,abbrev) \"SNARE\"\n\ set sound(4,abbrev) \"\"\n\ set sound(5,abbrev) \"LT\"\n\ set sound(6,abbrev) \"MT\"\n\ set sound(7,abbrev) \"HT\"\n\ set sound(8,abbrev) \"R\"\n\ set sound(9,abbrev) \"CB\"\n\ set sound(10,abbrev) \"C\"\n\ set sound(11,abbrev) \"T\"\n\ set sound(12,abbrev) \"HH\"\n\ set sound(13,abbrev) \"\"\n\ set sound(14,abbrev) \"\"\n\ set sound(15,abbrev) \"CRASH\"\n\ set sound(16,abbrev) \"RIDE\"\n\ #\n\ # default volume labels\n\ #\n\ set volume_label(0) \"ACCENT\"\n\ set volume_label(1) \"$sound(1,abbrev)\"\n\ set volume_label(2) \"$sound(3,abbrev)\"\n\ set volume_label(3) \"$sound(5,abbrev)\"\n\ set volume_label(4) \"$sound(6,abbrev)\"\n\ set volume_label(5) \"$sound(7,abbrev)\"\n\ set volume_label(6) \"$sound(8,abbrev)/$sound(9,abbrev)\"\n\ set volume_label(7) \"$sound(10,abbrev)/$sound(11,abbrev)\"\n\ set volume_label(8) \"$sound(12,abbrev)\"\n\ set volume_label(9) \"$sound(15,abbrev)\"\n\ set volume_label(10) \"$sound(16,abbrev)\"\n\ #\n\ # default implicit delay (e.g. short sound)\n\ #\n\ set has_delay(1) 0\n\ set has_delay(2) 0\n\ set has_delay(3) 0\n\ set has_delay(4) 0\n\ set has_delay(5) 0\n\ set has_delay(6) 0\n\ set has_delay(7) 0\n\ set has_delay(8) 0\n\ set has_delay(9) 0\n\ set has_delay(10) 0\n\ set has_delay(11) 0\n\ set has_delay(12) 0\n\ set has_delay(13) 0\n\ set has_delay(14) 0\n\ set has_delay(15) 0\n\ set has_delay(16) 0\n\ "; tk707-0.8/tk707.html0000644000175100017510000040436110142143502010722 00000000000000 The TK-707 Rhythm Composer
[Top] [Contents] [Index] [ ? ]

The TK-707 Rhythm Composer

This document is a brief statement of requirements to run tk707 and a very introductory explanation of how to run it. This might be just enough for people not familiar with how these machines work but is not intended to be an exhaustive explanation.

@dircategory Sound * tk707: (tk707). The TK-707 Rhythm Composer.

1.1 Building tk707  
2.1 Terminology  
2.2 Demonstrations  
2.3 Creating patterns  
2.4 Playing patterns  
2.5 Creating tracks  
2.6 Editing tracks  
2.7 Playing tracks  
3.2 Sound maps  
3.1 Midi files  
2.8 Tempo changes  
4.2 Last step changes  
4.1 Scale changes  
5.1 Accents  
A.1 Synopsis  
C. GNU General Public License  
Index  


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1. Installation

1.2 Configure options  
1.3 Installation  
1.4 Running  
1.5 Building the documentation  
1.6 Comments, bug corrections and future versions  
1.7 My card has no midi render...  
2. Getting started  

The TK-707 installation requires:

  • C compiler: to compile the source code.
  • TCL/TK version 8.0 or later. Tested up to TCL/TK 8.3. Available free from http://www.scriptics.com
  • Alsa: audio installation (at least version 0.5.0), available free from http://www.alsa-project.org
  • a sound card supported by Alsa.

and, at least one of these MIDI renders:

  • an internal MIDI render hardware in your card.
  • an external MIDI module with drum sounds (Tested Roland D-110 and TR-707).
  • or any Alsa supported basic sound card together with the timidity or the iiwusynth MIDI synthesis software installed.

Clearly, if you have neither a MIDI card nor an external MIDI module, you can successfully manage MIDI files by a MIDI software sequencer. See below.

So far tested on

  • Linux - Debian 3.0 (kernel 2.4.18) with SB Live ! sound card
  • Linux - Slackware 7.0 (kernel 2.2.14) with ESS1868 sound card
  • Linux - Mandrak (kernel 2.2.13-7mdk)
  • Linux - Redhat 6.0 (kernel 2.2.5) with Ensonic 1370 sound card


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.1 Building tk707

 
	configure
	make

The program consists of Tcl/Tk for the gui and C code for outputting the midi data. The Tcl/Tk code is compiled with the C code. The compiled target tk707 is a self contained binary.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.2 Configure options

During the configuration step, you could also provide to the configure script some non-standard locations of the Alsa or Tcl/Tk libraries. On my Debian 3.0 installation, I use:
 
	configure --with-tcl-includes=/usr/include/tcl8.3
A more general example writes:
 
	configure --with-alsa-prefix=/usr/sound/lib \
	  --with-alsa-inc-prefix=/usr/sound/include \
	  --with-tcl-includes=/new/include   --with-tcl-libs=/usr/new/lib  \
	  --with-tk-includes=/usr/new/include --with-tk-libs=/usr/new/lib 
	make

Enter configure --help for a complete list of available options.

It could also be useful to send compiler options to the configure script.
 
	CFLAGS="-O0" configure
	make
Indeed, by default, gcc compiler optimization flags are set to the maximum, i.e -O9. This is not supported for old gcc versions, where this feature failed on some combinations of Linux kernel versions and gcc version (e.g. Mandrake with kernel Linux-2.2.13-7mdk and pgcc-2.91.66). Either update our environment or use lower optimization flags.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.3 Installation

 
	make install

The default installation directory is `/usr/local/bin' but this can be changed by using an extra configuration option:

 
	configure --prefix=/users/angela/music
	make install

will build and install tk707 into the installation directory `/users/angela/music/bin' as tk707.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.4 Running

If installation was done as in previous step, and assuming the installation directory is in your execution path, then the program is started with

 
	tk707

A sample song is in `demo.dat' which can be loaded from the File->Load Demo menu. After loading, click the START button and you should hear something if your hardware is set up correctly.

When tk707 is first started, a suitable output port needs to be selected. A selection gui comes up before the main TK-707 window to make this choice. The list on the right hand side should contain one or more entries from which to choose (don't worry about the input port list on the left). Double click on the available output port you want to use, and it should be entered into the Selected Output box near the bottom. Now you can click on the OK button to use the selected output port for this invocation of TK-707. You can also click the SAVE button first to save this information (in `~/.tk707rc') so that you don't need to make the selection next time you run TK-707. Note that `~/.tk707rc' is a plain text file which can be edited by hand if you want to.

Alternatively, if you know what port you want to use, run tk707 with the -p option, e.g.
 
	tk707 -p 65:0

Use of the -p option overrides any setting in the `~/.tk707rc' file.

A list of suitable ports can also be obtained with the -l option, e.g.
 
	tk707 -l


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.5 Building the documentation

The documentation in `.info' format, suitable for emacs, is contained in the distribution. You can browse it:
 
	info -f tk707.info

If you have the texi2html tool, the html version has been generated during the installation:
 
	netscape tk707_toc.html

If you have TeX installed, a pretty version of the documentation is available:
 
	make dvi
	xdvi tk707.dvi

and also for printing:
 
	dvips tk707.dvi -o tk707.ps
	lpr tk707.ps

Now, read the documentation and enjoy tk707.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.6 Comments, bug corrections and future versions

We are keen for people to try it and send comments and suggestions.

Please, send comments, corrections, additions, bugs etc.. to chris@vislab.usyd.edu.au and pierre.saramito@imag.fr

Future versions from the TK-707 home page:


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1.7 My card has no midi render...

Don't worry, you are able to hear midi file with a basic audio sound card: the timidity code is able to provides an Alsa sequencer interface which receives events and plays it in real-time.

timidity is a public domain code available at http://www.goice.co.jp/member/mo/timidity.

On this mode, timidity works purely as software (real-time) midi render. There is no scheduling routine in this interface, since all scheduling is done by Alsa sequencer core.

So, download timidity (at least version 2.10.0) and install as follow:
 
        configure --enable-server --enable-alsaseq --enable-alsatest \
		--enable-audio=alsa,wav,au,aiff,list,oss
	make install

timidity software emulates the best sound cards. It requires some Gravis Ultra Sound (GUS) patches describing musical instruments. The public domain EAW sound patch suite can be downloaded at http://www.stardate.bc.ca/eawpatches/html/default.htm This his a complete and high quality library, updated frequently. Especially, download the gsdrums percussion instrument library.

Install these files in the timidity directory, usually /usr/share/timidity.

For invoking Alsa sequencer interface, run timidity as follows:
 
      timidity -iA -B2,8 &

The fragment size can be adjustable. The smaller number gives better real-time response. Then timidity shows new port numbers which were newly created (128:0 and 128:1 below).

Finally, run tk707:
 
      tk707 -p 128:0

The timidity render is very flexible and rich, since you can add any instrument in your library by using GUS patch files. This modular approach is not always supported by all hardware renders. Thus, the software MIDI render solution is fruitful, and could be installed, even if you have a hardware or external MIDI solution.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2. Getting started


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.1 Terminology

Four song tracks are available. You can think of a track as a song. Tracks are labeled by roman numbers: I, II, III and IV.

Each track is made of patterns, each with 16 steps.s You could think of a pattern as a bar of music. At each step in a pattern, any of the available instruments can be set to play. Once you've made the patterns you want to use, you can combine them in any order into any of the four available tracks. Any particular pattern can be used in any of the tracks as many times as desired.

There are 64 patterns available in 4 groups of 16 each. Pattern groups are labeled by letters: A, B, C and D. The 4 groups are not at all related to the 4 tracks. Patterns from any group are available to any track.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.2 Demonstrations

Some sample patterns and tracks are in `demo.dat' which can be loaded from the File->Demo menu. Something exists in each track of this file so click the START button and you should hear something if your hardware is set up correctly. Part of this set up is the midi channel; the default midi channel is 10 (the default for D-110 drum sounds). You can change the output midi channel via the Midi menu or Shift-click on the MIDI CH button; a new window will appear for midi channel selection.

A second demonstration file shows the alternate 727 latin sound map. With this sound map, the software emulates a Roland 727 latin percussion rhythm composer. Loaded from the File->Demo menu the file `son-montuno.dat', and then load the latin percussion sound map `727.map' from the Map->Load Standard Sound Map menu. Set also the tempo to 200 bpm. Then, click the START button.

An alternate sound map for latin percussion is `7c7.map'. The c in 7c7 stands for cuba(1). can be loaded in the Map->Load Standard Sound Map. This file has no Roland latin percussion rhythm composer equivalent, and has been designed for our pleasure. Click the START button and you will hear the file `son-montuno.dat' with another feeling.

Finally, a brazilian sound map `7b7.map' is presented. The b in 7b7 stands for brazil(2) and can be loaded together with the `carioca.dat' demonstration. A good tempo is 220 bpm for the samba carioca.

There is no more demonstration file for these sound maps, since it is time for you to compose your music !


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.3 Creating patterns


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.3.1 Writing pattern

Shift-click the PATTERN button to enter Pattern Write mode. While START is not pressed, the 16 instrument/step keys at the bottom of the interface are dual purposed.

Clicking on a key changes which pattern, 1-16, (within the current group) is selected for writing. A small lamp above one of the group pattern buttons indicates the current group. The current group may be changed by clicking group pattern button A, B, C or D.

Shift-clicking on the instrument/step keys selects which instrument is selected to be written into the current pattern. Click the START button; now as you click of the instrument/step keys, the selected instrument, e.g. Cowbell, will be added at that step. If the selected instrument has already been set at that step, then clicking there will remove it. To select another instrument, press the STOP/CONT button then select another instrument using Shift-click on the appropriate instrument/step key.

Continue adding instruments at the required steps to complete the pattern. Make all the patterns you will need for a new song.

A pattern may be cleared of all notes while in Pattern Write mode; clicking on the CLEAR button will raise a dialog window to confirm clearing of the current pattern.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.3.2 Copy/paste and copy/merge

Another method of creating new patterns is to copy an existing pattern and pasting it to a new location, then modifying the new version. This is an efficient method of creating a number of patterns which are small variations of each other. Select the pattern to be copied and press CRTL-C (CONTROL key and C key together).

Now select a new (empty?) pattern location and press Ctrl-V or Ctrl-B to paste in the copied notes.

Using Ctrl-V will clear the destination location of any notes it already contains whereas Ctrl-B will merge its current contents with the new note information.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.3.3 The pattern display grid

The third method uses the pattern display grid. Double-click near an instrument/step intersection to add the instrument at that step. If the instrument already exists at that step then it is deleted. This is probably the easiest way of creating patterns.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.4 Playing patterns

Click the PATTERN button to enter Pattern Play mode. While the START button is depressed, the currently selected pattern will play. Clicking on different pattern keys at the bottom of the interface will select a new pattern (1,..,16) in the current group. If not currently playing, the new pattern is displayed immediately. If a pattern is already playing, the new pattern will play when the current pattern is finished.

Selecting a different group also changes the current pattern, i.e. if pattern 7 in group I is selected, then when group 2 is selected the new pattern will be pattern 7 in group II. Sixteen patterns are available in each of the four groups for a total of sixty-four patterns.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.5 Creating tracks

Shift-click the TRACK button to enter Track Write mode.

To start from an empty track, delete anything already there (Shift-click on the CLEAR button) if necessary. Now select a pattern to add to the track and click on the enter key as many times as that pattern is required. Then select the next pattern to add and click on the enter key as many times as that pattern is required.

E.g., selecting pattern 3 and clicking on the ENTER button 4 times, then selecting pattern 9 and clicking on the ENTER button 2 times will result in a track of six measures - 4 of pattern 3 followed by 2 measures of pattern 9.

Changes to a track being created can be made. See section 2.6 Editing tracks.

The currently selected pattern can be heard playing if the START button is clicked. This enables an audible preview of selected patterns prior to adding them to the track.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.6 Editing tracks

Shift-click the TRACK button to enter Track Write mode.

Track editing is only possible in Track Write mode.

Deletions of tracks (or parts of them) require confirmation (via a dialog window).

Shift-click on the CLEAR button deletes all of the current track.

Ctrl-click on the CLEAR button deletes the current measure from the track.

Shift-Ctrl-click on the CLEAR button deletes the rest of the current track, including the current measure. On some systems (including mine!) this actually requires the Ctrl key as well i.e. Shift + Ctrl keys + mouse click. Consider this a minor bug to be fixed sometime.

Adding patterns to a track involves selecting a pattern then a click or Shift-click on the ENTER button. Think of Shift-click on ENTER as an insert operation into the track before the current measure. An ordinary click on ENTER is actually a replacement operation i.e. it will replace the current measure with the currently selected pattern. However if you're at the end of the current track this behaves like an append operation - it adds new measures to the end of the track.

The currently selected pattern can be heard playing if the START button is clicked. This enables an audible preview of selected patterns prior to adding them to the track.

Different parts of the track can be accessed by clicking on the BACK and FWD buttons. Shift-click on the LAST MEAS button to go to the end of the track. Note that this goes to the measure just past the end of the track (ready to write the next measure). An ordinary click on the LAST MEAS button will momentarily show the last (+1) measure while the button is held down.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.7 Playing tracks

Click on the TRACK button to enter the Track Play mode. Then click on the START button and the current track will be played.

Select another track, e.g. track IV, by Shift-clicking a the corresponding track button: Shift-IV. Then enter START for playing the song.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.8 Tempo changes

The tempo may be changed in either Track or Pattern mode. The tempo is lowered by Clicking in the tempo dial and then Click-Dragging around. It its increased by Click-Dragging to the left from the tempo dial; its increased by Click-Dragging to the right.

Tempo changes can't be written into a track. If saving a track as an midi file, the whole track will have whatever tempo is selected at the time of saving.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3. Midi files and sounds


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.1 Midi files

Currently only single track Midi files can be exported. When the Midi File->Save is selected a file browser appears into which the name of the file is entered. Its not crucial but it is a convention to have a `.mid' ending on the filename. When a name has been nominated, the current track will be exported, including midi channel and tempo information i.e. make sure these have the values you want first.

Tempo changes can't be written into a track. If saving a track as an midi file, the whole track will have whatever tempo is selected at the time of saving.

Volume controls are used when saving a midi file: master, accent and volume controls associated to instruments.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.2 Sound maps

TK-707 sound maps are mappings of the 16 instrument keys to descriptions of their long names, short names, abbreviate name and midi note values. The first (longer) names are used in the pattern grid display, while the second (shorter) names are used under the 16 instrument keys and abbreviations are used under the volume controls. The midi note values need to correspond to values recognized by the sound module being used with TK-707 (either external or built into a sound card). Appropriate values will need to be gleaned from your hardware documentation, however the built in values should work on any module conforming to the General Midi standard.

The built-in sound map is supplied as an example in the `707.map' file. A second file, `727.map', is supplied and can be loaded to play with the sounds of Roland's TR-727, the latin percussion counterpart of the TR-707. Note that the 727 mapping won't work on a 707 because it doesn't recognize the necessary range of midi note values. It will work on modules (such as Roland D-110) which do recognize the necessary range.

Files with similar layout to the supplied `.map' can be constructed using a text editor and loaded into TK-707 from the Map->Load Local Sound Map menu.

Alternatively, the currently loaded sound map can be edited via an editing interface which is accessed from the Map->Edit Sound Map menu. Just change the name, short name and midi note values as required and press the APPLY button to apply the new settings to TK-707. The Cancel button will revert sound setting to whatever they were before the editing window was started. The OK button will apply the currently edited settings and close the editing window.

As new midi note values are entered for an instrument, the sound that they access in the midi sound module can be previewed using the TEST buttons. To speed the process of finding suitable sounds, three keyboard/mouse shortcuts are provided:

  • Shift + Mouse button 1 in the "Note" widget increments the value by 1 and test plays the new sound;
  • Ctrl + Mouse button 1 in the "Note" widget decrements the value by 1 and test plays the new sound;
  • Mouse button 2 in the "Note" widget and dragging up or down continuously decrement or increments the note value and test plays. the new sound.

Any editing of sound maps are lost if TK-707 is closed down without saving the sound map. A sound map can be saved using the Map->Save Sound Map menu item. A file suffix of `.map' is recommended (but not absolutely required).


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4. Ternary feelings and poly-rhythms


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.1 Scale changes

This feature is related to fast figures and 6/8 figures.

Four scales are available on each pattern. Click on the SCALE in Pattern Write mode for changing the scale of the current pattern. A small lamp on the left of the musical score score indicates the current scale. For each scale, a vertical bar indicates the duration of a whole note.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.1.1 Binary 4/4 measures

On the first scale, the whole note duration is decomposed into sixteenth. Each sixteenth is associated to the a step of the pattern. There is 16 sixteenth in the pattern if the last step is set to 16, and then the total duration of the pattern is those of a whole note.

This is the default scale when creating pattern associated to a 4/4 measure.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.1.2 Binary 2/4 measures

For the second scale, the whole duration is decomposed into eighthes. Each eighthes is associated to a step of the pattern. When the last step is set to 16, there is 16 eighthes in the pattern, and the total duration of the pattern is those of a half whole. When playing such pattern, lamps associated to steps are turning twice faster ! The pattern is then a 2/4 measure. The whole duration should be recovered in a song by inserting two of such patterns.

This scale is designated for fast schemes on binary songs.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.1.3 Triplets and composed 12/4 measures

On the third scale, the whole duration is decomposed into four third of a quarter. Each third of a quarter is associated to a step of the pattern.

When the last step is set to 12, the total duration of the pattern is those of a whole note see section 4.2 Last step changes. The pattern is then a 12/4 measure.

Alternatively, the last could be set to 9 or 15 and then the pattern is a 9/4 or a 15/4 measure, respectively.

This pattern is designated for ternary-based measures or for inserting ternary feelings (triplets) into a binary song.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.1.4 Sextuplets and composed 12/8 measures

Finally, the fourth scale decomposes the whole duration into two sextuplets (12 times 1/6 of a quarter sextuplets). Each 1/6 of a quarter is associated to a step of the pattern. When the last step is set to 12. See section 4.2 Last step changes, the total duration of the pattern is those of a half whole note. The whole duration should be recovered in a song by inserting two of such patterns. The pattern is then a 12/8 measure.

Since each quarter is represented by 6 steps on the pattern, we are able to superpose binary and ternary schemes, i.e. poly-rhythmic effects.

The `son-montuno.dat' demonstrates such effects.

This pattern is designated for fast schemes on ternary based measures or for inserting ternary feelings (triplets) into a binary song.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.2 Last step changes

Remarks that the last step is not automatically changed from 16 to 12 when changing the scale of a pattern. It could be chosen to 15 for the scale 3, for instance.

Click on the LAST STEP in Pattern Write mode for changing the scale. A new window will appear for last scale selection of the last step associated to the current pattern.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5. Accents and flam


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.1 Accents


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.1.1 Inserting accentuated notes

There is two available accents: a weak and a strong one. Use the weak accent by clicking on the ACCENT button in Pattern Step Write or Pattern Tap Write modes. The "accent" text at the bottom of the button becomes orange. Enter then notes as usual: notes are weakly accentuated and the circle marker is orange, instead of the usual grey.

Use the strong accent by clicking a second times on the ACCENT button. Now, the "accent" text becomes red. Then, enter notes: they are strongly accentuated and the circle marker is red too.

Then, click a third times on the ACCENT button. The "accent" text at the bottom of the button comes back to the initial foreground color. When you insert notes, they will be no more accentuated.

In Pattern Step Write mode, you could also insert notes by using the 1,..,16 step touchs. Conversely, in Pattern Tap Write, you could also use the instrument keys, e.g. Cowbell.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.1.2 Controlling the accent intensity

The weak and strong accent intensities could be modulated by using the volume control labeled "AC". Moves the label control up and down. When up, accent effects are maximum while when down, there is no more perceptible accent effects. The volume control of accents is global.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.2 Flam


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.2.1 Inserting flams

Flam is a kick note written ahead of the main beat, and takes on the effect of a grace note. Control-double-click (Control-Button-1 two times) near an instrument/step intersection to insert a flam note for this instrument at that step. Instead of the circle marker, a star marker represents the flam note at the selected intersection see section 2.3 Creating patterns.

There is another way for inserting flams: In Pattern Step Write mode, click the START button; Select an instrument by shift-clicking on an instrument/step key, e.g. Shift-Snare. Now, as usual, as you click on the instrument/step keys, the selected snare will be added at that step 4. Instead of this, if you control-click on the instrument/step keys, e.g. Ctrl-4, then a snare note with a flam is inserted at step 4.

Conversely, in Pattern Tap Write mode, enter a flam by using the Ctrl-Cowbell.

Flam could be combined with accents, and the associated star marker becomes orange or red, depending on the weak or strong accent.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.2.2 Controlling the flam interval

The time between the grace note and its following main note can be varied in the range 0:4. The default value is 2. A zero value means that flam is off. Each pattern has an associated flam interval value.

Click on the FLAM/SHUFFLE button in Pattern Write mode for changing the flam interval of the current pattern. A new window will appear for the flam interval selection.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

A. Command line options


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

A.1 Synopsis

 
   tk707 options...


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

A.2 Options

-l
List the available sound ports
-p port
Use this port
-small
-medium
-normalsize
Set the size of the window, since some screens are too small for the whole window.
-display screen id
Display to use.
-use window id.
Id of window in which to embed application. See xwininfo.
-geometry
Initial geometry for window
-colormap
Colormap for main window
-name
Name to use for application
-sync
Use synchronous mode for display server
-visual
Visual for main window.
-h
-help
Print short help.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

B. Converting MIDI to audio WAV and MP3::

This small annex explain how to convert your output midi file to formatted audio file (ex. RIFF WAVE) and compressed MP3 audio files. We assume your have converted your file `salsa.dat' into MIDI format `salsa.mid' in the tk707 environment see section 3.1 Midi files.

Then enter the commands:
 
        timidity bolero.mid -Ow bolero.wav
        lame -b128 bolero.wav bolero.mp3
and compare the file sizes:
 
        ls -al 
	-rw-r--r--   1 maria martinez     1051 Mar  9 09:20 son-montuno.mid
	-rw-r--r--   1 maria martinez  3937324 Mar  9 09:22 son-montuno.wav
	-rw-r--r--   1 maria martinez   493056 Mar  9 09:22 son-montuno.mp3
The MIDI file does not contains the sounds. It contains only the score of your music and a MIDI render is required to heat it. The audio WAV and MP3 contains the complete sound and are suitable exports, such as CD-ROM writers. Moreover, the MP3 file is compressed by rougthly a factor ten. The MP3 audio files can be played back by popular mp3 players such as mpg123.

The timidity tool is a midi-to-wav converter available at http://www.goice.co.jp/member/mo/timidity.

The lame tool is a wav-to-mp3 convarter available at http://www.sulaco.org/mp3.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

C. GNU General Public License

Version 2, June 1991

 
Copyright © 1989, 1991 Free Software Foundation, Inc.
675 Mass Ave, Cambridge, MA 02139, USA

Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

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.

TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  1. 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.

  2. 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.

  3. 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:

    1. You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.

    2. 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.

    3. 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.

  4. 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:

    1. 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,

    2. 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,

    3. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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.

  9. 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.

  10. 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.

  11. 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

  12. 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.

  13. 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


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

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 an 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., 675 Mass Ave, Cambridge, MA 02139, 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.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

Index

Jump to:   .  
A   B   D   F   G   I   L   M   P   S   T   V   W   X  

Index Entry Section

.
`.dat' tk707 file2.2 Demonstrations
`.map' tk707 sound map file2.2 Demonstrations
`.mid' midi fileB. Converting MIDI to audio WAV and MP3::
`.mp3' audio fileB. Converting MIDI to audio WAV and MP3::
`.wav' audio fileB. Converting MIDI to audio WAV and MP3::

A
accent5.1.1 Inserting accentuated notes
accent5.2.1 Inserting flams
Alsa audio library1. Installation
Alsa audio library1.7 My card has no midi render...
audio file formatB. Converting MIDI to audio WAV and MP3::

B
brazilian percussion2.2 Demonstrations

D
demonstration file `demo.dat'1.4 Running
demonstration file `demo.dat'2.2 Demonstrations
demonstration file `son-montuno.dat'2.2 Demonstrations
demonstration file `son-montuno.dat'4.1.4 Sextuplets and composed 12/8 measures

F
file `727.map'2.2 Demonstrations
file `7b7.map'2.2 Demonstrations
file `7c7.map'2.2 Demonstrations
file `carioca.dat'2.2 Demonstrations
file `tk707.dvi' documentation1.5 Building the documentation
file `tk707.html' documentation1.5 Building the documentation
file `tk707.info' documentation1.5 Building the documentation
file `tk707.ps' documentation1.5 Building the documentation
File->Load Demo menu2.2 Demonstrations
File->Load menu1.4 Running
flam5.2 Flam
flam interval5.2.2 Controlling the flam interval

G
grace note5.2 Flam
grid marker: orange5.1.1 Inserting accentuated notes
grid marker: red5.1.1 Inserting accentuated notes
grid marker: star5.2 Flam
group (pattern)2.1 Terminology

I
instrument2.3.1 Writing pattern
instrument3.2 Sound maps

L
lame wav-to-mp3 converterB. Converting MIDI to audio WAV and MP3::
last step4.1.3 Triplets and composed 12/4 measures
last step4.1.4 Sextuplets and composed 12/8 measures
last step4.2 Last step changes
latin percussion2.2 Demonstrations
Linux system1. Installation

M
Map->Edit Sound Map menu3.2 Sound maps
Map->Load Local Sound Map menu3.2 Sound maps
Map->Load Standard Sound Map2.2 Demonstrations
Map->Save Sound Map menu3.2 Sound maps
midi file2.8 Tempo changes
midi file3.1 Midi files
midi file formatB. Converting MIDI to audio WAV and MP3::
Midi File->Save menu3.1 Midi files
midi note3.2 Sound maps
midi output channel2.2 Demonstrations
midi output port1.4 Running
midi render1. Installation
midi render: timidity software1.7 My card has no midi render...
midi-to-audio convertersB. Converting MIDI to audio WAV and MP3::
mpg123 mp3 playerB. Converting MIDI to audio WAV and MP3::

P
pattern2.1 Terminology
pattern2.3 Creating patterns
pattern copy/merge2.3.2 Copy/paste and copy/merge
pattern copy/paste2.3.2 Copy/paste and copy/merge
pattern display grid2.3.3 The pattern display grid
pattern display grid3.2 Sound maps
pattern display grid5.2 Flam
Pattern Step Write5.2.1 Inserting flams
pattern step write5.1.1 Inserting accentuated notes
pattern tap write5.1.1 Inserting accentuated notes
Pattern Tap Write5.2.1 Inserting flams
poly-rhythms 12/84.1.4 Sextuplets and composed 12/8 measures

S
scale4.1 Scale changes
sound card without midi1.7 My card has no midi render...
sound map3.2 Sound maps
sound map `707.dat'3.2 Sound maps
sound map `727.dat'3.2 Sound maps
sound map file2.2 Demonstrations
sound patch files (GUS)1.7 My card has no midi render...
step2.1 Terminology
step2.3.1 Writing pattern

T
tcl/tk libraries1. Installation
tempo2.8 Tempo changes
tempo3.1 Midi files
ternary feeling4.1.3 Triplets and composed 12/4 measures
timidity midi-to-wav converterB. Converting MIDI to audio WAV and MP3::
track2.1 Terminology
track selection2.7 Playing tracks

V
volume control3.1 Midi files
volume control3.2 Sound maps
volume control5.1.2 Controlling the accent intensity

W
whole note decomposition4.1.1 Binary 4/4 measures

X
xwininfoA.2 Options

Jump to:   .  
A   B   D   F   G   I   L   M   P   S   T   V   W   X  


[Top] [Contents] [Index] [ ? ]

Footnotes

(1)

An excellent introduction to afro-cuban rhythms can be founded in 'Les tumbaos de la salsa', by Daniel Genton, Editions Musicales Francaise, 2000. email: Topdjembe@hotmail.com.

(2)

This sound map is indented for batucada music for carnaval.


[Top] [Contents] [Index] [ ? ]

Table of Contents

1. Installation
1.1 Building tk707
1.2 Configure options
1.3 Installation
1.4 Running
1.5 Building the documentation
1.6 Comments, bug corrections and future versions
1.7 My card has no midi render...
2. Getting started
2.1 Terminology
2.2 Demonstrations
2.3 Creating patterns
2.3.1 Writing pattern
2.3.2 Copy/paste and copy/merge
2.3.3 The pattern display grid
2.4 Playing patterns
2.5 Creating tracks
2.6 Editing tracks
2.7 Playing tracks
2.8 Tempo changes
3. Midi files and sounds
3.1 Midi files
3.2 Sound maps
4. Ternary feelings and poly-rhythms
4.1 Scale changes
4.1.1 Binary 4/4 measures
4.1.2 Binary 2/4 measures
4.1.3 Triplets and composed 12/4 measures
4.1.4 Sextuplets and composed 12/8 measures
4.2 Last step changes
5. Accents and flam
5.1 Accents
5.1.1 Inserting accentuated notes
5.1.2 Controlling the accent intensity
5.2 Flam
5.2.1 Inserting flams
5.2.2 Controlling the flam interval
A. Command line options
A.1 Synopsis
A.2 Options
B. Converting MIDI to audio WAV and MP3::
C. GNU General Public License
Preamble
How to Apply These Terms to Your New Programs
Index

[Top] [Contents] [Index] [ ? ]

Short Table of Contents

1. Installation
2. Getting started
3. Midi files and sounds
4. Ternary feelings and poly-rhythms
5. Accents and flam
A. Command line options
B. Converting MIDI to audio WAV and MP3::
C. GNU General Public License
Index

[Top] [Contents] [Index] [ ? ]

About this document

This document was generated by using texi2html

The buttons in the navigation panels have the following meaning:

Button Name Go to From 1.2.3 go to
[ < ] Back previous section in reading order 1.2.2
[ > ] Forward next section in reading order 1.2.4
[ << ] FastBack beginning of this chapter or previous chapter 1
[ Up ] Up up section 1.2
[ >> ] FastForward next chapter 2
[Top] Top cover (top) of document  
[Contents] Contents table of contents  
[Index] Index concept index  
[ ? ] About this page  

where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

  • 1. Section One
    • 1.1 Subsection One-One
      • ...
    • 1.2 Subsection One-Two
      • 1.2.1 Subsubsection One-Two-One
      • 1.2.2 Subsubsection One-Two-Two
      • 1.2.3 Subsubsection One-Two-Three     <== Current Position
      • 1.2.4 Subsubsection One-Two-Four
    • 1.3 Subsection One-Three
      • ...
    • 1.4 Subsection One-Four


This document was generated by Saramito Pierre on November, 3 2004 using texi2html tk707-0.8/go0000755000175100017510000000052010142137110007476 00000000000000#!/bin/sh # # This program loads and run the tk707 # implementation that uses the tcl interpreter # # Next line restarts as tk707sh \ exec tk707tcl "$0" "$@" source ports.tcl source title_defs.tcl source score_defs.tcl source defs.tcl source gui.tcl source title.tcl source score.tcl source procs.tcl source tk707.tcl source help.tcl tk707-0.8/707.map0000644000175100017510000000307510142137110010167 00000000000000# # This file is part of tk707. # # Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito # # tk707 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. # # Foobar 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 Foobar; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # ################# TK707 Sound Map generated by TK707-0.6 ################# # Format is 16 entries of { {Long name} {Short name} {Abbrev} {Midi key value} } ############################################################################ { {Bass 1} {Bass 1} {BASS} {35} } { {Bass 2} {Bass 2} {} {36} } { {Snare 1} {Snare 1} {SNARE} {38} } { {Snare 2} {Snare 2} {} {40} } { {LowTom} {LowTom} {LT} {41} } { {MidTom} {MidTom} {MT} {45} } { {HighTom} {HighTom} {HT} {48} } { {Rim} {Rim} {R} {37} } { {Cowbell} {Cowbell} {CB} {56} } { {Hand Clap} {Clap} {CP} {39} } { {Tambourine} {Tamb} {TB} {54} } { {HH Closed 1} {HH C1} {HH} {42} } { {HH Closed 2} {HH C2} {} {42} } { {HHat Open} {HH Open} {} {46} } { {Crash} {Crash} {CRASH} {49} } { {Ride} {Ride} {RIDE} {51} } tk707-0.8/727.map0000644000175100017510000000317110142137110010166 00000000000000# # This file is part of tk707. # # Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito # # tk707 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. # # Foobar 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 Foobar; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # ################# TK707 Sound Map generated by TK707-0.6 ################# # Format is 16 entries of { {Long name} {Short name} {Abbrev} {Midi key value} } ############################################################################ { {HiBongo} {HiBongo} {BG} {60} } { {LoBongo} {LoBongo} {} {61} } { {HCong Mute} {HC Mute} {HC} {62} } { {HCong Open} {HCong Open} {} {63} } { {Low Conga} {Low Conga} {LC} {64} } { {Hi Timbale} {Hi Timb} {HT} {65} } { {Low Timbale} {Lo Timb} {LT} {66} } { {Hi Agogo} {Hi Agogo} {AG} {67} } { {Lo Agogo} {Lo Agogo} {} {68} } { {Cabasa} {Cabasa} {CS} {69} } { {Maracas} {Maracas} {MR} {70} } { {Short Whistle} {S Whist} {WHIS} {71} } { {Short Whistle} {S Whist} {} {71} } { {Long Whistle} {L Whist} {} {72} } { {Quijada} {Quijada} {QUIJADA} {73} } { {Star Chime} {Chime} {CHIME} {83} } tk707-0.8/7b7.map0000644000175100017510000000314710142137110010251 00000000000000# # This file is part of tk707. # # Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito # # tk707 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. # # Foobar 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 Foobar; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # ################# TK707 Sound Map generated by TK707-0.7 ################# # Format is 16 entries of { {Long name} {Short name} {Abbrev} {Midi key value} } ############################################################################ { {Rim Snare} {R Snare} {SN} {37} } { {Open Snare} {O Snare} {} {38} } { {Rim Caixa} {Ri Caixa} {HC} {40} } { {High Caixa} {Hi Caixa} {} {65} } { {Low Caixa} {Lo Caixa} {LC} {66} } { {Contrador} {Contrador} {CD} {47} } { {Surdo} {Surdo} {S} {45} } { {Hi Agogo} {H Agogo} {AG} {67} } { {Lo Agogo} {L Agogo} {} {68} } { {Hi Mute Agogo} {HM Agog} {M AG} {67} } { {Lo Mute Agogo} {LM Agog} {} {68} } { {High Apito} {H Apito} {AP} {71} } { {Low Apito} {L Apito} {} {72} } { {Ganza} {Ganza} {GA} {82} } { {Tamborim} {Tamborim} {TAMB} {60} } { {Contra} {Contra} {C} {43} } tk707-0.8/7c7.map0000644000175100017510000000315010142137110010244 00000000000000# # This file is part of tk707. # # Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito # # tk707 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. # # Foobar 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 Foobar; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # ################# TK707 Sound Map generated by TK707-0.6 ################# # Format is 16 entries of { {Long name} {Short name} {Abbrev} {Midi key value} } ############################################################################ { {HiBongo} {HiBongo} {BG} {60} } { {LoBongo} {LoBongo} {} {61} } { {HCong Mute} {HC Mute} {HC} {62} } { {HCong Open} {HCong Open} {} {63} } { {Low Conga} {Low Conga} {LC} {64} } { {Hi Timbale} {Hi Timb} {HT} {65} } { {Low Timbale} {Lo Timb} {LT} {66} } { {Castinet} {Castinet} {CA} {85} } { {Claves} {Claves} {CL} {75} } { {Short Guiro} {S Guiro} {GU} {73} } { {Long Guiro} {L Guiro} {} {74} } { {Cabasa} {Cabasa} {CS} {69} } { {Maracas} {Maracas} {MR} {70} } { {Shaker} {Shaker} {SH} {82} } { {Cowbell} {Cowbell} {CW} {67} } { {Wood Block} {Wood Block} {WB} {77} } tk707-0.8/demo.dat0000644000175100017510000005246010142137110010573 00000000000000####################### MACHINE GENERATED - DO NOT EDIT ####################### #### TK707 Data file generated by TK707-0.7 ############################################################################### { { { { { 1 14 } { } { 12 } { } { 4 12 } { } { 1 12 } { } { 1 12 } { } { 12 } { } { 4 12 } { } { 1 12 } { } } { { 1 5 15 14 } { 1 8 12 } { 1 5 12 } { 1 8 12 } { 1 5 12 } { 1 8 12 } { 1 5 12 } { 1 8 12 } { 1 5 12 } { 1 8 12 } { 1 5 12 } { 1 8 12 } { 1 5 12 } { 1 8 12 } { 1 5 12 } { 1 8 12 } } { { 8 10 14 15 1 } { 8 12 } { 8 10 16 } { 8 12 } { 8 10 14 1 } { 8 12 } { 8 10 16 } { 8 12 } { 8 10 14 1 } { 8 12 } { 8 10 16 } { 8 12 } { 8 10 14 1 } { 8 12 } { 8 10 16 } { 8 12 1 } } { { 1 15 16 5 14 } { } { 12 } { } { 12 } { } { 12 } { } { 12 } { } { } { } { } { } { } { } } { { 1 3 5 9 13 15 } { 3 5 13 } { 1 5 13 } { 5 } { 1 3 5 9 13 } { 3 5 13 } { 1 5 13 } { 5 } { 1 3 5 9 13 } { 3 5 13 } { 1 5 13 } { 5 } { 1 3 5 9 13 } { 3 5 13 } { 1 5 13 } { 5 } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { 1 } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { 1 7 13 16 15 } { 3 7 16 } { 1 3 7 10 13 16 } { 13 16 } { 1 3 7 10 16 } { 13 16 } { 1 3 7 16 } { 1 3 7 10 13 16 } { 3 10 13 16 } { 1 7 10 13 16 } { 3 7 13 16 } { 1 3 10 } { 3 7 10 13 16 } { 1 10 13 16 } { 3 7 13 } { 3 13 16 } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { 12 } { } { } { } { 12 } { } { } { } { 12 } { } { } { } { 12 } { } { } { } } { { 12 } { } { } { } { 12 } { } { } { } { 12 } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { 12 1 16 } { } { 16 9 } { 4 } { 12 16 5 } { } { 16 9 } { 10 } { 12 1 16 } { } { 16 9 } { 4 } { 12 16 } { 5 } { 16 9 5 } { 4 } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } } { { { { 0 0 } { } { 0 } { } { 0 0 } { } { 0 0 } { } { 0 0 } { } { 0 } { } { 0 0 } { } { 0 0 } { } } { { 0 0 0 0 } { 0 0 0 } { 0 0 0 } { 0 0 0 } { 0 0 0 } { 0 0 0 } { 0 0 0 } { 0 0 0 } { 0 0 0 } { 0 0 0 } { 0 0 0 } { 0 0 0 } { 0 0 0 } { 0 0 0 } { 0 0 0 } { 0 0 0 } } { { 0 0 0 0 0 } { 0 0 } { 0 0 0 } { 0 0 } { 0 0 0 0 } { 0 0 } { 0 0 0 } { 0 0 } { 0 0 0 0 } { 0 0 } { 0 0 0 } { 0 0 } { 0 0 0 0 } { 0 0 } { 0 0 0 } { 0 0 0 } } { { 0 0 0 0 0 } { } { 0 } { } { 0 } { } { 0 } { } { 0 } { } { } { } { } { } { } { } } { { 0 0 0 0 0 0 } { 0 0 0 } { 0 0 0 } { 0 } { 0 0 0 0 0 } { 0 0 0 } { 0 0 0 } { 0 } { 0 0 0 0 0 } { 0 0 0 } { 0 0 0 } { 0 } { 0 0 0 0 0 } { 0 0 0 } { 0 0 0 } { 0 } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { 0 } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { 0 0 0 0 0 } { 0 0 0 } { 0 0 0 0 0 0 } { 0 0 } { 0 0 0 0 0 } { 0 0 } { 0 0 0 0 } { 0 0 0 0 0 0 } { 0 0 0 0 } { 0 0 0 0 0 } { 0 0 0 0 } { 0 0 0 } { 0 0 0 0 0 } { 0 0 0 0 } { 0 0 0 } { 0 0 0 } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { 0 } { } { } { } { 0 } { } { } { } { 0 } { } { } { } { 0 } { } { } { } } { { 0 } { } { } { } { 0 } { } { } { } { 0 } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } { { { 0 0 0 } { } { 0 0 } { 0 } { 0 0 0 } { } { 0 0 } { 0 } { 0 0 0 } { } { 0 0 } { 0 } { 0 0 } { 0 } { 0 0 0 } { 0 } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } } { { {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} } { {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} } { {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} } { {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} {16 0 2 0} } } { { 0 0 0 0 1 2 17 0 3 } { 0 0 0 0 1 2 1 1 } { 0 0 0 0 } { 32 33 48 48 48 48 } } } tk707-0.8/carioca.dat0000644000175100017510000005550610142137110011254 00000000000000####################### MACHINE GENERATED - DO NOT EDIT ####################### #### TK707 Data file generated by TK707-0.7 ############################################################################### { { { { { 4 13 12 } { } { 4 } { } { 5 } { } { 4 } { } { 4 } { } { 5 } { } { } { } { } { } } { { 4 } { } { } { } { 5 } { } { } { } { } { } { 5 } { 5 } { 5 } { } { 5 } { } } { { 4 } { } { 3 } { } { } { } { 5 } { } { 4 7 } { } { } { } { 7 } { } { } { } } { { 3 7 } { } { } { } { 7 } { } { } { } { 3 7 } { } { } { } { 7 } { } { } { } } { { 7 4 1 14 9 } { } { 14 2 } { } { 14 3 } { } { 1 14 8 } { } { 6 2 14 8 } { } { 14 4 } { 4 } { 14 6 1 4 9 } { } { 2 5 14 } { } } { { 2 7 4 14 9 } { } { 3 14 } { } { 14 1 8 } { } { 2 14 } { } { 6 2 4 14 8 } { } { 14 2 6 8 } { 2 } { 14 2 3 9 } { } { 2 6 14 } { } } { { 1 7 12 14 9 } { } { 2 14 } { } { 3 14 } { } { 1 14 8 } { } { 2 6 14 8 } { } { 14 } { } { 1 6 14 12 9 } { } { 5 2 14 } { } } { { 7 2 13 12 14 9 } { } { 14 3 } { } { 1 14 13 12 8 } { } { 2 14 } { } { 2 6 13 12 14 8 } { } { 2 14 6 8 } { 2 } { 3 2 14 13 12 9 } { } { 2 6 14 } { } } { { 14 13 12 7 4 1 } { } { } { } { 13 } { } { } { } { 7 } { } { } { } { 7 } { } { } { } } { { 1 7 12 13 14 } { } { } { } { 13 3 } { } { 4 } { } { } { } { 4 } { } { } { } { 4 } { } } { { 14 7 1 } { } { } { } { } { } { } { } { } { } { 4 } { } { } { } { 4 } { } } { { } { } { 4 } { } { } { } { 4 } { } { 7 1 14 } { } { } { } { } { } { } { } } { { } { } { 4 } { } { } { } { 4 } { } { } { } { 4 } { } { } { } { 4 } { } } { { 14 7 2 } { } { 4 } { } { } { } { 4 } { } { 7 2 14 } { } { 4 } { } { } { } { 4 } { } } { { 2 7 14 12 13 } { } { } { } { } { } { } { } { } { } { } { } { 13 } { } { } { } } { { 12 13 } { } { } { } { 12 13 } { } { } { } { 12 13 } { } { } { } { 12 13 } { } { } { } } } { { { 1 7 13 12 9 14 } { } { 2 14 } { } { 14 } { } { 1 8 14 } { } { 2 6 8 14 } { } { 14 } { } { 1 6 14 9 } { } { 2 14 } { } } { { 7 2 9 14 } { } { 14 } { } { 1 14 8 } { } { 2 14 } { } { 2 6 8 14 } { } { 2 14 6 8 } { 2 } { 2 14 9 } { } { 2 6 14 } { } } { { 9 12 13 7 1 14 } { } { 14 2 4 } { } { 14 } { } { 8 1 14 } { } { 8 6 2 14 } { } { 14 } { } { 9 14 6 1 } { } { 2 14 } { } } { { 9 2 7 14 12 } { } { 14 } { } { 8 14 1 } { } { 2 14 } { } { 8 6 2 14 } { } { 8 6 14 2 } { 2 } { 9 14 2 12 } { } { 6 2 14 } { } } { { 1 7 12 9 13 14 } { } { 4 2 14 } { } { 14 } { } { 1 8 4 14 } { } { 14 4 7 2 } { } { } { } { 14 7 2 } { } { } { } } { { 14 7 2 4 } { } { } { } { 4 } { 4 } { } { } { 4 } { 4 } { } { } { 4 } { 4 } { } { } } { { 7 2 14 } { } { } { } { 14 7 2 } { } { } { } { 14 7 2 } { } { } { } { 4 } { 4 } { 4 } { } } { { 4 } { 4 } { 4 } { } { 4 } { 4 } { 4 } { } { 2 7 14 } { } { } { } { 2 7 14 } { } { } { } } { { 2 7 14 } { } { } { } { } { } { } { } { } { } { 4 } { } { } { } { 4 } { } } { { 3 } { } { } { } { 14 6 2 } { } { } { } { } { } { } { } { } { } { 4 } { } } { { } { } { 4 } { } { 3 } { } { } { } { 14 7 2 } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { 14 7 2 } { } { 14 7 2 } { } } { { } { } { 14 7 2 } { } { 14 7 2 } { } { } { } { 14 7 2 } { } { } { } { 14 7 2 } { } { } { } } { { 14 7 2 } { } { } { } { } { } { } { } { } { } { } { } { 4 } { 4 } { 4 } { } } { { 3 } { } { 4 } { } { } { } { 4 } { } { 4 7 } { } { } { } { 4 7 } { } { } { } } { { 4 7 } { } { } { } { 4 7 } { } { } { } { 4 7 } { } { } { } { 7 } { } { } { } } } { { { 13 9 12 7 1 14 } { } { 14 2 } { } { 14 } { } { 8 1 14 } { } { 14 7 2 } { } { } { } { 14 7 2 } { } { } { } } { { 4 2 7 14 } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { 7 } { } { } { } { } { } { } { } { 2 14 7 } { } { } { } { 7 } { } { } { } } { { } { } { } { } { 7 } { } { } { } { 7 2 14 } { } { 7 } { } { } { } { } { } } { { 7 } { } { } { } { } { } { } { } { 7 2 14 } { } { } { } { 7 } { } { } { } } { { } { } { } { } { } { } { } { } { 7 2 14 } { } { } { } { } { } { } { } } { { 4 } { } { 4 } { } { } { } { 4 } { } { 4 } { } { 4 } { } { } { } { 4 } { } } { { 14 1 7 12 9 13 } { } { 2 14 } { } { 14 } { } { 14 1 8 4 } { } { 2 7 14 4 } { } { } { } { 2 7 14 4 } { } { } { } } { { 14 7 2 4 } { } { 4 } { 4 } { 4 } { } { 4 } { } { 4 } { } { 4 } { 4 } { 4 } { } { 4 } { } } { { 4 } { } { 4 } { 4 } { 4 } { } { 4 } { } { 4 } { } { 4 } { 4 } { 4 2 7 14 } { } { 4 } { } } { { 4 } { } { 4 } { 4 } { 4 } { } { 4 } { } { 4 } { } { 4 } { 4 } { 14 7 2 4 } { } { } { } } { { 4 7 1 } { } { 4 2 } { } { } { } { 4 1 } { } { 4 2 } { } { } { } { 4 7 2 14 } { } { } { } } { { 4 } { } { 4 } { 4 } { 4 } { } { 4 } { } { 4 } { } { } { } { 7 2 14 } { } { } { } } { { 4 } { } { 4 } { } { 4 } { } { } { } { } { 7 2 14 } { } { } { } { } { } { } } { { 4 } { } { 4 } { } { 4 } { } { 4 } { } { 4 } { } { 4 } { } { } { } { } { } } { { 4 } { } { } { } { 4 } { } { } { } { 4 } { } { } { } { 7 2 14 } { } { } { } } } { { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } } { { { { 4 8 8 } { } { 4 } { } { 4 } { } { 4 } { } { 4 } { } { 4 } { } { } { } { } { } } { { 4 } { } { } { } { 4 } { } { } { } { } { } { 4 } { 2 } { 0 } { } { 0 } { } } { { 2 } { } { 4 } { } { } { } { 4 } { } { 4 0 } { } { } { } { 0 } { } { } { } } { { 4 0 } { } { } { } { 0 } { } { } { } { 4 0 } { } { } { } { 0 } { } { } { } } { { 0 0 0 2 0 } { } { 0 0 } { } { 0 0 } { } { 0 2 0 } { } { 0 0 2 0 } { } { 0 4 } { 2 } { 0 0 0 0 0 } { } { 0 4 2 } { } } { { 0 0 4 2 0 } { } { 4 0 } { } { 0 0 0 } { } { 0 2 } { } { 0 0 0 2 0 } { } { 0 4 0 0 } { 2 } { 0 0 0 0 } { } { 4 0 2 } { } } { { 0 0 8 2 0 } { } { 0 0 } { } { 0 0 } { } { 0 2 0 } { } { 0 0 2 0 } { } { 0 } { } { 0 0 0 0 0 } { } { 4 0 2 } { } } { { 0 0 0 8 2 0 } { } { 0 4 } { } { 0 0 8 0 0 } { } { 0 2 } { } { 0 0 0 8 2 0 } { } { 4 0 0 0 } { 2 } { 0 0 0 8 0 0 } { } { 4 0 2 } { } } { { 4 0 8 4 4 4 } { } { } { } { 8 } { } { } { } { 0 } { } { } { } { 0 } { } { } { } } { { 4 4 8 0 4 } { } { } { } { 8 4 } { } { 4 } { } { } { } { 4 } { } { } { } { 4 } { } } { { 4 4 4 } { } { } { } { } { } { } { } { } { } { 4 } { } { } { } { 4 } { } } { { } { } { 4 } { } { } { } { 4 } { } { 4 4 4 } { } { } { } { } { } { } { } } { { } { } { 4 } { } { } { } { 4 } { } { } { } { 4 } { } { } { } { 4 } { } } { { 4 4 4 } { } { 4 } { } { } { } { 4 } { } { 4 4 4 } { } { 4 } { } { } { } { 4 } { } } { { 4 4 4 8 8 } { } { } { } { } { } { } { } { } { } { } { } { 0 } { } { } { } } { { 0 8 } { } { } { } { 8 0 } { } { } { } { 0 8 } { } { } { } { 8 0 } { } { } { } } } { { { 0 0 8 8 0 2 } { } { 0 0 } { } { 0 } { } { 0 0 2 } { } { 0 0 0 2 } { } { 0 } { } { 0 0 0 0 } { } { 0 2 } { } } { { 0 0 0 2 } { } { 0 } { } { 0 0 0 } { } { 0 2 } { } { 0 0 0 2 } { } { 4 0 0 0 } { 2 } { 0 0 0 } { } { 4 0 2 } { } } { { 0 8 8 0 0 2 } { } { 0 0 4 } { } { 0 } { } { 0 0 2 } { } { 0 0 0 2 } { } { 0 } { } { 0 0 0 0 } { } { 0 2 } { } } { { 0 0 0 2 0 } { } { 0 } { } { 0 0 0 } { } { 0 2 } { } { 0 0 0 2 } { } { 0 0 0 4 } { 2 } { 0 0 0 8 } { } { 0 4 2 } { } } { { 0 0 8 0 8 2 } { } { 4 0 0 } { } { 0 } { } { 0 0 4 2 } { } { 4 4 4 4 } { } { } { } { 4 4 4 } { } { } { } } { { 4 4 4 4 } { } { } { } { 2 } { 0 } { } { } { 2 } { 0 } { } { } { 2 } { 0 } { } { } } { { 0 0 0 } { } { } { } { 0 0 0 } { } { } { } { 0 0 0 } { } { } { } { 4 } { 2 } { 0 } { } } { { 4 } { 2 } { 0 } { } { 4 } { 2 } { 0 } { } { 4 4 4 } { } { } { } { 4 4 4 } { } { } { } } { { 4 4 4 } { } { } { } { } { } { } { } { } { } { 4 } { } { } { } { 4 } { } } { { 4 } { } { } { } { 4 4 4 } { } { } { } { } { } { } { } { } { } { 4 } { } } { { } { } { 4 } { } { 4 } { } { } { } { 4 4 4 } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { 0 0 0 } { } { 0 0 0 } { } } { { } { } { 0 0 0 } { } { 0 0 0 } { } { } { } { 2 2 2 } { } { } { } { 2 2 2 } { } { } { } } { { 4 4 4 } { } { } { } { } { } { } { } { } { } { } { } { 4 } { 2 } { 0 } { } } { { 4 } { } { 4 } { } { } { } { 4 } { } { 4 0 } { } { } { } { 4 0 } { } { } { } } { { 0 0 } { } { } { } { 0 0 } { } { } { } { 0 0 } { } { } { } { 0 } { } { } { } } } { { { 8 0 8 0 0 2 } { } { 0 0 } { } { 0 } { } { 0 0 2 } { } { 2 2 2 } { } { } { } { 2 2 2 } { } { } { } } { { 4 4 4 4 } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { 4 } { } { } { } { } { } { } { } { 4 4 4 } { } { } { } { 4 } { } { } { } } { { } { } { } { } { 4 } { } { } { } { 4 4 4 } { } { 4 } { } { } { } { } { } } { { 4 } { } { } { } { } { } { } { } { 4 4 4 } { } { } { } { 4 } { } { } { } } { { } { } { } { } { } { } { } { } { 4 4 4 } { } { } { } { } { } { } { } } { { 4 } { } { 4 } { } { } { } { 4 } { } { 4 } { } { 4 } { } { } { } { 4 } { } } { { 2 0 0 8 0 8 } { } { 0 0 } { } { 0 } { } { 2 0 0 4 } { } { 2 2 2 4 } { } { } { } { 2 2 2 4 } { } { } { } } { { 4 4 4 4 } { } { 4 } { 2 } { 0 } { } { 4 } { } { 4 } { } { 4 } { 2 } { 0 } { } { 4 } { } } { { 4 } { } { 4 } { 2 } { 0 } { } { 4 } { } { 4 } { } { 4 } { 2 } { 0 4 4 4 } { } { 4 } { } } { { 4 } { } { 4 } { 2 } { 0 } { } { 4 } { } { 4 } { } { 4 } { 2 } { 4 4 4 0 } { } { } { } } { { 4 4 0 } { } { 4 0 } { } { } { } { 4 0 } { } { 4 0 } { } { } { } { 4 4 4 4 } { } { } { } } { { 4 } { } { 4 } { 2 } { 0 } { } { 4 } { } { 4 } { } { } { } { 4 4 4 } { } { } { } } { { 4 } { } { 4 } { } { 4 } { } { } { } { } { 4 4 4 } { } { } { } { } { } { } } { { 4 } { } { 4 } { } { 4 } { } { 4 } { } { 4 } { } { 4 } { } { } { } { } { } } { { 4 } { } { } { } { 4 } { } { } { } { 4 } { } { } { } { 4 4 4 } { } { } { } } } { { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } { { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } { } } } } { { {12 2 2 0 annonce} {16 0 2 0 depart} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 cycle} {16 0 2 0 {}} {16 0 2 0 piou-piou} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 dialogue} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {relance piou-piou}} {16 0 2 0 {}} } { {16 0 2 0 {cycle agogo}} {16 0 2 0 {}} {16 0 2 0 appel} {16 0 2 0 {}} {16 0 2 0 {annonce break 3}} {16 0 2 0 {}} {16 0 2 0 {break 3}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 relance} {16 0 2 0 {}} } { {16 0 2 0 arret} {16 0 2 0 {}} {16 0 2 0 {break 9}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {annonce 2}} {16 0 2 0 {annonce BSN}} {16 0 2 0 {cycle BSN}} {16 0 2 0 {}} {16 0 2 0 {arret BSN}} {16 0 2 0 {break 2}} {16 0 2 0 {}} {12 2 2 0 {}} {12 2 2 0 {}} {16 0 2 0 {}} } { {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} {16 0 2 0 {}} } } { { 0 1 2 3 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 6 7 8 3 6 7 8 3 6 7 8 3 6 7 8 3 6 7 9 10 11 12 13 14 15 16 17 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 16 17 16 17 16 17 16 17 18 19 32 33 0 1 2 3 4 5 4 5 4 5 4 5 34 35 36 37 34 35 36 37 34 35 36 37 34 35 36 37 34 35 36 37 34 35 33 38 1 2 3 16 17 16 17 16 17 16 17 18 19 39 40 41 40 41 40 41 40 42 0 1 2 3 4 5 4 5 4 5 4 5 18 19 43 44 45 45 46 47 16 17 16 17 16 17 16 17 18 19 32 33 } { } { } { } } } tk707-0.8/tk707.help0000644000175100017510000005013410142143502010701 00000000000000@C0@t The TK-707 Rhythm Composer@t @C1@tGetting started@t @C2@tTerminology@t Four song @htracks are available. You can think of a track as a song. Tracks are labeled by roman numbers: I, II, III and IV. Each track is made of @hpatterns, each with 16 @hsteps.s You could think of a pattern as a bar of music. At each step in a pattern, any of the available instruments can be set to play. Once you've made the patterns you want to use, you can combine them in any order into any of the four available tracks. Any particular pattern can be used in any of the tracks as many times as desired. There are 64 patterns available in 4 @hgroups of 16 each. Pattern groups are labeled by letters: A, B, C and D. The 4 groups are not at all related to the 4 tracks. Patterns from any group are available to any track. @C2@tDemonstrations@t Some sample patterns and tracks are in `demo.dat' which can be loaded from the @cFile@c-@c>@cDemo menu. Something exists in each track of this file so click the @cSTART button and you should hear something if your hardware is set up correctly. Part of this set up is the @hmidi @hchannel; the default midi channel is 10 (the default for D-110 drum sounds). You can change the output midi channel via the Midi menu or Shift-click on the @cMIDI @cCH button; a new window will appear for midi channel selection. A second demonstration file shows the alternate @h7@h2@h7 latin sound map. With this sound map, the software emulates a Roland @h7@h2@h7 latin percussion rhythm composer. Loaded from the @cFile@c-@c>@cDemo menu the file `son-montuno.dat', and then load the latin percussion sound map `727.map' from the @cMap@c-@c>@cLoad @cStandard @cSound @cMap menu. Set also the tempo to 200 bpm. Then, click the @cSTART button. An alternate sound map for latin percussion is `7c7.map'. The @cc in @c7@cc@c7 stands for cuba ( An excellent introduction to afro-cuban rhythms can be founded in 'Les tumbaos de la salsa', by Daniel Genton, Editions Musicales Francaise, 2000. email: Topdjembe@@ hotmail.com.'. can be loaded in the @cMap@c-@c>@cLoad @cStandard @cSound @cMap. This file has no Roland latin percussion rhythm composer equivalent, and has been designed for our pleasure. Click the @cSTART button and you will hear the file `son-montuno.dat' with another feeling. Finally, a brazilian sound map `7b7.map' is presented. The @cb in @c7@cb@c7 stands for brazil ( This sound map is indented for batucada music for carnaval.' and can be loaded together with the `carioca.dat' demonstration. A good tempo is 220 bpm for the samba carioca. There is no more demonstration file for these sound maps, since it is time for you to compose your music ! @C2@tCreating patterns@t @C2@tWriting pattern@t Shift-click the @cPATTERN button to enter Pattern Write mode. While @cSTART is not pressed, the 16 instrument/step keys at the bottom of the interface are dual purposed. Clicking on a key changes which pattern, 1-16, (within the current group) is selected for writing. A small lamp above one of the @hgroup @hpattern buttons indicates the current group. The current group may be changed by clicking group pattern button @cA, @cB, @cC or @cD. Shift-clicking on the @hinstrument@h/@hstep keys selects which instrument is selected to be written into the current pattern. Click the @cSTART button; now as you click of the instrument/step keys, the selected instrument, e.g. @cCowbell, will be added at that step. If the selected instrument has already been set at that step, then clicking there will remove it. To select another instrument, press the @cSTOP@c/@cCONT button then select another instrument using Shift-click on the appropriate instrument/step key. Continue adding instruments at the required steps to complete the pattern. Make all the patterns you will need for a new song. A pattern may be cleared of all notes while in Pattern Write mode; clicking on the @cCLEAR button will raise a dialog window to confirm clearing of the current pattern. @C2@tCopy/paste and copy/merge @t Another method of creating new patterns is to copy an existing pattern and pasting it to a new location, then modifying the new version. This is an efficient method of creating a number of patterns which are small variations of each other. Select the pattern to be copied and press @cCRTL-@cC (@cCONTROL key and @cC key together). Now select a new (empty?) pattern location and press @cCtrl-@cV or @cCtrl-@cB to @hpaste in the copied notes. Using @cCtrl-@cV will clear the destination location of any notes it already contains whereas @cCtrl-@cB will @hmerge its current contents with the new note information. @C2@tThe pattern display grid@t The third method uses the pattern display grid. Double-click near an instrument/step intersection to add the instrument at that step. If the instrument already exists at that step then it is deleted. This is probably the easiest way of creating patterns. @C2@tPlaying patterns@t Click the @cPATTERN button to enter Pattern Play mode. While the @cSTART button is depressed, the currently selected pattern will play. Clicking on different pattern keys at the bottom of the interface will select a new pattern (@c1,..,@c1@c6) in the current group. If not currently playing, the new pattern is displayed immediately. If a pattern is already playing, the new pattern will play when the current pattern is finished. Selecting a different group also changes the current pattern, i.e. if pattern 7 in group I is selected, then when group 2 is selected the new pattern will be pattern 7 in group II. Sixteen patterns are available in each of the four groups for a total of sixty-four patterns. @C2@tCreating tracks@t Shift-click the @cTRACK button to enter Track Write mode. To start from an empty track, delete anything already there (Shift-click on the @cCLEAR button) if necessary. Now select a pattern to add to the track and click on the enter key as many times as that pattern is required. Then select the next pattern to add and click on the enter key as many times as that pattern is required. E.g., selecting pattern 3 and clicking on the @cENTER button 4 times, then selecting pattern 9 and clicking on the @cENTER button 2 times will result in a track of six measures - 4 of pattern 3 followed by 2 measures of pattern 9. Changes to a track being created can be made. . The currently selected pattern can be heard playing if the @cSTART button is clicked. This enables an audible preview of selected patterns prior to adding them to the track. @C2@tEditing tracks@t Shift-click the @cTRACK button to enter Track Write mode. Track editing is only possible in Track Write mode. Deletions of tracks (or parts of them) require confirmation (via a dialog window). Shift-click on the @cCLEAR button deletes all of the current track. Ctrl-click on the @cCLEAR button deletes the current measure from the track. Shift-Ctrl-click on the @cCLEAR button deletes the rest of the current track, including the current measure. On some systems (including mine!) this actually requires the @cCtrl key as well i.e. @cShift + @cCtrl keys + mouse click. Consider this a minor bug to be fixed sometime. Adding patterns to a track involves selecting a pattern then a click or Shift-click on the @cENTER button. Think of Shift-click on @cENTER as an insert operation into the track before the current measure. An ordinary click on @cENTER is actually a replacement operation i.e. it will replace the current measure with the currently selected pattern. However if you're at the end of the current track this behaves like an append operation - it adds new measures to the end of the track. The currently selected pattern can be heard playing if the @cSTART button is clicked. This enables an audible preview of selected patterns prior to adding them to the track. Different parts of the track can be accessed by clicking on the @cBACK and @cFWD buttons. Shift-click on the @cLAST @cMEAS button to go to the end of the track. Note that this goes to the measure just past the end of the track (ready to write the next measure). An ordinary click on the @cLAST @cMEAS button will momentarily show the last (+1) measure while the button is held down. @C2@tPlaying tracks@t Click on the @cTRACK button to enter the @cTrack @cPlay mode. Then click on the @cSTART button and the current track will be played. Select another track, e.g. track IV, by Shift-clicking a the corresponding track button: @cShift-@cIV. Then enter @cSTART for playing the song. @C2@tTempo changes@t The tempo may be changed in either Track or Pattern mode. The tempo is lowered by Clicking in the tempo dial and then Click-Dragging around. It its increased by Click-Dragging to the left from the tempo dial; its increased by Click-Dragging to the right. Tempo changes can't be written into a track. If saving a track as an midi file, the whole track will have whatever tempo is selected at the time of saving. @C1@tMidi files and sounds@t @C2@tMidi files@t Currently only single track Midi files can be exported. When the @cMidi @cFile@c-@c>@cSave is selected a file browser appears into which the name of the file is entered. Its not crucial but it is a convention to have a `.mid' ending on the filename. When a name has been nominated, the current track will be exported, including midi channel and tempo information i.e. make sure these have the values you want first. Tempo changes can't be written into a track. If saving a track as an midi file, the whole track will have whatever tempo is selected at the time of saving. Volume controls are used when saving a midi file: master, accent and volume controls associated to instruments. @C2@tSound maps@t TK-707 @hsound @hmaps are mappings of the 16 instrument keys to descriptions of their long names, short names, abbreviate name and midi note values. The first (longer) names are used in the pattern grid display, while the second (shorter) names are used under the 16 instrument keys and abbreviations are used under the volume controls. The midi note values need to correspond to values recognized by the sound module being used with TK-707 (either external or built into a sound card). Appropriate values will need to be gleaned from your hardware documentation, however the built in values should work on any module conforming to the General Midi standard. The built-in sound map is supplied as an example in the `707.map' file. A second file, `727.map', is supplied and can be loaded to play with the sounds of Roland's TR-727, the latin percussion counterpart of the TR-707. Note that the 727 mapping won't work on a 707 because it doesn't recognize the necessary range of midi note values. It will work on modules (such as Roland D-110) which do recognize the necessary range. Files with similar layout to the supplied `.map' can be constructed using a text editor and loaded into TK-707 from the @cMap@c-@c>@cLoad @cLocal @cSound @cMap menu. Alternatively, the currently loaded sound map can be edited via an editing interface which is accessed from the @cMap@c-@c>@cEdit @cSound @cMap menu. Just change the name, short name and midi note values as required and press the @cAPPLY button to apply the new settings to TK-707. The Cancel button will revert sound setting to whatever they were before the editing window was started. The @cOK button will apply the currently edited settings and close the editing window. As new midi note values are entered for an instrument, the sound that they access in the midi sound module can be previewed using the @cTEST buttons. To speed the process of finding suitable sounds, three keyboard/mouse shortcuts are provided: * @cShift + @cMouse @cbutton @c1 in the "Note" widget increments the value by 1 and test plays the new sound; * @cCtrl + @cMouse @cbutton @c1 in the "Note" widget decrements the value by 1 and test plays the new sound; * @cMouse @cbutton @c2 in the "Note" widget and dragging up or down continuously decrement or increments the note value and test plays. the new sound. Any editing of sound maps are lost if TK-707 is closed down without saving the sound map. A sound map can be saved using the @cMap@c-@c>@cSave @cSound @cMap menu item. A file suffix of `.map' is recommended (but not absolutely required). @C1@tTernary feelings and poly-rhythms@t @C2@tScale changes@t This feature is related to fast figures and 6/8 figures. Four scales are available on each pattern. Click on the @cSCALE in Pattern Write mode for changing the scale of the current pattern. A small lamp on the left of the musical score score indicates the current scale. For each scale, a vertical bar indicates the duration of a whole note. @C2@tBinary 4/4 measures@t On the first scale, the whole note duration is decomposed into sixteenth. Each sixteenth is associated to the a step of the pattern. There is 16 sixteenth in the pattern if the last step is set to 16, and then the total duration of the pattern is those of a whole note. This is the default scale when creating pattern associated to a 4/4 measure. @C2@tBinary 2/4 measures@t For the second scale, the whole duration is decomposed into eighthes. Each eighthes is associated to a step of the pattern. When the last step is set to 16, there is 16 eighthes in the pattern, and the total duration of the pattern is those of a half whole. When playing such pattern, lamps associated to steps are turning twice faster ! The pattern is then a 2/4 measure. The whole duration should be recovered in a song by inserting two of such patterns. This scale is designated for fast schemes on binary songs. @C2@tTriplets and composed 12/4 measures@t On the third scale, the whole duration is decomposed into four third of a quarter. Each third of a quarter is associated to a step of the pattern. When the last step is set to 12, the total duration of the pattern is those of a whole note . The pattern is then a 12/4 measure. Alternatively, the last could be set to 9 or 15 and then the pattern is a 9/4 or a 15/4 measure, respectively. This pattern is designated for ternary-based measures or for inserting ternary feelings (triplets) into a binary song. @C2@tSextuplets and composed 12/8 measures@t Finally, the fourth scale decomposes the whole duration into two sextuplets (12 times 1/6 of a quarter sextuplets). Each 1/6 of a quarter is associated to a step of the pattern. When the last step is set to 12. , the total duration of the pattern is those of a half whole note. The whole duration should be recovered in a song by inserting two of such patterns. The pattern is then a 12/8 measure. Since each quarter is represented by 6 steps on the pattern, we are able to superpose binary and ternary schemes, i.e. poly-rhythmic effects. The `son-montuno.dat' demonstrates such effects. This pattern is designated for fast schemes on ternary based measures or for inserting ternary feelings (triplets) into a binary song. @C2@tLast step changes@t Remarks that the last step is not automatically changed from 16 to 12 when changing the scale of a pattern. It could be chosen to 15 for the scale 3, for instance. Click on the @cLAST @cSTEP in Pattern Write mode for changing the scale. A new window will appear for last scale selection of the last step associated to the current pattern. @C1@tAccents and flam@t @C2@tAccents@t @C2@tInserting accentuated notes@t There is two available accents: a weak and a strong one. Use the weak accent by clicking on the @cACCENT button in Pattern Step Write or Pattern Tap Write modes. The "accent" text at the bottom of the button becomes orange. Enter then notes as usual: notes are @hweakly @haccentuated and the circle marker is orange, instead of the usual grey. Use the strong accent by clicking a second times on the @cACCENT button. Now, the "accent" text becomes red. Then, enter notes: they are @hstrongly @haccentuated and the circle marker is red too. Then, click a third times on the @cACCENT button. The "accent" text at the bottom of the button comes back to the initial foreground color. When you insert notes, they will be no more accentuated. In Pattern Step Write mode, you could also insert notes by using the @c1,..,@c1@c6 step touchs. Conversely, in Pattern Tap Write, you could also use the instrument keys, e.g. @cCowbell. @C2@tControlling the accent intensity@t The weak and strong accent intensities could be modulated by using the volume control labeled "AC". Moves the label control up and down. When up, accent effects are maximum while when down, there is no more perceptible accent effects. The volume control of accents is global. @C2@tFlam@t @C2@tInserting flams@t Flam is a kick note written ahead of the main beat, and takes on the effect of a @hgrace @hnote. Control-double-click (@cControl-@cButton@c-@c1 two times) near an instrument/step intersection to insert a flam note for this instrument at that step. Instead of the circle marker, a star marker represents the flam note at the selected intersection . There is another way for inserting flams: In Pattern Step Write mode, click the @cSTART button; Select an instrument by shift-clicking on an instrument/step key, e.g. @cShift-@cSnare. Now, as usual, as you click on the instrument/step keys, the selected snare will be added at that step 4. Instead of this, if you control-click on the instrument/step keys, e.g. @cCtrl-@c4, then a snare note with a flam is inserted at step 4. Conversely, in Pattern Tap Write mode, enter a flam by using the @cCtrl-@cCowbell. Flam could be combined with accents, and the associated star marker becomes orange or red, depending on the weak or strong accent. @C2@tControlling the flam interval@t The time between the grace note and its following main note can be varied in the range 0:4. The default value is 2. A zero value means that flam is off. Each pattern has an associated flam interval value. Click on the @cFLAM@c/@cSHUFFLE button in Pattern Write mode for changing the flam interval of the current pattern. A new window will appear for the flam interval selection. @C1@tCommand line options@t @C2@tSynopsis@t @ctk@c7@c0@c7 @coptions@c.@c.@c. @C2@t Options@t -l List the available sound ports -p @var{port} Use this port -small -medium -normalsize Set the size of the window, since some screens are too small for the whole window. -display @var{screen id} Display to use. -use @var{window id}. Id of window in which to embed application. See @cxwininfo. -geometry Initial geometry for window -colormap Colormap for main window -name Name to use for application -sync Use synchronous mode for display server -visual Visual for main window. -h -help Print short help. @C1@tConverting MIDI to audio WAV and MP3::@t This small annex explain how to convert your output midi file to formatted audio file (ex. RIFF WAVE) and compressed MP3 audio files. We assume your have converted your file `salsa.dat' into MIDI format `salsa.mid' in the @ctk@c7@c0@c7 environment . Then enter the commands: @ctimidity @cbolero@c.@cmid @c-@cOw @cbolero@c.@cwav @clame @c-@cb@c1@c2@c8 @cbolero@c.@cwav @cbolero@c.@cmp@c3 and compare the file sizes: @cls @c-@cal @c-@crw@c-@cr@c-@c-@cr@c-@c- @c1 @cmaria @cmartinez @c1@c0@c5@c1 @cMar @c9 @c0@c9@c:@c2@c0 @cson@c-@cmontuno@c.@cmid @c-@crw@c-@cr@c-@c-@cr@c-@c- @c1 @cmaria @cmartinez @c3@c9@c3@c7@c3@c2@c4 @cMar @c9 @c0@c9@c:@c2@c2 @cson@c-@cmontuno@c.@cwav @c-@crw@c-@cr@c-@c-@cr@c-@c- @c1 @cmaria @cmartinez @c4@c9@c3@c0@c5@c6 @cMar @c9 @c0@c9@c:@c2@c2 @cson@c-@cmontuno@c.@cmp@c3 The MIDI file does not contains the sounds. It contains only the score of your music and a MIDI render is required to heat it. The audio WAV and MP3 contains the complete sound and are suitable exports, such as CD-ROM writers. Moreover, the MP3 file is compressed by rougthly a factor ten. The MP3 audio files can be played back by popular mp3 players such as mpg123. The @ctimidity tool is a midi-to-wav converter available at @chttp@c:@c/@c/@cwww@c.@cgoice@c.@cco@c.@cjp@c/@cmember@c/@cmo@c/@ctimidity. The @clame tool is a wav-to-mp3 convarter available at @chttp@c:@c/@c/@cwww@c.@csulaco@c.@corg@c/@cmp@c3. tk707-0.8/check.sh0000644000175100017510000000117110142137110010557 00000000000000#!/bin/sh if test x"$MIDIDUMP" = x""; then echo " mididump: program not found -- test skiped" exit 0 fi status=0 L="binaire-tk triolet-tk tst_scale" have_not_found=no for x in $L; do if test -f $x.mid; then echo "$MIDIDUMP $x.mid | diff $x.valid-dump -" $MIDIDUMP $x.mid | diff $x.valid-dump - if test $? = 0; then echo "$x.mid: ok" else echo "$x.mid: *NO*" status=1 fi else echo "$x.mid: file not found -- test skiped" have_not_found=yes fi done if test $have_not_found = yes; then echo "HINT: you should use tk707 midi output for creating missing files." fi exit $status tk707-0.8/binaire-tk.valid-dump0000644000175100017510000000163610142137110013165 00000000000000binaire-tk.mid: SMF 4 HeaderLen: 6 8 Format: 0 a Tracks: 1 c Divisions: 0x0180 (384) 12 TrackLen: 42 16 [0x00]=0 at=0 me=0xff type=0x51 [0x03]=3 0x07 0xa1 0x20 Tempo=500000 (120 BPM, 1.302 msec/delta) 1d [0x00]=0 at=0 me=0x99 0x11 0x00 Note on (ch=9, note=17, velocity=0) 21 [0x00]=0 at=0 me=0x23 0x7f Note on (ch=9, note=35, velocity=127) 24 [0x03]=3 at=3 me=0x23 0x00 Note on (ch=9, note=35, velocity=0) 27 [0x82,0x7d]=381 at=384 me=0x23 0x7f Note on (ch=9, note=35, velocity=127) 2b [0x03]=3 at=387 me=0x23 0x00 Note on (ch=9, note=35, velocity=0) 2e [0x82,0x7d]=381 at=768 me=0x23 0x7f Note on (ch=9, note=35, velocity=127) 32 [0x03]=3 at=771 me=0x23 0x00 Note on (ch=9, note=35, velocity=0) 35 [0x82,0x7d]=381 at=1152 me=0x23 0x7f Note on (ch=9, note=35, velocity=127) 39 [0x03]=3 at=1155 me=0x23 0x00 Note on (ch=9, note=35, velocity=0) 3c [0x00]=0 at=1155 me=0xff type=0x2f [0x00]=0 End of Track tk707-0.8/triolet-tk.valid-dump0000644000175100017510000000206510142137110013233 00000000000000triolet-tk.mid: SMF 4 HeaderLen: 6 8 Format: 0 a Tracks: 1 c Divisions: 0x0180 (384) 12 TrackLen: 49 16 [0x00]=0 at=0 me=0xff type=0x51 [0x03]=3 0x07 0xa1 0x20 Tempo=500000 (120 BPM, 1.302 msec/delta) 1d [0x00]=0 at=0 me=0x99 0x11 0x00 Note on (ch=9, note=17, velocity=0) 21 [0x00]=0 at=0 me=0x38 0x7f Note on (ch=9, note=56, velocity=127) 24 [0x03]=3 at=3 me=0x38 0x00 Note on (ch=9, note=56, velocity=0) 27 [0x82,0x7d]=381 at=384 me=0x38 0x7f Note on (ch=9, note=56, velocity=127) 2b [0x03]=3 at=387 me=0x38 0x00 Note on (ch=9, note=56, velocity=0) 2e [0x82,0x7d]=381 at=768 me=0x38 0x7f Note on (ch=9, note=56, velocity=127) 32 [0x03]=3 at=771 me=0x38 0x00 Note on (ch=9, note=56, velocity=0) 35 [0x81,0x7d]=253 at=1024 me=0x38 0x7f Note on (ch=9, note=56, velocity=127) 39 [0x03]=3 at=1027 me=0x38 0x00 Note on (ch=9, note=56, velocity=0) 3c [0x81,0x7d]=253 at=1280 me=0x38 0x7f Note on (ch=9, note=56, velocity=127) 40 [0x03]=3 at=1283 me=0x38 0x00 Note on (ch=9, note=56, velocity=0) 43 [0x00]=0 at=1283 me=0xff type=0x2f [0x00]=0 End of Track tk707-0.8/tst_scale.valid-dump0000644000175100017510000000163510142137110013120 00000000000000tst_scale.mid: SMF 4 HeaderLen: 6 8 Format: 0 a Tracks: 1 c Divisions: 0x0180 (384) 12 TrackLen: 42 16 [0x00]=0 at=0 me=0xff type=0x51 [0x03]=3 0x07 0xa1 0x20 Tempo=500000 (120 BPM, 1.302 msec/delta) 1d [0x00]=0 at=0 me=0x99 0x11 0x00 Note on (ch=9, note=17, velocity=0) 21 [0x00]=0 at=0 me=0x38 0x7f Note on (ch=9, note=56, velocity=127) 24 [0x03]=3 at=3 me=0x38 0x00 Note on (ch=9, note=56, velocity=0) 27 [0x82,0x7d]=381 at=384 me=0x38 0x7f Note on (ch=9, note=56, velocity=127) 2b [0x03]=3 at=387 me=0x38 0x00 Note on (ch=9, note=56, velocity=0) 2e [0x82,0x7d]=381 at=768 me=0x38 0x7f Note on (ch=9, note=56, velocity=127) 32 [0x03]=3 at=771 me=0x38 0x00 Note on (ch=9, note=56, velocity=0) 35 [0x82,0x7d]=381 at=1152 me=0x38 0x7f Note on (ch=9, note=56, velocity=127) 39 [0x03]=3 at=1155 me=0x38 0x00 Note on (ch=9, note=56, velocity=0) 3c [0x00]=0 at=1155 me=0xff type=0x2f [0x00]=0 End of Track tk707-0.8/INSTALL.texi0000644000175100017510000003101010142137110011142 00000000000000@c @c This file is part of tk707. @c @c Copyright (C) 2000, 2001, 2002, 2003, 2004 Chris Willing and Pierre Saramito @c @c tk707 is free software; you can redistribute it and/or modify @c it under the terms of the GNU General Public License as published by @c the Free Software Foundation; either version 2 of the License, or @c (at your option) any later version. @c @c Foobar is distributed in the hope that it will be useful, @c but WITHOUT ANY WARRANTY; without even the implied warranty of @c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @c GNU General Public License for more details. @c @c You should have received a copy of the GNU General Public License @c along with Foobar; if not, write to the Free Software @c Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @c @c ------------------------------------------------------------- @c Installation @c ------------------------------------------------------------- @node Installation,,, Top @menu * Building tk707:: * Configure options:: * Install:: * Running:: * Building the documentation:: * Comments and bugs corrections:: * My card has no midi render:: @end menu @cindex Linux system @cindex tcl/tk libraries @cindex Alsa audio library @cindex midi render The TK-707 installation requires: @itemize @bullet @item C compiler: to compile the source code. @item TCL/TK version 8.0 or later. Tested up to TCL/TK 8.3. Available free from @url{http://www.scriptics.com} @item Alsa: audio installation (at least version 0.5.0), available free from @url{http://www.alsa-project.org} @item a sound card supported by Alsa. @end itemize and, at least one of these MIDI renders: @itemize @bullet @item an internal MIDI render hardware in your card. @item an external MIDI module with drum sounds (Tested Roland D-110 and TR-707). @item or any Alsa supported basic sound card together with the @code{timidity} or the @code{iiwusynth} MIDI synthesis software installed. @end itemize Clearly, if you have neither a MIDI card nor an external MIDI module, you can successfully manage MIDI files by a MIDI software sequencer. See below. So far tested on @itemize @bullet @item Linux - Debian 3.0 (kernel 2.4.18) with SB Live ! sound card @item Linux - Slackware 7.0 (kernel 2.2.14) with ESS1868 sound card @item Linux - Mandrak (kernel 2.2.13-7mdk) @item Linux - Redhat 6.0 (kernel 2.2.5) with Ensonic 1370 sound card @end itemize @section Building @code{tk707} @node Building tk707,,, Installation @example @cartouche configure make @end cartouche @end example The program consists of Tcl/Tk for the gui and C code for outputting the midi data. The Tcl/Tk code is compiled with the C code. The compiled target @code{tk707} is a self contained binary. @c -------------------------------------------------------------------- @section Configure options @node Configure options,,, Installation @c -------------------------------------------------------------------- During the configuration step, you could also provide to the @code{configure} script some non-standard locations of the Alsa or Tcl/Tk libraries. On my Debian 3.0 installation, I use: @example configure --with-tcl-includes=/usr/include/tcl8.3 @end example A more general example writes: @example configure --with-alsa-prefix=/usr/sound/lib \ --with-alsa-inc-prefix=/usr/sound/include \ --with-tcl-includes=/new/include --with-tcl-libs=/usr/new/lib \ --with-tk-includes=/usr/new/include --with-tk-libs=/usr/new/lib make @end example Enter @code{configure --help} for a complete list of available options. @c In a previous method, the C code was compiled and becomes the interpreter for @c the Tcl/Tk code which was left as the executable script. @c @c For normal execution there is little or no perceptible difference in @c performance because since version 8.0 of Tcl/Tk the script is converted @c to byte-code prior to execution. I have left the second method because during @c development changes can be made to the Tcl/Tk script and then run without @c a recompilation. It could also be useful to send compiler options to the @code{configure} script. @example CFLAGS="-O0" configure make @end example Indeed, by default, @code{gcc} compiler optimization flags are set to the maximum, i.e @code{-O9}. This is not supported for old @code{gcc} versions, where this feature failed on some combinations of Linux kernel versions and @code{gcc} version (e.g. Mandrake with kernel @code{Linux-2.2.13-7mdk} and @code{pgcc-2.91.66}). Either update our environment or use lower optimization flags. @c -------------------------------------------------------------------- @section Installation @node Install,,, Installation @c -------------------------------------------------------------------- @example @cartouche make install @end cartouche @end example The default installation directory is @file{/usr/local/bin} but this can be changed by using an extra configuration option: @example configure --prefix=/users/angela/music make install @end example will build and install @code{tk707} into the installation directory @file{/users/angela/music/bin} as @code{tk707}. @section Running @node Running,,, Installation If installation was done as in previous step, and assuming the installation directory is in your execution path, then the program is started with @example @cartouche tk707 @end cartouche @end example @cindex demonstration file @file{demo.dat} @cindex @code{File->Load} menu A sample song is in @file{demo.dat} which can be loaded from the @code{File->Load Demo} menu. After loading, click the @key{START} button and you should hear something if your hardware is set up correctly. @cindex midi output port When @code{tk707} is first started, a suitable output port needs to be selected. A selection gui comes up before the main TK-707 window to make this choice. The list on the right hand side should contain one or more entries from which to choose (don't worry about the input port list on the left). Double click on the available output port you want to use, and it should be entered into the Selected Output box near the bottom. Now you can click on the OK button to use the selected output port for this invocation of TK-707. You can also click the SAVE button first to save this information (in @file{~/.tk707rc}) so that you don't need to make the selection next time you run TK-707. Note that @file{~/.tk707rc} is a plain text file which can be edited by hand if you want to. Alternatively, if you know what port you want to use, run @code{tk707} with the @code{-p} option, e.g. @example tk707 -p 65:0 @end example Use of the @code{-p} option overrides any setting in the @file{~/.tk707rc} file. A list of suitable ports can also be obtained with the @code{-l} option, e.g. @example tk707 -l @end example @c -------------------------------------------------------------------- @section Building the documentation @node Building the documentation,,, Installation @c -------------------------------------------------------------------- @cindex file @file{tk707.info} documentation The documentation in @file{.info} format, suitable for emacs, is contained in the distribution. You can browse it: @example @cartouche info -f tk707.info @end cartouche @end example @cindex file @file{tk707.html} documentation If you have the @code{texi2html} tool, the @code{html} version has been generated during the installation: @example @cartouche netscape tk707_toc.html @end cartouche @end example @cindex file @file{tk707.dvi} documentation If you have @TeX{} installed, a pretty version of the documentation is available: @example @cartouche make dvi xdvi tk707.dvi @end cartouche @end example @cindex file @file{tk707.ps} documentation and also for printing: @example @cartouche dvips tk707.dvi -o tk707.ps lpr tk707.ps @end cartouche @end example Now, read the documentation and enjoy @code{tk707}. @c -------------------------------------------------------------------- @section Comments, bug corrections and future versions @node Comments and bugs corrections,,, Installation @c -------------------------------------------------------------------- We are keen for people to try it and send comments and suggestions. Please, send comments, corrections, additions, bugs etc.. to @email{chris@@vislab.usyd.edu.au} and @email{pierre.saramito@@imag.fr} Future versions from the TK-707 home page: @itemize @bullet @item Australie: @url{http://www.vislab.usyd.edu.au/staff/chris/tk707} @item Europe: @url{http://www-lmc.imag.fr/lmc-edp/Pierre.Saramito/tk707} @end itemize @c -------------------------------------------------------------------- @section My card has no midi render... @node My card has no midi render,,, Installation @c -------------------------------------------------------------------- @cindex midi render: @code{timidity} software @cindex Alsa audio library @cindex sound card without midi Don't worry, you are able to hear midi file with a basic audio sound card: the @code{timidity} code is able to provides an Alsa sequencer interface which receives events and plays it in real-time. @code{timidity} is a public domain code available at @url{http://www.goice.co.jp/member/mo/timidity}. On this mode, @code{timidity} works purely as software (real-time) midi render. There is no scheduling routine in this interface, since all scheduling is done by Alsa sequencer core. So, download @code{timidity} (at least version 2.10.0) and install as follow: @example configure --enable-server --enable-alsaseq --enable-alsatest \ --enable-audio=alsa,wav,au,aiff,list,oss make install @end example @cindex sound patch files (GUS) @code{timidity} software emulates the best sound cards. It requires some Gravis Ultra Sound (GUS) patches describing musical instruments. The public domain EAW sound patch suite can be downloaded at @url{http://www.stardate.bc.ca/eawpatches/html/default.htm} This his a complete and high quality library, updated frequently. Especially, download the @code{gsdrums} percussion instrument library. Install these files in the @code{timidity} directory, usually @code{/usr/share/timidity}. For invoking Alsa sequencer interface, run @code{timidity} as follows: @example timidity -iA -B2,8 & @end example The fragment size can be adjustable. The smaller number gives better real-time response. Then @code{timidity} shows new port numbers which were newly created (128:0 and 128:1 below). Finally, run @code{tk707}: @example tk707 -p 128:0 @end example The @code{timidity} render is very flexible and rich, since you can add any instrument in your library by using GUS patch files. This modular approach is not always supported by all hardware renders. Thus, the software MIDI render solution is fruitful, and could be installed, even if you have a hardware or external MIDI solution. @c TO BE TESTED !!! @c ================ @c @c -------------------------------------------------------------------- @c @section I have no sound card at all... @c @node I have no sound card at all,,, Installation @c @c -------------------------------------------------------------------- @c @c @cindex PC Speaker @c @c Don't worry, you are able to hear midi files generated by @code{tk707} ! @c Indeed, all computer have an internal PC Speaker, usually used for the beep, @c and you will use it for more elaborated sounds. @c @c This procedure has been tested on a @code{2.2.8} kernel version. @c Nevertheless, patches exists for others kernel versions. @c @enumerate @c @item Fist, download the additional PC Speaker module and kernel patch: @c @itemize @c @item @url{ftp.comunit.net/pub/soft/kernel/pcsndrv-1.2.tgz} @c @item @url{ftp.comunit.net/pub/soft/kernel/patch-pcsp-soundcore-2.2.8.gz} @c @end itemize @c @c @item Second, configure your kernel with modules, sound and @c the @emph{Internal PC speaker support} (@code{CONFIG_PCSP}) as a module. @c Install it as usual, and install modules too. @c Reboot; then your new kernel is running, @c and you are be able to hear @file{.au} and other audio files. @c See the @code{INSTALL} file for details on the @code{pcsndrv-1.2} @c tools, such as @code{vplay}. @c @c @item Current Alsa version @code{0.5.9c} at this date do not recognize @c the PC Speaker as a sound card... @c so, configure Alsa with the @code{--with-cards=snd-card-dummy} option @c and install it. @c @c @item Next, configure and install @code{timidity} as a Alsa MIDI render @c (See the previous paragraph). @c This code will convert MIDI files to audio format, and then @c send it to your Internal Speaker. @c @c @item Finally, configure and install @code{tk707} as usual. @c @c @c @end enumerate tk707-0.8/gpl.texi0000644000175100017510000004362710142137110010637 00000000000000@appendix GNU General Public License @center Version 2, June 1991 @display Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @unnumberedsec 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. @iftex @unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION @end iftex @ifinfo @center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION @end ifinfo @enumerate 0 @item 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. @item 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. @item 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: @enumerate a @item You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. @item 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. @item 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.) @end enumerate 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. @item 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: @enumerate a @item 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, @item 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, @item 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.) @end enumerate 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. @item 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. @item 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. @item 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. @item 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. @item 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. @item 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. @item 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. @iftex @heading NO WARRANTY @end iftex @ifinfo @center NO WARRANTY @end ifinfo @item 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. @item 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 enumerate @iftex @heading END OF TERMS AND CONDITIONS @end iftex @ifinfo @center END OF TERMS AND CONDITIONS @end ifinfo @page @unnumberedsec 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. @smallexample @var{one line to give the program's name and an idea of what it does.} Copyright (C) 19@var{yy} @var{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., 675 Mass Ave, Cambridge, MA 02139, USA. @end smallexample 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: @smallexample Gnomovision version 69, Copyright (C) 19@var{yy} @var{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. @end smallexample The hypothetical commands @samp{show w} and @samp{show c} should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than @samp{show w} and @samp{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: @smallexample @group Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. @var{signature of Ty Coon}, 1 April 1989 Ty Coon, President of Vice @end group @end smallexample 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. tk707-0.8/BUGS0000644000175100017510000000052210142137110007630 00000000000000BUGS ==== Well, well, they must be there... * gcc-3.x and later no longer accept multi-line string literals. Such strings are generated from tcl to C by the tcl2c.c converter. gcc-2.x or previous versions shoud be used. * Bypass fader : should use the full volume level, while using faders reservs some volume for accents. tk707-0.8/bootstrap0000755000175100017510000000011010142137110011101 00000000000000#!/bin/sh set -x aclocal autoheader autoconf automake -a --gnu Makefile tk707-0.8/tk707.info0000644000175100017510000016306710142143464010725 00000000000000This is tk707.info, produced by makeinfo version 4.7 from tk707.texi. This program is intended to mimic the operation of Roland's TR-707 Rhythm Composer (successor to the TR-606 and precursor to TR-808 and TR-909). Copyright (C) 2000, 2001 by Chris Willing and Pierre Saramito. All rights reserved. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.  File: tk707.info, Node: Top, Up: (dir) The TK-707 Rhythm Composer ************************** This document is a brief statement of requirements to run tk707 and a very introductory explanation of how to run it. This might be just enough for people not familiar with how these machines work but is not intended to be an exhaustive explanation. INFO-DIR-SECTION Sound START-INFO-DIR-ENTRY * tk707: (tk707). The TK-707 Rhythm Composer. END-INFO-DIR-ENTRY * Menu: * Installation:: * Terminology:: * Demonstrations:: * Creating patterns:: * Playing patterns:: * Creating tracks:: * Editing tracks:: * Playing tracks:: * Sound maps:: * Midi files:: * Tempo changes:: * Last step changes:: * Scale changes:: * Accents and flam:: * Command line options:: * Converting MIDI to audio WAV and MP3:: * Copying:: * Index:: 1 Installation **************  File: tk707.info, Node: Installation, Up: Top * Menu: * Building tk707:: * Configure options:: * Install:: * Running:: * Building the documentation:: * Comments and bugs corrections:: * My card has no midi render:: The TK-707 installation requires: * C compiler: to compile the source code. * TCL/TK version 8.0 or later. Tested up to TCL/TK 8.3. Available free from `http://www.scriptics.com' * Alsa: audio installation (at least version 0.5.0), available free from `http://www.alsa-project.org' * a sound card supported by Alsa. and, at least one of these MIDI renders: * an internal MIDI render hardware in your card. * an external MIDI module with drum sounds (Tested Roland D-110 and TR-707). * or any Alsa supported basic sound card together with the `timidity' or the `iiwusynth' MIDI synthesis software installed. Clearly, if you have neither a MIDI card nor an external MIDI module, you can successfully manage MIDI files by a MIDI software sequencer. See below. So far tested on * Linux - Debian 3.0 (kernel 2.4.18) with SB Live ! sound card * Linux - Slackware 7.0 (kernel 2.2.14) with ESS1868 sound card * Linux - Mandrak (kernel 2.2.13-7mdk) * Linux - Redhat 6.0 (kernel 2.2.5) with Ensonic 1370 sound card 1.1 Building `tk707' ====================  File: tk707.info, Node: Building tk707, Up: Installation configure make The program consists of Tcl/Tk for the gui and C code for outputting the midi data. The Tcl/Tk code is compiled with the C code. The compiled target `tk707' is a self contained binary. 1.2 Configure options =====================  File: tk707.info, Node: Configure options, Up: Installation During the configuration step, you could also provide to the `configure' script some non-standard locations of the Alsa or Tcl/Tk libraries. On my Debian 3.0 installation, I use: configure --with-tcl-includes=/usr/include/tcl8.3 A more general example writes: configure --with-alsa-prefix=/usr/sound/lib \ --with-alsa-inc-prefix=/usr/sound/include \ --with-tcl-includes=/new/include --with-tcl-libs=/usr/new/lib \ --with-tk-includes=/usr/new/include --with-tk-libs=/usr/new/lib make Enter `configure --help' for a complete list of available options. It could also be useful to send compiler options to the `configure' script. CFLAGS="-O0" configure make Indeed, by default, `gcc' compiler optimization flags are set to the maximum, i.e `-O9'. This is not supported for old `gcc' versions, where this feature failed on some combinations of Linux kernel versions and `gcc' version (e.g. Mandrake with kernel `Linux-2.2.13-7mdk' and `pgcc-2.91.66'). Either update our environment or use lower optimization flags. 1.3 Installation ================  File: tk707.info, Node: Install, Up: Installation make install The default installation directory is `/usr/local/bin' but this can be changed by using an extra configuration option: configure --prefix=/users/angela/music make install will build and install `tk707' into the installation directory `/users/angela/music/bin' as `tk707'. 1.4 Running ===========  File: tk707.info, Node: Running, Up: Installation If installation was done as in previous step, and assuming the installation directory is in your execution path, then the program is started with tk707 A sample song is in `demo.dat' which can be loaded from the `File->Load Demo' menu. After loading, click the button and you should hear something if your hardware is set up correctly. When `tk707' is first started, a suitable output port needs to be selected. A selection gui comes up before the main TK-707 window to make this choice. The list on the right hand side should contain one or more entries from which to choose (don't worry about the input port list on the left). Double click on the available output port you want to use, and it should be entered into the Selected Output box near the bottom. Now you can click on the OK button to use the selected output port for this invocation of TK-707. You can also click the SAVE button first to save this information (in `~/.tk707rc') so that you don't need to make the selection next time you run TK-707. Note that `~/.tk707rc' is a plain text file which can be edited by hand if you want to. Alternatively, if you know what port you want to use, run `tk707' with the `-p' option, e.g. tk707 -p 65:0 Use of the `-p' option overrides any setting in the `~/.tk707rc' file. A list of suitable ports can also be obtained with the `-l' option, e.g. tk707 -l 1.5 Building the documentation ==============================  File: tk707.info, Node: Building the documentation, Up: Installation The documentation in `.info' format, suitable for emacs, is contained in the distribution. You can browse it: info -f tk707.info If you have the `texi2html' tool, the `html' version has been generated during the installation: netscape tk707_toc.html If you have TeX installed, a pretty version of the documentation is available: make dvi xdvi tk707.dvi and also for printing: dvips tk707.dvi -o tk707.ps lpr tk707.ps Now, read the documentation and enjoy `tk707'. 1.6 Comments, bug corrections and future versions =================================================  File: tk707.info, Node: Comments and bugs corrections, Up: Installation We are keen for people to try it and send comments and suggestions. Please, send comments, corrections, additions, bugs etc.. to and Future versions from the TK-707 home page: * Australie: `http://www.vislab.usyd.edu.au/staff/chris/tk707' * Europe: `http://www-lmc.imag.fr/lmc-edp/Pierre.Saramito/tk707' 1.7 My card has no midi render... =================================  File: tk707.info, Node: My card has no midi render, Up: Installation Don't worry, you are able to hear midi file with a basic audio sound card: the `timidity' code is able to provides an Alsa sequencer interface which receives events and plays it in real-time. `timidity' is a public domain code available at `http://www.goice.co.jp/member/mo/timidity'. On this mode, `timidity' works purely as software (real-time) midi render. There is no scheduling routine in this interface, since all scheduling is done by Alsa sequencer core. So, download `timidity' (at least version 2.10.0) and install as follow: configure --enable-server --enable-alsaseq --enable-alsatest \ --enable-audio=alsa,wav,au,aiff,list,oss make install `timidity' software emulates the best sound cards. It requires some Gravis Ultra Sound (GUS) patches describing musical instruments. The public domain EAW sound patch suite can be downloaded at `http://www.stardate.bc.ca/eawpatches/html/default.htm' This his a complete and high quality library, updated frequently. Especially, download the `gsdrums' percussion instrument library. Install these files in the `timidity' directory, usually `/usr/share/timidity'. For invoking Alsa sequencer interface, run `timidity' as follows: timidity -iA -B2,8 & The fragment size can be adjustable. The smaller number gives better real-time response. Then `timidity' shows new port numbers which were newly created (128:0 and 128:1 below). Finally, run `tk707': tk707 -p 128:0 The `timidity' render is very flexible and rich, since you can add any instrument in your library by using GUS patch files. This modular approach is not always supported by all hardware renders. Thus, the software MIDI render solution is fruitful, and could be installed, even if you have a hardware or external MIDI solution. 2 Getting started *****************  File: tk707.info, Node: Terminology, Up: Top 2.1 Terminology =============== Four song _tracks_ are available. You can think of a track as a song. Tracks are labeled by roman numbers: I, II, III and IV. Each track is made of _patterns_, each with 16 _steps_.s You could think of a pattern as a bar of music. At each step in a pattern, any of the available instruments can be set to play. Once you've made the patterns you want to use, you can combine them in any order into any of the four available tracks. Any particular pattern can be used in any of the tracks as many times as desired. There are 64 patterns available in 4 _groups_ of 16 each. Pattern groups are labeled by letters: A, B, C and D. The 4 groups are not at all related to the 4 tracks. Patterns from any group are available to any track.  File: tk707.info, Node: Demonstrations, Up: Top 2.2 Demonstrations ================== Some sample patterns and tracks are in `demo.dat' which can be loaded from the `File->Demo' menu. Something exists in each track of this file so click the button and you should hear something if your hardware is set up correctly. Part of this set up is the _midi channel_; the default midi channel is 10 (the default for D-110 drum sounds). You can change the output midi channel via the Midi menu or Shift-click on the button; a new window will appear for midi channel selection. A second demonstration file shows the alternate _727_ latin sound map. With this sound map, the software emulates a Roland _727_ latin percussion rhythm composer. Loaded from the `File->Demo' menu the file `son-montuno.dat', and then load the latin percussion sound map `727.map' from the `Map->Load Standard Sound Map' menu. Set also the tempo to 200 bpm. Then, click the button. An alternate sound map for latin percussion is `7c7.map'. The `c' in `7c7' stands for cuba(1). can be loaded in the `Map->Load Standard Sound Map'. This file has no Roland latin percussion rhythm composer equivalent, and has been designed for our pleasure. Click the button and you will hear the file `son-montuno.dat' with another feeling. Finally, a brazilian sound map `7b7.map' is presented. The `b' in `7b7' stands for brazil(2) and can be loaded together with the `carioca.dat' demonstration. A good tempo is 220 bpm for the samba carioca. There is no more demonstration file for these sound maps, since it is time for you to compose your music ! ---------- Footnotes ---------- (1) An excellent introduction to afro-cuban rhythms can be founded in 'Les tumbaos de la salsa', by Daniel Genton, Editions Musicales Francaise, 2000. email: Topdjembe@hotmail.com. (2) This sound map is indented for batucada music for carnaval.  File: tk707.info, Node: Creating patterns, Up: Top 2.3 Creating patterns ===================== 2.3.1 Writing pattern --------------------- Shift-click the button to enter Pattern Write mode. While is not pressed, the 16 instrument/step keys at the bottom of the interface are dual purposed. Clicking on a key changes which pattern, 1-16, (within the current group) is selected for writing. A small lamp above one of the _group pattern_ buttons indicates the current group. The current group may be changed by clicking group pattern button , , or . Shift-clicking on the _instrument/step_ keys selects which instrument is selected to be written into the current pattern. Click the button; now as you click of the instrument/step keys, the selected instrument, e.g. , will be added at that step. If the selected instrument has already been set at that step, then clicking there will remove it. To select another instrument, press the button then select another instrument using Shift-click on the appropriate instrument/step key. Continue adding instruments at the required steps to complete the pattern. Make all the patterns you will need for a new song. A pattern may be cleared of all notes while in Pattern Write mode; clicking on the button will raise a dialog window to confirm clearing of the current pattern. 2.3.2 Copy/paste and copy/merge ------------------------------- Another method of creating new patterns is to copy an existing pattern and pasting it to a new location, then modifying the new version. This is an efficient method of creating a number of patterns which are small variations of each other. Select the pattern to be copied and press - ( key and key together). Now select a new (empty?) pattern location and press - or - to _paste_ in the copied notes. Using - will clear the destination location of any notes it already contains whereas - will _merge_ its current contents with the new note information. 2.3.3 The pattern display grid ------------------------------ The third method uses the pattern display grid. Double-click near an instrument/step intersection to add the instrument at that step. If the instrument already exists at that step then it is deleted. This is probably the easiest way of creating patterns.  File: tk707.info, Node: Playing patterns, Up: Top 2.4 Playing patterns ==================== Click the button to enter Pattern Play mode. While the button is depressed, the currently selected pattern will play. Clicking on different pattern keys at the bottom of the interface will select a new pattern (<1>,..,<16>) in the current group. If not currently playing, the new pattern is displayed immediately. If a pattern is already playing, the new pattern will play when the current pattern is finished. Selecting a different group also changes the current pattern, i.e. if pattern 7 in group I is selected, then when group 2 is selected the new pattern will be pattern 7 in group II. Sixteen patterns are available in each of the four groups for a total of sixty-four patterns.  File: tk707.info, Node: Creating tracks, Up: Top 2.5 Creating tracks =================== Shift-click the button to enter Track Write mode. To start from an empty track, delete anything already there (Shift-click on the button) if necessary. Now select a pattern to add to the track and click on the enter key as many times as that pattern is required. Then select the next pattern to add and click on the enter key as many times as that pattern is required. E.g., selecting pattern 3 and clicking on the button 4 times, then selecting pattern 9 and clicking on the button 2 times will result in a track of six measures - 4 of pattern 3 followed by 2 measures of pattern 9. Changes to a track being created can be made. *Note Editing tracks::. The currently selected pattern can be heard playing if the button is clicked. This enables an audible preview of selected patterns prior to adding them to the track.  File: tk707.info, Node: Editing tracks, Up: Top 2.6 Editing tracks ================== Shift-click the button to enter Track Write mode. Track editing is only possible in Track Write mode. Deletions of tracks (or parts of them) require confirmation (via a dialog window). Shift-click on the button deletes all of the current track. Ctrl-click on the button deletes the current measure from the track. Shift-Ctrl-click on the button deletes the rest of the current track, including the current measure. On some systems (including mine!) this actually requires the key as well i.e. + keys + mouse click. Consider this a minor bug to be fixed sometime. Adding patterns to a track involves selecting a pattern then a click or Shift-click on the button. Think of Shift-click on as an insert operation into the track before the current measure. An ordinary click on is actually a replacement operation i.e. it will replace the current measure with the currently selected pattern. However if you're at the end of the current track this behaves like an append operation - it adds new measures to the end of the track. The currently selected pattern can be heard playing if the button is clicked. This enables an audible preview of selected patterns prior to adding them to the track. Different parts of the track can be accessed by clicking on the and buttons. Shift-click on the button to go to the end of the track. Note that this goes to the measure just past the end of the track (ready to write the next measure). An ordinary click on the button will momentarily show the last (+1) measure while the button is held down.  File: tk707.info, Node: Playing tracks, Up: Top 2.7 Playing tracks ================== Click on the button to enter the `Track Play' mode. Then click on the button and the current track will be played. Select another track, e.g. track IV, by Shift-clicking a the corresponding track button: -. Then enter for playing the song.  File: tk707.info, Node: Tempo changes, Up: Top 2.8 Tempo changes ================= The tempo may be changed in either Track or Pattern mode. The tempo is lowered by Clicking in the tempo dial and then Click-Dragging around. It its increased by Click-Dragging to the left from the tempo dial; its increased by Click-Dragging to the right. Tempo changes can't be written into a track. If saving a track as an midi file, the whole track will have whatever tempo is selected at the time of saving. 3 Midi files and sounds ***********************  File: tk707.info, Node: Midi files, Up: Top 3.1 Midi files ============== Currently only single track Midi files can be exported. When the `Midi File->Save' is selected a file browser appears into which the name of the file is entered. Its not crucial but it is a convention to have a `.mid' ending on the filename. When a name has been nominated, the current track will be exported, including midi channel and tempo information i.e. make sure these have the values you want first. Tempo changes can't be written into a track. If saving a track as an midi file, the whole track will have whatever tempo is selected at the time of saving. Volume controls are used when saving a midi file: master, accent and volume controls associated to instruments.  File: tk707.info, Node: Sound maps, Up: Top 3.2 Sound maps ============== TK-707 _sound maps_ are mappings of the 16 instrument keys to descriptions of their long names, short names, abbreviate name and midi note values. The first (longer) names are used in the pattern grid display, while the second (shorter) names are used under the 16 instrument keys and abbreviations are used under the volume controls. The midi note values need to correspond to values recognized by the sound module being used with TK-707 (either external or built into a sound card). Appropriate values will need to be gleaned from your hardware documentation, however the built in values should work on any module conforming to the General Midi standard. The built-in sound map is supplied as an example in the `707.map' file. A second file, `727.map', is supplied and can be loaded to play with the sounds of Roland's TR-727, the latin percussion counterpart of the TR-707. Note that the 727 mapping won't work on a 707 because it doesn't recognize the necessary range of midi note values. It will work on modules (such as Roland D-110) which do recognize the necessary range. Files with similar layout to the supplied `.map' can be constructed using a text editor and loaded into TK-707 from the `Map->Load Local Sound Map' menu. Alternatively, the currently loaded sound map can be edited via an editing interface which is accessed from the `Map->Edit Sound Map' menu. Just change the name, short name and midi note values as required and press the button to apply the new settings to TK-707. The Cancel button will revert sound setting to whatever they were before the editing window was started. The button will apply the currently edited settings and close the editing window. As new midi note values are entered for an instrument, the sound that they access in the midi sound module can be previewed using the buttons. To speed the process of finding suitable sounds, three keyboard/mouse shortcuts are provided: * + in the "Note" widget increments the value by 1 and test plays the new sound; * + in the "Note" widget decrements the value by 1 and test plays the new sound; * in the "Note" widget and dragging up or down continuously decrement or increments the note value and test plays. the new sound. Any editing of sound maps are lost if TK-707 is closed down without saving the sound map. A sound map can be saved using the `Map->Save Sound Map' menu item. A file suffix of `.map' is recommended (but not absolutely required). 4 Ternary feelings and poly-rhythms ***********************************  File: tk707.info, Node: Scale changes, Up: Top 4.1 Scale changes ================= This feature is related to fast figures and 6/8 figures. Four scales are available on each pattern. Click on the in Pattern Write mode for changing the scale of the current pattern. A small lamp on the left of the musical score score indicates the current scale. For each scale, a vertical bar indicates the duration of a whole note. 4.1.1 Binary 4/4 measures ------------------------- On the first scale, the whole note duration is decomposed into sixteenth. Each sixteenth is associated to the a step of the pattern. There is 16 sixteenth in the pattern if the last step is set to 16, and then the total duration of the pattern is those of a whole note. This is the default scale when creating pattern associated to a 4/4 measure. 4.1.2 Binary 2/4 measures ------------------------- For the second scale, the whole duration is decomposed into eighthes. Each eighthes is associated to a step of the pattern. When the last step is set to 16, there is 16 eighthes in the pattern, and the total duration of the pattern is those of a half whole. When playing such pattern, lamps associated to steps are turning twice faster ! The pattern is then a 2/4 measure. The whole duration should be recovered in a song by inserting two of such patterns. This scale is designated for fast schemes on binary songs. 4.1.3 Triplets and composed 12/4 measures ----------------------------------------- On the third scale, the whole duration is decomposed into four third of a quarter. Each third of a quarter is associated to a step of the pattern. When the last step is set to 12, the total duration of the pattern is those of a whole note *note Last step changes::. The pattern is then a 12/4 measure. Alternatively, the last could be set to 9 or 15 and then the pattern is a 9/4 or a 15/4 measure, respectively. This pattern is designated for ternary-based measures or for inserting ternary feelings (triplets) into a binary song. 4.1.4 Sextuplets and composed 12/8 measures ------------------------------------------- Finally, the fourth scale decomposes the whole duration into two sextuplets (12 times 1/6 of a quarter sextuplets). Each 1/6 of a quarter is associated to a step of the pattern. When the last step is set to 12. *Note Last step changes::, the total duration of the pattern is those of a half whole note. The whole duration should be recovered in a song by inserting two of such patterns. The pattern is then a 12/8 measure. Since each quarter is represented by 6 steps on the pattern, we are able to superpose binary and ternary schemes, i.e. poly-rhythmic effects. The `son-montuno.dat' demonstrates such effects. This pattern is designated for fast schemes on ternary based measures or for inserting ternary feelings (triplets) into a binary song.  File: tk707.info, Node: Last step changes, Up: Top 4.2 Last step changes ===================== Remarks that the last step is not automatically changed from 16 to 12 when changing the scale of a pattern. It could be chosen to 15 for the scale 3, for instance. Click on the in Pattern Write mode for changing the scale. A new window will appear for last scale selection of the last step associated to the current pattern. 5 Accents and flam ******************  File: tk707.info, Node: Accents and flam, Up: Top 5.1 Accents =========== 5.1.1 Inserting accentuated notes --------------------------------- There is two available accents: a weak and a strong one. Use the weak accent by clicking on the button in Pattern Step Write or Pattern Tap Write modes. The "accent" text at the bottom of the button becomes orange. Enter then notes as usual: notes are _weakly accentuated_ and the circle marker is orange, instead of the usual grey. Use the strong accent by clicking a second times on the button. Now, the "accent" text becomes red. Then, enter notes: they are _strongly accentuated_ and the circle marker is red too. Then, click a third times on the button. The "accent" text at the bottom of the button comes back to the initial foreground color. When you insert notes, they will be no more accentuated. In Pattern Step Write mode, you could also insert notes by using the <1>,..,<16> step touchs. Conversely, in Pattern Tap Write, you could also use the instrument keys, e.g. . 5.1.2 Controlling the accent intensity -------------------------------------- The weak and strong accent intensities could be modulated by using the volume control labeled "AC". Moves the label control up and down. When up, accent effects are maximum while when down, there is no more perceptible accent effects. The volume control of accents is global. 5.2 Flam ======== 5.2.1 Inserting flams --------------------- Flam is a kick note written ahead of the main beat, and takes on the effect of a _grace note_. Control-double-click (- two times) near an instrument/step intersection to insert a flam note for this instrument at that step. Instead of the circle marker, a star marker represents the flam note at the selected intersection *note Creating patterns::. There is another way for inserting flams: In Pattern Step Write mode, click the button; Select an instrument by shift-clicking on an instrument/step key, e.g. -. Now, as usual, as you click on the instrument/step keys, the selected snare will be added at that step 4. Instead of this, if you control-click on the instrument/step keys, e.g. -<4>, then a snare note with a flam is inserted at step 4. Conversely, in Pattern Tap Write mode, enter a flam by using the -. Flam could be combined with accents, and the associated star marker becomes orange or red, depending on the weak or strong accent. 5.2.2 Controlling the flam interval ----------------------------------- The time between the grace note and its following main note can be varied in the range 0:4. The default value is 2. A zero value means that flam is off. Each pattern has an associated flam interval value. Click on the button in Pattern Write mode for changing the flam interval of the current pattern. A new window will appear for the flam interval selection. Appendix A Command line options *******************************  File: tk707.info, Node: Command line options, Up: Top A.1 Synopsis ============ tk707 options... A.2 Options =========== `-l' List the available sound ports `-p PORT' Use this port `-small' `-medium' `-normalsize' Set the size of the window, since some screens are too small for the whole window. `-display SCREEN ID' Display to use. `-use WINDOW ID.' Id of window in which to embed application. See `xwininfo'. `-geometry' Initial geometry for window `-colormap' Colormap for main window `-name' Name to use for application `-sync' Use synchronous mode for display server `-visual' Visual for main window. `-h' `-help' Print short help. Appendix B Converting MIDI to audio WAV and MP3:: *************************************************  File: tk707.info, Node: Converting MIDI to audio WAV and MP3, Up: Top This small annex explain how to convert your output midi file to formatted audio file (ex. RIFF WAVE) and compressed MP3 audio files. We assume your have converted your file `salsa.dat' into MIDI format `salsa.mid' in the `tk707' environment *note Midi files::. Then enter the commands: timidity bolero.mid -Ow bolero.wav lame -b128 bolero.wav bolero.mp3 and compare the file sizes: ls -al -rw-r--r-- 1 maria martinez 1051 Mar 9 09:20 son-montuno.mid -rw-r--r-- 1 maria martinez 3937324 Mar 9 09:22 son-montuno.wav -rw-r--r-- 1 maria martinez 493056 Mar 9 09:22 son-montuno.mp3 The MIDI file does not contains the sounds. It contains only the score of your music and a MIDI render is required to heat it. The audio WAV and MP3 contains the complete sound and are suitable exports, such as CD-ROM writers. Moreover, the MP3 file is compressed by rougthly a factor ten. The MP3 audio files can be played back by popular mp3 players such as mpg123. The `timidity' tool is a midi-to-wav converter available at `http://www.goice.co.jp/member/mo/timidity'. The `lame' tool is a wav-to-mp3 convarter available at `http://www.sulaco.org/mp3'.  File: tk707.info, Node: Copying, Up: Top Appendix C GNU General Public License ************************************* Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, 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. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a. You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b. You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c. If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a. Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b. Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c. Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs ============================================= If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. ONE LINE TO GIVE THE PROGRAM'S NAME AND AN 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., 675 Mass Ave, Cambridge, MA 02139, 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.  File: tk707.info, Node: Index, Up: Top Index ***** [index] * Menu: * .dat tk707 file: Demonstrations. (line 6) * .map tk707 sound map file: Demonstrations. (line 15) * .mid midi file: Converting MIDI to audio WAV and MP3. (line 3) * .mp3 audio file: Converting MIDI to audio WAV and MP3. (line 3) * .wav audio file: Converting MIDI to audio WAV and MP3. (line 3) * accent: Accents and flam. (line 9) * Alsa audio library <1>: My card has no midi render. (line 3) * Alsa audio library: Installation. (line 13) * audio file format: Converting MIDI to audio WAV and MP3. (line 3) * brazilian percussion: Demonstrations. (line 29) * demonstration file demo.dat <1>: Demonstrations. (line 6) * demonstration file demo.dat: Running. (line 9) * demonstration file son-montuno.dat <1>: Scale changes. (line 60) * demonstration file son-montuno.dat: Demonstrations. (line 15) * file 727.map: Demonstrations. (line 15) * file 7b7.map: Demonstrations. (line 29) * file 7c7.map: Demonstrations. (line 22) * file carioca.dat: Demonstrations. (line 29) * file tk707.dvi documentation: Building the documentation. (line 11) * file tk707.html documentation: Building the documentation. (line 7) * file tk707.info documentation: Building the documentation. (line 3) * file tk707.ps documentation: Building the documentation. (line 16) * File->Load Demo menu: Demonstrations. (line 6) * File->Load menu: Running. (line 9) * flam: Accents and flam. (line 38) * flam interval: Accents and flam. (line 65) * grace note: Accents and flam. (line 38) * grid marker: orange: Accents and flam. (line 9) * grid marker: red: Accents and flam. (line 15) * grid marker: star: Accents and flam. (line 38) * group (pattern): Terminology. (line 16) * instrument <1>: Sound maps. (line 6) * instrument: Creating patterns. (line 18) * lame wav-to-mp3 converter: Converting MIDI to audio WAV and MP3. (line 3) * last step <1>: Last step changes. (line 6) * last step: Scale changes. (line 43) * latin percussion: Demonstrations. (line 15) * Linux system: Installation. (line 13) * Map->Edit Sound Map menu: Sound maps. (line 29) * Map->Load Local Sound Map menu: Sound maps. (line 25) * Map->Load Standard Sound Map: Demonstrations. (line 15) * Map->Save Sound Map menu: Sound maps. (line 51) * midi file <1>: Midi files. (line 6) * midi file: Tempo changes. (line 11) * midi file format: Converting MIDI to audio WAV and MP3. (line 3) * Midi File->Save menu: Midi files. (line 6) * midi note: Sound maps. (line 6) * midi output channel: Demonstrations. (line 6) * midi output port: Running. (line 13) * midi render: Installation. (line 13) * midi render: timidity software: My card has no midi render. (line 3) * midi-to-audio converters: Converting MIDI to audio WAV and MP3. (line 3) * mpg123 mp3 player: Converting MIDI to audio WAV and MP3. (line 3) * pattern <1>: Creating patterns. (line 6) * pattern: Terminology. (line 6) * pattern copy/merge: Creating patterns. (line 37) * pattern copy/paste: Creating patterns. (line 37) * pattern display grid <1>: Accents and flam. (line 38) * pattern display grid <2>: Sound maps. (line 6) * pattern display grid: Creating patterns. (line 53) * Pattern Step Write: Accents and flam. (line 48) * pattern step write: Accents and flam. (line 9) * Pattern Tap Write: Accents and flam. (line 56) * pattern tap write: Accents and flam. (line 9) * poly-rhythms 12/8: Scale changes. (line 60) * scale: Scale changes. (line 6) * sound card without midi: My card has no midi render. (line 3) * sound map: Sound maps. (line 6) * sound map 707.dat: Sound maps. (line 17) * sound map 727.dat: Sound maps. (line 17) * sound map file: Demonstrations. (line 15) * sound patch files (GUS): My card has no midi render. (line 20) * step <1>: Creating patterns. (line 18) * step: Terminology. (line 6) * tcl/tk libraries: Installation. (line 13) * tempo <1>: Midi files. (line 13) * tempo: Tempo changes. (line 6) * ternary feeling: Scale changes. (line 43) * timidity midi-to-wav converter: Converting MIDI to audio WAV and MP3. (line 3) * track: Terminology. (line 6) * track selection: Playing tracks. (line 6) * volume control <1>: Accents and flam. (line 30) * volume control <2>: Sound maps. (line 6) * volume control: Midi files. (line 17) * whole note decomposition: Scale changes. (line 17) * xwininfo: Command line options. (line 26)  Tag Table: Node: Top724 Node: Installation1582 Node: Building tk7072937 Node: Configure options3260 Node: Install4443 Node: Running4833 Node: Building the documentation6363 Node: Comments and bugs corrections7055 Node: My card has no midi render7576 Node: Terminology9525 Node: Demonstrations10354 Ref: Demonstrations-Footnote-112059 Ref: Demonstrations-Footnote-212244 Node: Creating patterns12312 Node: Playing patterns14734 Node: Creating tracks15542 Node: Editing tracks16515 Node: Playing tracks18295 Node: Tempo changes18668 Node: Midi files19225 Node: Sound maps19993 Node: Scale changes22737 Node: Last step changes25693 Node: Accents and flam26177 Node: Command line options29232 Node: Converting MIDI to audio WAV and MP330076 Node: Copying31384 Node: Index50495  End Tag Table