Browse Source

Locate and position the current Audacity source code, and clear a variety of old junk out of the way into junk-branches

mac-2.1.1-vi
ra 12 years ago
commit
e74978ba77
  1. 8
      .cvsignore
  2. 357
      LICENSE.txt
  3. 129
      Makefile.in
  4. 1690
      README.txt
  5. 1323
      audacity.dox
  6. 1535
      config.guess
  7. 1644
      config.sub
  8. 9722
      configure
  9. 721
      configure.in
  10. 161
      dox2-src/CrossPlatform.dox2
  11. 18
      dox2-src/InsideNyquist.dox2
  12. 56
      dox2-src/MainPage.dox2
  13. 122
      dox2-src/OtherHeaders.dox2
  14. 179
      dox2-src/ShuttleSystem.dox2
  15. 251
      dox2-src/Themability.dox2
  16. 52
      dox2-src/WidgetMigration.dox2
  17. 73
      dox2-src/WxWishlist.dox2
  18. 22
      dox2-src/examples.hh
  19. 2
      help/.cvsignore
  20. 175
      help/audacity.1
  21. 1
      images/.cvsignore
  22. 5493
      images/Aqua.xpm
  23. 111
      images/Aqua/Down.xpm
  24. 108
      images/Aqua/DownButtonSquare.xpm
  25. 1192
      images/Aqua/DownButtonStripes.xpm
  26. 1116
      images/Aqua/DownButtonWhite.xpm
  27. 85
      images/Aqua/Hilite.xpm
  28. 113
      images/Aqua/HiliteButtonSquare.xpm
  29. 1192
      images/Aqua/HiliteButtonStripes.xpm
  30. 1116
      images/Aqua/HiliteButtonWhite.xpm
  31. 57
      images/Aqua/Slider.xpm
  32. 151
      images/Aqua/SliderThumb.xpm
  33. 85
      images/Aqua/Up.xpm
  34. 114
      images/Aqua/UpButtonSquare.xpm
  35. 1274
      images/Aqua/UpButtonStripes.xpm
  36. 1205
      images/Aqua/UpButtonWhite.xpm
  37. 43
      images/Arrow.xpm
  38. 452
      images/AudacityLogo.xpm
  39. 1133
      images/AudacityLogo48x48.xpm
  40. 833
      images/AudacityLogoAlpha.xpm
  41. 10567
      images/AudacityLogoWithName.xpm
  42. 41
      images/ControlButtons.h
  43. 50
      images/ControlButtons/CleanSpeech.xpm
  44. 47
      images/ControlButtons/CleanSpeechAlpha.xpm
  45. 69
      images/ControlButtons/CleanSpeechDisabled.xpm
  46. 82
      images/ControlButtons/Disabled.xpm
  47. 37
      images/ControlButtons/Down.xpm
  48. 159
      images/ControlButtons/DownButton.xpm
  49. 36
      images/ControlButtons/Draw.xpm
  50. 33
      images/ControlButtons/DrawAlpha.xpm
  51. 56
      images/ControlButtons/Envelope.xpm
  52. 33
      images/ControlButtons/EnvelopeAlpha.xpm
  53. 98
      images/ControlButtons/FFwd.xpm
  54. 32
      images/ControlButtons/FFwdAlpha.xpm
  55. 80
      images/ControlButtons/FFwdDisabled.xpm
  56. 115
      images/ControlButtons/Hilite.xpm
  57. 164
      images/ControlButtons/HiliteButton.xpm
  58. 34
      images/ControlButtons/IBeam.xpm
  59. 33
      images/ControlButtons/IBeamAlpha.xpm
  60. 25
      images/ControlButtons/Loop.xpm
  61. 30
      images/ControlButtons/LoopAlpha.xpm
  62. 22
      images/ControlButtons/LoopDisabled.xpm
  63. 36
      images/ControlButtons/Multi.xpm
  64. 35
      images/ControlButtons/MultiAlpha.xpm
  65. 98
      images/ControlButtons/Pause.xpm
  66. 48
      images/ControlButtons/PauseAlpha.xpm
  67. 72
      images/ControlButtons/PauseDisabled.xpm
  68. 89
      images/ControlButtons/Play.xpm
  69. 43
      images/ControlButtons/PlayAlpha.xpm
  70. 67
      images/ControlButtons/PlayDisabled.xpm
  71. 101
      images/ControlButtons/Record.xpm
  72. 47
      images/ControlButtons/RecordAlpha.xpm
  73. 69
      images/ControlButtons/RecordDisabled.xpm
  74. 101
      images/ControlButtons/Rewind.xpm
  75. 32
      images/ControlButtons/RewindAlpha.xpm
  76. 82
      images/ControlButtons/RewindDisabled.xpm
  77. 94
      images/ControlButtons/Slider.xpm
  78. 38
      images/ControlButtons/SliderThumb.xpm
  79. 50
      images/ControlButtons/Stop.xpm
  80. 24
      images/ControlButtons/StopAlpha.xpm
  81. 45
      images/ControlButtons/StopDisabled.xpm
  82. 34
      images/ControlButtons/TimeShift.xpm
  83. 33
      images/ControlButtons/TimeShiftAlpha.xpm
  84. 45
      images/ControlButtons/Up.xpm
  85. 159
      images/ControlButtons/UpButton.xpm
  86. 36
      images/ControlButtons/Zoom.xpm
  87. 34
      images/ControlButtons/ZoomAlpha.xpm
  88. 10
      images/ControlButtons/degimpify
  89. 41
      images/Cursors.h
  90. 22
      images/Cursors16/DisabledCursor.xpm
  91. 22
      images/Cursors16/DrawCursor.xpm
  92. 22
      images/Cursors16/EnvCursor.xpm
  93. 23
      images/Cursors16/IBeamCursor.xpm
  94. 23
      images/Cursors16/LabelCursorLeft.xpm
  95. 23
      images/Cursors16/LabelCursorRight.xpm
  96. 22
      images/Cursors16/TimeCursor.xpm
  97. 21
      images/Cursors16/ZoomInCursor.xpm
  98. 22
      images/Cursors16/ZoomOutCursor.xpm
  99. 39
      images/Cursors32/DisabledCursor.xpm
  100. 39
      images/Cursors32/DrawCursor.xpm

8
.cvsignore

@ -0,0 +1,8 @@
.AppleDouble
Makefile
audacity
audacity-help.htb
config.log
config.status
aclocal.m4
autom4te.cache

357
LICENSE.txt

@ -0,0 +1,357 @@
Note: Audacity is distributed under the terms of the GNU GPL.
This includes everything in the source code distribution
except code in the lib-src directory. Code in the lib-src
directory may be released under a different license
(which is GPL-compatible). For a summary, see the
README.txt file, and for specific details, see the license
information inside each subdirectory of lib-src.
Documentation is distributed under the Creative Commoms license.
Please see here for that:
http://creativecommons.org/licenses/by/3.0/legalcode
The full text of the GNU GPL follows:
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 19yy <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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.
arch-tag: 38005ac9-ac1f-4d4b-82c9-905b976dc7aa

129
Makefile.in

@ -0,0 +1,129 @@
INSTALL = @INSTALL@
exec_prefix= @exec_prefix@
prefix= @prefix@
datarootdir= @datarootdir@
BINDIR= @bindir@
DATADIR= @datadir@
DATAROOTDIR = @datarootdir@
MANDIR= @mandir@
AUDACITY_NAME = @AUDACITY_NAME@
EXTRAINSTALLTARGETS= @EXTRAINSTALLTARGETS@
EXTRAUNINSTALLTARGETS= @EXTRAUNINSTALLTARGETS@
.PHONY: all
all: audacity help/audacity.1.gz
.PHONY: audacity
audacity:
$(MAKE) -C lib-src
$(MAKE) -C src
$(MAKE) -C locale
.PHONY: src/libaudacity.a
src/libaudacity.a:
$(MAKE) -C src libaudacity.a
.PHONY: install
install: audacity $(EXTRAINSTALLTARGETS)
# install the binary
$(INSTALL) -d $(DESTDIR)$(BINDIR)
$(INSTALL) -m 755 audacity $(DESTDIR)$(BINDIR)/$(AUDACITY_NAME)
# install docs
$(INSTALL) -d $(DESTDIR)$(DATADIR)/$(AUDACITY_NAME)
$(INSTALL) -d $(DESTDIR)$(DATADIR)/doc/$(AUDACITY_NAME)
$(INSTALL) -m 644 README.txt $(DESTDIR)$(DATADIR)/doc/$(AUDACITY_NAME)/README.txt
$(INSTALL) -m 644 LICENSE.txt $(DESTDIR)$(DATADIR)/doc/$(AUDACITY_NAME)/LICENSE.txt
# install manpage
$(INSTALL) -d $(DESTDIR)$(MANDIR)/man1
-test -f help/audacity.1.gz && \
$(INSTALL) -m 644 help/audacity.1.gz \
$(DESTDIR)$(MANDIR)/man1/$(AUDACITY_NAME).1.gz
# install nyquist
$(INSTALL) -d $(DESTDIR)$(DATADIR)/$(AUDACITY_NAME)/nyquist
$(INSTALL) -m 644 nyquist/*.lsp $(DESTDIR)$(DATADIR)/$(AUDACITY_NAME)/nyquist
# install plug-ins
$(INSTALL) -d $(DESTDIR)$(DATADIR)/$(AUDACITY_NAME)/plug-ins
$(INSTALL) -m 644 plug-ins/*.ny $(DESTDIR)$(DATADIR)/$(AUDACITY_NAME)/plug-ins
# install locales
$(MAKE) -C locale install
# install an icon for audacity
$(INSTALL) -d $(DESTDIR)$(DATADIR)/pixmaps/
$(INSTALL) -m 644 images/AudacityLogo48x48.xpm $(DESTDIR)$(DATADIR)/pixmaps/audacity.xpm
.PHONY: install-extra-data
install-extra-data:
# install desktop file
$(INSTALL) -d $(DESTDIR)$(DATADIR)/applications
$(INSTALL) -m 644 src/audacity.desktop $(DESTDIR)$(DATADIR)/applications
# install MIME information
$(INSTALL) -d $(DESTDIR)$(DATADIR)/mime/packages
$(INSTALL) -m 644 src/audacity.xml $(DESTDIR)$(DATADIR)/mime/packages
.PHONY: install-lrdf-data
install-lrdf-data:
# install basic LRDF ontology file
$(INSTALL) -d $(DESTDIR)$(DATADIR)/$(AUDACITY_NAME)/rdf
$(INSTALL) -m 644 lib-src/liblrdf/examples/ladspa.rdfs $(DESTDIR)$(DATADIR)/$(AUDACITY_NAME)/rdf
.PHONY: uninstall
uninstall: $(EXTRAUNINSTALLTARGETS)
rm -rf $(DESTDIR)$(BINDIR)/$(AUDACITY_NAME)
rm -rf $(DESTDIR)$(DATADIR)/doc/$(AUDACITY_NAME)
rm -rf $(DESTDIR)$(DATADIR)/$(AUDACITY_NAME)
rm -rf $(DESTDIR)$(MANDIR)/man1/$(AUDACITY_NAME).1.gz
rm -rf $(DESTDIR)$(DATADIR)/$(AUDACITY_NAME)/audacity.xpm
$(MAKE) -C locale uninstall
.PHONY: uninstall-extra-data
uninstall-extra-data:
rm -f $(DESTDIR)$(DATADIR)/applications/audacity.desktop
rm -f $(DESTDIR)$(DATADIR)/mime/packages/audacity.xml
.PHONY: uninstall-lrdf-data
uninstall-lrdf-data:
rm -f $(DESTDIR)$(DATADIR)/$(AUDACITY_NAME)/rdf/ladspa.rdfs
help/audacity.1.gz:
# gzipping the file this way prevents audacity.1 from getting deleted
cat help/audacity.1 | gzip -9 > help/audacity.1.gz
dox: audacity.dox
doxygen audacity.dox
check: src/libaudacity.a
-$(MAKE) -C tests check
dep:
$(MAKE) -C src dep
clean:
$(MAKE) -C lib-src clean
$(MAKE) -C src clean
-$(MAKE) -C tests clean
rm -f audacity
rm -f help/audacity.1.gz
rm -rf Audacity.app
veryclean: clean
rm -f Makefile src/Makefile lib-src/Makefile
rm -f src/configunix.h
rm -f `find . -name "*~"`
rm -f `find . -name core`
distclean: clean
$(MAKE) -C locale distclean
$(MAKE) -C lib-src distclean
-$(MAKE) -C tests distclean
rm -f Makefile src/Makefile lib-src/Makefile
rm -f locale/Makefile src/configunix.h
rm -f config.log config.status config.cache

1690
README.txt
File diff suppressed because it is too large
View File

1323
audacity.dox
File diff suppressed because it is too large
View File

1535
config.guess
File diff suppressed because it is too large
View File

1644
config.sub
File diff suppressed because it is too large
View File

9722
configure
File diff suppressed because it is too large
View File

721
configure.in

@ -0,0 +1,721 @@
dnl
dnl audacity configure.in script
dnl
dnl Joshua Haberman
dnl Dominic Mazzoni
dnl
dnl
dnl Instructions: to create "configure" from "configure.in", run:
dnl
dnl aclocal
dnl autoconf
dnl
dnl Note: you need pkgconfig installed for this to work. If pkg.m4 is
dnl not in the standard place, like /usr/share/aclocal, use the -I option
dnl to aclocal, for example on Mac OS X when pkgconfig was installed by
dnl fink:
dnl aclocal -I /sw/share/aclocal
dnl
dnl TODO:
dnl
dnl automatically choose whether or not to make some libs
dnl based on:
dnl
dnl AC_CHECK_LIB(z, compress2, build_libz=false, build_libz=true)
dnl AM_CONDITIONAL(BUILD_LIBZ, test $build_libz = true)
dnl
dnl
dnl Process this file with autoconf to produce a configure script.
dnl Require autoconf >= 2.59
AC_PREREQ(2.59)
dnl Init autoconf
AC_INIT
dnl Check for existence of Audacity.h
AC_CONFIG_SRCDIR([src/Audacity.h])
dnl we have some extra macros in m4/
AC_CONFIG_MACRO_DIR([m4])
dnl -------------------------------------------------------
dnl Checks for programs.
dnl -------------------------------------------------------
dnl save $CFLAGS etc. since AC_PROG_CC likes to insert "-g -O2"
dnl if $CFLAGS is blank and it finds GCC
cflags_save="$CFLAGS"
cppflags_save="$CPPFLAGS"
cxxflags_save="$CXXFLAGS"
AC_PROG_CC
AC_LANG([C++])
AC_PROG_CXX
AC_PROG_CXXCPP
CFLAGS="$cflags_save"
CPPFLAGS="$cppflags_save"
CXXFLAGS="$cxxflags_save"
AC_PROG_INSTALL
dnl pkg-config is required for lots of things
AC_CHECK_PROG(HAVE_PKG_CONFIG, pkg-config, yes, no)
if test x$HAVE_PKG_CONFIG = xno ; then
AC_MSG_ERROR([pkg-config is required to compile audacity!])
fi
dnl extra variables
dnl list of static link libraries to link in, with paths relative to lib-src
AC_SUBST(LOCAL_LIBS)
dnl optional object files (from audacity itself) depending on options enabled
AC_SUBST(EXTRAOBJS)
dnl Extra things that need to be built during make (makefile targets)
AC_SUBST(EXTRATARGETS)
dnl extra things to install during make install (makefile targets)
AC_SUBST(EXTRAINSTALLTARGETS)
dnl extra things to remove during uninstall (makefile targets)
AC_SUBST(EXTRAUNINSTALLTARGETS)
AC_SUBST(OPTOBJS)
AC_SUBST(CDEPEND)
AC_SUBST(PRECOMP_CFLAGS)
AC_SUBST(AFTERBUILD)
AC_SUBST(INSTALL_PREFIX)
dnl the header file with #defines from configure in it
AC_SUBST(CONFIGHEADER)
dnl LDFLAGS that will be valid for the build, but aren't yet valid so shouldn't
dnl be used for configure script tests (they are needed for main build).
AC_SUBST(BUILD_LDFLAGS)
dnl List of libraries in lib-src that need to be compiled before building
dnl audacity. Each name in the list should be a _target_ in lib-src/Makefile
AC_SUBST(LIBSRC_BUILD)
dnl allow the user to specify options to configure that change the
dnl name "audacity" anywhere it appears in a pathname. This allows
dnl multiple versions of Audacity to be installed concurrently
dnl without collision
AC_ARG_PROGRAM
AC_SUBST(AUDACITY_NAME)
dnl autoconf's program_transform_name is set to spit out a sed expression --
dnl however it's "helpfully" already escaped for make. Since we want to use
dnl it in shell and not make, we have to unescape this: this translates into
dnl turning two dollar signs into one.
dnl
dnl I feign at this monstrosity, but no one depends on this particular
dnl feature but me, as Debian package maintainer, so no one else should
dnl need to worry about understanding it...
program_transform_name=`echo $program_transform_name | sed 's/\\$\\$/$/'`
AUDACITY_NAME=`echo audacity | sed $program_transform_name`
if [[ "$AUDACITY_NAME" = "audacity" ]] ; then
AC_DEFINE(AUDACITY_NAME, "audacity",
[define if Audacity is being installed under a name other than "audacity",
so it can find the files it needs at runtime])
else
AC_DEFINE_UNQUOTED(AUDACITY_NAME, "$AUDACITY_NAME")
fi
dnl
dnl Make the install prefix available to the program so that it
dnl knows where to look for help files, plug-ins, etc.
dnl
AC_PREFIX_DEFAULT(/usr/local)
if test x$prefix = "xNONE" ; then
prefix="/usr/local/"
fi
AC_DEFINE_UNQUOTED(INSTALL_PREFIX, "$prefix", [define as prefix where Audacity is installed])
### Configuration of Audacity module support ###
################################################
dnl Some code (headers) can be built either as part of audacity, or as part of
dnl audacity plug-ins. In order to tell this code what is going on, we need to
dnl define BUILDING_AUDACITY during the audacity build, and not during the
dnl plug-in build. This code puts the relevant content into configunix.h
AC_DEFINE(BUILDING_AUDACITY, 1,
[Define we are compiling Audacity itself, not an Audacity plug-in])
# Add -rdynamic to linker flags so the right symbols are exported for
# plug-ins. This might not work on all architectures / compilers, so we need
# to check if it does or not.
AX_LD_CHECK_FLAG([-rdynamic],[],[],
have_dynamic_link=yes,have_dynamic_link=no)
if test "x$have_dynamic_link" = "xyes" ; then
BUILD_LDFLAGS="${BUILD_LDFLAGS} -rdynamic "
else
AC_MSG_WARN(["Linker does not support -rdynamic. Could not enable exporting all symbols"])
AC_MSG_WARN(["Audacity module support will probably not work"])
fi
### Build Options ###
#####################
AC_ARG_ENABLE(static,
[AS_HELP_STRING([--enable-static],
[link wx statically [default=no]])],
static_preference="--static=$enableval",
static_preference="")
AC_ARG_ENABLE(unicode,
[AS_HELP_STRING([--enable-unicode],
[enable unicode support [default=yes]])],
unicode_preference="--unicode=$enableval",
unicode_preference="--unicode=yes")
AC_ARG_ENABLE(debug,
[AS_HELP_STRING([--enable-debug],
[enable debug support [default=no]])],
debug_preference="$enableval",
debug_preference="no")
AC_ARG_WITH(lib-preference,
[AS_HELP_STRING([--with-lib-preference],
[whether to use local and/or system libraries, in order of preference (default="system local")])],
lib_preference=$withval,
lib_preference="system local")
dnl AC_ARG_WITH(wx-version,
dnl [AS_HELP_STRING([--with-wx-version],
dnl [select wxWidgets version (if both installed) [2.8,]])],
dnl wx_preference="--version=$withval",
dnl wx_preference="")
dnl At the moment we only support wx2.8. If we start supporting 3.0 when it
dnl comes out, we'll want it back again.
dnl ----------------------------------------------------
dnl If user asked for debug, put debug in compiler flags
dnl ----------------------------------------------------
if test x"$debug_preference" = "xyes" ; then
dnl we want debuging on
AC_MSG_NOTICE([Adding -g for debugging to CFLAGS and CXXFLAGS ...])
CFLAGS="${CFLAGS} -g "
CXXFLAGS="${CXXFLAGS} -g "
fi
dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_TYPE_SIZE_T
dnl check if alloca.h exists. If it does, we need to include it for
dnl Solaris builds, by defining HAVE_ALLOCA_H
AC_CHECK_HEADERS_ONCE(alloca.h)
dnl --------------------------------------------------------------------------
dnl We would like warnings enabled on the builds, but different compilers need
dnl different options for these. This bit tries to work out what flags we
dnl should add to the compiler we are using.
dnl --------------------------------------------------------------------------
dnl Strict prototypes flags for C (only C because doesn't work for C++)
AX_CFLAGS_STRICT_PROTOTYPES(CFLAGS)
dnl Sensible warnings for C
AX_CFLAGS_WARN_ALL(wall_flags)
CFLAGS="${CFLAGS} $wall_flags"
dnl try and use it on C++ as well
AX_CXX_CHECK_FLAG([$wall_flags], [[int foo;]], [[foo = 1;]], cxx_does_wall="yes", cxx_does_wall="no")
if test "x$cxx_does_wall" = "xyes" ; then
dnl can use all warnings flag on the C++ compiler
CXXFLAGS="${CXXFLAGS} $wall_flags"
fi
AX_CXXCPP_CHECK_FLAG([$wall_flags], [[int foo;]], [[foo = 1;]], cpp_does_wall="yes", cpp_does_wall="no")
if test "x$cpp_does_wall" = "xyes" ; then
dnl can use all warnings flag on the C++ pre-processor
CPPFLAGS="${CPPFLAGS} $wall_flags"
fi
dnl-------------------------------------------------------------------------
dnl If the C++ compiler supports making symbols within audacity hidden then
dnl we would like to do so. This means that only the required symbols for
dnl plug-in functionality are exposed, rather than everything in the program.
dnl-------------------------------------------------------------------------
gl_VISIBILITY
dnl-------------------------------------------------------------
dnl Configure the libraries which are essential to audacity.
dnl These are mostly only libraries for licensing flexibility, so
dnl there isn't a way to turn them off.
dnl-------------------------------------------------------------
dnl wxWidgets -- we assume that if wx-config is found, wxWidgets is successfully installed.
AC_PATH_PROG(WX_CONFIG, wx-config, no, $PATH:/usr/local/bin )
if [[ "$WX_CONFIG" = "no" ]] ; then
AC_MSG_ERROR("Could not find wx-config: is wxWidgets installed? is wx-config in your path?")
fi
if test "x$debug_preference" = "xyes"; then
dnl want debug wx as well
wxconfigargs="--debug=yes"
else
dnl normal wx
wxconfigargs=""
fi
dnl more things we always pass to wx-config
wxconfigargs="$static_preference $unicode_preference $wxconfigargs $wx_preference"
wx_version=`${WX_CONFIG} $wxconfigargs --version`
AC_MSG_NOTICE([Checking that the chosen version of wxWidgets is 2.8.x])
case "${wx_version}" in
2.8.*)
echo "Great, you're using wxWidgets ${wx_version}!"
;;
*)
wx_list=`${WX_CONFIG} --list`
AC_MSG_ERROR([Unable to locate a suitable configuration of wxWidgets v2.8.x or higher.
The currently available configurations are listed below. If necessary, either
install the package for your distribution or download the latest version of
wxWidgets
from http://wxwidgets.org.
${wx_list}])
esac
dnl Pass wx config path to lower levels
ac_configure_args="$ac_configure_args --with-wx-config=\"$WX_CONFIG\""
dnl Gather wx arguments
LIBS="$LIBS `$WX_CONFIG $wxconfigargs --libs`"
CXXFLAGS="$CXXFLAGS `$WX_CONFIG $wxconfigargs --cxxflags`"
dnl-----------------------------------------------------------------
dnl Pull in library Cflags and so on for the non-optional libraries
dnl TODO enable/disable allegro
dnl LOCAL_LIBS="$LOCAL_LIBS allegro.a"
dnl CXXFLAGS="$CXXFLAGS -I\$(top_srcdir)/lib-src/allegro"
dnl Include FileDialog
AC_CONFIG_SUBDIRS(["lib-src/FileDialog"])
LOCAL_LIBS="$LOCAL_LIBS FileDialog.a"
CXXFLAGS="$CXXFLAGS -I\$(top_srcdir)/lib-src/FileDialog"
dnl Include lib-widget-extra (via pkg-config). Doing this gets it configured as
dnl well, because it has to be configured in order to be found
AUDACITY_CHECKLIB_WIDGETEXTRA
dnl pull in flags for the library
BUILD_LDFLAGS="$BUILD_LDFLAGS $WIDGETEXTRA_LIBS"
CXXFLAGS="$CXXFLAGS $WIDGETEXTRA_CFLAGS"
dnl Add the library to the list of libraries that need to be compiled
LIBSRC_BUILD="$LIBSRC_BUILD widgetextra"
dnl-------------------------------------------------------------
dnl Optional library support. Lots of things we could use, but
dnl can do without if they aren't available.
dnl-------------------------------------------------------------
dnl LIBRARIES="LIBVORBIS LIBMAD LIBSNDFILE LIBFLAC LIBID3TAG LIBSAMPLERATE LIBRESAMPLE LIBSBSMS LIBSOUNDTOUCH LIBNYQUIST LIBVAMP LIBEXPAT LIBTWOLAME FFMPEG LIBLRDF SLV2 REDLAND PORTSMF TAGLIB"
dnl disable plugin categorisation and LV2 libs for 1.3.7 release
LIBRARIES="LIBVORBIS LIBMAD LIBSNDFILE LIBFLAC LIBID3TAG LIBSAMPLERATE LIBRESAMPLE LIBSBSMS LIBSOUNDTOUCH LIBNYQUIST LIBVAMP LIBEXPAT LIBTWOLAME FFMPEG PORTSMF TAGLIB"
AC_MSG_NOTICE([Determining what libraries are available in this tree and on the system])
AUDACITY_CHECKLIB_LIBSNDFILE
AUDACITY_CHECKLIB_LIBEXPAT
AUDACITY_CHECKLIB_LIBSAMPLERATE
AUDACITY_CHECKLIB_LIBRESAMPLE
AUDACITY_CHECKLIB_LIBVORBIS
AUDACITY_CHECKLIB_LIBMAD
AUDACITY_CHECKLIB_LIBFLAC
AUDACITY_CHECKLIB_LIBID3TAG
AUDACITY_CHECKLIB_LIBSBSMS
AUDACITY_CHECKLIB_LIBSOUNDTOUCH
AUDACITY_CHECKLIB_LIBNYQUIST
AUDACITY_CHECKLIB_LIBVAMP
AUDACITY_CHECKLIB_LIBTWOLAME
AUDACITY_CHECKLIB_FFMPEG
dnl AUDACITY_CHECKLIB_REDLAND
dnl AUDACITY_CHECKLIB_SLV2
dnl AUDACITY_CHECKLIB_LIBLRDF
AUDACITY_CHECKLIB_PORTSMF
AUDACITY_CHECKLIB_TAGLIB
dnl Decide what libraries to build with, and whether to use system or local libraries
dnl Set variables based on choices.
AC_MSG_NOTICE([Figuring out what libraries to enable])
lib_preference=`echo $lib_preference | tr [[:lower:]], "[[:upper:]] "`
for lib in $LIBRARIES ; do
eval LIB_ARGUMENT="\$${lib}_ARGUMENT"
eval LIB_SYSTEM_AVAILABLE="\$${lib}_SYSTEM_AVAILABLE"
eval LIB_LOCAL_AVAILABLE="\$${lib}_LOCAL_AVAILABLE"
if test x"$LIB_ARGUMENT" = x"unspecified" -o x"$LIB_ARGUMENT" = x"yes" ; then
lib_activated="no"
for sys_or_local in $lib_preference ; do
# example: LIBMAD_SYSTEM_AVAILABLE
eval AVAILABLE="\$${lib}_${sys_or_local}_AVAILABLE"
if test "$AVAILABLE" = "yes" ; then
eval ${lib}_USE_${sys_or_local}="yes"
lib_activated="yes"
AC_MSG_NOTICE([Using $sys_or_local libraries for $lib])
break
fi
done
if test $lib_activated = no ; then
AC_MSG_NOTICE([disabling $lib])
fi
else
dnl lib_ARGUMENT is something other than "unspecified"
if test $LIB_ARGUMENT = local ; then
if test $LIB_LOCAL_AVAILABLE = yes ; then
eval ${lib}_USE_LOCAL="yes"
AC_MSG_NOTICE([Using the LOCAL libraries for $lib because you specifically requested this])
else
AC_MSG_ERROR([You requested using the local libraries for $lib but they are not available])
fi
elif test $LIB_ARGUMENT = system ; then
if test $LIB_SYSTEM_AVAILABLE = yes ; then
eval ${lib}_USE_SYSTEM="yes"
AC_MSG_NOTICE([Using the SYSTEM libraries for $lib because you specifically requested this])
else
AC_MSG_ERROR([You requested using the system libraries for $lib but they are not available])
fi
elif test $LIB_ARGUMENT = no ; then
AC_MSG_NOTICE([disabling $lib at your request])
else
AC_MSG_ERROR(I didn't understand the argument $LIB_ARGUMENT for $lib)
fi
fi
done
# In some cases the choices made above might be inappropriate.
# * we need to have libsndfile one way or another
# * we can only use one of libsamplerate and libresample
# * we should not use the local Redland if we're not using local SLV2 or
# liblrdf
if test "$LIBSNDFILE_USE_LOCAL" != "yes" && test "$LIBSNDFILE_USE_SYSTEM" != "yes" ; then
AC_MSG_ERROR([Audacity requires libsndfile to be enabled])
fi
if test "$LIBEXPAT_USE_LOCAL" != "yes" && test "$LIBEXPAT_USE_SYSTEM" != "yes" ; then
AC_MSG_ERROR([Audacity requires expat to be enabled])
else
if test "$LIBEXPAT_USE_SYSTEM" = "yes" ; then
AC_DEFINE(USE_SYSTEM_EXPAT, 1, [Use system Expat library])
fi
fi
dnl we can only have one sample rate conversion library used.
dnl by now we will have both enabled if they are present, regardless of whether
dnl they were requested, unless one was specifically disabled.
dnl we would like to honour requests at this stage, so need to know about
dnl the original options, not just which LIB_USE variables have been set.
if ( test "$LIBRESAMPLE_USE_LOCAL" = "yes" || test "$LIBRESAMPLE_USE_SYSTEM" = "yes") && ( test "$LIBSAMPLERATE_USE_LOCAL" = "yes" || test "$LIBSAMPLERATE_USE_SYSTEM" = "yes"); then
dnl if we get here, both libraries are available to us.
AC_MSG_NOTICE([Both libresample and libsamplerate are available])
AC_MSG_NOTICE([deciding which to use based on arguments ...])
if test x"$LIBSAMPLERATE_ARGUMENT" = x"unspecified" ; then
dnl they didn't ask for libsamplerate, they don't get it
LIBSAMPLERATE_USE_LOCAL="no"
LIBSAMPLERATE_USE_SYSTEM="no"
dnl done - we are using libresample
AC_MSG_NOTICE([Libsamplerate not explicity requested, using libresample])
else
dnl if we get here, then libsample rate has been explicity specified.
dnl could that be disabling it? No, because it wouldn't then have been
dnl enabled above.
LIBRESAMPLE_USE_LOCAL="no"
LIBRESAMPLE_USE_SYSTEM="no"
dnl done - we are using libsamplerate
AC_MSG_NOTICE([Using libsamplerate as requested])
fi
fi
dnl if ( test "$SLV2_USE_LOCAL" != "yes" && test "$LIBLRDF_USE_LOCAL" != "yes") && test "$REDLAND_USE_LOCAL" = "yes" ; then
dnl AC_MSG_NOTICE([Not building local Redland library since we don't use the local SLV2 or liblrdf libraries])
dnl REDLAND_USE_LOCAL=no
dnl REDLAND_USE_SYSTEM=no
dnl fi
dnl If we are using a local copy of liblrdf then some extra files need to be
dnl installed on the system, so we need to add the targets to
dnl EXTRAINSTALLTARGETS and EXTRAUNINSTALLTARGETS
if [[ "x$LIBLRDF_USE_LOCAL" = "xyes" ]]; then
EXTRAINSTALLTARGETS="$EXTRAINSTALLTARGETS install-lrdf-data"
EXTRAUNINSTALLTARGETS="$EXTRAUNINSTALLTARGETS uninstall-lrdf-data"
fi
dnl-----------------------------------------------------------------
dnl Based on the optional lib selections, modify LOCAL_LIBS, CXXFLAGS, etc
for lib in $LIBRARIES ; do
eval LIB_USE_LOCAL=\$${lib}_USE_LOCAL
eval LIB_USE_SYSTEM=\$${lib}_USE_SYSTEM
if test "x$LIB_USE_LOCAL" = "xyes" ; then
eval LIBSRC_BUILD=\"$LIBSRC_BUILD \$${lib}_LOCAL_BUILD\"
eval LOCAL_LIBS=\"$LOCAL_LIBS \$${lib}_LOCAL_LIBS\"
eval BUILD_LDFLAGS=\"\$BUILD_LDFLAGS \$${lib}_LOCAL_LDFLAGS\"
eval OPTOBJS=\"$OPTOBJS \$${lib}_LOCAL_OPTOBJS\"
eval CXXFLAGS=\"\$CXXFLAGS \$${lib}_LOCAL_CXXFLAGS\"
eval CONFIG_SUBDIRS=\"\$${lib}_LOCAL_CONFIG_SUBDIRS\"
AC_CONFIG_SUBDIRS($CONFIG_SUBDIRS)
eval CPPSYMBOLS=\"\$${lib}_LOCAL_CPPSYMBOLS\"
for symbol in $CPPSYMBOLS ; do
AC_DEFINE_UNQUOTED($symbol, 1)
done
elif test "$LIB_USE_SYSTEM" = "yes" ; then
eval LIBS=\"$LIBS \$${lib}_SYSTEM_LIBS\"
eval OPTOBJS=\"$OPTOBJS \$${lib}_SYSTEM_OPTOBJS\"
#LIBS="$LIBS $THESE_LIBS"
eval CXXFLAGS=\"\$CXXFLAGS \$${lib}_SYSTEM_CXXFLAGS\"
eval CPPSYMBOLS=\"\$${lib}_SYSTEM_CPPSYMBOLS\"
for symbol in $CPPSYMBOLS ; do
AC_DEFINE_UNQUOTED($symbol, 1)
done
fi
done
dnl " This is included purely to close an otherwise endless string in vim
dnl--------------------------------------------------------------------------
dnl Optional features (which don't use libraries - just compile-time on/off)
dnl--------------------------------------------------------------------------
AC_ARG_ENABLE(audiounits,
[AS_HELP_STRING([--enable-audiounits],
[enable audio unit plug-in support (Mac OS X only)
[default=auto]])], use_audiounits=$enableval,
use_audiounits="auto")
AC_ARG_ENABLE(ladspa,
[AS_HELP_STRING([--enable-ladspa],
[enable LADSPA plug-in support [default=yes]])],
use_ladspa=$enableval,
use_ladspa="yes")
AC_ARG_ENABLE(quicktime,
[AS_HELP_STRING([--enable-quicktime],
[enable QuickTime import support (Mac OS X only) [default=auto]])],
use_quicktime=$enableval,
use_quicktime="auto")
dnl In-tree libraries (ones we write, so only options are off and local)
AC_ARG_WITH(portmixer,
[AS_HELP_STRING([--with-portmixer],
[compile with PortMixer [default=yes]])],
use_portmixer=$withval,
use_portmixer="yes")
AC_CANONICAL_HOST
dnl OS-specific configuration
case "${host_os}" in
darwin* | rhapsody*)
dnl Mac OS X configuration
CDEPEND="AudacityHeaders.h.gch"
PRECOMP_CFLAGS="-include AudacityHeaders.h"
CONFIGHEADER="configunix.h"
CXXFLAGS="-I\$(top_srcdir)/mac $CXXFLAGS"
AFTERBUILD=""
EXTRATARGETS="../Audacity.app"
if [[ "$use_audiounits" = "auto" ]] ; then
use_audiounits="yes"
fi
if [[ "$use_quicktime" = "auto" ]] ; then
use_quicktime="yes"
fi
;;
cygwin*)
dnl Windows/CygWin configuration
LIBS="$LIBS -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -lwsock32 -lwinmm"
CONFIGHEADER="configwin.h"
AC_DEFINE(__CYGWIN__,1,[We're using cygwin])
dnl ' (end endless string in vim)
AC_DEFINE(_FILE_OFFSET_BITS,32,[Placeholder for large file support])
AFTERBUILD=""
;;
*)
dnl Unix configuration
CONFIGHEADER="configunix.h"
AFTERBUILD=""
EXTRAINSTALLTARGETS="$EXTRAINSTALLTARGETS install-extra-data"
EXTRAUNINSTALLTARGETS="$EXTRAUNINSTALLTARGETS uninstall-extra-data"
dnl On Unix we always use dlopen
AC_SEARCH_LIBS([dlopen], [dl])
if [[ "$ac_cv_search_dlopen" = no ]]; then
AC_MSG_ERROR(dlopen not found, required by Audacity)
fi
AC_SUBST(HAVE_GTK)
PKG_CHECK_MODULES(GTK, gtk+-2.0, have_gtk=yes, have_gtk=no)
if [[ "$have_gtk" = "yes" ]]
then
AC_DEFINE(HAVE_GTK, 1, [Define if GTK is available])
CPPFLAGS="$CPPFLAGS $GTK_CFLAGS"
LIBS="$LIBS $GTK_LIBS"
fi
;;
esac
dnl PortAudio configuration
LOCAL_LIBS="$LOCAL_LIBS portaudio-v19/lib/libportaudio.a"
EXTRAOBJS="$EXTRAOBJS ../lib-src/portaudio-v19/lib/libportaudio.a"
CXXFLAGS="-I\$(top_srcdir)/lib-src/portaudio-v19/include $CXXFLAGS"
AC_CONFIG_SUBDIRS([lib-src/portaudio-v19])
case "${host_os}" in
darwin* | rhapsody*)
LIBS="-framework AudioUnit -framework AudioToolbox $LIBS"
LIBS="-framework CoreAudio $LIBS -lz"
;;
cygwin*)
;;
*)
dnl Unix
AC_CHECK_LIB(asound, snd_pcm_open, have_alsa=yes, have_alsa=no)
if [[ $have_alsa = "yes" ]] ; then
LIBS="$LIBS -lasound"
fi
PKG_CHECK_MODULES(JACK, jack, have_jack=yes, have_jack=no)
if [[ $have_jack = "yes" ]] ; then
LIBS="$LIBS $JACK_LIBS"
fi
AC_CHECK_LIB(hpi, HPI_SubSysCreate, have_asihpi=yes, have_asihpi=no, -lm)
if [[ $have_asihpi = "yes" ]] ; then
LIBS="$LIBS -lhpi"
fi
AC_CHECK_LIB(rt, clock_gettime, [rt_libs=" -lrt"])
LIBS="${LIBS}${rt_libs}"
AC_CHECK_FUNCS([clock_gettime nanosleep])
;;
esac
if [[ "$use_portmixer" = "yes" ]] ; then
AC_DEFINE(USE_PORTMIXER, 1,
[Define if PortMixer support should be enabled])
CXXFLAGS="-I\$(top_srcdir)/lib-src/portmixer/include $CXXFLAGS"
LOCAL_LIBS="$LOCAL_LIBS portmixer/libportmixer.a"
AC_CONFIG_SUBDIRS([lib-src/portmixer])
ac_configure_args="$ac_configure_args --with-pa-include=../portaudio-v19/include"
fi
dnl Check for lrint/lrintf
AC_C99_FUNC_LRINT
AC_C99_FUNC_LRINTF
if [[ "$use_ladspa" = "yes" ]] ; then
OPTOBJS="$OPTOBJS effects/ladspa/LoadLadspa.o"
OPTOBJS="$OPTOBJS effects/ladspa/LadspaEffect.o"
AC_DEFINE(USE_LADSPA, 1,
[Define if LADSPA plug-ins are enabled])
dnl Special configuration for LADSPA on Mac OS X
case "$host_os" in
darwin7*)
LIBS="$LIBS -ldl"
;;
*)
;;
esac
fi
if [[ "$use_audiounits" = "yes" ]] ; then
OPTOBJS="$OPTOBJS effects/audiounits/LoadAudioUnits.o"
OPTOBJS="$OPTOBJS effects/audiounits/AudioUnitEffect.o"
AC_DEFINE(USE_AUDIO_UNITS, 1,
[Define if Audio Unit plug-ins are enabled (Mac OS X only)])
fi
if [[ "$use_quicktime" = "yes" ]] ; then
OPTOBJS="$OPTOBJS import/ImportQT.o"
OPTOBJS="$OPTOBJS import/ImportQTWrapper.o"
AC_DEFINE(USE_QUICKTIME, 1,
[Define if QuickTime importing is enabled (Mac OS X only)])
fi
case "${host_os}" in
cygwin*)
AC_CONFIG_HEADER(src/configwin.h:src/configtemplate.h)
;;
*)
AC_CONFIG_HEADER(src/configunix.h:src/configtemplate.h)
;;
esac
AC_CONFIG_FILES([Makefile src/Makefile lib-src/Makefile \
locale/Makefile])
dnl There are various other files we might need to process, depends on what
dnl has been enabled previously
if [[ "x$LIBEXPAT_USE_LOCAL" = "xyes" ]]; then
AC_CONFIG_FILES([lib-src/expat/Makefile])
fi
if [[ -e tests/Makefile.in ]]; then
AC_CONFIG_FILES([tests/Makefile])
fi
AC_OUTPUT
dnl
dnl Substitute any addition libraries that portaudio (v19) requires
dnl
pa_libs=
pa_libs=`grep 'Libs:' lib-src/portaudio-v19/portaudio-2.0.pc | sed -e 's/Libs://;s/-L${libdir}//;s/-lportaudio//'`
sed -i -e "s/@PA_LIBS@/$pa_libs/" src/Makefile
echo ""
echo "Finished configure:"
for lib in $LIBRARIES ; do
eval LIB_USE_LOCAL=\$${lib}_USE_LOCAL
eval LIB_USE_SYSTEM=\$${lib}_USE_SYSTEM
if test "$LIB_USE_LOCAL" = "yes" ; then
echo "$lib: using LOCAL libraries"
elif test "$LIB_USE_SYSTEM" = "yes" ; then
echo "$lib: using SYSTEM libraries"
else
echo "$lib: disabled"
fi
done
if [[ "$use_ladspa" = "yes" ]] ; then
echo "ladspa: enabled"
else
echo "ladspa: disabled"
fi
if [[ "$use_audiounits" = "yes" ]] ; then
echo "audiounits: enabled"
else
echo "audiounits: disabled"
fi
echo "prefix=$prefix";
echo ""
echo "Run 'configure --help' for an explanation of these options,"
echo "otherwise run 'make' to build Audacity."
dnl Indentation settings for Vim and Emacs and unique identifier for Arch, a
dnl version control system. Please do not modify past this point.
dnl arch-tag: aba52141-47c0-40c6-8629-aa61e7bee0c7
# Local Variables:
# c-basic-offset: 3
# indent-tabs-mode: nil
# End:
#
# vim: et sts=3 sw=3

161
dox2-src/CrossPlatform.dox2

@ -0,0 +1,161 @@
/**********************************************************************
Audacity: A Digital Audio Editor
CrossPlatform.dox2
James Crook
Documents Cross Platform coding issues.
********************************************************************//*
JKC: The examples in this file need to be extracted into a separate file so
that we can get the comments to show correctly in the output files.
/*****************************************************************//*!
\page CrossPlatform Cross Platform Coding Tips
\brief Guidelines for making the code compile and work on all supported platforms.
\section PragmaOnce \#pragma once
The following is not supported under gcc 2.x:
\code
// WRONG
#pragma once
\endcode
Instead use the traditional:
\code
#ifndef __AUDACITY_HEADER_FILE_NAME__
#define __AUDACITY_HEADER_FILE_NAME__
// your header file contents goes here.
#endif
\endcode
\section UnicodeStrings Unicode strings
Audacity code is translated, and it may be built in Unicode versions.
For this reason all strings should be wrapped like this:
\code
// for strings which are not translated
mMyFirstString = wxT("some untranslated string");
// for strings which should be translated
mMySecondString = _("some translatable string");
\endcode
In some cases you need to give hints to a translator about how a
string should be translated. Do so as follows:
\dontinclude examples.hh
\skip i18n-hint
\until "R"
Very long strings can be wrapped across multiple lines, as follows:
\code
// For untranslated strings:
wxT("This is a long untranslated string ")
wxT("which spans several lines ")
wxT("and works in Unicode builds too")
// For translated strings:
_("This is a long translated string "
wxT("which spans several lines ")
wxT("and works in Unicode builds too"))
\endcode
Notice that in the translated example, all bar the first substring
are contained within a \p wxT().
\section ConstructorsAsArguments Constructors as Arguments
Don't write code like this:
\code
// WRONG
// Now call OnSampleRateChange to update the values.
OnSampleRateChange( wxCommandEvent() );
\endcode
Whilst it is fine under MSVC it will cause a problem under gcc as the
constructor is a temporary object which will be optimised away.
Instead use:
\code
// Now call OnSampleRateChange to update the values.
wxCommandEvent e;
OnSampleRateChange( e );
\endcode
\section HeaderFiles Header Files
Windows systems are not case sensitive, whilst Linux systems are.
You therefore need to take care in capitalisation, e.g:
\code
#include "AttachableScrollBar.h"
\endcode
\section ClassNamesInClasses Class Names in Classes
Microsoft Visual C++ allows you to write code like this in a header file:
\code
// WRONG
class MyClass
{
public:
int MyClass::SomeFunction();
//... other stuff
\endcode
For portability, the \p 'MyClass::' prefix should be left out.
\section wxStringInFormat Using wxString in Format
Don't write code like this:
\code
wxString Message( wxT("Hello" ));
// WRONG
wxString Temp = wxString::Format(wxT("Your said %s in your message"), Message );
\endcode
Although MSVC won't complain even in Unicode mode, it generates a warning under gcc.
Instead you need:
\code
wxString Message( wxT("Hello" ));
wxString Temp = wxString::Format(wxT("Your said %s in your message"), Message.c_str() );
\endcode
\section ForwardEnums Forward Declared Enums
Microsoft Visual C++ allows you to write code like this in a header file:
\code
// WRONG
enum MyEnum;
\endcode
That is, you can forward declare an enum just as you can forward
declare a class. This is not portable. The alternative is to include
a header file containing the full enum definition.
\code
#include "MyEnum.h"
\endcode
*//*****************************************************************/

18
dox2-src/InsideNyquist.dox2

@ -0,0 +1,18 @@
/**********************************************************************
Audacity: A Digital Audio Editor
InsideNyquist.dox2
James Crook
********************************************************************//**
\page InsideNyquist Inside Nyquist
\section NyquistIntro Introduction
Nyquist is a LISP interpreter, based on XLISP.
*//********************************************************************/

56
dox2-src/MainPage.dox2

@ -0,0 +1,56 @@
/**********************************************************************
Audacity: A Digital Audio Editor
MainPage.dox2
James Crook
********************************************************************//**
\mainpage Audacity Index Page
\section intro_sec Introduction
Audacity is a free, easy-to-use audio editor and recorder for Windows,
Mac OS X, GNU/Linux, and other operating systems.
\section license License
Audacity is free software, developed by a group of volunteers and
distributed under the GNU General Public License (GPL). See
License.txt for details.
Free software is not just free of cost (like &quot;free beer&quot;).
It is free as in freedom (like &quot;free speech&quot;). Free software gives you
the freedom to use a program, study how it works, improve it, and share
it with others. For more information, visit the Free Software Foundation.
Programs like Audacity are also called open source software, because their
source code is available for anyone to study or use. There are thousands of
other free and open source programs, including the Mozilla web browser, the
OpenOffice.org office suite, and entire Linux-based operating systems.
\section src_code Understanding The Source Code
To understand the GUI parts of Audacity, you will first need to familiarise
yourself with the wxWidgets toolkit. You will find \ref ShuttleSystem used very
widely for user interface construction. See the classes in src/widgets
for how we create new widgets of our own.
- A great deal of the Audio processing in Audacity is done using libraries of
code such as libsndfile and allegro. Some self contained audio functions
can be found in src/effects, for example EffectEcho and its accompanying
dialog EchoDialog.
- The BlockFile system is central to how Audacity allows cut and paste
of audio to be performed efficiently. It works closely with the DirManager
class.
Also look at the overview pages in the Doxygen documentation, which cover
special topics.
*//**************************************************************************/

122
dox2-src/OtherHeaders.dox2

@ -0,0 +1,122 @@
/**********************************************************************
Audacity: A Digital Audio Editor
OtherHeaders.dox2
James Crook
********************************************************************//**
\page OtherHeaders Other Headers
\section OtherHeadersIntro Introduction
Some of the header files contained in the Audacity source directory
are headers for linkage with other modules.
- lapspa.h provides the API for Linux Audio Plugins Architecture.
*//*****************************************************************//**
\class _LADSPA_PortRangeHint
\brief _LADSPA_PortRangeHint is a structure that gives parameter
validation information for a LADSPA (Linux Audio Plugin Architecture)
plug in effect.
For example it can indicate that a value (called a
'Port' in LADSPA terminology) has a logarithmic scale, and what its
upper and lower bounds are.
*//*****************************************************************//**
\class _LADSPA_Descriptor
\brief _LADSPA_Descriptor is a structure that provides the API to a
LADSPA (Linux Audio Plugin Architecture) Effect.
It specifies how many parameters there are and the callback to run
the effect, amongst other properties.
*//*****************************************************************//**
\class BE_CONFIG
\brief BE_CONFIG is a structure defined in the Blade DLL Interface
for LAME (MP3 Conversion DLL).
*//*****************************************************************//**
\class BE_VERSION
\brief BE_VERSION is a structure defined in the Blade DLL Interface
for LAME (MP3 Conversion DLL).
*//*****************************************************************//**
\class lame_global_flags
\brief struct with zillion of control parameters that control
lame export (MP3 Conversion DLL).
*//*****************************************************************//**
\class mad_bitptr
\brief struct in the MPEG library, used for MP3 compression by
MP3Exporter
*//*****************************************************************//**
\class mad_decoder
\brief struct in the MPEG library, used for MP3 compression by
MP3Exporter
*//*****************************************************************//**
\class mad_frame
\brief struct in the MPEG library, used for MP3 compression by
MP3Exporter
*//*****************************************************************//**
\class mad_header
\brief struct in the MPEG library, used for MP3 compression by
MP3Exporter
*//*****************************************************************//**
\class mad_pcm
\brief struct in the MPEG library, used for MP3 compression by
MP3Exporter
*//*****************************************************************//**
\class mad_stream
\brief struct in the MPEG library, used for MP3 compression by
MP3Exporter
*//*****************************************************************//**
\class mad_synth
\brief struct in the MPEG library, used for MP3 compression by
MP3Exporter
*//*****************************************************************//**
\class mad_timer_t
\brief struct in the MPEG library, used for MP3 compression by
MP3Exporter
*//*****************************************************************//**
\class wxTreebook
\brief A wxTreebook is a class like wxNotebook, but not yet supported
by wxWidgets 2.6.3
*//*****************************************************************//**
\class wxTreebookItemData
\brief One item in a wxTreebook. (I think)
*//*******************************************************************/

179
dox2-src/ShuttleSystem.dox2

@ -0,0 +1,179 @@
/**********************************************************************
Audacity: A Digital Audio Editor
ShuttleSystem.dox2
James Crook
********************************************************************//**
\page ShuttleSystem The Shuttle System
\section ShuttleIntro Introduction
The classes ShuttleGui, ShuttleCli, ShuttleGuiBase and Shuttle were
designed to simplify repetitive code that moves data around. Common
repetitive tasks in Audacity are creating dialogs, moving data in and
out of dialogs and converting from binary to text formats.
\section ShuttleSplit ShuttleGui Vs ShuttleGuiBase
ShuttleGuiBase is slated for \ref WidgetMigration . It contains functions
that work with widgets that are in wxWidgets. The derived class,
ShuttleGui, contains extensions that are specific to Audacity widgets.
It isn't slated for widget migration.
\section ShuttleGuiInit Initialising ShuttleGui
A common idiom in using the ShuttleGui is as follows - this example
comes from AudioIOPrefs::Populate() :
\code
// Code is from a dialog class, so 'this' is a pointer to the dialog
ShuttleGui S(this, eIsCreatingFromPrefs); // Create the shuttle.
PopulateOrExchange(S); // Use it.
\endcode
\p S is a temporary object, only kept for as long as needed to actually do
the one exchange.
The first line creates and initialises the ShuttleGui object, setting it
up for creating a dialog's contents using information about initial values
from the global preferences.
The \p PopulateOrExchange() function is here being used to populate the dialog.
The same function can be called from elsewhere, later, with a different \p S to
exchange data.
The instance of ShuttleGui, \p S, shown in the example above isn't needed
after returning from \p PopulateOrExchange().
\section ShuttleGuiMethods ShuttleGui Methods
ShuttleGui has several kinds of methods.
- Layout methods like ShuttleGui::StartHorizontalLay(), used to start
a piece of GUI that is to be laid out horizontally. Use
ShuttleGui::EndHorizontalLay() to end such a section. This is a simple
wrapper for the wxWidgets wxBoxSizer. It has the advantage that the
Shuttle keeps track of the sizer. You do not need to. You do not need
to provide a name for the sizer. This shortens the code.
\code
// Example of using a Start/End pair
S.StartHorizontalLay()
{
... Add controls that you want in the horizontal layout
}
S.EndHorizontalLay()
\endcode
The \p { \p } braces are optional, just add them where they improve
readability.
- \p Add methods, like ShuttleGui::AddCheckBox(). This adds the check box
and returns a pointer to it. You use \p Add methods when you don't want
ShuttleGui to handle the data exchange. It just creates the control and
adds it into the current sizer.
\code
// Example of calling an Add method
S.AddChoice( _("Script:"),_("(a) Basic Operation"), &mScripts );
\endcode
- \p Tie methods, like ShuttleGui::TieCheckBox(). This creates the check
box as above, returning a pointer to it. It also facilitates
exchange of data with the control.
\code
// Example of calling a Tie method
S.TieChoice( _("Device:"), mDevice,
wxT(""), mmPlayNames, mmPlayLabels );
\endcode
So \p Tie methods and \p Add methods are very similar. The \p Tie
methods have more parameters to them. You have to specify what you
are exchanging with. There are many name overloaded variants on \p Tie
methods to suit different circumstances. Exchanging an integer with
a text box uses a different overload to exchanging a string with the text box.
In the example above, \p mDevice is a \p wxString variable passed by reference
to the function. This allows ShuttleGui both to read and write to it. Which
happens depends on how \p S has been configured.
With both \p Add and \p Tie you can optionally specify a windows Id. Use code
like the following:
\code
// Example of using a windows Id that we chose.
S.Id( idSplashScreen ).TieCheckBox( _("Show Splash Screen"),
wxT("\Inits\Splash"), true );
\endcode
Where you don't specify an Id, ShuttleGui will assign the Id's sequentially.
\section ShuttleGuiLayoutTips ShuttleGui Layout Tips
ShuttleGui wraps wxWidget sizers, and the wxWidgets sizer system can sometimes
itself be confusing. The most common problem is finding that controls don't
resize at all for some reason.
Resizing requires that 'stretchiness' propogate all the way down from the
ultimate parent window. Any sizers that is not using \p wxEXPAND will cause
everything within in it to retain the size it had when the GUI was created,
i.e. it will not resize when the window does. A very common idiom is to
use \p wxEXPAND but with an expand proportion of '0'. That still allows
expansion but <b>not</b> in the main direction. By contrast using
\p wxALIGN_LEFT prevents expansion in either direction.
Many of the \p Add and \p Tie functions are designed with a two column layout in
mind. So use an idiom like this:
\code
// The '1' in the next line indicates a resizable wxStaticBox.
S.StartStatic( _("Recording"), 1 );
{
S.StartTwoColumn();
S.TieChoice( _("Device:"), wxT("RecordingDevice"),
wxT(""), mmPlayNames, mmPlayLabels );
S.TieChoice( _("Channels:"), wxT("RecordChannels"),
wxT("2"), mmChannelNames, mmChannelLabels );
S.EndTwoColumn();
}
\endcode
The prompts \p 'Device:' and \p 'Channels:' will land in the first column and the
actual choice controls will land in the second column. All of this is
inside a \p wxStaticBox with the name \p 'Recording' on it.
To make the choice controls stretch when the \p wxStaticBox grows or shrinks,
adjust the code to read:
\code
// This idiom may be simplified when new functions are added to ShuttleGui
S.StartStatic( _("Recording"), 1 );
{
S.StartMultiColumn(2, wxEXPAND);
S.SetStretchyCol(1);
S.TieChoice( _("Device:"), wxT("RecordingDevice"),
wxT(""), mmPlayNames, mmPlayLabels );
S.TieChoice( _("Channels:"), wxT("RecordChannels"),
wxT("2"), mmChannelNames, mmChannelLabels );
S.EndMultiColumn();
}
\endcode
\section ShuttleGuiInternals ShuttleGui Internals
ShuttleGui cleans up the classes which use it. Parts of its own internal
code are quite repetitive, doing the same thing for different widgets with
slightly different options - e.g. a wxTextCtrl with an integer value or with
a string. To make the internals of ShuttleGui cleaner, it uses class
WrappedType. Also compound functions are formed by chaining
together shorter functions. This makes it much easier to add new options.
*//********************************************************************/

251
dox2-src/Themability.dox2

@ -0,0 +1,251 @@
/**********************************************************************
Audacity: A Digital Audio Editor
Themability.dox2
James Crook
********************************************************************//**
\page Themability Themability of Audacity
\section ThemeIntro Introduction
Audacity is Themable. That means the images, colours and fonts can be
changed at run time, and pre-built combinations can be loaded when the
program starts.
A sample of the saved ImageCache is shown here, hover over any
part to see its name (if there is no image shown here, you will need
to add the image ImageCache.png into the html directory):
\htmlonly
<img src="ImageCache.png" width=192 height=584 usemap="#map1" align="left" hspace="10">
<map name="map1">
<area title="Bitmap:Pause" shape=rect coords="0,0,15,15">
<area title="Bitmap:PauseDisabled" shape=rect coords="0,16,15,31">
<area title="Bitmap:Play" shape=rect coords="16,0,31,15">
<area title="Bitmap:PlayDisabled" shape=rect coords="16,16,31,31">
<area title="Bitmap:Loop" shape=rect coords="32,0,47,15">
<area title="Bitmap:LoopDisabled" shape=rect coords="32,16,47,31">
<area title="Bitmap:Stop" shape=rect coords="48,0,63,15">
<area title="Bitmap:StopDisabled" shape=rect coords="48,16,63,31">
<area title="Bitmap:Rewind" shape=rect coords="64,0,79,15">
<area title="Bitmap:RewindDisabled" shape=rect coords="64,16,79,31">
<area title="Bitmap:FFwd" shape=rect coords="80,0,95,15">
<area title="Bitmap:FFwdDisabled" shape=rect coords="80,16,95,31">
<area title="Bitmap:Record" shape=rect coords="96,0,111,15">
<area title="Bitmap:RecordDisabled" shape=rect coords="96,16,111,31">
<area title="Bitmap:CleanSpeech" shape=rect coords="112,0,127,15">
<area title="Bitmap:CleanSpeechDisabled" shape=rect coords="112,16,127,31">
<area title="Bitmap:ToolBarToggle" shape=rect coords="0,32,42,66">
<area title="Bitmap:ToolBarTarget" shape=rect coords="43,32,59,57">
<area title="Bitmap:ToolBarGrabber" shape=rect coords="60,32,76,39">
<area title="Bitmap:UpButton" shape=rect coords="0,67,47,114">
<area title="Bitmap:DownButton" shape=rect coords="48,67,95,114">
<area title="Bitmap:HiliteButton" shape=rect coords="96,67,143,114">
<area title="Bitmap:RecolouredUpButton" shape=rect coords="144,67,191,114">
<area title="Bitmap:RecolouredDownButton" shape=rect coords="0,115,47,162">
<area title="Bitmap:RecolouredHiliteButton" shape=rect coords="48,115,95,162">
<area title="Bitmap:IBeamCursor" shape=rect coords="0,163,31,194">
<area title="Bitmap:DrawCursor" shape=rect coords="0,195,31,226">
<area title="Bitmap:EnvCursor" shape=rect coords="32,163,63,194">
<area title="Bitmap:TimeCursor" shape=rect coords="32,195,63,226">
<area title="Bitmap:ZoomInCursor" shape=rect coords="64,163,95,194">
<area title="Bitmap:ZoomOutCursor" shape=rect coords="64,195,95,226">
<area title="Bitmap:LabelCursorLeft" shape=rect coords="96,163,127,194">
<area title="Bitmap:LabelCursorRight" shape=rect coords="96,195,127,226">
<area title="Bitmap:DisabledCursor" shape=rect coords="128,163,159,194">
<area title="Bitmap:Cut" shape=rect coords="0,227,25,250">
<area title="Bitmap:CutDisabled" shape=rect coords="0,251,25,274">
<area title="Bitmap:Copy" shape=rect coords="26,227,51,250">
<area title="Bitmap:CopyDisabled" shape=rect coords="26,251,51,274">
<area title="Bitmap:Paste" shape=rect coords="52,227,77,250">
<area title="Bitmap:PasteDisabled" shape=rect coords="52,251,77,274">
<